pax_global_header00006660000000000000000000000064141266033750014521gustar00rootroot0000000000000052 comment=944b7d5c5bb011f552c2f62fb3b60aee35b5ce94 r-cran-rcppdist-0.1.1/000077500000000000000000000000001412660337500145305ustar00rootroot00000000000000r-cran-rcppdist-0.1.1/DESCRIPTION000066400000000000000000000040571412660337500162440ustar00rootroot00000000000000Package: RcppDist Title: 'Rcpp' Integration of Additional Probability Distributions Version: 0.1.1 Authors@R: person(given = "JB", family = "Duck-Mayr", email = "j.duckmayr@gmail.com", role = c("aut", "cre"), comment = c(ORCID = "0000-0002-2231-1294")) Description: The 'Rcpp' package provides a C++ library to make it easier to use C++ with R. R and 'Rcpp' provide functions for a variety of statistical distributions. Several R packages make functions available to R for additional statistical distributions. However, to access these functions from C++ code, a costly call to the R functions must be made. 'RcppDist' provides a header-only C++ library with functions for additional statistical distributions that can be called from C++ when writing code using 'Rcpp' or 'RcppArmadillo'. Functions are available that return a 'NumericVector' as well as doubles, and for multivariate or matrix distributions, 'Armadillo' vectors and matrices. 'RcppDist' provides functions for the following distributions: the four parameter beta distribution; the location- scale t distribution; the truncated normal distribution; the truncated t distribution; a truncated location-scale t distribution; the triangle distribution; the multivariate normal distribution*; the multivariate t distribution*; the Wishart distribution*; and the inverse Wishart distribution*. Distributions marked with an asterisk rely on 'RcppArmadillo'. License: GPL (>= 2.0) URL: https://github.com/duckmayr/RcppDist BugReports: https://github.com/duckmayr/RcppDist/issues Depends: R (>= 3.0.0) Encoding: UTF-8 LazyData: true LinkingTo: Rcpp, RcppArmadillo Imports: Rcpp RoxygenNote: 6.1.0 Suggests: testthat, knitr, rmarkdown VignetteBuilder: knitr NeedsCompilation: yes Packaged: 2018-10-21 13:45:50 UTC; jb Author: JB Duck-Mayr [aut, cre] () Maintainer: JB Duck-Mayr Repository: CRAN Date/Publication: 2018-10-28 22:50:09 UTC r-cran-rcppdist-0.1.1/MD5000066400000000000000000000044331412660337500150440ustar00rootroot00000000000000720feae9d1aacf856d3bf0647ff84f97 *DESCRIPTION 91d2a2574f5945ad8ddb45248717ec58 *NAMESPACE 1763c9c80fc1fdaaa12c8fb18968807e *R/RcppDist-package.R 502d5a8db35752c6b5d24b7051adf2db *R/RcppExports.R 501e3ddc283d879e128e70d7adb58f53 *README.md a9ee96912647bde10e62a039dc20d9f8 *build/vignette.rds 6ae6d26d431ba0d2141ccde7e76b5663 *cleanup 596b8be17213c4e20bed77b642841b51 *configure 2132970104f9f43795a43698f7ba839c *configure.ac bbc07ec72cddb8d28f1c2a7ab322f031 *inst/doc/RcppDist.R 946a3c97e0a530f135594eea62d047fc *inst/doc/RcppDist.Rmd 24d9e6d73502fa448cc9ba09f53a584b *inst/doc/RcppDist.pdf 4d2aaa1bea45e4fc9cb381e757785d38 *inst/include/4beta.h e16f35ac3066b8db1079993ee4fd0e08 *inst/include/RcppDist.h db978d14101521ea3ed96b2ca03e36a0 *inst/include/lst.h cb6bc2f332824f1bd5d34096c028d58a *inst/include/mvnorm.h b8ebd7e27afd33ed54fa74b55ee06338 *inst/include/mvt.h e2c5bd2028a6193128cf33d50006c2c1 *inst/include/triangular.h 07b8511f93ac56c8e0801ec344d1b563 *inst/include/trunclst.h 5a681f0227a7f626fa606f8d4e08d015 *inst/include/truncnorm.h d7ca7e6a2fe1d09226c0c64b6edc4c5e *inst/include/trunct.h 425deadf994637d850884c76d02454bf *inst/include/wishart.h 164c1fa0772287f640f5f73549dbfd19 *man/RcppDist.Rd 33ceae90a601da120771bc1de7d3e634 *man/bayeslm.Rd 2d2549c75eb9068bb2da43f141f7d0b3 *src/Makevars.in fc3dc660b04615a4de5f018ebd0165ee *src/Makevars.win 77eeccc568d8dd82d21c2d975a022be9 *src/RcppExports.cpp f0226ea22e7c842fe08d3bb1ac2a2c22 *src/bayeslm.cpp 995c39c0268239b422796df97f2c7f0f *src/test_functions.cpp cabcb61ca3ad1e22a634b5f2eab75902 *tests/testthat.R 632be33bc36b3ffdfeed2518259c3ad6 *tests/testthat/test_4beta.R a087c6cc1f35e03d677fde06adfe4972 *tests/testthat/test_Wishart.R a6497bbbde09d912f978de37115564d8 *tests/testthat/test_bayeslm.R 6a6cab7ed6d3162c2a872e7424017acf *tests/testthat/test_inverse_Wishart.R 740784d13155b378b3e96ec2d93d9f54 *tests/testthat/test_lst.R 97bb574506c25c527a799c1833f67685 *tests/testthat/test_mvnorm.R c6992ce93f9f3716669bf4d36153f229 *tests/testthat/test_mvt.R dee5bdf234bec95769bde55298f3e156 *tests/testthat/test_triangular.R 848da918e110f1eb39c686f17c124662 *tests/testthat/test_trunclst.R d786755944232006ff61656323e3eeda *tests/testthat/test_truncnorm.R db1204e888581730114b48b222d6cbbe *tests/testthat/test_trunct.R 946a3c97e0a530f135594eea62d047fc *vignettes/RcppDist.Rmd r-cran-rcppdist-0.1.1/NAMESPACE000066400000000000000000000001551412660337500157500ustar00rootroot00000000000000# Generated by roxygen2: do not edit by hand export(bayeslm) importFrom(Rcpp,sourceCpp) useDynLib(RcppDist) r-cran-rcppdist-0.1.1/R/000077500000000000000000000000001412660337500147315ustar00rootroot00000000000000r-cran-rcppdist-0.1.1/R/RcppDist-package.R000066400000000000000000000042121412660337500201740ustar00rootroot00000000000000#' RcppDist #' #' 'Rcpp' Integration of Additional Probability Distributions #' #' The 'Rcpp' package provides a C++ library to make it easier to use C++ with #' R. R and 'Rcpp' provide functions for a variety of statistical #' distributions. Several R packages make functions available to R for #' additional statistical distributions. However, to access these functions #' from C++ code, a costly call to the R functions must be made. #' #' 'RcppDist' provides a header-only C++ library with functions for additional #' statistical distributions that can be called from C++ when writing code #' using 'Rcpp' or 'RcppArmadillo'. Functions are available that return a #' 'NumericVector' as well as doubles, and for multivariate or matrix #' distributions, 'Armadillo' vectors and matrices. #' RcppDist provides functions for the following distributions: #' \itemize{ #' \item The four parameter beta distribution #' \item The location-scale t distribution #' \item The truncated normal distribution #' \item The truncated t distribution #' \item A truncated location-scale t distribution #' \item The triangle distribution #' \item The multivariate normal distribution* #' \item The multivariate t distribution* #' \item The Wishart distribution* #' \item And the inverse Wishart distribution*. #' } #' #' Distributions marked with an asterisk rely also on RcppArmadillo. #' #' For more information on using 'RcppDist' functions in your C++ code, please #' consult the vignette via \code{vignette("RcppDist")}; the vignette explains #' how to link to the package and include the headers, which header files #' provide which functions, and also provides all function declarations #' (so that you can see the function and argument names and return/argument #' types; the arguments are also described in reasonable detail). You can also #' see an example of using the multivariate normal generator provided by #' 'RcppDist' in the function \code{\link{bayeslm}}. #' #' @name RcppDist #' @docType package #' @author JB Duck-Mayr #' @useDynLib RcppDist #' @importFrom Rcpp sourceCpp NULL .onUnload <- function (libpath) { library.dynam.unload('RcppDist', libpath) } r-cran-rcppdist-0.1.1/R/RcppExports.R000066400000000000000000000140001412660337500173400ustar00rootroot00000000000000# Generated by using Rcpp::compileAttributes() -> do not edit by hand # Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 #' bayeslm #' #' Demonstrates the use of RcppDist in C++ with Bayesian linear regression #' #' To see an example of using RcppDist C++ functions in C++ code, #' we can code up a Bayesian linear regression with completely uninformative #' priors (such that estimates should be equivalent to classical estimates). #' The code to do so is as follows: #' \preformatted{ #' #include #' // or, alternatively, #' // #include #' // #include #' #' // [[Rcpp::depends(RcppArmadillo, RcppDist)]] #' #' // [[Rcpp::export]] #' Rcpp::List bayeslm(const arma::vec& y, const arma::mat x, #' const int iters = 1000) { #' int n = x.n_rows; #' int p = x.n_cols; #' double a = (n - p) / 2.0; #' arma::mat xtx = x.t() * x; #' arma::mat xtxinv = xtx.i(); #' arma::vec mu = xtxinv * x.t() * y; #' arma::mat px = x * xtxinv * x.t(); #' double ssq = arma::as_scalar(y.t() * (arma::eye(n, n) - px) * y); #' ssq *= (1.0 / (n - p)); #' double b = 1.0 / (a * ssq); #' arma::mat beta_draws(iters, p); #' Rcpp::NumericVector sigma_draws(iters); #' for ( int iter = 0; iter < iters; ++iter ) { #' double sigmasq = 1.0 / R::rgamma(a, b); #' sigma_draws[iter] = sigmasq; #' // Here we can use our multivariate normal generator #' beta_draws.row(iter) = rmvnorm(1, mu, xtxinv * sigmasq); #' } #' return Rcpp::List::create(Rcpp::_["beta_draws"] = beta_draws, #' Rcpp::_["sigma_draws"] = sigma_draws); #' } #' } #' #' @param y A numeric vector -- the response #' @param x A numeric matrix -- the explanatory variables; note this assumes #' you have included a column of ones if you intend there to be an intercept. #' @param iters An integer vector of length one, the number of posterior draws #' desired; the default is 1000. #' #' @return A list of length two; the first element is a numeric matrix of the #' beta draws and the second element is a numeric vector of the sigma draws #' @examples #' set.seed(123) #' n <- 30 #' x <- cbind(1, matrix(rnorm(n*3), ncol = 3)) #' beta <- matrix(c(10, 2, -1, 3), nrow = 4) #' y <- x %*% beta + rnorm(n) #' freqmod <- lm(y ~ x[ , -1]) #' bayesmod <- bayeslm(y, x) #' round(unname(coef(freqmod)), 2) #' round(apply(bayesmod$beta_draws, 2, mean), 2) #' c(beta) #' @export bayeslm <- function(y, x, iters = 1000L) { .Call('_RcppDist_bayeslm', PACKAGE = 'RcppDist', y, x, iters) } test_d4beta <- function(x, shape1, shape2, a, b) { .Call('_RcppDist_test_d4beta', PACKAGE = 'RcppDist', x, shape1, shape2, a, b) } test_p4beta <- function(x, shape1, shape2, a, b) { .Call('_RcppDist_test_p4beta', PACKAGE = 'RcppDist', x, shape1, shape2, a, b) } test_q4beta_nolog <- function(x, shape1, shape2, a, b) { .Call('_RcppDist_test_q4beta_nolog', PACKAGE = 'RcppDist', x, shape1, shape2, a, b) } test_q4beta_log <- function(x, shape1, shape2, a, b) { .Call('_RcppDist_test_q4beta_log', PACKAGE = 'RcppDist', x, shape1, shape2, a, b) } test_dlst <- function(x, df, mu, sigma) { .Call('_RcppDist_test_dlst', PACKAGE = 'RcppDist', x, df, mu, sigma) } test_plst <- function(x, df, mu, sigma) { .Call('_RcppDist_test_plst', PACKAGE = 'RcppDist', x, df, mu, sigma) } test_qlst_nolog <- function(x, df, mu, sigma) { .Call('_RcppDist_test_qlst_nolog', PACKAGE = 'RcppDist', x, df, mu, sigma) } test_qlst_log <- function(x, df, mu, sigma) { .Call('_RcppDist_test_qlst_log', PACKAGE = 'RcppDist', x, df, mu, sigma) } test_dtruncnorm <- function(x, mu, sigma, a, b) { .Call('_RcppDist_test_dtruncnorm', PACKAGE = 'RcppDist', x, mu, sigma, a, b) } test_ptruncnorm <- function(x, mu, sigma, a, b) { .Call('_RcppDist_test_ptruncnorm', PACKAGE = 'RcppDist', x, mu, sigma, a, b) } test_qtruncnorm_nolog <- function(x, mu, sigma, a, b) { .Call('_RcppDist_test_qtruncnorm_nolog', PACKAGE = 'RcppDist', x, mu, sigma, a, b) } test_qtruncnorm_log <- function(x, mu, sigma, a, b) { .Call('_RcppDist_test_qtruncnorm_log', PACKAGE = 'RcppDist', x, mu, sigma, a, b) } test_dtrunct <- function(x, df, a, b) { .Call('_RcppDist_test_dtrunct', PACKAGE = 'RcppDist', x, df, a, b) } test_ptrunct <- function(x, df, a, b) { .Call('_RcppDist_test_ptrunct', PACKAGE = 'RcppDist', x, df, a, b) } test_qtrunct_nolog <- function(x, df, a, b) { .Call('_RcppDist_test_qtrunct_nolog', PACKAGE = 'RcppDist', x, df, a, b) } test_qtrunct_log <- function(x, df, a, b) { .Call('_RcppDist_test_qtrunct_log', PACKAGE = 'RcppDist', x, df, a, b) } test_dtrunclst <- function(x, df, mu, sigma, a, b) { .Call('_RcppDist_test_dtrunclst', PACKAGE = 'RcppDist', x, df, mu, sigma, a, b) } test_ptrunclst <- function(x, df, mu, sigma, a, b) { .Call('_RcppDist_test_ptrunclst', PACKAGE = 'RcppDist', x, df, mu, sigma, a, b) } test_qtrunclst_nolog <- function(x, df, mu, sigma, a, b) { .Call('_RcppDist_test_qtrunclst_nolog', PACKAGE = 'RcppDist', x, df, mu, sigma, a, b) } test_qtrunclst_log <- function(x, df, mu, sigma, a, b) { .Call('_RcppDist_test_qtrunclst_log', PACKAGE = 'RcppDist', x, df, mu, sigma, a, b) } test_dtri <- function(x, a, b, c) { .Call('_RcppDist_test_dtri', PACKAGE = 'RcppDist', x, a, b, c) } test_ptri <- function(x, a, b, c) { .Call('_RcppDist_test_ptri', PACKAGE = 'RcppDist', x, a, b, c) } test_qtri_nolog <- function(x, a, b, c) { .Call('_RcppDist_test_qtri_nolog', PACKAGE = 'RcppDist', x, a, b, c) } test_qtri_log <- function(x, a, b, c) { .Call('_RcppDist_test_qtri_log', PACKAGE = 'RcppDist', x, a, b, c) } test_dmvnorm <- function(x, mu, S) { .Call('_RcppDist_test_dmvnorm', PACKAGE = 'RcppDist', x, mu, S) } test_dmvt <- function(x, mu, S, df) { .Call('_RcppDist_test_dmvt', PACKAGE = 'RcppDist', x, mu, S, df) } test_dwish <- function(x, df, S) { .Call('_RcppDist_test_dwish', PACKAGE = 'RcppDist', x, df, S) } test_diwish <- function(x, df, S) { .Call('_RcppDist_test_diwish', PACKAGE = 'RcppDist', x, df, S) } r-cran-rcppdist-0.1.1/README.md000066400000000000000000000045521412660337500160150ustar00rootroot00000000000000# RcppDist [![Travis-CI Build Status](https://travis-ci.org/duckmayr/RcppDist.svg?branch=master)](https://travis-ci.org/duckmayr/RcppDist) [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/duckmayr/RcppDist?branch=master&svg=true)](https://ci.appveyor.com/project/duckmayr/RcppDist) [![Coverage Status](https://codecov.io/github/duckmayr/RcppDist/graph/badge.svg)](https://codecov.io/github/duckmayr/RcppDist) [![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-blue.svg)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) The [Rcpp package](https://github.com/RcppCore/Rcpp) provides a C++ library to make it easier to use C++ with R. R and Rcpp provide functions for a variety of statistical distributions. Several R packages make functions available to R for additional statistical distributions. However, to access these functions from C++ code, a costly call to the R functions must be made. **RcppDist** provides a C++ library with functions for additional statistical distributions that can be called from C++ when writing code using Rcpp or [RcppArmadillo](https://github.com/RcppCore/RcppArmadillo). Functions are available that return NumericVectors as well as doubles, and for multivariate or matrix distributions, Armadillo vectors and matrices. RcppDist will provide functions for the following distributions: - The four parameter beta distribution - The location-scale t distribution - The truncated normal distribution - The truncated t distribution - A truncated location-scale t distribution - The triangular distribution - The multivariate normal distribution* - The multivariate t distribution* - The Wishart distribution* - The inverse Wishart distribution* Distributions marked with an asterisk rely on RcppArmadillo; if a user would prefer to use Rcpp but *not* RcppArmadillo (i.e. include the Rcpp headers but not the RcppArmadillo headers), include the line #define RCPPDIST_DONT_USE_ARMA before including `RcppDist.h`, though this will make the asterisked distributions unavailable. The distributions above were selected for inclusion because I already had occasion to generate C++ code for use with Rcpp (or RcppArmadillo) for these distributions, but I am open to requests to expand the package to include additional distributions -- just open an issue with the requested feature. ### License GPL (>= 2) r-cran-rcppdist-0.1.1/build/000077500000000000000000000000001412660337500156275ustar00rootroot00000000000000r-cran-rcppdist-0.1.1/build/vignette.rds000066400000000000000000000003161412660337500201660ustar00rootroot00000000000000b```b`fed`b2 1# ' J.(p,. MA)x委&d4 % M a8%` `aBRɚZ% 5/$~hZ8S+`zP԰Aհe ,s\ܠL t7`~΢r=xA$Gs=ʕXVr7yoֹr-cran-rcppdist-0.1.1/cleanup000077500000000000000000000000501412660337500161000ustar00rootroot00000000000000#!/bin/sh rm -f config.* src/Makevars r-cran-rcppdist-0.1.1/configure000077500000000000000000003216511412660337500164470ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for RcppDist 0.1.0. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='RcppDist' PACKAGE_TARNAME='rcppdist' PACKAGE_VERSION='0.1.0' PACKAGE_STRING='RcppDist 0.1.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_subst_vars='LTLIBOBJS LIBOBJS OPENMP_FLAG OPENMP_CFLAG CXXCPP OBJEXT EXEEXT ac_ct_CXX CPPFLAGS LDFLAGS CXXFLAGS CXX target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking ' ac_precious_vars='build_alias host_alias target_alias CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC CXXCPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures RcppDist 0.1.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/rcppdist] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of RcppDist 0.1.0:";; esac cat <<\_ACEOF Some influential environment variables: CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXXCPP C++ preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF RcppDist configure 0.1.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by RcppDist $as_me 0.1.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ## Set R_HOME, respecting an environment variable if one is set : ${R_HOME=$(R RHOME)} if test -z "${R_HOME}"; then as_fn_error $? "Could not determine R_HOME." "$LINENO" 5 fi ## Use R to set CXX and CXXFLAGS CXX=$(${R_HOME}/bin/R CMD config CXX) CXXFLAGS=$("${R_HOME}/bin/R" CMD config CXXFLAGS) ## We are using C++ ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 $as_echo_n "checking whether the C++ compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C++ compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 $as_echo_n "checking for C++ compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ## Default the OpenMP flag to the empty string. ## If and only if OpenMP is found, expand to $(SHLIB_OPENMP_CXXFLAGS) openmp_flag="" openmp_cflag="" ## Check for broken systems produced by a corporation based in Cupertino { $as_echo "$as_me:${as_lineno-$LINENO}: checking for macOS" >&5 $as_echo_n "checking for macOS... " >&6; } RSysinfoName=$("${R_HOME}/bin/Rscript" --vanilla -e 'cat(Sys.info()["sysname"])') if test x"${RSysinfoName}" == x"Darwin"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 $as_echo "found" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: OpenMP unavailable and turned off." >&5 $as_echo "$as_me: WARNING: OpenMP unavailable and turned off." >&2;} openmp_flag="-DARMA_DONT_USE_OPENMP" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found as on ${RSysinfoName}" >&5 $as_echo "not found as on ${RSysinfoName}" >&6; } ## Check for OpenMP { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenMP" >&5 $as_echo_n "checking for OpenMP... " >&6; } ## if R has -fopenmp we should be good allldflags=$(${R_HOME}/bin/R CMD config --ldflags) hasOpenMP=$(echo ${allldflags} | grep -- -fopenmp) if test x"${hasOpenMP}" == x""; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: missing" >&5 $as_echo "missing" >&6; } openmp_flag="-DARMA_DONT_USE_OPENMP" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 $as_echo "found" >&6; } openmp_flag='$(SHLIB_OPENMP_CXXFLAGS)' openmp_cflag='$(SHLIB_OPENMP_CFLAGS)' fi fi OPENMP_CFLAG="${openmp_cflag}" OPENMP_FLAG="${openmp_flag}" ac_config_files="$ac_config_files src/Makevars" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by RcppDist $as_me 0.1.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ RcppDist config.status 0.1.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "src/Makevars") CONFIG_FILES="$CONFIG_FILES src/Makevars" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi r-cran-rcppdist-0.1.1/configure.ac000066400000000000000000000037111412660337500170200ustar00rootroot00000000000000## -*- mode: autoconf; autoconf-indentation: 4; -*- ## ## Copyright (C) 2016 - 2017 Dirk Eddelbuettel for ## the RcppArmadillo package. Licensed under GPL-2 or later ## This file is a subset of the configure.ac used by ## RcppArmadillo, adapted for the mfbvar package by ## Sebastian Ankargren, and used with slight modification for the ## RcppDist package by JB Duck-Mayr ## require at least autoconf 2.61 AC_PREREQ(2.61) ## Process this file with autoconf to produce a configure script. AC_INIT([RcppDist], 0.1.0) ## Set R_HOME, respecting an environment variable if one is set : ${R_HOME=$(R RHOME)} if test -z "${R_HOME}"; then AC_MSG_ERROR([Could not determine R_HOME.]) fi ## Use R to set CXX and CXXFLAGS CXX=$(${R_HOME}/bin/R CMD config CXX) CXXFLAGS=$("${R_HOME}/bin/R" CMD config CXXFLAGS) ## We are using C++ AC_LANG(C++) AC_REQUIRE_CPP ## Default the OpenMP flag to the empty string. ## If and only if OpenMP is found, expand to $(SHLIB_OPENMP_CXXFLAGS) openmp_flag="" openmp_cflag="" ## Check for broken systems produced by a corporation based in Cupertino AC_MSG_CHECKING([for macOS]) RSysinfoName=$("${R_HOME}/bin/Rscript" --vanilla -e 'cat(Sys.info()[["sysname"]])') if test x"${RSysinfoName}" == x"Darwin"; then AC_MSG_RESULT([found]) AC_MSG_WARN([OpenMP unavailable and turned off.]) openmp_flag="-DARMA_DONT_USE_OPENMP" else AC_MSG_RESULT([not found as on ${RSysinfoName}]) ## Check for OpenMP AC_MSG_CHECKING([for OpenMP]) ## if R has -fopenmp we should be good allldflags=$(${R_HOME}/bin/R CMD config --ldflags) hasOpenMP=$(echo ${allldflags} | grep -- -fopenmp) if test x"${hasOpenMP}" == x""; then AC_MSG_RESULT([missing]) openmp_flag="-DARMA_DONT_USE_OPENMP" else AC_MSG_RESULT([found]) openmp_flag='$(SHLIB_OPENMP_CXXFLAGS)' openmp_cflag='$(SHLIB_OPENMP_CFLAGS)' fi fi AC_SUBST([OPENMP_CFLAG], ["${openmp_cflag}"]) AC_SUBST([OPENMP_FLAG], ["${openmp_flag}"]) AC_CONFIG_FILES([src/Makevars]) AC_OUTPUT r-cran-rcppdist-0.1.1/inst/000077500000000000000000000000001412660337500155055ustar00rootroot00000000000000r-cran-rcppdist-0.1.1/inst/doc/000077500000000000000000000000001412660337500162525ustar00rootroot00000000000000r-cran-rcppdist-0.1.1/inst/doc/RcppDist.R000066400000000000000000000002121412660337500201200ustar00rootroot00000000000000## ----setup, include = FALSE---------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) r-cran-rcppdist-0.1.1/inst/doc/RcppDist.Rmd000066400000000000000000000535561412660337500204640ustar00rootroot00000000000000--- title: "RcppDist Introduction" author: "JB Duck-Mayr" date: "`r Sys.Date()`" output: pdf_document vignette: > %\VignetteIndexEntry{RcppDist Introduction} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` The Rcpp package provides a C++ library to make it easier to use C++ with R. R and Rcpp provide functions for a variety of statistical distributions. Several R packages make functions available to R for additional statistical distributions. However, to access these functions from C++ code, a costly call to the R functions must be made.\footnote{Some of the R packages alluded to have written these functions in C++ (in some cases using Rcpp). However, these packages do not make such functions available as a header library for other package writers intending to make use of the functions in C++ code, thus the motivation for this package.} RcppDist provides a C++ header-only library with functions for additional statistical distributions that can be called from C++ when writing code using Rcpp or RcppArmadillo. Functions are available that return NumericVectors as well as doubles, and for multivariate or matrix distributions, Armadillo vectors and matrices. RcppDist provides functions for the following distributions: - the four parameter beta distribution - the location-scale t distribution - the truncated normal distribution - the truncated t distribution - a truncated location-scale t distribution - the triangle distribution - the multivariate normal distribution* - the multivariate t distribution* - the Wishart distribution* - the inverse Wishart distribution* Distributions marked with an asterisk rely on RcppArmadillo. After discussing how to include `RcppDist` headers into your code to use these functions, each function provided by the package is listed (such that you can see the function and argument names, as well as the return and argument types), with a brief explanation. # Including RccpDist in Your Code RcppDist provides several header files you can include in your code. `RcppDist.h` includes all of them, as well as `Rcpp.h` or `RcppArmadillo.h` as appropriate (see "Use Rpp, or RcppArmadillo?" below). So, in any C++ file you need to use functions from RcppDist, you can simply use ```{Rcpp full-include, eval = FALSE} #include ``` which will also take care of Rcpp(Armadillo) headers for you. You can alternatively pull in only the header(s) you need; for example, if you only need functions for the four parameter beta distribution, you can just use ```{Rcpp partial-include, eval = FALSE} #include <4beta.h> ``` However, you'll then be responsible for pulling in Rcpp/RcppArmadillo headers as appropriate. The header names that correspond to the various distributions are as follows: \newpage | Distribution | Header | |:----------------------------|:--------------| | Four Parameter Beta | 4beta.h | | Location-Scale t | lst.h | | Truncated Normal | truncnorm.h | | Truncated t | trunct.h | | Truncated Location-Scale t | trunclst.h | | Triangle | triangular.h | | Multivariate Normal | mvnorm.h | | Multivariate t | mvt.h | | Wishart and Inverse Wishart | wishart.h | ## Using Rcpp, or RcppArmadillo? Including `RcppDist.h` by default will pull in the RcppArmadillo headers (and therefore the Rcpp headers), as well as the RcppDist headers. If you would prefer to use Rcpp but *not* RcppArmadillo (i.e. include the Rcpp headers but not the RcppArmadillo headers), include the line ```{Rcpp dont-use-arma, eval = FALSE} #define RCPPDIST_DONT_USE_ARMA ``` before any inclusion of `RcppDist.h`, though this will make the asterisked (multivariate and Wishart) distributions unavailable. ## Using RcppDist in a Package ### With Rcpp To use RcppDist in a package that does not link to RcppArmadillo, you must - Set up your package to use `Rcpp`, such as via `Rcpp::Rcpp.package.skeleton(your_package)` or `devtools::use_rcpp(your_package)`.\footnote{See the Rcpp-package vignette from Rcpp for more details.} - Add RcppDist to the LinkingTo field of your DESCRIPTION file. - In any C++ file that calls a `RcppDist` function, add `#include ` (or a more specific header from the package such as `lst.h` and `Rcpp.h`) - Remember to define `RCPPDIST_DONT_USE_ARMA` before any include of `RcppDist.h`. ### With RcppArmadillo To use RcppDist in a package that links to RcppArmadillo, you must - Set up your package to use `RcppArmadillo`, such as via `RcppArmadillo::RcppArmadillo.package.skeleton(your_package)`\footnote{See the RcppArmadillo manual or help files for more details, in particular the `RcppArmadillo-package' and `RcppArmadillo.package.skeleton' entries.} - Add RcppDist to the LinkingTo field of your DESCRIPTION file. - In any C++ file that calls a `RcppDist` function, add `#include ` (or a more specific header from the package such as `mvt.h` and `RcppArmadillo.h`) ## Using RcppDist in a Standalone file ### With Rcpp If you are using RcppDist in a standalone file (i.e., not as part of a package), and you don't want to pull in the Armadillo headers, you'll need ```{Rcpp standalone-noarma-full, eval = FALSE} #define RCPPDIST_DONT_USE_ARMA #include // [[Rcpp::depends(RcppDist)]] ``` at the top of your file. If you want to pull in just one or more of the distribution specific headers, you won't need the define, but don't forget to also include `Rcpp.h`; as an example: ```{Rcpp standalone-noarma-partial, eval = FALSE} #include #include // [[Rcpp::depends(RcppDist)]] ``` ### With RcppArmadillo If you are using RcppDist in a standalone file (i.e., not as part of a package), and you do want the Armadillo headers, you'll need ```{Rcpp standalone-arma-full, eval = FALSE} #include // [[Rcpp::depends(RcppArmadillo, RcppDist)]] ``` at the top of your file. If you want to pull in just one or more of the distribution specific headers, don't forget to also include `RcppArmadillo.h`; as an example: ```{Rcpp standalone-arma-partial, eval = FALSE} #include #include // [[Rcpp::depends(RcppArmadillo, RcppDist)]] ``` # RcppDist Functions Much like distributions in R, functions are prefixed by d, p, q, and r to mean density, distribution, quantile, and random number generating functions respectively. Functions that return a double rather than, say, a NumericVector are instead prefixed by d_, p_, q_, and r_. Below are more detailed descriptions of the functions provided by each header. ## 4beta.h (Four Parameter Beta Distribution) The four parameter beta distribution is a beta distribution supported over an interval $[a, b]$ rather than only $[0, 1]$. The functions provided in this header are: ```{Rcpp 4beta, eval = FALSE} Rcpp::NumericVector d4beta(const Rcpp::NumericVector& x, const double shape1, const double shape2, const double a, const double b, const bool log_p = false) Rcpp::NumericVector p4beta(const Rcpp::NumericVector& q, const double shape1, const double shape2, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector q4beta(const Rcpp::NumericVector& p, const double shape1, const double shape2, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector r4beta(const int n, const double shape1, const double shape2, const double a, const double b) double d_4beta(const double x, const double shape1, const double shape2, const double a, const double b, const int log_p = 0) double p_4beta(const double q, const double shape1, const double shape2, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double q_4beta(const double p, const double shape1, const double shape2, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double r_4beta(const double shape1, const double shape2, const double a, const double b) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `shape1` and `shape2` are the positive shape parameters of the Beta distribution - `a` and `b` are the minimum and maximum values of the distribution respectively - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## lst.h (Location-Scale t Distribution) The location-scale t distribution is a t distribution shifted by a location parameter $\mu$ and scaled by a scaling parameter $\sigma$. The functions provided in this header are: ```{Rcpp lst, eval = FALSE} Rcpp::NumericVector dlst(const Rcpp::NumericVector& x, const double df, const double mu, const double sigma, const bool log_p = false) Rcpp::NumericVector plst(const Rcpp::NumericVector& q, const double df, const double mu, const double sigma, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector qlst(const Rcpp::NumericVector& p, const double df, const double mu, const double sigma, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector rlst(const int n, const double df, const double mu, const double sigma) double d_lst(const double x, const double df, const double mu, const double sigma, const int log_p = 0) double p_lst(const double q, const double df, const double mu, const double sigma, const int lower_tail = 1, const int log_p = 0) double q_lst(const double p, const double df, const double mu, const double sigma, const int lower_tail = 1, const int log_p = 0) double r_lst(const double df, const double mu, const double sigma) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `df` is the positive degrees of freedom - `mu` is the location/shifting parameter - `sigma` is the scaling parameter - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## truncnorm.h (Truncated Normal Distribution) The truncated normal distribution is a normal distribution supported over an interval $[a, b]$ rather than $(-\infty, \infty)$. The functions provided in this header are: ```{Rcpp truncnorm, eval = FALSE} Rcpp::NumericVector dtruncnorm(const Rcpp::NumericVector& x, const double mu, const double sigma, const double a, const double b, const bool log_p = false) Rcpp::NumericVector ptruncnorm(const Rcpp::NumericVector& x, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector qtruncnorm(const Rcpp::NumericVector& p, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector rtruncnorm(const int n, const double mu, const double sigma, const double a, const double b) double d_truncnorm(const double x, const double mu, const double sigma, const double a, const double b, const int log_p = 0) double p_truncnorm(const double x, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double q_truncnorm(const double p, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double r_truncnorm(const double mu, const double sigma, const double a, const double b) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `mu` is the mean of the distribution - `sigma` is the standard deviation - `a` and `b` are the minimum and maximum values of the distribution respectively - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## trunct.h (Truncated t Distribution) The truncated t distribution is a t distribution supported over an interval $[a, b]$ rather than $(-\infty, \infty)$. The functions provided in this header are: ```{Rcpp trunct, eval = FALSE} Rcpp::NumericVector dtrunct(const Rcpp::NumericVector& x, const double df, const double a, const double b, const bool log_p = false) Rcpp::NumericVector ptrunct(const Rcpp::NumericVector& x, const double df, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector qtrunct(const Rcpp::NumericVector& p, const double df, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector rtrunct(const int n, const double df, const double a, const double b) double d_trunct(const double x, const double df, const double a, const double b, const int log_p = 0) double p_trunct(const double x, const double df, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double q_trunct(const double p, const double df, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double r_trunct(const double df, const double a, const double b) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `df` is the positive degrees of freedom - `a` and `b` are the minimum and maximum values of the distribution respectively - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## trunclst.h (Truncated Location-Scale t Distribution) The truncated location-scale t distribution is a location-scale t distribution supported over an interval $[a, b]$ rather than $(-\infty, \infty)$. The functions provided in this header are: ```{Rcpp trunclst, eval = FALSE} Rcpp::NumericVector dtrunclst(const Rcpp::NumericVector& x, const double df, const double mu, const double sigma, const double a, const double b, const bool log_p = false) Rcpp::NumericVector ptrunclst(const Rcpp::NumericVector& x, const double df, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector qtrunclst(const Rcpp::NumericVector& p, const double df, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector rtrunclst(const int n, const double df, const double mu, const double sigma, const double a, const double b) double d_trunclst(const double x, const double df, const double mu, const double sigma, const double a, const double b, const int log_p = 0) double p_trunclst(const double x, const double df, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double q_trunclst(const double p, const double df, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double r_trunclst(const double df, const double mu, const double sigma, const double a, const double b) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `df` is the positive degrees of freedom - `mu` is the location/shifting parameter - `sigma` is the scaling parameter - `a` and `b` are the minimum and maximum values of the distribution respectively - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## triangular.h (Triangle Distribution) The triangle (or triangular) distribution is supported over an interval $[a, b]$ with a mode $c$; as the name suggests, the density function is shaped like a triangle with vertices at $a$, $b$, and $c$. The functions provided in this header are: ```{Rcpp triangle, eval = FALSE} double d_tri(const double x, const double a, const double b, const double c, const int log_p = 0) double p_tri(const double x, const double a, const double b, const double c, const int lower_tail = 1, const int log_p = 0) double q_tri(const double p, const double a, const double b, const double c, const int lower_tail = 1, const int log_p = 0) double r_tri(const double a, const double b, const double c) Rcpp::NumericVector dtri(const Rcpp::NumericVector& x, const double a, const double b, const double c, const bool log_p = false) Rcpp::NumericVector ptri(const Rcpp::NumericVector& x, const double a, const double b, const double c, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector qtri(const Rcpp::NumericVector& p, const double a, const double b, const double c, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector rtri(const int n, const double a, const double b, const double c) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `a` and `b` are the minimum and maximum values of the distribution respectively - `c` is the mode of the distribution - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## mvnorm.h (Multivariate Normal Distribution) The multivariate normal distribution is a generalization of the normal distribution to multiple dimensions. Then each draw is a vector, the mean parameter $\mu$ is a vector, and rather than a scalar standard deviation parameter $\sigma$, we have a covariance matrix $\Sigma$ (or here denoted $S$). The functions provided in this header are: ```{Rcpp mvnorm, eval = FALSE} arma::vec dmvnorm(const arma::mat& x, const arma::vec& mu, const arma::mat& S, const bool log_p = false) arma::mat rmvnorm(const arma::uword n, const arma::vec& mu, const arma::mat& S) ``` Where - `x` is a matrix of quantiles, such that each row is a quantile - `n` is the numer of observations to draw - `mu` is the mean vector - `S` is the covariance matrix - `log_p` is a `bool` (the default is `false`); if `true`, the probabilities are given as $\log(p)$ ## mvt.h (Multivariate t Distribution) The multivariate t distribution is a generalization of the t distribution to multiple dimensions. Then each draw is a vector, and in addition to the degrees of freedom, we have a correlation matrix $\Sigma$ (or here denoted $S$), and this implementation allows for a location vector $\mu$. The functions provided in this header are: ```{Rcpp mvt, eval = FALSE} arma::vec dmvt(const arma::mat& x, const arma::vec& mu, const arma::mat& S, const double df, const bool log_p = false) arma::mat rmvt(const arma::uword n, const arma::vec& mu, const arma::mat& S, const double df) ``` Where - `x` is a matrix of quantiles, such that each row is a quantile - `n` is the numer of observations to draw - `mu` is the location vector - `S` is the correlation matrix - `log_p` is a `bool` (the default is `false`); if `true`, the probabilities are given as $\log(p)$ ## wishart.h (Wishart and Inverse Wishart Distributions) The Wishart distribution is a generalization of the gamma distribution to multiple dimensions defined over symmetric, nonnegative-definite random matrices. Its parameters are the degrees of freedom and a scale matrix $S$. If $X \sim$ Wishart(df, $S$), then $X^{-1} \sim$ Inverse Wishart(df, $S^{-1}$). Due to their use in the density functions for these distributions, a multivariate gamma function and logged multivariate gamma function are also provided. Note that for now, all functions for this distribution are designed to deal with only one random matrix. The functions provided in this header are: ```{Rcpp wishart, eval = FALSE} double mvgamma(const int p, const double x) double lmvgamma(const int p, const double x) double dwish(const arma::mat& X, const int df, const arma::mat& S, const bool log_p = false) arma::mat rwish(const int df, const arma::mat& S) double diwish(const arma::mat& X, const int df, const arma::mat& S, const bool log_p = false) arma::mat riwish(const int df, const arma::mat& S) ``` Where - `p` and `x` are the arguments to the multivariate gamma function - `X` is a matrix, a draw from the Wishart or Inverse Wishart distribution - `df` is the degrees of feedom - `S` is the scale matrix - `log_p` is a `bool` (the default is `false`); if `true`, the probabilities are given as $\log(p)$ r-cran-rcppdist-0.1.1/inst/doc/RcppDist.pdf000066400000000000000000011075601412660337500205070ustar00rootroot00000000000000%PDF-1.5 % 78 0 obj << /Length 2467 /Filter /FlateDecode >> stream xn_AѝriI&@(2y%b-*I߳"%̠qxsϾQGw[GV$!YEXelI,~ji$z6z7oQyA Un7#aq?xl^`S9&=!N YEFi DQ7l(ߛ-ܽYLo̦}q'[{@fjYR~7mS4HSrh⃍JR+䦫Nѕ'w> 7?xB\TIx3IrdI{z\91/& IW3t,TD_뷉4b}rgjVi#<Q4ŶJTT+xzn.O9vz(=n`Jѝ©k@KjPp 1zw).@/dXUz\^B-DQ^Vh^jGNV1֫\SofEsO1JLGx X)ZU{ϳ$r0Ҁ0Ս5 r+R@CRH¥01ab[l\HݘqA!<4Dp Z'79k B#p`g)NCT:_H\5w,EY|P.DoDFJLJER76 ?k^,?ˋ^ڲ4N@$h5q0)Irq-q\`A%YIȮΟ"qϩD TWr>nBIaq)v1HB%O J{1I%5g.,(8sB:2|mdgŊMN>Xipe$M(VXaظQq6(zS~toAeANTV-[ʽsZ(6x&RP)ɼ2PpN. !OѿbL2Lor;[SZ }PAmCHٖSXV&\\NܙVeZz|+L-/=aB*.`~SA^m<H~詭>_ns3%ɕ6 Tk24b{>up>CzДocCUj z^Kk&HPf6UY*7<Ήƺ|]%J$sOA*%Cbּl R,40P^t⍤zC+9H'.6aGFQB "½(Du]nȴyBH)p,2qgF݃cQU3C=6 5ۥ?G?8&.?򿥛c&* C/m&#g ,!B@ꕲl,췜Qixtl¤)=/̊;*=#tI456XyQl>:t8hz|7bE{<NԠX4?%qd62YLxfQRoΡdvI߇*vYdѻzDq˦p,2e4C!<,)S@Ö-0HHرXI(%.ʡ$A Fy58}/yfߞȤ%m;-fXlͳ1]aѯ./$ ?1: j@]G0d1fՑvR]yQغHIKgj^+Z~|'|l(BGԽltTD:ΣUq%hE endstream endobj 97 0 obj << /Length 2117 /Filter /FlateDecode >> stream xYKs6W*PK`jk&3ĩdⵕC&p,b %*$)tA%M+oL \/rdq櫉qi&2M,",}Yt$Qѱz?I=, g%35os,ͫxt$:;L9E) H gHu̫I_`)`k`OvvV\E8qNeC: )p0+':'(.^0 XQeț|f4XMhV.4H3z8u(ttD" a#"5S6Hc[@"Ϋu[z UUeȃTAsM\!{O!]D%Zμ|}q=y͏on^^}=8.j-~${:qL,5wRO${'| zɄk٘P{7w [-U4YLzﻒMۍR,+%MaN ͱptsX9y5=Cihu7Aw\@}85Bf2>>ꈓ, Gd3#!q-f^# z )O5rT79q{\?֩&3Fn=ewnq+}fJlj4: mè#bi'|-ȓ).Rb-T:{Z1>8b/4ut-a'/x|ACy5NayB4'. ޽ wԛLc9/_x]SuGP2BTB endstream endobj 106 0 obj << /Length 1960 /Filter /FlateDecode >> stream xY]o6}@+6-~KI-6uo`hFGi,iHNu}/%y!DWQ8Hs%#JI&%ff IfEtԖ12>[l6ʶZYo?*U]7be̾;yuL1e$1+?n )wcI`D%<l ^)C+ycCq:\蜻СCݗeRCZ~Mǒ /1G"}E]K?ЯS^Yk~jV Vd."#\.Ҡ':/ժiڣQ _<)IMC^AHB'4ZlOID?5"s 3p S.3DP\6k$t|ճo_.\<9{Z| Z qA\"%iDd'˯vv2c?(pzZB$d٨=dyj zD,ؚ('B&HHb:@D+F{6 ƌc,JrB,JE0Һҕ 9|;P2 x|Y7WƗ;#)x%a\ĴIB{(,tĺy7+s(Jڐ| %UB9ԝDv746@\C}hwfC-$ݔɡrĐ鵐i{q@ JRBj!$⢞oO-PNX! ո"7N(Վ.I<&\Td"@QBG^=<“B. 9',Yl N@[wDh64}Lđ6*@><ֹwJ Тh)Oq6 )PJh+dUX>&9p|*+/tJT%yaQ^Tv`>~xoY?x@~;pBfP;^tf"V /1r`d!r%jUbkH Fiey#5/27Kqap(^nvz/ .JH a Fw~wzmY\ٗ{g\SǦoW2Mޡ<:ac[oYA,vGMN%6ָ6sX۹t.D &Ax2zr~|Ko'۵iBu~PVm'V6 rqa=$޸Ђk } 2~j@2qf3]VZhMX,hqǝ+bR)Π),=L«'^8Iǣpr Ϩ2qDa-Gk lL>pP(QF4S3-ܿJ6wP+D@KGo-46(*U1#9y{(ud*8 cUx+H[vB!FF=>aj? qiq2NLVԪWE7G@}o0BGH"U;N -v xzLgDf|*DzVP}=ZUplwVkC!-K~ʺIt?jv)"?_wG@P(2!ڰ,T>,n ]C?!64#a%Id4^ cU_]l0}̓i2dܔDWKþ;1 d z 7뻢]i.EgIF]}Ih kT`cQqH&̬x$hUѱ`D|*=) endstream endobj 113 0 obj << /Length 1767 /Filter /FlateDecode >> stream x[[o6~ϯ5;Cf0 [glm9$7ߡHɒ-v|%$w){~iE֯ջZ=I0!>"\{ɍyGB^z?+SM^2O#-z#OQOa"^o/_q4++,x?LzJi`lWW 7MNp"x3r5|~/g 9 -`%F̡䦪]ʌ,9IImq~YF`,AeČ]:h. O0bUhDZ$RU~+evÏϑ|fӤ]-D%iY=irYA}MO,ʓIFsğ*?}k_2{g?YRk;DEm~E+]lǷlqz w6qwOdi)b@*;|4P$}z+s|]AXY ]GBI2:e0~'abq8nI'mNMt+ $Kw;5Rq~p t@fzCvFjf.#DIIfnᜂ3gKܨ՜u576 E}z}w9fc*1Uv4\*380>Y 5*1f$EݤT(cCu]|=x9DK0 cgܔ7Pڜ$Ҙц$sfC m'4ri|y7&sL|$ p{:Lj8L{_v# FP^jPDr `<1I{M?^jb}yC |fk"8C4S#O(XS{% "PɑfBl$&*5eg9Ul`ˌs 7t\c6#xDyiu);.g4*kD@/$B@Lf #༱|!(bF #zQcE9 U᭴vtHRYkGէfsM(pWVCuR҇dw m@\eYZF&Rא,>2X! 1W[ƮLTؘ)J5<Ct% t2(uMkUńrA#<[Ш-rҬ_f,;e%I#W"_M+G:9V^SEɳy}%"HrͰP"&rƚ͚(+qxJ;lkJJ> stream x[ݏ6߿.^bSm>SV;H Y$ !w B7ܕ7oƆ`kja\^'`VMm>*![r< \(GIkکP2w!ϡ5XZ%`jW[A=G,acA 4Yi4nDzxuBB@ɵ @8 Oµ3e')J.$q%s?o?P|DhYKZWbq~Emķ\ҏ( +by = r] @+"4n/ԚSVv ?!юS5q@qKkB"@Ryj kHWյEBT$]xAem,f cb'Ե(xatKMil? aL3}˻T8/Ԅ 05ŢI|$Dfp@nϳt䏢 eηKԭ[N#]RK)&Z +$ʠ,lNG0ul? byj1_u &X,.iKm 9YKJ;'݆8H 7$N K-Ib\Yâ]wAЩc6/a~lr q΁M@4"fIfCڟU(vRsHi)8Jx7l& D]?PD1.!(Z 8?H@o5e+cNveTږxejq6lOMz.P2* = h7tKL4tD@4AO*ZA] \֖w3|ށIDoC΄[jt9"bp1Gcg\>!Cfpq=򊒺Qj (XBǫyAuuW*VvZ;$kY pp OVG;HH2!(dӁu. L -ެ\8ԼV@?uMNH /2|աS0DПrʺn m@i3YQ(gCTޓ4'@!E)[ꆟn~]X5ZY4Z 3#LM0K !faoZ{PӢ[Hz=:C7Y*-Р4Yu1@w"E w6uEӸ\ !>;q=ڣ -O'P7*O~#H\I8 w#]ԣJubL'dMr:h[׺Oahp΍M~jS9 ab, ' ڍfs'In>c 1o?bc)hYu>?pR1f.evũI/`]?ie_$N7HBTLuTGqU=Pmϰ3%IRY8ҫToy}..֎xBtcS5!S\`u&>nV[${뙯g^_wINQό'0E_ َk Ϲ1][{<>'/!?~{ڼ絾y6j[z6 .Nx] ? ea"FwÛ)* endstream endobj 122 0 obj << /Length 1966 /Filter /FlateDecode >> stream x[[o6~ϯ`5ûð0 [glҢ-9`[dߡHʢ,[viئH Ρ{\/גz! %x_z>3%x~[ ְB<)gߩ&DXOq7 s۹I G&Zi0XPC| C2X$"]^C!|c>f~Sj81aBN;rCDFPxr儴̕u1Vy6&2s\Y-fZN,р>屖‰7Kef4&EAN uf1lbbaN "`b zOCķ 2;c='ӨS_N!IWG1fr4TGHBIelDwI` SHSԃf=aLIPTAg]hЇI#BBO1 UHp{ s۝,w !„H "!k\wtzRz̢|?H,I!F>mȝ(F7MXB~їE JEnZ@ͳTWSՑq- "`UbR-q&4Xi7nٜ܈mAGT;V+ѴSR% V=1?%uHRG8 *kO9(-JlM(8BVۼJD"VN$kY着de@EWN%|(Uķ3x]A@y"`F;z(VoseHOi `y!Ys=,n\&T1J/y:C@ԅ:= 4]HsŐf#M4=|H4c N45}|*v8(ϊO_D+~uɨ|2 /=(R @3763V}}y&N6L>Nۧ>27ӂ릃-yhbD E"0ʿ7I$6Q$䣐ўHp~x<;yYZ"e^牢.s|q83W^=5 ILO^; O^;^*ͽv={u Yx:Y~zv8ĽXuS)k{=^?6ZԸ}`Z^QيDˆK !4/1i?ulņlɍˆSZN'J4oPnWjhr햷 o9m<GGAb:~8\(k|^}keQ% ~Ffzǚ7 ut)IF7,JfA~ry#mA*tC-9N' endstream endobj 126 0 obj << /Length 1942 /Filter /FlateDecode >> stream x[o6~_)X-0l ȊBd[l9ܦ"%["q^;}whM=zO̦c?UNOj g+f+7Si&,&>3ͭdFZR '{л/oGY<+ivy-EZ |a@Q H c1aq +Pxw-~W 9 AZHkĮJTjajDm !IO9v!#^4dFQ&m0tqisGh7>` ?a ɛ&o1 VXk*‡Y~ #zYge NN5DT\b5΋, ûfQnCEve?i'2Զހz;pM Ș>SP u@j=*AΡ7Mr7oʥY& D۱w(E!faa4 VIay*9 5iwA-`S0:B焷ījYS3I1@ީqEilԁs-&&ZA}Ķ?L΀m4 EL!*sD(tV(z%.HRʹ8kkO95'-ؚPRӼCVAoiC6Nyzgj ȖЪv-ᠠfWZOn:`W7L -4p@? )DŽl1M8Zt 3~͠Խ35o5v lAIAcȗ8XLWIP ᥆2j]=\tQv#L]+$rbL1SYNudW REy=Pl*䫥`" PMhܴA%hwleP8M#:xir@LZǔq,.<bySs\̜K@Qr/%hW~ )1ʮ-zڪuBN})(/2eOde.( g1BwI!g0nŬǑ/(V\I A4#hou\Ѳ^4>IS`O r[uB0+B:ՆxFXxM K}&,۸#kSm?aZ0 .YUgQVqPoNy$_TzrA,<_- 8Xܟ^E{qCP}}DF(#3hv @euy endstream endobj 131 0 obj << /Length 2035 /Filter /FlateDecode >> stream x[[o6~ϯ 5ë$X`l+Kr$9Iw(R(˲;YZ˹;عvHT0̯MSOǓp_ ir`mPQ '?+aø&1֛X[.\^90pCN(G/k' DZeOYb)֜bko}nݢV␞[<1A (_snSPIƌ#P&jiG ,ә^b5[p`2LG4pxj+Q<"n P/.zn6ލ`s4_\?zj}A,6Q tg@fuhs(vϒmF\iȳI8qGM jfWUtрfpCGE^[lRD9e U,3sy]1ڄǀdg76I4N] =>̨CW&mn><<6YʏTQrXCguGVt'8d3GcfY u.?nWjK!.s4:K6z#琵V/yS@#.:QhmS9Yt."P#9ڢՔsCBHcskj/BY`FtL>z­yU{Z܎fܝױNL!Cc4/ijLwKZAĺ\o!gQ!b|D=h0 {mk@뙵4hBuQ(oy?jGɆk-T?d=(]e'k]pph@يkd {~c?z#1cp7 (-(+RKeF}Bn:Q>.W=<Ct%t3HoT2 zUń2NhT'hO]Vjݣ3O2bĽK<X*B@(C SLkH :J#؝p* Y UXUڐ5yTJPgeo/涾Tp1}XN(*o:j5gUۮJ$ EITF@i [ZOI`"-"]y̼(WLyh&Ug?awqXWn*6.ui T< 3֟^׭}>R\54¯|)$=gц;](XWjmBĤN m1fQlr;?Pf5A1Ҹ>ZSY+E3=YE-{8k@]QyԮ_.J (AT-Rzj8?\r2,&]45cH~!<@/\- !,^c@򗄫ƭi~? Y>9:1_$Nd9wgqMUS,ĺi RjWJUAݛۑͬMCdW2 TkAI!vV^_U=!L6D|>rxco~RFZPHЦz3M;VkL9zwlշ6}XAT.ZW<;N/uigAH?$e endstream endobj 135 0 obj << /Length 2065 /Filter /FlateDecode >> stream xZYoF~S!fo)R@ @k -R II}gw)_S(-w96Q/IksIeQ?\;ۛ5e'G`eI;7O&x)62EI2ӷFo04B5*2/ap  *Y5eu"7i& p€<^$N6U8Vk\P\'8ziqŪ$zNyˇ;TWuDq:?.S6:Ib'&׌ɜΰD&[_7j-#Z{K0'nX9?컱PәfYiwkV &,aj zVtJ9tg/@UVʋ4NbWqDqҊ^%/ #Jxg=W>;|n!P0O6yȌKQU>B׸T$7ˋduT_1^ @UҔ"p+؊8GK ié 9Y #@[2H-1;n(A 3x^Fq?<#Xe6'GVn١m~qLśBIHY{QVux1ׄAZ7BS[r8Klᰁ(c,..n7IYJNb& |o30rlC89*E_f]@&*T ;X|G,]R+SRn۴g||j6K2̻tirlH:3,9#º whbz=i9:͞ml&zA@l\wO]C"n2 .3TbOM9<oT͠;Tv7,YE"x1=i_4 {Kcxo6z˃I@ýNcbjfEp){~_coG=^FT] z|U|U3Us09 MH.њgG5֚ endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 813 /Length 2431 /Filter /FlateDecode >> stream xZmo7_nE9|_ Ipl55Hz!W+V/kI3/K(XY"TR2Z9XW)NN<3*" XE֊(JFR3Z\!W6@F7F8g'Ld;K,aRTl3pCU&Bn D 5XV>H U*X'8# CL"p1$ W萼r@cؘȆ. ]T`NՌ1 +$1b#)LQFp&\3N$~52Tܠ>dYPH '72K {F.a&:8k\$z{q wsy}2nr*S`V}z|'QyM8/uY=׾>#_Ñi]tիu\vkQNț{kW7t^k^~kK &=ٲjl&7]ߛNmX@a-JA[y袟6dY~.<7k ȫ]b'{k> ,?΂LBSxDV1Pn5SeS}$|s%j:U"dlAer>`O'AX?w}0 i` 5=Z M~&ӧr6_ުq2}1]|u &p8rN,y6-'ӗ,W''MϦN>=5F4XSbC#~]ーmH`{6_%VGV OyI?\_b#yqjK{bh['pC$M3*R6^E۶SѵmW>6cU;WmbZaZPcfqrN7&͠I|\Фb[r;}YYg:(P(˶PP;iװ&E:4ll |@ɏ`acD!6QdyKm8&y;}RڙcU.ywlɾ^V>d7L^ !`1M|ϧx( w`.^9 uB!d5`%.V}/;1G8c N*(*7a7^$Ã;8]]9ُ0Ah##3jF tmh7;6@5òMʶ8xdݦ~]44ܶf^:<ǁ}oy} 80Eé\3j+rMUEX{ ErEfY2ꕍzt38k.JDi( >!UtvY9@WofCcD C+ ;UVf fTYGxR|.IST] u(xea.czdž^E <~:N,/V,6ZTvʇf)CSVZ[\4yUaրMd`zjW˽=ZF nKMWHMr.‘,j[/-"It/)raCI[Ӷ(Ӳ04hieMʕWcՓZ\*tiZy%[f^/v^+.ݎ3ŦKPu0 @L ŲL9W1BܜuI-OZ<ըu}hShYrvHヤ:GАGڤl͵8s\QٱTmфDL-O+9KhۈBbXViTm0<=R 궥\+5h Rq]qu_xgԹ-v򐯶M/# endstream endobj 163 0 obj << /Length1 1815 /Length2 21482 /Length3 0 /Length 22611 /Filter /FlateDecode >> stream xڴeT\ݚ5 AK]p %;=_>Qd>:\Zk9 - 'lgef6001:Avb@ djHt01qÑ$MlM?Cw no @@ G9o Vzf0dFVvNV1@A`aP Ḿ֦;S&@ME\Y UMQᣰqUQU +Lj*_UMl?T?|MWVRgf{ f߶}:@e0229;jnps|;X# s$9 #['Ivr|Ha?bBִW81:+(Z؂LlF Ę_MΎ{o"vWk t:;y6l,@Nh06YcVWQ<[zyul@np1qLC*nk,jgc |b:cl\m=jjaklWucg{F5[ gi0`8L܌gR?$L-LM><.&;7c[>cS]/vSI?v;Q1 T%lm1߂gG_TG_. ~ NJcR?б{f81FV&NN|h|?WEQm-l,#cXllϐl@){g7BrA\,FAF?7!f&&A6&?Jdf0doA#S{f%G:L* G;+ / -t>Ozlsgгp98?(z\k쥏EoP,Y6LAs3U` hCdL풚ˤ(I-$´~lI5V# 3d/uRk`lo%rw=FLޤꖵr-gnpFs[F_?bF{Wh`@thӦ4T-CGUۨP"Wcf.CTJ%8 2§&XK2h }Eg՝ N # 47Tb<=(N:  *ƹn_s kbSA 4Xe#.5>b#$BSd:1 bcEt{+vM!UpZ9":x4Ru)x8X(i6CD>V3PZO՛˽P8q{FRs@^+#KWpSn!彨_"P 9d3#,i]JY6Qiz{L sܜrG{_R.IhgY3ܧ/:}}~-}DEݘLF$ ^*h<̓/mO{B|b۩E8꾗-6b ;AbGh.~]!M ,]B}zqJS[u" %u_ Rӱ!x׆B}S}H69؈>q#`}ː0͂?NFK!LB\җ\:R3|}&_ AF3feB# L9/dzaC5 hWUÆ".X;yޞ@QE}Cђ a鋌>ĬFdI,'Mc!jm^$4w_A=e+4IbrqWAxȀ_Se"d춐22X&BRuKCgm}rAqAexlyM ZNN(P+(r\o9̓D=X!){w&Ȕ#~.LO <5FS&lsȜP"勑]uWB*G#)~w[8 H_.|:+EH[V*嬬:/^jLF"ڂu+YiYbf_[javbx**VF =;m{:"$XlJg4 e #36]"{4\qO*e^[-7nkVfE1w O1y9!ħܯESEp _VWFn $O%/F_Aga:sjlXn2'&F&ie5BLD L`D Q^v'Ձ  $N-z> )C-)rbo~1:| &s|ULDEgQI3ق+udP@Kt7h?StFIB /xƣ>ΈM.3K+DOyq'"[zj$:}ݙw!wZ1j"HOV҈o(Gb!2MVm`rT$5=*~.[ hK(62@b~ڬf;7417+BW ūXEQX ƹG-* 95;#`+en!]H#L|ֺS9Ln2`c9=Y:͹|gpG3HD)"jktN~c.9p"aK`ʟ+'LWK^T!m9yO*9z,dXRl]; `Tc ŞgEr}y tq,ZYZ)ola :}u|T5Nbe-S ɨ=Z&=*{oti.xD*eqZ>~thD ÅاBs4OS}L/I ڈ-hߤ~ AtNOpY,m!@)ϾQ*P!J8AK~yx_n#!"e1F5lwf %&%wPFOX>:>m&)Qp"USr.|_kXG6 ‘y2Ȯ@PD)ʰ-9o^(whrs_\Uw77c.*{RٶBl ?o1?vC5~ɚ[̗@/o9XD_~e|_-E`d`ȼnS4sg26[ AJHԯ@sWsooOC$%ۊM]&;74}2[)v hIjǙ1Hz54tK 6|v~|G-V>OΘ뺒F"T?T-Bg[un+Jjb9/|N_^1 D{8M{?/~V'Bˣ6y֡'6`kƯ*@sLօ͛6*Dm_;7srzi/@%g&̫ P{1ܪZ?{ߟ'^ p~W`24'׫_&M%(ge$X"i\!/l9Ŗ >fml;#Q)6'"}d P/zW ;2ê'£wQE N"LH3^`RE*&.'MOη.),sYRE3Ͽ-x(dO#[}_`4Y^{RMɩyOZaWK5pxˏ|휠yY?zȅ #Z z 0Ghnlt0% sMF$EQ~#t1fނFRp*kLމr8B4]mc?`΅oxnkV넀h<1+?T/z':"_ ;%1[< ;)g"C?Vw'UiY^[05e N5S+-/JBv +54]xi:gD܎n8wo !"g^zLB!BF N$<':!V9* w:Atfh+ǟ.&Z9o0eC[ 6l›( oH41b,n.ĸ#>hk;\JܻvQnbe߀j-:QIpp3ĭH /HMziɤy0o; ]ƒPSG C^~l%۴D>NwܳJSC,C1ouynqo5&eߌ7RHnpǸ]tצcм9(UQ6Ps xI*>XI $4008*Cb"DHcwH&/gQԀd3KpXײe_.Je׍i}d0V}VgZf@{$qs9xԝc/~vBL?m0_:qcP-I'ɉ$v?iB^jpȊl*BO0˝}\m=,#EofO_f{gvUh@jYP | ]>BE=jwKW\|f-=Cwm{@J&}ܻ{t㫖I40!Lq$tܐm<1)Zfe xctYZ)Z#:lkhH6nZ&VH:|!ĈVfF2 *v[g*&?|i(l[r;*0N5c03ּfͼ|.I ն?Õۻ~^!dI,âZSgrgV˖٫}ӗrt(Zs:KRF-$ި=/5d.2Gwm#Tr6_uv[.Et)#mWz_%9A^z12^w|;CK Nj԰T BLfu @"Pէ!8x;ڒR&{𮐡;

" O_+!ҐO7Ooy7 )=ـVDMOm)L~FMu|\0e:5r5vMùL8ftmI}e]@ՆjB͗^З'Ԗ"{->']HgEQQ%kQZܓycVFeM<կM#WXTS*R^m޹1sc_Ŕ I9o%2 zܫ¹(9ν?7 m91խ<ڌi YV!?`2԰JI{ܾ>0}^ \ݕ+p;°'k u&uexRId|DցRVN8މ"xF&,^ 0&;L3E1Ү(|GOZts~Rc?ÔXc7(@fP}<G0́}?x>+"sMƸ I*4j+|bMN,)ErG?õUkPeh8ձ1a_USs F/qLdv {tE+}Cf ep`WpZ/?dZw~ѧڅzg0,b|$OѰY>(]> Gqİ%gWUW$h !y {݈Oynn.sf~W_?&Lbi~ ʟ*˝'S+gQא m2֊*JN"AMfDrCg( FgMV :/$YT~dyZˣ-iw&!w6f=)G 4'MD0ZF<I<"B9!z - :>.iOru -ڎ{ x O5 :.513RC1NOwAјN61.Bd7 ?CGRR#ߩNF1((^0>6.35?shP,f1^zZ{FQO9f3;YЏ;!vuSdgZL4)L|r~gG$PGP}'Þv=>9wU"eL'N/~ V-z͉}5V{E5PGc1l wY6,%De5U, uh xCIG7*!T~k݀m yJ;iP\ЖSt qUe(^1\u&3h2Nh<ze8cW͍T xι QG~Dmt6#BZfj}+CSү݄8b>6؜?_UOk<Ԣm*M}[+[HZ6˛eb '(9!ȹj8wDPF!ӄl^G3C@=zUD"Л,(j=QɒѶQ(HMTV⹴NP[+xepąZ>溇F٫O.|'*^=Tilǽ-Eޏh!F2[syiFg^]A>xpaJ>>\DF^ŏԱYm_#vNЀoa7뢚qg#w=f<_[3[Q,h⽒:a"*2䷅X8Lζ5cv qS`BP@Z!^!]>{"I1[)7Sy 쉰82 4n~YYWwFEnBY[_iš21njjy*BїrS?oSLf֛ VtF< ~t~xC-dISo~JAvF.A#S l#!y,馟Kh#ő6LB0[ n0(HcpBy:4H7;6ٰLrO5CuONRR ! z@^$\YG žb߮vz+շ &3,a .OBHm(y[ ,}FC&n莼_6K?W>ֽ`zZ&)c\e~\#лTG8\FWcfM@$ķxq9.ܽ{m`}n &mc_$Hh3y$7>G{زafwkՍ٧~6r"6A&Rӡ}g.fʹ$4DQۼl R7l0qt@^M0w@KC\Uy;v (d ,cN$"k<'J9T/}H#N]'3 g,8 hXMg kᣘJΜV~+kS05ZZ+AMJܯgM?8ȅcCœ`kqk5qw0#rqA29-`5\HWhx#:UbJh`rT$1V t/4REQ3"pL#Vbԯ]70Ce2~ME 3eOJ8v W ?Nwa/p2(.Qi{`S.;H/9ڨO.Պriz;P Td17ڼf@^9A[h_5(7sS}1a1c5t+H_8+A7`OLcu`O\0g3>$3zFŤ:F:&[+(@D!kѢ蕔W=NMZ.CfQ>AwaS't-->YhŖPܱ>u=Nv4װfLk-QfRO6C'/ HM¿=8;η͐% 1EއnIR s?MH؁3{a=͹qJkcw)_Z{,+^Z"}L'wwvPƽ*,[4X%T[PXNp֟}ɺV෼ŴᎽ7dy<){3 `ՙk@-niQ<"4[V ^Zb.&߰gip0Iu<lbKaVi*S}VY+53i}%Yb~I&@f++<-ZFN17I~B "!?FTD:&븙`u™Xu#/ǓQ+a%׌gS9oV#Н`Ac *Y ݑҩ^S&7r~^K:;+=.~Ѷ@or~.Z0L`~*58P,(5<ɞK?y zReWRPu*H.stn)\f֊bhN:Lv:c |`#Ob?U<i _w !?kO7 OI, u%'|s!7}SPTF;eGS( AX!F&(%V\F6gxɪ̄WμO|1k$G듧FDh}C :|_{bzɐv&@i ףC"hzÀVnxoq-mVktXorҌ3ք|wjDPѾ0.CE/amY=(twvuj_ݓWM"NI]d7'0ꅯer yY׭$h})s gO2ھvЊl3 h:3)N:;1pFIeQr NS/K5Dzt?;f'Y(v~pX2 n^A]a}٩ZGeHso)HŻqit.N-h[b§gg饨gj'c8yO?szuPah *^';Tи*j軥t![e(# )١ylo)K)wZs <|-W6 ۳x{ UE;r+v#wpLh-0]7̭n3dkJVL^5-u]|vwcF,w[)t١ Α[%fJ]yd1Ctnut@[t"&pBc)<<5R}kƿFc)~Ɩg=˸Z3)@0 娋ڔbIvnf^ c=x1+1tN *hTzWwȁl]B/ӣ6\@,+GKWVR*.'ᦁr8#&?-N'~Ԣ#g_ x;8tw唖#圗ZD3;r.nFו3h9t+f|Cp¥9a=wڛ~SG}z RɛMRnCD!l,u͋)ЇgGkr ^A+)@;:nb"HM%D~ikLbWE,{vԓU$\z%J,cWS=]|!; Z2fxCЋK1At3ɐEvy>G^)~`zE׀e{%]lOp)gC^9<;o[=ezKҮ7P8 _o%dp~U9Fwͅ'^ hٹf+ni*ɈwZI:j!:w0_,ͬSPЀf^VT[mb(jNN_;$\B]w`&E'ǔ.:g s{ Avɖ߾G4_oYvӜ}Vp]*#s)wF0[ڗD~qJ'eP5ye[ሄ;oeIt"G$UVcZв#*wZ"?qoFvH4d2H^%s(O? tiۄ:>eV[Iskjy`:Ogڎ39St7Mb=gN< 1tG4 }=l=6$L=I|1W ^"=IZ|!Sj"I#"r%־; y^SY7סR\8tsQ;7h2=rZW']R)afp 6 edu&MZ;K} }ZJ !ipox^6{.轀~H?myAM~G}_$pdW@.]z`ۄkȅgv[X+ s[i׹#&ob]MeI5 RbR0ͬňeBA4[v}3Ghx!K^ /FBR9@*n@>wѻJ1{RQ.m3BNqQdducs ϛ?̹UmK F>|-E\߾c]Ȣi*2&ie],{FDpϑ2rXw{,54w3OSF{q' 00DL5ϢQlsTBgV_ԿQh-&zH,)<.e.0|7Q .Șw Ggh0ݯ..3OwGW =1\wE%̒i .54Mr҅gZL f/:/ɬ;".'dKN ipWZ#1 z[*ádNNx}+NM;,sPp&e֨a@T1fu YhɅ*hџNxj0+g6 >n7*eL(Ⱥm!)a/_+E:Xroݺ p= q*#h#W9vk1}*_Hl.8ЫWg$JV>F+,ٺU9/똥 @ȇtչ2q!m2NX~BDD2^ðox&1J ڜ A0A-/]naۂM~DL]n^Hrյ;A\Zt8bETǢG_}3rǖjsc윢lhek5"AI E^T&rw!Oe}y&`9%ݿQ6_+bQ8ǕUQ\E}Vm+QsPTo!a_c8 Q [O<^5Q52qp̵ΉQΕn |@*{[$Z(SZZI8Dzr'F-'#pFd>˴O4`d;܆LvXk:)*3@T-y羾cؒzJhNs:Ծo{K"*%;]dq&IDJn>:aD&rIB Wo77SR 8E!bOx!ښnc4P&$XtP9fj<`$u#ik_U j%5a*;;H!?iUk$TǜF#A~C\[&v8/gob=Z[EPSH-ZZERE#(v_BӴL@$r1LBawp34Zy'mMдB,qރkr;!Ƚ3wWja[3@< McDn7cxY;j-c#yL*3:ϕ Ƅ;V1ڰG@G]h2m|#E䢥mk!\\'͈"-$hXҍ1[q\E[ \(^F_#[i )$BUܘȱ&YL$ϱWBȍ̡ i>IW o 5kԣu"^X[>4΍ _R:.x%ꅊ%jY1Aɝ [J636*J"ss"Lwri~Df][kbXTߝ=J+3R-jpd|AG)qQE@8C3g7mpϚ$ucP{Ҿ9{Brw#m L^2̱e@K~M %1ysjB =vGuuYS24^N٘ٝeϺLɓwMBPdJ`>ߔA979YL+ Q^2@ j<5) `2=?w)'qA3a&ʩmt*shvfJ_7#1uWJewB*`Z9Xw/QAȝ] Y#a[ Wp3㛰c}4="(LldR[LyxW~`UXRlӾ{id9`zRV8Q?y{xP64huF?F " %#G07.2&9}UfL\@UԦ<- a4j<|lXJs{ZR5;0!6?.5 lS|,"lC 9 Y XUy?ƈ}8k`=: %UMmC0YQ!2'hБva<ۿp4(B@ģ.H"%(1.OpyZJy78ؔw +ĝUײyq'a`S+HK%;ם CjS|taEb2.kr:ĞtğZM[ 4$Gt|}sAkCc^IY)EW[{䚊ʍ<{;]Y]3H6v{It J2M+ W9ۇ6Pk+kpŘͱw TN{n2YB5nZ սyj3A`"kk<9S45!I[ͣzn/чAj5t>i,RQT<^BD"Vya3|DhjbܘFkR{hBAQ >$H7=vLOin9Ӎ'rnyTǀsilv<`^Տ5vЖ9]~ 50k јJ')n֕8Y1f(/~*`X0.PZ&"NLFi% )&}QiQ+pCEU``v];:6yūx%p:JYo ޶s<|4(5daP[pSs\.x}dM@xM_L(R3KT%ޝ`\p2x3xz?)cof 5˟Ut{ ;ʔi z^ 1z`lHͭDoӐ`$aPd-tfLʎav6R92ݬʥ-3mp;h<: :Zc)ѧ[LBǠ|748M%[b?Ϝf:63BAv\HΟ8A6%7U͸>y~H8v~@7~'EànoS٨叕#'+@[- }GV]&)NcR~}rI,ۈ9Qt1i.2^0 x‡g]sJFWLEc6J)kd w7SWyb$6мRL `>pF[OV Ѥd龪|%ֲ^DWH{Dyx# iMo-FHjfR"x84"\@>=w%% s[󚺠^QHJ*@Azrm'Q< #y& Λtgxx Hh,tdn}|Ypp猋v0cA* )qO#^scxxx!CֵKied.rsG}>p/%׽'{~ uI4S 5UtQnidɲ(D_;+|zQ;Onϸa8"KGA<xB8PJp]F~TEʁ[S10?lp|@)2%fƏ=鰭h~i E8t?z4*ŶYC;gȫ ˻)Q0)4 i ^`sfp]v|Et=r Cq ^¢:~J!q[!Nև0FN 0+jI&ʫi@3Ws^ZSCpZ]|ԝi*2|^c#hnԨլuOK7vEZGӟ1(+sǾ+ai/1 h%$տilM1| Șzb71"?eNEy!x)zuM94Y =S4Kr-9:x6Zmצyj @O$M6[pƖ]r>cjWֶ֜yy#ޓc}ƘDr|E(&=8)o9Rf ;#IܙF1*ތ= (sD''"rӣxy1p_4Z}*APkH!0 Q㳫fA&`Yv:/mkUؼK+t4m',gOfAgY-^5Y4H6s1 8 DI$`,q/ykեL`Jks`6eN}O ݣhR{)%It+[9QsTO"h-G~s[Ԃߡ (}B2|pŒx;.}Y%]>c>@rO¹͝b*iv6/pG⨅~]U\oCѡկ->oj'DC&5%/N 58|T۠* 7Yz੧\m S P!rގ(2Íapp3[@9c6'SMѿ_{%C¢vLK(ZjzcvMdb;PٛHiN1`vW~yePs|puGs$5$ײ+=bMx#S*r`ji| C"| aQ5?;5mM4ަ a nRc #`x̶N'00s뫔(EW(Kcg +|Eé}g'> TK6 kD/(Z'|&k=8t4RȃZe/厾aANSWbhٞL#b;T|,aoFﴱ?$o D(b 2#SNb4IW%z7wR~) Mu~ Z6[e&ú"ιfPjg$+ˏ:pO,%(XSCehF%{4epCYm}h b'Z`6{u-QltDs-{pUp) endstream endobj 165 0 obj << /Length1 2286 /Length2 25655 /Length3 0 /Length 27010 /Filter /FlateDecode >> stream xڴeT[JҸ; 4ָ `w~əo朙{ł)}v~yׂLUIl;11flL`{K;3++' v4sxl*no.vVV>* {nfN@6_@dn:Zto.`'o۟LL"gțY؁=]@3GK<3@&hsl452*Zto5ܝ.EBCSK ))j3d44:f(ky3$)* Q1MW? '3Ś/~6 W'wG˷vϑA@GW'io|sz[#Ĵ946f**@n@G3G7C737wW_o%Ϳ..r([4.~O- W7E@?]/&92)ߺxb^Vn'mH-%o]O'77L#V GK?]twbr9$M`@/ ??b?:Vf@psqS` p{EA+/iZR ;{,V,`ag'Vf { WiRfaK.f6bKgLl<\{E ;G+/X%g\2r[\33oַ`%!0;\Nn+ ŸzG/ `X$F V߈"7z7z7zEo`QqX4FoFotF| 7-?-mF [[]aV?[ӽ`dtś ?[z!b{ |#w7['hZN  !׿fozb\¸V?[m?n:ֿWa 7Pd?L\@^oۛ߿Wox|8ƚmظF|-|? @X[٦GH受BS1'B-dInE7eQ+;Raۿ6T]Yn(H h3kd)qNf5'6$Z;G_/ KB{L5`cxͣΏs{k-@?e3,ՁG|IHAPq>JL-۲崞FRVit=U3gaU=Pa.B?GN;On`'+Ao\0tz=&D%_tAgfа0X{~Vʉa_p  k 4PLwf+qU.(`}Bv ሶ='U}G[\tL$áO׊aαfA\#$1t{8Ng;NHqْ?W+(0[IgIi:[!9X M^~`.e-jp 4m#si"B):`B*Vxx~IR\8Qۙh@JRᛚ F66УϿ:.Z z< ZOfLMπɧwI:⽅p hcUq1u2'b+r*al6nq{Diq | ȮL3&CSvay5!N5F>2` n~9oQHaL"*QʤXcȠ8qYb6kEDiEeNjnKgZ %Um2S[qu,Xwr_gύ QDP% r]xV a`|rb Uq)1tqWZǝs_= IDN7(~kt ڍhlTDCڵ4iA8z6k}ܵKJS*#lev8>ErHߡ|ϳF͌=:3C.% ;7nי#ލkQ>^ E{L~,\ vG5L?~igSk24i}g[9x8)Q\U޵\jʑI/kCEh%_ FWrѓ٤7L>6do!;^P( MX?7#jѴ47LYB7rvOd; D-ŋᛆxlO'Y<bsS%m{y疪*5Ot8?6'$dJ[at//|H1+aݳH[Y@|{L*`gt `tMg+40%J52T 8N=aNuj{TSy6RpF0;Ixc{I%c ꗆ16W'{gl3Vi񗴍 E:UFݤk\]b64|RlڼO+)X.N TR7Q(ǜ|ZXy/1*lDG)аOǴ /|yT:bNj'wG!iUʼn6iLiGz|9 ÿ[cM5zzE[Nz'Kvn쥙"Jv!E}W[\iA [b &^~퉺7h#l6n(,d ZbM2 TJ7WAqBtiAgy.7S׵yXq%u``+ 2f1DC[f*hO,pZ/'#z ciζIyr΁װ ʣw䛡%"IW!"4o']]4du}NT2@O e@LrE9)[vt9~e\ \ڌ5tq$⽃>%GnQUJcIDLlձ<V zl܅|l*kOjV; UD,P1ԊxZ[6^h} ?3f*= ʨsw[1 7T+u A`=~o7`d$54I%0^je$]23 BG("S(6ˑoLnW9'/lB RdM{.KgYr&6*U\u"BgLm#5߂F>=P ~a Uv&ρf;@)>TyJ?j&U<+W$Xg~;>%R꼶g/yNrqtqgnFYWiIrЧ`GURBmF3d! =$#>!nlTP7DQL? .D:2{rۀcjD6 ݋RalO91|f[cpJ dg /-zTnk_ű Ngui jMYG(_BjM!t"[H(;!X*˚^ȽF^+:zπL gH^i\aoF7NQ Jͫ#p&hY/6qd#l*7'}8lpʚV>3,_&6qꪃ&m>ܓ4lVL2漤z~"9.co }|[wIO+,e@Aɂ!U>Ai\VMZ£8֢v0T?,Q1~Zة㑖JiiK\xQj9 VJo%' 1"e9juYz7(秮Z+^X._qwC2&aZf"@oX<ٶ(|CoF Ç~9_ɨV#{Z̓P8O?)?a'!ԍ 2 ,F(&H6r(&ֵz匶\k87Sj}?~>93YSӓ5gOb肍EQW@cv5-EEV\洉ׅ[t}9KԗGTqaZߟd.6to 9ݏp8g~8LD]H\]OM "&Nge"E"~r5g7~oX BxL3hT"b5v:+cgy>Gṕ ˲-so稇 J0^=h`L%*!U FA61/$h*bؗ+Ek|[ǃ޳"˸eeKUlA Swq臯lƸxMv4;d ph2sV f4T-3♇.RУR_rCo)Kz%:}2?,j\>!aT0T}xx$Ěݺ^͚Y@m.vԅ\x J3W0 3\@rV(\Z | k>] 3YJ%/+>cVw#+8'?UȺbCÓGZ(uJWRw&M?8lbQK~نt۳1kCVh UD> 4kvDڨ*o?Ȓ*&pjug}Giz<}Do l 7c]U{c @>|zʹD+ O+v.2/ڑa8 f!r;3Ff^+C4ǒnPޯny:_~ݍrQ^Y> lj$iԀ=3h2i[jJqoϦБ4u>RE ªN|<,VRHxP:aH\؄||\Cb5x]/ti3*`3c8,FW"Յ¡R?K,'kƨFӇDdƙ\*,] !^k miY6Tk:,P^{u .eo`QQcu[SORbѷVfL3x;5b۲c@E]ՒAq\Hի߂F8P|ecV1a4eh:QLVaypamKYL3b#luaClŊ",~_Ѽgf`$7ov_#Ycu@rQ́뼔h+1zhj7 xVc49Bv^ͦힲV!a>Ȟx|&*tݪxYY}dPsP>ݍo~by"ωh:"bJejut@󎀀ĩOEzxGuT''Ta"O{ na0]N5Bhq/;ำ|A#yV1?<0Et;G0|uD umK['ƸH+e>76*_N5O`!MW< p4?FGV!4ZUi8fCEom)7g;6Hb|{H)n wvaT&P46iqmLnHhH+RҐS>E)=am %< 9kgX?=Ui] |1vM-+Y__HUxڐìa}y0Fܭ6ViUdV<*spCWD!@ ˏmmэVK${J5%0f9J&QN^H_"_ªG7̐#1)(1Nͱr".'JZDGK(].6#=}d9jQɈeHr%$ƎWlb؋񬌚"-l褭%a6Q^rY j #ea HZҾk&"07L52$=0KwgELH՛>ߪ?YXAlpl#@М}tvzDKM[Wuq'$Ayh&_L k)) *ە/c?j}>IN1]CsdX0VMӬ٩32#_1 JZr.xqt;Z ѶH-ܒIj"jhY\{r(3}V(tw%w-'*z m >M%R;?,,@ǣɇLͣi,~H?(p%_jN|r A ^4â9,8+uQ- B;m5iأOpu$nhTZ3iH dkmZ)Nwܢ=q&5$"aB|F[qn0a.spCRe_+hy#u@)'J\[ܲÝh;c! (Or`(jJƜ]0lR?s{ז*_"%vU%vf2vfͨQUmCL4!dRYcID;|b'GD[jë<, `{aj|>Q9"qn )_ki| 1$>%L}5OЃ5U6 :v@&aq$lVǾV/;<}dƨ?cWߒwOd_0׆imgY"QxB("?<w/u^yD옸vPE!yp'܍Zt+q#ͼ8%HMb'?XA0dFA)ރ6$D4֐b %"p)]@&&x,g ;1_F2ZO[8HA;lZ܀P߳%͒P6Q*,-SLIY[•GaK"yIxs7_5fHSvMp6Λ6f9LxZRYs"U& n 9 ]tnE+%r8[俹 ůY4% AyUۈը`1Gpi^tC>cUsQWP)w)vBGɹ/bL{BJՍ nhlVbj}B࣭{o _ Ild7<}=C,rMWba;xcλMU9YiRq*:ɨ[WO&t:oo,4؛hKV̶)DVE4ɻ( YGg T>1&*u{ǖE{P&z;$wu\}mNhT&F]vng`;?(sPd-eנoMIR~<[[7X]ys0mlikdYEհo_{SWܕ*<sZl\[ c~"ǡ1B+4[a똗!sYkPYB+7 ;!P|jZ/#GꐕHDg؍S/3:e/G'3az>_RzX.qi44l:lvp۴HVv|}.RZKc0Cg wX…Z UL(P.No>&҆^ztSTmyY]O;E=;Rs# 0?[xpXS 5ԊE}pYbW \o܉&  .絵;L &|U,SGdN)mnD&"W|iW uxHМd}fdm"Y6'43C޷חyG(/)c2$kӦ##m1y n&|PMtC 諊$ FlU #/$-W]1ޓglX{ z-M*|u_v{=$uM}'ؑT?‰qBH \<' ";Csemc Qmz6VYm- tttrpǢji9X#6=i6{215ݡ`QAGxn3;0oKzm D-6xvǴ4ڕ4mNƅ6>r?<-7eBqxhR6HC18l1HYМb1A?޴CQ~3"|Ư}j+5FKRj 2|M.20k949BxN#oscH FyȳX63%Sһ̐_Ĭ4M+ H@6aǾrkgh&A;ѬaTH21xC 6G\''Y=zy#Ug:ŻD*h%U << ͿCrZ_.{5#Ek[$@[uԒ-<.qwYa/mw ڏ/9u0AL0?)VF2ACZ&䞮:o%JWO"U@]]nmOSN e hErf5"'?IČ H 8MZGӋ ڪ΄yj6W?'zfkIV DojOQ?oL.u(+}<"DMI#sw]Fq6JC_FK }(Q*E]STi9liߞU(# %&W&! wN) F>Zľα\JYV|ʼau;9XZu8@}[m Et29v~˒Atތ-: Q)l=KR!J+cNj *..x]`n~iVSg0d nK* q0+>8M :]|8G-/ݻ.$DuϞ1Pj삍l"K.ӯk;]L!Zld|+u/2{ tQJX5 "C啃^`_t|~d{R!^+;?C ^o"+HdU*шS<L6"yk!M2gY:a~BXBwUe)wG@Adl, .YuN_ Jчt`| 8(tvV:ֲOI$55ԝǚg8Hn 0='2KXb?Ks"sM)Σϣ[͢ c 7&S%O.bBRq4:<K^^J}ڄI^@D׉4r8j:3U`tBRR{a9ox yH4-6q2 :wtۑ*DpPb!#u{K;Z*Q~Ga8Gx]`nީ?+|G=tU+{:G51_mr0glGt c 'v4 [U%KQD?b z·#$=-\'CW5`NM6uޣ1SwvL&\l~s^c?:8e,'E`QN3YF1ǜ(j=jG ]!cwJ+ԋѡّ^)ڧ ڏgv~d"0Dc=il6no;hNw-'bC' bC<gZH:yGҜfa: >{BV|h5jsQGc~+0OK,QCaf؈Ǯ'ydp55! #..KzJR&],N3Gm:>o B D/E`U`.Rr߈īUuQ-c'!M;qLRn-dB0ыjB~= ,r%*¹,x#ƪzmbz=Ņ7io񑤟F)x˾juj̲e@#(ZYuF}vB΂F]Ag n3z()6_wcUC6۝Aw%z֘]#/aYH5ԫtU]Cw>IB8i6b>gSFS7 &<( ,45naPpS " ZF ٹU{ܧH9w[(yf٩%G5Z B'`Uɺ̈Րk_:A)>Ǥ@@f`Al1(^U,sP_x\^ '{X珻x.f#dkR<،J%-Գƕ+a=5OeQ[MGߝS9E>+&)S5}w_߼'hhP%܁lb-Cwxx,81@GZuKT4Vjs.,0)~ 44z@E3o;ѡUQ@ wI/_x7D|cW/>%>1pa٦l#dJN#K sS}9֛8V!a[aYYn~eʘ2\+|#z(*Yʃb!QyVֶ9H.v~#F/s!O@.$9t?4 =DFgIH44 ~VKLt}XI+V6G,Zs+[ /`i۴1oxcQJ-'rgr+``EG.rs&Yc.\xI`_MZK#6]n-q@\R@zj뛲Z6gƴE^ 賓L_]ySBdž5`~@<[yǞ1J* d2֢`L2<[NQ;RóN C7E5h>T2)Z?Izю~BYe)8blY3ả4I̲ 5M`]S/,CqLAHJp{(Z"jQ@爊*֤vc߀ǒr5ʂ$bc RSxip|LGԄpIXfjzZa>Fᄗ+Iy;cK(S_ 3yaѐQp/k'u$ŝOQ2ɜwaKfG\/_Vם+'m%im=Hq*NMOF[,o5oV>zU \i+aoGzM]G(O\rsU;/RL~"to`EN#4EM?_ʁr3$=b%TF QC%Yٗ反]rԘvC&l\08(*b;:')u()`ڮLA{6oA-Fzc+R̢bwVl&B&f8>j_2(Yɮ[!|V1>y)W=W$JZO@6Swѕz#u q?x'j; 2٦ Gxʡ%SᯗBa~}Nlx22V~+DCfԦI=|Qn42TOZ=DBom`+dz=Y&s*Űyt@F!AZz1 !OI3AaKe1cMݑU[)@wa|)F_F4>Wj}A%5#']gQMѴڝ >Sb(MW1jO\W~dئ1̸'J,P1#w SGrrK*3q=TųΐUyCwceȶ2ĕlW/Lmlix&F_r (z3LLIFP^{іbY'O^mb >`zݞgjaVZz'N5!x|'MGa !:+ n|tLIen& [X^} "fdx/9BmcD$F<Ir:ÿzP ODQgz_D*Je^}N#+V GOޟ=)F=`Σ н`wx6O cԃ弿ޫ9tXZ-oRa(x^gmMmNmΜ&^ٶm۶mS&Jʶɶq>WO|zޏ h 7W}>w兟 Ͳ,J3s(5~x?j4(]jb>«}%ɻaQXN5'2&8&?`kQo D AX]h缟qhMZ3C׍a Qr)IVY ˆ 4VQIW;@@\cѽy?Ì aoQn4bOf3\p!,д;>Q}f7R';4(ߦ[]*1S`\*;eALI]ձTs;l J_'5{LH QHe~OpRC4ă|'pntN"@gܫM>e=yt?K*wͣa#f b+AWg$;_/(ppZc$pN@4>lzղέ?Alw툑g`XnQ"_> s+wmur T\X WjaLಗhI0[_s!18ώ>A&+·rQJ^N;,BlY, cS >ލazodܻ櫉fy4(Z{ E&yJkbidɵ*Vv#X9m%hSoȿ\+ Q=06 8 H劁̓Dʲi;!㬾Bh\?V\U\"UGl3/F#nt8X4%:H4M>5mJ_e5->s 6w1nvD![l3 vஹ[+{e,hkC ?j>z%+u"wey+]S%Ͼ/tw4j8a^<]kδko&\gy%}_pTE!RTxn4ٮ4삂'AIeKJRMo{9E_lsCG1GP7lۖ~ajKaO"ӣ};5kr5;$~ )adU&+wqagfJ1/][ˌE|h z^arjsxl Ci@,F:Z+T皨W!Qwu|1iXF`qEƙ ¶2v etd! N'L: RmDQ`)cg>"H$95ﵺW)y>%π6i׈U.hAFi~;ӚύQSTF[4tb/-ڐ$ġ8݈/äukeNMѼ$y ^B:˻֪Er:ԢZӽy z2r*HenK~,#O{gjnVQ%,sVs33>ڡ;N (xڇN@2vVG2'ŕޮyf&`k2VM/CN0[w%^0f}BGB+{$'r-X.lG&^U[eWWI#hk[ )Jh;tvbƸHڴ**bc Ʃ$DtKpT'Y/:W\h㍠g0Jg}obzX#1l9^%}Ïq?ck ƉxlFU9}}ې3V_+Dr!pXM_6[$nz[kCKja^q,x%&:9wZy˯4X01y8ay-&Xv 3Sr;$7~cߌ0ӛuvč|#_bn+&APQPT_"JUP!l4$/Lĸ$LRX4 0yڹ/,yQ,)~^h"|xmb|R|Ē jd ;Ԝ0QਣK]zx{L4lxN]Ql&, 1:zd[WdLjTU4 N1`YRgX췋Zyx:vFu>&Q"`$an*E?* s){mҽ^`74̨Y뱓ź`AF'Ka`#R VkJA;Nj_Ԓݕ%;>2I`*v>$Z",XVa\ײ).o2³nBe-7Յll͆_}&*3K q䊖sj[X>UGi8.Z^LGRX-ԔF +u( "(0Pc:S"̖SO%E1_I{w`V ep[(?,3#$$AUZ(׍[,'m~w22sGJ*B79 &huP;@ʃdc^c'Ym13=RXTq*w9FUYgِ\R@(DTT~LԪ{]8Π">=@!?V:T9[ZGx̥4~Lx<PK$6- ͘ҧxzETIHfq7 .kY6ю%:zT%<6n8io縒)R,&m\5&@Χsu뀱Lr;G% J>^KOXag@Igbc`:]7!nlge?VyY&a8>aB$fT>WCQ-[Oj9/.Xz<6uuV, ޜ#~kuK93֟1A}7XYq}AfN/r$HO`:OMU%%FDUP_(5!%4KHGN7QTPemkB ~kToһzP`&#<FThE] 8j=EB=uf8[)_ ^~:l3]n'iO#Ndp{vE֟N^$};M CR>rqFW~HeW ddݝ«4VN4tr=#E1H/ lr60*``~$ udjl7)!d^5jA;-\?riyȣNZ7_k[[_֥/ ?C:HT6 >fEu/lA+B`a #ūǒtRO5J^sF0jP Z~OGM xQ6vqSϾmʘG4)ׯnxyF}beߝDE"i`E$GRYPO ֬3#t[g4u'0QR~VFyB䝤֣n]kP`QcEw-4=%4{QKEze]I),nZ96h a⛠D썋%byH쩉qXWUvrwCcbVe^q퀗%LQW߼|]k "{rԿ{y2|EQG,v-x++ԟUܽC&N6n贁xBH]Kgeɨ$~M"8,?oez~7IhmQl`FkemV -=9p>jAׂ ?, ($9IW ƐIEΆ%ntjl8I3k`P{Bvu!cqBI:4nӚOj+<<&߽p7S#)SYঘGĸ*W;X$7H:i 7cur-3-^5KhQU,CON6B,pRboA+~zF>ך,7GT٨ܒ+Ye3@'rH`qM%f>$O|.3Az"[ogɶM('~O̱S4Lh*4O#-NЭW[?0Gۯo: P/!i~NO [?'boMr.wl34jKMǽPbzP{Eat2Aɂhn!pN_74y2Of^U% SssMP;L崶n*0Y/sFID5!̱*A >h_QYߤ5PIcF:;9ԿƒYuY`Ϣ~6vAi}[jqɠ״JRH d3ɆAr~~J2<'>5?˦_AD,VD$k;i/ .Qވ0Xg^`E.NpaA >>zہ#>?cB n}C_~L 7X*̔UoGhaEl|3?.œfR͡?9iLLKcri9&м8lZOİ/nJlAX5E}aGҟY ,"Me]iq!OWiS ;ȀW>m׷i Ʒ*oCHK֮QEҹL~OtEFPJp bcdp O2( $rG-HQ f ANO ^FH2ĴKB͈_wm?ZVX!}gy3oEn܇,#\44XY,4SD {֭p۟ vFWTIyK/\#OVE?VUCtMQJu1 "S/*b}ª"^Uzb8@wɗM5hn!7N{ۯa)Ã}zƼ'\DMl\N3 ʸu͙p.#0/X7Vz12̘ v0nK?,VSܹgl!EH;BO+9oƕ(=XAᜮ[F,-UKpɐ1O2t̷h eP5(e"rw|{Q.C0A%oc Φ&63 !fW0S[[WGF})_t0 _>wAS>xd"P]k)ia řt:y{ 9[MA~X}eMi*NۏH2/cZ~fN ?~<C-ЫcF%X@ߥyDA= 6 .C3ߛWSQ0~+("M$viҾĀi>y'~ =<s!{Ť57aKbr@'Iz(~$`4 b-BXZtIuLڂ,E Z{D%~[3< zlhRk^ A5S^4]$_8ۄ[*5 !:僋xG&f> Ȼ!W3G.7qUѰ(1 WVŀpUVq.Aӿ'_*K>F5Y>X.R6Tb)k$Rd,b}GM[qAlP О {XzX%7LJ_?k2b'`ǁA(lȂDrCeΟsy n'xݪ_BHRV½JXe|劝Ìɬ`yiˇ]'ߚZrDnʅ2YKFJUBV]FKSР{ 9vR"Њ {0.']hGY=RMXI{ȤYqm eܦs `tc 'ANWƍffsbWưk(Vh%إqr--`v(i)꒐]Wf'jA輙 xm#2Wfh<|d'Ȋr[S\xcY̼ jg׸O>$/[+PTo1݉Ug1oL󱜼Ŀ6`"J&ӑŝ1dayڪĸ`CKhMp|ЩI>eܨÂ%9*iiKVҐY(E+_[޾ D#FH|nQD@dij8}ؗ(?B*jeUcbp'J'T\?5r9V COpd{ R+A&xGr*$=&icż`Tqɛ O3q~A`L"XsC&*>|&OdSDbw^c$XLҒ}~F&[`ݹJ,2(2k5W~RH٫ԁ$S[ +~񐅎 ]OG.7;[hj#Ap걨F#'<ц#bmuB=3@8ʆ*ӣG1/]- A[bn(W5^2v>b28GG= O}!W73fsVĠ'}v6пl7,xE FACdjlSA-cG{9N;~>5=}aMLҡ3F;ԃH݁pO]q훦@:YdM}CC ޡB ?[#n_^)ovK I@|-M7]>ǣi]z-xVr&/37ud}Gn;feVNKA#n,vdYv{CrsU tB* oWH|3ޮ]kq&>Eu" 1CSj6 WW.3PSAb`qo{f>>N EXkC| .l2e9QKlX#Cr"㊼ 'C gK{K||M$sOu!UoA}KVm[QU}fGyJ5 9CN42u7 &ƪrlp1"73¸Oi%09c$ykCmOk |3o=*tak#{,#DzR}(J}8^7zgĆ/"t!;4 Q:KٽBrfU/ S%E^.3$ 5N;kW'8rts8ISwzSyB ;ҽHOPxpdt|˥il@ޓyd^KJ `{ *h?Ww[!}oj"4|NR*L݁-X`m? F?:CiKP0zn,JJS|%97l$=0wce]U=N.C>ֵ4# c׊:݅\bnD{ͩ}_-Mqd<݀Fkeܽ@x)WP&{$m>GaخR endstream endobj 167 0 obj << /Length1 1852 /Length2 4141 /Length3 0 /Length 5302 /Filter /FlateDecode >> stream xڵUy8d9#PɮlمF-awƌfƖ,I%ɞDI(!efV,wt霮w5ry>#v#zd FT K0a74 nE`bb:K#IDZ4P@+<KЇz Q @8p 0 kIaFX*$w Rt>^CWgk##ٟE$` S?$d z`x@;Rз8amf) [)rѱ?2@# $AݏVN1VZVfh$4Rz߸C̀_ԠT<|TH/ S>m~V*Ox7$p4g&7DIz䟠7$%ikTW,u;H4%A4,͗ l7It|)z_6Q&COH ~bX/?cITFY"HgOhZZM#1dH@ێ:n(*hMS]N '@:Ȕ@ O /O S IӾ?s (< nHzɡt7$IpcT0/X4/O }hCۮnH“n_П )I ZZD p 4%ӠٹzXoP {4֛@ قtޒd7F@SHD(9Eٟ5}ۈXCW~q0hbݼH ȣ!R7qйHsV21L$72@rd, UP>`OǬftOK@ZߖQeA/K@mC4!|h(o|~P*Uвـm߂@Rϋv۶Q^-#RB8f _NدG69 .' e QJQT2~x[_6@0t%Fx?,-,aSFLk%w?ڢg;0V #Y4ihJN }]m%@iUh]*YxI-El[nmB%1}}kw;Fy5I<=VtwQeeϙ7z+<"7evM}Hw@ktnw|*W3Dn2* 2ULN$c4$'mi፮-^'xlo jB7$9ڽ^s.i{P%xa21$"騁靈R}Nx.F?ZI`/vDh(>`y/MߠaEzþ. 5 LrNۻ">N;x.o"]ͷ k0p% ?Ƽ6$vQ~Х/&lzi2a}­X. 7!+/.^ŭ,>1 >nq$kVxW'CA'r"qFnn2qG&jinXJ"͗ Jhz<}6'@F!dXoW$-])ͮ0ɮJsړv^ʴN7*`p`L{g;u*cT,fm꤯{I.IY_%b2f=4yG{uėBa YNVOj했0b#ߍNt&!XW<\D:0OzZ+]|yk׼ks*G ؀IwM+a8/3Yú{#TDZd8gɌx1 nw0J,xHtTEux0hm6q ~E-bbJ|o[;F^댮K}̘g18 ൶כ7/U"LWn89| x25S:feKQWb*)nB`jo5}v|3p\,ä+e2A'mIk^/6s U3ZԹ _i~s(>"ң2VƘ{a,-yOᏕbs"H_S>E=3~ Ch=.:)4 Wj2ׇzbCRu~=k)~,IQK_J Pxo5iN]-!=lrZבxϯ l=(^xn@fw梌:w47,̸Xd,_wuؔ,NkVz `%amΒ9b;tOsMxmsklUFCUkYAfdңf'[KYOuJI8 Ǽ>S02٠խM;?Ar5Mxȓf`pk_㋜Ş'('0͢Ri7> Ivͅi8z25qa EkX[^ Ott#4'lƶW0^yO!H~_ѺxD?E.GF>wתD5*,Z\?GJĤCp6bDRBӎKX&ԭ-A_dʓo\Ύ +;g=Xzh0.M~f_ }Jke9q~a}ۙ>k#C7rTJR)=S 밑AԬ_Wr&XnvC^G֒2Vg߆u抱CmeCdc?xk⤚)qC+3jGco6+)FE]0Jͭo+36o}vuӌ= Ѵ2K#ףfho gmo:N>0s,Ica)ug 0>{M"6* ͍\þ9ٟ|C볉8 e9FɉB\ïeLLG֋ηEɒ3_e.& qw8? K)|f|C y9[ { } SDZu}8'm]-q"xqc˕_Rmz IY+ӚMUdWZ-R'5/SEQJ wâr^RѮB2%9ߨ5¿cwH}3/_P疢vlaç?kr]*5޽RvljG9{*j=7#6kN3Xc_|`)rILN,ΰ|AI$.c+V9ʕAA7agT v=]}μ/96])9Ŀj%J=uUe頠Is{ZJa"ÏHX=ǽFZ2zNM&ۊmJ#uptJ:=5쳜5R^3mǾe}x:CwNsWrNި ׃"0g #\~m t,Kdg@V|HUd 6>7s<׻vLFu0%c&Š&֧[1"OkMtq^҅:i 'v0#n'ptڽT8?6w }s»O&rsʂ~0B?=w;MA{h#w;2rM*jeD<gD=I~~~_WY D1fJ~Ԭ!"rT΄wn endstream endobj 169 0 obj << /Length1 2887 /Length2 32928 /Length3 0 /Length 34555 /Filter /FlateDecode >> stream xڴeT\۶5Sw/ w ; BWޓF}9 4٤l\ 0;0@UMɦrpsrx- YK0P hX!NN!:8mV~5 R ` hz٬,=!n dȸy8كac]w4;@` (]} F+`tt]m9-m6;hU`Jz]m?u ~;V;]MNGJPS\ooFQ# j vazر9O|z5 di'w߻Pu<]v@Z IiwM@h-=UTX:@%{y,A6  d<<~s?4+]2 K1K?ze[<<Wl{3_65)u%y9m6U\!}E'%* p 8!C*quqD>YH~w@>dc6^n w/CL(lv@0t}9~5/\͐Fl-=A@J7o%qCFr\Pum(_ _G rNm\A~- +2rvVt2w߿C+D[-<|6`k[] l )3-t)gB?_6.^A 4C[/CQQHA_qr kW`a n>>@dm  ܼA[Wm8 $rA?"p(A? A  A0hA?A֧A 3,x!|'ӟ\? < C ;m<} ! 02BG'16? ?h'7G^( 3L?![`f#bst4@d? Ҁ? ?b ɮrC )f \cB5d&\7g>]ßImuDV"ٹ ^pA:Gd@?6RϺ =-=Q"i% ^F뇧?b@`+? 4C*=VnN?Oy k=\6YB1'!_Ȗv `q AҼ@O _uBſ@@/e}Z$1=:Xt<ZqTܹR"٢=jDY<2WUEa0P]$VgF+}``R 9B=vK\x8kX$ks{D!uEhIe~rƃ<៸r[tO<{QɠCh)MP|r3acg1SWn&8zspygۺR|(?f4CEN8 =tZEc [Q(ֈId'@:NErqv¢FR!1emŭ?%Vg'`9ه22Tu,(#*BddIW9]Mi J͇A|"YA] }z5oTAJJ-|'-Aj/>ĸ;?o./f(+6#j0/afb Sj 9aGbOꔊJ;/D{z}- k=OVIcM8]I /t!a_tnZKf=LR<-aeL *NijMgGUwd_X͇<_d "~2 DG7'`]pcDanwd[\o<_kӝ%1E5❱B pgMc Kxzyel+!NOgŜ'\6HrVHj/w4fc^ KtÝ]ukzJ?ڃ:3VզNx`./*ذA;$5}f1LOb?[OЛ5IeU{ƔתiK'\ACkOS QPoҶǝ:U.V`|hCFD_b5ilԗf}wydCz7XwR@UAJ`)8y˖|JTpEZo(@E#dO"LWد~ JpqiEtߍk Rm,dJɅʳ.Ș7OmӚG;Sf̑QS)C+UP*l((n-r)J}nV-g<\{e'Lfp=YxH=Ğ/!+lbDv"rfCG^p{pi=\R7 ]x'̿xpFK5ۇ<Ď%>5r׏ٲrJ/0^U_?|z +qag#fkLNYXc11XĺDnʧe޾/4 ' K3r-\qv> ;(TozHwmy[9ل~Yҕ,Ș]ZYL1-Z/l=^ɬR&ӕh ]:B%Y;KlLtOa>!S(2{ȴ fը@~r)8 #\>Txǀ=̓^2(L|, =` F]7!1XPݤhh& *&`&1߁os}}4?.nY5nA ;i=0~Ya1ή]~2`E "6kkWFġzK;bؿ>%rTWMkݱ6gs~8-Da!%aa]xm[}DߜіH켕0dS2ܧ&ZI@Afӗ` \ R&i1<4\F^b%]KG \rwȯK_TL:'azrF&Ѷ45#^*/-k(pw"O"T5n^<>,O%jRHHi㌕%-5fFQ{A,<-Xm Q6ꭐ5n-6NI\SU[C7YGX]v9A E]PC~y GKɓ֏m"èʙOHfM8i\y[%D)qo:~ڗb]Wݕ%kEK(Xn r;<RIN ĸ 'Kk!j$; Td oľN8rЮ=EY&:pei?;%0\]dxnB25lt06*.1qlt bׁYꌷpMٶz: feIR)cyrޜ>,M9׽u1fw=cNY4ږ:LтAsɣoά)Idn ^cmyyA[hΊW`aL* % rFim_;@u1!Y xw|.}fzMs2IF5~44~k9I@ThhH`?™z? z*_}Z^W3WؤVu>Z۴F #T"1gLOLX3 dkϑ 5Xz.; wِZҍ(4L(,[VB~ZpɝzW $_g@մG߁lKf|}}\§љ5 &x5k$iEk1hvh-IXOJQ+w;S1fڪF i t!5Cދu:3CwD`'^1{]H3 ӽ7H є[><ZL|ʓk8{vԕi{vlʝ:2ek-/1X5]FzSϏlhEϽ3yPkbg*;I!DU¢-R`OsTnŠ8,R;yX!G0ig=tk_S<y]<_8=!\KH|Er!f =`"B3Аيh'E!UyYXaC6T3]bN^j;0ۓqoR=?t·#+ty<Lip~|H2ՙCW>bRhl1+ Ңpv?7U e);r=q'VGyf$f}<+Yݕ{#@2žBSJO^@ am(xnvj0戈6w^JB֎QNu^4D xzōi$3LJA8b\5=ͅA9owե.Px`˜nΙAA{)}jVOy+iZю_6j%e V|/@lׅid.o%H\\aG{cuNR.ΠdDcdV/ N!wmʝ0fTiGX cZ3`9S<}0t:wDo/OLڴՙo6Cߒ契gQ`?U{aP`̑-Xp(<2ٌBP|5ЌԉyJ^Mvy-b7I~LMHu[hCصrYJ#XQ| AՇ ~#RZ+YҮ]X~oٺX39lwXH Tti]D#-vN,2Nlۯ8("{~\?z'<>exՅoY(oRҝR8fƇ£̝2c]nPVK4δ0;zF!E8 Z;~] J^Z <"/=5g 9t=JRr%vˢkPkQ]rÚ#Aoeza"۔8_t4"M\OMW:PϥG]h,9`e2\8#䐍꺰;(frJC>ͼ8jyYjfLs8cT?Sɋ~3~f$)vc[ G,[*:\`HZ2쓋~ vOY$Sx2?Jide ^F˅-eFq #|o՗lKUo8I юXeڢL|֗F_ڒC3E"yYJ"(%aҶ_gxRPGm!gP[,B4,*׭fg kVn*Y?_F[o^_8|lbDѼ. ..h]Q㎄Ypq坂ӭ d|z1T).!0gw((CpG}e/ąpJ9z <ÞЎ^, m>haB-G ?5'1q6Ӟٛ n1bij ] Cmw,{F=!x 1)⶝#DbMũ_bm'NϨR>_%R/s.qs R#$5Ć#˜˕Tl=¾5S3,1"#H^!Cq(DKUGz>pǙH-xm{:P5N~8ҷKCNBhSf*D/m1̼QBlIq3mT Z\A RV9U[}:[CWws%L ߹zhziZ5K`qT"ۏd{<4ni>/T.iL=A^:U_Rd&n -]b橌ך|rSHIM4F6n<\I9}cW^}:[7u^*O}D%ΎBsJV%۴Z,W۷y(Sܚrf J&ϸRHx^twۤ@?~j6$rx3VcZ>L4Ώcf3cK6f~XY#}mhT:8Z/^r,'>_} &P|}N+ӚQ/m]K/zg}Z#ڔBszMai?{}4sCL Me9S-<$/\1 E iKUQ 8# yKpR_K4DVwaDBCDڍ">PZf_n@IJ ႰF?8v]I,W?+\=4M},.qgԜlfsSۮQnSG&LX`qʑCKAb*[1cdxě*U[[e5^v#p"l.dOYXp&sY[H5[I äpˢ9t!kKWo zzFv NXiںӡN>,ZiR>€/T̵@9wf^[Om5x۝ |foDx-MΓ󮜺A[s3X00%ZOpMk#-tuҭ~IjP7ͼ,{P lR#ra -=};7I/\7F>Z܎L/h_|*8+70Es; P.-G[`D)&#rGuVTTWB4<'w#wL ҼupO6@I{{O6x$A$mphzKJQ~]~JAاl-MOHM?ґrVGk\Hit :f%zݻ^*8YUQPyg0Bc-||ANUI\-@u9*STw'"?wNC#-f6,^{zvPD#ǖ^:WTÎkO+ϧ;`ƋX$BTЇ:ǟ86;jJ^ pd¢PB},45Vu-#xh?R=ji@I [nFX ~x_QLۇ[R-9r8g߇2VKB duº|17+W"B2p&d,k?/^a ^˕Nr@?B^`^ 3bM"L[g㔤Ҵn)AR[!-7A}U^a*.TBܱ_~ "`\.+!5=oQkaFA} X?}JGpB=&[_Hag}hXgI&Y!dq6IӝjKfE^0E}:C>٩\ N%yڧ:Ye,Tt ƪHj|wMpI0t J(WU Qm1?N(ֽyN@7G6Ro7.nAČ7@ki29~5IƏ " a6;o,XԀb;$ >E}R$ஓs-Qh( p> ŭp^~{x~w"ӈzoK]q%?fMJvϼVz=KūRˮPwj3ġ!ĭYWwz_dŢcybF ( iԾ's`!&v:U/f:Օ؁B| [q/aFqpQØ[#oqp_鋯k>x>hQφf,k;x%QݾĪd}:d*-EX^cRfPEuVEıs&#-91:}3u>q|sS08"T ]ึ±O ^BPSCt Au8q7êcp YfgCɚ#l*pD I{x뻠a"oY[K#wg¬2Kmm VFת%&Ϧ-CbLNϾz*)5XY{i"~o@r50qyRl@{8i.f&/%w}3.RTJީm n6"[uTS2Yshz0$^PrSGN9k'%c99wۻ 4BZ5hҀbiP؟?ξ)u0*wXrw씌#(nB`վ4YY -c@M(^=L/I, `gnK䦹Xzfo;Ĝ;p-l 0ҐWTEktV }UG+b264 a+a3&}ڤKl(q3HAOOBwy4yہTol}01':pw!P ;X `v=U`j9;&t*醋uϳYIWsZKrnPP<:I(K+ j5bFA|ܩlEA].zEiBK~3s"9vAY{ʬ5hL+ y| z1A3".7 {o+v$j9VWF$Ǿܖs_f| ]CkEGܑȘTuqƘ@QxZ/ tZ~LDS")uW?3 c㘤.ZhF>W[S`}J@iᠢb{벆O%[%$'!ufcN̍g'5DS; P0nحN~`J6!%0|g0g")귆w8 "y^B6ho]5)bԳf` | h{R~: xO$'=4Nq4"z7كZ{W)Q08# n{ϣViKNAˢ3[4j%ص$; eF ~$g z;zc5 Dmx9nRɉAm2ޘ=6vFүOc.PuyYbB0=S-0V5(H}b"s0uPI| X{2"}DBV,lؿ@kq*$@8)i=OqH昊@2G]Qyg8JQ QU(%!5 ZjJV}ߣggQ~% ڼ7EagxA_] n)ЦXdWmhmdc֠o>wn pfd7>RUKw(%21s, {nJ#)P-z[vV g:$tͼrH3\q Вr4,ǯȽjs_1TE(Qm }a{h N+O(&7۱=2ґLTraL }:ld>q^D7y 1{= ^{VK9j; < jVY-{C:L충bZ98vy/g\Vޭ4jGKe蝻95p՛"{u'7gyT?}K͒xTVLfuj\N;dAkRxR.-q/kI -">=Ǿ,Nuu*-!,OcǵМ/b -븦' =k>(H1A~OC*vH%CtYqa7{D1In.Db4lB؏dZ%l],f-e%Y{:?4(胵_2m |;v=}dPY޾dq!\ob_Oy6 er02̻( (y ɤ0$%uO2ael0ǟ*>Ayu.dعJ7Q_>)?%? DXɗ{fvf\ލMm@Ш\3ԕy%ŦJmi37@ |6Uyз ;ŝ}3MI?D4s?\&qjE0!5P~8w,GmuFx=Ws:V:,X4 iy1^L [k%B..&] Sk|tLD#cwN߈b(Shs_(DĻ{0fM9pl>`صf{nܥs6kmjnәɛ$i=iGc+Y~9SRldɶ*m0rp`3T'4z6ruPMD$f_,' 4ՅVZau%/GCl#MH+ܣ'zS؆(φIsX'pT*c87n#x:i 7mR-A}/;è9QZ0f^޽"a@ޠU%u>= [L AE߃7-pwsK%Og9Tr-kLT5*iGZCD\(;"憔O/z.TK(Am2Ak0oHLC"vJ ԭOac φt FB dw#<Y$m׽3rU͖b1<05d~(GgOx1Np716^206%z"f? =2xdMe¼ݐtn}2|ÑF!ЄD.$ RCIBϏrl".)d>@)/L..ƒ;ͧl}ĩIf>5t-mp1:YqM'اE/uAei zw|BY__~PmBU]\{Rz輳pDk0yqw21Trz68~LE|Gq%!2dY Oh7!~9 m$zj&{\%sh[@.vnL-2Ӥ&JÊ;J規O,I J2UvUX=>U@sWB cr Sn4TWudJi.x8A5-'1=JT ':0p1OO}.5vCU[EUB N^qu:W^cEd2=_2飩]뻊oɂ{v^k Y??@]&KSY^X|{Fc9!%~V!Q]T{nϱʵ& J¸Hcck3`N?|W3>l׿Va' 㻨gu-򳇸ER&p niïS2}sJ/q.6Iȶ֙W)GEYJ|,^ζm[ .Z5l՝o>@[=[4%j%\&F$D1o Ӛ"`{\Q3Y]{1H* Fud։jf!ُX(KPG׷\f}Ҟ3)†GP;x_f4sadGTPTAÏi@oږRw+L̄3{/M 4q?dbϢboKN2{Fu+\Ju.Aj7͏^M ?7t@8\uk|m4!aXP)%7 Nf|8>b;)˦ς>+4-L?P2?_h] <"jMjռrl( MDI0?#@~/@п9߄!R ]#] yD={z2W$578필rD2SOᙎK}Ex?I no(Fؠ ˿C)3"rM݄8 M.[fgoȾm4߰\HNw><~KK7SuD׭y!OO!M iyrD*7QyY.+"Q3XC,/;͉F,qQss"#,ZR5)vwSfE}PΐwXVj^D(!☿qlUj4cfUʸtamLWYOq Ē8N FY B0qx79,a4Pg`u>O4yu&4,bgle<^{ La<1mʍѲ0!%t.- y=W,84f֙'ޑ-CB!Twg 'i<.zE TIc7Gx@m6`DS7Dg0[mmyd!_ QƻmNԼC]*tq `SU1;}uf#: 1J]1LmTA$wtԉz&B.(C?7<\IvӆĀe7 |.t9T}& Pt:2ы t䏬v4^%fTcCa|Ts;t]Hc[>5Ͷᷩd d^,eVvb'] GDАg{/?ih>0;;\`]/ȣPp, xDFto^|ՄU5-\ltl >Ciw$>ډQxOie_7J 61BR=^q!.JJy9p9rQw_܋Yy u8)=~HH0!Ka,bw7䵦5v/mڵJ0< B֢l`^B;BnȚSVb+롏=Rw;?fYg|hD+&<h>;5vz#z1C_^" 3`2,u5K;5e;X:H CQ#,. ; G⪍3ߋ:Ƃ{2mTjobYGϺqaILyKsL3RsNM@̔h\͵4jZP&MԨRb2G ZK1Xt a0gLƉOC1BVZÓWz`7cR gΟ]%NpxՅi^$̈́]h2\bڏ5Q3sp/c} ?׹-N[Cε0`7c)_ԃmjK(}C0qk nH-L·H1B^/[ΔE ([gKǐGCk-O+\gY^g!Ge 7 &6w 5M&e>@G KhQyAᱍ'ӊ- ƀ L#rù<xV?M$P fР=p%"'cqv[2t78;is ? q!uG >%ȉT|o ΠzvwEZf܍ȝcS;D ډwY"*UwŬLod-GGQu# WGo<!'QsTH#/bJ=|nq̶J1N9 } D@ʜGriS˜GFyOaV@Ħ{ѵj%=9QN0JS F<޹53jEo)E`)L\x$hK:w'p-3tJGިt~OyhB91V-}V }.|=L0@Fi,|Z4a e-i$1'SWogm+/M[lX3!z82}YN M<(zN\DK\ U@x3|B7Be t12^]Sç^۝I{գ]V.`y؝Qh͇] ҹ7 T]F ^gq9]drCmWInc~JmŲ6J$h, UH0(y /xdxQrc">V*c *7r}|\P ڨ`M+u]8<;g.g6)( D;h~vgl$:=z,pըJCn1JT?c5N)}|$ QX$E b!S8EjdS9?fjFĊeEUJR?z\#{6D4SB?]a)F~O0d<=o*坒+պ ݻY6ɵ!aoy=@ɚK)\jN˦wj!v^oDxԉO]4kj xCiZmN:6[Y=^%  fuVo%XK" (\e98|v@aϐ],>UeˑD;pMx+:E(A#z-I&HQ92RLA4'd%H5t#zYU~ad8BYd9!ٗ+ D?gg:OD?_glj8Á2 nѕ [IrԽ_fU`l$(*DPJ;OW ȡ E]U99;40Yakd2Sc2O/ћJfmi-Ʃ,ssRMa+OkT>gѩjgcmMMfvؚA);y;I0NlplC$}]J"~e62pCא%垤 _ 5anMgi2+DDzd1ҥ|?H`0ɗ)ФڶlN~>`c ޼ܾe~7acƪQOCNOW9 ɲ<%WX'7bkMЎWݒBF" 03 E_L!I&/jq]=?K`cΡOׄ}vPΆ&$B*' ?y"?6ZU ;qȂy _A(D8 뽚氮Mh:@#\d pnI#Qǻ5Zr,4XlBj5+t%[oיxѓx9e{M"Un#,y!Z{} flܷ% RT:Ew!PlM]DTݔԐgd'NtcO? "櫤^ᾷR\ۺ˛P"jv9&Z:֏39^sݬ燌aB_e)tMhYBS=F/ߟ&([;,prg?PND);6c1=vNEJ08 FDPDg S|˻`H=gT&,x&Җmt3'2UbEȩumkaT1I9IzsSDV`yu-t 5\q;m/u; verRac[4Bq/pЇ2 Ư|2&Tw B͞ԥ/0Ot$SIgJB#MI5)ֹ>Bs=5w36裈8ut1)+fVȤĂ k jG;O[1Iwܸkjwknv!_T7ڝ =Z䲵ĩxCFgM<{Lu(#kZ"G?{j9zJeKz?6| oJ(tM)S}]kǵj rgd<5k8Q`QK޲ipJ*K#`h6UQިBq k v7MF.y(@T "fRix>oڽlPKN |,rW\xz 8]-uҴ`Pa>W|HT8N)\7d,ݮN!49E͇|M-`~Ixf&/dZ9.(`FtW?ucuf!6uh epd gruzgd t(.f`J1mc=#Y?Yhb8 Dn;NZar c,Igh6k0 4Ays#e|ڵ"7j(A\/XLEs/bA;yJV.Wzs.͋?Hd d2N-Y'Yꙡ?eFG M}9;80cZg_j'ɚ9sB٫ 8#Ɍn6 3C$Jm U`P(j ^xܳ4C[] JgA)m}1q59 ( QڡykKhq\MO? )(X&~h-.~!'M{u|m;>ZC z<;l+mK!ZUyՐ4miH Ą:/0_vzj{@{!T" ՜0rIg]$L@<9fYX>)o gyeN=|haWPϋ6\(w?U2]9$=NAK.U%9lY3-G^f)1KL%)*C=??~?G<4w Ҫ:>kcԥ%lDD _b&]Kg|lZcLQºͧv3XC%4<>=KI)KD#&IbvSTXxQ-TlmS3M?-u|Y9-3sS2ȻtkzbXPQBc*+3AeHS)$Lݣ5"Vz!1 Pu _~1S-$v%BZB-up*O9z4,w {UE(b_lS[ay+)6 67`Pg*ǖ"$=-[Ra/7`_ gIZ\9&v 1ղf~8S^ۦrF5Z*iJcS/r.T`FWȘL1؆42 tL_4uuF[ ,"^.! Ok$k4zPL]EAOŅi}0:/Vlm[ WUw[ULobfb$FE YN۩ 3 XCRBXGjesC|7֏ALj#d,+o|H?gt&1_ EeN (uKkp?:yH~xFPX @qE@ .Ih;pVRhhxݩ_ZS Ys]6@hG"ޠpBFsqk"B>2#3N`ILh5-~B@\+m[j +SL,f&yֶMB=a<#.J5mQ ziU(la`s3nIGBfo!V'Q!)cQc|-P /JR)wW+T]I8Su+JZy0+Ee sb,c$BXhh~;$P?k 2#À7 }r%Ձ.0QhNJ39[Vu;`̻ܶ٢2:sdGw9\! wT^'~UU'5upLQvE\k1Љ^XY{ga& Qx7lwxK/ҝmiFq\UFҚA@?xK]břy*oe‘]mdK0Lkb/5+dW3XaץkªdpKw$~L%mbG T\G.MF,IFʶ@0o\C[C(+Gk_5ż@$B;&cdOWV  I p<~J5ל~u: !&=jePѾ< 7wJ >ZP\ٝ._]zȸUR_USvC)/Y4!8װd P"?I= eYl*c:*я ]9J#07Rq;2N VY^ -)[ҙ߱8ۍurR+ޣلՃ^d]6ĩm- G[lTO( ~'5u MtldqTYӠ~\- Ss$R:0qŭ. 0oDղPH4&g``wR߆w9zкK|}&z|>'OW:u.>)y%Vq>B b !bߣmD/6.<{x:#RH^c6pnG@ITMeu5HMHi^OE@< Yp\|cBvQu#mG:QWn=m$o5QYZp֏ww†pB&K%= r&L$et .#!016[|2ǰ ,82l"T$'%"c ۱fFq`B@oBN PCJ2/?ml)录"+>YHMbz6OVu@^nH"AJ"!‡[=‹Uyv$)"8BQa=WD_ӢpSGUu&qn xT0_r <1B\:_Zu`s_u[*Khe$zzq`:hO_"B(i(|pk ɚx^ &^Q/HљZ7ۺRK/#h+8uQ~ɵ=}C]wM_3vW힍`iv9b1MNoDKVd"f#'yTԌQܤ$BSH@jR4ܝxAĐ[|_IK/0@E&6_%lRnuIʉ-}-+L.Hay%AoO( ~@{Fzp;ǗgȃA69+WW#!:+=ĦN5g 2ҁ_ie.)zXl&T #=@ PϸZh(hʻn۫/Ų4 K7RHd$~ޱC/e#FI*6U10)~c?A|(ovxԜt* L[j&S 搬C7Ë2n 9^`)@I}τS3D>^M6-l4 7p>dƔzGJ l `](~IK;)Gu 9I7bhL;xdL)(F/4 t -͐r>ВOG`Q Λ= pp +[s/i;zI~OGA^8sTC3rN+/>5aq)rB-1iDY3O[? 8}?s9f i҆˟ }nfb0Y` jC@u]* ȣc61K{elE8 _@aw70Iƛ Ax? ;" 2 `!)9y{yS{d}55\&a:$W] dO̥VpFxܡ veD~f5GE\F;HGؒvP ѭ]ȏ=}I:s/{LctGqR+vѵǫ- ߽.2jLF~Y lv(,]xW:5 +uId p]j#C ~_ۃZ'.iTȕ+!Y9>UL*nr()vqPKR-dqQ9 Z R٩%E.x*!LR.UVYfʍ%5H]=byPz:g;kJ2^l9]y92|+fPl~ u~;n1V}fr)XdM=%+=MA?[ l<7U=kCz O]㹌b3,ڡ*v5H&?9m`ٙ)j,MS̾=?<5)~|"A?ʐMX*6бe)ٟ*܏1{G=^ܬ&”x%E8/7*P< "~D.:잊 Z(x;f}:;(dYbሢCٙn(xVZ]+>9^iF"G߸.)^TY]$G!Q59W@W &JE V 5_3 V^o*GM26xm(9oqE ,,^Ix:ɟ.+xiPf0#lZsV&j&D}W@7\cś^)- V;E=ҌؑzH[@Z9%Ek?bKԑMX/ K%nΌ=uhPa,iE.`3Zϓ`T#Y8MܹRɭm5WfEװ,?i%ė hsY8|[`1#xAs$`Ͻ7ᘦ2W ~$Ovd|ĞĮ >љEU 9l;a_/ F B1PM2^c_9iX^6vg&ka]--VkJQF$ 8>TvNR]+JŘAY,V[ESa›N~T{|wAE_g$G[Twd4%\$3_1R# \wy`BAPaJp9^ Ó2DC¨0ʧל/zd>>j˻^Sϔ[1_@p3X> QNfu_ ~R>ףFEejM ]#.bij]D8`)x 5NlN7k_.33?0ځuYy:^RѼ hQ7*ՅA{ A^:YҪph(oeuPl%HasQ/&΄z9VLӝcKG'` [i_Jhsujع+#-|( Jڴt0b48\Terw ְ=[Vo@5 UO9Q <.Ӧ;&,&66n/>%-9W;j4!ROR @DOr\@ϭJ̣?:H$v @51*mPK}(ӒYLWȮA >SО? 췿O/,SmV y$NF`g6  ˏZH90[4Ewy1emM~|jԲj +?Uy#,]-3DQ1wFU{>/Y}t&'9K) R&A!*'ܓ%8aR5ahkhyv)dT N~t zFҾUAVa0\khBt/09WChiAAjE$akk[ bp;mRq4nD;dcq$Ӽp4-?Gý^Vw*O;eFqTn$Tw[mH <+7 -|; D|aml1ʫx=` FɶyѼVG#CQv?\GevIBC>?Ihf ܝ.*oԿ_i0Z3bJ3-/HI+A4LL,OG1ܠ p, .fBw:(WLiM> ugWaE}J OI]_П2mg#248ݑJEuiu. %IadžƶJ`PM9ܸKOUi9Ë=moΜ+hRl]Zhh/\XZٙ 쁥Ygv"@fmz7Y[ j6?]Ddc4.dC`r_I>)B.k|qiqi$l7O.9Oiov}gc /wbXɨ%~ -^EוpnTQsL?O7 V_űBv`aq7<:;AX*\򌿚dn9/"ЎaôUtE26;?D> stream xڴuX[߶.{qנ݋'A.ݡPܽ}9{<;|s9EM$f6JALl̬E%u)Ihfo `gfeDpڀA@~5@݂ ߕ3OT5]\L]@ H"vtvoySs; dgVb(߅6Z0`6-@]@F]EKU=#"%S֔2Z?5ʚy +IiiJ3o2j v'ՑݝŕlhO}6.w CNWk]9$ wwNߘ2+?S+d 27t5uus#{->@ @oR9w*]~g>b 7߶9b@=o.LILYNZJCI@LJwv@̮X'&eqXߛT d!vpx/}6<=YƶA /n,Z '71! `@sk 闿bw"|KS{%bpuvx#$6{ ?@`߿4?J>`'hĢ v}o &?rI+:i/No`gSٸHx-Tm\ͭEr//?"#e޻ 4]\r^,6I6 +;7عlmY, ` vFܼɿE/;E++  ۻo 7 '{(<K0g3k::6ɿ(:xw2ۻ_ߌW{x3q `{{\>_?Sn* h46Mm -**c>֕Y6N/E) hϠ)+&uq_[&-DM}|PFs3;)sJ8g2Z[IZ|]o)孫yElMDSoرQbKLCqG{ЍҴJ6&hfUwkEƮ,T2* (.hk9E&/719ogq6(؊'۬{*/24- [ę&zQomP^FU4+u$ @A#'>y`.M(p %9;`O:ĜZJ]^ QX}mqfȢӅ+iƇ*` m]Ҩg3A_Di탷xoE&O{IIutIH.C'?a;+Xod(E#øOF~D,EBiO y@}ό>ԇgM̦[_eȳ:Q }q&qAɼcYY?Uql:FG vћQ2+znuuEђM:> j.k~/[(g0mDzKe._ZM[",fP,Ab/Ё?SM2,BNxbze%>hem?>4tcst$S ræ|"^|6n mBz;QOf0AJ7uRnR-]2b-5$uNKm_4"NlrO, <, 0@>Zm6-jR:-jyy\@㰈ė=>(7Ž̛%s-¨>jXLKJN4}EI_==rBj5s $^=-OgZk~ WG~=KFk>nRc>RNذ+f.i̫Rߧ2Z S#,}pc{&}[ >&^ZѨ> *`NmivchaD#3w6kB>n4jHΞ5MiiLιD1To쮓bo+1Twkbpf95>E^\:nqߜ.B|ڛX_Rlgt p#"f >$`?Ϥzm{ ʎeyя{b穹}WQ1] '-5MFܨd4fy\0:%I!͜wR~M_qٷ2",c'Tk[C&œ-i)]2dѢNX}w0!YKUT(Pvo:kvDsU1^'m?ᜳ+E2-=50PȬK,/^##2gsrg~0M?B`1̐L)faeT(~KH >}Xq=Q`[6,߇ӟ6|Vwzu\Oي&%)^OEwOH?BغpsݱUO ,S~#fr(yZ9),Dz!q{nD+F]톬py},y.昝;^ץ؉/2kbd3}UɀE]s6n@DZF>N)-`VGP$|R.NJֲKJMo '|d&hOE=q+[왳(~lw-jyψbV~kBڪ.no`J*m= JBm蘕QV3*~@WW>Pa6ZB1 a 7c* ~}qdct1dI)(:oBxf?~M3F|;y|A.5JX˟qA3^I*< ;ti+5PDpzTBPjaB^_I5O4F]͗dhCA Gή;~oѧfkI|5,3qİDcrk8*>] ~9YcոL<lCuОe|DaXq̓_}G32E.Zr{9emƕ)}aVJDO7)M0AB~<T0 Z}bmǷSl W\*<9q4\ځrEw\~C*DMRc="Glf)n^IW6+yKeÏ,rS$$Sǁ?&?1G&qqYgZ়ti aNx1G`ov-Yv097HܑϹo '#([~G0!v!hvV(?iJ{QU9lɽT= l@Ώ|QƀF#{QkfcّH iRǨ]<`.6TrLH*|So5O')Vq"ҹG1DmL3Q avHً-_dFH6Q uyOį$g#b5@IOFvd|/u.!m,{ !Rl eџ3 0"s54g]@U(h{ c. IfX]Gan7 Eg̬sED$!m_t= 3 |O$e2dkI[VYV& N]^͠ x'Rzl&BrW}iV\sO.'pA\<n-_5a׍Z%`cN_ +ׯfoT0,fsM1P~#)e#d}lB;h@ K NnmyVWw*]5n5a7Exg!p!F1 pZū#ْEHl`qEXq]qOzH5 Xp 4;qEIt2 ՙIX6Сo1UΝi )2w~lƶa0a'oCkI]v` 0 ْw>SQPί)/>{R DPY }g) Sa>P϶f]|flLª bvѬm&pKJC@}*88bg1P dR<7rGIu LkA %q,Z~f0Z~3{7Xg^3GX,9reyԘI ])bwٟ6g˷Vex6ȿL_̋}mƆfocK-9PgP W^{cKZON"Q: ~(d"QEQNKXtCs6^=B"yiY\:/r䃱$3UY R1?"Ɍ_#hX|\Psm)Su0_梗YҠ5*td>3ԾF+{NH’{2ʔ7ۗD^Xۊ@ \K#gǦo,|nO)%H~{\I5lQ:O=sW@"hJD$Du4H8)69 'w;ᬥRʾgc-*D{>2Lt bG8c]j;dĖ*bAX=/eGIQ\u=\qEh_fۨ醈 -6{Mϴ!HdBӿ]~n˦C!xB \nZ :RJV}be CԖΔ /_1nmv>y=ȷlzU{~*&D2rKV24/E7ˡ  IxD2eSV~ 㺞+]@#dEٸڭ|֙<l6Q,ghgʧ`_t>2DZ5NyZ_KYK:ڙtuʉQkEǣD LxB 7ienҧpy.$5a<]ttCeM QSqUgKWƹ98H (~V\pHUKYDڃc`I #gC]2PJ!f9獬>k@%R'hIȊN_ mOe[d$m^8FZјk"Ee)9濲[fb[]{mխX%k"#x<6иukޣTkt}iF}I˽"dk'+%zV6ݚ6tC ^?GTB8CZz=Q%-H$@8kZ'ZxUS?<"N !^)p!bUЩn fu4]#$j?2]~Vop>gѬ(j!*VIJh(:UkR- qV7>@#> NZܶ|`Q4cNp9k7dϛz鵜64FX9%/9=#FDCs%0FQZWpFeWIpfFZ-n“ Dx}u˕ڑ;^m[E"_c\v"]%G=ƧRE?"W~<sb]> HݰXDL}#7U^ e$sk);דq iɰ_ˑ,.ͿF4?B_@NDs,TZ#@LKWuCO'^ˑ|N3-C_ZuJZ*2J{FG?y/($*on^sn՝m.Gp&RhsBܘH:a Gkӟ3\o!,bG*F:ڜd]5ƒ7d e)RS%.t2}zڤ~ SP1"^I}ʃ?Gӭd-B \1{C0ǃ)JeUjZc,<(';%B:+Gj=h}vAE@e5Q-¯a̫N\mv9oW[|ӠE| Yَ+OVrtsr0TMj]@ ή؃G<5Ttx*u x 3ivTG8ltt 3m'm;dYX*mD"x^|2bs2h旀LV9dUd^=CE!3үK%0[N.VO>od&ɖx\SםoFaf@Ma=aA%cqځ-'=-bC侥ڬIc.aBY>5HЄ0<7eK@0e#|_f&0CRM0Gr(Ay0&[:)-LjG! "<xqaoF04Nytn{{^c 4Hq ;.#m3 w'=^V{%nkͰ7D?Zl)OQ0M^"mOz%3>[#+&SK fq9o]0q %p9Y@K=R?l@Y-^D*jZNR~`]nOԱՅI{)B(Og$J 3Q(;F:7i§& S>a-E鄓 ӡo &O!2o SߑαqK!=il0&*db=9XyW_'-@Yg>c{u?GΠƎ[llVv}/T ʬUld&S:o)ȍ.xCJ@H!\ԧN @-RC;5sB.'z%$$1!<8;T8EP_⚶ۡ)Hẁjnϊ~猢6UvUsjFf/!d/;o!4GinDu}Ë́CN#dU&͇v/& R|K߿ZZ{.ԭ P4 ?Q3lR \K?mt4r=5o ([mRV-\[? $q?Q%>!d#JqkՋl3)%U.5>8f[YVf9젽 bO°tJmvz $G.iMjK{ё6BU5EY Ј'UC \"o2L`q /TLO LBً6.|4 ÏOY Pw=Q5&kS Al )'j.Ch]DB³Vo&1&_IiQ<Լ1&d[Ig8ėI$QjJgxCyyJ Vt3YLr6Uі~?zq? ~#]|2G;2Bg4?S&*h1R/:m#'%|I-lz~/&k$Izߪw5!OMxRn/t2h6tje(%thYƄΰ0~'t|J{B"40-E6L5Ii0V"ƵR%0V<-(!R7O7OLR,_IZ#D ׏4CFYȪUs@ lJUϡcMulDOp|W1Pb+ܩ[  +z9O 0@v͏joj_[VjI3 X/\!uh% ˬ]ׁaV a[666װ=ANsK3Ezf]qY|Jf/^/%z7z5D6nLHݒ%z[;ܯRs(^:NZݹ {K<٬*y-/mxI"ۣ !{6Y6U5MU P2ylBq jr] pPF?SdRHu|#>l >B YY,AN>؛!448t8JŶ&D2ab,x0(#!*sU="ݽ Ro3*14c0r 4hD!yj2F|~y rP_aVe-g  Lɍ̀6O~Ց@fA#o'=chmb6cUcjVk!@-44`fN:|?^;+Ej@Uᱩ ]Յ&vXQ>@RŃ<$N;.!tׯ-EDT42¿z# gwu f|ru>dʈ$mrˣHIŠ\wB drgOokA /%\~*&=tRZ|u Ø]8]XuNJIEDp%Qd(~\8E tK'祍\RPQ3;]7mWHjRv+74腕Q7º$W"ubdAw?;K𕯫u~1cْZCu[ELսk>\:85oU؏`w\fWhL|H\څbۯMނ~kyZѻLހ@Wz ϑߥ~mNVTOn%S*Ȉ$]˟65wܜӇfeV?$qstEiÓx]xC x6٘iz~I|9agH|\IVC8G,XJ6OivBQ$p .V$aKؕ`ǻnT.ϕŒr{4*?B~M]kq] >$v?@OK94Dirz;.JU/_yFzDnJG(FZҲJa:,(8;YfXբ7캕q1͏gWb%ywe7: aY>~1'Q\5G afylujyR1 Cƈk2r3RJE8٦';HzMFvW%V G<>lĄ\`m(oB}$! 1⫰&obe6]YI ʨy:/wVnSo;PJԦ,.K|鶜hKad\oP_&w>-N)m,P$[sFU$-stn\BǪytl๑OBH6&K lO ٳ%=!Ko͙Ēcz%ZvaHTnsD RxURFflSRx[dM,|+Bt7`5A6ak5sxeu[Y_@[fXns¦ kR_aF4)Un_>k΋dnvc-5sQtcV68P_*ԌZ T `w6f|f/WݤJ0 Zoȏfz4Nj+Bڹbq6^4pa:Aznt`&Z?*F)p-;(zv!SV nyS Fn"8~(T<15-ό֓yr} ִ pLQ ^5]mңUX\\,E Y)x=ts=tG$W􉵅k 35eu\Z}j5{'4'D?wh0Ͼ \Qd8(r6VܑAP<0cܜrfahtږ ( xԱ ۡϰd+Ҍׂoi>vc)!q8x5R^l^zŽUYB?Ht+=~3]]ba@QUS?q&!U!~+nf&;1`r/g(ŝ$[6cղ3&1 5|,$$k݆ۓmG͋="O~%jNR_0m2;豦d~tKR |># r9R B -[@HϿͭkuQ*^-o11tdmNWH0571jBo=6q5mH>53he4P2UFRSȩcyUwDørUkup9AG~^DLOnS3lJJm7( G B[@=-Y_:>mMBhQ . k #h&?gJB#왺}]|J4Hώ>̚&v|Z{Й6VwR)4!fw8)r kGe8\m=|+Hfb-NNm_ŌКO)*8 g󎥻G &NqZ2pVeQv[xlaKAZoIlE,|HKRz1q^LƷcto!CLR[I ܱe|Db~tjs|D tv)ɍXoP l$]ؠT3&`픈p:*:_kp K4&g``wR߆w9zк'9,<m08euC$Bn]'5杌ʍo}+C3tvFq.{X%}, s߲Q 7*1NygCZ6wO.EM zg).-͝hMJofR^>dxS?0mRt=|ͶutNM jGܔtg%{;f8=Us%+[=;Zbq m6'cƝlxb$#ʡx̴G;cK#zL'B"C= XMgT׉ZA_ki(sI-9w4gN\c0ٞ4h0c3Y1@t>w) s;iȚl8cؕ^<BX4 .u]! hyǖg!D̲rrϘwlI+0a,<m%򳥨ЉIo^XuYqPVb_l z.p@Vm5 &c[LoT {o"zx#8@XymVi??[O{3.BfyPu5|q8HakN~S5G/~EO#}[ݚDFgrY:8Rp3簜:iG_pgO|/ GnRӋx^QÕ3ć^KCeѕ9Y^Ӵ?H kW6S"`7|Y&R e5<̓/1T{~B*x߸$)qX1⻙q~x)Ptro'sj6*yȦ{;(0JoYo*5Fr֩DhO/ӗn%v= "lgԑ>N2O |Vs)W5H:D}~ ,C)0N:V"jgF.;` /?>oȬ-Yϛ̜22EK\^0Xv @41z^Aվs {qDIAYzy56|Mk˯M"ʃ4B{$+-2d`&8{w[ {ݼ;nCUE+:NդYvM8W̅s8r[V{&fr 9#Oz oR449nqw2 r%Isl_ tr.&ENbAMndz ga3 XwΟEGgM6}=<ڵ;34K¤rS,I_)q!l*P SB=4t0U ZL^=A5XQܐujh1|$>O@U4 7(U)K K1L/x8.2ЊGD]D LclK.C8٧gl{4]k؝See\]i~IrR3MF_H L  vVw>zx|*SQXTI$.~=&Ka Y G4oAeǛP"FY$?3Gc(ąM_#7C 6fSGEyw*fXc1gҝAЕE0\!|:x].&"h8R 1@L6uE 4<:j`LYfJTa2{r1'!x [E+B %kX^J;\IW\b3vkS#N\]W^dd> BcѦ݀G3V4=_Q ڲ^È W( PJ%3fH7Fi⶿ǍOЬ:Egr}՛IAJkmH|)ό,Ix/7kiG\aB ˶?tC4[I 29|k 1R) I_5K]ޭcb E+s]<5!f> stream xڵeXݚ5;B44݂Cpw.wsfޙ93n[uwUwS(1;%@ ,̼yUG{NU Bhvt7y\ +#à t|^ D 6g b05q0,4!bN^.֖V9f-51up8d5` 28Zԁ 5 U5 Gb57''G"!EQT5Rj@E:$Eu%X^tq[߸Q~0P G @ '^&&FK7W%?ԭ]. Oc? +I[\$ehG>_W 2q'V^YY`ob:8}8L@n7М_175'uQǏ+ӷ33qpsomj rWF 9vSQPSgGwAp3sXx"p0s`}}9x1/]:8z8ooݜ4݀2!f @g̊of  `ab ~|\M܁ `nmbA'#_4Y4 `@`Rt}uo$M3˕Zl֮֞@sekտ/\d}K;Ǥi]Nv{n]n3}( `c¿h_&Iem i%$ͭ,/rp|X>$mG(&FGG ptA;<&G_1 do2T@Q럱emk7pX>~2(K-ZTӇ `drXm"9@' aeь/&%Dt4ilJ<_@,bGyi^/)ߴ)B6ۓnUwM(|!@dRX"9+)eH -c,;U*~EzG%^&+b43TE5Ӵx왊_0u O\nfޔy- j31#Y;H8z@G~9bBZ*ke9&.&>r]<1w ]~.5#Yo=48t9vT#swV"3MO!j/}T_Ќ,lK+pKP=S8 bpdۺʟ֒Hh>J9:JnXzQOWXƨ Նy^%Q04ZJ5=6SG,:gB1&Κp8R3\s8E.?i:+&X;$)&yU$w,XbrcHse1,/>cCXa{;) ,C?e>kq{е|{G#R#Җ(@9a Xg3wPȄĚ૶)8u;Z`z'S?=ࡈA}c<Vn4P801{o3 Mi'el~j2~6[G;t@W*3G}  oɁR([gd܋jҒ'j7.i͜Ϛ7]7H6ko-jo~Cg65'-7w!1Hh8t.nRAϣ$1F!zES ăex0*_*~$J1% dS'ϥS.<+*An|?x15?uS~$(v2>dX!ڴV+=j+աMG>ߎ`q->s:zVE9FLvHٕY|QD4f_hEVk!ӵ|XPQ:{bEfmwnf ~h>Z6Ʃ-kq aPMM6"b8 c~{HQ0al J[}ܧ"Т(sڪ#b}aUc,ئIdAv5'#xwŪri"zYjEwvѥ\I'qs_Hbom>D?ɞOazD- \Z\;yv 빥UV(Fu^TgvEt0~7 [OOļ~qa$DTp}؏,urS("l+s(#nZh [4%u'w cR.3^o\xzn k?-˻!gXSa02?cl{= 2ڔRȟz r 󲖒C ) (iX !(~" }1)6CHU@>gTͬ|ͤVL.Cꨡq^7m`\ojF.< vÖʱdTm;t*y8 9%EyJ]#I^ŷ8ҽ!UZ0Þu6XT4~~d M+}W7SςV4(ą;ՈT><)x(0u3sG;}'i*91`rQ$y׬ IQE'(I&(xixm'I8]+UB̟ Ayn _2b^E3g>)QLr:Y d~ յ3Biu@g'Dsh?Dsq&ACf 1^fe, o?u76^6xqJؤW?mKH+N:׋$82w?ϱ<NYѨz]5v1NchSu\QSt]jBѹ6Lcc*NBV,Ky9=^(~8}Sfhِ{ZLeUȢq.{de#@zIͼ&Fzხ_SaS DuIioNmLu4Y&5{LX80F0Hme7+w7pL?"]T#wRJC΋MF7EI[SӻC9mew'2\7"RoA!9~>ڛƴik~ cY w>KJǡ;0þ FpmOYՑ)l"l+hLF]-=ʺ΁s&(H=23=opft(1˖EBzȟZn=pliA:L'N%daN"[=.\h#mr5#<0Sao3i!5րH I@O2Ӹ|J˦t^.  6v^!EnB&MȎ-*Twbp^n}k潰|7e!>C0P֢*!KWk2N3]Se-/ˡ=;Zf~ ;@H# 9 (] ̥YmA*2-0Lf΀WHUњ7o<[ـeT{O^bx%BXq Xo#`+2_,v]Lǯ xR1ri{Q\ze"]FdjUk2 >E~>-MnjL39 uzϗǀiP6(?|p"03B퇻Lu;?GtX'_3܂x L5T ޸h'_]k`Bz4թ|Ez*EcueJhmvcjۆ-kl5TT\_}ѸcJc<ٓclh[Daґ.YC@8Z˃]]VmOoO&턧U$/;aEPxRjw֚y1x#'jt{S#]KO! v=>0~JfKwi:2ћ;ke32Ke*ABҏzym -I]D{NK'.#cwS6:EM_L0}Vƍ4 H"CƔnQQ#mC9A MQBo`vӤ"*g2s$ 1]燋PA PAVV`K4kpātfѐ}Ȍ`"w5QX6##UnHoue)꺢?zdaĖYQ~Is̨sf(K7(ix'BFo@YCK@ @R! sBH,BbDKC#ϵ, şj7Y〆~VY 8S1>6z o5T뛕[^$XNso&.^^:l| wwH: >d9:@=w%{]z eZ c)Pc)!ZD}{pcp}an]g{ " li&_)|2'^*8RDD@:p60y3@ '.mH|:-9֎C ү ,b>/4 -oj=AyF?'J&{߁s}+lJ{r-h\:xiR q/&yPIBuMbeerL"21Uv~_cw]+H ۹at2Q/^A/Q(fIKJܼQ8 nE敬7jǚ*Ob9Jq |cI\Y(8x`'FTcvwIs.8t #/($&eהO2+] ޷*fÚ`F񷞼*q<;4b/HC~Qo9t.  nNJX/Gtዳz}i˨5!jGyZ `$ec!U- m+g}ܯ.f6!#9Ru1c҆Y`y89N7RK+j`:=׊ ͹?Y>'vZ&  |JtLg #k&\P!&R2@֭]PyhLMZ 6@$?@licj}r!dMhlƑ}V{ڜ̱'-@H=2t9j|1^~B2H=,fR9{ۖ5$JC뒇!^qpiBH tq2?>& &FSΊo=ʹZ)@ "hz`\x.=ucHݱ*\`ǯfzxƺ@ ֯Kvc)=\p\ᔔl]~*8[ I\g?βmJjT}2풾}(~ȔN 7]N `s&X?fq@M^z#{|kƲ~(z[Pa/ʡN&ԭfLÅ g,8wD _b>\瓦+r@Gb旹 (viDIl6#'{`!_ 5/DbFLy`D>{~AT1Olj{+C݁KmU+=Ĕ5tIƮW9/] h$_1D$˺{n_O:>Dk>̑ZZjA~WYgz 5,H5&|upÞ8TV>W$l)1l4|,ӏ-K?͵$At|QNV`oN'~#'dHuv΂$2>} *8Ipn?D^e3T\8("Wd@kSD)Px3L2,* #jE]'k$vx],vwi잻"'UV8H"}Ǡ#7'wGin"m(iWF nȺ$c%eSOIJAW!'S,hi- o`[ #o EX0"cGg it`T\![ǣnoҸGJ!+4{f: 7$ M$ <4AN}cj&L+`P> m0O󰚦`{uㅡ?nQQk,.Y+khsڀXVcf9 dUyŶG!l^e/{Ysda R9C\ݻ3d>Bz '*)f{ o{w*؍3' ҭ&h?v'z .O&&X}r[PMվS|qg`^\ؙr.M\wvrQ}bOjSȍ_#wR0D-NDfE^ Սb/o]LÅ WBGETh-khK˥ڹ/ѥX(ÜQWw;s9iٗC6/=ʵ,uWh9& (jgMg槔G`$c>%#&^9i~@ێ:ja"^A6=7pC~ B-rP=| ~;4#"\خ3Tb6Ώ(F V s ߵʮw~"~ؼ+SBeL$_QT:uxtn*^daG.8?gkf,RtqA!D6hlV{ʊIvQ)xJUdJdZҨlج<$,ϩ=c:rE-*nkpXX8Qψ"_C.}5@7\mYvN ,֐a /7W4"!{qwV=LcqԄ[1mvr [qt_5"#&ir}Kv iӅclL]%; ?/S@L} 9HxϻdJXX7zGܮ[9_!h{D:f}%rp7<5wog(vQAZY |8|Cp 9yb2wUE7. uX1weR,+B~㯯'`ĹSo:SJ㊂sk#`=N.+w-w~kPae@`?׬& =I%Lw }Ih.:nm8o-( ͕SU3Ma˯I%vmc]:vZ;·9s y i'"ժn*."pS >3Yu]FMz4Z\Z:8ѓݐ[s4hO4۔Kgȳ@0hUy*\wK(RQ]GizFA0? }BO^=I+][+\f=\rnPQWf#+r".=#Na]JQ3 I$I҈ϩIoZc= 蹯Zj|d.iY5O9YPV& ! Ms\SQ!p{0T:V龉( z< VRݝOL KkறGRyfWiO*;%MUX]hƝ-pj?#f!aC٪W8 xg*iES0P< *]8+[da䰝Ձ<{/ԡ6wu\gOĞ=Lzٺnp- 0bqџb2E49pt') ]׼5FIW_( ~e2C".R44(BۋW ֐3CM^ҕnVM sf245X.DLzǎD$zF8=`HHu]H݉>«u&oZ9XBJ`o˲)=7 \hmĎF&OJ|]Cw_ &`Dx*`jOV@(׹.h Nt/Md&N!-kZXxʇ Ԗ0_[0u rA7$a Yl 6L;H(#.BEOgeтs~ [@p•?O]Ɍr[i{V ױV@z;I,PV (ǨˁYGW%^#>YG>;WE*MeE) )5T*Yo},z 1(#4&49/ɭOћTs¾eĵm7I90q~3UemYh@e=Q?db?;N? wUÎd:׽]<7l/iO]an@d|\]x"0iO?­RNmX=RE2F)~7R"Do6EIj銨;3o;zD)C~ţfP@8HEU1_r(=Y48k./) D*t{'/ ;.XL?{BFynk"Ү7 <Glx,P4=K(m1Cb~RDCACd[SaK]GFd ]25p} wY2UW`ړH2uHԁ*0!߷䢼W}› 1Oȶ(ONC4J?u[ѷ3!\=SD̡ I\fI%lIˡ&01Rjq\Y޽$0b/DƄ$0_*tS=s#E]>O"GCѨ@^w۔i>M^> E;&Xc[O8= tp!4Q@G2M I#~sh >^sQ@,uÉAvR:s ;ݛIZPI׵es<[s՜!WF2>@_86] $@]Aa(]C~C!ub#G[CՅ*8~ DݯJm21 >,YhU-iPqDB#|)`ʱ'{V/nұÌ":Lfz59F%rDf#[DIMS$Ow̼n@8.#kj ~Oc82a1X.H`JOn 𔃬$!h9JJΉIu]Q`Pc/U3=4)k JBY J/&wWPUA\߸act7MeQ&N#ʮ>-|{I/Do'3(&ͅh M[ B?1B@Sؘ(Ikm|pY& 64a0#ۖ4Lhn4i~k5ltxE]|i-9iys,MV$&9w ]03Va ^$^2IZ"GF t8Yt~yпqس0\Ln1U"^;RhLS sYW~4tDp&s(N]7c^/6-S/s=u,HoY^`83Q1gix}_%1kƯk7ְuWUe8SK_iZF`Q{íBhX^R`'ԼW "[s.y۪9/3 x#9 'G߭bXFۯ!EO/'^9}fPK j5yʤ ).TPue]nXP9Z׮~+0ZCo|~o)N.>24>=|e7Mo΄欱.u }'̊t 6']u,;1DyN㗌QBY߬$=t˵z}~>>Y1~}%՘חFC#THtOq5t9. t5Rw׹RZh.E⏘wgh;:^ E[,v)(q{^ lmKl'HPƇZwﷸ5HiT?50VBkO1_f5iuam3!BuiFhޜܣp8McsN"D,jSXmW]lq꬀;ܧc.B)wUa:m,L >)L^1شkt^\d]F3Ig}b35vq&4 ?"˝!}K(qMε _" [FQGLA\Pl{kZb8*ehZ(wi 4 @nNM񍮥į.t9U&= P}lW9#X^zOo5` /w]eYw.\ٲ/9mԟ5Z % )ris@AZn: h 0+rH)dxTKbGY-𐊵\ǾA(A-?.dz^>\V!藀sظi%O[]A.LPXdL3@ Ϸkg`o\C=r1)/e[ǟi4aY/,W/Zb$2:h0 WOj[H>_ _Vơʹ)7!/P 3=PL-9:CO*}ѵmkԶQ!fOtѐFqM"Y ֠=C_ 7E:1t`bj`)bւE࿜ _ŕd-M%Y۾7ңI3dv{]A`b.sp0@<1w -NL\c9t4{!*4hūa'p{m;`yQ|ۜ~B;qPQ=XLAU;NcU<ZyǗ=ZE~أh&{d~S-y[m.L͞^ۜdtځ1>"&ʗPsw|>Fm%-lhZæm!f*gE(aF$Vٝt1WZ}и_ f0e` 88,y TD CU"3?dM1: Ioc"2s5+|`d :Wwr0|̓ugJo؁Yfm {ECWBk󴲏:BM=+s)1]SP&j;Ůwo=NjÇGZ7  &]R8X:fuJ"Ff4 N'O•6#-òV*,' ë04PJu/&;-NI`]\b.mbF#]`}Ud\+%ho6CQrcGgח Lq88l|.2ƈ!q극7,ke&|FR# f=zLa7gZph^w,60]kMsAy=l'zzhk.rRMHE^ׯ.T$6 OSd4B"$N]_68!|m_jl81SOmK Cp3[B`KZ}C,l=ʐ1{g)Y>J}q($ um21 $ F6jvHevU^S3;qgsVf0]ɊV*#oU%2~[lK>$ Bk_q;> stream xڴeT\ͺ-{ii $Hp .C[ȻϹ}o赺cUc1TEQ (bdeb((99:r3M]lL,,@S)YA,,i#h0(A@V?'7ۇhewrv7h1&  ǤPrm4N3%hKՔ5Ui>;;;qu Mi$T{:~b(i|p(!"wVoF ?>B-])===@LNVLӰqx:>@{?qwh'`ctt rᣕA8hoN܀+cmOt4u4p&`_k(obN3373utw_i;9ٸewlEd$5>ȨG&D%<,\V^ˇH%-ĝ>X!mG@N<}oo-ܝ5m\܁!fX@ܚof `ij~|L=;} 1}c ] /K4lTڏ]jh Z"0+9>A>ZRJ@l:{xhrQrru0Bdn ~h_(@n?G?l4s91??z.YLCW]J?nN6V6N.7ˇ89z3#X:"]M^#/Ϙ v/tg U?grujX|Ej߿ E9y2rx\V65)j?z[z~-:ڦ6}) ,.e:ґ>N'M. nʠ*tR3 Hv,֡ ŶޒT5uk*c@"):ŤTIF{$[1J ;mzf|GN!3(o]̓,gjᵌA<zŠf+n$ ΘsO~vжSQ3G*!_ϋX.=} FɄ Ʋ"`KˮCdƟnϠ~|\w.;0yGb$rk? B3&P}ӻq7ATH|93_A8 Z+ AawFĀ/&'e{dT!S vSɘM<>Ci(6QEZHu1 9\z)G:W6B *窄LiR}S,}HAn4=en`j\۰0zNîfGF^=7f˸|rXWݤ3,)DK\~~;juF/`=ExVx){̎+TՎ `}W3u:e%P[nRp/:&ԿͣPQvEˊ+,>9΀E£;`R)Wp+#\4 _w 0xm`# *A=}΢ ?كixo;~AiB]<;*މDYC}ӤRJɯJ4 Kg ?j&&Ʌ$ySŒܕTŔk. !(nmqܼ챵p^P0NKBw6_&؃r^yfp+A:xYJ`P &8anv ,cw_/"+L|O՗T*KU 5^𔹍Mvҷtz.@B[Aw%day :®̸-_[\>7;c<^#8LݴN/Ɓ{?,Nj:"gU4BϺXaQj@b݁)m֩~Pq&'=ݔRK {1!2`W1z080x,f'$ " ~ "[&l@C,#Sw'gXvv,oc -p%&V~W!@ ߵ01"^*vI5V HOn+x:Y1t^UH ќuy5?;j1NQgU .,)|xch=As+HRIQi`"B8+%Up }^:Ok&PKc/G9O<2H2MXP-#;i;ӫ +-ge:m'!24)|fDwu6q/`Uӥ'zGAio' n@3xqzX1t#tߖ#=#5/ѬwR3{_BrKu ~{,K}4g ewF{!HhImӢVvTNt;@1Vs9i/7f c!1uu%3y-CvL1NxatJA6r_}k3j. Q ~;xyG oŵG OB늣r~:r\xO*tU? 2"A0G >LL}h9f ]6ƒ/5ʛRm`?⿘o~Md''2cbkyʹ#n&gL鋻\1Nl^X@B[rӑ~^ 1@2W^\I*!T1ؘ ŶC s0?P[;ҧ᷄ؾaj1 f(yŎ_qbhp.| 4epE"  NW^yߟw6‰ U.a'\n,sziA8.I+)KPy4Z B,P7s8MoȦqvec蹀;hܑS*@#Ɓ{)k*qHubʽHoA za6>^k*yi"P$-V*(m5o=U7$Ov@K7>+g=NߘzO4g"Fs /N&~0:/jV*w‰^]{ }RqR{8,ecW᱿ I6佔f*Gt:'qڸ:O%?*a)#溷S=7 9)Y#g QѨpnpeŶv|o+J0'(b_xzF1zGMγX;ZXtb#"aQ6 +Pɕz^%-ìQu:}Si`#$xu,#ܚj#_4pM@n%[{I5 $zJlYt5Es,؃F]/AFA+ gN~o-Ra!zoPE݄?YVmyW{k|ktK9[߸$bVjB8:,P?]*mصHf:7k~3IC){=fB;b a?{I6,,p.n9j HR{Q(uCW^`  t[${t%ڍ0^κ'>=YwnCw4V&9Y"0̋tɰVoͥd1l&j7 d7ѓ"KS\'ʱg4 h'u'Z.=mIpq($MG W[ 7&Hc`X@^TKhy"f #1't֎lsF9}5Z^Tj0kURTȓ=Y+~8Ō@FӀθCl e uwUJ hߏ5|\}+bUwvOS?{UMJHF) eW=,ZgH_WsaXz.$2y+5;}%A{v~7[U6,1%l3&X|RɁZcOZm)aL?ΥPN+3Z÷Q\ʎf҇?a7Z~QU~V͝Bpn Y]m)E_~;yX$<nj(E*d9 XЉMiSz!*.azd('>+&?/ #]G+e)"nC#YviΑ3a<`wΊ_LU%Mto"Ը#ޥu#ZFWd[ |N]oX5" ިvSЌL(R" R?r:Ʀ}XJzP&̞.*Zv*aN瘻Kjdmcgs! }[%|Y `JL\xfZ\-kWfvש;o d4 /wCMsa^Jȼ~9:0M)RT m'SdMiQYa~!].6Kl.k쌺`11w[vY$i:\8PG 3yE*u<^bEMGΟ+Z*iH7UWZw|}Y\lOyVu`ܻPO"(\y&0Yƒ KH{S>N`˭]ZD͈^[=Gd:Ž~mǷ*fB9e_l?V1~a=8dL/aY%;U J*ͫȵ[{bgIh&:?gVl4}-mFg.ռR#x_W4ˍff{\n^=RTo ҩ&gHn={,i29ޑ5ݺk bVP# wqb!%:R3E7R5]_k6.O',I]"8IShgR0SO^!C*yFf9Fle_ |$RD6  ȉA%]^;ꞵU3ç/G2BD뽮,)&)ܯQsGfڝ/X^PEPSq3%7)ghٝ[*__c9GmAxj,~;Rڃ&GܴQv_}D7H| 7_tU-`؃wQ)NMQ6$Sу4dd=ZØscl뀟g'm3@u[w\FL; Txwxlf OIMB\>@ֱ\NF7YE E92a6H[dLQ‘艣9inl[AIR`2+6XBh=!7 )oOm7Рx+G#[S-0 eU,OS'T[Ǘa3hW>' $G"?, F/I_ tlllĹ(99*z%r'^*ɔ"Ԗovɧ x\̅Q:#?{l' @ZO CNRwʅ/ˎy7 cː[Y1YjB)VEw%l[_9>aZ ,Lk- (6)2lٚ%3l[`QNڬY1-jBrmZ]O%?{<~^n K2:=Rw) 7YtɴAA[L B+vYJNHkXDңf-azD3^1sqڀ/iCt٢k@Z'oj{ Ğkmgub'E[7!q]b:70ŪbT<xb1-S ΃1ǿ~U&=xQT#M:woV3DG1@SmCp  z%2/7xMZx@Yqz+f:[^ck߿֊+lIh JBQ^9cx eh%,'/$&FAGu]ϲJA`Õ60"J-2ןQ MЂ]$ٗraJm*C LUh¤LF-ԍ-#Tk@L~]^+rl+w)yAO ÅOzRG~뷢W6oq 2P4"Z֗$uKEsL.Eq5'k$.BrԈ*7Z?j#윇j*laշEkYAuD6b HWt\`1Y&ϻ㔠gQ'^5duo > H4rDKC,g-oG=`e`=صI_4 :aۏ01BVpQuIZ&z}*A:[1 wXk՚"t2zoө 5K^ސq'MIJӬSʚ&,UFө\l>xR[ŀ|Srp|Vo$6q- J污ku!%tlJ< (0cA.=`8ۼ\t#T} & D'Ł '<+e{W kVLݝHC\ mw fnmYtL`Յ#+ZA 2$}.2|kԻshMXBO)tǤ\}I ΆFi????[o8P ]o$O1<^^qP1fJ]dޜf,9&w}iJЛ@e΃|BACT5wQp wG쐶a"epC_v7-Qxۮ7E,^ܻL/bA:+3ysl˫:U$YO bIpA,b}%D )vͶ/)i 5T⌘XB{$i9V)`S3Cjgkc⩟$?h쁾r U@}q)rk2L䮲<^1Y) 5؏|當%WXW Ԏ{$X?@Iv h\!N?,ڄjO_抇 OA9H`yScpjoD 0T|.U)X2iZ²%xN8 w5fQavra7ٰ_PMz^E0v3eYRrWN|T6i4!@xd{^x"eZṕ%96j8+gIDŽ 0n?WlJkXs^:Zu$ z#k]uub6UaQX)Q3怰C+C3z ֢]g%Uо?ILo۾kҚa*FC7/ ˳o@ a/|+"y #:/M^HM6,RҎњ{J7xzX*ߍx _'V*,I\V>X2&AYƟHd<gUNI5X)ז'OPwRѥ ˤ=7:a"y]$e5H̓] (&CL^r5I){^ⲗFmPAܹWF!U ]g@)Knd>lQTсnRp~-fr-AXS2/Ĕ"򏘘޹TϛD7[L[C=ܗAi̵U'8j6d Q fx,>ǀETTޭKl.1;>*rXT:`R xGMcx5fErd9NsB "b`z*(yK?"ÈW̶2[m\r^f6{:HiҿypH*}6}a CTb-n;? ) J o!CBa#A9]*fƣo~a F1tSe'Hä8YulVl9.'Ÿ WPbvRd |GĊ5> HIYjf+Q탞<żSO~X}+t 7rSbySjc1&)fm]@YeɛLԪ+|7qĝM]-=ȩF資/:;Dݭ[jQ&q SLu_Zh(an߶0C9>Ȩ o GH#Unb(+:zG/ѮءCDR@mb?IC-8SY|3Is pa7l'yJL~wփxMI5s2_1iJ+5!/JWLתꩡbLP-82-(iEF3%/xLKP3Gy{>榞5qf"}){fUT^1v,߄ao`TJsŁ`kJy9wE'Q'M~yǁ㟸VuT UĦxkUL\vJHw꫾azJ%7 bX;{ELj+lS;z%~V & 8,x2SUG*> Jww?yrl|@R.ZΡJIU~4lH?Gi<ޖ}c'9=G_l;FgMH݂τ&'f Z#yǓi%q/hBKy-añL.̷%. 9:h4 &c,_}~埱͇/2Z[MJUnPd k֙eE^#"9H~Fٮfoօ/dV]SvQmWި4lAiܘhgn` ퟟ)9=@+9崼Up(/f%.M{s%P$lտَ 2 /l+*x`r6r Iܬ@qA?3]E ަ; &.$4@a- ޲qp->T&R_-\ԞfCKyk]Q$d?9i+&EuQEnY1G= bcG4 mHŅp_PMyw"A,gGUM4NWGk"Qxl1@kUu: ypND>oSaɊӀ@PHIq C ux%$K~TEw9<AH~̎3m`p{8$d1zˀ.=)*&ıӏS3|谨-],SW4[g\(PQR^ 0+~ KϾ&(Rl~M6}ģ>eR>ꊈ)Bmd_P0 o8lHz3Et/_^_L1CHf-(t{1I1#O.mSÍ~~-K8CK6T4ȋ:~ȽdZxʮ--fr_ 0ɔ9?&ZQ"4GK~Ůvq시Ɗ PWD0gh,݇;b 7DsF۪YM",- HDge Sp]{*uS pvVMMih⥋~~!h2~gX lw(B_1H?5LNc~xCէfM-+&/ӵ܍pS0ŝU/,-_|ZNl4pRΫIu`zݔtm?[ 3S2u"!4G8_Y6ks/Nu?R{~[-"{[- v*$+&=O`U֞ɥ!ЏЃ8Uq*R cI7Rd.fv"ylzuPḓDFR]>&m]kE( JST_{:hzQhڌ&N`LwnEJǎP.ŎqHќ/e8;?3}[ǻWM #f1} *(yACAYڗKEbVRqt+nl(:x 3 |'p^6/pC4ql,ƟoOX1fv}Rb9^T#F$bi;wYY/ӳ*$^COuu& yX{]:M|rTC.Ynqe0wq%WƥxxŌH"&&M:j݃;{4gi~oJ5fSu zUtPq ;"Kƈ-Yn@͵?}m3D&^̸pL]}=Cs$J')¼8Z~2tt}ק +YOeh R;;+󻆓kn EZc94pj \F&HL+6,P[4o:j w 䁱_.Gf{3JPߚT'W%WN.6H{@ % b|IaXZw^JHޯįDD,S!h3k^^poIM wKc NHڞZ:{݈͞IBMEҖvTOA>P|)FU9Xvi:`!ي`+OEzjcNzY{ )'lׄ'S/K5s3tRw,RG=Ŧk1~.RuƸ*=Lb..!6W]ȻR\7ȗDuL[p Kz_G,uJ2VbZb (=֐I*1ҒO hB7(ݻw-Զj\dߦ+ ڡl%w1KCifVE2R+1#[\`(z4+42?v]a{H2)MZ kZKNPvsG޾m0#nr 7ڈ ],h2aeFM"vAr2{jc/M d}o,n@!)rTjLQD&{k e_bgWR9p;ȉ&Gw*ymі1 |[Szf,k}r ~ NSjXp#\5;zZrЪ5ßPE6`GTɆ{"LsPIry]UZ˦[A5뀗02T!z7sU4Ct~yR8'%Y/8ikX|n\Psc*MA?3&c Ԙ:J9 @S r ilp{b34D^[FEޯr[E9p`"TJ f rƮL81`PrC-Bjsw qJ f^UtܜzlNZhq`RR= nH_lY!%N(Cn92$y;ճ;"sEYߘ?aJ\% [콮=| DNzq["ZA_ɧ}lNZhq`RR= o|y?ezbl/r[9=Gἐaz&#mN@Sh,V\\1 .jUPI%+5aLҶuUb4F5zӷT},="YX/0kD_c}alpK& $ݖ5$k8nvn{R^rtUOƦa}Te[oya/K:6?QVMѰgif,_/!HlYaVX" RԥGwt0DiӨܥ_Ɩ:6t2 2^ee9Yo'}zf ./fVHg!KYCXT30Ɗ]ȨNA\(cՠ<{AHYʡg:(pQ/bSGAՁ[}='X)m3jKT߲0"vIVO9㻊xgƃ؈BکA°܍^\fأə+E*d(9Vn 4UݪNy}G$fˆJGX#1bkpVÏP.Źbt(t:ptbLFRlHPv#HYB\)Ssќ=iKjƇW)bun4~EWY5*/L+fٞ TEx\c?"󶎇d yoK E|BT i5GQ3aLO y`[jk,cU"]U֟9HҖ \QGS֯&}@ WIkcMh 3=2#!x{e*?yC Ҁ8M+, x c\#VW3 -'XpF'cMI#^6s"r$q4} H_('b"* FIfmM /LIvUINZ1h>h;Ѧ;{)b%mqO@S7V[E.X˷Aʫ> stream xڴeT˶5Cpwi5C h5݂;[%x޳9 4sՒYV{459( wafga(*LyՁ&N66NDjj ' l/iXT\B<2@{ۢ9t1tL`gfSe%H"vtYZO?,y3 `bogQb(ߌ ` 2-@]@F]EKU-Hhhj0$Ŕ5@m&柿@7Leͷ?u+IiiJtr)_hޘjŁݝمd`?M+3dx{uMN+9" h $ עݛoAov{ON(ceW"d77{st1qque{  .9RO ge,@?/&[3+ԱgqpO>1IE~/7֤R`;7Έvd?}mcvv ]XA@9~3!m@G̊O叙Mo z;.N@.'Bd\ ] .O uQn9`@dU5?jI*[3zypS;ٙY4WYK\Lz_v(\'۷}=? GX{kI3{3=_K7XdT%O&eo6[8&NN&lofis_`e\]|`'?`cJpXexߐ=U߈-o `5X89]ۛ j`rec?[zm h7?ߘQ|f7dcToLoL`6l.[{o3lfٍ+eϔoR8E#[?dp|M&<ٱ&_ÈG_X l=d6Io?{#Z\|oz5YpGٿ*MH@3ĕE@ujKhTL,5i|@s.#5~,1qBaPѱ^ފd鱌NM< m/0o\;.H, ^D?YW&ظ#<KAQrQÒXarH_$F9FN(WY4ڛ\NURM2ғ|lz'7@NJɤJz(%Qp?5mL˅=(0z |Qe }a>{ꇍI]=V*2%e>&'B}u 1Fryz%XA"\˅p0Pp="f*RϽb bޞyڷ޲* 8vZoNزs2'𹭨v~BߡB {=Ȕ1 F״3t4ieY=U2Hgc_Ks*$"Q{gqm=v8RpMɕ*4v1r?Æ}#TL۫ɰ6\7L.3:* -?}bsʞ\޸TpLdb쮂~+jIB|(4Ϋ =[.5 1qQ KnkR6 B~4h.c^xT/HW*\[*dZ?n/X$h^",@Mr4 hjʑ>ϴ`459g>ջJ'Z//cMr]޶MwQO$c05c_Ym{g޸to”r0^ Vxqf5c^^:FpԄaaWN^%%+P'ϱiҐ=HŁ}N,i]OKm.65hCwc"aP*Ca5V=-ۣ*^ݘcW!M*CR.($R=P_-aG]Ǝ IpzNus{712^D.U #\pwvX ZUosYXABMwSf$UY>2$FåDBank+xre0]dcC+PXazhxP5Lh _#|޳8Γq6(|dP=Xb%3zfiUǵ|0߄釼a<Ά-v ~Jsi؃b<6B1CN; HhN9k"hf%oITf.?3}C.V)/Pֈ1s4>~ZBUмsэBgcK[\^֠Y96u3>-ϫyaD,[l[|j0)ʔ:skؚ & VU [J_ݔe G#pv6 ]V*r)Y?,A\8j_w (aM ڔ%*aηҥ9| ibp4A:(]:77kޡ[2VϷ}8%n@=(Z.WZxGw^({b2CJk=0ӽHՆW( ar'“ YMdk ~"VD ,uAm׭БKa*+H%n ڒ_#K"ubwOr9#|_~ —;MK3ђa +hԼX &HnOhs( g5qW-dx㉡ē$o[ p xܼ[Q%-Iݼ HHV>S³GTz1fArinʒXޣUBai5!AT{􉕦\ҝP7Jk vw$σQAA$"kF\2_ZW+[.~{,&fۭr#FuYV eNSN%ք1 46|0Kܠl!,i,ގ%q=55mEKnσQik(/'-?8qNĶo/I[ge PӣnK9Y yAem_h̸M!a,( Cvvm(38Nm"PţS49#Եzoo>̄͜.!?kGE /_Quk%skw-B‰T>o[ayN;L. k%Wg9XGd#vd%MWy[< 4Hyfdot ~5>S]Eiܕ$ZH+sN̜?OEfT N!>ǾT>Ӆh'ྺ_ ~\#&QוKݩYJfQ۵c x:Q- oYC>!?d)Uޝ' ,=c+<xАgxwU\Jx)ꐯV/K,vŸ*=6"x49F}񕕌nkC`zcYH>۷86R^궅1ylpMgU17h {+xebᾅLenEkk &+Gт1J#ʃd ,Jt?5ZיB6s~h0A.9%nLҐc!wEx%7~-#-i2 nK;7$_Fjt|E;S`A@ذ ?w`ˤX%R\bjjirc&GiR⹽\8Bۦc94I ^?+N.ھ܏\et\/S-]4UOAJYvoI60x0p4,\KTtcq&hNbSu^DSvVk^Fhv4պ@.n&4X =[sYT a}A6H2b( C8e32?z}D:f:D';l$Vg:;3e6 3 e=dO! +OKd8cGa) 83!(*w=p3hSc^8Gבֿ_h0f\_z}IFk_*|q #k׶pI(|pOGVX}ܣ6( 4 aћ`/b%ĝ{>3qⲭ7Rc' (M[bo&&m5Ul.ώl/+$ К\Vs9e\a};KXENmPhX^,qM3/(w?POmfnӓs]FLDxTJ}xNh&]GJs󁑩}$LCEuF.ld{ٟ8n‰+B0=ؐzћHk/Ґ 2nDؿ sW[Aʭ3̀g%ȗ (tY0raNOY)y ;uXy0| ^ği>Vf~,4$^SVvuI+&_5mʈBmT"XhyQ]4da5G) jv,F݉H. t81ٓߦD٦Feseerʙq ޠx*&쫡Jl[%fl:>WAXnsI\2 ek%RX''k fUOb!~מ!^߁OPayfBG[`c'cB:xᕧ܎ǠApEG_Q g,XaFy,ܟ0rpsJ`"xtyϢ7)Ղr$LhkP{q pf̬Yum YqIOC%ؘ)<ݖ=]tzAx рӥ !j 3נ`ed)tf(*jfmMSmMR$eT-jG yOl'ŏXyl=:bo_w4rv8rr>B-MDͻNS]P4p$!uPjGP>9 TK{f w E#KMR|ݯ7ʹM2хH\_%8ڲ@h285r۴Lե;.5s<5jLhII4mX<"BOq_EY+l}X)wf|L剑-̳ Ve*- Myc "I-%}Mq5\['=~џ,t l؈;"SB.>hPqY^ǃ=5.W6(C;^#r:r+s)B1U8 W嬅C]n:שiB{%8 錼KҒZ6wэ`ϫi-w=X~%s[,h;y7m#/m7"=)? Im]V@jmHP:9}`jyH6 [a]' ;ZRpoA3I@+yPr!91$s4"gZdaCz-iבK P+w[kH&=WI4?\&8佭t <adi1| IݻI#L3k2_7 (HzJ{̫AIk,RZ ^1No6ԜωKF" ˣ7AdX|~܀ 1~yA,.|ۤcu#?GP{'aߋ5KXhGr[_-m 8iԦZXJ!HFy%bB@Ert2 jl H:Y7`92+9)xXu[#Zdk%ʡ305dNT-x ii`4*ə}5H37O/X yeNbeWR*؂g-nx6i+5>'n1Zg$RG$Ӝ ڒpe:S+?G;GJיxe*I+l O::[[{>>-q,wr!`9}UY>_zfe2JR5A#G9⇃0Zt!̊ƷS^-z6|A];U nR(h" RWjfQn4_54vV`ŅHԇX.NR{d^IL4$ΑN+?A &Bց(^mjqU~ӐB8ŝu7APOIp.?c9=2>MU(xE(>*sT]Ki1|X7s堼F,s8dEnc%8oy*++DSs%\6dywaQF;HA# QÒďdL;07u.0Y*}R!ylmx/d?z$6=i'^H7Za7sg&dw0 l<SXx Sx i%e9ݻCL%_+gq8qˣfJi7\DK?ba-ۯJ(01ռep5^q\əýJEyOYDK 71- ™VK?$V?2I(mqDd ]np]CVX*;D4}sa\hYQ#1|*l+yFU^=s񅜎(c}EiRȦfJD/0sҸ< `<8hƈ9a P3bZn4N_W-W gt[LGaۉ-C2j#*`ltxw}ImYWU'¡(vH)^da"G*,z[r/$iD;S\Akשt+#XH]|ohG Y1"J8KLxw[I~f힒4祻0;*+2O&RP i=vFߧ¥-S~LBn*7?mgs  ^[`ۓ5ש.v\g$r^[tNdx[QeB[uKZRG[.}Z>6 KPDczX(]]FM<]jL}:_+DyFl/裻]^c^6Bi^}NsT}mPb).s;qficڦ &*~d%, (8j1> |X5&8^L4B_YجLZeh^mf|e=QhrD2ǎaW߱=|7FKȖ< qp֮3C6#ogsCd_`?c/ae:l?`s/ABl4#"޵^x·|03C4S;ûX\Be湤AҠA"&ӝݮn/uۊˁThim@z׻;̚"bNN=0! ` N?xsh&Ff0}1,OWHjEDkD^T,u]S{{(=)J@P=EqweY"u{ׁ-,qHWW5p &ԘSVY}cS pغϚDgtK]ED{܍R 3qWƽ:8|L3] `2y0 ?:\QMZgcqFg;ּ4$CTT~$oZ<4Ý=LHN³3d(hF qw|\B@J CrpoAp;-mEgh aQt6WDd:IsxJ 3̯ފ g#m_GgB߂uP.'|lc۶*s&IjGrA;I%+HF[3jECg, 0y5fga;{ %AR) *gqۋP@mN1?A bC粨xx?>$D2yJ -j= A1AZ^^ѓXB5#kgm)ezw:ٲ9BjnoVBd>rXkIJQ3 uV- m}'dШ /S)hMP}F A- +B'WI$a l6%-[{XhytIܬuID&dw">lcKi,ѷׁ>0>f=}95ҥrs+ϏvZ"m`6\šI-tiI#:$Uwєpx}=%○4< vlC UMXSwnW@TbI0SSEAkrI<%JtZ2")9-xڃnW?k(K0A{j!v R{OҲx'T麢o4f5R6%Cnݶhq-O%z'vhvEt*wP1X!+ կϙRL6xgO^J̞! (cڱ3?.̠|/)E#7/)^PHKcB:/?ɭ6\:IF~ީG |•3+Bؗa-ӏ;VJX3&,mob2 iWC’bw6"I& ;nP;6v\zwq̵ݰh9^ɸ@*v]F>Iy1aИ#4KMrҪuIRk胮=Sd#liVK~b4cc.i9P#2 i!!X{,Y Mk|=+O&Il N^3;^+\x]hf]2aBbJKq|Ʒڵ~8^~q۸BkZua(F(_dwS9^odW;[]u2v4?m:)sXR q]cL!Z0FF|-:jy^JD!'[(xJ&U9MI s,*ntz.$־ybwˑ/T|63tu"v}n Z7|+ߔ6ܼ i  M:QYRS*xPlk۪ u%oq7/3=B#ҿV6LĿÀBgE|t]:CyU9ϲobfzۭI(~zTfNܐr1V%RKDx9eO1'%ɗ$GuV'5uAV4N%Zۭ0:˷jKXj^Gf15G)߲d<4p~_n?`^ N89hsoj7>f4Xa]ghjT}䮤1a)KbO ?LhQ,`P}vv3;JBN,bI։mxLSk ~76rYiMPuZTa Zw&t.ȋiA$HX}'0}$mN7#y+qt(<_Z"hldRMXll"ݳ%E*V5gt=,h SF Ï}2wqLI1Ny <ڛTݒE",~?rZdR@zNGT(itR;K2p-q-nf0#־G1nR>$Ɩ-1zAgvΙ6mHq('Du'Bw5f9H%o[hrcM܌U_5c;=R-RsǶqùM}[%B%Sz5쾝bXC}Q1CciO}5/wݩB\tB>%^ն6 ;;MTC%;`J uĴ`nCܻ} s ϡ+3v~T༤: V s5̽ԒP$j)LhiEL!R8bX@q|= 1,A;4=%?]D)8G'ɛE}ت&;,gl7-aGPlvTJӪ)lLW*io^`!*,hF6]lLghzv覓mRv\-ˇz/j6r{O&|j1}f ;=W{_ƾі gf]PYQ#۩:h/s&C g ^bp+5#\\t f͉_]xIK<TaII+X֔__Xإ5dXܬUAIt^1\viaG1yucӯ,`;g E[ϟ+I$4ʳ_rtQ'; Kژ# N%757AwԊ oqsw%@%~HA"sȃaV*,^"'VŞ/'Taڿ`Pd xv ǁ6ӧ_UAKNVE|CҙafҝUu>[oƏUJ$ۻ={PD N4'{VU:.Td.Cl^Q _`t5|Z;qW!V ])Uஅ,f~'m#VWښOuGf˖HM{a[$-rNDp2GbM}8?nwhSMKD҉^3Q{0GUQG2nv`T[!p_^бk_yO3gS >rpqXa dMDߡn[2˲Y%Y6eFb/[b(nlʔ!@|k dנ?N lkmI\Xt"Q`@j9Y^4"ev՗v}so] p_LIvrCRK#*亘LL@3ItӚBo 's  S~pv"vHnÚ".nbn3X4c%:>  t?bՊ|,=nir;jKJ );~Ui3;;sPӉl$n9s9\ȯ֔[_S%y1bD"-/;ܑ@WYfX3]R|ߗ#WΌz{tR03+gI;M5Ʉ@c4Dh̷@=~f@wK\G9`w1;:,`̤f)ɭ-SAs63_}qL~Zyw`%+=z/ίpTLusyI=~Sño_J$?b ׼$GqWW3n?8]V\*S*%>I&> \$- RCAӜيu8Ŝ%BV/9`3tcJ1Gyq94G cShRς1kxs$hB JJ;{6ze|SxUz踙Qct]hVOYԦ˥V{!Vw)Y߻VB>cr5ʭpdWTƱh~ⱤT1]mvR9sZ;Z/"c&ej/0W3(2X4Oec%WPLa9">VWg) ;qN*\k.ԒOv̳bL L/m$_$5[Gѽ4H;<6UpS)*xKʻ0gK-`ӢKY.<]|_72fnT3@U%%wV?oY*ݓD $~T#A1d1m^g"i+g%,(8%C_S#vlI~gt.&\)j֏x~O={M$`$zBvĺExb+iUNgGn;:;wFRlC %b)GWqciwt!5,3MXޯ0p2UmuX0Ma8vG}WΗ/ZGm\#_ k3 6H: 5`uPQs$O}ZhTҤ~Vk%f7o~c&wqirEHyJ ejӨӕ7tmRЂ{ aX%dIn d)ࡩkž+dhY o2Ewr}f(㙖YõE]TX%hMmO´rtB}6!ڴav@GӇkKz^Y{%=[f B5rI'@+6vCe'Kg:))!N(rV"mMP('f_6%I"[cjUu D>_:F *oЛ x&z?ӚT#EGQ6ʬo[?pFzɪX>zR}2!iKO_'Rw Q+3ùr9D0%f:jjW?h7n1+ tOyfDŜ۸:Nlu3eZMgxmcPQE=ژtFKHׯǴEaDh~Duq|avN$C/C/䐽AaY[Z^9kqng,v~gmT[K?Tgo@x)%iv wsv}.E; k xi brn"EZO=R%_\ 6&m۶mLl'/&m۶mu}銁=te/g9w0^'N<` \  aDx 6RlC>6*%Ti'v@Lxބ!W?ە$oeIug}a^w;f: ^? "PUq,h#vy,\r{ O/f"t*IU_qWߝ26 mC_SiFJX؏됕wU[ ZY'2v6Zt$AF\|QZPOIoUr79؊A* qH$GȁwMi,^ԙ@u.~J YTlC(Nk7J;Ix Ӂ#޹#xw-,+QϚ#mx! eâqw6^8r1b~(\-ؙ\G[ٞJdYҫ0ˇ)t)FCEch3F1 Pg1s .0o83?@Z >QTmCdƵVLN:.0OCYK- KbQr OEK{!ѴV= d[ L?'i"r^+ : %}\ sz<`u++gu2C '!I"4W]9J@5/$5xuH,88ydgyABzQY1b60. 7j6*Fo]ӁB7@{h gvodX-@Ǔ!>M3F0pj wZjLv{vLPcѯdTb?M* 1,I֭"Z4&m$7@PM>OwS3L:Ţn۩~D>gqSN1=WIƘ'Ӡ@d:Ӂfe,J&W Z(SVQM Η~g>J;N."WGrEU@Bؚ+v^UjRi[c f0𝅚S-1׬^vlhCXOrj8{!anw/C=TT. $h8j(ymjY B=%<ʘ=Q wryDs'W%,h[dzb7 :AsB]¼) ?@>9*3EH=JHR'2FRK%8$CnW1.d3{?w*'+]ov@B' *seBiH 0KC:$yyPxG( _쑠а<," zxʟN ihFdފJ]WM ~~gDZ<ʔs-U 7hn:yNAF wŦ%1I^{\)C ,9([|ۉUED 5o|R% !К2t5& d:VI2hӕu ]Ԉм %3'(]2fEyMVn )fG^9KMɣ?_f6pT Éװ#4"݁rrV *oF?^~~lGSK^^ Xsܝ.ul*7jMۿd9^BuQ *x~ 6!ӕ~rT*hiϤ*pc snk1D[WG_B je*Fs>Ztk3$=ԟx`lX@SvY)\lS5~OyF?"er\2nx7GRO{X2~xhglLf}rpen}OY=E>?ݫcLSaWs s {2=<^B!)}YF_qy)t g뵘j'n%RRqgP Itš>]'2dg 1olX'!oZW){F~ULZ̫ j*`]!d^hLYW_ EG$x‹@@Ү^s{X915{gFY붍-'{n)$5 0lByg(!5-ŖjBu:O&LȃT>dZHW4pPG k43Q[6\%,;=Md;UIAt)Z~S.k6j^Hh]Mi r6rC̊P?l,<Ѓ"s\ό3}f@;!\C/Jc&w lEЏ]]*6$p=l/$*p*F V:&|cf+ɮwm"_sHɤ;yb9vMy6* QN_ [xzS Rb4IGZHi\C^xqh|s$ƭҪ@3 % sc {K >)Dqo.>t_ S.x~Vz8pM˛pmBϦC}1M'JcV|zIä}AZUcF_kK`{%N)Em2 ϣR9 cv/ȡ;@aTnܸZL@_tM K@wznȆՃ(*\Ii92|dxBWV =, KkR/G沧rB걫@۶;6Jdu9m$1!2SÐ(ÍԐ颫w뱮d6Q c^jB]w AFMWvt͆+ cek@Aҙg] =,EIn/\\hu eݝ 38*~է, r/qqOq}!Vk ㅕ iXu9!:IQW0wߔL%;>՝ e12zopR5siL(n,~ޫHNd|9 6О5W}sH]*lf`GR;`1h@+Я*.XTy$v~kWM6#gYg3W+AsQZDݟqRSCiS/PDQo(j"jR#MJJLkm(Y !&U(oAO0G& aLFғSP7MةJ9|SR$Fq4 skR{: T0AR}A[! 62L/op#;Gx{gb^Ol!,|7ưZ(AISu1m״}p0ɰ:& 䎀ep`_{(H<暻$vk5V? jp0mv3.ob%~ ߺMf}9cp{٭!/[t#S(-' a!3U^?ShP34_&W3Ǡ&swm6 ́:A!9LJ?x%WG̯FJaG_IQ.$XlOP i'"͹M9c ^"`+F:\ i{EMЊP]8?/CzT ?bϝٌDgV3QW|H6wg+DiXk[7go`3EuO֯,7x(CvWK ’5nSz<}=jǩVH:(1d`1q ͓0fY6g zcI}ࡊ6Ɲnla:Фψxm9#'z_bШ.퍙ƣ"GG?Ϸ:H-.F TO:QL"R[et0LQidx2%ogad =[f\'_R ta"Vp"Dܢp `ZV'ﰣ!žm15}^.i)ٜl|Y2B*7' :3[`DШɝߙ0Sn;%:(ͦ"o g HY3Xz| .R0Cc|:)Qºp,r53~q7ٳ6U ~P8k˩'nDK8܄;3lǢO BFm8vw] h* j30{@'R,CO#HL@ϩj+a=CJ q9#3 oǬG0J謳H y#e>\x{㦷LNvRM1K(+攭v~$q.v13(8<[59<"v$(FY-G$O !\Q_c%#i*ee ) \5lw9m ?MUO.!Ŀa4Q9FvҟF$Ĥ_y:l~Ͱ֋,7aegZ o$u^irIB-lIي?Sy" +#68ikNʘ?8jXk030+\p){ lQ73\e15|Gx9}nW/%%NRd("`̐)n^uNH(5K5+i21+G <އ!s_q[L:=wY5r篋R9ĉ l!PP3zUN)/_▵ܦj =[V06~ ʴ>2&5g#vQ70rKx1q y=B)cJ|6mL]Y )GZ_㐳0-Ź502&@!8F0GI #:w"< LD|?j wA54;|`I]{Mc`]{#soOBV6l?J AZH2r0 *tJ]Ub14CypyW7Tj8aP@84~AY.tx֯wkĴ} +̟jJNrPQgKHr!T(RY4 k^2[*5FEvEw;Ŋ ? p%3:&eOݵdKq_05E ԅFP$S>Z>$Ŋյ#˿^ ֚ND_niO\48 nV ȗ,uBUQ\XO*3ZM %CȆc `04LNT}<ݝ#w@zrw^ C+VC9kf2Dx,"uv6 GcùS2;T29)s x8cTɫz! ]'%acD ja|}?u[r6 Īeݑ 7g";5u>vWVW, K*]!jdU }ɀbIw#nY"V9:jG׾ZZCD{w- c;'g+[*F?K's{UL.r"Dq+kmeD9,j bݳkV'bFQ;J Vc QFiuS*C/u{Yj3 |Y_,n|9mvh@W0ij-3g?t*crQ\Lـ: W_ (uNj-U%{IdT5 :H`gG2jo]܇.A/<ֲi[+[qӈze&w@w;"煂n8vo L4Ώ-3:ΛXNgΎ65shFcm 8ZxOJ#C]!BĶ8 Z*U/my2۠C("+o};o#?<'AG3Y"9/Z&ھ%fJK6qIDDpH60RkZU%xCgߚOZyw }%c?Tx,"&Aj̈́]{@qY1N8,`WT&niR>B.ݮ2 H>aVh]֮,%~Y#F[x.ܦ1jŋ`y`q_'Aˌƒt* WY|(FF@c8Kk_DZa( 3l~)3X4Gva 0 &2* y`ra!B(aoRl4e &7u:1Xإ)悍Yr{KaG'! 5_73hw>iiGJy~jżZݛȷ*=`X  y[4A1y@lM lr5a,S(op?*ϐ'c>;ъ(8e #C:SmHg_z %HOJC|&?jc5/)`~I;$|wJªQͨ$8uA_k xkr{wv*tڰCRJAQ T'NZ["9-PLM-y8_Yu)ζOeߦPb-sCFvůvz89qz,g;P2tK6 ]c#.CT`vH8;Q< s e[eg贐GUY"!kG1,Zd(Vz͛؝g!آK3ӲgS+ +)u3{ʴIt*:Ê;> stream xڵtu\>-t#ݍ=`FJJ#Rҝ"]" ?9{}}zlzQPK$O qBllnPB*AP (k)uTHM`І!>P0Cl!7a(rݔ(\}||n 3 @m @u8QH-` Gz7{E񱁡*/@I^@5>65"o;t nsno˵ LwP7w`cAR gvh #rs<ݠ.?x oD;Bjp{(--RADPyStG"з=]JCqS@@H4 A$!hwj@(@vCn7P7of =} wG ]o ӖQWQ~lu#<$6$}O^IK / oDWD!7 oSFGHap=y{W!|P4}z9nQ˭|뾡+C0̓; @y@w!X`CfYtWGP7H8,*͖ڣ.>{(BϞc'̃ .>G1, qG v1YH(,+bxV.7Wm\i9#!?! ~s E%5Ο4et nnBA omDoJh Fx{`0?@2E n_1 5 Ao|oVP@y? ߼.VkEG7۾b #GI9F(ᲉP˘h$L43*e-=碴$,&laT.Ws I~@)5k*j}ȵ{ LÁ Ed{)-gq(\Ƚҷ0|iD_REC>OrڼsmoXƌΓ\NMIT?MQx~14zI~\G)kx ZC-Jxxyț~I= C_"]q?̸Zx짜<$oMuwk!9$ӸQqen6ݦMH%f>~I8҈'5 H,% ~ Vj~\|݉ؼ`x?I=έO,`VʹNK))+I=PcWR`~"cdN}RX,KWSmZ~Lt,ҪdINJR^ArP5ϰSO>-1az+еҌ^F_ k=Gx_m_,Vܴ|0G_5K%fy*+XsN0wh ֧ ²BNLrC?H8aZ2h}eUcܧ,w>5E0{/[DBYYITR$Iᳵf]:9f!eQg2Py|xcܛX$뾩){Lp;f|mFŦg6DdoQmBj_X'y`гH=QQW*d1*12m}WHEÊЊ+q'ψ n6gM~[?{Tsa ƨn.QY6ܡ+딣 *RF3!coĕ}Lt9[1~^aP>ļ̗JR3|Oֱew5/Vj<sD.e@Nk=Rk9Ajn_{db $FI,\M}+ݸOO!GI%;uUZxN 1fPjk4RQ!L at4p%&Ur(/wARdVtT:!2kRx'Z={Y_; L'Ϋ9sW≇*zxB Ijy+ IqZ; Z'{WkBYLLBSa3) BV#lb"k`ty,&7-V ]y:s]= Aiδ܎j). k[|]ޚ E~a★j]IƷtZW>òvwI['r&VVȥ符 辉=a}F#聀(W5jSb|Bs47Պ/]7K#v[,yE2r򿧹~*o\=@f<*G_,t0 +{]51lydYU۰]gf(R46ԩ%C/z2ݥ/(FkQbBvVi< TW=Ӌ8ؗ_;+E >H,kZӣQU:[ҊKE z..Cn9? dr_M[tł ~.@l^l ENbYc*;r6Mh,{I|ul">5V$+L&-/X5-E^qErf{%jߓύ<(|YLO#_d0^BgW_K!qmo>{ƺ1U۲+J(>߽rqd" 랲ljAtgQtSOk":^ w#~'7ݵV_XcRj:d"v\5Ma6ޝKO*K]eˑvl=bL$֬.fSNx84qfsF4hŏ0)Ye_mu>[V{ z(v?X#{`Uh$22B2>YKdk]MCy7B] <%]\6|߂>_XձZ1suqb9 & /"iރ=$8LMl+!̳^Q5QMJY62a|+s '[\Yy7oT[u;1?ٯ~~4Da><<9(w g=tԃ'}WT}l5^^ջptf/$!VԲkbFU$NEID_A""-߂d<[u&c:rXk`<0%@a|ܹRSadd'iQ݁ҿ(FО:bZB$ dQ W鯔h&םOY1†ҟ>5[SX-H*,zSbbBִ5)][J< >.Df /^UP3, yw?&IKʲ)].QiX "ۯCXR?v3eK_}Y (ueNbwOA=-m,,c5 L{$ 0aj!G׊&~wT}UDǔD[ƒ+/K0<6k' !y_+SZ쀕wXeR#K#Y]d:&ʦ{y|ЌOٵ'~aT2Rޞ|:oϾ c{PDWc3A7ZYr; EfbKǮl> .>z^c/sՋ́fh)oVЈŘkZdH'7{t#W+&P+h/f4]\8#!}WmUbd`L*ysQUF/xpnw9=܉ g Uvj I\s!o^{6č2=h66?x5to( {DZׅo0[O^Ĥp">Na>WEO|n1H$͏֮kL :×rN%nrw&8^[Vr ;#fex ~V[~{Rk=ggt"QiҥJse8*"?{kql>/W쉽)s䖯)f[ 1e 9z 3X#/PbZN?˒4ƸTy mf\e6}bǿ FMuvGxI}aؓ-hwg3`| o̰E W`NQ"5҄Xg*Iۈq_^[Y߹yxjVZB-oC);E1.6:Ϟ÷%M-y6 Gi#[2=v"̭+e.E6fp)}4UvwDD8рql2:T"Ih^)t\|; ,0˨bAy-1u64m}zB2"vݻ6rRq"~+oFc?9`_ǖ:]I~3rdvO.[C,~I1dbܷgL"c\1mR_uh` |80r6ܖ!EVOvXv=It#xdF<#OהinSo֊-bR͊6/eű3 KBuE D=uBg;[:Lo54 ΙԏDc/?p5#Ip-k~C+h:V{1&4P$b "6å/S'JK&'f,ke14- b~%~fgZTXfygdBѱP6s=[YvTn~p2~F[6O_d1q}gϸAgĿ$_FTY^R&j b[qn WjUg63{M*KgPQ֗HJۭo0jÊ}y^ sAyU<=RiYsy'T\00O[uؾa(uCY30GwΒFĊ3Vaǎy=aS:w)OG ŷ!]/ O~nVO*E#~IjhP\njq+밧7`#U)8.rڛM0WXJN_Yl6XDx<\W{O!>"tnx ߃ щU7qqEn5%qif?Ϊx>ʱՆחT+T-UXXqy("J#KHǩǫm VԮ,1|lh2xA|0@dJ5v؁5CX0UсՅ)8 :\p4L S]qC$.ȌH g~.oS+a'R; y]ɢ~JY)LEcFk8gxPnp\'6gƀY;yoﵟ*7Wjv٧=U!_q=~^%*(:eq3D'qhpTbT6mTJ84uNO%`n EUUe.ޅsInMo8~Կ86GuĻ|~D #x ?:zS!{~l< Aӝvxx kzdy7/Q1Uuo_Sh~[&i W܎lj?]8Qٸs{$PV\4:tPZm)o?ɑ7n θ ^>_ o~{S(AiuSu4mR01h%íeo9ZKό)ɞ[ؽGYE /?anX47gG`i ؄wnܳeiViMBNفD^XJO,?%o;8+s~[O.*ccciDkRq\Fz`:MEAEvG1H0zIypEjmϕob==7&DEO\oJeO nXc=yF Ho4bUvTțF(?B wΖKY~='S[hnG5&=8+݆u)(ջNó @IelgFFP`}3Tӂ\'r_R@AAC Ua<9+/"4m *!*$uvs0i-~^6 (5,8s|;x!`ay`6aTlEs.U]^=Oճyr>k&_6r+.0!s^t:D4r^[,&ib˽^\ɒ]4ÀE\{5S,uFBԥo_B/Ȓyrv%ӕF snHʒL(y r)z2AN #45 ѡra Hݏ.y-Q"?,xD)@f^,P԰̫X}zk5TQWT*9t=DU8}ZWr響G8ֈ i3T3CrǠa-#wY $[qdOkf ;| +q掔7mzWb ΐ_q %K=@.5(T-@#T>9*}f=~>j򤄸NPTy,ߗ9|y\a{HY6uwWک޲hBp/}{1#C7=KbX *k L?n5(to^T#eJM8ߪz !wGЊ{FvQ̱b'aV-UI˭PΗε5פF{L\A!jOr:r'x+!xt .WZ6_p"n[JzJn l wAԘMR%`B]/ /E6E7c~I${cѲ9*_^%V۝VgSΔ]8ڧnSZ@vOސOTߵey18P2ߥh'./\dBrG,pTˊ\3 TĝOx=5jr8dQ([V*H>t7Nl)qF:@ΌPI˽ 3moV"kfLCan (<IĊer#f endstream endobj 181 0 obj << /Length1 1859 /Length2 12937 /Length3 0 /Length 14156 /Filter /FlateDecode >> stream xڵvuX6Ht9 10!)%ݝR s޿ks?kRihJZC,Ar'(+'@EU tbUvV.6TZZiWjqBAB~-@  Dȃ@/Fk7@x;8  b9s1HC]BfeO@ htsJll5qXl`2jjiu5^k;;C\< @FRMGcj9Py'\UVGRPCݟh/6ǿ lPg!vvOOOnP6[6g_tlW˷+ w': 'Hʗ=^ G[_**Gtzqnt/o5AiwW?5TerwA:/nV'7;7A;0z?wfNURMQNV[UXU!/8Ay')"p 8^TZ }2v/- ҿ/; {5@nnL:  `הT`?󗛬-tuzr4//󥷭A^u } 8C6W?`[[+#U- H$Aտ Qo /o'K<^2@@9_/K?"'d/j. ?4KֆB@v/9Eu2xz_L? ^i9rZSb @ZVr8OM7$Ku!wj}RoI(҂q\cgi&#xp6⹂qHH&`Ϸx .Eia%Dv 3[I|db7AR:/䰑W.Z*pbN#nM yL;sA}` S ,___p&j_I~W[q>Dc#)y`0VH?y # ҈A#]Vv~IN5B2_0>ŐOeVϋus~?P=tƔؤҙp`6p#$x|Q';bWk5`6 2X74 ˷?kH&/ B"RIdžA%7&cKHQ7PpR (3g[s]g_&\XyqgYf,(LW)&&gWg ~,.0N< uY{ wMD~e$7ܕDYӂtTJ&C1]ly*7-ȦjBln:ZNȉ6ΆYryi~:/74@mq>䔻G,~(W,MVү+yh#O Rn(Aωk^[_fn۾H@Uw{\9 $+$x55[X"֡GRӗfSRצZgHJr^,F|r W9E 5ыys>KP=5c]DxeP%]},7{To7'+&~KN5`-kna}sg;劀D5!CB,dq@m_8>FYKr|~pt.Գ3F Uw*'ޤM#,FefEbMGWCo*9B+v8䫻}Yl[u]\6i}}XEIoCBՂ0l\ ad|R<5vm2[EȠzolW ?'}v*NE-e:9qU䄀'ĕ.|Uz QF 6 !tDph'ӥ, EE *]Yf*)Z Ʀflq0>}ǟwx@DXͿGNWƋtׄ%B31k ټ~E~Z5_V;[5̔P]}Wj[Kߏ?RZD_tV\sٯঠX ؇ u4dM)*5 ;½qrJ/ad7uܖz,ztsrfPoE0L5}ĀOڷ qל +ɭ3`}Z0&Q`![X}@ CDUbب| j;HB0ۓ 8(;h^jpn3;\63꽃w̞8ZHԀs̗JyV52ļAc! X)a&X.=&Jk:TǴZ'r ډsj<]t\yL8>MyA)DM%ޙOgnmPGe9sm gKk?g@%jvY'h \*c E+?./&jxW2'Ne9qVKl4.iNof`c 1۱S1omx&I@_ Ď|g[x ,' uҨ5Pt&Sw{54I岜@'{jGÞm2PFX_%8ѐZq5&2XUNBcw] x;ah2CnFҦ|)ڏ1ˏLՂm'cSݔ3oP# gaUY衎R5C.456زXr戠sH$OҢ$]j.{?~rƻ;;߇XdnhCh;a:!Bw 0.ǧszNuw_wנB?=}lba o:b#(O V٪saQ [z $inJ!^ VB7D߄KQ 3ĕo͸g؅]ʮJ,ZU&ԧ _R o+f&^N71NfAϾ+JjXFKHl߫"min'P#60E60:e=FVVٺyV_=|Q9IZZmRR7YoEWfdԣ:cE]^|7n )~9d.͆v{9 jK,>[,Mt}Q  ݤtT>}`hGdI@8IR.rjYe28FXJnN &q!+{ÂLOi1y5ǖ}jK[&b'S;b3Jf7CaidnbfU޷@"ڃ~M v/P.\X. cMqpa_$ 59uyخ3rNf씆kL΅A n8VEU&\m#͛&}7NS2|4:ޛpO: aJ3R>6C E]W1#H'-ƇG!P_ V w| it nbhP,х4#'t+tN}sB^<6e]GZd]ڢ؆J)6G:}naƘ2Ǧ[ ]m){R_x+!4z$a=wi"Vezҫwfe\5&kϱWu #vi.W*FbRDn\6pbT |8D (*+,ʾzcڍRBG&>;nޓ~웨|0?da6!FNhfl:c']/{' :> :Z1HhnxhE\ qD2<( י[mY">zC V"O; o4$4F~6k,.a WU_ r \)gn?];鼃$閘.ܺnl& \G%՜BZ#XצB&ޔN?jםH_PNz \+06غu.ҫKe̗Nb]H>Sh%pznMRfMYjY-G!=+SqY7.Us1tT0sbͨTo'2i 7t[.EB9\'A6'Ԥ̋ Tg+/5xlÇU"UaB0H7~rH"yd T$8CF.(2R? @wpr\!0x -!T=Hl,q$/F9S`.Gth~*FBEKGԎ4ڕ/!=l!L`~-C&U[%mWAb>\;E^iqU4A _DJVAZ۶M^]I+csp.hee*^) KGQa}:F"O2Bx'2(,CҌjO{{Xq=@k.nިhLhq\MɐBv!HH(öʔ%.ޒŊ ' RVzγx6bY_!i6/RtcK-Q%8pᣴNQ)%N6]7a=}X` *b{I**3JHic3v_c&p],na{r|Yѿ+!5_E[+MmVxH>zT:r4Qbe+wScTY!MO%,U'2 ʲ>ĩ\[ 2ѭ o{ct<')38"iog^fpnH{GY >{`a0*5@HPtڭu؜4ˆ- #4 ^+*! =ȰQ)Wj39RV&𽪀Nm{Sp RkQCxԛu*\JCI2=ofS.n;V%TdT2~onԹu>+L|qDnaB)> w}Ag=7h i ?#Yܥ9cz>T'a }:W!c72%]KlKN jܝ4,,j{ÝQ^*- *d9v"MLg?\7sJ!tK{k-r ­>@AewF-"kVCcEam"f!q CcoZjWf\ 9 ZIsaq;Sm٩RlǟeO2Ű9!5՘lKsbBoA4ic:>R =pao}wɸ8tjN?y6z#6]j$ L2>*t!qpm5}3sa<>n9̈Y$Th) _]u:Ĭ.lw%  wn, ;[T6!$aTbRӊT ?%X#V b@˺K4mQ!}ҕG26] pjH,u @]'yF1 ?˖QJSt [[)9s?bU3rOG.+;b|!u1Usu s#2r J O˔4 i( )-?i6p?XcvG^Zpqe\oeC̈(o3,Nx&04RAvaE>b÷0ƭMvF0D]gpU!SjHcm%rĽsq_֐}TUgU^O(\&>촾l_ {"YR(߭4/`v}/[^uQ7m]4?ðw3B]{<.p 1}Ϝe-W>?b|<\LEǼQJx5|: tpV]:fso(]MJ}|=Ⱦj xG_Dndx{iƫfG ]?3\ Gy^}}~=mk.բBybF덻2=EJl+bk#Fŧ`wU'N~UuFA~7V}XJz6>:J;k7̢(9!A X%J79#Rzx{Hͅ?cg%Nޖ}_wI).`~~^Үxc*Q§,WC*@/glAP?) ./PA8b~O [D-)-JkU4zYfՕfAe 'RJ:7s9 vLb7.P(ӮuPI!jµ)#ƣ"u2&,ּ^e`Qտ" '7!/njD-ھQoAn~`]z8TcVmNYPÿb̘,ʷO9V[: F> SiƣU.B>G.Zwu=^#.<ڵ]K UawGR?kVMe& \Ѐi/! b; "wxl" "9;:*PB'*]Lwqz 1<[ 1פv ^f禃9^Ys?{Rӓs"bOeuqD0s jKz/^#_CЃuV8=kEZm"ƫDm䀹NCvvzĸv?6 4 7lBޥoeϳs.֧ui[=Nu1c Po7z4_+ڙ+|_^\P;qw buTupf XamJEAhc0 }_ *0u_8VffN#rEx, aOzFE $?wXPŘ3&'BcnQ MԓC]Ls8(f2B~ZE$y ziuz$idvFƢә1;pL8pqωKj Mbi:8pVipg SQdqep*1܏Q/V iɗOxSluV~>no<}C4\(%QŭPe-uCᲃD$2"8G6&ՆB(9q|C?W0 | 6;iO23Џb@ynF E{z:_q!eʂ]E]ds ]Ga.%BV[S(+}l/yһY{%k {|~:Ži( HOZ]Wo139I 6%)s ǖOqFcuh1ޛ O)i-MSљTu"+ƬDZ챚j]v<>qXM`֌4\S}EY\{+clsełki4HyCh=6M,Tv̔\wZLoך3wREwͤ&w/[jb?+ˈ]N)*CxlL "(>0pwET d tK'f 30iz^eBh\a"S(Ƙ>_o|d |{d. շYmRZOOj ``ғ3O&;V'9b\=Y2isq im\(c:6rmUf޶Uf][Z l2G޽ 5/=&k_+u0=_Ne(?Za <%3(ȿޞ?ƾ-^c&85C[-s6G\B=w[j &ZKS%G%οAd<78E9pفI֙we`#Ng!qL!C 6 )Wo㛶ڿ\KQw{nqF2=#d *:D=.ϱ>Ij<$ w WQ8LAHWRR(,5''. QɦEa&3Esw.|( niUaw;L9 eyFf7t*8"HxHgDX-B]}&.mDC;a L5}BFNt#RcQqx]rG>[:>ƴky϶ڦyX;j+ɠʹӦ2=É;裈zQ12V&j/M2r&XYmuQNGVIQRzPO5&\n].̌bXA4m[M-w{i zjYM9eWcP c("F,Zʾh' RF"|ΰ AЏȟ<AAUr=W*} hOS[M+q! MZΤ9=k8&URݬA.6 z i"Mc0d45-pW&=׮(DBSn'Y#I5[ȼaA.N;[RE*zRz=[b،=kO_WdK 7NJXH܄_;MƬK{<QSftYW\XUq%ZNM(iޙ3_B-ofϫ?(ɻ%9#^Q5yfCLU{;ЃcFhKM2!Y9ݠ{9!ߒR)[3!fA״EgQdaOpA]VXh"Zfܞ>Si:-R "դ0||l'oI/ly|"c$S_3yL; +h)[!\5L!LmT1bV[h`&.,nXmLM-Dks kNØ;=iKA/O[<Ǜ7[`]o_ے)~)ab$aY-#ؖ=Uw1@+1GBƫNYb~ejl_ogP3~0J1K_b߭|o>`gMă8!gjDC26d"—^Sm&NlAn-9iŻ6ҟ3(W]u!cKZ%\ĺhTVϜ)xp;05}[xly={CSY+Ӆ=/Ȕ5|sQFJX_t3-c٢OmJZ{C>H[ Nlhx;b[y"8'-t endstream endobj 183 0 obj << /Length1 1756 /Length2 2043 /Length3 0 /Length 3131 /Filter /FlateDecode >> stream xڵU{\LiGF$3tHLu43RS394]EXEl!HEjiK%ryLkw|?9sn|X0dO>ʅ|Q'(n 0( b4{r(#rFq'YXxK!&$!ŕd v>*@sX 1DVՂb83dMxbd22ڋ98T?%Q9 Ep,h%`3Lf0)DbL,Fqf~v3EPc3Yoc@0+ :˓AQ{4I1XYn fjDh +ݨT\Na8PB?ƀ-12O@c a`23VAMh)s}UFT F q`#q.@ #o9F2TY#IwԽPbg¤ 2,|m`0cc! !%{Lyf0‚<ҙ,r =A(xV t.NF0'*8#Ij~21 "@8@ <UY\%LSDSRĨDsGCċq!KePJҗW$y8!{btHˑhϦa@!&ʚ[>E(N3u d/֝#c8dnJE76 >y6q1HdaVN6q= NiwF@U&7QTF+#<#1pRdO$82<DR]Fi¸BiRNJ Id#`b\{a(]]6=Z3q)|_ bR8a=!<Ͽ"*`|&$\Յh,pN*7v!$O6Hm(oQF7UKoV[R.Y3}s|Beg/CE#WZd~|pvWU ^NjP4gSq0޺ZS%99g Mϼ]׽rIUiD;fI3M׿`pq=mnGlmR7};À9=G7Q#4Xs-bSG}_Ì!QSM:Ysz?Mu9=d͞0#q:);627(:YC.x;W`FE##mUXiƒm2 w25J=G黬m-~8vܻBcUi)q?RDiWf]ױj(5pY%m8kSK]z_s12"`?dݓEz_bSn'|ʬM(0OcY~geY%0Kˉm!_t.1q sU s VWtuR~C6QO{H>纶XY^:jRi裻z^&~]2da:$暿%Cs6(ҹ=5W|z;gd/CV{%+PסD#,G.bOh#. Y}87?vγ4 =O x`B`>~d~i6ٰn?t k+6DoڅWMb(3t%7xhRN7g(S'>|8/Լ5 6hdo1)ɣ>pjI=) /0;)./<\1m?4ј_ٳWnXd`Q@E r<0o dֆ;;M>g8Rxtncak!#nf$]a&- /;RՇ6:@MX׶5y?Vk|h8Q1r5u+͇jxJkm /=a~1f3,DR¦y{'鈕tIK~ 0Q]q;Pmҵţu%)%Z(Q:F{+_U|8}kaVXr}F` v_/ 1ID˵3XjQ-97-424b1R*ެ9qT'omUvbQ 0ԧ'9fb#XG?Ie ؎cW=x4.O«bV'BeU7j{`銸%f.);$[Q$5|4~RQǴy)aQTM̥< vv<0,a ǝL nEѹ k*@]Oя ݧ'x$+5)|VWwA憌ei ˘β[ŒnH[Jwϡr/Z[ZВه{lHc\{yxoxuWY.+=mJ-7ϖ`9gl#eW+m! ~ˍVw&'y[.Q_rh ~!-{b*JærNoͿl1ֶ?DfquIyO?r>wI;[ )g&7xDH~qM"n, 0|WbyWi \4\|\ݜjtU^Cbe4Sm%xw}}P~ |#zƅCdqlߞLFv!h[ty]~zΑ5z5u:6&P7\ԍ̖]ZSǡ9Z[׬c~x_zƚ;%oO?Um}iÝkwQ/~dyOp]1A7-ixy+jw2\E&I1Xh N`O]l|84H?Yߊj{??ǎܩ݃( fb/M:=Y}> stream xڵTiX.\ jED԰@X[i @AC TdcLKEEu(Z.B\r.׺-rgVi'O29ߡq4KC01 ͆~< |i<8Y-ApwPAJ eA8>x 'J@Q Fa% qH  %A*  ;)A"C$d ODfA8$b*t6p0 aD$8I&8<>rt0_P`WXabbrZ B|+Qb~HLA,7F`4XBȶS9hDDu S +4 =Y2 R`J) JXQbN<,@ND "UdR6TI AN֔M &Rr# Q8U Qg#q J%كڥkflH3ubVeͻ-PUa Ad0^E Au66"46Ft\Mc"NQq&U>Bc 4h?y%*SnBIUaW9Ɩ Nu! LP@Tp6"%KW쬷( _ FD8!zbq(a~fk+98yЉ}r&V %7pܔ^!ja'vj4$Gd?%.&q;q0M!$s\2I= `2^twOI6!kjBˍOIQX^:L03=1;p ft#h2R eP xx{,!|1pNLI!nrX-NyS {u|\IhDL\ohHz;a'>%ӀFoebY47y3.~'S4yJL1tXDu-]j穼C5T?Ze1vw4Zc*֯PE|⟐}-ZC]o!{wȏvi0<.\ݽ欽Vyui(nXA~z\h}|MCCko͕9ݳ7Yww4?/\Y).bw>׼{H g|U?ֵFFdd8qSٮ9z{gڧ PM/ f|ewkǥǫKggYf(lW$n:4׌/T~V6y(m]^4/N2-=_H Ԇ:UGn7,~Y3mcתS\>YqrME%7ee_Vz R %imAqPo7!7ڌFy:a_ЦfmS|{%KZ>DiR{}II&7lDrwA+R͑v^ .lؒGk찎2A^VCnftcZx;D֒^k~Ľ9O)k/i6Q۟f}3:`OSUciA >yf ˴!2+Śu83Bsjؾty+m?zW5p;cf907u]/ab3 uG?m=h43F10늏-6!1Zm36RZw~)]F {hQ}o) >ooXc53Dw6C鋽Ĭݳ,nwM//e[ /-Ǥ1OE@d $-zM{g&er MHez7d}]w;/~d~w WI:YAx9ˆ*`:h`vA㋀5ӓ VwEV d7X̓w uÂ[.[>]?toӟ.w%9m夛-5rfsߒP~Øy?:`aUws{JrNr9P~YFy=F+^ȶTѯi7bU uX(ZQwx*GQi άXAMߜ(i4ly[6PإWSYln4ŁeC|{kUKBGiұ[;;{n9s48u2E#Sy>3 gi> stream xڴeP\ݶ. {%4иK XpwݝNpK}={x11kEA lbguf`ad903YX)(DA@g ;[13Oق?`w<#(993> [3 [͇wG 3sgG 6z0dVvNV @Q`ZlF s)$UՕTi?9W-j1a5qH W dkr4(}0./&$w 7ߴQGe)jsgg{^&&WWWF3'gF;G3F{S3p9Z> k?q59A w7r ['_' )m>Z;>7N JctWNII`um? .N/Ȅ_.sE>Vgtں8[ol,0Y +HK1}PΖA;nX',& fp?)nk"jgcQY|;Zؚ= HZ쿌? @fr36gYM򰷳@^ wY&4KۚxTߪ"?J1&v& Sx&;:P3eKZh&oo ' 7?M, ཰5cKg??tt499YQ>~to&Q -em$?Vv&fVN: `0s<\&_7do"7Dv㿉&9L&~$rG߫T;З_G?HMΎnc?>O%7o;7vvǪ?V\uCo @ v|IA%ySP+Dqwnm܉&SUF ›8yxA(oW^{96~2.:E~zZ 5 A7`? "begS\-, <' yW|\'4#:mPlmo?`UjыLێmsA"Id 4)<$V*5bei:b/)a'I茶u=SJǔMhYV.'RaM`D-2q,zA_tZHh.!i1Jꤪ4RtN2V&,Oc]V8Œ[FD2A0!lxuǼ_y̦m6<^h=rA/QHMoJQ:PbKEFɢ|]u!9ֈ8OɿDt-;):>!<ʢjnv'J>Hۮˑ#WiZY_>Nzx0f4U#b?Pu:k/C~jvB8X8FC#%K:Q`yd{⁚ZD蕂3m' :0vʨ~-e 3҆J"WX“#{{TC SD80.JoYxaS7%LREo K ̧6xcI& dC⢝GްGŸ_&~ޘq;YO/\"7MVZuc0o% +ɟd",b;U=dyߝ*\^(mBC#i b_>v*6 $G EV#2UO95GLLmK-5=IG;,N'ٍN]E.d8L d'G"FWEx35rf!)q ݵVh?yT44]Mc eDq:]_貏aOO0qO.R*L3ظ+:' pYtK "^}DV8] W|A$;S$\~pn36Tnz;rXF/W4.į߻z,z4cpqS{jbtzG(V57QOɯ8rĆHA kFl_BMsBAR(WO&1ת{x1+=2:uY:ԂO:Å\42yńφ uJ]# G4@u*d= Ww>TJx raې碊q +({SP'a rsnLHM80m /sGV =frsVt=D+!E_)MwzϢ=C$>ȐI) _shD`PȃYJyTؘ;O-{n\BKAPaY8b%pEcQwi.q⡼ XT<5JLA-ލR-B276R1@/zuW`Ѷ{$s/RJ-&>mٿSJTTQMNۚ#?V;Fҭ{n+BH]_*&r^Kg|ӗ]4V TChT{;KCwص0_ʑJ[ȯD$܉,X`uV8T~5 -lcqN(YErGWěY9}:H%>m*ݙ̕gzJ.5ԋ;x )w i&gޣ!$9Ƴ` brjgއ~O>g^իuǬW r2~!zFL:㊓r@fP`m!Lv%yd7)D+@T91n3A rDT:7 #Aζ ·o1w31PfɑtQUP饼 }Y:g ^)eb|.[ tFZBivjcUI,i'C0G,0*nԝ;Z*=􉶱o0 th{yȐ'xgrx#Utn^)Thh9(BN3 m@z!% AgD$%iSh-ȐȗZ@^NOoCc-<9feNUwTdqFޫD|L'}Hl|ĕ=<m蕇VT/%0^342<a>\ aA2ppr?w&,EՊ->~ϒ#m$~ 9Mє"7%iʲx!Z1{dݐn}=ᓧeUB=e ewD:63̸/_bډn^΃jpGr 0qk/!-r ㊴Ob Y n=& nߏ=рz GԢG0Z|.xꬢhXaKjY3/.kGȘ4pyzxq隮 %YX<'3&ذ r8o$.kfײO,m WSk{ G15%q =ijXB#H%:eN'%5d&k:{`6CE30V5k9+>5p.zq,-̙%6.w3-Oțu(_) gl caᅟ8S}U=pmOc;wr12-,WzV$d#_ yal"D+ #HXsCorƽҚ(SG#hNp6(΅ѷ (۩뗧`/5Zs(xX)fTr6s $S'}pYD3UO{v&\J?|=)9 KKևJ:dO h{x~Cj4#+96OD٦ZDW^'ǡ#N_EOu&6ps%2© PG;R7&lBغdM=W5ـ,z óC83 ]O{vT;P~^~::$pq`ʼq;5;EP8?mW 9vx}D>A|Y$_zk҅[ۙ!l#!DLۑ!t>YUg`V0:`Ik=i]d`d@`MeWĀR {V]MOxx\vњ mKxy8=yryNrC0y|H\F'/MĻw>)|#:2z)1*0HA)``]1Βu{C [=C="pcaY,?ʠyq|ts\oGDy/P;g. Xf e1Y[{84cɷ?dzA=w'iQWC@ 7N[Z(9[ߍ^w?/|pj/NJ\26"h/ɷoaB-O#ozYF4FFwWU1+@ \< iqSg,VAA7L g<y]7E!߹4pyW"1PZ!Vj> ݞucƧ0i `IIsYN;w9ñu1 UPTC^ A?0. nAJ"/?n;'XXjȟ1_ gu<Y.Zk-5V1-F̘p5)!iҼZKZ4W!NLtyWIrM1 }*qۖ0#Y7( Lb~[Z Qw *\)LΚ4zT6ȩFmrYJHXCKR҄呝$.WefpP"]FT괟Wb{t55,6ӝ)(ŝkmv_ts_Pjq ×2XK!;0O9+r \}+9foI<%7n(VUIqW҇ 4\o&[N+̠l:,R6VUsQN*Ԧb֪H[hf4'm'I-\[BMx?WKs&R'+ 3տev¥LjHsHy7(a^6÷ ]'T7@4U;9Ūi1nLQI+.aRA&#곿Ybq8eg}`a2-̬6}(Nz ClB> z0,o[J}Xv Yi:!@'*AypQG?$tIAր9ѹlҟ9͕Xk `~2r++:-,e%#,VaS\A%iv7/ON:- %y /.KF֠ǬB`=bVV#Ӽ_<`0NȎ%`iZL4M-Cl5/"T-u9*UwLDᖨ'u, E,58hvӾ\N 9S]ގʑ8VQUH39fC3k*x(]Bz;sdN1w66,lh#V9DHhH?|]dw%5iI^Rr)\P7~.E?I=MSs'[*<͎g(jT_k5ww Wӯ} ,٭Ih!jIzk$KwFtW-򰖽coC4H/f78kwO .}9^5r( Qw#b*tÝCkyF ~M):pD,6z2*3;(g`AZy]6WJ4ig0hpT5xl*E^[WL,9jW9o2F |FsM0H/ަ59cLFI{EHH25ͫ ֶ`eed cFPg3IIņ_{?H{xD\Z0o[1|'ߘux])ǁC^ pBr,M+Mdda :~GU|&cG*2f|0Ms?U^ /6֘;FK)_4`8\ɀcA3 Wb5jؔN=OM;އ`3aKHZIjɬ\[JYXK0MrYؠ>ψKo[ eJs~X3qJny.dFp;I1O_D;:U !GXAݕJVrwN89 "(rJ8_6>xpZ'G\n CE."gI.J^vؔ;ҍXPQ.ze6=mY}D8Rl n\Y_<3Bҕ0y̋JDj֐Lyh"+ a9$Wo&'Zuj׺ H;)WU=H﫵6u㏈xP4'"w@ʇcP)T,ώ=F0"% Q"4#Yl`p]"u[^ atW"",jLg-J rˑ^1UFV  m,EnP&x,"W,G$π_iS/*RFʣ|5}QB<8N~O+]kdIOʔUvRf}b̰U9UMH7p!҉dMi&l2N w }})a8s}=N< DL}c ƟĤ"VqPwp2nB@6ԧ~> w1ED5x٤u~*y=I?֒?,*M&3+N'ҠnGirznxk58KpP"FMBWtx*^ ;/ 업(#&PBԘ. lCl(fм+~E* V݆ԗOW = 1խ>X(AJU$.\Zܘxj⃴H^I}4l\ͤp# o?P#)ǖ"W2]dJ BV9\qh*l|+CO,td4, A_ d\ogX[-A0ںSh3FɩL^Po !5Ŝz! Ї8,ӗ"(D!Uppp-"7RMYEUsh"~ 'O"6B<1oq'Rc{UJ{+gN[ɦGJ;2M 2Hȳ5ӆ:kgY0[O a><'ت hםU=VC+rf#f`(f6^09bQ*RZ(vNNd_1쒳v=ySL;4yqǀ)1:/n5q6)36䩽ڰ~eIvl~8&XtC~)EqϦ>2pHPqj8(kMt1l=2}vi#}S[]|HysH$,'Vʟg$/[fx \7W¹ܬozL_nqM!.PEK>)̋!EssfY!׷Jv83#q5{+q'^_8a4:G 2ެ3е 'vKAotm5a plhʤ'Oe_n? l2hBCE-<.r.vQL[t!iU"} ӌ.gykN!,ia+w^ZYz3j-"\nfن8tD,L(>Vx C<2g:'=ƐD,7ǃOPζ}-z@67Fr*#c6E]R_U l3͏&gGMcI0$dDdYZI, 6_v{E8-fQd&d9sNUwE{ ٥I3lzMk g`Z?K" XGQ)ի׬f:=1\[(gp rk_}6Y)HLUtݚ& kRy8#gH ,T[](,ȁlC_ w!YG&m t~2:X&0=][),)*W M*B0FzP0i(k!% [+-rsPѿr s%K#` ߙzH}sʿv@IVo<97{BMDGrڽ-eQ.Bg$PvOx #F1#O7fr׫N鴻d!,&"¯/jjS`9F$ '/TESo MM^l{"+Ÿ,w];ܟ`aez^1/vo$ŷ=A _H)#c'V]~$qKuѹi2y\}LxZJ@Ȳ2*sknz>,kp3HIzccU6 Z؈k^ P'ӍlyMEe&4,e9=m1(~cAWhmr?"` |LVA=:)J\5:&sOiKGSd3rB|<&Kn)|Ǖ@.u|X[~gS+qt$:1p%+x+c(_Ny%B JWk"s:!T \j]"Pf?w \zݎS܀ְ].&$$o,k+QWÂ܉. "p\6\ J"]B'(eTf7HX[0{=!TŬ/( -;G#2+7נP#ZW8I{OaH0MXVp4/%j:`M~cC^-LH_a:3t\JSy}*FIKӨZZ*q=zStϊfkBIÚ)xUh=m.zMS}oYiBJ?nUH[DJm_I;~`聠6FK3ğJhk Fă2 L(c!ʋd2„ck%͟-c'g4ZAF#g8"\ E`[h ^> daM8$G%(LznI2^ ھ#n=UcV Lp9Lz'mwϋz۸f0,zaѱKFN˵cyb7Ѩ3QhIIk\/(mF_G] TGىqw-G]ook?fW{qYW*+ufĮH(F]VF͞ZRAW%^/]ýn>#]~ի`: &ſ\6 ƼFD\X#ـQ?߿ "B9l{o玽{ s~f@L6iB0R=<ּjj2ϣC;I+|* Իյao֖Y˘kGŵR:P~CR%߸NTRpw ݇)N4)l?Y+LV<Po &j:.Qrձpa]x-\h? `/ L7l_' -lTx| hRhR EG幟$ +#{ 3ɘ}Zci,]3&2Xb!o-Be۫tU"\.s?ǷWT-Bj~2p1%U: 2b,?;*ԪnN]93 @5uVp7ή-o1M}xh{}UQpbd;i:1|J-ٝY?3=aQmMc6ܸzy_׆FثPsy [) JkO5Nc *`Bt+LuMuSt Lm qQ Bj"/I7%ŧe[k$)$%djRb ):Re0:#7X9X5>Ȅi\yt,`7b6a2fDzc֢:B4~rV ŮGpqI&wkocX| ϰR1mMt@m٬׳c\hAS#Ҫ`wΗwUZb|L M JSvÖKZv7h|հ"䍢M+"$g-il?>E4/ZM˵7u_LOy&О%ѝk6$ {!2L?'! wn5MQ@?I a.g FaUKR*7MwCq + "# ZM6R#?cL\Z !IFcZs݃&nҍʳ_yqe~-n?Ap~5hBhYۯi]!9Nー܎О%ؚWŋBBJ -~l 3 .w#`oam)"N#+VBybI1sIu\1#џt\u!i5Y scv+& upǭ|I&Ă.d2`lq.7R!BU׃. W \)f Av]EbwD$I{~>o0׷Do&R/4z~Ti ?\u(!4<(>ڔH(>nT}k N7; 68X' /଱@%? ]kSϹ3:Ljײ%*tI JfluE<5=oA PRVfsiUבJ Jl `t:R2T٘3]jt.ن >ˌ -(\_- _ K ~| p2!;0,VB )K $qLT?*\xű:AI:轱]2ųQytމ%q;:[r'ΑvO3Ha^աN$=ݼ/&C{f]Z(9o%/[ᒗcf羕ҹAߐ*fT(JA+sFZJbrxC1OSiMF6>!0 `G.}XF:<4gY>켙qŸEE6CA<ԴZ,J05f2RČ E% Zd6 ӧ:tFgG"Ԙ^&y+p{ `ܟq%1~7я NA}i``F%_G ?lm^[,0AʦDNtEΆrDpbF188]Y ,൮utt+vΗ$F\I"$ƌS:3[aiyKs l|sE)$e"oN7l|I JGu2?^+kF?tqVJ VFvj9\{HŌ\߼K))y%Ipg{;w#Yife5A~2H}'ܪsy4NKv&6eq=e2x~Pr=џ>*lKֳ' 60+ؗ<}fN|ڞ"H$}@:7߫A}v+sokD}U<6}*܏##ei{ Ky1-k Ң: ꑜm[Hg׫S\|[;twL>HϣXP`SmO K@L}i?.f'’(( ` 2c9J4}ǯG\>6d5yb3Lj\c`t?tR6=i.e}hPyy6oO I9³f0;]+<{9FX\9l[Xu(D.lPhNWg>. G4qoY:| 0}4(fp/w^fr3U ,lq%_Ќ|܃-uN._y&&_w/^,|t0N;=gVؽPo\=_{W`:7o NTGj @ZR=˳`Lu#M&@ٍ"Xu6nާ\`Ȟ-t Բ!7DYĜ2᳒.iPЩA#e3tOLjjPOh>AmS>9kD Y 䆿@̶!8RW1wL)CS*œoJo{o;SME| ے `ioeyilg-H(i- bxEPBg%^4i_jlZz1cˤm$7|2@TS<͙|ˍm%v*KY xRU,ܞ ўm0߰jՂ!6eSa݃,Q5Rl|2t%]l9D#nX㩝yC8$q= }5^k0tg%Oy'ٺs7(tQqI; 8O^]*[FەdiBe+IT(4w\oHђS:9" %NvYmf6I> stream xڴUTZ5'k pwww Np{pVk(HUL쌀v ,̼Y99;[;fe#Bhlag+j p9A ffx R<r@gCU{ /h`dRm,l4 ;{G 3s1~G-64ssښvn `476ؙT51e #(jQQU ɫ 5?U < rbBX~`,~(Ar5u+͍ٞəьT-nvVoG5/b\lM@t:P@['o'q6 *AN  ;' Ҙ:+( 1u ]@@ D\?i]3k/C=1C['pm:Y89;0Y%SQe -[Fgw翬"7 R1[;PNlM-lML3obϤfk5HGft09tMo1o1/{;{d 8;}o00v :hY.ekj[ ߪ_JR;[k I4w7R/kghca_c]+,-܁&X4Bf@Й%RM֠]=o. '@ile trpXzA$*/),AF/31[c; [3+'4/H3`0s}&ߢIxLbA\l&?' 73Ib0)A*;Iթq P> P-Al =hVl@R?THglg :KKllDeaa`a7rp1Q?)~#;A қ~4Ua"Ե? ?9AZ?zP6 Olж.6FV ag T5(!":K1# 3f-WtK|*elKh#tt=ưN^TCϱ4c8Z/}_m+L;kP5* mӅEZyrU9L4_\1G(L;*ܩ *m@vFiثX%rEQAIKO)왎% }y(.urg}?^ܮPKJNv Z!\3,y" da_Rs~5Hy8e64pPGcG25<^t8O9_!fmNΏ vCuQZhۿ,o2̨BV<06ȁj?P%/v7W*ҙO;7!A~#M\/՚!%V9r$0_٢JԱ>iݙ7l`Aw+SB|X츪6\i%X>}(xWv!>Xu7^1<'G)\V#=+#,oEp ' Qljr]jm:Y\r)5:+6 48z/ !3#z!;rΨ[ 3@\&D8ȓ' X'N䥢Y74w\.C%ٕϜGp%D"yR|(!b)buvBUy0B]76tҹ5qIL~vS% P.8$W2xwg6}ёiXzNrVteJb~F'8-8RtD]Of1cш؉`3A*&%?7C €?k$Ų{0LV197Q]wV zWk2ᤣ[VH]dVk쿤k?EK#a#mT$~4{F,5p# ; @ /xE$+ MiKNr12/+!릔XfcU 'jnlnk_T:› _ģ_$-=uV%lug{]tm^}<5HF$};CW6շa/ jalAcu Bܱs]+ TWĽ[>GA3ܘkkf:?4k{627pzN ~-L"'mUi@ ߷ٛ^ 9DTӅ.i}*J%S~hD`r@8eAʭeϐU4k1tAD9&4!kCC-r Q(F>4@=IߓfB>w|˥4ݔu!֯~UG dJ,pKZIzdxMk_ StEN%Q-pb*^2R k1 L/͵ c{7EpM菩ny|SyMmiM0dN78Y,>GjrbFuFMёցmX&6"TI.+O@Ͻs.uHU}(el֦.Λ-J U썂aIx ˆ*:`i#2TNO}-kݚS Yߗz_W;_?^# nH`r8wյ!@zB$O.SF\mᮣXt8ڊi_d4ǔ!}3{?#" [I?H7F1WUfe.EP԰xpZdI/ܣE"mBz@WUödPrտ{9B %B>XDs7 a,lk+VQruأ#I-I F3yμr㢢Z݅[PK4;3Gfirð xt}XXOAU#d.n߱Y₂8ڇu*kԺ溠lA3{=;2JB(^g6e}_vTƦ4BwIطgN+ʹLx=kwv0\$-.:O'˜%>΍ZL<}]* \mQW\V8 c3t/l*xmU<jT?C7x^OS&t4Xr*#k5uwYT{aCJUQ;>":w7*…r[h Gv,kvrr;ո͸'**|Q9 ؄jQVF*A嶶Q;"Oepg' CSMY%8rKuձr!-'~Xk5u8;)s0:/WZ /\̲2٬V.XZ c3uNvPy2r0{pcra8[bGZزEsSoU]%}18.l%%-ڱ1MUT-}lݶܖ3Ǜ?0ǚatNn()ԩ."!k7'S(짱.ke{֝xV<9LAR=lwE 3h \p>Q)ʃw$]YڗLgs77z_WiMM$ۛWIяvKY5gt+pޱ럋_ZˌZ9~:Z:Aq's-yE{HUז= JTʗ bJ*!po 8-hڞ03@2@Nw[:.ҧ^h"KeSaO嵺 M*C&`kW&^K(2XGYEǰ/yad0[Q[oI=UEx"-_ 5 -O(ޏ{QUɯ.],`)G]Xyn$ .9]oT%cu8^eC0oרF֔PnQ&3 =ZF/W;-1Ƃ bmL )GDՋZE:3?fU%*|#9Rr=~W.ǽ 6J]7lBC)Dhbj(_<ؤ>+z/'͔V['9Mr7}ZGNJ6-d*= N6B8 H.\YvLnUG!pUae'(qypeֳ8zf6 XR_D{ 2n$Z( o# bՙԜ׈7*ClV{;zHd-L-UeQ驰26%D'mkʣn $NW- =򞂇BpٰrdpC$Z e[*pɨ8-6)vQdz׋p_k`Ѕ'9lz<mxsYĶNg\DG2e㹝CٻY 2ԯ *i3Jg"%p!=\2/h;G$ok:?3'eS}Cr-4ײGyõp=3t]խ|r๒of!c3L;mf^C\S:wcoHPQd1y77]p KF_=MegZ8}N&BM4C,9-PIGXM^ [{|{RvJFFQnr>U#dS \t@U).gy)`NnK4Dnk8gB)^F蓶+QAw{;7#K%Xy1z%fy9Xc= sOeUɸj΍E y\{"~NZ~W=7nf\LzPڰ+Bpܸ2KKL2z7BU6.GB9+)pW鋝VϥQh(`́JgO+.){pz-cK!j/byz_4hOe_wlt>cˈ">* ]Hic $b=6D%ŅLB15lsB"gQ/YPL':sb)TՂ1i8;mH[ivR)黻QWmXST : d޽ 3:.Ѓ@ç()zlVH|8ELԴ;H˘P#KMx0b3hc.3C(ܲ4އsxrSv渖LS;PUdd.0y/# sA7Hp>- w~{OؚܤJ8~ۼxIz\ boƒt&!RhȌU+}wa܀Z4'~f`Z1yJ-f\^U5 zv-&j%6⠂ 0YSح@TLeieo V3cf qDoß>)'_WU!Bup,4EC$!c9h"C(/ւ趘e!>S]@>U ZAsCVGu%13&P!0kyY*ALZG |c!W7>QTm?|U y m 5iJ<)C뽌 ]_hI*NX[;EWiаvRw .,.2QE|tr-7|hy\j!G bvZqTeK:qCN\T4هZ}v&-Զɔr1JY>@m% ÷6RQN5I)Ƈ*%@ȖއVJSɷ<%.k# 8QU0dTmO85%[ۦ?`Þ qٶәl)bݗaEFrmkTS!wu/ɤ^ݐg?چ`=^.eTJu3K#g]=ű拊!W/ԯv|t\d;-f%I`X<7W"*TԨ׃>C-zCi8ɲ͓[T2}%]oGa,DEVD:XWU.Žj&5j}M_+I3~*R<2ա6_lfhU K߱z]H,r._Eѫ[e=K!:ܱ7 O'ZĈFyW zpueO)`3ԦY-['fnPkJ3{4jTU?c%®E҇?0L?vM`M3sw=3&s":\+$<4ްz~}ڬ,=VK7Pd }>7DUNל& pK&fs +޹ f~/%;N"킚CC;Ws=v{+MQK\4VD؋#Gh=J6/" LRwk[RJ]30 z5<ًu}<gmWvwcPR/Ѣ&'o06 |U9e.6L$\cGZ#Y2⨀ʕ_`xkgӮ [Ճwpl;#Os!f~ڏce4O4c~oC9d Cal'/?E5S|9"B' T!`61NKUT< H"K^pF&B_4ptN[-,BXӮ&uOkZ~k+>86կES1xVkz;W6/KG+I^DVٓ(/XX/ڎtXOM]xX~ni;5,'8(D: p<_E`Bn|ąMſ>h^xB, `Y;[Kњ:#l7"]fܳOWs^z<ۮވ{R+Ky姁&3[N]h]Zm5>YrQ A$>->bq2b5m$HdTye&U0(0L#Ӟ Å Dl0W64JgS=`Ri=F(Q]C:zꯠtoˡ8wRS0}FL>LmM,ګks(U.0n) ΙԀgnuL )ֵ=XU^ctKIϏb.ONl zM髺g[Ǡfv@58Ayh3:ou2|2R69tdR|OK}&>Afvi ީNv17dNI-A~lp{W7F)C>9偵2c3ځQҹPȀ:Ufyx֠T!r ‹ -V..,tkղVJH1[^6˔2xo,+ɹ'RLJ&k,z1 iRQf͈xON:U$nEqTcUcĴod nu`hLqj幬 j{C +8W*2_wgkZ{mO?K dQcR8EE˖vW#ԤրS|\UЅRלq200`i2ERig0!af&Z=C9XA|-k\bVnj$ڡS+?3%<}:GfrӍbԆXחib4ߝoYIe侨L`؁-?FƠzv\R4d5$ bEkˈ쩇G ,D!;-a FH֩HgQ7%ioc(Dz*^]YہeL'' dͮpF&=B#}M7Jߗnjl7'"EvB:vV,Z5mtm(}裿td`WҐ/!>}Wz`6IMKw1Y[ ~>sE'6}{ک wa4*D,6>waptyݟ3n=_Pp^y |/`KҢj0^5ia6N<CmQ)t, l^:g&fT  ^ħ;0󥓓[*bbo3Q&j_Ɋ`OXEu0_5"|#%|z}=S;nXZV  )7Z̠zw77Yf6D_$ U8͐"Y(]ɶBPM5');kĘ")anE^FHX"nLWn}dt GyMọ{ޱ $]:*Usp[Bt)䈛3paaM3 6:w.ש`n[\P\i-p[+Ց3 H_u>$5v "$s"ʙ!; 3zXՁRBB[x^|Lʄ Ug r6ͳ;O`viJ烦d]xi3L.J=%.u uNΖYPu5{s X浹 -5~P?C2/p.iՋdDTEVb}L-_#(q/Ŗm% I6ɯ!ඣugc߀e]w6[IuAIѧ}R9B,{bB$x sj NŝJN!U *] QM D{Zd{;%7F?]]m->u(kDS,|.׫_"]{V(M DL~_sn8ο}j% ۍ1*Q$+9X#Z} wqSoO}wjM+k3G"tzݴ3jr}KefÓ9b֨| Ec0>ڂq?\wIM+ulv+t[5KމY}^`4ռڣiNt޳}h ٭%YfCN1ll=?›=ﳩ΂AN[4MXx,nt;CFy 3>11 7k*9Gf]7AjBqtz4 ^ <>WqLcjT%-h+ҳ* ]'>$ЙL .  צO~V˙0w,8w|Bw8&jWq'&y;"xKeǛԏ'"uWnvՐ4\c% ?/b3HqGgNҟ, 놟׵~e_f?|0"؃W:6U "Og:m3}Џ>jNJ<eyL Zr.k;$[n'q q٦{)O2 dYXUKpE?&ilMP4_þ$NozϪَc?9e2yCJ=*Ϙ߹IXC=e>PL7V^cˈ% Yv?zmKQ1ѹ%Ԯ?,m-HkXc @}hv[-g[n!1Fom5'ɥHƁ䰏 ^_V#kLǀ|MGhc$p0D\tx*]p_)k] 92}.Ʒ'򶡙jm^TH NA1X%^rzT,}ff̑FDe5(tv8ϞBdNӅ"b0_"/ۙS+D#v[[نN]dc2!Rem+ن^ ?{֯x'|cV>OIK.K)0@>jJ/q _G\t8z>]A)ΰV3V+a(56,Ι,cCFo/.a O?]E2=ԧ}x{Xq"jZI˸47'-@&C9|q񨶈Z@{ G$9/o&DAޯh5]b;X=wM:ɭT| Hol~#ʨ0Q9L|2VR$x(W q@V$"lP',Ni{BҹC ZL(%:fɳ|34BC(o-\iv/7OS }ies\n|U : a[M$g]7Pq"/+&ŝV 8`a&#V}!fV GPwǵ\Bʲ'vyu[y$#sgӭY~0͗%aHeh\rObM"zO2RU<VF *^u;Fkwc)ɽ01Wx.\/9qVNa*j; 7LTu Ԑ_nm1*u|Og4XX/uʷ0\Ao4†MI SM3""oah RT&nziiMi5/{nJ|H.20팂%Yr^±9LA*q\Z$Ruv`FCwf`dnap7-0v~!(k"HzNLuI6ASV 9ڌ4+Z t7/s,l=׍gnqd*x/ku(5i&= iRcOq"ZvQNOېlx[ڍV7mȃBƨ}?ī7U3sa.aIILɩN1WtBW)'ij{v2Ӏ!,sowZ 0mot&]/*"uF,g%}V`DXc&PY'3pJ8"$[o"zIG7LfcҶKߎ?Z<#y>VH01ŻWel.Ļ~=ulFpV\ yHHM~_&}vݺ$e#n+AOZ[*"(VzSw yq\ip </t fa"> `䈣HT$Ѓ?ZORixjж}1C <'.[tVۤܫ%N֨]3 3ˬ+a?64jC[THMs L³JKWpoÂşx,!O;Lygla]z,pGcݭB;EVh?\ُ+{?ңp4!z}6kn<ǛFP),0옅@H l6KE}&롒>[A+*#K1l4glu 4J} bQU?%N+!ML׾tFFD4}rb)j_عtb׆"; tB~ 3g<[+w(͐[YvE脭'Mz}!!xpꓓd( 6s`eLtG^`KϮ1P1{pHd.ܓkl$]ؠT2sW)I;5:wF-jJY ְuG%oFbPd7oIp&I~g vv=$\2,'nh5adlȯoqDp/ܝ: g 1AϞe3B̑]cyno!TG]2 jȿGP$tFH+ ۧAzU?aYf0O7ѝ(T&psqwy~o&HP3^_a*@Jj lǗV;+!2?td%!Dl:󀩪G+,Pʜ_#ک[8c;'ZHx5S_lڐ2DH5_EmuT0?%Z#jlIϢ"EXFCia¯w{#>'2X/ҟ6֡UiEwV!1]M0~RTY"h㓿F=`x2&d6_:)˿6g8)bR؍RU ;R]q¼uw.h-xf%8ֲaY혴Pn A9Fa};P(<򙉊3 Qf*ASҫjA%&⮠RPze l._ƫ>j! >DJq}335fO=lhK JW/>CL)`Lۼz*DPt~}Q/g)l5[ۘH+骖˜&<`ӰvrHq1M]YQB,4b@6(.3A|1neNxAԪ_a jWg@4 b0F'M.RC> ׀Zm=>1^LmX>Uw'--@t-ŕ`?tj'(=pNFv"ȉ?H}( 6֘s_p69;/cW$Lk^B8e[+?Psd$K5G yHY`(z]1{IfRv7X:W 420pJ%z7QqD (A1QQ h7M7OU9c"fUPEEo=W}_o=!&6}I 1[ ˒A`FzjNdG1D*$sDyzL "T=M%6G}dW`/?(yJ*2`9 [I@?|{-?LiHd62n֣ #1#K"cj%0c Dr:C+6kGD@SZ+lWOPd.yGꪵ[EG}ySZBC;gf{d=Dܴprf J!{?nC!KY5L7TZݩ?h(muJ➮ZvhU [,oԡf `B@Ew=ֻuuo\~B&M迚#0@nidɲ(D_lt{a5B/^1SD-aJVwe>Q8Ul?1\>zzC""6-C;N;AK^f]MRί8fӎ_aC`Z,d&4 *Y? &SPJA@Ol~cj|!XG%m`> HjZΩWp.0s3`IWH!|M~y[ "zSɡ1>bɾV T6_#xS[<^ݴ"%ElXAlֿLq\HŹˍuTɈn)O1uT7nB$i42TV_zZ>tsz s$k#-h62X T_2-2=. JVg=aHQ[Щ!oݛ "(3əSXί֌MtQBe.qѐ\lhNć%_wM_3tw@R0WsK9H;|}6daHF:Gt,wI4Q x/j? 'hf}A+LCE hqha۪tKzŢs Uũx;{Ҙ#ojPnQ9ZeѱÛoXr _u핻?Xb>Cq1&VA|/+DOS.gP|_'BN_j^ͨ)vyV{cKXa9C͕ΦpW\i(R@_p멘 s3`PINj (7T BU4(cky t0 o+79_`73ݸc*+3Af]kz;z?xoe&O_ǗW|Oq%>*Ȗ, SA%,L->laP)o '1 :M6{!Էn$0̰Pƕ޽q Miإef>X UoiHm'ߣćc[:s>6~P*Y))(ߨ/U 26|&RݧODc~ۇӍ =ס|cAJJ^^g_Wf{oMfDB3i-4(qIa0[Q˧{ u]=aQ6^n ~qn>l eVjI2T&^ 7LіQ)hu xnvO3Ha^! ߗ×X޵. ^,#Dܙl$SC\d#D*X8]En"իgw~(!&h‹%Jaw cd0Ԗr4g|uݰm%! :ZQE}ڀ'ӜYq?Pݰ aN@ Bn߾>G Z cX4PɦE RŸk7;y\A_ !w&j2^:{Vn?"|4dP={m/NqQs\8hR 狛JTa,w0A(뵩`2= ?bCa\ïh2`*WSZ(|(؂ZwVI p[tղ׳:|+S8L1 N~U*L⌘\:I?$7:.Z*t$ Z8ul,ɳX, ̠sD5pwT1zߟ(~g؀đNؗ s$8+6 S6R`~‰8>)Q7['+Vs9 =wgX֎V~ӂ*A!Ozp g~X,A l]*b;An4JގGcفfmq-|2j%ANݯgO{Vخh6$!(9;F;)M5Ne h#`U?>eJ9cND)zT `!'({M^v]xD?yP8 t'RN;&4,Ң%>R V p,%BTG l.pZC&ظ>ՒQw0OJO57jǮ"V}AMIw܈M ڿ9OTXڇY19č"xw:ಯ y oRv lgฒWfW"LWlG}YԢa)tQ)T.uJz&$Ž2`'$);)rL2uGcFP-\fU_,L*J[LY^ښm=߉WOAzVLN7~a`ê?Ϣ, J53L '1658edN:͗"b/˴zUNz9pǪ'oaW:&"^c+XN<OTS =n]VIMd22sUh͔SG&sPEވ[I_*._1'3M=;Im qOKu}B\Yrs3tЗ͓511 =f B+B R o~FJ=VÜ۞z;OÇ4GQ.ud %Zf2 pX;j]Afr| +Icd߷=e̅M&*Ah7DO(-C+hm+wb^ݖPa6]&ysnȇ1MeEYۗ%)bIzniJt‡!Q+c+ ئ iׁ˥\M p#W!zeH(<݈6c*wK?}=] !~e^ر! c܋;Co>ƹdvվY)AT$C}!ȺJsD+rU87mA@m+A]wL|g)MA ~6w6.  _Vy㢏ۣ.7vT:O8ipɅ/x\]ꖝnfu9`;Xz;UDc=]YGn,V(_m!Ug5sDP Wq~eSI귋ɔֿijL7*veΏB8+>iαoHn!;#RT҇N`_<1PnH&PTM4 QU-lT}_W _T4stX&D-xtZF6>`A˰U|H(.S :#'AINfBMs"b==mCNv*Zŧx4 7gY.=G&9/'N3<Ͳ qnPj\"cI +{:E߀ˊQ_cIRj4QM4J f{l`4gDzifr/4olϮ\ƠfUs?C RW3PcդN I^dPYA rP} 6*#jWkD"^ԏkDܥT<]KV8\t\|6ը6LߜtsTgDCKTQG𞊧zz>Y8-oàllDUi#@oՠ ڮ@Tv>SߘE|ڌ]Ivߠ-KUEm!/ 8X޼SZ냹f_;z\ZcOgMwӆ,Py;5^Xp>?M-& o@*Y5G&n>n*i~Rek*u8Rca`&s!:$ʪSuR#+;r#`Nߵ S^G8JrenIBዧ obGԺ ݸ- 'kʆ275T}q1S~(fC[,KTDMm/2T^Ib&M2UL-O鐏.;k 2zIϖUyn= !?2lU7V'>++bc[$t*Y%>S5P(X8j&+q endstream endobj 191 0 obj << /Length1 2220 /Length2 15505 /Length3 0 /Length 16874 /Filter /FlateDecode >> stream xڴeT[5Sݭp w'www݂o95b.{3(TE-̀R 7FV&>#ȑQ@I)4uqInesL /%@;-fE@cPqtuc43u}wAV6 {۟쌌*cș9zLA9&E&@M- @S]RM N^XkhJ3$D4$@-Ɵw 蝿@I{tEI Q ]IV?k<.67wfZ8:@cdbd? kWhk0 qYUϞĺ W$)9GnwAip+_mM]UPQQ8ڀ܀ S{+/Ђ_qw?=rOSs|_)e;\m\\Uagl@Ed$5ޅbTt|?D%ޥ`ccTd!$l9z|?fK培[;1kl݁nBft5fi叙}NNKS{W%psq`ac.WuY#_w&vh:gd Z"0+9ˁS?L43 3uJ`j?>W)/_C_DAV@#+ ;ۿ<Nt߯?׻|4]]\4YVVIYZuW$d`z#j _j03SNnKG?; `c0x#^7;{=Oo`VF5Ff;O ~#V˻n@KKqS2|khOpp88݂坷?{K?:,7|7d}wkTٟfG{CN}/d~o9Xߋge}_?{G׿'joj.?#{_WsGMU"b[ 8m,ޟQ4}4/}+Հbb^`dgϸ+_Ϛno^@sGsP۴OSДLU8B:r PS]xy@චL"G>À`Pe(F{r䵅Ȏib!hfHRPE9oR̎8oWC e*AEZ>gk+=A7T7V\i2ݬI'Q9hzi:džBX|~U@ӣPhn^uHxҩrrmM݃_dK*|ƨ$Ar/}~PuTdʌI'ANpI=V:%^$cL=^RĭQDfd .$%i=Yh@M~4 zX;=Nmc|x?>z'˗Ꮏי"1BXfc0w:;jH]MYu2*j-ݳG(if#dD)!)Yx~3{xs5Y5]`Pv;CwIڙw.,/266%[:&泵5ZLF{Y!BV8,LD2qu}gl5E\*7yFӡS]OttTӴHSz'e%KuIRz8 8QRxdӲA C.PP_[~K'~a\aPHx(T;ˉj@bJ/-#<ڳζ/<)f_s=# 9*XÁ".HߨLR,wWBH+F#&0,s1E/7Ï7nX<&ZX)p`-+ʞϣBF3[i &ׯgb5g|AI"p-~N[7%d?4ݐfVI|9˛qXõSGJ\Wh䣎|]uvhت~dPvuy2PnDʽR}f? 1tT76L !?Y )QUGTOxeŻZeO{(Cx>E~ ҈H X'~z&Ųf!OFږʝ"5x voEa/Fz(XDeLn x ε5,A75| &AC9}3+m-֕y`/:џ_ǿڍN96eN+g QDh/mM5=1xm u=scEtkXIY9[޶͋xnjnNn]ҟqub;@!9^ (&Ř.kX|,Kq<4+ͤl{(-:$dѯul嵪Bi逦yh6oԿ:-#pv:ďoS,GmUtEdtC,"ZeS(6d>/_x GΠ >h-8 QF5Azuc-mY~oا[nN%hG찦ʊ/p}IITF!J>ۄh :1\S_eV́B#=Ob.J G aQ6gxlq6R}ezvlT?%nY16:084ǧovcҬ8mu E\JϰU ڎ"hwR_- K,]!7*V\ 6ڐ]tI T(Ԑ,/ NPƏq5dxH +>{AiIT[ !T,_W[`ylfDS^ sbf8b^≵_%y-4&3ǝNL'Pd7~sX//V~jCZٌ7R^mTOo9GzX&81i:Ʌtfڪ'@{e1sMђ$-Nr&AO'sƫEih@!zAvTK-gl\dnC"O4/¤X~J,Z>ե-|ӰbKoȓM9.A1+<Γ:}.!AzV6n6ҹ͈z7 jԍt,~ ھJ:ҒKb8 ۊqҌ[c]T mu&Ӫ;ҡv6d2hrej9NepBxK-ɉ}^BYlxڕv҂kYߢ(Kq"y\ˆ6J:Ry*@ʫMRz'9,q%f_9C`#0++/eqrHo*("ٱ8!ی:2iec-%}}Yd\a0 2{$RsIC~t*"!HǨxSA= K.SHxFtȹ !/,滂q nsž/E&tTTZi{P1VSߤNLe^6 E!QУ~/\ +=bOònY):ޒBx؆WPbK ۘG]yBuJ+%?g-0Jcr+fP?>&W?|_àCֻļ6Tpe [C5 2ĭAWL4Ofڝˌ<$lzdzKHcJV52]xd#uҘ-I͘w:1{o2B&Ҹ%g~Bel\~*jez=-0Pg}.Ѥf[Mqhp*&ȧVnEɊ2sj͹=vDH)F;/wo~d?Jz.{+l?zh+R??+ vus3Vܽ쨐eӠ:eZTFs?mo#g*)7|,MXG&Pބu5KT8 k:fY~kmImf-S60 qѭL<ӰpPw~s%3[ I"$ncJU\U YsB9dh3d2vZRt;Ԉ%bed 3Q>eiP!E|WVhfAF7SG iȃ'CN3:>@j@ާl 1hub`Ny{M Lst:qH{ sCwfڑx@hlZJ$jPV/P"uTv'm||0j*Wo3ꏀʒ48K;)6ynQ\N3ۻF'Cmvz˭5su/S_j;B4N9X gJ*07Ygh'iCg:XMt^I|;ꐬup_THT*Ž *2ӯ$N"4+U6i.;WmWY7{.-"󴓲,3A#A Fk4#y'p.˞C|`;`jvT1l;ϫ j%ZW=2m"5l*\9Twy( SEg>R6Ufܟ4`}r[Vgw;2pNf:|^[DG?w*J2EgZU\ޞJ=}ZF) n6bДDuJr?~8;;'?ࣛ??+RB8i4 w/<}74+y}+֤eD>lf :a Fzafسd2Z,d§ Y:jAq$KghaLQEAo.ȲUaٿ]\*aؘpQq@jp5'UI8Zɪuۢ 5W$`3|XEi+{VjwTI.mFΑ.8)4د5n=b0-[އ}ZtXaT1h{dRЦ_&  aO> $z#ڈ%[‰PG+AA9lnv  f(4t"`4mp"HX1*8WOXy[$-W&:*$̘]nY8PH c"?z*z_542rl[SNLR7nYvZH0}^pV+u!AgfmnVjzOL|wi14,1U Ip9uKs6d> ]i~f`V{wj[Vgjhd=awuqC ,Yb+?$l.z48sʄCCXw!F¨ف1*.-K.\mfiֽ#D}(8ߗ7Z-Uh+y]]|d5AK3ɑhY8@#)h%5<呀%6zObj:kZzL~`Q #3I&DiH>/+ 4:u׽nϮY1;P D67'M’NPzi]x(gh?nba嗗g+`a*٣,9r4N&;ZzFTd*FnqkԈwR 1_l=;%ȹiWƂ2_-ܡ~O( D}!`phyNT_o^@JK&^hg/ lI_׎Kʞ/[X&{JJ_*@0σy"0m•zv][fWpelz h;Y;^ڣff!'7 t䓾٤JnK9R2AD~QitGK8;Z0WA@A)W! &6b*"55Ӳ1+fU} qԩ4{K9u@ߨ8ZLn_b@l_'_Ike׊;R~UV7[2%+=pqڄ'_" $p40qMLmi83A/2}#TDjk|'!:N,[я~g5f`KG*Xw[¬g*ŋ ?s# MB 2_>=1cu`OXVx4n>4i}8vk*`L-UFRaE#3Ý+{S HLJy}uڞOα뮃&4?i|\,D9g9M f]oqjR6B_{Q8C^gS`i,V4tP2853!+(ծҕ;!TadюMQK|om/80x1qy\ R[)SD US(=BoM(kLob$1C54YJ*iy Š{XIRs\<{b,,HbӞ)vY}i@L 9IRɾ &qze{)I|!WK y=4nÇgasْ͸i FIw+271C k- ݡ+nk1=<0b>.;F'wbT>6A'G̪;U9AC_X11 k+CR1dC@Ăq~j?OPi $^,?G-i&|&XqI8ZM(݈od&}-`7?*4G4n3O<.kQ63Z&rR[F]w!l %*"VΜl.2gY]5V#Kb D>?l()Ը mq d$ %<8gdn#Kvo bQG³scM.4V>7YҪxz :8TsDwsTMEƉ312-]'m%g"M?ùR)ˀ2G]F !rU܄%&j<'-tD^_k9ID^r1:)zd&ťY DaYL}q Mn8Z~3t |=T~Q M;] u{!.7BLS"m<ǝNq"JlՔspӥL|a/BIy7¼,jDy%#Y,A펴cŃT E@Y0‹Э@3˙Qdmj l*82RX@D/wq@Ĭ+6~c dQcA [uBƢBsev9ǯWmcY=T:1odDY7& |1~de!ML32u[m/|&s~Ze0ɓša.e/ k@sa8 v] _ ^ hTJO%J뵵ޕ`k(L +mdbOGy&L_7zo%B^Zx订NKane ȩO"ZSoU^_d-s}BxS()[ْdbF7 B +ΏKh m8OO&CW{Rda 6+ M=!?yisB;,0pPu䯗|;x RI@Lf5ʃJ!Om2 51;ir7K:_yTByHR 6B 3;i%#e&wPߦ8Sk|G/uͨ,rj&<7ᴶXgG!kf qͺ@Mc{%w\,钑w mKZ,aWG~ O69'!x˞ Y:q݁I:rHzIK0]_^='}2kKlzstFz2Z~3fLw*tmf7ϴdmϔ{9DAM[&`ОmAo7xnm"3 w/^BRZT"|=c_B2HwF%jJm`+fT;ܓ4vI!.+g!0Ne38]nudZqKb ksOlH ߾0S@ڍҢ+^JGt̥~_;|pbw5s=qr~/gOdcjO3A Hq#],EiӔ2":/gΡ$`,Q >oJA]`sn2K"qaF0{5ڃiEq񙍮x՟r8"Pts+">/F'͘pN%=o6Ry茤^t{ПcH'M{Bcōxw]. }xcZZBSc8c`Q&6S6`EJ`L*JobO񑃿.G!dF_4^՟Q).ŲRPƼ}%Ԫ~X1ƗE;aדl^^L,^e*q3Wg~ZN0Oo7ԥ\jt#,x벺DϥqQmߨ]s5G5 P_ӝF>tlӶ@[$ºLʱc_53hN~`,^D2r˘y%fH<ebRŁ-Yh/ a~@ƠIe 7E gOt _LnJDX%#K8Lo(MBdqtʀcP66jlT-bЦjh/J>2V^>;Le#X۰`[T?oh.DQY{Y]<NsҳS4x,I.'K>@`bo00<ܣBQ0ll>ka/Y د'50IX!D? ^uIhދIln' g< v%*-f?#y"`Jq ,>︆Zk 4,gVsWz{[N^xr'1WmQ:}΄h>fi3$}>Xh}adWwo 37D9uBy0]5(xg>SV7)ҡgΤi!ؑs}TV# E !?v,٤XqP] a?ołgƪ:2ŰQ&%K_^E -;EqֹsFJЌj ƿm1)q`Ɍ} t Q(DBE*_P9Won9r:0Xi7H $j?"oNw:x`^D+ t}j6wihkv_!W5t`N]-ƒH}_Ɉ2YNqX 7ՈN%WTmۥ: I )]'H83iQ[;aXwg.8R̡2706ʶr#_uIo: MŇw)p33>eN`B%k5yoE@~pqa>g1_tR2ѠqX/ hM0|Xxꪝ7WTЌ}U p>Ba^}SLJecm$yy3ZpjwnBpp=ع- Kz\lq@1,@O-\q ts<4|vBq@{ccǪ+bw/P:)iDɩ4>yCh-=/[og"X~,7GfOp%a3f[B+v|:]Ryd( ª yma'8cҲ|'!h3B,GX糢.cRi)\Gc14ݟFi9Й 9PMS)B5@n{}lЙ^!.O?RMJ#4w0[gBn6pOC7}Y:L1˛H^Uj?ۉFG#LG-pgvEYHAa/rO##IW@Hp +h#o4p#)ednOpSN~2`{Qa6UMr͊.r>;K ژ4!Sok=uG܍W1b^$TQs x ]RQWԑO]h s`Wmb-ۤ5t3gWfa}͂}",E5M+U8}~ LI0X?8V 6C`t{]N!Z}2p %ti'0o5dCh}KՑ$ZyCT8s0{oSʪQuAH?s}dMJxJ}YN'du36bm>-)e@]çUVL޼a$-תK)3‹W$lK +aAVj5l@j̟w+AZ<J c4mE23tytnL:N:,3zUy%OxolCM1,ēauaх* -v;7~Hb[3 OjHLRKâշ<<*n?N;o@/4WJ*&E.ךJNݤh6 bȁt̏Ki CXX\҅+ZldK0Ek^\[a$b<+my-Bn. 80 Ҫ*-d,s2No:oeZ/ܘ}.jhB72;&a߈N^>e_zUĞ4Gn3AK-zU.{L6l,p9X_[{n7SJש_&t %qNg0ԏhh\W\Syk|6_B7r~hYf-DnOwmxI(("_W"*8CarN!b$9T󛨽Up= ls5F3uc3 *fn=ÙT?B&:!&&]?B 4=|oq1iDMжlyÞߡ2 ed)~GZo|u ! Uܔ\8& h= 8ʪI`(TtԽVUlÚ!q䣿o5Vc5 U%`_8E8d1kRC>DCLCڠ\A7h(qhT]X]gbvn2GOhUZWAM"r[/i0qbhS q? `ŧ%o3뺥V% Fm"nsg_ \$VUN=9R LQI&*|~/+gIs&"O5- !Aen+Ym"݊%stogXoHo )Ԧ]Y=u /ϐlcSv䷧Dҽ}p endstream endobj 204 0 obj << /Author(\376\377\000J\000B\000\040\000D\000u\000c\000k\000-\000M\000a\000y\000r)/Title(\376\377\000R\000c\000p\000p\000D\000i\000s\000t\000\040\000I\000n\000t\000r\000o\000d\000u\000c\000t\000i\000o\000n)/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.18)/Keywords() /CreationDate (D:20181021084548-05'00') /ModDate (D:20181021084548-05'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) kpathsea version 6.2.3) >> endobj 154 0 obj << /Type /ObjStm /N 77 /First 690 /Length 3437 /Filter /FlateDecode >> stream x[[S~crN B$\Ȧx00C6_%X3L|Sw56\KךH!N  $ |'17nPpa`dne0dNaC6 Q2ҡVD3ANKma6 sD; 2@qfP 8 }XP .kIb=wq`t848N< 0JS=r'^5F\iG~F. `g q4r<{nX3MHJ1Ch+ʙAZJ<sv(فDak.,.F֐en,4,HQy܃A;\ .-/ZnWm\26x½$ciő& sbKK-0n߶AfCtKrAڣ}CFt f=Fm kA5UF40*9،WlZкzըTC \n$ `ob!zƞ*a^#ǕƧ0CͥX`Ƙv!ƣίЧ ןvPa*m5 :t\IW7Z9pxEXm{Gd: I=bH EC(j4|ivH[ܤ&Oҏrc8Zqf9OAЭvZFXbNGZ ݖqdр؎d 䬱<5P1 0̘3Yʞ1@|s. sΚ$?s" 6O6'~nK6m{t̹sN)r$ʆ(fR8LL |Ӱ& C[,Y>f6*Hq.opvW 쁗*قV`#JdЫjp%gnZ.u 8\_~?n B'jOj27y{xxxWMncζv&  fDEɝweKAٻ%4 ki)OW`AQ^][| mAgf)v^c @8u;QqYJoi9_YUNV~Yvau-WzW\ݍfK @R[-tȮa'- Ű*Ẁ]_|h γJ ZZPr %{=9A]ɿe g@L9:,En4*h Y~+j|[uގf{Ml8#&)#Y ?+h8ﯮEA&wb:;L ӿ~spA`A; u7}irxrlF-{-_{js5 ]0QXmFv>Txߊ:&;<|Mƅik/>MtM2Q 5+.$2L^ "G1`Ҙ'yH[$&t-ȃlf!1)Eu]+ǽ}88Se%ۘq׸Hsdܟ{erDJ|G_|9Le񏛳hv_) /9rETT/qYb6+ !81x)cR˓Oߓ1{7x?1Cw}sp6 oojÐFKwnV{dE2"VnKJߝ}ԭ15l`_jXba?<>/҆)J_.q`)*G&KDž|VR}ዃr̩> TYaaqa.C}OE{wb$e?O.]^^𼘑/ܬ8A᠘ RgЈte5R9*$ƠIJ (nQ)T‘%\Td3Mpog$bt~$V3oP_ĉ,>AD}& Il%:wy+W!h`_[T-pV':xqdQLCS$=&mDů=͂f$Bջ$2N0&ak^*D #vz+ t0\th?]L?wgUN7~zaG<7T^T3<#DjҼ X߫.0&\ zV ` ic\c3l#b f&7B[5,hg+d.2pd Sz["7ہܡ7.(P6]d m_|A_XPK6[)wrҴ܈HwZ SѢejҢw 7Uj@xBY/gOlg1\Ml~@-d5,Ц8^38NexƟv)/\ʉo>_._2+ E)Y>nɔûjYbxE&$}Bu4-Z3a0LH+˶ݨ+԰LR4VS{25ըE5yPZFj5 zu5,Q j*X/X5bbP,Sg.aU66 A $oؖmE],1I4 tf0I.T46#y^yRP-DhmkQ \-,K|7,rkQ^ L.n8='K(o}(Un$k듽q5VOI<'I5T6JBx?eJ앱29΍߫{Sʛ<:" AԩCcG@y$ؑp=2T?Yܸe>_hv1NT NR%s>d= L/0 ,o%NvPxqq&w-D/XӖh?TX`UóQ ߫׬k"ɧ".|*bԄZ"<7CY¿,ԇC8MWmuY%``Mҿ*^O. aVkb,Jl*V endstream endobj 205 0 obj << /Type /XRef /Index [0 206] /Size 206 /W [1 3 1] /Root 203 0 R /Info 204 0 R /ID [<4F225C8CEBE2F265A438ECEC919CCE10> <4F225C8CEBE2F265A438ECEC919CCE10>] /Length 507 /Filter /FlateDecode >> stream x%RSQύ@G5Tň "N@p \B_+߁*|jgw93,¦agkYAd  vԁqi4KdSX#hd7fn`-\'%AqjERtW. Up#>pl;dc8X!8 q d\XC8 nVݟ%Y/ >,v>yCqGLv]:vP6B҉tTVb.@v5n}*`έ_/nE0Vl<Kn#=` Xv,n3ye(QoʣZS_ x 6;JsvY>`ڃ z0xGJU nJFAY{yY}O+k4+k3 +xdm 隢ݳWYѳk϶~:=.M˘PW74 4t& M{swjyg endstream endobj startxref 298101 %%EOF r-cran-rcppdist-0.1.1/inst/include/000077500000000000000000000000001412660337500171305ustar00rootroot00000000000000r-cran-rcppdist-0.1.1/inst/include/4beta.h000066400000000000000000000063431412660337500203060ustar00rootroot00000000000000// 4beta.h // // Copyright (C) 2018 JB Duck-Mayr // // This file is part of RcppDist. // // RcppDist is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // RcppDist is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with RcppDist. If not, see . #ifndef RCPPDIST_4BETA_H #define RCPPDIST_4BETA_H // NumericVector versions: inline Rcpp::NumericVector d4beta(const Rcpp::NumericVector& x, const double shape1, const double shape2, const double a, const double b, const bool log_p = false){ Rcpp::NumericVector res = Rcpp::dbeta((x-a) / (b-a), shape1, shape2, log_p); if ( log_p ) { res = res - log(b - a); for ( int i = 0; i < x.size(); ++i ) { if ( x[i] < a || x[i] > b ) { res[i] = R_NegInf; } } } else { res = res / (b - a); for ( int i = 0; i < x.size(); ++i ) { if ( x[i] < a || x[i] > b ) { res[i] = 0.0; } } } return res; } inline Rcpp::NumericVector p4beta(const Rcpp::NumericVector& q, const double shape1, const double shape2, const double a, const double b, const bool lower_tail = true, const bool log_p = false){ return Rcpp::pbeta((q - a) / (b - a), shape1, shape2, lower_tail, log_p); } inline Rcpp::NumericVector q4beta(const Rcpp::NumericVector& p, const double shape1, const double shape2, const double a, const double b, const bool lower_tail = true, const bool log_p = false){ return (b - a) * Rcpp::qbeta(p, shape1, shape2, lower_tail, log_p) + a; } inline Rcpp::NumericVector r4beta(const int n, const double shape1, const double shape2, const double a, const double b){ return (b - a) * Rcpp::rbeta(n, shape1, shape2) + a; } // Scalar versions: inline double d_4beta(const double x, const double shape1, const double shape2, const double a, const double b, const int log_p = 0){ if ( x < a || x > b ) { return log_p ? R_NegInf : 0.0; } double p = R::dbeta((x - a) / (b - a), shape1, shape2, log_p); return log_p ? (p - log(b - a)) : (p / (b - a)); } inline double p_4beta(const double q, const double shape1, const double shape2, const double a, const double b, const int lower_tail = 1, const int log_p = 0){ return R::pbeta((q - a) / (b - a), shape1, shape2, lower_tail, log_p); } inline double q_4beta(const double p, const double shape1, const double shape2, const double a, const double b, const int lower_tail = 1, const int log_p = 0){ return (b - a) * R::qbeta(p, shape1, shape2, lower_tail, log_p) + a; } inline double r_4beta(const double shape1, const double shape2, const double a, const double b){ return (b - a) * R::rbeta(shape1, shape2) + a; } #endif r-cran-rcppdist-0.1.1/inst/include/RcppDist.h000066400000000000000000000020741412660337500210340ustar00rootroot00000000000000// RcppDist.h // // Copyright (C) 2018 JB Duck-Mayr // // This file is part of RcppDist. // // RcppDist is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // RcppDist is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with RcppDist. If not, see . #ifndef RCPPDIST_RCPPDIST_H #define RCPPDIST_RCPPDIST_H #ifdef RCPPDIST_DONT_USE_ARMA #include #else #include #include #include #include #endif #include <4beta.h> #include #include #include #include #include #endif r-cran-rcppdist-0.1.1/inst/include/lst.h000066400000000000000000000050101412660337500200770ustar00rootroot00000000000000// lst.h // // Copyright (C) 2018 JB Duck-Mayr // // This file is part of RcppDist. // // RcppDist is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // RcppDist is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with RcppDist. If not, see . #ifndef RCPPDIST_LST_H #define RCPPDIST_LST_H // NumericVector versions: inline Rcpp::NumericVector dlst(const Rcpp::NumericVector& x, const double df, const double mu, const double sigma, const bool log_p = false){ Rcpp::NumericVector p = Rcpp::dt((x - mu)/sigma, df, log_p); if ( log_p ) { return p - log(sigma); } else { return (1.0 / sigma) * p; } } inline Rcpp::NumericVector plst(const Rcpp::NumericVector& q, const double df, const double mu, const double sigma, const bool lower_tail = true, const bool log_p = false){ return Rcpp::pt((q - mu)/sigma, df, lower_tail, log_p); } inline Rcpp::NumericVector qlst(const Rcpp::NumericVector& p, const double df, const double mu, const double sigma, const bool lower_tail = true, const bool log_p = false){ return Rcpp::qt(p, df, lower_tail, log_p) * sigma + mu; } inline Rcpp::NumericVector rlst(const int n, const double df, const double mu, const double sigma){ return Rcpp::rt(n, df) * sigma + mu; } // Scalar versions: inline double d_lst(const double x, const double df, const double mu, const double sigma, const int log_p = 0){ double p = R::dt((x - mu) / sigma, df, log_p); return log_p ? (p - log(sigma)) : ((1.0 / sigma) * p); } inline double p_lst(const double q, const double df, const double mu, const double sigma, const int lower_tail = 1, const int log_p = 0){ return R::pt((q - mu)/sigma, df, lower_tail, log_p); } inline double q_lst(const double p, const double df, const double mu, const double sigma, const int lower_tail = 1, const int log_p = 0) { return R::qt(p, df, lower_tail, log_p) * sigma + mu; } inline double r_lst(const double df, const double mu, const double sigma){ return R::rt(df) * sigma + mu; } #endif r-cran-rcppdist-0.1.1/inst/include/mvnorm.h000066400000000000000000000037611412660337500206260ustar00rootroot00000000000000// mvnorm.h // // Copyright (C) 2018 JB Duck-Mayr // // This file is part of RcppDist. // // RcppDist is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // RcppDist is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with RcppDist. If not, see . #ifndef RCPPDIST_MVNORM_H #define RCPPDIST_MVNORM_H inline arma::vec dmvnorm(const arma::mat& x, const arma::vec& mu, const arma::mat& S, const bool log_p = false) { arma::uword n = x.n_rows, m = x.n_cols; double det_S = arma::det(S); arma::mat S_inv = S.i(); arma::vec result(n); arma::rowvec X(m); if ( log_p ) { double P = -1.0 * (x.n_cols/2.0) * M_LN_2PI - 0.5 * log(det_S); for ( arma::uword i = 0; i < n; ++i ) { X = x.row(i) - mu.t(); result[i] = arma::as_scalar(P - 0.5 * X * S_inv * X.t()); } return result; } double P = 1.0 / sqrt(pow(M_2PI, m) * det_S); for ( arma::uword i = 0; i < n; ++i ) { X = x.row(i) - mu.t(); result[i] = arma::as_scalar(P * exp(-0.5 * X * S_inv * X.t())); } return result; } inline arma::mat rmvnorm(const arma::uword n, const arma::vec& mu, const arma::mat& S) { arma::uword m = S.n_cols, i, j; arma::mat result(n, m); arma::rowvec Mu = mu.t(); for ( i = 0; i < n; ++i ) { for ( j = 0; j < m; ++j ) { result(i, j) = R::rnorm(0.0, 1.0); } } result = result * arma::chol(S); for ( i = 0; i < n; ++i ) { result.row(i) = result.row(i) + Mu; } return result; } #endif r-cran-rcppdist-0.1.1/inst/include/mvt.h000066400000000000000000000042541412660337500201140ustar00rootroot00000000000000// mvt.h // // Copyright (C) 2018 JB Duck-Mayr // // This file is part of RcppDist. // // RcppDist is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // RcppDist is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with RcppDist. If not, see . #ifndef RCPPDIST_MVT_H #define RCPPDIST_MVT_H #include inline arma::vec dmvt(const arma::mat& x, const arma::vec& mu, const arma::mat& S, const double df, const bool log_p = false) { arma::uword n = x.n_rows, m = x.n_cols; double det_S = arma::det(S); arma::mat S_inv = S.i(); arma::vec result(n); arma::rowvec X(m); if ( log_p ) { double P = R::lgammafn((df + m) * 0.5) - R::lgammafn(df * 0.5); P -= ( (m * 0.5) * (log(df) + log(M_PI)) + 0.5 * log(det_S) ); for ( arma::uword i = 0; i < n; ++i ) { X = x.row(i) - mu.t(); result[i] = arma::as_scalar(P - ((df + m) * 0.5) * log(1.0 + (1.0 / df) * X * S_inv * X.t())); } return result; } double P = R::gammafn((df + m) * 0.5); P /= (R::gammafn(df*0.5) * pow(df, m*0.5) * pow(M_PI, m*0.5) * sqrt(det_S)); for ( arma::uword i = 0; i < n; ++i ) { X = x.row(i) - mu.t(); result[i] = arma::as_scalar(P/pow(1.0+(1.0/df) * X * S_inv * X.t(), (df+m) * 0.5)); } return result; } inline arma::mat rmvt(const arma::uword n, const arma::vec& mu, const arma::mat& S, const double df) { arma::uword m = S.n_cols; arma::vec U = Rcpp::rchisq(n, df); U = sqrt(df / U); arma::mat Y = rmvnorm(n, arma::vec(m, arma::fill::zeros), S).t(); arma::mat result(m, n); for ( arma::uword i = 0; i < n; ++i ) { result.col(i) = mu + Y.col(i) * U[i]; } return result.t(); } #endif r-cran-rcppdist-0.1.1/inst/include/triangular.h000066400000000000000000000115021412660337500214500ustar00rootroot00000000000000// triangular.h // // Copyright (C) 2018 JB Duck-Mayr // // This file is part of RcppDist. // // RcppDist is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // RcppDist is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with RcppDist. If not, see . #ifndef RCPPDIST_TRIANGULAR_H #define RCPPDIST_TRIANGULAR_H // Scalar Versions inline double d_tri(const double x, const double a, const double b, const double c, const int log_p = 0) { if ( x < a ) { if ( log_p ) { return R_NegInf; } return 0.0; } else if ( x < c ) { if ( log_p ) { return M_LN2 + log(x - a) - log(b - a) - log(c - a); } return (2.0 * (x - a)) / ((b - a) * (c - a)); } else if ( x == c ) { if ( log_p ) { return M_LN2 - log(b - a); } return 2.0 / (b - a); } else if ( x <= b ) { if ( log_p ) { return M_LN2 + log(b - x) - log(b - a) - log(b - c); } return (2.0 * (b - x)) / ((b - a) * (b - c)); } else { if ( log_p ) { return R_NegInf; } return 0.0; } } inline double p_tri(const double x, const double a, const double b, const double c, const int lower_tail = 1, const int log_p = 0) { if ( x < a ) { if ( log_p ) { if ( lower_tail ) { return R_NegInf; } return 0.0; } if ( lower_tail ) { return 0.0; } return 1.0; } else if ( x <= c ) { if ( log_p ) { if ( lower_tail ) { return (2.0 * log(x - a)) - log(b - a) - log(c - a); } return log(1.0 - (pow(x-a, 2.0) / ((b-a) * (c-a)))); } if ( lower_tail ) { return pow(x-a, 2.0) / ((b-a) * (c-a)); } return 1.0 - (pow(x-a, 2.0) / ((b-a) * (c-a))); } else if ( x <= b ) { if ( log_p ) { if ( lower_tail ) { return log(1.0 - (pow(b-x, 2.0) / ((b-a) * (b-c)))); } return (2.0 * log(b - x)) - log(b - a) - log(b - c); } if ( lower_tail ) { return 1.0 - (pow(b-x, 2.0) / ((b-a) * (b-c))); } return pow(b-x, 2.0) / ((b-a) * (b-c)); } else { if ( log_p ) { if ( lower_tail ) { return 0.0; } return R_NegInf; } if ( lower_tail ) { return 1.0; } return 0.0; } } inline double q_tri(const double p, const double a, const double b, const double c, const int lower_tail = 1, const int log_p = 0) { double c_a = c - a; double b_a = b - a; double prob = p; if ( log_p ) { prob = exp(prob); } if ( !lower_tail ) { prob = 1.0 - prob; } if ( prob < (c_a / b_a ) ) { return a + sqrt(b_a * c_a * prob); } return b - sqrt(b_a * (b - c) * (1 - prob)); } inline double r_tri(const double a, const double b, const double c) { return q_tri(R::runif(0.0, 1.0), a, b, c); } // NumericVector versions: inline Rcpp::NumericVector dtri(const Rcpp::NumericVector& x, const double a, const double b, const double c, const bool log_p = false) { int n = x.size(); Rcpp::NumericVector result(n); for ( int i = 0; i < n; ++i ) { result[i] = d_tri(x[i], a, b, c, log_p); } return result; } inline Rcpp::NumericVector ptri(const Rcpp::NumericVector& x, const double a, const double b, const double c, const bool lower_tail = true, const bool log_p = false) { int n = x.size(); Rcpp::NumericVector result(n); for ( int i = 0; i < n; ++i ) { result[i] = p_tri(x[i], a, b, c, lower_tail, log_p); } return result; } inline Rcpp::NumericVector qtri(const Rcpp::NumericVector& p, const double a, const double b, const double c, const bool lower_tail = true, const bool log_p = false) { int n = p.size(); Rcpp::NumericVector result(n); for ( int i = 0; i < n; ++i ) { result[i] = q_tri(p[i], a, b, c, lower_tail, log_p); } return result; } inline Rcpp::NumericVector rtri(const int n, const double a, const double b, const double c) { Rcpp::NumericVector result(n); for ( int i = 0; i < n; ++i ) { result[i] = r_tri(a, b, c); } return result; } #endif r-cran-rcppdist-0.1.1/inst/include/trunclst.h000066400000000000000000000171241412660337500211640ustar00rootroot00000000000000// trunclst.h // // Copyright (C) 2018 JB Duck-Mayr // // This file is part of RcppDist. // // RcppDist is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // RcppDist is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with RcppDist. If not, see . #ifndef RCPPDIST_TRUNCLST_H #define RCPPDIST_TRUNCLST_H #include // Vector versions: inline Rcpp::NumericVector dtrunclst(const Rcpp::NumericVector& x, const double df, const double mu, const double sigma, const double a, const double b, const bool log_p = false) { int n = x.size(); Rcpp::NumericVector result(n); double scale = p_lst(b, df, mu, sigma, 1, 0) - p_lst(a, df, mu, sigma, 1, 0); if ( log_p ) { scale = log(scale); for ( int i = 0; i < n; ++i ) { if ( x[i] < a || x[i] > b ) { result[i] = R_NegInf; } else { result[i] = d_lst(x[i], df, mu, sigma, 1) - scale; } } } else { scale = 1.0 / scale; for ( int i = 0; i < n; ++i ) { if ( x[i] < a || x[i] > b ) { result[i] = 0.0; } else { result[i] = d_lst(x[i], df, mu, sigma, 0) * scale; } } } return result; } inline Rcpp::NumericVector ptrunclst(const Rcpp::NumericVector& x, const double df, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) { int n = x.size(); Rcpp::NumericVector result(n); double F_a = p_lst(a, df, mu, sigma, 1, 0); double F_b = p_lst(b, df, mu, sigma, 1, 0); if ( lower_tail ) { if ( log_p ) { // lower_tail = true AND log_p = true double scale = log(F_b - F_a); for ( int i = 0; i < n; ++i ) { if ( x[i] > b ) { result[i] = 0.0; } else if ( x[i] < a ) { result[i] = R_NegInf; } else{ result[i] = log(p_lst(x[i], df, mu, sigma, 1, 0) - F_a) - scale; } } } else { // lower_tail = true AND log_p = false double scale = 1.0 / (F_b - F_a); for ( int i = 0; i < n; ++i ) { if ( x[i] > b ) { result[i] = 1.0; } else if ( x[i] < a ) { result[i] = 0.0; } else { result[i] = (p_lst(x[i], df, mu, sigma, 1, 0) - F_a) * scale; } } } } else { double scale = 1.0 / (F_b - F_a); if ( log_p ) { // lower_tail = false AND log_p = true for ( int i = 0; i < n; ++i ) { if ( x[i] > b ) { result[i] = R_NegInf; } else if ( x[i] < a ) { result[i] = 0.0; } else{ result[i] = log(1.0 - ((p_lst(x[i], df, mu, sigma, 1, 0) - F_a) * scale)); } } } else { // lower_tail = false AND log_p = false for ( int i = 0; i < n; ++i ) { if ( x[i] > b ) { result[i] = 0.0; } else if ( x[i] < a ) { result[i] = 1.0; } else { result[i] = 1.0 - ((p_lst(x[i], df, mu, sigma, 1, 0) - F_a) * scale); } } } } return result; } inline Rcpp::NumericVector qtrunclst(const Rcpp::NumericVector& p, const double df, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) { int n = p.size(); Rcpp::NumericVector probs = Rcpp::clone(p); if ( log_p ) { probs = Rcpp::exp(probs); } if ( !lower_tail ) { probs = 1.0 - probs; } double F_a = p_lst(a, df, mu, sigma, 1, 0); double F_b = p_lst(b, df, mu, sigma, 1, 0); Rcpp::NumericVector result(n); for ( int i = 0; i < n; ++i ) { double q = q_lst(F_a + probs[i] * (F_b - F_a), df, mu, sigma, 1, 0); result[i] = std::min(std::max(a, q), b); } return result; } inline Rcpp::NumericVector rtrunclst(const int n, const double df, const double mu, const double sigma, const double a, const double b) { return qtrunclst(Rcpp::runif(n), df, mu, sigma, a, b); } // Scalar versions: inline double d_trunclst(const double x, const double df, const double mu, const double sigma, const double a, const double b, const int log_p = 0) { if ( x < a || x > b ) { return log_p ? R_NegInf : 0.0; } double scale = p_lst(b, df, mu, sigma, 1, 0) - p_lst(a, df, mu, sigma, 1, 0); if ( log_p ) { return d_lst(x, df, mu, sigma, 1) - log(scale); } return d_lst(x, df, mu, sigma, 0) / scale; } inline double p_trunclst(const double x, const double df, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) { double F_a = p_lst(a, df, mu, sigma, 1, 0); double F_b = p_lst(b, df, mu, sigma, 1, 0); if ( lower_tail ) { if ( log_p ) { if ( x < a ) { return R_NegInf; } else if ( x > b ) { return 0.0; } else { return log(p_lst(x, df, mu, sigma, 1, 0) - F_a) - log(F_b - F_a); } } else { if ( x < a ) { return 0.0; } else if ( x > b ) { return 1.0; } else { return (p_lst(x, df, mu, sigma, 1, 0) - F_a) / (F_b - F_a); } } } else { if ( log_p ) { if ( x < a ) { return 0.0; } else if ( x > b ) { return R_NegInf; } else { return log(1.0 - ((p_lst(x, df, mu, sigma, 1, 0) - F_a) / (F_b-F_a))); } } else { if ( x < a ) { return 1.0; } else if ( x > b ) { return 0.0; } else { return 1.0 - (p_lst(x, df, mu, sigma, 1, 0) - F_a) / (F_b - F_a); } } } } inline double q_trunclst(const double p, const double df, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) { double prob = p; if ( log_p ) { prob = exp(prob); } if ( !lower_tail ) { prob = 1.0 - prob; } double F_a = p_lst(a, df, mu, sigma, 1, 0); double F_b = p_lst(b, df, mu, sigma, 1, 0); double q = q_lst(F_a + prob * (F_b - F_a), df, mu, sigma, 1, 0); return std::min(std::max(a, q), b); } inline double r_trunclst(const double df, const double mu, const double sigma, const double a, const double b) { return q_trunclst(R::runif(0.0, 1.0), df, mu, sigma, a, b); } #endif r-cran-rcppdist-0.1.1/inst/include/truncnorm.h000066400000000000000000000156171412660337500213420ustar00rootroot00000000000000// truncnorm.h // // Copyright (C) 2018 JB Duck-Mayr // // This file is part of RcppDist. // // RcppDist is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // RcppDist is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with RcppDist. If not, see . #ifndef RCPPDIST_TRUNCNORM_H #define RCPPDIST_TRUNCNORM_H // Vector versions: inline Rcpp::NumericVector dtruncnorm(const Rcpp::NumericVector& x, const double mu, const double sigma, const double a, const double b, const bool log_p = false) { int n = x.size(); Rcpp::NumericVector result(n); double scale = R::pnorm(b, mu, sigma, 1, 0) - R::pnorm(a, mu, sigma, 1, 0); if ( log_p ) { scale = log(scale); for ( int i = 0; i < n; ++i ) { if ( x[i] < a || x[i] > b ) { result[i] = R_NegInf; } else { result[i] = R::dnorm(x[i], mu, sigma, 1) - scale; } } } else { scale = 1.0 / scale; for ( int i = 0; i < n; ++i ) { if ( x[i] < a || x[i] > b ) { result[i] = 0.0; } else { result[i] = R::dnorm(x[i], mu, sigma, 0) * scale; } } } return result; } inline Rcpp::NumericVector ptruncnorm(const Rcpp::NumericVector& x, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) { int n = x.size(); Rcpp::NumericVector result(n); double F_a = R::pnorm(a, mu, sigma, 1, 0); double F_b = R::pnorm(b, mu, sigma, 1, 0); if ( lower_tail ) { if ( log_p ) { double scale = log(F_b - F_a); for ( int i = 0; i < n; ++i ) { if ( x[i] > b ) { result[i] = 0.0; } else if ( x[i] < a ) { result[i] = R_NegInf; } else{ result[i] = log(R::pnorm(x[i], mu, sigma, 1, 0) - F_a) - scale; } } } else { double scale = 1.0 / (F_b - F_a); for ( int i = 0; i < n; ++i ) { double q = std::max(std::min(x[i], b), a); result[i] = (R::pnorm(q, mu, sigma, 1, 0) - F_a) * scale; } } } else { double scale = 1.0 / (F_b - F_a); if ( log_p ) { for ( int i = 0; i < n; ++i ) { if ( x[i] > b ) { result[i] = R_NegInf; } else if ( x[i] < a ) { result[i] = 0.0; } else{ result[i] = log(1.0 - ((R::pnorm(x[i], mu, sigma, 1, 0) - F_a) * scale)); } } } else { for ( int i = 0; i < n; ++i ) { double q = std::max(std::min(x[i], b), a); result[i] = 1 - ((R::pnorm(q, mu, sigma, 1, 0) - F_a) * scale); } } } return result; } inline Rcpp::NumericVector qtruncnorm(const Rcpp::NumericVector& p, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) { int n = p.size(); Rcpp::NumericVector probs = Rcpp::clone(p); if ( log_p ) { probs = Rcpp::exp(probs); } if ( !lower_tail ) { probs = 1 - probs; } double F_a = R::pnorm(a, mu, sigma, 1, 0); double F_b = R::pnorm(b, mu, sigma, 1, 0); Rcpp::NumericVector result(n); for ( int i = 0; i < n; ++i ) { double q = R::qnorm(F_a + probs[i] * (F_b - F_a), mu, sigma, 1, 0); result[i] = std::min(std::max(a, q), b); } return result; } inline Rcpp::NumericVector rtruncnorm(const int n, const double mu, const double sigma, const double a, const double b) { return qtruncnorm(Rcpp::runif(n), mu, sigma, a, b); } // Scalar versions: inline double d_truncnorm(const double x, const double mu, const double sigma, const double a, const double b, const int log_p = 0) { if ( x < a || x > b ) { return log_p ? R_NegInf : 0.0; } double scale = R::pnorm(b, mu, sigma, 1, 0) - R::pnorm(a, mu, sigma, 1, 0); if ( log_p ) { return R::dnorm(x, mu, sigma, 1) - log(scale); } return R::dnorm(x, mu, sigma, 0) / scale; } inline double p_truncnorm(const double x, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) { double F_a = R::pnorm(a, mu, sigma, 1, 0); double F_b = R::pnorm(b, mu, sigma, 1, 0); if ( lower_tail ) { if ( log_p ) { if ( x < a ) { return R_NegInf; } else if ( x > b ) { return 0.0; } else { return log(R::pnorm(x, mu, sigma, 1, 0) - F_a) - log(F_b - F_a); } } else { if ( x < a ) { return 0.0; } else if ( x > b ) { return 1.0; } else { return (R::pnorm(x, mu, sigma, 1, 0) - F_a) / (F_b - F_a); } } } else { if ( log_p ) { if ( x < a ) { return 0.0; } else if ( x > b ) { return R_NegInf; } else { return log(1.0 - ((R::pnorm(x, mu, sigma, 1, 0) - F_a) / (F_b-F_a))); } } else { if ( x < a ) { return 1.0; } else if ( x > b ) { return 0.0; } else { return 1.0 - (R::pnorm(x, mu, sigma, 1, 0) - F_a) / (F_b - F_a); } } } } inline double q_truncnorm(const double p, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) { double prob = p; if ( log_p ) { prob = exp(prob); } if ( !lower_tail ) { prob = 1 - prob; } double F_a = R::pnorm(a, mu, sigma, 1, 0); double F_b = R::pnorm(b, mu, sigma, 1, 0); double q = R::qnorm(F_a + prob * (F_b - F_a), mu, sigma, 1, 0); return std::min(std::max(a, q), b); } inline double r_truncnorm(const double mu, const double sigma, const double a, const double b) { return q_truncnorm(R::runif(0.0, 1.0), mu, sigma, a, b); } #endif r-cran-rcppdist-0.1.1/inst/include/trunct.h000066400000000000000000000156341412660337500206310ustar00rootroot00000000000000// trunct.h // // Copyright (C) 2018 JB Duck-Mayr // // This file is part of RcppDist. // // RcppDist is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // RcppDist is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with RcppDist. If not, see . #ifndef RCPPDIST_TRUNCT_H #define RCPPDIST_TRUNCT_H // Vector versions: inline Rcpp::NumericVector dtrunct(const Rcpp::NumericVector& x, const double df, const double a, const double b, const bool log_p = false) { int n = x.size(); Rcpp::NumericVector result(n); double scale = R::pt(b, df, 1, 0) - R::pt(a, df, 1, 0); if ( log_p ) { scale = log(scale); for ( int i = 0; i < n; ++i ) { if ( x[i] < a || x[i] > b ) { result[i] = R_NegInf; } else { result[i] = R::dt(x[i], df, 1) - scale; } } } else { scale = 1.0 / scale; for ( int i = 0; i < n; ++i ) { if ( x[i] < a || x[i] > b ) { result[i] = 0.0; } else { result[i] = R::dt(x[i], df, 0) * scale; } } } return result; } inline Rcpp::NumericVector ptrunct(const Rcpp::NumericVector& x, const double df, const double a, const double b, const bool lower_tail = true, const bool log_p = false) { int n = x.size(); Rcpp::NumericVector result(n); double F_a = R::pt(a, df, 1, 0); double F_b = R::pt(b, df, 1, 0); if ( lower_tail ) { if ( log_p ) { // lower_tail = true AND log_p = true double scale = log(F_b - F_a); for ( int i = 0; i < n; ++i ) { if ( x[i] > b ) { result[i] = 0.0; } else if ( x[i] < a ) { result[i] = R_NegInf; } else{ result[i] = log(R::pt(x[i], df, 1, 0) - F_a) - scale; } } } else { // lower_tail = true AND log_p = false double scale = 1.0 / (F_b - F_a); for ( int i = 0; i < n; ++i ) { if ( x[i] > b ) { result[i] = 1.0; } else if ( x[i] < a ) { result[i] = 0.0; } else { result[i] = (R::pt(x[i], df, 1, 0) - F_a) * scale; } } } } else { double scale = 1.0 / (F_b - F_a); if ( log_p ) { // lower_tail = false AND log_p = true for ( int i = 0; i < n; ++i ) { if ( x[i] > b ) { result[i] = R_NegInf; } else if ( x[i] < a ) { result[i] = 0.0; } else{ result[i] = log(1.0 - ((R::pt(x[i], df, 1, 0) - F_a) * scale)); } } } else { // lower_tail = false AND log_p = false for ( int i = 0; i < n; ++i ) { if ( x[i] > b ) { result[i] = 0.0; } else if ( x[i] < a ) { result[i] = 1.0; } else { result[i] = 1.0 - ((R::pt(x[i], df, 1, 0) - F_a) * scale); } } } } return result; } inline Rcpp::NumericVector qtrunct(const Rcpp::NumericVector& p, const double df, const double a, const double b, const bool lower_tail = true, const bool log_p = false) { int n = p.size(); Rcpp::NumericVector probs = Rcpp::clone(p); if ( log_p ) { probs = Rcpp::exp(probs); } if ( !lower_tail ) { probs = 1.0 - probs; } double F_a = R::pt(a, df, 1, 0); double F_b = R::pt(b, df, 1, 0); Rcpp::NumericVector result(n); for ( int i = 0; i < n; ++i ) { double q = R::qt(F_a + probs[i] * (F_b - F_a), df, 1, 0); result[i] = std::min(std::max(a, q), b); } return result; } inline Rcpp::NumericVector rtrunct(const int n, const double df, const double a, const double b) { return qtrunct(Rcpp::runif(n), df, a, b); } // Scalar versions: inline double d_trunct(const double x, const double df, const double a, const double b, const int log_p = 0) { if ( x < a || x > b ) { return log_p ? R_NegInf : 0.0; } double scale = R::pt(b, df, 1, 0) - R::pt(a, df, 1, 0); if ( log_p ) { return R::dt(x, df, 1) - log(scale); } return R::dt(x, df, 0) / scale; } inline double p_trunct(const double x, const double df, const double a, const double b, const int lower_tail = 1, const int log_p = 0) { double F_a = R::pt(a, df, 1, 0); double F_b = R::pt(b, df, 1, 0); if ( lower_tail ) { if ( log_p ) { if ( x < a ) { return R_NegInf; } else if ( x > b ) { return 0.0; } else { return log(R::pt(x, df, 1, 0) - F_a) - log(F_b - F_a); } } else { if ( x < a ) { return 0.0; } else if ( x > b ) { return 1.0; } else { return (R::pt(x, df, 1, 0) - F_a) / (F_b - F_a); } } } else { if ( log_p ) { if ( x < a ) { return 0.0; } else if ( x > b ) { return R_NegInf; } else { return log(1.0 - ((R::pt(x, df, 1, 0) - F_a) / (F_b-F_a))); } } else { if ( x < a ) { return 1.0; } else if ( x > b ) { return 0.0; } else { return 1.0 - (R::pt(x, df, 1, 0) - F_a) / (F_b - F_a); } } } } inline double q_trunct(const double p, const double df, const double a, const double b, const int lower_tail = 1, const int log_p = 0) { double prob = p; if ( log_p ) { prob = exp(prob); } if ( !lower_tail ) { prob = 1.0 - prob; } double F_a = R::pt(a, df, 1, 0); double F_b = R::pt(b, df, 1, 0); double q = R::qt(F_a + prob * (F_b - F_a), df, 1, 0); return std::min(std::max(a, q), b); } inline double r_trunct(const double df, const double a, const double b) { return q_trunct(R::runif(0.0, 1.0), df, a, b); } #endif r-cran-rcppdist-0.1.1/inst/include/wishart.h000066400000000000000000000055751412660337500207760ustar00rootroot00000000000000// wishart.h // // Copyright (C) 2018 JB Duck-Mayr // // This file is part of RcppDist. // // RcppDist is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // RcppDist is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with RcppDist. If not, see . #ifndef RCPPDIST_WISHART_H #define RCPPDIST_WISHART_H inline double mvgamma(const int p, const double x) { double result = pow(M_PI, (p * (p - 1) * 0.25)); for ( int j = 1; j < (p + 1); ++j ) { result *= R::gammafn(x - ((j - 1.0) * 0.5)); } return result; } inline double lmvgamma(const int p, const double x) { double result = (p * (p - 1) * 0.25) * log(M_PI); for ( int j = 1; j < (p + 1); ++j ) { result += R::lgammafn(x - ((j - 1.0) * 0.5)); } return result; } inline double dwish(const arma::mat& X, const int df, const arma::mat& S, const bool log_p = false) { double x = df * 0.5; int p = X.n_cols; if ( log_p ) { double P = ((df - p - 1) * 0.5) * log(arma::det(X)); P -= (arma::trace(S.i() * X) * 0.5); P -= ( (p * x * M_LN2) + (x * log(arma::det(S))) ); return P - lmvgamma(p, x); } double P = pow(arma::det(X), ((df - p - 1.0) * 0.5)); P *= exp(-0.5 * arma::trace(S.i() * X)); return P / ( pow(2.0, (x * p)) * pow(arma::det(S), x) * mvgamma(p, x) ); } inline arma::mat rwish(const int df, const arma::mat& S) { arma::uword m = S.n_cols; arma::uword i, j; arma::mat A(m, m, arma::fill::zeros); for ( i = 1; i < m; ++i ) { for ( j = 0; j < i; ++j ) { A(i, j) = R::rnorm(0.0, 1.0); } } for ( i = 0; i < m; ++i ) { A(i, i) = sqrt(R::rchisq(df - i)); } arma::mat B = A.t() * arma::chol(S); return B.t() * B; } inline double diwish(const arma::mat& X, const int df, const arma::mat& S, const bool log_p = false) { double x = df * 0.5; int p = X.n_cols; if ( log_p ) { double P = (x * log(arma::det(S))) - (0.5 * arma::trace(S * X.i())); P -= ( (0.5 * (df + p + 1)) * log(arma::det(X)) ); P -= ( (0.5 * (df * p)) * M_LN2 ); return P - lmvgamma(p, x); } double P = pow(arma::det(S), x); P *= exp(-0.5 * arma::trace(S * X.i())); P *= pow(arma::det(X), (-1.0 * (0.5 * (df + p + 1)))); return P / ( pow(2.0, (0.5 * (df * p))) * mvgamma(p, x) ); } inline arma::mat riwish(const int df, const arma::mat& S) { return rwish(df, S.i()).i(); } #endif r-cran-rcppdist-0.1.1/man/000077500000000000000000000000001412660337500153035ustar00rootroot00000000000000r-cran-rcppdist-0.1.1/man/RcppDist.Rd000066400000000000000000000040631412660337500173250ustar00rootroot00000000000000% Generated by roxygen2: do not edit by hand % Please edit documentation in R/RcppDist-package.R \docType{package} \name{RcppDist} \alias{RcppDist} \alias{RcppDist-package} \title{RcppDist} \description{ 'Rcpp' Integration of Additional Probability Distributions } \details{ The 'Rcpp' package provides a C++ library to make it easier to use C++ with R. R and 'Rcpp' provide functions for a variety of statistical distributions. Several R packages make functions available to R for additional statistical distributions. However, to access these functions from C++ code, a costly call to the R functions must be made. 'RcppDist' provides a header-only C++ library with functions for additional statistical distributions that can be called from C++ when writing code using 'Rcpp' or 'RcppArmadillo'. Functions are available that return a 'NumericVector' as well as doubles, and for multivariate or matrix distributions, 'Armadillo' vectors and matrices. RcppDist provides functions for the following distributions: \itemize{ \item The four parameter beta distribution \item The location-scale t distribution \item The truncated normal distribution \item The truncated t distribution \item A truncated location-scale t distribution \item The triangle distribution \item The multivariate normal distribution* \item The multivariate t distribution* \item The Wishart distribution* \item And the inverse Wishart distribution*. } Distributions marked with an asterisk rely also on RcppArmadillo. For more information on using 'RcppDist' functions in your C++ code, please consult the vignette via \code{vignette("RcppDist")}; the vignette explains how to link to the package and include the headers, which header files provide which functions, and also provides all function declarations (so that you can see the function and argument names and return/argument types; the arguments are also described in reasonable detail). You can also see an example of using the multivariate normal generator provided by 'RcppDist' in the function \code{\link{bayeslm}}. } \author{ JB Duck-Mayr } r-cran-rcppdist-0.1.1/man/bayeslm.Rd000066400000000000000000000045311412660337500172310ustar00rootroot00000000000000% Generated by roxygen2: do not edit by hand % Please edit documentation in R/RcppExports.R \name{bayeslm} \alias{bayeslm} \title{bayeslm} \usage{ bayeslm(y, x, iters = 1000L) } \arguments{ \item{y}{A numeric vector -- the response} \item{x}{A numeric matrix -- the explanatory variables; note this assumes you have included a column of ones if you intend there to be an intercept.} \item{iters}{An integer vector of length one, the number of posterior draws desired; the default is 1000.} } \value{ A list of length two; the first element is a numeric matrix of the beta draws and the second element is a numeric vector of the sigma draws } \description{ Demonstrates the use of RcppDist in C++ with Bayesian linear regression } \details{ To see an example of using RcppDist C++ functions in C++ code, we can code up a Bayesian linear regression with completely uninformative priors (such that estimates should be equivalent to classical estimates). The code to do so is as follows: \preformatted{ #include // or, alternatively, // #include // #include // [[Rcpp::depends(RcppArmadillo, RcppDist)]] // [[Rcpp::export]] Rcpp::List bayeslm(const arma::vec& y, const arma::mat x, const int iters = 1000) { int n = x.n_rows; int p = x.n_cols; double a = (n - p) / 2.0; arma::mat xtx = x.t() * x; arma::mat xtxinv = xtx.i(); arma::vec mu = xtxinv * x.t() * y; arma::mat px = x * xtxinv * x.t(); double ssq = arma::as_scalar(y.t() * (arma::eye(n, n) - px) * y); ssq *= (1.0 / (n - p)); double b = 1.0 / (a * ssq); arma::mat beta_draws(iters, p); Rcpp::NumericVector sigma_draws(iters); for ( int iter = 0; iter < iters; ++iter ) { double sigmasq = 1.0 / R::rgamma(a, b); sigma_draws[iter] = sigmasq; // Here we can use our multivariate normal generator beta_draws.row(iter) = rmvnorm(1, mu, xtxinv * sigmasq); } return Rcpp::List::create(Rcpp::_["beta_draws"] = beta_draws, Rcpp::_["sigma_draws"] = sigma_draws); } } } \examples{ set.seed(123) n <- 30 x <- cbind(1, matrix(rnorm(n*3), ncol = 3)) beta <- matrix(c(10, 2, -1, 3), nrow = 4) y <- x \%*\% beta + rnorm(n) freqmod <- lm(y ~ x[ , -1]) bayesmod <- bayeslm(y, x) round(unname(coef(freqmod)), 2) round(apply(bayesmod$beta_draws, 2, mean), 2) c(beta) } r-cran-rcppdist-0.1.1/src/000077500000000000000000000000001412660337500153175ustar00rootroot00000000000000r-cran-rcppdist-0.1.1/src/Makevars.in000066400000000000000000000002141412660337500174150ustar00rootroot00000000000000CXX_STD = CXX11 PKG_CXXFLAGS = @OPENMP_FLAG@ PKG_LIBS = @OPENMP_FLAG@ $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) PKG_CPPFLAGS = -I../inst/include r-cran-rcppdist-0.1.1/src/Makevars.win000066400000000000000000000002421412660337500176050ustar00rootroot00000000000000CXX_STD = CXX11 PKG_CXXFLAGS = $(SHLIB_OPENMP_CXXFLAGS) PKG_LIBS = $(SHLIB_OPENMP_CXXFLAGS) $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) PKG_CPPFLAGS = -I../inst/include r-cran-rcppdist-0.1.1/src/RcppExports.cpp000066400000000000000000000524651412660337500203300ustar00rootroot00000000000000// Generated by using Rcpp::compileAttributes() -> do not edit by hand // Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 #include "../inst/include/RcppDist.h" #include #include using namespace Rcpp; // bayeslm Rcpp::List bayeslm(const arma::vec& y, const arma::mat x, const int iters); RcppExport SEXP _RcppDist_bayeslm(SEXP ySEXP, SEXP xSEXP, SEXP itersSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< const arma::vec& >::type y(ySEXP); Rcpp::traits::input_parameter< const arma::mat >::type x(xSEXP); Rcpp::traits::input_parameter< const int >::type iters(itersSEXP); rcpp_result_gen = Rcpp::wrap(bayeslm(y, x, iters)); return rcpp_result_gen; END_RCPP } // test_d4beta List test_d4beta(NumericVector x, double shape1, double shape2, double a, double b); RcppExport SEXP _RcppDist_test_d4beta(SEXP xSEXP, SEXP shape1SEXP, SEXP shape2SEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type shape1(shape1SEXP); Rcpp::traits::input_parameter< double >::type shape2(shape2SEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_d4beta(x, shape1, shape2, a, b)); return rcpp_result_gen; END_RCPP } // test_p4beta List test_p4beta(NumericVector x, double shape1, double shape2, double a, double b); RcppExport SEXP _RcppDist_test_p4beta(SEXP xSEXP, SEXP shape1SEXP, SEXP shape2SEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type shape1(shape1SEXP); Rcpp::traits::input_parameter< double >::type shape2(shape2SEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_p4beta(x, shape1, shape2, a, b)); return rcpp_result_gen; END_RCPP } // test_q4beta_nolog List test_q4beta_nolog(NumericVector x, double shape1, double shape2, double a, double b); RcppExport SEXP _RcppDist_test_q4beta_nolog(SEXP xSEXP, SEXP shape1SEXP, SEXP shape2SEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type shape1(shape1SEXP); Rcpp::traits::input_parameter< double >::type shape2(shape2SEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_q4beta_nolog(x, shape1, shape2, a, b)); return rcpp_result_gen; END_RCPP } // test_q4beta_log List test_q4beta_log(NumericVector x, double shape1, double shape2, double a, double b); RcppExport SEXP _RcppDist_test_q4beta_log(SEXP xSEXP, SEXP shape1SEXP, SEXP shape2SEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type shape1(shape1SEXP); Rcpp::traits::input_parameter< double >::type shape2(shape2SEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_q4beta_log(x, shape1, shape2, a, b)); return rcpp_result_gen; END_RCPP } // test_dlst List test_dlst(NumericVector x, double df, double mu, double sigma); RcppExport SEXP _RcppDist_test_dlst(SEXP xSEXP, SEXP dfSEXP, SEXP muSEXP, SEXP sigmaSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); rcpp_result_gen = Rcpp::wrap(test_dlst(x, df, mu, sigma)); return rcpp_result_gen; END_RCPP } // test_plst List test_plst(NumericVector x, double df, double mu, double sigma); RcppExport SEXP _RcppDist_test_plst(SEXP xSEXP, SEXP dfSEXP, SEXP muSEXP, SEXP sigmaSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); rcpp_result_gen = Rcpp::wrap(test_plst(x, df, mu, sigma)); return rcpp_result_gen; END_RCPP } // test_qlst_nolog List test_qlst_nolog(NumericVector x, double df, double mu, double sigma); RcppExport SEXP _RcppDist_test_qlst_nolog(SEXP xSEXP, SEXP dfSEXP, SEXP muSEXP, SEXP sigmaSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); rcpp_result_gen = Rcpp::wrap(test_qlst_nolog(x, df, mu, sigma)); return rcpp_result_gen; END_RCPP } // test_qlst_log List test_qlst_log(NumericVector x, double df, double mu, double sigma); RcppExport SEXP _RcppDist_test_qlst_log(SEXP xSEXP, SEXP dfSEXP, SEXP muSEXP, SEXP sigmaSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); rcpp_result_gen = Rcpp::wrap(test_qlst_log(x, df, mu, sigma)); return rcpp_result_gen; END_RCPP } // test_dtruncnorm List test_dtruncnorm(NumericVector x, double mu, double sigma, double a, double b); RcppExport SEXP _RcppDist_test_dtruncnorm(SEXP xSEXP, SEXP muSEXP, SEXP sigmaSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_dtruncnorm(x, mu, sigma, a, b)); return rcpp_result_gen; END_RCPP } // test_ptruncnorm List test_ptruncnorm(NumericVector x, double mu, double sigma, double a, double b); RcppExport SEXP _RcppDist_test_ptruncnorm(SEXP xSEXP, SEXP muSEXP, SEXP sigmaSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_ptruncnorm(x, mu, sigma, a, b)); return rcpp_result_gen; END_RCPP } // test_qtruncnorm_nolog List test_qtruncnorm_nolog(NumericVector x, double mu, double sigma, double a, double b); RcppExport SEXP _RcppDist_test_qtruncnorm_nolog(SEXP xSEXP, SEXP muSEXP, SEXP sigmaSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_qtruncnorm_nolog(x, mu, sigma, a, b)); return rcpp_result_gen; END_RCPP } // test_qtruncnorm_log List test_qtruncnorm_log(NumericVector x, double mu, double sigma, double a, double b); RcppExport SEXP _RcppDist_test_qtruncnorm_log(SEXP xSEXP, SEXP muSEXP, SEXP sigmaSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_qtruncnorm_log(x, mu, sigma, a, b)); return rcpp_result_gen; END_RCPP } // test_dtrunct List test_dtrunct(NumericVector x, double df, double a, double b); RcppExport SEXP _RcppDist_test_dtrunct(SEXP xSEXP, SEXP dfSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_dtrunct(x, df, a, b)); return rcpp_result_gen; END_RCPP } // test_ptrunct List test_ptrunct(NumericVector x, double df, double a, double b); RcppExport SEXP _RcppDist_test_ptrunct(SEXP xSEXP, SEXP dfSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_ptrunct(x, df, a, b)); return rcpp_result_gen; END_RCPP } // test_qtrunct_nolog List test_qtrunct_nolog(NumericVector x, double df, double a, double b); RcppExport SEXP _RcppDist_test_qtrunct_nolog(SEXP xSEXP, SEXP dfSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_qtrunct_nolog(x, df, a, b)); return rcpp_result_gen; END_RCPP } // test_qtrunct_log List test_qtrunct_log(NumericVector x, double df, double a, double b); RcppExport SEXP _RcppDist_test_qtrunct_log(SEXP xSEXP, SEXP dfSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_qtrunct_log(x, df, a, b)); return rcpp_result_gen; END_RCPP } // test_dtrunclst List test_dtrunclst(NumericVector x, double df, double mu, double sigma, double a, double b); RcppExport SEXP _RcppDist_test_dtrunclst(SEXP xSEXP, SEXP dfSEXP, SEXP muSEXP, SEXP sigmaSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_dtrunclst(x, df, mu, sigma, a, b)); return rcpp_result_gen; END_RCPP } // test_ptrunclst List test_ptrunclst(NumericVector x, double df, double mu, double sigma, double a, double b); RcppExport SEXP _RcppDist_test_ptrunclst(SEXP xSEXP, SEXP dfSEXP, SEXP muSEXP, SEXP sigmaSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_ptrunclst(x, df, mu, sigma, a, b)); return rcpp_result_gen; END_RCPP } // test_qtrunclst_nolog List test_qtrunclst_nolog(NumericVector x, double df, double mu, double sigma, double a, double b); RcppExport SEXP _RcppDist_test_qtrunclst_nolog(SEXP xSEXP, SEXP dfSEXP, SEXP muSEXP, SEXP sigmaSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_qtrunclst_nolog(x, df, mu, sigma, a, b)); return rcpp_result_gen; END_RCPP } // test_qtrunclst_log List test_qtrunclst_log(NumericVector x, double df, double mu, double sigma, double a, double b); RcppExport SEXP _RcppDist_test_qtrunclst_log(SEXP xSEXP, SEXP dfSEXP, SEXP muSEXP, SEXP sigmaSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_qtrunclst_log(x, df, mu, sigma, a, b)); return rcpp_result_gen; END_RCPP } // test_dtri List test_dtri(NumericVector x, double a, double b, double c); RcppExport SEXP _RcppDist_test_dtri(SEXP xSEXP, SEXP aSEXP, SEXP bSEXP, SEXP cSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); Rcpp::traits::input_parameter< double >::type c(cSEXP); rcpp_result_gen = Rcpp::wrap(test_dtri(x, a, b, c)); return rcpp_result_gen; END_RCPP } // test_ptri List test_ptri(NumericVector x, double a, double b, double c); RcppExport SEXP _RcppDist_test_ptri(SEXP xSEXP, SEXP aSEXP, SEXP bSEXP, SEXP cSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); Rcpp::traits::input_parameter< double >::type c(cSEXP); rcpp_result_gen = Rcpp::wrap(test_ptri(x, a, b, c)); return rcpp_result_gen; END_RCPP } // test_qtri_nolog List test_qtri_nolog(NumericVector x, double a, double b, double c); RcppExport SEXP _RcppDist_test_qtri_nolog(SEXP xSEXP, SEXP aSEXP, SEXP bSEXP, SEXP cSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); Rcpp::traits::input_parameter< double >::type c(cSEXP); rcpp_result_gen = Rcpp::wrap(test_qtri_nolog(x, a, b, c)); return rcpp_result_gen; END_RCPP } // test_qtri_log List test_qtri_log(NumericVector x, double a, double b, double c); RcppExport SEXP _RcppDist_test_qtri_log(SEXP xSEXP, SEXP aSEXP, SEXP bSEXP, SEXP cSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); Rcpp::traits::input_parameter< double >::type c(cSEXP); rcpp_result_gen = Rcpp::wrap(test_qtri_log(x, a, b, c)); return rcpp_result_gen; END_RCPP } // test_dmvnorm List test_dmvnorm(arma::mat x, arma::vec mu, arma::mat S); RcppExport SEXP _RcppDist_test_dmvnorm(SEXP xSEXP, SEXP muSEXP, SEXP SSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< arma::mat >::type x(xSEXP); Rcpp::traits::input_parameter< arma::vec >::type mu(muSEXP); Rcpp::traits::input_parameter< arma::mat >::type S(SSEXP); rcpp_result_gen = Rcpp::wrap(test_dmvnorm(x, mu, S)); return rcpp_result_gen; END_RCPP } // test_dmvt List test_dmvt(arma::mat x, arma::vec mu, arma::mat S, double df); RcppExport SEXP _RcppDist_test_dmvt(SEXP xSEXP, SEXP muSEXP, SEXP SSEXP, SEXP dfSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< arma::mat >::type x(xSEXP); Rcpp::traits::input_parameter< arma::vec >::type mu(muSEXP); Rcpp::traits::input_parameter< arma::mat >::type S(SSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); rcpp_result_gen = Rcpp::wrap(test_dmvt(x, mu, S, df)); return rcpp_result_gen; END_RCPP } // test_dwish List test_dwish(arma::mat x, int df, arma::mat S); RcppExport SEXP _RcppDist_test_dwish(SEXP xSEXP, SEXP dfSEXP, SEXP SSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< arma::mat >::type x(xSEXP); Rcpp::traits::input_parameter< int >::type df(dfSEXP); Rcpp::traits::input_parameter< arma::mat >::type S(SSEXP); rcpp_result_gen = Rcpp::wrap(test_dwish(x, df, S)); return rcpp_result_gen; END_RCPP } // test_diwish List test_diwish(arma::mat x, int df, arma::mat S); RcppExport SEXP _RcppDist_test_diwish(SEXP xSEXP, SEXP dfSEXP, SEXP SSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< arma::mat >::type x(xSEXP); Rcpp::traits::input_parameter< int >::type df(dfSEXP); Rcpp::traits::input_parameter< arma::mat >::type S(SSEXP); rcpp_result_gen = Rcpp::wrap(test_diwish(x, df, S)); return rcpp_result_gen; END_RCPP } static const R_CallMethodDef CallEntries[] = { {"_RcppDist_bayeslm", (DL_FUNC) &_RcppDist_bayeslm, 3}, {"_RcppDist_test_d4beta", (DL_FUNC) &_RcppDist_test_d4beta, 5}, {"_RcppDist_test_p4beta", (DL_FUNC) &_RcppDist_test_p4beta, 5}, {"_RcppDist_test_q4beta_nolog", (DL_FUNC) &_RcppDist_test_q4beta_nolog, 5}, {"_RcppDist_test_q4beta_log", (DL_FUNC) &_RcppDist_test_q4beta_log, 5}, {"_RcppDist_test_dlst", (DL_FUNC) &_RcppDist_test_dlst, 4}, {"_RcppDist_test_plst", (DL_FUNC) &_RcppDist_test_plst, 4}, {"_RcppDist_test_qlst_nolog", (DL_FUNC) &_RcppDist_test_qlst_nolog, 4}, {"_RcppDist_test_qlst_log", (DL_FUNC) &_RcppDist_test_qlst_log, 4}, {"_RcppDist_test_dtruncnorm", (DL_FUNC) &_RcppDist_test_dtruncnorm, 5}, {"_RcppDist_test_ptruncnorm", (DL_FUNC) &_RcppDist_test_ptruncnorm, 5}, {"_RcppDist_test_qtruncnorm_nolog", (DL_FUNC) &_RcppDist_test_qtruncnorm_nolog, 5}, {"_RcppDist_test_qtruncnorm_log", (DL_FUNC) &_RcppDist_test_qtruncnorm_log, 5}, {"_RcppDist_test_dtrunct", (DL_FUNC) &_RcppDist_test_dtrunct, 4}, {"_RcppDist_test_ptrunct", (DL_FUNC) &_RcppDist_test_ptrunct, 4}, {"_RcppDist_test_qtrunct_nolog", (DL_FUNC) &_RcppDist_test_qtrunct_nolog, 4}, {"_RcppDist_test_qtrunct_log", (DL_FUNC) &_RcppDist_test_qtrunct_log, 4}, {"_RcppDist_test_dtrunclst", (DL_FUNC) &_RcppDist_test_dtrunclst, 6}, {"_RcppDist_test_ptrunclst", (DL_FUNC) &_RcppDist_test_ptrunclst, 6}, {"_RcppDist_test_qtrunclst_nolog", (DL_FUNC) &_RcppDist_test_qtrunclst_nolog, 6}, {"_RcppDist_test_qtrunclst_log", (DL_FUNC) &_RcppDist_test_qtrunclst_log, 6}, {"_RcppDist_test_dtri", (DL_FUNC) &_RcppDist_test_dtri, 4}, {"_RcppDist_test_ptri", (DL_FUNC) &_RcppDist_test_ptri, 4}, {"_RcppDist_test_qtri_nolog", (DL_FUNC) &_RcppDist_test_qtri_nolog, 4}, {"_RcppDist_test_qtri_log", (DL_FUNC) &_RcppDist_test_qtri_log, 4}, {"_RcppDist_test_dmvnorm", (DL_FUNC) &_RcppDist_test_dmvnorm, 3}, {"_RcppDist_test_dmvt", (DL_FUNC) &_RcppDist_test_dmvt, 4}, {"_RcppDist_test_dwish", (DL_FUNC) &_RcppDist_test_dwish, 3}, {"_RcppDist_test_diwish", (DL_FUNC) &_RcppDist_test_diwish, 3}, {NULL, NULL, 0} }; RcppExport void R_init_RcppDist(DllInfo *dll) { R_registerRoutines(dll, NULL, CallEntries, NULL, NULL); R_useDynamicSymbols(dll, FALSE); } r-cran-rcppdist-0.1.1/src/bayeslm.cpp000066400000000000000000000065421412660337500174660ustar00rootroot00000000000000#include #include //' bayeslm //' //' Demonstrates the use of RcppDist in C++ with Bayesian linear regression //' //' To see an example of using RcppDist C++ functions in C++ code, //' we can code up a Bayesian linear regression with completely uninformative //' priors (such that estimates should be equivalent to classical estimates). //' The code to do so is as follows: //' \preformatted{ //' #include //' // or, alternatively, //' // #include //' // #include //' //' // [[Rcpp::depends(RcppArmadillo, RcppDist)]] //' //' // [[Rcpp::export]] //' Rcpp::List bayeslm(const arma::vec& y, const arma::mat x, //' const int iters = 1000) { //' int n = x.n_rows; //' int p = x.n_cols; //' double a = (n - p) / 2.0; //' arma::mat xtx = x.t() * x; //' arma::mat xtxinv = xtx.i(); //' arma::vec mu = xtxinv * x.t() * y; //' arma::mat px = x * xtxinv * x.t(); //' double ssq = arma::as_scalar(y.t() * (arma::eye(n, n) - px) * y); //' ssq *= (1.0 / (n - p)); //' double b = 1.0 / (a * ssq); //' arma::mat beta_draws(iters, p); //' Rcpp::NumericVector sigma_draws(iters); //' for ( int iter = 0; iter < iters; ++iter ) { //' double sigmasq = 1.0 / R::rgamma(a, b); //' sigma_draws[iter] = sigmasq; //' // Here we can use our multivariate normal generator //' beta_draws.row(iter) = rmvnorm(1, mu, xtxinv * sigmasq); //' } //' return Rcpp::List::create(Rcpp::_["beta_draws"] = beta_draws, //' Rcpp::_["sigma_draws"] = sigma_draws); //' } //' } //' //' @param y A numeric vector -- the response //' @param x A numeric matrix -- the explanatory variables; note this assumes //' you have included a column of ones if you intend there to be an intercept. //' @param iters An integer vector of length one, the number of posterior draws //' desired; the default is 1000. //' //' @return A list of length two; the first element is a numeric matrix of the //' beta draws and the second element is a numeric vector of the sigma draws //' @examples //' set.seed(123) //' n <- 30 //' x <- cbind(1, matrix(rnorm(n*3), ncol = 3)) //' beta <- matrix(c(10, 2, -1, 3), nrow = 4) //' y <- x %*% beta + rnorm(n) //' freqmod <- lm(y ~ x[ , -1]) //' bayesmod <- bayeslm(y, x) //' round(unname(coef(freqmod)), 2) //' round(apply(bayesmod$beta_draws, 2, mean), 2) //' c(beta) //' @export // [[Rcpp::export]] Rcpp::List bayeslm(const arma::vec& y, const arma::mat x, const int iters = 1000) { int n = x.n_rows; int p = x.n_cols; double a = (n - p) / 2.0; arma::mat xtx = x.t() * x; arma::mat xtxinv = xtx.i(); arma::vec mu = xtxinv * x.t() * y; arma::mat px = x * xtxinv * x.t(); double ssq = arma::as_scalar(y.t() * (arma::eye(n, n) - px) * y); ssq *= (1.0 / (n - p)); double b = 1.0 / (a * ssq); arma::mat beta_draws(iters, p); Rcpp::NumericVector sigma_draws(iters); for ( int iter = 0; iter < iters; ++iter ) { double sigmasq = 1.0 / R::rgamma(a, b); sigma_draws[iter] = sigmasq; // Here we can use our multivariate normal generator beta_draws.row(iter) = rmvnorm(1, mu, xtxinv * sigmasq); } return Rcpp::List::create(Rcpp::_["beta_draws"] = beta_draws, Rcpp::_["sigma_draws"] = sigma_draws); } r-cran-rcppdist-0.1.1/src/test_functions.cpp000066400000000000000000000301401412660337500210700ustar00rootroot00000000000000#include using namespace Rcpp; // FOUR PARAMETER BETA DISTRIBUTION // [[Rcpp::export]] List test_d4beta(NumericVector x, double shape1, double shape2, double a, double b) { return List::create( _["VectorLog"] = d4beta(x, shape1, shape2, a, b, true), _["VectorNoLog"] = d4beta(x, shape1, shape2, a, b), _["DoubleLog"] = d_4beta(x[0], shape1, shape2, a, b, 1), _["DoubleNoLog"] = d_4beta(x[0], shape1, shape2, a, b) ); } // nocov // [[Rcpp::export]] List test_p4beta(NumericVector x, double shape1, double shape2, double a, double b) { return List::create( _["VectorLog"] = p4beta(x, shape1, shape2, a, b, true, true), _["VectorNoLog"] = p4beta(x, shape1, shape2, a, b), _["DoubleLog"] = p_4beta(x[0], shape1, shape2, a, b, 1, 1), _["DoubleNoLog"] = p_4beta(x[0], shape1, shape2, a, b), _["VectorLogNoLower"] = p4beta(x, shape1, shape2, a, b, false, true), _["VectorNoLogNoLower"] = p4beta(x, shape1, shape2, a, b, false), _["DoubleLogNoLower"] = p_4beta(x[0], shape1, shape2, a, b, 0, 1), _["DoubleNoLogNoLower"] = p_4beta(x[0], shape1, shape2, a, b, 0) ); } // nocov // [[Rcpp::export]] List test_q4beta_nolog(NumericVector x, double shape1, double shape2, double a, double b) { return List::create( _["VectorNoLog"] = q4beta(x, shape1, shape2, a, b), _["DoubleNoLog"] = q_4beta(x[0], shape1, shape2, a, b), _["VectorNoLogNoLower"] = q4beta(x, shape1, shape2, a, b, false), _["DoubleNoLogNoLower"] = q_4beta(x[0], shape1, shape2, a, b, 0) ); } // nocov // [[Rcpp::export]] List test_q4beta_log(NumericVector x, double shape1, double shape2, double a, double b) { return List::create( _["VectorLog"] = q4beta(x, shape1, shape2, a, b, true, true), _["DoubleLog"] = q_4beta(x[0], shape1, shape2, a, b, 1, 1), _["VectorLogNoLower"] = q4beta(x, shape1, shape2, a, b, false, true), _["DoubleLogNoLower"] = q_4beta(x[0], shape1, shape2, a, b, 0, 1) ); } // nocov // LOCATION-SCALE T DISTRIBUTION // [[Rcpp::export]] List test_dlst(NumericVector x, double df, double mu, double sigma) { return List::create( _["VectorLog"] = dlst(x, df, mu, sigma, true), _["VectorNoLog"] = dlst(x, df, mu, sigma), _["DoubleLog"] = d_lst(x[0], df, mu, sigma, 1), _["DoubleNoLog"] = d_lst(x[0], df, mu, sigma) ); } // nocov // [[Rcpp::export]] List test_plst(NumericVector x, double df, double mu, double sigma) { return List::create( _["VectorLog"] = plst(x, df, mu, sigma, true, true), _["VectorNoLog"] = plst(x, df, mu, sigma), _["DoubleLog"] = p_lst(x[0], df, mu, sigma, 1, 1), _["DoubleNoLog"] = p_lst(x[0], df, mu, sigma), _["VectorLogNoLower"] = plst(x, df, mu, sigma, false, true), _["VectorNoLogNoLower"] = plst(x, df, mu, sigma, false), _["DoubleLogNoLower"] = p_lst(x[0], df, mu, sigma, 0, 1), _["DoubleNoLogNoLower"] = p_lst(x[0], df, mu, sigma, 0) ); } // nocov // [[Rcpp::export]] List test_qlst_nolog(NumericVector x, double df, double mu, double sigma) { return List::create( _["VectorNoLog"] = qlst(x, df, mu, sigma), _["DoubleNoLog"] = q_lst(x[0], df, mu, sigma), _["VectorNoLogNoLower"] = qlst(x, df, mu, sigma, false), _["DoubleNoLogNoLower"] = q_lst(x[0], df, mu, sigma, 0) ); } // nocov // [[Rcpp::export]] List test_qlst_log(NumericVector x, double df, double mu, double sigma) { return List::create( _["VectorLog"] = qlst(x, df, mu, sigma, true, true), _["DoubleLog"] = q_lst(x[0], df, mu, sigma, 1, 1), _["VectorLogNoLower"] = qlst(x, df, mu, sigma, false, true), _["DoubleLogNoLower"] = q_lst(x[0], df, mu, sigma, 0, 1) ); } // nocov // TRUNCATED NORMAL DISTRIBUTION // [[Rcpp::export]] List test_dtruncnorm(NumericVector x, double mu, double sigma, double a, double b) { return List::create( _["VectorLog"] = dtruncnorm(x, mu, sigma, a, b, true), _["VectorNoLog"] = dtruncnorm(x, mu, sigma, a, b), _["DoubleLog"] = d_truncnorm(x[0], mu, sigma, a, b, 1), _["DoubleNoLog"] = d_truncnorm(x[0], mu, sigma, a, b) ); } // nocov // [[Rcpp::export]] List test_ptruncnorm(NumericVector x, double mu, double sigma, double a, double b) { return List::create( _["VectorLog"] = ptruncnorm(x, mu, sigma, a, b, true, true), _["VectorNoLog"] = ptruncnorm(x, mu, sigma, a, b), _["DoubleLog"] = p_truncnorm(x[0], mu, sigma, a, b, 1, 1), _["DoubleNoLog"] = p_truncnorm(x[0], mu, sigma, a, b), _["VectorLogNoLower"] = ptruncnorm(x, mu, sigma, a, b, false, true), _["VectorNoLogNoLower"] = ptruncnorm(x, mu, sigma, a, b, false), _["DoubleLogNoLower"] = p_truncnorm(x[0], mu, sigma, a, b, 0, 1), _["DoubleNoLogNoLower"] = p_truncnorm(x[0], mu, sigma, a, b, 0) ); } // nocov // [[Rcpp::export]] List test_qtruncnorm_nolog(NumericVector x, double mu, double sigma, double a, double b) { return List::create( _["VectorNoLog"] = qtruncnorm(x, mu, sigma, a, b), _["DoubleNoLog"] = q_truncnorm(x[0], mu, sigma, a, b), _["VectorNoLogNoLower"] = qtruncnorm(x, mu, sigma, a, b, false), _["DoubleNoLogNoLower"] = q_truncnorm(x[0], mu, sigma, a, b, 0) ); } // nocov // [[Rcpp::export]] List test_qtruncnorm_log(NumericVector x, double mu, double sigma, double a, double b) { return List::create( _["VectorLog"] = qtruncnorm(x, mu, sigma, a, b, true, true), _["DoubleLog"] = q_truncnorm(x[0], mu, sigma, a, b, 1, 1), _["VectorLogNoLower"] = qtruncnorm(x, mu, sigma, a, b, false, true), _["DoubleLogNoLower"] = q_truncnorm(x[0], mu, sigma, a, b, 0, 1) ); } // nocov // TRUNCATED T DISTRIBUTION // [[Rcpp::export]] List test_dtrunct(NumericVector x, double df, double a, double b) { return List::create( _["VectorLog"] = dtrunct(x, df, a, b, true), _["VectorNoLog"] = dtrunct(x, df, a, b), _["DoubleLog"] = d_trunct(x[0], df, a, b, 1), _["DoubleNoLog"] = d_trunct(x[0], df, a, b) ); } // nocov // [[Rcpp::export]] List test_ptrunct(NumericVector x, double df, double a, double b) { return List::create( _["VectorLog"] = ptrunct(x, df, a, b, true, true), _["VectorNoLog"] = ptrunct(x, df, a, b), _["DoubleLog"] = p_trunct(x[0], df, a, b, 1, 1), _["DoubleNoLog"] = p_trunct(x[0], df, a, b), _["VectorLogNoLower"] = ptrunct(x, df, a, b, false, true), _["VectorNoLogNoLower"] = ptrunct(x, df, a, b, false), _["DoubleLogNoLower"] = p_trunct(x[0], df, a, b, 0, 1), _["DoubleNoLogNoLower"] = p_trunct(x[0], df, a, b, 0) ); } // nocov // [[Rcpp::export]] List test_qtrunct_nolog(NumericVector x, double df, double a, double b) { return List::create( _["VectorNoLog"] = qtrunct(x, df, a, b), _["DoubleNoLog"] = q_trunct(x[0], df, a, b), _["VectorNoLogNoLower"] = qtrunct(x, df, a, b, false), _["DoubleNoLogNoLower"] = q_trunct(x[0], df, a, b, 0) ); } // nocov // [[Rcpp::export]] List test_qtrunct_log(NumericVector x, double df, double a, double b) { return List::create( _["VectorLog"] = qtrunct(x, df, a, b, true, true), _["DoubleLog"] = q_trunct(x[0], df, a, b, 1, 1), _["VectorLogNoLower"] = qtrunct(x, df, a, b, false, true), _["DoubleLogNoLower"] = q_trunct(x[0], df, a, b, 0, 1) ); } // nocov // TRUNCATED LOCATION-SCALE T DISTRIBUTION // [[Rcpp::export]] List test_dtrunclst(NumericVector x, double df, double mu, double sigma, double a, double b) { return List::create( _["VectorLog"] = dtrunclst(x, df, mu, sigma, a, b, true), _["VectorNoLog"] = dtrunclst(x, df, mu, sigma, a, b), _["DoubleLog"] = d_trunclst(x[0], df, mu, sigma, a, b, 1), _["DoubleNoLog"] = d_trunclst(x[0], df, mu, sigma, a, b) ); } // nocov // [[Rcpp::export]] List test_ptrunclst(NumericVector x, double df, double mu, double sigma, double a, double b) { return List::create( _["VectorLog"] = ptrunclst(x, df, mu, sigma, a, b, true, true), _["VectorNoLog"] = ptrunclst(x, df, mu, sigma, a, b), _["DoubleLog"] = p_trunclst(x[0], df, mu, sigma, a, b, 1, 1), _["DoubleNoLog"] = p_trunclst(x[0], df, mu, sigma, a, b), _["VectorLogNoLower"] = ptrunclst(x, df, mu, sigma, a, b, false, true), _["VectorNoLogNoLower"] = ptrunclst(x, df, mu, sigma, a, b, false), _["DoubleLogNoLower"] = p_trunclst(x[0], df, mu, sigma, a, b, 0, 1), _["DoubleNoLogNoLower"] = p_trunclst(x[0], df, mu, sigma, a, b, 0) ); } // nocov // [[Rcpp::export]] List test_qtrunclst_nolog(NumericVector x, double df, double mu, double sigma, double a, double b) { return List::create( _["VectorNoLog"] = qtrunclst(x, df, mu, sigma, a, b), _["DoubleNoLog"] = q_trunclst(x[0], df, mu, sigma, a, b), _["VectorNoLogNoLower"] = qtrunclst(x, df, mu, sigma, a, b, false), _["DoubleNoLogNoLower"] = q_trunclst(x[0], df, mu, sigma, a, b, 0) ); } // nocov // [[Rcpp::export]] List test_qtrunclst_log(NumericVector x, double df, double mu, double sigma, double a, double b) { return List::create( _["VectorLog"] = qtrunclst(x, df, mu, sigma, a, b, true, true), _["DoubleLog"] = q_trunclst(x[0], df, mu, sigma, a, b, 1, 1), _["VectorLogNoLower"] = qtrunclst(x, df, mu, sigma, a, b, false, true), _["DoubleLogNoLower"] = q_trunclst(x[0], df, mu, sigma, a, b, 0, 1) ); } // nocov // FOUR PARAMETER BETA DISTRIBUTION // [[Rcpp::export]] List test_dtri(NumericVector x, double a, double b, double c) { return List::create( _["VectorLog"] = dtri(x, a, b, c, true), _["VectorNoLog"] = dtri(x, a, b, c), _["DoubleLog"] = d_tri(x[0], a, b, c, 1), _["DoubleNoLog"] = d_tri(x[0], a, b, c) ); } // nocov // [[Rcpp::export]] List test_ptri(NumericVector x, double a, double b, double c) { return List::create( _["VectorLog"] = ptri(x, a, b, c, true, true), _["VectorNoLog"] = ptri(x, a, b, c), _["DoubleLog"] = p_tri(x[0], a, b, c, 1, 1), _["DoubleNoLog"] = p_tri(x[0], a, b, c), _["VectorLogNoLower"] = ptri(x, a, b, c, false, true), _["VectorNoLogNoLower"] = ptri(x, a, b, c, false), _["DoubleLogNoLower"] = p_tri(x[0], a, b, c, 0, 1), _["DoubleNoLogNoLower"] = p_tri(x[0], a, b, c, 0) ); } // nocov // [[Rcpp::export]] List test_qtri_nolog(NumericVector x, double a, double b, double c) { return List::create( _["VectorNoLog"] = qtri(x, a, b, c), _["DoubleNoLog"] = q_tri(x[0], a, b, c), _["VectorNoLogNoLower"] = qtri(x, a, b, c, false), _["DoubleNoLogNoLower"] = q_tri(x[0], a, b, c, 0) ); } // nocov // [[Rcpp::export]] List test_qtri_log(NumericVector x, double a, double b, double c) { return List::create( _["VectorLog"] = qtri(x, a, b, c, true, true), _["DoubleLog"] = q_tri(x[0], a, b, c, 1, 1), _["VectorLogNoLower"] = qtri(x, a, b, c, false, true), _["DoubleLogNoLower"] = q_tri(x[0], a, b, c, 0, 1) ); } // nocov // MULTIVARIATE NORMAL DISTRIBUTION // [[Rcpp::export]] List test_dmvnorm(arma::mat x, arma::vec mu, arma::mat S) { return List::create( _["Log"] = dmvnorm(x, mu, S, true), _["NoLog"] = dmvnorm(x, mu, S, false) ); } // nocov // MULTIVARIATE T DISTRIBUTION // [[Rcpp::export]] List test_dmvt(arma::mat x, arma::vec mu, arma::mat S, double df) { return List::create( _["Log"] = dmvt(x, mu, S, df, true), _["NoLog"] = dmvt(x, mu, S, df, false) ); } // nocov // WISHART DISTRIBUTION // [[Rcpp::export]] List test_dwish(arma::mat x, int df, arma::mat S) { return List::create( _["Log"] = dwish(x, df, S, true), _["NoLog"] = dwish(x, df, S, false) ); } // nocov // INVERSE WISHART DISTRIBUTION // [[Rcpp::export]] List test_diwish(arma::mat x, int df, arma::mat S) { return List::create( _["Log"] = diwish(x, df, S, true), _["NoLog"] = diwish(x, df, S, false) ); } // nocov r-cran-rcppdist-0.1.1/tests/000077500000000000000000000000001412660337500156725ustar00rootroot00000000000000r-cran-rcppdist-0.1.1/tests/testthat.R000066400000000000000000000000741412660337500176560ustar00rootroot00000000000000library(testthat) library(RcppDist) test_check("RcppDist") r-cran-rcppdist-0.1.1/tests/testthat/000077500000000000000000000000001412660337500175325ustar00rootroot00000000000000r-cran-rcppdist-0.1.1/tests/testthat/test_4beta.R000066400000000000000000000066611412660337500217240ustar00rootroot00000000000000context("Four Parameter Beta Distribution") test_that('The density functions provide correct answers', { x <- c(-3, 2, 0, 4, -1) s1 <- 2.0; s2 <- 2.0; a <- -2.5; b <- 2.5; expect_equal(test_d4beta(x, s1, s2, a, b), list( "VectorLog" = c(-Inf, -2.225624051858, -1.203972804326, -Inf, -1.378326191471), "VectorNoLog" = c(0, 0.108, 0.3, 0, 0.252), "DoubleLog" = -Inf, "DoubleNoLog" = 0 ) ) x <- x[-1] expect_equal(test_d4beta(x, s1, s2, a, b), list( "VectorLog" = c(-2.225624051858, -1.203972804326, -Inf, -1.378326191471), "VectorNoLog" = c(0.108, 0.3, 0, 0.252), "DoubleLog" = -2.225624051858, "DoubleNoLog" = 0.108 ) ) }) test_that('The distribution functions provide correct answers', { x <- c(-3, 2, 0, 4, -1) s1 <- 2.0; s2 <- 2.0; a <- -2.5; b <- 2.5; expect_equal(test_p4beta(x, s1, s2, a, b), list( "VectorLog" = c(-Inf, -0.028399474522, -0.693147180560, 0, -1.532476871298), "VectorNoLog" = c(0, 0.972, 0.5, 1, 0.216), "DoubleLog" = -Inf, "DoubleNoLog" = 0, "VectorLogNoLower" = c(0, -3.575550768807, -0.693147180560, -Inf, -0.243346258632), "VectorNoLogNoLower" = c(1, 0.028, 0.5, 0, 0.784), "DoubleLogNoLower" = 0, "DoubleNoLogNoLower" = 1 ) ) x <- x[-1] expect_equal(test_p4beta(x, s1, s2, a, b), list( "VectorLog" = c(-0.028399474522, -0.693147180560, 0, -1.532476871298), "VectorNoLog" = c(0.972, 0.5, 1, 0.216), "DoubleLog" = -0.028399474522, "DoubleNoLog" = 0.972, "VectorLogNoLower" = c(-3.575550768807, -0.693147180560, -Inf, -0.243346258632), "VectorNoLogNoLower" = c(0.028, 0.5, 0, 0.784), "DoubleLogNoLower" = -3.575550768807, "DoubleNoLogNoLower" = 0.028 ) ) }) test_that('The quantile functions provide correct answers', { x <- c(0, 0.5, 1) s1 <- 2.0; s2 <- 2.0; a <- -2.5; b <- 2.5; expect_equal(test_q4beta_nolog(x, s1, s2, a, b), list( "VectorNoLog" = c(-2.5, 0, 2.5), "DoubleNoLog" = -2.5, "VectorNoLogNoLower" = c(2.5, 0, -2.5), "DoubleNoLogNoLower" = 2.5 ) ) x <- c(-1, -2, -10) expect_equal(test_q4beta_log(x, s1, s2, a, b), list( "VectorLog" = c(-0.445104983167, -1.345445414451, -2.480523918142), "DoubleLog" = -0.445104983167, "VectorLogNoLower" = c(0.445104983167, 1.345445414451, 2.480523918142), "DoubleLogNoLower" = 0.445104983167 ) ) }) r-cran-rcppdist-0.1.1/tests/testthat/test_Wishart.R000066400000000000000000000010541412660337500223350ustar00rootroot00000000000000context("Wishart Distribution") test_that('The density function provides correct answers', { S = matrix(c(1/2, 1/3, 1/3, 1/4), nrow = 2) expect_equal(test_dwish(S, 2, S), list( "Log" = 2.88397493155479, "NoLog" = 17.885224616332 ) ) X = diag(2) expect_equal(test_dwish(X, 2, S), list( "Log" = -25.25435812795322477, "NoLog" = 0.00000000001076891 ) ) }) r-cran-rcppdist-0.1.1/tests/testthat/test_bayeslm.R000066400000000000000000000010221412660337500223430ustar00rootroot00000000000000context("bayeslm") test_that('Example estimates are as expected', { set.seed(123) n <- 30 x <- cbind(1, matrix(rnorm(n*3), ncol = 3)) beta <- matrix(c(10, 2, -1, 3), nrow = 4) y <- x %*% beta + rnorm(n) freqmod <- lm(y ~ x[ , -1]) bayesmod <- bayeslm(y, x, 10000) beta_means <- apply(bayesmod$beta_draws, 2, mean) sigma_mean <- mean(bayesmod$sigma_draws) expect_equivalent(beta_means, coef(freqmod), tolerance = 0.01) expect_equivalent(sigma_mean, sigma(freqmod), tolerance = 0.04) }) r-cran-rcppdist-0.1.1/tests/testthat/test_inverse_Wishart.R000066400000000000000000000010511412660337500240650ustar00rootroot00000000000000context("Inverse Wishart Distribution") test_that('The density function provides correct answers', { S = matrix(c(1/2, 1/3, 1/3, 1/4), nrow = 2) expect_equal(test_diwish(S, 2, S), list( "Log" = 2.883974931554, "NoLog" = 17.885224616332 ) ) X = diag(2) expect_equal(test_diwish(X, 2, S), list( "Log" = -7.182690365985, "NoLog" = 0.000759621431 ) ) }) r-cran-rcppdist-0.1.1/tests/testthat/test_lst.R000066400000000000000000000104141412660337500215160ustar00rootroot00000000000000context("Location-Scale t Distribution") test_that('The density functions provide correct answers', { x <- c(-3, 2, 0, 4, -1) df <- 1; mu <- 1; sigma <- 2; expect_equal(test_dlst(x, df, mu, sigma), list( "VectorLog" = c(-3.447314978843, -2.061020617724, -2.061020617724, -3.016532062751, -2.531024246969), "VectorNoLog" = c(0.031830988618, 0.127323954474, 0.127323954474, 0.048970751721, 0.079577471546), "DoubleLog" = -3.447314978843, "DoubleNoLog" = 0.031830988618 ) ) x <- x[-1] expect_equal(test_dlst(x, df, mu, sigma), list( "VectorLog" = c(-2.061020617724, -2.061020617724, -3.016532062751, -2.531024246969), "VectorNoLog" = c(0.127323954474, 0.127323954474, 0.048970751721, 0.079577471546), "DoubleLog" = -2.061020617724, "DoubleNoLog" = 0.127323954474 ) ) }) test_that('The distribution functions provide correct answers', { x <- c(-3, 2, 0, 4, -1) df <- 1; mu <- 1; sigma <- 2; expect_equal(test_plst(x, df, mu, sigma), list( "VectorLog" = c(-1.913360364504, -0.434507354518, -1.042941898062, -0.207229654027, -1.386294361120), "VectorNoLog" = c(0.147583617650, 0.647583617650, 0.352416382350, 0.812832958189, 0.25), "DoubleLog" = -1.913360364504, "DoubleNoLog" = 0.147583617650, "VectorLogNoLower" = c(-0.159680159856, -1.042941898062, -0.434507354518, -1.675753789141, -0.287682072452), "VectorNoLogNoLower" = c(0.852416382350, 0.352416382350, 0.647583617650, 0.187167041811, 0.75), "DoubleLogNoLower" = -0.159680159856, "DoubleNoLogNoLower" = 0.852416382350 ) ) x <- x[-1] expect_equal(test_plst(x, df, mu, sigma), list( "VectorLog" = c(-0.434507354518, -1.042941898062, -0.207229654027, -1.386294361120), "VectorNoLog" = c(0.647583617650, 0.352416382350, 0.812832958189, 0.25), "DoubleLog" = -0.434507354518, "DoubleNoLog" = 0.647583617650, "VectorLogNoLower" = c(-1.042941898062, -0.434507354518, -1.675753789141, -0.287682072452), "VectorNoLogNoLower" = c(0.352416382350, 0.647583617650, 0.187167041811, 0.75), "DoubleLogNoLower" = -1.042941898062, "DoubleNoLogNoLower" = 0.352416382350 ) ) }) test_that('The quantile functions provide correct answers', { x <- c(0, 0.5, 1) df <- 1; mu <- 1; sigma <- 2; expect_equal(test_qlst_nolog(x, df, mu, sigma), list( "VectorNoLog" = c(-Inf, 1, Inf), "DoubleNoLog" = -Inf, "VectorNoLogNoLower" = c(Inf, 1, -Inf), "DoubleNoLogNoLower" = Inf ) ) x <- c(-1, -2, -10) expect_equal(test_qlst_log(x, df, mu, sigma), list( "VectorLog" = c(0.118657817008, -3.417097905848, -14021.483545266779), "DoubleLog" = 0.118657817008, "VectorLogNoLower" = c(1.881342182992, 5.417097905848, 14023.483545266779), "DoubleLogNoLower" = 1.881342182992 ) ) }) r-cran-rcppdist-0.1.1/tests/testthat/test_mvnorm.R000066400000000000000000000014721412660337500222360ustar00rootroot00000000000000context("Multivariate Normal Distribution") test_that('The density function provides correct answers', { x <- matrix(c(0.5, -0.5), nrow = 1) mu <- c(1, -1) S <- matrix(c(1/2, 1/3, 1/3, 1/4), nrow = 2) expect_equal(test_dmvnorm(x, mu, S), list( "Log" = matrix(-12.4495440069013, ncol = 1), "NoLog" = matrix(0.0000039195096, ncol = 1) ) ) x <- matrix(c(0.5, -0.5, 0.5), nrow = 1) mu <- c(1, -1, 0) S <- matrix(c(1/2, 1/3, 1/4, 1/3, 1/4, 1/5, 1/4, 1/5, 1/6), ncol = 3) expect_equal(test_dmvnorm(x, mu, S), list( "Log" = matrix(-28.92001771250195, ncol = 1), "NoLog" = matrix(0.00000000000027, ncol = 1) ) ) }) r-cran-rcppdist-0.1.1/tests/testthat/test_mvt.R000066400000000000000000000020221412660337500215160ustar00rootroot00000000000000context("Multivariate t Distribution") test_that('The density function provides correct answers', { x <- matrix(c(-1:3, -2:2), ncol = 2) mu <- c(1, -1) S <- matrix(c(1/2, 1/3, 1/3, 1/4), ncol = 2) df <- 1 expect_equal(test_dmvt(x, mu, S, df), list( "Log" = matrix(c(-3.5469680431, -4.1162024757, -5.1159208759, -6.0065829360, -6.7365658302), ncol = 1), "NoLog" = matrix(c(0.0288118637, 0.0163063207, 0.0060004496, 0.0024624883, 0.0011867155), ncol = 1) ) ) S <- matrix(c(1/2, 1/3, 1/4, 1/3, 1/4, 1/5, 1/4, 1/5, 1/6), ncol = 3) expect_equal(test_dmvt(matrix(rep(1, 3), nrow = 1), rep(0, 3), S, df), list( "Log" = matrix(-2.082560599505, ncol = 1), "NoLog" = matrix(0.124610725172, ncol = 1) ) ) }) r-cran-rcppdist-0.1.1/tests/testthat/test_triangular.R000066400000000000000000000075121412660337500230710ustar00rootroot00000000000000context("Triangular Distribution") test_that('The density functions provide correct answers', { x <- seq(from = -3, to = 3) a <- -2.5; b <- 2.5; c <- 0; expect_equal(test_dtri(x, a, b, c), list( "VectorLog" = c(-Inf, -2.525728644308, -1.427116355640, -0.916290731874, -1.427116355640, -2.525728644308, -Inf), "VectorNoLog" = c(0, 0.08, 0.24, 0.4, 0.24, 0.08, 0), "DoubleLog" = -Inf, "DoubleNoLog" = 0 ) ) x <- x[-1] expect_equal(test_dtri(x, a, b, c), list( "VectorLog" = c(-2.525728644308, -1.427116355640, -0.916290731874, -1.427116355640, -2.525728644308, -Inf), "VectorNoLog" = c(0.08, 0.24, 0.4, 0.24, 0.08, 0), "DoubleLog" = -2.525728644308, "DoubleNoLog" = 0.08 ) ) }) test_that('The distribution functions provide correct answers', { x <- seq(from = -3, to = 3) a <- -2.5; b <- 2.5; c <- 0; expect_equal(test_ptri(x, a, b, c), list( "VectorLog" = c(-Inf, -3.912023005428, -1.714798428092, -0.693147180560, -0.198450938724, -0.020202707318, 0), "VectorNoLog" = c(0, 0.02, 0.18, 0.5, 0.82, 0.98, 1), "DoubleLog" = -Inf, "DoubleNoLog" = 0, "VectorLogNoLower" = c(0, -0.020202707318, -0.198450938724, -0.693147180560, -1.714798428092, -3.912023005428, -Inf), "VectorNoLogNoLower" = c(1, 0.98, 0.82, 0.5, 0.18, 0.02, 0), "DoubleLogNoLower" = 0, "DoubleNoLogNoLower" = 1 ) ) x <- x[-1] expect_equal(test_ptri(x, a, b, c), list( "VectorLog" = c(-3.912023005428, -1.714798428092, -0.693147180560, -0.198450938724, -0.020202707318, 0), "VectorNoLog" = c(0.02, 0.18, 0.5, 0.82, 0.98, 1), "DoubleLog" = -3.912023005428, "DoubleNoLog" = 0.02, "VectorLogNoLower" = c(-0.020202707318, -0.198450938724, -0.693147180560, -1.714798428092, -3.912023005428, -Inf), "VectorNoLogNoLower" = c(0.98, 0.82, 0.5, 0.18, 0.02, 0), "DoubleLogNoLower" = -0.020202707318, "DoubleNoLogNoLower" = 0.98 ) ) }) test_that('The quantile functions provide correct answers', { x <- c(0, 0.5, 1) a <- -2.5; b <- 2.5; c <- 0; expect_equal(test_qtri_nolog(x, a, b, c), list( "VectorNoLog" = c(-2.5, 0, 2.5), "DoubleNoLog" = -2.5, "VectorNoLogNoLower" = c(2.5, 0, -2.5), "DoubleNoLogNoLower" = 2.5 ) ) x <- c(0, -1, -2, -10) expect_equal(test_qtri_log(x, a, b, c), list( "VectorLog" = c(2.5, -0.355590287598, -1.199349762443, -2.476177759928), "DoubleLog" = 2.5, "VectorLogNoLower" = c(-2.500000000000, 0.355590287598, 1.199349762443, 2.476177759928), "DoubleLogNoLower" = -2.5 ) ) }) r-cran-rcppdist-0.1.1/tests/testthat/test_trunclst.R000066400000000000000000000124471412660337500226020ustar00rootroot00000000000000context("Truncated Location-Scale t Distribution") test_that('The density functions provide correct answers', { x <- seq(from = -3, to = 3) df <- 1; mu <- 1; sigma <- 2; a <- -2.5; b <- 2.5 expect_equal(test_dtrunclst(x, df, mu, sigma, a, b), list( "VectorLog" = c(-Inf, -2.399574188877, -1.914066373095, -1.444062743849, -1.220919192535, -1.444062743849, -Inf), "VectorNoLog" = c(0, 0.090756590228, 0.147479459121, 0.235967134593, 0.294958918242, 0.235967134593, 0), "DoubleLog" = -Inf, "DoubleNoLog" = 0 ) ) x <- x[-1] expect_equal(test_dtrunclst(x, df, mu, sigma, a, b), list( "VectorLog" = c(-2.399574188877, -1.914066373095, -1.444062743849, -1.220919192535, -1.444062743849, -Inf), "VectorNoLog" = c(0.090756590228, 0.147479459121, 0.235967134593, 0.294958918242, 0.235967134593, 0), "DoubleLog" = -2.399574188877, "DoubleNoLog" = 0.090756590228 ) ) }) test_that('The distribution functions provide correct answers', { x <- seq(from = -3, to = 3) df <- 1; mu <- 1; sigma <- 2; a <- -2.5; b <- 2.5 expect_equal(test_ptrunclst(x, df, mu, sigma, a, b), list( "VectorLog" = c(-Inf, -3.203502817486, -1.851083877622, -1.058795915267, -0.477411450527, -0.112160010453, 0), "VectorNoLog" = c(0, 0.040619671196, 0.157066832795, 0.346873223732, 0.620387218125, 0.893901212518, 1), "DoubleLog" = -Inf, "DoubleNoLog" = 0, "VectorLogNoLower" = c(0, -0.041467693769, -0.170867603832, -0.425984024188, -0.968603540856, -2.243384661497, -Inf), "VectorNoLogNoLower" = c(1, 0.959380328804, 0.842933167205, 0.653126776268, 0.379612781875, 0.106098787482, 0), "DoubleLogNoLower" = 0, "DoubleNoLogNoLower" = 1 ) ) x <- x[-1] expect_equal(test_ptrunclst(x, df, mu, sigma, a, b), list( "VectorLog" = c(-3.203502817486, -1.851083877622, -1.058795915267, -0.477411450527, -0.112160010453, 0), "VectorNoLog" = c(0.040619671196, 0.157066832795, 0.346873223732, 0.620387218125, 0.893901212518, 1), "DoubleLog" = -3.203502817486, "DoubleNoLog" = 0.040619671196, "VectorLogNoLower" = c(-0.041467693769, -0.170867603832, -0.425984024188, -0.968603540856, -2.243384661497, -Inf), "VectorNoLogNoLower" = c(0.959380328804, 0.842933167205, 0.653126776268, 0.379612781875, 0.106098787482, 0), "DoubleLogNoLower" = -0.041467693769, "DoubleNoLogNoLower" = 0.959380328804 ) ) x <- x[length(x)] expect_equal(test_ptrunclst(x, df, mu, sigma, a, b), list( "VectorLog" = 0, "VectorNoLog" = 1, "DoubleLog" = 0, "DoubleNoLog" = 1, "VectorLogNoLower" = -Inf, "VectorNoLogNoLower" = 0, "DoubleLogNoLower" = -Inf, "DoubleNoLogNoLower" = 0 ) ) }) test_that('The quantile functions provide correct answers', { x <- c(0, 0.5, 1) df <- 1; mu <- 1; sigma <- 2; a <- -2.5; b <- 2.5 expect_equal(test_qtrunclst_nolog(x, df, mu, sigma, a, b), list( "VectorNoLog" = c(-2.5, 0.586088907313, 2.5), "DoubleNoLog" = -2.5, "VectorNoLogNoLower" = c(2.5, 0.586088907313, -2.5), "DoubleNoLogNoLower" = 2.5 ) ) x <- c(-1, -2, -10) expect_equal(test_qtrunclst_log(x, df, mu, sigma, a, b), list( "VectorLog" = c(0.087500882304, -1.153060797725, -2.499374786226), "DoubleLog" = 0.087500882304, "VectorLogNoLower" = c(1.039784822473, 1.878998635049, 2.499759514659), "DoubleLogNoLower" = 1.039784822473 ) ) }) r-cran-rcppdist-0.1.1/tests/testthat/test_truncnorm.R000066400000000000000000000123551412660337500227510ustar00rootroot00000000000000context("Truncated Normal Distribution") test_that('The density functions provide correct answers', { x <- seq(from = -3, to = 3) mu <- 1; sigma <- 2; a <- -2.5; b <- 2.5 expect_equal(test_dtruncnorm(x, mu, sigma, a, b), list( "VectorLog" = c(-Inf, -2.426903727039, -1.801903727039, -1.426903727039, -1.301903727039, -1.426903727039, -Inf), "VectorNoLog" = c(0, 0.088309841083, 0.164984503605, 0.240051036290, 0.272013460429, 0.240051036290, 0), "DoubleLog" = -Inf, "DoubleNoLog" = 0 ) ) x <- x[-1] expect_equal(test_dtruncnorm(x, mu, sigma, a, b), list( "VectorLog" = c(-2.426903727039, -1.801903727039, -1.426903727039, -1.301903727039, -1.426903727039, -Inf), "VectorNoLog" = c(0.088309841083, 0.164984503605, 0.240051036290, 0.272013460429, 0.240051036290, 0), "DoubleLog" = -2.426903727039, "DoubleNoLog" = 0.088309841083 ) ) }) test_that('The distribution functions provide correct answers', { x <- seq(from = -3, to = 3) mu <- 1; sigma <- 2; a <- -2.5; b <- 2.5 expect_equal(test_ptruncnorm(x, mu, sigma, a, b), list( "VectorLog" = c(-Inf, -3.311111927941, -1.821849714602, -1.004802896029, -0.466475412921, -0.118444326645, 0), "VectorNoLog" = c(0, 0.036475592965, 0.161726326547, 0.366116790766, 0.627209029879, 0.888301268992, 1), "DoubleLog" = -Inf, "DoubleNoLog" = 0, "VectorLogNoLower" = c(0, -0.037157459809, -0.176410652516, -0.455890554079, -0.986737418242, -2.191949933685, -Inf), "VectorNoLogNoLower" = c(1, 0.963524407035, 0.838273673453, 0.633883209234, 0.372790970121, 0.111698731008, 0), "DoubleLogNoLower" = 0, "DoubleNoLogNoLower" = 1 ) ) x <- x[-1] expect_equal(test_ptruncnorm(x, mu, sigma, a, b), list( "VectorLog" = c(-3.311111927941, -1.821849714602, -1.004802896029, -0.466475412921, -0.118444326645, 0), "VectorNoLog" = c(0.036475592965, 0.161726326547, 0.366116790766, 0.627209029879, 0.888301268992, 1), "DoubleLog" = -3.311111927941, "DoubleNoLog" = 0.036475592965, "VectorLogNoLower" = c(-0.037157459809, -0.176410652516, -0.455890554079, -0.986737418242, -2.191949933685, -Inf), "VectorNoLogNoLower" = c(0.963524407035, 0.838273673453, 0.633883209234, 0.372790970121, 0.111698731008, 0), "DoubleLogNoLower" = -0.037157459809, "DoubleNoLogNoLower" = 0.963524407035 ) ) x <- x[length(x)] expect_equal(test_ptruncnorm(x, mu, sigma, a, b), list( "VectorLog" = 0, "VectorNoLog" = 1, "DoubleLog" = 0, "DoubleNoLog" = 1, "VectorLogNoLower" = -Inf, "VectorNoLogNoLower" = 0, "DoubleLogNoLower" = -Inf, "DoubleNoLogNoLower" = 0 ) ) }) test_that('The quantile functions provide correct answers', { x <- c(0, 0.5, 1) mu <- 1; sigma <- 2; a <- -2.5; b <- 2.5 expect_equal(test_qtruncnorm_nolog(x, mu, sigma, a, b), list( "VectorNoLog" = c(-2.5, 0.527997768764, 2.5), "DoubleNoLog" = -2.5, "VectorNoLogNoLower" = c(2.5, 0.527997768764, -2.5), "DoubleNoLogNoLower" = 2.5 ) ) x <- c(-1, -2, -10) expect_equal(test_qtruncnorm_log(x, mu, sigma, a, b), list( "VectorLog" = c(0.007336100294, -1.166918217198, -2.499228507645), "DoubleLog" = 0.007336100294, "VectorLogNoLower" = c(1.018056443472, 1.902689539480, 2.499778898288), "DoubleLogNoLower" = 1.018056443472 ) ) }) r-cran-rcppdist-0.1.1/tests/testthat/test_trunct.R000066400000000000000000000117561412660337500222450ustar00rootroot00000000000000context("Truncated t Distribution") test_that('The density functions provide correct answers', { x <- seq(from = -3, to = 3) df <- 1; a <- -2.5; b <- 2.5 expect_equal(test_dtrunct(x, df, a, b), list( "VectorLog" = c(-Inf, -2.476782025634, -1.560491293760, -0.867344113200, -1.560491293760, -2.476782025634, -Inf), "VectorNoLog" = c(0, 0.084013143207, 0.210032858016, 0.420065716033, 0.210032858016, 0.084013143207, 0), "DoubleLog" = -Inf, "DoubleNoLog" = 0 ) ) x <- x[-1] expect_equal(test_dtrunct(x, df, a, b), list( "VectorLog" = c(-2.476782025634, -1.560491293760, -0.867344113200, -1.560491293760, -2.476782025634, -Inf), "VectorNoLog" = c(0.084013143207, 0.210032858016, 0.420065716033, 0.210032858016, 0.084013143207, 0), "DoubleLog" = -2.476782025634, "DoubleNoLog" = 0.084013143207 ) ) }) test_that('The distribution functions provide correct answers', { x <- seq(from = -3, to = 3) df <- 1; a <- -2.5; b <- 2.5 expect_equal(test_ptrunct(x, df, a, b), list( "VectorLog" = c(-Inf, -3.354558641430, -1.771479555136, -0.693147180560, -0.186427363842, -0.035549233639, 0), "VectorNoLog" = c(0, 0.034924781105, 0.170081158122, 0.5, 0.829918841878, 0.965075218895, 1), "DoubleLog" = -Inf, "DoubleNoLog" = 0, "VectorLogNoLower" = c(0, -0.035549233639, -0.186427363842, -0.693147180560, -1.771479555136, -3.354558641430, -Inf), "VectorNoLogNoLower" = c(1, 0.965075218895, 0.829918841878, 0.5, 0.170081158122, 0.034924781105, 0), "DoubleLogNoLower" = 0, "DoubleNoLogNoLower" = 1 ) ) x <- x[-1] expect_equal(test_ptrunct(x, df, a, b), list( "VectorLog" = c(-3.354558641430, -1.771479555136, -0.693147180560, -0.186427363842, -0.035549233639, 0), "VectorNoLog" = c(0.034924781105, 0.170081158122, 0.5, 0.829918841878, 0.965075218895, 1), "DoubleLog" = -3.354558641430, "DoubleNoLog" = 0.034924781105, "VectorLogNoLower" = c(-0.035549233639, -0.186427363842, -0.693147180560, -1.771479555136, -3.354558641430, -Inf), "VectorNoLogNoLower" = c(0.965075218895, 0.829918841878, 0.5, 0.170081158122, 0.034924781105, 0), "DoubleLogNoLower" = -0.035549233639, "DoubleNoLogNoLower" = 0.965075218895 ) ) x <- x[length(x)] expect_equal(test_ptrunct(x, df, a, b), list( "VectorLog" = 0, "VectorNoLog" = 1, "DoubleLog" = 0, "DoubleNoLog" = 1, "VectorLogNoLower" = -Inf, "VectorNoLogNoLower" = 0, "DoubleLogNoLower" = -Inf, "DoubleNoLogNoLower" = 0 ) ) }) test_that('The quantile functions provide correct answers', { x <- c(0, 0.5, 1) df <- 1; a <- -2.5; b <- 2.5 expect_equal(test_qtrunct_nolog(x, df, a, b), list( "VectorNoLog" = c(-2.5, 0, 2.5), "DoubleNoLog" = -2.5, "VectorNoLogNoLower" = c(2.5, 0, -2.5), "DoubleNoLogNoLower" = 2.5 ) ) x <- c(-1, -2, -10) expect_equal(test_qtrunct_log(x, df, a, b), list( "VectorLog" = c(-0.325322483405, -1.180797941894, -2.499216644994), "DoubleLog" = -0.325322483405, "VectorLogNoLower" = c(0.325322483405, 1.180797941894, 2.499216644994), "DoubleLogNoLower" = 0.325322483405 ) ) }) r-cran-rcppdist-0.1.1/vignettes/000077500000000000000000000000001412660337500165405ustar00rootroot00000000000000r-cran-rcppdist-0.1.1/vignettes/RcppDist.Rmd000066400000000000000000000535561412660337500207520ustar00rootroot00000000000000--- title: "RcppDist Introduction" author: "JB Duck-Mayr" date: "`r Sys.Date()`" output: pdf_document vignette: > %\VignetteIndexEntry{RcppDist Introduction} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` The Rcpp package provides a C++ library to make it easier to use C++ with R. R and Rcpp provide functions for a variety of statistical distributions. Several R packages make functions available to R for additional statistical distributions. However, to access these functions from C++ code, a costly call to the R functions must be made.\footnote{Some of the R packages alluded to have written these functions in C++ (in some cases using Rcpp). However, these packages do not make such functions available as a header library for other package writers intending to make use of the functions in C++ code, thus the motivation for this package.} RcppDist provides a C++ header-only library with functions for additional statistical distributions that can be called from C++ when writing code using Rcpp or RcppArmadillo. Functions are available that return NumericVectors as well as doubles, and for multivariate or matrix distributions, Armadillo vectors and matrices. RcppDist provides functions for the following distributions: - the four parameter beta distribution - the location-scale t distribution - the truncated normal distribution - the truncated t distribution - a truncated location-scale t distribution - the triangle distribution - the multivariate normal distribution* - the multivariate t distribution* - the Wishart distribution* - the inverse Wishart distribution* Distributions marked with an asterisk rely on RcppArmadillo. After discussing how to include `RcppDist` headers into your code to use these functions, each function provided by the package is listed (such that you can see the function and argument names, as well as the return and argument types), with a brief explanation. # Including RccpDist in Your Code RcppDist provides several header files you can include in your code. `RcppDist.h` includes all of them, as well as `Rcpp.h` or `RcppArmadillo.h` as appropriate (see "Use Rpp, or RcppArmadillo?" below). So, in any C++ file you need to use functions from RcppDist, you can simply use ```{Rcpp full-include, eval = FALSE} #include ``` which will also take care of Rcpp(Armadillo) headers for you. You can alternatively pull in only the header(s) you need; for example, if you only need functions for the four parameter beta distribution, you can just use ```{Rcpp partial-include, eval = FALSE} #include <4beta.h> ``` However, you'll then be responsible for pulling in Rcpp/RcppArmadillo headers as appropriate. The header names that correspond to the various distributions are as follows: \newpage | Distribution | Header | |:----------------------------|:--------------| | Four Parameter Beta | 4beta.h | | Location-Scale t | lst.h | | Truncated Normal | truncnorm.h | | Truncated t | trunct.h | | Truncated Location-Scale t | trunclst.h | | Triangle | triangular.h | | Multivariate Normal | mvnorm.h | | Multivariate t | mvt.h | | Wishart and Inverse Wishart | wishart.h | ## Using Rcpp, or RcppArmadillo? Including `RcppDist.h` by default will pull in the RcppArmadillo headers (and therefore the Rcpp headers), as well as the RcppDist headers. If you would prefer to use Rcpp but *not* RcppArmadillo (i.e. include the Rcpp headers but not the RcppArmadillo headers), include the line ```{Rcpp dont-use-arma, eval = FALSE} #define RCPPDIST_DONT_USE_ARMA ``` before any inclusion of `RcppDist.h`, though this will make the asterisked (multivariate and Wishart) distributions unavailable. ## Using RcppDist in a Package ### With Rcpp To use RcppDist in a package that does not link to RcppArmadillo, you must - Set up your package to use `Rcpp`, such as via `Rcpp::Rcpp.package.skeleton(your_package)` or `devtools::use_rcpp(your_package)`.\footnote{See the Rcpp-package vignette from Rcpp for more details.} - Add RcppDist to the LinkingTo field of your DESCRIPTION file. - In any C++ file that calls a `RcppDist` function, add `#include ` (or a more specific header from the package such as `lst.h` and `Rcpp.h`) - Remember to define `RCPPDIST_DONT_USE_ARMA` before any include of `RcppDist.h`. ### With RcppArmadillo To use RcppDist in a package that links to RcppArmadillo, you must - Set up your package to use `RcppArmadillo`, such as via `RcppArmadillo::RcppArmadillo.package.skeleton(your_package)`\footnote{See the RcppArmadillo manual or help files for more details, in particular the `RcppArmadillo-package' and `RcppArmadillo.package.skeleton' entries.} - Add RcppDist to the LinkingTo field of your DESCRIPTION file. - In any C++ file that calls a `RcppDist` function, add `#include ` (or a more specific header from the package such as `mvt.h` and `RcppArmadillo.h`) ## Using RcppDist in a Standalone file ### With Rcpp If you are using RcppDist in a standalone file (i.e., not as part of a package), and you don't want to pull in the Armadillo headers, you'll need ```{Rcpp standalone-noarma-full, eval = FALSE} #define RCPPDIST_DONT_USE_ARMA #include // [[Rcpp::depends(RcppDist)]] ``` at the top of your file. If you want to pull in just one or more of the distribution specific headers, you won't need the define, but don't forget to also include `Rcpp.h`; as an example: ```{Rcpp standalone-noarma-partial, eval = FALSE} #include #include // [[Rcpp::depends(RcppDist)]] ``` ### With RcppArmadillo If you are using RcppDist in a standalone file (i.e., not as part of a package), and you do want the Armadillo headers, you'll need ```{Rcpp standalone-arma-full, eval = FALSE} #include // [[Rcpp::depends(RcppArmadillo, RcppDist)]] ``` at the top of your file. If you want to pull in just one or more of the distribution specific headers, don't forget to also include `RcppArmadillo.h`; as an example: ```{Rcpp standalone-arma-partial, eval = FALSE} #include #include // [[Rcpp::depends(RcppArmadillo, RcppDist)]] ``` # RcppDist Functions Much like distributions in R, functions are prefixed by d, p, q, and r to mean density, distribution, quantile, and random number generating functions respectively. Functions that return a double rather than, say, a NumericVector are instead prefixed by d_, p_, q_, and r_. Below are more detailed descriptions of the functions provided by each header. ## 4beta.h (Four Parameter Beta Distribution) The four parameter beta distribution is a beta distribution supported over an interval $[a, b]$ rather than only $[0, 1]$. The functions provided in this header are: ```{Rcpp 4beta, eval = FALSE} Rcpp::NumericVector d4beta(const Rcpp::NumericVector& x, const double shape1, const double shape2, const double a, const double b, const bool log_p = false) Rcpp::NumericVector p4beta(const Rcpp::NumericVector& q, const double shape1, const double shape2, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector q4beta(const Rcpp::NumericVector& p, const double shape1, const double shape2, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector r4beta(const int n, const double shape1, const double shape2, const double a, const double b) double d_4beta(const double x, const double shape1, const double shape2, const double a, const double b, const int log_p = 0) double p_4beta(const double q, const double shape1, const double shape2, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double q_4beta(const double p, const double shape1, const double shape2, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double r_4beta(const double shape1, const double shape2, const double a, const double b) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `shape1` and `shape2` are the positive shape parameters of the Beta distribution - `a` and `b` are the minimum and maximum values of the distribution respectively - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## lst.h (Location-Scale t Distribution) The location-scale t distribution is a t distribution shifted by a location parameter $\mu$ and scaled by a scaling parameter $\sigma$. The functions provided in this header are: ```{Rcpp lst, eval = FALSE} Rcpp::NumericVector dlst(const Rcpp::NumericVector& x, const double df, const double mu, const double sigma, const bool log_p = false) Rcpp::NumericVector plst(const Rcpp::NumericVector& q, const double df, const double mu, const double sigma, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector qlst(const Rcpp::NumericVector& p, const double df, const double mu, const double sigma, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector rlst(const int n, const double df, const double mu, const double sigma) double d_lst(const double x, const double df, const double mu, const double sigma, const int log_p = 0) double p_lst(const double q, const double df, const double mu, const double sigma, const int lower_tail = 1, const int log_p = 0) double q_lst(const double p, const double df, const double mu, const double sigma, const int lower_tail = 1, const int log_p = 0) double r_lst(const double df, const double mu, const double sigma) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `df` is the positive degrees of freedom - `mu` is the location/shifting parameter - `sigma` is the scaling parameter - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## truncnorm.h (Truncated Normal Distribution) The truncated normal distribution is a normal distribution supported over an interval $[a, b]$ rather than $(-\infty, \infty)$. The functions provided in this header are: ```{Rcpp truncnorm, eval = FALSE} Rcpp::NumericVector dtruncnorm(const Rcpp::NumericVector& x, const double mu, const double sigma, const double a, const double b, const bool log_p = false) Rcpp::NumericVector ptruncnorm(const Rcpp::NumericVector& x, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector qtruncnorm(const Rcpp::NumericVector& p, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector rtruncnorm(const int n, const double mu, const double sigma, const double a, const double b) double d_truncnorm(const double x, const double mu, const double sigma, const double a, const double b, const int log_p = 0) double p_truncnorm(const double x, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double q_truncnorm(const double p, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double r_truncnorm(const double mu, const double sigma, const double a, const double b) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `mu` is the mean of the distribution - `sigma` is the standard deviation - `a` and `b` are the minimum and maximum values of the distribution respectively - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## trunct.h (Truncated t Distribution) The truncated t distribution is a t distribution supported over an interval $[a, b]$ rather than $(-\infty, \infty)$. The functions provided in this header are: ```{Rcpp trunct, eval = FALSE} Rcpp::NumericVector dtrunct(const Rcpp::NumericVector& x, const double df, const double a, const double b, const bool log_p = false) Rcpp::NumericVector ptrunct(const Rcpp::NumericVector& x, const double df, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector qtrunct(const Rcpp::NumericVector& p, const double df, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector rtrunct(const int n, const double df, const double a, const double b) double d_trunct(const double x, const double df, const double a, const double b, const int log_p = 0) double p_trunct(const double x, const double df, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double q_trunct(const double p, const double df, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double r_trunct(const double df, const double a, const double b) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `df` is the positive degrees of freedom - `a` and `b` are the minimum and maximum values of the distribution respectively - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## trunclst.h (Truncated Location-Scale t Distribution) The truncated location-scale t distribution is a location-scale t distribution supported over an interval $[a, b]$ rather than $(-\infty, \infty)$. The functions provided in this header are: ```{Rcpp trunclst, eval = FALSE} Rcpp::NumericVector dtrunclst(const Rcpp::NumericVector& x, const double df, const double mu, const double sigma, const double a, const double b, const bool log_p = false) Rcpp::NumericVector ptrunclst(const Rcpp::NumericVector& x, const double df, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector qtrunclst(const Rcpp::NumericVector& p, const double df, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector rtrunclst(const int n, const double df, const double mu, const double sigma, const double a, const double b) double d_trunclst(const double x, const double df, const double mu, const double sigma, const double a, const double b, const int log_p = 0) double p_trunclst(const double x, const double df, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double q_trunclst(const double p, const double df, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double r_trunclst(const double df, const double mu, const double sigma, const double a, const double b) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `df` is the positive degrees of freedom - `mu` is the location/shifting parameter - `sigma` is the scaling parameter - `a` and `b` are the minimum and maximum values of the distribution respectively - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## triangular.h (Triangle Distribution) The triangle (or triangular) distribution is supported over an interval $[a, b]$ with a mode $c$; as the name suggests, the density function is shaped like a triangle with vertices at $a$, $b$, and $c$. The functions provided in this header are: ```{Rcpp triangle, eval = FALSE} double d_tri(const double x, const double a, const double b, const double c, const int log_p = 0) double p_tri(const double x, const double a, const double b, const double c, const int lower_tail = 1, const int log_p = 0) double q_tri(const double p, const double a, const double b, const double c, const int lower_tail = 1, const int log_p = 0) double r_tri(const double a, const double b, const double c) Rcpp::NumericVector dtri(const Rcpp::NumericVector& x, const double a, const double b, const double c, const bool log_p = false) Rcpp::NumericVector ptri(const Rcpp::NumericVector& x, const double a, const double b, const double c, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector qtri(const Rcpp::NumericVector& p, const double a, const double b, const double c, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector rtri(const int n, const double a, const double b, const double c) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `a` and `b` are the minimum and maximum values of the distribution respectively - `c` is the mode of the distribution - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## mvnorm.h (Multivariate Normal Distribution) The multivariate normal distribution is a generalization of the normal distribution to multiple dimensions. Then each draw is a vector, the mean parameter $\mu$ is a vector, and rather than a scalar standard deviation parameter $\sigma$, we have a covariance matrix $\Sigma$ (or here denoted $S$). The functions provided in this header are: ```{Rcpp mvnorm, eval = FALSE} arma::vec dmvnorm(const arma::mat& x, const arma::vec& mu, const arma::mat& S, const bool log_p = false) arma::mat rmvnorm(const arma::uword n, const arma::vec& mu, const arma::mat& S) ``` Where - `x` is a matrix of quantiles, such that each row is a quantile - `n` is the numer of observations to draw - `mu` is the mean vector - `S` is the covariance matrix - `log_p` is a `bool` (the default is `false`); if `true`, the probabilities are given as $\log(p)$ ## mvt.h (Multivariate t Distribution) The multivariate t distribution is a generalization of the t distribution to multiple dimensions. Then each draw is a vector, and in addition to the degrees of freedom, we have a correlation matrix $\Sigma$ (or here denoted $S$), and this implementation allows for a location vector $\mu$. The functions provided in this header are: ```{Rcpp mvt, eval = FALSE} arma::vec dmvt(const arma::mat& x, const arma::vec& mu, const arma::mat& S, const double df, const bool log_p = false) arma::mat rmvt(const arma::uword n, const arma::vec& mu, const arma::mat& S, const double df) ``` Where - `x` is a matrix of quantiles, such that each row is a quantile - `n` is the numer of observations to draw - `mu` is the location vector - `S` is the correlation matrix - `log_p` is a `bool` (the default is `false`); if `true`, the probabilities are given as $\log(p)$ ## wishart.h (Wishart and Inverse Wishart Distributions) The Wishart distribution is a generalization of the gamma distribution to multiple dimensions defined over symmetric, nonnegative-definite random matrices. Its parameters are the degrees of freedom and a scale matrix $S$. If $X \sim$ Wishart(df, $S$), then $X^{-1} \sim$ Inverse Wishart(df, $S^{-1}$). Due to their use in the density functions for these distributions, a multivariate gamma function and logged multivariate gamma function are also provided. Note that for now, all functions for this distribution are designed to deal with only one random matrix. The functions provided in this header are: ```{Rcpp wishart, eval = FALSE} double mvgamma(const int p, const double x) double lmvgamma(const int p, const double x) double dwish(const arma::mat& X, const int df, const arma::mat& S, const bool log_p = false) arma::mat rwish(const int df, const arma::mat& S) double diwish(const arma::mat& X, const int df, const arma::mat& S, const bool log_p = false) arma::mat riwish(const int df, const arma::mat& S) ``` Where - `p` and `x` are the arguments to the multivariate gamma function - `X` is a matrix, a draw from the Wishart or Inverse Wishart distribution - `df` is the degrees of feedom - `S` is the scale matrix - `log_p` is a `bool` (the default is `false`); if `true`, the probabilities are given as $\log(p)$