DRIMSeq/DESCRIPTION0000644000175200017520000000520614710277103014513 0ustar00biocbuildbiocbuildPackage: DRIMSeq Type: Package Title: Differential transcript usage and tuQTL analyses with Dirichlet-multinomial model in RNA-seq Version: 1.34.0 Date: 2017-05-24 Authors@R: c(person(given = "Malgorzata", family = "Nowicka", role = c("aut", "cre"), email = "gosia.nowicka.uzh@gmail.com")) Description: The package provides two frameworks. One for the differential transcript usage analysis between different conditions and one for the tuQTL analysis. Both are based on modeling the counts of genomic features (i.e., transcripts) with the Dirichlet-multinomial distribution. The package also makes available functions for visualization and exploration of the data and results. biocViews: ImmunoOncology, SNP, AlternativeSplicing, DifferentialSplicing, Genetics, RNASeq, Sequencing, WorkflowStep, MultipleComparison, GeneExpression, DifferentialExpression License: GPL (>= 3) Depends: R (>= 3.4.0) Imports: utils, stats, MASS, GenomicRanges, IRanges, S4Vectors, BiocGenerics, methods, BiocParallel, limma, edgeR, ggplot2, reshape2 Suggests: PasillaTranscriptExpr, GeuvadisTranscriptExpr, grid, BiocStyle, knitr, testthat ByteCompile: false VignetteBuilder: knitr Collate: 'DRIMSeq.R' 'class_show_utils.R' 'class_MatrixList.R' 'class_dmDSdata.R' 'class_dmDSprecision.R' 'class_dmDSfit.R' 'class_dmDStest.R' 'class_dmSQTLdata.R' 'class_dmSQTLprecision.R' 'class_dmSQTLfit.R' 'class_dmSQTLtest.R' 'dmDS_CRadjustment.R' 'dmDS_estimateCommonPrecision.R' 'dmDS_estimateTagwisePrecision.R' 'dmDS_filter.R' 'dmDS_fit.R' 'dmDS_profileLik.R' 'dmSQTL_CRadjustment.R' 'dmSQTL_estimateCommonPrecision.R' 'dmSQTL_estimateTagwisePrecision.R' 'dmSQTL_filter.R' 'dmSQTL_fit.R' 'dmSQTL_permutations.R' 'dmSQTL_profileLik.R' 'dm_CRadjustmentManyGroups.R' 'dm_CRadjustmentOneGroup.R' 'dm_CRadjustmentRegression.R' 'dm_LRT.R' 'dm_core_Hessian.R' 'dm_core_colorb.R' 'dm_core_deviance.R' 'dm_core_lik.R' 'dm_core_score.R' 'dm_estimateMeanExpression.R' 'dm_fitManyGroups.R' 'dm_fitOneGroup.R' 'dm_fitRegression.R' 'dm_plotData.R' 'dm_plotPrecision.R' 'dm_plotProportions.R' 'dm_plotPvalues.R' 'dm_profileLikModeration.R' RoxygenNote: 6.0.1 git_url: https://git.bioconductor.org/packages/DRIMSeq git_branch: RELEASE_3_20 git_last_commit: cbf534d git_last_commit_date: 2024-10-29 Repository: Bioconductor 3.20 Date/Publication: 2024-10-29 NeedsCompilation: no Packaged: 2024-10-30 00:30:59 UTC; biocbuild Author: Malgorzata Nowicka [aut, cre] Maintainer: Malgorzata Nowicka DRIMSeq/MD50000644000175200017520000001054414710277103013316 0ustar00biocbuildbiocbuild3d059ca406657758518649c1a9fa440c *DESCRIPTION db840703c35812deb50f4dd28629ac4e *NAMESPACE 7d3c2dfa4ed88be13ecb61f17ab71f38 *NEWS b26dd2ca4f83f4ab33242c6700770b4f *R/DRIMSeq.R 4f7778b678d90489b198289ad508c852 *R/class_MatrixList.R eb7f6f2af1c865265d207bdfeb37e1b2 *R/class_dmDSdata.R edcf7fc6c8c3be8a2f7e548ac6329353 *R/class_dmDSfit.R 376db9fb99714696ebc3a5e06ae6952c *R/class_dmDSprecision.R dbc16aa52726f23aae10955acd3293fc *R/class_dmDStest.R c4e607e8f3b2dc013fdc8625ca90cbcc *R/class_dmSQTLdata.R 205847ef5f8d8b74f02b28f163994c27 *R/class_dmSQTLfit.R 73e45e5bd4f64ff0ff79936ec7dd76fb *R/class_dmSQTLprecision.R d851e5acbda25152cef405d237ee9cb7 *R/class_dmSQTLtest.R ef9a90d57e9220a04f53ac2b67dbbcff *R/class_show_utils.R 3dec5c07ab5fb370cc5d6b6f3c41216c *R/dmDS_CRadjustment.R 50b75fcab6150e7f6175e51eb9ddf023 *R/dmDS_estimateCommonPrecision.R 6d01dcdf92c2280f385962eb078e46f3 *R/dmDS_estimateTagwisePrecision.R 4061b6effc8733b4836c44b66a62ac6e *R/dmDS_filter.R 00ffd84a822f1a66ecedb3c73dd61428 *R/dmDS_fit.R 854b8bfdbdf95214d8648962a65eb260 *R/dmDS_profileLik.R 233b916bb66be5b89e0572e0a9593fdd *R/dmSQTL_CRadjustment.R 4fb514aee35d102677df95959b4b06b1 *R/dmSQTL_estimateCommonPrecision.R b14b1cf79292c55021ae1c4242058148 *R/dmSQTL_estimateTagwisePrecision.R d6da8b7d364caf06b0b578555fbed146 *R/dmSQTL_filter.R e98c6422d72246538b2b9053aa40d8ae *R/dmSQTL_fit.R f81b1244c47c171718b839d57cd59d53 *R/dmSQTL_permutations.R e495df0f854b5b70559618ecdb35f387 *R/dmSQTL_profileLik.R 6be86b7a2e991c65c442ca79e2463a8d *R/dm_CRadjustmentManyGroups.R cf9b9cc22e1ef1c0935a96f8f6d63771 *R/dm_CRadjustmentOneGroup.R 091f98644092f1544e888225ad4d86b3 *R/dm_CRadjustmentRegression.R ba125d1bc261ba4b53360f0154b1eaca *R/dm_LRT.R e7672f4839330055becc6851269df5ea *R/dm_core_Hessian.R 55d426df69a8aad2a987627cd7f82d8d *R/dm_core_colorb.R aa3c2cbc1ad0950792cfe6573984221d *R/dm_core_deviance.R f3ea68655c1e326e028724d17ebebc67 *R/dm_core_lik.R 0860610995bbc54e044a15ce1255715d *R/dm_core_score.R c738cf0bd27a0a5c5324fcdd9d4f0ca0 *R/dm_estimateMeanExpression.R 9e2406be3bcfb58c78fc1f8477aaaa2f *R/dm_fitManyGroups.R 4f84eb0b7d527537b86ea1f75f21a0a3 *R/dm_fitOneGroup.R ef105ba6d44dd5360da4a7ae9f80164f *R/dm_fitRegression.R 1db1733e9380aa1a5a856a1b5d012448 *R/dm_plotData.R 792e91c762d0f103ab581151ee91a467 *R/dm_plotPrecision.R 582d746911fe03bffb869d8e754c383a *R/dm_plotProportions.R 69674880adefac45b928ecc0e7047d01 *R/dm_plotPvalues.R 5e4a0f8823ec8116c4293760925e8f99 *R/dm_profileLikModeration.R 49a70d17a95eceed2e42d4dd970e2a63 *README.md 69407cf5f7b8628d37e9cab9de7cb204 *build/vignette.rds c04e7804b9fbc76d39fe8d03938e867f *inst/CITATION f015e37a5377bae5c705dc7f0a2fe748 *inst/doc/DRIMSeq.R b52ef2a22355944d60f3167c13c166a9 *inst/doc/DRIMSeq.Rnw 9fb5db2a74cac6f000d960bf00144e52 *inst/doc/DRIMSeq.pdf 7cc16a0e0f38a412fce342761870866b *man/MatrixList-class.Rd d65585b968165c712404ff5bfe8b7194 *man/dmDSdata-class.Rd d1e743dfdd7222b8ef91117bafc54757 *man/dmDSdata.Rd df78f530f400950425391d1811827643 *man/dmDSfit-class.Rd 5e787c8ff38c17f28098a52c9256afb2 *man/dmDSprecision-class.Rd dd2be32cff17b12c7b7f90df8b1fc6f6 *man/dmDStest-class.Rd 4dcb5f63b8ff6a4f0e13287d40b1d220 *man/dmFilter.Rd 58fddefa5ab0830fe1dbba1ef8634888 *man/dmFit.Rd 8160321877c06baca3e3879f06edea39 *man/dmPrecision.Rd aa278806d7769e77668911ff79847215 *man/dmSQTLdata-class.Rd dd1e9145c25faf31a6617895e497caab *man/dmSQTLdata.Rd b624199a2e08debdbeaf9cd9de8d55d0 *man/dmSQTLfit-class.Rd 1d6a99e22e302b5c89135784660f29bb *man/dmSQTLprecision-class.Rd c2238e9a2a0f4570104d28a413bb7aaa *man/dmSQTLtest-class.Rd 4f00239eebfee78bb3034a472b31118c *man/dmTest.Rd 5b8e6bb608cb55ba07a78e7b65d41778 *man/dm_plotDataDSInfo.Rd 62838a53de2615a529dfbc85dc6d9eee *man/dm_plotProportions.Rd 008242fcc12baa8bad5da9e0076f020e *man/plotData.Rd a1c733b13c20dd1d7538cc3538555834 *man/plotPValues.Rd 3d13d7989e8437df55c076ed8d1eb1e4 *man/plotPrecision.Rd 25523d6a5b9a6beadf3eb6eb38ced36f *man/plotProportions.Rd 7dc776b3e4165d707e3fc81151b9164f *tests/testthat.R a506cc02e276837e39ffae9dfa580cde *tests/testthat/test_MatrixList.R 7b3b9b6715a0b7ba12c4a7a3cd03f83e *tests/testthat/test_dm_adjustment.R 196c0973cd01e70d7a0c1cea3c20c222 *tests/testthat/test_gene_filter.R c98ed71e800c41126d5b98c8d367d2aa *tests/testthat/test_lik_score.R 337e9b8a0487f6bb392c003802ca9a48 *tests/testthat/test_total_switch.R b52ef2a22355944d60f3167c13c166a9 *vignettes/DRIMSeq.Rnw 4d51b6c2d60e8d7e9abb93725b2c5824 *vignettes/References.bib DRIMSeq/NAMESPACE0000644000175200017520000000567114710222503014224 0ustar00biocbuildbiocbuild# Generated by roxygen2: do not edit by hand export("common_precision<-") export("genewise_precision<-") export(common_precision) export(dmDSdata) export(dmFilter) export(dmFit) export(dmPrecision) export(dmSQTLdata) export(dmTest) export(genewise_precision) export(mean_expression) export(plotData) export(plotPValues) export(plotPrecision) export(plotProportions) export(proportions) export(results) export(samples) exportMethods("$") exportMethods("[") exportMethods("[[") exportMethods("colnames<-") exportMethods("common_precision<-") exportMethods("genewise_precision<-") exportMethods("names<-") exportMethods("rownames<-") exportMethods(coefficients) exportMethods(colnames) exportMethods(common_precision) exportMethods(counts) exportMethods(design) exportMethods(dim) exportMethods(dmFilter) exportMethods(dmFit) exportMethods(dmPrecision) exportMethods(dmTest) exportMethods(elementNROWS) exportMethods(genewise_precision) exportMethods(length) exportMethods(mean_expression) exportMethods(names) exportMethods(ncol) exportMethods(nrow) exportMethods(plotData) exportMethods(plotPValues) exportMethods(plotPrecision) exportMethods(plotProportions) exportMethods(proportions) exportMethods(results) exportMethods(rownames) exportMethods(samples) import(BiocGenerics) import(BiocParallel) import(GenomicRanges) import(edgeR) import(methods) importFrom(IRanges,width) importFrom(S4Vectors,elementNROWS) importFrom(S4Vectors,queryHits) importFrom(S4Vectors,subjectHits) importFrom(ggplot2,aes_string) importFrom(ggplot2,coord_cartesian) importFrom(ggplot2,element_blank) importFrom(ggplot2,element_text) importFrom(ggplot2,geom_bar) importFrom(ggplot2,geom_boxplot) importFrom(ggplot2,geom_histogram) importFrom(ggplot2,geom_hline) importFrom(ggplot2,geom_jitter) importFrom(ggplot2,geom_line) importFrom(ggplot2,geom_point) importFrom(ggplot2,geom_ribbon) importFrom(ggplot2,geom_text) importFrom(ggplot2,geom_vline) importFrom(ggplot2,ggplot) importFrom(ggplot2,ggtitle) importFrom(ggplot2,guide_colorbar) importFrom(ggplot2,guide_legend) importFrom(ggplot2,guides) importFrom(ggplot2,position_dodge) importFrom(ggplot2,position_jitterdodge) importFrom(ggplot2,scale_colour_gradient) importFrom(ggplot2,scale_colour_manual) importFrom(ggplot2,scale_fill_manual) importFrom(ggplot2,scale_x_discrete) importFrom(ggplot2,theme) importFrom(ggplot2,theme_bw) importFrom(ggplot2,xlab) importFrom(ggplot2,ylab) importFrom(limma,nonEstimable) importFrom(reshape2,melt) importFrom(stats,aggregate) importFrom(stats,complete.cases) importFrom(stats,constrOptim) importFrom(stats,loess) importFrom(stats,loess.control) importFrom(stats,median) importFrom(stats,model.matrix) importFrom(stats,na.omit) importFrom(stats,nlm) importFrom(stats,nlminb) importFrom(stats,optim) importFrom(stats,optimHess) importFrom(stats,optimize) importFrom(stats,p.adjust) importFrom(stats,pchisq) importFrom(stats,predict) importFrom(stats,quantile) importFrom(stats,runif) importFrom(utils,head) importFrom(utils,tail) DRIMSeq/NEWS0000755000175200017520000000324514710222503013502 0ustar00biocbuildbiocbuildv0.99.0: - Bioconductor submission. v1.1.2: - Bioconductor accepted devel version. v1.1.3: - New features: i) The level of moderation is calculated automatically. ii) Permutation approach to adjust p-values in sQTL analyses. v1.1.4: - Use data frames with counts and genotypes when creating the dmDSdata and dmSQTLdata objects. v1.3.1: - Equals to v1.1.4. v1.3.2: - Implementation of the two-stage test dmTwoStageTest(). v1.3.3: - Implementation of the regression framework and feature-level analysis. Additionally: i) Removing max_features argument from dmFilter. ii) Keeping only the grid approach for estimating tagwise dispersion. iii) Allow to use only a subset of genes (disp_subset parameter) in common dispersion estimation to speed up the calculations; if disp_subset < 1, use set.seed() to make the analysis reproducible. iv) Always use tagwise dispersion for fitting full and null models. v) In one group fitting, return NA for tags having the last feature with zero counts in all samples. We always use the q-th feature as a denominator in logit calculation. In such a case all the logits are anyways Inf. vi) Use plotPValues instead of plotTest vii) Use 'prop' instead of 'pi' and 'disp' instead of 'gamma0'. viii) Use only 'constrOptim' (old 'constrOptimG') to estimate proportions and 'optim' to estimate coefficients in the regression model. ix) Use plotProportions instead of plotFit. x) No 'out_dir' parameter in plotting functions. All plotting functions return a ggplot object. xi) Use term "precision" instead of "dispersion" as in DRIMSeq we directly estimate the precision parameter. Dispersion can be calculated with formula: dispersion = 1 / (1 + precision).DRIMSeq/R/0000755000175200017520000000000014710222503013175 5ustar00biocbuildbiocbuildDRIMSeq/R/DRIMSeq.R0000755000175200017520000001115414710222503014531 0ustar00biocbuildbiocbuild#' @import BiocGenerics #' @import methods #' @import BiocParallel #' @import edgeR #' @import GenomicRanges NULL # ### EXAMPLES ### # # -------------------------------------------------------------------------- # # Create dmDSdata object # # -------------------------------------------------------------------------- # ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package # # library(PasillaTranscriptExpr) # # data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") # # ## Load metadata # pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), # header = TRUE, as.is = TRUE) # # ## Load counts # pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), # header = TRUE, as.is = TRUE) # # ## Create a pasilla_samples data frame # pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, # group = pasilla_metadata$condition) # levels(pasilla_samples$group) # # ## Create a dmDSdata object # d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) # # ## Use a subset of genes, which is defined in the following file # gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) # # d <- d[names(d) %in% gene_id_subset, ] # # # -------------------------------------------------------------------------- # # Differential transcript usage analysis - simple two group comparison # # -------------------------------------------------------------------------- # # ## Filtering # ## Check what is the minimal number of replicates per condition # table(samples(d)$group) # # d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, # min_gene_expr = 10, min_feature_expr = 10) # # plotData(d) # # ## Create the design matrix # design_full <- model.matrix(~ group, data = samples(d)) # # ## To make the analysis reproducible # set.seed(123) # ## Calculate precision # d <- dmPrecision(d, design = design_full) # # plotPrecision(d) # # head(mean_expression(d)) # common_precision(d) # head(genewise_precision(d)) # # ## Fit full model proportions # d <- dmFit(d, design = design_full) # # ## Get fitted proportions # head(proportions(d)) # ## Get the DM regression coefficients (gene-level) # head(coefficients(d)) # ## Get the BB regression coefficients (feature-level) # head(coefficients(d), level = "feature") # # ## Fit null model proportions and perform the LR test to detect DTU # d <- dmTest(d, coef = "groupKD") # # ## Plot the gene-level p-values # plotPValues(d) # # ## Get the gene-level results # head(results(d)) # # ## Plot feature proportions for a top DTU gene # res <- results(d) # res <- res[order(res$pvalue, decreasing = FALSE), ] # # top_gene_id <- res$gene_id[1] # # plotProportions(d, gene_id = top_gene_id, group_variable = "group") # # plotProportions(d, gene_id = top_gene_id, group_variable = "group", # plot_type = "lineplot") # # plotProportions(d, gene_id = top_gene_id, group_variable = "group", # plot_type = "ribbonplot") # # # # # # # # -------------------------------------------------------------------------- # # Create dmSQTLdata object # # -------------------------------------------------------------------------- # # Use subsets of data defined in the GeuvadisTranscriptExpr package # # library(GeuvadisTranscriptExpr) # # geuv_counts <- GeuvadisTranscriptExpr::counts # geuv_genotypes <- GeuvadisTranscriptExpr::genotypes # geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges # geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges # # colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") # colnames(geuv_genotypes)[4] <- "snp_id" # geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) # # d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, # genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, # samples = geuv_samples, window = 5e3) # # # -------------------------------------------------------------------------- # # sQTL analysis - simple group comparison # # -------------------------------------------------------------------------- # # ## Filtering # d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, # minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) # # plotData(d) # # ## To make the analysis reproducible # set.seed(123) # ## Calculate precision # d <- dmPrecision(d) # # plotPrecision(d) # # ## Fit full model proportions # d <- dmFit(d) # # ## Fit null model proportions, perform the LR test to detect tuQTLs # ## and use the permutation approach to adjust the p-values # d <- dmTest(d) # # ## Plot the gene-level p-values # plotPValues(d) # # ## Get the gene-level results # head(results(d)) DRIMSeq/R/class_MatrixList.R0000644000175200017520000002073414710222503016613 0ustar00biocbuildbiocbuild#' @include class_show_utils.R NULL ############################################################################### ### MatrixList class ############################################################################### #' MatrixList object #' #' A MatrixList object is a container for a list of matrices which have the same #' number of columns but can have varying number of rows. Additionally, one can #' store an extra information corresponding to each of the matrices in #' \code{metadata} matrix. #' #' @return #' #' \itemize{ #' \item \code{names(x)}, \code{names(x) <- value}: Get or set names #' of matrices. #' \item \code{rownames(x)}, \code{rownames(x) <- value}, #' \code{colnames(x)}, \code{colnames(x) <- value}: Get or set row names or #' column names of unlistData slot. #' \item \code{length(x)}: Get the number of #' matrices in a list. #' \item \code{elementNROWS(x)}: Get the number of rows of each of #' the matrices. #' \item \code{dim(x)}, \code{nrow(x)}, \code{ncol(x)}: Get the #' dimensions, number of rows or number of columns of unlistData slot. #' \item #' \code{x[[i]]}, \code{x[[i, j]]}: Get the matrix i, and optionally, get only #' columns j of this matrix. #' \item \code{x$name}: Shortcut for #' \code{x[["name"]]}. #' \item \code{x[i, j]}: Get a subset of MatrixList that #' consists of matrices i with columns j. } #' #' @param x MatrixList object. #' @param value,i,j,name Parameters used for subsetting and assigning new #' attributes to x. #' #' @slot unlistData Matrix which is a row binding of all the matrices in a list. #' @slot partitioning List of indexes which defines the row partitioning of #' unlistData matrix into the original matrices. #' #' @slot metadata Matrix of additional information where each row corresponds to #' one of the matrices in a list. #' @author Malgorzata Nowicka setClass("MatrixList", representation(unlistData = "matrix", partitioning = "list", metadata = "matrix")) ################################### setValidity("MatrixList", function(object){ # has to return TRUE when valid object! partitioning_unlist <- unlist(object@partitioning) if(length(partitioning_unlist) == nrow(object@unlistData)) out <- TRUE else return(paste0("Unequal lengths of partitioning indexes and rows in unlistData: ", length(partitioning_unlist), " and ", nrow(object@unlistData))) if(nrow(object@metadata) > 0){ if(nrow(object@metadata) == length(object@partitioning)) out <- TRUE else return(paste0("Unequal lengths of partitioning and metadata: ", length(object@partitioning), " and ", nrow(object@metadata))) } return(out) }) ############################################################################### ### MatrixList ############################################################################### MatrixList <- function(..., metadata){ listData <- list(...) if (length(listData) == 1L && is.list(listData[[1L]])) listData <- listData[[1L]] if (length(listData) == 0L) { return(new("MatrixList")) } else { if (!all(sapply(listData, is, "matrix"))) stop("all elements in '...' must be matrices!") unlistData <- do.call(rbind, listData) w <- sapply(listData, nrow) partitioning <- vector("list", length(w)) inds <- 1:nrow(unlistData) names(inds) <- rownames(unlistData) partitioning[w != 0] <- split(inds, rep(1:length(w), w)) if(!is.null(names(listData))) names(partitioning) <- names(listData) if(!missing(metadata)) return(new("MatrixList", unlistData = unlistData, partitioning = partitioning, metadata = metadata)) else return(new("MatrixList", unlistData = unlistData, partitioning = partitioning)) } } ################################################################################ ### show method ################################################################################ setMethod("show", "MatrixList", function(object){ nhead <- 2 nl <- length(object) cat(mode(object@unlistData),"MatrixList of length", nl,"\n") if(nl > 0){ np <- min(nl, nhead) object_sub <- object[1:np] if(is.null(names(object_sub))) print_names <- paste0("[[", 1:np, "]]\n") else print_names <- paste0("$", names(object_sub), "\n") for(i in 1:np){ # i = 1 cat(print_names[i]) show_matrix(object_sub[[i]]) cat("\n") } if(np < nl){ if(is.null(names(object_sub))) cat(paste0("[[...]]\n")) else cat(paste0("$...\n")) } } if(nrow(object@metadata) != 0){ cat("\nwith metadata slot\n") show_matrix(object@metadata) } }) ############################################################################### ### accessing methods ############################################################################### #' @rdname MatrixList-class #' @export setMethod("names", "MatrixList", function(x){ names(x@partitioning) }) #' @rdname MatrixList-class #' @export setMethod("names<-", "MatrixList", function(x, value){ names(x@partitioning) <- value x }) #' @rdname MatrixList-class #' @export setMethod("rownames", "MatrixList", function(x){ rownames(x@unlistData) }) #' @rdname MatrixList-class #' @export setMethod("rownames<-", "MatrixList", function(x, value){ rownames(x@unlistData) <- value x }) #' @rdname MatrixList-class #' @export setMethod("colnames", "MatrixList", function(x){ colnames(x@unlistData) }) #' @rdname MatrixList-class #' @export setMethod("colnames<-", "MatrixList", function(x, value){ colnames(x@unlistData) <- value x }) #' @rdname MatrixList-class #' @export setMethod("length", "MatrixList", function(x){ length(x@partitioning) }) #' @rdname MatrixList-class #' @export #' @importFrom S4Vectors elementNROWS setMethod("elementNROWS", "MatrixList", function(x){ sapply(x@partitioning, length) }) #' @rdname MatrixList-class #' @export setMethod("dim", "MatrixList", function(x){ dim(x@unlistData) }) #' @rdname MatrixList-class #' @export setMethod("nrow", "MatrixList", function(x){ nrow(x@unlistData) }) #' @rdname MatrixList-class #' @export setMethod("ncol", "MatrixList", function(x){ ncol(x@unlistData) }) ############################################################################### ### subsetting methods ############################################################################### #' @aliases [[,MatrixList-method #' @rdname MatrixList-class #' @export setMethod("[[", signature(x = "MatrixList"), function(x, i, j){ if(!missing(j)) return(x@unlistData[x@partitioning[[i]], j , drop = FALSE]) else return(x@unlistData[x@partitioning[[i]], , drop = FALSE]) }) #' @rdname MatrixList-class #' @export setMethod("$", "MatrixList", function(x, name){ x[[name]] }) ################################ #' @aliases [,MatrixList-method [,MatrixList,ANY-method #' @rdname MatrixList-class #' @export setMethod("[", signature(x = "MatrixList"), function(x, i, j){ if(!missing(i)){ if(!missing(j)){ if(nrow(x@metadata) != 0) return(new("MatrixList", unlistData = x@unlistData[unlist(x@partitioning[i]), j, drop = FALSE], partitioning = relist(1:nrow(x@unlistData), x@partitioning[i]), metadata = x@metadata[i, , drop = FALSE])) else return(new("MatrixList", unlistData = x@unlistData[unlist(x@partitioning[i]), j, drop = FALSE], partitioning = relist(1:nrow(x@unlistData), x@partitioning[i]), metadata = x@metadata)) }else{ if(nrow(x@metadata) != 0) return(new("MatrixList", unlistData = x@unlistData[unlist(x@partitioning[i]), , drop = FALSE], partitioning = relist(1:nrow(x@unlistData), x@partitioning[i]), metadata = x@metadata[i, , drop = FALSE])) else return(new("MatrixList", unlistData = x@unlistData[unlist(x@partitioning[i]), , drop = FALSE], partitioning = relist(1:nrow(x@unlistData), x@partitioning[i]), metadata = x@metadata)) } }else{ if(!missing(j)){ return(new("MatrixList", unlistData = x@unlistData[, j, drop = FALSE], partitioning = x@partitioning, metadata = x@metadata)) }else{ return(x) } } }) DRIMSeq/R/class_dmDSdata.R0000644000175200017520000004355314710222503016200 0ustar00biocbuildbiocbuild#' @include class_MatrixList.R NULL ############################################################################### ### dmDSdata class ############################################################################### #' dmDSdata object #' #' dmDSdata contains expression, in counts, of genomic features such as exons or #' transcripts and sample information needed for the differential #' exon/transcript usage (DEU or DTU) analysis. It can be created with function #' \code{\link{dmDSdata}}. #' #' @return #' #' \itemize{ \item \code{counts(object)}: Get a data frame with counts. \item #' \code{samples(x)}: Get a data frame with the sample information. \item #' \code{names(x)}: Get the gene names. \item \code{length(x)}: Get the number #' of genes. \item \code{x[i, j]}: Get a subset of dmDSdata object that consists #' of counts for genes i and samples j. } #' #' @param object,x dmDSdata object. #' @param i,j Parameters used for subsetting. #' @param ... Other parameters that can be defined by methods using this #' generic. #' #' @slot counts \code{\linkS4class{MatrixList}} of expression, in counts, of #' genomic features. Rows correspond to genomic features, such as exons or #' transcripts. Columns correspond to samples. MatrixList is partitioned in a #' way that each of the matrices in a list contains counts for a single gene. #' @slot samples Data frame with information about samples. It must contain #' \code{sample_id} variable with unique sample names and other covariates #' that desribe samples and are needed for the differential analysis. #' #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' } #' @author Malgorzata Nowicka #' @seealso \code{\linkS4class{dmDSprecision}}, \code{\linkS4class{dmDSfit}}, #' \code{\linkS4class{dmDStest}} setClass("dmDSdata", representation(counts = "MatrixList", samples = "data.frame")) ############################### setValidity("dmDSdata", function(object){ # has to return TRUE when valid object! if(!ncol(object@counts) == nrow(object@samples)) return(paste0("Unequal number of samples in 'counts' and 'samples' ", ncol(object@counts), " and ", nrow(object@samples), "!")) if(!all(c("sample_id") %in% colnames(object@samples))) return("'samples' must contain 'sample_id' variable!") if(!length(unique(object@samples$sample_id)) == nrow(object@samples)) return("There must be a unique 'sample_id' for each sample!") if(!all(colnames(object@counts) == object@samples$sample_id)) return("Column names of 'counts' must be the same as 'sample_id' in 'samples'!") return(TRUE) }) ############################################################################### ### show, accessing and subsetting methods ############################################################################### #' @rdname dmDSdata-class #' @export setMethod("counts", "dmDSdata", function(object){ data.frame(gene_id = rep(names(object@counts), elementNROWS(object@counts)), feature_id = rownames(object@counts), object@counts@unlistData, stringsAsFactors = FALSE, row.names = NULL) }) #' @rdname dmDSdata-class #' @export setGeneric("samples", function(x, ...) standardGeneric("samples")) #' @rdname dmDSdata-class #' @export setMethod("samples", "dmDSdata", function(x) x@samples ) ################################ setMethod("show", "dmDSdata", function(object){ cat("An object of class", class(object), "\n") cat("with", length(object), "genes and", ncol(object@counts), "samples\n") cat("* data accessors: counts(), samples()\n") }) ################################ #' @rdname dmDSdata-class #' @export setMethod("names", "dmDSdata", function(x) names(x@counts) ) #' @rdname dmDSdata-class #' @export setMethod("length", "dmDSdata", function(x) length(x@counts) ) #' @aliases [,dmDSdata-method [,dmDSdata,ANY-method #' @rdname dmDSdata-class #' @export setMethod("[", "dmDSdata", function(x, i, j){ if(missing(j)){ counts <- x@counts[i, , drop = FALSE] samples <- x@samples }else{ if(missing(i)){ counts <- x@counts[, j, drop = FALSE] }else{ counts <- x@counts[i, j, drop = FALSE] } samples <- x@samples rownames(samples) <- samples$sample_id samples <- samples[j, , drop = FALSE] # Drop unused levels for factors for(i in 1:ncol(samples)){ if(class(samples[, i]) == "factor") samples[, i] <- factor(samples[, i]) } rownames(samples) <- NULL } return(new("dmDSdata", counts = counts, samples = samples)) }) ############################################################################### ### dmDSdata ############################################################################### #' Create dmDSdata object #' #' Constructor function for a \code{\linkS4class{dmDSdata}} object. #' #' @param counts Data frame with counts. Rows correspond to features, for #' example, transcripts or exons. This data frame has to contain a #' \code{gene_id} column with gene IDs, \code{feature_id} column with feature #' IDs and columns with counts for each sample. Column names corresponding to #' sample IDs must be the same as in the \code{sample} data frame. #' @param samples Data frame where each row corresponds to one sample. Columns #' have to contain unique sample IDs in \code{sample_id} variable and a #' grouping variable \code{group}. #' @return Returns a \linkS4class{dmDSdata} object. #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' } #' @seealso \code{\link{plotData}} #' @author Malgorzata Nowicka #' @export dmDSdata <- function(counts, samples){ ### Check on samples stopifnot(class(samples) == "data.frame") stopifnot("sample_id" %in% colnames(samples)) stopifnot(sum(duplicated(samples$sample_id)) == 0) ### Check on counts stopifnot(class(counts) == "data.frame") stopifnot(all(c("gene_id", "feature_id") %in% colnames(counts))) stopifnot(all(samples$sample_id %in% colnames(counts))) stopifnot(sum(duplicated(counts$feature_id)) == 0) gene_id <- counts$gene_id feature_id <- counts$feature_id stopifnot(class(gene_id) %in% c("character", "factor")) stopifnot(class(feature_id) %in% c("character", "factor")) stopifnot(class(samples$sample_id) %in% c("character", "factor")) stopifnot(all(!is.na(gene_id))) stopifnot(all(!is.na(feature_id))) stopifnot(all(!is.na(samples$sample_id))) counts <- counts[, as.character(samples$sample_id), drop = FALSE] counts <- as.matrix(counts) stopifnot(mode(counts) %in% "numeric") if(class(gene_id) == "character") gene_id <- factor(gene_id, levels = unique(gene_id)) else gene_id <- factor(gene_id) for(i in 1:ncol(samples)){ if(class(samples[, i]) == "character") samples[, i] <- factor(samples[, i], levels = unique(samples[, i])) else if(class(samples[, i]) == "factor") samples[, i] <- factor(samples[, i]) } # Ordering or <- order(gene_id) counts <- counts[or, , drop = FALSE] gene_id <- gene_id[or] feature_id <- feature_id[or] rownames(counts) <- feature_id inds <- 1:length(gene_id) names(inds) <- feature_id partitioning <- split(inds, gene_id) data <- new("dmDSdata", counts = new("MatrixList", unlistData = counts, partitioning = partitioning), samples = samples) return(data) } ############################################################################### ### dmFilter ############################################################################### #' Filtering #' #' Filtering of genes and features with low expression. Additionally, for the #' dmSQTLdata object, filtering of genotypes with low frequency. #' #' @param x \code{\linkS4class{dmDSdata}} or \code{\linkS4class{dmSQTLdata}} #' object. #' @param ... Other parameters that can be defined by methods using this #' generic. #' @export setGeneric("dmFilter", function(x, ...) standardGeneric("dmFilter")) # ----------------------------------------------------------------------------- #' @details Filtering parameters should be adjusted according to the sample size #' of the experiment data and the number of replicates per condition. #' #' \code{min_samps_gene_expr} defines the minimal number of samples where #' genes are required to be expressed at the minimal level of #' \code{min_gene_expr} in order to be included in the downstream analysis. #' Ideally, we would like that genes were expressed at some minimal level in #' all samples because this would lead to better estimates of feature ratios. #' #' Similarly, \code{min_samps_feature_expr} and \code{min_samps_feature_prop} #' defines the minimal number of samples where features are required to be #' expressed at the minimal levels of counts \code{min_feature_expr} or #' proportions \code{min_feature_prop}. In differential transcript/exon usage #' analysis, we suggest using \code{min_samps_feature_expr} and #' \code{min_samps_feature_prop} equal to the minimal number of replicates in #' any of the conditions. For example, in an assay with 3 versus 5 replicates, #' we would set these parameters to 3, which allows a situation where a #' feature is expressed in one condition but may not be expressed at all in #' another one, which is an example of differential transcript/exon usage. #' #' By default, all the filtering parameters equal zero which means that #' features with zero expression in all samples are removed as well as genes #' with only one non-zero feature. #' #' @param min_samps_gene_expr Minimal number of samples where genes should be #' expressed. See Details. #' @param min_gene_expr Minimal gene expression. #' @param min_samps_feature_expr Minimal number of samples where features should #' be expressed. See Details. #' @param min_feature_expr Minimal feature expression. #' @param min_samps_feature_prop Minimal number of samples where features should #' be expressed. See details. #' @param min_feature_prop Minimal proportion for feature expression. This value #' should be between 0 and 1. #' @param run_gene_twice Whether to re-run the gene-level filter #' after the feature-level filters. #' @return Returns filtered \code{\linkS4class{dmDSdata}} or #' \code{\linkS4class{dmSQTLdata}} object. #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' } #' @seealso \code{\link{plotData}} #' @author Malgorzata Nowicka #' @rdname dmFilter #' @export setMethod("dmFilter", "dmDSdata", function(x, min_samps_gene_expr = 0, min_samps_feature_expr = 0, min_samps_feature_prop = 0, min_gene_expr = 0, min_feature_expr = 0, min_feature_prop = 0, run_gene_twice = FALSE){ stopifnot(min_samps_gene_expr >= 0 && min_samps_gene_expr <= ncol(x@counts)) stopifnot(min_gene_expr >= 0) stopifnot(min_samps_feature_expr >= 0 && min_samps_feature_expr <= ncol(x@counts)) stopifnot(min_feature_expr >= 0) stopifnot(min_samps_feature_prop >= 0 && min_samps_feature_prop <= ncol(x@counts)) stopifnot(min_feature_prop >= 0 && min_feature_prop <= 1) counts_filtered <- dmDS_filter(counts = x@counts, min_samps_gene_expr = min_samps_gene_expr, min_gene_expr = min_gene_expr, min_samps_feature_expr = min_samps_feature_expr, min_feature_expr = min_feature_expr, min_samps_feature_prop = min_samps_feature_prop, min_feature_prop = min_feature_prop, run_gene_twice = run_gene_twice) return(new("dmDSdata", counts = counts_filtered, samples = x@samples)) }) ################################################################################ ### plotData ################################################################################ #' Plot data summary #' #' @return Returns a \code{ggplot} object and can be further modified, for #' example, using \code{theme()}. Plots a histogram of the number of features #' per gene. Additionally, for \code{\linkS4class{dmSQTLdata}} object, plots a #' histogram of the number of SNPs per gene and a histogram of the number of #' unique SNPs (blocks) per gene. #' #' @param x \code{\linkS4class{dmDSdata}} or \code{\linkS4class{dmSQTLdata}} #' object. #' @param ... Other parameters that can be defined by methods using this #' generic. #' @export setGeneric("plotData", function(x, ...) standardGeneric("plotData")) # ----------------------------------------------------------------------------- #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' } #' @author Malgorzata Nowicka #' @seealso \code{\link{plotPrecision}}, \code{\link{plotProportions}}, #' \code{\link{plotPValues}} #' @rdname plotData #' @export setMethod("plotData", "dmDSdata", function(x){ tt <- elementNROWS(x@counts) ggp <- dm_plotDataFeatures(tt = tt) return(ggp) }) DRIMSeq/R/class_dmDSfit.R0000755000175200017520000005403714710222503016053 0ustar00biocbuildbiocbuild#' @include class_dmDSprecision.R NULL ################################################################################ ### dmDSfit class ################################################################################ #' dmDSfit object #' #' dmDSfit extends the \code{\linkS4class{dmDSprecision}} class by adding the #' full model Dirichlet-multinomial (DM) and beta-binomial (BB) likelihoods, #' regression coefficients and feature proportion estimates. Result of calling #' the \code{\link{dmFit}} function. #' #' @return #' #' \itemize{ \item \code{design(object)}: Get a matrix with the full design. #' \item \code{proportions(x)}: Get a data frame with estimated feature ratios #' for each sample. \item \code{coefficients(x)}: Get the DM or BB regression #' coefficients. } #' #' @param x,object dmDSprecision object. #' @param ... Other parameters that can be defined by methods using this #' generic. #' #' @slot design_fit_full Numeric matrix of the design used to fit the full #' model. #' @slot fit_full \code{\linkS4class{MatrixList}} containing estimated feature #' ratios in each sample based on the full Dirichlet-multinomial (DM) model. #' @slot lik_full Numeric vector of the per gene DM full model likelihoods. #' @slot coef_full \code{\linkS4class{MatrixList}} with the regression #' coefficients based on the DM model. #' @slot fit_full_bb \code{\linkS4class{MatrixList}} containing estimated #' feature ratios in each sample based on the full beta-binomial (BB) model. #' @slot lik_full_bb Numeric vector of the per gene BB full model likelihoods. #' @slot coef_full_bb \code{\linkS4class{MatrixList}} with the regression #' coefficients based on the BB model. #' #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## Create the design matrix #' design_full <- model.matrix(~ group, data = samples(d)) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d, design = design_full) #' #' plotPrecision(d) #' #' head(mean_expression(d)) #' common_precision(d) #' head(genewise_precision(d)) #' #' ## Fit full model proportions #' d <- dmFit(d, design = design_full) #' #' ## Get fitted proportions #' head(proportions(d)) #' ## Get the DM regression coefficients (gene-level) #' head(coefficients(d)) #' ## Get the BB regression coefficients (feature-level) #' head(coefficients(d), level = "feature") #' } #' @author Malgorzata Nowicka #' @seealso \code{\linkS4class{dmDSdata}}, \code{\linkS4class{dmDSprecision}}, #' \code{\linkS4class{dmDStest}} setClass("dmDSfit", contains = "dmDSprecision", representation(design_fit_full = "matrix", fit_full = "MatrixList", lik_full = "numeric", coef_full = "MatrixList", fit_full_bb = "MatrixList", lik_full_bb = "numeric", coef_full_bb = "MatrixList")) # ------------------------------------------------------------------------------ setValidity("dmDSfit", function(object){ # Has to return TRUE for a valid object! if(nrow(object@design_fit_full) == ncol(object@counts)){ out <- TRUE }else{ return(paste0("Number of rows in the design matrix must be equal to the number of columns in counts")) } if(!length(object@fit_full) == length(object@counts)) return("Different number of genes in 'counts' and 'fit_full'") if(!length(object@lik_full) == length(object@counts)) return("Different number of genes in 'counts' and 'lik_full'") if(!length(object@coef_full) == length(object@counts)) return("Different number of genes in 'counts' and 'coef_full'") # TODO: Add more checks for BB return(TRUE) }) ################################################################################ ### accessing methods ################################################################################ #' @rdname dmDSfit-class #' @inheritParams dmDSprecision-class #' @export setMethod("design", "dmDSfit", function(object, type = "full_model"){ stopifnot(type %in% c("precision", "full_model", "null_model")) if(type == "precision") object@design_precision else if(type == "full_model") object@design_fit_full else NULL }) #' @rdname dmDSfit-class #' @export setGeneric("proportions", function(x, ...) standardGeneric("proportions")) #' @rdname dmDSfit-class #' @export setMethod("proportions", "dmDSfit", function(x){ data.frame(gene_id = rep.int(names(x@fit_full), elementNROWS(x@fit_full)), feature_id = rownames(x@fit_full@unlistData), x@fit_full@unlistData, stringsAsFactors = FALSE, row.names = NULL) }) # Generic for coefficients already exists in the stats package #' @rdname dmDSfit-class #' @param level Character specifying which type of results to return. Possible #' values \code{"gene"} or \code{"feature"}. #' @export setMethod("coefficients", "dmDSfit", function(object, level = "gene"){ stopifnot(length(level) == 1) stopifnot(level %in% c("gene", "feature")) if(level == "gene"){ out <- data.frame(gene_id = rep.int(names(object@coef_full), elementNROWS(object@coef_full)), feature_id = rownames(object@coef_full@unlistData), object@coef_full@unlistData, stringsAsFactors = FALSE, row.names = NULL) } if(level == "feature"){ out <- data.frame(gene_id = rep.int(names(object@coef_full_bb), elementNROWS(object@coef_full_bb)), feature_id = rownames(object@coef_full_bb@unlistData), object@coef_full_bb@unlistData, stringsAsFactors = FALSE, row.names = NULL) } return(out) }) # ------------------------------------------------------------------------------ setMethod("show", "dmDSfit", function(object){ callNextMethod(object) cat(" proportions(), coefficients()\n") }) ################################################################################ ### dmFit ################################################################################ #' Fit the Dirichlet-multinomial and/or the beta-binomial full model regression #' #' Obtain the maximum likelihood estimates of Dirichlet-multinomial (gene-level) #' and/or beta-binomial (feature-level) regression coefficients, feature #' proportions in each sample and corresponding likelihoods. In the differential #' exon/transcript usage analysis, the regression model is defined by a design #' matrix. In the exon/transcript usage QTL analysis, regression models are #' defined by genotypes. Currently, beta-binomial model is implemented only in #' the differential usage analysis. #' #' @param x \code{\linkS4class{dmDSprecision}} or #' \code{\linkS4class{dmSQTLprecision}} object. #' @param ... Other parameters that can be defined by methods using this #' generic. #' @export setGeneric("dmFit", function(x, ...) standardGeneric("dmFit")) # ----------------------------------------------------------------------------- #' @inheritParams dmPrecision #' #' @details In the regression framework here, we adapt the idea from #' \code{\link[edgeR]{glmFit}} in \code{\link{edgeR}} about using a shortcut #' algorithm when the design is equivalent to simple group fitting. In such a #' case, we estimate the DM proportions for each group of samples separately #' and then recalculate the DM (and/or the BB) regression coefficients #' corresponding to the design matrix. If the design matrix does not define a #' simple group fitting, for example, when it contains a column with #' continuous values, then the regression framework is used to directly #' estimate the regression coefficients. #' #' Arguments that are used for the proportion estimation in each group when #' the shortcut fitting can be used start with \code{prop_}, and those that #' are used in the regression framework start with \code{coef_}. #' #' In the differential transcript usage analysis, setting \code{one_way = #' TRUE} allows switching to the shortcut algorithm only if the design is #' equivalent to simple group fitting. \code{one_way = FALSE} forces usage of #' the regression framework. #' #' #' @param design Numeric matrix defining the full model. #' @param bb_model Logical. Whether to perform the feature-level analysis using #' the beta-binomial model. #' @return Returns a \code{\linkS4class{dmDSfit}} or #' \code{\linkS4class{dmSQTLfit}} object. #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## Create the design matrix #' design_full <- model.matrix(~ group, data = samples(d)) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d, design = design_full) #' #' plotPrecision(d) #' #' head(mean_expression(d)) #' common_precision(d) #' head(genewise_precision(d)) #' #' ## Fit full model proportions #' d <- dmFit(d, design = design_full) #' #' ## Get fitted proportions #' head(proportions(d)) #' ## Get the DM regression coefficients (gene-level) #' head(coefficients(d)) #' ## Get the BB regression coefficients (feature-level) #' head(coefficients(d), level = "feature") #' } #' @author Malgorzata Nowicka #' @seealso \code{\link{plotProportions}} \code{\link[edgeR]{glmFit}} #' @references McCarthy, DJ, Chen, Y, Smyth, GK (2012). Differential expression #' analysis of multifactor RNA-Seq experiments with respect to biological #' variation. Nucleic Acids Research 40, 4288-4297. #' @rdname dmFit #' @importFrom limma nonEstimable #' @export setMethod("dmFit", "dmDSprecision", function(x, design, one_way = TRUE, bb_model = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, add_uniform = FALSE, BPPARAM = BiocParallel::SerialParam()){ # Check design as in edgeR design <- as.matrix(design) stopifnot(nrow(design) == ncol(x@counts)) ne <- limma::nonEstimable(design) if(!is.null(ne)) stop(paste("Design matrix not of full rank. The following coefficients not estimable:\n", paste(ne, collapse = " "))) if(!identical(x@design_precision, design)) message(paste0("! The 'design' here is not identical as the 'design' used for precision estimation !\n")) # Check other parameters stopifnot(is.logical(one_way)) stopifnot(length(prop_mode) == 1) stopifnot(prop_mode %in% c("constrOptim")) stopifnot(length(prop_tol) == 1) stopifnot(is.numeric(prop_tol) && prop_tol > 0) stopifnot(length(coef_mode) == 1) stopifnot(coef_mode %in% c("optim", "nlminb", "nlm")) stopifnot(length(coef_tol) == 1) stopifnot(is.numeric(coef_tol) && coef_tol > 0) stopifnot(verbose %in% 0:2) # add random small fractional counts to zeros counts <- if (add_uniform) addUniform(x@counts) else x@counts # Fit the DM model: proportions and likelihoods fit <- dmDS_fit(counts = counts, design = design, precision = x@genewise_precision, one_way = one_way, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) # Calculate the Beta-Binomial likelihoods for each feature if(bb_model){ fit_bb <- bbDS_fit(counts = counts, fit = fit[["fit"]], design = design, precision = x@genewise_precision, one_way = one_way, verbose = verbose, BPPARAM = BPPARAM) return(new("dmDSfit", design_fit_full = design, fit_full = fit[["fit"]], lik_full = fit[["lik"]], coef_full = fit[["coef"]], lik_full_bb = fit_bb[["lik"]], coef_full_bb = fit_bb[["coef"]], mean_expression = x@mean_expression, common_precision = x@common_precision, genewise_precision = x@genewise_precision, design_precision = x@design_precision, counts = x@counts, samples = x@samples)) }else{ return(new("dmDSfit", design_fit_full = design, fit_full = fit[["fit"]], lik_full = fit[["lik"]], coef_full = fit[["coef"]], mean_expression = x@mean_expression, common_precision = x@common_precision, genewise_precision = x@genewise_precision, design_precision = x@design_precision, counts = x@counts, samples = x@samples)) } }) ################################################################################ ### plotProportions ################################################################################ #' Plot feature proportions #' #' This plot is available only for a group design, i.e., a design that is #' equivalent to multiple group fitting. #' #' @return For a given gene, plot the observed and estimated with #' Dirichlet-multinomial model feature proportions in each group. Estimated #' group proportions are marked with diamond shapes. #' #' @param x \code{\linkS4class{dmDSfit}}, \code{\linkS4class{dmDStest}} or #' \code{\linkS4class{dmSQTLfit}}, \code{\linkS4class{dmSQTLtest}} object. #' @param ... Other parameters that can be defined by methods using this #' generic. #' @export setGeneric("plotProportions", function(x, ...) standardGeneric("plotProportions")) # ------------------------------------------------------------------------------ #' @inheritParams plotData #' @param gene_id Character indicating a gene ID to be plotted. #' @param group_variable Character indicating the grouping variable which is one #' of the columns in the \code{samples} slot of \code{x}. #' @param plot_type Character defining the type of the plot produced. Possible #' values \code{"barplot"}, \code{"boxplot1"}, \code{"boxplot2"}, #' \code{"lineplot"}, \code{"ribbonplot"}. #' @param order_features Logical. Whether to plot the features ordered by their #' expression. #' @param order_samples Logical. Whether to plot the samples ordered by the #' group variable. If \code{FALSE} order from the \code{sample(x)} is kept. #' @param plot_fit Logical. Whether to plot the proportions estimated by the #' full model. #' @param plot_main Logical. Whether to plot a title with the information about #' the Dirichlet-multinomial estimates. #' @param group_colors Character vector with colors for each group defined by #' \code{group_variable}. #' @param feature_colors Character vector with colors for each feature of gene #' defined by \code{gene_id}. #' #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## Create the design matrix #' design_full <- model.matrix(~ group, data = samples(d)) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d, design = design_full) #' #' plotPrecision(d) #' #' head(mean_expression(d)) #' common_precision(d) #' head(genewise_precision(d)) #' #' ## Fit full model proportions #' d <- dmFit(d, design = design_full) #' #' ## Get fitted proportions #' head(proportions(d)) #' ## Get the DM regression coefficients (gene-level) #' head(coefficients(d)) #' ## Get the BB regression coefficients (feature-level) #' head(coefficients(d), level = "feature") #' #' ## Fit null model proportions and perform the LR test to detect DTU #' d <- dmTest(d, coef = "groupKD") #' #' ## Plot the gene-level p-values #' plotPValues(d) #' #' ## Get the gene-level results #' head(results(d)) #' #' ## Plot feature proportions for a top DTU gene #' res <- results(d) #' res <- res[order(res$pvalue, decreasing = FALSE), ] #' #' top_gene_id <- res$gene_id[1] #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group") #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group", #' plot_type = "lineplot") #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group", #' plot_type = "ribbonplot") #' } #' @author Malgorzata Nowicka #' @seealso \code{\link{plotData}}, \code{\link{plotPrecision}}, #' \code{\link{plotPValues}} #' @rdname plotProportions #' @export setMethod("plotProportions", "dmDSfit", function(x, gene_id, group_variable, plot_type = "barplot", order_features = TRUE, order_samples = TRUE, plot_fit = TRUE, plot_main = TRUE, group_colors = NULL, feature_colors = NULL){ stopifnot(gene_id %in% names(x@counts)) stopifnot(plot_type %in% c("barplot", "boxplot1", "boxplot2", "lineplot", "ribbonplot")) stopifnot(is.logical(order_features)) stopifnot(is.logical(order_samples)) stopifnot(is.logical(plot_fit)) stopifnot(is.logical(plot_main)) stopifnot(length(group_variable) == 1) stopifnot(group_variable %in% colnames(samples(x))) group <- x@samples[, group_variable] if(is.factor(group)){ group <- factor(group) }else{ group <- factor(group, levels = group) } counts_gene <- x@counts[[gene_id]] if(!is.null(group_colors) && plot_type %in% c("barplot", "boxplot1", "lineplot")) stopifnot(length(group_colors) == nlevels(group)) if(!is.null(feature_colors) && plot_type %in% c("boxplot2", "ribbonplot")) stopifnot(length(feature_colors) == nrow(counts_gene)) if(nrow(counts_gene) <= 1) stop("!Gene has to have at least 2 features! \n") main <- NULL if(plot_main){ mean_expression_gene <- mean(colSums(counts_gene), na.rm = TRUE) main <- paste0(gene_id, "\n Mean expression = ", round(mean_expression_gene)) precision_gene <- x@genewise_precision[gene_id] main <- paste0(main, ", Precision = ", round(precision_gene, 2)) } fit_full <- NULL if(plot_fit){ fit_full <- x@fit_full[[gene_id]] } ggp <- dm_plotProportions(counts = counts_gene, group = group, md = x@samples, fit_full = fit_full, main = main, plot_type = plot_type, order_features = order_features, order_samples = order_samples, group_colors = group_colors, feature_colors = feature_colors) return(ggp) }) DRIMSeq/R/class_dmDSprecision.R0000755000175200017520000006357014710222503017266 0ustar00biocbuildbiocbuild#' @include class_dmDSdata.R NULL ################################################################################ ### dmDSprecision class ################################################################################ #' dmDSprecision object #' #' dmDSprecision extends the \code{\linkS4class{dmDSdata}} by adding the #' precision estimates of the Dirichlet-multinomial distribution used to model #' the feature (e.g., transcript, exon, exonic bin) counts for each gene in the #' differential usage analysis. Result of calling the \code{\link{dmPrecision}} #' function. #' #' @details Normally, in the differential analysis based on RNA-seq data, such #' as, for example, differential gene expression, dispersion (of #' negative-binomial model) is estimated. Here, we estimate precision of the #' Dirichlet-multinomial model as it is more convenient computationally. To #' obtain dispersion estimates, one can use a formula: dispersion = 1 / (1 + #' precision). #' #' @return #' #' \itemize{ \item \code{mean_expression(x)}: Get a data frame with mean gene #' expression. \item \code{common_precision(x), common_precision(x) <- value}: #' Get or set common precision. \code{value} must be numeric of length 1. \item #' \code{genewise_precision(x), genewise_precision(x) <- value}: Get a data #' frame with gene-wise precision or set new gene-wise precision. \code{value} #' must be a data frame with "gene_id" and "genewise_precision" columns. } #' #' @param x,object dmDSprecision object. #' @param value Values that replace current attributes. #' @param ... Other parameters that can be defined by methods using this #' generic. #' #' @slot mean_expression Numeric vector of mean gene expression. #' @slot common_precision Numeric value of estimated common precision. #' @slot genewise_precision Numeric vector of estimated gene-wise precisions. #' @slot design_precision Numeric matrix of the design used to estimate #' precision. #' #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## Create the design matrix #' design_full <- model.matrix(~ group, data = samples(d)) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d, design = design_full) #' #' plotPrecision(d) #' #' head(mean_expression(d)) #' common_precision(d) #' head(genewise_precision(d)) #' } #' @author Malgorzata Nowicka #' @seealso \code{\linkS4class{dmDSdata}}, \code{\linkS4class{dmDSfit}}, #' \code{\linkS4class{dmDStest}} setClass("dmDSprecision", contains = "dmDSdata", representation(mean_expression = "numeric", common_precision = "numeric", genewise_precision = "numeric", design_precision = "matrix")) # ----------------------------------------------------------------------------- setValidity("dmDSprecision", function(object){ ## Has to return TRUE when valid object! out <- TRUE if(length(object@mean_expression) > 0){ if(length(object@mean_expression) == length(object@counts)){ if(all(names(object@mean_expression) == names(object@counts))) out <- TRUE else return(paste0("Different names of 'counts' and 'mean_expression'")) } else return(paste0("Unequal length of 'counts' and 'mean_expression'")) } if(length(object@genewise_precision) > 0){ if(length(object@genewise_precision) == length(object@counts)){ if(all(names(object@genewise_precision) == names(object@counts))) out <- TRUE else return(paste0("Different names of 'counts' and 'genewise_precision'")) } else return(paste0("Unequal length of 'counts' and 'genewise_precision'")) } if(length(object@common_precision) > 0){ if(length(object@common_precision) == 1) out <- TRUE else return(paste0("'common_precision' must be a vector of length 1'")) } if(nrow(object@design_precision) == ncol(object@counts)){ out <- TRUE }else{ return(paste0("Number of rows in the design matrix must be equal to the number of columns in counts")) } return(out) }) ################################################################################ ### accessing methods ################################################################################ #' @rdname dmDSprecision-class #' @param type Character indicating which design matrix should be returned. #' Possible values \code{"precision"}, \code{"full_model"} or #' \code{"null_model"}. #' @export setMethod("design", "dmDSprecision", function(object, type = "precision"){ stopifnot(type %in% c("precision", "full_model", "null_model")) if(type == "precision") object@design_precision else NULL }) #' @rdname dmDSprecision-class #' @export setGeneric("mean_expression", function(x, ...) standardGeneric("mean_expression")) #' @rdname dmDSprecision-class #' @export setMethod("mean_expression", "dmDSprecision", function(x){ data.frame(gene_id = names(x@mean_expression), mean_expression = x@mean_expression, stringsAsFactors = FALSE, row.names = NULL) }) #' @rdname dmDSprecision-class #' @export setGeneric("common_precision", function(x, ...) standardGeneric("common_precision")) #' @rdname dmDSprecision-class #' @export setMethod("common_precision", "dmDSprecision", function(x) x@common_precision ) #' @rdname dmDSprecision-class #' @export setGeneric("common_precision<-", function(x, value) standardGeneric("common_precision<-")) #' @rdname dmDSprecision-class #' @export setMethod("common_precision<-", "dmDSprecision", function(x, value){ ### value must be a numeric of length 1 names(value) <- NULL return(new("dmDSprecision", mean_expression = x@mean_expression, common_precision = value, genewise_precision = x@genewise_precision, design_precision = x@design_precision, counts = x@counts, samples = x@samples)) }) #' @rdname dmDSprecision-class #' @export setGeneric("genewise_precision", function(x, ...) standardGeneric("genewise_precision")) #' @rdname dmDSprecision-class #' @export setMethod("genewise_precision", "dmDSprecision", function(x){ data.frame(gene_id = names(x@genewise_precision), genewise_precision = x@genewise_precision, stringsAsFactors = FALSE, row.names = NULL) }) #' @rdname dmDSprecision-class #' @export setGeneric("genewise_precision<-", function(x, value) standardGeneric("genewise_precision<-")) #' @rdname dmDSprecision-class #' @export setMethod("genewise_precision<-", "dmDSprecision", function(x, value){ # value must be a data frame with gene_id and genewise_precision stopifnot(all(c("gene_id", "genewise_precision") %in% colnames(value))) stopifnot(all(names(x@counts) %in% value[,"gene_id"])) order <- match(names(x@counts), value[,"gene_id"]) return(new("dmDSprecision", mean_expression = x@mean_expression, common_precision = x@common_precision, genewise_precision = value[order, "genewise_precision"], design_precision = x@design_precision, counts = x@counts, samples = x@samples)) }) # ----------------------------------------------------------------------------- setMethod("show", "dmDSprecision", function(object){ callNextMethod(object) cat(" design()\n") cat(" mean_expression(), common_precision(), genewise_precision()\n") }) ################################################################################ ### dmPrecision ################################################################################ #' Estimate the precision parameter in the Dirichlet-multinomial model #' #' Maximum likelihood estimates of the precision parameter in the #' Dirichlet-multinomial model used for the differential exon/transcript usage #' or QTL analysis. #' #' @details Normally, in the differential analysis based on RNA-seq data, such #' as, for example, differential gene expression, dispersion (of #' negative-binomial model) is estimated. Here, we estimate precision of the #' Dirichlet-multinomial model as it is more convenient computationally. To #' obtain dispersion estimates, one can use a formula: dispersion = 1 / (1 + #' precision). #' #' @param x \code{\linkS4class{dmDSdata}} or \code{\linkS4class{dmSQTLdata}} #' object. #' @param ... Other parameters that can be defined by methods using this #' generic. #' @export setGeneric("dmPrecision", function(x, ...) standardGeneric("dmPrecision")) # ----------------------------------------------------------------------------- #' @details Parameters that are used in the precision (dispersion = 1 / (1 + #' precision)) estimation start with prefix \code{prec_}. Those that are used #' for the proportion estimation in each group when the shortcut fitting #' \code{one_way = TRUE} can be used start with \code{prop_}, and those that #' are used in the regression framework start with \code{coef_}. #' #' There are two optimization methods implemented within dmPrecision: #' \code{"optimize"} for the common precision and \code{"grid"} for the #' gene-wise precision. #' #' Only part of the precision parameters in dmPrecision have an influence on #' a given optimization method. Here is a list of such active parameters: #' #' \code{"optimize"}: #' #' \itemize{ \item \code{prec_interval}: Passed as \code{interval}. \item #' \code{prec_tol}: The accuracy defined as \code{tol}. } #' #' \code{"grid"}, which uses the grid approach from #' \code{\link[edgeR]{estimateDisp}} in \code{\link{edgeR}}: #' #' \itemize{ \item \code{prec_init}, \code{prec_grid_length}, #' \code{prec_grid_range}: Parameters used to construct the search grid #' \code{prec_init * 2^seq(from = prec_grid_range[1]}, \code{to = #' prec_grid_range[2]}, \code{length = prec_grid_length)}. \item #' \code{prec_moderation}: Dipsersion shrinkage is available only with #' \code{"grid"} method. \item \code{prec_prior_df}: Used only when precision #' shrinkage is activated. Moderated likelihood is equal to \code{loglik + #' prec_prior_df * moderation}. Higher \code{prec_prior_df}, more shrinkage #' toward common or trended precision is applied. \item \code{prec_span}: #' Used only when precision moderation toward trend is activated. } #' #' @param design Numeric matrix defining the model that should be used when #' estimating precision. Normally this should be a full model design used #' also in \code{\link{dmFit}}. #' @param mean_expression Logical. Whether to estimate the mean expression of #' genes. #' @param common_precision Logical. Whether to estimate the common precision. #' @param genewise_precision Logical. Whether to estimate the gene-wise #' precision. #' @param prec_adjust Logical. Whether to use the Cox-Reid adjusted or #' non-adjusted profile likelihood. #' @param one_way Logical. Should the shortcut fitting be used when the design #' corresponds to multiple group comparison. This is a similar approach as in #' \code{\link{edgeR}}. If \code{TRUE} (the default), then proportions are #' fitted per group and regression coefficients are recalculated from those #' fits. #' @param prec_subset Value from 0 to 1 defining the percentage of genes used in #' common precision estimation. The default is 0.1, which uses 10% of #' randomly selected genes to speed up the precision estimation process. Use #' \code{set.seed} function to make the analysis reproducible. See Examples. #' @param prec_interval Numeric vector of length 2 defining the interval of #' possible values for the common precision. #' @param prec_tol The desired accuracy when estimating common precision. #' @param prec_init Initial precision. If \code{common_precision} is #' \code{TRUE}, then \code{prec_init} is overwritten by common precision #' estimate. #' @param prec_grid_length Length of the search grid. #' @param prec_grid_range Vector giving the limits of grid interval. #' @param prec_moderation Precision moderation method. One can choose to shrink #' the precision estimates toward the common precision (\code{"common"}) or #' toward the (precision versus mean expression) trend (\code{"trended"}) #' @param prec_prior_df Degree of moderation (shrinkage) in case when it can not #' be calculated automaticaly (number of genes on the upper boundary of grid #' is smaller than 10). By default it is equal to 0. #' @param prec_span Value from 0 to 1 defining the percentage of genes used in #' smoothing sliding window when calculating the precision versus mean #' expression trend. #' @param prop_mode Optimization method used to estimate proportions. Possible #' value \code{"constrOptim"}. #' @param prop_tol The desired accuracy when estimating proportions. #' @param coef_mode Optimization method used to estimate regression #' coefficients. Possible value \code{"optim"}. #' @param coef_tol The desired accuracy when estimating regression coefficients. #' @param verbose Numeric. Definie the level of progress messages displayed. 0 - #' no messages, 1 - main messages, 2 - message for every gene fitting. #' @param add_uniform Whether to add a small fractional count to zeros, #' (adding a uniform random variable between 0 and 0.1). #' This option allows for the fitting of genewise precision and coefficients #' for genes with two features having all zero for one group, or the last #' feature having all zero for one group. #' @param BPPARAM Parallelization method used by #' \code{\link[BiocParallel]{bplapply}}. #' #' @return Returns a \code{\linkS4class{dmDSprecision}} or #' \code{\linkS4class{dmSQTLprecision}} object. #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## Create the design matrix #' design_full <- model.matrix(~ group, data = samples(d)) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d, design = design_full) #' #' plotPrecision(d) #' #' head(mean_expression(d)) #' common_precision(d) #' head(genewise_precision(d)) #' } #' @seealso \code{\link{plotPrecision}} \code{\link[edgeR]{estimateDisp}} #' @author Malgorzata Nowicka #' @references McCarthy, DJ, Chen, Y, Smyth, GK (2012). Differential expression #' analysis of multifactor RNA-Seq experiments with respect to biological #' variation. Nucleic Acids Research 40, 4288-4297. #' @rdname dmPrecision #' @importFrom limma nonEstimable #' @importFrom stats runif #' @export setMethod("dmPrecision", "dmDSdata", function(x, design, mean_expression = TRUE, common_precision = TRUE, genewise_precision = TRUE, prec_adjust = TRUE, prec_subset = 0.1, prec_interval = c(0, 1e+3), prec_tol = 1e+01, prec_init = 100, prec_grid_length = 21, prec_grid_range = c(-10, 10), prec_moderation = "trended", prec_prior_df = 0, prec_span = 0.1, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, add_uniform = FALSE, BPPARAM = BiocParallel::SerialParam()){ # Check design as in edgeR design <- as.matrix(design) stopifnot(nrow(design) == ncol(x@counts)) ne <- limma::nonEstimable(design) if(!is.null(ne)) stop(paste("Design matrix not of full rank. The following coefficients not estimable:\n", paste(ne, collapse = " "))) # Check other parameters stopifnot(is.logical(mean_expression)) stopifnot(is.logical(common_precision)) stopifnot(is.logical(genewise_precision)) stopifnot(is.logical(prec_adjust)) stopifnot(length(prec_subset) == 1) stopifnot(is.numeric(prec_subset) && prec_subset > 0 && prec_subset <= 1) stopifnot(length(prec_interval) == 2) stopifnot(prec_interval[1] < prec_interval[2]) stopifnot(length(prec_tol) == 1) stopifnot(is.numeric(prec_tol) && prec_tol > 0) stopifnot(length(prec_init) == 1) stopifnot(is.numeric(prec_init)) stopifnot(prec_grid_length > 2) stopifnot(length(prec_grid_range) == 2) stopifnot(prec_grid_range[1] < prec_grid_range[2]) stopifnot(length(prec_moderation) == 1) stopifnot(prec_moderation %in% c("none", "common", "trended")) stopifnot(length(prec_prior_df) == 1) stopifnot(is.numeric(prec_prior_df) && prec_prior_df >= 0) stopifnot(length(prec_span) == 1) stopifnot(is.numeric(prec_span) && prec_span > 0 && prec_span < 1) stopifnot(is.logical(one_way)) stopifnot(length(prop_mode) == 1) stopifnot(prop_mode %in% c("constrOptim")) stopifnot(length(prop_tol) == 1) stopifnot(is.numeric(prop_tol) && prop_tol > 0) stopifnot(length(coef_mode) == 1) stopifnot(coef_mode %in% c("optim", "nlminb", "nlm")) stopifnot(length(coef_tol) == 1) stopifnot(is.numeric(coef_tol) && coef_tol > 0) stopifnot(verbose %in% 0:2) if(mean_expression || (genewise_precision && prec_moderation == "trended")){ mean_expression <- dm_estimateMeanExpression(counts = x@counts, verbose = verbose) }else{ mean_expression <- numeric() } if(common_precision){ if(prec_subset < 1){ message(paste0("! Using a subset of ", prec_subset, " genes to estimate common precision !\n")) genes2keep <- sample(1:length(x@counts), max(round(prec_subset * length(x@counts)), 1), replace = FALSE) }else{ genes2keep <- 1:length(x@counts) } common_precision <- dmDS_estimateCommonPrecision( counts = x@counts[genes2keep, ], design = design, prec_adjust = prec_adjust, prec_interval = prec_interval, prec_tol = prec_tol, one_way = one_way, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) }else{ common_precision <- numeric() } if(genewise_precision){ if(length(common_precision) == 1){ message("! Using common_precision = ", round(common_precision, 4), " as prec_init !\n") prec_init <- common_precision } # add random small fractional counts to zeros counts <- if (add_uniform) addUniform(x@counts) else x@counts genewise_precision <- dmDS_estimateTagwisePrecision(counts = counts, design = design, mean_expression = mean_expression, prec_adjust = prec_adjust, prec_init = prec_init, prec_grid_length = prec_grid_length, prec_grid_range = prec_grid_range, prec_moderation = prec_moderation, prec_prior_df = prec_prior_df, prec_span = prec_span, one_way = one_way, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) }else{ genewise_precision <- numeric() } return(new("dmDSprecision", mean_expression = mean_expression, common_precision = common_precision, genewise_precision = genewise_precision, design_precision = design, counts = x@counts, samples = x@samples)) }) ################################################################################ ### plotPrecision ################################################################################ #' Precision versus mean expression plot #' #' @return Normally in the differential analysis based on RNA-seq data, such #' plot has dispersion parameter plotted on the y-axis. Here, the y-axis #' represents precision since in the Dirichlet-multinomial model this is the #' parameter that is directly estimated. It is important to keep in mind that #' the precision parameter (gamma0) is inverse proportional to dispersion #' (theta): theta = 1 / (1 + gamma0). In RNA-seq data, we can typically #' observe a trend where the dispersion decreases (here, precision increases) #' for genes with higher mean expression. #' #' @param x \code{\linkS4class{dmDSprecision}} or #' \code{\linkS4class{dmSQTLprecision}} object. #' @param ... Other parameters that can be defined by methods using this #' generic. #' @export setGeneric("plotPrecision", function(x, ...) standardGeneric("plotPrecision")) # ----------------------------------------------------------------------------- #' @inheritParams plotData #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## Create the design matrix #' design_full <- model.matrix(~ group, data = samples(d)) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d, design = design_full) #' #' plotPrecision(d) #' #' head(mean_expression(d)) #' common_precision(d) #' head(genewise_precision(d)) #' } #' @author Malgorzata Nowicka #' @seealso \code{\link{plotData}}, \code{\link{plotProportions}}, #' \code{\link{plotPValues}} #' #' @rdname plotPrecision #' @export setMethod("plotPrecision", "dmDSprecision", function(x){ if(!length(x@genewise_precision) == length(x@counts)) stop("Genewise precision must be estimated for each gene!") if(!length(x@genewise_precision) == length(x@mean_expression)) stop("Mean expression must be estimated for each gene!") if(length(x@common_precision) == 0){ common_precision <- NULL }else{ common_precision <- x@common_precision } ggp <- dm_plotPrecision(genewise_precision = x@genewise_precision, mean_expression = x@mean_expression, nr_features = elementNROWS(x@counts), common_precision = common_precision) return(ggp) }) # function to add small fraction of counts to zeros addUniform <- function(counts, uniform_max=0.1) { counts_new <- lapply(seq_along(counts), function(g) { expr <- counts[[g]] zeros <- expr == 0 expr[zeros] <- runif(sum(zeros), 0, uniform_max) expr }) names(counts_new) <- names(counts) MatrixList(counts_new) } DRIMSeq/R/class_dmDStest.R0000755000175200017520000005253514710222503016251 0ustar00biocbuildbiocbuild#' @include class_dmDSfit.R NULL ############################################################################### ### dmDStest class ############################################################################### #' dmDStest object #' #' dmDStest extends the \code{\linkS4class{dmDSfit}} class by adding the null #' model Dirichlet-multinomial (DM) and beta-binomial (BB) likelihoods and the #' gene-level and feature-level results of testing for differential #' exon/transcript usage. Result of calling the \code{\link{dmTest}} function. #' #' @return #' #' \itemize{ \item \code{results(x)}: get a data frame with gene-level or #' feature-level results.} #' #' @param x,object dmDStest object. #' @param ... Other parameters that can be defined by methods using this #' generic. #' #' @slot design_fit_null Numeric matrix of the design used to fit the null #' model. #' @slot lik_null Numeric vector of the per gene DM null model likelihoods. #' @slot lik_null_bb Numeric vector of the per gene BB null model likelihoods. #' @slot results_gene Data frame with the gene-level results including: #' \code{gene_id} - gene IDs, \code{lr} - likelihood ratio statistics based on #' the DM model, \code{df} - degrees of freedom, \code{pvalue} - p-values and #' \code{adj_pvalue} - Benjamini & Hochberg adjusted p-values. #' @slot results_feature Data frame with the feature-level results including: #' \code{gene_id} - gene IDs, \code{feature_id} - feature IDs, \code{lr} - #' likelihood ratio statistics based on the BB model, \code{df} - degrees of #' freedom, \code{pvalue} - p-values and \code{adj_pvalue} - Benjamini & #' Hochberg adjusted p-values. #' #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## Create the design matrix #' design_full <- model.matrix(~ group, data = samples(d)) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d, design = design_full) #' #' plotPrecision(d) #' #' head(mean_expression(d)) #' common_precision(d) #' head(genewise_precision(d)) #' #' ## Fit full model proportions #' d <- dmFit(d, design = design_full) #' #' ## Get fitted proportions #' head(proportions(d)) #' ## Get the DM regression coefficients (gene-level) #' head(coefficients(d)) #' ## Get the BB regression coefficients (feature-level) #' head(coefficients(d), level = "feature") #' #' ## Fit null model proportions and perform the LR test to detect DTU #' d <- dmTest(d, coef = "groupKD") #' #' ## Plot the gene-level p-values #' plotPValues(d) #' #' ## Get the gene-level results #' head(results(d)) #' #' ## Plot feature proportions for a top DTU gene #' res <- results(d) #' res <- res[order(res$pvalue, decreasing = FALSE), ] #' #' top_gene_id <- res$gene_id[1] #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group") #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group", #' plot_type = "lineplot") #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group", #' plot_type = "ribbonplot") #' #' @author Malgorzata Nowicka #' @seealso \code{\linkS4class{dmDSdata}}, \code{\linkS4class{dmDSprecision}}, #' \code{\linkS4class{dmDSfit}} setClass("dmDStest", contains = "dmDSfit", representation(design_fit_null = "matrix", lik_null = "numeric", lik_null_bb = "numeric", results_gene = "data.frame", results_feature = "data.frame")) # ------------------------------------------------------------------------------ setValidity("dmDStest", function(object){ # Has to return TRUE when valid object! if(!length(object@lik_null) == length(object@counts)) return("Different number of genes in 'counts' and 'lik_null'") if(length(object@lik_null_bb) > 0){ if(!length(object@lik_null_bb) == nrow(object@counts)) return("Different number of features in 'counts' and 'lik_null_bb'") } # TODO: Add more checks for results return(TRUE) }) ############################################################################### ### accessing methods ############################################################################### #' @rdname dmDStest-class #' @inheritParams dmDSprecision-class #' @export setMethod("design", "dmDStest", function(object, type = "null_model"){ stopifnot(type %in% c("precision", "full_model", "null_model")) if(type == "precision") object@design_precision else if(type == "full_model") object@design_fit_full else object@design_fit_null }) #' @rdname dmDStest-class #' @export setGeneric("results", function(x, ...) standardGeneric("results")) #' @rdname dmDStest-class #' @inheritParams dmDSfit-class #' @export setMethod("results", "dmDStest", function(x, level = "gene"){ stopifnot(length(level) == 1) stopifnot(level %in% c("gene", "feature")) slot(x, paste0("results_", level)) }) # ----------------------------------------------------------------------------- setMethod("show", "dmDStest", function(object){ callNextMethod(object) cat(" results()\n") }) ############################################################################### ### dmTest ############################################################################### #' Likelihood ratio test to detect differential transcript/exon usage #' #' First, estimate the null Dirichlet-multinomial and beta-binomial model #' parameters and likelihoods using the null model design. Second, perform the #' gene-level (DM model) and feature-level (BB model) likelihood ratio tests. In #' the differential exon/transcript usage analysis, the null model is defined by #' the null design matrix. In the exon/transcript usage QTL analysis, null #' models are defined by a design with intercept only. Currently, beta-binomial #' model is implemented only in the differential usage analysis. #' #' @param x \code{\linkS4class{dmDSfit}} or \code{\linkS4class{dmSQTLfit}} #' object. #' @param ... Other parameters that can be defined by methods using this #' generic. #' @export setGeneric("dmTest", function(x, ...) standardGeneric("dmTest")) # ----------------------------------------------------------------------------- #' @inheritParams dmFit #' @param coef Integer or character vector indicating which coefficients of the #' linear model are to be tested equal to zero. Values must indicate column #' numbers or column names of the \code{design} used in \code{\link{dmFit}}. #' @param design Numeric matrix defining the null model. #' @param contrast Numeric vector or matrix specifying one or more contrasts of #' the linear model coefficients to be tested equal to zero. For a matrix, #' number of rows (for a vector, its length) must equal to the number of #' columns of \code{design} used in \code{\link{dmFit}}. #' #' @details One must specify one of the arguments: \code{coef}, \code{design} or #' \code{contrast}. #' #' When \code{contrast} is used to define the null model, the null design #' matrix is recalculated using the same approach as in #' \code{\link[edgeR]{glmLRT}} function from \code{\link{edgeR}}. #' #' @return Returns a \code{\linkS4class{dmDStest}} or #' \code{\linkS4class{dmSQTLtest}} object. #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## Create the design matrix #' design_full <- model.matrix(~ group, data = samples(d)) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d, design = design_full) #' #' plotPrecision(d) #' #' head(mean_expression(d)) #' common_precision(d) #' head(genewise_precision(d)) #' #' ## Fit full model proportions #' d <- dmFit(d, design = design_full) #' #' ## Get fitted proportions #' head(proportions(d)) #' ## Get the DM regression coefficients (gene-level) #' head(coefficients(d)) #' ## Get the BB regression coefficients (feature-level) #' head(coefficients(d), level = "feature") #' #' ## Fit null model proportions and perform the LR test to detect DTU #' d <- dmTest(d, coef = "groupKD") #' #' ## Plot the gene-level p-values #' plotPValues(d) #' #' ## Get the gene-level results #' head(results(d)) #' #' ## Plot feature proportions for a top DTU gene #' res <- results(d) #' res <- res[order(res$pvalue, decreasing = FALSE), ] #' #' top_gene_id <- res$gene_id[1] #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group") #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group", #' plot_type = "lineplot") #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group", #' plot_type = "ribbonplot") #' } #' @author Malgorzata Nowicka #' @seealso \code{\link{plotPValues}} \code{\link[edgeR]{glmLRT}} #' @references McCarthy, DJ, Chen, Y, Smyth, GK (2012). Differential expression #' analysis of multifactor RNA-Seq experiments with respect to biological #' variation. Nucleic Acids Research 40, 4288-4297. #' @rdname dmTest #' @importFrom limma nonEstimable #' @export setMethod("dmTest", "dmDSfit", function(x, coef = NULL, design = NULL, contrast = NULL, one_way = TRUE, bb_model = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, BPPARAM = BiocParallel::SerialParam()){ # Check parameters stopifnot(is.logical(one_way)) stopifnot(length(prop_mode) == 1) stopifnot(prop_mode %in% c("constrOptim")) stopifnot(length(prop_tol) == 1) stopifnot(is.numeric(prop_tol) && prop_tol > 0) stopifnot(length(coef_mode) == 1) stopifnot(coef_mode %in% c("optim", "nlminb", "nlm")) stopifnot(length(coef_tol) == 1) stopifnot(is.numeric(coef_tol) && coef_tol > 0) stopifnot(verbose %in% 0:2) if(!sum(!unlist(lapply(list(coef, design, contrast), is.null))) == 1) stop(paste0("Only one of the ways to define the null model 'coef', 'design' or 'contrast' can be used!")) # Check coef if(!is.null(coef)){ # Check the full model design matrix nbeta <- ncol(x@design_fit_full) if(nbeta < 2) stop("Need at least two columns for design, usually the first is the intercept column!") if(length(coef) > 1) coef <- unique(coef) if(is.numeric(coef)){ stopifnot(max(coef) <= nbeta) }else if(is.character(coef)){ if(!all(coef %in% colnames(x@design_fit_full))) stop("'coef' does not match the columns of the design matrix!") coef <- match(coef, colnames(x@design_fit_full)) } # Null design matrix design0 <- x@design_fit_full[, -coef, drop = FALSE] } # Check design if(!is.null(design)){ # Check design as in edgeR design <- as.matrix(design) stopifnot(nrow(design) == ncol(x@counts)) ne <- limma::nonEstimable(design) if(!is.null(ne)) stop(paste("Design matrix not of full rank. The following coefficients not estimable:\n", paste(ne, collapse = " "))) # Null design matrix design0 <- design } # Check contrast exactly as in edgeR in glmLRT() if(!is.null(contrast)){ design <- x@design_fit_full contrast <- as.matrix(contrast) stopifnot(nrow(contrast) == ncol(design)) qrc <- qr(contrast) ncontrasts <- qrc$rank if(ncontrasts == 0) stop("Contrasts are all zero!") coef <- 1:ncontrasts nlibs <- nrow(design) Dvec <- rep.int(1, nlibs) Dvec[coef] <- diag(qrc$qr)[coef] Q <- qr.Q(qrc, complete = TRUE, Dvec = Dvec) design <- design %*% Q # Null design matrix design0 <- design[, -coef, drop = FALSE] } # Fit the DM null model: proportions and likelihoods fit0 <- dmDS_fit(counts = x@counts, design = design0, precision = x@genewise_precision, one_way = one_way, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) # Calculate the DM degrees of freedom for the LR test: df_full - df_null df <- (ncol(x@design_fit_full) - ncol(design0)) * (elementNROWS(x@coef_full) - 1) results_gene <- dm_LRT(lik_full = x@lik_full, lik_null = fit0[["lik"]], df = df, verbose = verbose) results_gene <- data.frame(gene_id = rownames(results_gene), results_gene, stringsAsFactors = FALSE, row.names = NULL) # Calculate the Beta-Binomial null likelihoods for each feature if(bb_model && length(x@lik_full_bb) > 0){ fit0_bb <- bbDS_fit(counts = x@counts, fit = fit0[["fit"]], design = design0, precision = x@genewise_precision, one_way = one_way, verbose = verbose, BPPARAM = BPPARAM) # Calculate the BB degrees of freedom for the LR test df <- rep.int(ncol(x@design_fit_full) - ncol(design0), length(x@lik_full_bb)) results_feature <- dm_LRT(lik_full = x@lik_full_bb, lik_null = fit0_bb[["lik"]], df = df, verbose = verbose) results_feature <- data.frame( gene_id = rep.int(names(x@counts), elementNROWS(x@counts)), feature_id = rownames(results_feature), results_feature, stringsAsFactors = FALSE, row.names = NULL) return(new("dmDStest", results_gene = results_gene, results_feature = results_feature, design_fit_null = design0, lik_null = fit0[["lik"]], lik_null_bb = fit0_bb[["lik"]], design_fit_full = x@design_fit_full, fit_full = x@fit_full, lik_full = x@lik_full, coef_full = x@coef_full, lik_full_bb = x@lik_full_bb, coef_full_bb = x@coef_full_bb, mean_expression = x@mean_expression, common_precision = x@common_precision, genewise_precision = x@genewise_precision, design_precision = x@design_precision, counts = x@counts, samples = x@samples)) }else{ if(bb_model && length(x@lik_full_bb) == 0) message("Beta-Binomial model is not fitted because bb_model=FALSE in dmFit! Rerun dmFit with bb_model=TRUE.") return(new("dmDStest", results_gene = results_gene, design_fit_null = design0, lik_null = fit0[["lik"]], design_fit_full = x@design_fit_full, fit_full = x@fit_full, lik_full = x@lik_full, coef_full = x@coef_full, lik_full_bb = x@lik_full_bb, coef_full_bb = x@coef_full_bb, mean_expression = x@mean_expression, common_precision = x@common_precision, genewise_precision = x@genewise_precision, design_precision = x@design_precision, counts = x@counts, samples = x@samples)) } }) ############################################################################### ### plotPValues ############################################################################### #' Plot p-value distribution #' #' @return Plot a histogram of p-values. #' #' @param x \code{\linkS4class{dmDStest}} or \code{\linkS4class{dmSQTLtest}} #' object. #' @export setGeneric("plotPValues", function(x, ...) standardGeneric("plotPValues")) # ---------------------------------------------------------------------------- #' @inheritParams results #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## Create the design matrix #' design_full <- model.matrix(~ group, data = samples(d)) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d, design = design_full) #' #' plotPrecision(d) #' #' head(mean_expression(d)) #' common_precision(d) #' head(genewise_precision(d)) #' #' ## Fit full model proportions #' d <- dmFit(d, design = design_full) #' #' ## Get fitted proportions #' head(proportions(d)) #' ## Get the DM regression coefficients (gene-level) #' head(coefficients(d)) #' ## Get the BB regression coefficients (feature-level) #' head(coefficients(d), level = "feature") #' #' ## Fit null model proportions and perform the LR test to detect DTU #' d <- dmTest(d, coef = "groupKD") #' #' ## Plot the gene-level p-values #' plotPValues(d) #' #' ## Get the gene-level results #' head(results(d)) #' #' ## Plot feature proportions for a top DTU gene #' res <- results(d) #' res <- res[order(res$pvalue, decreasing = FALSE), ] #' #' top_gene_id <- res$gene_id[1] #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group") #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group", #' plot_type = "lineplot") #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group", #' plot_type = "ribbonplot") #' } #' @author Malgorzata Nowicka #' @seealso \code{\link{plotData}}, \code{\link{plotPrecision}}, #' \code{\link{plotProportions}} #' @rdname plotPValues #' @export setMethod("plotPValues", "dmDStest", function(x, level = "gene"){ stopifnot(length(level) == 1) stopifnot(level %in% c("gene", "feature")) res <- slot(x, paste0("results_", level)) if(nrow(res) > 0) ggp <- dm_plotPValues(pvalues = res[, "pvalue"]) else stop("Feature-level results are not available! Set bb_model=TRUE in dmFit and dmTest") return(ggp) }) DRIMSeq/R/class_dmSQTLdata.R0000755000175200017520000005036214710222503016454 0ustar00biocbuildbiocbuild#' @include class_MatrixList.R NULL ############################################################################### ### dmSQTLdata class ############################################################################### #' dmSQTLdata object #' #' dmSQTLdata contains genomic feature expression (counts), genotypes and sample #' information needed for the transcript/exon usage QTL analysis. It can be #' created with function \code{\link{dmSQTLdata}}. #' #' @return #' #' \itemize{ \item \code{names(x)}: Get the gene names. \item \code{length(x)}: #' Get the number of genes. \item \code{x[i, j]}: Get a subset of dmDSdata #' object that consists of counts, genotypes and blocks corresponding to genes i #' and samples j. } #' #' @param x,object dmSQTLdata object. #' @param i,j Parameters used for subsetting. #' #' @slot counts \code{\linkS4class{MatrixList}} of expression, in counts, of #' genomic features. Rows correspond to genomic features, such as exons or #' transcripts. Columns correspond to samples. MatrixList is partitioned in a #' way that each of the matrices in a list contains counts for a single gene. #' @slot genotypes MatrixList of unique genotypes. Rows correspond to blocks, #' columns to samples. Each matrix in this list is a collection of unique #' genotypes that are matched with a given gene. #' @slot blocks MatrixList with two columns \code{block_id} and \code{snp_id}. #' For each gene, it identifies SNPs with identical genotypes across the #' samples and assigns them to blocks. #' @slot samples Data frame with information about samples. It must contain #' variable \code{sample_id} with unique sample names. #' #' @examples #' # -------------------------------------------------------------------------- #' # Create dmSQTLdata object #' # -------------------------------------------------------------------------- #' # Use subsets of data defined in the GeuvadisTranscriptExpr package #' #' library(GeuvadisTranscriptExpr) #' \donttest{ #' geuv_counts <- GeuvadisTranscriptExpr::counts #' geuv_genotypes <- GeuvadisTranscriptExpr::genotypes #' geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges #' geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges #' #' colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") #' colnames(geuv_genotypes)[4] <- "snp_id" #' geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) #' #' d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, #' genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, #' samples = geuv_samples, window = 5e3) #' } #' @author Malgorzata Nowicka #' @seealso \code{\linkS4class{dmSQTLprecision}}, #' \code{\linkS4class{dmSQTLfit}}, \code{\linkS4class{dmSQTLtest}} setClass("dmSQTLdata", representation(counts = "MatrixList", genotypes = "MatrixList", blocks = "MatrixList", samples = "data.frame")) ################################### setValidity("dmSQTLdata", function(object){ ### Has to return TRUE when valid object! if(!ncol(object@counts) == ncol(object@genotypes)) return(paste0("Unequal number of samples in 'counts' and 'genotypes' ", ncol(object@counts), " and ", ncol(object@genotypes))) ### Mystery: This does not pass # if(!all(colnames(object@blocks) %in% c("block_id", "snp_id"))) # return(paste0("'blocks' must contain 'block_id' and 'snp_id' variables")) if(!all(names(object@counts) == names(object@genotypes))) return("'genotypes' and 'counts' do not contain the same genes") if(!all(names(object@blocks) == names(object@genotypes))) return("'genotypes' and 'blocks' do not contain the same genes or SNPs") return(TRUE) }) ############################################################################### ### show, accessing and subsetting methods ############################################################################### #' @rdname dmSQTLdata-class #' @export setMethod("counts", "dmSQTLdata", function(object){ data.frame(gene_id = rep(names(object@counts), elementNROWS(object@counts)), feature_id = rownames(object@counts), object@counts@unlistData, stringsAsFactors = FALSE, row.names = NULL) }) #' @rdname dmSQTLdata-class #' @export setMethod("samples", "dmSQTLdata", function(x) x@samples ) ################################ setMethod("show", "dmSQTLdata", function(object){ cat("An object of class", class(object), "\n") cat("with", length(object), "genes and", ncol(object@counts), "samples\n") cat("* data accessors: counts(), samples()\n") }) ################################ #' @rdname dmSQTLdata-class #' @export setMethod("names", "dmSQTLdata", function(x) names(x@counts) ) #' @rdname dmSQTLdata-class #' @export setMethod("length", "dmSQTLdata", function(x) length(x@counts) ) #' @aliases [,dmSQTLdata-method [,dmSQTLdata,ANY-method #' @rdname dmSQTLdata-class #' @export setMethod("[", "dmSQTLdata", function(x, i, j){ if(missing(j)){ counts <- x@counts[i, , drop = FALSE] genotypes <- x@genotypes[i, , drop = FALSE] blocks <- x@blocks[i, , drop = FALSE] samples <- x@samples }else{ if(missing(i)){ counts <- x@counts[, j, drop = FALSE] genotypes <- x@genotypes[, j, drop = FALSE] }else{ counts <- x@counts[i, j, drop = FALSE] genotypes <- x@genotypes[i, j, drop = FALSE] blocks <- x@blocks[i, , drop = FALSE] } samples <- x@samples rownames(samples) <- samples$sample_id samples <- samples[j, , drop = FALSE] samples$sample_id <- factor(samples$sample_id) rownames(samples) <- NULL } return(new("dmSQTLdata", counts = counts, genotypes = genotypes, blocks = blocks, samples = samples)) }) ############################################################################### ### dmSQTLdata ############################################################################### blocks_per_gene <- function(g, genotypes){ # g = 1 genotypes_df <- data.frame(t(genotypes[[g]])) matching_snps <- match(genotypes_df, genotypes_df) oo <- order(matching_snps, decreasing = FALSE) block_id <- paste0("block_", as.numeric(factor(matching_snps))) snp_id <- colnames(genotypes_df) blocks_tmp <- cbind(block_id, snp_id) return(blocks_tmp[oo, , drop = FALSE]) } #' Create dmSQTLdata object #' #' Constructor functions for a \code{\linkS4class{dmSQTLdata}} object. #' dmSQTLdata assignes to a gene all the SNPs that are located in a given #' surrounding (\code{window}) of this gene. #' #' It is quite common that sample grouping defined by some of the SNPs is #' identical. Compare \code{dim(genotypes)} and \code{dim(unique(genotypes))}. #' In our QTL analysis, we do not repeat tests for the SNPs that define the #' same grouping of samples. Each grouping is tested only once. SNPs that define #' such unique groupings are aggregated into blocks. P-values and adjusted #' p-values are estimated at the block level, but the returned results are #' extended to a SNP level by repeating the block statistics for each SNP that #' belongs to a given block. #' #' @inheritParams dmDSdata #' @param genotypes Data frame with genotypes. Rows correspond to SNPs. This #' data frame has to contain a \code{snp_id} column with SNP IDs and columns #' with genotypes for each sample. Column names corresponding to sample IDs #' must be the same as in the \code{sample} data frame. The genotype of each #' sample is coded in the following way: 0 for ref/ref, 1 for ref/not ref, 2 #' for not ref/not ref, -1 or \code{NA} for missing value. #' @param gene_ranges \code{\linkS4class{GRanges}} object with gene location. It #' must contain gene names when calling names(). #' @param snp_ranges \code{\linkS4class{GRanges}} object with SNP location. It #' must contain SNP names when calling names(). #' @param window Size of a down and up stream window, which is defining the #' surrounding for a gene. Only SNPs that are located within a gene or its #' surrounding are considered in the sQTL analysis. #' @param samples Data frame with column \code{sample_id} corresponding to #' unique sample IDs #' @param BPPARAM Parallelization method used by #' \code{\link[BiocParallel]{bplapply}}. #' #' @return Returns a \code{\linkS4class{dmSQTLdata}} object. #' #' @examples #' # -------------------------------------------------------------------------- #' # Create dmSQTLdata object #' # -------------------------------------------------------------------------- #' # Use subsets of data defined in the GeuvadisTranscriptExpr package #' #' library(GeuvadisTranscriptExpr) #' \donttest{ #' geuv_counts <- GeuvadisTranscriptExpr::counts #' geuv_genotypes <- GeuvadisTranscriptExpr::genotypes #' geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges #' geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges #' #' colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") #' colnames(geuv_genotypes)[4] <- "snp_id" #' geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) #' #' d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, #' genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, #' samples = geuv_samples, window = 5e3) #' } #' @seealso \code{\link{plotData}} #' @author Malgorzata Nowicka #' @export #' @importFrom IRanges width #' @importFrom S4Vectors queryHits subjectHits dmSQTLdata <- function(counts, gene_ranges, genotypes, snp_ranges, samples, window = 5e3, BPPARAM = BiocParallel::SerialParam()){ stopifnot(is.numeric(window)) stopifnot(window >= 0) ### Check on samples stopifnot(class(samples) == "data.frame") stopifnot("sample_id" %in% colnames(samples)) stopifnot(sum(duplicated(samples$sample_id)) == 0) ### Check on counts stopifnot(class(counts) == "data.frame") stopifnot(all(c("gene_id", "feature_id") %in% colnames(counts))) stopifnot(all(samples$sample_id %in% colnames(counts))) ### Check on genotypes stopifnot(class(genotypes) == "data.frame") stopifnot("snp_id" %in% colnames(genotypes)) stopifnot(all(samples$sample_id %in% colnames(counts))) sample_id <- samples$sample_id gene_id <- counts$gene_id feature_id <- counts$feature_id snp_id <- genotypes$snp_id stopifnot( class( gene_id ) %in% c("character", "factor")) stopifnot( class( feature_id ) %in% c("character", "factor")) stopifnot( class( sample_id ) %in% c("character", "factor")) stopifnot( class( snp_id ) %in% c("character", "factor")) stopifnot(all(!is.na(gene_id))) stopifnot(all(!is.na(feature_id))) stopifnot(all(!is.na(sample_id))) stopifnot(all(!is.na(snp_id))) counts <- counts[, as.character(sample_id), drop = FALSE] counts <- as.matrix(counts) stopifnot(mode(counts) %in% "numeric") genotypes <- genotypes[, as.character(sample_id), drop = FALSE] genotypes <- as.matrix(genotypes) stopifnot(mode(genotypes) %in% "numeric") stopifnot(all(genotypes %in% c(-1, 0, 1, 2, NA))) rownames(genotypes) <- snp_id stopifnot(class(gene_ranges) == "GRanges") stopifnot(class(snp_ranges) == "GRanges") stopifnot(!is.null(names(snp_ranges))) stopifnot(!is.null(names(gene_ranges))) ### Keep genes that are in counts and in gene_ranges genes_overlap <- intersect(names(gene_ranges), gene_id) genes2keep <- gene_id %in% genes_overlap counts <- counts[genes2keep, , drop = FALSE] gene_id <- gene_id[genes2keep] feature_id <- feature_id[genes2keep] gene_ranges <- gene_ranges[genes_overlap, ] ### Keep SNPs that are in genotypes and in snp_ranges ### and make them in the same order snps_overlap <- intersect(names(snp_ranges), snp_id) genotypes <- genotypes[snps_overlap, , drop = FALSE] snp_ranges <- snp_ranges[snps_overlap, ] gene_ranges <- GenomicRanges::resize(gene_ranges, width(gene_ranges) + 2 * window, fix = "center") ## Match genes and SNPs variantMatch <- GenomicRanges::findOverlaps(gene_ranges, snp_ranges, select = "all") q <- queryHits(variantMatch) s <- subjectHits(variantMatch) genotypes <- genotypes[s, ] snp_id <- snp_id[s] gene_id_genotypes <- names(gene_ranges)[q] ### keep genes that are in counts and in genotypes genes2keep <- gene_id %in% gene_id_genotypes counts <- counts[genes2keep, , drop = FALSE] gene_id <- gene_id[genes2keep] feature_id <- feature_id[genes2keep] genes2keep <- gene_id_genotypes %in% gene_id genotypes <- genotypes[genes2keep, , drop = FALSE] gene_id_genotypes <- gene_id_genotypes[genes2keep] snp_id <- snp_id[genes2keep] ### order genes in counts and in genotypes if(class(gene_id) == "character") gene_id <- factor(gene_id, levels = unique(gene_id)) order_counts <- order(gene_id) counts <- counts[order_counts, , drop = FALSE] gene_id <- gene_id[order_counts] feature_id <- feature_id[order_counts] gene_id_genotypes <- factor(gene_id_genotypes, levels = levels(gene_id)) order_genotypes <- order(gene_id_genotypes) genotypes <- genotypes[order_genotypes, , drop = FALSE] gene_id_genotypes <- gene_id_genotypes[order_genotypes] snp_id <- snp_id[order_genotypes] colnames(counts) <- sample_id rownames(counts) <- feature_id colnames(genotypes) <- sample_id rownames(genotypes) <- snp_id inds_counts <- 1:length(gene_id) names(inds_counts) <- feature_id partitioning_counts <- split(inds_counts, gene_id) inds_genotypes <- 1:length(gene_id_genotypes) names(inds_genotypes) <- snp_id partitioning_genotypes <- split(inds_genotypes, gene_id_genotypes) counts <- new( "MatrixList", unlistData = counts, partitioning = partitioning_counts) genotypes <- new( "MatrixList", unlistData = genotypes, partitioning = partitioning_genotypes) ### Keep unique genotypes and create info about blocs inds <- 1:length(genotypes) blocks <- MatrixList(BiocParallel::bplapply(inds, blocks_per_gene, genotypes = genotypes, BPPARAM = BPPARAM)) names(blocks) <- names(genotypes) genotypes_u <- MatrixList(lapply(inds, function(g){ # g = 1 genotypes_tmp <- unique(genotypes[[g]]) rownames(genotypes_tmp) <- paste0("block_", 1:nrow(genotypes_tmp)) return(genotypes_tmp) })) names(genotypes_u) <- names(genotypes) samples <- data.frame(sample_id = sample_id) data <- new("dmSQTLdata", counts = counts, genotypes = genotypes_u, blocks = blocks, samples = samples) return(data) } ################################################################################ ### dmFilter ################################################################################ #' @param minor_allele_freq Minimal number of samples where each of the #' genotypes has to be present. #' @param BPPARAM Parallelization method used by #' \code{\link[BiocParallel]{bplapply}}. #' @details #' #' In QTL analysis, usually, we deal with data that has many more replicates #' than data from a standard differential usage assay. Our example data set #' consists of 91 samples. Requiring that genes are expressed in all samples may #' be too stringent, especially since there may be missing values in the data #' and for some genes you may not observe counts in all 91 samples. Slightly #' lower threshold ensures that we do not eliminate such genes. For example, if #' \code{min_samps_gene_expr = 70} and \code{min_gene_expr = 10}, only genes #' with expression of at least 10 in at least 70 samples are kept. Samples with #' expression lower than 10 have \code{NA}s assigned and are skipped in the #' analysis of this gene. \code{minor_allele_freq} indicates the minimal number #' of samples for the minor allele presence. Usually, it is equal to roughly 5\% #' of total samples. #' #' @examples #' # -------------------------------------------------------------------------- #' # Create dmSQTLdata object #' # -------------------------------------------------------------------------- #' # Use subsets of data defined in the GeuvadisTranscriptExpr package #' #' library(GeuvadisTranscriptExpr) #' \donttest{ #' geuv_counts <- GeuvadisTranscriptExpr::counts #' geuv_genotypes <- GeuvadisTranscriptExpr::genotypes #' geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges #' geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges #' #' colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") #' colnames(geuv_genotypes)[4] <- "snp_id" #' geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) #' #' d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, #' genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, #' samples = geuv_samples, window = 5e3) #' #' # -------------------------------------------------------------------------- #' # sQTL analysis - simple group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, #' minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' } #' @rdname dmFilter #' @export setMethod("dmFilter", "dmSQTLdata", function(x, min_samps_gene_expr = 0, min_samps_feature_expr = 0, min_samps_feature_prop = 0, minor_allele_freq = 0.05 * nrow(samples(x)), min_gene_expr = 0, min_feature_expr = 0, min_feature_prop = 0, BPPARAM = BiocParallel::SerialParam()){ stopifnot(min_samps_gene_expr >= 0 && min_samps_gene_expr <= ncol(x@counts)) stopifnot(min_gene_expr >= 0) stopifnot(min_samps_feature_expr >= 0 && min_samps_feature_expr <= ncol(x@counts)) stopifnot(min_feature_expr >= 0) stopifnot(min_samps_feature_prop >= 0 && min_samps_feature_prop <= ncol(x@counts)) stopifnot(min_feature_prop >= 0 && min_feature_prop <= 1) stopifnot(minor_allele_freq >= 1 && minor_allele_freq <= floor(nrow(samples(x))/2)) data_filtered <- dmSQTL_filter(counts = x@counts, genotypes = x@genotypes, blocks = x@blocks, samples = x@samples, min_samps_gene_expr = min_samps_gene_expr, min_gene_expr = min_gene_expr, min_samps_feature_expr = min_samps_feature_expr, min_feature_expr = min_feature_expr, min_samps_feature_prop = min_samps_feature_prop, min_feature_prop = min_feature_prop, minor_allele_freq = minor_allele_freq, BPPARAM = BPPARAM) return(data_filtered) }) ############################################################################### ### plotData ############################################################################### #' @param plot_type Character specifying which type of histogram to plot. Possible #' values \code{"features"}, \code{"snps"} or \code{"blocks"}. #' @examples #' # -------------------------------------------------------------------------- #' # Create dmSQTLdata object #' # -------------------------------------------------------------------------- #' # Use subsets of data defined in the GeuvadisTranscriptExpr package #' #' library(GeuvadisTranscriptExpr) #' \donttest{ #' geuv_counts <- GeuvadisTranscriptExpr::counts #' geuv_genotypes <- GeuvadisTranscriptExpr::genotypes #' geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges #' geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges #' #' colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") #' colnames(geuv_genotypes)[4] <- "snp_id" #' geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) #' #' d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, #' genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, #' samples = geuv_samples, window = 5e3) #' #' # -------------------------------------------------------------------------- #' # sQTL analysis - simple group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, #' minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' } #' @rdname plotData #' @export setMethod("plotData", "dmSQTLdata", function(x, plot_type = "features"){ stopifnot(length(plot_type) == 1) stopifnot(plot_type %in% c("features", "snps", "blocks")) switch(plot_type, features = { tt <- elementNROWS(x@counts) ggp <- dm_plotDataFeatures(tt) }, snps = { tt <- elementNROWS(x@blocks) ggp <- dm_plotDataSnps(tt) }, blocks = { tt <- elementNROWS(x@genotypes) ggp <- dm_plotDataBlocks(tt) } ) return(ggp) }) DRIMSeq/R/class_dmSQTLfit.R0000755000175200017520000001776514710222503016337 0ustar00biocbuildbiocbuild#' @include class_dmSQTLprecision.R class_dmDSfit.R NULL ################################################################################ ### dmSQTLfit class ################################################################################ #' dmSQTLfit object #' #' dmSQTLfit extends the \code{\linkS4class{dmSQTLprecision}} class by adding #' the full model Dirichlet-multinomial (DM) likelihoods, #' regression coefficients and feature proportion estimates needed for the #' transcript/exon usage QTL analysis. Full model is defined by the genotype of #' a SNP associated with a gene. Estimation takes place for all the genes and #' all the SNPs/blocks assigned to the genes. Result of \code{\link{dmFit}}. #' #' @slot fit_full List of \code{\linkS4class{MatrixList}} objects containing #' estimated feature ratios in each sample based on the full #' Dirichlet-multinomial (DM) model. #' @slot lik_full List of numeric vectors of the per gene DM full model #' likelihoods. #' @slot coef_full \code{\linkS4class{MatrixList}} with the regression #' coefficients based on the DM model. #' @examples #' # -------------------------------------------------------------------------- #' # Create dmSQTLdata object #' # -------------------------------------------------------------------------- #' # Use subsets of data defined in the GeuvadisTranscriptExpr package #' #' library(GeuvadisTranscriptExpr) #' \donttest{ #' geuv_counts <- GeuvadisTranscriptExpr::counts #' geuv_genotypes <- GeuvadisTranscriptExpr::genotypes #' geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges #' geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges #' #' colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") #' colnames(geuv_genotypes)[4] <- "snp_id" #' geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) #' #' d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, #' genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, #' samples = geuv_samples, window = 5e3) #' #' # -------------------------------------------------------------------------- #' # sQTL analysis - simple group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, #' minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d) #' #' plotPrecision(d) #' #' ## Fit full model proportions #' d <- dmFit(d) #' } #' @author Malgorzata Nowicka #' @seealso \code{\linkS4class{dmSQTLdata}}, #' \code{\linkS4class{dmSQTLprecision}}, \code{\linkS4class{dmSQTLtest}} setClass("dmSQTLfit", contains = "dmSQTLprecision", representation(fit_full = "list", lik_full = "list", coef_full = "list")) ######################################## setValidity("dmSQTLfit", function(object){ # Has to return TRUE when valid object # TODO: Add checks for other slots if(!length(object@counts) == length(object@lik_full)) return("Different number of genes in 'counts' and 'lik_full'") return(TRUE) }) ################################################################################ ### show methods ################################################################################ setMethod("show", "dmSQTLfit", function(object){ callNextMethod(object) }) ################################################################################ ### dmFit ################################################################################ #' @details In the QTL analysis, currently, genotypes are defined as numeric #' values 0, 1, and 2. When \code{one_way = TRUE}, simple multiple group fitting #' is performed. When \code{one_way = FALSE}, a regression framework is used #' with the design matrix defined by a formula \code{~ group} where group is a #' continuous (not categorical) variable with values 0, 1, and 2. #' @rdname dmFit #' @export setMethod("dmFit", "dmSQTLprecision", function(x, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, BPPARAM = BiocParallel::SerialParam()){ # Check parameters stopifnot(is.logical(one_way)) stopifnot(length(prop_mode) == 1) stopifnot(prop_mode %in% c("constrOptim")) stopifnot(length(prop_tol) == 1) stopifnot(is.numeric(prop_tol) && prop_tol > 0) stopifnot(length(coef_mode) == 1) stopifnot(coef_mode %in% c("optim", "nlminb", "nlm")) stopifnot(length(coef_tol) == 1) stopifnot(is.numeric(coef_tol) && coef_tol > 0) stopifnot(verbose %in% 0:3) fit <- dmSQTL_fit(counts = x@counts, genotypes = x@genotypes, precision = x@genewise_precision, one_way = one_way, group_formula = ~ group, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, return_fit = FALSE, return_coef = FALSE, verbose = verbose, BPPARAM = BPPARAM) return(new("dmSQTLfit", lik_full = fit[["lik"]], fit_full = fit[["fit"]], mean_expression = x@mean_expression, common_precision = x@common_precision, genewise_precision = x@genewise_precision, counts = x@counts, genotypes = x@genotypes, blocks = x@blocks, samples = x@samples)) }) ################################################################################ ### plotProportions ################################################################################ #' @param snp_id Character indicating the ID of a SNP to be plotted. #' @details In the QTL analysis, plotting of fitted proportions is deactivated #' even when \code{plot_fit = TRUE}. It is due to the fact that neither fitted #' values nor regression coefficients are returned by the \code{dmFit} #' function as they occupy a lot of memory. #' @rdname plotProportions #' @export setMethod("plotProportions", "dmSQTLfit", function(x, gene_id, snp_id, plot_type = "boxplot1", order_features = TRUE, order_samples = TRUE, plot_fit = FALSE, plot_main = TRUE, group_colors = NULL, feature_colors = NULL){ stopifnot(gene_id %in% names(x@blocks)) if(!snp_id %in% x@blocks[[gene_id, "snp_id"]]) stop(paste0("gene ",gene_id, " and SNP ", snp_id, " do not match!")) stopifnot(plot_type %in% c("barplot", "boxplot1", "boxplot2", "lineplot", "ribbonplot")) stopifnot(is.logical(order_features)) stopifnot(is.logical(order_samples)) stopifnot(is.logical(plot_fit)) stopifnot(is.logical(plot_main)) counts_gene <- x@counts[[gene_id]] block_id <- x@blocks[[gene_id]][x@blocks[[gene_id]][, "snp_id"] == snp_id, "block_id"] group <- x@genotypes[[gene_id]][block_id, ] if(!is.null(group_colors) && plot_type %in% c("barplot", "boxplot1", "lineplot")) stopifnot(length(group_colors) == nlevels(group)) if(!is.null(feature_colors) && plot_type %in% c("boxplot2", "ribbonplot")) stopifnot(length(feature_colors) == nrow(counts_gene)) if(nrow(counts_gene) <= 1) stop("!Gene has to have at least 2 features! \n") # Remove NAs nonNAs <- !(is.na(counts_gene[1,]) | is.na(group)) counts_gene <- counts_gene[, nonNAs, drop = FALSE] group <- factor(group[nonNAs]) main <- NULL if(plot_main){ mean_expression_gene <- mean(colSums(counts_gene), na.rm = TRUE) main <- paste0(gene_id, " : ", snp_id, " : ", block_id, "\n Mean expression = ", round(mean_expression_gene)) precision_gene <- x@genewise_precision[[gene_id]][block_id] main <- paste0(main, ", Precision = ", round(precision_gene, 2)) } fit_full <- NULL if(plot_fit && length(x@fit_full) > 0){ fit_full <- x@fit_full[[gene_id]][[which(rownames(x@genotypes[[gene_id]]) == block_id)]][, nonNAs, drop = FALSE] } ggp <- dm_plotProportions(counts = counts_gene, group = group, fit_full = fit_full, main = main, plot_type = plot_type, order_features = order_features, order_samples = order_samples, group_colors = group_colors, feature_colors = feature_colors) return(ggp) }) DRIMSeq/R/class_dmSQTLprecision.R0000755000175200017520000003105214710222503017531 0ustar00biocbuildbiocbuild#' @include class_dmSQTLdata.R NULL ############################################################################### ### dmSQTLprecision class ############################################################################### #' dmSQTLprecision object #' #' dmSQTLprecision extends the \code{\linkS4class{dmSQTLdata}} by adding the #' precision estimates of Dirichlet-multinomial distribution used to model the #' feature (e.g., transcript, exon, exonic bin) counts for each gene-SNP pair in #' the QTL analysis. Result of \code{\link{dmPrecision}}. #' #' @return #' #' \itemize{ \item \code{mean_expression(x)}: Get a data frame with mean gene #' expression. \item \code{common_precision(x)}: Get common precision. \item #' \code{genewise_precision(x)}: Get a data frame with gene-wise precision.} #' #' @param x dmSQTLprecision object. #' #' @slot mean_expression Numeric vector of mean gene expression. #' @slot common_precision Numeric value of estimated common precision. #' @slot genewise_precision List of estimated gene-wise precisions. Each element #' of this list is a vector of precisions estimated for all the genotype #' blocks assigned to a given gene. #' #' @examples #' # -------------------------------------------------------------------------- #' # Create dmSQTLdata object #' # -------------------------------------------------------------------------- #' # Use subsets of data defined in the GeuvadisTranscriptExpr package #' #' library(GeuvadisTranscriptExpr) #' \donttest{ #' geuv_counts <- GeuvadisTranscriptExpr::counts #' geuv_genotypes <- GeuvadisTranscriptExpr::genotypes #' geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges #' geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges #' #' colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") #' colnames(geuv_genotypes)[4] <- "snp_id" #' geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) #' #' d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, #' genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, #' samples = geuv_samples, window = 5e3) #' #' # -------------------------------------------------------------------------- #' # sQTL analysis - simple group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, #' minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d) #' #' plotPrecision(d) #' } #' @author Malgorzata Nowicka #' @seealso \code{\linkS4class{dmSQTLdata}}, \code{\linkS4class{dmSQTLfit}}, #' \code{\linkS4class{dmSQTLtest}} setClass("dmSQTLprecision", contains = "dmSQTLdata", representation(mean_expression = "numeric", common_precision = "numeric", genewise_precision = "list")) # ----------------------------------------------------------------------------- setValidity("dmSQTLprecision", function(object){ # Has to return TRUE when valid object! out <- TRUE if(length(object@mean_expression) > 0){ if(length(object@mean_expression) == length(object@counts)){ if(all(names(object@mean_expression) == names(object@counts))) out <- TRUE else return("Different names of 'counts' and 'mean_expression'") } else return("Unequal length of 'counts' and 'mean_expression'") } if(length(object@genewise_precision) > 0){ if(length(object@genewise_precision) == length(object@counts)){ if(all(lapply(object@genewise_precision, length) == elementNROWS(object@genotypes))) out <- TRUE else return("Different numbers of blocks in 'genotypes' and in 'genewise_precision'") } else return("Unequal number of genes in 'counts' and in 'genewise_precision'") } if(length(object@common_precision) > 0){ if(length(object@common_precision) == 1) out <- TRUE else return("'common_precision' must be a vector of length 1") } return(out) }) ################################################################################ ### accessing methods ################################################################################ #' @rdname dmSQTLprecision-class #' @export setMethod("mean_expression", "dmSQTLprecision", function(x){ data.frame(gene_id = names(x@mean_expression), mean_expression = x@mean_expression, stringsAsFactors = FALSE, row.names = NULL) }) #' @rdname dmSQTLprecision-class #' @export setMethod("common_precision", "dmSQTLprecision", function(x) x@common_precision ) #' @rdname dmSQTLprecision-class #' @export setMethod("genewise_precision", "dmSQTLprecision", function(x){ data.frame(gene_id = rep(names(x@genewise_precision), sapply(x@genewise_precision, length)), block_id = unlist(lapply(x@genewise_precision, names)), genewise_precision = unlist(x@genewise_precision), stringsAsFactors = FALSE, row.names = NULL) }) ################################################################################ ### show methods ################################################################################ setMethod("show", "dmSQTLprecision", function(object){ callNextMethod(object) cat(" mean_expression(), common_precision(), genewise_precision()\n") }) ################################################################################ ### dmPrecision ################################################################################ #' @rdname dmPrecision #' @param speed Logical. If \code{FALSE}, precision is calculated per each #' gene-block. Such calculation may take a long time, since there can be #' hundreds of SNPs/blocks per gene. If \code{TRUE}, there will be only one #' precision calculated per gene and it will be assigned to all the blocks #' matched with this gene. #' @export setMethod("dmPrecision", "dmSQTLdata", function(x, mean_expression = TRUE, common_precision = TRUE, genewise_precision = TRUE, prec_adjust = TRUE, prec_subset = 0.1, prec_interval = c(0, 1e+3), prec_tol = 1e+01, prec_init = 100, prec_grid_length = 21, prec_grid_range = c(-10, 10), prec_moderation = "none", prec_prior_df = 0, prec_span = 0.1, one_way = TRUE, speed = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, BPPARAM = BiocParallel::SerialParam()){ ### Parameter checks: stopifnot(is.logical(mean_expression)) stopifnot(is.logical(common_precision)) stopifnot(is.logical(genewise_precision)) stopifnot(is.logical(prec_adjust)) stopifnot(length(prec_subset) == 1) stopifnot(is.numeric(prec_subset) && prec_subset > 0 && prec_subset <= 1) stopifnot(length(prec_interval) == 2) stopifnot(prec_interval[1] < prec_interval[2]) stopifnot(length(prec_tol) == 1) stopifnot(is.numeric(prec_tol) && prec_tol > 0) stopifnot(length(prec_init) == 1) stopifnot(is.numeric(prec_init)) stopifnot(prec_grid_length > 2) stopifnot(length(prec_grid_range) == 2) stopifnot(prec_grid_range[1] < prec_grid_range[2]) stopifnot(length(prec_moderation) == 1) stopifnot(prec_moderation %in% c("none", "common", "trended")) stopifnot(length(prec_prior_df) == 1) stopifnot(is.numeric(prec_prior_df) && prec_prior_df >= 0) stopifnot(length(prec_span) == 1) stopifnot(is.numeric(prec_span) && prec_span > 0 && prec_span < 1) stopifnot(is.logical(one_way)) stopifnot(is.logical(speed)) stopifnot(length(prop_mode) == 1) stopifnot(prop_mode %in% c("constrOptim")) stopifnot(length(prop_tol) == 1) stopifnot(is.numeric(prop_tol) && prop_tol > 0) stopifnot(length(coef_mode) == 1) stopifnot(coef_mode %in% c("optim", "nlminb", "nlm")) stopifnot(length(coef_tol) == 1) stopifnot(is.numeric(coef_tol) && coef_tol > 0) stopifnot(verbose %in% 0:2) if(mean_expression || (genewise_precision && prec_moderation == "trended")){ mean_expression <- dm_estimateMeanExpression(counts = x@counts, verbose = verbose) }else{ mean_expression <- numeric() } if(common_precision){ if(prec_subset < 1){ message(paste0("! Using a subset of ", prec_subset, " genes to estimate common precision !\n")) genes2keep <- sample(1:length(x@counts), max(round(prec_subset * length(x@counts)), 1), replace = FALSE) }else{ genes2keep <- 1:length(x@counts) } ### Use only one SNP per gene and a null model to make computation faster genotypes_null <- new("MatrixList", unlistData = matrix(1, nrow = length(genes2keep), ncol = ncol(x@genotypes)), partitioning = split(1:length(genes2keep), factor(names(x@genotypes[genes2keep, ]), levels = names(x@genotypes[genes2keep, ])))) common_precision <- dmSQTL_estimateCommonPrecision( counts = x@counts[genes2keep, ], genotypes = genotypes_null, prec_adjust = prec_adjust, prec_interval = prec_interval, prec_tol = prec_tol, one_way = one_way, group_formula = ~ 1, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) }else{ common_precision <- numeric() } if(genewise_precision){ if(length(common_precision)){ message("! Using common_precision = ", round(common_precision, 4), " as prec_init !") prec_init <- common_precision } if(speed){ ### Use only one SNP per gene and a null model to make computation faster G <- length(x@genotypes) inds <- 1:G genotypes_null <- new( "MatrixList", unlistData = matrix(1, nrow = G, ncol = ncol(x@genotypes)), partitioning = split(inds, factor(names(x@genotypes), levels = names(x@genotypes))) ) genewise_precision <- dmSQTL_estimateTagwisePrecision(counts = x@counts, genotypes = genotypes_null, mean_expression = mean_expression, prec_adjust = prec_adjust, prec_init = prec_init, prec_grid_length = prec_grid_length, prec_grid_range = prec_grid_range, prec_moderation = prec_moderation, prec_prior_df = prec_prior_df, prec_span = prec_span, one_way = one_way, group_formula = ~ 1, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) ### Replicate the values for all the snps genewise_precision <- relist(rep(unlist(genewise_precision), times = elementNROWS(x@genotypes)), x@genotypes@partitioning) }else{ genewise_precision <- dmSQTL_estimateTagwisePrecision(counts = x@counts, genotypes = x@genotypes, mean_expression = mean_expression, prec_adjust = prec_adjust, prec_init = prec_init, prec_grid_length = prec_grid_length, prec_grid_range = prec_grid_range, prec_moderation = prec_moderation, prec_prior_df = prec_prior_df, prec_span = prec_span, one_way = one_way, group_formula = ~ group, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) } }else{ genewise_precision <- list() } return(new("dmSQTLprecision", mean_expression = mean_expression, common_precision = common_precision, genewise_precision = genewise_precision, counts = x@counts, genotypes = x@genotypes, blocks = x@blocks, samples = x@samples)) }) ############################################################################### ### plotPrecision ############################################################################### #' @rdname plotPrecision #' @export setMethod("plotPrecision", "dmSQTLprecision", function(x){ if(!length(x@genewise_precision) == length(x@counts)) stop("Genewise precision must be estimated for each gene!") if(!length(x@genewise_precision) == length(x@mean_expression)) stop("Mean expression must be estimated for each gene!") w <- sapply(x@genewise_precision, length) mean_expression <- rep(x@mean_expression, w) nr_features <- rep(elementNROWS(x@counts), w) genewise_precision <- unlist(x@genewise_precision) if(length(x@common_precision) == 0){ common_precision <- NULL }else{ common_precision <- x@common_precision } ggp <- dm_plotPrecision(genewise_precision = genewise_precision, mean_expression = mean_expression, nr_features = nr_features, common_precision = common_precision) return(ggp) }) DRIMSeq/R/class_dmSQTLtest.R0000755000175200017520000002206014710222503016514 0ustar00biocbuildbiocbuild#' @include class_dmSQTLfit.R class_dmDStest.R NULL ############################################################################### ### dmSQTLtest class ############################################################################### #' dmSQTLtest object #' #' dmSQTLtest extends the \code{\linkS4class{dmSQTLfit}} class by adding the #' null model Dirichlet-multinomial likelihoods and the gene-level results of #' testing for differential transcript/exon usage QTLs. Result of #' \code{\link{dmTest}}. #' #' @return #' #' \itemize{ \item \code{results(x)}: Get a data frame with gene-level results. #' } #' #' @param x dmSQTLtest object. #' @param ... Other parameters that can be defined by methods using this #' generic. #' #' @slot lik_null List of numeric vectors with the per gene-snp DM null model #' likelihoods. #' @slot results_gene Data frame with the gene-level results including: #' \code{gene_id} - gene IDs, \code{block_id} - block IDs, \code{snp_id} - SNP #' IDs, \code{lr} - likelihood ratio statistics based on the DM model, #' \code{df} - degrees of freedom, \code{pvalue} - p-values estimated based on #' permutations and \code{adj_pvalue} - Benjamini & Hochberg adjusted #' p-values. #' #' @examples #' # -------------------------------------------------------------------------- #' # Create dmSQTLdata object #' # -------------------------------------------------------------------------- #' # Use subsets of data defined in the GeuvadisTranscriptExpr package #' #' library(GeuvadisTranscriptExpr) #' #' geuv_counts <- GeuvadisTranscriptExpr::counts #' geuv_genotypes <- GeuvadisTranscriptExpr::genotypes #' geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges #' geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges #' #' colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") #' colnames(geuv_genotypes)[4] <- "snp_id" #' geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) #' #' d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, #' genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, #' samples = geuv_samples, window = 5e3) #' #' # -------------------------------------------------------------------------- #' # sQTL analysis - simple group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, #' minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d) #' #' plotPrecision(d) #' #' ## Fit full model proportions #' d <- dmFit(d) #' #' ## Fit null model proportions, perform the LR test to detect tuQTLs #' ## and use the permutation approach to adjust the p-values #' d <- dmTest(d) #' #' ## Plot the gene-level p-values #' plotPValues(d) #' #' ## Get the gene-level results #' head(results(d)) #' #' @author Malgorzata Nowicka #' @seealso \code{\linkS4class{dmSQTLdata}}, #' \code{\linkS4class{dmSQTLprecision}}, \code{\linkS4class{dmSQTLfit}} setClass("dmSQTLtest", contains = "dmSQTLfit", representation(lik_null = "list", results_gene = "data.frame")) ##################################### setValidity("dmSQTLtest", function(object){ # has to return TRUE when valid object! # TODO: Add more checks if(!length(object@counts) == length(object@lik_null)) return("Different number of genes in 'counts' and 'lik_null'") return(TRUE) }) ############################################################################### ### show and accessing methods ############################################################################### #' @rdname dmSQTLtest-class #' @export setMethod("results", "dmSQTLtest", function(x) x@results_gene) # ----------------------------------------------------------------------------- setMethod("show", "dmSQTLtest", function(object){ callNextMethod(object) cat(" results()\n") }) ############################################################################### ### dmTest ############################################################################### #' @param permutation_mode Character specifying which permutation scheme to #' apply for p-value calculation. When equal to \code{"all_genes"}, null #' distribution of p-values is calculated from all genes and the maximum #' number of permutation cycles is 10. When \code{permutation_mode = #' "per_gene"}, null distribution of p-values is calculated for each gene #' separately based on permutations of this individual gene. The latter #' approach may take a lot of computational time. We suggest using the first #' option. #' @rdname dmTest #' @export setMethod("dmTest", "dmSQTLfit", function(x, permutation_mode = "all_genes", one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, BPPARAM = BiocParallel::SerialParam()){ # Check parameters stopifnot(permutation_mode %in% c("all_genes", "per_gene")) stopifnot(is.logical(one_way)) stopifnot(length(prop_mode) == 1) stopifnot(prop_mode %in% c("constrOptim")) stopifnot(length(prop_tol) == 1) stopifnot(is.numeric(prop_tol) && prop_tol > 0) stopifnot(length(coef_mode) == 1) stopifnot(coef_mode %in% c("optim", "nlminb", "nlm")) stopifnot(length(coef_tol) == 1) stopifnot(is.numeric(coef_tol) && coef_tol > 0) stopifnot(verbose %in% 0:2) # Prepare null (one group) genotypes genotypes_null <- x@genotypes genotypes_null@unlistData[!is.na(genotypes_null@unlistData)] <- 1 # Fit the DM null model fit0 <- dmSQTL_fit(counts = x@counts, genotypes = genotypes_null, precision = x@genewise_precision, one_way = one_way, group_formula = ~ 1, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, return_fit = FALSE, return_coef = FALSE, verbose = verbose, BPPARAM = BPPARAM) ## Perform the LR test results_list <- lapply(1:length(x@counts), function(g){ # g = 1 ## Calculate the degrees of freedom df <- (nrow(x@counts[[g]]) - 1) * (apply(x@genotypes[[g]], 1, function(x) length(unique(x))) - 1) out <- dm_LRT(lik_full = x@lik_full[[g]], lik_null = fit0[["lik"]][[g]], df = df, verbose = FALSE) return(out) }) if(verbose) message("\n** Running permutations..\n") ### Calculate adjusted p-values using permutations switch(permutation_mode, all_genes = { ## P-value for a gene computed using all the permutations pvalues <- unlist(lapply(results_list, function(x) x[, "pvalue"])) pval_adj_perm <- dmSQTL_permutations_all_genes(x = x, pvalues = pvalues, max_nr_perm_cycles = 10, max_nr_min_nr_sign_pval = 1e3, one_way = one_way, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) pval_adj_perm <- relist(pval_adj_perm, x@lik_full) }, per_gene = { ## P-value for a gene computed using permutations of that gene pvalues <- lapply(results_list, function(x) x[, "pvalue"]) pval_adj_perm <- dmSQTL_permutations_per_gene(x = x, pvalues = pvalues, max_nr_perm = 1e6, max_nr_sign_pval = 1e2, one_way = one_way, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) } ) pval_adj_perm_BH <- relist(p.adjust(unlist(pval_adj_perm), method="BH"), pval_adj_perm) inds <- 1:length(results_list) for(i in inds){ results_list[[i]][, "pvalue"] <- pval_adj_perm[[i]] results_list[[i]][, "adj_pvalue"] <- pval_adj_perm_BH[[i]] } gene_ids <- names(x@blocks) ## Output the original SNPs results_new <- lapply(inds, function(i){ # i = 4 mm <- match(x@blocks[[i]][, "block_id"], rownames(x@genotypes[[i]])) out <- data.frame(gene_id = gene_ids[i], x@blocks[[i]], results_list[[i]][mm, , drop = FALSE], stringsAsFactors = FALSE) return(out) }) results_new <- do.call(rbind, results_new) return(new("dmSQTLtest", lik_null = fit0[["lik"]], results_gene = results_new, lik_full = x@lik_full, fit_full = x@fit_full, mean_expression = x@mean_expression, common_precision = x@common_precision, genewise_precision = x@genewise_precision, counts = x@counts, genotypes = x@genotypes, blocks = x@blocks, samples = x@samples)) }) ############################################################################### ### plotPValues ############################################################################### #' @rdname plotPValues #' @export setMethod("plotPValues", "dmSQTLtest", function(x){ ### Plot p-values for unique blocks (not SNPs) keep <- !duplicated(x@results_gene[, c("gene_id", "block_id"), drop = FALSE]) ggp <- dm_plotPValues(pvalues = x@results_gene[keep, "pvalue"]) return(ggp) }) DRIMSeq/R/class_show_utils.R0000644000175200017520000000754614710222503016721 0ustar00biocbuildbiocbuild### Functions that are used in show methods ################################################################################ #' @importFrom utils head tail show_matrix <- function(object, nhead = 2, ntail = 2){ # object is a matrix nr <- nrow(object) nc <- ncol(object) cat(class(object), " with ", nr, ifelse(nr == 1, " row and ", " rows and "), nc, ifelse(nc == 1, " column\n", " columns\n"), sep = "") if(nr > 0 && nc > 0){ if(is.null(colnames(object))){ colnames(object) <- paste0("[,", 1:ncol(object), "]") } if(is.null(rownames(object))){ rownames(object) <- paste0("[", 1:nrow(object), ",]") } if(nr <= (nhead + ntail)){ out <- object }else{ out <- do.call(rbind, list(head(object, nhead), matrix(rep.int("...", nc), 1, nc, dimnames = list(NULL, colnames(object))), tail(object, ntail))) nms <- rownames(object) if(nhead > 0) s1 <- paste0(head(nms, nhead)) if(ntail > 0) s2 <- paste0(tail(nms, ntail)) rownames(out) <- c(s1, "...", s2) } if(nc > (nhead + ntail)){ out <- do.call(cbind, list(out[, 1:nhead, drop = FALSE], matrix(rep.int("...", ifelse(nr < (nhead + ntail + 1L), min(nr, nhead + ntail), nhead + ntail + 1L)), ncol = 1, dimnames = list(NULL, "...")), out[, (nc-ntail+1):nc, drop = FALSE])) } ### print adjusted for numeric or character if(mode(object) == "numeric"){ print(out, quote = FALSE, right = TRUE, na.print = "NA") }else{ print(out, quote = TRUE, right = TRUE, na.print = "NA") } } } ################################################################################ show_numeric <- function(object, nhead = 2, ntail = 2, class = TRUE, print = TRUE){ nl <- length(object) if(class) cat(class(object), "of length", length(object), "\n") if(nl > 0){ if(nl < (nhead + ntail + 1L)) { out <- round(object, 2) } else { dots <- "..." if(!is.null(names(object))) names(dots) <- "..." out <- c(round(head(object, nhead), 2), dots , round(tail(object, ntail), 2)) } if(print) print(out, quote = FALSE, right = TRUE) else return(out) }else{ if(print) print(object) else return(object) } } ################################################################################ show_numeric_list <- function(object, nhead = 2){ nl <- length(object) cat(class(object), "of length", nl, "\n") if(nl > 0){ np <- min(nl, nhead) object <- object[1:np] if(is.null(names(object))) print_names <- paste0("[[", 1:np, "]]\n") else print_names <- paste0("$", names(object), "\n") for(i in 1:np){ cat(print_names[i]) show_numeric(object[[i]]) cat("\n") } if(np < nl){ if(is.null(names(object))) cat(paste0("[[...]]\n")) else cat(paste0("$...\n")) } }else{ print(object) } } ################################################################################ show_MatrixList_list <- function(object, nhead = 2){ nl <- length(object) cat(class(object), "of length", nl, "\n") if(nl > 0){ np <- min(nl, nhead) object <- object[1:np] if(is.null(names(object))) print_names <- paste0("[[", 1:np, "]]\n") else print_names <- paste0("$", names(object), "\n") for(i in 1:np){ cat(print_names[i]) print(object[[i]]) cat("\n") } if(np < nl){ if(is.null(names(object))) cat(paste0("[[...]]\n")) else cat(paste0("$...\n")) } }else{ print(object) } } DRIMSeq/R/dmDS_CRadjustment.R0000755000175200017520000000443214710222503016640 0ustar00biocbuildbiocbuild dmDS_CRadjustmentManyGroups_gene <- function(g, counts, ngroups, lgroups, igroups, prec, prop, verbose){ if(verbose >= 2) message(" Gene:", g) a <- dm_CRadjustmentManyGroups(y = counts[[g]], ngroups = ngroups, lgroups = lgroups, igroups = igroups, prec = prec[g], prop = prop[[g]]) return(a) } dmDS_CRadjustmentRegression_gene <- function(g, counts, design, prec, fit, verbose){ if(verbose >= 2) message(" Gene:", g) a <- dm_CRadjustmentRegression(y = counts[[g]], x = design, prec = prec[g], prop = fit[[g]]) return(a) } dmDS_CRadjustment <- function(counts, fit, design, precision, one_way = TRUE, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ time_start <- Sys.time() if(verbose) message("* Calculating Cox-Reid adjustment.. \n") inds <- 1:length(counts) # Prepare precision if(length(precision) == 1){ prec <- rep(precision, length(inds)) } else { prec <- precision } # If the design is equivalent to a oneway layout, use a shortcut algorithm groups <- edgeR::designAsFactor(design) if(nlevels(groups) == ncol(design) && one_way){ groups <- factor(groups, labels = paste0("gr", levels(groups))) ngroups <- nlevels(groups) lgroups <- levels(groups) igroups <- lapply(lgroups, function(gr){which(groups == gr)}) names(igroups) <- lgroups # Get the column number of a first occurance of a group level figroups <- unlist(lapply(igroups, function(x){x[1]})) prop <- fit[, figroups] a <- BiocParallel::bplapply(inds, dmDS_CRadjustmentManyGroups_gene, counts = counts, ngroups = ngroups, lgroups = lgroups, igroups = igroups, prec = prec, prop = prop, verbose = verbose, BPPARAM = BPPARAM) names(a) <- names(counts) adj <- unlist(a) }else{ a <- BiocParallel::bplapply(inds, dmDS_CRadjustmentRegression_gene, counts = counts, design = design, prec = prec, fit = fit, verbose = verbose, BPPARAM = BPPARAM) names(a) <- names(counts) adj <- unlist(a) } time_end <- Sys.time() if(verbose >= 2) message("\n") if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") # adj is a vector of length G return(adj) } DRIMSeq/R/dmDS_estimateCommonPrecision.R0000755000175200017520000000310314710222503021067 0ustar00biocbuildbiocbuild#' @importFrom stats optimize dmDS_profileLikCommon <- function(prec, counts, design, prec_adjust = TRUE, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ if(verbose >= 2) message("Precision in optimize:", prec) adj_lik <- dmDS_profileLik(prec = prec, counts = counts, design = design, prec_adjust = prec_adjust, one_way = one_way, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) adj_lik_common <- sum(adj_lik, na.rm = TRUE) return(adj_lik_common) } dmDS_estimateCommonPrecision <- function(counts, design, prec_adjust = TRUE, prec_interval = c(0, 1e+5), prec_tol = 1e-01, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ time_start <- Sys.time() if(verbose) message("* Estimating common precision.. \n") optimum <- optimize(f = dmDS_profileLikCommon, interval = prec_interval, counts = counts, design = design, prec_adjust = prec_adjust, one_way = one_way, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = max(0, verbose-1), BPPARAM = BPPARAM, maximum = TRUE, tol = prec_tol) precision <- optimum$maximum time_end <- Sys.time() if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") return(precision) } DRIMSeq/R/dmDS_estimateTagwisePrecision.R0000644000175200017520000000413414710222503021244 0ustar00biocbuildbiocbuild#' @importFrom stats complete.cases dmDS_estimateTagwisePrecision <- function(counts, design, mean_expression, prec_adjust = TRUE, prec_init = 100, prec_grid_length = 21, prec_grid_range = c(-10, 10), prec_moderation = "none", prec_prior_df = 0, prec_span = 0.1, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ time_start <- Sys.time() if(verbose) message("* Estimating genewise precision.. \n") ### Standard grid like in edgeR spline_pts <- seq(from = prec_grid_range[1], to = prec_grid_range[2], length = prec_grid_length) spline_prec <- prec_init * 2^spline_pts # Calculate the likelihood for each gene at the spline precision points loglik <- matrix(NA, nrow = length(counts), ncol = prec_grid_length) for(i in seq(prec_grid_length)){ # i = 1 loglik[, i] <- dmDS_profileLik(prec = spline_prec[i], counts = counts, design = design, prec_adjust = prec_adjust, one_way = one_way, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = max(0, verbose - 1), BPPARAM = BPPARAM) } not_nas <- complete.cases(loglik) loglik <- loglik[not_nas, , drop = FALSE] if(nrow(loglik) == 0){ precision <- rep(NA, length(counts)) names(precision) <- names(counts) return(precision) } if(prec_moderation != "none"){ mean_expression <- mean_expression[not_nas] loglik <- dm_profileLikModeration(loglik = loglik, mean_expression = mean_expression, prec_moderation = prec_moderation, prec_prior_df = prec_prior_df, prec_span = prec_span) } out <- edgeR::maximizeInterpolant(spline_pts, loglik) # Set NA for genes that tagwise prec could not be calculated precision <- rep(NA, length(counts)) names(precision) <- names(counts) precision[not_nas] <- prec_init * 2^out time_end <- Sys.time() if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") return(precision) } DRIMSeq/R/dmDS_filter.R0000644000175200017520000000467314710222503015526 0ustar00biocbuildbiocbuild dmDS_filter <- function(counts, min_samps_gene_expr = 6, min_gene_expr = 10, min_samps_feature_expr = 3, min_feature_expr = 10, min_samps_feature_prop = 3, min_feature_prop = 0.01, run_gene_twice=FALSE){ inds <- which(elementNROWS(counts) > 1) counts_new <- lapply(inds, function(g){ # g = 117 # print(g) expr_features <- counts[[g]] ### no genes with no expression if(sum(expr_features, na.rm = TRUE) == 0) return(NULL) ### genes with min expression if(! sum(colSums(expr_features) >= min_gene_expr, na.rm = TRUE) >= min_samps_gene_expr ) return(NULL) ### no features with no expression features2keep <- rowSums(expr_features > 0, na.rm = TRUE) > 0 ### no genes with one feature if(sum(features2keep) <= 1) return(NULL) expr_features <- expr_features[features2keep, , drop = FALSE] ### features with min expression features2keep <- rowSums(expr_features >= min_feature_expr, na.rm = TRUE) >= min_samps_feature_expr ### no genes with one feature if(sum(features2keep) <= 1) return(NULL) expr_features <- expr_features[features2keep, , drop = FALSE] ### genes with zero expression samps2keep <- colSums(expr_features) > 0 & !is.na(expr_features[1, ]) if(sum(samps2keep) < max(1, min_samps_feature_prop)) return(NULL) prop <- prop.table(expr_features[, samps2keep, drop = FALSE], 2) # prop.table(matrix(c(1,0), 2, 1), 2) # prop.table(matrix(c(0,0), 2, 1), 2) # prop.table(matrix(c(0,0, 1, 0), 2, 2), 2) ### features with min proportion features2keep <- rowSums(prop >= min_feature_prop) >= min_samps_feature_prop ### no genes with one feature if(sum(features2keep) <= 1) return(NULL) expr <- expr_features[features2keep, , drop = FALSE] if (run_gene_twice) { ### no genes with no expression if(sum(expr_features, na.rm = TRUE) == 0) return(NULL) ### genes with min expression if(! sum(colSums(expr_features) >= min_gene_expr, na.rm = TRUE) >= min_samps_gene_expr ) return(NULL) } return(expr) }) names(counts_new) <- names(counts)[inds] counts_new <- counts_new[!sapply(counts_new, is.null)] if(length(counts_new) == 0) stop("!No genes left after filtering!") counts_new <- MatrixList(counts_new) return(counts_new) } DRIMSeq/R/dmDS_fit.R0000755000175200017520000001610514710222503015017 0ustar00biocbuildbiocbuild# Fitting the Dirichlet-multinomial model dmDS_fitManyGroups_gene <- function(g, counts, ngroups, lgroups, igroups, prec, prop_mode, prop_tol, verbose){ if(verbose >= 2) message(" Gene:", g) f <- dm_fitManyGroups(y = counts[[g]], ngroups = ngroups, lgroups = lgroups, igroups = igroups, prec = prec[g], prop_mode = prop_mode, prop_tol = prop_tol) return(f) } dmDS_fitRegression_gene <- function(g, counts, design, prec, coef_mode, coef_tol, verbose){ if(verbose >= 2) message(" Gene:", g) f <- dm_fitRegression(y = counts[[g]], design = design, prec = prec[g], coef_mode = coef_mode, coef_tol = coef_tol) return(f) } dmDS_fit <- function(counts, design, precision, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ time_start <- Sys.time() if(verbose) message("* Fitting the DM model.. \n") inds <- 1:length(counts) # Prepare precision if(length(precision) == 1){ prec <- rep(precision, length(inds)) } else { prec <- precision } # Approach from edgeR glmFit.default: # If the design is equivalent to a oneway layout, use a shortcut algorithm groups <- edgeR::designAsFactor(design) if(nlevels(groups) == ncol(design) && one_way && all(c(design) %in% c(0, 1))){ if(verbose) message(" Using the one way approach. \n") groups <- factor(groups, labels = paste0("gr", levels(groups))) ngroups <- nlevels(groups) lgroups <- levels(groups) igroups <- lapply(lgroups, function(gr){which(groups == gr)}) names(igroups) <- lgroups ff <- BiocParallel::bplapply(inds, dmDS_fitManyGroups_gene, counts = counts, ngroups = ngroups, lgroups = lgroups, igroups = igroups, prec = prec, prop_mode = prop_mode, prop_tol = prop_tol, verbose = verbose, BPPARAM = BPPARAM) names(ff) <- names(counts) lik <- unlist(lapply(ff, function(f) sum(f[["lik"]]))) prop <- MatrixList(lapply(ff, function(f) f[["prop"]])) fit <- prop[, groups] colnames(fit) <- colnames(counts) # Get the coefficients like in edgeR::mglmOneWay design_unique <- unique(design) # Use the last feature (q-th) as a denominator logit_prop <- MatrixList(lapply(ff, function(f) t(t(f[["prop"]])/f[["prop"]][nrow(f[["prop"]]), ]))) logit_prop <- log(logit_prop@unlistData) coef <- t(solve(design_unique, t(logit_prop))) coef <- new("MatrixList", unlistData = coef, partitioning = prop@partitioning) colnames(coef) <- colnames(design) }else{ if(verbose) message(" Using the regression approach. \n") ff <- BiocParallel::bplapply(inds, dmDS_fitRegression_gene, counts = counts, design = design, prec = prec, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) names(ff) <- names(counts) lik <- unlist(lapply(ff, function(f) f[["lik"]])) coef <- MatrixList(lapply(ff, function(f) f[["b"]])) colnames(coef) <- colnames(design) fit <- MatrixList(lapply(ff, function(f) f[["fit"]])) colnames(fit) <- colnames(counts) } time_end <- Sys.time() if(verbose >= 2) message("\n") if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") # fit is a MatrixList of matrices q x p # lik is a vector of length G # coef is a MatrixList of matrices q x p return(list(fit = fit, lik = lik, coef = coef)) } # ----------------------------------------------------------------------------- # Fitting the Beta-binomial model # Currently, recalculating the BB likelihoods and coefficients using the # DM fittings/proportions bbDS_fitManyGroups_gene <- function(g, counts, prop, ngroups, lgroups, igroups, prec, verbose){ if(verbose >= 2) message(" Gene:", g) f <- bb_fitManyGroups(y = counts[[g]], prop = prop[[g]], ngroups = ngroups, lgroups = lgroups, igroups = igroups, prec = prec[g]) return(f) } bbDS_fitRegression_gene <- function(g, counts, design, prec, fit, verbose){ if(verbose >= 2) message(" Gene:", g) f <- bb_fitRegression(y = counts[[g]], design = design, prec = prec[g], fit = fit[[g]]) return(f) } bbDS_fit <- function(counts, fit, design, precision, one_way = TRUE, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ time_start <- Sys.time() if(verbose) message("* Fitting the BB model.. \n") inds <- 1:length(counts) # Prepare precision if(length(precision) == 1){ prec <- rep(precision, length(inds)) } else { prec <- precision } # Approach from edgeR: # If the design is equivalent to a oneway layout, use a shortcut algorithm groups <- edgeR::designAsFactor(design) if(nlevels(groups) == ncol(design) && one_way && all(c(design) %in% c(0, 1))){ if(verbose) message(" Using the one way approach. \n") groups <- factor(groups, labels = paste0("gr", levels(groups))) ngroups <- nlevels(groups) lgroups <- levels(groups) igroups <- lapply(lgroups, function(gr){which(groups == gr)}) names(igroups) <- lgroups # Use proportions estimated with the DM model prop <- fit[, unlist(lapply(igroups, function(x){x[1]}))] # Recalculate BB likelihoods ff <- BiocParallel::bplapply(inds, bbDS_fitManyGroups_gene, counts = counts, prop = prop, ngroups = ngroups, lgroups = lgroups, igroups = igroups, prec = prec, verbose = verbose, BPPARAM = BPPARAM) lik <- lapply(ff, function(f){rowSums(f[["lik"]])}) names(lik) <- NULL lik <- unlist(lik) names(lik) <- rownames(counts) # Get the coefficients like in edgeR::mglmOneWay design_unique <- unique(design) logit_prop <- MatrixList(lapply(ff, function(f){ f[["prop"]]/(1 - f[["prop"]]) })) logit_prop <- log(logit_prop@unlistData) # design_unique must be squared for solve() coef <- t(solve(design_unique, t(logit_prop))) coef <- new("MatrixList", unlistData = coef, partitioning = prop@partitioning) }else{ if(verbose) message(" Using the regression approach. \n") ff <- BiocParallel::bplapply(inds, bbDS_fitRegression_gene, counts = counts, design = design, prec = prec, fit = fit, verbose = verbose, BPPARAM = BPPARAM) names(ff) <- names(counts) lik <- unlist(lapply(ff, function(f) f[["lik"]])) names(lik) <- rownames(counts) coef <- MatrixList(lapply(ff, function(f) f[["b"]])) colnames(coef) <- colnames(design) fit <- MatrixList(lapply(ff, function(f) f[["fit"]])) colnames(fit) <- colnames(counts) } time_end <- Sys.time() if(verbose >= 2) message("\n") if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") # fit is a MatrixList of matrices q x p # lik is a vector of length nrow(counts) = total number of features # coef is a MatrixList of matrices q x p return(list(fit = fit, lik = lik, coef = coef)) } DRIMSeq/R/dmDS_profileLik.R0000644000175200017520000000137214710222503016332 0ustar00biocbuildbiocbuild dmDS_profileLik <- function(prec, counts, design, prec_adjust = TRUE, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ fit <- dmDS_fit(counts = counts, design = design, precision = prec, one_way = one_way, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) if(!prec_adjust) return(fit$lik) adj <- dmDS_CRadjustment(counts = counts, fit = fit$fit, design = design, precision = prec, one_way = one_way, verbose = verbose, BPPARAM = BPPARAM) adj_lik <- fit$lik - adj # adj_lik has length G return(adj_lik) } DRIMSeq/R/dmSQTL_CRadjustment.R0000644000175200017520000000556614710222503017123 0ustar00biocbuildbiocbuild dmSQTL_CRadjustmentManyGroups_gene <- function(g, counts, genotypes, prec, fit, verbose){ if(verbose >= 2) message(" Gene:", g) y <- counts[[g]] x <- genotypes[[g]] a <- numeric(nrow(x)) for(i in 1:nrow(x)){ # i = 2 NAs <- is.na(x[i, ]) | is.na(y[1, ]) yy <- y[, !NAs, drop = FALSE] xx <- x[i, !NAs] ff <- fit[[g]][[i]][, !NAs, drop = FALSE] groups <- factor(xx) ngroups <- nlevels(groups) lgroups <- levels(groups) igroups <- lapply(lgroups, function(gr){which(groups == gr)}) names(igroups) <- lgroups # Get the column number of a first occurance of a group level figroups <- unlist(lapply(igroups, function(x){x[1]})) a[i] <- dm_CRadjustmentManyGroups(y = yy, ngroups = ngroups, lgroups = lgroups, igroups = igroups, prec = prec[[g]][i], prop = ff[, figroups, drop = FALSE]) } # a vector of length #snps for gene g return(a) } #' @importFrom stats model.matrix dmSQTL_CRadjustmentRegression_gene <- function(g, counts, genotypes, group_formula = ~ group, prec, fit, verbose){ if(verbose >= 2) message(" Gene:", g) y <- counts[[g]] x <- genotypes[[g]] a <- numeric(nrow(x)) for(i in 1:nrow(x)){ # i = 2 NAs <- is.na(x[i, ]) | is.na(y[1, ]) yy <- y[, !NAs, drop = FALSE] xx <- x[i, !NAs] ff <- fit[[g]][[i]][, !NAs, drop = FALSE] design <- model.matrix(group_formula, data = data.frame(group = xx)) a[i] <- dm_CRadjustmentRegression(y = yy, x = design, prec = prec[[g]][i], prop = ff) } # a vector of length #snps for gene g return(a) } dmSQTL_CRadjustment <- function(counts, fit, genotypes, group_formula = ~ group, precision, one_way = TRUE, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ time_start <- Sys.time() if(verbose) message("* Calculating Cox-Reid adjustment.. \n") inds <- 1:length(counts) # Prepare precision if(class(precision) == "numeric"){ prec <- relist(rep(precision, nrow(genotypes)), genotypes@partitioning) } else { prec <- precision } if(one_way){ adj <- BiocParallel::bplapply(inds, dmSQTL_CRadjustmentManyGroups_gene, counts = counts, genotypes = genotypes, prec = prec, fit = fit, verbose = verbose, BPPARAM = BPPARAM) names(adj) <- names(counts) }else{ adj <- BiocParallel::bplapply(inds, dmSQTL_CRadjustmentRegression_gene, counts = counts, genotypes = genotypes, group_formula = ~ group, prec = prec, fit = fit, verbose = verbose, BPPARAM = BPPARAM) names(adj) <- names(counts) } time_end <- Sys.time() if(verbose >= 2) message("\n") if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") # adj is a list of length G return(adj) } DRIMSeq/R/dmSQTL_estimateCommonPrecision.R0000644000175200017520000000337414710222503021353 0ustar00biocbuildbiocbuild dmSQTL_profileLikCommon <- function(prec, counts, genotypes, prec_adjust = TRUE, prec_interval = c(0, 1e+5), prec_tol = 1e+01, one_way = TRUE, group_formula = ~ group, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ if(verbose >= 2) message("Gamma in optimize:", prec, "\n") adj_lik <- dmSQTL_profileLik(prec = prec, counts = counts, genotypes = genotypes, prec_adjust = prec_adjust, one_way = one_way, group_formula = group_formula, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) adj_lik_common <- sum(adj_lik, na.rm = TRUE) return(adj_lik_common) } #' @importFrom stats optimize dmSQTL_estimateCommonPrecision <- function(counts, genotypes, prec_adjust = TRUE, prec_interval = c(0, 1e+5), prec_tol = 1e+01, one_way = TRUE, group_formula = ~ group, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ time_start <- Sys.time() if(verbose) message("* Estimating common precision.. \n") optimum <- optimize(f = dmSQTL_profileLikCommon, interval = prec_interval, counts = counts, genotypes = genotypes, prec_adjust = prec_adjust, one_way = one_way, group_formula = group_formula, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = max(0, verbose-1), BPPARAM = BPPARAM, maximum = TRUE, tol = prec_tol) precision <- optimum$maximum time_end <- Sys.time() if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") return(precision) } DRIMSeq/R/dmSQTL_estimateTagwisePrecision.R0000644000175200017520000000453114710222503021522 0ustar00biocbuildbiocbuild#' @importFrom stats complete.cases dmSQTL_estimateTagwisePrecision <- function(counts, genotypes, mean_expression, prec_adjust = TRUE, prec_init = 100, prec_grid_length = 21, prec_grid_range = c(-10, 10), prec_moderation = "none", prec_prior_df = 0, prec_span = 0.1, one_way = TRUE, group_formula = ~ group, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ time_start <- Sys.time() if(verbose) message("* Estimating genewise precision.. \n") ### Standard grid like in edgeR spline_pts <- seq(from = prec_grid_range[1], to = prec_grid_range[2], length = prec_grid_length) spline_prec <- prec_init * 2^spline_pts # Calculate the likelihood for each gene and snp # at the spline precision points loglik <- matrix(NA, nrow = nrow(genotypes), ncol = prec_grid_length) for(i in seq(prec_grid_length)){ # i = 1 loglik[, i] <- dmSQTL_profileLik(prec = spline_prec[i], counts = counts, genotypes = genotypes, prec_adjust = prec_adjust, one_way = one_way, group_formula = group_formula, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = max(0, verbose - 1), BPPARAM = BPPARAM) } not_nas <- complete.cases(loglik) loglik <- loglik[not_nas, , drop = FALSE] if(nrow(loglik) == 0){ precision <- rep(NA, nrow(genotypes)) names(precision) <- rownames(genotypes) precision <- relist(precision, genotypes@partitioning) return(precision) } if(prec_moderation != "none"){ mean_expression <- rep(mean_expression, elementNROWS(genotypes))[not_nas] loglik <- dm_profileLikModeration(loglik = loglik, mean_expression = mean_expression, prec_moderation = prec_moderation, prec_prior_df = prec_prior_df, prec_span = prec_span) } out <- edgeR::maximizeInterpolant(spline_pts, loglik) # Set NA for genes that tagwise prec could not be calculated precision <- rep(NA, nrow(genotypes)) names(precision) <- rownames(genotypes) precision[not_nas] <- prec_init * 2^out precision <- relist(precision, genotypes@partitioning) time_end <- Sys.time() if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") return(precision) } DRIMSeq/R/dmSQTL_filter.R0000644000175200017520000001226114710222503015773 0ustar00biocbuildbiocbuild dmSQTL_filter_genotypes_per_gene <- function(g, counts_new, genotypes, minor_allele_freq){ # g = 1 counts_gene <- counts_new[[g]] genotypes_gene <- genotypes[[g]] ## NA for samples with non expressed genes and missing genotype genotypes_gene[, is.na(counts_gene[1,])] <- NA genotypes_gene[genotypes_gene == -1] <- NA ### Keep genotypes with at least minor_allele_freq number of ### variants per group; in other case replace them with NAs genotypes_gene <- apply(genotypes_gene, 1, function(x){ # x <- genotypes_gene[6,] tt <- table(x) if(length(tt) == 1) return(NULL) if(length(tt) == 2){ if(any(tt <= minor_allele_freq)) return(NULL) return(x) }else{ if(sum(tt <= minor_allele_freq) >= 2) return(NULL) x[x == names(tt[tt <= minor_allele_freq])] <- NA return(x) } }) if(!is.null(genotypes_gene)){ if(is.list(genotypes_gene)) genotypes_gene <- do.call(rbind, genotypes_gene) else genotypes_gene <- t(genotypes_gene) } return(genotypes_gene) } dmSQTL_filter <- function(counts, genotypes, blocks, samples, min_samps_gene_expr = 70, min_gene_expr = 20, min_samps_feature_expr = 5, min_feature_expr = 20, min_samps_feature_prop = 5, min_feature_prop = 0.05, minor_allele_freq = 5, run_gene_twice = FALSE, BPPARAM = BiocParallel::SerialParam()){ ######################################################## # filtering on counts, put NA for samples with low gene expression ######################################################## inds <- which(elementNROWS(counts) > 1) counts_new <- lapply(inds, function(g){ # g = 1 expr_features <- counts[[g]] ### no genes with no expression if(sum(expr_features, na.rm = TRUE) == 0) return(NULL) ### genes with min expression if(! sum(colSums(expr_features) >= min_gene_expr, na.rm = TRUE) >= min_samps_gene_expr ) return(NULL) ### no features with no expression features2keep <- rowSums(expr_features > 0, na.rm = TRUE) > 0 ### no genes with one feature if(sum(features2keep) <= 1) return(NULL) expr_features <- expr_features[features2keep, , drop = FALSE] ### features with min expression features2keep <- rowSums(expr_features >= min_feature_expr, na.rm = TRUE) >= min_samps_feature_expr ### no genes with one feature if(sum(features2keep) <= 1) return(NULL) expr_features <- expr_features[features2keep, , drop = FALSE] ### genes with zero expression samps2keep <- colSums(expr_features) > 0 & !is.na(expr_features[1, ]) if(sum(samps2keep) < max(1, min_samps_feature_prop)) return(NULL) ### consider only samples that have min gene expression, to other assign NAs samps2keep <- colSums(expr_features) >= min_gene_expr & !is.na(expr_features[1, ]) if(sum(samps2keep) < max(1, min_samps_feature_prop)) return(NULL) prop <- prop.table(expr_features[, samps2keep, drop = FALSE], 2) features2keep <- rowSums(prop >= min_feature_prop) >= min_samps_feature_prop ### no genes with one feature if(sum(features2keep) <= 1) return(NULL) expr <- expr_features[features2keep, , drop = FALSE] expr[, !samps2keep] <- NA if (run_gene_twice) { ### no genes with no expression if(sum(expr_features, na.rm = TRUE) == 0) return(NULL) ### genes with min expression if(! sum(colSums(expr_features) >= min_gene_expr, na.rm = TRUE) >= min_samps_gene_expr ) return(NULL) } return(expr) }) names(counts_new) <- names(counts)[inds] NULLs <- !sapply(counts_new, is.null) counts_new <- counts_new[NULLs] if(length(counts_new) == 0) stop("!No genes left after filtering!") counts_new <- MatrixList(counts_new) ######################################################## # filtering on genotypes ######################################################## genotypes <- genotypes[inds[NULLs]] blocks <- blocks[inds[NULLs], ] genotypes_new <- BiocParallel::bplapply(1:length(counts_new), dmSQTL_filter_genotypes_per_gene, counts_new = counts_new, genotypes = genotypes, minor_allele_freq = minor_allele_freq, BPPARAM = BPPARAM) names(genotypes_new) <- names(genotypes) NULLs <- !sapply(genotypes_new, is.null) genotypes_new <- genotypes_new[NULLs] if(length(genotypes_new) == 0) stop("!No SNPs left after filtering!") genotypes_new <- MatrixList(genotypes_new) counts_new <- counts_new[NULLs] blocks <- blocks[NULLs, ] ######################################################## # filtering on blocks ######################################################## inds <- 1:length(genotypes_new) blocks_new <- MatrixList(lapply(inds, function(b){ # b = 1 blocks[[b]][blocks[[b]][, "block_id"] %in% rownames(genotypes_new[[b]]), , drop = FALSE] })) names(blocks_new) <- names(genotypes_new) data <- new("dmSQTLdata", counts = counts_new, genotypes = genotypes_new, blocks = blocks_new, samples = samples) return(data) } DRIMSeq/R/dmSQTL_fit.R0000644000175200017520000001047214710222503015272 0ustar00biocbuildbiocbuild# Fitting the Dirichlet-multinomial model dmSQTL_fitManyGroups_gene <- function(g, counts, genotypes, prec, prop_mode, prop_tol, verbose){ # g = 6 if(verbose >= 2) message(" Gene:", g) y <- counts[[g]] x <- genotypes[[g]] ff <- lapply(1:nrow(x), function(i){ # i = 2 NAs <- is.na(x[i, ]) | is.na(y[1, ]) yy <- y[, !NAs, drop = FALSE] xx <- x[i, !NAs] groups <- factor(xx) ngroups <- nlevels(groups) lgroups <- levels(groups) igroups <- lapply(lgroups, function(gr){which(groups == gr)}) names(igroups) <- lgroups f <- dm_fitManyGroups(y = yy, ngroups = ngroups, lgroups = lgroups, igroups = igroups, prec = prec[[g]][i], prop_mode = prop_mode, prop_tol = prop_tol) lik <- sum(f$lik) fit <- matrix(NA, nrow = nrow(y), ncol = ncol(y)) fit[, !NAs] <- f$prop[, groups] return(list(lik = lik, fit = fit)) }) lik <- unlist(lapply(ff, function(f) f[["lik"]])) fit <- MatrixList(lapply(ff, function(f) f[["fit"]])) colnames(fit) <- colnames(counts) # lik is a vector of length nrow(x) # fit is a MatrixList of matrices q x n # DOES NOT return coef return(list(lik = lik, fit = fit)) } #' @importFrom stats model.matrix dmSQTL_fitRegression_gene <- function(g, counts, genotypes, group_formula = ~ group, prec, coef_mode, coef_tol, verbose){ if(verbose >= 2) message(" Gene:", g) y <- counts[[g]] x <- genotypes[[g]] ff <- lapply(1:nrow(x), function(i){ # i = 2 NAs <- is.na(x[i, ]) | is.na(y[1, ]) yy <- y[, !NAs, drop = FALSE] xx <- x[i, !NAs] design <- model.matrix(group_formula, data = data.frame(group = xx)) f <- dm_fitRegression(y = yy, design = design, prec = prec[[g]][i], coef_mode = coef_mode, coef_tol = coef_tol) fit <- matrix(NA, nrow = nrow(y), ncol = ncol(y)) fit[, !NAs] <- f$fit return(list(lik = f$lik, fit = fit)) }) lik <- unlist(lapply(ff, function(f) f[["lik"]])) fit <- MatrixList(lapply(ff, function(f) f[["fit"]])) colnames(fit) <- colnames(counts) # lik is a vector of length nrow(x) # fit is a MatrixList of matrices q x n # DOES NOT return coef return(list(lik = lik, fit = fit)) } dmSQTL_fit <- function(counts, genotypes, precision, one_way = TRUE, group_formula = ~ group, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, return_fit = FALSE, return_coef = FALSE, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ time_start <- Sys.time() if(verbose) message("* Fitting the DM model.. \n") inds <- 1:length(counts) # Prepare precision if(class(precision) == "numeric"){ prec <- relist(rep(precision, nrow(genotypes)), genotypes@partitioning) } else { prec <- precision } # Approach from edgeR glmFit.default: # If oneway layout, use a shortcut algorithm if(one_way){ if(verbose) message(" Using the one way approach. \n") ff <- BiocParallel::bplapply(inds, dmSQTL_fitManyGroups_gene, counts = counts, genotypes = genotypes, prec = prec, prop_mode = prop_mode, prop_tol = prop_tol, verbose = verbose, BPPARAM = BPPARAM) names(ff) <- names(counts) lik <- lapply(ff, function(f) f[["lik"]]) if(return_fit){ fit <- lapply(ff, function(f) f[["fit"]]) }else{ fit <- list() } }else{ if(verbose) message(" Using the regression approach. \n") ff <- BiocParallel::bplapply(inds, dmSQTL_fitRegression_gene, counts = counts, genotypes = genotypes, group_formula = group_formula, prec = prec, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) names(ff) <- names(counts) lik <- lapply(ff, function(f) f[["lik"]]) if(return_fit){ fit <- lapply(ff, function(f) f[["fit"]]) }else{ fit <- list() } } time_end <- Sys.time() if(verbose >= 2) message("\n") if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") # fit is a list of length G of MatrixLists # lik is a list of length G ofvectors # coef Currently, do not compute coef return(list(fit = fit, lik = lik, coef = list())) } DRIMSeq/R/dmSQTL_permutations.R0000755000175200017520000001700614710222503017245 0ustar00biocbuildbiocbuild dmSQTL_permutations_all_genes <- function(x, pvalues, max_nr_perm_cycles = 10, max_nr_min_nr_sign_pval = 1e3, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, BPPARAM = BiocParallel::SerialParam()){ # x dmSQTLfit object # pvalues vector of nominal p-values nas <- is.na(pvalues) pvalues <- pvalues[!nas] pvalues <- factor(pvalues) sum_sign_pval <- rep(0, length(pvalues)) nr_perm_tot <- 0 nr_perm_cycles <- 0 min_nr_sign_pval <- 0 while(nr_perm_cycles < max_nr_perm_cycles && min_nr_sign_pval < max_nr_min_nr_sign_pval){ if(verbose) message(paste0("** Running permutation cycle number ", nr_perm_cycles + 1 , "..")) ### Permute counts for all genes n <- ncol(x@counts) permutation <- sample(n, n) counts_perm <- x@counts[, permutation] # Fit the DM full model fit_full_perm <- dmSQTL_fit(counts = counts_perm, genotypes = x@genotypes, precision = x@genewise_precision, one_way = one_way, group_formula = ~ group, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, return_fit = FALSE, return_coef = FALSE, verbose = verbose, BPPARAM = BPPARAM) # Prepare null (one group) genotypes genotypes_null <- x@genotypes genotypes_null@unlistData[!is.na(genotypes_null@unlistData)] <- 1 # Fit the DM null model fit_null_perm <- dmSQTL_fit(counts = counts_perm, genotypes = genotypes_null, precision = x@genewise_precision, one_way = one_way, group_formula = ~ 1, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, return_fit = FALSE, return_coef = FALSE, verbose = verbose, BPPARAM = BPPARAM) ## Perform the LR test pval_perm <- lapply(1:length(counts_perm), function(g){ # g = 1 ## Calculate the degrees of freedom df <- (nrow(counts_perm[[g]]) - 1) * (apply(x@genotypes[[g]], 1, function(xx) length(unique(xx))) - 1) out <- dm_LRT(lik_full = fit_full_perm[["lik"]][[g]], lik_null = fit_null_perm[["lik"]][[g]], df = df, verbose = FALSE) return(out[, "pvalue"]) }) pval_perm <- unlist(pval_perm) nr_perm <- length(pval_perm) nr_perm_tot <- nr_perm_tot + nr_perm nr_perm_cycles <- nr_perm_cycles + 1 ### Count how many pval_permuted is lower than pvalues from the model nas_perm <- is.na(pval_perm) pval_perm <- pval_perm[!nas_perm] pval_perm_cut <- cut(pval_perm, c(-1, levels(pvalues), 2), right=FALSE) pval_perm_sum <- table(pval_perm_cut) pval_perm_cumsum <- cumsum(pval_perm_sum)[-length(pval_perm_sum)] names(pval_perm_cumsum) <- levels(pvalues) sum_sign_pval <- sum_sign_pval + pval_perm_cumsum[pvalues] pval_adj <- (sum_sign_pval + 1) / (nr_perm_tot + 1) min_nr_sign_pval <- min(sum_sign_pval) } pval_out <- rep(NA, length(pvalues)) pval_out[!nas] <- pval_adj # pval_out vector of permutation adjusted p-values return(pval_out) } dmSQTL_permutations_per_gene <- function(x, pvalues, max_nr_perm = 1e6, max_nr_sign_pval = 1e2, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, BPPARAM = BiocParallel::SerialParam()){ # x dmSQTLfit object # pvalues list of length G of vector with nominal p-values pvalues <- lapply(pvalues, function(x){ pval_tmp <- x[!is.na(x)] pval_tmp <- factor(pval_tmp) return(pval_tmp) }) results_width <- unlist(lapply(pvalues, length)) nas <- results_width == 0 genes2permute <- which(!nas) sum_sign_pval <- vector("list", length(pvalues)) sum_sign_pval[!nas] <- split(rep(0, sum(results_width)), factor(rep(1:length(results_width), times = results_width))) nr_perm_tot <- rep(0, length(x@counts)) nr_perm_tot[nas] <- NA min_nr_sign_pval <- rep(0, length(x@counts)) min_nr_sign_pval[nas] <- NA n <- ncol(x@counts) while(length(genes2permute) > 0){ if(verbose) message(paste0("** ", length(genes2permute), " genes left for permutation..")) ### Permute counts for all genes that need additional permutations permutation <- sample(n, n) counts_perm <- x@counts[genes2permute, permutation] genotypes <- x@genotypes[genes2permute, ] precision <- x@genewise_precision[genes2permute] # Fit the DM full model fit_full_perm <- dmSQTL_fit(counts = counts_perm, genotypes = genotypes, precision = precision, one_way = one_way, group_formula = ~ group, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, return_fit = FALSE, return_coef = FALSE, verbose = verbose, BPPARAM = BPPARAM) # Prepare null (one group) genotypes genotypes_null <- genotypes genotypes_null@unlistData[!is.na(genotypes_null@unlistData)] <- 1 # Fit the DM null model fit_null_perm <- dmSQTL_fit(counts = counts_perm, genotypes = genotypes_null, precision = precision, one_way = one_way, group_formula = ~ 1, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, return_fit = FALSE, return_coef = FALSE, verbose = verbose, BPPARAM = BPPARAM) ## Perform the LR test pval_perm <- lapply(1:length(counts_perm), function(g){ # g = 1 ## Calculate the degrees of freedom df <- (nrow(counts_perm[[g]]) - 1) * (apply(genotypes[[g]], 1, function(xx) length(unique(xx))) - 1) out <- dm_LRT(lik_full = fit_full_perm[["lik"]][[g]], lik_null = fit_null_perm[["lik"]][[g]], df = df, verbose = FALSE) return(out[, "pvalue"]) }) ### Count how many pval_perm is lower than pvalues from the model update_nr_sign_pval <- lapply(1:length(pval_perm), function(i){ # i = 1 pval_perm_gene <- pval_perm[[i]] pval_perm_gene <- pval_perm_gene[!is.na(pval_perm_gene)] pval_perm_cut <- cut(pval_perm_gene, c(-1, levels(pvalues[[genes2permute[i]]]), 2), right=FALSE) pval_perm_sum <- table(pval_perm_cut) pval_perm_cumsum <- cumsum(pval_perm_sum)[-length(pval_perm_sum)] names(pval_perm_cumsum) <- levels(pvalues[[genes2permute[i]]]) nr_sign_pval <- pval_perm_cumsum[pvalues[[genes2permute[i]]]] names(nr_sign_pval) <- NULL return(nr_sign_pval) }) ### Update values in sum_sign_pval for(i in 1:length(update_nr_sign_pval)){ sum_sign_pval[[genes2permute[i]]] <- sum_sign_pval[[genes2permute[i]]] + update_nr_sign_pval[[i]] } nr_perm <- unlist(lapply(pval_perm, length)) nr_perm_tot[genes2permute] <- nr_perm_tot[genes2permute] + nr_perm min_nr_sign_pval[genes2permute] <- unlist(lapply(sum_sign_pval[genes2permute], min)) ### Update genes2permute genes2permute <- which(nr_perm_tot < max_nr_perm & min_nr_sign_pval < max_nr_sign_pval) } ### Calculate permutation adjusted p-values pval_adj <- lapply(1:length(pvalues), function(i){ pval_tmp <- pvalues[[i]] nas <- is.na(pval_tmp) if(sum(!nas) == 0) return(pval_tmp) pval_tmp[!nas] <- (sum_sign_pval[[i]] + 1) / (nr_perm_tot[i] + 1) return(pval_tmp) }) # pval_adj list of length G with vectors of permutation adjusted p-values return(pval_adj) } DRIMSeq/R/dmSQTL_profileLik.R0000644000175200017520000000171614710222503016611 0ustar00biocbuildbiocbuild dmSQTL_profileLik <- function(prec, counts, genotypes, prec_adjust = TRUE, one_way = TRUE, group_formula = ~ group, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ fit <- dmSQTL_fit(counts = counts, genotypes = genotypes, precision = prec, one_way = one_way, group_formula = group_formula, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, return_fit = TRUE, return_coef = FALSE, verbose = verbose, BPPARAM = BPPARAM) if(!prec_adjust) return(unlist(fit$lik)) adj <- dmSQTL_CRadjustment(counts = counts, fit = fit$fit, genotypes = genotypes, group_formula = group_formula, precision = prec, one_way = one_way, verbose = verbose, BPPARAM = BPPARAM) adj_lik <- unlist(fit$lik) - unlist(adj) # adj_lik is a vector containing all the genes and snps return(adj_lik) } DRIMSeq/R/dm_CRadjustmentManyGroups.R0000755000175200017520000000112714710222503020434 0ustar00biocbuildbiocbuild dm_CRadjustmentManyGroups <- function(y, ngroups, lgroups, igroups, prec, prop){ # y can not have any rowSums(y) == 0 - assured during dmFilter # prop matrix q x ngroups if(any(is.na(prop[1, ]))) return(NA) adj <- numeric(ngroups) for(gr in 1:ngroups){ # gr=1 prop_tmp <- prop[, gr] y_tmp <- y[, igroups[[gr]], drop = FALSE] a <- dm_CRadjustmentOneGroup(y = y_tmp, prec, prop = prop_tmp) adj[gr] <- a } adj <- sum(adj) if(is.na(adj)) return(NA) if(abs(adj) == Inf) return(NA) return(adj) } DRIMSeq/R/dm_CRadjustmentOneGroup.R0000755000175200017520000000177214710222503020074 0ustar00biocbuildbiocbuild dm_CRadjustmentOneGroup <- function(y, prec, prop){ # y martix q x n # prop vector of length q # If something is wrong, return NAs if(any(is.na(prop))) return(NA) q <- nrow(y) # NAs for genes with one feature if(q < 2 || is.na(prec)) return(NA) # Check for 0s in rows (features) keep_row <- rowSums(y) > 0 # There must be at least two non-zero features if(sum(keep_row) < 2) return(NA) # Last feature can not be zero since # we use the last feature as a denominator in logit if(keep_row[q] == 0) return(NA) y <- y[keep_row, , drop=FALSE] q <- nrow(y) # Check for 0s in columns (replicates) keep_col <- colSums(y) > 0 y <- y[, keep_col, drop=FALSE] prop <- prop[keep_row] n <- ncol(y) H <- dm_HessianG(prop = prop[-q], prec, y) adj <- log(det(n * (- H) ))/2 ## with Gamma functions ## if prop is NULL then: # Error in is.data.frame(x) : # dims [product 6] do not match the length of object [0] return(adj) } DRIMSeq/R/dm_CRadjustmentRegression.R0000755000175200017520000000177314710222503020457 0ustar00biocbuildbiocbuild #' @importFrom stats optimHess dm_CRadjustmentRegression <- function(y, x, prec, prop){ # prop q x n matrix of fitted proportions # y q x n matrix # x n x p matrix with the design # y can not have any rowSums(y) == 0 - assured during dmFilter if(any(is.na(prop[1, ]))) return(NA) prop <- t(prop) # n x q n <- nrow(prop) q <- ncol(prop) H <- dm_Hessian_regG_prop(y = t(y), prec = prec, prop = prop, x = x) adj <- log(det(n * (-H))) / 2 ## If the above calculation returns NA, try optimHess() if(is.na(adj)){ # Recalculate betas from proportions and the design logit_prop <- log(prop / prop[, q]) # n x q par <- c(MASS::ginv(x) %*% logit_prop[, -q, drop = FALSE]) # Maximization H <- optimHess(par = par, fn = dm_lik_regG, gr = dm_score_regG, x = x, prec = prec, y = y) adj <- log(det(n * (-H))) / 2 if(is.na(adj)) return(NA) } if(abs(adj) == Inf) return(NA) return(adj) } DRIMSeq/R/dm_LRT.R0000644000175200017520000000142214710222503014440 0ustar00biocbuildbiocbuild#' @importFrom stats pchisq p.adjust dm_LRT <- function(lik_full, lik_null, df, verbose = FALSE){ if(verbose) message("* Calculating likelihood ratio statistics.. \n") time_start <- Sys.time() lr <- 2*(lik_full - lik_null) pvalue <- pchisq(lr, df = df , lower.tail = FALSE) adj_pvalue <- p.adjust(pvalue, method="BH") table <- matrix(c(lr, df, pvalue, adj_pvalue), ncol = 4, byrow = FALSE) colnames(table) <- c("lr", "df", "pvalue", "adj_pvalue") # table <- data.frame(lr = lr, df = df, # pvalue = pvalue, adj_pvalue = adj_pvalue, # stringsAsFactors = FALSE) rownames(table) <- names(lik_full) time_end <- Sys.time() if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") return(table) } DRIMSeq/R/dm_core_Hessian.R0000644000175200017520000001171514710222503016407 0ustar00biocbuildbiocbuild############################################################################## # Hessian for q-1 parameters -- with gamma functions ############################################################################## dm_HessianG <- function(prop, prec, y){ # prop has length of q-1 # prec has length 1 # y has q rows and n columns q <- nrow(y) n <- ncol(y) Djj <- rep(0, q-1) propq <- 1-sum(prop) yq <- y[q, ] y <- y[-q, , drop=FALSE] Djl <- prec^2 * sum(trigamma(yq + propq * prec) - trigamma(propq * prec)) Djj <- prec^2 * rowSums(trigamma(y + prop * prec) - trigamma(prop * prec)) H <- matrix(Djl, q-1, q-1) diag(H) <- diag(H) + Djj # H martix (q-1) x (q-1) return(H) } dm_Hessian_regG_prop <- function(y, prec, prop, x){ # y n x q matrix !!! # prop n x q matrix of fitted proportions # x n x p matrix with the design q <- ncol(y) p <- ncol(x) prop_prec <- prop * prec # Some calculations for later ldg_y <- digamma(y + prop_prec) ldg <- digamma(prop_prec) ldgp_y <- ldg_y * prop ldgp_y_sum <- rowSums(ldgp_y) ldgp <- ldg * prop ldgp_sum <- rowSums(ldgp) ltgp_y <- trigamma(y + prop_prec) * prop * prec ltgp <- trigamma(prop_prec) * prop * prec ltgpp_y <- ltgp_y * prop ltgpp_y_sum <- rowSums(ltgpp_y) ltgpp <- ltgp * prop ltgpp_sum <- rowSums(ltgpp) H <- matrix(0, p*(q-1), p*(q-1)) rownames(H) <- colnames(H) <- paste0(rep(colnames(y)[-q], each = p), ":", rep(colnames(x), q-1)) jp_index <- matrix(1:p, nrow = q-1, ncol = p, byrow = TRUE) + p * 0:(q-2) for(jp in 1:(q-1)){ for(jpp in 1:jp){ # jp = 1; jpp = 1 W <- prec * ( - prop[, jp] * prop[, jpp] * (-ldgp_y_sum + ldg_y[, jp] + ldgp_sum - ldg[, jp]) + prop[, jp] * (ltgpp_y_sum * prop[, jpp] - ltgpp_y[, jpp] + ldgp_y_sum * prop[, jpp] - ldgp_y[, jpp] - ltgp_y[, jp] * prop[, jpp] - ltgpp_sum * prop[, jpp] + ltgpp[, jpp] - ldgp_sum * prop[, jpp] + ldgp[, jpp] + ltgp[, jp] * prop[, jpp]) ) if(jp == jpp){ W <- W + prec * ( prop[, jp] * (-ldgp_y_sum + ldg_y[, jp] + ldgp_sum - ldg[, jp]) + prop[, jp] * (ltgp_y[, jp] + ltgp[, jp]) ) } h <- t(x) %*% (W * x) H[jp_index[jp, ], jp_index[jpp, ]] <- h # Use the fact that H is symetric if(!jp == jpp){ H[jp_index[jpp, ], jp_index[jp, ]] <- t(h) } } } # H martix p(q-1) x p(q-1) return(H) } dm_Hessian_regG <- function(b, x, prec, y){ ## b has length of (q-1) * p ## x is a matrix n x p ## y has q rows and n columns y <- t(y) # n x q q <- ncol(y) p <- ncol(x) b <- matrix(b, p, q-1) # p x (q-1) z <- exp(x %*% b) # n x (q-1) prop_qm1 <- z/(1 + rowSums(z)) prop <- cbind(prop_qm1, 1 - rowSums(prop_qm1)) # n x q H <- dm_Hessian_regG_prop(y = y, prec = prec, prop = prop, x = x) return(H) } # Hessian for the multinomial distribution m_Hessian_regG <- function(b, x, y){ ## b has length of (q-1) * p ## x is a matrix n x p ## y has q rows and n columns y <- t(y) # n x q q <- ncol(y) p <- ncol(x) b <- matrix(b, p, q-1) # p x (q-1) z <- exp(x %*% b) # n x (q-1) prop_qm1 <- z/(1 + rowSums(z)) prop <- cbind(prop_qm1, 1 - rowSums(prop_qm1)) # n x q m <- rowSums(y) # n H <- matrix(0, p*(q-1), p*(q-1)) rownames(H) <- colnames(H) <- paste0(rep(colnames(y)[-q], each = p), ":", rep(colnames(x), q-1)) jp_index <- matrix(1:p, nrow = q-1, ncol = p, byrow = TRUE) + p * 0:(q-2) for(jp in 1:(q-1)){ for(jpp in 1:jp){ # jp = 1; jpp = 1 W <- m * prop[, jp] * (prop[, jpp] - as.numeric(jp == jpp)) h <- t(x) %*% (W * x) H[jp_index[jp, ], jp_index[jpp, ]] <- h # Use the fact that H is symetric if(!jp == jpp){ H[jp_index[jpp, ], jp_index[jp, ]] <- t(h) } } } # H martix p(q-1) x p(q-1) return(H) } ############################################################################## # Hessian for q-1 parameters -- with sums ############################################################################## dm_Hessian <- function(prop, prec, y){ # prop has length of q-1 # prec has length 1 # y has q rows and n columns q <- nrow(y) n <- ncol(y) propq <- 1 - sum(prop) Djj <- rep(0, q-1) Djl <- 0 for(i in 1:n){ # i=1 if(y[q, i] == 0){ Djl <- Djl + 0 }else{ Djl <- Djl + sum(-prec^2 / (propq * prec + 1:y[q, i] - 1) ^2) } for(j in 1:(q-1)){ # j=1 if(y[j,i] == 0){ Djj[j] <- Djj[j] + 0 }else{ Djj[j] <- Djj[j] + sum(-prec^2 / (prop[j] * prec + 1:y[j,i] - 1) ^2) } } } H <- matrix(Djl, q-1, q-1) diag(H) <- diag(H) + Djj # H martix (q-1) x (q-1) return(H) } DRIMSeq/R/dm_core_colorb.R0000644000175200017520000000104114710222503016264 0ustar00biocbuildbiocbuildcolorb <- function(n){ clrs <- c("dodgerblue3", "maroon2", "forestgreen", "darkorange1" , "blueviolet", "firebrick2", "deepskyblue", "orchid2", "chartreuse3", "gold", "slateblue1", "tomato" , "blue", "magenta", "green3", "yellow", "purple3", "red" ,"darkslategray1", "lightpink1", "lightgreen", "khaki1", "plum3", "salmon") nc <- length(clrs) if(n > nc) clrs <- rep(clrs, ceiling(n/nc)) clrs[1:n] # colorRampPalette(clrs)(n) } # nb <- 24 # barplot(rep(1, nb), col = colorb(nb)) # dev.off() DRIMSeq/R/dm_core_deviance.R0000644000175200017520000000127414710222503016572 0ustar00biocbuildbiocbuild############################################################################## ## Computes the deviance -- with gamma functions -- for q-1 parameters ############################################################################## dm_devG <- function(prop, prec, y){ ## prop has length of q-1 ## prec has length 1 ## y has q rows and n columns prop <- c(prop, 1 - sum(prop)) ll_mod <- sum(lgamma(y + prop * prec) - lgamma(prop * prec) , na.rm = TRUE ) prop_sat <- y/matrix(colSums(y), nrow(y), ncol(y), byrow = TRUE) ll_sat <- sum(lgamma(y + prop_sat * prec) - lgamma(prop_sat * prec) , na.rm = TRUE) # Inf for y = 0 D <- 2 * (ll_sat - ll_mod) return(D) } DRIMSeq/R/dm_core_lik.R0000644000175200017520000000715014710222503015572 0ustar00biocbuildbiocbuild############################################################################## ## Computes the DM log-likelihood -- with gamma functions -- for q-1 parameters ############################################################################## dm_likG <- function(prop, prec, y){ # prop has length of q-1 # prec has length 1 # y has q rows and n columns # This function returns likelihhod without normalizing component, # but it is OK for optimization and the LR test n <- ncol(y) m <- colSums(y) prop <- c(prop, 1 - sum(prop)) l <- n * lgamma(prec) - sum(lgamma(m + prec)) + sum( colSums( lgamma(y + prop * prec) - lgamma(prop * prec) ) ) # normalizing_part <- sum(lgamma(m + 1) - colSums(lgamma(y + 1))) return(l) } dm_likG_neg <- function(prop, prec, y) -dm_likG(prop, prec, y) dm_lik_regG_prop <- function(y, prec, prop){ # y n x q matrix !!! # prop n x q matrix of fitted proportions n <- nrow(y) m <- rowSums(y) l <- n * lgamma(prec) - sum(lgamma(m + prec)) + sum(rowSums(lgamma(y + prec * prop) - lgamma(prop * prec))) # normalizing_part <- sum(lgamma(m + 1) - rowSums(lgamma(y + 1))) return(l) } dm_lik_regG <- function(b, x, prec, y){ ## b has length of (q-1) * p ## x is a matrix n x p ## prec has length 1 ## y q x n matrix ## This function returns likelihhod without normalizing component, ## but it is OK for optimization and the LR test y <- t(y) # n x q # Get prop from x and b q <- ncol(y) p <- ncol(x) b <- matrix(b, p, q-1) z <- exp(x %*% b) prop <- z/(1 + rowSums(z)) # n x (q-1) prop <- cbind(prop, 1 - rowSums(prop)) l <- dm_lik_regG_prop(y = y, prec = prec, prop = prop) return(l) } dm_lik_regG_neg <- function(b, design, prec, y) -dm_lik_regG(b, x = design, prec, y) ############################################################################## ## Computes the DM log-likelihood -- with sums -- for q-1 parameters ############################################################################## dm_lik <- function(prop, prec, y){ # prop has length q-1 # prec has length 1 # y has q rows and n columns # This function returns likelihhod without normalizing component, # but it is OK for optimization and the LR test q <- nrow(y) n <- ncol(y) m <- colSums(y) prop <- c(prop, 1 - sum(prop)) l <- 0 for(i in 1:n){ # i=1 l <- l - sum(log(prec + 1:m[i] - 1)) for(j in 1:q){ # j=3 if(y[j, i] == 0){ lji <- 0 }else{ lji <- sum(log(prop[j] * prec + 1:y[j, i] - 1)) } l <- l + lji } } return(l) } ############################################################################## ## Computes the BB log-likelihood -- with gamma functions -- for q parameters ############################################################################## bb_likG <- function(prop, prec, y){ # prop has length of q # prec has length 1 # y has q rows and n number of columns m <- colSums(y) q <- length(prop) l <- rep(NA, q) for(i in 1:q){ l[i] <- dm_likG(prop = prop[i], prec = prec, y = rbind(y[i, ], m - y[i, ])) } # l vector of length q return(l) } bb_lik_regG_prop <- function(y, prec, prop){ # y n x q matrix !!! # prop n x q matrix of fitted proportions m <- rowSums(y) q <- ncol(prop) l <- rep(NA, q) for(i in 1:q){ l[i] <- dm_lik_regG_prop(y = cbind(y[, i], m - y[, i]), prec = prec, prop = cbind(prop[, i], 1 - prop[, i])) } # l vector of length q return(l) } DRIMSeq/R/dm_core_score.R0000644000175200017520000000440314710222503016124 0ustar00biocbuildbiocbuild############################################################################## # Score-function for q-1 parameters -- with gamma functions ############################################################################## dm_scoreG <- function(prop, prec, y){ # prop has length of q-1 # prec has length 1 # y has q rows and n columns q <- nrow(y) n <- ncol(y) yq <- y[q,] y <- y[-q, , drop=FALSE] propq <- 1-sum(prop) S <- prec * rowSums( digamma(y + prop * prec) - digamma(prop * prec) - matrix(digamma(yq + prec * propq) - digamma(prec * propq), nrow = q-1, ncol = n, byrow = TRUE) ) return(S) } dm_scoreG_neg <- function(prop, prec, y) -dm_scoreG(prop, prec, y) dm_score_regG <- function(b, x, prec, y){ ## b has length of (q-1) * p ## x is a matrix n x p ## prec has length 1 ## y has q rows and n columns y <- t(y) # n x q n <- nrow(x) q <- ncol(y) p <- ncol(x) b <- matrix(b, p, q-1) # p x (q-1) z <- exp(x %*% b) prop_qm1 <- z/(1 + rowSums(z)) prop <- cbind(prop_qm1, 1 - rowSums(prop_qm1)) y_qm1 <- y[, -q, drop = FALSE] # n x (q-1) S <- t(x) %*% (prec * prop_qm1 * (- rowSums(digamma(y + prop*prec) * prop) + digamma(y_qm1 + prop_qm1*prec) + rowSums(digamma(prop*prec) * prop) - digamma(prop_qm1*prec))) # p x (q-1) return(c(S)) } dm_score_regG_neg <- function(b, design, prec, y) -dm_score_regG(b, x = design, prec, y) ############################################################################## # Score-function for q-1 parameters -- with sums ############################################################################## dm_score <- function(prop, prec, y){ # prop has length of q-1 # prec has length 1 # y has q rows and n columns q <- nrow(y) n <- ncol(y) propq <- 1 - sum(prop) S <- rep(0, q-1) for(i in 1:n){ # i=1 if(y[q, i] == 0){ Sqi <- 0 }else{ Sqi <- sum(prec / (propq * prec + 1:y[q, i] - 1)) } for(j in 1:(q-1)){ # j=1 if(y[j, i] == 0){ Sji <- 0 }else{ Sji <- sum(prec / (prop[j] * prec + 1:y[j, i] - 1)) } S[j] <- S[j] + Sji } S <- S - Sqi } return(S) } DRIMSeq/R/dm_estimateMeanExpression.R0000644000175200017520000000101714710222503020473 0ustar00biocbuildbiocbuild dm_estimateMeanExpression <- function(counts, verbose = FALSE){ # Calculate mean expression of genes time_start <- Sys.time() if(verbose) message("* Calculating mean gene expression.. \n") inds <- 1:length(counts) mean_expression <- unlist(lapply(inds, function(g){ mean(colSums(counts[[g]]), na.rm = TRUE) })) names(mean_expression) <- names(counts) time_end <- Sys.time() if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") return(mean_expression) } DRIMSeq/R/dm_fitManyGroups.R0000644000175200017520000000353414710222503016614 0ustar00biocbuildbiocbuild dm_fitManyGroups <- function(y, ngroups, lgroups, igroups, prec, prop_mode = "constrOptim", prop_tol = 1e-12){ # y can not have any rowSums(y) == 0 - assured during dmFilter q <- nrow(y) prop <- matrix(NA, nrow = q, ncol = ngroups) colnames(prop) <- lgroups rownames(prop) <- rownames(y) lik <- rep(NA, ngroups) names(lik) <- lgroups if(q < 2 || is.na(prec)) return(list(prop = prop, lik = lik)) for(gr in 1:ngroups){ # gr = 1 fit_gr <- dm_fitOneGroup(y = y[, igroups[[gr]], drop = FALSE], prec = prec, prop_mode = prop_mode, prop_tol = prop_tol) if(is.na(fit_gr[["lik"]])) { prop <- matrix(NA, nrow = q, ncol = ngroups) colnames(prop) <- lgroups rownames(prop) <- rownames(y) lik <- rep(NA, ngroups) names(lik) <- lgroups return(list(prop = prop, lik = lik)) } prop[, gr] <- fit_gr[["prop"]] lik[gr] <- fit_gr[["lik"]] } # prop and lik can have NAs # prop matrix q x ngroups # lik vector of length ngroups return(list(prop = prop, lik = lik)) } bb_fitManyGroups <- function(y, ngroups, lgroups, igroups, prec, prop){ # This function calculates BB likelihoods # Proportions prop are estimated with the DM model # y can not have any rowSums(y) == 0 - assured during dmFilter q <- nrow(y) lik <- matrix(NA, nrow = q, ncol = ngroups) colnames(lik) <- lgroups if(is.na(prec)) return(list(prop = prop, lik = lik)) for(gr in 1:ngroups){ # gr = 1 fit_gr <- bb_fitOneGroup(y = y[, igroups[[gr]], drop = FALSE], prec = prec, prop = prop[, gr]) lik[, gr] <- fit_gr[["lik"]] } lik[rowSums(is.na(lik)) > 0, ] <- NA # prop and lik can have NAs # prop matrix q x ngroups # lik matrix q x ngroups return(list(prop = prop, lik = lik)) } DRIMSeq/R/dm_fitOneGroup.R0000755000175200017520000000650014710222503016245 0ustar00biocbuildbiocbuild############################################################################## ## estimate prop for given precision ############################################################################## #' @importFrom stats constrOptim dm_fitOneGroup <- function(y, prec, prop_mode = "constrOptim", prop_tol = 1e-12){ # y matrix q x n # If something is wrong, return NAs q <- nrow(y) # NAs for genes with one feature if(q < 2 || is.na(prec)) return(list(prop = rep(NA, q), lik = NA)) # Check for 0s in rows (features) keep_row <- rowSums(y) > 0 # There must be at least two non-zero features if(sum(keep_row) < 2) return(list(prop = rep(NA, q), lik = NA)) # Last feature can not be zero since # we use the last feature as a denominator in logit if(keep_row[q] == 0) return(list(prop = rep(NA, q), lik = NA)) y <- y[keep_row, , drop=FALSE] q <- nrow(y) # Check for 0s in columns (replicates) keep_col <- colSums(y) > 0 y <- y[, keep_col, drop=FALSE] prop_init <- rowSums(y)/sum(y) # If there is only one replicate, use empirical props as output if(sum(keep_col) == 1){ lik <- dm_likG(prop = prop_init[-q], prec = prec, y = y) keep_row[keep_row] <- prop_init prop <- keep_row return(list(prop = prop, lik = lik)) } switch(prop_mode, constrOptim = { ### Must have constraint for SUM prop = 1 --> ### sum(prop) < 1 + eps & sum(prop) > 1 - eps ui <- rbind(diag(rep(1, q-1), q-1), diag(rep(-1, q-1), q-1), rep(-1, q-1)) ci <- c(rep(0, q-1), rep(-1, q-1), -1 + .Machine$double.eps) # ui <- rbind(diag(rep(1, q-1)), diag(rep(-1, q-1))) # ci <- c(rep(0, q-1), rep(-1, q-1)) # Maximization co <- constrOptim(theta = prop_init[-q], f = dm_likG, grad = dm_scoreG, ui = ui, ci = ci, control = list(fnscale = -1, reltol = prop_tol), method = "BFGS", prec = prec, y = y) if(co$convergence == 0){ prop <- co$par prop <- c(prop, 1 - sum(prop)) lik <- co$value }else{ return(list(prop = rep(NA, length(keep_row)), lik = NA)) } }) keep_row[keep_row] <- prop prop <- keep_row # prop numeric vector of length q # lik numeric of lenght 1 return(list(prop = prop, lik = lik)) } bb_fitOneGroup <- function(y, prec, prop){ # Recalculates likelihood for BB, where prop is estimated with DM q <- nrow(y) # BB lik only for non-NA prop from DM if(any(is.na(prop))) return(list(prop = rep(NA, q), lik = rep(NA, q))) # NAs for genes with one feature if(q < 2 || is.na(prec)) return(list(prop = rep(NA, q), lik = rep(NA, q))) # Check for 0s in rows (features with zero proportions) keep_row <- rowSums(y) > 0 # Must be at least two non zero features if(sum(keep_row) < 2) return(list(prop = rep(NA, q), lik = rep(NA, q))) y <- y[keep_row, , drop=FALSE] prop <- prop[keep_row] # Check for 0s in columns (replicates) keep_col <- colSums(y) > 0 y <- y[, keep_col, drop=FALSE] lik <- rep(NA, q) lik[keep_row] <- bb_likG(prop = prop, prec = prec, y = y) keep_row[keep_row] <- prop prop <- keep_row # prop numeric vector of length q # lik numeric vector of length q return(list(prop = prop, lik = lik)) } DRIMSeq/R/dm_fitRegression.R0000755000175200017520000000771014710222503016633 0ustar00biocbuildbiocbuild #' @importFrom stats optim nlminb nlm dm_fitRegression <- function(y, design, prec, coef_mode = "optim", coef_tol = 1e-12){ # y can not have any rowSums(y) == 0 - assured during dmFilter q <- nrow(y) p <- ncol(design) n <- ncol(y) # NAs for genes with one feature if(q < 2 || is.na(prec)){ b <- matrix(NA, nrow = q, ncol = p) prop <- matrix(NA, nrow = q, ncol = n) rownames(prop) <- rownames(y) rownames(b) <- rownames(y) return(list(b = b, lik = NA, fit = prop)) } # Get the initial values for b # Add 1 to get rid of NaNs and Inf and -Inf values in logit # Double check if this approach is correct!!! # Alternative, use 0s: b_init = rep(0, p*(q-1)) yt <- t(y) + 1 # n x q prop <- yt / rowSums(yt) # n x q logit_prop <- log(prop / prop[, q]) b_init <- c(MASS::ginv(design) %*% logit_prop[, -q, drop = FALSE]) switch(coef_mode, optim = { # Maximization co <- optim(par = b_init, fn = dm_lik_regG, gr = dm_score_regG, x = design, prec = prec, y = y, method = "BFGS", control = list(fnscale = -1, reltol = coef_tol)) if(co$convergence == 0){ b <- rbind(t(matrix(co$par, p, q-1)), rep(0, p)) lik <- co$value }else{ b <- matrix(NA, nrow = q, ncol = p) lik <- NA } }, nlminb = { # Minimization co <- nlminb(start = b_init, objective = dm_lik_regG_neg, gradient = dm_score_regG_neg, hessian = NULL, design = design, prec = prec, y = y, control = list(rel.tol = coef_tol)) if(co$convergence == 0){ b <- rbind(t(matrix(co$par, p, q-1)), rep(0, p)) lik <- -co$objective }else{ b <- matrix(NA, nrow = q, ncol = p) lik <- NA } }, nlm = { # Minimization co <- nlm(f = dm_lik_regG_neg, p = b_init, design = design, prec = prec, y = y) if(co$code < 5){ b <- rbind(t(matrix(co$estimate, p, q-1)), rep(0, p)) lik <- -co$minimum }else{ b <- matrix(NA, nrow = q, ncol = p) lik <- NA } } ) # Compute the fitted proportions if(!is.na(lik)){ z <- exp(design %*% t(b[-q, , drop = FALSE])) prop <- z/(1 + rowSums(z)) # n x (q-1) prop <- t(cbind(prop, 1 - rowSums(prop))) # q x n }else{ prop <- matrix(NA, nrow = q, ncol = n) } rownames(prop) <- rownames(y) rownames(b) <- rownames(y) # b matrix q x p # lik vector of length 1 # fit matrix q x n return(list(b = b, lik = lik, fit = prop)) } # ----------------------------------------------------------------------------- # Fitting the Beta-binomial model # Currently, recalculating the BB likelihoods and coefficients using the # DM fittings/proportions bb_fitRegression <- function(y, design, prec, fit){ # y can not have any rowSums(y) == 0 - assured during dmFilter q <- nrow(y) p <- ncol(design) n <- ncol(y) # NAs for genes with one feature if(q < 2 || is.na(prec)){ b <- matrix(NA, nrow = q, ncol = p) prop <- matrix(NA, nrow = q, ncol = n) rownames(prop) <- rownames(y) rownames(b) <- rownames(y) return(list(b = b, lik = rep(NA, q), fit = prop)) } y <- t(y) # n x q prop <- t(fit) # n x q lik <- bb_lik_regG_prop(y = y, prec = prec, prop = prop) # Get the coefficients like in edgeR::mglmOneWay # But use MASS::ginv instead of solve since the design does not have to be # a squared matrix # Keep only the unique rows in the design and logit_prop unique_samps <- !duplicated(design) design <- design[unique_samps, , drop = FALSE] prop <- prop[unique_samps, , drop = FALSE] logit_prop <- log(prop / (1 - prop)) b <- t(MASS::ginv(design) %*% logit_prop) rownames(b) <- colnames(y) # b matrix q x p # lik vector of length q # fit matrix q x n return(list(b = b, lik = lik, fit = fit)) } DRIMSeq/R/dm_plotData.R0000644000175200017520000000721014710222503015550 0ustar00biocbuildbiocbuild#' @importFrom ggplot2 ggplot aes_string theme_bw xlab ylab ggtitle #' geom_histogram theme element_text coord_cartesian geom_text geom_bar #' scale_fill_manual dm_plotDataFeatures <- function(tt, fill_color = "seagreen4"){ df <- data.frame(tt = tt) ggp <- ggplot(df, aes_string(x = "tt")) + theme_bw() + xlab("Number of features per gene") + ylab("Frequency") + ggtitle(paste0(length(tt), " genes / ", sum(tt) , " features")) + geom_histogram(fill = fill_color, breaks = seq(min(df$tt), max(df$tt), by = 1)) + theme(axis.text = element_text(size=16), axis.title = element_text(size=18, face="bold"), plot.title = element_text(size=18, face="bold")) + coord_cartesian(xlim = c(0, max(tt) + 2)) return(ggp) } dm_plotDataBlocks <- function(tt, fill_color = "mediumpurple4"){ df <- data.frame(tt = tt) binwidth <- ceiling(max(df$tt)/100) ggp <- ggplot(df, aes_string(x = "tt")) + theme_bw() + xlab("Number of blocks per gene") + ylab("Frequency") + ggtitle(paste0(length(tt), " genes / ", sum(tt) , " blocks")) + geom_histogram(fill = fill_color, breaks = seq(min(df$tt), max(df$tt), by = binwidth)) + theme(axis.text = element_text(size=16), axis.title = element_text(size=18, face="bold"), plot.title = element_text(size=18, face="bold")) + coord_cartesian(xlim = c(0, max(tt) + 2)) return(ggp) } dm_plotDataSnps <- function(tt, fill_color = "royalblue4"){ df <- data.frame(tt = tt) binwidth <- ceiling(max(df$tt)/100) ggp <- ggplot(df, aes_string(x = "tt")) + theme_bw() + xlab("Number of SNPs per gene") + ylab("Frequency") + ggtitle(paste0(length(tt), " genes / ", sum(tt) , " SNPs")) + geom_histogram(fill = fill_color, breaks = seq(min(df$tt), max(df$tt), by = binwidth)) + theme(axis.text = element_text(size=16), axis.title = element_text(size=18, face="bold"), plot.title = element_text(size=18, face="bold")) + coord_cartesian(xlim = c(0, max(tt) + 2)) return(ggp) } #' Plot the frequency of present features #' #' @param info Data frame with \code{gene_id} and \code{feature_id} of ALL #' features #' @param ds_info Data frame with \code{gene_id} and \code{feature_id} of ONLY #' DS features #' #' @return \code{ggplot} object dm_plotDataDSInfo <- function(info, ds_info){ ds_info_spl <- split(as.character(ds_info$feature_id), factor(ds_info$gene_id)) info_spl <- split(as.character(info$feature_id), factor(info$gene_id)) genes <- names(info_spl) tas <- table(unlist(lapply(names(ds_info_spl), function(g){ # g = "FBgn0004636" if(! g %in% genes) return(NA) features_in <- sum(info_spl[[g]] %in% ds_info_spl[[g]]) return(features_in) })), useNA = "always") tas <- tas[c(length(tas), 1:(length(tas) -1))] names(tas)[1] <- "NoGene" df <- data.frame(x = factor(names(tas), levels = names(tas)), y = as.numeric(tas), colors = "2", stringsAsFactors = FALSE) df[df$x == "NoGene" | df$x == "0", "colors"] <- "1" df$colors <- factor(df$colors) ggp <- ggplot(data = df, aes_string(x = "x", y = "y", label = "y", fill = "colors")) + geom_bar(stat = "identity") + geom_text(hjust = 0.5, vjust = 0, size = 6) + theme_bw() + xlab("Number of DS features left within DS gene") + ylab("Number of DS genes") + theme(axis.text = element_text(size=16), axis.title = element_text(size=18, face="bold"), plot.title = element_text(size=18, face="bold"), legend.position = "none") + scale_fill_manual(values = c("darkred", "grey")) return(ggp) } DRIMSeq/R/dm_plotPrecision.R0000644000175200017520000000432214710222503016633 0ustar00biocbuildbiocbuild#' @importFrom ggplot2 ggplot aes_string theme_bw xlab ylab theme element_text #' guides guide_colorbar scale_colour_gradient geom_point geom_hline #' @importFrom stats quantile na.omit dm_plotPrecision <- function(genewise_precision, mean_expression, nr_features = NULL, common_precision = NULL, low_color = "royalblue2", high_color = "red2", na_value_color = "red2"){ if(!is.null(nr_features)){ df <- data.frame(mean_expression = log10(mean_expression + 1), precision = log10(genewise_precision), nr_features = nr_features) df_quant <- min(quantile(na.omit(df$nr_features), probs = 0.95), 30) breaks <- seq(2, df_quant, ceiling(df_quant/10)) ggp <- ggplot(df, aes_string(x = "mean_expression", y = "precision", colour = "nr_features" )) + theme_bw() + xlab("Log10 of mean expression") + ylab("Log10 of precision") + geom_point(alpha = 0.7, na.rm = TRUE) + theme(axis.text = element_text(size=16), axis.title = element_text(size=18, face="bold"), legend.title = element_text(size=16, face="bold"), legend.text = element_text(size = 14), legend.position = "top") + guides(colour = guide_colorbar(barwidth = 20, barheight = 0.5)) + scale_colour_gradient(limits = c(2, max(breaks)), breaks = breaks, low = low_color, high = high_color, name = "Number of features", na.value = na_value_color) }else{ df <- data.frame(mean_expression = log10(mean_expression + 1), precision = log10(genewise_precision)) ggp <- ggplot(df, aes_string(x = "mean_expression", y = "precision")) + theme_bw() + xlab("Log10 of mean expression") + ylab("Log10 of precision") + geom_point(size = 1, alpha = 0.4, na.rm = TRUE) + theme(axis.text = element_text(size=16), axis.title = element_text(size=18, face="bold"), legend.title = element_text(size=16, face="bold"), legend.text = element_text(size = 14), legend.position = "top") } if(!is.null(common_precision)){ ggp <- ggp + geom_hline(yintercept = log10(common_precision), colour = "black", linetype = "dashed") } return(ggp) } DRIMSeq/R/dm_plotProportions.R0000755000175200017520000003157214710222503017250 0ustar00biocbuildbiocbuild dm_plotProportions_barplot <- function(prop_samp, prop_fit = NULL, main = NULL, group_colors){ ## Plotting ggp <- ggplot() + geom_bar(data = prop_samp, aes_string(x = "feature_id", y = "proportion", group = "sample_id", fill = "group"), stat = "identity", position = position_dodge(width = 0.9)) + theme_bw() + theme(axis.text.x = element_text(angle = 90, vjust = 0.5), axis.text=element_text(size=16), axis.title = element_text(size=14, face="bold"), plot.title = element_text(size=16), legend.position = "right", legend.title = element_text(size = 14), legend.text = element_text(size = 14)) + ggtitle(main) + scale_fill_manual(name = "Groups", values = group_colors, breaks = names(group_colors)) + xlab("Features") + ylab("Proportions") if(!is.null(prop_fit)){ ggp <- ggp + geom_point(data = prop_fit, aes_string(x = "feature_id", y = "proportion", group = "sample_id", fill = "group"), position = position_dodge(width = 0.9), size = 3, shape = 23, alpha = 0.75) } return(ggp) } dm_plotProportions_boxplot1 <- function(prop_samp, prop_fit = NULL, main = NULL, group_colors){ ## Plotting ggp <- ggplot() + geom_jitter(data = prop_samp, aes_string(x = "feature_id", y = "proportion", fill = "group", colour = "group"), position = position_jitterdodge(), alpha = 0.9, size = 2, show.legend = FALSE, na.rm = TRUE) + geom_boxplot(data = prop_samp, aes_string(x = "feature_id", y = "proportion", colour = "group", fill = "group"), outlier.size = NA, alpha = 0.4, lwd = 0.5) + theme_bw() + theme(axis.text.x = element_text(angle = 90, vjust = 0.5), axis.text=element_text(size=16), axis.title=element_text(size=14, face="bold"), plot.title = element_text(size=16), legend.position = "right", legend.title = element_text(size = 14), legend.text = element_text(size = 14)) + ggtitle(main) + scale_fill_manual(name = "Groups", values = group_colors, breaks = names(group_colors)) + scale_colour_manual(name = "Groups", values = group_colors, breaks = names(group_colors)) + xlab("Features") + ylab("Proportions") if(!is.null(prop_fit)){ ggp <- ggp + geom_point(data = prop_fit, aes_string(x = "feature_id", y = "proportion", fill = "group"), position = position_jitterdodge(jitter.width = 0), size = 3, shape = 23) + guides(colour=FALSE) } return(ggp) } dm_plotProportions_lineplot <- function(prop_samp, prop_fit = NULL, main = NULL, group_colors){ ## Plotting ggp <- ggplot() + geom_line(data = prop_samp, aes_string(x = "feature_id", y = "proportion", group = "sample_id", colour = "group"), size = 1.1) + theme_bw() + theme(axis.text.x = element_text(angle = 90, vjust = 0.5), axis.text=element_text(size=16), axis.title = element_text(size=14, face="bold"), plot.title = element_text(size=16), legend.position = "right", legend.title = element_text(size = 14), legend.text = element_text(size = 14)) + ggtitle(main) + scale_fill_manual(name = "Groups", values = group_colors, breaks = names(group_colors)) + scale_colour_manual(name = "Groups", values = group_colors, breaks = names(group_colors)) + xlab("Features") + ylab("Proportions") if(!is.null(prop_fit)){ ggp <- ggp + geom_point(data = prop_fit, aes_string(x = "feature_id", y = "proportion", group = "group", fill = "group"), size = 3, shape = 23) + guides(colour=FALSE) } return(ggp) } dm_plotProportions_boxplot2 <- function(prop_samp, prop_fit = NULL, main = NULL, feature_colors){ ## Plotting ggp <- ggplot() + geom_boxplot(data = prop_samp, aes_string(x = "group", y = "proportion", fill = "feature_id"), outlier.size = NA) + geom_jitter(data = prop_samp, aes_string(x = "group", y = "proportion", fill = "feature_id"), position = position_jitterdodge(), shape = 21, show.legend = FALSE, na.rm = TRUE) + theme_bw() + theme(axis.text.x = element_text(angle = 90, vjust = 0.5), axis.text=element_text(size=14), axis.title=element_text(size=14, face="bold"), plot.title = element_text(size=14), panel.grid.major = element_blank(), legend.title = element_text(size = 14), legend.text = element_text(size = 14)) + geom_vline(xintercept = seq(1, nlevels(prop_samp$group) - 1, 1) + 0.5, color = "gray90") + ggtitle(main) + scale_fill_manual(name = "Features", values = feature_colors) + guides(fill = guide_legend(nrow = 20)) + xlab("Groups") + ylab("Proportions") if(!is.null(prop_fit)){ ggp <- ggp + geom_point(data = prop_fit, aes_string(x = "group", y = "proportion", fill = "feature_id"), position = position_jitterdodge(jitter.width = 0), size = 3, shape = 23, colour = "black") } return(ggp) } dm_plotProportions_ribbonplot <- function(prop_fit, main = NULL, feature_colors){ prop_fit_order <- prop_fit[order(prop_fit$feature_id, decreasing = TRUE), ] prop_fit_order <- prop_fit_order[order(prop_fit_order$group), ] breaks <- unique(prop_fit_order$feature_id) width <- 0.5 ## Get ribbons gr <- list() for (i in 1:(nlevels(prop_fit$group) - 1)){ # i = 1 prop_fit_ribbon <- prop_fit_order[prop_fit_order$group %in% levels(prop_fit_order$group )[c(i, i+1)], ] prop_fit_ribbon$group <- factor(prop_fit_ribbon$group) prop_fit_ribbon$cumsum <- matrix(t(aggregate(prop_fit_ribbon[,"proportion"], by = list(group = prop_fit_ribbon$group), cumsum)[, -1]), ncol = 1) prop_fit_ribbon$offset <- c(width/2, -width/2)[as.numeric(prop_fit_ribbon$group)] prop_fit_ribbon$xid <- i - 1 prop_fit_ribbon$x <- as.numeric(prop_fit_ribbon$group) + prop_fit_ribbon$offset + prop_fit_ribbon$xid prop_fit_ribbon$ymin <- prop_fit_ribbon$cumsum - prop_fit_ribbon$proportion prop_fit_ribbon$ymax <- prop_fit_ribbon$cumsum gr[[i]] <- geom_ribbon(data = prop_fit_ribbon, aes_string(x = "x", ymin = "ymin", ymax = "ymax", group = "feature_id", fill = "feature_id"), alpha = 0.3) } ## Plotting ggp <- ggplot() + geom_bar(data = prop_fit_order, aes_string(x = "group", y = "proportion", fill = "feature_id"), stat = "identity", width = width, position="stack") + gr + theme_bw() + theme(axis.text.x = element_text(angle = 90, vjust = 0.5), axis.text=element_text(size=16), axis.title=element_text(size=14, face="bold"), plot.title = element_text(size=16), legend.title = element_text(size = 14), legend.text = element_text(size = 14)) + ggtitle(main) + coord_cartesian(ylim = c(-0.1, 1.1)) + coord_cartesian(ylim = c(-0.1, 1.1)) + scale_fill_manual(name = "Features", values = feature_colors, breaks = breaks) + guides(fill = guide_legend(nrow = 20)) + xlab("Groups") + ylab("Estimated proportions") return(ggp) } #' Plot feature proportions #' #' Plot observed and/or estimated feature proportions. #' #' @param counts Matrix with rows corresponding to features and columns #' corresponding to samples. Row names are used as labels on the plot. #' @param group Factor that groups samples into conditions. #' @param md Data frame with additional sample information. #' @param fit_full Matrix of estimated proportions with rows corresponding to #' features and columns corresponding to samples. If \code{NULL}, nothing is #' plotted. #' @param main Character vector with main title for the plot. If \code{NULL}, #' nothing is plotted. #' @param plot_type Character defining the type of the plot produced. Possible #' values \code{"barplot"}, \code{"boxplot1"}, \code{"boxplot2"}, #' \code{"lineplot"}, \code{"ribbonplot"}. #' @param order_features Logical. Whether to plot the features ordered by their #' expression. #' @param order_samples Logical. Whether to plot the samples ordered by the #' group variable. If \code{FALSE} order from the \code{sample(x)} is kept. #' @param group_colors Character vector with colors for each group. #' @param feature_colors Character vector with colors for each feature. #' #' @return \code{ggplot} object with the observed and/or estimated with #' Dirichlet-multinomial model feature ratios. Estimated proportions are #' marked with diamond shapes. #' @importFrom reshape2 melt #' @importFrom ggplot2 ggplot aes_string theme_bw xlab ylab theme element_text #' coord_cartesian geom_text ggtitle geom_bar scale_fill_manual geom_point #' geom_jitter position_dodge position_jitterdodge geom_boxplot #' scale_colour_manual scale_colour_manual guides element_blank geom_vline #' scale_x_discrete guide_legend geom_line geom_ribbon #' @importFrom stats aggregate median dm_plotProportions <- function(counts, group, md = NULL, fit_full = NULL, main = NULL, plot_type = "boxplot1", order_features = TRUE, order_samples = TRUE, group_colors = NULL, feature_colors = NULL){ ## Calculate observed proportions proportions <- prop.table(counts, 2) proportions[proportions == "NaN"] <- NA prop_samp <- data.frame(feature_id = rownames(proportions), proportions, stringsAsFactors = FALSE) prop_fit <- NULL if(!is.null(fit_full)) prop_fit <- data.frame(feature_id = rownames(fit_full), fit_full, stringsAsFactors = FALSE) ## Order transcipts by decreasing proportion if(order_features){ oo <- order(apply(aggregate(t(prop_samp[, -1]), by = list(group = group), median)[, -1], 2, max), decreasing = TRUE) feature_levels <- rownames(prop_samp)[oo] }else{ feature_levels <- rownames(counts) } ## Order samples by group if(order_samples){ o <- order(group) sample_levels <- colnames(counts)[o] }else{ sample_levels <- colnames(counts) } ## Melt prop_samp prop_samp <- melt(prop_samp, id.vars = "feature_id", variable.name = "sample_id", value.name = "proportion", factorsAsStrings = FALSE) prop_samp$feature_id <- factor(prop_samp$feature_id, levels = feature_levels) prop_samp$group <- rep(group, each = nrow(counts)) prop_samp$sample_id <- factor(prop_samp$sample_id, levels = sample_levels) ## Add extra info from md about samples if(!is.null(md)){ mm <- match(prop_samp$sample_id, md$sample_id) for(i in setdiff(colnames(md), c("sample_id", "group"))){ prop_samp[, i] <- md[mm, i] } } ## Melt prop_fit if(!is.null(prop_fit)){ prop_fit <- melt(prop_fit, id.vars = "feature_id", variable.name = "sample_id", value.name = "proportion", factorsAsStrings = FALSE) prop_fit$feature_id <- factor(prop_fit$feature_id, levels = feature_levels) prop_fit$group <- rep(group, each = nrow(fit_full)) prop_fit$sample_id <- factor(prop_fit$sample_id, levels = sample_levels) ## Add extra info from md about samples if(!is.null(md)){ mm <- match(prop_fit$sample_id, md$sample_id) for(i in setdiff(colnames(md), c("sample_id", "group"))){ prop_fit[, i] <- md[mm, i] } } } ## Prepare colors for groups if(is.null(group_colors)){ group_colors <- colorb(nlevels(group)) } names(group_colors) <- levels(group) ## Prepare colors for features if(is.null(feature_colors)){ feature_colors <- colorb(nrow(counts)) } names(feature_colors) <- rownames(counts) switch(plot_type, barplot = { dm_plotProportions_barplot(prop_samp = prop_samp, prop_fit = prop_fit, main = main, group_colors = group_colors) }, lineplot = { dm_plotProportions_lineplot(prop_samp = prop_samp, prop_fit = prop_fit, main = main, group_colors = group_colors) }, boxplot1 = { dm_plotProportions_boxplot1(prop_samp = prop_samp, prop_fit = prop_fit, main = main, group_colors = group_colors) }, boxplot2 = { dm_plotProportions_boxplot2(prop_samp = prop_samp, prop_fit = prop_fit, main = main, feature_colors = feature_colors) }, ribbonplot = { if(!is.null(prop_fit)){ keep <- !duplicated(prop_fit[, c("feature_id", "proportion", "group")]) prop_fit <- prop_fit[keep, , drop = FALSE] if(nlevels(factor(prop_fit$sample_id)) != nlevels(factor(prop_fit$group))){ message("Ribbonplot can not be generated.") }else{ dm_plotProportions_ribbonplot(prop_fit, main = main, feature_colors = feature_colors) } }else{ message("Ribbonplot can not be generated.") } } ) } DRIMSeq/R/dm_plotPvalues.R0000644000175200017520000000150014710222503016312 0ustar00biocbuildbiocbuild#' @importFrom ggplot2 ggplot aes_string theme_bw xlab ylab geom_histogram theme #' element_text coord_cartesian geom_text dm_plotPValues <- function(pvalues){ df <- data.frame(pvalues = pvalues[!is.na(pvalues)]) ggp <- ggplot(df, aes_string(x = "pvalues")) + theme_bw() + xlab("P-Values") + ylab("Frequency") + geom_histogram(breaks = seq(0, 1, by = 0.01), fill = "deeppink4") + theme(axis.text = element_text(size=16), axis.title = element_text(size=18, face="bold"), plot.title = element_text(size=16, face="bold")) + coord_cartesian(xlim = c(0, 1)) + geom_text(data = data.frame(x = Inf, y = Inf, label = paste0(nrow(df), " tests ")), aes_string(x = "x", y = "y", label = "label"), hjust = 1, vjust = 3, size = 6) return(ggp) } DRIMSeq/R/dm_profileLikModeration.R0000644000175200017520000001311214710222503020120 0ustar00biocbuildbiocbuild############################################################################## # calculate the moderated profile likelihood ############################################################################## #' @importFrom stats loess predict loess.control dm_profileLikModeration <- function(loglik, mean_expression, prec_moderation = "trended", prec_prior_df, prec_span){ prec_grid_length <- ncol(loglik) ### Check where the grid is maximized grid_max <- apply(loglik, 1, which.max) # In the calculation of moderation, do not take into account genes # that have precision on the top and bottom boundry of the grid # (skipp 4 last grid points and 1 first grid point) not_boundry <- grid_max < (prec_grid_length - 3) & grid_max > 1 boundry_last <- grid_max == prec_grid_length ### Calculate the span of the boundry loglikelihoods if(sum(boundry_last) > 1){ loglik_span_boundry <- apply(loglik[boundry_last, , drop = FALSE], 1, function(x){max(x) - min(x)}) } switch(prec_moderation, common={ ### Calculate the moderating likelihood if(sum(not_boundry) == length(not_boundry)){ moderation <- colMeans(loglik) }else{ moderation <- colMeans(loglik[not_boundry, , drop = FALSE]) } # Estimate priorN - calculate the ratio between moderation lik span # and lik span of boundry genes if(sum(boundry_last) > 10){ moderation_span <- max(moderation) - min(moderation) span_ratio <- moderation_span / loglik_span_boundry priorN <- 1/span_ratio ### Use median priorN <- quantile(priorN, 0.5) }else{ priorN <- prec_prior_df } message(paste0("! Using ", round(priorN, 4), " as a shrinkage factor !\n")) loglik <- sweep(loglik, 2, priorN * moderation, FUN = "+") }, trended={ moderation <- dm_movingAverageByCol(loglik = loglik, mean_expression = mean_expression, not_boundry = not_boundry, prec_span = prec_span) # Estimate priorN - calculate the ratio between moderation lik span # and lik span of boundry genes if(sum(boundry_last) > 10){ moderation_span_boundry <- apply( moderation[boundry_last, , drop = FALSE], 1, function(x){max(x) - min(x)}) span_ratio <- moderation_span_boundry / loglik_span_boundry priorN <- 1/span_ratio ### Do loess fitting if there is enough points. Otherwise, use median if(length(loglik_span_boundry) > 100){ df_priorN_loglog <- data.frame(priorN = log10(priorN), mean_expression = log10(mean_expression[boundry_last])) priorN_loess_loglog <- loess(priorN ~ mean_expression, df_priorN_loglog, control = loess.control(surface = "direct")) priorN_predict_loglog <- predict(priorN_loess_loglog, data.frame(mean_expression = log10(mean_expression)), se = FALSE) priorN <- 10 ^ priorN_predict_loglog }else{ priorN <- quantile(priorN, 0.5) } }else{ priorN <- prec_prior_df } if(length(priorN) == 1){ message(paste0("! Using ", round(priorN, 6), " as a shrinkage factor !\n")) }else{ message(paste0("! Using loess fit as a shrinkage factor !\n")) } loglik <- loglik + priorN * moderation } ) return(loglik) } dm_movingAverageByCol <- function(loglik, mean_expression, not_boundry, prec_span){ if(sum(not_boundry) == length(not_boundry)){ o <- order(mean_expression) oo <- order(o) width <- floor(prec_span * nrow(loglik)) moderation <- edgeR::movingAverageByCol(loglik[o,], width = width)[oo,] }else{ ### Use non boundry genes for calculating the moderation mean_expression_not_boundry <- mean_expression[not_boundry] loglik_not_boundry <- loglik[not_boundry, , drop = FALSE] o <- order(mean_expression_not_boundry) oo <- order(o) width <- floor(prec_span * nrow(loglik_not_boundry)) moderation_not_boundry <- edgeR::movingAverageByCol( loglik_not_boundry[o, , drop = FALSE], width = width)[oo, , drop = FALSE] ### Fill in moderation values for the boundy genes moderation <- matrix(NA, nrow = nrow(loglik), ncol = ncol(loglik)) moderation[not_boundry, ] <- moderation_not_boundry o <- order(mean_expression) oo <- order(o) moderation <- moderation[o, , drop = FALSE] not_boundry <- not_boundry[o] ### Last value in not_boundry must be TRUE if(not_boundry[length(not_boundry)] == FALSE){ last_true <- max(which(not_boundry)) moderation[length(not_boundry), ] <- moderation[last_true, ] not_boundry[length(not_boundry)] <- TRUE } not_boundry_diff <- diff(not_boundry, lag = 1) not_boundry_cumsum <- cumsum(not_boundry) ### Values used for filling in the boundry NAs - swith from FALSE to TRUE replacement_indx <- which(not_boundry_diff == 1) + 1 replaced_indx <- which(!not_boundry) replaced_freq <- as.numeric(table(not_boundry_cumsum[replaced_indx])) moderation_boundry <- moderation[rep(replacement_indx, times = replaced_freq), , drop = FALSE] moderation[!not_boundry, ] <- moderation_boundry moderation <- moderation[oo, , drop = FALSE] } return(moderation) } DRIMSeq/README.md0000755000175200017520000000437414710222503014266 0ustar00biocbuildbiocbuild## DRIMSeq - differential transcript usage and transcript usage QTL analyses with a Dirichlet-multinomial model in RNA-Seq `DRIMSeq` package provides two frameworks. One for the differential transcript usage (DTU) analysis between different designs and one for the tuQTL analysis. Both are based on modeling transcript counts with the Dirichlet-multinomial distribution. DTU analysis can be performed at the gene and/or transcript level. The package also makes available functions for visualization and exploration of the data and results. # Bioconductor installation `DRIMSeq` is available on [Bioconductor](https://www.bioconductor.org/packages/release/bioc/html/DRIMSeq.html) and can be installed with the command: ``` r ## try http:// if https:// URLs are not supported if (!requireNamespace("BiocManager", quietly=TRUE)) install.packages("BiocManager") BiocManager::install("DRIMSeq") ``` The vignette containing all the instructions on how to use the DRIMSeq package for DTU and tuQTL analyses can be accessed by entering: ``` r browseVignettes("DRIMSeq") ``` or on the [Bioconductor website](https://www.bioconductor.org/packages/release/bioc/vignettes/DRIMSeq/inst/doc/DRIMSeq.pdf). # Devel installation from Github To install the latest development version, use the `devtools` package (available [here](https://github.com/hadley/devtools)): ``` r devtools::install_github("markrobinsonuzh/DRIMSeq") ``` To install it with the vignette type: ``` r devtools::install_github("markrobinsonuzh/DRIMSeq", build_vignettes = TRUE) ``` The vignette can be accessed from the R console by typing: ``` r vignette("DRIMSeq") ``` or ``` r browseVignettes("DRIMSeq") ``` # Data packages In order to run the examples from the vignette and the manual, you need to install two data packages [PasillaTranscriptExpr](https://www.bioconductor.org/packages/release/data/experiment/html/PasillaTranscriptExpr.html) and [GeuvadisTranscriptExpr](https://www.bioconductor.org/packages/release/data/experiment/html/GeuvadisTranscriptExpr.html). ``` r ## try http:// if https:// URLs are not supported if (!requireNamespace("BiocManager", quietly=TRUE)) install.packages("BiocManager") BiocManager::install("PasillaTranscriptExpr") BiocManager::install("GeuvadisTranscriptExpr") ``` DRIMSeq/build/0000755000175200017520000000000014710277102014100 5ustar00biocbuildbiocbuildDRIMSeq/build/vignette.rds0000644000175200017520000000040214710277102016433 0ustar00biocbuildbiocbuild‹uQQnÂ0 MÛŒ­L“&q_`½Ã¤ ÁÐÖñÁ¯Õº#ZJTñÇÉÇÜ­E˜%;ŽŸ_ü¬,‡BˆPHˆ0â4q°?²BŠ˜Ïû4›¼¼Ó&ÉtãAyªÊ’ i§°gPÛܨÚÁÖâêâ²ø¶˜1€ÕÎ’¥!›??YÚ@£Ü ÜŠ 5æŸLøOM]”…òR£_à¯M†'7¿ÈzìÛ”jÒE[þ¾ÎånJ»fmzÎYÏ ë‘cUQ?w¡Üñ½¦ã. 2_ÃÅûgúc³n’~‡‡ö ÷lþ¢y…Ö_tX Ã¤4ÌouÿW¤‡@DRIMSeq/inst/0000755000175200017520000000000014710277102013756 5ustar00biocbuildbiocbuildDRIMSeq/inst/CITATION0000755000175200017520000000153314710222503015113 0ustar00biocbuildbiocbuildcitHeader("To cite DRIMSeq in publications use:") citEntry(entry = "Article", title = "DRIMSeq: a Dirichlet-multinomial framework for multivariate count outcomes in genomics [version 2; referees: 2 approved]", author = personList(as.person("Malgorzata Nowicka"), as.person("Mark D. Robinson")), journal = "F1000Research", year = "2016", volume = "5", number = "1356", doi = "10.12688/f1000research.8900.2", url = "https://f1000research.com/articles/5-1356/v2", textVersion = paste("Malgorzata Nowicka, Mark D. Robinson (2016).", "DRIMSeq: a Dirichlet-multinomial framework for multivariate count outcomes in genomics [version 2; referees: 2 approved].", "F1000Research, 5(1356).", "URL https://f1000research.com/articles/5-1356/v2.") ) DRIMSeq/inst/doc/0000755000175200017520000000000014710277102014523 5ustar00biocbuildbiocbuildDRIMSeq/inst/doc/DRIMSeq.R0000644000175200017520000002061714710277076016072 0ustar00biocbuildbiocbuild## ----style, eval=TRUE, echo=FALSE, results='asis'-------------------------- BiocStyle::latex() ## ----setup_knitr, include=FALSE, cache=FALSE------------------------------- library(knitr) opts_chunk$set(cache = FALSE, warning = FALSE, out.width = "7cm", fig.width = 7, out.height = "7cm", fig.height = 7) ## ----news, eval = FALSE---------------------------------------------------- # news(package = "DRIMSeq") ## ----DSpasilla1------------------------------------------------------------ library(PasillaTranscriptExpr) data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## ----DSlibrary, message=FALSE---------------------------------------------- library(DRIMSeq) ## ----DSdmDSdata_create----------------------------------------------------- pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) d head(counts(d), 3) head(samples(d), 3) ## ----DSdmDSdata_plot------------------------------------------------------- plotData(d) ## ----DSdmDSdata_subset----------------------------------------------------- gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) %in% gene_id_subset, ] d ## ----DSdmFilter------------------------------------------------------------ # Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) ## ----DSdmPrecision_design-------------------------------------------------- ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) design_full ## ----DSdmPrecision--------------------------------------------------------- ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) d head(mean_expression(d), 3) common_precision(d) head(genewise_precision(d)) ## ----DSdmPrecision_plot1--------------------------------------------------- plotPrecision(d) ## ----DSdmPrecision_plot2--------------------------------------------------- library(ggplot2) ggp <- plotPrecision(d) ggp + geom_point(size = 4) ## ----DSdmFit--------------------------------------------------------------- d <- dmFit(d, design = design_full, verbose = 1) d ## Get fitted proportions head(proportions(d)) ## Get the DM regression coefficients (gene-level) head(coefficients(d)) ## Get the BB regression coefficients (feature-level) head(coefficients(d), level = "feature") ## ----DSdmTest1------------------------------------------------------------- d <- dmTest(d, coef = "groupKD", verbose = 1) design(d) head(results(d), 3) ## ----DSdmTest2------------------------------------------------------------- design_null <- model.matrix(~ 1, data = samples(d)) design_null d <- dmTest(d, design = design_null) head(results(d), 3) ## ----DSdmTest3------------------------------------------------------------- contrast <- c(0, 1) d <- dmTest(d, contrast = contrast) design(d) head(results(d), 3) ## ----DSdmTest_results------------------------------------------------------ head(results(d, level = "feature"), 3) ## ----DSdmTest_plot--------------------------------------------------------- plotPValues(d) plotPValues(d, level = "feature") ## ----DSdmLRT_plotProportions, out.width = "14cm", fig.width = 14----------- res <- results(d) res <- res[order(res$pvalue, decreasing = FALSE), ] top_gene_id <- res$gene_id[1] plotProportions(d, gene_id = top_gene_id, group_variable = "group") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "lineplot") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "ribbonplot") ## ----stageR, eval = FALSE-------------------------------------------------- # library(stageR) # # ## Assign gene-level pvalues to the screening stage # pScreen <- results(d)$pvalue # names(pScreen) <- results(d)$gene_id # # ## Assign transcript-level pvalues to the confirmation stage # pConfirmation <- matrix(results(d, level = "feature")$pvalue, ncol = 1) # rownames(pConfirmation) <- results(d, level = "feature")$feature_id # # ## Create the gene-transcript mapping # tx2gene <- results(d, level = "feature")[, c("feature_id", "gene_id")] # # ## Create the stageRTx object and perform the stage-wise analysis # stageRObj <- stageRTx(pScreen = pScreen, pConfirmation = pConfirmation, # pScreenAdjusted = FALSE, tx2gene = tx2gene) # # stageRObj <- stageWiseAdjustment(object = stageRObj, method = "dtu", # alpha = 0.05) # # getSignificantGenes(stageRObj) # # getSignificantTx(stageRObj) # # padj <- getAdjustedPValues(stageRObj, order = TRUE, # onlySignificantGenes = FALSE) # # head(padj) # ## ----DRIMSeq_batch--------------------------------------------------------- pasilla_samples2 <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition, library_layout = pasilla_metadata$LibraryLayout) d2 <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples2) ## Subsetting to a vignette runnable size d2 <- d2[names(d2) %in% gene_id_subset, ] ## Filtering d2 <- dmFilter(d2, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) ## Create the design matrix design_full2 <- model.matrix(~ group + library_layout, data = samples(d2)) design_full2 ## To make the analysis reproducible set.seed(123) ## Calculate precision d2 <- dmPrecision(d2, design = design_full2) common_precision(d2) head(genewise_precision(d2)) plotPrecision(d2) ## Fit proportions d2 <- dmFit(d2, design = design_full2, verbose = 1) ## Test for DTU d2 <- dmTest(d2, coef = "groupKD", verbose = 1) design(d2) head(results(d2), 3) ## Plot p-value distribution plotPValues(d2) ## ----DRIMSeq_batch_plotProportions, out.width = "14cm", fig.width = 14----- ## Plot the top significant gene res2 <- results(d2) res2 <- res2[order(res2$pvalue, decreasing = FALSE), ] top_gene_id2 <- res2$gene_id[1] ggp <- plotProportions(d2, gene_id = top_gene_id2, group_variable = "group") ggp + facet_wrap(~ library_layout) ## ----SQTLgeuvadis, message=FALSE------------------------------------------- library(GeuvadisTranscriptExpr) geuv_counts <- GeuvadisTranscriptExpr::counts geuv_genotypes <- GeuvadisTranscriptExpr::genotypes geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges ## ----SQTLlibrary, message=FALSE-------------------------------------------- library(DRIMSeq) ## ----SQTLdmSQTLdata_create, message=FALSE---------------------------------- colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") colnames(geuv_genotypes)[4] <- "snp_id" geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, samples = geuv_samples, window = 5e3) d ## ----SQTLdmSQTLdata_plot--------------------------------------------------- plotData(d, plot_type = "features") plotData(d, plot_type = "snps") plotData(d, plot_type = "blocks") ## ----SQTLdmFilter---------------------------------------------------------- d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) ## ----SQTLdmPrecision------------------------------------------------------- ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d) plotPrecision(d) ## ----SQTLdmFit------------------------------------------------------------- d <- dmFit(d) ## ----SQTLdmTest------------------------------------------------------------ d <- dmTest(d) plotPValues(d) head(results(d)) ## ----SQTLplotProportions, out.width = "14cm", fig.width = 14--------------- res <- results(d) res <- res[order(res$pvalue, decreasing = FALSE), ] top_gene_id <- res$gene_id[1] top_snp_id <- res$snp_id[1] plotProportions(d, gene_id = top_gene_id, snp_id = top_snp_id) plotProportions(d, gene_id = top_gene_id, snp_id = top_snp_id, plot_type = "boxplot2") ## ----sessionInfo----------------------------------------------------------- sessionInfo() DRIMSeq/inst/doc/DRIMSeq.Rnw0000755000175200017520000011250514710222503016421 0ustar00biocbuildbiocbuild%\VignetteIndexEntry{Differential transcript usage and transcript usage QTL analyses in RNA-seq with the DRIMSeq package} %\VignettePackage{DRIMSeq} %\VignetteEngine{knitr::knitr} \documentclass[10pt]{article} <>= BiocStyle::latex() @ \usepackage[utf8]{inputenc} \usepackage[sort]{cite} \usepackage{xstring} \bioctitle[Differential transcript usage and transcript usage QTL analyses in RNA-seq with the DRIMSeq package]{DRIMSeq: Dirichlet-multinomial framework for differential transcript usage and transcript usage QTL analyses in RNA-seq} \author{ Malgorzata Nowicka\thanks{\email{gosia.nowicka@uzh.ch}}, Mark D. Robinson\\ Institute for Molecular Life Sciences, University of Zurich, Switzerland\\ SIB Swiss Institute of Bioinformatics, University of Zurich, Switzerland } \begin{document} \maketitle \packageVersion{\Sexpr{BiocStyle::pkg_ver("DRIMSeq")}} \newpage \tableofcontents \newpage <>= library(knitr) opts_chunk$set(cache = FALSE, warning = FALSE, out.width = "7cm", fig.width = 7, out.height = "7cm", fig.height = 7) @ %------------------------------------------------------------------------------ % Introduction %------------------------------------------------------------------------------ \section{Main changes in the DRIMSeq package} For the full list of changes, type: <>= news(package = "DRIMSeq") @ Implementation of the regression framework in differential transcript usage analysis. It allows fitting more complicated than multiple group comparison experimental designs, for example, one can account for the batch effects or the fact that samples are paired or model continuous time course changes. It enables also testing of more complicated contrasts. Transcript-level analysis based on the beta-binomial model. In this case, each transcript ratio is modeled separately assuming it follows the beta-binomial distribution which is a one-dimensional version of the Dirichlet-multinomial distribution. Based on the fact that when $(Y_1,\ldots,Y_q) \sim DM(\pi_1,\ldots,\pi_q, \gamma_0)$ then $Y_j \sim BB(\pi_j,\gamma_0)$ \cite{Danaher1988}, we do not need to reestimate the beta-binomial parameters, only the likelihoods are recalculated. \Rpackage{DRIMSeq} returns gene-level and transcript-level p-values which can be used as input to the stage-wise testing procedure \cite{VandenBerge2017} as screening and confirmation p-values, respectively. Such approach provides increased power to identify transcripts which are actually differentially used in a gene detected as gene with DTU. Usage of term 'precision' instead of 'dispersion'. In the differential analysis based on the negative-binomial model, dispersion parameter is estimated. This dispersion parameter captures all sources of the inter-library variation between replicates present in the RNA-seq data. In the DM model, we do not directly estimate dispersion but a parameter called precision which is closely linked to dispersion via the formula: $dispersion = 1 / (1 + precision)$. In the previous version of \cite{Nowicka2016}, we used 'dispersion' as a name for the functions and variables calculating and storing, in fact, the precision estimates. Now, we use the term 'precision'. \section{Overview of the Dirichlet-multinomial model} For the statistical details about the Dirichlet-multinomial model, see the \Rpackage{DRIMSeq} paper \cite{Nowicka2016}. In the \Rpackage{DRIMSeq} package we implemented a Dirichlet-multinomial framework that can be used for modeling various multivariate count data with the interest in finding the instances where the ratios of observed features are different between the experimental conditions. Such a model can be applied, for example, in differential transcript usage (DTU) analysis or in the analysis that aim in detecting SNPs that are associated with differential transcript usage (tuQTL analysis). In both cases the multivariate features of a gene are transcripts. The implementation of Dirichlet-multinomial model in \Rpackage{DRIMSeq} package is customized for differential transcript usage and tuQTL analyses, but the data objects used in \Rpackage{DRIMSeq} can contain various types of counts. Therefore, other types of multivariate differential analyses can be performed such as differential methylation analysis or differential polyA usage from polyA-seq data. In short, the method consists of three statistical steps: First, we use the Cox-Reid adjusted profile likelihood to estimate the precision which is inverse proportional to dispersion, i.e., the variability of transcript ratios between samples (replicates) within conditions. Dispersion is needed in order to find the significant changes in transcript ratios between conditions which should be sufficiently stronger than the changes/variability within conditions. Second, we use maximum likelihood to estimate at the gene-level the regression coefficients in the Dirichlet-multinomial (DM) regression, the fitted transcript proportions in each sample and the full model likelihoods. For the analysis at the transcript-level we apply the beta-binomial (BB) regression to each transcript separately. In the differential transcript usage analysis, the full model is defined by the user with the design matrix. In the QTL analysis, full models are defined by the genotypes of SNPs associated with a given gene. Finally, we fit the null model DM and BB regression and use the likelihood ratio statistics to test for the differences in transcript proportions between the full and null models at the gene and transcript level. In the differential transcript usage analysis, the null model is again defined by the user. In the QTL analysis, null models correspond to regression with intercept only. \section{Important notes} Currently, transcript-level analysis based on the BB model are implemented only in the DTU analysis (\Rcode{bb\_model = TRUE}). When the model (full or null) of interest corresponds to multiple (or one) group fitting, then a shortcut algorithm called 'one way' (\Rcode{one\_way = TRUE}), which we adapted from the \Rfunction{glmFit} function in \Biocpkg{edgeR} \cite{McCarthy2012}, can be used. Choosing it is equivalent to running the original \Rpackage{DRIMSeq} implementation. In such a case, we use maximum likelihood to estimate the transcript proportions in each group separately and then the regression coefficients are calculated using matrix operations. Otherwise, the regression coefficients are directly estimated with the maximum likelihood approach. \section{Hints for DRIMSeq pipelines} In this vignette, we present how one could perform differential transcript usage analysis and tuQTL analysis with the \Rpackage{DRIMSeq} package. We use small data sets so that the whole pipelines can be run within few minutes in \R{} on a single core computer. In practice, the package is designed to take advantage of multicore computing for larger data sets. In the filtering function \Rfunction{dmFilter}, all the parameters that are influencing transcript count filtering are set to zero. This results in a very relaxed filtering, where transcripts with zero expression in all the samples and genes with only one transcript remained are removed. Functions \Rfunction{dmPrecision}, \Rfunction{dmFit} and \Rfunction{dmTest}, which perform the actual statistical analyses described above, have many other parameters available for tweaking, but they do have the default values assigned. Those values were chosen based on many real data analyses. Some of the steps are quite time consuming, especially the precision estimation, where proportions of each gene are refitted for different precision parameters. To speed up the calculations, we have parallelized many functions using \Biocpkg{BiocParallel}. Thus, if possible, we recommend to increase the number of workers in \Robject{BPPARAM}. In general, tuQTL analyses are more computationally intensive than differential transcript usage analysis because one needs to do the analysis for every SNP in the surrounding region of a gene. Additionally, a permutation scheme is used to compute the p-values. It is indeed feasible to perform tuQTL analysis for small chunks of genome, for example, per chromosome. %------------------------------------------------------------------------------ % Differential transcript usage analysis workflow %------------------------------------------------------------------------------ \section{Differential transcript usage analysis workflow} \subsection{Example data} To demonstrate the application of \Rpackage{DRIMSeq} in differential transcript usage analysis, we will use the \emph{pasilla} data set produced by Brooks et al. \cite{Brooks2011}. The aim of their study was to identify exons that are regulated by pasilla protein, the Drosophila melanogaster ortholog of mammalian NOVA1 and NOVA2 (well studied transcript usage factors). In their RNA-seq experiment, the libraries were prepared from 7 biologically independent samples: 4 control samples and 3 samples in which pasilla was knocked-down. The libraries were sequenced on Illumina Genome Analyzer II using single-end and paired-end sequencing and different read lengths. The RNA-seq data can be downloaded from the NCBI Gene Expression Omnibus (GEO) under the accession number GSE18508. In the examples below, we use a subset of \software{kallisto} \cite{Bray2016} counts available in \Biocexptpkg{PasillaTranscriptExpr} package, where you can find all the steps needed, for preprocessing the GEO data, to get a table with transcript counts. \subsection{Differential transcript usage analysis between two conditions} In this section, we present how to perform the DTU analysis between two conditions control and knock-down without accounting for the batch effect which is the library layout. Analysis where batch effects are included are presented in the next section. We start the analysis by creating a \Rclass{dmDSdata} object, which contains transcript counts and information about grouping samples into conditions. With each step of the pipeline, additional elements are added to this object. At the end of the analysis, the object contains results from all the steps, such as precision estimates, regression coefficients, fitted transcript ratios in each sample, likelihood ratio statistics, p-values, adjusted p-values at gene and transcript level. As new elements are added, the object also changes its name \Rclass{dmDSdata} $\rightarrow$ \Rclass{dmDSprecision} $\rightarrow$ \Rclass{dmDSfit} $\rightarrow$ \Rclass{dmDStest}, but each container inherits slots and methods available for the previous one. \subsubsection{Loading pasilla data into R} The transcript-level counts obtained from \software{kallisto} and metadata are saved as text files in the \Rcode{extdata} directory of the \Biocexptpkg{PasillaTranscriptExpr} package. <>= library(PasillaTranscriptExpr) data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) @ Load the \Rpackage{DRIMSeq} package. <>= library(DRIMSeq) @ To create a \Rcode{dmDSdata} object, saved as variable \Robject{d}, we need to prepare a data frame containing information about samples and we will call it \Robject{pasilla\_samples}. It has to have a variable called \Rcode{sample\_id} with unique sample names that are identical to column names in \Robject{pasilla\_counts} that correspond to samples. Additionally, it has to contain other variables that the user would like to use for the further regression analysis. Here, we are interested in the differential analysis between the control and knock-down condition. This information is stored in \Rcode{pasilla\_metadata\$condition}. The data frame with counts called \Robject{pasilla\_counts} is already formatted in the right way. It contains variables \Rcode{feature\_id} with unique transcript names and \Rcode{gene\_id} with unique gene IDs and columns with counts have the same names as \Rcode{sample\_id} in \Rcode{pasilla\_samples}. When printing variable \Robject{d}, you can see its class, size (number of genes and samples) and which accessor methods can be applied. For \Rcode{dmDSdata} object, there are two methods that return data frames with counts and samples. <>= pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) d head(counts(d), 3) head(samples(d), 3) @ You can also make a data summary plot, which is a histogram of the number of transcripts per gene. <>= plotData(d) @ To make the analysis runnable within this vignette, we want to keep only a small subset of genes, which is defined in the following file. <>= gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) %in% gene_id_subset, ] d @ \subsubsection{Filtering} \label{DS_filtering} Genes may have many transcripts that are lowly expressed or not expressed at all. You can remove them using the \Rfunction{dmFilter} function. Filtering of lowly expressed transcripts can be done at two levels: minimal \textit{expression} using \Robject{min\_samps\_feature\_expr} and \Robject{min\_feature\_expr} parameters or minimal \textit{proportion} with \Robject{min\_samps\_feature\_prop} and \Robject{min\_feature\_prop}. In the \emph{pasilla} experiment we use a filtering based only on the transcript absolute expression and parameters are adjusted according to the number of replicates per condition. Since we have 3 knock-down and 4 control samples, we set \Robject{min\_samps\_feature\_expr} equal to 3. In this way, we allow a situation where a transcript is expressed in one condition but not in another, which is a case of differential transcript usage. The level of transcript expression is controlled by \Robject{min\_feature\_expr}. We set it to the value of 10, which means that only the transcripts that have at least 10 estimated counts in at least 3 samples are kept for the downstream analysis. Filtering at the gene level ensures that the observed transcript ratios have some minimal reliability. Although, Dirichlet-multinomial model works on feature counts, and not on feature ratios, which means that it gives more confidence to the ratios based on 100 versus 500 reads than 1 versus 5, minimal filtering based on gene expression removes the genes with mostly zero counts and reduces the number of tests in multiple test correction. For the \emph{pasilla} data, we want that genes have at least 10 counts in all the samples: \Rcode{min\_samps\_gene\_expr = 7} and \Rcode{min\_gene\_expr = 10}. <>= # Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) @ \subsubsection{Precision estimation} \label{DS_precision_estimation} Ideally, we would like to get accurate precision estimates for every gene, which is problematic when analyzing small data sets because precision estimates become inaccurate when the sample size decreases, especially for lowly expressed genes. As an alternative, we could assume that all the genes have the same precision and based on all the data, we could calculate a common precision, but we expect this to be too strong of an assumption. Moderated precision is a trade-off between gene-wise and common precision. The moderated estimates originate from a weighted likelihood which is a combination of common and individual likelihoods. We recommend this approach when analyzing small sample size data sets. At this step, three values may be calculated: mean expression of genes, common precision and gene-wise precisions. In the default setting, all of them are computed and common precision is used as an initial value in the grid approach to estimate gene-wise precisions, which are shrunk toward the trended precision. The grid approach is adapted from the \Rfunction{estimateDisp} function in \Biocpkg{edgeR} \cite{McCarthy2012}. By default, to estimate the common precision, we use 10\% percent (\Rcode{prec\_subset = 0.1}) of randomly selected genes. That is due to the fact that common precision is used only as an initial value, and estimating it based on all the genes takes a substantial part of time. To ensure that the analysis are reproducible, the user should define a random seed \Rcode{set.seed()} before running the \Rcode{dmPrecision()} function. Thank to that, each time the same subset of genes is selected. To estimate precision parameters, the user has to define a design matrix with the full model of interest, which will be also used later in the proportion estimation. Here, the full model is defined by a formula $\sim group$ which indicates that samples come from two conditions. This step of our pipeline is the most time consuming. Thus, for real data analysis, consider using \Rcode{BPPARAM = BiocParallel::MulticoreParam()} with more than one worker. <>= ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) design_full @ <>= ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) d head(mean_expression(d), 3) common_precision(d) head(genewise_precision(d)) @ To inspect the behavior of precision estimates, you can plot them against the mean gene expression. Normally in the differential analysis based on RNA-seq data, such plot has dispersion parameter plotted on the y-axis. Here, the y-axis represents precision since in the Dirichlet-multinomial model this is the parameter that is directly estimated. It is important to keep in mind that the precision parameter is inverse proportional to dispersion: $dispersion = 1 / (1 + precision)$. In RNA-seq data, we can typically observe a trend where the dispersion decreases (precision increases) for genes with higher mean expression. <>= plotPrecision(d) @ All of the plotting functions from \Rpackage{DRIMSeq} package, return a \Rclass{ggplot} object which can be further modified using \CRANpkg{ggplot2} package. For example, the user can increase the size of points. <>= library(ggplot2) ggp <- plotPrecision(d) ggp + geom_point(size = 4) @ \subsubsection{Proportion estimation} In this step, we estimate the full model regression coefficients, fitted proportions and likelihoods. We use the same design matrix as in the precision estimation step. By default, \Rcode{one\_way = TRUE} which means that whenever the design corresponds to multiple group fitting, the 'one way' shortcut algorithm will be used, which in fact corresponds to the first implementation of \Rpackage{DRIMSeq}. Transcript proportions are estimated for each condition separately and then the regression coefficients are calculated using matrix operations. The 'one way' algorithm is adapted from the \Rfunction{glmFit} function in \Biocpkg{edgeR} \cite{McCarthy2012}. By setting \Rcode{verbose = 1}, we can see that the one way approach is used with the current design. When \Rcode{bb\_model = TRUE} (the default), additionally to the gene-level Dirichlet-multinomial estimates the transcript-level beta-binomial results will be computed. <>= d <- dmFit(d, design = design_full, verbose = 1) d ## Get fitted proportions head(proportions(d)) ## Get the DM regression coefficients (gene-level) head(coefficients(d)) ## Get the BB regression coefficients (feature-level) head(coefficients(d), level = "feature") @ \subsubsection{Testing for differential transcript usage} \label{DS_testing} Calling the \Rfunction{dmTest} function results in two calculations. First, null model is fitted. This null model can be defined by the user via \Rcode{coef}, \Rcode{design} or \Rcode{contrast} parameters. Second, likelihood ratio statistics are used to test for the difference between the full and null model. Both steps are done at the gene and transcript level when \Rcode{bb\_model = TRUE}. In our example, we would like to test whether there are differences in transcript usage between control (CTL) and knock-down (KD). We can achieve that by using the \Rcode{coef} parameter which should indicate which columns of the full design should be removed to get the null design. We define it equal to \Rcode{"groupKD"}. Then the null design has only an intercept column which means that all the samples are treated as if they came from one condition. Note that \Rcode{one\_way = TRUE} and the one way approach is used. <>= d <- dmTest(d, coef = "groupKD", verbose = 1) design(d) head(results(d), 3) @ The same can be achieved by directly defining the null design matrix with the \Rcode{design} parameter. <>= design_null <- model.matrix(~ 1, data = samples(d)) design_null d <- dmTest(d, design = design_null) head(results(d), 3) @ Or by using the \Rcode{contrast} parameter. The null design is calculated using the approach from the \Rfunction{glmLRT} function in \Biocpkg{edgeR} \cite{McCarthy2012}. <>= contrast <- c(0, 1) d <- dmTest(d, contrast = contrast) design(d) head(results(d), 3) @ To obtain the results of likelihood ratio tests, you have to call the function \Rfunction{results}, which returns a data frame with likelihood ratio statistics, degrees of freedom, p-values and Benjamini and Hochberg (BH) adjusted p-values for each gene by default and for each transcript when \Rcode{level = "feature"}. <>= head(results(d, level = "feature"), 3) @ You can plot a histogram of gene-level and transcript-level p-values. <>= plotPValues(d) plotPValues(d, level = "feature") @ For genes of interest, you can make plots (bar plots, line plots, box plots, ribbon plots) of observed and estimated with Dirichlet-multinomial model transcript ratios. You have to define the \Rcode{group\_variable} parameter which should indicate a variable from \Rcode{samples(d)}. Currently, plots can be done only for categorical variables. We choose the \Rcode{"group"} column since it corresponds to the comparison of our interest. Estimated proportions are marked with diamond shapes. As an example, we plot the top significant gene. <>= res <- results(d) res <- res[order(res$pvalue, decreasing = FALSE), ] top_gene_id <- res$gene_id[1] plotProportions(d, gene_id = top_gene_id, group_variable = "group") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "lineplot") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "ribbonplot") @ \subsubsection{Two-stage test} \Rpackage{DRIMSeq} returns gene and transcript level p-values which can be used as an input to the stage-wise analysis \cite{VandenBerge2017} implemented in the \Rcode{stageR} package, currently available on github \url{https://github.com/statOmics/stageR}. As pointed by the authors of \Rcode{stageR}, interpreting both gene-level and transcript-level adjusted p-values does not provide appropriate FDR control and should be avoided. However, applying a stage-wise testing provides a useful biological interpretation of these results and improved statistical performance. In short, the procedure consists of a screening stage and a confirmation stage. In the screening stage, gene-level BH-adjusted p-values are screened to detect genes for which the hypothesis of interest is significantly rejected. Only those genes are further considered in the confirmation stage, where for each gene separately, transcript-level p-values are adjusted to control the FWER and BH-adjusted significance level of the screening stage. It is important to note that transcript-level stage-wise adjusted p-values for genes that do not pass the screening stage are set to \Rcode{NA}. Also the stage-wise adjusted p-values can not be compared to significance level other than chosen in the stage-wise analysis. If that is of interest, one has to rerun this analysis with the new significance level. The following code chunk is not evaluated by this vignette and to run it, user has to make sure that the \Rcode{stageR} package is installed. It shows how one can use the \Rpackage{DRIMSeq} output in the stage-wise analysis. <>= library(stageR) ## Assign gene-level pvalues to the screening stage pScreen <- results(d)$pvalue names(pScreen) <- results(d)$gene_id ## Assign transcript-level pvalues to the confirmation stage pConfirmation <- matrix(results(d, level = "feature")$pvalue, ncol = 1) rownames(pConfirmation) <- results(d, level = "feature")$feature_id ## Create the gene-transcript mapping tx2gene <- results(d, level = "feature")[, c("feature_id", "gene_id")] ## Create the stageRTx object and perform the stage-wise analysis stageRObj <- stageRTx(pScreen = pScreen, pConfirmation = pConfirmation, pScreenAdjusted = FALSE, tx2gene = tx2gene) stageRObj <- stageWiseAdjustment(object = stageRObj, method = "dtu", alpha = 0.05) getSignificantGenes(stageRObj) getSignificantTx(stageRObj) padj <- getAdjustedPValues(stageRObj, order = TRUE, onlySignificantGenes = FALSE) head(padj) @ \subsection{Differential transcript usage analysis between two conditions with accounting for the batch effects} The regression framework implemented in \Rpackage{DRIMSeq} allows to account for the batch effects. Here, this would be the library layout stored in \Rcode{pasilla\_metadata\$LibraryLayout}. The steps of this analysis are the same as described above. The only difference is that we have to include the library layout variable in the \Rcode{sample} slot in the \Rcode{dmDSdata} object and define a full model that contains the batch effect. <>= pasilla_samples2 <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition, library_layout = pasilla_metadata$LibraryLayout) d2 <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples2) ## Subsetting to a vignette runnable size d2 <- d2[names(d2) %in% gene_id_subset, ] ## Filtering d2 <- dmFilter(d2, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) ## Create the design matrix design_full2 <- model.matrix(~ group + library_layout, data = samples(d2)) design_full2 ## To make the analysis reproducible set.seed(123) ## Calculate precision d2 <- dmPrecision(d2, design = design_full2) common_precision(d2) head(genewise_precision(d2)) plotPrecision(d2) ## Fit proportions d2 <- dmFit(d2, design = design_full2, verbose = 1) ## Test for DTU d2 <- dmTest(d2, coef = "groupKD", verbose = 1) design(d2) head(results(d2), 3) ## Plot p-value distribution plotPValues(d2) @ <>= ## Plot the top significant gene res2 <- results(d2) res2 <- res2[order(res2$pvalue, decreasing = FALSE), ] top_gene_id2 <- res2$gene_id[1] ggp <- plotProportions(d2, gene_id = top_gene_id2, group_variable = "group") ggp + facet_wrap(~ library_layout) @ %------------------------------------------------------------------------------ % tuQTL analysis workflow %------------------------------------------------------------------------------ \section{tuQTL analysis workflow} In the transcript usage QTL analysis, we want to identify genetic variants (here, bi-allelic SNPs) that are associated with changes in transcript usage. Such SNPs are then called transcript usage quantitative trait locies (tuQTLs). Ideally, we would like to test associations of every SNP with every gene. However, such an approach would be very costly computationally and in terms of multiple testing correction. Under the assumption that SNPs that directly affect transcript usage are likely to be placed in the close surrounding of genes, we test only the SNPs that are located within the gene body and within some range upstream and downstream of the gene. \subsection{Example data} To demonstrate the tuQTL analysis with the \Rpackage{DRIMSeq} package, we use data from the GEUVADIS project \cite{Lappalainen2013}, where 462 RNA-Seq samples from lymphoblastoid cell lines were obtained. The genome sequencing data of the same individuals is provided by the 1000 Genomes Project. The samples in this project come from five populations: CEPH (CEU), Finns (FIN), British (GBR), Toscani (TSI) and Yoruba (YRI). We use transcript quantification (expected counts from FluxCapacitor) and genotypes available on the GEUVADIS project website \url{http://www.ebi.ac.uk/Tools/geuvadis-das/}, and the Gencode v12 gene annotation is available at \url{http://www.gencodegenes.org/releases/12.html}. In order to make this vignette runnable, we perform the analysis on subsets of bi-allelic SNPs and transcript expected counts for CEPH population (91 individuals) that correspond to 50 randomly selected genes from chromosome 19. The full dataset can be accessed from \Biocexptpkg{GeuvadisTranscriptExpr} package along with the description of preprocessing steps. \subsection{tuQTL analysis with the DRIMSeq package} Assuming you have gene annotation, feature counts and bi-allelic genotypes that are expressed in terms of the number of alleles different from the reference, the \Rpackage{DRIMSeq} workflow for tuQTL analysis is analogous to the one for differential transcript usage. First, we have to create a \Rclass{dmSQTLdata} object, which contains feature counts, sample information and genotypes. Similarly as in the differential transcript usage pipeline, results from every step are added to this object and at the end of the analysis, it contains precision estimates, proportions estimates, likelihood ratio statistics, p-values, adjusted p-values. As new elements are added, the object also changes its name \Rclass{dmSQTLdata} $\rightarrow$ \Rclass{dmSQTLprecision} $\rightarrow$ \Rclass{dmSQTLfit} $\rightarrow$ \Rclass{dmSQTLtest}. For each object, slots and methods are inherited from the previous one. \subsubsection{Loading GEUVADIS data into R} We use the subsets of data defined in the \Biocexptpkg{GeuvadisTranscriptExpr} package. <>= library(GeuvadisTranscriptExpr) geuv_counts <- GeuvadisTranscriptExpr::counts geuv_genotypes <- GeuvadisTranscriptExpr::genotypes geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges @ Load the \Rpackage{DRIMSeq} package. <>= library(DRIMSeq) @ In the tuQTL analysis, an initial data object \Robject{d} is of \Robject{dmSQTLdata} class and, additionally to feature counts and sample information, it contains genotypes of SNPs that are in some surrounding of genes. This surrounding is defined with the parameter \Rcode{window}. In order to find out which SNPs should be tested with which genes, the \Rfunction{dmSQTLdata} functions requires as an input the location of genes (\Rcode{gene\_ranges}) and SNPs (\Rcode{snp\_ranges}) stored as \Rclass{GRanges} objects. Variables with transcript IDs and gene IDs in the \Robject{counts} data frame must have names \Rcode{feature\_id} and \Rcode{gene\_id}, respectively. In the \Robject{genotypes} data frame, the variable with SNP IDs must have name \Rcode{snp\_id}. <>= colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") colnames(geuv_genotypes)[4] <- "snp_id" geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, samples = geuv_samples, window = 5e3) d @ In our tuQTL analysis, we do not repeat tests for the SNPs that define the same grouping of samples (genotype). We identify SNPs with identical genotypes across the samples and assign them to blocks. Estimation and testing are done at the block level, but the returned results are extended to a SNP level by repeating the block statistics for each SNP that belongs to a given block. The data summary plot \Rfunction{plotData} produces three histograms: the number of features per gene, the number of SNPs per gene and the number of blocks per gene. <>= plotData(d, plot_type = "features") plotData(d, plot_type = "snps") plotData(d, plot_type = "blocks") @ \subsubsection{Filtering} The filtering step eliminates genes and features with low expression, as in the differential transcript usage analysis (see section \ref{DS_filtering}). Additionally, it filters out the SNPs/blocks that do not define at least two genotypes where each of them is present in at least \Robject{minor\_allele\_freq} individuals. Usually, \Robject{minor\_allele\_freq} is equal to roughly 5\% of the total sample size. Ideally, we would like that genes were expressed at some minimal level in all samples because this would lead to better estimates of feature ratios. However, for some genes, missing values may be present in the counts data, or genes may be lowly expressed in some samples. Setting up \Robject{min\_samps\_gene\_expr} to 91 may exclude too many genes from the analysis. We can be slightly less stringent by taking, for example, \Rcode{min\_samps\_gene\_expr = 70}. <>= d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) @ \subsubsection{Precision estimation} In the DTU analysis (section \ref{DS_precision_estimation}), the full model used in precision estimation has to be defined by the user. Here, full models are defined by genotypes. For a given SNP, genotype can have numeric values of 0, 1, and 2. When \Rcode{one\_way = TRUE}, multiple group fitting is performed. When \Rcode{one\_way = FALSE}, a regression framework is used with the design matrix defined by a formula $\sim group$ where $group$ is a continuous (not categorical) variable with genotype values 0, 1, and 2. For the tuQTL analysis, it has an additional parameter called \Rcode{speed}. If \Rcode{speed = FALSE}, gene-wise precisions are calculated for each gene-block. This calculation may take a long time, since there can be hundreds of SNPs/blocks per gene. If \Rcode{speed} is set to \Rcode{TRUE}, there will be only one precision calculated per gene (assuming a null model, i.e., model with intercept only), and it will be assigned to all the blocks matched to this gene. In the default setting, \Rcode{speed = TRUE} and common precision is used as an initial value in the grid approach to estimate gene-wise precisions with NO moderation, since the sample size is quite large. Again, this step of the pipeline is one of the most time consuming. Thus consider using \Rcode{BPPARAM = BiocParallel::MulticoreParam()} with more than one worker when performing real data analysis. <>= ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d) plotPrecision(d) @ \subsubsection{Proportion estimation} Dirichlet-multinomial full model proportions/coefficients and likelihoods are estimated for each gene-block pair. Currently, no transcript-level analysis are implemented in the tuQTL workflow. <>= d <- dmFit(d) @ \subsubsection{Testing for tuQTLs} \Rfunction{dmTest} function estimates gene-level null model proportions/coefficients and likelihoods and performs the likelihood ratio test. The null models equal to models with intercept only. In contrast to the DTU analysis, there are some additional challenges that have to handled in the tuQTL analysis. They include a large number of tests per gene with highly variable allele frequencies (models) and linkage disequilibrium. As in other sQTL studies, we apply a permutation approach to empirically assess the null distribution of associations and use it for the adjustment of nominal p-values. There are two permutation schemes available. When \Rcode{permutation\_mode} equals to \Rcode{"all\_genes"}, the null p-value distribution is calculated from all the genes. When \Rcode{permutation\_mode = "per\_gene"}, null distribution of p-values is calculated for each gene separately based on permutations of this individual gene. The latter approach may take a lot of computational time. We suggest using the first option, which is also the default one. The function \Rfunction{results} returns a data frame with likelihood ratio statistics, degrees of freedom, p-values and Benjamini and Hochberg adjusted p-values for each gene-block/SNP pair. <>= d <- dmTest(d) plotPValues(d) head(results(d)) @ You can plot the observed transcript ratios for the tuQTLs of interest. Plotting the fitted values is not possible as we do not return this estimates due to their size. When the sample size is large, we recommend using box plots as a \Rcode{plot\_type}. We plot a tuQTL with the lowest p-value. <>= res <- results(d) res <- res[order(res$pvalue, decreasing = FALSE), ] top_gene_id <- res$gene_id[1] top_snp_id <- res$snp_id[1] plotProportions(d, gene_id = top_gene_id, snp_id = top_snp_id) plotProportions(d, gene_id = top_gene_id, snp_id = top_snp_id, plot_type = "boxplot2") @ %-------------------------------------------------- % Session information %-------------------------------------------------- \section{Session information} <>= sessionInfo() @ %-------------------------------------------------- % References %-------------------------------------------------- \bibliography{References} \end{document} DRIMSeq/inst/doc/DRIMSeq.pdf0000644000175200017520000161723414710277102016440 0ustar00biocbuildbiocbuild%PDF-1.5 %ÐÔÅØ 98 0 obj << /Length 602 /Filter /FlateDecode >> stream xÚ¥TMoÛ0 ½÷Wè(µªK²wÚŠ,C‡¦Û’ì²aÕµ!޼ÚÊŠö×—Šœ I;`ØN´(òñ‰|4E DÑÇ3zj -2&%’Ê\ƒÕŠj:¸þÃÕô³/çgcŧD).ѼF’’<çHåšÈ\ ùúGӫɬº›¤2ãxd;[&ŒâeSùtp†7·®][Ó$©Ð×YW “ø!á·Ý*ù9ÿRF>³«Ë}\ßGœŽ;ØKÛZ7^oËW¸èÈEü—“f0¦ÆóûË·E–4 ‰hCD±a¨‹¶·†¸öÁ‚\Þmž–¤\žhQæ(6j ‘î0()Š¡wŸKßÞÂËlWƒÂ¼ÔÂ)Ïâá/p ‰AÒ\¦E| ê5eXÚÕÑ*½”ÔÍàeâøûË@Æ„½cg?ÌÏžÌÞCe endstream endobj 157 0 obj << /Length 1179 /Filter /FlateDecode >> stream xÚí\Kw›8ÞçW°Ä 4z –í$ÍdN;ÄÓMgcG§6xŒÒ´ÿ~?âæ4Ç1ãÞ6W $}ß§«« 8˜8¸<{=>ûé$A‚Ie0ž£8¦âñ„ãIð!<×Óéˆà0_å…Ñé|Q‡f•U¶ÒKÓþ¿«ÒºÐlÕEÛsi1yzá?Ço»«lD„_«¼jÏè¢=^ÿö*ªòÛ?÷Úܺ»ßº[œ__½»éìË4Q~Ú©éŸñ¯gص~ïˆp 0XÄÊ•ÄJ+k~Ät}Yw`…(¼îAD‚#“¶ó~. c»­Ú­ù5”Aëš8EöGÄb$¤lk#m5Ý>øÙ§á»´ëîì6-fÇà;=ËŸñG¤iqlÁ)›®¥,A"I¬©i,úæhÚf(JÁøbF{’ÊBæcà½#ê€QËDGDê¿Qaup1~Öy ùû–åô!=´-f¯ÑÙí<7Ñ¢V¡»¹ÑE¹Xk袜äóù"¥Uñør:Àv#º læØW‹eiáÊqhÒÂÍÑEiòª?pÂV€M0‚ñ‰Bć#D޽á¤å0÷ D¿èÚWnôg:²“l­JûΦ^æs]ôªN±@1& O`<)Ú:XoûÂm›ÛÔNo³òo]á­åÿ,ß,ö¿VÚqþ¾¾ lKúcVÖ€û]d%—xþ]‹ã¢x¢²ØU¼vuGRŒ9£gÆ>(¦<¼ø’.–sÍIjÒgÌàƒ”äXJÒq0"Þ õ $¾&ĹiæÄ<ï¯íé´e1ÑF—Ež0Ã%äeuêøHiC-Ií*Š¨Ø€=;ÆËðm™Nt1ëb畞ÏÓ­IÇÜæk£kŸ V ä ”¶_þàZ]íÂ#Ù‡z Î=7¹OË¿¼€%0þ(Ú ¥ ̃6ü±Ê3]Yo¨5óÊèEZ{G~eBYÿ pƃ™ŠyÜ óÊõþaïü#2tñ þ!UHð (<p<"7Œë•;»g“C¢~}k*’½€™ ÌÒ˜Û8WT™udÌX|ûE%¥0•€q€¤–ƒ ‘3Ž0‘m„œ­‰Îz ‘sL¾=)qŒ»y]f"¯ ;!òæ]ˆ¼þ³"oJ7YãöáƒuÚíñ¶ai–•wÅ#“è:³ócj2—yž»&d¦Ï\NSv A:}PJIÅ )ÆwRJ¤‡”s·óBÈsDˆ°¿1ðŒƒJ†³§Îl!!]vŽÛ7•F0‚”žžÓ->¤—üœÇ½‹§¾UÚ닎4A$– >§‰s èD ¢vs‹d¹E—½Å8|u~uób F’@XíE…áÄ%ä ŒC>(q€D!0õŽB=ÈãF@1(¾@¦P©üÒPPp˜Áx‚ÝÛ •Ö?•t÷«ÊÃ^èM^mÜU]l+Bïóæ^ò! ß\ã)j‡òKœí/i2JÅͧº$бó:wÉÅøì?rdß endstream endobj 167 0 obj << /Length 3404 /Filter /FlateDecode >> stream xÚµZKsÜ6¾ëW°r1UëaH§rHVë”Sqvc+‡-'ŠƒÑÐác>¤hýö 9:–“è24€ÐhtÝ`èÝz¡÷ÝÅ·×_¾TÂË‚LIå]ï¼$ ÒTz:AœÅÞõÖ{ç_•»Ý¥}Óšº/óêr#uê÷m^wE[{®]Žn/7Ø•iy½}|矮p£`‘øé˜RÖüÿæÇo6ùÀ•û²ß[î{ËâêÍ«×o]û1/.eèÿv2Ó¯×ß_„v÷ãf±ˆ¼0HÂ$Õð¯U¨µ×BóGšÞ|‡‚Ë<¡)’%z›$D*XhâoœÊ{·™ˆý×¹D±ÏëÛ¥t>!†ÛÅîÿÔRþu}ñáBƒÐNYT*ƒ(öŠÃÅ»_Co MßÃ(K½{êxðb™"F^å½½øi\é_¤gú—EAK¢L$‹òå¥LýÚËMżÑ(ŠüÝPU\ªÊ®çÆfÇ+¢ç\ëqøÃD’úæ " ìdöK[_ß ¨@Þü—z.‰ŸÕsUQ$Y†’Dº“šÈ‚D'^k¼Êî3óø >EÏT§P£ ~…L¸ç’øÆY!0:A–ÀÙÏ´ VÀ-e-¨Í}÷ÙçöØžÀÿ—0 Ÿ’?ÜÃé>ÉJÿë?9’ú¼çDœ&øÂZ—/žø0Ä^ÒGó´vja¤ÀÔÃÕL2kŸ^Ž•9€oÌû²A[œ¦d…dª­MBkn[Óuc‡]›ÌýdÙ~cri›·å/aÍ׋Åò—zñ~õ”vŸuNÉcÎIî1½³øðÏÔ‹ø¿>g3| _öF"ýºémÁ‘„¦¾!;ˆþ€A³©%UëŽ:8—s0½iïÄi4Çä†`´e£!Úý û›ªÜ³ ³Ž¬ãæ”`Ù™"¯Š¡Bg°\“h®1èZ2j—>8?€ë¹Øm?´5‚˜öÖ€§"JØI”ÂÂä tˆ@ÖÇÍ]^ ÆŽ·‹í°‡•S‡ÎXvyÇÍe}z;Ccÿ÷¶w×FÞÜ—Y…Z'A¨íIj,É‚Á@2„¦¿¨kòLט-nÿ;Ä^ 3õ¸*"LoŒÛð‚Öje†*ãYwG‚˜€hË;„-Õб‹Ô;À@¦G»EDL+Ò°­wåÖ"e Ù¢5dþÑêé_Ët”:ußb¸²{°Ôñ´-7‡u 8ÓP¨ý‘Švù8ê0.¢¬‹•- ö1¾ÝÂM*,¸XUäNíœ=ÄÒÕõÏ«x÷g¯âXZl…¸êÀ•g,/S”žqϲîz“oO‡=»$è‡wÚSËCD”Ñ1iÉ7vè Ëi3” loP'¬\"‹Ú˜ÁŠdjs›£nÌ \æÆ Œ¡á|HŒæ‰â"°‰ )'Ú0XÒ¿Þ»ÆÇ2+òãf V‚]á@Ka(Ë…‚¢ÂQa¶ùÓMUÞðôûÀMw6(£t6,°¸Þj4MÍ[c£#;‘=ëÎp„©l ®¦™)7íBžÌ›÷y°vtÚ¡µSq¨ý«×L˜BE¼ÚRMî:‘;‚NìŽñfÑÓòÌçP[çbn$@—›ÁŽÌ¹¾8 lWQ‘Naó\Ã×öá¬u–°BdÊ/ª¦£À ‰UY³§Úr#Ùç,9_ïÊÜö"ë ÆCü’¿X…d4FL†L …ܾ[ïg$aêk˜üýøL•Èl긆X²TÌA—€yUìÿcm™"H“1 8ò gB]²ºŽð¡Ð Ї{§"JE$R€DÅ’°¦‰Ðé]‰é8ålFB3Ù,øÿ‹./Z…W£ãà9¬Q‡Ò³…¥xÆdrøÏ ­óƒ9æw°b/Qæï†ºÀËíF‘Å º›O¹’5vðÈæL" Y Ðõœ‘‚ë.üÛçìEðîÓóx.÷¾ÀOñâÊp’ÆÞKNÞÄþìA-3'ì9tfñÂ×òÀ¥¥»aßñ×_t–ïXpJ ü E:ˆ…µÃò ³þ}w ˜„<@Wßà#Õ=?Y‘U?yÐ*¡›cóø¢7Ïi`ŸCƒùµ§yኢ,:ú[Ÿ¸" “+½òÄ%ÓØ¹•l_‚¹M°É˪ãÖœ¡q3ô'¹ËøcÉŸ1é\¾Ì` c¦ÑçÑ̲@¥ŸbØ×dsgà™÷ßnOkì`ZÔÜèFîUªn(  >¹¡8H³ÉnÛ÷›S¯ åÒ¥ÿɘ­4¯‘Š[WòÿH¦q¡è'žE?´] ¡2Ô3ëe#"¥È,rú*Ó9³YS"ÓAÔN+›€‘án6‘ŽED0ÜÕfåÜ³Ò ¶0¼¤·W"p Yê­V»ŠÐq^ëFø~o("È\¼ H€’¶É3áÿMgÚ;—±ÂÎä(bm - ²…^Žfš‹Á§0AßÉ´+ÏØÁض$³ êl¤%"Ò1¿i\ç#ÑÐRç#@M³EÿEÓbÓøBM¥}mþ6„uû6ƒ¡Etru ‚ø™°ÑÆ@b-Õì^Ú! u©`,LHäÒÁL/§#8þb€êÛÿs>f|ˆ1îú¥}“¢Õ9d·Ø3-j=߯ܭ` „š$Ðô} a_»B'•X<ît£ÁY Ó'(X‘úù•AêLC«ªeku2Á)'²œäU}ºækÏOqó7F$ÓÃü“¡çæ[çJ)ŒP×LbJd²‰RÉ3›HŒ;ž°4Êÿ±QšÞâ8],MØôìpÅÉcÔG…Æ&g¨ôp¦°ï¸ÆÇÊ_|Í¡q"1⽡G¼œ+ÍÍ{~þÃ.Ö‚Šh]:‘Œƒ$‘rz’^w ÈÓ ñs6p˜t[´^f œ|¯bitÞZ³yF0™è•¤5VÄh(¢”ô—p•VÈG3}ÆgÅøk}~Z¢]Çθ‡tž¥KÓ1Ïá"8’/Ð;²‘ØR2Ë—nöH†ˆtÿP9mOõÜò¤³ÏÒ•ó7ÕÃ7\wê“¢çmëé/ºû0„¿1£,ÒI¿@ìy%ýópÇõÛ›ç\kX}oßjùQû·Æ¸Pc†ô˜`ŽÝ‹µÙ_–m‡3J-ÆøA&Šã™ØG@¤ü“–÷ûæ)·Ü”oßÃ¥gêÄå5tØ•KÉe=&—µ?n`½¦dQ÷vð"üÁ6›#ÀV<=$•5Ɯ撳TcÛÛ'O©O¯ä2³D²¾ ¨è$=§à¯¬J¾VÌŠ¢ d9ÿ¬Ð7ì:µ|—&Ä€c§o ‚nfʹÀý æ€Oc'™ž @!˜òe^3ž÷ÆÇöŒ©u³™•Жiœ‰Åf`\¶¾;óñ[ ¼*1\ÙÞ.À}GÙÌ* øô;:™úä#P [¦qÝ%Š Wf¨¶ÒÔ0ÀâTQÂ=¦ü’ú¶¶\èP»’c7ðåÚ)¯½S;á󅜣¹ÙÇ>'_ÄÆJBì§½ÓקᄌÿÈ endstream endobj 186 0 obj << /Length 3766 /Filter /FlateDecode >> stream xÚÍÉrÛFöî¯à-P•‰ 7,‡9Øq<ã©qÆ‘•ÊÁIMA`‹D™”ì|ý¼×ï56ÁŽSv.Do@¿½ßÒŒVÛU´ú磧W¾}‹Uf±ŒWW7+…i*W‰¡Îôêj³z<+on.DØ£­»2ß_¬e’Ý1¯ÛâX:êŸÚm/Ö¸”Æòzó鋼ú ö&xßÚ–FÊšž—?¹˜ƒ=¶ní~¶äh·GÛ¶eSS¿ }ì/‘Š‹øÔ"ª€æZˆ03†ðñtVËb··Ýº:í»²nªž¿¿D&zö~õ‡ãVÙðØSwX O¸}@’›;B.Ç߬‡Ëâ«sµÍ«ÃÞ.¡áÄJoظ9í÷Ø>Ù7–ûŽ!iÏ4àù6¼X'Q<¿pcðsœ|S81|ß–- #“&["½ÞÛ[Ú.B!I^‘û÷³·®‰M]¾^Bìºç€ÂqàéSâ€rÂsœGiÂq›#ÉÜÈHÍp¦µ hî(âФ:Äc ù‹šÖhðò¦FªAÉÝä”™8ª»ýWˆ^¨.‰fQ óFÅ1ñ&%Þ`i‹+6(¶ºF ÂákäÆ{jóWbÔ¸#­&½ŸLnl[nkš½:–ïI£¥Cr´Ò‘Á‘Ú1*1¡Â +5¹¥Ü‰ŠÓB=æzÀ¡ÍšªQ™›ÎMüÛ–Æ›Zøú‡WþÓmK»eÞùo2¶ðBNÛòÖÖÜ;öð'a¦$Áÿ¼ìˆÛÀ %ƒñÊ$é+5 Ê XLÃЄIÐö’V8¥Ã§Oé91AÐÏQ¡y ÙÇaùA=äoå`¨ÙvÐûX´Kœq­ ˜PjÝxåUÞ°acæÂœuß@©•’â½Îâ8é7Úäz¶#ËŒ?õ°Q÷CS1Â5Ýðú‚.¹`­"ÃC5†œÝI×ʤÃz‚&™ðN¯Ñü™Ñ7 «3o5(0ÿ¥Ï·=¿?xÉé0¾¼ÍÀ ¨ŒtDfi¯#ئ$Ëœr;Ç¢‹}v%2<‰:G²Â°ijT+„O" £L µŠB™4gGI²:Âô¦.Ñÿˆ³¨­F£²fD%¡,ïjºÏgí·z³™ÐÁ‹êÐàaÇR^ó 6ʶgÀéû«G¿=ðh%¼3i¤“ĬŠêÑ›_£Õ怮¡ÊÒÕ[YïeB‘Á—VûÕëG?ö@8uâ¥e*Ô|3ŠCÜÚé»Óe¼7xJÄ Ç³h£P‰@ŒÐµr¢ ‚~·ÎÚBÓÙ2(â€3vbf…0Y¢£R9£@vÆœ ¸¥åü›Ï®~úØùI¶âG(M¤š?–§.‘{À!¹š>Ü+ ãs¾ %Ã(–+É0V2'T&i ¼pb`W7Ȩ¿ÅföÀL`+n ´-5lÉÇØõµ£SšD®D˜&¬ÿsÃÚA³W ò‡ˆö9è'QßC>TRœ÷? Ú.Ɖ˜CfB™êâ ì˜É)Sþqƒ$EÉߑĩS•Î!Ykù@4NAÙd2%òÕåOß,V€„60ãVcˆ@~ ¹ ÀÞ ¢éŸwvj‚ææL:kà Ú.ïQAY AÜÌ [<0tGrÁ WPLç\áÈmyφ·Äº~C~‹Í¥vÙ›ÓÁ¯Ãز¬·Þ¬#.KƦu´;öÞŠ¦ÁÏßoiŽøŠà;3 Óß4ÎÑÒì!;³þþùš&X È©•Že˜Ñ«È)º4`E ©c°ªZ{_‡|S¡CeÒO1ÀwùûÏ·2Eë ï¡j ÇWµ2‰‹Ò9dh€%Ø!a’)_Î`eÄúÒXE˜¶dÙCZ`ÜRe3"’Öc ŒÊDÁÝ®Ät Ÿ rvh“È9Ërƒ¦²asÄ!à@3 a0>lBµéÌçÚ­“Pˆ{Bêžš{nÞŸ‡í>¡qC«)¡·ûêóåYÇ"Ô‰ü‚¨À†‰STž—ÝÇDf­âœÜlzrݜꢣHÔ$ÅÐ9 tÚÛ'´!D’™Q»ÙÚË'Á삳ÇËß|ðºžì¿bÖ8QpøRîDš>±B˜Ÿ ÀȂï|Ѝ…ƒŸéÒÑ+aßþv*oó½uñ«¡Ì:ÎOuÝ¿D9ãsÎåÓbØŒP2EP=꾊àÎ8!:šÈiV¿WM 8d‚Ó«™Ëp‹àÄimi2ztIŒ}n—»ÄÎSa¡¢ÑWp©Ëꡪ }æ ‡GŸ…„ÚÁ9G {m“ÔW¤(v|ŠG¶èæ‘{½Ö(¦ì²s ÞP»#×3ò®' MÒ†‘\ª\¸qÊZ[^”ï‹Óž³¢æ‘É ~ eñ4 )ë’‹5&üÓ4þ ïJ¢¾`!Ñ©pþë8ÃCsØ`‚‡S};›òh œtùþt`ņ ¡üN| ß×sCÿÅT)×VˆeÀ’ÏB1xú²Pÿ*«1ùts¡€[Ç¥^y2Ô–šRp^˜$;kjJið—3® º´,fÚv.±­Ûr[Û®Cñk2$æaŠk[gÕp€¢™;êp¤TžöÿI8'Á+Wrã¼/ô}Þš£Ä“ëm–$´;¹D,²ãÂôX¶“^¶gÆUDÙWm ÌðËyñD£àgo!.-`£­rWôƒæ&ïr´Ã…µ|v;Wºcøä]ÅŵÀÀGÎŽd:¢+‰œI1X š×TÅ¡7Ô@*”ܾ±wÔ¨ÊúÔùÐÉ>'N‡*Š=Ö— dÀ ²Éèk9=Ð îÎz÷½ê›cZ=Î$Wûb®t¸2kW(„Zõ.(P!KÂ8›oÌ 2?>?I%7ªRi.lƒ½ÏßöUr0U›ÛNEÿ*U¼4ehqŠ u7v‡š,ß“©Ýºúîì˜-dö´þ¥­ãåk›Æ¥ö@ ·ô^×Wñ¼„_ ¬†ºqflíJÂWÅÝ ŒÈ ¬bÆ$ÚœÁë–‘+jfh<˜Ï-£Ü4=Åãyy†Œ¯” jõÅí4 0A¤ó£ñ&%aØ <¦¢À± ¸ØïªðÉÖÏ;#­Þ­ÂNYƒb˜“­Ñya݈ïý 9uÇ&¯é™ÅœèVÿ‡úøüÎvñÕ€†ž¿Ûcƒ…ú8®è|LÐ?lÁ>´´‚j¶Tû†Ç­«Í½§ÎÑîówÎAg¬©#OµOÞ²?þøË\W‡ Š¥Ͼó籿fÃþ0Öâýý.ó+¾­â+ùõ¦/þû1_ÈW¾4„wj~{r:+$B•—ý½‚|l*aª¹ÅPiÁî¹Ë,lÙÚ¯dÚTFQº’}&&yxãûAˆûAøjÎgÛ„NBs³ ¸_ ŽÈWG{Dbiõ.µH§ )ÊsDhÄ=4ó‚gÁöKÌ”!mï1|JRðñ×r.à‹Ì—c8ì—Bìxn ”QŠ$ùr*ˆj`ä‘?Hé!Ãã>¶áÐé˳\‚ñ*›“JfÕë!l¨ÓtÆó+¬þA†QÄ#ÆÈ>_®SµÍâ('h î,º“»˜ƒý-1?@A)% àPLe˜¨³›HxÄrÒ‘ý†œºp¢:·Á»ü–]†*¯§a‚SFÔôé®Ê’så¾q›—ûüÚ•6aÉèB8^|i ï¶¾õΉ ®]y2qŽ»3›†F<8‡©¥¤ÝÆÞäà$ÑÕßÛ|"'#Á+„.*ÃDªA¯ªñ•‡Už#ϸˆ¯û«0Ð$—' *¼Aê(¡Ð Éù&²Â’žò¼çë¦ZLqQé8öX¹vÛÙCKÍÑ…üv*;^Ò•àÓœ*_ Î_j¶Eé.;úú0­fß­(Ùyƒ9NÊÑ fü¸ˆÇÉò…4è0ÑB÷÷n5_×ÃÖȽFu¸ý^2°3JÒÐÀ_…мô—|ç‡Ñ|šWxÑ©¡ž HÕ av¿ÈQîÓ§ˆÑã%”†»í½‚{ê÷Þïí¾üÝÇú¬j¢ùFkŸ”=Oùl(eš>-ùr쫾PO}ôN?4‡šJ¨NA+Nî!`PrJ‚ùÚjÌsM“ESU¶ÒÎÌH‰yÓx~ɾ5ií,@¨O›žã4r7Ü@§äɱ탯uû@Åa–h` #ùñ Å™ ÝŠ˜LDÆ,u/«`:ù’¨à!œÅST^=9*&…Èèë^Hª8ârùäå§g*ü½$ø€þÞOÓ)áÌ'è2&5Œé3ÍJL¯kZú¿ˆï­¬Šð.Ó¨G™DgêèTÀõx]©nË[KÝn—óΓL9nÅ –Kf¬à>u.ÅÂ}Òá?EN·à¥à8¦jkݽ(IÿÞÀ§;÷ý_DÔä'ؼ èØ[ë²°üõ¯hÌ¥$¤¿® 3íéxlNõ†r1s [Ž[ÏdÌùÓƒþO°Ö± ž M7›²§#߬ÕÒ/öÎZÅԦѶØÙŠë TQ š&ý3@3ÚÚóÉúꈯ€¬ÉOa(^tô’¯M”õ¸„É XÜÒ¹`Rªk³àPºY0l´Æ^Okìpy›ÅîT¿ukbG2ÿu¸$Öµc5~> stream xÚí[[oÛÈ~÷¯`³/4`M8Ãá­hœÆ ¼Ø&»‰·û-%®)RKR±Ý_ßs™¡HYIÇ*l@šûœËwn#'ðæ^à½~u¨¿©QQþl=53ž?GJo¸ýŒ¦S¿¾lyïÍü¼ÜxÇÚ½'b¶| |€sc-Ò_{Y±ä(˜¾Q0Ò/ËP·žYzIÊykWÕ,n4 K»˜¡B/p[ûæ †MDWÞñ`Žg5†‡3_—ÁÏõ2‚)§šXѦº3Eu„#ÖCãÔó¦nëբॉ¿L™Wõí˜ÚŽ“¤¶Ð?­z ¡zp¡‹\C.bæÂ\¯^¦)–¨Ñª¡iél6—‰ºaeqø ¡‹;»Ž±lV‡H$5-÷"üzÉ„¿Î /¸Ž²¼á‘¢šKJ…ȰB!GÖþ,8I|̓Ӻꚺܥ»žõNòÇFˆ_Ùx½ ~_-Šé‚ç‰ôIC(úˊípzIZ›Mf$ú« Ä®ãÀ?c¥»äÕf»´±6G}Þp{ áÜÊzù®ÒMgB©´/a–Ïߺzrá‰HU_ëÔç¿Õˆä(êµqê–„  mÑ8žHö1„ªf®ZKDtë‡ÊáÜÖŸ Ë9F®°?oêõŠ8Ä^Ÿb§¨Ðn°ÕÃÚ9YÄCù¿ñšºÍ©í gçCøÍN«Â¦°eQQÑ›f|x¾ÓNLi–†£&&^%ôl2#ôà8QJÉIaW²€‘P¨lq[7zŽJ|ãž¿ˆÊ$Ù›Z` X1míÎÕäc^®ëæ³ßáÆuKTâ7Ï=,{ñÄ9åµ4RÙKFõ L”æ£)Å®‚îGÇà?0:èh€0Þø!ìÌl ¢]Þ ƒ¼Zú%™D͇My57ö¬ÂІ“/w½”¨(i~Âè±ÿH’Ä-üË._ $ãÆð¹}&-è­‡‡gk¨™§g†™ˆbõY:ohîv¹LÈ>ál»ðˆmù|M¥/À-GkŽ-š†»E±ˆdËÚ²vMûÞøKÓY¤ÎZ¤ã¸²¯ÚFJv³P̤zëQÌÊøcQ¯[ŽLue.1¤›F‰¡J”Ä}bøà¤ÈÂOPbrT §z¬èÙbó`j_þã}s—ä.Qæ^P9ûˆ†;!›åÑ>ÊA»>'åθç<ë6¦-ÒT:¬|¾ÒKÂ}6 ‹¹-À¡·ñÐióîvzìÀŒ ýýµÍÍиˆ…”§ _ ûs†PQA‚°õMzØ=õµ#}Ñ–ãÛ/ûY($È[¥£Ÿöi>0„ã]àSþ½ˆã§{åAšÍ =Þ5‹‹Û×åÿ+8‘A"")o±’‰Ìp/¬à•I> stream xÚí[msÛ¸þ®_ɇ#ñºn<7µã&ç™äzµs7meÆÖD]‰:'ýõ}–¦!Ñ¢d¦‘|½Ngb€—Øg_°»%¤pÂHAB[+¢ÐÞ …ß´ÊçÐYAÎ åtAü¨•Á ´J9¼ 2•Ð$”A舷µá)ŒÁû=J ƒ¢CRi¥°xU9°Zh­½°à  =ÃRQX³. 'ã8ƒžÐ[¡ƒ÷øtTZ¸¸' í¤†œ†èž¬Š`q=XK2Â@è­°:âw°6}Öjˆ¬ÐS HÊA衆@ÂéEÄ`½ˆ/‚O„ê$4­p ãD‡Þ+ Ð`ál4%!ƒÃJ‚Â]„0í²V‡^¬A2²¢!‡f²E .’IèV!‚ýtC>è‚e(²Y´…”Ä$¼†Ma È å)Œå l*áYûø ÁË€8:¶žABSmÜ@Á\ÁxÐÀXÁ)v E@õ æ ñXGGaˆ¨x@p0 ~&‚/D> Œ£óq `HТ‚ùbCûE\áR¨ƒØ?a|v,\Yö*îÙŠ¬FÉï× …©ÀW^CÓž©#ƒó‘•Ê÷•©¡!Åž ÉXË|ÿcÁ h™Ü±ÃqpåÙw™Šø>ðUðnpp ò3‘¿*ß–"?ÏæÅ¨—ÓL=?ü0xöÞxŸ/¥Tܼ‡ßsÿ†›!7cn¦«ÏFÜ\'‚úÙ77óUÒõ—«ôr±úó17§Üœ$ög‰êŸ«¤7‰s äcº½Ãð|£Ìz]f½:ð_¸ù-1¥Ûqúív•¾äæC_áÆiÌq[‰“D_¿þ7Ÿ¸Y¤§U[—e"'á'« ?%ªË4ød³b̺bÌêp'iÌ›4ð,áZ:AµúÒiµôÍì:»:ÜmTk®ö¡ í?u¬qº*’Z—l“­Káº=áCj–ÎV´ÅÛ`Ü*Ñ/5?O.5k Ñ2É"‘Ûsöž`9à’í—ôÒxMç·mL2MÒƒÛe-.’¾ºQ­±l-$ý™›Ï ÜÒ'kr\&ª;}ƒÞ†AÿÛï¢znÓmÑ·—önå‚2Q_&>K ,ŸÎ»íÐ2Åv‡ÐÝ®ñ:ñ¶Q,sÓzöXêd’šá6/êNlÕšNNûˆ©û‰Ùò¾—mÄUÛûVîÀôÐJ?·]}ÔöªÖ¾iY,}âS[µ+oönûA·ÝÐËM‰ìÉð»~ø[™ãí&(ë.¾!^þ÷Å®>Ê¢~Ê¢5e-ƒÕwmµmžÕ ?’4¶Îóÿ¤±³¤±VpŒÛ¥vKŽQ{üE‡r{O˜ ÕüE{îÖ€¦-‹ÖÍÕc‡«Ó Z¤¿&/ý»ÖoÔ•®éië7êÊ¥ÔA÷£Á ù{,u[ᓺË)Úa9õ*Yön~åæ0Iy’dÛ{MEÝ5=YMEÝ5ýj*ꮩèRSQwMEû¯©6Æ“-QÞ¯#õ«cžµQmsƒ%Øø¾B—ï¢RœŠüå¸:gdƒüí—›Bä?¯ŠAþ¢œVÅ´š‹˜pŸór1sÞ®yS\އGågñNâRZø¨Ïù«Y¹¸ ÷³át~3œÓÑ‘Ÿˆj¶xr\ü6§¯ŽÀLAQ %n‡Ói æïx—šqžZëǃü¨œ]³š½<ÏÌOòï2/êç yTARŸ)ã…³&ãmÜh³ÀûÛ6s*‚èlqQaÌüõxú1?<8¨9䇵Õò³ü—Óþ{öi8žTå÷Wå|<̦åíxôqø§Å¿®³Ñõs@kЭ(öoÿ‡ˆ˜aRóÆvfƒ˜.&“óM”æŽR¢ôuÔ‡Ô•¶MúV«5ÿ’oR76¶õ>usã´àÏ w7üñƒÜÝ?¡{2Þ£®--jÍÊÑYuÂAŽ_®Åçê¡UxŽrþ¡ëðþúÓù®`üüµâ®·MOMîzÝÐé†N7tº¡Ó ièLCg:ÓÐÑýó†Þ6÷¶¡· ½mèmCç:×Ð9»Å釵Çöœ0óüí “Àñ‡'c2e• 3' t‡bûGƒ#Q1³pã0G<î WÑoE¢÷‚ÄEp¶^h‰ŒÈúíHÌ~xpƌԙMGáB—ߎÄî‰gx½!›±W:2™¤°‰Û-hOÛ:f1j¡•ÏÈ«:ŒG»‘¬o1ïŽ2HZX@mÎgáq,;vܨ2BèrRe!ò׿˜i‚»(¤6»N׎ë®1Ù(až ´v± Kè+ö„´5Yò|šP¹-²r4ª'&³L3$díCFü?(@Ô=!Ùý@rS\ cQhMeR™žÜ~ qb59ÄEäL‹’G:Ûí%X#3ÂÌ·ÞgÒ;`´Àª»u¤º²w2/áÛ‘Q( ãúÑ?5šû´aC¢êÔHê º’˜yVoÍû±VYY@sŸ5 ÂRØâÍ6¶vŽëQLK(vøÜÌåíãpö…×°V¸Cd4¤¯Oø¡½%cI•N‰Ã`ÍäÉôÄ´'=ixQ}¼ë.s³ ]OLûÉF9$T›R‡ÑIŸzbÚOê0Ò"£:¡‰2>„e0ëBð=1¹½„"ÍY~¤Q¡¶U~ ¸5ùU$Ç<}©×Z~ê%™rñ›Vд¾‚¦']A“jV¶ÍÊ”LÓïz…j`/ßኚõne2 È5£º«µÑ¸*²ãátx]ÌT a·Ž„E˜V\.ÂÉŸÔËV‡\ÐnÅóëpzYLŠÙU¡¥ò;žpX×[§3iøœ*±C¡Ä+§7ƒúénà €v›o-Ö‡–­…/C]4ZÞJQª¯ÆÃsލïþY›tûZ-»iúÚ¹¼mÓLó9ÑD†¼¼§–ïGンþ~?ŽÏ!ûûý8LJ“í7ÅŒ@k1#اŒ¾ÙÕòwŠà“­ß¸…«L¨Œµ13|0–8Hð¹g•)múïâ^WÕÍ÷y~1.Gåôr1ªÊYVήò›!¼ñª˜çÅåUqú|§aë¹ëÍ,¡o˜"oF/†³êú æÈæê¦Å&ŸYæˆjQõiÎÚˆhÕMˆ;TÞžÀ-†“I1ioŠóÙç¾³:tíucA‡Ô‡Ö"@slìC«4oõ™^ =éWÃA{ÛüÛ'pÔk8ʧœÀ¡Iú¡Iú¡Iú!î:éë˜ùèø¿dü_Œ!ýQAAI›çÆÑ¬,?Î13ÒZäßçü–¾ endstream endobj 201 0 obj << /Length 2621 /Filter /FlateDecode >> stream xÚí[moÛÈþî_AàîUX{û¾Ë¢ýkš\Š\€K\Å]Q0m±‘(E¤b¸¿¾3;KZdGö™–ïP—û6»3³Ï¼¬Ä™4"á{ŸÛ‹Þ+}¾}yÂhH^ž|vòÝ +’ŒeVÚäì<1œy/§Ó™NÎæÉÏéóòü|"xZl‹ª)óåd*O›m^Õ³m¹iè}WçØéb2Å®T—WóÃ;ÿtöº4„I¯ê¢¦š²¢çÛ7Ϧuñ‘^.Ëfg_Ä)ž¿}õã»¶}“Ï&’§z”þuö·~g>}÷B¹=&iÉŒL¦Ú3ÏñèlâUºžLµ6él[äMAå¼£È3Ÿ Ÿ‘îMMHeZȤÿCn¨‡þ=;ùx«‡‘í¬Öfœ9Xäluê3fµ„­pç’m‘œŸütÏőꀦ°Ìp‰\AŠÀ6›If3El™¯ž¿‹ø5{±–inu3@Ò=ØMÞDyÞ¬R1ã´„Þë÷ÿ)fÍ)èSi*æ¨6ÍkROùDºt[‚~¦ï—űEfÀ@`〹†I¯Çá-R”ÙPSnc¬fÎÛ–¯£:½œHŸÆSV-s›x7غ-6Äãî0†>säx_ηù*6ÏÖÕW‘L¥àÌ:“L…€U¢ÛäeUV$ZiD$‘ž¯Ã쫼)×Ö«4àãÓõ®¡~ˆséj³D$Ã÷€ˆXè–ƒ.Ëå’jgy[*›c)„’š á^–yéãÒ=ª())ã@È"{À¼K&•nfÌIjoú›yðU2ŸuZ|cÆ¡ÚÖRlhPªf[ÿ1n!œÄüip[;¢t÷*¤ÙôE´(òù“CÈÑ~|„ ;˜“`ï¼aãbiá´Aå5ö¨‘·!ž(Dh)ôõÅ™•L à…ÝTH®ñ"¹»ƒ5’YíŽlùîGm…p¶ÿêú¯¾ÿšõ^=™]©A¦îfèôxñýEŹ‚…û¶¢ÙrŹõ0)LeSn7üM¦F Ÿòamسt˜$·¶ët hʯQÎZ†qa½“êX+€²þÆÕÉÛ«[ +n>pË7õùáзŒèËéÖÕŠèØÏ8†H ”¬>DêËTŽm øïË6Œï2þß8Œcäà4ïe.¾Û—ä¶Ù¯dÓŠ·Áóž5¤ÿröú+007Žº÷lËþ¨qnn¾2‚‚Íâ"ÚĆ_½í&S¥m¼kÄ8-k¼Ò.]åÝ7ƒá-§æxë¥z·ZÑõÒõØ,×áÊðxº…/ä]_”u³¾Øæ+zÅÈ[é;xPÑ»íõè¾Uß$£Íõ ¥‚ƒñTï˜hu–eÃK&1ˆùíÝ1ŠÑ_¼c–CÈÝ}fÝ<„DÎü^(8æIíýWƒc ƒN&þ!~ÏÍÞqÁ }ÿ[1× endstream endobj 205 0 obj << /Length 2804 /Filter /FlateDecode >> stream xÚÍkÛ6òûþ £Eù3â›,î>äK¢w@“‡´8hmyW,9’¼mî×ß ‡’m­÷™õn°ˆICÎ{H%eBóIºóÛœï5é÷ýÛ“t“·'?=yùÆð‰gÞ39]NtÊœ«8S^MN“Éëb¹œò4É›¼êЬœÎ„uI×dU;oŠuGíM›á óé ‡,«wüËéÏý,ÀÁuò¥Í[‚•ïÿõjÖæŸ©ñGÑ]ÄÕ/â¯ß¿û燾ͧ"M>íaúíô§“ôît:ÂÈœž@ þø„Kͼà@tÅ„œÌW'ŸO˜J¹±aÀN5tõÓ"à廟¼®O~¿ž¡ýY¿ôl»v`¶´;ÌöPˆ‰r† o‰Ù§S'“z:“F$«ìÓT8ä4’¨Œ`äÏ—¶h Ülª*;+c2¹EhŒH.‹ó*ïºü4mšü±³j¨gUG»š „7_S«®Ê/5ÚUV–i7gmÞÅqKä/`Æ9óZÓ‰Îó*o³lÅü‚ªaoR%‹ü×Tª*_DpE%*˺,ë©°p´êœ@8¡ÌÙ½…É+lnÃÈ1ð^#A˜¶ruW:ÉRiåWB3ÜušIá'M>Y¢ÀÜc3Ï©-wI¶ Lp„zG¼µaJ¹­0!ážq¥&œ9%ÿ¿®˜uh /¡Ã3mÅ]ÆG‰¼§pboøÈäã̤"ùëìÞb欃¦’~¹Ð4r Übhòlñs:r4ãDù5Õé’, PÈuáȇXd]Fd³€ÿ±(šÜ—öêÈ-pËÅïÉV–9ðéG“lÖýÙ}wd2süw<æRµï(Ϩ³w'OÀ°øxLeª²Õñ­Áâ!,¾Žâ?ÕǦùÖu€ï0š4Ì\£1æ »e— w 9å »ÚÓg*b²_ìÎØ-Æù ÷™@‚+…`\Ë>aáÀrdZ€låž[»š >Å àSû÷6oµø‡D@ŽmÁ‡Ž¢˜Óæ'A„Þ¹ý“€<ÂQÀ·¥Þ>áQ¡T#¦ :ß Æ ¿°\Jc—›jÞuZaœïOùF/e4.¨$6G*4aW¹WA«BÏÙt®,PÅf7ÂÉÆÁc]á%”AS…IÐáOMe~™—hó%ìsUTÅ* {ù½s:.ƒC‰çÛÙ'œ’Æï5Å0'ÅîýxêÝd\FGp¨ëk5ZX Œéæ°Þ Ñ‚ >Ÿ‡lï€NãA€8Hltµ@Ü­köw ¼ÀÛ’“‚»LYæY·iH&¤d¸;ÌvÞ(Û‚390ƒ‘gb¥ôV’cVZ <ÔÇá$¢Ä굜tb‹| ¶àý"Ó”î)ýš|>¤K`sZºüºT7(¹7ÁE>“†×ë`ehîe7Lýã¼É>—®kî…w`ÄÓè:àTè,R&õCEd¤ìüxÚ¾F¦Þ¤í‚)£¿uwàE¸só¨ê(•‘_Ë̇éûmŒ‰×Ñ1Œ¿4–éöÔwø` ‡0z¤çÂAˆ;¬³ÎÚ¢,³z-<6ßõù!àhŠíáyD›íÉÆ>V2*£˜!z¥ÀY“Ý? „­DÏZï½Ì…ÕÎÚºÜt±÷jð1™štts²f|޹bMÌ©Bb„Åï›¶ËãpÈ„ÉÜ-hÛÃØ>7U›†_6ÁÐaÙä벘g]ñô4£Þy]-Šj™&ŠjÞ?RM‡`n”/ŔϚDRñ©ªÃªóO³ÅuЉ¡¢¨t]S—Ô Üs8|wrvË8ìÜyxj-OmP9¡Áxÿ$6qZØ‹ÐpŠG²ÙÏ  æüVS?o²Èô ¸(9(pV a «–¯ì ½*E#hÍLèA`”Þ>‘∬Œ© 6 ê;BÛ¢Ûd!J e.ò&ß°«ÙîŽ 9 塿Ù&®.*âŒê“A?ìÏÀÍðØê=áNÓ`« 9Ï‚ñ‚ZHΠcQ€ý’Û/ °oÏ4A{Ófç9¦yJ&§qTÑÁ.˜wõR¥·eýöûÛÚ@!ßërIäqý…K¡gRZ|hÒ)Z"…T=…ko[@ÈZ™æZ½å½è×|ˬÛpìšgVòä߃¾ø``C¥ˆ%j&ò1¸\få&VƒBÉÓ y¢—Z„­r¤¸D¸æÃE‚/÷:D#ÅFÁTftS¨,.ØQ#:—EH™cw[<¥Þ¼í ƒ ©P/7!ˆK†ö× È)3\_‡îí %ôÐ'ë8s9¤-Êô¡ÌX»{ØvMž­(Ûé¿aÄЈîbè"t6PP)XÎS=<ª„Þ^‘¡šW-ˆMÛ¦yñ“ ¬ÔgmÞ\íD𮃠ZÅ–úˆÌXkëUD’2¼ê-ߘ–EvV”E7˜d†æÌ&¯Êî¢Þœ_€œã’×E‚RæÝlµ)»¢ªWôiˆÐŠb†EÛñmЧ–@hY±ìU$4è ®OßNiI6÷МC»gÇ<ï%Y8®¶I˜±E$ÅZÊ49/.óØ¹ª{)Á0…X.ò<…É5õÐGWèéÀs"8ì@÷ÂV/ˆ¾'2VIg±ÖwnM#¶xJeO^¬‡]xéWŽkDøã³…Üš‡t‰s ×½÷öœ))qJ§Õ„CÀàSûPï}(â¾eʾ®Úzû¯¡²R°8?¦2„êÖ?‘ﻹÝᣓïL3áÔqرûìÿÛ#ÐX§L½øi¬%K|JF°–û4¶7E­x¢¾‹>/×°ñÔÀÖzJa¸ÏíqH¿Âä)ðF‹‡£g³,\ƒ6éÌüyežkÇŒoìˆ"ñã’=F>‚YáF2+ì7Hac˜õ~´±ƒ_'‹M endstream endobj 198 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/home/biocbuild/bbs-3.20-bioc/tmpdir/RtmpkSJXss/Rbuild3d52d121381e66/DRIMSeq/vignettes/figure/DSdmDSdata_plot-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 208 0 R /BBox [0 0 494 494] /Resources << /XObject << /Im1 209 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream xÚ+ä2T0BC]SJÎåÒ÷Ì5TpÉç äTßê endstream endobj 209 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DSdmDSdata_plot-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 210 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 211 0 R /F3 212 0 R >> /ExtGState << >> /ColorSpace << /sRGB 213 0 R >> >> /Length 1104 /Filter /FlateDecode >> stream xœ¥WKo7 ¾Ï¯ÐÑ>„I=¯š õ=9¤îº€Ñuo¢ÿ¾ÔŒFÝÕ&F»œñ#)‰Du«P=ª/ÓÏùy»ÿåÇu¿Ÿ´Öª÷÷O~ww¾{÷!½õêßéã'¥Õïª[y'Ô¢ ~šæŸy°Ú4?ÏÛIݬ(oÀ¢2´Q†DAF@=õ«zúš‰çæOê¡RЉT;& ,W ú€ÂòqD ΫÝdbK«üçt—=x® Y® Œ‚® Y® †‚« YN h†»"z¸(@Ñ…U¬ lµyª¯4ó°ÈNn쨄»8f³SWúZm§6ó—ÏOe³ü×Éoi.K#pétrœN¡4Ý}Çtvóž¦Ç‹¦Ë™ŠDÙþrë§éHÍü¾'›;–¯Çø¨c‘3}Mâ]W©ÏuóŒ–Ò¼«Ô+^*ó®P¯x)Ì»:½â¥.ïÊô„k†½Ê¹Ú§tïºN -ý3ÜumåŸñ®h ÿŒw}@KñÕ›$Dé”gŽ.Ý$(ƒÓu.]’¤rS¤$(“Í%D¬&ÝLvGéýí'‹Îß^ÇÅiœ×ë‡Å 頢Щĕå?^}xÙý¶}V=¨‡kéˆÔÕöó?/ÏÛ½ú[Þþq­ÞÌïž¶×ŸÔæ¶5óSšõß4fÉ_#®’ÃbÌûçí——íÓýbÉGk~ïój·å*½Š\³©hP:®ÆA{õVI}kèÀ‘cÓÿ”µk endstream endobj 215 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 220 0 obj << /Length 3328 /Filter /FlateDecode >> stream xÚíkÛÆñûý !n`m¸O’AóÁ©›Äm]8îýäK”‡ϗýíÇ’¢xòõd‹')wg_3³³óZò¡¬œƒßêz¯Ê¿¯¿9 fÐ0ûæì«‹³Ï¿vr‹Ø)7»¸šÙ@D‘š…F ›ÙE6û~þ¼¸º:—Á<¯ò²)’ÕùB…Ѽ©’²N«bÛp½­ìt}¾À® KÊìá¿»ø{7 Öv~[ç5CŠ’Ÿ¯ÿñlQç?qå¦h–~ö¥Ÿâùë/ÿÙµo“ô\ó7{+ýxñ׳àá|±Áêî—zŽGõüËÅÙOgP‡?Ù±ÛÆV©géú áFY!ãp& ˜D³*Ÿ]}w6§pŠž6P³á/õ_{ù Ý,1B@þb- ”\äD”“ü=9_¸@Íÿ¼ÌÓ7\¼Y& —ŠšŸ$XXe±FÅJÙ®/óŠË›+~VùvU¤I“û‘Û®Cº)³¢)6åÑB…TŽáW*Ë=Ç@è gM h f )¡f™Ì&¹\/ í üØ`2Ú`þ:YoWÀÖ‰IÈàG»7l¥?žìSbz]mÚí‡`::(i wZûõ‘Ëߓ–*0ó¿=_?nnüS‚$f'âÆŸZ![]¬ÐBSŸ›§®Ðé^°f¡šI 9äÝø7#Û´ƒ£Æ }1SöN>dÌu^’–œÉXHc2$·­¦¦ýËãÅD:/ ,,&#ànpJùx4ÑpJ(}€lî ¹Ê“¦­X:´&'ã÷"úW*à©‡ÂÆû¦i„¶,,î={èÞ¯þÇßĶËà·¡Bö!»öž#þÿ½>‡ 'ŒŽÍLôOÄcÈhAÝ"thn¸‰­xÆ…"­… ¬PÆÎÚŠ8öŠ@ÂëÍ“¬ û$µÖóWUž5’”‡Èë"Òs9ßÅ–~™Ï¿Öá ÷b”tÁ§…èQ|‘åÉju{8Œ èù͹ )c[,GóM»Ê¸º*Þ › ?¯s̹Änž¤) ÑVú2`‹Ã¸BgÆ•bc¬^mpÂÊ·½Í«ÛnÎ2ïðYé’¡…µ¥Aˆf=Ùé¡0âf™Ã¢ÆÅ”ï¹ý¹(¯¹ZCøñ» ƒy–4‰æMÍ¥KX˜š&m3dD‚tà<8“nÖ9Š1KSÏ >*¹‚é„!În瓬{ÚÎëâg*™y–§UžÔy ,QóÀÂãe ÚC…ˆ£PYQå¦k-Å”Ôuž1ˆìšŸMjRΟÕÜ””þ í>”IS¼Í= $ÑÔK`šÔu»ÎíFCsb¾Ž$§T‚HÔ [&o=зJä‰ö)ˆm— фžL…Ûb«ž{°kš¬ÒvE{F¸"vyMòl¤Ed!c…ìq€M‹gÂì–Á2öz·õÒåÛ›% 5ÌDÇ ^ü@8‚\«›jƒBŒÝ0Û„0Ú%¨ç·¨hÍü冄#ËQ3î´ÏÀ¤!2gåGS%Y¾ØühÕÉyCbEºÏvÅ=\ÜxdhÚ#{fifÖnyDÓEó Ú˜z= NVYY×p¸šƒBvUmÖ¨"4 x—ÇâzÙ ó3n#5,^Ë{£®µ×7Êë?™FR.qi¯Ì4ïA¬v}K?OQfÅÛ"CHí{®‘ZÎÿÅÂr€° UË:'¦‚`©ÁR²e¦nDZÃdµGm;µ‡U¯ö¨èÕ •ñ蓪Á+D‚ƒB=.ƒÌÇ3\Å×½ø‚þlò- @:9wy›¬ZR÷P^Ÿ£hÁ–Üò ¬Ç»£—}ìÍ¿ÎY¸ã¡âbæÃ\|bV~e`¬°îºŒí€p{ðw(½Òîä݉ç/Jndm…,¿JÚUÃ`W¬Fí"c¯zŒXúAk.%^cPÞ¶,îØTf=˜Í—C6ƒD¤«eˆ2è!È>M¢Xðµ Vh?:8?™"(\WE7ž\a§ ?»3éG Õ}Æ=Å}ŒºEÓrû¡-¨—U[¾nŽÖ&‘î䙇¢Î€b‚³à4ÖǚłYbÍâzªœ§ ý Ð%LŒ%þac–ly+ Âš„–Zv9spË;ÍJ± mâÞ#½ÛÒ9°j¶ÿŽ>ÆW7ü4 ~š b^dww#ÁAD§ŽÜÅÁ½Í‘¨ñÍÜð¶×sÆÁFÅþ°÷Ùö!DÁ"à/?!*¢Ð!MqBt(,cBbà›š„X0Œ÷ Y{Û÷‘¤X'±G ,k»OËó¢ÞÞ°àQ Ͼ•oË”0Ú©¢»Nû°8Îêa€‰È¼ìg×ùëûÐS1ˆCÔuÿþ#ð€áfo%üÈÖwÑå¯&ø«[tˆB¶@䞣ݱì/jã†JÚ„^mx猅û*“†;§ÚÛÚdðGí]×*͈›ö.ü‚8šŸ> ?Ôô±êw†n¦ÃXÈÝÕ¶ÕBB>’àÁî® ëH‰¶—–—Æ-ððÈ낺½wáúȪ1 ´0Öœ‚Ç"·¯)‘Üñæ™iöÆèÔÏho¾<±ü$yl`t‡ÇÒˆ\Ãi˜ Kj7b2¨ýû”$åØãNIRtxƤ޴ …V#_+¼YcÞBÛ|ëÌäšA~ôñ¤² %/ÎB0EÎ-HÚNùAá*I›Ä£¢9&¬:Õq‚¡Ÿ7ì¼k(mJÆ+b? ÉáXúŽ×íýavów®4Ghè7üìrbzНn dÕ\k-;ÏŸ¨hš¤Ü¡±ewÚ¯CÁ ÎY¬s`¨Sf~qü9yY·¶XÝ3°CÇ6kæÖÎϧ&Š}ÎŽcü6-.W”à³q70—ê¥ÏÈÀhŒ ómÊn%îÃ"âûçyöK١λÕF eÂþ«ˆÄ~šcè\m0éìmJÞdšä]ªý}n¼ØÛ`Œû¢è &+½|C¡Gç² Ý¶h-…ŠÕ½1Äi˜,CK·$àc‚Õò<ÊÖoQdd„·qLÊ„z—tJîÑòª:A!ãHDÁ£îK ÓÚѾ¤'ˆîTG6¼³/àä+9‘Ó‚K:5Ú´=9ÅZ §ûè£ ŠHcò#¡dJŸ¸1¤´ÉÅ”‰ö‰CÚd[|ÊÝ[¼ahg±¥çÎé»4Ÿ“äܤa³÷3yv0‘èm ô †‹º¬zo‡Ä&kò 3K°Ma(´ÝRV1lIæ†í̈ÈŒ°.®ý€@U¼c8¿üKûE®ZΟœ«_#_²”œó3àª@åÃ> -7çÍ.ª%ùzÃ`ïm@ ¢U7wó È.ëµÙú\2Yvf4vÎgÚu4ÿñ¨ô3x’ Ô§ß}½¨‘Ö±Ðç¡/qÍ[ÞmŸ6öæcÝ®èîdÖ d6Š„%×;ƒ:ð†¯ˆƒò°²ï„¶ÇÑ…^En}ÿ½0<!Þ »öc6kNÁûq9kN^‹6]þ›dë|oGèsÞ{÷wô¯ïú´øB‚åä(4¿àÔ<„˘ï]]‚lÚÊÇÞ…¥1v/Jhw}¸žÔñ5˜â?l &w5‡mÙÒi0ñîêûU9ù|0Ö§ôMØûh¾?NUdü^àx£Û­þ/eì‘¡&ž;%—G0*¢GhT&6Ž}–åÕ ì#ȈUò1IaÖ=J^=;%Ò±¾CÉ”n ,©Ú§åõ³—' ÆJŽIчÊ_6¦—ÖÀæ©1fæM¤µ" ðøËSp8Çð“ä±SJÜÕ.Sß'b²ÓKŒÕK±IOM`Nòq%,©Âѱ|•T§ˆ&œÐÑ£jKXÑé}R’Õ)‚ kÜÝ–@Ò‹ˆEN¨`´/«|õÅ/ÛUS¤›*‡]JÖ .ð˰HõÑEç kô»ô€¦˜Â_ÃlJïAñ;cäÀsJªŸèGq‘ÖÙ;ßÄY°spt~ßÄ)|à }¬Žd“¾ë‚&zÅ–ƒ¦©Þ}Ï'm®‹Gz‰¢ˆpýBAϯæëõb211—?ðã½C½ýgê÷ é÷Éß§¨éÓ{£û8ÙyÌ&'ýSÖ¤¿FÙˆG:ýÓR„Ù5úôÙúóGi¾møÒ¬—ýÑW“n_acO§èi”4óà¾O1Õ1õ1ͨ³¼¯³½·óˆ@wÌÌá18'MS!ãŸ~–Ô(YŸ dzº/Fÿ Á@x"AXÖ«è­qt¤Ä‚»ó_y1¶% endstream endobj 225 0 obj << /Length 1886 /Filter /FlateDecode >> stream xÚÕ]“ã4ò}~EXîÁ¹[kõm›‚`YØ+ `™{ŠÒ8šÄ·±µ]æß_·$'±'3å „ 3U‰Ôênõ·Zv(áŠÍèÁg³Lý盯¯è f__}q}õâ•f³ŒdšëÙõíLQ’¦|–HFd&g׋ÙÏÑËâövÎhd…YÏcž¤QטªÍ›bÓùù¶5ˆ´œÇˆêa¦ZLGþñúÛž ö`*ºkmë!Eå¿ß|ÿyÜÚw~ò¡èVû*°xùæõw?õë“Ï9ÞvúõúßWtºH&qºÿt˜càI˜_]_½»‚9ü³ÞÜZ ’ŠY^^!XrEX–Ì”$)2²³Û«O’eª~Þÿàn’)ÊÑÿ™ F:Õ$QÁÿ<5åÑÏìW? þ‹¡5AÞ˜1 WCdÓuÍ/TÑçÏòº÷·]û æO¢ùDz©·›Ç(w¢yJÒ5Öt%„ë³àñ?ßv}]^4qž‘D¤ãp’4%ŒÉsÆÓy014?æØGs¢D3X óuí¿KóÖú‘«". ¡þܵEëgÝ4õb›7ëÓËGš¤0•"ƒOÆ•Çs”…£(omGZk'o?öÀ¼;]=¦ƒ^¯Þèù3.Î,>;™ÿÔÀEÕ5èK³Î·kÓ…(Ú46/Ú¢®Î¦öãAsr´¸"‚«îß™Õ)òi|¶°;,ÊÎn¬â‹çgÜÁ+cÛbY{—Ïæ£ÍfL'D16c`híCà7· I’jˆ=üv»^?%aîEÈ(1b–pÂá¨É„æÇGЂq*£ÿ´Eµ •ÖµÛ(q~\߆ƒ0?XÚʆRÜ…šmÛ®(w‰–×e 3Jº°åÎ:Y™ šº'&Ó)® Ü*%Rñ`¤v¯›÷4œïœ‹)싪èþ4SÄœK8GÅd‹Ð¡½·WMQ½5Ëà¾[“wuóD!ÿ¯˜Gê/Ú…?±þž£X<½Ÿ‡p«oþkóQâåkÓ‡-Ê—? ޱ‡Ž>Ã×÷²Ö]qÿ›r³†Åãü\€Cø«Ye~៞•ðÙº0]ˆ)“ç¶më¦ý¤ÏÅmÕµXð±Î=lÜC˘ 0OBïµb)Õ¡ºðÀ¡–Öx ÁMŽ&rJnÚßÁ¶-šv$çA!ÉI8;©Œ˜¡#>­õ†¥ØÓ$OâwÆpžÜ.Ä\ ¢õ0¨WÖ\`g<¹::ÉÎIÆ¡sö~ɇÒù..H/ïjpIb™T ¬’3éÒÔ9[CÅ&µE(«»øÂ]XN*=¾2ª oãÇ‹{èÃ^}±¬(üq%^‚/¡Ös6Ճ¨‡Äü˜SA³ 0 ‘0ùع"¨¹Ê¡zj–eœdT\BU²å›§ ¡ž’Ñ›¿ìt1éÂõ^> žçùN˜© ôóßýÜtÓËÎ_©­p»¦TÞo§ÿhõxAq¢er²`nfR$Ó 8h” "ÒTkúX >VÁ5TþÖ>5O)ànë„Ê.øc‡‡<ÜZð$í©Y¤N”GöV‡Ô’ò,é©¡ÏJ¡ ~ôèÑý³ÔV’¥£@N3šñ³¿Zxñ \º7G±ÿ…ËO¨•×óTD5F ‡{~»™Ç<Üu!îi6n<|eÞõF ‚…»îáòÆÁv!pÉÎYw7uE CÓÙ.Rªè‘ë­GËMX¬ëý¦¥_4K2eq­Š[ßeÌÈüЙx\wBæq&“è{/xiÖë;ð¥î… ¢ÌsÆÁ¢ø… a”=¼¤DðþQ>ÎnLkžAìÞ(:&pŸ|ŽnÆGRùʽvH³2G/­‹¢·}l¨h´1NdSÚ΢ŕgÔáþ¸îñ‚8¸‹ÍïE '™Ž¾EÐä)#xêÆ‚•´’×· ;Œ|  ¶¨òÀ 8z…¾QÑË¢)òÕÚvq¹]wEU—Ί¸TÖN¿… ónåá:òßjÏõÁ ˆÕ«hÝÊt~½'X g‡îÄuÿ@hÀ>h΢ר©Œ‰ï-ïã£3Qáâ÷[„[0̤ „–>‘px^.7²~0¶!‚¼N˜ ½Nu‚9®ïÁñêz ðq†àš€ÙX ~XañǪÐ`ÔôHÆ!î'¾Ú¼±Æýr§h½M>»¨ã& :#8äÛ¾@ã$> stream xÚÍYYÛ6~ß_¡·Êḧ‡$ hä@жh·.úÐ…bÓ^5¶äHr·é¯ï7<IÙëì: X‘Ã!çätÂDÊ£dð¿ÝŒ¦îÿå‹‹$ÂBôââÉââáóŒG+2‘E‹u”&LkåŠ3U¨h±Š~‹ŸVëõŒ'±iMÝWåv6¹Žû¶¬»e[í{7?t%!mfsBu°²^Ýù§Åwahð4~Û™ÎAªÚ}/x<ïÌ7¹®ú+ú•?âéåËïëûr9IüzDéÅ·ÉíõtÌg‹ ÌðÇ#.SV¥gLÈ"Zî.Þ\0•ð,·ƒ¡] û<àáˈž6?á/X4 ÌÃÙóÁáÖÜ2˜» !"¥5“IæÌýx KÆÍÚ}­z¥Îâý¶éûªÞ8ðúP/ûª©;?m›©÷áóT(p¥˜ÎIçKÞBqÄ ð”>âÁx¯Ëy€³ ·¦?´µ£SÞ@$ÏYž÷n6Äè $d²\´æÕ_fÙ»C¯¯ªå•.KOèÜH;—‰æ¢‰¢€^9+ÒÔ°>´ÐM ¼4wÅ_U¿'R™•:R—sº¤P\ÂÒ$%9Yž%Ћu“›—à,9 áXLáN÷æŸ ¬X.øD§l6W¼ˆŸÏÀmCÿ¬ôŸr·ß’ÊE.üJéª ­fTÕËvÆcSvÇ#çqWýëAä<Ù[­4UÝwìäÛµDÃÿs < ·ïÝ=òÁN‰ ßœnÁ•H/òHánè,jM´¦ v3Ÿ3¼@$rq¦påÆEê0§ÀËüëáЈƒhj¦p¬Ól«WmÙ¾=[à‰ß“4ñÎŒ!?©d|}AóTZÖqhÕþYöçY"âoæ's}[3y ¤ž[³¬:„Üs[cõiìÝ»¾>·6Æe¹Hå ÁÛÜf¥øÓYð|ßSì;·ÁÎy¾éç;ߪõÑévã™7Ž3”³ÛøŽ€:³øsÛV­ 42äôjUN«Õã÷£Š£÷kÝk.»‘ øbÐÛðù=Õîv¦L05*¡îÆÜK)ãÛfß nRIL52ÕTylº¾Ú•ý1€ß\´)ÁÀïœk–>†¼¤’4ËPgUu½ÙSqœ«øzfËT 6(Ë€ÁAt‡aÙ›°ÑÖ[ÝcdëÕ<^?oͦ5Í.v¾tõ¬A9›-+t~§Gõmߥ•ÃÜÛ"²ñ•ž„¾«¶¤Á¶zm9ÝV6YN³ñUã÷[®:ªRUÿ„ƒN(/ ]¹ó£•éªMíÆPq[ýãPËÎÁ*¿æ·*Ïtȧvm`w:tÌŽ¬¢L’Ò±úä­“heÖåaÛ?8Þý¤ÐÑôëoÖMK!ˆhü ¡` ŸÖ¯%j‚,J=V¦Cý*œÉzj¨\?†±÷«C¢&“ß m”WES»‰+&ÓÂæÃìò¡‡_—¡˜¼‹ä9JöDO%g™ºáOåmÀ˜Æ1‰œ0†(£ÏeTˆ#«<º k0-¿H k–É©†yÎĹT¬]âªxqù˳Eq!àùÇ·†ð¾@q× ¶QÚæ²w£ë+S›¿©×vpj°C˜ñ±ÍEeŠ[ˆÔ>ÜÖ«pRCß4Þ!"UèãÝ»GPÓ¸ñi›¶Ë¤ðÁ¼ª7Üy­XøŠn¶ÙüRΕß~å Ý•òËCï åvã@UµóÛ*›ixbRòØŸ† ¾ò´‚Rµá¨ëbÛGLƲæAV¬XY±¸½!•PmG§y\Ñ£Æù+Dö"£Ç‰^ªx¾ÅCЄ xÈS™LãÅLË8>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream xÚ+ä2T0BC]SJÎåÒ÷Ì5TpÉç äTßê endstream endobj 236 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DSdmPrecision_plot1-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 237 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text/ImageC] /Font << /F2 238 0 R /F3 239 0 R >> /ExtGState << /GS1 240 0 R /GS2 241 0 R /GS257 242 0 R /GS258 243 0 R >> /XObject << /Im0 244 0 R >> /ColorSpace << /sRGB 245 0 R >> >> /Length 2824 /Filter /FlateDecode >> stream xœ­ZÉŽ\·Ý×Wp)-Lq|äÛÊI„‰§ÈÂð©´ .)VÇH>?çN$«T±Ôr!p)çN¼Ãá%Ùѽvѽu¿¾Õÿ^<þíÕKw|Ôi xäÚ}^šP< Jn¾.M(&ƒ­ûµNßvVÇÒ|Ÿú‡AJͧi0à0ÈaóÛ4pô͇ÅÀà0([]sp&y6“ä“{ð}ùbK§oÁDztºà¥ÓóN­ÌN¼tzì~[ZP¼ìÍï˰)æ„C÷qéUƒó‹z£I2 Înß6¿/Ýnpö*fs^zÕàìÕ„y¾ôªÁaðâÕ]ªÍýøH“?g^ŒAyy¿º‹×µ²4ílu;—sô…:&ûDm.’BÙåœ|®@ÕÇ(û’ Ùºø¦¾úܧ¯"Ž-Ö*I>nÓ7úÔglFb­m«^óRß5ïãáåYßôÐñÝikø-èËó¾¹ÔRß8pM&ŽHX e㞌ta„ùš01 –k)~ß Ù‹$O=þðUı͚%è}úžS›ÑQ3á¶U¯y©ïš÷eOÔmÇWæ^ðÛÀŒç=q©ÕžÈ˜˜—†øÚ&Ùhˆˆª"¤5ž¿¹G+âl±.1ýL_ÑùâØòm*)4ÊÓ!ÌØŒ$¶¶­zÍK}×¼©'œ‹ ®ˆÞ) ßÄß2$;õ¡Ô‚5FÔ;Ѹ¢#[ï>æ¡ßy1_C›­MÒhVš/­ómÄtÔL¨mÓk^ê»æ}‹ùsoåe]é*Ù)iB{fÔ;¯=P¾"Y˜g}ê3ÏQóUı͚%›ïuúVúà›ÑQ3á¶U¯y©ïš÷eO¤x®`ž ç÷Ä¥V{b‹”[Ʀ¾ïÒ")Û[òX„ö„/I†8Û­ãÐWßÛôe¤±ÅZ%¼úÂ‚×ØŠÄšÛzÍT}×¼o±Ò3(„X4"ÚÓ*©ÄbT'YX 3bhAœ-ÈŽÜô;³»ù*âØb­’Ì{±ù&ZK#6#±Ö¶U¯y©ïš÷MVǾ1¡¤H=}Z%I¬1Å }L,YEœ-…èM$%¦>ñˆc3‹™$È`‹oÜm°)¶ ‰-m›^óRß5ïËžh‘Æ;'ûÚ¶‹ž¸ÔjO`÷Ȩ˜Šö„IÀ¹è ”'®è{ôÈ U…"ΆreèQ‚µé«ˆc‹µJ¢ÏeúÚËFì`»æh[õš—ú®y û'ì蹄Üd~I÷ „C» X €8ÑnS Ùz§q2=v*9ækˆc³µI6ªä‡/Џ0c3’ØÚ¶ê5/õ]ó¾çE @Gn SÌÏÓ*a‹®F%6è¥7ˆÔ«ˆ÷*ñž¦gŽ0}[ &I; §ù&f1‹-H¬¥mÓK^æ»æýÑJo´–#³Z\¬ô ­V7‚áCUY…ý‡$ù6B•BeI•[¨2¦Œdíbl¶©otH¾Š8¶X«„O˜æ‹Â£d±‰µ´mzÍK}×¼oÂy(É0| [RPö7I¥Â… 8 6dhž`ˆW#½T¿¨žÎsuøâØlmpbŸ¾‰Êœ›‘ÄÖ¶U¯y©ïš÷-öÁü8upéi€\»k‘~Ñ{ÄË-!†Ê•(ÆÊ´\ ›Ÿ‚jÅ« •¸æb¬#*6Õ6E«Ùˆßšëm¶¾Ì¤‹m×# IºT'…)“²ËI¯UCGÝ(1TC߈φ¯"Žm›K6Zó÷Ò*±‰µ¶­zÍK}×¼/{âéÇc,¿Æ´w.9N«$S½QSvܹì()]/߯”oúÎÛùÎD*ñ‡/†¦ÌØŒ$¶¶­zÍK}×¼oR&t*fgl>h‰l’î#U^¶æùÚ+ W+²‚¾oC}¢•ákˆcõÊ% ’4}+1çˆÍˆ­­mÕk^â{–÷-æV0Xû¦$©’Ä%:ÕÎhW’Ü ía©™žÂ¤ák(ŒRO%MYêÛ䥱 ’ܧ^òRß³¼oRBàø‘èK#-àÓ*I´#q5(½g*ZâÆ73Šx›'þJS_} ÓWQ´òhH@wiøâÛ0Q,¶ ±–¶M¯y©ïš÷MVJ7,´kÚÓ"(Äâ™J½æˆ 1=© , ¤„ t:Rm‰tpR?ULEÀ­ùEºß¶¨ dI›ª•lÄoÍõ6$™øj^.çN«$óÍ—s¡äKã'EBd•¾Ò ìðU”&¥ª$ò¥¹ù¾ù²ØaPªµ­zÍK}×¼orR |Û“ADãô¬¾ë"D+1ò=X¦ë‚jHN¸™YÀô™Â|ÕyzV ßu _¾±Ç=Ùh[õš—ú®yßbA$ìÁt¿ƒsR3£J¸©ÎˆŽ®!;î4Šø,„]-Æ¡¢#·ú ÒØf½ËÉkÏæK(ŒØŠŽš U½f*¾gyË™Q·Ÿ\Õ"§U’¹V‘ÍŠ›ï²H(Èn¾¨V1=Ÿm†¯"Žm÷ç,‰\ç˜/ßøØŒ–rè5/õ]ó¾ÅI‰r­Bø&Aûôê ÃÚ/z ʆdœŠ›U_‰‚†¯ ‰-Ö*é4ÿÍ—^Åêˆ-H¬¥mÓk¦ê»æm£ùŒIUwï,)ôFD}])`˜ÂQZ&C6Nt¢5}%§á«(Û½Á$ácõÔĈmcm«^óRß5oUµÉÌ“ŸíÝÍæ<ü̇P}+|‹xrö&øgçî–Ø‰£Îßë¯Ã¿ýV{7^¥ŸòßË{™¸oÅàœ@ϼó—g🰽»û7Žª?}›æÁ©Òá±ñôþäžAõÜÝ¿=üñž[ùgº›Šw}ªwÂXci’w|zÛ9&:çŠ÷“Û¦‡²$™§Ùöø;éå5ýÓC~ùš^vš¢ö¬»>òòk&kÇ«îÙ#ïÔGݳ7Þ©oºgO¼‹ÞžtÏ^xIÿ¹î&]aïÅ‰ŠšÓùkòúzlúõ1y}> stream xœ‡7ÔqðÆãU¼”‘-‰D!3޳׹éÜÞ£¢=T*{¦DCY‰ì.tö>ÎæîÜô7ôýù¼?Æ×Àùêž:Œ§Šà)£xŠžÁ•#¹;h® Ë•â¸R'´–B[¾à›¿â›À2ü²øÆòø† h}e|Ý7Üw° W[…«©ÆV×@«j±ßj±•ß1•u˜Š:Ly=¦¬]Ö€þÚ€þÒˆ.mD•þ@}nB}jB}l‘Z%-ÈâV0î}[\Q[Ü»Ÿ âm;¢°ñæ[Ð›ß›× ÆäþŽÉÙ›ÝÕÙ Íè‰Jï‰Jë…¦öF¾î‹|öG¾ìH€¾ˆxþ'ü(O„?„=ù }<öh0|8ú`(äþ0ôÞpÈÝÁw@ap’08QOßß º9 åñƹ{9ã068cMÀ˜ŒI(}ÒŸ6¥NùS¦o÷’füˆ3~pÖ7aÖõ‰ŸóÁÍù`ç¼±óÞ˜yo4¸à…ZðB.xʼnvL}ô¨ZWW£££9rXsèF[[£¥µ{ðàîý»ûöý „½Ô endstream endobj 247 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 228 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/home/biocbuild/bbs-3.20-bioc/tmpdir/RtmpkSJXss/Rbuild3d52d121381e66/DRIMSeq/vignettes/figure/DSdmPrecision_plot2-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 248 0 R /BBox [0 0 494 489] /Resources << /XObject << /Im1 249 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream xÚ+ä2T0BC]SJÎåÒ÷Ì5TpÉç äTßê endstream endobj 249 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DSdmPrecision_plot2-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 250 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text/ImageC] /Font << /F2 251 0 R /F3 252 0 R >> /ExtGState << /GS1 253 0 R /GS2 254 0 R /GS257 255 0 R /GS258 256 0 R >> /XObject << /Im0 257 0 R >> /ColorSpace << /sRGB 258 0 R >> >> /Length 4490 /Filter /FlateDecode >> stream xœ­[M¯%·qÝ¿_ÑKiῺٽ•íÎ à…á…ó22,øJ±&FòóSuêT‘}çéIO¾æ>*²šÅ"«;/_/yùvùûÓïùï‹ÿñÕ—Ëóǧ¼¦”–ù÷ãówTÿúÝ êw¿þJûò¿OüÓ’–ÿzÊË×òïÛ§œ¤ÀòïOøƒŸ-µéÏž–/Ý‚e+kéKÛÖÔ–ÖöµlKKÛÚ7)·üaùî§L|ÿ´|3!­g)Ëü«Ö­ŽGHw`•ç"¥òr{jç±nÅñßžÞyó\û10< ”~®iˆGºkš Zíë65A¬öcm™=p ”Ö~B[_¡JékFšöuŽǾ¦©€Ã(Ðöm¶1à0ò2“ì‘´Óœ:}OknS§ž:½žÚÊètÃS§çcݧˆ§g_Ïi؈ap:Ö<õªÃñDG×IŽnß÷õœºÝáèU™ÍuêU‡£W‹Ìó©WF/¾zW¶¾üå£NþZ±±¼¿z—_ÖÚÒÚ.«{YjÍkÓŽ©kÑ6'ISëj-kÝmk>ÕµUGÏ(ÝÖ- ý¶Öcp‰P·•¦¤¬yܼ–cÔ d¥Ù6õ´‹ÜÙîç§//}s¤Cž»ì]~›ôåµoîµÚ7‹øšª>¢Èbh;z"$2Ò Hæk‘‰Ñd¹¶¶ž»£g”–ER‡£\"Ôí¥!‘9·aNyÝ@Ï´mSO»Èí¾ï‰m?å)ëÑä·‹g¼öĽ–=Qebʸt©Ÿ=á’]‡H]U–éó·꣉`­¬K™~®oIÝs¡n{6JšŽrpe2¤Q7ÕͶ©§]äÎvkO,Kו¥wš¸ß‚g É©½§è×"kL]Ðq¨'zFésÍ5ô'öç:BÝ(í’®³Ò¹ºÎ÷¨ÛÐ3-Ѷ]O»Èí~Äü®5Ù³‰Ë«\锜j´¢³Öž¸|"[2ÏŽ¡¯˜£Î%BÝ^’}=¶ÁÝô£n gZ‚¶©§]äÎvß÷DÙÕÏ5™gæó®=q¯eOìYm«²©Ÿ§õ„IZ’mK{YeI(:› y’âÖîM‰¡ßÖ£.ë¶Ò”ºàÉU$ žuYi´zZJîl÷#Vz¢^´4u´·Y²©ÓÈ@=p±…%ÎL=´!X+ÎN=¸ëOxwç¡n+MIÅ^ìÜ¢k)ê²Òl›zÚEîl÷CVǹᔬ=}›%ŬÃÅHûLY²D°VEÝ›IZJp}Æ „ºáÅ\’l°›Ol­ÛÕmm»žv‘;Û}ß=ëx×¢c¿õý®'îµì Ù}T‰˜{Â%âs¥'$<Ù¥áMú^zBœ—DD°V˜„+¡—¬.ê¶Ò”äµ¶ÁMº—EÝÉwÍh›zÚEîl·yÿ";‚ô\‘Üm~‡äX»8ÝMÄKÉH\t·iŽžQúÔqr½ìTä8×êFi—ìÉW‚¸4겺Ù6õ´‹ÜÙîGø¼,pˆmâLe~Þf ¼X–áêb‹û‘Ð[±¸^"ìUâŒÏ2ôræHƒK”|5¸¤œ:œÎ-ðb^·!+mm»Þìrîl÷'+½ëZÎðjE<ÁÝJ¿Ó2ºIâBdø$ªÜÌû‡¤¬»nM#ÿ"‘¥Fni³1²µ+c³}×CJp‰P·•¦'LçJ` £äu²ÒÖ¶ëi¹³Ýñy’ÉðÙ’½¿K6 \4€“ÁÖƒLÒM†'9Âj”C¯Æ/Ôëyn ®#ÔÒ.Ÿx nÑ0'겺Ù6õ´‹ÜÙîGìƒ=­{‚éâKo“@œë±ô¬¿Ò{ê—{‘:¨¥‰ÊX¹ºó6^]Ð4Äuž8Æ-j@Q¶iZZc¼ÙÖÇl}NW´€.9,:ipÑ2);éõÍÑ37JªÐwõgÁ%Bݾ™A²ëš<ê²Òl›zÚEîl÷}O¼ýx,˯Ãíæ!Çm–T7Z‡ËÎ'ÂŽÖáÒ‰°|;\¾ëlÎuNH²†øÁ•¡i£n «›mSO»Èí~H`X¤Sevæ¾&†È.9Ö¬‘ס[sɸöªæ«‰< ?öÐË>Ñ[p¡îg^9@"ޤ 3êBio›zÚe܋ݘêˆô°"ƒuît’”„èê¨N “NrwänO–šëµš\G)B=Jº²ÈívÈb݆ÂIžCov‘{±û!!„?Š>iÖ|›%E×cV_-.ý¨´ä73DØæÕ•¡ßÖ’—({xqw%¸òl2Q¼nCVÚÚv=í"w¶û!«CB7Yh;bÚÛ$hêÅ«†z}Q-ÓS£ÀF`!lÒÓµ-ëÁ‰<ÔjEM€€ÖyYï·½V[AÖ&µfñf[ã$ ®æírî6K*n¾éy¹65¾u¤ˆÌ‘mz7úMo`ƒKT†K¥$ãÒܹ 7_^w —êmSO»Èí~ÈI)á¶§Š#ŠÓ3%¸ëR¤+1ã¬êuÁæÈN¸^Àõ¹DÛ8=S‚»®àâ,êŽ{²h›zÚEîl÷#D‘=Xïw䜔ìÌH š:€ôèš’yÇSG‚g!ÙÕr½ =r“kˆu{éÓN^gu®¢u=ÓTJ=-5îÅn;3rû©­h,r›%±ŠmV8n&Üe©Ðß|i¬âzœm‚K„ºýþ’Œ8ǹ¸ñº¦2ô´‹ÜÙîGœ”pÔ°ƒìfß%Ò¾þ‘xCŽáEÚo<UG6NÍŽÍÔoê‚‚kÈê¶Ò”:ÿ«Y±-ê6d¥­m×ÓRrg»}T3ΘuçÈs@Ò4G¤}-»R.¡eqäã¤'Z×oJ .Qõ{ƒóÇäfm"êξ1FÛÔÓ.rg»}TmÔ†gþÙónKƒÏ“Ÿ‘e¬áñ¶xÌðß–…ù¥ãÕ½¡¼1¿$ÁN#¿ä’MSª˜µNÇ>r@@Þ“gzÜ¡—hÊ/Q’líWŽ"{‰º Ez„Þí2îÅîXMǫǬòz~)éž}É/Q‚ð­É•-°ä¬.És@†,OÒu:‡þÄw.Ñ”_¢Ä.¯É•mB/¶=¿”ýPæm»žv‘;Û}ß?²[”×óK8ú^òK”t½hyO\#ä#êÅvÆ»ghÊ/QR&wnÒ;¼¨ÈòKl›zÚe܋ݞ_¬ºä—L²Ág9¹ê™_ÖžÞ”y~©x.AÏsÛz½FêÁ%šóK”lšÉ•½e?G~ ÈòKÖ¶ëi©q/v?b~ëÑ«—ü%{²Ëú[ÂÒm‹¡È$oC¿Ûõˆq‰æü%–P&w«ÈCx~©Fž‚mSï–÷b÷}OüÈA©¼š_ÚN=pÌù%“´d>]ÂôÚqÙ·ç‘_j±{ìXj¡?좑\ K~‰’®WE䪇ÔÛwÏ/mq;om»Þ-5îÅîG¬ôš°p.ù%Jv:òˆúGo~ûÈ‘L¸%t}.vÛ`\G#¿ä’Œ%Nn>u»õº YÝÖ¶ëi¹³ÝYzYÕ®ù%Jú^Db½&Ϧ£ìù¥Ýxš1R÷f êúŒhÊ/™Dž­öàÊ9£œ#¿d—lÖ¶ëÍ.ã^í¾ï‰95•×óKEïf.ù%J°-iଷD²õà9 ;ŸðÙÔkò§×ÑÈ/Q"$ÍÛ‘Ë4ë6du[Û®7»œ;Ûíù%„e—ü$zvÑ«}OL'¼¿„K="Ïi C½îT{p ]òK”l8ðWCc}uÄóKÕ3Él;ô´Ô¸»áó²ôs)×ü%Uû+›ëU£Ú9òK›ßud}?î ½¹}ç:ù%J v/çÊÚÐ;SÏ/ízÛ®7»œ;ÛýÉJùÔT^;5éjÓ»ü9¿DIÓ̈®Í½!Ó§oåy~ È3Fš^tý©ž(¸DS~É$.Zk/–D~iwêm»Þìrîl÷C|ž½–sÉ/Q²kšÇ©X Øs@@všõ’Ìõ±l%¸Ž¦ü%YƒçnH­{݆ìêÔÚv=í2îÅîGìƒ{÷´óK.À‰5“ñ‡™ ÈmxˆZ¼ýä<‚‘_¢n‚¼^ÂóK(jmšÀ­ïbëc¶¾lÁ)¿d’3Åû/ö1rÑ!ÛžÛ—ŠEEÉö%püRH6„zäÊÜ(eä—€ž¹ kÛ®§¥äÎvß÷ÄÛÇz= ·{É/QÒ´ÓõzS#u½ª*#Ô}*hƨ¡?ŠŒëhÊ/™Dór[påizº ùE+N Ô›]ä^ì~H`X6Ü×Ïù%JN¼á¡ï,«ÏΘ2¯†ÖÐKøßrpMù%Jš=”+Ñ"%È/=óØ¢m»žv÷b÷#æ„:=^Ïù%J*ÞÒ÷&5k²éy>òK@î$õG½’Îà:šòK&éx©Ü¹ê ëÈ/¹“Ô¶]ov‘{±û1!îaæü’K&뎛ݼtãöüÒ‡cqYýú®;zp‰¦ü’Iú‰´*¹÷Á‘_ê~ùâmSO»È½ØýÕ¡—Âå’_2ÞÖ£¯œQv¼ î™ O‡kÞÂ$`Ê/™ á5FãÉ³àž µðã¶´éZ³Æx³­q’;ÞœóK.Á­u\'ë˾ÃxhÄ82[õ¼ìz Np‰¦ü’I Â(ç„Q^·!+mmSO»È½Øýˆ“’†çºîF~)$¸ëÒ´…®ÄŒ{°ÈÅ=™žpÕ ¸¯–‘hÊ/QbG_çâ,êŽ{²h;Y°J»Š…§³ÝXºŠÕÍù¥f/™f\üÈšWk“½Sãù¥êïU1#àzÙô÷=¸†.ù%Jv2˜MЗ:Α_j¾Í²íÐÓRã^ìf&B%]òK.Ù«ÈQD“tr­}ä€zÜàT\?†¾["™\¢)¿DIBäÊa1—¨Û߈—#ôn—q/v?â¤T¼ð7ç—(iÅ:Ùò|z(/#¿ÔÜZídÍÞ¹þÀû”Î54ç—(Ù-h\õ ÇÈ/5ÛÝÛ¦Þ-5îÅnÕÓÂô‘_rɾfËêhl®qW9 w°úf ëÛjÉ%šòK”Ø;çäŠÏ?¨Ûg q.0½ÛeÜ‹Ý×üRg¿Ÿ~!øú·zïâ«Ä·üûòý4±â[Añ I?ó¿˜aÿ"ýòþ›Eßþá·‰ø1\pêx!ñýmùLTŸ/ï¿}úí{´òsÈúnªœƒŒ½½•{–v~{ÛêNe‡5ö›ÛÖóR1ËËh;¾å(O_SþôpßM©9¦ŸõÍùák6h㫾ËG~Cõ]¾ñúø¦ïò‰ß¤÷Oú._ø©þçN¸‡t…/Xôäx»~M8=èúùcÂùãAê/ßÎßRù”pþtúË—„sg|.îkùìÿþû‡?þõûï>ÿÓòþëÙÌ_dÊÔþ¯&³ä[©ê4§¶HóÏEûo襗é/>.^AΞuÒOg5„÷…íóñn^œÛæo£ÉŒÃïþqûÏ?èÃ#c–Ï>üùþ!£ðÉü]œˆÔµØ—¢ú!¾éÜ–çÏZù•µ,ÿ‰N#¢®Nžâ/þõ––ß|ÿôûŸöq/ÿ«³õqj¢øö&!°9)Ç0Ù¼ÂÐQÂq”ÐϹz%Þç%G |*?•> stream xœ‡7ÔqðÆãU¼”‘-‰D!3޳׹éÜÞ£¢=T*{¦DCY‰ì.tö>ÎæîÜô7ôýù¼?Æ×Àùêž:Œ§Šà)£xŠžÁ•#¹;h® Ë•â¸R'´–B[¾à›¿â›À2ü²øÆòø† h}e|Ý7Üw° W[…«©ÆV×@«j±ßj±•ß1•u˜Š:Ly=¦¬]Ö€þÚ€þÒˆ.mD•þ@}nB}jB}l‘Z%-ÈâV0î}[\Q[Ü»Ÿ âm;¢°ñæ[Ð›ß›× ÆäþŽÉÙ›ÝÕÙ Íè‰Jï‰Jë…¦öF¾î‹|öG¾ìH€¾ˆxþ'ü(O„?„=ù }<öh0|8ú`(äþ0ôÞpÈÝÁw@ap’08QOßß º9 åñƹ{9ã068cMÀ˜ŒI(}ÒŸ6¥NùS¦o÷’füˆ3~pÖ7aÖõ‰ŸóÁÍù`ç¼±óÞ˜yo4¸à…ZðB.xʼnvL}ô¨ZWW£££9rXsèF[[£¥µ{ðàîý»ûöý „½Ô endstream endobj 260 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 263 0 obj << /Length 1632 /Filter /FlateDecode >> stream xÚíZYoÛF~ׯ ’¹7{EóñÑ#â(h´(hi%³‘D…¤âæßwÈ]JeZ’eÂn —ÃåÌìÌ7Ç’ÂÁ$ÀÁEïtÐ{y.I`‘Tƒq 0ÒšŠÄ £àcÿ,OîÛÔÎó8šž„Té~žFól˜Æ‹Ü]/³¨˜49 ‹©ŽÍGûO~7ø¥z dÑÿšÙÌQâ¹;_þú:ÌìgwqçמûµgqvùãÛ÷ÕýE4<¡¸ÿiCÒŸƒŸzدþå9Sµ¥sŠ B®‘ÆÄ­ü·k;w *°ÑAóœN‚¶[—ð”á„›§ò‘[è0ÿÍ ÷¹G@7€P‚´Q4)Ph8ë7˜FJKP+¤6÷ÞÝS;ç|ð52Ó„RD¸‘IÜ ®® €@¡h*Ø’þWIæ¥6a>KFvêvÌò%Fœ‰æò9’„=ÄêU®®,Ú˜¦fQÍ;ò‹s½é—Wacƒ4ãOÑÆŠ#²mcbä´##ƒHÞ4òàòÛ»reH wÊÙ`Ë\Ä%ëì8ZNs ‘@1¢Fq'ݦ_Ýœ<ñçꡉÛpj¿@•×gq¯§6gÀ+ž'³"ÿéŒC¢b0 °á4°YÏ¢¼È›Œy¾å`•+îŒñþU‘(û6«Šu9;µHËܤ›xêÉÅtÝ÷‡Él±Ìí­ò# êGoþMb…‰ ~¬±q+M[Ü-ÿ| %¦ýƒ½¯U‡œ8*ÜÌ&q-a4;óƒ…ì;ÓÇìèE‡Ü2lOæ]KyuÒ¢]0¢¬Û²¥n{úx9vn‡/6½J2Û½!†%‘{‡– âZé’äè}yŽ]§p†„&0"óåíùs‡Ž˜Ð„q7¾Ûèù**„"Ô ‰CYY[ŠÁÙ[w.?„ŽÏ-!TUü¦t¥iH9ÖýÙ¶ÉÜn¢¯n-i ¯@¼e²R I>¹ „3íÆ™&óQÖ‰Øã=uzÚ¥§ØSñm÷6Tç©GÙ¨í ŒŒžÀZÚÂåõÜàêo;ÌýxìÎÃi”e¾tÍÎÞ]Á/9ÕZÛŠ“Ûö£Ê•EÓìŸ/_8å½ÍS¸y;¿C"jå‘—1Ú,KÒì{¯~²œçYÑGø^¿&¸¢º–½Š–ƪˆÆÒíù•²1uf#WÝ!¥cÅ÷Ù”ÛÐÔg°ùhè mü,qÜŒ@Š’}¸¯a| ³Â7±+ïÁ ¬îÅÏ›K0$e‹½ k,’´ØNe[K²ãq<ŒmÍ+FF‹õc9³IÜ.È-qra}p@ÀîÊkkí¬ß¾%µÔÌ~m£Q×]x‡[‰£,xèf¢À[ǘ;8×J"§„—‘Zl )Ñûìb#¡˜÷Ç6Ê—©{\P$¹Úûñ"p/Þ¿å’%תq­ׯ¿ö ¼«¶S£kËËÓùédŽá YòSƒ±RU'À„bJ(,÷'`%…`”š»ÊÝ©‚^ñãŒSJ$ÛŸ@Æ kïRíRAÓ•,17’D Z Íä]*ð»T/BVKÒRX¸<€@©ÄÚpz— b§V*`"µ r Ž=LMvXAî´ÂÚ±S èLi®¡ª­Y`˜à*|1áT,~ãúN[’íh#¬£fwÔñÜFX‡ÀnÄ×ÁÙN¨ð¼¾u¤µVàlñB ‹uØ´VHÛ ¬:ÚkØ<Ùˆ¶´@[oR;ñ]ìv§ç(E^¿C¿W>²a’ÿ†iôß:¦Çê˜ LÿŽ~œç6ÚEŽ|RŸ¤ÉrñóÙCuDåëØk1)ó™·ÐD®)G·;%ØJS­™`Þ(q-!7Svt/S²@ žbÚ¬ °dXqt§â Ä Ô åUyÂ0I%ÇG·!%à§)SÜxëëHªŽî1¼þ ¶›Fê•þ˜.1ÿ½ÝñÖ+ÍýJƒÄÇ«â[u¸WuèüÔû*þä>K¹KHÛ3×ĵ€gàÏžÚç©.>´¯~‘±ñ6.$2„R#Eüor¨Âo½yp endstream endobj 267 0 obj << /Length 2394 /Filter /FlateDecode >> stream xÚíkoã¸ñ{~…pûE)ÖZ¾E½ÝG÷nχ¸…bÓ±GòZò¦ù÷áP~È9ç±Ñ&ºLr8‡ÃyZ– Í¶ó»ºØkÒïÇïNXÉw'oÇ'oÎ O\æŒ0Éx–h–Y+’\ñL9•Œ§Ééûr6;å,õ+_µe±8‰Ü¦íª¨šÉª\¶Ô^7"]œŽ•`E5½?ò¯ãŸºQ0×éMã‚”•ùÛ¨ñŸ¨q]¶óH}I¼ÿøýÏ¿uýËbr*Xz¹7Ó¿Æ?œ°ûË)s ›Û߀Ù>óÃøäÓ ´áwâ6,ϤQÉäêáJ茻í$Ø#ÅŽÑ×w. £ô¬¹rQ@¸Žù}³OßÜÉ¿Üð/”ÎØ ÿL:¥5wÑÜ pn£ß”4Ó6‡2›’ÓøÛ»€ S—lÃ9… º”Œ¤Îœ‹‡Eg£u<ÉœÉ#.¥Lǧ°©oÚ²º {=;•,­WÔ˜–àrÔw;h΃7íÔé®K¹ð{Œ¾9ƒÃ»umqqÜ‚zÅŽ+‹0¿2"x‘Í~ àYI'°äB+·Ù´ÃžÎü‹d¿Ø±[ôW¶ ÑÚaÓ9áÀ*à?ÈtÇ<µCsÌ•÷âm]8Åôj ›qL~ôì3#üÙºš´e]‘ìV¾Y/Ú†eò´=yz}*lZSǤXLÖ‹‡5`q-lîY¹jÚ×ÐíTZ­ y`ØÔ/"ÅHùŸLª¶õÓ8x<‡Ž`ª-¬ˆë}CÉÁÝ#ÇðQQÇy€{jL=’¯ü”Αñê ×_èsYl‚ ælÒ/ãɽ­ëKõEä:cöO0õ¼SîÀоÂ<†»C•Á)…±0%èh]ø¤ö³c  ªu óú¹ÄŽ=ãÖˆ ŒT>Œ´pF ö¤5íY—G-…£%ýš/áD1æö—Ò”Õ±2˜®¸ñ5¤Õ³í>ÈŠky 3•YðøÃÈ §‚jï°TO°ÿ`±!nê/ãTaZŒ‰*·³È掻 aAix§Ë"h@qå!ÚFÃor–þæA"Ó×d¾…Ó™Ônß~/ÊKçåœìw´âª+ äÀ`U¤àÀÙ@š—¶%ÕË 4B,Ð AŽk‚s°ù¼£ÔÖ±Dÿj³:Œ!êÁö#tZ‚L"$ºÙ ~Îû*ÒêÍ‚ |Tq¾j ~)G¿”Ýé¾­1ÁÅ`©iý—#UJ²ôŸÖU¬-uÃ\\¨‡ÌŠzÃÜPÙÍñ½ðŸÑ)"öõÜWÏvH%(œUÃAŒ–oôZÚ» £×@\H° px´‰Š}~öÁ"d’æO2É¿ª1¦øòcMÅÁò3)øS¬þ¡Ìíræ0ësÁ€Uí Ìh•Øß—oŸ@Æ"v_ Œmžå}¾õé0¡Sn_Ä㿸3˜ÓI'{5’\fÆaRá0…¾ïñ²NË´^¯¨âÿS\-¢|a\4”Ø£br°^L ±³øÔB»ŒHd—& k¤Šµˆ¹±‰ØØ5Ó ÊÈÑÞ-$´)e Õž)σƒ ƒØ7Ëà·ÚUé¨R‘hönüœè†Â­'Ô/+rY“ËÑ4DA×ÕvÔïqPF€¿wë†zÈN©É¼ûLv5Αìã"(ƒ8þÙ,¸5™p*QNdÆÊ¯£Æ`5•„)ádwù®œDp8eêÖÈ„dx=/'óN»Áâo²Ê8A3'}•¹½š–“¢E'››82tLêÅúªj^ÏH1bL ©¡t€îÞ䥨Xù«ú³ŸVVxáÛ˜G´Vˆ¨ÞRtzQÝ&ߥVÙRé?­ñª«0×3i·:Óàk• ßh“’Á1¢M8¥•:Q9Æ»Q\ßÄûàoŽÞ+IàGm-ãH Žç!D)Σ„+8¿´GcO0/qó¡‰Q[ÑP½FÄÅ 5ŠH¥D`¼¬&éÕw”–Kë]Z_ùµQÔB ±V /¢˜ëM0ÕwkWkåAÕ§±'b”³Ž„¿¡ÚÖT:[ÕW Qjè„¿ÄëŸ /ÿEúKÝFäÀÖ3i›R¢€7ÈÄþg㺾¤>ú»øYLn÷›'œöq;õ®{qîdµ(/ÃB¿ŠÏçêM[Nš!7o_fÚ˜zY"»]¹ß¾R¹ÅKQnyD¹¥Îÿ¯ÜQnùåÊ=æ}ã¾^øÚ3€ñînèpð1Þovn9!áë@dróeÇìŸ}³‡ÞÁˆ/ûòñÉ~¾x'%u$}$s¤|é™u·¿_s_L‡ÖÕ°Íf_㸽:\–/-\ð ÕÞÿ/À;V#Á¹åèAâÛ#døÃøä¿zl£É endstream endobj 273 0 obj << /Length 1487 /Filter /FlateDecode >> stream xÚíZ[oÛ6~÷¯ÚˆX’‡W`{XѵèÐmhæ·44Kv¼ÙŽkËÝú²ß¾CRŠ-ÅId'JÝ.1¢Ëá1Ï…É/¡„KÑ­ër\{ ×Ó7=aCô¦÷rÐ{ñZ±È«¸Š£HRb ´`DX ²è,~5úŒÆù2Ÿ“tÚO¸6q±Lç«ár²(Âûz•:¥q?qªA–γöÊïïªo¡ &ãÏ«|$“y¸ŸþòC²Ê?†—¿'ÅEÙûEÙūӷ?ÿVµ/ÒaŸÓø¯š¥óÁO=Ú>NÄ ÷º¹zͦp/ͽ=|ǫ­ÑpÖsbÁ%aVGRá:Ê£Qïý^ciïßÃk†šÂ"VRîjÊø¤Œ"Z–5õüy?œ‰xœÏ}V"Å g&bÄht~÷rA´QQ²%Ÿ`Q)Š©.ýCœÊΟÒékªâ4ûÓwÀ4öŒálÑsù}טp!5Ûz"7ÃvY¸½~9žSüáR•r¡3VinqœŠ¸l˜.@ä‰kñª„IP¢½EºÛß6Å)Ъg†æÊrcJ¸êXKhŠBe\(M5xÉ-¦`Ë—Vƒ,C‰¥Z(QY*Ǥ0糌ý–ÑD mÁxI˜kTm‰^/^ƒÞ‚.t 'Ž´<85ð `y¼Jgþ âa:¢?ðfâ²=^LòOyV5qÏÙd™‹iõ–  æ“ù8ôVTæëé4ˆ²|5—6fi±œüžK¨*¿Taµ&jÞKŸw5U(ãú­ hSÞÄÁV˜À‰¨¬Ð†QB])N‚+¨9dp×'¾³ Тô3Ðç%Ë7…q°+\„“k®X¢ïÈ4iAÖ}ñÙöÞì.IÎ •Øq‰.i«n™Î’€0 Ë•Õçb^äKr¤Ë(Ebtcâ‚â´W_ÛBõKš´n‰6UaWåqC4S~ÅQ7¬8¥ÜcÇžÙöIq­þƒ’è̃ïwÉÞuc´+{¯ŒË Ùn,Ì.³|JJdÛ×V[MŒÊ*éD%þwÿ€`Ú‚×!! á& ¬Ë(œtØyØ7¥EڵﻮI\ÞS<(t\Ž^˜ûíÎP¸ ªÔÖƒGC•n=BèØì6ý®Ò…õí×»a¾(ªÐÞ´7uLÅËwÛ^ùN%Ø©¤êJ¢MO²’j£¤Û(¥E±t1;y–®\Q<»+fgì<<Ðc(Z/ƒìëYö²Ù _#L÷xŸo6¬]"~ÃXÄ€am‘ë ”mÒ„ ƒ§’ÆÁþ"O³cÛÑìQ¦ñ2_­§Å㬂']猪c7ØÂá­„Ø“æ B¬UÏ× 1óMbê[$ÄXpêW,{Åp¹çõÊÓY è—d¦˜bD‹‹EÙ+œ b0#Ð9Î$)àZàˆ$ áåüþÔÓ’c›¾p,9n:òEテ3Å2­¶,7pSšƒkÜTàŸ¡ 0¨®JÁéŠ$Ëû,^aÑÇžçt“UhbK:®§iá¸T'ªª µ,&—>7àþnBGq˜k<ŒIƒºD+?z7¾ÝM§ÎŽ„-;X\TðÊNžóÓ[ËËçh©~vqà×EÍ Ε"e ˆeúEÊ1ð¤Hïy…°[¸ô5ý†Çw(h½—îðØ;yLÜj·L^cçúDu<:Õq(ÒHvT溥.èMÔpçGþ#=0û³ØÙ ;¿ƒ9özÉ]Ôq -h¥%vk©kìq‹¾T+-]Óê(S{ÕéV¦ž¸µ'níË@ÿBÜš>Œ[Ó»âéŸÍŽ€[Ûskÿ/+¤" L”  J¦Aí¼ŠçÄÿz% z endstream endobj 280 0 obj << /Length 1366 /Filter /FlateDecode >> stream xÚíYYoÛF~ׯX$/nö>òP#ÍQ´Eã ж(hi%1‘)‡¤äßwö EÊj"9VàÂõƒ¸œkgv¿¡ Z ‚^ŽÎ&£§/E[Ś̑$؆´ XX&3ôGö¼œÏÇ”d®vU[«qδÉÚº¨ši]^µñ}Óži1Î=k¤Õìpæ7“»U ƒÊìSãšH)«ø<ÿù»¼qïãËDz]&éË$âùùëŸ~íæ¯Šé˜‘ìÝ@Ó_“F$yÿô×=×Ã’¡\lžOƆgëqÎÍÖmáíàŠE…~P»1ÍÀHšmVm“çqnU¾3“¹U¹0Š¿³ÈUm¹NÒ\Ó6OüØfŸü’õ&N,‹.r·‰uZ¬Vh6ßTSUE×°”!‚·Ì?)“¢Þ?sþr»¦ÿè¯è?€ÿûÉèýˆB ¢HPŠ­–HY‚5„mz9 [¢5ªšÞÜÊ´˜ŸŽØJÂÂ&Q† aeyÜ¦Ú ¿•#Œb)ô®#L`ÁÌI<…Úê¡'MH£Ï$)ãxIäN9óqYN—~ʹd˜3‰r¿-Rvái7uå³Só¬ð‘ÍŠ6æuq Iìâ[,*?Ú›¾:¤/Ìvé æ…qÓ–ÓÃP03·¨kâl¨¯tu¶¾ \"»Ê?«MÇN oß™«òà :ñ¶¸,«L°,+0x-›./‚m®^DúŸD’³WðKÓ‚ÙÛMÓº´j«Ù¿Í×ÞÍ:¾¸bºŒ£…«\]øùO~ì]7æìÒŽ%^ŠîI¶$¨wôíqëãÒu•Ë$±í>CVíŸúÚÚ¥Ô`B8RR`ÃåçSþ6ÖÝLz¯’I¯RaJB Vîƒ[}}S8À©¹á‡‚ wáͱÆõ-“ FîZD#NgÐ(‰ÆùÙÄð³÷1ÄŒ$³cµX v¢ƒÊ ±âGsWÜA”5@¢¾ia‚JR´ç \îÑÁ·¾>Ç(êÿ&S†Än³Qÿ·‹Ïà÷(ÎA–•Zc¡UEÁ$¦pïjH-wúÆîà)86`Dx9w‰{÷Ør,`¤¸]KØ~éŠÙÑûv('È÷7ñÑòu1`›d: ³''Ô+—àÉ”<»¥ÅôMÎ-q«ÀŸ½SãdBßCUÊœ˜E1©vˆ[Oø©=8™ü#,ñ`ΞºÇÇ9´%"‚_Vt[Ô Õ§"Ïß.°6 oé%aÊý˜ º=ÕËìF¶ íã?›'[®Xá†(äƒ †iص$§õ¡=b ·0Cî½öi|¼8[Tþ˜T¡­ ³nÝH0î} QK§…> .g‰"°d”ërj÷ÿN3û¢f“TøîÎj6Ð Þ2b„=ÉD…-µ (j Y 5ó/i6¬S…9@n†šÊPi\Np§`p4Ê5ºë›u?'ár—6}½ù=|½ñßR8ϦEW«uG¾æ"[Bóº^ø.8PCà O_y<•#wèPß7tÝWßçùÖn˸mlï-â€Ú,ÝÅC•¥–IA±Jé“ã—ßâ×SCŠ[]ÿ]´»îe¸Äp!Îa' û€¬{?‚¸S¥Go¦ºu‰ðôõ¥@ÏבoNR […¹‘˜@„#Dò‡V×aè6,ïíØ¿Ö§p#ñí‹ç<~¿ðøÃ9È(ú‘왼>È|¹Ys=á{þ78ԴûŠŠ#ýô  endstream endobj 276 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/home/biocbuild/bbs-3.20-bioc/tmpdir/RtmpkSJXss/Rbuild3d52d121381e66/DRIMSeq/vignettes/figure/DSdmTest_plot-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 282 0 R /BBox [0 0 494 490] /Resources << /XObject << /Im1 283 0 R >>/ProcSet [ /PDF ] >> /Length 35 /Filter /FlateDecode >> stream xÚ+ä2T0BC]S]K…ä\.}Ï\C—|®@.Uî endstream endobj 283 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DSdmTest_plot-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 284 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 285 0 R /F3 286 0 R >> /ExtGState << >> /ColorSpace << /sRGB 287 0 R >> >> /Length 1192 /Filter /FlateDecode >> stream xœ­XMo7 ½Ï¯ÐÑ>„•Hêëê ` E[í!È¡píƒH6AÑ_j>VÇ/É"5°³¦Ÿ4Ò£(òÑÁ]ºàî݇é·õóÓá÷7îæ0òÞ»ñy¸y\á—WÏÀW/iÍîŸéí;çÝßSp—ö¹Ÿ‚·îçiþšÑëðõñvrÛ\dâì4’W§šˆ£BZlœûÓ=~k‹_›?¹»NÁSevã³Qð¥SðO(,/ÌTƒ{˜´мÙï§«uK&•>`µû‰ªö«ÝhJ¤©Xí6 °t†Gs×0+¥z°™}€p¢Ž6³PÎÍ Û€Íìö½l9EJÃŽ³3 ÅSȃÓ{pZµ}–Ái‹=øÄWb?ød±Û€ÌÓq¿«5l7 ÕÒ]¶šƒËr$õÝe«9¸,'*Ü]¶šƒËr!Öî²Õì,°4¶ð—jO :Gë²ÕÅWv츅쫶JâõÛ}¹›Ì})#L) Â å °ÊTt·›H%l`¢êÁÄàí%šSk‹%¡€ˆ„)”¬Ò¶ÛÀ¡˜Ê‘ráJ(–J —vÍ! ýZ|áÜ`F,pj¥´ã2¯Älé-Uøæ˜)C:)´‘´×ÀCMÕr&— †Àb—…É£ð ŤR=1¤b¹„!»¤‚¨°gD…}jy€V4Qá … O¶b“¶Tž!ñ”Qx²(HE HE¹Õ.æfЪž‡TblU µ&«ˆJÊÄ]ÎrYª+)<Ð"!—bÕri9 h­B"°R†É\¼PA\Äg*ˆ‹„ÐÄ#UÄEØ ˜ÅdЇ#\( ƒa (Qxq=7K×¹=ç>öµ5 îúÎ…|lJçÇb· 2šjêȾ®Ü™‰‡O·‡O·üœ»ëûéU{;Ï3ûóù6øëMéÕ±ý>åc䎭°e1ߺØþܳLOXζ…¥Ý1«¤–ÎGƒ6^íÝß39˜÷MÍ¢xêlnùAçÙñôµÕJ˜µÄmvîkïÿ‘1·ùß>¢§m¾]c†~ص·s«7£Ç~v×ÞvüØÎîºÛŽ»Ù]sÛðï €¢¸öÈÜú ‡]ÿ<6Ì+¼ëŸÇ~yÅwíóØ.¯ø®{»åß5Ï£ ~8Æ­ÖZ2ñ`"jñ-ÄÒº½q:Ÿåµiêqz> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 277 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/home/biocbuild/bbs-3.20-bioc/tmpdir/RtmpkSJXss/Rbuild3d52d121381e66/DRIMSeq/vignettes/figure/DSdmTest_plot-2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 290 0 R /BBox [0 0 494 490] /Resources << /XObject << /Im1 291 0 R >>/ProcSet [ /PDF ] >> /Length 35 /Filter /FlateDecode >> stream xÚ+ä2T0BC]S]K…ä\.}Ï\C—|®@.Uî endstream endobj 291 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DSdmTest_plot-2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 292 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 293 0 R /F3 294 0 R >> /ExtGState << >> /ColorSpace << /sRGB 295 0 R >> >> /Length 1208 /Filter /FlateDecode >> stream xœ­XMo7 ½Ï¯ÐÑ>„)êëê ` E[/ÚCCánFÖ@² ŠþûRš™•467^¤Fkî#%’#Q‹æÖ y0Ÿ§ß–ç§ãïïnÌýqB°Öš~<Þ?.ðë»gà»×¿”o£ùgzÿÁXó÷„æVž‡ ­(˜Ÿ§úQo¹ûø²ŸÌÍêáÉö`YF !ˇN¢gþ4ßsñœýd>¶,d"Ó% Þµì&„yr$‚Œæ0qNài•?Mw‹¹ìšÂ"7ç27…En ph ‹\sñqŽðpg½¢@$“…“Â*6G .ŸV±)0HtRXŦ0¾èÙåà!tÏb‹“Œ]Òf¹KZf©KÚ,w9±Èv9™å¢8<ù»H»ÑBä–²EìR]q攲EìR%ÛR¶ˆ]ÊbÛÞÊ*6ÙXìËö—T[ñën]sÅ€2%_öj$àõˆ+À`Ù…v%¹â_?¯‡´Z&†hUËi3BX-sUì@»`Á䬢•-“µ5ÑzÀ¬Ì‹å5'- ˆ\ÒL1–ƒ¯­*Ãë“|µ‰)CTAç é`„U—˜ÀÍ”`Pý•ZGª©—#îÕU}ÖÑ@àÏ ‚WšOšâTdH¬N,'(ëhrå|)§¨‚²-ÉiG³§›f`R@²®•½§`„@Z0„Q5Åêž’`’êŸQ3•ÂnÕA”êlÏ›:*µU3uœŽ²>ƒ2°vÖ‰¥^ªe‚<•ë\1õbÒÞ+ é ÊÕJ@!ƒÕJÌrUh`RÁ„àtЫe‚’Üùj% ìÊ÷šmŽUÔIN^Ë““:ÕRà KòJ@ráê`ÒÊ„“5«. 7au•Ïi;aÚawNRª‚R§“>¯êLªOÂõ¬vÚ—›P-ÎËUHÚ{wÁmÈÄ`â†LôËF܉Áã™í¨hÞЉ~b©ÓI7•B­ò '…:k§Ý ÛÐù[«ó –®ƒ´ãÌ6ét¢p3V‹cØÐ‰Á%²:`)Ô*`©Ó*`©ÓY£Î&˜qÃ&ÐoÈÄ ç3l¢v[gиaý²7dbý†K Ù—"´ÂR¤G.Qh˜\å3|³«½él²ŽµÝ}+}ŠÙ}4Â#×Þµ³\6¡DZ¼–øvs…Bë¿î_fþ»6»‡éM™žªiŸo—Ï7¯w§6ý’G¢;µÌÒxØÒí¶q 3l¬²››õJ4JvªÌüÓBô¤ý-¶þå¶Â¿ËÞI•Öä^°ðlÌÂɤk®Æ§•ÇŸ:êß9O~ð­ü†¸6ƒmoß7¼5¼}ÿÛðÖïöíoÁ_úê(Ä¥‹¦ÂôC‡Ý·Ô ô×}?½àC{ݧà‡w·pJq\j¬ðóº»åË—ï3,÷uÌé¢=KÜ›ûKŽ—°Z;:/X¥³’Ù̱‹ýòÒò|u‹iãA•IZeao¹ âÀû«__ýqmd#\ýõéÛþxýÁìn{g.X°[åU·¸üËåF’&ÌK¾ý²ÿümÿxm¤b\ýûdÍÿí™þP¢G endstream endobj 297 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 302 0 obj << /Length 1462 /Filter /FlateDecode >> stream xÚíZmoÛ6þî_!û ËW‘¶ÝÒÚam CZ Š%ÇB-É•ä´ù÷»#©Ør’ÕÞª¹ÝŠ’HyäÝÃçxt(áŠtëÙ\Šîùêé„Ð<üx6yt³ !IÌãàl(JŒá–ŒÈDgYpžóù”Ñ0oòª+Òå4âÚ„]“Ví¬)V+¯Û….§Šºº´Êö~yö¼ï:˜ ¯Û¼u5EåÞ¯~yµù{WøPt ?úÂqòêÙ‹×}û*M9 ß 4½=ûyB¶Ó£S¡·Œ$9Q<ˆ¤!†2g£Ó)7afÉæÎ?ë9¼U«èÀ„m÷Š ¯m—µk›¥•.ÓwXŸ»ÒjYw~”7TÑ‹´×]l›kYTùíÚ 4ÎJ‡o·6Å…¨¶”†V‚uGŒ‘D)·@\„0,¬/Ú¼¹Ê3,qç`¬†eeÚå¾è|ƒ'E3ea1[,ó.*×Ë®¨êÒ‚[ËÚÎ Ë}y'8N“vEÝ’i¤Lþ>5Ò %éUîdºú®ùfù*¤µŠ!½ëib‚Ý·À]M’HƃáËv¹£䟜MÞOFðÇ&q¤ Žc¢“`VN°:ÖDQ¢ZMÌ'/ÿæÜ܆ K§щ e’€FC´Î—M½^Y;qA0btìšþ°Õd5˜pS•6Ez±ô†»g'B©‚Ûcåà™–9ÝþÃ\Ÿ2lõz™¹ê¢ÊŠÀÅ•R'påº;¥¶aÞÔå±ü&¹",:t“ĨxÇ¡F Ä3p\›öø'k Y—"äHËe†îàoµÌ‘ZhÖóË}ˆ‚à8QÄb3`ÈÁÿiÝ`@Z^#-§ ‡+àG™"ÖŽTñyÎrªˆã0««ÜU×t¶_óžº]7¥Ë/-q6€Ó¥ë¸OËIR…¿Mû¡ß¢¶zêÖk:"ëHjH¬vV¨Ñ}ê.A]L 7ÎA,é<øKok˜ÞÛ³z¹.+ïrÅafèò¶¨fH ¤Ã·„>Ö)WWÎø‘XغF VØœtéIªhm؃Fž9F–Æíã4¸X3>Ù„6[Ùîµ×f £ªÖõuƒ{m¥+¹€ž ¢”çX'…³"-kM¡Ð.R7¾Å™œ=n]‹E4¼ói {ê¡+}èQ(¤â®Ö®Ú~àl±­-.«ã"î À¸«Å£ 9ôd„° ¶Ÿ=2σ$öQ¥€¹¤ìñ‹ÉñS$ñÅûOfÿSòöK‘˜"”{R| Å?lµPœG1åá÷ÑÁ0IØž N8Vr·r£& §¿ƒ'¼·$Øc'ÀŒ¡dç”y\ìošÞç#z9¬› Ž}#û÷óX<ünÌy®®Òå¸ydfù¬ÉSˆ‰—ckúápذØcÃáÄÁf§r£àôñó×OF†ƒ`‰ºÞþkì€qƒ>$ B™»s®xsa(v] ìíѥȾ*úâ7ï àŒAéž.8qƒ„lÌå¾/"À^€ä#–A„w¬OëîW8>×þÔ<öq`tÞlYF!µ2ãìÙÃÛ¾z†p“ŒÆ@ãùæú oœô^ÓÞ_}IÁÑc®oKn*7 yôxáqÄ ð˜©d•7W±B‘„³@¨°-0©|?´Ê]aÒ`ëÓ6õý|Å£geœÔp¾%ÿÝ(Œ dyÀ¥‘À{b³›ý F”`__ö»oä¸1Cï°hËc÷¦ÆIN&ÿ§0£ïa@}ü0ó‰©Ýf>¹šã„™OLë[˜Ù«ŒèÀˆsे˜½ = fÝõê?àKüAÿíÔðÙN Œ)ÂÝO)žôÍ©Áÿ r;Àm ~Ç?e( |iÙ•y`3u áaAáJ^á endstream endobj 298 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/home/biocbuild/bbs-3.20-bioc/tmpdir/RtmpkSJXss/Rbuild3d52d121381e66/DRIMSeq/vignettes/figure/DSdmLRT_plotProportions-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 304 0 R /BBox [0 0 992 491] /Resources << /XObject << /Im1 305 0 R >>/ProcSet [ /PDF ] >> /Length 35 /Filter /FlateDecode >> stream xÚ+ä2T0BC]S] …ä\.}Ï\C—|®@.U í endstream endobj 305 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DSdmLRT_plotProportions-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 306 0 R /BBox [ 0 0 1008 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 307 0 R /F3 308 0 R >> /ExtGState << /GS1 309 0 R /GS2 310 0 R /GS257 311 0 R /GS258 312 0 R >> /ColorSpace << /sRGB 313 0 R >> >> /Length 2572 /Filter /FlateDecode >> stream xœ­ZIoœÇ½Ï¯øŽ`}î}9ä"Ù ÄÈÁðÁPèE )™”‘üü¼ê®®^f(r8dÏëµ^m]M½½ÙôönûãðþùúþŸ¯_noïzWJmãçýÛ[†_]œ€/^ý¾Û?þ´©íß½½ÁÏ»ƒVè°}(¿Ê‡V*Ño¯ýº»:l/Û6—vo6­ÓÓ–’ÙSܬÓ{Žè¸ýk»}l“Ÿœà°ýÒO¡ölÌ6~Ò)Ôîm?…ZNÁ³‡´µÝ²Õ»S­}}¸àÆú=‡ÞÛ½ƒUv¦wàöÐ!âû8t¨íÞÁÙ¼Û;p›:ÌDð–­Ûí° ·‡-+³«4l¹¶‡!ïÉ j{ز»ÏÖk{زò»õÖk»lÙ˜]«FÛMk» öX{çHBÒƒÛCân]ïÁí¡‡K™hÜzmvŸzn="¨4ÃN¹=ôH>îiØ)·‡P¦ì sÎ{|&åŠæjìÆ»ÆŒö{Œ`Aí:³æ: ˜qî` ¹Œ'PÖ H¶8‹ l1¿æíªQ;ä]58Zj®õ®›a…„s-4Nǰ!¶—Ù-ì*ÉñV²Ò)á3 +é¬ñÚJêÀ™Ë‘œÄ<+ƈTRÀwG¤FÑÙëZ•ŠšX‚…#¥±M*ÚÀÄW›ñK{„\Õ"WGvȴµۅVøÓ†{ Zô*WGSòSqÜÒš …‹Ø!´¦Wâ4 ­Ðtß$¤¾Z>92d> N›bCW{ê«—ùBI›ßC€«Èkˆ[H Ø¸èT :»ò¡uPj]€l‘ ˜zÅ ±Î„¸ƒY£(î)gk Ö´ªM¢ä}§ÿVͶâ. ¤¼ºÚNe}>ÖK8x±Ç€ì'ªÕ\M›^k·›õÔ.R¸âSC ìj]ì_¿¾0>n¿Þ?p~àšQÎËÚgM‚`“s*—‹«´Ñó¿J“ŽÚjZÒðD~¢´ íUðßã9g™@4†ò‡óhʦ,‰ýZð–M9›Š Ns$]4m-et®S±ïDË_ Ž©e/ êWÜ2ã4‡…Ï€¬qû(à|Å K¡½6k(c!]$2‚Ó~Ë`]d–å,Ù™aµÆkÁÓÊY<\5é[Ãiè-‚“ÕI‰\,VWvE;g‹%3‚Òø ¤#"YÌ-äçiÖµàXS‡Ò¶%4œæ0ð_H0:¯ð=XOxkxãÕ wÇng^áaœx EøWÆ…W_È›y5w^­ªn£ñʸðŠp[ËÈ+ÜJÒ¯8¨ ¯Œ ¯HC­_x…»V~à5ùâ}„WÆ…WÂç™W¸t:¯È°œ0Çhã5ÚìÄkÄe ÄÎk„ÌÉE7Þ.¼æ\‚äÄ+æÏ~à‡FTî¼2.¼² L¼BÁ}ç5bÏ~à•qá•m`â„©0ðêBõæWÆ…W\JB1òê5Ôyõâwç•qáµú•™WÊMç5À™8ðʸðÚliàU× b5|MÌ»†7j5ùȸp‹ÁÎ Ü"Ô¥&±|Ï”†¡]uTðâ'Aˆ%›utA÷ÈàZI¯-ñÒpèm¹Ðæ¤á…{èe‚Ù¦P¯å¤°ˆ»%}#k8Œ½ŒÑlo /ÜC¹rEE¦Ñ{Rr ´È¬áPßrQŒl+ /v‹âtn«`:·Œ ·ÈñéÖ2q Ò\¸5¾øá–qáÅÉ[œìC¸Í–|kç–qáifV ·¸“¤Ø¹uðkPçÎm÷ّLgn]q [WŒ¾s˸p‹+ç [Ä£`né~nn‘úá"9s‹Û]´·;ùFá–qá1²ä#·¹8ëÎm.êÜ2.ÜV[˜¹…RÌnáðËunn«-LÜfØ6åeÛ¬r)Š4îÞ¸ÍJÕx5pëà·à;·ðk¸ w‚3·®ú—™[Dy„p ?fíÀ-ãÂ-ÛÓÄ-|ŠÍ·ð9¸ unn«¯œ¹ÅUÀ«[LFe$á–qá6–{÷Äícù8—³z¼f“x͸ÄkÎm¦xÍå-‰×d/c~͸ÄkÊmÔ¯¹x%ñšõTâ5ã¯avͯká­Çëêƒz¼f\âuͧxÝ q¯«’xÜð¯CË‘Æx]‹ˆ=^#‡ôC†Ýp‰×œûNñšË}¯ÙH¼f\â5ç­k¼®Ì›rËêŸÇeóGÊ×R«?ççåeÕ¿D»ú9.Š*ßý³\ ¿ÃòÛå/TEiûZ¶/mSRfMT¥íòf{ìùvùîðíeYæI£á×À­ÏMÙ ÃéœÈJ3¹š°<óšøóÄ„ñ ¶²óžX¢BöêôrÊý$”¤˜îºÜOǕԗû ½0˜ŽÿÖÿßà|ÙÂJu:W¶§ª4M¶‹ gÉöÔ„_T¶$à [¤ðÉ ²¥2CdÛðQ¶_ÒT¢¢»%QŽ|LåÕåßþ?7ô¤õèÖ^sÍ¿~sŽþrú“Y)gg)Rý®ÆŒ_o1VžžÛò,T½õÕånß_ý|»]=‡oÚžý÷\þ=<îöƝ¶î®ÞþÎßÀÈl~ØþrR[â endstream endobj 315 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 299 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/home/biocbuild/bbs-3.20-bioc/tmpdir/RtmpkSJXss/Rbuild3d52d121381e66/DRIMSeq/vignettes/figure/DSdmLRT_plotProportions-2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 316 0 R /BBox [0 0 992 491] /Resources << /XObject << /Im1 317 0 R >>/ProcSet [ /PDF ] >> /Length 35 /Filter /FlateDecode >> stream xÚ+ä2T0BC]S] …ä\.}Ï\C—|®@.U í endstream endobj 317 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DSdmLRT_plotProportions-2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 318 0 R /BBox [ 0 0 1008 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 319 0 R /F3 320 0 R >> /ExtGState << >> /ColorSpace << /sRGB 321 0 R >> >> /Length 1573 /Filter /FlateDecode >> stream xœíYIo\7 ¾¿_¡£ Ôª$j=ôâ´ à6ERÐCC:MŒz©í ýù%µRãqH°C¢ÒLÂÆD0t‰J3 ¯tqHTšI„Ò0K+Í$¢ 22K+Í$0™’Åœ³Îá3*›3ÏP0Fý”€uÒ©á/ nŽp«Þ·Ò Í7TfHKóÄ‚J‹f7x©i}³i9&@A©E-0šiDð4pè—åu¡»Æ ­æ±XטÁ3m C£I®äjÓˆåf=׈¡óL#ZœcÒ5ö\o±/–E`@*Ï|DÓ”ôvÖèìU˜¢š¤7ë„ñWRLjOˆç^YíHÙòné Àcê™ç&†™fÅ^s;¢Œ~޵šbm)+ÍÐh”–Žynœ)­¬jìÕÖ0^SGe±®è?kïeHÌÇ´ÑЈ}$ûÐ4bFçŒí>æÓ‚iÔ´í&÷ëŠN•Ïþ,}•N§UË…€Og{‚/·ñ#Aši%üxŒõšÀfL>Ûd)|ÚC‰Ëàå\ÞO{t¿€-ì>'+aiyŽaƘ霬O{ô<¶R“/t| `°ž_˜÷¥›äÍ:Ÿö`õœ}ñ:H )U×TÙ©‚¡ói–:Q^S_÷ÁÉv‘ízs}iÔáíàӬƌˋ˗̛òÂI]º@n´O{ì±Ýc»ÇöëÃöþéI½Ÿ$ù¦Ñ×ï i ®-ˆw>C0‎˜ÄN#£[dÄ;BO$ËwÒó Õ+ϯ|†¸‰Ù뎸‰5*ÁÓñÎçˆ;K·…8f3D~vC¹±7ÄŸ#}ùÝÑOªÜ@úÅ•5 ñÆŸ%¦q(1눇rîˆÃˆéÛ=¶{l¿>l7ß½÷góÿùl6ùÕxÞŸ>2;í£Ç]>Ç«1TïÆ3O*Ÿ£R±ú€IÐÇŽeö˜iì €Î0Q¬.ÄòÅê|ùa•7ßjuò„vY­w]mðG®JuµÙu5`¢««açÕ)·¤²Ú¶Õó 8G‡÷ÞxÔÎ}Ö8ó.óû¨qš<2~›4NƒÇÁïƒÆiî8ø}Î8‰¿m†=)}–é©´/Öf›Ó,³J̳Íi–Y%æÙæ4ˬólsšeV‰y¶9Í2«Ä<Ûœf™UbžmòîP”,#X¢jç’¤”Ïïn” Áé9þÀ6{§õëÛ˜D;í°  ¬ÜdÍÆj`‹çnP­‰;lã1àøChÃ6qköïä6Z“vØ&âÑŠGÚ&kÌz?Ù¾‘¯OéJÎ@mhv­¡e:ÏÔñ`¡f¶ãìÝÝ盳Ûu#vPÄv?bJµ£÷B”[XʨêÍÁ«›Cl]âàêú ÿ;¢ï>]]Þ¾«“Ç"ðÈK¬T&Ú« “ÄCO ¼ ”wX»øe¾ÀdsͲ4§¾¸¹ú|}/€Ú[J7æÒ£«v¬ÏÙ^nì†Û"k»ÛlyÛMïŒtÁ¶tÛ¹X’ÏwJº€çqqã'(ïä ÝÓ:ÿãx ¹­»X:nçî¦1Æâ. ž¹‹—Òh˜»x“6‘¹ÛøÜݧ§½Q9öx2R=[ýôoŠp+-å…iùñû]ÚÍS[ÑïVõ®ñ>µ'þ~‰k•q~ûZÝ…^‰¸ÒfÄ˳w—âìkTü}Íí»ŒøÃ`Ì7âÕÍÙûOõÌlH·ŸåOAi› endstream endobj 196 0 obj << /Type /ObjStm /N 100 /First 889 /Length 2057 /Filter /FlateDecode >> stream xÚíZ[SãF~÷¯è·@Õ¢¾ßRlª¸ ª2 eØdv B #9²L1ÿ~¿#°¹:³P3U·ºOŸ>÷þºeLͤQøŽLk@‹éÁQ¦GÈ®¬AƒDµ–YAÚZ‡• hÙQ`aafhá™ÕŠÔA%Aë<Él˜ 0ä²×ÙHR8E®-TsäAX £;Ê9æ4©Õœ n·´€³hx20f;Í!µ ÄÆ æùËzÙÒHæÉ— Ú{-BG!ļFpó^ƒ,óAÃ0ƒ¤gð ^ÃZ! A‹FŠ.Z"*, !æ‚ÓäMÃë¨hY¤â'#H=IŒ€5L)^4¢2j×#¾¢Càh0Þ ˆƒ¢žÈb”¶£°1Âw±£Ç¬è×±BP\PÈ a©åÐ"½XhÙv”òÁÁ¬Z!ü…Gîh„©AûÎúz‡|äŒo”eÕtøþè¸iŸ)Ê/¾YÕ½¼>ÈNqÄæ»|ë0ñ¬ý;êðnž5ìP*Ÿ8Ø^J(½¤6‰kã"&tl}ñ}Æ?VãÛl%+š<Ù¬Ó¯ ¹ºÊ~ú©ƒ¿;Ò̵<ÌšXdÃÕò0hBeäfù‰R­N|c}½]„odMQ•|Ÿÿ«»KŸ•³¦üÈùqQeUÙeMU'U}Êiö%=͇|/ý~zP§å0«‹AóárP¯."»Œ.1ÞQ˜&šR$øDPhG‘-_QömFBØ.ãŸÿýDkbPR½… •£~ÿèARÝ’:Ù礵´H©yh5ù…e†v§*›6¨vÅòdÖ* ßäUD"ÝÆ– üÕÒWz}5‡RÊMà ÇdX‰ïÕU¶ŸÃQŒïmï0~_6ìhÖß{°o‡oA ¼l†Ø,ZaÈÃÃjTgùÑžÔv}Ê{EºY]²6,’ÙG'¬«Ñà*GZ Ò:/³¯Œï²¦a•-ŒlçE–w?n¶¢ECyÜò¾±!ÕÓyÜø€ g¬6e›g›ÃÞ6í¤Ë2‡B52F2ä5[ôNòÏkæH”]…„už"KØ º¯‘SÛi“³•í' jiÄwbM˜„øtŸªÞS$x0È{0_ÚÂ{>';0ýqZ–$ËÁY1døËôö{^±4Ó¨[_ìtzM%îJXö'ÉÈ~).r‚9Šiùç*û2H›³až²‹ —èÊM´\§Ç”!-Ц‘.ûuΊlÈ~5ƒQ³:mÕ.3‰Iä´9»«³ñ@a6µ¯P§ìð_ÓsS¨“é0oC‘ÿœ÷/ò¦ÈÒÿPfU¯(O[<6åÏ9Xê{Y®mVýÞý|ùîÖMé¡· Ö£©µ®fŒ¹^ÏçåF9,n†·‹““œ¢~ÈŒåçE9bçª&ïç'HVcx¯‚]‡Ã‚ŸÖéEÎÓlÔä<+êlt~ÒÏ/ySô{9?O³þ¸ÎAƒ)i–!¼y¯ÀÃbÈì1½ü„×X›gÈ#ÔöëγQyšÖ£ó~:jxuZ•ùž¥Ä‰”åG3ÅÂÌ[ógI'µ9èDB-RXnUí©BMyýù·ãÿÒVIüvÏÁ/†…Ê‘wÊ‘ K/GcP@A ä§3}-PŒ¡Ã†M¬¥#MHŒqð‰öêÁCÞ;Í»gAF¯’/_‹üèr-úñS¶•ÖÍÁF5 )>eœ;”gH'¢àø4W(O¡„ÇByN¢I±XTßÝdÕ«m²dPeÁA°[&œ2¶4\\ÈjZß±š–¯Y Ô¸ÐÙ¹ýÖb¶&¼|±OÃûÞà‹}L™·_Œ[|¹ï‡Ëæã~ƒ@ &ÃcòÁÁ,}b6ämèdü·^(3ÝÓ™é¾gæR2s¼K¿|fÞÇ÷ÿ›™N|K™ù l¢cÆ ÒU¾Œ‰4Á$ʹ¿‡£‡Ò[Ý_“îÚ ®èè2 ¥ÿyz:èWZèÒP#y > stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 330 0 obj << /Length 2347 /Filter /FlateDecode >> stream xÚíZ[oãÆ~÷¯ 6} €%Å™áµhœnœlÐ&]Ç@’  ©‘Ä,Ery±«ßsR¤¬²³Ú-Ú€8—Ã9gÎõ›¡=WÂò&¿ÍfÖåßÛ¯¯< &¬¯¯¾¼»ZÞ„ÂJÜ$”¡u·¶ÏciE¾pýÄ·îVÖö›|½^ÏÖ.»<-ŽŒb»kҲ͚¼î¸ß·)m’òXZ®Î'~w÷×á-à!{ßê–Gò’Ÿ·ß];­þÀǼۚշf‰7·oÿöÃ0_§ÙBzöû§Ÿï¾½òÎד›øØ=üåñà³(¿º»úp}øƒºCKie»+÷eàŠ$²B0‚H¬F[ë«wÏæü ^‚2Žbèú*_!¦<¼Ü¼ÍMO¢û%Êõ¡Æ¡Æýê¢êþÞTuÕtyU¶Ï6á¹”Àê'/ðV¯/ÈÁ =iotIŽh ṨE€r"Þì?iÂw£8´œÉx¾º´T^У«jAÅ®Œ“sD;l'q…›Ë+¹©zÞ‰¯@Ég‰õ6yz_èË«úe B=¥< ¼¢Ý¿ºd¨\Ð€Ž”"‚l# 3‡4ðL7ëöõ-›üþ¾*qû¯.œûÄs×§*†³ô#Ë›(œ¤sG)›Ž€1%Ù*_|Á™æ/UÕ¬ò2í4÷Û}Ûé·Ó¢ÑéjϺÑ- J¸ô|ûzomxªÔÜÈN.öš;Û<Ûšf^ä-žñ®p.T£ë"ÍÌ"„+°¡ÿ•·ÝÈ´*µ{A ñ9k7€“š¸‰>¥26ùpÕÙó¢˜4ijxÏ ,ßîbëM¸åÝ7ǧëÁn° ¼ F—B‚–¤:=² œA2g"C ¨W”1äÊúžï*X‘̸ðÛî£È1*”RöÝ\Ó~D¤Y9m—n ítÛÍØ-o5Û¾t Ø “´ o-oT4%ö]bÏtîú࣒€k0´BÏ a¯¸=EÝHUè]p³vÒ¢×-šÁ‰  Æ=ì ¶5wúV›5SÑÉB„æÂ®ûÎp¬x#£Ì12Ï29éÇyÌ[XÜÂûû6o¹÷£ ­—™Ã–3uÃÀϸ,!vu¡wFp#ÈÏø4¢RxIl?M¨œš[ZóÇÛÇãÇè_F‰ë‰ÀR‘€=$ü—‰+…†§ àÿ%Ò=ØÈR†>°TÀRL r{ä§3׃<.ãxp=8Y½‡7 »ú‰gg}ƒÃbo¬ù.;/HÑHe4½[ÿ{ÌëH,þÁܶ]W·\.yy7«vKØP÷ý.ÏÚ剭Á+PJ"Ú×èrʳkrõ*7Ρ8? ìy–ª¦}·­p¢iy Z.ÏQ‰t=?¶T¸1øÊ'ðd)aRÁ©4öÂs=GÆn$ÂÁsÐe‚ÀFM75©RS]¥\¡dä†BέËi¨¢£>%:p®R;&•IÊD+nÒÝaÚ·ÓÕ/}K†•³¼‡½UÅI®eÒ²ê ‰V=ä+mxÔfˆ9á œ¸ysˬ*°0òwM…‚ø¡‘í¶ê Ó³,Q¡`zv ¼„jûàÐ àç—ß8ŸVžšÖrè¥l¦e&!Ugx®t‡zÌ:î"ó²Ñ4wT0 aÛîë! 5–ì²*$d~‚ˆŒŽÛ|Sæ¨,ÀT6PþEgq~i_ò*¬j åòâÍF±³î¨™˜tœW£$4>ú‘±Nœ`x„…±qÐvtŠêÁÃ/ÐßLuŠÛ¤¤iØK¬l³ÜÓ4…KŒˆ½qoÔ­=4"r‚=pn¡Aƒ·ŽLqó¯n¼EÄ}p" ¾‰Q2Œ^ün ne|_çBJŽÁ}:<Á|p$ByG? d»"-uàÝufENˆ¡Q>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream xÚ+ä2T0BC]SJÎåÒ÷Ì5TpÉç äTßê endstream endobj 333 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DSdmLRT_plotProportions-3.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 334 0 R /BBox [ 0 0 1008 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 335 0 R /F3 336 0 R >> /ExtGState << /GS1 337 0 R /GS257 338 0 R /GS258 339 0 R >> /ColorSpace << /sRGB 340 0 R >> >> /Length 1237 /Filter /FlateDecode >> stream xœ½XKo7¾ï¯àÑjšïÇ!»±·)šJ@A†£¤6¼¶+)h~‡»$—Ü¥7¢¤ú JÜå73ßÌ3E7ˆ¢ôwó±ÿ ‚ éJˆqß’÷µ^¡?ÑSs¾ùãúÝm aQ2nîÂëËEáõâò7÷T£šOŸA_ŠnàóÐÐN߇fFwƒ.¢‰Â`ÉTXRd˜ÁÜ"ë˜ÜÑÆ9|ƒ¾¶Œ¡tt–|à@FzáT)¬j£¶4Ì›…_ÀŒu ã?J±Nø¹[;Ñ+$ÒÑöóD!%É?p ÄȰÀÏݦÒ{¬ S¡H°HÁZkã?ML9JÀõ¿] ¨!˜G[©1˜iˆ“ ]È@ˆ°Iø"Jc®Šac"J ê´( £1*CAœ˜( ‹"Êv•”9JbA¢…sâaÔ›(¬Adb"øXG˜ÑXÛ™&? )ŒQå<´ë¼=²R‡1Áq&±ÜŒÄ†FXÉýâ¾Î݋̬û#Jab v©œu@ûi4RL™ó€1ŠEŒµaΫsþ÷0»šF˜2à°Yÿ˜fήY 1ëþ³k3pƒ`Ož_/˜ÔèÛæ l·Ç=ï%Æ=Ÿkx ë}À›¿F:JärL;‘™“:|2Žu”ýžcÚ‰Ì<.Q‡ß'S¥”È1íDfž2ƒŽ~ Ou”²5Ç´™y6':ºÃ¥Â>Ê1íDf¾Ïý±7ÕQÚá9¦ÈÌO€D‡Ÿ{´×À:ÃX.èóÕuªxÕçbÙS5ÎXÝáÐ#®0c×\A5D˯Psc;Ñ÷ÝBÈ%²Ö•ãe‹NàÕ)Z>4ï—–]ÀŒ1ÌZÔ¢¹ƒnÐiðvÒƒüØí“¤?ˆBKu]ÁïÞÇŽ k†÷±!Èú÷~×°…Lh>8Özh>úüJ{ÿ>kERc÷Ê¡$zgIP\j}@]$/—¿–òà¸ëà䇓ØÃùyœûìâå“äD>¿â>%Å(%»¹à[… À]F~:¹^ŸÂQŠNž¿¿lN?£åMjÔ^Šmg‰p´JWc9¶²Wý~³½oo·«/è%ñò ¿ÎÜÏíýóÓÔ W’nlaù` !3ix ˜¦`sj94 ûÑfsþ6–»˜ fÝ!ßѾ:EÐMž¬n·ß׫)ÅÝéxÑpÖà£13~ÌÙ©”Ї±`²)éâű õ±VPæHÈßJÊ¥šì-ä¾…«£|°ÀÊš dw¦\ju‚…º;6+),°†2œðîyåR,t%ƒÖR>X` e…˜ÕQ.7æÁB®°àu” °†25îºU»— ÷`!…£¶úø:X` eB»[ê^‰]#ƒ… ÐT_‡¬nŸÐªovÿ}Vw-=z‡˜bì'ôûzuwcѾÞë7ÿÈf>n endstream endobj 342 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 345 0 obj << /Length 2317 /Filter /FlateDecode >> stream xÚíÛrã¶õ]_ÁÙ$3ÒÄÂA3íƒÛ›m·ib«ÍÃ&Ó¡EHæ†"’²×}È·÷àB]èK(íBw<‹xHç~ä"°ã®}Ó¦þ¼|Ós¸á¼éýmÔ{}ác'D¡O|g4q˜‹‚€8ÜÃÈ =g;ïûgÉd2Àn_"«’( úUeå¸Hæ•n/ÊHMC ªû¢,nüÓè]ýŒYÿ¾¥îI2}½üátXŠßuã.©nÌÛoÌ+Î.ßþóª¾?ÆâöÛé×Ñß{n{<¡Ð“ÍÕ§‚lvny>êýÞƒ6üáÝ ·Ç³žì÷C8äá.ò©SgÒûi«É´_ s‰³þ© ›—†U¸ïpÊ`•"¾ù8 4«|õÕ`軤Z–É4ÓßW´¦âV¤ºw~¥ I_’›«$¤ü2γIRÌ¢*ÉÍ[Ê*šnO¾¶ dmi®3ÄZL¯jþÝút¶œƒ¢´¼«þ Çy¯ô—áÖ« xM†ð‰ ÓÍÎÕ0ß"ùh g€˜_\æZ\E¿å"­JÛKˆO,Ž H¡ßò ÝqŸð‡«ÎÕ¯&"ª…xe™ ø3ÈXÿk›“ÔÚË:Ûdãü¹&À¾‘R-±Z€«ð±qK{ Ô°E~—E3a]mØ›Ï${²9/ûEc¥Æ6ˆC8Ôõü;Ù×¢ý_uÃC<ðAæWýI¼õ¤ÚzÔ wzHAÕ¸!q†„¢oúÓß0}Ñp’§"ÃõÈJ;}óy’Mä)W‰œÕ‹¾zÑWÇ­¯ÞŸØæ¬ñÑ^íi±¤ƒÒŠ„Qä·Ô–V wbýjååxǰdÉ«¿Èµ±A*-s9ú¨[ùõ16†HåþT¦G“¼˜=öàð.)E ¥÷eRÈpéuüëúCwL×õÇ©gÚÅÑWãBˆÌ¾ÝÒœ¨G³n‹?)_¸ëÚÖÇ´¸Â1NéQÖÓøÃ¢¬DÜù„ÅÅ黫óc´c­Q´£¾#ë™ÑvJÅ´qho-8êªÎþŒž–™Èª.«ocï÷ÃfKr[Ÿ™¨nò¸ûÁT\-^uT­›ãiGéü&ê¼qq‘˺›D OEu•L³d’Œ£¬z†Àz6e© ¬gÿŸ\§}·ûÓÙz0w3Ø›Gq‡Ì)Фö:ü®'ØU¬¡¼ˆEÑyu7ºü÷ù`‚L¤“géý•ÝîìÝ$݈(¶¾G Šr§…Y(â2Õ|Ë+ráT¥ùX ýBëç¿¥óc¡ƒ=D=_'=‚à•†( ¨F,CT¯÷³Œü‡÷t}!ݬ/ôûU!ëöÔæÖàú¦vÉÚÁ©Ð0ˤ¡j]‹êNÕ)ŠÌ¼B5sýØ8ÏâD&GJÉÕ«Ã…”èÕ­ £ñ8_À\²©n«éåE£Úð:ªÆæaV0®·’ b^_P¾V])“ŽÐ‚>5àH¾‰Ú/Ä´e©ŠÝ(ñú“"`Cî„ÃüIÐ/~ÓÉlž 6ŠØt¨Óë FׯÁÜG\"Ûpš²H¸1!¢X”¦j¬»RÏBVåÉ! 6tc¢§c êTÈ>3ÿÅ¥Tâ)T …ñM]ú=û°pxMMÂ;ùò|‘Ɔ¢òÒ7Ä6x÷ûir­æ©Ï{Ó©Z÷úùJ÷••ž¬0¯KVÉ87 œæÕÈ×c·jÉ%Îæ¥Þf³Î“ :ÀgÖežØóËC ‡’•ºÊs—ÉéBÞõü¶‘Fd(iíÝ•IšFzœª]€[GqTE_¿K®‹¨¸ÝK?ÃçØeˆÀ †±Ð” Óì®é"æZ ‡”2P +;0ϯÙÂÛs÷5ÝE d¾”ÑÌ|‹ \,¤îÀýD²Èhlnëf~+ä¼p=/x@šw 'Š…A!ÍKë©T7Q¥¿)á4wo¢Ûz>¹ÏÆé"Ö›IÍMr%5Œ=ddÊ<ÅÈ|‘%à­†H¢ëTh(Y-ïÈwЧ© <í9Tª´5¦FDìvxFd`‹(Á+›t7ø”µ€(ú!ÙçZ`Dié7ÖºýY±â ʤ–ª2Í {hfðÉ Ô ï?@`ˆ|ØA Q†­ŒggWŸÎ ”¢]Ÿ‹‘@?l.tîsì@òùÒz×{¯’!¤÷ ·_å÷X€*ó2QßQœ2Y¤©î˜åJÆð„®sÍ8öfòM«=J©ô£ª(ÉJÝÒºŒzKú„1ÿèHO[ì=8l}Pßîi‹CB>ä:s‚ƒ„aú¼‹ÀŸpøR ƒî*IwRGR¸øÙ3Ñå wELÄCÖ†ZI¼¯Mé5f¥âÑ'˜‰oL¯ö7¾¦ôJaÿà!‹i¨!¡b¸á#O‹|1?9&kÃc!â2/`“†³f˜“êhjË`,] ¾öKy¹¾M¼xô¤ßˆg-—/`"BèFž2î’½Ïz¢“µTi¬ò²ƒ½Q¿•ðè9Zß]2Û!p!ã(j‹Ú«ÜI4w­%œ#>^{µ¸.E¥óÂëç–#}¹M¦Ü6­Å"ËtÂF!<ùß¡Ž/TÍlÉ01yoó@ñ^ŽïÅäsžÙû&ɾ±õeÙ;_ÓuÃö'£Ì.iaV²s¢¥a%í˜QÿžªºHÒJ‡;-Õ-û¯±e_xì—÷é} å.EKK¤w,$µzd%S!Âž×æñqÞýŠÞéÊéš7|‚-±ÆÆYÔÖ‘ßÁ´£Ü!÷©öõ@KMâ!Ê‚­ðÌ@¸_†Zàà±? ­÷ ‚Ä#Kl 2«_¾²üLâ\ê‰(à Ž[f•û‚rJgy,Rtœ¿sõX6óëÜ.ÛOÑï[ë¿Y°–Ç|ö„jå¤À­ë|ËÙÎ]uñ–άçùÖR–Sè„È’ïPjÎÊšŒk ëPéʾàÀõfßftÅ\ïO¬„ügƒ‡2dr­·‘~<}{y~¶*˜±T˜ÜøQÈCgȤț_ŽÄÛÆç£ÞÿŽ"5 endstream endobj 350 0 obj << /Length 1024 /Filter /FlateDecode >> stream xÚÍÙŽÛ6ðÝ_¡nú`ÃûÚ‡¦É-Ú"ÙºOiPhmÙ+¬-9¢Œ`ÿ¾#’ò¡¬mÙ‰ÛÏÎÉj0¢‚Dx§-ç{SßÞ½à6¢wƒ×ãÁ«[I"ƒŒ¤2Ï"‘Ö4Rœ nx4žF‡o²ÙlDð0-ӼʒÅ(¦J«2Éí¤ÌV•Ÿ¯mRÍGq ê×’|ÚøÃø h1|²©õ+Yîû»¿~‰múÙO¾dÕC8ý!ñæî·?ÿnöWÉdDñðqÒ§ñïÜ]OÈðzºmd{ñ,È·ãÁçÌáOuS†‘R*š,õ:§£".Ò`…2fƒgqÓUBï`pd¦µ†8Œ¤–H‰à/^Œb‰é@'©ë9%|ˆA«s P,p‰},z‹ÃbañéÄ¡8„u”–ì†%÷±ÔE:Lªªü üò&±6›ç709ÊÜGòÉðÖtΈLŠ®¬­ìI:‡p~œ—ÅzÕ‰C‰ª2Mª%„˜›껄‹Ev_&å“Ã%L#eDDVáÔÿÜGJK8x»¾HžŠuå6cš\"ÄY¡¦;d}Sw[Ù^ÈW· Ïöf׺ƒcû"Œ ß/“ÇÔ\ëT›§f¸¼GŽ;§­VHxH“+|›uÎÁ.À~ɬ{ÞF’"JôºêÕ¸«„<‹ù×îê>lk]¶õ¨è1¬gÓmžÛ˜AP$¹ê‚¾gØÍ™zþÃ-dÔÛ×óà éàãÝ$©âTIcƒM1æùªçˆj®Ä©ÊFƒL…Q¬)?€: ãÚœ*pl(3ªô¦v!ׂ›cµ±‹Ì15M1BrD”PüT¹c‡²Q̆!†…¸Æx´ZÕû+Ï#ß¿¨×”w[µ].$’LÃÛhHÍDŸÉðÛñà³ÏÙu endstream endobj 354 0 obj << /Length 902 /Filter /FlateDecode >> stream xÚíYßoÛ6~×_A´/öP±ü- Øš9 ҵŒ)OÝ0(2íQDG’Wä¿ï‰”+ÛI†x—dKäñ“îx÷ñx’ f’"²v®ç]w>= ‚t¤ÁÛ÷Š¢'Š)”Î$8ŽŠÅ"(¢/£I1›)éZWm‘•ãEñ¨­³ªÉëbѺþ²É:Ð|vP'˪éÃÁ'éÇÕ] ƒÊÑM£')*w=ýü.lôµë|-Ú‹þéý#&§ÇŸ~[/²|ÌÈèrCÓ釀<ÜO‡i=8(¢\â„QpºÂŒ'(¿ ®,U‘E¬5íÐê¾^ðöø*AœÀAp":%ÃÙêßZKІ±Ä XD¼ÓÞ&1M"$h t‘¨Öh¶£1 ‚%ahýl‘ÛB@~wÄ*dáZÌì*ŠŠpÒÁa%BLjcÌEâVÑë×ãP6z_´®±¨ÍÂÔmaªÆ-au³5»L€BO9“¦lWÅÖ Ý¨=@‚¾Ø¹üî<…8Š¡+À…S&r[8h˜^uŽóå'pÆïD’){ãQ…›‡nŠyå[ËOã-eˆ à"$ >Ž\øÿ´G±^ òÙ²,ý;â/]Ÿ›Fû÷ÄÎĤªgŸc¢#æ–pP@=“’î½F·’SH%Çðƒ9ûžžM0—qGÙç­¬<Á2bhÂbl‹jîhf÷ß®1ùä®WfªKŒ÷Ï.!ã`bo))$5·-¨õ¼ÖMIÕõ³¤Ù,¿øl!·Íè4¤Æ\ºÁœÆÒµ›jÚxQ»œ|Ɖ=ù8Éù~qzÔjäÞ)ꦯ-f¦îWdzö_ò9ÖuÏ¿ºÈž=½Õu‹n#á àÕ¼6ËÅ/“W>òRßü_ëæã6¦ê_³o[&»ˤ,QO«´ù9+óe™ Ñ*‹K]ÆLûÆLos í¦-òÆgð6}ÆtHÄK5Èž ¹ÿ®ŒÅ ·wá6ߟÛ^­ûî(]׸êýM_þ“Ýχ=w¬e­<®Z]çzÑZc{.ž×Y}ã ŒŽ•´Ÿ•Ô=Ÿ•zy™Ý˜eûë»ãÓÉ…ÀëB‚•¤›ï +²uʳWʈ #bo"w£Ù6šn Õ&šß‰öóݺÿ«eë!V2ð~24Ù‘ ‡ið WdŠN endstream endobj 347 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/home/biocbuild/bbs-3.20-bioc/tmpdir/RtmpkSJXss/Rbuild3d52d121381e66/DRIMSeq/vignettes/figure/DRIMSeq_batch-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 357 0 R /BBox [0 0 494 489] /Resources << /XObject << /Im1 358 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream xÚ+ä2T0BC]SJÎåÒ÷Ì5TpÉç äTßê endstream endobj 358 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DRIMSeq_batch-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 359 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text/ImageC] /Font << /F2 360 0 R /F3 361 0 R >> /ExtGState << /GS1 362 0 R /GS2 363 0 R /GS257 364 0 R /GS258 365 0 R >> /XObject << /Im0 366 0 R >> /ColorSpace << /sRGB 367 0 R >> >> /Length 2808 /Filter /FlateDecode >> stream xœ­ZËŽ\·Ý÷Wp)-Lñyy¹•íÎ …á…ÓÜR¬‰‘|~N½Hv»ci¬†1W>õb‘,‹dG÷ÚE÷ÖýrøVÿ^<þíÕKw|W JË'cJJ6tdéâk˜üêó>u±m‘VJô½M]KŸ¶‰´¶­|õKuW¿‡—gc³‡ýN[÷€>6—\‡L“© 1±ï§•Â+“оmÚ¥ r6CG–ÆÿæÉçÙºŠØ¶I3%[–cÝäã6m3:ª'ܶòÕ/Õ]ý¾‰ºuô2ï߆¼x>—\‰ŒÀ Èi]’à¤l¤Ô|Ü0h?±·¹{„ŸñK elºŠÄ¶ôM)’çT·6Êâf[Ø–¶¯žªîê7„s©+bt.P;­”D¦ uÉ=°ï>TCG–îÌP~ç]Ät ±m–6Jà&T7u­Él :ª'Ô¶ñÕ/Õ]ý¾E|g4–ÕW[éJÙhk"Ôu䯽 ÉjDœí“Ÿ)F‡®"¶mÒL)¼LM7ûÚ§mFGõ„ÛV¾ú¥º«ß—#‘6ÊsyTrÞùH\ru$˜ä&$IL ‚oJK"a2Ò–©8PÄÞnXŸ}ò«ßÛÔUĶEZ)Ø…ÃÐÅôæi[HKÛÆW¿Twõû+=£¬ÂS°U £4¿!õ¢2È•C:94ÊЊØ[ì’5L~§ì>t±m‘VJå2].Œ†mF"­m+_ýRÝÕï›¬Ž¾¹\:-àÓBÁî‹|ž{£A'ÔÑ7”4Ù‚ØÛÞe÷bJ ¶vÕ5$¶9‹¥Ñô›.ü1ۂĶ´m|õTuW¿/G¢EšïœhîkÛ.Fâ’«#Ý •è“æ £$qºRÝ–°í`g£"U…"öŽ¡\üÝc¨‡®"¶-ÒJ ´³™.6î°Ø$ÒÒ¶ñÕ/Õ]ý–쟰#@0Eì•û2( DÚM “(€vRUtdéNnŸêC×Ûfi£4ŸÛÐíFf[Ø–¶¯~©îê÷-r^DjÝ»£sŒLª U±©•tCuÖ°ªÞ§äjÆÅq# =Ù¶~#$ aÓC°« DTÚT®x£z‹¯¿YÜ–oäD–.÷W š)S§˜lqJ–Z¨Ø'Ôå¬ÉÓ˜mq¤¢´M>&®L]Ei.n¥Ð‘tê.ÖÌv°Å=ÚV¾ú¥º«ß7Is SR\Ä¡2hÂ7JçEÔ0tÞeorÛ}†x¶Î%‹ò÷@sjº†Ø6K¥Ñ~oº8¡*2ۂĶ´m|õKuW¿o±õ¡UÍXoRía§¥®Q™8Ï *ëf€›.²c­Ã¶ £zBm_üRÝ3¿åd¨;OMã{P"ŨnS ¾f¹ Û“!»ß¢¤l|>Ë ]EÁâÛ(ð'µ¡ _s¶-[äà‹_¦»ú}‹ÃQê<”°õh8(™¶óÔyºè¸–éÒ+SòQ$óT(ã~¥4t%KŒƒ©^ºvõa;Øq´­|õKuW¿mV#3Ê6_3˜’|“׌ áeµÉ&ˆŠlžp||”0ûÔUĶí5ƒ)”.L7öN[ÚVd¯[|õKuW¿mVeÖffžùÙ^×\ᜇÏ|ìÔ§0lˆ““³§0Á?;w·ØNlu~¯¿ÿþ{ìÝxy~ÊßË{ ÜïÁê@O¹óËü' ¤»ƒ=~¼?KncLO,Ø6ZS÷'÷ þÜÝ¿=|}Ï­|Š2­g¤]ä©ÚTî#K‹öödm$oicëzªv–³·hÓ¿Й^^Ì?>å—/æT_åñx»>åò›%sÇÛíÙSîä§Û³—Ü…o/·g¹“?nÏÞq‰ÿ©w“¡°WaNú§ó7ãõØøë“ñúD¬ü³ãõ…XùgÆë±òÏÞ‹×Á¸áêÂiß+èhÿä8æsíú”¯|<´óSÚ¦ìϵŸÐvÁI®®Úe¶ý9ùí2›Ë due¿pe‡øú¯Ó6O¾{ö—÷?bå¿ãN?¼sϱºgÿýׇ‡ÇÇŸÞ¿{þ½»½ºù‡\YÚÿbq+ò-]ÊuIYÃ4ü‰ÛÂ(][¤~^ÿ‰²-œ„° Ñ$è'åù‰ÐçMÃÕˆ¨ÕN#¹Ë<|óëé¨óo0Á={øáß¿b~3¿ ‰À–‹r_ƒèÚ+½òOÜ=iå i‹1þvEüþ§ä>÷Õû÷Ïq×ãè‚ñÿæ8rq§Ë«®IÊ0»,Y¬ÒQ{J9%ºñO‰ëù)axHÐK]$žØ%è8$ OOg_j_úÒóÌÈ£/"¡xJ,}a ËÄì‹H(žK_XÂð"1û"ЧÄ iKrå"¤SÛ)¦ù5’óóÕ y]™~ÞVåüéʉ„~´6•Ë”éîóLùzb¿ªLw[Z•¯WlוqæyUnŸ“îøïð?_6À endstream endobj 366 0 obj << /Type /XObject /Subtype /Image /Width 300 /Height 1 /ColorSpace 367 0 R /BitsPerComponent 8 /Length 832 /Interpolate true /Filter /FlateDecode >> stream xœ‡7ÔqðÆãU¼”‘-‰D!3޳׹éÜÞ£¢=T*{¦DCY‰ì.tö>ÎæîÜô7ôýù¼?Æ×Àùêž:Œ§Šà)£xŠžÁ•#¹;h® Ë•â¸R'´–B[¾à›¿â›À2ü²øÆòø† h}e|Ý7Üw° W[…«©ÆV×@«j±ßj±•ß1•u˜Š:Ly=¦¬]Ö€þÚ€þÒˆ.mD•þ@}nB}jB}l‘Z%-ÈâV0î}[\Q[Ü»Ÿ âm;¢°ñæ[Ð›ß›× ÆäþŽÉÙ›ÝÕÙ Íè‰Jï‰Jë…¦öF¾î‹|öG¾ìH€¾ˆxþ'ü(O„?„=ù }<öh0|8ú`(äþ0ôÞpÈÝÁw@ap’08QOßß º9 åñƹ{9ã068cMÀ˜ŒI(}ÒŸ6¥NùS¦o÷’füˆ3~pÖ7aÖõ‰ŸóÁÍù`ç¼±óÞ˜yo4¸à…ZðB.xʼnvL}ô¨ZWW£££9rXsèF[[£¥µ{ðàîý»ûöý „½Ô endstream endobj 369 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 374 0 obj << /Length 1091 /Filter /FlateDecode >> stream xÚÕ]oÛ6ð]¿Bh÷ £ÃoRÀöÐ"IÑ¡+šÔØKV Š%;Ú\É‘äyÙo߉¤lGK3(Ç(ñxä}òxGcD ñN[/îtm{ñ6À! „oƒ7ÓàøL’0A‰¤2œÎC‘Ö4Tœ žðpš…—ÑI1ŸOŽò:/Û"]NbªtÔÖiÙÌêbÕÚþºI;¤Å$îP-,-³ñÈçÓ÷ý, ADtÛä…¥}_|x7ùí|+Úk·úµ[âäâÝoŸúñU:›Pý}‡Òç鯯'”ð®»m æ¸æé4¸  éÕ-@Ý’pö%èàœ D¡–a‡óà|/fÆ hìiç C¾¤–H ç/_Nb‰iÄá%)(“bŽ#ÜéŽ Ä]l1Ä&a˽°Õ½œìeÙñ˜Zièr–@K¨°˜C `fA“ŒYf¯ó4óƬÿû‹=Z˜Ë¨Î›õ²m|‹QhÉÑþ’騵¬[I@CƸ ó,ñè£9x`·]8%>/ProcSet [ /PDF ] >> /Length 35 /Filter /FlateDecode >> stream xÚ+ä2T0BC]S]K…ä\.}Ï\C—|®@.Uî endstream endobj 377 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DRIMSeq_batch-2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 378 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 379 0 R /F3 380 0 R >> /ExtGState << >> /ColorSpace << /sRGB 381 0 R >> >> /Length 1177 /Filter /FlateDecode >> stream xœ­XMoÜ6½ëWðhÂ’Ãá×ÕAÀ@‹¶6ÚCCánFl ÙEÿ}%í’Úø%^¤VëÑâÌ›'rÞzsm¼¹7§ßÖÏOûßß\™»ýä­sÎŒ×ýÝãê~yó„ûæå/ín6ÿLoßgþž¼¹Æç~òÌÏÓü5_¢ÓáëÓn2W‡L(¶£Ñ:ŵÚXñ¬Œ3šÇï…ø­ù“yßSp¶Š˜ñÚRp6†ž‚;Iay¸oK6“Öb£ìÓÍ:@‚Úàú€Õî‚&›µXí> Eî‡%V» ð^¬‹k†Gs׈O6ºã€ƒÙA¾ý ³P‰Vûf°-ôrŠ6¥ñböŒ|.ÖÕ´Å@«®Ýï -ö€‰“gÇd±Û Säïj á&µ’;d«9@–ŠÍ¡C¶šd9X_:d«9@–³Mý ³@2ýCÅ5xÙº„º`¥ó#QN‰+WÓü~ ^wx_à+íÆà ¹“<‹ ‰LÌ©QœL,ÎfO&µ¥2_mŒxÚWCˈ,Xñ¿‰Þy›XþÞE› uV[[Ó{ÜR6ÕT‡9E¬2 ¼$›>8[( >€7´(>T+ 6P4ÛȈà£o›sFì‰4¢ä¬§-¯s«‘9ÁÛ¨3ÙâiD`n¥•)Ñz ¸( o¤üy³c Ø[XaÄ¥¶k'Ža0È«{#ƒAÀÞÌ #`oe0HðÖ3ä Œ î*EÜM¬.îPÄ©ÇÞR‰Éz ¨( n¤eYNâu+§£ o…‚æ*ÌM´*`n¦ €¹•p®zBq!€¸‘UGžM „Þºa íX%S%[a(WYYˆiD n¦(€¸•¢ 8š) ®Tš(˜«´.`n¢(€¹…¢*o$Ö^†93ï$˜) `.m%˜K{‰P•7•°²´Žv æÒnBÁ\ÚM(˜[êëI31TÁ\ÚM(˜K» si7¡`n¡(¨;i&6NÎ4 0—ö æÒ^Bc⽄&wÒKlœ‘· ân[‰<—bõ‚¹´—¸ºç¢8×Yþ†ø0·ï¡@Ž‚t¾,¶¢¯ÄF®É·¯ÛsÍùónÿyo–¿Ks{?½jO—yf¿>-¿-HoŽÒûœ’;Ê`g®)Ø~Ýf™N²œm™AG4ÕÏ9ºCVíÉÏ™ÚZ5tMmn8w®@IàeksÓ¹sN.Yb®‡¹Û/fiÿýÒ|%퇞áa#igý7{v#i»ÿ(a7жû v#h›ÿ¹…ÿ¡W],Ëo£fEòêÞhæQ#¯þd%òêß(æQ!¯þ`!øan·.‚d­7š¹›Ï§™Çˆskœ.ñ–†&5ÆéñŒÕC*ÛÕó«kB[<®î‡ÜÏßXžÞ>ÃA9‰`¶kC‡ÕÖµ"€·¿¾øãÒàܽøë×Ýþò¹½ƒ9cÁa•ÃâøWÛº©5*ó’¯?í>~Ù=Þ]lÿ~µæÿö™þÉö?  endstream endobj 383 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 390 0 obj << /Length 2176 /Filter /FlateDecode >> stream xÚµkoÛ6ð{~…>*@-‹¢Ö¾õ‘d¶¢KÜ CÛ´DÛZdÉ%§ù÷»iÙž;íŠñÝñHï} ƒ(^xð¿[¡üÿîæ"ô`Á»¹x5¿˜^§Â˃͹Ÿ¯§Ày5¿ þ„'dä‘¥§Aå^±¹ø|Äa&ÄqÒ’Ûg ÓÛÞ›öâwøs&Ýÿa ÷&a2Ëà7KÃ,c±Î/pmr {Kî‰,ˆD¸KœÎ‚™°î’²’ÿy¼‘‹Øï‡#ïx2•õŒG4nÛuÿácÊ=çñX„oºì4j|ÿNÌbÔŇO¡WÂÒ/°Eæ3ï‘7^%Èá ¯öîÌBº“ÙA¤åÌ GÆII«º[ðóXäìÐÄ â7+»D AÀ)ä ±€·G3ßò¬»¹où·*1Ž—OŒ­t£ûª`d§.£Ìï*Øc˜ò1LÂ5D>ú‹j¢êZ×°T O›äIÊòß¿}g`ƒÞ_¡ðæD@9:Íde „¢R½.™ƒƒ—‹µjVøˆ`àãò‘«‡àr2ƒ¿ »¯·wŒRzhìÙ({y$yÂ’^ ¥tŠFðóÚ¨zÕW;KæŠøb¿Æ§dð” ¨/òVRD°¿+ r)­•K r<]Îb´*3²Y†6“©d›µC]2ZW‹hBúÕHc§ÍŒ´Yµar»dF½Ó݃ {é¹VÑ @¡ <áçod?+£ŠKáÛª9§DµÝ’Þ[…‘žãc²Ü_¤šЦðéz@ŠÖôõo*ÚÍvèé5¤'"R)‘¶ào¯»a ‡l†º¯¶µv ¦¯š•;“$ëtÇç¤ß”ºc#Rü!Ú6[Üâ>ñïAxr7D9öË ¯ ¡qûÇPJÀíæ#‹G‹GÅÓÈä {w ~5vǶVÅyW&å‰}DûEÝÍ43t];4%ë%·~ h~Ê N]¡CØÑj’'wÚÇßE È_äÚ:Ç9.£ïÈ—Ÿ{ ?˜Ý»t*%?r< `Ón¬Z:¨ö~ãÔ:lMßiµa®ýÖ’œá±9\$EŒ¦wñýu„KfÈ80ïOâ(H"o"£@F®dâ.šIûW_Ô†¢ e©zutÇI9²R  H›Íç—3‰ÚóÈ/õ¦E}%‘ m‰‚[š‘6–fÄlJG–5™wzȃ£dαÂr—i{7b<- ’$s|ÐÖ=@ܼÀ\í3'^3+½• %¦˜v3ŠŒ^6‰âÌ1;v¶›«÷àƒ_¾¹½~H‰6™ýMŒ„¶}ü6£øÙ‘þð .OýG(° (J¹ü„¯Ãn—ºYD ÙÒ0²ä7ayxÚl×í¢V¦o«’i…®k»Z5¼%¶AÝése»]ô 8K,¨2ôçdÚ4 ÀBÚîA7%Ä­ŽÂÈÁßÞmQ-TA¦ÙUå jc öתÖ¨Ê)O'' èÏ%†ŒrÏÌÇ&áS™³ðHÞ+ N9Ø’T–rd\$œCbí"é;¦¢[·”†ÚíPsý ‚ìõÕ»Ÿ™+ÿë«÷Xö_œúºj°:G’Y¯oß2+Q^uU_™õ¸|óêî`™CѪ©F–ùý-7[HàQ €¿8jñuÃBÜÝÝrGB”?mŽG˜â£) pî|P ½ùÜ«ðhýeË¥©à~N¢6n!¥Ó'B×õð嵂®z–Ð6‹ÒÖwÐézr{¨=EíTU«æ3D±"ã/û Ëñ»ø•Ç&>#9GÄÂT½þ®¸ãC_Ô÷ÛŸ¦ÓÇÇÇ@/ª@Áð0u ý¦6Ó•vª¬Ì<'„2ÓÓ„€ù Lm¡‚Sm…èð×ÒÒRv"b€Š'AªÍ}ÕPäøXG=Úçã¡f<¤Á6ÑÉJmEÀ¶^M;]kCýTDÁºßÔ§Ï?ß-ãì B-¢ØáïF=8W¦–‚C ïªÌ5½f¬š;x6¶³áX8p•C[wK¾ccoXÛC©¥ØÔ 1‡F÷öBLƒø{0!NMÒ¹f™>£i¢àá£îì”+§q•Ec\Á²—ÎC$*&b˜æ‚წlã/‹Ü°ËûVÙðíí^ÐöÜ;’»Æ:¯¦l7õcLm¥¶»dÐ&€Š5€-·nˆCë)òÀeä¹8ùÄÃÄ“ s Ä*ãFKˆ¿U;X2ÝrüÐ66÷‰—¢rÔ }·ˆþ=é'ÞwôÝ=NÒ •0’@‡Û©0: ¯æÿ©Qó endstream endobj 371 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/home/biocbuild/bbs-3.20-bioc/tmpdir/RtmpkSJXss/Rbuild3d52d121381e66/DRIMSeq/vignettes/figure/DRIMSeq_batch_plotProportions-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 392 0 R /BBox [0 0 992 491] /Resources << /XObject << /Im1 393 0 R >>/ProcSet [ /PDF ] >> /Length 35 /Filter /FlateDecode >> stream xÚ+ä2T0BC]S] …ä\.}Ï\C—|®@.U í endstream endobj 393 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DRIMSeq_batch_plotProportions-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 394 0 R /BBox [ 0 0 1008 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 395 0 R /F3 396 0 R >> /ExtGState << /GS1 397 0 R /GS2 398 0 R /GS257 399 0 R /GS258 400 0 R >> /ColorSpace << /sRGB 401 0 R >> >> /Length 3075 /Filter /FlateDecode >> stream xœÍZI\7¾×¯xG¿h_s;ŽOdÒ Ì!È!p:‹Q^¦ÛÁÌÏŸ”¨åUuu—Ûb «J&%ò#)Rzzy¹èåõòŸÝ¿êß7?¼xº¼ºÙéU)µŒŸ7¯ÞVò³‹#ä‹gßÑÿÆå¿»ZÔòËN//ñ÷z§–owüÅZ©Dß^9úº¾Ú-Oe ‹K«7‹Öiiq_j±Æ­1‚qù÷òö®Ež°[~íZ¨5³ŒŸ¤…Z½íZ¨Uz€X·¼Á0®¦÷»‹Ê`l^õÀPÇÁª¼zßêx`ˆyÍ#CÃlçº"kW?®¨Œ‡)»æqEe<0D·ÚaÂ:Vä`ÄqEeÜœö«ê˜’_UPÞÔ¡smÚ…UéÎPLJQÖÛ8êxäqMqà(ãÚ´&Õ9êxäHyvà(ãÃyµ†Ð9êxà€§`ajuÀSA¾c·´Á¬V .xڤů6W§tÆ®ÆÍd½z]É>ò¤#Õx·šPéÆÑ|3C\½ªd çéNRȈŒ`„ŽÿòyC7¤`¡[¥W›6«ÓdÿBGôX euJø PœUΉŸÊ«œÏŒÆÆ"2gvƒW•­_„±‰‘]fZ“_}£ëÀ>7Ò•ä¨ìÙ9g‹Šýª²ìo“x»¦ÐT>ŠrR†4«¡Îé4…u!G0¥‰iu eŸØ;g‹Å¦RŽ…‡+±¨¶á«ºY¼Ìw‹|ñâÂÀº¿ÝÜ¢;èºRk¦—Ï’V£ž7µø¬3k¤> -"IèciŒx¦L/ôß±k8x);&³"IE2!‹Ú7:Âàj;d„@VãH§€Æ¬°ˆ%÷£Y+®2 %ÅF¥çËó@…¼ƒÀT´nM¦ß7ºó%CüÀ^Ðè$æ'ñ™ò_¶«¦}³S:g5±Ýé,º‘w»Æ@2 »Î¼7~¦Òáå!òزÿ dXìsì ‰&Ú­91Ö.tW­hŒ,ŒÍ¨ÑIÆè'ÇÒ‚£Ý¿àŒy™6«‹l^—бÀ4†?†Ngܱh˜štuN¤xÝžŸ©t¬+'»ÕåNg{A.œÂbŸã]K+8m´05é&ôdiŽý.U'3ô)pquó5jÒÒ¹¾Ù7º7äž4ÖäFÎ2ŒçDg2¢ŠdàGhykßèVdEø6:«õ äf¸oŸTxìñŠrÏ^èF±0¦Ôk;¡¦”/aæÌ[Ÿ×œƒcè+û]fè sÓé[è§Ç, ¬„<âˆ\´…|¥·G¡Àyw ùº·§Dn†¯ôòX …Êò¥þh!ohÚ‚ºR%ä‘Ò¡çòµÔh!yÁ=ä+½…|`…§—‚FBÞ`C%–º„¼Q†]x ùZ6µ‡îJ-ä+½…<í?aòµ(j!pLB¾Ò[È® B¾ n8é÷ÏþàŽúü¢wÙíd+@þ–h滚‚“²dwë‚>¶;¨ÓH{mÅ´·…£õ•cì Gk*ÇØ Té„ãÖ¡®JZYÕÐ"ÔUI «z„Ê!M‚p MB]•t ²ª¡K(­M¨C›à‘ûÌP\×ñP\{dXÊ£ŒŽ€¼¥Mç¨ã#bá Z8êx䈼otŽ28Œ—‡†¥ŽG$Œ44,u=¿’fSBd6nk$ÆF²ãÿªâktÌȶ6$a§f«œn}JС*’µ{*Ù¶n… ºÙ6¢Šá@9/Æ ¨uÒç4åå´ßa;hmgDÉ6Ê£LÈŸ© J˜ý”YB׎ÏöžÉ#¨I„c£s5ƒ$ÌU¹ɈµMte‡nt®01™ ÝF'^qµãhs§uxÌ‹¤ì g¯}£[>¦ ±£ÎTÖ%h¸~BæÍµŸÍ´iî0s/•"•ŸÎ2 yU ‘d0ìQ„Sá.tIõcÊ’Fg] 9 Š¡²G@®\}]»Ð39-±ÅN'‘JöR5òN}ég­}£cw TeF8}θ áâ0l-Ÿètl….ØÎÎ3¶°Q±EwnÀVè‚-ºo7ØB.í³ [Ø,…ÛJoØÂ³Ÿ±Ê—œP±(G‚ïØ ]°h-¢Û`ë\©,[üˆfÀ¶Ò¶d½ÁúQ¥Ý°…þÎŽ­Ð[ÄBJlCŽ¡`µMÛJoØî<'lïjr“«]C Ü\íâbi&…îØ%0F+au§ÓY•n‘Ê$Â-«ÒMb݉l,têtØr,gˆ•Îö‚\ôæ‚;Cf¬ÛÑáá"tìÆÜzLFÇ™Bg{iî|ižR nŒ©»áލÑsi˜"Ê>¸ñ½c •Òºt¹ÕƒkYzßèÒå€î‡clÖú©Ò9Â-@yé܈±®ôT;?X¡ƒ¡³.1—ÝÓtI¥sv¶Ô B§=Œ}!úr€Té¥{tÜe5l}*‡J‚m¥7lá¬Êl°EÃ5¸`«3ÅdǶÒÛŒ-.û ¶ŽóxÇÖsžïØVzÀظÁ–”ж´È8`+tÁIA‡ ¶„N,¶(ž´°­ô†- WcglôC›Ð±…þÔµ vBlƒâRsÆ6×=[°Í ë©§âWBÊÓi Ã'ÉqèUb;®|3¿0Uöj¢/H ïK ôþ~ÔðºT§¯G oKuúðvÔð²Ô˜•Îù»Íÿ¶§ŽÅÿlÅÁmpà± Üû%:­ç¨¸úùß×W7[,>jÊaž'Ãôšß+1èÑ™–êõúñBÕë»÷ïðë ýüðÇ»·7c!{r+¼×=`¦›e¤G´³ÉRQ/Ý4”ãÝÓÕœ2oF»‰]Èä@“‘_\¿ûóýyÏСD«L'‘ÏvùsÖá¸Gά3y$ 4|aãY¬ï¯:Mã=Ê!øµ÷; £6{¾‚1±îæ9ð1ª¡7¬¨{zråÖ3{C§,þ{©ô|ÛzÇ'‚çÙöØ9 ØÖûú~Ú9¶=&ð“ÚÖ§òÞ€Ø6X:¤ì¶EkÄï ˆm…>ÚöS†JT´™èéüŒBåÙå7KC÷šÏó«4ß?¿<·ø4 úäFY7Œr[Rê–ßÞâY“Íњi[â”»|{õóÛåêñb‘lÿ÷)ÿwù;ò°¶ùoË÷×W¯þ¨ÿåf6ÞžŒwÿùžd~ endstream endobj 403 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 408 0 obj << /Length 3512 /Filter /FlateDecode >> stream xÚí]sÛ6òÝ¿B×¾P7J|ÌÜ=ä&“›^çšøzm憖(›D*$åÔÿþv± %Ò²#Ù¦åL3ž±ÈˆÅ~`±À.ŽÎGáèÍÉ?NO~xmø(f±ft:éY+F‘âLÅjt:ý¼Ìæó1ƒ´Ló:K㉈lP—I^MËlUÓûºJ°Òùx‚U –ä³ý+ÿ|úcóàà:¸ªÒŠ YN¿ï~z1©ÒOôò9«/|뾉—ïÞþë}S¾J¦c;˜>œþó$ôÔÿðZF[¤+Á´M”e6äDù묬êgã‰â"ø<»*c\$—þ©.èwZ¦Iía bùáµ–[s.™• ðº†gË÷@î,©}ÝNGLÈtÜV-Î~O§m'.²é…ÇXäu’å½ÍýºL›¢u^Wþ“*Y®¾ Ë'ˆo4á‘bJXxà,Öš0Í $±\&uVÕÔ$@%MpžæEÅW+à.0¢bãI¤Ãà}¶Ì‰ûpqEu“Š>ÎrzwâAÀ,û-”r£FÛÖ |Í8Oé»Uæqy°Èò 2<(Ój½¨+GHØ£ ,–@©I_¦å>ò ªÓ©›)“Ù,Ü @õEV„˜î+æ¾ZR7ÕR¤))æ½Tá«*C <ó_nÉ *­Æ" J .f²|EiUg ÔI3tß 1†ä…ÒÂmÔ«\ûè´v‘]þ ÁŒj—(hz¬jx†§Í—«Ée²X·h“Ùïkà£ÿ°)0¡ ^ì”Ež~dZöt ¯è­•{q2àÁ3ì–gÂö»:‹ª §éE’Ÿ§¾¬i0‡ñ,ÓcNȈ…JÜ8æÔ¶Ý‹·QSõ/»F0˜‡Pv#il‰¯×êD†–ERxΘ[Z—Lëžy€Á¢ê]}ÛÚ[ûº£5Њz‡±ÑPUÅMU¨&x=nµ $c.MœÙ1áÆIj³(P XƒF TX¦µW¶YEÄéyJ/Y~‘–©¼úkHød›¤`¡Ñ]mòœ¾Ìе=2(ò”uÌyÈÂXqÈI£,YdÂ(•P|CÑ;œL<"L‰ÌOÂ2)-!7L0ÞÅu/œ£_H áÇ"™eù9MWo^ýç—±åÁ‹—oßÄ©ªŸÿêÂÏ€{Ì`ÜÂüQ×ÿÛÌZ€n]¹Õ˜)Të³*­†Î©”Ð"d–¢ æd&¥³çøë%ug†wU52LE¦QÀ7éú˜RŽ­ Ú©áÕÞVÞB<º 0û„™Ä«”ðÑö×Ç>ð ú=ÚþïjöÕ|uzòéÞá7–²–™ØŽ¦Ë„+¡™E1“Ø»t4?ùù ÎìOà5möˆ) †„q¡©fø®q8Á¿„ñºñK0fb¤µa0&Hv‹ì¬L`ú>TtûÖ¿…:lum[ÏJ(áÃa†IRH{ÿòzàŒ‡éG©žùIâ®Xd Œè œ|»C;è”KÝ™ Šào“™ì0ìfòô?xþ|H¹Ÿ÷ÇàÔ@vƒ]êÝ Qó øåW«ô›F ®wfõ•BßG)Ò?)ɵþ¦DÃ+‘î£ë9”lÒ:Å4×_Ö»/ÌMU¾¢/x1vŸ/¾©Ýã¨]+™–ÄV'š!<ÖÝþþDµßYÇ‚zKªÎ*¥·ÜP芶ëüf¿ðú²X!6ñײ˜Pš .ú‹ ¸:ÒÂÅ„ÒêóG]LxUºÓêáÑÆLØ,oqƒ–K¿AËEP¯Ý&<¶v0•ðJà,ÏüÞ-T§û »†ð0¶£þ¯ïꮢ† bÔýiøÐ‡÷‡°†îô^بø‚ÛfnK¢wéÛu=C„VÇ€1b"Šý6Ûm»–Ù¸5;¸Ëì¸6?Ç$GbTŸe<n Ã2É-¡ì±lépR A &½OJÌŒÑ(#˜';´àëP£@•#þ¨ÔJ°]Áø]ò›ÔÖ)E¯ÏÓERUÙ˜5c6Ë04‘,\\ÍLA¼"2À¾Þ2§ `)6‹o÷L!(xhYÊr0C` ÔKášÔÇñKRÓnNù]œÈnE ¼ À‚<9w$Õ-¹·¢‚‡ 5’6fJð[ç¹Ã»¶CK5gL›Œ9S\=à,gl®²s^xJa¤t—’šã"ìõ#’ø¬{BùÒ '€ü6v<_çÓ&ÎîR>­³’VÇä™qwˆa„Ê9Îø›å+7Єw·¶ 8éÔ'\ ÈMð £|#¸À8šs- Ó4/Š˜2¦õ®%ã ø׀2²Ú NéøæMͶ0n²eoýr·xóR›Ñƒ·„ µcÊ@*¼û2P¦„x(¯øÉmW÷Ûà»E溪š<¼ÔK"©vmçÀ1r õAtQ·:lí¿Þ'p’ݺ%ÃX„Öðà>–¦ÄàjYõhÌ7(”²ËÝ;„ oç.î=·†óûbÌ«V.¬nv™.®ÆVâJF‰Ø­d„Žj'9í´öGì{/`®x|MÅ8ÙÖ8 ±1‚ò~‡!PJ©{Ãv1¿aþ‡¡¾Évö9o hóS¯8” ÀË­ù!> œ¦#ÁhDÝ)ü7 ¹ Y¶³‚|7<áDq4ÿ:TL„àh)ÎLø(³3¢T:” ±¼Ñ·{8ðT#g7²6.Q9SðþCg8`â¸qØ]j ØY›j`(ý^ºG¾$®~=¸wû2 Ñ Múáǵ’ë!õ–:ßRû|ÈÎ?²çb`¶óGL9Ù_ý†§§‚ôj0¢_s¤ö¿kÂ:nf‘°(Œ÷ôÜ¿{ZÊ»?ÍNhßµþ´Š˜5ü Ð|§Ì„½uÕy_Böâ Çœ@¾°1ÕfsÞqÙߘ©!©ÿpôܹýÇDëa†x,$ÚGJƒŽ‰ @]âèþy.2]}=s ®²˜[`=ÑÉe¿¤FJ ©E±0Œ÷S©¡“Dÿ>¸KðØfÕ ñþÇSîdSweÅN¾9÷ßœûƒûapM„–̘ÎA®ÙWdû;Ç ¿VÛ?ôñ¬Æ’»ŸK°µ‚ÙË>º‡í:CG m1`bÿ=Yç<óxOÏünþgCŽy]O£z„a»™¦öC–9ƒkbãÝ›<1ýÄÑ|œ)~"z(c&ÃÞ…w\Ü›“(é½B…¾ƒƒëàç,o³(Ÿ”¿·wäèT>¹ ýUÔr—„б”í¹;{Çš[¾ÿžôùEN¿Í¥3îyN¿>³ýºßÔÏo£l!'ÄpÜÎо —'„1§ß­»£Á­h ¦&ë¯Nѵ ”â¦ÉtšVUQVÏ= ÍŠ,D¹?ë n ›pócÝ£sÎýÃH2Ö¯1ƒo¢ÃHÛ¾NÉòÍU\P4+¨6æø;@™úƒÄ0S¹¢Çy{§MsÛB}ŽV½ x›ˆßÀSW¸eâ@çe±^aþþÙ¹$N+[ñ‹ò êÞQd>Þ¹ëÍM-P7ÃK‘ð–¬ù|¡MŸkí*a)ÆÂ‚]ǰZ2-‹ÊLtp«g²I}éSšŸ£P”KàÆkzTDweä¬I^ýˆùsÊFÁ+º|ŠRY•¿üÍ}‚×R¹“ÊnÝÁ/³Âqê8¾+•6íSÁ"½L(̓3—I«¢¦66X¯K<6±ƒŽæ¾°‰ØF/T¤Ô˜1Ÿ»‹ÀànÙqµÜK rªræXL`R5‹ªF×ø4ˆƒè}sŽ·ºèzâîWêà$]t-’E‘Ÿï4t}™ Jp8Ï.SSϦ¬ýpËžºsB6™v˜u¹ÆD»%]ÙtE¥«EQ'}ŸÇ–q¿¡aVŠáSÅ¡Ç:´ÌŠæê©käß)ÍG¦Dˆ©—Z^~ù\—4›;”è²9ºÌk=u±.½L½â\€Fçe²t³Ðþ()”äë¥×Û’î¸hØM› Vðæºô·)Lq¾v»ý¯9ÖM9;Û¶ï¯ò¶ «N9%纒Ï:)llÜpéµ×"¨ñÑ']oùà —Vû7•6Ì`ž²¶Ì4ä‹C·Ì@óþ츑· endstream endobj 415 0 obj << /Length 520 /Filter /FlateDecode >> stream xÚí—]kÛ0†ïý+D¯˜Oõýq±‹•t¥c$óÝZ†—Ø­iê8¶Ë迟äÆM $¥¦†€âóúµ¤#=X¨ ÷ÚâæYØ´Ó #{]xg¡wúUdÀH*Q˜ AkŠ'À GáýöÇi’Œöã"Ϊ4ZŒª´_QVΊ4¯šø¡Œœéf8k£EÙ|wó$üÞ=esá?–qÙ(iÖüO~ ÊxÕÿÒê¶}ûmûŠñôòǯî~ÍFûwÏ2]‡ß<¼û<á.\·µsSÜËyz+ÏÆöGºé–Ê6Íî=§s*€…ˆ¡*b”x“½:³û‡pj¥mÈ™±-¡¢qnŠÓnùÙÕF`ê–ŸaÀí•Ô”h—_¾XV㨊ö®Ý®N›ã <ÿ4`†@bZÄå@JÚÂJD줨fjƒÒ=½zÌã¡»õù• $U/kqà$‰£ê¡ˆË“kHÜßï¹¥,3:b&ÀP‚¸b tÈXyvÓ©jGï²¾Õ=× §—÷„¢ñÒòd2ÞÖ-ÛíXš Á>Üž¦¡«XÐ+ÙVòq!@;åðÉ'·OùÊ,?Rïí¨G9ÅÙk¨ÇŽÔ{êõJ¶•z”rÐÜ¿÷„zËÙÝÇà^{’Þ8F3%€*WZ{’‘¬=ÉP¶g-ÿ¬Af endstream endobj 410 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/home/biocbuild/bbs-3.20-bioc/tmpdir/RtmpkSJXss/Rbuild3d52d121381e66/DRIMSeq/vignettes/figure/SQTLdmSQTLdata_plot-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 417 0 R /BBox [0 0 494 494] /Resources << /XObject << /Im1 418 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream xÚ+ä2T0BC]SJÎåÒ÷Ì5TpÉç äTßê endstream endobj 418 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/SQTLdmSQTLdata_plot-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 419 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 420 0 R /F3 421 0 R >> /ExtGState << >> /ColorSpace << /sRGB 422 0 R >> >> /Length 770 /Filter /FlateDecode >> stream xœ¥VMOA ½ï¯ð‘0cÏÇÎ\A¥R‘ÚDêqhiR 5iIŠªþûÎׯ³À)‡uÖûüvlçm.€àîºõ:Ù}z 7»ŽP)­ÝÝl*|6žŸ]¦§=üé®®AÁ·Žà"^·©ºü“U¦ùÙ.;82Ó£×`,*­BÀhB¢ŸaóRŠÏñ;XI 3´6• Ðj)A=(¡¼œ8þXXw&x´<ø?ºy `k½T_´WØ“T?…”B)`½w{‡är3apû€Á•ÍuØ ®vèy0¸0ÞÇ’²3èŒd\\©ˆB&IOŠß”L=šÐ”\| 0FÇ]€ê§çQÓ>ßê5éö±{FZVݦe½Fê¥eÕmZÖ[tJZVݦe½G%»2¸ |šnkl´ÚPFR!m|i«T°Ž‰e•a$Ø÷#ÜiäaV)Î/»1½Ç ¸ÚÂl‘ÃÇ•XO²™{žd³fd5‚‰Ó}…-§£5 —·°ÎzDƒFç¦PMÉN¢:>ד¨µH<‰–}JZ‡*L‘ 9´~’w*˛اñy}šï•øët!ª‡O%A›…û<IX¬ 1¨p6Å×E=ú‹5©,n»w‹üæç©qf(Þ{‹š3—&ë4‰6“ù`²Ñ>MZ"ë=yü9Ëbÿòî<{+Ó°©`V„ŒŠìµ*(¸¨^+‚‚‹èµ˜ð×îý›J¬RÊqNDXóh¶ºZá‘̶²Zñ‘ʶªZñ‘ȶ¢Zñ‘ƶ-xóxGMõØ£ãCÇ›œKÙ ×0 .ö…{ÈÑÐqáø— !°²qÉ4d~t4^¯'ª¾{°¥áº®ï¬Ÿýôár“–¿:º¼_]náç V3ˆ§öhùå÷ýv¹ƒ_ñé÷çg›åìmš¤Ò¬ܤoMÜ ŠjáK2çÛåÝýrsS2ùûhÍÿ½Þܶ*>Ÿ“œªUmwvp¿<þA§óïþàl‚ endstream endobj 424 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 411 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/home/biocbuild/bbs-3.20-bioc/tmpdir/RtmpkSJXss/Rbuild3d52d121381e66/DRIMSeq/vignettes/figure/SQTLdmSQTLdata_plot-2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 425 0 R /BBox [0 0 494 494] /Resources << /XObject << /Im1 426 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream xÚ+ä2T0BC]SJÎåÒ÷Ì5TpÉç äTßê endstream endobj 426 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/SQTLdmSQTLdata_plot-2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 427 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 428 0 R /F3 429 0 R >> /ExtGState << >> /ColorSpace << /sRGB 430 0 R >> >> /Length 892 /Filter /FlateDecode >> stream xœ¥VKo1 ¾Ï¯ð±=ÔÄÎc’kEªDìJ*.”-RÅè !þ=N&;É”ºtéa²ãµ¿ñ#vòœÁ üÞÕçÅîýëS¸Ú „Æè×ÝÕmU¿\= ^½¼ÈÿŽðk¸ü>çòÜ dÄÞ å§,Þ¸îçn3Àé>°“çÑ8YúΉ|€Û…ø~€ë–‚ÁÄ ýšS0èmKÁÜKaú8qÂ`;¸Ñó^þ:¬ªƒÁ4ƒ*7›Ù5ƒ*g∖jÛYÒ䂃Gkfƒ½Ø œaä4ìÅf°Ü¦)¢à0tMb ˜’GŽ]Ê“ÜeÄ^jØe4ÉÍÀù€¾+Z•³ìRä9Þ*uᦀ±«H›µÇ–ð^ì*2c«H›A’m7ÈždõΗV"ë³ÁT qê¬ÉïS'‘c4ԫ;³2b šÒ{Iÿpà\šN÷˜gmBGªV’bmžU[úXÓNu8#6ƒ e™¯ºeÑ.°(wWU³C6j±X†ÛxõÛvÄ´KçJ’UíŽ^ËÉSžZÕ±èØ<Åiö<Í¥ŠYzîuʨqG_2ÕЉq|Äw’cQ-™5QjbÉÊhJ–92êw9`rtšY êJôªvD§c½CëÔZXi5JZT!æCQŽ£î6Ž*4Æ|/iPÙi§Aëi®)’Š$i ÉŒQEÊý¢¦´!_™ŠÒY´*ÒË«"ýˆ&j%`ám}˜~ÕÅýåÑÅÏí§Í|»†ÕÅÛ|—÷/Çp"#v´¹Ý„õyÜt^Oº`äU®t–`šýË£³»ÍŸ›Û«cÈ^ÿåóŸg«Ž§á^%Toúêì๥tzØÃÛ« endstream endobj 432 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 437 0 obj << /Length 3229 /Filter /FlateDecode >> stream xÚí]Û8î}~E^ðªO[nzh»ÛÃ^¯ÛÎbv7Q£‰ÆöL{¿þHQJbÏ´i“ɶ4¦>,RER]Τ#¾÷»™÷ŠôûúÇ3>‚†Ñgÿ¸8{ü<£œå©LG³‘áÌZ9Ê´`:×£‹éè÷äi9› ž¸«Ú²Xžef“vSTÍdS®[*wMæçcìJuE5½}ç_.~Žoa’k¨¦¬èùúå“qãÞSáªlaôEâéëÿzÛ×Åä\òä]ÓŸÿ<ã·çÓz>»8ƒü‰‘P†åRÓ5“j4Y½?cš‹4óö@ß_ _¬„=­Ï~¿¸¢Û'ã¹ Ðn, ²”gQusÐ1Œ#eãi$+ùH–#÷„Eg†Ù\’°¤L2Il>I£ß¥’çå²uXEÒ0ï!xü\e{"¬%òÆÂ2“gDÔ ˆV2ùƒ+ãྡྷiÝš ·,WeU´(sXž»*‚^Œ˜¹¢í6±š¡e}.A Ã@ÖX‚nMYW ÒdIÞAIÆg)š–@“Ún-˜ÌiLL&â÷÷ŽN5î¹#wÊǦl¨ô7¼q¡©q“ÐÿJÎã@æÚ‚M€J°ó±UYò';–ˆ­X.?ž[•à¤ó,)ÛHq=ÐYw¡ž˜À›—¯šÇo‹ckò®¹‘ ‹_³<™Öô¬j_!’©C •£êØméŠ&€--Ì’ð*,ní+?®=N¿¤Pµ€• ГAõ,Œ²p+BX†îq¡añ¨Â/ï–hˆJ‡çv4|5qS“W+°:rÔøWn¨'å²Ó:…ÍhìH+ÁìOØÄ¾Ö÷‹—7š¡öø*âH#€±€Eâ^! Fƒk¥˜²aáVe`À·L%KÞ|*¿ÿÉGShASeGW¾ë þÑÔ–£7_=³»Òº#4WL€öÑ"g´R`y[ÈæÇá9`Ôi [æÄòªÞø-$4S ‚Ù,hÂÿøzÍ2›ÂöÚÕÃÎuKoGÒ²L¤·yi¶[ûM,ËâÔ»¬¦åe9íŠeƒªCêäצÛiŒm™r–¢ÈöW숛1Z“öWì›Dfœ Ü$÷'|ˆRKûp¥/ÛJŸ7> ÖßwèÁ"ØÖôÜÔÝ|bè æoh°sRú©WúÿXÐiy>0Ju‹£¡ƒÒ«5Ìàò¿Žm°K)êÿbêHâ5ÚHÅs´J=`Å%Áu·œRqY¾Ûk$û‡PðL¶ox“…¥=ÏÃ…1â;M½ ÀÉ)WžhDá.]Ñtù7–¡‚&½EŸ:q“¢kÜÍÖ¹ô¾z¾? ,‚ ²ŸoÉâ¶Þà ״@QëÂÈy|™#!‹Ê›\ T(ù)x\8Ò¥Û3eΓ™¯ ÃÒ”ò ]V%¸eèýaÃe±ì ¹ÑáXÞA@jy$š =³/ƒÙ—ä!0©»ªmžmá‘‹dK¹ .ôØÃ$"§©Ë,¹Z* ¼:Ì!Z·À¨7ÈŶ >ópŽÝúTzWðŒq1R°«R«¢®ÊAÀ^9Š®BŒ ”1,ÍÒ¨v«¡ªJ?¡uB=r—ÄôK®nó ®4aÉ™Ðú6¯ÀBo>«Û$˸º wŸäŸÙNž°Ò}˜,»©£íÁ$ô_Uè4Ç]@ZJ³M½ ýކŒ' *#lò[TLÐ4)*ê÷ˆW—‚[`iÚ·fYÎ-J3jIRD¨à°Òâ‰Ìo'lxɸ-ÞAÓ#ê·Ýߨâ>xA?ç`Á°ÂYi†ÆÞ‡#JF4mâ΢ “U†î­2L±‡àñ×{ú Ž$:ˆ”ÁqÙêã¬>bDº·ü?€ÇV0õÇV3ìPvDç1Zؾ=güsº8g&“Q³;GaÖ£ýßȘÞïzö7ÄèO™[;«¥a"á…•WbÇÄÛsÊêí{~ò¸¬€V†“Äô®‹æy‹­þbe)xÉßyùm†©U¿Bê9¬Üa˜®B ôXl îñé£#bð3‰v+7°Ñ¾Âl‰ãÛ­£Íý‡»‹ œ‰IH.HL•;QcG@îM6R8#p},áÑ|ߪCñW‘ó*cô€ÁœÔËrºµC{sÄéK³8}_úSk8{‰ü» øô:‹¿š ¸¦ÎÕ÷µ>”?(Žx¬¹kÒÊ·å sÆJ8èj ËáX¸ÍbPGÈbxµq“Ó(EÅG¾ÏERì®êoÓð¯šy.Ñxzñ+>VcÆÄ¨ Ä€Cäs5ADðÒ_ÆK}À:ëð&_YÑÅþÔ…rç£×•ak so0Ùƒ#„‹PN“…Ï¢À9×ôÜ8"Û1'ïA´Ø…¦ &@ÇÃäi–üä6ƒŒZº±}GwCEß©°Í:p‹$‹Hú8É&ÏýýHŒcúAé…òÒU¾yù*dQ\éÓõAX­8ðèÒg–ˆ¤êVpNI9¡²¿ìh¨—¿Ý‚:îÓStâϘ˜é" ÔfÊ$¿-\uª«â|=N‚§ÞÆ¥Ž^t)( Š@¥a—ÕÑy¸utõªøx€Ð d6œº>ÔMî7„ä¸Qi:¤ì˜aOÀ¨…é¯Ë!žØÉÅCä±¶Lêk”›jy$&J÷y|ñú×gŸ3JÁ¡‘Ï AVݲ-ýE8ê™ù¦îÖ¢²¤{H¯`Ê&\«g˜`(ûÚ,(ºM¸ïY¹)Þ;åê¤êHd 2XÌu€³Ç‘Õ¢Ë%`S ©9¥6’Ü0-Õµ™ƒGªO»S$·,·vHÙµ‘ä9ÈkÖ_—h# kÊ&EÆÌuKí3ŽÃd@i‡L~þäç7Ͼð“«=u¤rã+p¥6nòq©<Û+wµóÄÞQ5:Ìø$UÙ˜ã‹uä50uM9ã€wº)?„oP¡*5ŸvC­Ù¹¡6fâ6èÍÇ9éýË%ÎR±ŒÅC§ý¤}~Ò¶(X•R–IRS‚ÇQ ©ˆý)çõú¨Ò2nî8è~¶ÕÞ'uš¿«»PŸ½ë‹Ö͉ å¤XúÓ¦o¸$w»,Þú¼*¨ñ«A̶p2Y`ö.Ô3ð”}¢@t|æ!“@<¢²wxý|­(s=gçA ¸MÚί€`ÌÀ!…öYÏXíO+ÔNïÛ,iª_Óü@}*VM0.9=™Ã œ‹ LÞi¦÷±Ó•&wRàt›µ‹L¸ÅNÇsÈæ‹ÙÉØ²hµºW¶Y¼ƒO±í›r­…ò–h0¨ÌÔi-œ€Ñé²#Z{-Rà³éóùÖ^K¼–‘ǘ6 zÿ…QæF÷™|wk/”õÉ@([Ù7WeãƒSÛNŠ65TW„ ”/€&ž IIKÁ*±Ë>Ãöðy§DÎñîãPG©6ɼ¹ œ Á0&· f‰]’ŽÑ1Õ—ñeíKЗ¢„”ê6Œü4e5Á÷¤O?Å€O(QHHò]F)]5ݸiC%ùõp|k´¢ÂOZÒT10Äõ)Õ­VLp8ý`"gzOVJQ~¨ÉXjìm­”eBÈ^:ð°q-ñ¼­Oöaà ŒÖƒÇŒ/ ʸÓãàÝ ½ÝY¾*—˰ÛU .ð 9ÿíÎ '®¢´ÓÜ¢}UOPnTwØø~×cUŒEÐ;þ6ÑCèÃMÓ­|H{ÔPQü*V”m;uKÊåIÉ à6¶Œjº‡³†Âï]Á#œ¸u{ӆǙ„x;fÝ’k$ùFW<´c4­plñ³‚&JV!ÛßÄãI$ûŠëà˜3Yô_•!åk‚Z0\ù[‰Þp~‚³¢[êJF?YÖnø@K€lÙûP!ßLÀá9ËÕA5'¥†saF8|‰ô¤Rôé:¢“æñd¢Ïã8iä"…3æƒã¯L¡6íÓuLå-dÆzÁû þ’ò†¾øaGPÞô? ¬VþúÓèxë‡U üÆÿ1ô¦@ BE¨)*z–¾þ;c§<±É?ékæ›rJãkRúµ÷Þ|§šžñ#$²'`õ0ËÈûyäAbÀ`èAbT!jp•¼ü7=·jÞ½T=Šß‡yŸÍßà%~1ø~Œ 2Ä-Þwe:.)l0wlÀþÞä M ׎Ƶ–aͤî½Òþ?Sª· endstream endobj 412 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/home/biocbuild/bbs-3.20-bioc/tmpdir/RtmpkSJXss/Rbuild3d52d121381e66/DRIMSeq/vignettes/figure/SQTLdmSQTLdata_plot-3.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 439 0 R /BBox [0 0 494 494] /Resources << /XObject << /Im1 440 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream xÚ+ä2T0BC]SJÎåÒ÷Ì5TpÉç äTßê endstream endobj 440 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/SQTLdmSQTLdata_plot-3.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 441 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 442 0 R /F3 443 0 R >> /ExtGState << >> /ColorSpace << /sRGB 444 0 R >> >> /Length 756 /Filter /FlateDecode >> stream xœ¥UMoÛ0 ½ûW𘪉Ô÷µÅ: À l °CÑK³t@פkƒbØ¿%Ë–”5m¼,›~¤I>QÏ€pÝ—|}Ø}ýt «]‡BJ õº[m3|¶x^œ]Æ·~wW× á{‡pÁ×]‡’às—ni1RW·§u§C`Hm„Ô µd@+ˆìß`ûV‰¯Åwp[Z"A½Æ¤0ª´ ÷Zè?Žb£›N/ ö}·ÈDN]²]”²ÂcqÈvqÐÜ€­Rd;: ©Òáf4h“‘6ŒƒYÙÈÇà0˜ÅAs½LÃà0˜Å¡Ýè¾dËiªž{³t„N SµœíŠ4OBU-g»"-  *C¶£ƒ#aìXo¶ªr9Wð…²lV”9#´,”e³¢Œ=ʲYQæ|,f¤,›ÅA e 9Ï«Ñ&M+)-¼Êd£p*O+÷¦ÆÑiaÀûJ›x‹ñ–ñÀsãÜ;!‡p…Fw8}œK>@5Y4àÆÆÉ8ßóÔÄËÔqƃ(·§ùcª-•ŒFó›¤)e}Y†^…Å(S®Óe‘"Þ\U¤¬I-ÏyÌay hGéKKo“‰½/|€åf Íay×}\¦oŒ–ɶ)šg~j4ñîX•¢ÍôÜÊadŠv%wû#I2ûöíˬeª6¼¤£–ÐQOy)ø('º|T“F\"~켫ŬQ\”,Š•æ³¬ 7úUëUÆùªå*ãzÕj•ñF¼j Þ=ãÖÇCF^Xêgüø)C›÷qˆ2ßÖÆÙ,±8!±âC¨žYsÕJWÁ$÷Æñ¢"󷇵'\åü~/²Ñ0k‚Ð:¦¿š]>onÖOðp 7sàc;»XÍYKaös¿ù1‡“ø~½]ϯayQ—:¡œª†“ª4~äÉ$þÏ ï :Z?>¯·«¾š?ÿäüßëÝÔåŸËš•}©> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 324 0 obj << /Type /ObjStm /N 100 /First 893 /Length 2178 /Filter /FlateDecode >> stream xÚíZYsI~ׯ¨·ÁKÝ'ᘃ±‡f!Œw–]Ú­²Ü‹ÜíQ· óï÷Ëö„|ȱÃB„å®®ÊÊÊÌÊ«²ÚhÍ$3Ò0­=ž’iŸ˜Ñø%ÅŒÑÌyôË¢œq,Ù€§gJêL)шhØ00&¡1d%SZ‘UhF¬ ¬sh`–—³0‚bϨС&:à³–i)±´õL+g˜§U¢¢ÕÒ‰iãÑÀlí$Ȳ G=€ñ@n\`:às‰¸Ô¬Ÿ èÍcX[=0½†˜ñ†8Ã?O¤%±VãŸ'ìÝžh hAÒZ€ Êübÿ*SJƒ…1›†³†„‚Ÿµ´DT ¢ Q£˜à˜ ëôDb0bV"v@ŠS£I–9“Ü?æöÎ@"ÎKЂ™Î'`N‘¹ {ЙTºA‹„¤£ haÄÞ™h™—==Žy­ÔÀDÏ<½™˜w$(‚-„æ½æ#42ñœ öI  ,Hl˜AA+êI,`µ Ö- b »¼¤&‡I*±(M‹ ÔY­ všz4‹F’4 º+‹ÎÙ….ÅØEȲPµ$¡“{š´Ð„¤4-áY¢ ³ -‘-4"&Ìò´+sÐÀZ %—€Åî*©ˆ|¨¥’Ú€3¼¡…͵†Fm¿Å4êA‘%szŒdŽq4 }ÖPW’v°¹9ûže&ž×e3¬êÑ@<-Ú|õÆÄ?«z«n«ÃÛÕñqžäºÌ-;€âˆÓªž¶ \ü1mº<ÎÇlÌŠaÓsÛVb4)γ(Êi—EYMÊééñ8]5fqZ”“¦G“ L)Ê2×VX¢­ZÁë¦æc1ÁÚ¢ÌÃj<.®;O¦õ¨˜LOÇÅ´ͨ©ó;Q„¯=+Ê|8øùçžÃmv` x’í1ñö_ÿfIsÒ¿à$‡RÕÓñøt§©;¶¹ÉÄŒS]MÚ!'oqñâiW|ÿ‚Yâí«£ÿäòbÖ‹Sø ¨øâ¦¸|=iÊ7¹ƒÔÄëí&öó‡Ž]¯|± ¯‹Qˆg bh9Lˆ½Ü6Ó Éœt¯ïúÒ(ž6ØÁx†’>ˆÝI3=ë©yƒ5&E aÐ~ý ŠX7™b•gÙÎçU™÷vŸö¤DGå.poÕ1í/yL¢Ÿ&=¯É3Ãi™'ìÑÙðx?¿}¬ S®Ý¨Ÿä¢k0‚î«×ª©·‹.³GÛO´Ôz›ð„m<–ö')ܯÍð>psv–‡ØƒbÜBN¯÷Ÿ¿å;Ø¿£¢®‰–ý“ªeø» éoì·1ÞEnvµ³Ü#6QÊ^sÖ3&¶67û%ÄVIV'Þˆ콠ߣ“®;kŸ1ªº“é/›SÑBS^¬¨5Ê{ɤ@ ÓR`Ôô ÖÀ} |/4fâ„ØAF¦ÒuA$v—ÈwÀU°‹f1¶ ñÓn¥pbÝB8Af±îp2#Rk—–þè¥ôuäþeéÏ |v+æ¤?Ùg¶âs%ì¶_UÂi•Dç6ýlqØq8½6qçgÅñer­îÍQfA¾‰E«»˜ùëä(>®'G¹ ï|Ž"¹¿# ¹?‰ñLb|úž’rTάâ¨nsï‹Q“ê?a%'XøÖœ˜¾ß‰éNl-N,êõ8±xgI4ß›# f]ϼ#Q’Ž'+y’´˜ƸvO2SΉÌQyõâyYÞ‰k)ïü_z}3¯CV°¯s#ÞOS§`Ó ©Ó]³oH¬4?ê?©ÿDªû0ž.»×tו÷1Þ^þy ã,ÆEUçZKeV+ÿ(í¹7t†=ÝsÉÈS–xRæa 'B¼ÿžÃ¸yQòé;±ß4ãVŒòô¼VíãaÑŠ•¨uð*2RžÓµrWˆøÀ“ ŸEì(“f¾C`kÅû°TNª³îù‡³É'·¸|Á-.Üœôœ®n—¥m!¥ZVyÃc\2EX¶`ôI¾@Wªj•|ÁÊøi¾`¥ÿŠù)Ñ\^ðpUÔ>BÐØÈ `étµx.*X¼þÊÚHÄKjã<è…Öx•¸Dbñà;Ãù"¯%S¼I¹>9È~ŽÊ¨…/]5[‡UsÚh¾µ´ÑÜÅÌ_'mÔf=iãG¼³©›¶ßSêö…¬ÃÞoö‡u¬Å:ÌzîÌgðÎZ‡ÑßY)‡>Éú2¥œ²1úæJ^}™C_†©Õr3­q_373)}óµŽÚÍ7ó?s3Ö­ÇÍ|Ä;ëf¬ÿQ?y@ýD;ÇIfÖ*é3ßx¢=éôÌ”vzD¹?ÓpÇ5×·ÖO>‹&y‚Ñm!1h5§ïrµÜ+µ$Is%òÆÆ/}Vš½:¹[®ÍR †ùʬxŸ«äϱú¼åmÁ"è%BÁØ>Øf endstream endobj 450 0 obj << /Length 2025 /Filter /FlateDecode >> stream xÚåZYoÜ8~÷¯Ð"/j`Äðu vœÉ&È`²H<=O3ƒ…,±»µÖÑÖ‘Àÿ~«XT»¥8;q [Y¬b¬úH…{[{/Ïž­Ïž¾ˆ„—²4’‘·Þxš³$‘^ ¦¡·.¼?üçåf³Ü7i†2«VŒ貦ϻr?ÐûØgH´]HJ}YSÜŸøíú×iÈÚ¿éMO=eCÏ‹Ÿ½¹¦—÷å°sÜwŽÅó‹W¯›Æ÷Y¾’Ü¿šIúkýËwÚ?}¡â#ÕCÉ´ô‚0a ¤ùù6+›VA¨5)a5¡~?˜=µÚ >%Œ­ªí=4K—‰oª²1D9Ím§š*híØ¨Û~p]eíúò¶éǺl¶lÄ*ñ×»±¿) ÓÑÛØ 鯤æiâ-ŸÝÖûØÐÅK˜•†Bzó‡rG?Ðÿk}v}&ÀˆÜƒàQL€á¢8aqyy}fû9ãh]Ç^g¼ÍÙÛÏ\Å(„$K5—è(B+J8£§ž½qê"‚KKý5A‰iÎUysþªÉd JÈH©AÔL—‹ó× ŒŒXÊÃ¥2 L§C—‡.îheгH&Ë•i&“ðDV‰ °Yù§G°±Ò,ŠÔ7i㔩ä‹”E¡<•‘¹ZùYÙæ`g0­äWݘ 2NÄ"ÉdÝ#(K–¤_3_ÆPkT:WÀ—k’HFw1Á8×'RdÆbá—ÊT?þøz¬†2o;^Êê?¹æð'>…]Yòˆ !#•¦*V€C:CoÃ.k°• Á®÷8D±ß]a…íßGê L·!VµC^  Çàþ@ÐI“èÎ >TJùE6dÔBˆræuvµVLÇ“ÏC©™€Ò)xʤҷ^¿ÿbî¯à)(1¼Ž-å²sŠÈ8ºX¡]RE}òdD\úë–žuve¨e‘+6&ÿÒ[gö][ŒyyY™;<‰qÓ„°Å9Å,å²óâår+ñyöf`½1ŃÅß—dà®|¸z"r:>¤Þ¢“ø ©N¼|ñ`þ÷¬EX-¼3EÔÏY•U6¸(Úw&/û²mN¦öG‚&¢e=8ZlÁQûÏšÕ*òÏàdaï$õ›“Ë…xñ9òeîx4 ˆÀ]òÐÿÝžf)µÐ£/aOSÎø£PckãrÏà’”éá }ˆ¬¼­k°Ô"ÊœÈ/vú¤Œú[eÜ:°x&P¯8Ù…ßl5†·ý‹ÿD `îlÔߪf™ `àÁ=¸—M9|¦%NBù™ù?† †Ï\±¯ÚáÛÞ(ß ¦Ðt|NL¥ð`§š®Ï5ˆ(¶GM;4ÍsO_ÕB{Ï[ToXöðdÔU¶Žè˜°8²¸—u÷,n’LK ŽÖF¨;õ¨þÈ£N%a„îž/bÿgøúËÖyZ ò}Óµûïè¸?Ø-,ãxJN‡˜üäm¤€ã"€QwÛ•ù®2CPã¡ik{F‰¿+Û²ˆñzaÜÈÞbûQ|ì€>ŠîŸæ+á­ù“«(/M3ôÄÃ^Ûb£*éPP•»Ö1°Ì'ºép/SÎ-ÜŠH–Í;‹Jk²'qdSwpY×üŠ:÷YÙ±U cåÿ¸±~øÒ>¾yÌÂÐeÓ¢^ƒ™>Uü”dœ‹é:k369•O¥ðžð!½ÛÏdЄŠÓÓ€-&S)€÷ÆÖD%ç5Gö6“·t³EiÝÕÄよßñ¨&â[±±¨‰‰O•±8¢³×cN‡YYÞ¥õtAF–wlyª³[;tˆ°ú ÷e2 C=Íw*Ãh}˜Z÷Ô‡–»3G1´4§ž“©éöZ%ÔÊ.7øÑ_Û† 1;”È#°ý Ý£¡Š£àŠ3~ÍÄ+G»´JÇþóõïÔ3Õj,쑵‚-Õ8r¸µzë춦/¬v´(Jô—Õò]VU¦ÙÚ@°’²FvÙ;3_Ú\TÑåвÎ[D„n­Ø°ˆšúè3D†6¿!š²É«±p2"®Hƒ­ëmÆúÒ¹ž:ðkùƒ{šB43,Ô^Ò‹óÐïÊí®rrß‘Œ2smKeÐ(•¡¨Ütæz´,ç¹HÅôä|[–¡Þ\eVØDEÙ²*/IìX»è;wü¬ñ€°EGRWOÖÃÖ0 ]­á)·´l¿·IÄ“w¨1í™z2¢ÓgÑ&&,É9yž¦Þ#Níoiß›¾wDÖ±ü z ]y9Þò¶Î˜èii%;š± öØ;~xŒÆ§ÛÙwÁÞÃ.ÏŠÿŽý€HÔí« íHô Ƨۡûà]Vfº7?¤ÊÙØuÄ"@{A* Ô¹óŒœ8¨ÿšoŸ endstream endobj 447 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/home/biocbuild/bbs-3.20-bioc/tmpdir/RtmpkSJXss/Rbuild3d52d121381e66/DRIMSeq/vignettes/figure/SQTLdmPrecision-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 454 0 R /BBox [0 0 494 489] /Resources << /XObject << /Im1 455 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream xÚ+ä2T0BC]SJÎåÒ÷Ì5TpÉç äTßê endstream endobj 455 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/SQTLdmPrecision-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 456 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text/ImageC] /Font << /F2 457 0 R /F3 458 0 R >> /ExtGState << /GS1 459 0 R /GS2 460 0 R /GS257 461 0 R /GS258 462 0 R >> /XObject << /Im0 463 0 R >> /ColorSpace << /sRGB 464 0 R >> >> /Length 5243 /Filter /FlateDecode >> stream xœí][“$Åu~Ÿ_Qð $ï—×Å6aÂRÚðÁƒyK;þôfÞ½é>ïfžóž¦$¿µŸ¼ o×Êoáú—ö8ržúÙFšÉ–Ùæ&I.lj5žSf2™=²ur#Ÿz¹È櫈c‹µJ‚‹íôõ.36#±Ö¶U¯y©ïž÷ãà pppppù§s 3Â4œÝÜ<˜Š ²+u‚D޵¸œ'Èä'à‘M ¥lÚJlÌOGSD—Ãò ôíÆ¢2SiSµ’úm¹"}¤ô‘>Òô÷1Š’h" wjÝߌQÜjiŒâ8b ®÷wPÜË&)Þå:Qtm²)Á¥NæÙžðБø.ıÅZ%…fŠ—/o[^±=r&Ú¶ê5/ö½Î[—Aƒ ¸€ ¸€ ¸ü \R¯»-ÐÄÆe—Džü‘«š´D]RH4?¢HúòÅÜô¼ dù*âØb­’ùÒîË·WüŠ-H¬¥mÓk^ê»ç .à.à.à.àòT¹Ü»;#æBµ,Rãe½—MÒ¹Ô]Ì•ŠÓ¥ˆiÌò*â¾fî´»déM~,_A[¬UÒ‰ù¶FL-¶ ±–¶M¯™ªïž·Î ¸€ ¸€ ¸€Ë3árï*‹8CÙ¾¯Ö\’Æl&©Nû”:3„¹ m_W¢'š»Zú5aU¶é«j}Á%)ÌÆ|33µØy] k[ô–—ø^å­w\À\À\À\ÀåÉq¹Ú5è<ˆP©¿}¾Ýu£Õ5³%ÑÄ%-/Jº¦É$ÜSM%Ó4ȧ°*¡ˆGßJ¥)Ö¥o.øÓWÇk‘øáb]¾ž{ª[XKÛ¦—¼ÌwÏ[G)Á\À\ž4—ý‰>xõ¥×s~n×fÞjíûy¦±ƒ8ŠóAßm*©¼=£žA™hДLåÙAüþi+ö˜¾Ïïþ§¯"Ž-Ö*á¢ÞËw¾âꛑXk۪׼ÔwÏÛÞÓà.à.à.à.OËÝuêK ÕÈ•ë¤\6—Q‰%ÒÊåÊV¨õ‘Ï@W_C[¬URˆÛòÍt8ÒŠíì¤Õ¶è-/ñ½Ê[ûOà.à.à.à.OŽËÝ‹_u$¦êB^6Ióvœ_”‚ ¥òq|)â¾gâlMO#Dmù*’Ølm’Î?Ô·6;êb ’ØÒ¶é5SõÝóÖ>:¸€ ¸€ ¸€ËOÎåîŠêiýc¨•N¹ìMÃÓŠÈ0Û§Qœé EœmM´séM«,_EÛ¬YRä„õ}ŠpÆfô¨™p۪׼ŠNræ­w\À\À\À\ž — 磄hÇÇe—D×gè^hÞ*ô䚟Õµ`è‘­ù$—¥ï´Udù*âØb­/âÛ†„Ø‚ÄZÚ6½æ¥¾{Þà.à.à.?#—ÒiX!”HË5.»$Q=ÊP 4„’Y8ß¶5âöèÔÏ~ê# €˜¯!Ž-Ö*™Nñôõ®å36#¶¶¶Eoy‰ïUÞà.à.¿.÷ j´Ãö¬—¸Ö²¤¸"åu|n¼NŽkÄß¶æË‚¾f©¾Û™O¾†8¶X«$¹œO_¾<+v\ãäÖ¶ê5/ñ½Êû\Ï.à.à.à.àò´¸Ü;ŸRáv¾RËË.i4õO{ƒ©$ajR„²¯uz©ór?Ó)b©¾Šê*—i’B—`ùf*b¹bçU.ÓÚV½æ¥¾{Þ¶\À\À\À\ž :ê3ò|Ç:fT%ÜOâƒA=O]dªÇ]]醸½ÀK—ž—>._EéÓÆÁ嫈c‹µJ ƒ-ßHEíVìhg ®¶U¯y©ïž·ÞUpppp—'ÇåÞÓy«Jž]Ì?i…E•Ì6ß<9nµZk2gšO¹Ñøòe—tjN´ˆŒ>¹Ì•KY âçÜtœ£¥ïôd[¾Š8¶X«¤Ò"²å[hÙØŠÍH¬µmÕk^ê»ç­ïpppp—§È%DúúK¡ŽÞe—T9D"ñIÌ¥Q‘0:$‚ÊJ’o©|PÄÒÏNd;}ql±VÉ:¹‹}“@Á±‰µ¶­zÍK}÷¼Á\À\Àå—Åe-h•êAÆÑiUظg¼Õê8ãŒXMŒ ã&&itúm…Ï…Ç'ºl³/Ñm„bã]6åóH‡úV÷нKÂõ³—ov£ž±‰µ¶­zÍK}÷¼u \À\À\À\ž —û+,r'.&ï¼U'RIàšŽ¾Óz~B£ó‚¸â Q¶´`®ô¥¼ß| ql±Iì|¦™úNDgšilAl­m›^òRß«¼­Ò¸€ ¸£Srê©4¼¹|u;ÅoIxÑ¥ùV^fi±‰µ´mzÍK}÷¼Á\À\À\~>.´€jbµDÇ\vIærÓ3UКÂy»í¥Ä#`3:ˆÞôCšU_E[¬U©—°|½ÞWlFb­m«^óRß=oppppyn\¨‡4ûDiö§ºžÁf’@órtäYMEš—£#Ïf·K÷™z¤ŸKÏGé._E~ñ¡ꯅå;ûT#­Ø‚ÄZÚV½æ¥¾Wyƒ ¸€Ëóårµ›2ñ ÈœôÔì›Ý”7Z]3•ܧ4rÐÊÊ*‰4 J%ù«¢ƒsåZÇ}=£©Ð1“R}ço–æ«h=£—„RX¾“MjlAb-m›^óRß=o« .à.à.¿ .÷V ¡î»Ÿ¹ÅF .»¤ÏW#ªË‡ ‘¿HølHÆ5 +L/G꙯"Žm£ ,©Ü„ùª‘°b3zÔL¸mÕk^ê»çm}ppppy\î^½_=UJ3÷ uÿ—dP¶X•YJÉS¶X#•YRÄÙÖDi.}¦ü–¯"Ž-Ö*iÎ÷å;¹E¿b kiÛôš—úîyë]pppùɹìoÚÚŠŽrÓXz¹yÓÞjõM mr ½ÛZæ%4žA[òº4¤ò´0âlÃp>œúA3ŽËWQ·µÌKÒ¸àúöJk•-¶ ±–¶M¯y©ïž·ÞUpppp—'ÇåîºOtÜNçó‹ÖË6I¦¥îªáÏlj¡Y±øãÓ‡$«`K£ŠY—#ÎÅ´}/·Ø‘£ž?÷Ø1¬ˆ¹Ð´^¦#«Ç‘}¡½ß¿~˜ñ>;¾ûÑÿ^¼’k§D>zóûO^”Qò´žéüÉ=׋G8^}9¯ÓË ?ÇBÅuèØlŸŽW—ãÿáñ꫇}ż‹ïì Ó­!ß`¾–¨],Éñã—ïtÕè>„㫇ÀMýö!Uæ/J©´Úë¢Tá×/UO¥jXz…¤׫ú“$bœ—þÈüó² ß~J†¡SXzƒKŸgÞ›ÞàÒÿ ¿a~wê´¾ÏÕÈ·1þ˜_~í›ÞÝ7qí›o}Þçoàö/^.@ÒDúM"Œùøùt Ú4óøüƒÿøöOóûÛ/Ëë?|s¼þpZüïÿúÍ›?û͇_¯>ÝÓ|¯T¶ö³¥5ÿ7Ójtz+]”•ËlþñÏÜþ¸Joû¿É3pnûOÊ3'Z¼çóv>©rñ´!ñŽ'zl}yçmxëïCî®Å#·LÅþù>üî/—ÿzý=‘ÿrÞ|ðúÿó—yþæ|7ÿg¬}þ•Òöñܹ¼áã…éI+¿‘¶Ïÿ¦.ön¨ÑœŠ?ú÷‹?þåÛ‡Ïþñ#âo/="<-„ý»ˆèÍCå>ô`˜Sæ‡DΗÍÂði1*½=O ÃË‚ÎNà ¡ Ÿƒk?ž†—EΞKã˜Å§ż‚qËtá3Ó“mÛ‘Ö#ñd+Š7‹“­X(>-6¶lax³8ÙŠ…âÓbcˆ7‹“­X(>-ÞïÏ“ùæÏ‚qv/ææéMð÷ŸÏou¦õÓ¡îÎo@¿Ý™xùÝ9¿»sšWoþ lÎåG8Ï [ûî\ßÝ9ÏçT¹º`íG8÷ùø¹º`ýžç-ÿ{ø?ýH¸7 endstream endobj 463 0 obj << /Type /XObject /Subtype /Image /Width 300 /Height 1 /ColorSpace 464 0 R /BitsPerComponent 8 /Length 832 /Interpolate true /Filter /FlateDecode >> stream xœ‡7ÔqðÆãU¼”‘-‰D!3޳׹éÜÞ£¢=T*{¦DCY‰ì.tö>ÎæîÜô7ôýù¼?Æ×Àùêž:Œ§Šà)£xŠžÁ•#¹;h® Ë•â¸R'´–B[¾à›¿â›À2ü²øÆòø† h}e|Ý7Üw° W[…«©ÆV×@«j±ßj±•ß1•u˜Š:Ly=¦¬]Ö€þÚ€þÒˆ.mD•þ@}nB}jB}l‘Z%-ÈâV0î}[\Q[Ü»Ÿ âm;¢°ñæ[Ð›ß›× ÆäþŽÉÙ›ÝÕÙ Íè‰Jï‰Jë…¦öF¾î‹|öG¾ìH€¾ˆxþ'ü(O„?„=ù }<öh0|8ú`(äþ0ôÞpÈÝÁw@ap’08QOßß º9 åñƹ{9ã068cMÀ˜ŒI(}ÒŸ6¥NùS¦o÷’füˆ3~pÖ7aÖõ‰ŸóÁÍù`ç¼±óÞ˜yo4¸à…ZðB.xʼnvL}ô¨ZWW£££9rXsèF[[£¥µ{ðàîý»ûöý „½Ô endstream endobj 466 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 470 0 obj << /Length 2199 /Filter /FlateDecode >> stream xÚíioÜ6ö»…Ðî àaÄ›¶ZäØ.ºA£Å"-òHö¨ÑHI“lö×÷=’šC>2ãŒìXQ|ù>1‰.£$zqòÓÙÉ“çŠF–XÅTtvÉ„Ã"-(VDgYô.~Z\\LhçM^uEZN¦L›¸kÒª5Ųóï«6E¤ËÉQ=,­²ý‘_ŸýÒTÆŸÛ¼õ¢òÏ7/œ¶ùÿò©èæaöy˜â雟ÿõ¶ï_¦³ Kâ÷;”þ8ûçI¤òœë-Ñ#’ESaˆI¨—ül2ÃlŒÅé„™¸é&LÇŸR{À´XuiWÔ•‡¶³y¾p2àÓ¢LÏËœL¦"Ññoó¼òì&k¢á³¹ŒnêzóFYAY´ûpC®þ³³“'äN"ñÄÆh¤lB4;[œ¸AŒT ’Dë¨É£‹“×wäÎo,ØGÄÊ„¡v‘¤Ð@‘e¹Wï2o‚¾FƉÔöŠ, H1’(@Ñ0³+ËbuQ8'TÒû(Š„îŠÒ¥G¬I31EàZ±‘d’Vó,hŒ MD-¡BD” ìºþãà‚h£¢é|Qg·ú F —À‹ÇÎ?¬Ò2˜xW?”A ¦@Ýf¨n ûIÈqÔ$­XôwiY¨î˼ÊÛïnU¸!šª^á§nž)7ʹ°)¥À’ «@W+àõ–Ói¹ à¬h»¦8_y¢õÏYZÎVeÚågtÑÔ ßJûÉÖó;¦Á‘kÃÖ‘Ãz' ö¼ u/ŽH2°ae`«qsDO.A8$CaÆsHQqº+Ë1<¹ ˆˆûÖœ%|W”cxrñ q ʘžIj-²\ãÉÕ ®E =ùW)@)b„½¢"€‹#È(s[œiJqe—IÂŒie€"³ƒ]öÃtüÞÒbzþÆ~ „s;Žº,fWHÖÇô!2øÊö1F›Û#$x¾ SNûÈ)D=„Ôþ‚cëߊð\Ç ßi|Qãq§ñ9œªh<÷/ȘoµùÒŸ`XùÙÃÎÓÖOáþœ4õA\hâDÝ áý S*+§ÌJˆ¼E€UV|,²•;‡Â;ò€G*Nñ¸æ±ù´ìúÓåÒ1V§³¹‡,§ŸÃÄé{|Ër_wÛäE<«ËÀ˜§ ‹(H£$É®¿…)!½Žm¯õò2o;„ 8þÕ¥ïv)6~O¸hz„z‰¤N}ϧy¬cÓ-G>i\º™ëÁ4Y~‘®ÊοÔÕ°-9_ŸkA)â‹U5ëëÆ¶· ŸPìŽuíö|­=R°=HOЯo ’‡svÕ‘䫘·†ÊFs„ð@¥ñ)Ø®ð& !C è°-AZXòöV¡ˆP²wMÞ­gbÒïy)ã,íÒ°)štöG¨±@wYx;)‹yíŒ5æÊØÛ iø!-šIÛ³ö1Ø‘—Mîª €è ÊÑÈó¬^„dÞ‘ŠË]ÚòM°“]% ?å՟風Š!ø.ÿÃ3æüÓyp4ÁÊÒìÏUë ögsBgœ‡Ü<í­ ]Ëô¼ Ó¾òöå+ß±L‹†¬s~mÿ†± ì-%Úþí×}ç÷ ÌJwRk"ô&Ma’P«#N‰„Lw{'îÉÌþ>$æÁWZM zÙ¡‹æt‹½î Ñ»©JXü÷éÁËo´ñîÍÛc Ùâ ãÅ¡TöÅeüžÈ$ƒ:ž(ƒ¸¸„ÀúêWoÖߤ`Ã*Àì×чKb¸æDAÖVÿáKzJ;Œ­¦ëêÇÀ“ŸTEOkp ¯GñPŠS#I›c Þˆpf‡ŠbÐCík kEôk6ÝZ´Ý—+Î|æyšm7#º5H;¶ò”‘MÿNæ?KƒÌûûï±hÈ|Ñ%?62ßëX@ú‚‘2’Ù{‡Ã!4ö€±IÜVK‡y½÷HÁ¨ˆËÆ“Ï0…‰‰—>‹r£’p=(Ç¢°8‚údz—o_$øÇµ†ç–ˆ-y(¤­Ü‡-îçìÅñ'à=ÆQëµîªWûà¥ÕIÖU[nçÌCa§S&”R^0„()¯×{ܺ0Ò*qg]¨]]ð»èâ ŸnÔÅÆ]ÑÅ—ðAšjy¬}!¹.¬Mıt!G°qþÂR¹Þ‰f\³+º §Æî¡ õØuÁµ=†.¨Iã7qÏìÃÂvŒ87†(ÇccŒ¥l§¬§®øð[å'·?²8Y‚¬®C'˾¾|1A>ü{bx\¯&Snu«‹¼Êük(ocó<Ô áç¿‚KìfÕNJî”&Zà)šIí½ÜR’Ö"I$Ù¦.rà7¡îóòÖ[*a¦PðÅ« Œ¯¿Kôë–Á¼‰¸¦/û:à¼Oð¥&JñÝRº…õ;¡ÿtŠ«ßjy«Âü¿:Ê o@(ÞhO}ô>‹ ãd»û«¦_wc–‹ê&[_+m}£ñøocò铨ӱ×3ËgMžºØ=2¥ß6xÐí ¿Oü¶7žÿøËÛg#ozê3ë?¾…¯ ë$`ç6¿pšâ&šJA„ ÉS2 aô/«Ï endstream endobj 467 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/home/biocbuild/bbs-3.20-bioc/tmpdir/RtmpkSJXss/Rbuild3d52d121381e66/DRIMSeq/vignettes/figure/SQTLdmTest-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 472 0 R /BBox [0 0 494 490] /Resources << /XObject << /Im1 473 0 R >>/ProcSet [ /PDF ] >> /Length 35 /Filter /FlateDecode >> stream xÚ+ä2T0BC]S]K…ä\.}Ï\C—|®@.Uî endstream endobj 473 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/SQTLdmTest-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 474 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 475 0 R /F3 476 0 R >> /ExtGState << >> /ColorSpace << /sRGB 477 0 R >> >> /Length 1264 /Filter /FlateDecode >> stream xœ­XÍoÝ6 ¿û¯Ð19”“HêëšbP`öë¡èaÈÒCÐh_‹aÿý([¶$ïÑíCà9 IŠæO"åÌkãÌ£ù8ýV?œ~ÿéÆÜŸ&ÖZÓ?O÷Ï•ýòö ûöå/åm4Ooßkþšœy-¿ÇÉY0?Oó¿ùá-wÿ>=LæfõÀ.ö`Ù0E /'‘3oÌó×\<ÒŸÌû‚…Œhúg Á‚§‚Ý…°,î\—ÍÓÄ9Ç•þ0ÝVD è›@¥›!¹&Pé&À€R¨tpd!úáÓF.rEåk+Ù3xÞV² 0&ÈM`%›Àø¡—ƒ‡šÇ Ù"r!AÄ.i Ý%-:ˆ]È•î’wI[è.i1Bî²Zé"Äã–’Juñ$ Üå´’]Nc†Ôå´’]Nå v9­d—Ó˜ t9­dÊ›Rh”åIŽçr^\]’I“qR*a-æ$«QÏEÀÑÊÍ¥j;nùÒÉVnÆòJ[9È^]ÙYA ©ÊN€-‰×µ¤Á4&IæíRе]€t`[°–FÛ<ï+›!fݶ”z<°M‘Øâ`;a)¤Êe !ë\.ïU¿y®—>ê I^?¦ó{6;ÀÍ/Àg]9HíEUYD=ë ÜϤ$"x«‡pÔ=[€¨.ž´°ÕµtP†òªç( RµQ @zÜ(À¤³ÔÀP €:æãư\RÓ‚7ضë)-L€#Ýo€S€›uÂôŒ ¬Ž؃ ½‡|`ÛgÈQg*' ºxƒf¨Ãa§-'YÊzÒ¢‡t`{9kTv"H¨¦<Åâ‡êY–3öÀtö¥·ÐÙ¢^†d ¢U?ÙXdU¶sü[¤F.CС_ú-`#ø F®t‰ª6yðúéG”K7z_ÄÒªê ©Ö÷bòøÀ²`€Ôˆt`Z @:üH @úVLÌzF¨×aí¦Ôňúâ‚´ZÂs×¼žYZàt Àé–Yàtô± À¶Kšìº8»ÃÞݾùÛ±÷Ýßà9ã¾ý]ÃÃþißÿq9±üÆÞ÷£k´ïÿF6ïû¿Ñ5Þ÷#Ûïû¿¾ÈÙïÛ¿‘»ïþƥþûj…þûÙqßþ9“i&D¥JoîæéyŸ×ç<¿’IÊܽ72‚®ÓõüXh’¦ 22‰wOæŠÅÆç‡Óç“Yþ®ÍÝãôcYgÕö> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 484 0 obj << /Length 978 /Filter /FlateDecode >> stream xÚí]oÓ:ô=¿ÂR ÛA܇‹hˆ‹ØVžÆ„Êš–ˆ6é’ô2þ=ÇqÒ¯u")‹Æ½ J‰Ïñ±}¾Ï‰K W Ñg>ÝýóôU@L WÁóaðä¥f("‘æ 'HQb-GF2"#‰†ct%“É€Ñ0Îã´LF³æÆ†e>J‹ËEû@?îÛ¥×UŒQBÍ-c~2d»rõ× z5ùGXÂmE¹w%71)q-H/Yñ.Tõ•âÁ—YìÝ+©=%tÅMOÌ„"gH‚-®)¾  Õ¤TUÃjªYW#žÏ™AGtÌ'½4ðë±U„B¶Ãо+jwÛwÁˆì×hßûÈí+54Ã&»õ{A2 fÑïTÌ-mî?Ký€µ}…à‡ÒÜG!øïªxO!¸O cn8±tçÆÅidž ü¶ˆûWúahnnR®‘ë|Ê®ìüAÏ©é7ªë,bÄ@? ®ÛU]¯/0WoBA\ç*ª¬³£Ñâ¥bkÿÔÞ¶Á›/`ÂîjNÉËQ€ªà®ÜÜxÃÝ ?àtÀ€ Ï⢀rØÜ}N‚†Y  ç#W(·Ï<è¬}×LFD°Júó ŠÆ0÷ֈȢ¯å|ÕÛP4Cg›†¸×;Õ’XN´7ãî}*tÿÛ†ìÖž‹ Nm Ž÷®ãt’õÝo”Øzà†BdƒR÷xøÐëSÿú7Î}¸9@I˜: 8åS™ld©6s¥Qooön6*'Y>êÁk«+j£‰‚’Ø¢¬k‰—x–¤Ëkûý§eZ.ý˜KBW½žÕæèÁõëL°ó‡’TšhaV©“&7½²Õw層ò endstream endobj 480 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/home/biocbuild/bbs-3.20-bioc/tmpdir/RtmpkSJXss/Rbuild3d52d121381e66/DRIMSeq/vignettes/figure/SQTLplotProportions-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 486 0 R /BBox [0 0 992 491] /Resources << /XObject << /Im1 487 0 R >>/ProcSet [ /PDF ] >> /Length 35 /Filter /FlateDecode >> stream xÚ+ä2T0BC]S] …ä\.}Ï\C—|®@.U í endstream endobj 487 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/SQTLplotProportions-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 488 0 R /BBox [ 0 0 1008 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 489 0 R /F3 490 0 R >> /ExtGState << /GS1 491 0 R /GS2 492 0 R /GS3 493 0 R /GS257 494 0 R /GS258 495 0 R /GS259 496 0 R >> /ColorSpace << /sRGB 497 0 R >> >> /Length 48239 /Filter /FlateDecode >> stream xœ¬½Ë®%˲%Ô?_‘_åïˆè’@‚Û hmR‰…Õà÷ s¬)÷îcf1ÜmÍœ3ÌÝžõ×ý«þú¿þÏýwü¿_åw)üµ”;þ;ˈÿü_ÿ˯ÿá×ÿñ¯÷ŸþûÿðïýóŸþU_æûÐñÿÿÓ?ÿWÿö_ÿÛõß÷úõÿëüŸ~•_ÿó¿ê¯ÿúý¿ÿø¯Šýþ›ý¿ìý¯_ÿ>U÷ïÙ~Õ»ü®ó×}¯ßõúÕ^jýUòÿuýú_÷_Q~?­ý:ÿüå÷ìû¯(ü\½µOýüëéã÷ULÿïÿú7?p¿üûx€ô~ õ»+ˆÞŒrýnÇ ¢ãï笿÷i¿Ÿº}h4ÇïºHÕù{+ˆ>¸Öïu¬ úP¹_DCåÚ÷å•Óc•ß×Ä­Õߣï'DOôöüže?!úx"6œ×~BôñÄó÷û ÑÇkößWÝOˆ>ž¸VË|BôñĽžß÷ÜOˆ>žøwÿáßÚ«ÙÿöŸÞ¯[íýýú½šüâÿÆ/í?ü[ý/Kù}5úüÐ~ýjï¿ÁõüjüèNÎûÍZ/õÄ?F{?’z¿ÿú5¾M¢þ‰§gû½æ–¿õ•XSX›O‹óþ3öm¿[ÝkƒÂÓÞ›rëEìGïþõïßçû¼w…6÷KrV|‚}>ñsníú}_¿úû±>—©Ø¯¯ö»-ï¿ÇJ¬)¬Í§ÅyßFmcßßOÙkƒÂÓÞ›rëEìGoþ-÷óþJêþ}œÓý\¿¯÷{ÿ¼¿¶òRÏïZLÅ~O)¿ÇeÎSêïù›ÖæÓâ¼ÿûþ§íµAýM´·äÒ Ø¯Þü[F|Óþ“Ýø[Ì™ø¦…‡ñˆŸ”õžžøžX¾ð2–׿Óâ\ñ2ö}O¶'×&ŧ¹·åÒTØSoþ-×õ~'×ùï’,}Ýïkööç~Ýí÷û<þ]®»ÿ¾Û–ßÏØXQùï’|¶‰Åçžkç¿KîM¹õ"ö£7ÿ–uø3ã¾þ–ä¼oàç¥f˜§ö¾0k}©_]Qÿàé;þARþÄ×7±¢°6Ÿgþnkc_s2öÚ ø´ö–\z {êÍ¿e¾Ï¿ÿ€­<ñvø98¯ ~ßóÝ!0µÆG8¯+þIEýƒ§Ÿø:Yþ¾‚C;aEqm-Î…°uÅ÷Ók“âÓÜÛri*ì©wü-§½z`‘ê+yUsþa¯þ”†½z-Àkï_V{Þä u2ç5ïæ=l¼ç«^âöR+þ`Q° ¯bרòW±µ±¢°6Ÿ犓’°íý¥>Ók‹âÓØ;åÒKØSoY§÷`.X€¹hÌéE+P⟳ÇDÁ‚¼?…Ѷ|ÆÏ:±¢°6Ÿ§þ®ÏÆ–Ð.×ŧµ·äÒKØSoY§×šµÏ[09´N¯ýëù¼ã=úy Þ¯í¬uË_PßXQùL-Œ±´>^{['ïM¹õ"ö£·¬S¯ø4ê{á©!9#þ3ÞãGÜÞî÷?ã=~ÄçJ äýÖ‡±òÄŠÂÚ|Zœ÷·Ù6öým–½6(>­½%—^žzË:½§ó¥ÏoÁ䬸Î_sÆêû-}×¼buQ° ïIdŽ-⤞XQX›O‹3â´—Ø&+×ŧµ·äÒKØSoY§1pì{&ïB?'§…iXï<‚¥‡_¯ë )X×lÇOÑò'¾Ì‰Uý¯(Nå»AØúþ~_µ´¶(>½S½{ê-ë4úïöþËŽêßKrz|çç‹éqØñ{ˆÛÅÕMÁ‚¼’÷ –ò×v¶Uý{IN\û¾æß߃×&ŧ¹·åÒKØSoY§÷#|_9q5<5$¦¡|õÛ{…~1µL¼yHÁ‚¼f0ì£å,¿±¢†µKNïIb+ŽE^»ú;–{K.½„=õæßo|ð®ß}ʾˆóžùôÂŒõž°Ü¸[6S°ïKúHÞ©«°¢°6Ÿîþ[Ÿ{cŒŽ×ŧµ7åÖ‹ØÞ²/½à´ þö“³âêÑ;þ[O^ßñåÖ{nùÄ)ÚXQX›O‹ÓC»Ä6˜[¯ ŠOkoÉ¥—°§Þ²/ï ¯÷}1‡6â}xŸ«ïWÉ»~ìË{º¬ÛþÄɳl¬¨m_Ì¡0–öÃkoûâ½%—^žz˾´§¿÷g¶øï’œˆþˆŽ;G·zÁw„”m@»¶¼ã-¬)¬Í§Åé¸+ÛpWòÚ ð´÷¦ÜzûÑÛöåŠ7~{ÏSå‘}§Æe8lξï[ö½Ï¬Âs1(Ø€×Z‡SÉò'OcMam> N¼eßo¤°a›Þo¤ÖeÛþÉ©—±½m_|Kߌo?æÜ¸Á¼ÌQ`{ãvó^>¯ËlÀìq5Iùˆ“EbE]yû1gá#ìû‹ÛÖ&ŧ¹·äÖ‹ØÞ²/}òF>üÛOÎŒOc¾§Žð,½–üý4f‡}ð¾üqÿ§|ÀSd¬©áß~rZü~[ã·kWÿösoÉ¥—°§Þ¶/pïâ>e_Ĺqý¥Ñ94`ÆcÊã^[~ã…i¬(¬Í§ÅYñÍHì÷M® ŠOkoÉ¥—°§ÞÞ~þÿ{ë~Áá1åã=09‘†3OøÀ.xfËeŠÞ¶×”/œã…µù´8…Îbß5\›”ý~WÙréUìÈÙzË:½Ë¢ÇKKrà éñTèm{o áܹLÑVyŸ‘¼á÷,¬©á¿%9x'îœ\»úoɽ)·^Ä~ô¶o®óΑ¿¶äàs¿‚ûò¯)2ycHÎŒãÒõÓ-Ä{°º^~OS° Oã9^òN[N¬)¬Í§Åéq7Kl \® о9íM¹õ"ö£·¬ÓMúûò¼xJÎ+¬›÷÷åû®°Þæ4 òî.É߯C‰5…µñ´93œØ‰ñ*ϵAqmí-¹ôöÔ[Öi½/ Þ#+-mr®xÁΫ„··©úR Ž*RôŸõø'Oùˆ¯vbE-Ÿ—’3â˞ا˜\»û¼”{Sn½ˆýè½}sïÖßû½n É™ø™¾ÃÝá{oá?kÅTúæ®-âòžXQÃ7†ä´ø–'¶Æ¯9×®¾1äÞ’K/aO½uû¡Ó;ÞmòH%ßy¹Áã‘pƒ_¦h ~Ÿ’‡{~%ÖÔ°G*9øÎ'¿‡\;/¹·äÒ‹ØÞ¶/”àQþçàD w[”A7[R¶aº,ðÒKŠkóiq.xß„åUÁk“âÓÜ[rkJìGoÙ—ø Éð;–¼ûîøýÉ¢¼ïøø}VS°q½S¿í’XSX›Cœ ÄÖøêçÚ ¸¶ö–\z {êmû»àûQ|19O)ÂÄI÷=9ÔöáZ¦hÞýú–ß±tbE]Ž/&gÅ«ÙØˆÔ\›”mWìm¹ôöÔÛö¥"Nü<ñBüÙœFÿrDd}Le vS¦)Úú+,_øž»è=ÃÚ|Z\G……mZ^[ŸÆÞ)—¦Âžz;ö%àK”wÍœGòõ¾7ë¢#{"â÷DRŽÏÄ]Òò ÖØXQ‘HÒ!Œ-ˆxí’ ïm¹ôöÔÛ±ð`©‹b?â\q“\/>N‹1»)ÚS~ñ[,ìå_ž"¹ÉÁ2‰íñºÊµAÙvÕµåÒKØSoÛ—'Þm°ì‹87\×ïÝkÄ{ü“{ðuE 6ོ#b#ùˆ?"±¢°6ŸÁ¶Ä"¼–kÿ-¹7åÖ‹ØÞ'ösã÷Óñqÿœœ;þ¶öþ‰ñVíHçoYüšHÑFŸ“åolaMamûæÀa¸ØX~5½6(Æ~´·~Ò‹ØÞŽýt˜±÷°áÌs¾ˆøL¶÷ ™»¹L1>³â2›òg,cE•ÌLç=¾Dv° ŽT¯MÊq¥ØÛrêeì©÷öÍUž©Ë¾¹ÊsÒ{ƒ ÿXã)ûÝ(ügk˜²o®Ô-âXQÓç€ä &±-\¹6(ûæÚ½åÿ=`O½û¡Ïé½;3ÁœIY§=Zô¦MÚ¢•™ ïÿŒ/—åpÉ$VTÏÌsZ¼Ê[ÃòçÚÕgŒÜ[ré%ì©·}s“Ù+¾#?'çŽKâ5s ž¸l„·¬WS͹R¾à•5ÖÔò7293þˆÄŽøuåÚÃo¥Ü[òéˆYþÐ[Öi^ð ÔÌäIΊe…¯¯ DâÕ%¾ï¤`A²ÀRÞpƒÖTfò$Ù8‰E¦N®™<¹7åÖ‹ØÞöÍ)³î‰ûÊÏæ„å—ìnð‚¾çô÷Çýg7ü2–?ðGû0n†µíÉ[¼KÕf,NÅk‹úG^»mùpœ ØSoY§Šç{¤ ÑÒ&o¦ZñïÜKk~­øˆ‚©ÐÎò÷½z—Äšª~ƒ'Wa#zæ—k‹âÚ|ÏY.½„=õvìÞ½pþÔ.û"þâøò¬ŠÃûªŒ¸\¦Ÿy/¼–78±5…µmÀY<„Ë4B¯MÊy ±·åÒ‹ØÞ¶/üÛw ;9ˆ¯Ú"DŒúýøßã3¾áÓY|ŽÁH®h°¦2†Ä¡‹u®1ìÜ[réEìGoÛ—vd¢þœÅoÎ ªxã×ç×'ö³ø—ürœXQGìGÅo„UlGk±Ÿ3+õöÔûˆýÐ×XæŽýð¦ïñß9ò€ã3Ë”c?ã¶¼‡‘4ÖTõ}ÜþPŒ­xxmRûyR.½„ýè-û²:ã+ðúüœœÉhÎàIÁòkÁ$Тŏh­%¿é[ö¶ßE>¦ä´¸_$¶Æý"×ŧµ·äÒKØSï[pw’?'§Ç—9âû‘ÔÓž±Æ_VQÎ-XÏ–?q±O¬¨æoMrðiû~ÒOϵI9·à™[.½„=õ¶}AŽVÄðÚ}§Ã_Ö™i÷BßÏf2ÛK£95ÎT–G(°'ÖÖæÓâ”xgû.þ2­Mʶ«][.½ˆýè½c?¹6:Ã$ç‚£;"þüÎvf(4®3LDsZßò'œ]‰5}†Iüˉí¸9yíž7+ï-¹ôöÔ[ö¥ÑG4«=ëÉ騶M{·Cò~˳Ž4ä{ËD—Œ•§„äÈkkĵGž¼·åÒKØSoÙ—÷Ëx3/¶*zc’~"¬p‡Ö¦á’EêÝv®¹åôû+*sÊ“3á/3vÀêµGZ£–ß_¸J¥±½e_ܹñ-Ùs ¼¾.ð8EnœÎ¢`Þ«Ñs§ü½„Ev°¦.Ÿ’³Â1elÃaßk“âÚÜÛré%ì©·ìËûãé<Ùꎜœ+N ãýã­7Þˆ·Ç0žÔ²åz +jù„•${$5,¹v÷9÷–¼ù·ì©·íËÅ<ó+®?'ç‰/dX„Èj*ü_‹Ö‹lÀE 'ùÕ˜ M¬)¬Í§ÅYq»6¬QøË–"Úy>ÒÞ)—^Ä~ôöýå†ëýjÞ]÷qàÁ^“1ü÷‹Þîkšò¤´-g¶€°¦°6Ÿ§ÄÓØŠ—›×&Åû ÷–ÜzûÑûÈ-ཱøþN|Òc1¾ÏûɼÿuäXÎÜcIð8ç#932/Y ™·°|ÁÞ)ŸŽ {êíû Α¡U½1çArIÅ©£½ç»8n´[GŠ7\ RÞpŸÖÔíodr´fì=‘˜¢µIñþ½%·^Ä~ôþÓ»VÞ#ôûqÎÈ¸ËøÃ»ö§”Þ5„¸â¨ßœý’ÞÍ蔌4¯Ê޶LAÛÆõ-‡O¬¨æì—äÔ íu\àÚÑÚÅoÁÜ[ré%ì©·¬S¡Ÿ¿ _ùçä g¹81 —Ïo]R° ïÕ$ÞÊ’¿—‘xc kª:"!²=›±È3*^[žæÞ)¿ø'ûÑ[ÖéýÃæ÷öco0]ñLÞn"ø{ûy}ß~Þ3ÖØ·Sûöco0Æòvãµ÷íÇ{K.½„=õ–uŠ‹=£Îz š3˜Ïn€…ìÒÈg.Ìç% R˜Ókù?‰±¤¸6ŸçŠ7‹±ñ'\›ŸæÞ–KSaO½ezå¿:ri~NΊ—ïÉ.Í_æ+2¹S° ñiÎ-_Ì/VTfî$§£JÈXäÓäÚ™¹“{K.½„=õ–uŠÓá@ÍÉ÷ 9¼•¯8ÌÐç5Ưõþ {7 ò®)ä Ÿ»°¢¸6ŸçŽ÷¿±Ÿ´×&…§µ·äÖ”ØÞ²NQ¤À›£<ÉA"ÂlÍÞè×rφä'Q° QNѶ|Ù ìò HgÍä õ#±Hýȵ³~1÷–¼Ú ì©·=H¹º3oÆŒáM7àË+Ôuþ¯b‹¼Äb<¹ÄÀ™È@¼=Þ:Ƶø¾yÕæºïI©´î£ë_Iv‹ã$ÓûØÉLÇŒC$üãß=HÉ’+Ù@XS—þÉ™¨Ó4v„à ×væÞ’K/b?zË -¦ÝFÀ_×%sŸŽÒÑHÒ š~R0 _³”_j+jÙÙœ‡øÄŽØ"×gÙ*ö–\z {êíd·ÆbЪŸ“ƒÃp$•éˆÖ™úö,SL/Xñ^H9¾7‰Õ*‘Ô6&¶ÆO&×®.Ã˽%—^žzË MÔcµðéóoIÂÉã=Ç÷ýýƃºëø9bÂ@ïÅòŽ’°¦°6Ÿ&çݵâÄN”ÊymRxZ{K.½„ýèíd„E—רÉâL&Ü~±!ÙÅ—¢`4^+®¬¿á}'ÖÔÈds:.@Æ6&hí¶“n¿!_‘#áÔÛÉ7\^wÈŸ“³âÕ¹îÂRž+þ×]ñi‚Ñx_Pá`³5q‰5œ‚•ÜO‹i®Ýòºä½)·^Ä~ôv2ÂÅD“sÁ \·Ó: \(q£qW:7)µÓ¿[`MM¿™’3â—XtIȵ»Ýc¹·äÒ‹ØÞNF¨qwŠ ~s²›8pBTVæGzAdqÇÁä6…ƒ<.)Ç¡&±¢–‘’3ðU3QÐ\»;)÷–\z {êíd·ÇG%wœ92J"å~2Á>ÜÍ-¾¾)ø5+êò•"9 Q*a â ^›”mWì-¹õ"ö£·í ¿¥ñ‚Ñ…Ç Å{ï1 Åï±igaÿ'Þc’/¾¹„ÕýÖKN ÿSb‘5–kW‡soÉ¥—°§ÞNv{þlt`Ž”O£ƒöG£ƒ°»ÑA؈Ýè ©}á1GÍ ú§ÑAûÏ”³Ñõ"ö£÷Nv«tUêß%93>[´à‘á¹Ùš`˜¢Å¸èÊ”ü¦«]XQc[£Û®ú( 2¶¡0Èk7ÿ»äÞ’w‡€=õ¶}yxqNHüöa:“ªÞe/F^DÑbt~š’_€v§)5"9H-Jlœ¢\»»iCîM¹õ"ö£·í üHžX²/âô8-FBZeºÏ3ÑŒ`ܦ`Þwã=·áÚÄŠjy…1/!cÛL¯MŠOsoË¥—°§Þ;Ùm‘w¯Lv[l…Ò:ΞE:öDzRµ§íY4#˜sËáµL¬¨æ”âäT&[ [âÄ“kŸ[soÉ¥—°§Þ²/LqΕ­4' ÙûuÈ ˆûÇ{¶F²Ú0ññºå ¥­Æ’âÚ|Zt[1öýûʵIñiîm¹4öÔûo5:x˜P\®ltðH[Ö›+Mx* ™rÂÀõlùÍ„dao~êZ—œé,š‹7eØ`íanî-¹ôöÔ{7:(\Ê—“Äia;#`Ó.m7:ó6å`‚¯’O– +ªdñŽ8yÆ*óDk“r°¨Õ-§^Æžz;XÔQéuX'sÔ¬`¢öË VüP?®xI¤ü¦#GØÛnlt Ž«FZûht ½%—^Ù$aëíd·{1—ß‚ÉÁF‘‚÷È÷²ñ ¤§­fŠé—‹{ G×—ÄŠZ~ &J&jåÚÝoÁÜ[ré%ì©÷NFh¼Èµ˜œ‰’¦vW^ ¯…beQNF£ò›¾eao‰ÜN/§±PUØo\»ú­”{KÞíöÔ{'#L¥ƒÍLF˜tAGÞTï# lx8åd„>·•X‰U2q›¥u ‹ÛÆåµE9AmÈí6öÔÛT~6³ ÏÈb¸÷õíÞgîŠÖ}™bø‡WË—­+jæ]Éør ïm®Ý² ÷–\z {êí`®áïWÉbrèéãe#îSßÚ4Å€Ò=S~£öÝXQéÄMJ(-(¯ôÚ%Ë/½·åÒKØSï¿ã›CwÃHõVRzràÎýâ=±ùŽÜaRôŸÑÙd9MÆŠšNJOÎ@­¸±pgçÚÝoØÜ[ré%ì©· …t­º\Œ–œ›yuØÆÃ <–†’‚Q1äáG|k*‹÷“3Ù€NX”ÔçÚY¼Ÿ{K.½ˆýèmßÜ`+‚£Iœ8ºÿL~èn´ÂVîN7d9ù€uÜÄÑÝIØl÷¤­âÓÚ[ré%ì©·}s¨N‰{® …ÌQ±j±pÿ~àMSQH u6ø’\E%Yd4»×ömhêŽÝ[TĵËQ(Ľ%·^Ä~ôöÝi°Õ .a?'—´‹žy$ÚFYêßQöŸ©yAeÙª”º©LM.x‰Å•.×î™&á½%—^žzï»ÓMßx«ywºùùL–ïØ&HXQÓ~Çäôø'HlCÛ7¯ ŠOG–Bn½ˆýèíT†‚äèxv+•Aœ'>ÛHèŒP &6\ÍÓ ½’O¶¡VÔ•eEæ _¯±ÌqöÚ¤ø4÷¶\z {êírC»ZoÆtÌy¤mS£Æþ6ßfcý$¥…–À™XΙ3Ÿ¢q¡e­:2…S{!©Í¤ÿøÐUÆõÁK>òÙôêJÎài¯ 8ŸŠ 6S¸”D*Ù³åÉÈÆŠêÙCÛœÊï‹°ÅÅä*²Ñ«+÷.,ø–^•mÊN½ÇÞ72?'§±]*¿Ÿ“3ãT{±[yº @Ž<Þ‹E )ï™Ãxoj8÷49è&˜Ø“\»:÷4÷¦ÜzûÑ[&åý)¡wÔãs"•ùn»[õÈ`‘ÂkÿýÑ϶å‹51Â’âÚ|ZüŒmÈÀ÷Ú¤ø4÷¶\š {êm“Â\¯ò8ˆgÎûu¨9k“õwmÁ<Å_û‹}°%¿ø­–׿Óâ q ±7P¯MŠO§émÏÖTØSo»|íGuãu1Ø;ýò mÕé’Ý¿{VêgŸ‰Äñ«¯öìúG/·Â©á:WÝýÖµ'¥Ò†ÝÖO]ÿJ|ˆ]Ÿ#rnœ9“]u8°d-¶7¸ðÑ’‚ш´Ê’ò×vÄ^XS==pæ4~…­ì–¢µkzà¼wu7è%ì©·ãC*‡CRçÏÉylÙ–ÂG:HgÞ)HC¾¶| ze¬¨ÛÑ«äàfklCË>¯MŠOsoÉ­±½²™Ùòjî™”Tß—òãQR}óŽ/ ß6úR~3j#¬¨iÿ`rà­I,<9¹vzzroÉ¥—°§Þ.&Âqm$sКu 66Š=Kxžj Fcp¸‚åô +ª;²œä'¶Æ÷3×®þþæÞ’K/aO½Ý ¡ÙŸoœ9ô¢Mýýô°Íé\{àær>äW¶Š«›Ú8sèE3–6¯½=pÞ[ré%ì©·ãClÙÑš=ÖÉéŒÃ,£®ÊÖÕËTF|zÊgÁ)TXSÍßÈä`茱G2¯MŠk/³®¾õöÔÛñ¡æ_‡.ÉA¡VÄa*˃ÞÏ&"6Š^é³›cÑ«'ùÅŒPaE]¾$¹§Âê^¯µ‚öN¹ôöÔÛñ¡ÂøNsäà³­µ2¢ƒÏ=¢2µšr gÜ[Žþ‰Õ²(Æú¥„-¨¸õÚ¤ø4÷¶\z {êíf˜³^0Î?G-`*¢^_-â„NÊ¥lùƒt/cE /“ÓxÞ¶r&‡ÖÎÖl¹·äÒKØSoÛ—Ý–µÊ¾dkÖÎŒ4q½ãí*ÇsÔVòl ìnëŒq§lÛ9CkwgùæÞ’K/aO½w3Ç¢G6Cp¬ºâ=ÞÙîhq£fˆÎ~­B­[~q‚°¢º½¼ÉAêtbqõϵ«ß÷¹·ä-cä×z;ÿ §ýT3s¨Ša²û9¶ûnm¹Hßi÷ë¦ng,'…Æ6vxmR|z¤Ý_[/aO½}m¼þÝn™œ'|zçè'¸;rz3Å•m\:2 î²±¢nÒÉAx^Xdê.¯-ŠOwf‘H.½„=õÞù™­j˜œÞã¼\´6÷eÊù­o¹Šê…}ì³R=€9åf{ƒÛ¾£»æÚ%ó¼·åÔËØSoٗɦù%ÏÉÉÁKdNLe€?ô}Ç¿ÖvS°a›ë–O”Â+*ÏÉÉÁY7±8çÚyNν%/nì©·›!\X} øçäL¸~ÊͬMv¨/CÞÙv2Þó÷“ò÷Ÿ§ÔĚʒãä4|yŒE!p®%ǹ·äÒ‹ØÞ'£Ò?´Iý99R n¤$Å»±W/¦ íƒ/cÊ›‡|•gSÓ‘¸ä ¦ÆÛùjÔÚÝí™soÊ­±½íŽën™¡öiæ $‡Ë¬ò³Ž^¯j:Aʶ{mùEë#,)®Í§ÅáPa;‡:hížnïm¹4öÔÛŪŒbôÈú99è¡uwf–Æx㡤è2S1 äͰkªø-ª‡cÑFîöÚ¢èλԼ­—±½íŽ›lcÔÝ390|áöÒ˜ŸÈÆŽ²ÞÛ]f]f”ÇQëJ¬©î¼ªä0ÛXô"ε‹#”¹·äÒKØSoY§FÛW`6~Nú^4š¥ˆ«h¿¶£0kl9Ñ kêrœ#95[`–¼6)<­½%·^Ä~ô¶;®8fª›œ9ÕPáöRt÷=Í®ÞÝÕ¹y±ñqʧ£»¥&Åµí¼»Ùò=OûþÞ—×&õƒŠîB^ÓöÔ[Ö)ŽÜjw F¥äÄ712¦k§5dÆt\ Š)XÊh²åc6Âêuöds7s.´¶&ñÓêµEñi½à$o®ûöÔ[¿}Ž!+™~`|%œŸÅï8v¢ÏKÉ܃›Áb2F•‰3‘‰f wÀ¸Î'WͬïI©´!îÔõï¸ãpPéÌœþ99h Ý3÷˜íß—);Ø®žòÞÌÄšºrÖ‚9Ì̶²Gk“¢;Ž{[.½ˆýèí¹Aƒï·üœœí^£R€/‹È¥ë<¸’¢Ëìv*äü#Œ}ÜÉ·x8 µ…t ™k“âÓÜÛré%ì©÷ÑÛç[LdŽR®ó¤tìõ-&Z]nƒ½}Ê.&2uôŽG)×Â*[kéÚ—OJç®»˜è£·¯Kœ- ¡ýœÌ ·—‚Ùp‰U§¡¥ËŒ‰6–3%ÇXQÃGÙäàbšØŸC®Ýü9åÞ”[/b?zÛw;Ññ!sVü@Ñ?”¯ªù`ÒOY¦þÑåjô-¦²7Ir:b<Æ¢cH®½IroÊ­±½ÝÛ§³¡ð°qMΊ¯vLúYŒá¼ßš÷ÄwRt°!19å9¡¸®ML"0§Ç‘Ø?‹\»¹¼!÷–¼»õ1°§ÞvÇ¡åuÛÅÝÉ‘ŒÍ“囈­µ]Ü—œ(›±q9cMeqwrP XoçÚõLîÆÞ”[/b?zïÞ¤ƒ}*³7‡_‡šQÌhU[/û–Óµƺ(o! ¬©fgar /W'ÄârŵIqíåtÔõl½„=õÞî8 _¯N£O«¨*=k“ž‰ÊÒ¿™Ÿ4ê[®-g›7cEå'mÎxÜ"²ó²„– *+¼sæö¶\™ÖžzïÞ×ý¨–çž’ÓàÈ ·—&gWÎ5½ª)»ã\Än×õÙXRõè4'Îvä-G¹Ö+×&õƒ}l¹4öÔÛöåqä9íËãè4lDa&íÇ=>öåê¼Jþi÷w̼SÑîÛ-zjí£7©ö–}‘^i›¶ÞîMÊ™h=ûF&½£èÅš«£h¦è2ã,7˳#u`w·jg+˜ƒŸ¹± m¡¼v˾‘Þ[rëEìGoÛ—ÊÎD—Ó&“ƒëj„UÔ±, |fšgÇ!Õ å‹¶[XQ—Ó&“ƒ¤:aáTm^[ŸntœJ.½„=õÞöehoOûGxÇs’ül´—©´/}Ëow‰VT±SÕœŠ¬qc+ÎÖ^›TÚ—²åÔËØSïÝûÅà8†ÿœœÅ£G[œøÞãOát’!ðžQz.9§+*;f&ÑÄÖ0’¹vu/êÜ[ré%ì©·í‹ Bsmràé‹ Ìé–è߯”mR¶(?íîï×CcEåûy)_û²píJûR8$mÓüþˆ“6bsµµöqÑÞ’K/aO½}¹øIÃyþsrá‹Í¤³6àqß/Û€QÝøâbº™WßÔô'ŒØM,Ò¥rí¶'1hoÉ/'ûÑÛátFдꟓƒ‰Õ„Y ³Í‰Ís›âä¦{Rò'³û¦F¶Ï1§¹S¶3 ï½vö×̽«»pgcO½woÒ¢©ß»7iÑäö&­t+ ö&Ël@¼0û–wN""ÖԕݬÍAcuañ—¯-ŠöåÉnîcëEìGoß_8` ÚýsrøŸÅ%vÑÞ`2ÛtìI¦“©–sб±¢ö$Ssèp6ßÌ\›ŸæÞ’[/b?z;ÜÓ¡Ùj6C0ÑZ0¢®ñÈݨK1Å̹ÝòË÷F`/Ÿ Ü Á…­<&jíš³A¼·åÒKØSï¿Rnú~²“ÅoMþg6Ð «T6×YìšS} F­µå78Â’âÚ|ZÌm5¶³ÖLk÷ ¨{oË¥©°§Þ»Üàly>’ƒ‹}ÔÏLvãËîýîÌZî¿X风ÀŠºìùHKFe9©×Þå¦Þ[ré%ì©÷.7Õä+y=“ïE”|VMݺQ:«)Xçb±Ë¦¥lìã¹tòz&§³€TØÆ6rZ»í6sÚ»¹ ]i{êíV=ON=r«qð1ò¨aòÑûI÷ðWgR° W÷Ô%ÈQVXQ—ÏšÉAßcbÛ^›ŸæÞ’[/b?zË:]iOœk>éë.ñï§$ÇVÎâ¹}j¸îÎy=’ûÚ€5}jHÎ@¦«±)²Z»gެ÷¦üJ[ØÞ.7.-Qprðúv9EÁõAIèÕLÁ‚Ä„¨g˹û¸ä%‹SÅAÙbQ2škÅ©Ú[ré%ì©÷n'?º“ÝÄ©ð^D;¶.ÏÏD(<ëéùˆvnqg‘ünHVTIÏGrà½0¶À³áµKz>¼·å—}éíùCo·êAº\”ðO•›šÃ.scʼnªÓ/S™x' „mÌ,gÃ3cMݾg&ÚÝâg®MŠksoË¥—°§Þ-û‚7BsP’ñ×M6C²/ÏÙ¾|wbŸä‘j=kªØ{`Î B)bc*eϵIqmîm¹šå{ê½c?ê¨{íØ:WÆ~Ô ¸ElGýÿ›ÏO¿YÏ–3AÚXR\Û±Ÿ›¿Æ~%¶ {©×&åØnmnM…=õÞ¾¹ûV=O¦Öòþ³{eG‚Úî“mßÜÑhî™Ò{oêã›»÷ýÇØœ ´ûhû¦µ{i§^yïÚzûît³ö픬ä`ÐZÜhpà@«¢ˆÆÄ™dfS¤¸ á°#yw'ÁÀšºsÒœ9èá`,'hxmR¼;qoÉ­±½wªœü_«dªœÒÆon&_—·™ÖMñ~#o›ä§¡ {³ÓùôuÌOO,Nô¹v?#E÷ÚòæÉÑÀžzï»Óà•Î&—4O‹ãΓäHñ6„ZД£4±¢V¶†3$™¿¹öð‰$÷¦ÜzûÑÛw§Ÿèxì35gÖð{ÆlŸHŠ0M$@35ã3ôZާĒâÚ|Zü­ÆF¥u˵Iñiîm¹4öÔÛw'ÔÄq]IUÉÁÉ· Gýç± [ýg…C©)g+scM-'U%Ù!‰e/b¯Ý»Ì½%—^Ä~ô¶oñʾû&;’êl܇÷§™b|ÅG)G‘RbEecß䨻©°yþZ;ûæÞÍCGߨSoûæ0õ.NE[Á‰ƒT7h+èIåæm¤ŸQâ¬ä*f6KÛ·‚[ö ­¶±ƒiÜÝ­z3Í[{K.½„=õvÂËÍÆ)Ã~ùäÈWè1[á·¼W¥7mÙ¯y¯Æ6-’w7k¶»)rñ$ qZœÁ+‹¡µ«ÏK¹·*U¥±½w+¸›¯ÛsOÅA¶hÇß$ÜáëÓ”ýg8Kþ¸!L››ê™¾fNc~€°•¹Z;ÓdsoÉ¥—°§ÞŽýLú`/û哃3fÒc»4÷´›úÄÿ)_ Ê k*ÏÍÉõK,ºøçÚ9/ ÷–|:ì©·S±ñ‡é¯ý99H Ž”ç‡eú…éÒ}™‚ <øY΃Ÿ±¢v¤ÈœŠô5c¿Éµw¤È{K.½„=õÞ¾9¥¡+E>9¸XE:´üy͙߯lׯàuÊ=‡ÂûÝÖÔœŽ)©Æ¢Ùh®½ÛšzoÊ­±½m_˜ü:§çl%g¡ÿvÉFŠá–(LZ'eß\|o-W3DaEÍœdZ²YâZËH‘×nyWòÞ’wç{êý·R±#±+RêF¦bƒ³ðRŠ‘¯ˆì¼Žf91ɇ´}ТÜòíË55mË’Ó=¤Xt˜Îµ›› æÞ’K/b?z;{ñ~´3Äa‰ æóð&™åöMΙ …ó2$¯¼q +ªíÌs˜] l»œ(©›œ3´·åË7¹öü¡·;#&GÄQg„z4»ãÄÿÍ|ãŒ,ÉéΊڷsÔÝ`œ‘!¯}tF¨Gs¸ÔKØSoY'‰ ²þ]’ƒ!í£¢åfxºcÎv\ô‡)X޳KùC¿¹°¢ªÿ]’ƒÌ~c#óεIñiîm¹ôöÔ۩؃YÝÅÎÉ;öb¥1&ÎDböEØr±s¤D«|§(q{nl¾· 2½ñ‹4Å\»æÍÊ{K>Ü2ØSo§b7ß½t“KÎ…æÕކbâZ¤R·Ïl·èu0ï-¿œÀ¬¨,FH.m‰EzE®=!roÉ›ï…ÀžzË:zý+´?'AÜÉΚ8ðFª5¦õˆ‚y›}Ë;ø‰5U=3Òœ‚>TÆŒôÚ¤ð´ö–\z ûÑ›˃dv4uæÏEŒ†áJß‘21ûç1{=¸[:8’8\ŠLá*R0µ* <Ê=%•zĺþµÎÙѶ)?'§ÓŸŠÜÍ>ö•nS¾ÝcË¡XbEe‚er çVÛ‹àÚ¤øôLOXÛz {êíëRËdœK×¥– ;—˜É±Ì•cTc!R¾õºåì&j,)®Í§Å¹âåeìûG`D8×&ŧ¹·åÒTØSïÝAå¹;#ܼ=t°=rô°3B/¦è2»hT$¿ip„5}¬HÎ@0ÉØŽYY^»ûX‘{K.½„=õöui!q>—Ÿ“ŸL\bn&=L€FˆlŸäCbMam'>€ƒÁ3ÆN´÷Ú¤x]ºìÌ€\zûÑÛî¸âêÑLeg1¡ºSéäðìz™âhp†ŒäœVi¬¨¹S¦»‘ÆÈØR®Ýì†É½%—^žzÛÇ:Þ2wªÜʹ+ÒÙÊÑ gfu‘Žåá2«+åKµJÄ®¬\òÈ­Û˜ §µÛN•ÓÞ’K/b?zûº4™nºìòM¾Ìѽ 3ô{=èlpUSÿèrU®”OF»…5u$n‹ƒBb»»r_Õ×ÖÞ’K/aO½wª\á8ìLÅg1»ÚE/ƒ¹LÑÁ6q8¶\ž,aEe߆ätœ$Ex%×ÎðKî-yË¿¼ý¡÷_IeˆÉçt`M ‰S9­8Ž¿lÀTØx¶US° Co]ÉÃ-Â’âÚ|ZU [Â÷Ú%“¼·äÖ”ØÞGçlª¬>«É©h8>.wÏÖär.‚™ÅÝsC>«+õkªäœ:q:z“Û‘YïµIáiím9õö£·LåFrÉÁ•ç)õh$÷”öG#¹'bÀeËçÑH.©¼.%WžÄâ:”kçu)÷–¼ä¾z»s6=²ÉÁqtLþz97tLþº{e£ƒu|¹$_tg k*²æ4„ÞŒ}o‘œ µIqmîm9õ2öÔÛ}#oœIJMëd¼ËÑëzÒ¥59ƒH½PsN]s¯TÈÕ×›XS5­9pý=ÆÂõwymQLex˜äH9õ2ö£·S*kîv"·9LÆf/v8¹¯ÉêAÉa–+j»çÄQ2¶°JÔÖÚG"·ö¶œz{ê-ë´.×*a89èÈ4×ÍþLèÈ4k|I1Ý€¶Sò«±÷±¦rr¢9 µ³Æ6LFôÚ-''zoË©—°½Ý9›“åÞ#î3Ïz54‡®¡è::_a $ò»ê–Ñ“XQÿæä0ÒXzD¼vuºdî-¹ôöÔûï¤20¤È¡›?'çfË ùªÐ.U”Ó ¢ãI_Vm+êrrgrä½–Yi^;gnåÞ’K¯åZ ­÷N/Ÿ7zrðVÆ4ñ|£Gböü¼Ñ#y{d"Á ´žg©ï@rðVN,ÞØ¹v¾ÑsoÊ­±½}wš [ogž9JGXvo Þ†ö "Þož³ ªS°ˆ5µyæ(•á9Û˜zí#•A{K.½„=õÞeFM'°'ËŒ£‹ï‡¥>×ôW»ÁŠQ¼ßTô¤œU?ÆšÊ^4ÉÁ'±%®¶¹vñm>÷–\zûÑÛ¡¦ž,gž9+$qGéÕ.­¸Í¬Û”Ó œ}á6T¯5ÐOÎ`r‚°hD–k7?soÊ­±½}wR³ÎáðLr©Íd²\LS˜o+§¨.t4µ|5‡¢kjäUsZø‹(®]žÉ½%—^Ä~ôÞS‡&ÅËo’Üð㎲ؕ¥.ÜfžÇï7œ d9g&+ªúv’œÂÎpÄö‡³\»§ÃØ{[.½„=õÞ]Ð'®:Å$9‰Ý8 G׸ø™æ“r*Òã(çÅÁXSÕßÈäüp…pûk“b¨‰{[.½ˆýèýWBMS÷ÞÃK]jÂ-Îà –iñÒÑj™bðˆiƒä ^a›TÏù®æT:’„-t$ií’7Tï]2jrmì©·ç:\t¼]$‡®€¾Þ0‘C÷6ÅpoCäDÛ챌MjØ.'§³GPum8é¼v³ 8÷–\zñòøÑÛ]nûmlÌ¡… ÕN´{¿êë›h#H?¡¨ºíL¡&q.6CIë›hç½)·^Ä~ôv×ö¹ªøÛN<£°+V…;t”Î2‰‘3ñ ü¤|Ò+.¬¨ü¤“ƒ$)c ª“¼6)>ͽ-—^žz» 7²ˆ”^ðsrÐÇîêïH΋Ö×ó2 'Õ‘ò‘Mk*Ó“ƒQN‰íñ³Éµ»Ë&roÉ¥—°§Þžë D×á„®äÌÀ¬¦´Ø­Æy¤`AšeKŽdšÄŠö²$§Åõ5±5~â¹võ}9÷¦ÜzûÑÛ]*Ëiºý&Éáû@wžpÞóùdPQ qNŒå*ÊVT·ß$9ø¡$“áríâ_Wî-¹ôöÔÛ¿}Öÿ6÷7¡Ö{е5ÑbxqÅt×Ïûr}IC+•žNDÖç™Þ84£òªÙ«Ê{R*mˆ;uõ\‡ÅèêZÑä`²¢ ñÏ×ÈTA«jEU¬)Î'—±IUW0&§°k!±Ñ*" HEѤpoË¥WaƒúSï=*¨p«FÒ$5ñ¢ªú =èbxO”Ó’²IÁlÉ™)BlRÓÕeÉÁð•Ä64&òÚÍÕe¹78©°_½½À»ô™½ NÎu8MÆs4{Ç—`²³­ç:p’“ç:TWå\q”-'lÎud/Ü“#½dŽN½½PxÔÍp¬9qU ÷Ñ—;²øÕŒÈFA«[>Y‘/,©’AÙä\ñe7¶ éµIñiîm¹4öÔÛ&epÏØ£‚†‡aÜz„‘À( ô Å×¾æ+HžS €5ö¨ qðÃ=&5Œ{¯Ýòzä½%—^žzˤ¼—=™rõTIF¯÷z¨ õû{ˆöm³˜b†Í–ãže¬©aƒ—œŸfbÑ´#×®y™òÞ”[/b?z;{¹zœËðsrP¨Y7kýÞ÷ŬŽ™âÕ>Ÿ-oø¨ÙÛU½¶Ä¥~5Ob#áʵI1{AY…”[/b?zï¹rЏ< ¿08¥s†ø…ak"ðÛ,Æ]ã’+œˆ–ÝðÌ@C;᪵jËVxÚSR©ÜG׿º0ì'’*oŇÄÁÏ¿É_Xml»%Š1:‘,GƯ±¦ÊŽ&5úÜrà]øMÙTKk·ÝtK{[N½Œýè-ÜÄ/#LÖÒdUsÐb£¿7÷‡ýâ¢øÞú{5ïåŒkª8²`NEyµ±ýú½vÍ~þÞÛrê%ìGo—º²¢—ñÚŸ“ƒTÊ›A€x‘ÖRÕg˜r §Ws „M*[ƒ$ˆÄ¢aG®­AroÉ¥°_½dÎpŒ'Ú@„¯s!Û ¹sLJFúBËÉᬨ¶ãCâTƇ†RÿñÚÙ%÷–\z {ê-V„x’p£sTý²8_ƒ½*JUEÑbàÍ”òŸ»±¢ffc›3¶g`¥˜rnƒ¦}ô±õj©{mOªº½¸ÔU¤ ¢•ŸûºaÖeŠ6€n1Ëé@3VTw›“äTŒ-8xíâœÇÜ[ré%ì©·íK£7ÝÃ~NñoYÀo|5?Ó·&ÚÁ©ä—ó€½ÜTÛ—xsàFM,¦äÚ-ïñÞ[ré%ì©·s· ~#ç:˜3‘…c3é$»9ù§4SÌ(Œ7K>™VÔØ…±âtÌf0þÆ\»îÂXí-¹ôöÔÛùÍ7µIÎDcì÷0Ôø¹Ç!¶+0—Û5]œc§©˜ÀŠ»qéå–J‘Ÿ`lÛF®]}ɽ%—^žz»Ôuч><í:9¨‰rT9'Ç…RÕ«›¢ (lÖCy ç­‰55|ÂJN÷ ¼ÂŒ‚ñìµ›¿‘¹wó|½6ûÑ{çhZ[s©ëð4·ÕÜü sÈäàQÎ?@»Éœ^Õ²±œ9˜bl¸ÛV®MÊùß"ùð¹ûþCïp?x¢•Ì?&:²J­FŸõ¬Qô³¼q౦²ñ®9ìš`l¹ÜX!Ö.Ùx×{K.½„ýèýW|s‘ÙžoÍŸ“Ã4ñÁöj|s†_Ïùކ_)Ÿô¯ k*ßÑæÔÇ}^ ›ÄÅ×Vkלhä½-§^Æžz;wûq›²}’ƒøò«5Ïf ÷Ú³lþ™|wY>X)¬¨œÄ‘ùý„…Ë!×.>õæÞ”[/b?zÛ7×òM¥Û9³~^c ÚÅVp«›¢ÿl¹ñä—-°—-ˆ>éä´øË[ã/ϵ«gGåÞ’·|ƒŽ?ô¶on±-:úþœtülz‰‰8¾µ1LÁ‚°ånÍI¬©é6ŽÉAéYbñ̵›ÿ]roÉ¥±½í›» òíÇœ;Þ=‘#}ÑÇsßð–ÕnŠþ³ÊðäwbMå(ìäÀ,%Ô\{äíÇ{Sn½ˆýè½s·=!ieîöCOfL:½PMŒàòDó·QLÑ6=ß òåÜ `EXÌ)´llAº¬×&ŧ¹·åÔËØSoûæ4Ïl¹erP41•>0±d*sœÔ?òä¡í©ä—ï3ÀŠZ¾'‡¶ÌX†–¼v·‡(÷–<'¯{êí6t”מ¹j¦[Ô(§¼Ñë2¾ï²èe9|ÿvpÑ×ÙrØòÄŠÚ3WÍa„XØÉ™ªZ{ÚÛré%ì©÷ßñÍáËÛ9šéçät¤'²t=Γ¦cVSöÍÝwÊr=Œ5Õ²VÈö^6[®MŠksoË¥—°§Þ¾;qjj»\)‘\—=cµa !"|Ã,È{Ž¾ê–£¢ÆXS—+%’ƒÒÄÄfr_÷T)‘{Sn½ˆýè½[x¯o#s²…÷µgѯÛãÎÞljòÉû.Ÿüê_›³[x# ´ö§…÷5~-¼×nÄðÑÛ¾¹ÂVØÍ-‰“ƒ“<ñŽÝ‡MSôŸ ú5%Ÿ´0Âδ7nø-r‹¬„\»¤-óÞ’K/aO½ß\µø99 “·×Í~°‡o.½m雃<}sí:=q¶7æ Gôá›õôÍ ·¡ÓÞ”[/b?zÛ77Xµ\ñ•݆¦}““žº2Lñ6t³JrŽM0VÔJOž9ô‘Xݤ.²'Ï{K.½„=õöÝ©ºAøºuwçŽÿÄäíÊæäѨttV?ÙÈt ¦àH¾˜¬#¬¨åÛIr0W,±˜$–kŸàsoÉ¥—°§ÞöÍ-Þ†p8ú997BPó¢íiô#z™÷2 óàzÊ+kj¹B&98¹&VyßZûÈ ×ÞÃ~?èEìGï¿Ó&h¤wMvÚœºÛ{Þ¹hÎÓÖé«‹V>«o9+7Œ•٥ɩè¶e,Ê[síâ»Lî-¹ôöÔÛ‰v†Ö9ûäçä0ÕòÁè´ˆk…SáÁ8'Q°†qѸ·œ%ªÆŠ>m%§{²°LÓôÚÍžðÜ[ré%ì©·ó73sÜmq”»Ý=¥õéÓY¿¶N}¹4ä×9œÂÔ¶Næ(ÿZXåfkí#w[{K.½„=õvîve%wέNðDþ´Ú+LJx!]¿Ž$ÓÈÆ.cË—ïÀŠÊ¹Õæpö´±œKíµ÷Üjïmyu{e`O½h÷ÐVßöR&é×(l/¡¢‘{ɠŶó“A%ž ¬¨Û^Êä\q¨þÙÛk‹âÓÅCCn½ˆýèíÜí‹ñš•ž=sP*9ÒòV„½©+ܳécäW?#å­ÙXS+={æàø’XÖäÚÙô1÷–ürÔ*°½»Ýè­nÈ—œÉd¸Î{R""÷ºvS° Ñ´ lùű°¢FV²šƒ’‡Ä*7ŸcsoÉ¥—°§Þö› vÁÚªŸƒÃüƒ"Àhòþ³¾?ºgšˆ½"o¿¥tàœ&œˆÛÙsfà Ü„ÕÕª$ð(÷$ÃÚ\̨:tý;¥®!Å,CL£¾q¾gæj'¿FY†gü^·œåÞÆŠÊ2Ä䨒úòUE€žq¾ZroÉ¥—°§Þ;ÔýzuâPrôŒ ú1d–)a¤|¥¹ë–g;`EÕœ$NC•ž±=›¹6)'>¨!À5S/cO½w©k¹?Éœ,uÝ¢±Ï¼>éºYx’¥®eOã3õ)u-{*ž±*eÕÚŸR×ݨ!õÊR×rÿa:o¸ ³Ÿ“ƒz÷ÜœûÐjjÝ”CMñZ·œ“µÝsæÀó•XøÌsí’Ó`½·äÒKØSo‡š.O¿ø’_Uô:½Ô°©¢ø´\¦x¥©ì¹)9[2 kjúÅ—”ƒ$~®\»ûµ‘{Sn½ˆýèíëRg;üÇNVs8J9®%÷ô˜åH P[ ׸ä VreÀ_‡äzè»xõb´úyËÁË^›Ô?º¸¡9¿äÝý=õv*ÚácŠ«íÌYáVŽL ?$ SÿèrUkÊ÷kjdVsàJl Sœk·ìÁê½%—^Ä~ôÞ×¥ªöO^—*˜;gä5¦;#à“&Ê×¥ÒR]ÏFbIim_—ÀAÂŽ°ì´vÛî´wÊ¥)±½ÝµF¬?C€âD¥Þb§hFY*`È8•î¸'åán«‰%¥µÓWÑãû¾ù{×òÚ¢Ò7·\š {ê½SåtïžØZ=å C“FpØDc¸qFñž/[®À±°¢nÿ^’³82}¸ Ã}ymQ|º¹Lþ¾¶^žzÛWã;ùqlj#w\Ë9nìÃ}/<ž©tý3¯/<æ¤Kíœø­µwœö–\zeïþç…§W'¡Û—êD”1˜`@×Í\°£˜J‹qmùòØåä˜bû"e%sJríœB—{K.½„=õ>Üq|ǯ#UŽÿÖeÑ%F‹å§—:ÙŽ.µgËdÄšêÙ‡ÛäY&™•¹vÍi°Þ›rëEìGï=¢/Ã6)úLŽìŽÝ8QO}¸›'ê5ÖÐHÎŒ#aIim>-¶Óš†×eçݸSnM‰ýèmwÜ¢µva%çH0¨¼:Žäƒ¹~©ÙãakEÊgþ>{ÛT6yIºÌ&Õë¹v³ +÷–|ù\0ï?ôÞ© S·æn¥Ð4™‹­§q&6\—)§2„ÅœEKƚʒãä úžXçÚYrœ{K.½ˆýèýwÜqË×b•†'¿Ÿp™¶àët°íÆ Ðöá,CÉã"×kjØù‘œÎcœ°øýäÚ ìêSb5äËÝQûÑÛ]» ²‹““ƒÁ5½ sgœ;zE¯lÕ÷*i0òEÚµåi û¸­VVÉ’SfÙ[Ñèßk“âÓÜÛrêeì©·Ýq‡DM»°’ƒ¾›£Ñ9éA»OwrñsÍ Pš#¬;±¦fÎÈ3§ÇÏ,±->Û\»ù_1÷¦ÜzûÑ{»ã¿y_ž[’ÔćK,rUTχË,îþ¤è2c§'ËÙéÉXQÙ†49ø{ãýïµïlCê½-—^žz»k·f®^n*œLXŽ>ÛC© á+lá÷¸©ðÕßT’ç|½ÀšºüL‰Å É\{ø™{Sn½ˆýèíºWÍÑBDàçàTøõV“Û«ÒÁvÛûàÖ=MÝ‹)ïÅÞ tÖ&ŵñ´9èblA|Ák“âÚÜÛòœøì©·ë^6U-žB—œŠÔìZxEÆQTª>Õ”]fjá yžb€UúÇ¡¥Ú],¡%®-ŠOžU)§^Æ~ôÎV “ÁƒÞÜJŒ'‹›<ãÂ\Ñô`™ g/QIoÕ„1üz5e+Æ¡jÅ«f²÷¤TÚwêúw²X¢Úº«>’3\7=Ù$®²2ùé¦x¥QF³ä‹¾2a—=g™ -´±ÕikO7ŧ[vÙ[¯–ÍÁæ^©>ìIKÁÏÉAç¡‘9*yñÊ2oS¾Ò`0«äÃ=h×ÜÔ°#29¸$ň¹vµÈ½)·^Ä~ôöuéá`Õá—Erà¹@¾¢äƒîJ1Å/fçµEòáC:°9ŒZ/‹ä -Ib ¸½vsÔ"÷¦ÜzûÑÛ×¥—è>($™ÈÎf¦Rtë“cÅFv‡ëjœ+y6ÕVTõk99%ÞÎÆö™Z›”]}±·åÒKØSo_—š/É]ç̹XYÔ™[x£r(úlWS¼ÒL¶¼üò¿°—ó!»;ω3Y$lgåÐðçž•EÚ[ré%ì©·3¿/&Õ5697Æ~Û£Mcìwd;S¼Ò¾Ö)ŸYõÄšº|M5;ùàµGfFxoÉ¥±½íŽS+²+‡è™ƒ¢¥¨àQó±’µ>ÍTºÌž-×·XØÇ”=D¯ço1á‹!Ík‹âÓÓU~gÓ4`O½Îsú–]Gç9vX«¼.ʼn9¼âê ²<¦ì`ëkËsðû=“ªÙã/9H3¶nçÜcŠOw§øA.M…=õÞ•EOŽú99Y¹ºóá¶sáì`»ÊÕË£t€½<À&ÝqâÈ¥&lf¿í\9>=Ž|¹ÔKØSoÛ—ÉL¨‘}·Í™|/gRÁ%vÑ)º¶Ëìaf åC]¢ˆ55²ï¶9 ¹ÝÆÖðkåÚÕYX¹·äÓ}°=õ¶}©vs6ÛqP0ïñNÇRdc¿o|ý¹öœe@ž5öÀf¯Ù¾,wƒ{êÆ"Ä™kg05÷–¼zˆ+°§Þ»²(Þáá󟓃ºÚxG¯á÷õù°ú'z¢²} W¦äîŒ5µ2£À„ç;<€ks@ö཈ýè-û2w^»zÇ™ƒfŒ¶S^üàØ»ç1EÛ¤‹OòÅï¼°¢†ÿòä°òÈXöìöÚ»§·÷–¼fó¦ö‡Þ¶/ÿãBÕC<9xé¡ûhèÒÉÉ 1ëŒ-šš¤| 3ÊXQÝŸtr*üµÆ¢SY®]€Ì½)·^Ä~ôþ;ïïÇ¹ÛætVÎÞ7{Æ2ç~ØS¶:G,^J}¥œ°Œŵù´8“‰ 'Q˵IÙ·Ú–KSb?z;;n±§àíQ¢æÄÕƒ1µÅþ‰ÍßžÛ]f¶“´.ºŒ5ŵùtur;RΉ­l}¯µIÁÒjoË¥)ûO|ôvºÂûÈgˆÞ8áU‡І®±Rõ3D¯oëÄÑóǽñµNæä½¾­“×þ Ñ[Û:Y¯¢7þ´N•9iOõÉ49Dã÷ÁŽë-š¿)¤9|2Ñw³m9Úé'VTõÉ49HŸ7öýrE¦·Ö&ŧ¹·åÒKØSogÇeC]Z“sÓI–A8И&JŠ6$WAØÐP.9ÈdI,rWríì.“{K.½„=õ¶;®Õ??'‡ÕAm¸ù[T…‡õþuVµÅ®H’_ú¦ve‘8ªV•CZû¨,ÒÞ–·³*飷¬Sc‹Íhj Ümsž8jÍÆæœ1ñìz)¦‘‚Qúåìke¬¨;m™9¸Z-ž\›ŸæÞ–K/aO½õ{ph¿J ~F‹ÃÉÍÍ{Åh5ZÉÅÊ$è*‡#ER¶`NDÉA2. Â-Ü´* <Ê=É6Ä}tý;î8¶¤¹šÉ<ÿ#=;ÇíÀ(g„—ÑrÎ(4VT¶ªONeÛ a‹[ aíâ|ÂÜ[ré%ì©÷vÇaN+j¼Næê„Kli Ùajkó±<®4£mùà`aE'w›Ónf7t'ü­šk“²;nÝ)—^Â~ôvv\92 ~N޲ãTX¢ì¸æùÒ™7>Ùs瘢¤Žb¢sLQb•ý¦µì8í-y93>z{Þö1™ø!ü±C¥W¾Ú¡²,R™apoùà ÇP×TMQ1 2•c)ùë–°‡5(îœæ>}-õð+ÅŸžž­^z³nì©·¬Ó­gw¡Gr&Ž7"¢|?Š˜æ”`4K¸·|¸«7°¢º =’ƒT®Ä²õ¯×Þ½7åÖ‹ØÞ»Ije°Z„%‡åAmë#gþ)h°†)XÉ.Í–?¨Ç2VTuÁgr˜ë lc®ƒÖ&ŧ¹·åÒKØSoY§ë9•þœ5<(Ùèô½ÝÕóS½îîÐäƒáa‡›X¸í©9=|*‰Ešf®Ý\®™{Sn½ˆýè-ët³ÚÖ– \[7Û§qÛº™Uµ‡µ­û±>ä[³ k*‡µ%³–‹®¹vk˽%—^žz»ÃÅ&ÆÍy‚É+6Z—jÄElnŒ4 r£6-åSA¬©æ<ÁäÀß“Øy€¹vqž`îM¹õ"ö£·›¤âÝ QSÃyÌy<º.rŽi(jÇ{S,H_l?P=¯”uûŒ‘ÞÌ…e ×&ŧ¹·åÒKØSï¿ãÌãP§¸Mr’ÒpB=Í…¯á¤zö@Ú÷[Ôç–ßpp+ªØÞ˜óþGÅ­}ÿ>s­MŠOsoË©—±§Þέ»Ø7þöÐîä<¨J _€úC°£C¦`Aªš)T÷xˆF šº=´;9"ÂFBúȵIÑõǽ%·^Ä~ôÞ3%Æ6Sb3%®c`LyØãÿ`Afa+Ÿœ)Ñ?3%ú6S¢fJ´c¦Ä}Œ¤à:F¦^9Sbëíܺ›ãxs´Or®xŽpQ3ëýYÇ”‡VMÑá†ËlÊ;²÷„5•£}’ƒJ¾Ä¢”/×îN0ʽ)·^Ä~ôvnÝÅ<øî*©ä ¡ôņ RDþ[Ÿ¦èp« IžwÞ66Õ3ñÁœ†fþÆV4qèygu“ïM¹õ"ö£·ylšT‹s“ƒXLz`ûª20âé¦`A: _Ê•/*¬¨âœGs ºB[>ëµIñiî-¹ôö£·y1?ÊK3%Ìžš­²IÝ ×ü w`3e‡[½··ÔÄŠjÙ–Î|Ò‰-qÐɵ‹GåÞ’K/aO½ù·<ìÿÅFüŠ™~>;‡44ùc‚›ˆØëÁœ KuÇ$n:CM_.3z|?Œk¡”WmþfyOJ¥ q§®Ç™÷ðµZÜ#)9Õi.²¼©«ïµ³åÂ;zoù`ú¶°¢Š{$™SP3al¹x†Í¾Ök÷ø~fÊ¥—°½·3^Þ‘Éœ £=ÃéƒÓ0F@”y½lù kOXQ# ’9hôŸXxñríæ#LîM¹õ"ö£·sÖápû99™¿0>îog «0ß^μÊIwélÏÇ ™“¹úé tÿÑèr®¾ºzŽÀÞvæ]Lt/Û™'Nã,ÕÛÕè˜ÃÊb;Rt¸Uç¹@Þ\éŽL»æü˜tæ‘S:óˆ-7y%ó¿äÌÓÞ’K/a?zÛ™×™Gµ<ƒ%91\3³éÞ÷i¸ß”I§Ãi”œ¶¹å·3 µ\ø‘œá¬M0Ï^;g³çÞÝý]û³±§Þvæ±ï©>Œ&§Ñ…68¦Ó…ÆǤœŸ€P©äœÃj¬¨êè97NÆÞ°ù^›ŸæÞ–S/cO½]Š$cŒÛÇÏÉÁ=1œf•NÔvý6.SÎO¸Ç–w4x1VÔå”ýä I‰°îõ3ÓÍÞíÌS'õÊ#K`?zÛ™‡C]ÇG3ÇÍABHä°ÍŽ^?qöcÈM”óÚ•rZ>cMÍíúg°ëª°,©ñÚ=»yoÉ¥±½[×ãu-P”_“¦º…EˆºŠË©mš¢ @ô#åˆ~$VTf}$‡-EeKQ¯ þ¹·äÒKØSoÙ…ÊðŒÙä̳—\O¦+¨@ 6 .ŸkË­Ÿ°¢rÎprÉ”XñÚ9g8÷–\z {꽃E×÷ÂcNÚˆ{_x"Zù½ð\ãh®€YÞ‡}õ ­Ã¾Œ£yB®ý ÝûÂc½Ò6]^xš&@7ç;'§£óö{€]ìI†®ÜœTYÆîÚÝ8Mu¸«÷xkªíæâ°êšX„c¯-Šöåa:åÖ‹ØÞέÃàGÌZpn88?FÛM1/ä¿©·útîvöW‡|²Wœ°¢²°09˜Ù–X?síœeš{K.½„=õÞS!nβœON…ý³–œçñ¶(>í—)Ø€ÅV’/6¥ÖTÉI«äÄ'­ÂÙ‹Á+ÕöËCK7ÿ¥$_´¥Ä~ôÞçÔ›ôr©«8hôÍÔÛ4\bƒ/R°ƒy¼–/ÎVTÏ‘{æàØŠ ×®yáñÞ’K/aO½ÝJaÒÖ-ÏÅJ²jU¿^´F«l)'ŠãáLÊ[v¬©å¹XÉAŠ]b‘b—kçt³Ü[ré%ì©·í |µqTk—ì‹8·=ãÑX¡=¼q``§(Ø€ŽÄjË{õÏtM]þ¤“ƒ;Ab}§Z{8C&÷/ ½ˆýèmû‚6ˆxiê9l-Û‡ûÚ÷ûP‹)Ú¿µœsq•÷Ñä ŸmbÙ–Ökç[/÷–\z {êíû‹jŽû‹8º¿d½r³KÎ â#ë ÏŠ`E¹Ûâè"¬î'Zû¸¿ÌÏT"é%ì©·s·3£ÿvîöã\ÂpŠ©ƒ(OXÑk4¾¥¤`Fg1ÉÙ«ÔXQÃgËäð¶c,o;^»eÝ‘÷Öm(« FÿCoÛ—îiÛÓ­º{úENÚ´ÔÌI[‹-ö„‘Ú”ßîé÷¬Mí‰9è “Xt†Éµs:Sî-yw?`O½m_˜ÚT.D'9Caâïzúöáj¦h1˜èa¹ÎTŠʲöäLpŒE¾Q®eí¹7åÖ‹ØÞ¶/È)F‡ÚKöEœÊ9=[¹è>ªýÛíø’±|:ÇØé+ÝcÒɌ٤ÂV6yÑÚ¢l_ÊØò™]žzÛ¾tþí·Ã£ÉyøüÎböœßêÇ”»Êø¸åŒ{{¨qÞvn5Žà°ü¤ÓbL‡á¼·åÒKØSïݪ'Îw#éÏÉ™lÌx1Œ²Øµ¿8RöaÅ7CòÆß¯°¦°6Ÿ§qr°•Ñ ­]sê÷®Ž~@/b?zÛ¾pÆë(¶•É©¼‘ ‘£8GãÆ±‘nذ qU±n¹ÄŠJ7¬9WHa;²E½vÏlRïm9õ2öÔÛ÷—qU~NNÞAæ‘̶xrý´‚kÛv=¬^öq-CÞ_ÄÉVpíh§µû‹ö–|œÁžÞ»6hrpG½³6h²Ëþœ¨ÏYL YjG•„²Ü|‡'gÉRû5u¹NrfI,^½¹öp3œÜ[ré%ì©÷ö]J—(é»TkxÁGuóÆA“‰^b¢ì›×–ßî0 ¬¨]MjNC÷kc‘Þkg"Eî-yÖ{êmÿX³ßgxê8˜Z>ªÂ[Ãs9ÅL}X˜œrö‚1VTVß$gaN±3þArí雹·äÍþ(`O½m_®0ræª9ø· •>÷˜©:«uñÌÕÙ™H(ùpê°Ã³lÝØÇœAõÄ¢¥g®]wcŸâ·[/b?zÛ?69°ýqsRqÐDì‚j±)R!Ý2k6w+ºiR^ ïóÄVUGªxÙ^}÷6`£"ËÙEÜXQe÷6 g=ìm@lòܹ6)ß_boË©—±§Þ¶/ôëLŒø997‡‚Ò WÒ >¬g˜²Ç+..’¿¿íè $¬©•/sX4nì`þ Öö‹äÞ’K/b?zïø>†\_öÁ&²è_Ñ?áñjpS‹¢ à8nËq‚J¬¨k7§‡ã.„tÊ•k“r|¿µ”[/Ê8õÞ½sU@ßÙ;GIee ¢^(uá­®èm]Û¬-ô_ ;Ö$“äÀK”XŒȵ«SàsoÊ­±½÷ý%ü½ç\:s{ ÑidRÄܹ~¹Öγ|:{ I>Ø…HXS}Ïò§·Äâô–kç¼ÀÜ[ré%ì©·í Û„Ä9WéÐæÀUo}áÆàâ1õ±’_¼í +je=¨9šªšÖf\{íáøÜ[òæx`O½w|¿«YnËø~çy´1¾¯2¤Á;Æ]MùFRï-¿yŠöÎû€#ö·KæÜXØõ\;í~î-¹ôöÔÛöå¢×©»?Sr&çí<ôQ-Æà -ñÚ1øJk-yóo-°¦ºû3%§Åå#±m°½vÝm²µ7åÖ‹ØÞ»wNç϶{çtN CUœ¨ÚEGÛ”#öm¦¼2z)¬©ôØ£¼RaŽV^{¤Æ{[N½„ýèý·&ÿD¤´L 7‡•j·ÚbOøçnmDAÛs¹S®¶ØÂŠj™nÞk‰eÇx¯]21Ü{K.½„=õv:4a£íÓ¡»ÛsFöbnÏ9˜®öœÃÍCYÚj9Ë^5|OÜâ‰mlºÜžSYN¹·äÝí9=õv:4¾ŸéÐÓ$‘½Ü8éÐ*»ÎÞÏH‡.þ­#ZÔ‘-ŽRš…Uº³Ö>Ò¡µ·äÒKØSo§Cs`FYî9‘œ› !“'a\ì#Ñ$’‚)Ïa¹º€ +jå”nsàK,F{çÚÃÞ®Ü[ré%ì©·Ó¡ß"4Ì#9+®ê‘¤,ß}Ìò‰¼Ë,HW÷5ɇgß;|ûiî„ ’˜‹·N®o¥Ü›rëEìGo§C³æ¾.§©'çfÚ±â¨úŒÞžZ,ë¤ ËO=VÊòz¼6ŸŽ´Ä" 7×~£çÞ’K/aO½=ùçñlwÝJ“³`Za òü"AùyLÁ‚´žóËÙ aÜ;Òâça_HÌX5[rí¶;!hoÊ­±½•]9²|zl¼+Îq ¤¢ï½äéŽG«³GØÓ’RޝNDÖ'™ÑãÌgj†¼j'yOJ«ç«îÔõïLþîþ²ÆnÇ~1……dHk|0_©1Q„”¯4èc#ùã>6¥njígq²d¯±k{íáDŠÜ[ré%ì©·Ã=u·×í}sn$MGZX´ºq"ˆ R,«sô#$Ui–O¦h KŠkóiqpF06Úûݹ6)>ͽ-—¦ÂžzÛ×V«AóÉAªn\p4Æ/úÚ^‹.ßâ0F8Øúµåw:y¯MÝng“œ…æ¶ÄÆËëj^[”/W«oy·ÛØSïÝÛ pò‰ªz““ ÐUCdé@›Ó”lOÛr õK¬¨–ݬÍ) à¿û;×&ŧs°|È­±½w:ÁP‹×–éƒC5×à ŠÜlÞ¦Ðñí?³R-¿í¼ö¶1ëžü#ÎŒ3AbG¸¾sía×xî-y÷0Âgþ¡÷vÇiàèªéŽÓ ÔçÞÃJ¦Œi˜és¦”¹â¦œƒRŸclêÚ£OÅ™žµà6{m¯=<º1÷–\z {ê½'3È!Ð-΢Û+/O j\îm ô9ʧRëˆ5•½â“Ó½àsíìŸ{K¾²alÿCo_—P$n¢åthq&<¬6ѵ¢ª«>)‡dÂÅlùl_cEí¡ßæ ¯nb1Š;×ÞC¿½·äÒKØSo»ã*{X yïÏÉ© à4v¼`§æHB~LÙÔµåx}&VT±³Û~#å7Òk“âÓÜÛrêeì©·Ã=;d ä Ó9Ö­1NoõÚLÙ¸Bþ5±¦²PrpÍM,úüäÚÙ(÷¦ÜzûÑÛî¸Î¹.ÃMö’í"-¬i€/[*ÉvíV£Jê_Ô]6VÔð729-~(‰E„*×®þFæÞ’K/aO½Þ9L¤Õ¿Kr4+NÍAÑ¿ým¦)Ú€ŽOÓòá3V_›êþwI À«YqÕ£v• Ÿ{Sn½ˆýè½Ýqh}ßéŽó îÉ ŒÞã4Å”ÝqÄ}1AàÙØËƒ¸=¼ÔíÄ6¦"Lÿ›eªBwòt¶^žzÛ¾(5)Ûs&gå„]h1TwëÅ&$’/6(ÖT¶çLNG³7cQšk7ÿ^roÉ/×íö£÷.·Qß ·²ÞÓ} §ó¬Û瞜ܓ'¬p°©oQc»Ð9kjf+ksûH,¢ÇT w>ðÞ”[/b?zïpO*,HN§ƒ ×àÁ¢Ëɬn*Ã=eËïø$VT&Ò&%ƲêÝk“r¸'ö¶\z {êýWzç Ž`–ÀÏÉaÙö@Ûp¦Glpp¸)Xñ`)_<¹ +ê¶;;9êœOlƒ]öÚ-;UyoË¥—°§ÞîÃÙÑ\LÖÉœŠôµ‰­ÿOmo×cË’\‡½Ÿ_Ñ$`ÂùUü2†D€€ Ù3o‚@HÇ#Xr7‡ž‘`ÿ|ïŒõ‘Y}úŠs?L€gnDÔʌڽweedÄŠu,·è!:¨´!Å ÒÁæ-;Òé„¥”ô,fuªÆ.Féì±!ájÌ-;üöô[ÊÑéÇY!µ;e…Â[zIUÁ†ãnœÛÚÞÎ&–’ÃqÖDHÍØ·yl‡ã<7íô‹ØÓïÍ3ÐF9sç S±.þvZA°´”bYm~Û¶ßQ&(,¥®”kêÊø66R¾‘è‹­Oô Å ²öø÷¶cý–’Kà­‰8‰±'ñØ.÷Ü´Ó/bO¿¹:5RME ¬‰Ørn$*»c³Û‚XR¬ ¯'éÚñË„(ÆRšîb' êõ„E½žÆnîb§¹i§_Äž~s÷ÓØ/ºªS–5øqa-ƒ`lºX€‰m {ÙãÆXJîÝf jñ…ŽjÛ½Û<7ìò ؇ßZ_ªÛ@h}¡ T;ÛD¸µ>Ô. kÀT°;ì—ŠFK©»54 ÜmÄF^¥Ç®Ú{nÚé±§ßÜýÜS;r÷Hƒ#›;ÞYtœsßGÔïZú^_òÑhÁÒ±¾ä£Ñ‚±8ÎÑØû¸GsÓN¿pÜóð[ëËDŽädir$ô ÙŒ%’ FBåâd„aò°q-¬¤ädjrC›£PBcgRhnÚ鱿µ¾ìì,'M¤Å¬áÆú±šé\·ú¹)=úf±,ì7Ëj½w/cqÒDÀÐØzì¢ã~ÏM;ýöá·Ö—[Ÿ +¬‰ó¾q%}¶‹ ôõL—¤X.ô¶—½ùð§liêMÔš8|6‡ºÆ†„«17íò ؇ß\_^»î»GÙ»Øo¤ñT‘²%÷¯§úˆtNJ±¼^ü®¼í×zºK©™ýFš`p0¶D±§Æ..ÕÜ´Ó/bO¿µ¾ OÍk}àû˜4#Vòܺ»¿¿¾ /ܰ=¬í·;Ëß–06®¦fÆK%±=ø)5v7¥æ–ž{úýÛPáLœYLu¶æFÓÑÛ' üj&IßÉ[e¸²ƒXIS'Ö_а3zºjlHq5ç¦]~ûð{Çæj;ŸèÖÄSyÅÇšw+nû+6· þWìmSÏXòÝšx*Olí'ºç¦~ûð[g?»ÿ#;+éÔåØÝ¬Ó˜ô¸—•@Ý¥@ý൦t¤bSÃtjb]Ê“÷â¹iÏâíí“ßJ•K५»Í5­â Úì ”sVÕr¹Í\íÑPº»o,¥ºÛÌu‘7µ¾±‘¦ä±Æä¹i§_EÄ9ÛïŠÍRžK©rÔ€…¾‘¨TãÔ* ñ³®Ö LÖWÞXJCÅÖôõ‚`lC\c·÷ãÜ´gsߟüÞT›—úãÔ4”lNpSàë|­ãó–„h[Š]í#: +i³`K¯ÏÆÆ ³Ç>X°çÁ‹m¿€}ø½Ï~:É †Ï~: Ô&‹C‘¦$ý´f{Ïb'UÇÖÙã~×-l¼cLM ±¹‰¿íô؇ß:ûi .»Ô‡šEH Y—„µ4$é4§ÕmM±”µ&º4]šËâŽmÖ`ÏM;ý"öô[g?×m殳ÍÜLg›¹ÕÉàÙÈg–³Íܬg›9IÇúRÏ6sÂzýøÔfNs›Šíl3wúÍõ¥ÅõqZþÚÒŒµe\,==[ yJ±´ðÎö ¶7–R×ÜšˆŒ["ÕZc§bknÚé±§ßÊ-(ú$ken5ñð_çû‰Yh<Úº$œÿ³„’v–WKÉ)_ÖÄÆæè² ±³v‰ž›öâ¿òüä·Ö’&%ˆYSÖ ÏèÏÜX”£À&KúÎÕ(ÏmGc8a)¹c5ëI:’°QòtklJ¸ººÏÃ-¿Œ=ýÖú‚ÖÏÕEÖt¤ì*¶óб0¶NŠ*HíÖ—‡Ø×fy}]86$\¹e§§Äž~‹ª ×ÑBk…š;b7’~âŽr‹kû8±”)´&~OÆ6õ«î·$\͹i§_Äž~k}É ^lÊóf¬£“UŽ£…Å;EÒw®FõÞö¡vA)o©™˜Mš±8a Ö®æÕFkWñŠÓ·_Äž~ïR’ÔæR’xÍÏx6b|}k¢§KÒŠÁšaw}`›©ÕT»‰ÕøžËŒÇv´ËsÃ.¿€}ø­ýK$ͳD÷ãÔDîÞ*Ça°ºš2$a (ÈÓ£½‚à XI.¶¦Å Œ°5Ng4võ鿆]~ûð[û—%*^÷­‰µ{QšUïùÙÞeb ¨ÇNs­¹o,%¯ûÖÄÚml¬ëÛë¾ç†]~ûð[ëKv/RHsGë·^Ðõ$¡1iE×—I Ù>Üç¤oéÒ¶53“»½·Ç†ô+]îÛN¿ˆ=ýæúR#4½6kÿ"Mä#ôÔYu­ôhl½ÞN!Åðú¼þä²·¨†VRñþEšhæ ìˆfÆÆÜ²Ó/bO¿µ¾$ýþnQáPÓPÀ¹w¦,à|Ðø®UaÓ,F~À½±Ÿi­Aà!Ÿ4‹Ûß1ÏM{Ûy`O¿µIÑV{Š‘ Gš¯z‹wÝ&CêIö-^ÈeïñB.,¥¡†vÖ4„ë‰ÅAc×Ý‚›sWÑóÆž~k}‰§¦£ê¡½‡×ú°ž<ÃZ¿Ù± –RÕ[_cãuØcgݹç¦~{ú½©Öæ³XGS­]»XgeÍ>û¾½öG£ÒõÕ>hÚnå8Tkó K»ÎF£ûAµvTÒM…§¤Z›Ÿ‹ujD¯ãyº”4¡i%KI3Öf–’ö!é;W£»ØÞ¢í°’Lƒ%M ± §3;íÓÎ-;üöô[û—©,@¶0¶&öÕ+›™ ?ûZ?nœîOåÊÍ™Dã²ì³€ðXI]-Œ­©ÑF[زÆ»ˆ:ÀsÓN¿€}ø­RR’¨ 5Uµf®ÒêÍ–ANp³“Û%é;W£«o{ñ.³li¨ÆšØ^o%»nšÎ »üöá·Ö—Kï5“TÒ ág½ñN‘ÈE Y‡$¬¿Ú+vðÀJêz2Y‘Hc#CØcWŸ inØå°¿µ¾€©rÜj+/Í ^ÀE·9ñ,Y_€×S2WI±¥Ëý¸…¥4œánM” ;"ï\cg¸knÚå)°¿µ¹ñVáÒkkœXå F xâß’|¢Ò·Ña)¹ôÚš~÷ ÉÜc»ôÚs“¹Ž~u`n¿wíÍÚ™®|à]{š 1.äS¯:!ÔÞDãÛ{ VmÈŽ¨•°”ÆŽQƒ%SX,™»9>¦¹i§_Äž~s}Y9Tì“Âý‹4=zØ.ª]T¼>ék Ö€ê&ô5žúÌ= lS^#PÖ”èó&lŽ>o;+å¹a—_À>üÞû—Œ-gšÞ¿dty\=h*úw® ìˆõA'Á"öaÛ«O’Û–š"÷ÖDꢱ‘¬è±ó®½áܰË/`~ïøXB܇û}k2vy»;–“®FÅLÛv§K)i¿OksºèË‚fšošsÓPóm“ö‚h±§ß›Ês ¶¨(7úVó¢œYgD&sŸ‡$œ¨Ä¦ÏöØôK©ˆxÄšà®vuI’Îvæm»üöá·Ö—¡wÒ.XS¢¹Z†IkЧ:»þð},Ö€j{C^±’’ò0¤ÁÑ…°8ºÐØ06æ–}è&°§ß;>¶ÞEGS:k‚!8(3‘ÛZÐ7”y¯E{Œ|Ú'SK©©ÐÓðù[â¥Rc‡xnÚé±§ß¿ UÁS¸Q”Ol ÙT[:š˜Äï,)V„3?h¢7 kɵÖd$FÛo±¶ÞYR|œ[vú•Õ˜qûÍ•öÆ™_Ê]³æF‡´ß’Í0j `s³Œúòn}ËdoÈœ#–’kɬ 6¶¢¥Ç®®%ÓÜÐØ¯À>ýU£ÛÎmyŸÀ´ydC¯îjÏ(ÎÅã»Ý¹mGq,=:·í(ޱîÜöŒâxnwnËûäçá·¨ ¢}ÅŠ„ЍMš¨ŸîiÈQ\Dl‹Ê£HŠd%.ßÛ^‘Qu»[ÖØ¸ššHÃvUcU )®æÜ´Ë/`~suRžâ¾¢ÒDÅ¢ÈùÍ=¨îKR¬ $î‘}‚¶—XJÅ}E¥‰WcãeÆc;SÇsÓN¿ˆ=ýæê”'4ÅÏðãÔ”õŠ12ž³5~Í#;[”\ƒÕs´³ÎŽXIY¿.iJüÌ…-‘ ±!ÅÕœ[vøEìÃo®N%¡¯oU“,k‚h±óÝ·D¤4º« I±‚¼.+uÛãÀÎXJŽÉZ‹ª±y½ zìlZ7ÍM;ý"öô[¿ýX¸gçœÁÃw!|àB†ù´gWpÄË â(Ø-*F,õÄØœ£BÀó!æ¤ÞwúÊÇpŠ#úÕ1i0 &MeiÅ«yÆIá*¦ƒ„E"ªmï8ŠjÚÿ–¦±qu×QU‹“uTlà¹i§_Äž~‹ý¦‰%Bå6ÒÌ(™Aýàzñ`7ÖY%á±\Ùñ*,ì-& •ÛHÓÕŸ5ƒ¿óÎ{ìêô4ÍM» {úͯU-bKÓ’" –…ÚD°–ŒÚ±‰ßKJìS€ÀRÚKŠ4X„Å’¡±÷’¢¹i§_Äž~kIAß¹v©1¼5ñ:»ÿ«]ô*Y’ðØo`ô£=ºŒ¥tíE‚šØ+Ûb¯ ±!ájÌ-;ý"öô[KÊD2^cŒ5ò ©{òüifðŸ82’½±±-¬$3ø[§ãÆÆy¸Ç.¦&ÐÜ´O5$_؇ßb¿A©G‰÷¼S%:£T=Xס 9g a‘@™‰ì(A–R1“›4qÚ"læC>›Ûm°9·ìÅíúÉo-)Eå=$N°&š›-†šõ¼ÈÑm-£JÂcÇI²O‡¯-M…•¬A'b:épìäg¤æ–½¨ì¨´O~kSGÒWÓY­Q0:#`¹Nä£DÃQˆßf4H¥âŠF\ÄIh>¥¥"âœÂ!—„£îTÎÉLxÃD“Ã×ß&:¨®+’q>NM$&­ÐDQ#µg‘\’pÊß@FM{¤ÓK)©ÊJšu4ÛŒ]]ŠÇ†„«1·ìIôÓ³}ò{“Q³Ç%vhr…gE´…ôžã–„S˜†¤oÚ;xQˆ…„±uf“ÑÊ´cú06$\¹ÓNøK{ú­ž,ªaf§Z¦+.vã1˜:ø¦$ÂŒ¶íC§C¥äìTk è?‰ìSíìTÏM{V5i`O¿Imn›,”šàÏYYÊêfÑâ\…}¾•¡VA+;Ès…½Lä%ö›Kís‚ð“Ø,2Й%ájÎM;ý"öô[‹JsSþYi¹+fvyC¾Naò”¤ž^mŸm‰€•dÊ?kâÓ4¶Ä£±‹‰H57íC5ñ ûð{³ßÜÈØì›Œ:4AþYd(MH`¨iSÎlP¡&ûX'±”L÷lMl‚Ç®w‹ìjŒMó¨¹e§_Äž~ï ‚•W³ˆè­‰W£éj¨L5bb‹f’"pka ½áu—XIYqTkÒòGØ•¤Ú=6$e´¼íô‹ØÓïMÊ¡‘Lʸ•–@ä½)ÐÌ ^àBÒ)ÿÚMÊ&.b%]z‚[8a[â46¤¸šsÓ.¿€}ø½OxþV)ù„§á;VI4’?nï)Ig6ì„ÓðîÓÆÆRšÊý¶¦ƒî…Øè‘ë±›2“<7ìò ؇ß;C-r4/5Ò²æS4â\¯0ršX~ÒåcÌm`ã!–Ò¥s:k¦X¦NLsòØp5æ–=‹¾”O~k}éÈ6:2¨aÀP»fÌgô¸ctÂáìéò):i ‰,bA0ŸК›ö®V"=ýÖú‚k½Õ°IšeIjÝâE}=ÕWÖeó‹|B·mzc!alå„&Jš„­QĤ±!ájÌ-;=%öô{WØtüššédµ5š,3ÌpFC‚û–k@çö‘ö¡Ìõ9¶ÔœÏ&M¤¦›×gë±³óÙ47íô‹ØÓïÍ~SÁÐ×6ûMEËÚ ì7+V•ŠøÒ®" §0'°`#VRrN34ÑÀ¹»Âä)ilJZ»Zßö©J%r±m¿7ûÍ@D¨ïfÓK3#nå,O{n°§å$)Ö€”¶GO;a)al\MMP&‹®†{¸æ¦]žûð[ëKÐ,®Ì¥õ…š+^)@]Éàš3¸óo¥­c½—ËœHÂJ:K³&¢Èƶøciì¦j7Ï »üöá÷oÆ~ƒ“8ræYÓâq»¶5X&júÛQ£ 6eÛ¸Fˆ¥ä}k2ŽRˆE¯TŒðÜ´Ó/bO¿¹: æ†"Þ,k‚L¬®üSð<¼ÖÎúz«_ï$bYç¶d‡KisåH“c#l±zìäÝæ¦~{ú-vrÎìUÌÁNÐÄ ìýóêtÏsuº¯su’´W'iÌ0p¬Nû`'àÜ´Ó/bO¿¹:aµ+`¸ÿ85h°6Ù  Ö&›çt}Ú¬Ê< {SVJ`)U¯eÒDâ±)vN;yg¥¹a—_À>üæêt³¦«}5±¯Hñˆ€×îæv­ŸrÐnR{ÓîZÁÀÞj¨ÄwrkâLßXä.hìÛ ¹i§_Äž~suº2ÊœbMŠ&Fð ÜΉ䛻ìxÇ–’óB¬‰Üc#ïÃc;/ÄsÓN¿ˆ=ýû ÷q6÷qjâ|®¿þò§Éë”ebtH±‚Ì*Ƙ°wqÄ–Òpsi"bl@QcC,¥ìúiR|AˆWì•86$\¹e§_Äž~ÿ6±94ËY dÚ;QS‘¶‚óõ“çÚ„ý ZóÈ^ã/C¬¤[;­Ð$dÏûz(Š<$}ç.nܶË/`~kïtcÅ ÆS3äKXíâXye°¥.)VU»^¶½‰,°”Ææ±nZ‰¯kc+š˜rìºy¬“X¿âõâÖ_‚¶ßb'hàlºkzðu¾~™µ>híÖ«$솦bwa¿Õ;°”šîÅšøzä;«ZÁsÓN¿ˆ=ýÞì uëMH“ª¼.pQ4´¸'v3SÒwFòVF™ìÔÄRj›g”šº¢Ʋ5ÇΛg”sÓN¿ˆ=ý>ª{[»wuòv¯6…í:/TàIˆŸìxho¨Ã%¶‰É­©Ñ55Ñ€ÓØ¨:÷Ø®J÷ܰË/`~+û:Ž×ã}{'i"Ûi5 MˆM.fІ6-ÙŸôÊ‚žcÛÑôEXJþ¤­IËmaSì4vòîDsËN¿ˆ=ýVl.Z­7üVvâB¯gþ-æPjPhǘҢš‘!½bžbY1©ºí-vÀÂRJúFJózD¾5°¤ªçØÓU½š›vúEìÃoÅæ‚÷z1ð Èš ZÏø £Žššž%aÅÈñˆ”=Þ5…•Ôõd {Ï[@ãɱˮåܰË/`~s}ÉR‰žŸŒÍIgÐôöQLsʼnËÝ%)~V˶Ç)®°’²˜|¬Iûš¢$ )®æÜ´Ë/`~+67»8bsÔ067é`lîBdÿ`'HZÈ^päÆI:bsùÌQÖìãSlŽsÓN¿›;ýÞ±9òÒ1–mMÊó¨Ó½ã4¦]’´b\}Û‡b¸b¨âšb°)uc3VŒ¦Í,fÎM;ý"öôûûÍT´à`¿hÏvc}™7jŠ$ÅæÆ½íf¿ ,¥º°Ùo‘Pà±wê‚æ¦Ý5†wýä·bsàqXé·b¿¡æôÀ‹ëA'~†·*.Wüìî¶„R`%MU\ZÃzPb‘¹­±wf·æ¦~{ú­Ø\EåSw~›4Aå¿Ø">6Ä}àøÙÔ_‚ñ³»n,¥îü6i¢ €±àðØÕ;+ÍM{GQ`O¿µ¾ t©ˆ&§&N»V¾tGÜr€kú.’´”Ûö’ÕOca%¹¥¤5m}#6©»ªé¼ç¦~ûð{³ß´¡š¯SscGŽ¢Åš‘JÚ$aŸÃ@ûJq­ÆJšfó”fÄĦ¨dרÉ5óš[vúEìé÷‘[€Jó,v5jâ±RñI®ñÎÿç%I¹¹o;ZøÛÅ‚ŸÕË€š¼vÆÆ–ÇNÊ“ðÜ´Ó/bO¿7ûÍõûÍõ`¿Iö›úûÍ|°ß\ö›ëö›ëÁ~3ì7õö›ô`¿¹ì7×ëKôºiz&[fkWA–®‰ý^%éüÿNÛŽ7[a)5=“­)‘¾&l^ß7[ËWسúôÜí“ßZ_.%±JÑš8m]û&»-¾´‘”ìVÄgS”ìVÐýFÉnyKM»Pk**S‹’ÝÊØc»fÞsÃ.¿€}ø­ý 𴦢œkâ8`Õt²ÃÀÕ£Þ3~M)Pë™íà†¶©³AWN£YJÂF‡¡KcSÂÕ ‘BØå°¿vìç•ì&MôMYçûl ›QÝÃv°Jv[ ÕöÅ>ЕäJkâ`ÑØëzlw òÜ´Ó/bO¿êÑ}Ö‡ÖjfX ú…¦P ž]VŒ(¶=ʇ…•4•£o͈……Ø‚džô;©57íò ؇ߛ€‰cMë 5U„zL3»‘)Ézº[ë K;igi'±”ŠžLÖ øŠØÄä|Œ I{£Ù¶~{ú­êQDFrpý|œšàû©uˆ‚´#I®7Iˆa]¸ Ø[T©+éÒ[µ5Áò%lÆÚıó^»8·ìô‹ØÓï½áúAÆk"åzí!ïè9žê=IRnk³;¹r.c%™ïßšàì76øü=¶ùþ=7íô‹ØÓo±«!ò™]ÑoMTå/†u+HQý©N\1¾\²}î¥äŠ~kð³?íŠ~ÏM;ý"öô{ÇÇÒƒ5³ßd¯ô+†Õ-^#ÆU¶½¡²Ùoңū5d¿)GÏý`¿É~°_f¿Ù~kÿ‚ ÚÛÕS Lë©?øÙ€k-5IZ1xvtù–RÚÙhÐ ùIX¤;iìäJXÍ-;üöô[ûv§êë·ûqjÆZÈÖŽc¢Ê:Aéì|uù„¥³††vvÍVRדš¶Acëúýzìª'…熽¹Û×Â>üÞu^;ðz%±FXoA‹¯æ5P½â-(v C’öWÝöØ)K)©þ_šÄdÂÎ &ÓØÓ áš[vø%ìé·âcáÙ>?NMŽRÍÜÀ¿¿8ú«’Ê—JÛÝú¥¥-™[T” Ûü0^cCÂÕ˜[vø%ìé·Ö”®í[UK“ñTG‘êÚ\”xâ—& kÀTw6®³n,¥d>jrÄÎ…ÍAw¯±!é´æº¶~ {ú½Ï_z?ŸcÖp¯ïÞŸL<‡ŽýËufÌg(ÄÞʱõþåÖKì_®óô_cûÎmöè¾ }~ïó—‚¼Tòý[Óñ"ÔÌ«öF&[tcªŽ^ŸcÛ‘“.,¥æjQiâ‘el$`xììB ÍM;ý"öô[ëKQgº¾;·åÝ“MW 08"Iñ±ûÚvsÒÜ}Kæ´&hŒ ¢]ôóÜ´Ó/bO¿÷ùKcÄ«ùüeiJD Gë ±Šhá:¹§$¿Ô¶í7 ÄBÂØ:Ùy­Â¢W€ÆÞ½4·ìíȧ}ú­ýËÝ•Ï^­‰ÊŠØq þ`¶8?ICÒwFÓZÝvwH ¬;‘ŠÏFšøQ?cí³WÏ »üöá÷fW«¨%[”5Ñ1ò—[|K/p\YÖ€¦_@ØQr.,¥¬œ(kRTà[†àØÅ!š[vúEìé÷qþrEkuž–æŽ4Œ„ÎÒQGI{Œõœ—‡ÄJš»ó45Ý£í¥1vw-¶æ¦]~ûð{Ÿïð7Ýb‡¾õTÁðÌüæö›Ü%é|¿—m2Mc)u­äÖ´µ%3¶¢¸ˆcûÌÍsÃ.¿€}ø­õ¥«÷•ÖÄ¢¼NÝÕc%ÇŠ.IZ1Z·ýJ`JVR÷Š!MÎéÜ»h_é¹iïêgØÓï½¾¨{ìî>@>ìÅ€BñxÁȱŒ.ÉëKÙö.žîro©ìƒšHO46g§¨Xk^_Ô½¶m¿ˆ=ýÞñ±šŸûj°y}õÛÁÎõOû—<¶½¥¢ö/”Žý 5Þ¿d—åzì½ÑÜÜ¿Ð/î_N¿7»™zv5và$»Zä 7±«Í$Iñ±4·½ªóg°«UåM›]š¨< 6ò†Æ¦¤ÕˆÙÐË.¿€}ø½s£+v$Uç/ÔDÓÑ•ŸÌ‘W‰=Æ•Ï>\kG²ö±²G¥°’.qKYÜ[®Œ“æ±!a}¹ÕcòjÛ/`~+7YP«_9_¤ ŠÆÅò¿ž=vð«W4sãÔë3Eá¯íXW‰¥T½bH;cc‡à±³™A57íô‹ØÓï½Yï÷TÞ…5¬¡ŒÃÍE±r ªRÒþ¥¶mŸñŽ",¥©;·f`í"D±ÛÅÌž›vúEìé÷î>0‘gT’»Lí¬¥« g‰]öJF/UÒw­FÉöšP\ ¬¤Íõ)M´O168=öÁõɹi§_Äž~ïøXaÿó}¾_yáù>£þ<ߟΒUÄ‹ÙC<ŸafÏ÷Kר:ß/Λ56ë|eNIе´íCOEžïo¿7»ZA6ê­ÚNjªin–Oð¥ás…¤ÏsɧV²±’šžLÖDy„±Q᱋Ö}Ï »üöá·Ö—¾n,zEëü…šØÀ®GB6Ù¬xªß’´jò|æ2VÒ—•5‘Õdld5yìªóvÏM;ý"öô[ëKƒÈÅìfi‚ýbívïØQdIX†ø8+Ö€toì¥3qIK“‘Fl4þöØÉ\Òš›ö³øÓï}þÂwÖ«X3PC9‘³ÔK댤I:™·í¯ï ³/VRS½Š5|iÄFq‘Ç.:£öÜ´Ó/bO¿7»ZC‚QÖþ…šæªâE,…ç&%ì1‚RÑö`û1–RÝ'*Ôä( 6Ò]=vHß©iÛ‹¶{úýÛ°«ÕÈ÷¬·Þ¤iIž¢Ò4«¥G’ÂÛ•.Y·]"„eψ[o ÖLì6DUH¬Ï ß4·ìô”ØÓïÍ®Vx RÍ®Vxz“‚á¬òô¦Úì’bIøÖˎ߇°”.E ­ ÆNa_oè«›dž„«174ö+°O¿Å°ÄŽgM;lkb)»ZG}L,z‹Ó¬I±‚´‰IÚo©–’»vYÉÆFr ÇÎ:¹õÜ´7={úÍÕiæ]ÁòT]“¦ãfÆ þâ_-Ù±½…+HF„[vÄÂ…¥T”o ªiˆ]äÙÅcCÂÕ˜[vúEìé7W§Âûó)´5q’< ?›8ežèoqœBÏ2ESö¤BÄRò)´5q’llœ2{lŸB{nÚý} ìé·¨px–u©^Åš;86K4k"+XטC,V‚7eÙñ-,%3tY­c„Íñ£×ØpuS>ì>Ñ ìé7W§ì÷=õÆ‘ýmòŸÚê}“/q©©7NæÛ%ì%‰*a‹ßCÕGšˆÃqxurë¹iï¢Òìé7û9’¦®á¶%TÌ ´AIÈuÙM†Ìâ·§ö²Æ¡½p†©p¨ˆH¸àÌÖ¨ÕÝJ8'¬ô¸Ó×ߦÜ&Þ9bùÛÇ=¡) +Š‚èXñ¼­C’{ê¶G?-c)%s³Q“o„Ô€}ýs÷Ø´]ZsË¿„=ýÖq6\#rÅ>NMtX‡0ë…mÄÆtЬ­Ûps¸u€³GÊ~G2ް”Š6­‰<4cè¥9vÒë˜çN¢®¿ˆ=ýÖviŠ˜@œÒDPjmb– 8Ò¿Q°9|ä?³¬Žf;e+©™ùOšàÐ66Ϋ=v6ùŸæ¦}Šœ`a~k»tëËAÎNMD.&Z^MþˆÚè’œ P¶=B‡ÆRjJ>µ¦‚f§©(*_{ìbºOÍM;ý"öô[éU•k|òYs¯GXùã•íª‘pI°dYö ‰«ÄRºôü³f ½É¡;RÝ06$§*ôm§_Äž~+Ç’åK¡Ek‚a%)¯Õà !±2%)d6šítë·‚wÜâ¶Ý:tâ:]ÂÆ¡ÝÐØ”0öÀæŠvúEìé÷¦*X4A-˜˜>NM„ï3ØSVqô@-’¾ssE¾Á°WÕÚ÷{KuSWWÕÚ/zFaÚpìdêjÍ »üöá÷oBUЛ’}ø µœ¾%ÅèøÛñ~)V~©`,ì·Úkμ¥âôhiИXòslH¸sËN¿ˆ=ýæê´¾ã3Âo NXsGœ× 7r¼?Üúµ I±‚t^Ð>h¨€•4õÌ´f¬ƒ°%j{56$Œ¹e§_Äž~‹ª€ =ªjH7PŽæ¡‹ àz$U-‚²‰vîq´ì¶tPŒ£u¶±¦"¸IUž›ö,z—Àž~‹ª €ðlŠmÓšàk„JÈ)o‹i=KŠd%Ð]Û>AÄFìTsH5®WŸâ±!áj’9Ñ^Ô´!°§ß\®Œ´îV¢ÒŒhIpy=Z3—×"Ô\!8Ú¹å!–Rw+Qi¢¢Ãز¾x»(¼à¹i§_Äž~suš Ê.n³&ÎtÇ%ΧǜH¾qqÛ˜·R_—ýJø´€•äâ6kâÄZØçÁ;¹¸MsËN¿ˆ=ýæê4°Ú­³}üö¥iXoÖFd ôŤ|IŠd"‡–ö‰ãb)al\MMp N@ )®æÜ²ÓS`~‹ª ²øV‚“C­An}‹Òºúz®,ÔQtJ±‚4ÐËzba)%‡Z“b‰%¶!/ŸcCÂÕ˜[vúEìé÷oÌK1"¬qŸöU›ÒÙU·Çn’‚yulûÁFa)'òI“Õ?«¢Mw›{ìä’[ÍM;ý"öô[Á¼ŠÖ ×zœ~š8®ÖŽ%N¸@})VÃõBÛ¶ýB[ b!al\MÍÔ™WæâôØpuóñâÜž{ú­`^WøÚ­¨a«„£·J(ÏRŸvãIÅV ÇEl•@éh•tœÔÛÆºUBy–úhnÚé±§ß›×úFZî½y­o£ÔÅMmb‡^ë–%Å ’¢žÐöŽBub»ŠØïÍk}ã¹×‡±HOÑØ;}EsË¿„=ýV0/z ž© Ò ¡\hƈT…šD_£T†,#¶”¸+i§2Hƒta‘ª ±w*ƒæ†]~ûð[Á<4BóõSѲ~ËØw®Ö<ê5ìVïãåÁm_ôÕXInõnMŠÖ<Ħx”klH ýI/íô ؇߻UÂ@ŠöNÒ”Øÿ”¬ïÐZoV¨§KBx®©­pØÉ%I,¥ì½“4ñ'6¹ŒÆN&ŸÑܲÓ/bO¿•Ƥ,A¾Iq­`öu‰üåÚÄÎÕ;+CqY]ƒÿÂI˜zõ‘"vtÂECbÚÜè‹s†BÞîáëoÌk)Z˜˜×šŒf‚9rÆVÓR€^·$ó^eÛ#ÁXH[Á¼ÐLäF›Ê|06$óÖܲÓSbO¿•û0Ô‘AÁ¼56%ä>LT¤Ñ>¤öá·‚yUÁS¼ÖUÕ@ýB Þ Ø>G‘„€Ûp§FT„’•%—-ue—ZÓPw4Üiqî±ý9ynÚ«²‚{úÍ©\¸¿0}œšx¡[eq$¢ÈŸf÷›±ó«×VSv°+©*ÛÓš¼<06^èNM¬tÐ"¬lëµI„€[ rÙ{ly„¥Tví)5AšclyìäÚSÍM;ý"öô[Á<ž)îÎØÒ°»u“‡¯£2éÑ;º³ïkc«òÿÝ›v·&–¯9öÑ›sÃ.¿€}øýÛðŽ¢÷hªö´í›:•&|!H Å Ò" Øö¨{2–’9T¬A×a‘€§±Í¡â¹i§_Äž~+˜GSýÑ?Í:;aŠ9:-¤Ÿ®+ËWù ÏÉ~ÕˆXH»»5Qr.ìŠ$]Òw†Õ‹ðÚž{ú­`ׯ#˜7t9®væõü†Þ)m‚îÄ•4°–ü µ&¾eÆ2XDZ`ç¦~1˜wú­`^P_r}œšHEˆÛ_ŽzGø-wI Ï­SsÙѽWXJûðHš A06ºkyìâ¬rÍM;ý"öô[¼£Ù)Aì,'MOÍ» (vÏ‹í3ß’bY+cÛݱ!•-yCbM$Ûí ‰ç¦~{ú-ÞÑfƒ.>Xk"¸¸¸?ê&^+éâmMÂsMÜîaïâ},%‡M­ 6Lcƒ ÓccinÚé±§ß æe„i“¸:­Ék„>b Èâï/©¹37@£«›{Øx‰â?&W§4)(„}}k-ãØpuÑS1ìðKØÓoó²yªÌËâ²^çRxö­Þu‚µr‹$…碠„öxÊKÉuÖ€’QبêðØ®úðÜ´Ó/bO¿›½v,h¤þqjî;åHÓn=øÑµ÷éfb×y´ì<«&–’™Ø­Ø ó,»c±!i_¶æ–~{ú½÷No¾©{ïTð­oø²QÜŠŸ–Kä”=‡ðˆì«b%+)«Nœšõ>7.a#õphlJÚ;±Ï|òK؇ßÚÐ'¼;u¯I¬`Ìý¾ŽºÖzTó#µ¡ý®T}ÖÌu¯ÔTÓØ¡_‚yÒ ,›®M¦ìô‹ØÓoå»éyGÙB/E%ku‹¼k€ ô’+ÓšhoÄÉÀRÂØÚ ‘/¸Cͼ¢Æžªtû÷^ÊŸüÖÞ©ué§ûŸÔ@ýª$JÞI!Yá:X¼2¨[½Å’¢½“4Üÿ\K—ÇÞ{'ÍM{;êåŸ~oÞ’±S5}`¢LzÆë<›ÁƱÙ>)<6£ÇbÄúM]¸‹ÒzÞØ¤¶;» ·æ¦Ýe=ò{óö4ÄQù$M‰j¶•ìÖ›ËmëKOVÀx¥Î•Ëö×Ó…Ó.,%ŒWKåÂ"Hcgs3knÙ»´{ú­õ¥¢.ðX_¨áÑŽ%ªMŸ© sü0Q»ºwN’Žõå:øaŒåúÑ?ñÃxn¯?éX›N¿µ¾T5Œ"÷ 5ARºRãH+^'Vj$¬Í8i¿ÐûŒXJÍLoÒÔ8þ¶¬˜”Ç.Š~ynÚ«X{ú­õ¥¬wÛø$ ×j‚y%˜Ü›H·$¬Q(Ú§þŠ¥Ô”eMÁú3ÄÄ5MMëºjž47íô‹ØÓo­/î¡’›£&6ïk ŸÒëƒø”›ëÓ|JwDÓ˜½Ýæ–ºrÞ­©ë™ml´1òØEñXÏM{3O|ûä÷N´[kNÚµSs­—¡•ìVQ…r×`ËYke5GX'×ídÄ#V’+å¬ëËnlCÇnÞYinÚé±§ß›·'Í3ÅÄšH îƒ[)$‹¡;áñ³CNÚ/}v¥äk¢_€°)z hìä^š[vúEìé÷Á;Z‚+Ž}Ú¬Að¨Ä_Þòñ­ „5 ž«²×hZ#¬$#­qÀOléhˆ±‹¿‘š[vúEìé·ö/蟣„áãÔcùÚ66hÈ‘{>/IØcàv8k:Õ!I3q®Dò‡(‘ÐØp5æ–~{ú½yÄm õ…®ÃÜàí¹?ñöÜ'ïõ•Ä?»°’öú" ׈ûä­ÖØÇú¹½þ´ƒ·çô{×½òYÂ}¥5H/Ã^Tæ­ £ú®{%?GÝëµS$í+­‰ÊW"#rŸ{ì¦H·ç¦½‹(°§ßZ_&ºúg?Ôðì'¯Ñ á^ê|IÂiNFzíE,rqöCé8û&ñì'‹éíõ³Ðذ¾\êøìô‹Ø‡ß\_zVjµx᤹Äívá¼h=Õ»«jɧԻ+oÃ>,¥¹yá¨à… lp!Þ›®.àY¤~ qÊm¿µ™Ÿ¸;¬áä:¸;Öþc~:ûÉwÇ:Í)ÇÙOùÄÝa Ï~òÁÝá±ýËupwØ/î_æÜq~µu¨o5C?úzÑýø¤¤l–¶ÕiÂRráƒ5Uׯ¢|í±]øà¹‹¾Øá±§ßÚ¿àYÒ«¸n¬ ^ïÅ­³ž<(1¯ìv I{Œ‘·é¡ÂRr –5ñô16£<¶S°<7íô‹ØÓャ‘ßûžÐ$ì_ȵ[R<ñs‘„5`âTöË¿€kKU¥ÖDb»±y=®¥Õˆ|Jõ;Cî^1:ò<çµ±%úÀiìâ³ÍM»³B{ú}ÄÇÌæžÙfPºÁ=MzÇ&ž9%yѶ=¨ÍŒ¥ÔvÏljêz€[¢êUcWÅjnÚé±§ß»oBÁŽ$kÿM‹v,ëü¿¢¤eT”çdIØc ·ºìè».,$Œ«©™Ëma×# {lHÊ[XsËNO‰=ýÞ¹k-|=ÃYcMFéO°—}à2¢˜·O¾¢KiÙöHQ3–RRН4úÀ{M• ­±!)·`ÍM;ý"öá÷Ž‘™k¥51Û§‚™@mwÁ®cÛ;Š@ˆ¥d¶2k¢±±ÎVMIñ1v¶juûEìé·Ö³ñßë 5±°VqäÇ,&7HX@$;‚„¥Ôw4š^b+8å8vÝœsœ›v3ò÷ùÉï»ÖžÙÒ°/OÃI1ûòtuqÏì]¶švé(±fÑþå(-mëžØ÷3;@sÓN¿ˆ=ýÞ…¨qI¿HSq†’PMÎÎ)iGXÚ6°ÄRÊûü…š¤ó—Ì 汳Ÿš›vùìÃo­/ süVíÍŒä•g¤Új¢þw×­8Ôë}tíO ¾á¾s5*Õöʬ¦®NÔÊqª^1*2aËØØû]¼ÑÜ´Ó/`~ïóö¼“Ï_˜ÉWДl—'&5IÂãF¦ì›÷za%U=Á­‰HÆý’ÇÎ:³ðÜ´Ó/bO¿µ¾ð,7¯÷êS¶` Å'9Ñ{­eIZ¢ÈöžQ„ ¬¤¬·xj2žÙÄFÇ)ÅÕ˜ÛvÞ°¿÷þ…™÷Þ¿0+³öÈøªøË7ô6˜U’ö/9m{uÛu¦vïýKa/Ï,,{‚sì£û8ç¶ž{ú­øºä)þdk"ûtñGߨ…d“ñŒYÜ ‰„2´OœKi*’nM—“d2šõ:¢±›Iz47íô‹ØÓï}¾ŸµAÓwÌšÚÀØ’Ö6pí©)a ˆí°ì5¶ÊÂJjúŽYLôÆf¬];{íÒÜ´Ó/bO¿µ¾DwÌè §¾¢ÔÄNq%y³ñZ¶ ‰>ª($Vñ¬Û~aGì¥þÇ΀&K“° !רéÈÀܲÃ/aO¿÷ùKyRáHãü±úÈ›ŸòǦê7™?V޾<”ùcå8ß'Öç÷ó‡ü±úÈ+{mzø½óÇH¦v ç1jµúCïˆVeºú-I'*÷Øö ä6ÄRšÊ4µf¬_³°‹êfzlHg4Mö*’·Àž~ïõeðt¶x}<¡E'j>7'Ö€Ü%i}éÅöb%?F ò—…­âÌÎ]’Ö—ym;ý"öôûè›ÀZ·¼û&°;ÍDï|Ã/t[›E’ÎHÒ½íà'VÒÜ'öÔ DÛŠr›µÚIß¹“â{C¬(ô ؇߯5~é·úòtõ7¯ÜÒøË·îé!)Ö€z‹*®¡âònÆJÚµ6ÒD±­±Qã±w­æ¦~{ú½ó“£.o(§×š+ŠªèFTd–*BÒüòGö8¨4–’wÔÖDˆ±±ÏõØÞQ{nÚé±§ß;>¥ïUçbÖDmv$âÀz ¡öN’+Óö©ÄÂJªz[´&Çqž° ÍR8vÒ¹˜ç¦~ûð[ç/*CçÈÖLd$7ôƉ‹ÑésHÒ‰}¯ÛmÅ¥d.[kúúÙÛq̱›»jnÚ«:ñ”üÉïÝ7a~ŠQÓÔ7á:ö'H<×—„:s÷µžG|,»"}÷M˜G|ŒXî_8ö±áÜI}æ;ýV| L«øD}¨‰—¡ÑZ%M«p¥GÖVJ’°#A9í ¥VÄJ*gFX—úÊ_6±<¶ó=7íô‹ØÓo­/C„š|³¦ãT}"gàT­éo¿EFX±}dE9ÇØ’ßǬ‰Z8c£üÈcgóhnÚé°¿µ¾tÔeDψSS×xíªûFŒ•w›$i HÓöU+É*¬q_¸ÄžÂ·Ç†ô;©Z·~¹Ýö[ëË­½fRßê[{äŠÞÓ±O rèæ’°bT­`aoÚ#¶i­Kâ ¦¬åߨ¼–õné¹a—_À>üÞD ‹§d‘- f<õ×6.á\p¥«÷8q_*ÃÊñ’oIÄJªú½XS"¤/løxì¬s1Ï »üöá÷oCµ–cõEÁÇ©éj„¼Vîæ†‰ke‡ÞÞ±±²=ÚÄK©‰šªÀÀ¶ÇØ®ÊóÜEéOᱧߢZ‹¦hK§•VüÕÚ\G¤¬‰¨RS7È85$ßSЉÿ¶7u% ¬;0Š;@šˆ*'툔ç†]~ûð{÷M`ž-»ÇH“£Ôkõ.¸ðä\ûe"q²x½Y©lmÛomö6®º,Pƒìgb‘Dª±“«Œ4·ìô”ØÓo®NäùAšþÇ©‰^Œ£¢ëü*5^Tj` ‚+HeSÚÙÔخ>ETkÔƒ±ˆÌiì¹ÓÜ´Ó/bO¿Õ7áVÞ³5­‰ÍpPš1ç)ùÙ=%Å R*¨pio µ#–ÒÐÖš ;166ÒÛ5PžvùìÃo÷MÈ<,ºÔ7!ó,©¯O§×òp¡ÇNòên²¢ò“8 —R´¥ˆÒÑ‹-ÕBw±›š9_0§¬ô¸Ó×ߊj­ª6s¡A?”l¦ÒˆÅS€Òwn®FÛö¹¾›ÆRz´™›ç±ÍÜ@¸îº÷Ø6s1·ÛÌÍ{cO¿ŽC¡ùÚ}ˆ.€š®›[Æ‘~ª’täßÒ¶ƒEØ©Dn.1ÖD¶º±‘­î±³øò=7íô‹ØÓïNPѨN€ÒD;›µ‰i¨˜½päIØpÚÓ^ãø“XIUEÖdðùóá·=v2 æ†]~ûð{§COç\;šׂth¹ÔÙ%  ®æ£éÐsn,¥¹»,P)ÆÂ¦ uÖØp5æ–~{ú½Ë9yœs”sÞu‡ÔšŽ)&ŽôyŒ1÷‘ÿ®àvª¹ÙQΩg}cnÓØ;§¹«Ê9ÕÀ¬ò[éjñÆýÓÕ¨ šõHRF”½ ØÉؽ ¢"´ODTˆŠ¯¨)4Áã'lRv IÁ»9¶~{ú­ãžŒ¤—K/=Ô¬ô†H@+ VŒxÍÚî¤$I8±m¡}`ƒCì@yÀ¥—k"FBl´tÌ›®.( ž{ú­t¬¥ŠÉÝšŽM!Œ8ïcëNHØ!¤&;ÂmÂRª;A€šh klFæTësµbÓÜ´7µNìé÷Ç­lßkªÁ’5WœqçhæV/drå8Ý£¤pÜJÍ£½Ä Ÿ°’æ.þ¤¦‹Ü>° 1xŽÝ\ü©¹i§_À>üÖú2Ñ}{*TbÍÍÜÊ€h4³ñã×s?È9«íëáß•4w§"N„»llääxl7>ôÜ´Ó/`~k})Hç9ÂqETZJ 8Ò;HUŽt‚âÚ§Bÿ åOéÔ8¤ÖpÇ>Âqœ›vúåT„í÷N'¸ð ¿§Ó ôj͇ Í©k’¤t‚1·½è©_Û–º(­ië­ÍØ añØ&|ñܰË/`~k}á§Cï5 Z]ß9ÈJ7«On陃¹9Y謤- Rš…Eº³ÆÞéК›m´é[lŸ~oº€bîèS•oë©ß\t¼V„éòe¬—ÊmÂîæ‡¥t×PämÆ¥ŒÇ>ÈkºÊmÂÞTnØÓo…ã&8«º×iâǵaÈ€Uq¤Ÿ’¤ãÈßö".b®MÍEHZ1š ~Œ­JpfC3­/švùìÃÛäKéÔD»—hlµ¹Ü.r¤p\©¶³d†XIEO&krÔ1q”æ¹i§_À>üÖîç§Ãm±)û¾ý»ÿ–Þþoéí¾]àU`‹¼7ˆÝßßÞ~¯ rÔ5ë~©ã‚Øo]?LoÿåÛãñQĘïßÖÞ-ÿ ââ÷'öýÛÿùö»oe=ø}¼`ÆùåÇáÃÃç]ç—?ê+8Zz­Áo”íýkM*õsÕ%Á¢[qɺ³|ç“#I&ìý[¼8_?ȼþýþ«ÛÓˆ¯ÇüJ×}Óˆõ'¨?ýGOkõ>nÿâ#xSRzEošS3‘H9l‡C+=¾Ý’ŒCÛÇ;ޱq55%…M±Ó›sƒ$D~öé·"¯ÐõXFÎ{éñº¢ñú2 Ì×ÝMTþÈ>ØqŒ}ÞK¿”±é1vÚcsîÐØ¯À>ýþ%?`Χöš¿\Ù?a©ÖëÞu\’âÌ_å(Ú«»QˆdÀÞ¿Õõôï?ʸþýþ«¯²®@PñåG€ü+¾Ê‹{~Y/—IswDKHH¹£Øz…\׫ó½ )rD’mï'–Òå2#k¢”ZØ«žc_;™ŸsÓ.O}ø­`5=ÏúYZqeßKø^ÆnÛË{¡½ŸXIY?Kß Ryt/óÒã^`—÷À>üþ%_e͇†›žmƒãë!UŽ·Ê}IŠÀ³¿Êõ¾{ÂH–{ÿÖÐ3ö׿ÂõUöˆ þóˆ!ÿНr_o à\jê¿ M ÂÚÕ—ìÃ÷=rG•„XoŽÇ í¥žXJ[QgæÂ§dl­çØâjÎ-{;±¿ݪqcwk‚ãÕTМÒq/²ÃWa%XíÚ„M×96¤ã^lo'öá÷/ù*ë³[¯œë¥D2ºÇ×Cª!_Â^íþ*÷.Žd°÷o½&m¾2®ÿ„ÿê«ì+â{9¢Bþ‰7¨Õhz&ÝÐÇ›ä¼Ù’*G¥«/‰¦sißàgNKìýÛX?Âñ£Ìòþ«ôˆQðñrD#?4~Ùou5* µò,Žšå,ZÄéW£Ö•4%Åöq±f¶m¿ØûWSå6¦zŽ WcnÙÓ›cÿî¼—bNòY,ãím5ßn+h¿Øûûq/‘0Bì ùí±)÷b{z`ÓcìǽÜ?ü]‚ùÈ—öø»´þ.íñw!ö>Æ~ÜË\4ýñwé?ü]úãïBlzŒýóŸ;þì"iðãü,ëÄWݪ(u?.Ù[ºØ²•>Œ´å€­mÙP0ý)ÇõïŸð_îÛtE<Ï_Žh„ÅÏòªš@$€YSÐ ù)8®m+)á³£LöùÀÎcl\=qø'Äf°ìslJN]¶Ã/a~+ ºÒU°eMÔ$è^J|et/Å_NÝ‹ìóÇØÇ½¬èõêz/lzŒöØœvùìÃï_™Ðg×ÖW÷ãñYrcoBƒoOÙ_å eÎi˸ìÛµˆšÓr\ÿþ ÿÕWù9âˑ爟Ã$?q,]úXú§¾ê‘+<âí³*O™šåj«7ÜŒŒºÊ¬ó²3×iRÛöùÀÎcl\ Í:ÉÆ.宯ܴÓ/b~ %ec<hVÅñ@s¢ù ÷"û|`ç1öy/:âçPϱ!÷B»<öá÷ó«þÕßòǯ:ç[I9bM”W~¿>T­_×yÉç¯zNŒ$™°÷o¹t°Æïå5ÅúMûzFcC:ïEö~b~úŽ]ŠHsEO6ý¯(wÓ÷Òù£ß!bõs.¡5#ÎË÷÷óÒã÷B{?±¿?ÝKP«=~/(°ÔxZåp¾Ki/ööík>~=1öã^x¯ü½ÜçØ¿Úû‰}øý¼—{h¶æVšXB‚`ögGéüŽÑN_‰•4´N[LÝË]ޱ)÷"{?±¿?ý^ÌnMÃüÎò¯t«l5?žc²ë÷ÐŽ;ãØçï%ãÄ„Ø<ϱ!¿Ùû‰}øýKÞ9ôÙ½V·´–d/ÊÚàÜ€ªtᔌòçwŽå`íÉ2`ïßVñ0sˆ2®ÿ„ÿ2ØÊ+VªêÚ hÈ?ñÎÑÖ9ïİË{É#øM¦jÀŽKØ Ç7Ø@d®‘,öþmõ‚šõG׿Âuƒº"»ÚÇ›F€ü+Þ9ÖAùj<˜ãyþqjÚš!º`.–²±ž»Ñ/³I±{Ô{È¾Ž°6V’WiR¤ó›æ9vš{lÌ-{~`ócìßž£³ây/‹Œ¶y¼×SqÏé¼Úé+±’ÜÇQšôÊÂŽyŽ é¼Ùó›cŸ÷rrÉQ«£ÿ.±:úïÒÕ ÒØõ—VÒæ’Óß%è0üwçØÚó›cÿüçç fŸˆŒS{"ãPE­NÞ—¬,Ϋ‘ñZUk*eÂÞ¿õ>‘4õ”yýû'ü—‘q^‘ÿ¦ ÿŠŸå*+(èºU–GMðÜ t]‹pC!÷JÀƒ¤<Ó|oûõÀ^ÇØÊâ–­ÝÆŽrŽ=Ž">ÌM»üöá÷¦àŠ3úØž÷rW7¶ZàÈ"Ô|Î{‘ýz`¯cìó^® 9µCÉ!ÇØ×ØccnÚ鱿Ÿ÷Ò.…S¤yý‚®áñ[üåù ÷"ûõÀ^ÇØç½´ ½4v«{lÌM»<öá÷/ùYj>f>{þIÉ8Ï¡*¡–T—ÄïëøYŽ•¿;vµdÀÞ¿ÑA¼ñIÆõïŸð_žçhD4Dyóˆ!ÿŠŸ%«k#«Ê_j ú5Ü ßQ¹Ü>NŸ]éæelû8±’’jZ¨ ð"l„7=6¥¸º»[Hp\Ìûð[UÌ[7~¸—ú¸—ñ¸—ñýŒÇ½ÔǽŒÏ÷]˜ö½ŒÇ½Œîeœ÷²°¿ÉWÙóEªÚÇž?N¦q"ZPíK>´[iê5Î@$ìýÛ|m‹îö…׿»vŒþ/G4B÷9ñ/û*¯b6üÊf&…~|I‚€EŠ9GýÊ"Ò„ú—èæ%ûl'–ÆÆÕÔÄqŸ°¥žcCRîs½¶½ŸØ‡ßÊÌîH:¼Dö¤«R„Ý5Þ¢9MžÒy/´ÓWb!qìã^‚в $›Òq/¶÷ûðûÓ½t5Ϋ꾗8íö½$½–ú^`?¼¯ÏÇó^*H!x/ù›Òã^hï'öá÷ã^Yþ[^yÿ£_»¿Sä…þžÀ¾¿C×þÆYÔÄj*l¾Î±³‰5·ìýÄ>üþ%v ›gËÝG«t$ô÷ÙTŸ¢íˆÍ³eE­Öù ¹a³üÄy6õñåÈsDMáösÜþë…û ÿýãíGúì:ø[QDLß$œ*Ä~ªHCû’õ¾rµOÄ>Ï«Äá\cl–2‡}ÿ–; ?ɼþýþËó ^‘qÀú¦ zõñüdzm‹>ãk Rl[s‰ë䯇Xq`±È]‹ƒÞêC{/'V’ƒÞÖT0n›ó9vÞmA9·ìõÄ>üfz-u)¹fIšÈ˜Öxëeáò|Î{¡¾+i7¬ƒfåÆî~: 96¥ã^l¯'öá÷ó—þ/Õ×/]óÕx¢xþ ÑÉU9#«UrŠº°}rU#:¬‘,öþmqªŽü£Œëß?á¿<¹â«'ßz«Ñ"L¶ÚÎÆù]ÇUò¼ýý—jîÓqÉ:‚ìG°¡OG² Øû·:®àZþ,ãú÷Oø/〼¢6‚jÈ?DKéxò¬‡•ä™×ˆR•'Rb$¯qÄWCšê‘,öþ­Í¡"ëß?ῌòŠš‘2§ ÿЇQ‘:‘;ÆÎ¤‰t¥>#™*¢Ëã%E2¥ˆ ÍŽ¸íóÇØ¸ššHu26=ÆN{lÎ »üöá÷/ùs¾à=Y›EÉWtEE¼‰ª4°÷¥ì0Ç÷»$–ê8+ Øû·~50’qýû'ü—ñ&^QR^4äŸÊļš™0y@r˜vîTé-7'VÇÎ}\ ’gò€dÝÐXÝ„îåÂd'þË;¯XÄ{á+G€ü+¾ßój`ú½U@Ízé_Üñ¹¦¢|^âxMIúóF?)Úïzb!"¥‰úbcÏæ±)ÅÕ˜Ûövb~sç.ϳwîÒDßyß vϺ—½»Ö½À®{V’;«ù^®ˆ+è^Æ16¥Ç½ÐÞNìÃï_ò[=æÃ¶\òt©“U¨ Ü—|Ú¹Ïqðx~l¹aq½^oìÓù”‡vò'þË»®èLOÓÝ¿Õ_öU¾V=¤òòxÕš`á¸V!Oå^{™Å¨4%ÅÎç¾}ü6Þ¥ªãUkò:œ#v}÷Ø”0vÌm{y`ËcìŸÿç÷|ŒÊòäŸß*mfòÞU]M­"âÏo™»¨;E#íeržø/wU?Þ>øÜU½vëoç¿_íªðçoèróz>/*«×m5¹‚½çÏüöô{û¿öÿÿîØkÝË›ÿñ/ÿûßÿîíûrëõþvþiˆÿú5ýÛþÓ[ŽªŽä —`ûÎ×\Žýáãío^¶¿}ûÃùö¯þÓü5èx?ÎD—Ÿ‹^„¯ïÐíg£_ï·æ?ÍÔB /¡õ1ëïOøùý_õ‡OüÃç˜ìß|[~ô=ý=í«#i¶SÜöµykOñ°OænÐqÛ×Aø1?Åeÿk¿s¿É‡¡$ÇIvdÉøy,w”%¨+$ï+”´ +$ï+tê¯+$ï+t©+$ï+t¢+$ï+bÖ’÷Šé ÉûŠ_õƒ>¾Íw|ÉÙI4£Z_ðõÍþWÿëïÿÖÿÕ;_«wÈW¿’Ÿ¬ˆnî‡ÁÚ]×v4ÿŒÁ¢ƒnÿr°1Û¢)øƒ-"ñE³÷Å`e®mÖÏlu„^q“¯> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 481 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/home/biocbuild/bbs-3.20-bioc/tmpdir/RtmpkSJXss/Rbuild3d52d121381e66/DRIMSeq/vignettes/figure/SQTLplotProportions-2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 500 0 R /BBox [0 0 992 494] /Resources << /XObject << /Im1 501 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream xÚ+ä2T0BC]SJÎåÒ÷Ì5TpÉç äTßê endstream endobj 501 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/SQTLplotProportions-2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 502 0 R /BBox [ 0 0 1008 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 503 0 R /F3 504 0 R >> /ExtGState << >> /ColorSpace << /sRGB 505 0 R >> >> /Length 48402 /Filter /FlateDecode >> stream xœœ½Ë®åÈÎ&6¯§È'H+îÒôôÀ@6`ÿ Ê6ŒFíìøõ-~*VVíã3¨ERƒk-IÁà¥üøÏ?ÊÿòãÿþãÒÿÝûŸÿûüøó¿ýQ~Çñcÿûßþü¯ÿ§ÿøø?þÓÿÜõãÿýãýß~?þ÷?Êÿ|ÿ÷_þ(Ç}Áÿáüƒ?å8Îøw=þùþ?~üÃ&üèãçê?Z]k­Ÿ}þèíø¹ê}ÝÿåÇýÎÆ7ü?þÏç3?¯Zìã3?G{>ÃñËg òÛþŸsüøúã¬íg-¦ÿúã?|ÁÕε]@ú¹ žçÏy=ˆ~.hgý¹Êsè¸àøYñE>óÝ—ò󼿕ký<毢ë¬?ÇmèÿáK®ös¶çŠq“ÜßIk÷}ñý”ޝ÷À·QBµ›¦ª¿þ(µþ<þFêê¿~AÿõÇÿuÿøõgÙ¾u_±ÚÏã Û¤´ŒûõK€qñýíüñ£ûšñ£ãçßúÆ9¶uSõg=ôûgn×MõŸk˜úW¯Ÿµ=òë{mºyµ8íg¯‰½?Ó¦›¯æØ–ØãC÷?6ËKûyŸ¥Ì¸Ùó³œ?ûù|PŸEòë{mº÷Ïrߣ<ŸåÚu“úø,’ØãC÷?~¹eãQ“ÆZ®Ÿ+n[Ñm?ÏÂ^¬ëü9ŽçŠé¶m½ÈÚMSÕ_´9â!ÿ…ÔÕý‚þÝm«+Êý]WØF ¢ùÐýò†ü/Œû1¸oÚÚ¯Ÿ·©_?D·ûkêAb•ûqç’r¿ã.]oœxÙY“iÁþúcëçõwZ×ÿõ þw0¯Àúõ#5€þ'0Ìë~õÜîx˜I·5BAd•Š”—ÌkûQ«Çz¿î{áØÞE7¨ÕToZºî·Íý£œ§uý_¿àû6’Æû&l°NIÿ“OÝî™çžHêU~Î÷é~¿Ý«ïd²J;Öë¹dÞïöüªm®x¤¬È´P÷myÿ&ëï´®ÿëüoo[]QîðHIéãm;ˈ¾öú³7¼¡’ƒaÞ¯ž#nùy?ª?f½ÖËT¼EæýºÇm%yß±¦ ›W“Ó®¸­mk×M WklÉe—°vómkÞ +óã³ÜªgK}÷°sæx¤öÏbyß±¢¨{ÿ,÷óLìý*Øt“Ú?‹ä¶”Ø»ÿ¶•Ær¿ÑZ<™¦û÷7~x±îÅG¯Ï÷<|®ïÌyO–µ§vÓTu¿}bMö7RWÿõ úw·­¯¸çÆ/Nk ýoܶ垼Î{²¹ïûÆŸ:9×ÏóÖ|O5ç=«Õ{¡t¿Fï©° Sâêû²–òû9Þ°¦ W›Ócj7¶Ô]7)êæØ–×lýÐýÍòƒìŸå^r߯ë;f äñHíŸErÙ*¬)ü³}–zÝ?Öil½Ö¦[ÔöYR^?°õC÷ïn[i„L(¢ïyÍw¥X÷ ó”È9ã úX$Ü ±vÏ|Ò×Ïr¤vÓTuO÷ËrþÔÕý‚þíl¢+bG•¹4þwֶ׈ÅQ9x|휊UØý=ß?G9{˜Üï­J+¦âçèGÅbyß°IA7¯&GÓ™°÷\¾é&…õ Æ&Çvûi·Ö¶¾¢Æü¿–[ýH}+îŠÔþY,ï6)èþø,Gü"ÆÞ M7©ý³“vûi÷Çg©ëò#hÎýÝÞë é«÷÷ކǵ}–”÷ kŠº·ÏRïOÞVbïO¾é&µ}qÒR`?íþü,óÖþYfûYJ껼¥åx¤öÏbyß°IA÷þYæ.cÇÜu“Ú? 9¶‹ØO»?ï±sxu’œ{MPžçåŠB>/—Wù¼HÞ7lRë“íyºæƒ=>tÖcƒ³=Ç×üÅî_ž—EoÂÇÛŸ_úîwÐõŒêã³HÞ7ìö¤ÏëóyÁ6Ÿµ¶ë&õñ샳=ǵüb÷ç=vOq± Ø9#¦ÿÎ÷4×¼Hí÷˜å}Ã&Ýû=v¿v{¾Çê½£ßt“Úï1rÒ.`?íþü,£ÄÓº–{£zÏ=;b¥•÷4¨ý³XÞ7lRн–~Ækì½zÞt“Ú? 9¶‹ØO»?ýú—¾¿Ù»Ñ|S±Á&V¼…ÏçŠßìÑÿ>ý¶ ó µ›¦ª¿þÌø©«ÿúýÛͯ¸úÏ+) ùO¶r³·ŸõÞÎ?þ½Ð}N ‚e²X÷Å&^ôý¨ÛVn¶öó¨©(i¢î5ïÀªâo4¯ÿëüo×ĺ¢ÌxÝvHégM|?¯÷›³\÷î˜7²8õ^¡ÝFà ¾WotWáÍÑLa­w¿YîÕMÊûŽ%%ݼZœyï'Œ ßé£[®æØ–ÛRb?ì֚ؖìãwÎòªŸå‚ëÔŸÔÇg‘¼ïXSн}–z?z{|è>R·Ç¦ÜvU¯žvÝ¿]ëÛ¹÷¸M/¼þxc“uÿmí¹â~;÷žw>î‰~pÓÏšx^±b·vÓTu/zïgªýÔÕý‚þíšXúÎðÒߦIÈòPözßéžt8eLß;‘CŸG¬Õc%›WÜ‹Žk=ÏdUO=¦ º_0÷ÕþFêê¿~Aÿî£éŠKÞÛ* ùÏÞ7÷>åþ pïáe":òõ]›n^-NùYjbïíú¦›¯æØä¤]À~Ú­— yágšuÿ,µcÇ }ákÂèOÔöYR¾>°kÓ½}–ÚîõõHì}¯mºImŸEœ´ØO»ÿ²‘Æ ˆ¯ü²âÐF÷§X÷ YÆsŽBoy|ÃwÍ Óç»æ‚§LÊMRÓ_„¯«üäÅ}bû¢ÑÛˆƒü7nØÞKxj›ñŒíœ+V<ý^´ þñû¡ßï9Maáv¯ºîÿµ|;Ötãjszücl«»nRÔͱ-/Øò¡ûå­òaã´‚%2õµû¦¹çW'jû,–ÓVcEQ÷öYÚýp†›AØ{†Øt“Ú>KÊ˶|èþÇþ+ôŸãüü]\þn®XFæwjÿ]$÷÷Nìó+Œóów©p#{|è>Ý[òò-º»ü¦ÆxÉ Lk¡Œ<"k\±2É+î·õÑ¿{úúý˜%µ›¦ª{¾‹MößH]ý×/èßN‡¼â^í,ÌÚT@òß9i8yxs¿µÿMÎýd¯›š|ÀFìAgx«)xЯS–åWÛ±¦ï͉£–šØû!Út“ÂÕÛò¾c?ìþ'ÞyjÄ— ߻諤S¬{u‚$‘áúßýÐsé{b=uëŠu¯5ëvÅÀ+ósk¹ü×9‘˜Â¥Ý4UÝsÉ}k^#uõ_¿ ÷‘uE,^cÙ&$ÿÉeb½þáF?Ur°é÷¢ïž¼Ê*±Iè÷êðÞ]‹Â‹æþßx8%7̃5ݼZœ‚°³îºIájmyß±vë…L^=î[ß?K,\îûAúbku¿£4ž¨í³XN[5ÝÛg‰UǽÕOìñ¡ûHÝ[ò¾c?ìþø,qàz¿Ëýö¾7ýþnâ=äwGjÿ]$×÷.¬(êÞ—û-~_act“ÚËûŽý°ûŸL.Ôx1ö(¨p’pn!ëþŽ-_1pW}óüõûÅtÏ|Rn’šî¹ã~aœ#/E=}`;±ð‚{ R0çNòŸ¼mV)8Ê™á]ýú!2>ì)ŒX~¿š<2œ#>ÖŠÀa5&ýæ\'Y¿¼ø¯Oìï>–.8k„ÝÜNòßx§ÄÔvt-ƒGEfœ“ÓàýϽ>èìSv NiIGÝp"¦}Ìèáþî^²?ZIàRŽiiÛp»­|ôÄŠ{®~˜_°i“*îz4гé‘”Ê@âHPëf~ÜãDt›¿}.úÛï>}ò·O) NŸåò±–8gôÇ›Vû·/iÛp»­ÿd¨/ã`„‹ÉHÎÕäÜ OÎæ"w7ð¸÷šqÚpEðÀ½H͹:ÖIźMRÓ=ßûúÉ‹ÿúÄþv¢–¶K±¯Öòß™¨ï…ÞUã˜üYÍX±ënÕ#–é^Sö{ñÖ«¼°ï%e¼õ$N´òR2jDåwìZÔª1)•5Äí¶j>{Xõóï‡c3¿îæ×_ͯ›ù{̯¿˜?›ùu7¿þj~ÝÌÜnë?™Â¨mÐaÊkÆ2ù‚^_ð/Ý•ý~ùÝߨt'9ü;îwõü;‰‹ÿúÄþvÓa? ùoÜ•«^‚0›]f`1°îyDSa¯ºb¹°DİÂ10Rzî¸óÑÊKÉ(¡A¸X§V¼cJ*kˆÛmå]ùX«°+3Îð…KÕ=‡oˆ‘ØÌ·ôÜqç£u7¿Å.»lZIlæKšn·õ÷w¥¿ŒûMƒy\ÊlŸ°ÔГÞy“ÿÊ]¹*féNrÒ¿:–_I\ü×'ö· ]°f8ÈgrI«ãæžÆ N:÷¯´&^'œP"‹&«{îŽ×¼¤cÃ‰èŽ 0nBãŽ]ë‘Z5&¥²†¸ÝVÍàd•£1¦m㌸w¥¬Ü;“û†ÐX¢¶ò±cMA÷ö)â<ð~Y {›jÛÇÔFøaô?™Ë©o0>Þê¥8—‹ƒò¹`¿? Öý£G `üÎå féN’Ð?ê‰ õ¯$.þëûÛ¹|×vÛõ¡íÿÿý9îæý€•cú¼39Wì/ƽXÉ1i”¾Qñ3Œ2ã­òó{nºyµ8=áŒ=ê®›¯æØ’Û.b?ìæÍ*ÞýÂZkÿ(÷ ]‡µÝ÷ƽïÔ`$¶Ïaé¹ãÎGëö!âµ~k©ÔJbû’Òáv[?̧ÃÚ| BPm>Κl~õÄæKzî¸óѺ›?b‡oóÛ¦•Än>¥2¸ÝÖóãlýóNªðÒù×ìñðç¯Ý=±æÝ ùù=7ÝÛ§¸ð^ô›fÛ§”6 ÷aòï_þRpÂôµýħ6¤Ï·†òƒüæE1î7ÔÕ­;I½Fåþ ÉîOìosvm·]ÚþåսɚXc-¯Ä¨1?®Ñ±0è¡} ,èI`%qßó±¡4‰­¸”Œˆ]ÆÍ±i%A­ÓÒºãê®õ·ëjó¢ØäÌcjsôõ}ßü¬+âøëNR¿ãšˆ×ú•Ô"úûÛõÉ®í¶ëCÛK€ºãÏ_æþý“c†Ój) çí;猣•y?8kàp8 å@Ø)êcé˜rÎ k ºyµ8ËcG(MÝîØ›rÛEì‡ÝñËÿ>ðêÖÒx®}?$ƒNÍä0'2$辿ßÙe! Vðœ:åižÄš‚n^-f²Ä–x•¦îbwnŽM¹í"öÃn~Âß݇?pÇV{¾6F·áŠC¼>ÂÁ9oUŸB H:¹O#ND˧P Wâµj­ÅÇISRZCÜn«Øß„æÜ_ÍýL#ùçB8ÛÆéGŽÎ…ÝJá¹âŒ‘n _mdr”GÞñþ7–uójqÎØKÛ~ré&Å«9¶å‡Ó”€ÝíæÏö»íMlûð0l?›üú+R_ôÃܯôÕ÷Ÿ­âLÔÒ‰)Z8ÏÏ&¿~áøÃHëó³iLIip›­OÛ‡/üÉ×ɧ…O[ræÏ~+RšÇ´…“ÍL(8EK9Vlj5¼šœ9&_©¯ÖØ’Ë.aw»ù wÀ‡Ÿ%¾µ…WÜׯ@Ðô<1ÛÈêœg‹Ó_ê÷^ZŠW¿q$N§Å˜<áÖ¤gZIðRͰ”Òá6[÷Ÿí3ƒô^9Ýk¦~Ò.ίƒˆ£q!"4¨k!K³USXy]Nù…´;cEA7¯g`Ýbìˆs©Ô ŠWklÉe—°»ÝúÙ~3)þøÑb[7˜C¦Øxsf|maöëqÞT ¯š(ÄÇ9ÇùÈNÖŒ5¼KONlïĶX³¤îfÿgŽ-¹ìv·ûm¢ë÷Srß$÷w+¿’±è½7´ý~¤&gŸð='×è%]“ þ”üžçƒ%EÕ¸X üÀBÞ?b硘õb\Ki£p›Áo܈¸ïk{Sš7^,åœdÝ…5¶7å8hn)~/ãHä›Ò ¼ñŒÃ»ÐZóMé1%¥5Âm¶¾Mp‘—^{è¬UŒè™ïèMDnEdCNüúá)’´"ÍH8ЊKŨH˧+Ö âOcJJk„Ûl}›Óú…Ôû{’ò¸‹qFü`L8Dïôø¢lS@ð;E®µ¥ŽàL@ëŸúýƒ1é nÄI®µ‚ sžc‚ak€û°õmN‹ØØ~Lg<˜±Âˆ~Ä“jNÁ¯rñÌ…<2,‰bF×î–·0±¢2Ôœ8ûo‰½)ägR7)^ͱ%—]Â~Øý>·µÍû¼14GñŒB³×ƒ*ç6:1%¥ßB¸Í‰ÁKÉÐ%ç'g/jÝæ6Ž))­n³õun«Ø•ÈÙQP”9ÐÝ+öJ¥¡ŠH¯Ø+‰Â  aŸfyÃÎXS-ÜÌ)ñÜ$©»8Ü=Ç–\vûa÷wÝjûɸucâ*ñ¾×l1%ñ•¬ÅaLXk¦´âÝœ‰<7£ñ&®ò¦VžèbL0l p¶¾Nti‘ìà°<2¶ãDjÅf"’"cF"8{]ØGQºÂÍhœheàX"‡²µ‚ VŽ))­n³õu¢»o"¹<ôK‰££Þ°²È è £L>è öXŠÅ“q$FÆ0ˆÑ±ÐÇZÖ ‚—rLIip›­ïs[CJC[>­KÎwpÔ:¼7¾Ý #1Ÿç„¥õª+jù´.934;XÇIº‡srlÉe—°»ÝosÛ,(‘Rî]Ðqª:‰8Èæ˜÷FìdþßÁZ%1£¢«ñBI É#ô­'ÖT÷\Ÿxï ï]êÎ –[rÙ%ìn÷«c²_±Ýˆ —¢-“Sqè>ŽØj†»b…7îrQ°â~)¯öÈVQÆŠ*޶LêÅ {¡‚‡T“àµYREà‡Ñ¯^ɨöÆ{™¿Ÿ3Ì çöäsÇKGkzC®~âu()ÎŒ#­¼”ŒÎpÆS%³Â&­ÍoH))­n³õÕ+9°ËŠZÚµ%Ü‚Š;g0B.ž›fŠßì‰(WËÏ8áM¬¨êi09ŒÓ3öˆõFê>¼ɱ%—]Âîv¿{%áÙíÿÚðÛ†ÿðþéÞ Ïâ¨"è?DÁK½½Î¯bW#IÂõx—[k÷tá1%¥5Âm¶¾{%kX¡Ø¯S-ÉPäÊ ÉûÙ­Õ”ýŒ‘ÿgùŒzbEA7¯&'êã”Ä, ­›¯æØ–Ó.cw»ß½’ˆW§Ó‚̸pXv:N$ªp…3ñaW#Žz(Åüf‰Ó^03VœIwý³Z+ ^Š1-¥5Âm¶¾z%O¤”D.ÉÁ=jr &Û{•€N„ØŽ A¢è9¤ïÌrzÙ„5u<~Fr"½©˜«¥›®ÖØ’Ë.a?ì~åî›Q5•žvN‹µÓ¬rÚ) àdŒMÏLœ{y»®”79íˆ5Ý2§!§¸¤â˜5ê5Üß[»Lq~BË„”£¾LbIQ7¯Œ­(fݤx5Ƕ¼ºÒ°»Ý¯s='ç™mVÄ@w£Ç%^²÷+·£v ¼‘é­‘”~áDœOƒ2*˜™ÁÝZIP+Æ´”Ö·Ùú¾E[ˆ°ï=‹¹š3¸1Bnié“#n2zæRµS!Ù”Ÿ É&ÖT÷œD$/ÀÔ]ã”cK.»ˆý°û5€äb N›~æ’sÆsÔÉàíë@ÈÇ5M1ÈC‡™’wÁ-xÿެI'ŠLÄfŠÁ÷]t!:>.*[NK#0©'âÈjtd ¤q ÇSEi%áß,)…5Âí¶~@‚FûƒU"˜ƒó×Á?õ0å’z¦|¡V· "ΧlKL/,¥—DÆ´”Ò á6sßwi=Þ½QÕ]1btTžèH˜ ÀíÈU áýÔ)=c¾1ŽDËZòb0W8$ÝXkÉ:SRZ#ÜfëëŒÓþD¼ŸŽâD<`T‹ŸHˆ’Æ÷N°EA¬b ¯¯‰J)ïŽ5¶3ú/c ’ƒdna#0zuP·(^]ØlNrY*ìn÷Ûôïér"¼¨,²9—Ã_bw¸pbÉAH£Ïu”®*¼¢¦Ž°¦òD09ÈE06J'<ºIáj-¹í"öÃî·é-fÞYÕþãkc,,kºÎ[±þé([G‚öêŒÒÁÓ_âDÌìè"ÆÀó)Ju[kwJŽÇ””Ö·Ùú6£Õ8|^Û.Í ì¶"-~8¿†›jߥEÀu¤´ÅúÜ8¹K3£²‡q؇YkîÒ<&¥²†¸ÝÖ·I,‚NK} Moô ˆ2Úðvã5UbW¿Lá{]ÿxäð&VTw$Fr·Œ­¸s­¯ÖØ’Ë.aw»ßf´:°Ž‰ÌÚC?ȘAÁøŠû@G‹kˆÀ<°¢²‹-ãHLgXšÁC á*c­ x)Ç”´«Þp›­o3ZäÝÜßðº£%Ɖ-Säÿ8ÂZ©A,¹»øÔ„)ÚBIzEÈŠq V`7šÂÝkÜèD­$x)Æ´”æ ·Ùú6EyÁ6U´økc°Þዽ8,éü®l)iAm?áDL»ÚÌlgqÈcÒ[jM··Ç”tɃV›­oÓâX3_{™ä`ªDä«èc‘²I¢ðDpóùÈádK¬¨ÜË$§ñ¸YØÛÈÔ]½aͱ%—]Âîv¿‡Dbn]#ãŘôàcæÎh2Õ‘Žô jX /±q$òpÛ ¼5Ãɳµæá¶Ç””Ö·ÙúÂÞ™ñ RýÌä `1‚ {<õ q‹µ˜‚ ƒ_½åüYŒU3áÚœ‚‚nÆ"Ü1uíä±%—]Âîv9.X}m æÊnÀù²¸æ隉Ж8‚ôŠ×•q$ò`Ì Õ$¾akm^’zLI‡BI€Ûl}½Dx—~6sÐÁsÆAD#žLrB¶¦(ÆpÀiŸòÅvoÂŠšžª“ƒ,®Ä2²Âº»O°rlÉe—°»Ýïg¬ybù¾6ÆÂË™y-«±Ëé­dÔ3¥U@1½7îqã:ÞãÒÚ å1)•5Äí¶¾B¢AÝ*:0þÁU\x¾ãѽ癳‰Àð ,=õäG"ÓnÌ88qØÕYknú<¦¤´F¸ÍÖï2²GWqè¯qEÆdƈaFv¿Dà^9YÈARFš —¡®z…Š=ÂEÈa­$x) IJk„Ûl}),©_ÙüuãtÆx ; ½C+¢2Pÿ»?ñ!ð¾§î÷ÄŠª>±INaŒ‡°Åñg5Å«5¶äÅÅÿÝí~ŸÎXÜnÆ4ÿµ19Ùèh!q2‚êïoieZåd+,KÏxGbz›cÒ#C⤵fZ¥Ç””Ö·ÙúÔ_´>vÕS1«î¨Îêx ±šH$:’‚ J†´u@+ªxzHÎÁڑ¢ÜsêÎrÐ9¶ä²KØÝî÷j#ž¡­ÚH×Yª°ª¾ªL¸˜ž²A•–ž:{Q•’Ù÷²bdÕ•…)¤u«6Â1%¥5Âm¶¾OgÊp©ìͱqXÎó¦.Ö£Ž8¼ya"…¯6Þ_WÊ£ŽòJ¬©ê>eÉ),ô',Ü©ûÈJ[rÙEì‡Ý¯ÓY+Úr)žÓŒ‹½’*kìÄØ«5‹èy’ ©[0G"“"͘¬W Ü@º“´’ðÌw¶”Òá6[ß§3ü²-Ó<Ÿ‰3Xã¾0D̰>ȸLqòQM;ɱNJ¬¨|=$§!óÌØ“rê®>vʱ%—]Âîv¿Ç>VläKÏiÀœ‰4Kí|ØPúÞR\—)Ü<×`Û8ɹV2VTÏiÀœ†R"Æ¢óZêní̱%—]Âîv7ÑM†ƒËI—xÁb²‰÷ØÉ8•CI»—Ãb²Š3Ë͵|Ó%‡iaÆ2-̺GNù[rÙ%ìn÷ë)[¬^lN•1§ÑYŠœý Šv¿Ö4Å“°ÃmnC¾ ÃØ‰5• ’·Cb:R¥ûx­[rÙEì‡Ýï§l=^alP÷µ1P[§b(ú“ìïõÑ€ò^%[zêô8Ó^"3›¹‡}Ÿµæ¶ÐcJJk„Ûl}?XcŒá,BF}\O8È”o)ƒEè()#ã„;Ÿb}¾ôÊ káB­[°Ç””Ö·Ùú,pÅù]ÉA(b4u‹çƒyš]ï)R íÀ§Hù`haE• 3‡õ®…½7ª¨)Cݤx5Ƕ\v »Ûý]fváÆxffvá¶™E?.kÌ¡>†|ÁôÓXÊ´!àLVëÍÒ…RáDdM3°Š1®1Ú„ZÛŒÂ1%¥5Âm¶¾ynÆÉÎZÈ-j†þD$Ô0K ù$ÝmZ øõŒƒ[ÏZ³ž˜Ç”´ÈóÜfëw§jÈ"›N5LÎB<Þd—‰¨ÎÝpòÑ{¤|ªÑ}–cÖXQóy}‹?[b±çKݹ'̱%—]Âîv—™=™u§.ÓÉA©Bì±Nì5Û‰íWxßIq—…Œ]Ë£KI¬©jÏprŸØƒÇ¡Ò}¸†PŽ-¹ìv·û}×Ù}ff7s;f ,íâ7ЧzEq£…Ìã”ÃÊÄŠš¹¾7g d›±Ë(ëîYìÍcK.»„Ýí~ÝÄñ¾Ù6qb¨ôcW>ŠBΘt÷’‘q¶téÌ8[ÉH2T2’8nÓ¤õÙÄiLIip›­ï›¸ Û÷é÷‰(éÛ¬Bäú­¢s§® /¤Mg.À‘˜~Ÿ˜·Šqx«Xkwì¿Ç¤TÖ·Ûúݾ­áuæ451N:ã* M\tƵðgð¾­)Å)¬q$ÖÓ쀌I`W¥Z¸©udz³Æ”´¨¸?p›­oÓY´L».µúÚ­Ù"À1jNƽm‚®!ÃØnXŠÝ†qM­ì=?´AfÞ¡m úÉRëÌ6\“ YC܇­ß¥©¡Gë“éj³Uï…geåªÈdÕh3ÅíÔd¯UÉSÎ…õdºšÃlUc™ÉjÝO¦«Ç–\v »Ûý¾UëŒËìŽzO“/”/)j6q¨íîôÑ¥²ÐRÎTMcE=o:sSP„­l "ÝÕ¡w9¶ä²KØÝî÷ˆŃvߙəv5Õ*S{²Ë£:‹*¹âTg–OéÖÍ«Åi޶9jº›xrlÉe—°»Ý¯#KÎVV†Œ˜s†Û#¨HB((Ë_á4+&–º)Ç*ØXS+GÌáÏeìÀÍjÝÃ.“›rÛEì‡Ý¯á# 3äXÖ2qauM½cm´°\Ùµ.ÌÅ–bl‰õôì ®ãªHëðÇ””Ö·Ùú>ÊÂcüµ1î ³ê 8{  2S q$ Õ—ò¸·\‰«¸í¤µføÐéFÈ­¤5Âm¶¾FŒt×/«ŠC³bu-ØÕ†Z²µ‰ÀwÚÙ]ÒØ$žÆ‰>Ù7AwÆ5W°­Mµºn¤´F¸ÍÖ׈‘†¨ÞU¹`FCŒÆý .ô›l\ÍŽìÊ\Àʼ¤tèˆmµ$ª3Ì€ÛÞ¸#b˜¬õpæ‚Ç”´èT ¸ÍÖ÷ˆ‘ªˆ5Ü0ƒQ(+3 %¾OŒí@®­¥HÄ0ŽÄ´Ý d´‡hkíö¡{LI«b€Ûl}¹pzRQÂòkç00;BV(N³ÈÇ¦ð„¿¢>ò†PcEeÁLs¢R~KlaHé&Å«9¶ä²Kػߧ3¼£"PÞcs΀",±1ÀñbÈbôo&+xb”rä®&–ÔÌ"ÐÉáa½°:¬—nR¼šcKnK‰ý°û»é,έND¯휋a&ÕȽàt6š)OgqffyÅ7+¬©Œ•OÊ{¢þu“âtƱ%·]Ä~Øý>5Åg8R F5Þ@÷f ³É^ü8&žYSŠÈLã–¢E )£…c¼£´>ÑSRZ#ÜfëwÓÙ½¶;O'(›Á’4'‚—/V«9ï@ÂsTD{®ýRfâHœNP6ƒ…lˆ;§ÝëÆ7óa昖Òá6[ß§³‚Ä6…ܨ}~vêl¡ÉthÕ¦o¦;‹>¬‘¸¡ŠÖrm›Ñc‘dÎz­µ9ÜÉcJJk„Ûl}ÎîfÑ»PŸÊÄAÕ{Éy°V^<û±¥h¦`Bl+Ê#G ÅÄŠ:¼a6‡ñÆpìY7)^ͱ-§]Æîv7·5öí9·5”,‰Y˜5OÙ|+f¡Èî(ù[Èu²Kã@P«ç¶Šò™ˆ±n1Ä•ZW֚ט–Ò<á6[_ç¶ž9¶·†tÁ—ñÌ££ÊþÖˆRgK)[ˆ G"ßfÐq/=õÒšo ))­n³õ=]­á~˜ÈÄüÚ9¨º•;â΢ü¢x46ѵÎr %VTõb,9%Þë‰ÙçÑ}x=–cK.»„Ýíþ®†?îáÓí3’sÅž"2¤ñ´¨ü}œ,wdaðû2þä g*J} ïùbþtG’)Xq"|1å,„b¬¨ôŠ$ áÄÂÙŸº[ŒöØ’Ë.aw»ßãDsžNõ¨Iêx÷ƒï£¨˜Íb†%ŠSPEl‹å|ó+jd–®9(ÅœXtßIÝÍ1»968iWg«€Ýîï¦7vê:VNo‹ßs{ «´Õ:DxÎZ+¥¨Žd‰ìno²×P¶?»ÚÇ4 ¥”šÖ·ÙúÝô†,˜3Oê͹∠™ÓZk˜‚Ú4åé-¼Ó–c¹›XQgž×›ƒ^ªÆ(zeÝÇS^Kc[.»„Ýí~ÏÆFGí'j× ÞöSýùâ¥: OÈ®*…Xª¦‚Ä‘ÈxÝžÑæ}!¼)ÖšÁºSRZ#Üfë{߸VάÂd:øq¢¾Nü&ñfž"< ±.OãÄs,œˆ¬¿$ƺÜç@Ç1´ÆVÊ€¨m))¬n·õ=»Áx8ËÐŒß,zÉÀeKÔØ(7œ…&ª*KºpÔ,‰ÃY†bLÞ£ÄÍ3~i%ÁK1¦¥°Æ¸ÍÖ÷‚YßT5^A_;§Åk*‚3:ƒ³G7ÅÀt€K9b)+ªæ6ÈJìyѺœ7=6å¶‹Ø»_=‘bHË×jüØH—æ<^(ú1LÙ·ˆr2’óa¬¨îZ¹ÉQˆ™°ôÓZ÷ãÇõØ’Ë.aw»_=‘éTq§ÞWÉáFz"Ã*£=ÉT‚îô±Läu¥±‰Õ½JLNƒãØXî§­;KGæØ’Ë.aw»_=‘s¨'Uv¸'ƒn÷Ûö³LdŸS\ÑĽ§ôRZ8p$ž÷b4Äö‡tÖZ}WxLIip›­ïžÈ·Cu y"ɘLý±¶8é£>‘þq>.ì(C}¦ôŒÝŠq$F–ƒÙgÂaIe­-ëhLIip›­ïžH¼VnGÍÀŽ2ÎÃÚaÒ@Ì ž–áõh)Ö{ƑȨî7á°Í´ÖÜ…zLJe q»­ïžH$8Æm«=hr°¯Q²…ÛÉs.×d^kƒöÈ›#&€•©­ÉAæÄ"Ç)ugéæ›rÛEì‡ÝïžÈ¦R.Z…˜Ñc5nBÖ¹ˆóa÷â\)eíáHT¯BÌ(lþEZ[kñ*ÄcJJk„Ûl}÷D<óufH…9'ê”I_ð‰rgáôh¦ìb ªå8ûJ¬¨L˜M»“‹ú‰©{øã娒Ë.aw»ß÷mÓáF–»4g¢XqÔ½ª8[ŽBÆ'*MˆòÞj­GÞciŸXQ#Ë]šÓYsKØÆš[ÒݲбǖüpÒ °»ÝïnÉ'úÓ‡lf,–_d®÷‰Ò£Ö¥$¼ ;fJ†‰iOœ˜ÕÃɶµvŸ­yLIÅB·Ùú¾U;í*zî]E¯­«h9>û/GqƧ«h©[WQ[|ÝºŠ §þã³ÿ²ÇTçµsï*ºÙú]mãÙײ´ñdDGA¥ÆQ‘Â{¡†ã¸Dà;­hjj)ªfG¢z«jÆÁ¤Äl@J­GÖ?Ò˜‡Û“Ξ¸ÍÖ÷Ý]}ÙœØ ¶‘=YËgÅQgøX"¸JãB‰+–ŽDFÿ›ãc­ýï1%µ'¸ÍÖwçc/ŠE í9ÍÁ×^¦.õ…ˆû2Åm×ÀJÝr¼.+ª:ß>9…nEañ¤îÃ÷lŽ-¹ìv·û;7d©¨í¡“µä U]8•A:}†tEÊ®È29âÞ+jÛ†‰Ã:ÜÂXpZ÷‘ëQ-¹í"öÃîï Ÿè’PÝa”ŒÎfgìö ÇuT">‡¼™r0,Ev†q$š¸ÌÀG2µU¬µdEF)iÓ¸ÍÖ÷élàä§·, iNç$2Yàjpá‰-)N9'ÚY~±x–°¢ÚSòrq-8-…-tZJwÉ¢[rÙ%ìn÷ût†¶ñWîEÍ@½ÛR£qizÝ«¶§¯iœ‹Ý_¿¥ì|-‰Ü…šm¸qý!¥µf}n))­n³õ=]m)Ë(ÓÕÈÈ´³óIHC|Ë6±‚¯¤\Ä 'â™ÎÄà´$œ¦3jÝÒÕ8¦¤´FÓàfë{º|»è¦§W¿9¬']à *^ïådñü§5 {[~O8¥'ÖTÏ ÀV•6–§­û©Gí±%—]ÂîvWª¿Â›ç:ÛbTÎQÈ>›•³z¨ÏúÌm(bkéŽq$²dƒãâܸ8{A븞¹o’Ý·ÙúîyDÍ…+2Ì@€ft¯.¨3nû‰óWvÆX+)­(îIœˆ<Â0ƒÕ…ÃÓo­í)0Ì1)•5Äí¶¾{ü¦ôž}íœNbÁý0Ý‹,¦FÊTÜO–£ ZbEµÇ)Nµ'ØB'£t—gòÓØ’Ë.aw»ß§3¶aZp[~íœÎÒÅè‹[< 1Õʤ8ù •pʱhJ¬¨æÓüä`}œØ‚¼7ë.™ç±%—]Âîv¿Gœ˜8"mQ}SÍÁÆ9ÊÇT2«å#DQ”·S1Y޼WcM5ïg’S‘ag,öÏ©»dvžÇ¦Üvûa÷w$Ù—j»iÆV¡A`B<¦ˆŒi–ÖÄ!ND¶Ý4‘ÊÆ!RÙZ›ï ))­n³õ}n»°þÞæ624·¡ÓÁ3{õcn«Ê±…´ns¢ˆmn«Û%g/iÝæ6Ž™3ß±rnÛl}ŸÛPùie0“ˆGŠôhöEލ‚ÕÓãN‹Äê¾RŠ×£q$2ŒÉŒÂCÄl1D­Ãä1%¥5Âm¶¾Ç‰”§Êâׯ@Ç©~UE9¶…0 6ŒqY÷¨7QS:T÷±_Ida3×cSYk³?ÓcJJk„Ûl}ŸÎا<‰ÊdTˆ-´Eiœ…Ø©-Ò*’$mªñÜkÙÂÊŒƒiÀ 4¨’Ö‘ý«4¦¤ÃMzp¶Ùú]ç™Å´ééLvG1âÉB4qu€y “¶| Î´±¦2ú"9pÁ['î4é&ÅéŒc[.»ˆý°û=bûüëôY¼öCýt@ÏÑPwÿè¦8á°ð©å(‘*¨ˆÓÇñf¬ø+à½f)ÕzI8 …ñ>!•AÄíæ¾'`׆’¬*VdæÐH’^*%»@½NSaÂŒ%üxäl#-¬©žÍ®ÍÁü›ØÊ6 Ò]s‘cSn»ˆý°û=í'®ãéŒMr+"azq÷4Ñú¬"`Á@{ IáDOOl0΋Ý;‘p!­gæchLKap»­ßÎbÙÇѲpÖpã’(bÕYÀ%®Æñç,œ5kJO„ê wª(¤šÊ™dBãЧÄZ» SÒ®ÒÀm¶¾ç\cb,óÌ”Ps.öãD§¡hC_ÜÄ+ ßkœQŒGÞѨÏXQÙ!9hsaìD²¥uÏLÆôØ–Ë.aw»¿KÀfÇ»úÎ:Yz‚Å":*K\]¾à¦ê{”âàɸ¡~xu+œ…µ,ã2¥•/Ř–Òá6[¿«Y‘¢§Ì'3àlˆbV¥(ƒ ݬ¯-I+Ê`Õ™R6ûŽDwΓè›fkÈJku))­n³õ½$òlïe´2[Å8 9Ù(åÄ.q†«·ˆÀ½n¨+¥¸ÿŒA­¾ô‰iÔ?!n!@SZIü)xÜéÔAp›­o“ظtJ:U’œ…Z¡Ž#“1ʈ^8Y……êŃ\Ë/vöVÔô{&9ÈÀM,úS¦îì_™cK.»„Ýí~ß“DÖ³bð×ÎÁú¬Es`R‹Æ( ñy¢¸oêl¢(9ju%VÔáƒ#st0ö@ ’u“âÕÛrÚeìn÷ûžŒE"®Œ3&ãDUù8èbÝð#>p³“øS®I¥œ(ÌþJ¡+ƒŒÅ@ ¾p •´¤•„OÚXáR×¾n³õ;c/¿ø{ÙüõÚüm}ìɽՎ­ÕÍߨê/þÆ`hOF\îºÚúÅßX¯ÍßØËæoìå_:>C:UTnñöÙœ ®Ù:Øxè€oö^AÅ‚†=ˆ SŽå'–GÆŠ:smΊïÁØ6ã‹°nR¼šc[.»„Ýí~÷7â™e#ί• N½˜rÑè&œ"ìDlÝÒ{ÅS«q"ž~ŸbLvK#nàXZGkLIip›­ßù'×­¥Ãqrí€RNάØ'&6OµFÊ>Ǩåg9«þ kj9:9(˜‘XT—KÝãiV¦±)·]Ä~Øý]ƒµˆ+ê‡óf’Sp£Å*WÇiŠV0aÉòÉ^a§“åæ2G7®° –­›¯æØ–Ó.cw»¿Û­Mö™5·kàFÕó{äûªq™ò~-~Ëù k*Û#›Ó‘Igl 8S7)nÚ8¶ä²KØ»¿«‰Í%Å“Óéù£úûN‰½aÔjì¦8!IÙòÅ&¬©æ¢ÉÁ@bQ¡(uŸÉ±%_îùØ»ßãûQún ¯•Í@¡å .ÌB1Ä…-3 Xp5õµ€”åè…#1¼V6I ƱK¸´>MÄ5¦¤´F¸ÍÖ÷‰®Äí?†[š19UåˆÅ,Ue¿|ìMÎÊ•RDÚ7RÐ܇mÈ¥‰9Œ8Ä Yks))­n³õÝù8T‡½» $ ‡ŽäÍ ”¾'ÏuîaÔ<׳ôâ"8Ï> ‡&NÒÔº…QsLKaq›­ßEñ/Ñ—'Š?8 GD=NËŠ¢ø—ÎBM¦…Qü³&ŽÄ‘U-ÉìLFÜ@ÿi%ÁK1¦¥°Æ¸ÍÖïœmšœ*“:Y¶o1ß“OïzÒA's’bÍg‰'T ¦s7™éI­óI嘒Êâv[ßCC˜z²²»'0†¾àðÒ¶iW§¾Ó¶ì )a„#±žä'ÑD•Há°/±Ö‘ël)©“v€Ûl}/ýX€p:ÒÑœpòd(|ãp1Çr˜â;‚RŽ A‰%Õ3¥.9‹Å‰½©£§nR¼šc[.K— E>v¿×AWøÆ¦__;=Á”ÐØ.L!ô¢þÄÕcH9jf'VÔ™Qëæ,¦+Ë.bÖMŠWslËe×rªÃc÷w ÕP—MNñW¾¥òëÄ}' VÄ¢ ¥<º¹–Äš:|ÔnÎoÞØ8@+©›uslËi—±»ÝßEñ—=NÄ uI›OáâÊΉ{w5Ô¦³®ãHlÝÕÈPw5âÔ]Z·îjó)zlk„Ûl}â_Kx\›'ˆhpŒ¹¨,“À×zÂÃ/éy¨ò9“X^E›1Ya›8LNÖš'ÅSÒ¥JÖÛm}âÇ1ÛØ|m ìÃÏÂÖ¤›¥"ðö¥ºŒSųFâHd»3«£‡º!ÖZ½õ˜’Òá6[ߣøKν_c¢NG—'Þ(áq"0|E@»¥8u7®«™üyf`ân tœ´Ž¬Q§1--ªFÜfëÛt)ï§ï,ùZ£âÐ+œjH÷ 2ûᜰZŠnÄ™(~!šq°Úpëbµh%Ûc’ak€û°õ½<ös CûÚx‡l¡ü`—ˆg7…û­¤´ÆþA8Íwª••ˆÃëÚZ‹ïTI©¬!n·õÝÙˆƒzâ°àkçà0!Š~D¤è‰ƒ†»ˆ‚ʤ2H£¥üD„±¦ › âà "±8zHÝÅsGŽ-¹ìv·û;gcAè“ÁbÀÓÙYõ‚4Ü‚åag㽊° ãH´\‹ÿ¨qpˆZkÉE°Æ””Ö·Ùú]¬>Ÿàé´êSqÞ‹éÑ|úQ´ ¯ez»v¤´ ă8Ëùdf «Ì¸A&µ¿ =&¥²†¸ÝÖïö`èEv¦OÇœ ~™‚:ÎQRf1Ôg_GÖÕ(lcùÅiŠÊÂâÉY è!v Ü·u,,î±-ÙÛmþb÷·iÕln7rCÆ ÒѸ9.rVp:ÃãD?KqFi‰ùd`“ÁR  4‘–Ö‘=¦5¦¤‡r<€Ûl}Ü/Š…©®Å_·Óϸz8Žž·N]q;Åí´šDͧF vxîˆM¾µ>ô˜’Åí·Ùú ‚’Á'Ê—|=Œ‹ŽìŽB\÷< 0ê%ÂÑm¦QlÆ V^JJ˜wÒƒM­$x)Æ´”æ ·ÙúîRD3‹Ö˜{ …9\r.¶ Wá8ûÛ±Ó‹q$²hˆ”3÷”µfÑ))­n³õÛòû˜÷U VŒˆ'l(€?°fˆ-{A‘Á3½|(Ÿ?-ÊúÝ8Ôʰ2ØG‡¸…5i]™¿¦1-¥yÂm¶¾|´éîÆJžN~ÿÙSšq̆ZÀ¢`BcSnÉ;vAÆšÊ;ÉA$nbU¹Aº»W]9¶ä²KØÝî÷èSahÙ6íTsb´?»žlkOrÎÆÈ`)\ø®¸Ob«¸O†*ç§šúÇ“zÆèë©ÐfkÔ6m³õ5ú#|€ÆQxw TCÉÃí=ùüâ+BXSYÜ{GùѲ*u“¢nŽmùt°»Ýï¡ èüu–”ÖŸ.‡bÎ#¼èœ*Åéµû‰•­¥XóGbe¶±¬a(Ü@V‰´ŽÌ9ј’Òá6[ß7d ,ÄÔþµ1*£9ƒX&zšÕ*ÃsÓ$)7M‰(¹w‡_±‹´’à† cZJkˆÛmý.yºjEë#2q.fŒ Ê8˜MÆX4RÜ>±1ƒåìÌ`¬¨óIµg1c¬ºË ²É¨›¯æØ’Û.b?ìþ6àc 0¢N6“ƒþÇ!Q°±ñLiSðq>r855³Í¤9Ø;&¶Ç·“º{všôØ”Û.b?ì~?.›³hY-9ç> ÑÙ-*] ÞºLñHëŠKË;K k*ë°™S™¶*ìý;´3u“¢nŽm9í2v·ûý¸ ÁïQ @‘úÉihƒÀ°ù(R€ÒZˆªå°óJ9ãñ5U¯Ÿœ‚Œc:žº3´<Ç–\vûa÷ûqÙ|zš}m {m¥²Ñ® |—]p'ªü>ú7»ü>‰­ü>:ö"NbçÓô“Z·2Û¶F¸ÍÖ÷¢W¨xv>ÕÁÅèn&[0a Öâ€Ôǵ²º¤È1ŽÄS\ ºèO×NG¿Ù¦0W»ö5¦¤´F¸ÍÖ÷ã2FÙœ^;šµ9N¹Žì95§êï4ÊS Kﯶ6ãDœ^5š±¸ŽU:¥•Dž¬)¥5Äí¶¾—Ñ×z”l*`ò:ý¸Ý7n”Ï?.)nÑÏk9}ÀÆŠzÊÙ›sÄ«\Ø anR}=õì9²¥2JÀÝè÷ƒ³ßЉ„ü¯1ÍÀClžîøBk<â:]›m༫”Ä‘€VŸ†ÙøÆ5œÉK+^Ê1%¥5Âm¶¾œ¡Øó‰î¯ÁeN´=/ÇëÐÅßì£,…7Ð8=-¥FCB¼µVÖxLIip›­ïs¶|"F¾6Ã^R×åXéëÁ7q‰çJÒ:íÆ‰XOÇ2f|4ãŠJëpl¾Ç””Ö·Ûú>}a'ùZä'§ ÷Ü8ØW„Y÷“NSœPí!åè6—XQ‡—úæ,DFù nRžclÉe—°v¿O_X‡íÓµ‘ù1õ½*H](øciE3M_$¶é‹ u!Nýa¶}Oжok2J¤_ÿR´âxÂý¿6²iâ;ŠvT€ˆ¯h4j¦›GJk¬…qæòK ¸æ„cDª´’`´Æ”TÖ·Ûú>}UTè˜NÉ2q$QÀíÀYÙbBN©"2.ãH)Þ`Æ‘˜NÉ2%ŒC…kí^@yLIip›­¯ÓÏÌy4¹‹µ A½Æùä)‚ ª„IZѯF8™óhÆ`5?âp&h­™óè1%]z1n·õ}Ò* áP:¸%¶®ŠÓ©¾Ør¡é N/=î)KÀ„#ÑœnjH‡ÖZçè1%¥5Âm¶¾—iÄt^gõ `rê"^7š{uzÝñ-Šb––GbðJ¬©t¶&§Ð/ìá.Ð}<Ñ$[rÙUÜã±ûõଢL@Üòå'‡å+*j Äí•-¢îãiŠ'b'Z6Z~ÆÝ’XQg&B›Ãâ¼nRÊ’ÛrÙ%ìn÷û)ŠV_èÅòµ1àsˆ“­{=}Ñ5qϦ³‹ð™Øª–v„- 'bºr™ƒ@ˆã Ž´><SRZCÜnëûÁY‰Ú:¼š2£À“3Økµ:ÖhÊ!Õj*Ҙ˙R¶³ŽÄáÏ/ÆDñá&J>I+ ^Š1-…5Æm¶¾œZæNŸ›‘ÎÑGúÀ«p6œU•!Â[µ¥…rŒëZOŸ˜u-„ç‘8ÌàÖÚÏâ1%=´Ôn³õý¬lª~Ež•MU¸Ð™Wh«< C¢ žj]êCR¦Ï 'âȳ22Ø£U8öh•V>V›GJaq›­ïgehž¶ªCûÌhál‰ÜäÎ*- GUýÁS-tp³ta‰ ‰Ì^2£ÄÛÓ8dYk¦.yLIip›­¯geÒ¬çáÒ3fè´Ë©c¢s4Kè¤'šKŸWJ‘nÜT.ü|:Z3R4ãÀ¨u<'d—Ó( …5Æm¶¾U÷B]SÇcâ w\(~;datl\IñkÐ (9—+*=WÉAÕÄV¦øKwz®rlÉe—°»ÝïÁ‹(îØ´]ùÚ98Üæð8ŽÁ(Ãuä)sF1)Ëñ´$VTÏ„,sÐ1±h†˜ºkædylÉe—°»Ýß5ˆ9±\×®ç rfÎÊôç‘g®)"˜ðœ)Åýd‰<½c]N>‘—šXEÝk³&Æ$CÖ÷aëw=aêÞ‹Ï ZÇ›ê`¿—çxìÀA»¥çv¬&â9Cƒ‰S)ajÝ sLIip›­ïÁ‹§ 8XŒ3VâA°hR•™iw=™Ì¨c)Söˆ«Î t±3,5nÄúÐZ‡w6“RYCÜnë·ÉÑlËéxE2NH¡«Ltu=pªÕ†d!YMÒ åî…±òlFŒ‰Œ`áð–·Ölöé1%¥5Âm¶~—}¯MN”ýÚE˜Ç©SÍøú'¢\Ið 1°–":V8Í%ðͨøú…+±¶Öâ jI©¬!n·õ=^±2 ¦¸hDr*;Uú—›“!@°²X,ä*++l™u,ª9H76R3u“òÑÛu=rÙ%ìn÷{1Æ…z–@üz8ψó.Ö#÷UG#–:M1\‡7–ÏB"±¤®'ØQ 4óòZ,´Å×zê0b\Ki#q»ÁßÕËç‰l_Y.Ÿuc"Ÿšáïk°ü=2W~C²•Ò®|ÞÑ“hw1£²ðpÓiî(©5#X=¦¤´¦ºb~Úú>s¡âZ|Ã¥iê§°¡XEÎ{²9˜´R ÃèLî’|ø÷Vtójp.ÔNôBédi&ÁK1°¥°É¸ÝäïÂï2ž'ü>¬‘~ ¨w°z:ãíH0£èz°:~]ƉÈÂdf°¶ºp,§.­ÝûI©¬!n·õ=À‘¬âòµ1pøµ9:Šá—˜x.Ãwb)Wß”6®¾‰ñd?ˆ†pª3A­[ ŽiéR!ýÀí¶¾Ï`x©Æzaj#c²¢Þ²¬òŒÚp¥H¾Ù-ª:ÜP·hWÁ^4ãkvP+^Ê1%¥5Âm¶¾x\è3S3GŒ†øŠØŸ¢â2 â9ºŸ”¾Ø1YR6VŽDÍP10u‡2&ÖzØ9ï1)•5Äí¶~7ƒUö…tKUsR:êDxCdw„sv˜ò VÛ#G¨ÄŠš9‘›3ÁalGæƒu÷ÌþðØ’Ë.aw»ß<úBr›óµsºCå õ"•—ç­-Cƒ",£Ž”‡o¥%ÖT³¯#9¨QšX÷§î’¥Š=¶ä²‹Ø»ßcñÑçBšäׯ@¢îŒ;^Å(š=ãÙ&oAKÑÂÜ8ó °'?šqhe­ÝNc))­n³õ½ø"žàs¸…ˆ8“œ÷ͲÐëŠ ä¡(¸Ë®Á©H8H‘âj‰áúšf m¢q8“´Ö–+5¦¤´F¸ÍÖw/"6›Ô¯1FMÜX<âÁ¦q¬'üeù-EŽ¡q$†Ýft†ß×~O­-Ãï5&¥²†¸ÝÖW/"k&- óµ1Šg°ˆÒêìцÍÏÊæ“…›,EI'ã.µMTs3èäå.­u«¨É1%¥5Âm¶¾zï…2{d*Ä 8WÇyƬL£BW.t 6ù!Å‘‰q$瀈ÛµnÜ€³ZZIðRŒi)¬1n³õÕ‹È¢ØçáK3 '„Ÿ•ÓÎÎL[‘‡x¥Ý„‘‰`b,4r.*‡7k%K9¦¤´F¸ÝÖ÷ˆ{V†mùÜÉÁÖtFÌ£Ü"Øæì¬ ¼œÎ=ÏÁ Â’£ArbE§B£8¨w”Ø_DênO‘F-¹ìv·û»â‹:^šC“£»• ZÁI]H o)ºýP÷ å8¼O¬¨fBrp˜—XÞ|Ö]ìDȱ%—]Âîv¿ïÅ Û¢¯¦\Šæà|&¶JqNßpŠínc-ktÄ&ëìé°‰5½ÂLÎðŽ XôOMÝ=«nylÉe×ð.ñ±û»ÞeÑÎí˜ÙBÄt— ßÉX›è¢ÎÀÓ”}…ÑxÎòŽ‚ÆŠšÙBÄœžÎ¨è¥aÝ=[mxlÉeWÏ®jõÑý~Oõ~O†ÂèéÏÎûu~„ßÿ҆ݡUUõð{2FÿKo—u~„ßsÌ Î?[â6[ßwg¸½ŸºÂf 42ˆ …¦Î‰mÓQEpÅ¢¬’²˜°p$²¢°pgÇ(JiO–qUaJip›­ïÕñúå`’üÚøþúsB•ê§ó]ÇþTe HOÕ¬îTµ`o¹ÄÈÁK(kíÙxHcJ:ܨ}Úú¾;Ck±õøÅŸi¡KDD¯Í¿È¸JRQ…ñøÅñÒqü‹Ôúø5¦¤´F¸ÍÖ÷ÝÙ —ù ﯇S=“œÙ¿P̾"èÞ,j¾i _‹p$¨•—V…õ´iÜ@»´’àžìRw¥N—Äí¶~·!S­5»MÎp9ú®˜¡ƒ1ðÔ7d*6£:÷£$ÖTÏd,sО(±,)hÝÕ!š9¶ä²‹Ø»_£{Qm46“±pˆþÝÂwt c•”Q&ÑóL)j^7T9ÍÍb`E(\tM9­•/Ř–ÕGn³õÛ(Å8ˆCéý¯SY¶îqØ“ÉÀm/ &°>gʱeJ¬¨’aóæ BGØÉ€©[¯ÆØ–Û.b?ì~R\¿ô.3CцÛUïEêõQ“êÜz—‘½ËLݳG%å»_/2Fè~mŒ{½:‘±‡Ò0è]:Dpk‰ôKÑ^Æ8yLjÆtÍ–ÉìÂ’ZóŒÔcJJk„Ûl}u6Nlí®é^ef c\rȰ®Ê×6-¾³RR:‘¯-‰io¶ƒ uâ'c­™Eã1%¥5Âm¶¾gA³¢È½ÂS—ä`GYy#DÞ|«¨:Yä¤àä˜OI9nÂÄŠjîä’xï‹eê.næ’cK.»„Ýí~¯èVž…'?_^˜ûÁ8Q£/¨PxßÑœ¾äUÁSŽêá‰%ݼZ¼h„-<[’nQ¼c§\– »Ûýêy‡RtoFÁ¹Á@ŸŸ‰ ½Êv¼$ðÆLJJq?Gâð!¼+ᢻȰVÊ€«¥ôÐÑNkŸ¶¾—÷hq,µN'7šHŒ¨[?Ñîï¸PTcMt'bâ±taY"‰Lî4c¡¼ q ™—Òº2¹ScZJk„Ûlý6?E)÷üh¦ÄQu\廓ñ+ß`êxZŠ™q$ÆG~4ZÐG½)áð`­Yá1%¥5Âm¶¾{‘Y´oýÚ8å ¿¯ b)ô÷5ÌÞỊLË«œXRÔí«Á9Ùb’Ø- ¬ûÈÛrYzº‰æc÷wÅ»6®n_#NAgMöø‰WÓÒÞè0…I•…,gÓ!cMeñrq.„º z!HšIP1¶6·›ü²!lÑ™=b°§ø1”R §Úþð®©)EÀ¦q$žÖHbŒ‡ŒxkÍ„y))­n³õÝéX£­ f,F_4l­N³ïòO »jüJ:á‰ì%bÆ@iOápe­ÙKÄcJZåÛn³õ»À¬‰°¢ýÚ9ó¾jãÄéB”F9M9¢#œö’7$7kêY>›ƒ£2cï#®BºIQ7Ƕ|zmìn÷»Ó{»ð„©Ç(Ú–_¨ž¢mùýâšÞÛ{·5WJ;„뮦/cÅ`D8q¬>%­$x)+¶HJó„Ûlý.F ´¼9f°KØB££Å.a u¡ÖÓPs!™ØÒ†ÐJáH ûqÌè±±7®¡ð ´6§ yLJe q»­ïE±”%=8b H!JòÔòb=Æ~ˆ õ),­È&NDIá,íÆ…_{Z+ Þ¯—jšÓÖ·ÛúîZ„ç*êjß’˜q÷;¬5” ˆº‰á_#õ§‘å‘£ñ`bEå¼—0¶âSXwÍyÏc[.»„Ýíþ.OšEVO{]‚5«-œ9Æa#}{g‘®¿+¥85ŽDfI˜° ã*:ªIkõ‚ÙcJê’¯Àm¶¾'˜á˜ëœ¯¡H;P7+’Ö.&£èo¹RŠKãHôt}Š”q8I²Öê=œÇ””Ö·ÙúîMDI¬Ý›H†¼‰]­<àM>±7qºrì'àj›rµÔh2Ò+xŽôRëæM䘒Òá6[ßS£‘4ÅŽ«_Ñ'Ñke¢HIø½ êr’ 3—Þ=J+ĉ8ÒGC[¹ 7µ"­$¨cZÊÒÂm¶~—½pú¤šñf a9Ò”'^Z•}£×ñ§gµô:Ô×¥$V¦À‰:8Æa×m­¹)÷˜’Òá6[ßOÊKÛ1|휂ÈHv9½2zï¢+¥fç“{êEdå³°±¦Žý\ •Þ³s'v'Î¥›”OÊJ}ä´KØ»¿ëë2éÙu’Ùðì^‘6ØÃ[GU‡Ÿd±YÏɃ.­&j[zÙ¥3í¸m…ë¸m¥µ§XcJJk„Ûl}ŸÁP:/•U+-9§<,´}-‘*ÖÑA‹g™ÁÉ'{„u¸®€9Ì‚1–i0ÖMʳcŒm9í2v·û½ÚbCgøãr¥s ½Æ’ ™ «›Âް¡4[ÊŸXRÔÍ«Å9™×Nì±X ˜ºIñjŽm¹,v·û=¨ñDqÑæ^ft÷Þ>éTá ö%hß'œˆæ'Ô W~I­yìí1%¥5Äí¶¾Ç1²ýÇH†âGüüŽc\OØ"/ 1P–žŽÓ®IlÕÉP<"q©x| Ö˜’Òá6[¿s-Fbå1œå˜öc¹ß¶½q?œlb·Ý/'ÝYÎ6 ÆŠz 䙃’a‰e/ë~jäylÉe—°»ÝïAK½˜§ƒ—úF;÷…¢ Ù7Ú=£þY·ô^»³otàDdá&1+æÇp~i}‚ý5¦¥K}£QTh³õ=¨±Ç~ôI93‘4hŠq(©,ÎîËÚRÎ"È°Ž”žñ=G"SÎÄã‘8&•Ië“r¦1-…5Æm¶¾MgvqÕæÉéñ ÚéUÂ1Ë!ŽÖ”ÃMr9ã„5Õì#INe<„°…Í9¥»äSé±%—]Ä~ØýîgÄürÿŽq«í¬©Qïp `÷èˆ+Œ$!Rô^ðÙ[Žò—‰ÕE•œû'™Ô©»8—>Ç–\v »ÛýŸ1Òï"ùL?ãb—ÜÉÖ+S…S•1/Sö3®™ò…U°±¦¦ë}&Ý¢‹î©»ûͱ%—]ÂîvW ä`Èázj(¤*ö|—Bª* l]_`ÍTö{2;ÎGŽ„˜ÄŠ:2•]œm´=°7µî#C{=¶å ×v·û;ÏãüL9«J|VÇ—ñ¤œ¹9c†;¢àƒ¥è!ñ¤ªÏ”322ul>)gÔúÑñe<)g´F¸ÍÖï:¾Ä—ÅÚì_;é N_F}8ÝEqC†cÿ”7<>ÆŠZ¹}1g¢…±µ¬{øL1Ç–\v »Ûý¾‰CY³SŠRâÂÁHaƒäðgoØ‹gZ”^å9XÏaÔÄM5õÑ›¦æyL4¨ÅR­µù5ã1%¥5Âm¶~×Ïl Ñ\ž3à܈ÐĆCtäOãý{¦[¤VÄq[Šw°q$Ò'"Æ‚[C8žÖKëzr9¦¥°Æ¸ÍÖw¯$2p*[*~íœoâGKáå̧ŽÖ¤è9ìðy[Ž}cbE­t#›ßHbýŸÒ=FŸcK.»„Ýí~oiÖÙîº:˜?9ͱÐû<ÎåšE¢ð80½(å‹iŠªæONáô/ìÁ¥tÙCÒcK.»„Ýíþ®(ñÁXÛ3‹£ VþM\¸ÎòÁ]öŽQ\¸¦´#!^8G–ù%c¡³žp ti%ñ§ ¸VJaq›­ïŽH8Å“;ÜnZœ•.£N$sÙ;›?«OzCþÈ—sìµÜ099xÆŽxݥY-¹ìv·û=€ñË{  ™Ï † ú@‚Ò©–^:´îr±F¡@â"²ž¹Ía)9¿Ùá6[ßH°ï9Kú!ÅÀ†#ˆ áCòB]…ØoYŠ­˜p"Êã$ã ‘­W.û.Âa)×´TÖ·Ûúî{ìˆ=}àkÆÅZÀC5>îŸ?â7Fa/á¸Rz*@8g†dˆ$á"ŸuX+ ^Š1-¥5Âm¶¾ûRaî,9X„¿/ÊÐX8¨6°(:ßgùB«ScMõì»lÖ‰Åz"uW?`9¶ä²‹Ø»ßH°Ñ Ÿ¬HȨ(}ÜQp’U\ÐDº‹ w[JK‡2L#Qœ¡`ª¸Çi%ÁK1¦¥´F¸ÍÖwGäˆÀÃXµ¸½9Ø…Ã/*w°…k0’qú$ÑKë‘#j8±¢²*irjX MÝY˜4Ç–\v »Ûý‰¦¡Q»ãr $9'zjF„b9@EDÊZ¨OŠÇf¸yR~q–uójqÐ‘ÓØ….œÖMŠWslËe©°»ÝïýEy°n!ügQk‘9»ñ "·Pù])ÊÙn(g×¾|2&¼áÂM´¯V¼´*g÷¶Æ¸ÍÖ÷sµ_ºM›¡ó±­ÛtT`üè6õ³Ûô¨[·iÏtV·nÓÆéäì—nÓSÒ­Ûô‡­ßÚ¿Ø/íÌBû"+ë,ž(¥^XñþW6:ˆøükZÚÐæQ8§3—Ì€ß[¸‰gIZIpæÃ˜–Òâv[ß§3×JÌV1®—ˆV1Cµ::Ã/û"=G=¥®Þ8j#JÄèlùB\s3Fe«˜¡rgÒá6[¿‹‡Œ·ðð>ÚŒÉøÇ¥Z™¨kÈÚ+«NV t²&Át\äqH+/%££zát¥6º‚«WIPØcXCÜnëw…öQî·ð×Îa”mÏRÁQ’¤g)a—,éYjr•!VT>/ÉA€Ž±•Á¶ÒMŠWslËe—°»Ýï©ÖMµ2/ÕŒ1 ­ë´±ç§$ð2î:¡ TgÄ-5K¸ž¬i6L8¯ÄÁwe­Y“ÂcJÚ\¹óú´õ}cŠUiqC}íœÎú ÌÇ*ƒõA°EåíS”¯‘üD 9cMµŒ7§º>°…õ?¤»<õA4¶ä²‹Ø»¿«2ý%}m Õ9å}ºXɃ™.î1T NiAúÎÊú £n¿…8.3.냌)‚3Ø©^ƒª2‹q»­ï3XC–m#C3XGöX–ºº> aáÈÿ)U|ÛÌw‘!dh&".Ë _Ÿ…°8f–ɺ®Äm¶~r!é/[Ÿ7qÄž«ûð…ØóŠçq¥¶G"Í@Üœqx²¬5{v<®WZ#Üfë{Ú¥öÎYŒ˜ c_—úÆÜ/½qÍmz'¶)²´"eš™"òðÐ t6®"öQZk¾ 5&¶¸[¿Áþ¿ÚÞ®ç–d9 ¼ï_±/m DåwÒÜ%$3>w²`ÏAüÚ4óógÅó•kŸÓµº4}ëÉŒ]ïZ•™‘OàeçâA)&Û‹¡Hg­¤ÁZ¼‚Å©—Ö úmá$Œ,”™ÐÆ!õÙ£¶¬Ôœ²Òâv_ŸW° t³8"}m þÁÇ¡•øä®8}s’­l¡!…á+zü˜ŒÃáË£¶<®iNZå q»¯ŸøA<þn.b*Ð3/„ =ãØÓIð½öÐÏåHë¥8p—þ¨Ú@YžyÆ¡›žGÍ^{žSVz#Üæë§cWÐ;çk×tvÙDß(]/Ó=5%ya9×mGrFb%µ™šêÓ×ÉŽß8}iìrwèÔܲË/aw¿?RÒðžw%uhNü$â¼Ô ÌGÕs#Pú®5îµ<¦ ib)qì\ rÜã$,Kí<6%ŸÕbnÛå©°»ßŸjÒ2 ñkSdMZÏ5ê@fè{MZÞŸEh°­&­jÒúØjÒòÌ£¾Õ¤õ\ßäMÖ¤m“O!Å‚X{ÃWük×à›—Éä¡ÈY‹2îa‰›P¥7̉•tSå[3Ð?ÊØ»þ{8­+ç–]~ »ûý¼œ-µNu“0)&R /¸縚”"ø…X–¦pF^µKÑQt!8¿=jsY甕Þ÷æëórv©mÍ43Ô¥¦6‹í:šfÇ9±¥À5 Ui¶b;j…Ã×3RDHõ2n ©£F¥à•¯M[ép»¯ŸØ™sIÞÈdƒÕc•…f«I«¼ðôÃÖQ”¬8 ÉVoEÇ«E¸b.Ú“zTsÊJoˆÛ}})‚Üy6sxYÑ]ÖpFXc6[fpýÖH눒qZ¦oKQã÷e\aÅG-Îôœ²Òá6_ŸSõAC]cdJi–)+KNQ~tK\r0QÚá±–¦_ß©A§¨ÄvF 5vÏ¥ç¦Ý~ûæ÷ó è±æ•Gg*^“GlòÂWk¡YkTF—!7XH ¡"Úµ”C8 ón +ʼnCâ"›ôð¨|‹v¬´Ò=á6_?eç—ã‡ìü²“ßqÂÒõ~Û²óËcœŠ");ÿ(?dçeËÎ/wœ£¾‘o1Fz“Ùùåø%+X$( ¬C+˜5 õ¶ >Ö¤ˆ95¦¶ûb(R©ÎÛ΋ac%ÝwCÖ€%/±Hjɱ{ÖêznÙå—°»ßŸnÈŽªÊè¯M\tÙD¦|0X%Á)Á7d̲‡ALã–XªÚÈ^X •ó`‘l—GÉ 9míj@ÜæëÇk¾6hPäŒv¾±,ñž„B®5ÕÖ‰^¸ÂI¸OYRT.ZÄ!Gߣ–Lל².E®Vy÷õcv>b¶"[³b‘èeEÛñÈ£_K×4‚–µƒ÷S8 3Sî¥`wáØG£f6ç”u©n>p»¯Ï+2§#s©x “mÓК}#o¾c’øBFwÚÛU+)s‰RÃ~/Æô<óØÅ[©œ›vûEì›ßŸNg‘]82œV‚“°³ðe'¨£[òé,~ø¶ƒ4±’ò—šéÂvV‚klJßå‰Ê‰V»ýv÷ûy9'B‡)¡RSУû9uÇ}a!ŠÔPJ^§"鈚NÖjaS:L e͸HÄOl”Vœ96%.lœÛvúEì»ßϧ3°d’™ôkS ¼©æ´Nö#C=éHú&´”^i­b'œ„$@µgã*㈵úí9i•7Äí¾~⼚¬¡Ü8¯&óaÄyÕÙSBœWcYb4M„lo¸:6ÖÒ¼²¦›ó ØfΫ±,qlÍÝÌy5ËÝýþTy6qR8Ý—ŠÉèò‰ŽH=ý‚õcv rQÁ áP;ìQ³HÙsÒ*oˆÛ}ýtCVXIå7¿5|{wdQF÷.P¾«ï7fÚAˆ™XI÷›ß¾½…m|³kìv¿ù5·íòKØÝïgÆf­ˆ^N1†HÃ<¼†«‚Xx"G¯1®IéûOäéý¶ã†"±’†²RÃ>c™µç±oÏ-»üv÷û1Ÿ»¤ÈåÔÏ-5dÉå–*R>[…¨õ¦óDgqVjØ'óæ…µT³iš5hžXt;˱»išæ–]~ûæ÷§Üüµ¶s›™›?}]YôoÉŒ‘ci%ã›nç6+27ÿt°Ñ£¾åæÏñíÎÍ_kËÍO_ŸsóÁ¼òòŠ J‚…Bm‡Øt뵬'Š…“—VtT ‡âšµ5žSVz#ÜæësnþcÅmŠŒ'áüºl:$à™’ÇNVÞ 'a9OÅŠ/ãÂu˜gÏsÊJoˆÛ}ýÈÒ£µXë7cør"_°¯¿HL]¦ˆá’ÇB[Ó0ŽÂá‹y)N4žîd¼†£RàG‡úÁ oŒÛ|}ÎÍG;®…vW_›ì…‘Yѽ°T© ˜þjd +šIG¡º:Þ ‘íÚBzøÖÆsÊJo„Û|ý”ŽCTgZÁl’×ôÿŽx/Çj“€oÿÁ樲"ÑÉ8 Õù¦V jÖ¸ƒ½p8êádSÏ)+½nóõ9Ÿµ¥&m£5è¢ÜTøQÐaí¢‡%¦pàÿL;:&VRMòFkȪa,î¡rì#³d<·ìòKØÝïçÓ.,ÁyîÓ™4L”z-•ìì§/‘9óú~¶í 4ÆJÙ[Ö¦KËL*}'ZyîF6GùÕIç¸ûýycQìjUõ(E%å"(Œf##v8pŽªXelÅ*#œ„â(¸ä $n+£RàAsÊ*oˆÛ}ý”ýñ:/]§™ç­@ÓÆÈÄè¬}mL£ïË’ó?Ô v¤ JáÌÄ@)ÓCŒîÝãRpH?ÒJ‡„ÛÜ}¾1›zŠ]ùGR h-î¨:(k#ƒðÙ§jÌCЏã¥T¿R8\ñ/E0ãwã‚3zT •w¢²òNT¸Í×ç1èk»zÞ˜I1pÐZä° u_à \It­†-¶’&_8 YÐdECÀW8lž<*~”sÊJo„Û|ýtcF^ïVòÆŒAÄxtœðîCânk]|cv.[ΛÂIHò}+xc*Ü`‹éK¥2¢œ÷œ².q{×þîës¼;ÿ¨\mŽ7JƒæÞÄk iñè¾™oÑ´¬ßvœH+éô65XÅŒíhî±)ùš-æ¶]~ »ûý©¦¬£PFdeV€Ý ‘QíDçØX`z—À‡%[qV2ŽÂá  ýa…{íyg÷¨¾kEm3­ðƸÍ×5e(¬?½†AâòS©gÀbÙWÄu)1 8ÁÊbûbÏa!qhß…±/@t òÙŒ¦Àb^[é£p›ÃÏ‹WÇýÿp“R+¦‰ï6dï¼úZ¸ÌðF_ÖSœ!Àbéè¾ ;ÅáÑKâ^„µ™êÌsÊJo„Û|ý˜|„Ow¸”gS$Â#Y4 Ž*šxSp ðZ¶645N‘IÒTLe7O÷+» \¹0§­ðF¸Ý×OdÄ…ÍV’6>H©.°æ+‡Æý.4!£•äTÂI˜ù’— b눅kÔžišSVz#Üæë'ý†¿…ɹ¤ ÉÏ ‹ô[,[79ת>ºp‘«-qnr.)H²%é·4êMÎ¥9i•7Äí¾>¯\XËþ°_›âr²`#ýÁ"ÁËQ¿ÒÊ­ÆåäD&Œ¸-‚àÕ2n ©QÇ£¼|_p¥7Äí¾~Êõˆ”žcdZ„5⋪îðˆ„o%9ߣöÛŽCnb%L‹°¦3‘CØæv›eZrÖÇqÝvùÕrûýÌc¥·øéŒçÔ€ö2ø¢›ÂFFB´;,}ǧù^·ýd÷a%þž¥f! .l1Ï›?͹m—_Âî~?óX¡Ø.ñXIÓp,è8Øáõ~êè¥! ^SB»í8„%VRÞ«¥¦ %ËXÜvåØy¯–sË.¿„ÝýþDeUöd¥¡cOc<ö™IñžÛvù%ìî÷ÓÚ6¶%ˆôqrYƒÜðy°‰ÁQÓ b°f ^DÔé¸íw_ÆJªÎIMaö’°ñ=ºÇ>œ3’sË.¿„Ýý~\Û Û’Nök×°1F„¤Iñ©‚м$xQØüPöz€Ö\XKÃLÞ©_mb˜ô/gà2 9ìצ˜qe&EðÐÃ<ëk(páÁ5•­ ß6n¨a‚I¥ÀéĸçaÚ|äöœ²VÑš·ùú¸œ5· Q Y+p±âzŸÉ‰P憞i[…­ «0®iw®ˆµ]¾„ìòU” s´ç¤µ¹y ºƒm¾>/gXñ®êkL+°á ábx‹%‰lUƒµÊqóÆ…nÄI¨¾Æ´%ã°7ò¨‡k°<§¬ô†¸Ý×çå ½#‚kBi©AT<¤KT_Ë‘¹¾ô¼pL;¤k);óYÍJbƒæê›ÒwysË.¿„}óûy9CH³Ü,j©™HÈ9@^TLNJI^ ¢¡‰íx÷&VRr©¥ÉÉm¤(ÑØÍÁ9·ìòKØÝïç cãF eÛNk*ÑÁÉË›Õqí5—%†ÑÝ1íHˆN¬¤–m;­AÂlb‹¯Ü0vÙ¯ä0wÉ+»zcw¿Ÿ#ާrñ¦I¬\®=@¯ëNXÇ-ÖNŠ]õL+h#‰³o~+ð7ïvz'øhN(ì po¾>ç1Ö›“ãkS¨Z¬¡BVud]é¼YeF¦Yç#ba«2›wΆqª#ã¨[•电n !»¯Ÿò+NJËuÒT ^„÷œ²øC6†/\ïÓÚ@ !œ„;/\ Ü›‡¯‘GÍï«ç”•Þ·ùúllb#r4q‹x2…U‘y¢n“ÂwÅ%kO+êËŒc±Ù•ÿ~)Ðß]¸ˆKJeõ™¬tO¸Í×ç`ã‘4zŽ6Jƒ·wçÞ&’–&³Eñíx/wFio¤ùVÒ‘ÿ6j˜,èu:«ÿ:%|—בVødÜîò§ôüUSbްä!\l$Í®™×)áAÈÚAh,œ„䌰´Æ¡\Σ&a„甕Þ·ûúœÂˆ¿p½Î| ZÃ^ÈÑ‚íõZ=ÀzÍ2#ÛÒw…(__´#ÃXK÷E‘5`Ŷ^àÁר’ðiÎm»ý"öÍïçô|Pp©“Zƒ“X¦&ò™*£;¥¼Ü*·ìÆZÊ„©Ôt45¶!¯Ñc·lLê¹i·_ľùýq%ÃÉçh÷J†ÓO)\UzW®9r%»ÒZñžÎÂÝÎWŠAêâPBàQGòQjN(ì po¾~Êȿη•ŒŠ¤R<ïn/ÇÝ\õÑ×V¥v^oÕfTdÕXö9ó¨ÛJÆ9µ’Ñ›¤n¼Î_´’¡šr%c¾+YgÃHR¯xWÜq¦XYp$ñkŠ´ªÚhäòT‘þ¥©ƒpkG=sÊJo„Û|}^ÉNשÊ@ d=Æ{qÆÓ;WNá‚ÏVP 'áî?"òlCš­GmÎÂòœ´Êâv_?µià´I¾äó"YØKr7Æn)ð‚ I4¶2#Ÿ8 ÓqV+ØGE¸ŽÂcÚgõœ´Êâv_?±.žjöuÓ.B£œ•Õ›ß.I\š„’vP³$VÒÖ½SµáV:5öÖÀSsË.¿„Ýý~¾COè‰Åÿa ’b©Ë"Yò,¸ ®J\ &«É¾Ì…yµ[*÷›4Ø{ [®‹Í;1¶$ßÏE>ˆíòKØÝï烎» ,Örf îüC:Ù©ëàáèš–¸@ ÔØ>âÇ–XIÓ_ºÔ c ±Èȱ{ÖêynÙå—°»ßÏËšKÆ!²)Œ|É»‘€y±=v’%Æòr­´‚•Ã8 뮈¦‚e‘¢L£fU‰ç”•Þ·ùú¼œ¡ð?ò—N-gTœHM‹#î_^t’^¸ð $cë æDá(,÷®°iÃÆ!mØ£'#yNY»èÛñîë3ý~ž+Ù ¬è(*¸øˆT·Š^Ñ«JÀï/[ÑÚÊ8 ÉN`EÅ©Y8–miÔ»¨KsÊJo„Û|ý˜²o<¬àùþ\we;ò5öG,<(@ž‡7Œ Ǹ€F½Éÿ4§¬ôF¸Í×OŒÂ—º8ù`&ÍÅê0p)D} Ç.6‘;rG±À­hûû»±–îušÅäDbÛdqÇn÷:¡¹m—_ľùý¼¶á0Þê™T4Ò4ô3Kâ‚»‹Î¸T»Y;~ãiGÀ ±”êMÊjÍÂC؊׀ǮùªñܶËSaw¿?凼ñ/XÁ€•:< žÃÚ;ÿB¬=Ί¥)ù,ÜEiR0ð$CRõXiNYËÍ¿ðæëóé <Ñ?Áٌ֠±§:/Œa:_I>A]gÚO0ÐkiÝ9Ò`¥NìÈÂëb‰cknÙå—°»ßÏÔV\&×J¢Pkp;…,šŽâ¢Ù‘EsK:íwb×vKAij*ᾓ$9FÓÊËãRø®ÓâkZ[ép›»Ÿhžë™ç³PT{®".;NP¯ÓÎÊ™V‡£P²S‘¸‘n!r¢QWÆU4§­ôF¸Í×ç õñåõ7Μ}iÀ™,RÑ/y‚4+ø¦"/‘ÞX¥øim®±–Zæì[ƒÅ+±h@™c7‹Ì¹i·_ľùýÌúÄB¸¯]ƒþ¨E$vA 3±¸DKWJß"KGk·×㉕”„sÖD]aK,ùà<öÍ9ç¹m§_Æî~?2€tœ•z×½[ÃöŽz¥²¶} ŽH¼àSK;3é…µtW¿[Ã2vcYáî±ïxÏM»ý"öÍïO GÛhVˆÉcKr¬k #|ÿ‰ Jáºq?$9Z‘ ,ð¨È–äho’äh¿à€ÇÔ³‘@à¦9Úîâ),! Þ›—¯äã@}δG?ÆžXKY$Ÿš‰êwcQºžcg‘|Î-»üv÷û‘¤á°4Ïìÿ(Å…§ÖðVnö}:/ xÀ½°=3­Uet“¥kV +žp¯—zÜÌsT ø(ç”UÞ·ûúHRQBÝ·õkK ~1µvß Å…H¾5Ò¯-â/´ÅN‰•”¿¶Ôà“XüšrìüµåܲË/aw¿Ÿºr¡H9–`Õ(¤†GŒàf%sO¼!.”PK‚èG¤‰+¡ZM)K$¥¹ôB¤F¾²DRÛ Ÿˆ{wù‘#¤œ§ŒZnœÖ)8Òû‰ýè 3ɉ^ãæ-9›˜ÜaÅ4ŽÂÜôEÕ¹‡Ö±µg¼NsÊz¸ìc½ûúéZ­¡fÌ­H¥¨xüܽ~qÅùúf·.Á×j¯'eë¯yã(”lE*Å‹LâNvFä¨göל¶Òá6_Ÿƒ“ ãë%"úŒa΂$¨;ª%† É /ûÀìÆZª{[h ‰@„=’#¤ZräsË.¿„Ýý~ŽH"#-6yŠô[ÓqÅYбì¸}h$ª–ô]ñË8#Û~9/XJÛ1Æ“-Ž‘ØÆÞÌ›?͹m—§Âî~âÛ(.6½)9¼Ë½P¸ Þá%ËÍÇw[ÑÊÂ8 I—!Å™‰'¼ÑzÙ—„ïZNy}+¼1nóõSld7úÚ'²ƒ®K‘êøG×—"Á—dŒrÊzZâ,¬$’b2—¤hŸµfŽ:|ÖôœPØàÞ|}^Á†hë31dˆº^Ueõîy†½àž‚¤f[¯»4ÏÂVvÝ¥rÆ)õƒ£n‰!œ3;¢µ¾U±µ_Â9‡A\GÒDY3Q]TÐN¹Ô…ò¢rÅ¥$®7`¯±½l…µ4òokM등(ú̱[þy=·ìò‹Ø7¿Ÿ¯Õ°y¤î ¥`ú7ºƒÙk×R4§Þ_¤°’•uŠ,_-?Ê‚Ž×ĸ/ Á7pl ~­ôF¸Í×çkµôy0ð}mŠÉvѸlœ‹œT¸ÜœwÕy*‡_ŒUì’ œûRºƒêt×ʸF½‰=jËë'Í)ëPv?p›¯Ÿ–³‹@bŒN ˜f¦x¹‰I,9çÜۥĒ/]ÙÃÂZ*ÙßÜšÃý9K¢MÉËYÌm»üv÷ûy9Ãî4zdûj&Š©bÉlD)ç¯Ía‰WfˆÚ%“Gb%ql_ÇM6AûbÇr{˜›’—ʘÛvyJì›ßÏÄ!íy»¹Ì¬@9GÐs,P\Û]ÁÆÂw|ôD¢™¬èÞc…llfE‹±«±Óð¨ÕÏ)+½nóõWHPü÷áõ,5h“̼™A”]¬Kp¡¡Ê/íÈvO¬¤á×^j:Ø’ŒÝrŽÝ¼Î¹e—_Âî~?‡àW²‡P‘ 7ÓÕìbHJâN²N¤~7•’Ä!Tˆ„8QƒpÔ8dgÉ’7Âm¾>‡ŒÎMXq)ajМlŽÁ ¿crƒws†ÒµeWb·°’Š“e¬©h=gìK ŠM‰ŸæÜ¶Ó/cw¿ŸYD[âè_›b1æÌsðk5’Fö\¼œ¶u©Z8 ùô.×Ù=`ˆ.M?LÏ)+½nóõ‘E¤ þu'÷X±@´X† @¨í›*Õc]e©V—ÏG!“{¬$!®“pÄ%ðz‘zNY» @Û|}f9LâÔô]´¦’Š -SATTL „ï‹âÓ¶£¸=±’ŠãÔXyWGz­Ç¦ÄOsnÛå—°»ßŸH±";û¼ ±æÂ=\°u¨õr°d8ûI‚ÎiÇ™4±”8¶? r¥=± õØgîR=·íòTØÝïäû¼ßK®bi£‡,ú[“‘E®yÓÓgÛ7VR¿³û¥i¤¶’•¸yo“¤Åš[vù%ìî÷§ìþt€}er? u†ø4q2í¤Ú¼. <ŒMPÉ:Á$Žê²®]Æ`ñ¨¾Ë«¤•î¦öO_ŸÏmW#F.ÞVL&t_*›ì[ÆrXPC½ÒŠï•prÙ¶¢£…–p-Ž›µù0ê9i•7Äí¾>Gq’kõ"ºskSq¸âEä *ƒÒw*c?k;NÛ‰•TMu˜vn5·9ö‘D»ž[vù%ìî÷ó¹ ­\¶¶ÎR°Ø…t± v ä)v 4*#§¤ŠãÒ×O…ØQ™Y“êW ´Ö‰ãÖ‰Ðn /Ü€ŸwMñBÍ©­(NNBÍœy)PHaÜáòîõÈònÍI«¼!n÷õ#óþ‰MgKƒæ·àÁŸ¼¿pÒ:»%ŸÄâü$û`^„°–r‡‘šÆæ¨Â¢wnŽ]óŸç¹e—_ľùýxn›x‘ÅŠaBwk.´=žxëÅjµØ¨³_–x#ý»í$à5VÒ™ŒPÖ,«„ žŸ3ǦäS^¯·]~ »ûý†D"¦Šš<[SqºdQUp{ÞeÅ’o¾Îó¶ã©'VÆvàr1#ë¸ÛP6ê±)}WD4æ¶]~ »ûý)&©þQ­fPì¢ÀòqâZ¼ŠdZr\ò5pÚk8#lJÅ\(©Á.ÊXî°<ö½óÜÔ¤_ïív¿?qó×·¥ª@bÃWÓêò d)[5îû~V®Q!’âD2ÂQ·–Öœ3^× Pî¾~ª\;°MÏÆ2TL”#½„ uð™öG•À…¨#óZÖ¯ã(Œ½ÈíÂû4ÂWµøzÔ–w<šSVz#Üæë§ªìÁÖÔgVe’!‘‹IùA¯tfW½ÿNÒûÑzÅ3NÂáúy)(Å…‹RûæQ)pÔ%ÉÞìq›¯k[,Œ¤WT U 4/ï 8]|3uݯé‰þP¶¢‘”pòœ-Åy‘,¸—p,JK攕Þ·ûú)&Y½üÚäÞêìLAî­è.W%8IêÉû´r'!÷™VLͳoÝ*9jî3=§¬ôF¸Í×gš,v÷ÝX²¨IÖR¨Ažª –¼©Ä[l‡ÚJ­šÂV„FÅB÷bâF²_ñÚvëªûÿ+½nóõyCg'vãüÚË­¥ë¡rS¥qÜŨ‘åA¦í°žLË!NÂt®¨ÿ1®ûŽ '¶ë9¶£Ðåû´n÷õù@ÆWÁ•M¨Xø5vöN^Ø–ö7|x}‚_¿¬lÏ,ŽÊR2 á&:"jT \Ø0§­t¸Ý×OÖeýPa]nzÆuóÇýWVúçíØ‘ëÔ¡¢3UXçÖǹUX×ãÛ]a<ÎIc{“Öéë§TsÌFdMEY©ZHdYlL÷=nÆÆm­íÕG0”¤V¿Ì2aÍÛNb/d¨jh yxë¶Ú)ßœþ´b1[°Ï\±˜Ù8ØM†™Ýdø‹udà¼”ÙØynb2Éè)Ì»¹™“;Ú•¸Ž³¿FíМ²Ne6¶ëÝ×O}ÐÀ”ë=¯¨¹‰&0UÁ¿â%G,ä)Û ã(œÞíZ±À.Gá•?Š9m¥7Âm¾>®X¯/î"áŽ.Ѩˆ¶p± 7ÔP Öã—Ó$p‹Ž­SÝÇ›ê÷í ® r.8v–G¥À6åÁZ•!Üæë§>hQƒÈÊÚ¯]ƒ"ËÈ·ˆïSìèBÎJ\Š–is®¼fK¬¤æÝHjðëKlǔǮÉAå¹e—_Âî~?/_èHÉÌBë›I¦v²¼™¥ø¸Ð  ¢­èh…–Ë·<˜Â•“xÔr§ŒpNYép›¯ÏËHÆÙñökS4žƒ!u‘ÀTN .¯lÅ-—q²±®¸5µ#5ëzNY‹Rm€Û|}\¾ê!B@µ`µbÅåMtÚdJ\4ø«þ²ë½=‚c¤Õ?ຒõÚ¶b0…‘¸Î’´ªd¹ëî Ê„¹«¥7Âm¾>ç˜Ó™ŒÅì™Á][PP‚? °èPàîa çPVÔíGae&£Io ¦–pÔ‘»gÍ)kÕíM¿Þ}}!¶»«÷צ‰UA„è­Ð›f#¿Šêà›ü Ä8ÆQØÈ¯¨ ‰•pÅÅ×sßhxNYÛÝcüÍ×ç"B W…_·".q:ˆƒ+~ÅÁb8Ñš–ÏN(á³|ÆAà¨Îçhè‘19â^¢”]ý-…œÓVº'Üæëó¢ÕØÝ* ÚSCfvôŠDŸps,É«QÛØ¾X…&¬¤{¯e HÖKVí9·ìòKØÝïO™Œ8Û€9çk×TÒXM2³·ð@ŸI^“p8“qçÄJ*þI¦æp§ÏÀ¶‹lV»åešç¶]~î0zûý¸‚E™ýù­^(;üÚ5‘¯íÑ"ArpDF¹~³äõæ*·½Æ#5ÖRw1Pj÷ØŠÖ–»fçKÏM»ý"öÍïOËYCÏq/g 5*“Ý£+ªWtWÖš/gýHëˆ_Œq†×h+ºoÄ×p•¡Q[^thNYép›¯ÏQÃö^jf…NUý.5‹pÞ[©Yü²Ô ¡À›ïj½—šY¡èß¼KÍ<ê5ìw©™½®ý²R3pO‘ ¶™›XžBê ?+"-qaü9”xfZ¬¦•ý$÷«°§™b³}õi¶Øè&i,#{$K“ç–½› ¶®ü~^Û@==²zÉ $2tRVœ†Z3ädîÚV¬¦ÄYÈê%+ÐbÃ8äÓ:înŠQ»Ü²†nÛÇH\e&$G­™(©9e­b;Æ»¯Ï!D°D ¿xSƒ[íâ^®àZ»EÝëiÉ¿cÞöå¢y`—‹Ó·ð Š×#&gìäû0`Î-»üv÷ûy9»"DÞô)üÚ5‹=4MmäXÀaé²ä*â—¶· &K¬¤éhFj°ÑJlgÚ½Æîw ›æ¦Ý~ûæ÷óØ…&l<¿6Eg’ü¥žðJ®? ^xŽ3­½ÝIJ.£ú£ìü>KâØ!Y£–üËiN(ì po¾>/gÓñ¥CË'‘­³Øuz¸ð\ G€™©GÂIÀ¨ßuæc9˜‰ cÔ¨Ã,Ï)ëtÄ«½ûú|:+ñ";»»À[1âKç¡…CU«86SÏQ8ÚŠc¡qzj¤hXB„«ñMó¨¾ëx¸Î´Òá6_?%æ÷öv:£B§,œ?îóWî3¾k±ë÷Ùíºë0,l§³ë®‹0Nç¯uïB|ækûÙ­·Äm¾>¯`àÇâšòµ).&ØwÄèÕ,z(¾˜‰ùS1F¥í÷‘8 ç˜Oyˈ‹[ó¨øQÌi+½nóõ™¾`Y×fÚ ,j ;Iù¨±g&2yîi*ÉÑoìî÷/8E†vûé,h‰¢™ OH‘"‰Ê1ÔiJÚNgiÇé+±’–C[©™¬9vaäܲ˯骳ÛïçäE¤ S¡‰è­a_æ…t‘o1ËQâ½×Š8AÚÑ&!±’zÒÑ[Ã^ÆVÔÆyìêÞ9·ìòKØÝïçå ô_qêWájj9É3r @\÷g·ÄÅg¢Ýv|»œ.·Ìθ|_3Ï[#žcWsˆçܲË/aw¿?E¤*wäq"hXyŒŽŽ‹-£Ñûš‚#s¦1Rã( sZÑãjÃ8²hÔævBžSVz#Üæë'Úý†üÏ~%í~cã˜VæŽv}µ*«RAmG‚qV–ÛJ1¹`Úš¬>žSVz#ÜæëóuYU_ƒåë2*.ÄNT´EºBAô:%ðbk A©¬Ü"ç­Ìº[§‰&ä4.b½‡G¥ÀbN[«iIÎw_?ÑîGÆóN^„"8ÎXvàf?¾RàÅN‹²‡þeŽÊR±˜¼\Ð2ž•‚Ï|ÇL+Ý#n÷õ9Áƒ]’2mÀ 4v6TB¦xð(^KW*ôаu8‘¸¦iV ‡¶q¬dÔ¨™øí9euó'à6_?’ë3{Í·IÖ»€‚£rOdÂ¥Xâ’ÓÑ÷ËvT%&VÒ}§dM%½°°…Ôûì]Ó0·ìòKØÝïg^+R}ÕîÒ—Ôð8ØA¯•¨O‰èe·^DBhð•ÙŽk×ÄJÊBùÔ€2'±,3ðØY(ŸsÓn¿ˆ}óû‘׊4Í8S¾6iUHð|¡1t!ÿ3x@zh[±öG¡zçbEqÁÉ PSrÔÃÛÏ)+½nóõ™×ʇ#ŒZêçàFHü ± d™bú`láu¬ø'aømcEG&©p sô¨Íwgž“VyCÜîë#¯•XjIÛðµk&v²d¦ Å ‘Šv"—%<×UÝ›öÆ.Â6÷4PR_j@Е؆]°Çnνȹi·_ľùýÈk•-¨•S s"Í·]ʈ ྶœ‚h8zZqSk»õdNÈ ŽYõÎ)М¶Ò=á6_Ÿ¹»î”µ!¶¢Çž6øúQ_¤Zl§L_qþ²õDT^¸S!zm…­o­qœ5jñ>ØsÊÚu© Üæë3©UgšQqü#5$k;@Ù[Oô Câ $¸p,W‚ÀŽÆ‰•T¼¦æï„ Æî¡)ð³˜ÙÖîw§Ÿé­@š ǽ•4h3ñÄ®eQÆ fIø90Ìžv¤R&VÒòÙ25bÆŽXÑrìጠœ[vù%ìî÷sØgóH7w†4ƒ½Õ&Ûz«S)#Ù’¬=í‹ Ä…•ı}çÍé$µ ]#ÇîÙS×sÛ.O‰}óûù­ƒ-s^R¶Vdsr;³x¬Ÿ–ODbhÚÏØü'VÒ½ñ”f ýÔØ}¡Ç÷ÞSsÛN¿ŒÝýþƒØì¹=š“Á'p÷ðãD´°ŸƒÃÖŠÂIÈ•ÀŠÎ Õ¥V0,rÔæônÏÙv5q›¯Ÿ2DæT²Ìצ ¿BA,é"õBýÔu33„)lE<Ã8 7-ƒdV î$éG=oNÎi+½nóõ9‰<^|mŠÅ\Et=(Àˆàਜö1´úïØk 3³Ž¤@ó[ãp)ãQ{ÞjNYép›¯Ÿñþ0Šë[Û•HŠïÈ«šl=ªž¨ ^Û²V'¡f\_ Ü«‡+š72ž“VyCÜîëó-Ò/‚3^ºR ô€D„#…Ië”à Žs¦ׯÆQ¨Y»(EñuO⺨ã9ݹššSVz#Üæëó-n}‚ìVŒ¨©AIÜV52œ¼éŠDJ¼é"‘–í‹ÌñÂJ:2 Bšz!%l´j«96%ߢÅܶÓ/cw¿ù@jWçùÎ¹šu¨k}4“¨Sé`ziÍŠ4[Qud…ÌŽ±‚õðÂ!cÅ£fjŒç”•Þ·ùúÈÒ‘“Òsn²Rs¢´##"ÜQ£ÊîÚ’àBGC¯´Ÿ¤«VÒò{&53¾±‰1hŽ=œ‹sË.¿„Ýý~äéKtˆæ‘‚¼±äûöeÅŠ¿·\GY•ÅAœ„›D òzGÆzóhNYé q»¯ù@°£>çMÂ2¤NF$Ú'<3&)à±tµõ”ÆQ(-XZOáXê©Q)ð£CåK°Òá6_)@‚ ™Ç¤©¿'/òÑ‘•\«W÷e-z¦Í½YÊø³q²”ΊÉ—æî«GŽš¥tžSVz#Üæë3êjÎj+¯¼È›{"“y‘Q—¦/èôm+ù9„£PÍC`òœÃÒåQ¿5<§¬ôF¸Í×g 6»©XÍ¿v –ôyâTj5Êð„/ËÅ£¼ìWa¿ b-al~ZDã‹Ä»ù›sË.¿ˆ}óûi9:•WvÁûÚ5ì§p°;ø)GPPQ‚š¢§mŒ•´¼œ¥| ‰EWÈ{äOÍsC“~‘ËáÍïǰc„*<‹4í@H#…qxr—÷xd’Äk9íx-'’Ææ§¥A`CØð2h89¶$)ëqÛå©°»ßÏtúH Š° IÚ­!%4+õÊ`ßòI¢8,ÙÎ@c-õ$i·¦Å;$±¤„öØÕ[’œ[vù%ìî÷s ²¿7ø´Bùãnðüøo >ƒÙ9|F€0|ZظõÏ»Á§qbÏŸï >=g2ïgƒÏ7_ŸûÇ Èë,.´‚MNlDãÄVë‰b2[Y"œ DÚM“?ØWª·¢ Q)ð£|WÒ*oˆÛ}};â[»ý¥¤àç÷] þ¶¿-¶â‡d…û/%Ÿ¸pü[hÔû/¥9‹{Ï„7Õ]iÒ×ç°#ŽÈÉôµ)ÀCR+2j^{ÞÂ.-,ô);¢|ÀVdñG¡%í¼ {2¥ 5 E=§¬ôF¸Í×ç°#Z®œÉFcEÃ]ÐV-q“¿LeOÓãÈZpfNBòÐXQ˜N@ Ú5ê‘JsʺîR‡7_ƒQ?pèŠãkS€Ú!vØ[ă )kHÀ·ÿ@3[Ï8)G¡˜ˆÌŠIÄàƒÐ¨øÑ¡ÚwXép›¯ŸH¬‚þ™Öh ¶A$u¤lôÅNš§%çj”yÛq“™XI#Ó­A‹ØÄ6d7zìæ¾9·ìòKØÝïç<©M†|m $b759\L½è¸¬XŽiDæó£”ÔÁÌ)à(Œ;W‘ °˜‡GmYÙ 9e¥7Âm¾>‡Oµ Q–H¢ŠàßÄF>n’+ÚÚL¿Š$³¦µ*é1pÕüíʽ²éSÆ!³Ê£fâ•ç¤UÞ·ûúœ¥Ï»¢ÜLIÁìV´Ô¨_WÏ&Ñ—ŠEÔVdòaÞ¥@ºp*JÅœ¶Ò=á6_ŸS?ºú¨ æNň\ô¨gíæZ[úÆRœôõ«:KZÑϸS]NUŸ>X÷ÄáXæQ[æ°kNY»òýÝ×O¼U8•ÆÆëkS «uäeLüŒb‚…/ÊÌ}zäsœ5­ø‚ 'ad}šè"ešHyÔv×§qNZå q»¯ÏiäüeÄäk×Y†:™’{!¹üM¤¤Rë¶7’Ë +iÜ­<¥!)²±äKöØ7²ç¦Ý~ûæ÷3o ûï ”Ø—Ô2#PÐL­(X¨Î•Ö_¿pre6BÆa‹äQså9e¥7Âm¾>‡±ÓZÍ+zœ1fÅm F`»zèœ)bwgëTÿà(䝯 D7ŒCá¤GͲJÏ)+½nóõ9¤*{t{?¨5ŠlWs[ ¼£XrØï¸n;R,+)K»SsÄBklü¢Î›Òwy"nlØå—°»ßŸBŠõÇbÝCŠe)ÖCŠm)–=¤X~ )–=¤Øöbý1¤XöbÝCŠõ…_ßïƒîÔW$5¸, )Žª ׊sª‹ùpý|½ƒßöÉŒ!a%åå|j*Ö3cqkžcçå|Î-»üv÷û™b˜ÙhÓk´¸P R_±9œàþeq»^yÁ|Õ´NqDG!³Ô­U¼q(!ð¨Y¥à9e¥7Âm¾>ÆS¿Ñ%Þd)0ò"W Û8Fx¯. Ž’óÖª·Fà$TwñÝkŒÁ‰G=\Àì9i•7Äí¾>ÆY£pÎù³¢`¡dmC8DUÚµR`´Á [Q1aÜ¥S–ß4T¬‹Œ'À-°3iÔ•PšÓVîà„Û|}fFx°Ò"”·æŒkœF®Ö@CÆà>/K û!_=íÉcÆJZîP–¼‹×cŽ=|ÆË¹e—_Âî~:ì^ïÙÁ¶•tT{ùr _—%È‚ÞÌv¬f‰•4’KÑš÷ä‰m±Åͱ›#9·ìòKØÝïç™{SíB¤Xl6ÆÆ'Û¬›Nl:!+ÛQçÎÊp·ɨÆ!‚íQ!øìVZZÝŸ¸Í×çÙÒ¦:˦©HÒÄá '¥²-gÈ÷^ )ôI~%á.›–‚åÏ©0š£neÓœSÖ¥æf"iœó,gÑ‘¥q—í~fTàô†q‹ˆ—s¯¸!Ùöî÷'¶âfÅ8 w)ð¶6GZ³HsÊJo„Û|}>]ΧöìÒš Öq߆cl$XÇ}ÛÀlŒª<îNŠ®QãJ¡' Џ7eœµ:Îá9i•7Äí¾~ª3kKÉî_›âŒ×Ng7…ɼ¥‰¾óxtš¸î–uévµ–ï2­PQ5q*ªæ¨#›‰iNYép›¯Ï²¡L]YÍwTs5ôĶļ J”ή¶â˜nÜ¥ôÌz—£1E37„Ã>Ý£Ö,žÔœ²š„¸Í×ç\|ôbÜÎ`Rð,õú¹~7 5þí Ùó3­]U«¦pŸÁ¤àYJ8ž²4ê}Óœ²Òá6_ŸÙª¸¾د|íÚÑ3n¾*»‘à>rg\‰¸5£ý<|kXK¹9’&n¯Ð’ìòÍV)slIs§~%v÷ûyÑBù…<¬¯MJŒX&Èâ6ïõ?ç’Àååê¶žñ¯2ŽB¦{YÑð8„«xjÔêb'Ï)+½nóõ™y±ß _›BÌ‹CÙf`^œnÏhæÅuG ‚Aq‰£°µ0£B Šë>ñ{Ôy‘sÊÚït7_?.Zê9ßîUKŒ?—ù8¹Â4K^¸#;[C+首·íc æ÷ûf—÷ܲË/aw¿ŸW0Ü­Å£wGN*&òé˜z0ÀWÚyAGỢ³¦uàæQ¸áËMw䤂ÏA8>Úî>ŸœSÖ"v,à6_?U“]hyºR¤‚½þ‚”ÉžñÜæ¥¼?Ö`±Ÿ¶.Ž„“°’´_ öŽ=5jöôœ².•ÍÏþîës5Ù…üáZ]TšÆÌÀ#Þ?!EØ28½§%¸0*ÓìdoLÁVRõá&5àôOìA&}¸º ç¦Ý~ûæ÷§f*ü7#¼³È#aòM”9¯¶¥æ= ÀSß¼pjÒ]Iã[hÔÃåšžSVzCÜîëó ½‰@‹°yÛ¯M…m¾ê5íƒ5(ÀI,ŠnrìžL¶ž[vù%ìî÷§´ŽŽï“¹„¥`‡à‚“.S)#ø×®ow¦e„ûJkUº[à$ô›K¸Š7ñ<§GÍKÏI«¼!n÷õù@Vã­¦‚†¯]f­84¶ŽoŒ–e‰Kb°iG¬6±’Î;eCdu{€`ËcSòa¯·]~ »ûý\6F’_0³m T¡˜Ç£ô‹/:÷/¹.1zDSè8Vá,,³ÿY1ÙqÚu¥æ¨#Ùÿ4§¬S\ÇñîëÇÞdèÇ{n½ÉÐOçRo²#OY(ü93æâåEV®|ÄI˜Y¾)OYÂá;åQókë9i•7:m¾þ‚b¤²Ï²ÇÑ9ür€/ÒèãgÜø#i +¦‘ÃÄJêyض…‰‰E1bŽ]]ª›sË.¿„Ýýþ_ì‘cÙL‘fŸÁFùuX•z·äEkÔÛŽmjb%µ›èJšÊÕÂv¯ÖØÅ29·ìòKØÝïO ]ÜŽgëT+Ø·‹´sä Ž•¨M ^¶zO+HðŒ£MS­`×-ârqÔq÷ë✶Òá6_ŸdKç»jSƒ¿|‹Fš /ªv0Oð°ÄãS‘ˆí”#ÆJêwDRäx'IÞ9v½ƒ’š[vù%ìî÷óÚ†¶²û YQo`Ä ruCÖî(8W¡~GÂC¸ò†LÂF,LE¶;î²vǹ¿Ëë¾!£7Âm¾~ 6F%ërr©'x•*š´]H”A4ð’Æ•V<@ã(¬,˜•ÑRãÐÖ£ŽÜtkNYép›¯Ï§³¥¥fb”‚ŒŠÑ=ÐaáÎþY;c‰ÃŸ™‘Çf&F #bT$Ž\‹õfbÔœ²Òâv_?ÅÑ:ÜÙÛVà.8HôÁù¹„]‚ã‹‘\DkäaÆIÈ6ÒV ´qØuxÔl#í9e¥7Äí¾>ŸÎpâ« ±Ö¯]ƒ€kÜÍ+zÃÎ3îæ_OQ\èÈÐMûŠÍ~b%Ý‘qk ®„­f¸ÂØõnw¦¹e—_-©³Ê=öÓQ '‹Zòf358‹î·Ôˆ xX»«£·SÚ/² +)ï7Sƒ:°Ä¢F,Çβœ[vù%ìî÷§FeÁ7_’.5è^êæ˜ߥ¸íŠ”J¾ ‹g)û‰ÞOÆZJЏÔàflaN»Æ¦Ä»3Îm»ü"öÍïO<ù'oݵŒ „cƒx¡iÈïÁfDç*ÜeÙŠó£qC)Ç&Ê“‚ñSáP¦êQ“­ÑsÊJo†IóÓ×Oä‹×Ûr&E&nœ¹œÕ*²·LøhxiÉÊYá(l T(áƒ8UIëL–˙攕Þd¢Èõ‹–³v Õ ¿nEaSôh,VÔl¡é˜axwÜXš.;òi éÊbg+ÐûFÈ ½o40~óÚJ…Ûþ´¦±#ØÕrM#çáÁtzŠâdå°—‡Ïiëk¡b’þq¤0·9ŠÆ5Æ19êõ¢9e¥7Äí¾>G‘l5[ÞtJÑÁ4ñø=D~ oÁçÝU‚å¶^È€ŽÂÝUB æ§W°kѨ%÷4šSVz#Üæëó Ü*ɧ¿vÍdC»3\Ž·zÝáÒO×\æÛÞ‘5i¬¥‘É/Ö »Rb‘›ŸcCòñsË.¿ˆ}óûÓšÖXO½­iMd… TUd…\wpˆ¼ßÊÀ*·ýâ=ž°’ú¾¦éŽ1ÊŒ­è£â±«ÓvrnÙå—°»ßÏG´»¹èGsê4cMãµÛ¸ôÎk«¿I\¥NPÿÚ~òŸ&¬¤ê¿Jj ¼4öÀûÈ¡ç–]~ »ûý‰µêd}±ÛÛZƒ…‹Ñd¥ó f)”?¼š9I;"%‰•Ô3Hd ¨‰Eà4Ç®yAã¹e—_Âî~ZàŽöÃw´\¨°s¸s¯ó‡î˜iE Õ8 ÛGE.pÇÌ%Œ£n çÌîhÛw´_t^[ñ¾Ë*¬`û¦—pE6:Þ‰Áts~»k*b­aÏÁŽW3NBTXšá¦Îyun§@Ìi+½!n÷õymk`ñ.þÚà-ŽÌŠ0b„O6×Y(Œ(ÇJ+xã0ò¼"Eçq(ö¨Ymì9emâãnóõÓÚv`{§ºT+,¦UŸHÄ\Ø™SðÚVjZ™ë½¼Ð‡FõÚv ‰1Ò-…ë\°8jÏ4MÍÙ½œqqíýÝ×O}Í:Æìw[³Ž,É¡Æ,à3îjÙR$ðÞ ìt¶‚4Å8 =É­¥É§qqDZ“ˆXsÊJo„Û|ý”r ðør'3*<Ò¸mŠŽ9'r3®!Á) G³uâ•,œ„# ¨¨ˆŒØa\¼ø—G¥ð]œgZáp»¯Ÿ‚Œà‡¾¢NÍŠ¿u„ü@&»0‡ë)å*3o; Œ•43ùÁšŽs©±ýH=v÷]uÎ-»üv÷ûãmîõûv™ÖÕÓ÷Y(¼Þ¹ y“¶ÒÚtÍ \ÓÅrß®Ñpíܦq¯ß\?=*…¼C«i¥7Âm¾>ýâÉ # b}uq¢Çúdô oòv+³r-lAÆóÎ’5NaDŽº9§¬ô&ƒ“éës È'³‰Ö¥@žEðÕOP-^ÌYU“5pìµ"ïP8 %É.¥À­‹pˆ»<*ŽŠ9m¥7Âm¾~jXÖI3ß²aY'%~a—Ñ‘8ƒ6åxVÐZ\VäIgátäÔ V<7ØBž£Ž»cç¤ÂÞ÷æëó¢…×Òf!·›P¤–ˆÆáaawCË ö>¶b¯k\Së%ÿQ¥@‡Bã°ò¨ífÏ眲Òá6_ŸƒŒx‡¸éùÚ¿Ó×âåð©2çËÍ…œ¬–N²Ž¢ Ë~¦ÐÍf+œ…«Xì4jÍ¥PsÊJoT9½ùú©:Î2ÑàÊZhhPß…ÉqšhbuËqN¢ÄÕ¨“•Vv4cI¬¤•FÖÌÈòHìݓǮ]ȹe—_Âî~ÊÉu#®FÌɇÌ¿[A)®öˆô½þGcz¶È~ÆØ‰µtÞ§*ióý‰{lJßጹm—_Âî~Š+Fßd&mŠ4äbA®Ädד¡à¸âk«gëP;³u¤Ð3-ržÕ‘G­™ˆ¬9e¥7Âm¾>'1¢·ÀžÄH…’Qæê4ErÃnIŒ&ï…uíÉkO7ü– %#§4EŽº%1rNYép›¯ÏÇ.ò(]¨+ɨ‰ƒ“:â÷ÑPñ‚Že‰KÓiTØ/Ò  K‰cóÓ—©JוØÊüMÉ #ˆÈ.O…Ýý~^Î@Y;píöµ)&#Hk¸zëdÓ÷í^\Ö•´Nåò7•ÆáÛ=):¾©Â„Ò£&E¥ç”µºÓõñîë'æà‚4Å9˜ ¥7m7ºæLrüSo·J¼m­±åNBÛ™ƒð:Å¡p ô¨%Ó÷5'­ò†¸Ý×O) Ýfü’¢0žˆÚ¾øw„ôF—àøß¬i½D9£8ä84ªs?ÏõŸy:PÈ>kþûsN[áq›¯Ÿ2’ î¿) H¶CgCGllà²UOL•œ²“DXKՕΩÁ0‰×vŽ}äRé¹i·_ľùýÜá´Óñ?‡;¼HƒF ñ?“D Ñ£á§!é;>{¹´³¯±’²KCjeŸXtbȱ³QCÎ-»üv÷û¹ÃËŒßJP2¨Y`jØU<Còß×.ìD) ^D¹™ö ÝTM˜”š2cìE<ö‘Ô“ž[vù%ìî÷§v/…ÕH#Û½”¡u´^9pÏÈS>$„Ѷ%V²‚fD8 Ë…KV`m7k»GNzõœ´Êâv_Ÿ©ɹDõêAa [÷E¦@C&mtÚXdo¦„GéÙgÚ£¶q&ÖÒt*5hë˜X¤…娙€–sË.¿„Ýý~ä]$ùBçů[q¢çi%ïù jÀJVt xÀäL·lêÆAXÙvÞ ´Ïn¡}–F¥ÀbN[éžp›¯¼‹äAQž¾ŒÖà"¥’%ªNæ-¨ ¥®(*YYÒ΂±’º7Ó©Á?$±¸dɱó&ç–]~ »ûý´ÐE¯þžTš%ÅdÆ–˜q™Úu€kfÔ&z 3­¢Ü%ÂȨ'*‰‹·Eõ¨¾Ë«¤•î ·ùúÜñ]˜pË6ÔñE¶\,èß„¼‹ålñU£*º?¥¡Œµ4ügKMGCwcÙ Ñcg!WÎM»ýênûýéÜÖ‚™ø¸óA¤ÁW;ÎNAÌyá'g«Ö-ùÜÖKÚσõÎÄZ:î|jNÜ?{" ÍcSò¹-æ¶~»ûý)×±óÍSÜiZDÒ"ß°ñR(%Á‹ %piG6fb%M“d¦f3DØNÒÝ]ˆ“sË.¿„Ýý~>Ä &Bn$’š‚–V¯·R#@og±º,ñÈ…'Ÿö‹‰èÂJÊyi.Pž z¡£¥F¦à"“.ÚeŸŒÛ]~GbmZ3ÝR -¨s[Èm‹(â¸$l1FY+ Ÿ…“0óØ-˜4ëÇiÔžIBšSVzCÜîëÇœGî(Ì BÅÅ™È6™d’ŸÿÞê_Èp‘õ*"Ñ?Î<¿H]…pp\•‚óCH•¿VzCÜîë§óÛBC'^ ‡‡ãp˶ÃWgM5ƒ¿=C¯wÿiEQºpòcEam4qóòRvr†æ¤UÞ·ûúñíúÆvO_›)…<`³ó_Èlïžu [1ŽÂÝVJ žî„;D¢QÌÒœ²Òá6_ŸïÐpz-Œ}íš Ž\ž{ N¸ýZ–¾+x=ËlÇÚXK%ÏoÖ ¦QØ ÍT54…ïòãºlµS¾9ý|›†gc ék× 80î¸jAýÀd²}¤çSòýX›·}¹¾XIw15(—1–D<6%~šsÛ.¿„Ýý~^Ó@ˆB"Ý‚ZƒÂÒ¨w®Ù&î³Vw—-…[dSœ°)M·qL mŒÏpŽÝ“£ÙswsŽÀ¯a:’Ûïç5­¾g…[¡c»³Â#b˜Éü^vŽ;09ï¬p [`rÞYáÆeýt¦ëWdô¼“õÎ óõy-CߟÕü½´]P£¬¾#./¨‚®:] Ôdk24J!ŽBËüu)°›4›IZ2¤9e¥7Âm¾>¯eU¹™¿O…ò÷Û}͉mOMTŽ~¤uÞ”œîü})”‡Oœ2ô9ê–¿ßî+R{#Üæë'†« }X™o%ÞAÁ6ü'ù‡‘ÿD Ô%¬ í0ŽÂÊL+)y„‰¬ à¨#«4§¬Md!Àm¾>_­Mùâ›]*‚Ä\,ãî6- ¼»´Ð†•EÑÂQ8ï6†Rr™¸“”Ë•GÅœ¶N=à6_Ÿ×2Ä`ƒhÀ” T \Ž ö˜ "<|Þ¤}‰×¶"gÇ8 =÷õR ¡´qx-zÔšjšSVz#Üæ+ÿQ'^÷ÿê_ýûŸ@uðÿþô×ÿñÛñíÿþéøöojñ¼Âįo;wûíÛ_ý4X|ëOHÜ?,Vñ­¸ÿû‡s•×\q´^»åΜ²×ãÿÓkœÿóÛÿó«ÿÿ_üî§ñOÿ×_þÅ·ïÿôò£½¾5ûãù/þÍkYøö»ÿò-j¨¼5ùÊkNG\ûw_ßþìeúóo¿ûo?ýëßaì_Fãì.týµè(Zym÷‰î¿ÝvëDÏ_‹Žz¬×OŸèÓh?[>ØõËþÀñe*ßþÛO“ü»Ÿ:¾H~wóOOéoú+YÕøÆf‰·=zãrƒv‰·½µA¦[}³(Þö¸@Ã1ˆv‰aÿ¥_¯ÿ¥GP.,tMžñý§“ÜÈÈn1ís“Åv‹iÿ~Û7àŸo_ŒˆpEûb|)ðmøcߤŸë†è—_ž‘ü07pýñ[øËý‡õù/oO?ƒ~à+f¯ÙÿúÏþòÿüÛkùgÿ?ÿáŸþü?~ûÝ¿Ý]ùÓý܃ˆǬšð?xÂøû×ÿõÏãÿüÿõïÿî'ÿù¯çË.ÆûÛ³¡1 è#©#Î )«ñÆý/¿êöø:9ÛÅÝ#®Èðû7þ­½þ1¿ÿOÿãþãïÿðŸóÑu 䀸{ÀQÿ}÷üWÿ@ízv°é6¶ûºå+v?ñ“¦“ù/?[ØráÛsûcÛˆóõÎ:YÀýÞèøgü…Í‘^ çàÆ›òþ#ÿ…ÏkìKõ›>¯óàé>åê÷r>AïnOÁ‰ž×;cûyqÈŸ{^q2Æí©ž—ä?áy±³íoü¼fe PÊ8cìÏkuò€§Œ«È?úýz?±ûpÈŸ}^S ¡Ÿ×üƒ•ð>¯Î®t¿íóêƒÄ8)#}^còR!å+Ö·çõÇÊ~ ògŸ)îçEùOx^uò¶ô7}^Íï§ÑÐt^M—gùD«7ðÞ?ÛùpÈŸ}^ ­ÛîçEùOx^ÇÅVz¿éózÉ×þ¾/È0ÚŸWPælïûVyÚù£¿Ç·¾‡üÙçU™‘ü¼(ÿúç÷a×oý¾¯—ÂJ)O¯N~>GgÑDÊH³øáyý±(ˆ†üÙçŒAûûžòŸð¼ânå·~ßG#̾½ï+ks¶ç³ïOôˆ#ýÏëÅ/ý¼8äÏ=¯z6­¿|^’þÐð§lùÄ7s¡ÛwlÝÿõ¿ÿ«ßñÿ^Ëÿm0ÜÊÿo›óDvøÛœýz½k_Ïé7›s"çð}ι"ÌùÛÍMÑës¾¾ÂA¨ñ›ÍÙÞöÿó¯øo7gоþðê£FGœ?8þïš3:&¿Cëµñ¾~»gäbµ¾C­Žè_sìý_=?úªXɉ¢Cœä^¾þ%|-Ç@»·oÿòÛ?ýÝ?üM¹þ¦Ÿ×Y®×þ_~ûÏ<ÇþíßÿïSJž÷>‡¢4áj üõŸ}ûw¿ÿO÷í÷<@þÿð:>þÓëHüíÿˆ’íöϾý‡üý÷ÿ*ÍëÝW~þ¨üÓÿADT endstream endobj 507 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 512 0 obj << /Length 2023 /Filter /FlateDecode >> stream xÚÅZ[oâH~çW Í ypQU.—í–æNè »!²šVÏhUc<16c›tÒ¿~O] „¡œÑhÕjÀ¦.ç«sù¾c‚õH¼–É‹Ký:¹îà.|ѽî|œuúŸ8é†(ä”wgË®‡QЮÏb!ëÎݯ½«t¹¼ ¸—q^§"»p¨ôêRäUT¦›Z_o+!%Žªï‰|a?ø×ÙM3 ö ^﹊+}'ÍõûävàTñ_úâ[Z¯Ìê+³ÄÕd4ž6ßoDtAqïáÅNÌþÕÁöç„B&/÷¯jäñÍV#‡³Î_¸†¤9n¢Ž»­;ò6£"¡ßõ<‘ [ÆÝeç×V¶ØâÓþw£ÐÃTú?tƒO<€­]ªýÿÓOòØÀ0‡èíî:ÓÞXÔeú¤?oÊb±êꃾ\ÄK±Íê·f¼La4 0ïõWÅ:îÏÓ"šoÓlÑŸÏ+ÇE;òVÒÏÒ¹ü?™g¢BUñÖ²7ƒ»Áå¿ýmUªÉOW“ÁûA— ÀçzâÕ ù‡÷÷9s²4ß>9I¾ígbêA.¥?ÈE„"¬fƒ% œ“¸ÍéeE$²øÃ©!„bÖûJþ0¨.µ•>ìbcüåìËÝðç8W_»¢æû)ºŸ}r‚ ‡Qš]‚\îÚÌ¿½'£ËŸ/Í©ÀÌ€‡§À¹ï7÷Ø\$ã×bÖõÇ '`4Ø¡âˆ@æÙæç››Álh‰Ê{'ªñçÛál0ùÒ ó(⌷óex‡ûcÏjçát:¸NÿÆÎê`¨"“Sã¿ó`îwÃÉÿ!–ã.çÇÈÂSÈü[˜ûƒ«« œ=ìâ„ØÅÍ|Bb®o³Âlx3¼û"çlpJû¾òNKÇÃÁô~2og'âëÌä½'¶>²3ÓGW°ëèÓèr0}¾=ôŠ[§ëXú^䱡ˆÁ:.ÓHôoão†!BÄ#-"äKQ>cŒÇ^ßö{T,ÌÆU±-£fë깪ãµþü;öpôÁrÄá]þrQ×"ZÅ }5•ÙOr•HâêÃ[ç²c™ª5è.ÈaM¥Ø¬Ò¨21ž”WñcIY&Gnë4kF.D ûÕÍÈu\¯ŠEe˜]™rΑEèºò5díð\ÇÛG±H«ÙNƒŸ6¥v3?´*P1\àyµb’l²¢¦û`6+G!bj$ñ듆7ŒØ¨ÙvÛ€¡Lr—öîD•f™x:Å Z×vìæ¯Gߎóò´Ö›€€e.µIoп†?8ETo‹8É ±hBã1&bô[.ÖqñïL5%껢~]2ë,¥Ø¶^ÇÏ$Ę$ÎeÁ©L¥¥Vt„¸CY€!OË4OR½x“†®˜¡ŽÚŨšŸÂÊ Ö Î’^Íñ $Œ¥”:ܘºH![ë¶–bæù°§´·I™Ö&®Z”gçpb.ÀÄ!=§LâG‘mEmðräùÜî\Á9/˜ºPÃBhÊ\«úÔ!§«èXŠª^‹Í2À"Àðkž=NT‚ ÔMöÜ>Q;ÿ¬ŠB7;9XÙ°DéÄÔCÌ;E"„Ä«ú°[–¸·‹Å¼25Fu·žm.@îûå½ûËé%ÒJAS.°ÛÆ3…wõXé]ÉfºjO˜;ïJVEc«}î[ «°€ð^”¥-Û W–º†c}D8=•RµÌDžòY¤D2r‹ŒÂiýœÅm)ˆ}¡þöŸ8ª Ç‚[žã/K• o#*ÖÛ¼Š³lOBÄn#OeÉ òyakK!45Gö,ÖY[£òQ£žB@È‚E™é>þìK”aeæF”"Ëâ¬miÖPU¹Œ«•ØÄôàqYhY‘wââÛjÛ)‡w‡‡òm%#–¨Û•)ÆöíاCTdE©…âq•:³ EÄ!6UÊÝé©"Z¦uë*å9¡ %Çc$xA›WÐzi«¡Ä‡®um%îÞׇ‚Ô^µ@1ð©DvyõÕåAx‡¶JÐ3žšð}˜X*@UT?¤z[Ö¶äéÌ0Õ q*¨Þ©Œe=G¦¸* ¶¼ÉŒ‡µ¼o]°ÈAÅûž¥sùì¼=}xõÍ4f®š2ÍUKÄ€wÏ&ñ"‰'ïÐÍØ„Æhœhø¿U‹  ‰…pf¨¦Ó–ÂÙG®Ãw5ú!‰Š|™&í«lgt„ldk_gÃ٢˦Jj17|P­ÎÊ]W @©©’lÿÅ6 tm6íyËòö íãôèÁc¯u±h×åÊlÃ&Ûž–Û¼eiÂò©‡~ê[Cª6bÌ>t]YÆ-¼éy»‡aÀit˜(Ê+–-®§Ü¢~`¨ÓÅ3(2Èú– õ˜Œ_¥‰Ñdö?Ä€g›Çh!G¾{Šo½FP-Eùhz-{¾•𓼪×Ù;»™˜21³Ô¨öVÏAØÙG 1oDU¹åâø–·¬Æ@ÈQ€Q±†úÒ´¨öÆî¸òùÁºùÃ…æýè¯(‡³"ª%Ö¢QÚ3g8ëüֳȶ endstream endobj 521 0 obj << /Length 2692 /Filter /FlateDecode >> stream xÚµYÛŽÛ8}ÏWX`Ö ´eQwe,Ü÷¤/ɺ½3»Hò@˴Ř]ÜéÌ¿oQ,ʲ[=Ù—v›¢ÈbÕ©S§h{°؃ËW'³Wã‹€ b+œ`0[|ÛŠ"gzÄòbo0[ >ÏøryDì!+X^q*ŽFN «‚æeRðM¥¿×%U“VG#5UÑ|ñý“ÿ5»1oÁÄ>–¬Ô#<ןӻɨd_õ—^¥¸zŠKœMßÞÞ›çš9öp½·ÓçÙ»W6žþÙ§eÇq¶åÛ~ÂgØa8(àñ ¦—Êñ€„–C|OyÐŒ|Ï"ÑΛ²å‘«}—Àqúö_¸a'žcùÎ`äøVFz‘äóÞ›ƒ#ß¶‡ŽœhÈ*V\×¾SÞð ü—ÂZG#Ïóô4ªþ4ÛMgeÅ3Zq™ëïKyä„C|ظTý³àORÁªQV‹Šç2k •UÁçõn‰ºäùJY: ¾’x0"ÄŠý@Ÿ¢¬7Á2‘6æQ¿4‡p©cÐÑ|yZQK-6¾ðÝŽˆYžŠ^õTfYó¤9I©_åhÏ}£p̤ԮéáYÊd×SeôÈ,­Íöõ·¬Jecã¢Ôæì…Ë ,B £èXÛñ…¢$Ž¢&JîðßÓ›×:È?ÃÁ Ù³=­ªÍëñxñÍZHnéC¯ÆÄ¶ˆÙcÛ ˆ;QdCÎÇ!q@§ùqƒ /€GÀÛQnrl\ë?9¯¿ÏŒw7²Â80ëXû&\?²âXE¶v]L§7}®•;tdÆã×&Ur¥…=aÅŠadOS ^!« Sä^欔9ÆöV?_ëggúc*Û»9 /ªñζf—S‡Éó4˜®XÎ “$íJ›æM„T3ÈÿbY ½aYÑ=ðM®TòCªâ«Ê`툄-ê‚í!Ò„ÎàŸl×Ý•€†A¾éWYY¶`rÉÞ7ºïõnQÐìFöf¼øŠ[ì̹œ~ãÛ¾\„yä —l®OàØ€‰Ÿ”kÄ'€]§7ÙÀ¼Æ+`b›q‰Ì+8ú˜!xÇÊš±íŒIéÛ‘cÑ9Ð)MªÃ$<„x‹‰.ÂÝ^„ßjÜ5ÌþÀÀ”Ã}Þv€êµ@EGaA}­ Å©/—„¥ª0:¯T1Yï#é%H7ëlµo85y•È:GhȺJdÆÆ ½C&ÀÞ ’þÇ-+v8tþ¡çl ¨SÙÓÈOâ X7ˆý-[|îCÞŠ/ˆmÛSVb“´ƒc‘8<¡¯Êqý¦"·x ~?6›(ü•À¥²²èXiïÆú ÔBÁʱ•з‡Ê¢ñÖù?ÒþݱOHþNEk•¥QlÛ–ó§ÀW¸_*$t­ÀÒÃëM3ºåžw²wrŠŽJ"oˆ±ú¯ú¿ÎË´ÆÚpš¢Ø3>¿Ô@_^ã²÷Ùc•šœúk&})O”2~,Ír©ÏÀ•@K ®†Sj¹QÃf‡¦Ò\U\BkhõlÌ9X«Y~Ës)ä 4–“]ªrE/ç *¿»PôÓ¬;Qï&|ÉüéûVàDéäÙM>Ù¾ò@9(}åvØ¥–ó `ëeà 0ü^`LòÈvwzÉ%¨u”ë÷¹ázÀCU>˜±2*’2Œî{äÍZ'\SCIÊíP¯±Î¢`¸‚ÒˆðpÖ¦Tÿ¦'uýçÜ ž³±sVCÚUfvµÓçæ€,aq| +Ôpeà<ÕS/ eü– ö¨ޏ>ùÍŠmÛQxPwhÔ.Ò€mU ZÞÕ ˆ˜Œnö»6ð/ÃÕÏ YÊÊC.‹ZF³ŒŠ²WL„Ðâz-¢.U amüáEÏ=”QPt´Ò]DÇvv8$‡8tüjt€Ã ‡w<‘‚b®Þ˜85&vÙéJ-žþC“âL ‰-s÷–‰²b‹Ã8ßð®ÚÓ¯$)4‹Ý;ôÌHnTÛ(^ìò°¢Î霋¦÷Ú‘Q©ÉÈ~­)dƒ§$É‹,¢¨ÞñZ­G‘™N¸¬Xoˆ|ÛrƒÃâK[ Í7’fËÙ›ö¼îϬÅ#Ç­~o#æFã|^Y®ObœÃ5‹x‡¬\å^"½©ê}Z^‘uÅb¼¥r3Γº(” *³]ÕJ«Lüþ·?ž5æZðuÞüˆ. {q=S´Q×éótØË0Þ}ÞC2Cna†î1Ò…®Gl!>¹ž—/Z;¸"™`õÖßþŽxº2M á[F_®Á·22_µÖäµ±Ÿ‚’-÷EÚ”ªB<…¶`O£ªTkWçÄ©ø‚•çº.æ@’[óp–Ò²”†‚¹êkTáÇ} Ð_…IÇO ÀÀ ÚšXU)7$s‚÷D¹I“Y*•¾ X­ãPsÃ7â Ip `õÖï·e”aë-ºôÀÌ·Óƒãen ™ˆ bËã.# Á¸s, ‰9Ç[¨~hɇZ<*çªLY§0|ÜÞŒñ¶®Ÿ—ek­:¤Ùø’7§è±ušý_§2—ÛNœÃ”÷ Æ¨9Ó%#8…`í}BÅÛ͵UV³\2Z·Þ”ùºiªpÚ [÷UÍó²J ÔoøÍ%.pÅòµñãî®,©dwnàú¶Ì¨1E;|ÊѺÇO÷Iú°“!OYãGcñ{Å¿Ç‡×Øcô “GWTpÌÆ÷ ¾ ú®k –c}¿æbÓa‰{xŸ— u°Ÿv¾vYÝsM«6»(´°Yo ÕV—@V ºÕëL2¨gêk¹æÝúû^ð­q;(«•`Üâ¦&]Ë+¶IMjœ´A®V EŠîÒ;þê±óL‚b¢aj¾C ða€Ä÷úc¿¯Áé¹¹%‚I‚'lf:M ¥[PJØ{ÿ¸m*LÉKXkôÎ(Ü­¹;|¯H3kq<m§ ú ’¥'¡nWwrh „>vÝá£Éó~Š÷ÓÐÜ!]Ö|ôéšÄÞÊ=‚ÙeÄ 6Øúà[.ÄaW{b:—5Ç:7CÞêàÕ“r¯Õ窦ÈMWÔô9Jê©Ë>-·I€ë“b¬´I;ÞÌVC_k–'úš†ë<‘êŠG[ÂW¥Jš–¾ïµ¤zÙæš¥u¶³¢Ogº.Ôù°#3ÕèsqéD–çtôó“€P‹ÉþÑ¡7U]AèQÓ4?8>!Ç­ÜtñÇ™ŸwõƒúpSÏ3¶H´Ü+¨°ržZ+¹í^AOX±–ÉŠÿ³/tfêâ“ÈóÝßù£ÂæW¼Ùd HÅ‚=Á(¬-TB)úÇ^öÍ÷Ýeüöèy¶7r Z¤(Àß¾œxïóÙ«ÿ­~^¯ endstream endobj 542 0 obj << /Length1 1687 /Length2 9571 /Length3 0 /Length 10664 /Filter /FlateDecode >> stream xÚ·T›é.Lq+Å]‚www×Òb! Áµhqwwhq‡¢E ŠŠC‘" ÅõÒ™93sÎÿ¯uïÊZÉ÷l{·<û]_iµõ8d¬ –`E¨œƒ‡“[ §¡¡ÂÃ àææãäææÅddÔ‡ÀÀÿ‘c2‚]a¨“è¿,ä\Á@ø£L4Ô€:TÝ<|AQ!Qnn/7·È ¡®¢y ;Ä  Á P…:a˜ŒrPg/Wˆ-üñœÿ<˜A,!ö?Ü2Ž`WèÐÂmÁŽ'‚€=(†{ýWfq[8ÜY”‹ËÃÃèㄺÚH²°< p[€.vu[~— Ð:‚ÿ*“ o ý©ÐƒZÃ=€®`À£À;Á]Üœ¬À®€ÇÓz*ê-g°ÓŸÆê°þj€‡“çïpyÿqúÃAN^'€5Ä ÐRTç„{ÂÙ@'«ß†@ôÑè„8- þHP”Ñ+ü«>Èâ ‡q ¿käúæ±Í NVrPGG°†ù;?yˆ+ôØw/®¿†kïõpòù²†8YYÿ.ÃÊÍ™ËÀ ââV‘ÿËæQ„ùÌ p ñ À.°'È–ë÷ú^Îà?”<¿Å5øù8CÖe€ý ÖàÇLÐ €»ºý|þ­øo„Éð‚€àK° Ä óŸèb°õŸøqþ®OÀ+îGúñ¸þ~2}d˜ÔÉÁëó?FÌ¥­þÒPÝí¯’ÿVÊÊB=>|¼^n7¿0@èñÁï¿ãh!åñ/_'k(àw°ßù>6ê?9»ÿEæ¿6„ðßÁ4¡Ô˜ÿaº ·7èñ‹çÿ™ï¸üÿÑüw”ÿ+Óÿ7#E7‡?ôÌüô@Gˆƒ×_Ôuƒ?®ôqœþ×Ôüçîj€­ nŽÿ«U×AÆÉæ‘Ò<üœÜüÊ!0Eˆ'ØJÙþI›?å¿Îâֆ ¿¯˜G/nîÿÑ=nÈþñ=róOö¸rð?ùƒ—ê¿óPpA­~o¯€ èê ôÂ|þ#øð<®©Øóv¸8 ðGÀcÍ~k¨+æïA ¸d‹þDÂ.ù¿‘€Kão$,à2þ‰<"ÐßHà7zÜSàß’ßµqYý ò¸Àÿ‚|.›àoüowäøÈM.§ÁÇhÐA^—ó?É<áüH8è?Çó>Fsþw8~—ë¿à£öOƒÃ€0ÛNç­yœÌð÷ ì aÎÏBAb!võ!—µ2[ãâ(Gé—/x9Æ‹ÍÐá Sæë‰z9Ù joçûyÍìº5e].sWæ~ùl6Ð4zñŸsÐ(îØÐXÆÏ>œ?™Iò¹ ¤›}ÖŠP`”*K-Zæ:€ M…Ûƒ!ee3 ÇøÌ÷y}ß×$&ÂrE!ÕÐÍ®žÚòlubJÃßtám–Ãú[§¤Ïó¾9ÆoD›D¤ifÒ©‰w]a&zÔà® /áõSõF½VuÚúÉÇS¦”çG«1\*ĹÍ+sßÏÄ÷±T"Þ·x·Ê’zY¯yb»y²oJËœÜ#dk‘lÍóÃûŠ Ïy‰P6Ý5¿h;Òj17œ©eH2éfØ—Qþ°RõÊ^5÷ñæ¿/üÕÕ%Ë´àRåƒí½Ö°ä›Y\p}ÄÃõ±”Q-çíá¸~î[ã¹nª>ä-ñ«òîp8X›Ã‹†Šhr+öº#CbH9Û#èª7úßœQW"Æ[!”kæ¿»>}MüiÚÀ‡é^þ:úzßûn1 ‰éÜèòV›HÌpªÛFp¨p QržýáX²=M+P•ßQ†{ìN—¯y¶•pا‹­¸}_o=â¶5¡‘¼©%ýÌÖƒ`‘9öi¡Îpðnb\t‡ÌÚi[^ËtÅÌvG¹ÄktN‘ŠïÙû§|6俲%ph^u™Ó@͉~ÊR¯^¢5ŸÑÑ!n6çd}XžìB_*´XB’‹¬xOÚ<¢5ßWM+KžÉûýD_ÌI0NÁé8h¬ã±{YlSŽƒÚÍcÙÕ–­úèkÑeSfÀÒëa|zÅÄm—ü³þ‚×¥ &Aº-™^Kh!J€¾ó=ÇÔžõ¬x3kŽ9@áÀïm¸ûkÇI÷×Z7•y Xº¦ÑÛ75!ÅÂÙ"2Æ;”‘%¦» 㛈‹³Ïg7‹¶LÌüé=Ú†Ä å7—EÝØ#@Á_º¿æ9b›\À›~òì‡QS=ïˆ34[þ&û]R—§äˆõœrÃõ+S}…ó^»LÝáH.¶¬ÍMâ=@f:ð¦÷‹¥DçúÓ¼¬eZË¥×VÍ´ÍbVü…Eú%ÏæDÙ7®Ý éAjq¬K³blÞDh/¢kð½ŸÚHŠu¦W=$.ƒ–‚[<1*×mãj¸L¡RàÏ_.$ÞìY·5‹ÿ´S»f°ou8_a4?ud0ÅÍÙàèÎß"±ª/]¥ëOhóø|~M@Nè”û%WqÁÇR¿s¬Ã5ìÛA~•O„úÔ>Ó›žÌ‘9"#¥kׇM«’R¯ 6õó¿Cu=2§×E1é³ÀmG˜\'í;T”½¤Ä^7­8~!ùáðí……ÁítB'.ð5ëk¿üíÉd–Ú0ad=Ýé)^$øâÙ°F^»-³Žõàv\Æì8ƒœöÐ5É™®üÊš 9Gèê÷8c¥_ó"‰Õw[b~ÉHüH43ùÒŸÒ`S+œ~¤= ÄÊxÒlMº»I ÝÂ'FYÿZv M† |sC=tz†4IW¥ÚÝ6ÇÄ<•¼ýx«”(f¥$hý8zíU8OïL€Êa0N , ¬ÌÐá}É'JšÓB1,n¬4éÃsù2T!«Ed6wÕ »Œ€‡Z/¿ÕÜã5A€ëçü¿$ލ>¹f¼w÷Z¬±5cíUV›¯ó59ýjáAÐD®±_ÄÇÎÚÔé.àÇù¶D¤”¤6NØÑˆ‡6ÞÍô‹G¬àõS æ>47¬%¶8ÆU&Øã?Á}b/›øfðÞáPÒ#qåÅžø7eã˜ÚAdOwüN¿ÀME†,º,KBZæ&o{y]K¸XÃή]qkŽ=Ö¦&Ù9Õ4*ÿUÆéjÃÒƒ k–…ÍT¸ÎÛºz æÒïb£¯kužЄÈ9[î|’»ì“Cï2)¾bŽÂ,¼ ½Š¿*•'qEˆ°žöÅ@z|WóeÁP‚AZíyÖ@#ÜáZ_™rØiêÞ+«l08øp •A^ÊŽ„†òÑŒûšÒjL36·)¼Û^/kV3¥'+}1à‘n ãäAšTy²7¡èÌPÚhð•K ÉaÎZÐÓe-Ÿ à ³Þï.HY™«•ñzÑ2Å>©æÖ¸Î êù¹Ù®ú0ͳ¨^¯3ÉÄ«‰Å‰Dª=×p'Hµ™Œú •f˜ÂšÿŠØ{iÌ:½.?mÎZ…uù•5™¢>1ß4 cÇqE5n’ËÛêf-f”nŽ—´ÑdÔ¹ûª}˜Ê,”®:çñMT:çEú¤–ê~\’ãöø?H/$t< µî…ˆnßÐSˆ¦Ì±˜«kK%4 hÊUoëiœ}yº ™‚ƒ78qñf {ë˜uÎŽÞ¨/G~Ox'ŠádÚ÷$—¶E1rud,²õž|wA=IÌ<ÓJ'UU…¡¹=µÏx˜ù+)±£®ËÁE‘ê+ÒDëY\$öÔw‚ ßHÌy®‹¦ý=Xï÷+(õØQ¤x⤂ѱ~ÍÊÌ ¬z90m¨?i›€¿Ï§A:2ˆÇ?ü±ƒÑCöÎQzŠ•ø&^ŸP$~Q¡ ±ÄHˆc!u¶7úY­ò®ó6)P•šÝÄ»øî.×Ô4uˆ‚!ŠOOÄ/ž±`ýºCõ»)/#5_ïÀ©_i?}šáhÅv²V»¡†ÕÞó| =ú³ªþۯ껚î¿ðYܹçß;;¹`k½Í:çüN`ÌßÉHß­­ªçõÎùrœR‚Ž)®'çirè_¶xo™¹‰×Ž ²O”Jøªî$Ë›ÑÓžöN.C4Pd÷»ù8Ç{?{õIéŽ*Iô›½³ýºÇb_“ÕÁ¶œN¸”†™‘\z*=p&„¡?Û'ÕºË|uhW³¡H¨¿Ôñù);ð(˜\w±öfÜXTüÕÄ1dÏ­cÛ@Û^EìUØ ·<Šb—«vùÕÇv÷‚`_¥(kp&ÙµÓd±ùCÐLJo7º`¨…{âz»«‰³Ô‰™êšlë/rãD¨u³mF(çÎa3¿ìQ ƒÇ‡eòip™çM56Éæðžaàž/Å›½®šü¢•Rç°<ñÙK‚ò´ÜÌ[@!ú5™7Ã}Ð(è`…{Ô^/Ò9®Sæ'¢m™+ +´óŠê§¤{û¨Ž¶1%Û¦)¢àP@ÁZ5…EJΆ´Hm:ÔDZ= ¨Ÿfª ÇúñÌ»»æ99kï…X‡Â$ùVhô½¾å·ånÍš–îÛNÞä.Éw?Ô<]øúJÖ>šÃ˨ª²vã?ûNÍ1¾á.“ØVH®iOæ<â5[sm(Íc¦R–¬ï,h-7̈Õ\|š+ñs4ÊÞå8nÒX—÷†YÀ,ýâs£çïú`­Ò„æI°.Ä´Ü Å7Ý!Ï´>¼Ks8ŒZ±5Q²°|r¤.Îla`^963à#¨qÉlœ9;Úø%‡B÷îÁ½;ªõÌî!F*=ïziT†jºe[€³&Úe:D!¦Ì[ÚY/åÐÝX"Äß¼GÐ.¹8¥£-îqÀyb¿r‘s %XЇ¥$-ÝÙßpmù¬¢îN&C³Æó Bâ> "mü(VbÄ‹pïø¸?Ø¢q,:rít÷¤¸O!@û61·;%òÛ‚t(mj³ÿ¦<Æ4½°v@ÁIãÃ/2UžÙ^­„ÜÏ„Æ×ËRW;ûsÞhb1æ¦I®þˆ•“j"¸à·X}¿vå*„”lbÛÒ¯>Rˆ>»’•a8C;Ú'eÈbmL8»¶u}vFŒA®ÛÅ œ2à,·ò¿PºçVH_Ç@(^‘æÙl.‰ñ„ÔF¾uÁNk­y—\…;ëüݦX󉇗éê¬IöŒ×Åñð^*—ók‰Zóõ¹˜ÏÙ™~nXOÞ‡¸2Í£Ü5Ô.ûýµ~«5Ï^[‰¡à²7%¦‰¦®ýÄ¿§í‡*A7Y¼ËdÕôOK‘3î÷^aÔ¦a~I¹Ýyµè¾¶_CŠ|#i‰ x÷éuwXˆoÇ í™|ÃÎæ]ï•É=G÷ÎØ>M8kÞØq&A>£nŒ<Ë\ n?³Â‘•³ÇOÅXVÖŒ¢X~u”A†}¹|POþIF+¹: öÑºŽ‘yéÆy\~Q™Ž— %Ã9KíÈ¿6Ârã”VÂMá—Înr:󾼸Xƒ]mÿHËõê¼ÊÖ/Œª°yõF¦Ñ&L)铦ÞP$hwæ¶}Ο3lyCè‹\¬™œlþzÔN-¡Ä²kü¤Eê a¶ƒK3¯érw†&˜"Gm'™»ê‡TÙ”3OêÅ1–YLú !ž…¶¿Þ„Úòƒ”ÂÕ¶EVSÛ¯ˆ"W^ †WsÑ\ž³Î|]ûߌ *]‚QšX-ò]2XUIƒCÐxVg6åÕS…’sû2Ki'¶_cbº ÑN¹‰¼^a5Ä!óÍ~ÔïwÔv¿ªêÓ¿&_ÎMqVíòÉÉ$Vác%åõUöI¨œíF”©Yüü˜ü‚E×óh%q7©ßC`’sÁ¶œ½]^™l/ož{ÔäßÛF¬Z‚½ÖzôºDÔ™xpØÖKm¹ñ^QLÜø!ïsè­ŸïÉ»–UŒ<‚S}.×î»Ršš#™~Ë½Ž¡¢Æ›M‡JFïSîL ?ì{’¼¶œ&¿šIóòɶ”ý±®ÓÔE ÝÞº=ýrÞi¢´^þµ¯*Ëé² 2*¡{ò”»”¼8Kàhê‘iqÖ]ñaÊûŸ‰•ßVv•>áõ&¡ ´dê3ì¨hœ¯{E!d ósiPùÖ¶tÓçIX’¢ ¢$ÀŸŒ ÛPC wPÅ-¯R²óÚž`n䑾a£“xš…¬´à-Œ+¤çêÌVÏa¶ùIz½©4= ¨øæC* !ýH=Ø÷&ýÔ²æu6\=\x²Ž;mäïÄô^—5˪Ëç-\Å8FªVb‘„g}IûJÔÂÓ¯¥æÛI¸wli5SZ"[a2~c¤&Xë^fÏØ%<Í£{ß ¼ëY-ÔB·“]Ø– • ù¾%ò>!òUì©—|ò|7š£Q©9}¢eð!Õ׃OÅbíYUôÂ:98Usôéø†e¤™¶½¤;ˆ¿Mq¡¢†"ö¤B¹Îãà“äXžX)¿ÎØÆˆY…š”'Ì/uÄOIyÜaZmÁúOí¿¤Y½€]§*ÇÖ[Ù9 m¹xéN‰Q¯{bIœrd»¿A¾Uš ô«5n;ôeÌœÖLp°@ gW™+Õ3S7Œl¢*žÜ»ŽKpÕ=ëfâQÔ÷S0=îà+X-Óc¤dÒhõŠ)2–+Nư¼Úh-aÃñ R+¼èPV%dc)nR9¹†‹£òß_jŒ˜“›ê¿Éðžî^Cu#¥ã…i·ú9·x=9 +Ý—£¤Ž‹rÚ¨Œ—wèí?Œ‡‡˜ý@¡~M&4SR¥Äö²g4O6ºn5²{O¢•iìµ¾Ð;aÿ€ðxúô©µÁn‡”Â4DÍ4õ­¶ª7-¥½ù”…Ìv1–[¬Ä¾ðh vÐT7þ·CËQmã'˜¸a»BåÏTòE +Mœ"YðIGyßbÃ^€7T x¸dé]ƒU%®B@ÒÍSaÐWÔÁ²âËõ6N)îÆeŽ/ zrØAB.`ýÌbâ2qË,ggx}ËÊT-\ßHË"Œrê'?§–'ƒg¢çw¼ãØË­dù•£6ÂjJ„æ‡Ü ´¯g¡§Þ¥FÁ?ÇF!¢C¨Fl'Èij Ý·³úÈß+`.áú•]¶A‚® {'êIL¢FÆ‘ý € ›·ÅMêV’ÑáˆjhYO¥oø¾˜êiŠ ?·AÞ-]E7Zaٜѵdœ¼Y€F·¦ïHF >ÝèògIÇÐJÄ|W1ôÂCàÝ躯}F93˜Œ‹tEõ]—VëZõÐYo.%·Æ”ÞÖyR—±ÿdë ‡n>³d ëø5ÆTùa^7¶;Gí¾*œn½:ÚE³A,Çi::Cͻ̷hüI¤) feÁ+!A„«5Ð7TèJ¬RŸt5ÊŸ®õÞ³ÙˆÝsî±^XEtBºGèäyfUYÜ–p Ö¿ÿJÓ«Õ£Q¶§™¡Oú9Ù›Á]Z£ý5Ìñøk¢æA•¶#ÁKöý^†ð˜ûq¯¬ùðä'ʩζíCm®)©Óâjbß²hÛ\­â]úáHtZyÑr„(<„PFD4B éF–†gÒÝð¹zÚµå+|ÖkÑðYî#^S!OæíüÎXÕÚ¬”œÈîT¹°QKñ³ØSu0î#ÖËfµƒ”9¶iI0'ÇôítÜνY5Ù3äÔ‚Á@‡Ü£ÁI2]6"÷>hª|IÆ‚MØ*ú½×뫽ü Á¢¯S^‹$OjA-uEšù•¯­{”¼@=‘6œþùIØVW[ç¥B…Ct=Õ £Ñ”±·äšOe_~›t ½ú¶AûzÐJü£˜./øÅâTÇå K>2ƒ™1Îz/$ [1(ƒ,ð §e³÷IÎ (ìÍZÉ;¾,^B3 ¢Îvþz®g¢ð­gŸ›v™"rRG~pUͨ\ ï-L!Ù}>KbäÒ4KK£*DäíÝî9"Áú`æ$ç}{b­š,=Ä&NÃɼdúùÔ#Ï=äãB<3ÃmŠ—ìâ«ù¢Äòç7]wLìýuB‹EŒÕº¬’ðWûÓØEÛ«À2ÌX3RÖíŒ9¯5HEe›¯«Õ¸J(Ùsál÷0zDaØÈØmÁ•©1¡&´“‘í,t¨ßÆ:øÜ ôœÓ‘}²ÒŸ!ÎKlÎ.%Y³®³w, w×Ìñ9æÓ~ ¹D³>¨eg¶ÖsúÌ8,Üo^Ìe[-y¶$[PÖÐKÀ°ì_TÌfÙ¹ž£m¹­JQÐä|æ'‘Wø<´– 8H?O›Vu`°U¹0¥•¬<˜=ê·Ø¡$œÐ?¡³ž[ÖñO³[Ìcö•J=”bS3¼ø¹.κ?–D<äÂíN3’Ü™íF Tã¤ßp‘jBi†þÓ«œºvnŽPó´\ç4Ÿ¾¹ÉÏ\%ÓK{+ &YËÍm¹ßqƒ?mŽÒ2WLÆ»?®ÒÊ‚øÐ6ÚœÔNÈ7~Qv.GK|”2êq!™›V«ûjá~/1Ö±=bOx½»ñ¥`ʴǶʻ"«\Ýó¤},® û<ÚXžÀ–Ò耼Õ|qZùRt.…èæ–Ôiúé¶8!µo f8 u«ù¦ÁiëÖñÆuòF4RKä S5û«u!¬MnëáñºfAbz‚~YptOŠ×±e;"]­]€ÜÚ—ûþ Í‚iI!¢ ´ÓÃ]´ÄÀU#IyüÒ*„ޏ©ê&z¡ˆ¦Ó£ºÌFºß«1¨‘‹,;5*8X‘Œâ1·}9ˆËí9å0uÈ[»R§|CÅBt–°Í*{ý+8e¼™XFîdHÚeïu‘´Ü<\€²K\D4Ê-§§bÝônc†dãùA]Ww_µ0Œ„;.Aöóû¯õ›¥C{‡w$Šfh€ô7û͓IJThõ8¢•/Ã+Ù;}F„ŠøûQÉj¾Þ4¡2#af«}1zŽK#å7é˜åÓŸnE%ò5qDò E ²ÙX•¤0Bž 戟ç×ÝpB2©wÑN PÛ®¨ÚÓ•N/D+Em™m*+Èã[}]Aº¥?¢NŽ®ÙÈ#k©¿£Ñ&@6ÁS¦ÕšH4`ÆâÖ(U´©Ä<ö}Á¤ÚØæYéJl85.s±ùª‰Á$t'å»Ò³sgbÞÛ[¼KŒÓõ;ïô#ï÷‹#/Wø¼l^ÃÙuT‹hÊ‹Þ6œ^ÁùÝß•AöϹ©/¤D,Ù¦c»¬cÄ(wl…#¬í)Ø"Š&ã~ìeÇÆ×~}CUÓµçà<±DFÔQs&‰¡*øQ"\™ùó'}~&RH¸Eõчó ¾ÃxçÔWw–<9YÎ}‘CíøÒ^ãÑ'<­.,QÔàŠ’A\Gâ*Ð¥ì÷¥ñ—xL „,{‡DÄ×8-bf[Q ÕÁ†¤Að5ºï܇ÃO¿$IŠõejm«Œm_¢È÷½=7ÖhTP7‹Á1«Ó_?ZÙñ'pËíKÀ£7>¼Õí¬›BÁ¢È4;`F ’.(ú€þ’$‰=£ÄÓMr¾–·•>ZQsCw¤äG·>fDZz;Æ™³Ó]û1Îç˜sfgÄ1áx߈‚Â\/ô¿Oáåhç€V£ž,æÞî³g±s”u·iR|cŸwß,â3Zbû×dÎô[PSa›=#ÊLÚR´ÃY¢¨ÚÞ~½ðV®?æ97ö5¿QNz–ƨ%ó}K]|­ÚºaóÑÉ¡«-æÍµ½p4VÎñ¨FHÎc×lï³×E=kR4:z^ìbXÈÅà¶aÍå,óÜÒ»Zš³W†KÈ*<¤=è·±T“ÈÆUkE ¬a{Ý’ö¸äêXª—ÔÃ#ú9Ü[ß´·<¿ew­?H.P| ÒÚwR6#KsE¨'^lK‘aI˜{Éßbªla×OÿÄ]eî¶µï}ý5R’Õ¶/­è{î!`„ûñÍ#f.EÉ‚Bñçe}àó´¤Ã@µêl±æìç+§$-,~²§ZÒVÕw|µŸ ´sRFxͱa÷Œ½½’ë®,Kç’ž\KYX$O‘I¨a)ïÝvG>xÚ[˜@1ê”VÆÇö÷Ù¨²¡[qˆ•uÇ&ï~r&\ìfg‚2¸‰ötò…p ¡MŸNW0‘ép]u‘òר¡Ïùai¶HŸÂÙ/“HÍäíœ6ân¥´o}Á¤åšÖ/G¦·.À_V4£äó®_¢¸}GîFsøY¨`Žo1ôð—|šp:jîâO¤V–ÆjƒCîÅȲ›éò…ÖÎæ›YXƒ„±óâæù ÑUËÁØÔÆT&ïš5F,>¹BÙ7WeŒ°W‡±šˆ >â&zÞ…ªæˆ'Z{W†<ý„œÌ†òj^ΊÛ$vè ǺµÉk|f/=§.÷/›óðîݪ|ŽÉÊå9ŽÛÖT´¨îz"Maíxßû}Lî=…ví*çTT]×n$€´Z£ÊËzyO|åµó “²bùâ¼ 1ú^´•ºu¯Fp‘Øpäb—x+w¦vX;ÇÃ0*ÇÕ:A›Ì¯ 40ù%À@k¤ëÖæO+ó ™è(Nicau”‚«ð‡¤}Ѽ9»+&r¾Él¨aíŸz+ÆÅv7ˆ‚;{ ¢Ñxù¿÷|@žÚ’•ý$*M—ý B5Ðú¼{;jÉØNRóå ¬`ÍéAZØû5&œÑLÉ49½NaœŽX¤ïþjiFö}Œ,&¨™M™¦æLù«¦œý»Ó&ÊÕýÒÔ¼.ŽVþ®–!âxŒ! wÕŠÝ>Q²Ñõ»i≠[}C=쇯$ú²Žj¾¦ b4m¶CyY_3Èb€ -¹é1¢¼Žbbˆd@iõk¥tÒጇ?Ó. Œ4³öÈŠºO½*ܺȈw] •$¡U(yÆ„ŇÄzþà•ºƒQFíê"IO>aŒ±ÃÓüeýa#¥þ|5´œ•…×â ‘ÁXÍã=ñ· S¸ÿh—Sóó;…Þ†ãÖAÐ"“b?Œõc„´ÏæÝ™`tâý² îÙ­hvüèuJcm“}^ŸPCæé‘®ÇöXºÐ•´‡ˆPÕç²Zq$²Ýg–7)žÙçÕ‡mÀs 3m§ÏóS ,·w7‚¹ù]ˆ†bÄ^1SL,ì.pñóBö O*z]Ðõ½C™·ûÁC»í°›ÞÓAòWuÆß8A-Ô7!,Ø$þQÔ¼Ô'JµỤ̂ܺlæŽ(rúð}ÿèÔRw;M:Ò'f'ûf/Ï™[ŽGÑI-̜쪟½Ý)Oâ÷Sò²¼¥$së õ¿(Ê 8qxÏâ~ÂY;ÓŠóçeÍ-Rÿñ>ùìöž"za5òYœ#î“N4Ǩ!ä)Š“7ƒ±Íæ|á  6W^ãÉó|lÞd*æûj´ÒH´:aæíù¦ÍóôYÛlâk ÍÃrÚ,ì9ô„z)v^Q´åtØÜdׯoyUx„z'¼ßÖøýܸà³»;öqQ°\]°i ÒGÎWyPF'+†*Å-%¢v횟©|°îû™Ä‹ËaÄó\{ªo„;Q$™¢àÍüÑ™¡äm®´¦.VEiН‡›ß_%·¼V?PFìüð±´x®V-ºÿ³hxÅíÝV ‘A@,¸ˆ-ý9"¼WÕ6».w?LWÒ ÇìÐZA’k9ìó¹bDæsù}2$šÏ/já#ûÜ‹ÛÖÖscAzþ•eï¾ËCZôy0ŠæE$š*B²¬-8’]"²oNãÿ)ZJäîåË!zM«¶<ýLÍ ö©Ü×äÁãsv4˜^_iÅã²>uÃu‚€/ì½›/‹î³¢‰ZBÈÈuÏÙiÍÈÔG$Þø‰‘§"i§~b¼F‘BÁEž5H{>i€'"ZÌ .¨TvÀ8lÒ£T7¬¸•ÞöC§ËðÀz3Lšçù>W «“Ê“ioä=‹}¼"Ú/šÉÉ«B¨W>Žj÷X˜Ü.íãäš’öBªŸ S"à_b6}†Üã…­–ÈIKù™É´É5Íׂ,ÚÖÓIE¿šØ½èþâ9šR©û#Ô˜Ôx³Í:u±”Zw¾^·WúJI®DÕ‘`˜â狵 |cÏ t$š%ö¤´Bm³†“ÿDĨ endstream endobj 544 0 obj << /Length1 1400 /Length2 6240 /Length3 0 /Length 7204 /Filter /FlateDecode >> stream xÚtTÔßÖ6)ˆ„H— àÐ1Cwƒt§RÃ0À3ÄÐ ÝÒˆt7HHHI "­„„”¤H¼cÜ{ßÿý¾µ¾oÍZ¿9{ïgï³÷9Ïs€L:úª_iÒr%I?'{^½\y®¬láÐ¥%ïzöâó̱ßZc£à)£òW;FëÄé›SÌ©d¿ôÌÓ$-yÆiò÷ÅKÜú1tbï¾¹-ccׯ$ñg«ïMöb%/UQ o×ê|S[š­AI/f´»ª‡jµ4X:¡fË]uNýòÔ,:]ë9³ºdç9A’WÍÝåáÁEÒ>†îØ`5Ïõƒ(R%‰AzEA¼£Å|âËÜÏç÷ü¬’É«p<žäH.M\Ïê7ÞÁ Œ¬vÞˆÛð(è rØ)¿Ì–ûÖÈ Lâ’m¥ûîíú·†ºãàEµÆ›ajìà[í Õ²/îï©´ƒèkœú*ˆ†«ôRú°øÉóÛ3Œ¾†üñL•3Ã5ëïZ0‹vI…÷Y÷L˜lR—?‰íµKþT;y^“n·óèÚÀ†J¦1€“:ZþÒñCé P:hBaþŽ'J._Ss¶­Pô–ey+Ÿ˜˜nŽ^3ã§CÛ‚:žóâÛ•WKUJ†ýtW}–TOl?1æìp^8ü ¯:Fô2ú‰U»ã3wÙ¯ìøÏMU^}-kŠêôÛ*“~ã>5[Z˜+ÖðùÇxº.[ °§Ðâéñ²¦h¶ª{ëØ®/ (nOi|— ¯Å‹‚;QìwHp¿-ÔìÓ±PNI‘Äܯ‰=ƒGú÷—}í6aÔÑ+gûÐG¶K!¹Ô$•ÖE¬l}H¼R)˜‹Ÿ¥5à§ú 0zL9üMÏŒPÊôiµêb,W¹?Ñ€,««ÇЬl ´©,7Ë mZòSlq÷`ä}†æß&ü®eÛ¡•ÔÎ^R0"†¿}ÉamìËì~ùèX¬fP$‘õ‡.Þ+ ZV¬ëqOú³K>Ëd~,¿ŸôóAe{#Ÿš£#HyÙz­’¢‘£D¡{]7f’‡+÷büËŽqÄW~Ööz=XpÍÑÉu‡6÷lmåD–ä•J+ìèµý¿ùò»}bÐ^û ß ½°Ë˜”z‘tC#ûÅì^¼àfŒ^Iðã¡õÿóyÌ%&¹ó§0Õ4 CL/!{ú.C+­%ÚŸe‡‰’÷]ýf×Þž•Äïñ¥EÑߣÀI #OUÿyµ#Úç3¼=Ë<ÿÖ0ïú6WÖ@ê¼xUGX`þcrŒKÒlÿ!g É%M¾ùi;ȳÝ}"¤}6A¦¸±ç»Æ¡Eæ›Êz‡Œ¼IÝö­¸Ë²)¯¦çyL°ÖèX‰¼Yera•zM¼8ç‡LnÄt=±l\¯7E— f¿06gηNÇdCµ.cT¯ø€<ß^Ð/aü”&nhÍb9}ÕÞ–ýx4ù'¶FÉv£éèЦ. ÞNb¥˜e¾Â‹A7è±*ó<‹‹SÄâöµîHãË^ÊÈ«“™þê|#N2Úl žG*öæ‰çWQš½6㬵^¶Èе¦G –Þ™¯´ó›>œ=D%¯á3¢¾V/È%"Ú#Èô—©üØÆyÕõLŸ~ﺤ`ñˆø–ÚÚó%¥8¡7öq:%ªOöÊ{§ëãfî5~XÞ]cFº~­ž;‹-Δ7¿ÕPS~·íw.ÊúojlK±~äO±—Ô” Y †Kð·<8¤§¢î!%ÀV p¥¤°ø`…ñרÑÛ’g1g)ÝŬ¾è&.þ"üý­ðàGÇ’JuqÆ+ó;X%mà1ïÝÄ9"óÛd À!šT¦*¿P¹ò2ã{Û>6õ –WDGj¸øá»)A9ÐgÒhÕG™†dØÏdv.ÚPybϳ¿¡·žr‹ ª¿h´ˆ#‹;k…hîrD±\/'TÝëY›:Úæªpvß/ßÃ=74¤Âî§çmMŠñ_³hCP†c !žô¹‡©@–Lß&xƒ¶$qÆÕ 'ÃûwYÕ1d#–ÍÃWµeóñkíT! =ÍR{}ÎŒZsúUxâ-Ƹ’½Sâ1$âÈ‹$ð-јiÍŒ—?álòß:„Q¯ób?X-7_:rÊXè[Kµ`%Qæ¯}%¥+z}íÈÍ!šñÃÀð$áf£—¥B3.V‚øä†é“h  ƒMþ”äônÄüz6¸!Txÿ¸úLì^í™ìÝž®wÈýåšgZ}Û´6kÉ…(è,ÈKžŽª¶†`=|ù|s6DßÛ¸j•V3“1Nó~"^ÄpÒ±à+Œ#Ô•²ñ´ ´ü}³ä1–#QîŒÉàøÞëä¯5©æð±œYRç :›¬w*:øS¯œ¡¡ÅF?®t¿†HÀ1ËáöÜ}nwQÙí K’¢[£i˜5§îÒ/Ç’»OKŸ@éc×v@vgY^[gÆ^¸Ô¹ÑØ „9Ü×J¿ÏL.Ù%‘f3¿Ú—Lú‚g¤u8­Ìô4¼cž@æöHþc~Æ·\<:w~ßÚÕXSÞ¸ÿ{ÕÖèSüÂNÁ·CG‚“À®ÄZކ÷‡\xv<8#sÔ#suœÑÎ+ìI†Ä‰·:ÇMûžZLIp½)R»¯l“L=ìlˆ©`x·).5øÕNI3v £ÎãF7ÉÅ(˜Ò…U䱘ë©.RõÛÕe“QN‚&¿9¤/áÐÍŽÁXu¹tå_g;Ç·ªœàV~ŽŸB¢gäyùÌâäç ú6æé;ÿ¾2ž—Yï‡{WûØ$q9x2lx›±v]¾³”Nõ¥É‘gÛÜ/×éÆXZŠŸ·Ê½RP®ÊL3u~nqgWö)/Yñ¬ût[â¾4-“9ýìŒéËÉ w^ÕzP·m}Ô¥ŒŸôQHh¯6vŸ£üBÔ[»Ê]¬j@Gª<¤¶× 9&ùÇÊS{`ôrÜHU»o‘r/ÍÓ‰å”Mø0ëNlƒèYr,‘ÊR§\ȬHVy-|&ŠTfŠ?ï=ònm=ŠÏ‡ÆÖü€`[ú ÓÕbÝ*é(ø¢¾ƒtã [CN¶Õ±À5N÷ÖÑûƸbzñIϖƒœ×™G5D”¥5\ëš·;A\Røà.æçÔPògúÚÙïµ)ò·eŸUuÅ6½¦[ó!eðï)÷W¼ÃKë 刱PV Pã={/Ë0,èK²4îLù¢(ðË‘†;tPLÑÕ¤ ™ÅÉ« ‰9¯¡§á¢óI×­I¡^™98ëhî*ÿ„‘µ(”<ªúêEŠY³Ž±Y[›ñÛí»€y…\ßœ˜ä>{ë'Š7¸ôîŽù…_‘‡xbLag³2äÞaé«JM)Mw«waö®&½8mQ“f]fŽ–9¼M­}>sBs8 PH1xÝYÑ0­Ý~jK=¬Éáøö`ŸCçÈÃçDêÚÁmɸ†vü¤ L^1 ´´³d_‡yçx”ÙÕ¾øŒáUäBSàdÇauduìg4¥ï&ì×zšF!ÅX‡gNÈ«…øgMDÝ.G·Ì…7ÁœJTXiØ‘&Ža„ÏlnYñ¸i|fµ…c6Ëöözkd¯ƒiU¹ñãD¦m¨|Ë´í\xßb ;FCM&³nÜ2ÐzB–ºß•+ÉB§YXîýšcy_À2N˜ŽøCv\‡ÐyNµ³•Þü”enŠx¨¿í!Æ }v1þŽŸæ’(£"g½÷٧⺚Toúót åx¾Žo¿î;Çõ%×[SšF(Q@§Å&åö¢z3'õ„Ü8¬ª”‹ùÚN~ù=o­T9#ET¤n“\m©Áœèä êù>Q¹<µÒtkøº%´W/þn¿§Ö½·NÊŸ³ ÙZÖ|ü7†•0 NÉæè.êL•‘/­zÌ]Ü bˆ¢Sí'Cë¾ ŠD˜‘…*‡2v—Sa½1ó«oÛQäqÑ’ŒŸh ÿù^þfP—Õ°pmpòaëG ŸÂÔ‚«¾ ­¯²F†0ådó©Æþ¹]µÖ|Îë"ªŸ\j œâuêS–íΊó“iË.q²(â‡u¸«ú¤÷DÛ‡±”5ÊÙsÔmKÒV›MSÅÒl˜°&ͧé{¶^éÔÓu·cVÙuxW´‚bq:>ÆQ¨à+L}ì9؇7%K¤•f´ÖN\N‘núp+-ž/4úÙÿ~P-0šxôGÿ1ÞÅš6Ï"œÕéê>•ð`¶~ì:ü6uåwTÀÆa½äòÅãñµ> ¹óe\±ìI¸Þ® õïkÁ[}W‹3¨ªè—¨¬äÄâvæ»|¨0>Íàäªé{#^¯ç¿ŸÀ†D¸lpèŸä·fˆ’™ƒZŽ9ä_˜/t}´—âÉa¿´°(Ê(nå7*S|#ßeøo5¯ óÖúâÉéÔõí91•>WCþ£sž- p:´8¨Ýæ@ñÕB…õ7zgBžêJp£ÏL-›ç­u®©$I÷Ið7P‰—Ú@cßäãô=‡'u=û†v¦®íaë{› ñúÝôiKƣ䒶7áÚíïö¤‹LÔã5öù™û¥ÅjDç0ˆ:¨’øx+`•èH $D¤\ÛIO-ïà”Eê¯O·O³Ë,u‰)*ÊÅ+@uõºÍb–”wGðý*«lšߤ'Ñ«·hc¦Î*z°ý ‘¶=ùYš _ÿÈ+È2±?0öŠUŠÖ9ñö¸AýnÜ̓§R£=¥Ïï)äPZä¯:ýÜXV^µ«?lñ3>wj‚M{òy-¹ôGø}?Û±ð:+CP ‰Q¹»¾W€} ‡zœL§Ê'î| °*ܺå€i$ð%ï•©ó!‹KkŒ†Õb³6f‰\¹ô Lœ€aTÎñFkXjïU™Ö(åu›#TÛõì)sLˆ(] +‡êüv’lRå˧EÎìR¥]›]Ý÷^éXò=›+Ù‘™göHnÝ ÕQ(!û´P3öqv#7&-šÙZ˜]+þ&Àƈ~J·B ä Upó®oÆ–Ž%!mOá¼…Ý￵ÄÜ¡‡œóÅÖ¸7J_Þ,Üæô`¦Ö|g.œÁ½vYLM.Üÿ¹HWÚÁöD´ä;­A÷7ͽþ’yâF²)?|wbÆ~¬‡ ödªWüÀ­}P/Í3+dƒŸVÇ) ìÀÃŽìÕWÊ„dy¶Uª k¦0É´°H&ÙAN1ÀEáw: Ð…$^_˜¯Û›ÔMKê0vÖA{Ì ¯Q0®äŠÜâ·ª¡Ñ×–F"É•”Ã0Îm–“Ã:.UÖ<*É–Oƒ½F;¯ÉEC¢¸Y²ÌŽV¿› D®/J±ðoV‡ôrðÏ=ìÃÝj!2C€C ~ŒJZ.øÒFA›ÝW"SŸ_s0çL×IHP¬Ÿ’%û \—ë„ñ:5nüû}»T} =wa¡O&JÃu´qL5ÒH-\êaÕ…•·6å½'e}¸Ç0X89ÛuLùo—¯ædVú¬ÚÍHWœœ=8{\•vÏ$ÙO¼…¢8Q¯ö¼Ôø]çÏ´M:|Îμޢˆdú)ìøaÛõ—ëP·Â§%îäi2[Jbñªh*gÌ&GŽGõõE¥.‚´25¸øœZï}ÑÙ­rí4!Ÿ!¨ßÏò:™µ0Þñê»<(×U4§Îê}"+ú„=…ùúÑä•a…P÷sufÌI!Eƒëcxz†­S„“2·ÃdM  µ®­·Â—öTñ;ÇÙÀNA©C¯]GZæ®'vyw“ è¶;[º G’6]}ã»®ðhHÚZìi÷Çgdˆ¤úã_`P¶ÄMó¿Î­íøk_‘a…XOV€÷æ°ÍÅ ~FâÞ‰à?¥œªH4#«*(j>'¼Ÿ‹ƒð•ÑHÃÓ•Ž |õF_skµ òíì\´Ÿ¾ŸÙ1ÓNAc*àÃìOæÒñä— ÷ÇÈY²·óñÄ(“åƒ4:L‚ßn LVÍ×žî ”hÚ­ vÜK7½"Ï}O_¯U³ô1æ°Ê«øuäžG Ñ~mݰ1Mî‰T?Æ¥´ñùØ|¹û`' ©)¸÷®øNø>ç%y“ˆh§+à[ÆÎÞ­ë2Esntfû—åt %ñ=Mg}ú CÖjz²õ ’,ì]á&ûµ³ÛÐÄèóZYçþØãÚ^âhp ¯IÝz”ìÁËͯ¥Žº*“ZdFí»º]O!ÃÖ¢˜ëš-Uj. .w_ïpqÑQÁ·ô׺ô.dŦ3Í>Ù‘‹,¤«E]ìKOS=—¦ÃŠxDôs¢˜˜±?[×4/ë;‹“å:Åÿ~ö¼îiZ×Tº˜ŸÑÇn~+žÓá—”ñàgSˆ÷iNš‹SÓÒø¶;Í–9¶Ì c“ßZoMTQÓë¥.¯ÇibŠzân÷„-§Í«Ý¸ê—4M)F»ÖÇÅi½ñnõˆÓªK'¢%tu4|ž|VFõ©äô³á ²é‡nE]98± Ómí“ï,¾Ä}˨#®ÓÑ„c`“qR¥y ë…9~R5g/3UÏóq>j†‰Š)ÕtC½ ƒæÉV³›wVÝß“X&rŸÓ?étÛfÎÚ›”síCòkÜY‚òÊ)-6æo›VûÞû¨a ¡£þN’wwémõÉÅâWt0ƒ/Ƭ8p-š Ió÷¶E¬Ü{,½)?5­åä˜^å]‰€X¤ÚJ—úE(érÓO±ðº—Ûgÿ$M½äüám‚÷d7ë¤5}ý_¾”WvnBæÆÎP®D¢. ¢5­æ$Y®ÀñŒo3 Ïˆ&̤Gò©Ë·¨_ÌïÂgÂãî¤Ðßa>~ìËõ DÜ÷ô[çbŒ5œxPb¾B_B<,:L"D%µP£ÖVÁÚ¹ì+gîÐæâ 0š7ãB><ýþÁzv…QÁ7¹º¥#K\”ön£´ MXºžˆawa‹5CÞ²0Ô_¹é¨>ÜÍ¥N˜IDÄTŒ‹l4X„/þØ6[+¸PD4íŸ×åU‚.Üœ^à$:7Zqk¹¹´`÷‹ lw®‡?K›Ëâ1ÍÚ -^’yèÉçÊÙýæ8Vlôsëó~ïÎh¶¼¥)æÈ½XÞ6|~í©oKÂÃs¶)©ÁœeÕ7¨ŧ'Ñ›äŒÑ=jRƒ¡Þsûr¯&ô6’Z‡„¼íXCƒO#h– ·‡°³#”³º§SVº.¢ÓBäÞb¤ˆà˜†øŽ°N¨¯÷ÿדü‚ endstream endobj 546 0 obj << /Length1 1445 /Length2 6402 /Length3 0 /Length 7377 /Filter /FlateDecode >> stream xÚtT”íÖ6ÝH§CƒäÐÝÝH‡ÀŒ303t /) (’ C ‚ %]ÒÝ  ‚”¤Ä7Æ9ïyÏÿ¯õ}kÖzæÞ׎{ǵonv3!UW¸3X C …Eåê†w€¢QQqaQQ1nns þ“p[‚H&÷ê0…Á4@(Œ!Ðó€â ”PZNT &**û/C8B ò…¸ …zpI­÷ @@Ü=P˜kþuð¹ð€²²Ò‚¿Üªž`Ä‚P`OÌ. (À î£þ‚OÁ…ò’ñóóy"…áw%~A€å¸F‚¾`WÀÏ‚F OðïÊ„I¸æäoÜ î†ò!À …¸€aHŒ‡ÌŒ`.˜éŒ½À°ßÆ¿ z ÿî÷Ï@Ø/g‹ ÜÓ  €ÀÜn(`¬e ŒòG @0ן† (Žñù‚ P3ÆàWæ €–ª)„)ðOyHÄ …FB ?KùÓeM˜«:ÜÓ C!I~æ§A€]0mù=Ùû0¸,è๺ý,ÂÕÇKÄñöëjü1Á@$cî`@RTTTZVö€ý]+!ÌhþK‡Y-—û˜§‰¡ä/³9ÿ¼Ræwý¹bb’R Á #I‚€˜]tûÿ"1@DGa\˜òBnpÉωJ"`oLß1ð/DB ‚y®þ–E"^˜7»¡þFÐßóý7,Ž¡>È_À?uñA`¬Q¿¨„©â_ò¯‡ ö»ÌNÁ]ä£îUG5¾V½é'ôiHqœû“Õ3~¡ YD³Ïù Â'ü•Y–ǪOúÚ)Ö4ùŽTæØ.ƒ¾¾«!ŒiH3mü|á˜rgôS#ÉÌ}÷páWÕ7],Ä·„ÌU6‚/½ƒ-#îã¾Ã~¯Çëí#sÃ$ŸæÔ¯SÛÿMz~àáÔ'ÓJ)}Ò ô˜P¢E‚}Ä« î<çìIF” Ñmê=Љ£ãqêÃ×lz)$!Û‰âEA¶+bIg“‹eæbÈV&.&[FÜ#êQž µ­t=†é â¢…îÿw El/ÈŸ.Q o‰eVBîÄÃê:ª|f[€ë¹OQ¼7»iÖÓªJêhÆt•Žñ4¨*ñû`–­7µÅ¦cË6·{OoÍÉŽ½¹LÛx| ¯o úQã½Ø×ß-tòðiÃi_]ÿZ[ˆÕ+å.å[î~ÀÛšvq ór™,OñѨAœV+°.-¥àœï™ |P´BЃ}µsfàj¡¨¨­ ~öÀ­o’¹ÁûI!åµ{F-+TÓP?껑בRF×ÎïŸîí2yˆk:e=äËËÔlû+o)™×T¾\;‰Ù[)§Ö( `3H]•œÙïá*’ÐÕîø4]Ñgÿ àÞ™lð7Ër‹ÆG’¦ìëÛñBƒ[µ½j‘ѲǮ[«Ç¥¥jtŸá–g{å~±j}IÍ¥£òþj¹þ¢iœ¡­óòdm²ƒØ™sÇ\͗ݳ.™ÂÊ\ñ|m°õå…Ÿ ZWƒ›·hÖ°Kÿ³BLðìÝ¢¦×á*ôÕ…‹U7Ÿòa‘eQ.&qgmÌãr:6÷ÕYî_1«Ý43?Íç \Áê˜\cÿ0ºÆ-·%ÑY—LÈÀ…¦ð°O¯…??\VäKˆ»r‹«_²ðS­™»U•9Ñ ^ÞîÀSã$l¥UÚÖ–ðf- Ð^O¥åÜ[ ÌV9gK®W¬@ÚW/Ñ)D—*Ú·Ú`s-k(ÇZ|!Ù¸zòbÌ_;ÏÖSzóyÓ:¤’{êqûô(‰C•]ÎsªïkEaüì nÑÖˆ\¶¨â‰°Ö&yi{«“Ó÷ïИˆkæ±G ÉUQñR­\¨ÞУ¨ÆŸí¬V×ÂÒC¡±x:‚¤ IU‘pFXŽtŒ´~œÒ™¼™v/RÒCkÚÝCKòq²ß¾Y,WpåuÜTahsè))é¨Sè[…lV hI0QƵBãgÏÝšº³™¬¥>½¥Ü¨åòÏáDµµ¯_g*÷19)J§¥'uÈÅ·{Òr(ão¢ œd9TD Ÿê`ÍQËKe¼«Aèû?‹ÿxn¡Ž…yN_£ƒ*¯9`dº uaå¶_öÞ ·ohØ0–ðe·Ët<ÑmȽû¦ò‚®{Ã%žYt™¥ôÀPïÌð…hÙ@²oÔ2ãã)ûÓâ…wßsq&ÅÜÇÙæc6ú úŒ_úøÛ´ûõƒ@±ê¶jÚ9Í$¬,ó|7âôyvˆ‹Ž[>­Ò5áâ‚þø|^V/”ưb×Êøu<ØÚÃLĤ?0Í#Æíþع20æDo€)CÐjX&Öɸ䓚‘3!uûyãí—ä]í䥣ײ—•; ôÓ»ð3~>ùh¿çþUΣ\²–4ÜùýŒÀü«_sÚFW®«‘½z}fáМññÔ°J‘•˜?Û–Œ7»ëXÅÚMø×Ðu ¥HB¯š¢JÕ÷óvÑÔ6›:¿KÅîÂÑË€ ÇKe]>[yjžß´äj7ˆfÒ]‰Jz¤N´Î-X´È‹£ `’f~<%B_Ç_WæhžË~aTìåM]ç¸lÒ½ð0:¯™ Z7¦ÜxÄ5ðu™ô¤Ã‡Ô¾låéå0ÜþâÙ©Rg5ù°œ±°ÜsÁ™[töþís§ç_ ;óÒ–ÓDÜŽ:²¡ÍÜ&šbyr¬–ªüfj" húo’4hõÕ‚å“l¨|EЇVR>Άk|˜A*Q<Ö3¬(™ ;3ðTª¶Ns¾uG«=gÕ«0ý`¸!©#ÍÔøS+ªå«[)Íäë†[×R᥹UÍ' T‘Š1ðkžH6–Ö>Ûã·â¬œk.††Ó#Ú]¶—‹v¸že× Ã ZaÄÔPôY)G»žRoÆR-ÙJíVȦ%ÿ#¼³Þy“`ÞnÄÒ«Ý;ÔôõôEÍZ‰=¸èf“lá­f¼ÑpÿS¼—ŒŽvCÖ–±T =‡ßMs+ÉÍM®|#sÏHÀý‚©^WsÌ‘ˆ0´óú4úýGQ NÐ f¢°éÉÔ#G7)qfeïh “Å ã냴ݶ¥@ÖÛèõžDêÊdCg¯ð‡òA‹èâˆrSqú-KKù™¼¦ÁØñäÔÆÂÆ9+Á&™Ò)ÖÈ펇Ñî/íWT8´VÎõµNÍóœî}çcU%ƒÖÑŒ~:-Èøú|[›å8?T’ß ì«å&7V.çúãöŠ>C> šêe¢¶jù›Øzº p¿òLI¬õ· 8ª£Íæ¸ËÊøô•—ïAy6ËԌ㙮ba„šì_\t°zõruày' íªÂyR,ƒ5rß(f"^ÿ5vî¸|Aë—‰4h„Ö9éL‚ÑaÜKlù•E®Weí?v°SË)/–o7Å)t¿Ì{²ÖEEƒÆE¶¾”U¨ÕN&W×tжüœï±ÒÜ×ÉMgš6¤U7iî\¥Š ãB?jæo:1‘–ݶMDÊÆ`ó:­•³’o#æ¬ÎäŒm÷"Çz×±©¸E’e9°X-FóˆIøQ—@I7¸&Ĭviªý£»·e¯ >q¿|AÓ?hÕq[‹úî¢ÈK§t‚iqlßc{Ó'í7µn£ æôû‰[F€cWÇC§È‡fÜæoŒô¥“+‰îdLmÛ!Š2/zmŽºhvl¼Á!MU3·ÈŠâOflbLο“ ia[hæo^%ìëG¶NRè$ðV×*aÛšª Qèή ¸ Ö¯Ó³ZíŠù¥;yZ.r=†`ÙdULŸmx'æAíoÍ;öy­aË"0GØ\=ƒ—¥³¥gû²‹žmÕÅi=~@¶¸|þ­DsdûÀíÔÄ_"\':—.ø ¡ÕEü¼6ë-¥ ‡¸ÚwÉÙËÓ:öã¥v§Àô¡ŒI£SY´—’˜´^£Úåa-R÷[Ü[w¾ï%þt¦‚7PJv«2ƒiÚÈ®ú9¶;\²w¥hybÏ=*ø!µLq¾}Ÿïµ[ÇtÞQs`¹£‚¾ÿêÿÆ1wÚ&[®ZÒðU%ÞòÆ·yÚÝ8Bš¤ÆrŠÚ›aÅ?DîF¯tÍæ±‡,9=þöUƒÇêVx/z}ÊÔúÎò«MŠ”nayqXï¤ð¬Í­}•])"Òñû6l!¢ˆ¼Åøb ¥j„/d@KªŒï¸Dïà=ïN›ZšCß,ŸèÄúzd§X_-fiO Üù¶m­2¥žDéñô½©WÊCæÒü°qþÖ‡o³Ïj‹Då ͘xÉÞÉ­£ðôªî©|¡õ/}©É'ªÝ/?Ô@7oê“TÒóø¾9﻽Jù…GÞ7a3ë>(¨:0ͺ 9Èü”Ä;eºÓ{¬(By=~$¨n&Ðz«ÀØÊ îÃ1$/ÕK7œëzåÛ¯å"bm÷™~ñô2’ԗƶºÇówÌÏ,âtÒËWlßWJø$Z„¼ïêÜìø^L@keÿnódû Öû¶.фͧâñLúÜ[.Eš•õÛ¬?2ÕftïÞ 7#ž8Ǩ4ð@Û}zj†¸ I Ml´K&GäYeñoÝÅ+e°Á¢V‘ O]\åc&9ÍJQ"ÍëÓй“O¹†¤CÐ=ð_H'ÙnWš™ª¬Ì¾ÿ´bÚ)Ï“^É©°9÷üõø¿ÛèºV`¦S]Orþš® –Š™OºÂ5~Sê7<°/ K†&"[ëÁ-û5Ë*´x×!¨\•=  iMn\€6Ç…½À?ýó°áÕÔ_EÜBÄ—Ó3¿~xٳơ]’NU¾Éëfˆ%œ`³¶²¸ ¹8®­«·é¬Mt Ÿ˜æ¾7ØÃ®Ó²o¬sMÔ7˜Äæxö6^~+¦zè ,eU¯Þ7ïFuÄÝN®YB4Å<¯º‡r„d†B”ã%Kã·×mû*iåŒÙÄÏAe5áB´ªa.q?CáVØ5†|ɬºWœóNÓ#0› {óNâÁP_– §^]hîeØJû§š‹¼£q“öþí Çùš•Ïv‡¼@[¤3_ïã:e×}Ë\ó:='+—ñ XàB¤/>ñ!q qñîl e¿\¼;™}~ó´uû†…`9v *—"§sÛbÝ9ÏWá6ŽøÌ¢eÙrå=B@¯Tæ³µÒ)¤-ûq¿302':SÇÖž;ÙbÇw¦‹•|$pÍqåƒZbw¸‘ùjý[qEÆ ë¯+ÊMž´z©§ôBãâQ',µi•…GnÑ—÷ëïÍ<ºôå ïñ¦æ4[k×h˜…\°1J§Ñç“ÙM©¿)ïòü\ëð¶RÛGÒQ;“ð´vøòJ$a‚ôj%q`udEâ¯*`9,Öñ‡†RˆÀ†Ú]Öƒ‹å¼¸ û®Ê®á™ÓŒÃØ;mýcyÉR‚B¿ž¯xëºï]Õbq7ÕË6TŸ²ðöÅõŽƒæÑÝí1jåg£c¹äÄ9WVÂ;E¸‹€4UÙW!ô#AZþÕº°¯ÁcuXÖnâ•Ï5‘Ù&£¬~*SU§¹~ ÈškÝϽ/í­q¤Ý*ŽüMïžÈ‚<]¾ôë¦{”’¯Ðº­.µ!Á¬­\)«4Ãíümš/Ëlå†v7;‡ »²€ïj¡a³àÖ›=ØN>§*8ÌÁxeÛltS ±[5Ï»æ¤n~É ýáÚË£~ÙKgW9Gé4Ö2 ™SÐîÇ܆¿ b½I–¸90E1P‡Üë½Ù§ò£ îSHW˜?ÅÆ®Õ[|ÂŒO°dÒ3QØíA7*¡Ê¶%‡ñOú©ã•ê7evؼ„ Fyz ~àîê;)œjйÛÒó¿-¾ïC¢•|?4v;Ø_üu;•nêÒ´ÿc±‘³[´À|SËRTœƒ8qö•qSàè¡û÷AÐzÒ#Ÿ­ÜÑ …ëó€ÅztÙÎùí&œ^÷ãk ek±»í$ŠužægNRצ]—#Ïx³MÅ{åý9ë“ØÄÙÌäÐ÷œ©væ¹ëQz)„"JýyÆ×ß²X–KíLþw_¿#hRâ_Ý}ÑV{7š}†+ o¡´ÛÌÑ’§4â)楔ÄÙW™¶éèL ~akU6—ÛQ™ÑÚeØ4º&%4³n[­R(ãoôX±š"ˆh–p{§¥Q瑸6°}âxO¼iÌžäí jçêÊæ£¤S2ƒV¨c¦[b$®ENp<¯ujmOL”¶ …Å¥”.©=[FÔæÂ±Ò…\Ÿ¥ãœ>¥É—²·uECèÇkí9‚fèˆvÅ-æ»÷û|Öµ²Üpf £L–‹ûù5ÅÊP<¸°(Ê:÷ã¯Øs§‰û@ç=!·âz³è]å]¬¡wiQVN.ôN%•DW[:y£<Øt$g}þ `{ˆ Ž~RÐi0YcFW$ôlzÕ®*¾›<µgF*Ö©È”2e÷Ƶn&íB/Ë~á =kù­z—í9Æð‹3Š`‚¨–{ÀÑîLÕMÄU]EëhÅÓ€žo» >[06ñAMôðË¥G²Hž]dšFÕØ-,)X´YËÝÂ{07¯ì"p̽RE¼cÔ¸ f&)ûð4²í v":‡£cª3ëû–ùç¦Åuç«."‚y¾êÛ\€?‚²Ó-~º¸„´µhZ#vDy‡M`‘BÑCÄSyUW]õ›N"±!$B÷ØRö —qYúÌ·#ô…˜¦­ŠÌ>™ÄV¨¢µy#;é;ÎÞŒŒ hîŠÍŒè˜H·1T²îج[õ Uk ”;4ƨ5Iù­xvåŸPäiò·ÐŸmîkKF5lWŒ%,¹2 ž“Wu÷¡ÜŒ4}OUÎC„­Ùu0=DùÖI·¥‚ï ÍlyŸÇºQ ­Ä3Ť/’-`ˆ%û<û:æ… 4$¯.ÖQ¦¡åudܸì:YÞº“ðÍPaŠÁJq‡®¬slªI™¯ëõ47¢“5NþRúDºëit=lÁüÊOä´‘Ï=Ÿž ÙÏ=W¿ÂœHˆ‡oô<]°¥É×;ñ“v9ý¥ UŸµ«bž"Rº Ò5ÜV ðÜA×|"Ž=2 Û4ÜÕ/°¾×»YÕÍ›V+›DÙÉš[åÚ+>Ø´KÚ*ÆV1ùbϽ¡ƒ3zYe» s@ûñ-w«ÌBdU·¦-áÕ]„‡JTÜ5’Íí-vu¢2Uc“£º¾f7Í>ÉÞË 5êÝô²/K¬`FQ?x™öº¬ˆ}A/‡Ã!Äà\3üühUýçUÓ“÷O¼)‚U£úÍ5'k@ÇFKϲñ4…ŒyCu@ªCœMÝðàžÔ@F=ÝhíC%q’¥þàü@òY  endstream endobj 548 0 obj << /Length1 1374 /Length2 6090 /Length3 0 /Length 7034 /Filter /FlateDecode >> stream xÚVTÚ²¥I ½I—HQz:(½÷.EZ H!„š ˆÒT*]EA:iR¤H—¢T HçG½ïÝßÿký¿²VrÎì™93gö>+¢ç-m¤µ<1p} / ‘«u̬•€`°œ , µEâýà¬Ñ+p\ƒVýo¸Å“lºP<ÉÍ ƒú!r@ˆ¢*DI Ê‚Á*ÿrÄàTºÐ ¤'ÐLhŒAâ:l(éå'ò¯%P &„¨¨(Iýj¡à8$ ŠšAñÞpéDÔhƒ!áøÐ¤»ìÇcUA àà`(*@ƒóR—#ñÞ@kx÷þjhEÁ7&Úz#þ˜m0|0’ ~H@ D{Âq@ÒÙ@#S ŽþãlúÇA ø×Õ!2§û+úW"$úw0à°Pt(íD ýà@ }S|^ E{þr„ú`HñÐ (ÒêArø]8¨¯e„’úû«»‰ÅÈ ý~uú•†tÉzhO Gã¿êÓEâà0Ò­‡‚~Õ Fþ¬H´'âW žXé7Òý˃dümó‚ã `0XI „ûá!0oЯ䶡XøoòËLª?‚€Å`R ð$Nú Ap  üwàŸ;ôDÂð@¸ ø;;É GüÙ“&C†¯‚IăÁ¿>ÿ^¹¸å‰Aû…þíþ{¸ s;cSÉß ÿÒÖÆ„ Ò²J@iY0‘•*‘ÿÌb EþUøïX#4TùS,é–þUpÐ_ÓûKâÀæ2Ç ŠýMpg°Fú‚ü¿iþ;äc÷¯,ÿÁÿ³ý@?¿ß¨Ø/ø PÒ/ô/œÄ×@<‰ûf’Ðÿéjÿ#W3¸'2õŸ¨JÒ€ÚËïß—ˆ ÐG†À=-‘x˜÷ªü±Ûý˜ ·Ä =(@iüIU0_Ò£@âãoNÍ?ÔCÃ0ž¿Ô%« „âpÐPiĤ!ÉÐò›Á@ ƒ'…IíEà×<åU€ Ò³ôËøg¯ …Áq˜ß†œ ÄáH:ûÍRÿÚÿ5‡&Æ0°K×}ž_½W­Å,½Ô¯6,ºdO\š0k <`¢Éš3‹ÛÕÊèigù¸¨'¶£9)xLX{õ‚æfCšUãaø‘[ªõÐR#`|ðì›GkZ5D:~i[Íåðcÿð+×|)_‘·‹æû*3Y²ïw„Ô+¦ÞÅ-Y-?U4¡?ªx/}Û.ÉùZéˆhÇÃQn!j¼´­ÛvóÈÎî0[ÞÀ© qª$ bý¶\1ÁiNöÎþhØôc[Ù€V'nʶwCÚ«™Æ\eÅ3E#Î% r[É\ "Çè”.‡"S•ŸitSž_öšÿ¹ÞB_ß‹–2ˆ¯šÌ|´|,UU…¥PX^9ïäuG±lÆ*Øêž µ=RÒÙ{qŸsA1!ÚXø<¯šÚÎÅtÁmÜ­É AõIAƒ<™Uçã@Œ‚VŒúLf/"‰êŸDò–X®Ðydy[À$Z]XtDç™&eìZY{ƒ‡Jj{À%Ƶ¶ÂÅÅû^‚î[­d¼¯wù0…EðjÓGÿu ºmß RiËnÑ÷ßôÄÃÎ ¥¡5vKúGíãÓÄsÓ2Go ²·òö P–ÐÝöíÈ\NÌp߸íôäezèG² #}¦DŸFF-u,œæSú’=Ñ Óœº™z<Êû¶ê¹GRÙ°×\mÅŒ<¸ÞÓ /®_ºÏTÿv÷A´%Õͥ²³ã)­X¤oj½»ÏÖèö'÷ÖìÚ6½J;q íæ—ZûmzmsÄ­¶©ÖúXËÛ¤qꆒ÷P7‘­Ï,O{u=9âÆåîXÑîfió8Ù BåVsËBÚçJæg‡Ì÷/Ÿä%AÆùÞ/8Ìûf(q e¿Rå;ZŽŒ_œZ²½*^É)b$Úê?w×ÒH¸FÚŒ-m`õJˆo?S{q]sæõÈT»Ó¬±¢wôÖ“…I5o­ÉêÙþwÔª,-Â)± †0¼ÙùXðsÁy{QœÖ³zffùT;Œ@ä-D©ÍîÕyB¿L<¸Hè€|hÕôì× uÀ5gèVY8¥”éõÈ ¤|T[Ku-kÉ^i­ç¯oæ}øå=±ë“Øìöj«ÑÀCs†ßúŽ,˜Û}&ᥭ)êˆ|÷“ûÓ»oùcÃLÆÍPÏûŠŸçlÓIº~® Òªy Àèõž„Vñ¯o8¼4 Ñ¢èùnÿ"ïM÷Á¨zȤN{EËšÂUlú­óÁîŸÓö9Æ;‹ÇƒÒÅ( ÉKIÅÀÛ¿¾n,¢ÕY',®giÜÑ­ñ‡û·e¶³>¼]ÉO[#]_F¢·± ÙùxïöÙ”B 9Ìëùª{1Ž#’`‚¤¹ÌÁqm4Q} >þ¢Zþµ—]FƇü„Ë»›:BXtLu¾l „Ž w ¦w4éSµF!¿3âdþV@ötÇ$R"øZƒÆ ù³V7…3_äÇQ©Tð^úxA¥uFüe(½R|ÄG×ZT ŸþfÎx—ìAbAúãêH”b;õå+®&~”‚ýaW’CV=Ò+Vf6`Ù+X&~ê|ÙÙ¬ïÓÄ´ò:±Ãæž{г+3ïéƒCÉb—\(ÑᢥŽOú¤\ â(ÂãqXQ÷¡0ãÞsÞ‡5~Ãe¯ˆ#æIµ ÖЭÓkø¥Þw9.irŸOèïÛE b 4“è¾_e2˜v )êVPyþ .‰-…þ 9Ìß‹zÛœd÷$Ò±º¹äÁ3…¶nñSˆ~~^·þíÔÅ ­Ò¼[¸Å„gý{êŸ*™å/Ð5pÅÎáŠÙeL÷»MÅáÁí%Ü©;îiKâF´S`+S¹ùr7Ú‚ÙYsç_œ;fçv,&ëöFƒÇì;­W“mæ5ÈÙöÉ&;Ž)Ö³œˆ‚ÕuñÉÈTô‹ÅÑ·jMõ“ù]÷Ä×ÒµOÕVQÎ1×b2ZYý\ ¼Í»Ç©5׿ĸ³RC¨9Ó&øŸQy˜Ý¼v‘Mâ mÝEÊŠ¢â’Ƨ¥5t‹Vþ+BNnõ}A©ÆûxB¶ÞnüºÌ˜uÊ\ž§ÁwvYŒƒ,˜=û•ŸØlŸ¥‚²%ojyÞY,‘§8]¥x1K{{¼Ñ‡ß¦ãÅl0«ïÈ ¥'P·¬§/mv[Û*WuïWÊdn⇌Xïqë 7m’÷Ò'¸\» ¬\ùR5šV9ã£têíiý¾#$MÞÞàZ.哾vÀ ØU]á÷°ÈšºúUœuÓðÉkš-ŠI½µÆôÎÓÒŸv^y—}kýKÉLy:j´+—ÇÞJø<n`õf3JºÈ r¦YsR%#òÏ­Àúµ£A|ŒÎˆÏKưsYML&yKÛ¼Óo…¸ (Ò6V$„p›{™/[’.9+o)Fn.]U”4ЉVýñ\_RÈœ08̵vÓéŠ'K ¯i3¾¾;‡š’T«®¸ÒÉnHmŸo98'÷-ü"‹ºj,n¶óTZ©ûÐÌÓ}õŠCîV†L ¾é©þÛæÜh]è+ÇÈü¢܈ÉÚ¦ÁQQÎîØ½0ÁfsV‘#jw,{·tüÈ>ý0eµÅv9¾Á/î2ðÄ»Áf¬ªnÎ’ù¤}^,›U=öWææ'°¬ö:+¨ª8Ø })¬³g½„]¶(ìýks¶œêËR£´õ¢‡‡óu(®n… å&Ю=÷–ìZèêv¾?FHëK ÍX©Èplb¶Ø+á ÖƒßÅÒ^9ü~|~däâäùx%\[‹i^ö¼b,¢Y¾uë\SW½Ä—2ÞæìÐàí³Ç,¬ &yÌ翎2«V×äö(ýƒ¨²dô«Ü´2 ô#vo)Øk‡ºR°D$Ù« ˆYdø/S•–FùWÇ%ñ åoœàŒz"{> Š”ª,ÓÌlìQŸW;j–í7t—)”¯²¼$5ݧPgzf%æ9fPçÅôz¬ –¬Z«ö¾ÆfÑë6!ëxÖj@›—[TdÝáO½p ón ËVñRÃ!Ñã|ìôüOxnë %7ÅÈäéKÓHäÚ…4SO§¾ˆ²qöß³YeÖäKïÄÊl6ºŠöI ÔœíÕßrÒ¨Ù¸®týŽ=d›ü ƒ£îeËEH¯Ë~Â}˜q3û^Fþ4õ—»ê_9tyó4,ÝN·ðƒ˜‚¾ï&‰)¦‰a‰;/Èvfè>òÏÞÌ¿…âæ°¡Vçh“~˜4.žz‡áRTÿÂUkåÒdá­ ÷€ZMML]?zÏ›ûµÌñÊØ´¾do°ût^Ö'qkfaú’ýB•â€0ù¯ BÏ…=˜ƒ)M ¹0²8ýhó'ddó>´³ß$å[%ޤâ_íòïËò}°DGnÊlTƯ·ôòe„W¸ϱosϦԟøˆ=Ñ?EЋÊ¹GüŽdrûB2^d‘Ÿål´ÇŸïËúÖ0£üšN²q:Ž13y¯~â³®Ò«ž³ºGûUß…—žîLµbôÍ,ÁÃ`l9ºâÝ-=çkU‡’ãJ™oÝè­~Ò†ÅZw&0p#u1ÚwsÔÂóóÑ"”²œW:²›ílÕrXon?p]åòBIV8îIËÍíÇ€%Ž¥—6zgª‹2,rÇ·ìÞªj`žø3Ô°Ø;3Ÿ¼åüº$˜çŸHQÂÅe9Köy‡Ó›|±¶½«oÞZ*è©Ò-f=²ârƒ“‡ïŽzGö~ÍýmâXÇ^‘0g£· ›µVͺºlç u,­Å¨†³ÿŒó›;¾;”òn‚S]¹Âå dÅîæ-ñ`óJš–F7¥ÇÚ—Ô*½ÖL,˜  hÓùó7GÒÄÜ{Ÿ|àQ‘¹Ùe]Ô[ ¡ñ¡)ùê‡Î2­ùé~€Ø8]Ãýd,²¯"°1Ñø™O°î7De»ÛÄÕ^Éô”\¬ö}‹¯áª2Žŵ®J:ÛEíF{£òóÐâyv†¦ëq¯/wàË÷_ÏÔfÒÕ.\ñÄØ¾r«Ô‰+±™:é¬]óøÂ4ÇÒŸœÂ-^*x/Zž£Y•¸\È‚¢&FðQŸž‹H¸u9ÊéÅKÓã{.JuY‹èÕÇË-Lj,Š »k°ÈsÂîO¨0fîõFsŸîè$òÀˆsF·­ÛŬä/ Ì ŸÕ%iMhøtœ8nˆV¤pˆcßüœ ÙÞ=5´àÒµþà}Ýô"!éæëBy¹@_êË®æÔË”]~Ò ¢!Lìµös+oL)Zm³ò3ã• ù} €¥!žî“µÌÞгõe°Û9 ÐÀ2ÎÒÑ¿î¥{;‚3o\Î^’k¥ès—&e3á|-cj >jÉÑTJXïËIPlïØq½²F4³æàåϬ§(ò­ŽëÚë‡[7³¸Z•F]íÀ7»¾š¹7O8HMôìb(ÂJÐ1L™»Ä•|<¤fÒ±Ù.ÄzŒõ·tŸ:wâ÷‰Ü²RÙ"Û ÆÖ[:èŽAº·…«áÍýi὇猯^–Æ<äγèw´ÍÔqYFŽtÞ|9šð¸Ö–Ü´¢†vëœC’¨/‘Ï?*g£¹î^zsã@³Æ^gº÷§o‚¬£áKzŠÈšñDçÎHZ–E­º‰ä5F~Iý©ï2ô¢&7 O?ØO23M~ž±w:Ãã·b)<µ¾ÃQ’²bû’[û8­¾…[ÝÍÎÜHLº¤?xÎ`¬ôëÅãfÕçÄò"OÎõ³7ÐáF¯w\úÊŠBüA+ÜÚ›G Èslfô{ìËËv;`ážÔrCýµíýš‹]ɹ’ŸvJ•öuž}Ón[rQ¹±›ñ(Q "»¦Ò©F­uL¥B;rqLÇà D£Rr’€¾ âK¬„°Ï Ý^I‹›?ÇŠå¨ƒŽžwÞhôn&õ£/ËÇA9͉a¤£ tš2k¦ ÒyîVx²Ã ž•¶—#\?Íœ/¯S#¶ïÊ &Û­ç¥3âC!­ƒÕ3ӈ˽âòA¥že‚)3-múÔIYëÛW7¶›Ý'sr£A­{I—b ™ë|Ü‘B÷×#?'`3k}܆¾^ó÷¾N©zçu12‘ ®nwöWk@·¼§œ§Ïn‰p¡.8y›_£¹DSS'üBË@Q[£NØb;…»žç¸PByôC2Á­|} ‹iB«‰¼Í°¤mÓ6Šù¥S¿Æý[LCF8‰eg:w[å%^ Z›* ¥¿›9ú¸pÒ'xptN†õp¢Oa™þ~¾Õ7¹î×»hWÃs$vHƒˆ½Ú ôürR™ýÏ `ãË#|˜×ø³ºDµ{eµB8mt€×(ßîõíœ>¯á½ôóò ½°ÉËÏû+¡ôßCÃ&n.ðI²='ýÇ9 x82Ò—OKYÝŒS{¥øó¬ì1×·ýG£LUˆ‘>·´ǵ6°ƒa¹¨|µ¤Ù”!%>xƒ8˜Ôvk”V,bß/ú{çäkh¤vѱk,UM,#Üóøžî({PK6b‡|ò)Yt>ËÂFéýŠÎnȇ®Ø¼·³<9ÝÈ4Æjìèv·øj”yÙÔÙÅ uzp-¾Äm‘QÂÝ¢”VUá5}‚ÙzîƒÅˆÔð½%'óF»®ŸwÖÎ Ï2Z½obÖ©ÎÌ5j¼Š\Æðý¤†çR%.ˆ˜@ØÑ]á!*9 ñ£*æi¾ –)µg¸L¸@VÔ5·8Yã¡‚-C)§H+†±Øõws{Q|a¹'³bàY¸Êt+ZWËx…STžîòÔ`d™ßð»›lïFº}­OE£§™EG‹à'²Ä%›)¼œ¯]¨£i–~@­E^¡’–ûŽèñ¿qSc–a)£à(`E­ÙKá’½ó‚ÇRÖ»ôÁ~-FÜákÐTKš# çˆòÛ„dkÚ%´IάJ½éµ6ö¤* ŽJ÷éÛ†hÉg”mß²²·¸«|ˆƒï¦ ¿}·Ç;'ýÜ|3øÍ Õ8ádz¾Ô¼¦uÿâBª «Ã"R®øjÁÏ+¥ù8£NB~ T Á~QÄlޝ²äµà)BS“V&ÂN¢‚/ù)A¡ªâÅø6ƒåâ?ßwvÈ]ÔênÉŽ’Ïvçòt#3<-(n1vRÒ"žLŸ{|#ϳI‘JFI¿ÁWg4G7VðÌ^æ†çti¿ažJhDüÈ׋Ž×D˜çÏy1ȸ{ kcÙ¸Ëãè–XÇyp ò #³ûΩðg[\(zLz ï§Uáo溺óÓ£ʱ2W?mÚ=ö‰fÖ9Š©RºŒÎ*ˆ|LîÝlƒŠ(îÁ¸[‹¤ï ­ç‘P{pÕZ‰?“è[ŠR:ƒ1¹E¯E×w‘s°>þFi4eq&Û0ª’+†{¦sâjw/Ýœ¸ç×^‚å{+ÍÍDzYÄéì™Ús‚å ƒ)R2Ï?‡»)Z^:¥üÊ40ÖøÑ›ýé¼³uÙŸIƒÓœ¾ äÅô'â+c3eƒíX‘Œlÿñ‹Û‰??59Ø—[-ßRœyÄŠ*€aìØÙE±z84 ÜýàÜð”è¨ R·Rrͺž_’æ`‘8J6Œ©NüÎjÌ®þ,}Ûlç…'ßû‹ÐÞyîRÚ¯Ÿä÷ò‹=óK j /AW·^îçãڦϗ2ÿvס¶Ì°øCFþ¥ðóTšÐKxnîö{Ÿ”Q‡õ5]!<ŠVC† <«Óv›“›E¾ÿ,àŸN>[{N¨·ÍÝlõIåݨ–¨g­_ñÉOq;æ¼&2EÖcÑýð¬]Fù<tîZø| ]‹ö "cH&~Á¸Ý}H•±¾> Ø\§ ~gTRI´¼»ŽßR.é5¯Ð¨TfÒi› “û/ö‰€ endstream endobj 550 0 obj << /Length1 1405 /Length2 6107 /Length3 0 /Length 7069 /Filter /FlateDecode >> stream xÚxTTíÚ6]Ò%Í€t‡t7H "1  3È ’RÒ% ÒH£¤€t‹‚”4" ‚~£¾ï9ç=ÿ¿Ö÷­YkÏ~îûºëy®kϬÍÉ4TqD8@4p” ¨ˆ,@MßÄJT "".$""FÄÉi EÁ Û‰8Í!žH(.û5O…¶©ƒPh >¸çˆŠD%eE¥dEDb""2ž²u7Ô /¸‡€CDœj?O¨³ ]çï[˜ *##%ð; âñ„‚Ap€>åqGWƒ` Aùý#¼ å!+,ìãã#rG !<y>P” À‚„xzC¿F€Ü!&DÄ 0u"ÿ8LN('€6À `‰ñ‚;B<èê=€¡þ¬÷ øks¢B¢ÿJ÷Wô¯DPøï`Œp÷Áý pg€jê ¡|QÜñC"Ðñ or@~·hª@è ÿš ö„z BH(ì׌¿Ҡ·Ypw‡ÀQH¢_ý©C=!`ô¾û ÿu¸np„<àï•îèôk G/a38ô¡DGý/ ÚDôo›3‘‘””@ ¾`á_Lý< ¿¿Íè‚<'ô ¨ýE€yC(O/HPÀ:þ¹"8BÁ(€Ä 'úwv´âôg>O¨/ÀZM?Q€È¯Ï¿îlÐ sDÀa~ÿ†ÿ>ba šÐÈÿ×Èÿrªª"|‚b2AI€¨¨¨$@JJôÏ<@ô¯>þ#Vî„Èüi½O·ìýxþ/àŸ¹ hæB<ÿ&ú 0ú"ú¦ûïÿËeù_‰þßizÁ`¿ý<ÿä…ùý…@3× …V>­øC- ¤«q„z¹ÿ·WB«AîŒf´ è]!‘»ìP¤&Ôâ„¢À.XóÇnöKo0(D ¡¿ž0è(‘ÿò¡EvC?EhjþvAÐúg] 8áøKlb’§'È}Öè• @­JGˆïo2„…à:€ž1à„ð$úu°ââatÂçÏq¡}¿ÍbwÂH(zk@ž¿mÿ¨ öòôD ð79Ð ý½þ­vÄ&ZšG€å"\":/ëT}·ÆðV׺c’¬¢%P\ Ï\ô𳵦ªÚ;ÖÐ>.VDNÍ2ò]Žû>xº’¡]€ÂÐØP=,þvúÚÂâˆ`pžz³Añ9Ùˆ™ÌÞÇš;Õbþú±T¯øö‹OÅ7ÝÈíû2ûw@é99[#*^%¿{ë‰ÇjÄêy¥§u¦—©ŽÙÄ ÖhÂ…jgý7¿ 넬‘Þä<?)Òí«•¬‰¤¢§ö¿Ç–?š2DO“œ{ï%ƒKUâ\­"=‰¾Ä=’kÛ^jåûLÑ`Gò¸W³³Zè-ÃGo[¼ó ù½+'Lv›9¦ß„IèZSb\êžr¨rÖ:bœd~®‡ôáвð»—êÏ ÊÊ/¬ô°ÞµÄá? ·ý4IwiŸ,*f“®“úø\Ucñu²xw-Ÿ bà¤ê`°¹®yÞúú|ZeÉš ?Ûi}Ó9ÒuŒà8b¦™M²ìÊÞïßK~©#q>KaΧ!‰ª×]@ôØñ&æ'Îäã;ºµäî+Ë,N²'š‹“šR,˜êmcdZÉ>V ™!'¥r;ª`~ñ®Zòí3…°V…té‘G˓ǘêF‰äõ·Œz¿áÚ&9x ‹Øêtßw±/3྇º›mÙOºÞQµš=–š_)PýalGUþèASü÷„¯ÛgÍŸ ,U£ïÃbÒz¦ƒ7ìž¿eîº?˜À”ùjò ¯‹;}ÛW»ùêç˜ÊaDKvˆ=¢VÕ’(Ñ®öa&ÆÌz¤×yÖJàÙûÖ©å챨õ…ÜÝÍPÛfƒÏß+ªª(ɸˈoÔè‡pÉàG›«“|•¦$M6‡‰ÍÃ…0\œZˆ6aJºïh‹ö­9ž´ÆR4^iyŸ÷1} j¯g¾7ä¾À. Ó”þî ÿQØÒPòŸ ¢§þèÑþ¶ÅCFõ0ý6¼h«»«e§‘­EV‰so‹,Çz7bvbm·jÚ*ÚéD¢·}§é©‡÷¸{:½è;$—çW¬ÌÆÙi'¥‡Ym‰3Xgß¹Ò62a¬š?iëQ`»ˆ¾`ÑÌwøRZ3Ä#Q»´”–,÷òD0y;Í!Âù&èrõ÷Yƒ.`JL`¾•hö£Û`ãêO6•î‘›ä³Ð²ÝJÃáé6[q 3 ß·é¾Sü°CÍXÈeõ¼ý’9ä¥Ìs§Å÷¶Œjæ–ٳ܀À¯_‚@â[šå0ìôîSi_œjFüâiTж…Jyoͺ\#Û;ó•É$jí#ÔáæˆÆ§ËÞíù)J½i¬ri¹õ £ï"7ʪº°W}kIϾ=e|ˆëm¬–¾X‚“k¤îBDO:£l'?D;šKÖåFIïàÛVѹÚbU6fù,eS•:ê kû»ñ€/ÄÃ}¿'±Ä‡˜Œ˜utÇ+Æ ‰Æ¬j; …¼_'NX¶}_diÕã4,TÞÏÒL¥”_r'Ü{>ºì<'0ÈÑÄîbV¦¯tÖ¸¯´–êÁ7!åMºp[a(Š ÚÐ"KU.6H‘°=O1Ýj”vj0ø•F…·òF4‘T‹HÍ|šæ$}L¡E\|•bìÿœêôÔi7 jÒ–BÝåý™üfQ@VÖºjúèÞ|ÐÕ«Á¥|¤˜·Ú©ßÊzÝЋ™Ê6`éÔz8ƒÔCîpúO˜ºÑ×wÝ nþ¨Rž7¤”¿‡ |"4ž¬Üþä†5›ÅG*EðÛúÞÁÅÕËñÅ™ˆŽ0ÛŽ—\q[§'6Ò°ôÄÍ—È6®ˆˆ×ÂIëë¶¼Ùl¦[ý! ’S¬µê£¥ÉÆ5ÚÐ.öB¹Äôk/[ “"‰“,IUŠå"oør–éAMVbýD'ûã©‹ *a¼1Áà €è©Áaå‚™ þ'LÙPRÌ› 0hÜ>¼¼Ñ4óq. ’Ä " ã³ 'ò[åîq>£maÍ ˜6ls«ÚüÝæøPx¨"ÛælGiN€ëðÄUKÍt!—LþiíÝkW†g¼û¶Q&É`‹ ú¸öþ5C‘©ôÄ«³¥xðèió‚z «:6GO»d¶]÷ýÙiK>oæWü‡ùü Ë`+¿ô±Ž’‚L"*;ý·q7ö‚Êø"”æx7ŒÜg¹õ“ç(“òáb2G¥õ–48T<áVáû/Ü ,š­^j.Êï¨5fìº5.÷á¯ò¼››°[ä$ÁR¹¾9pèÀˆ'Û…º‡#fÞTÜ¥7Új§©‰(ôË£ LM|çÍJù™ÿQRqKšF38a¶a ;EpA¸æœ™vµøûZ’¹TkÚõ68Úf×’ ".= 9Â/È·i-T¹ô*.?p»Žg³Í|îËj¬Vy5L*L׉тÚųÀîPá»{wåÝÑHK}@)O]_z}ägzá÷-KþÓz}÷#ÛbÔ1Yï ’}[Ñ8ôh‰e¸orÕzª2´UMÝøf~±Ue3­íu Ö]?®}Shaê‹×/b~ ŒákzT$–:•vcø¸½‹¢c¹Ôå•"(O„²ÇOö}ãa^üÚTÕg®í¡¤Œñ?Ý–ì)QtüéêgšÚ×lî>ôééýò·Îj#ôɧɟ_µgcÊøãvl™F«­ ÷£µ'dFâ–!˜ùŸÊÄ zNÌé<)D¸ÖšêžSùº¶  à]ò;ˆÖÍ7|!îÓÉ©ë}6º-zÑ„#Î:Oº¸å'­ºVñ ‚¢Â—¤qR¡q|wž:F})F$dبU*rüÀÖ$ôwf›Œæ{ŽhǘÁu4øz8V2Vƒ8‘NÐõ1rþï‘Ë'jKE&47Þ»_O¬góèìÍÏëKwjhœÄ†“ú@ˆ½Ô>©£Âî…ÑK(S0æǫó–||d –„Ÿex"6ÓôØ Þ/Ÿ˜ŠL 1JÏEu ŠÜªªÞƺ~®*"`„‹øß®ÔzÁ¼Æú0æeâ>¨ÂÂh—Ó?b†î^CÛ¢e1CQ¯8JÇO¤¿û¹Î̘ëÔ;ÅÌáêw4fÃR< ÐH¡)é{âºD¿–E!ÄAc¾¶í€Ê=÷wãpsã°¹»_Kƒs vj-¼ª%ïPñÈP>=ý.žwþÔƒfTû,ÕèSV ŽÃZ9°Ç)fóé3&ÓԇݚSÒ8v?æT(RzàûTF³ø?‹Üu¸üåäçzòñBÝO6¬¡Ro'h›ösŸá棽yhbŠ ?AÉ3ÎŹ(Uˆ¹ÓóæN8µÕ¦¯­]úÝáÙ¨µç|PÉH^ÆÖiÄ’+,Â…\õm;sÚV­â¯žó|òYcõ³5j곡.S¼ÑsŽ+Žj†a ¹J{ŽÊâ`^rñJ† Ò½9¦9 N>ý m¦>†¬Ý’|95Ççk™¸Ãž]ôu¢Ô®7š ä=ÑàÇHfTú¡÷źڃŒv^œÞs¼¹v¬ÙE¼õsJÑO¡6’o#ÔA »û‘-Ij€Qų¾ÆÝr9Pš~}Šùàìb±`˜I/k?¼˜Ê%…B‘a{iùËé:ß}w:Ï"÷Ò‹—}·Qîê½IzF¯w×èñõWµGJ=÷Â;„S4Ù%Í„êD·ñ°ÎøßëÍDˆÐ³ÌTM)ì‡~Aû"îÙ¬-T²½õ¹–4ü ô$?µ?,Aq\d¾>ZÑÈ_MQò²ºæÕ5³Tl£2,ûÅ|Å ßöÖH*¾iAœšÄµ–§óº^?¹Ä[ŽÄ¨§q\u‰Í=±Ò?hUn.Jç?Ý#)¬ÅÓ÷ÞZåq½* ßX|™(‚9̱·0ÂzkA÷Øp1™!ÚT(îyBÍ1¡±u÷íÉL„¼ëO?¸Ã¶û;Ek¨I_ɱ’?~ œžç‘]„$Ö+?ŽÜ ºŸu—E7Ú9 §b`§¸·b›ŒJ9.×´: 0Ç :gçÔ ´7Ò úXôfãÄK=275†4è”+ä¦_ZFèf¾¬cÛÁ[̬ÑïD<,QÍ“9³l*NÂÏu4·e•zQi‹Ix&f†ãàARW15wë’U†RŠ¡nWn%E]X£–µÜá GÌ¥´¹d4½òfe ËÒzG×eä©8y”"qÖF†/S(nËtG~ ©úcƒM<‚,Ç8逛“8÷¶<á(ú[ƒ_Èó;hJ¼éŸXaEâYeœÿ`õAxPíf±eiôó¤4•tý®@2™õ“öœ×Ωª±yqãKÀ£„39U[£DÊTño=|ª·ÄýàØ/WuI÷~ØâA~ØÏ±fr¼Zµ ”¡1î/ÙÒo„„ä+-¾Þ›®kÆd!?pÙ͉-u8î!¼ÙíØ«²Û“ŸºËäÇ!?@1õVÖYOäÖGÓß+üQa¨\Ì©Ÿ¬¶²K‚*m^ôÆ œ{ÀÐ&ì°1Õw¢o®I3""ñsœßMgKÌBFÑ)#¨â%€|ò²¿åLÕRõ³½Ðµ2²´/½¬éÓÙQҲ︯Xª1ŸyVžx;~0ðEõoò¸¨¯äåP÷Ú•÷îxù}a¢ZË´çß]²PBà8Ê…T½`jáÊÇxS¥’§ÓgïFQy÷óñÍ¡? è”èé/œ‚Qa×ùåýȼ"¾4¡Ä¥¿ÿm7e9]¢‚Žõ­}i¦FÆ&NkÎ%é*(Ø8Ñ‚{ªfaXw]8åâ*i¿…‘™ÿº£º6ÏßjDW¬wi³ácƘ§Œ¿Š ÖþžóæºÕUZ£¬JTØàý,aeðL™‚{ºØÂ/×/&ÅM÷‹WïifëÎÖׄ¾y(¤@¨JJöC`8ñVÚÅSúø†™×TÆCÊBô…ܽï“OºxüQîV®5Ñy›;ûÄH†w´yí±?ÚKJP½@ág¯]À‹¹[!Yâ %×–hÖîO9”_aâ`Û} ‹$_¯ßê³+¸U­)¹Ö)ã±ÚæQ‡[æ³µØELaʇêCþãiÒ°|aY[X$ö'gÜŦ»;¶Ñ ž%/B¢T‘U»SxÏ‹¦kÓä1)µ™ËŽŸ2V¸ÈQ5SŒq¦ñ‰Y&-ú¬XhgãiÐá\“c>é\pŠij€ âæ¨ñ}ërŒ’©Tမÿ³—Ðýè@­HªÒ7©V~6<ó?i®« endstream endobj 552 0 obj << /Length1 2067 /Length2 7731 /Length3 0 /Length 8878 /Filter /FlateDecode >> stream xÚ–e\”]×ö iîpèŽéîî’ašº»¤A–éA)é’.|Çëzá¾ß÷Ãûãü×^ç:޽ֹ÷ +£®¯œÜª ‡yñù$òPØ óÔ‚Ãà¼úp70 âÀeeU@@Á^Np˜"Ø *0tô¨#×Aâ ˜HTBPB&ky{‚9@d@@þó Ø9A¼¶P'.ÿU5˜=ú7nçíþ¿k>P„'R Àñ?Ꜥ¶æê°ƒÚãòkýœ P‡ÜÝáäàèà€pþ‘Øúä¼<½¸ñÔ`>€œ«+@ÿO–'@ê Eø@íøþ»¢²·««6Ø YóOšøÓ…ÿ+ìæäêÿÿ“©ævu‚ÈÁ\¡CNžÊN~P;]'/ˆ#À á ý7l³ƒ"\`P]¸§ÓŸxBÿµfèèqA=="âÿ.™@ÿݹ6ávý/y(Ìî¿#ûýo~]MeyîÿǰÿIT‚AàvN0HXF Àþ¸È"I8! ù ~ÈðóÁà^ÈGîÞ^Á{8÷ÏE„ürBÿ’€_þ–Dü ·$àW¼%q¿Ò_ð+ßÀ¯rK ¿ê- øÕn ©®qKHuÍ[BªkÝR]û–ê:I ©®{KHu½[BªëßRÝà–„ü†·„ôbtKH/Æ·„ôbrKH/¦·„ôbö—Ä‘™à¿!Ë€=!NÈÅÕú7.úö‚"œ<]n[Š´öº­„T±½%ä®l`ˆ ÔËj'Kðoüߣõwi ò—„‘Å pWäËúׂПˆ›Û³ÈÃÏo÷‘Öíà®®`Ä ¤‹Û] _8~舊üY÷ð»Þy¹UûÛGví|îÔø³ ÷¾«Lq¸ƒHŸŽ·®‘Crôww„Âîd cNwéÊù"âr‘¸u'‚ܱëŸSz»Žl›Û-‘ ·RÂÈZ0äé¾íRæífûçt¸c yyòÃoM#kÂï<"7í~»ŒÔp# °ÿ¬ð¢ÿ9VA¤w(…ÝIù'濞²‰î®Þw6DFú¨hñ)HRPZ¹~}"®Fßf?×>ÏtýÖÔTÕf7°%ô+ÇG[l–4›åÔ@Å¿¹Wò^fgç{˶ŒZÛ•ãÛiÍýë ^[ÜÃѨò©uê>½C­nðóOùÁÖ‹]Å[f†tfÝ­ßÆ­ ~I}…ô{‰û•–¦þ¸§N|´­ñHÔ“˜ü„!BíÔ—aº_?ÏîÚøb ð˜Fd,!ûlì­ÇÆÃ¤ƒáþM ÅYæ…ѨåàºêmkO^¿‰%ÑÀ?\Q}ý@䬌m£|põR·¦ûžXÉQÍ)Ñå$wÞÅesA·)z¡ÍNOÏ=Íšûˆµ&Ÿ³„ŠåÞ=á>³÷¸[¯Ÿ¢žpq}4·Êùrf˜Ú•&=zó´+*cÿ‡Ñü(?°ù¨Œÿ˜ iôõrÿëÈ)Ò£wÊ­G”2(¯~<ªN!Ù(X8s?%t>@8€Â)6B…Pµ,•õØûcTz¤ÃñºŸ¼¿4ÅgßR)H½'ì•#Ô ×Ä̳öÉ!ŠˆuÊÕNù¡weL¾Â¨ëÖ`\dµ &d8°RWÿܸ4GaRtèËè£eų’ÍeËÏóí]ÈL·˜Pbjžy`ÐgTåÉDŒËUÓ ç&æ âlíºŸ%o]¥šjíæƒ.#ÊIé=d»üÙz½¾Û‹WÑÆÖŽØ­Ó°.„°@®ý„²•.„Å>ÑoKA ßüwºæä3ü/t¬*Ñ-7™+à_ûo|ÑáE½Ã ÇBüw=m#ü¹Æžœi¢ÀïÓÊ;[Ó15! úI8_®¯¡–½èY×}×̇åÚ;Âq»¬Ñù¶m¤f÷©°é×âŽRÝsX™aجÞÃØ]²s#²ø¥K§"­‘ºK µI=‰¦Óó…¥5ÏFÄRƤ³‰,Š•*· QØ(öâÇŽ÷1D‡6b¿]6Oaû/’•+W<›ÝI¯#çè@¿R•\÷Á¡^¢•ˆšMåuË–ú‚ ™Ý›Š±:¡¸fÇl•ÏÃNÒõf¾ÍR¦\8¯9Â,± =·WM*¯^Z³ád¿faÃ;bÚ쬓ó“x{PÎþÓ[ !'·Ãò‰ ü”–ñ…Ù[é X‹§´ëKÓúFöã%›\©4´öж ZÚ̦ŠÎ²ì›jÉ¡AãS]õOa׈­¥É¤=PSžt+œªSx‰µñ;©I…õƒtGþqëë] O kÖyôÌÛq…±JDÓÓ~mØIi¡Ã"± qŸÁZ°ÿêaàéS‰Àv­Ï¡¸ͯ;ž2+”©~&&E½2,PyÇ@þ' êK$ÿ¸ãµfƒ4åXŒ=êYs@«MÕ^ÔñQ©+ê«Ãú‘üòÜiìa‘θ ¬Î³„_ P¾D[Æ»ùyô […ûÃéÖÅ%J‹í”ä“ÊL%Šà¡×óg&ø«nIµÉO—#6#‹Q~á—> 0Øî¹;ÝmVûŵA«€Fµ|*L!ç{½ÁÊK»ÊaÊi0Ò³"ný+ƒ3 ^ƒo2Eý‡ü ‹H»¨ü`œÞ“‘F<òRË /H(“}G8 o·xX‚Ó:uY›UŸïóðC8>Z#j•MrrÕVÙuù#J:~ŸÊ‘„1“uÚ$«ÅaÐt§xUß{‹èϧœ0¥‰hVDýcÖÀIڜߗ$ä™ÁN¿-HIëò¡åþ_Ê—T“çR˜Å‰Nуü^ý2ÒSôN¸’‹šoêÛ™=1¾Ö>SH æ“" Y‰ôbZíæEÆ_EåêZù¨|X¢{ê½€ÌZÑì?ÝJÐÉ-§“·{Wbœ2aÕÔÿ䉖7ñ;Š(N¾±A€Ìh‘•yÓJÓ¸s+½¦íK›áâÉÒŸË+­hèà×Í6 u…Ø#vâY{SÏ:ʵ×Ï®¹ÎÌï_4&íµ-ͬ·’Û_Õùg¦ÿ’^©ëœÕo;öéÙ,1Öÿ‚£'‡¦]‚í%h›ØcPEþm—²ŒÍó‘È|ó—}?5¢=غaòÀ5­œ í—êÑìOK$ÖE†×¢Ä_6PiáËNƒ·A>?uqŸ-T¬|\>ìÿ4Ød4µ¡šZQtÔíȺ/NÛR+2Æ’ÝVú0ZÍ~ߺUrdá´ðy…vþ®¦É¯¼P¶:ךBôE‰_ÁƒŒµøj¶yùD²mÏ»@F§_ë*@̪ÔÍÎÌfPF; Êd>&B%Þ“Œþ‰$}{—aʱÜÄ1íž4Å85ù<4£#à…Y[;­CLªs>Ðpòò×ÕOeкª¯Yö±«æ;ìòcù¯•á˜yëŠ_úÞØ€~éˆF}LÖ jµ=o3µ°ºle®ìs®¼rOˆb±O8p‹?¬n_üžf“9.¦ÏüÍgâš%ÎÛ—Úr:šÈúÑó0å½¾„oa~R Áщújæ?¾Á™ÁÓ[’„c¨j>-•Ñ ¥•:½¯Ü¬ÚvÎaµ¹ôÒuþÒ›Dé;ª3ú¹ìՌў;ݵf¾™{»½‚XiÌgBîÃÝ¡ L—÷? S|gþµ³¿Ý¨:+vÈ}Å%GEˆ?¸ð™q^ºSNcÉ=» JYÄ‘N”·=N7°+ä·sŠ€t†+Lk2÷˜°˜¿ºüÂ|($îðãr×s”í([ã;÷ÄŒ–öu3ã7ûªØ–öÎ…€¬ZEÃ壹Þ9ÍLŽÇ"óo|6ü¹íù¯—›£Q©O)«²VƒH–(s[ÖËÁަUD×Ùèõ‘ÜóSn;¤IAsº.³™bf,"æ¼%ñ{èré™ï…u£2ýÞ¥‘„•=Î#À¾ßÃÝóÍþ̨&0Qz•õh*“»™L|RŸÐ}ÜZl‹j˜Û7Š=aKÊ`–šU£’2þùñÈõð›€è§$zTI¬n鵦ôyaRm˜ÜûVWš6èØ³â©í¦Eë@,¡gS/7úFä ¯†Ïᬮ;ÊZcÒwY>'ýî¯ýºù¼É™7bÍîjnè¶-›ZAt%ÒDÔ7Š #;.ÆÀÀå£ HÜ]Ô`)Ãú"ŽßùÆ@Üùc“ KHL±´Us™ÞÑúïØÏsaª½L‹E<ËZÏÒú@$ÕªêV'ÎOh¹ eW°’«ÖâÄ@d-éùÐIÈøé´ °S˜ËäÒ}¿¤mªGÎf(9·©;“tieÍŸ6Gi-‰æ’ÞGOâIsö ,ÔÐKý\hpÂD8ß&™o¶ÍTÇm“ØÝÂ=Q¾9þ6ð>B¯@o™8^>¥©! ùÿï¶=XáñM Îó—Ê)ÿ°ûý5!¼©¹ËžýT7ûœÆl\ò¯»ö »ÞÔÆ€å«5p ¶âˆRЭzØ5¯DŸŠdÀñ:ã’Xǹ}npK¿)„†häî#ƒ3ÈT±tìE¢%ÎTor¸þ¤Ów|ç\¹b‚Z%¥ßÌEóÐÿfYýާ«èú ›B”Þ¥]Në6Z½/“™žÉU»þ@;Ù¯ú¡tæ·ÙZ–ôu‹ŠÁf͵Ï2ô‹»¤{…s ÏzyêÖ†™zxt"&ˆj£sh¿1z3ƒk+OÔ]¢Ý§“N‚ÖOÅ-—½YÔsiOÆ£0¦T” r»¶‰ÛŽ~XšÙÁoQƒƒwâ d1ð­fо%Y̼Oh:&»AÇk¢E"±}ZÉ×pÌ™:Îí(BúØÑÒ¯³h]ø^4™*ÎȨ~ÅøD*€î”„%i†1ÕLLÀ„‡˜ ñ:i?{ÁM_»ú­ˆXO|Øiùù1fB“F˜TLaʦ/ƒ·a†BHÇ%uàÅÀÔ)ÓNÕOŸwŒñØçóÊ^tÜܰ•˜ zþTj«Å’õé¸RÆø?ÀÂ(Yý¡y2P^ÜR(×ÖHtF»(>¥fõú2äÜ}”³µŠôácZâ´r‡%F)¾Ë0FÃÑ *<Ö¢×þsø%•«I?ÔÙ~¬-’Ä80`ºÏwTz˜C Ï?Ô=.¢êÑH<Ï2ëÄÞÐO]‹_õ@/JÇåK6©j8s^ƒ~÷ü닊іÓO£âò_ aúèÒ¨ò*›Ä‘àT¾ÐŒ3Ÿ‰7Ë#¸þƒS²âÖ1G|£_*g)¹¦Oƒ§aÃÙÙÝnp_6¾žBÞŽ%æ”ô[#ð”é˲Û^¸¶~W$pv!£Z £øa„‹mýÓp—òGÚlV”M})ÂZÏ"Ü›X/ug¯Éô Õ±tñޏ $Õôš[¬u$&7¹ß-.­ó…#t»'•÷‚lÃCo£Z‚Vr€ãyvúê;–fÌHò_uñ¾ƒ‡d+Ì•)þ§ü¿ñÎQ¶íæ <Ð@d4Ly’Õu!TûuÅÆv Ç/¥K*]°Ü‰âׄ7Õ¥°#Ð…Hj—äG7˜¡ ç¯bô*­»íûíþ€÷ŽD–Útä.wŠFˆzžÅˆ»°“$G¿6X!5½æòÀ¦R—Í> Õ·³¢ƒ„­‚ÊWLO´LMÞL+x/Ñ ry§„óKñ‚zPý÷¯Ó¨pSðºjXý“ µw9æ˜Ìrû^)¿ úziÒç^ò«Æ/Ù÷|íÇ{ŒSݳ1 qÌe¨Ô±…Ø4Èô¥¨ÀÌΘTÞ’ÎY¶cÈAZQ”RKñR’\xv‹P¿Âó> sÂ[ªK;VO×r ¬%{½>]ô]«Q7 KaA%á¼-ÓŒc2KLÕihUµºþ7M¿ßÕãÅɽ"ž"ÆB ¦%y?ŽÌMØÖØ }áWúÜAùÑ`±FŽõ}OÊA>Ú/e\Q'‘ÃYÎP®¼“œçßðµÚ ƒüëKx³&Ë#àofgjgWD34—'ºu[;|¹Ðß )¢4°ßš.4KÃù)&QÎí„kdk&p´ÁL*µÉˆQOös“9Ô|Rqͽ9â0ÝŸ1¿<hßúÌ ÈQ‚½f˜Dš#ñÈcK<$žd`®‘Š: tJý¨×¤KÐ0ârE<á)dURDrÑâ!¸åøU+-ÖáGX–¦ÖLì{Soj° õ;¼Ò2©ŽR‹†ë)Äã§YxèôVƒ)¢Æ¤õ½½timžŸØÙÒÉà¸5¬úåõ‹ô>"À$¸"A7‹IgþÆ6¤ý¬À“:£Þ¢¿ ïhgî™zâÝá&ÜÝ­©ßµj‡ÂÊsÌI? ¤¹P‰d$2×e;ê·Ú á•©Ÿ° 1Lrˆ3í\áPãžßÉ脪eÂùLOÅŸ,9í·½ÿ4Z޲ݖ•ØÔ2Ý[,Œ­®jxMÃm¦Ðj£SXÙ1b“õ@ÅkƤZêm,÷²{„ÕSCëX;Óx5@xoy5¬"‚Õûí.8[Ëš7›¦mKO=XEs¨û€[+פ;*kü<‚†Kf†CͬFÉõ9 õuIî|×ô©M/ ôÞž-Y ÊC?“Êkê·•5÷éöÚš]{¤öæ1G/,Ó8´hÔ÷Xq(WíÛ€9Ѩ&­¦9£ÔóëÅ/çŽB¹àvûýâûr¶ËPÃHòƒQ©!?ÔU|7¥wÚ¥x°òÑs®#Ù£ÚÛ7t6¥ÊȤxaЪ=Úý‰+ì_Tys³{b´²Ø I¸Ab£­”–>±\IØUlA ¨{a’vEt»})üšf¿³ÝP:À_½§Oއ8JŸPs3 HðþÖlµç9o)ÜÇ~écyÚþ«k e5› ¾ã+Z0y Þœx¿*A.õ–Õêõ‡K<%3ÎKí’Ÿè°'Ä´£µÙ-Ù&ªIÁâŠoõ––ã"õ^ÚJqTzä㉥£6ᳺÀ ÊÙv)÷øLìã@JçÏ1ÓýIOEÖ«Êk½“â—¨ñgïl{[S¶®ËL,ö6Kš0«Ø`ÕÝ/ªby×#q Ô4º·îM¶š;%úŽÑÅš4ž1zí™\~ÑÈbUõxxÏò®c€ÍøŠÜ—ß½›z¯VVP1¯œ¥KŠÃ;ê*C'—+iÞH-½aÎÏOŒ<Šß¤»ž¾zyééèÐÝZvUÇa ª"K«Àjí÷*„ C4´ äia‰J:ÌÓƒ {¢#o¤îb–×âxDZ{oú°‡‰÷Q阱V‰ò°+‘Åwð©ß}L`Ip¹°(L‚qDˆY×mbeùìküÏ–“¸s¿¥Wê‰"´óëa³vÍÖ-c»«œÅMÆÜ¢Jl³Î*Ø«Co—Ò·N{…©b_@Øóµ5˜÷•ÄÁ ½Ÿ5EvÀQa»|æùRQóÛß1CäŒÞ®þ>5<äâEÚÇ;yK TOš³ ÆläæÃÎú±Œ}‡X¢*6ú∤5'ȇ$Scóì`{ Ã€z†ÏžMKßS؄ɨ¶†O`GË毚áw?½;°GƒÏ‚êÙ£–ô,?ß›ÓxØQ®D&0ôU C€À®íŒ9 †šãw¼Æ$Ñèé–Rûñ5ÊÙ¾æ˜f…vêb™ôÝóGÛS7ëò¾:¾%ŠzÄÌÂô蓾݈ oniZ²O½9RÉÓöM®ÁXpÿÕHsR¡Ò!ü¹êû\=ç‹Ô'eö °pÄÖÊe}½'/¸Ñ=Ó’èU¨eg8l&¿Ÿ\|—P»VôÓtìâÙO ‚#Ì Y©Àã¢vÜíÈr:ÖÅëÑ5ŒZè!tªæîÒw´Ò6Ê¡™Eð0&̙ҒÕ1|“3ùzèéC冱†!¹–¦›²šœ\Uþl·Àf{·à|˜Œ‡ƒÈ=«•àIƒ&ö:œ)Cæœ÷¢ÅüTd¥¥W¦òÔLææäKrÌÊÞW¦kN »Ã_-;j„=GºÎG܇¿¨KÑÞ¦O†ïáw¢'5œ ~ºÖUBÏ8Ëê’e¹ÔíˆÄž4Íž½´ax%²XôíÚ_ §C§mXV¥xvn_öx[ñê‘?¿”[ ΃ÆÔ´AS1{)@ Ñ|Û×}ÕZ½ˆƒYÃ$¯Hó•”C‚°"ÞFˆà$û¸ ©©÷ˆ+á'/(?> òª[Üá=Þ¡#8æ3w™ ”?ÄJZ˜¯èSnÐ'ËŒk<’L±Šî rà6w´_vί‘_õ´JêoÖ6*Á°Âüq]]6õ®>¯œË[ÀÙÁòâ¾7/Ï:Ú ™p!@¸s%Ùrà°$ äJ1fô=Éö#¢}Ü¥þèæAVkðhL¦½/M݇¤§ó ÉÄŠ ,T×áácêQái<*_Σ/)Ê.p°ÒæNü I 1··§ÙðR£#w+›§&=¼e¼Gf¢OfåtèºrErù;4èš”¡÷CÈÌê¸ ¸¼ÅŽ5hõD [“´®„&r2ŸXªrž¤ÍAÊk5õ™Ú~"¨Ùÿ`œ| endstream endobj 554 0 obj << /Length1 1632 /Length2 6616 /Length3 0 /Length 7555 /Filter /FlateDecode >> stream xÚmTu\”ëÖ¥A APA%†Néî–a˜r˜¡Cié’PºDº[ZA$¥CòϹ÷À½ßýñǰö³÷Úk¯ç}6 £¦‡i“G"œ8¸9"i ¬F8ª!H s¸µƒ3 òp@b ìdDÈ‚`"]+g€2àp ‰ðŠðx€@>L¢¾š³#Ø“à nþ??ÄÜܨ5Ä `³´Fsýé«„°@¸ùþŽCíÿ}æC9b:ØþÕý1ÓŠDÀÝP˜¦ÖWÛÁl4þˆüQ ø—êÿ—¶³†»ÿ¯ŠÿÎTrí!RK8 ÀñGñŸ µ£¼µ ªií±8¡0®üÖC@a(¸5¦‰t´þã ¦È÷_gºVÖ[ÌÑ ü÷Ñs˜µ¥•€M‰²ÃÿK ýoíŸþRÎ¥,'£¯¤ûô^Ó_©rj°ðð À(Øã>ñ<¹ÖIn˜f.NÒ S°wvz °@¢ˆÿ˜/Àà’úú ¸¤¯ €Kæ ¸dÿA‚@—üâp)\! ‹ê°¨ýƒ„0ušWˆÀ¥}…x\:WˆÀ¥{…0:õþAÂNð?ˆÃvt‚¡¬m¯R0rͯ0€ rU€¡† íì®(¸1Ÿ,ôÄ ûbœåúûÿ1ãϹƒ3þO„#ã3lw#Ì⊓aaíröÏ1Òu­“by btZ]©ÆX`ånoC\ËÀĬ¯AŒP›kc“í5ˆ±~ b<¹&–ãÀ3?¦ù”¯æÃtB8Û™ÿy¥–×`Þ òJ#†y­Š›3£ýÕ1¦‡=CÀaWfòqÿ+Šúù0ÃØc.yí^0{ƒëš_ÜQŽWšÿ ˜Ë5ø1éŽÖn× 0œWø1¬P°kW‚è䊼V€ñÁùê3ÂtpþóÊ!HÔõ)1κ\ƒ\¯ †ôšLW÷kãÇÕÐ&êoÿ¹4ÁÖ']w{Ì~¾Úaî+¬vBa61;ôÏWý×ßµÿAÿcÕHK#Ýž˜WÌÁÃ+€YZÜa¡—ÿ™ qFa®È鯵ÙXÿÆÖ˜­ ƒ¹Á Ä_Ç‘Ñ@›Ä”$§2šŒö^Yã/1^^žÅó¦}a%új‹Ï¯CZqg˜Î; Í6»Þ]˜³Ý'5$OaiüV.5ëÑÍС½-|ÁöŸÁs¿«Fv‰Üç©õråóâ°FÖ}³n =ärùLÔµœ"EL´%2ÐgÙæ‘ò…“:qá"‚Ôµ%?qåhmôÈŠÜŠ†Í—J£gZx}oúÓŠ yªgF},N@Æ\ˆQ)¬Õ¬õ{Èøh9‡J'hèµÁb7%œ(îë— Uõ#Nœi‰„²>.½¿CŽè²~Õ6OÂw¤[úŽqÍ´ó×hÆvå¶ókgï›øÜ•¨6M_ØB™×Ï.aw÷=êÚßße–·¸Ôî‚t¿C¿6¾þõÔÏQŽïºàóCÈÏ‚[Ÿ³&3Áù³´ÿä.ùŒÞ½8"fœrç³ÉÎݘ•î.oâ@YRöÒ‡~ŸÑÁÌn2ï/œ0¦§|t“¥Q¶oþÐõ!½ß]¹v ]Îì„LÎo¶®\g\|uË*º“’±ùx[ë`åÂŽ£Lés&7«‘Œ(€?Û0ŽúRó*èGÙg·¢»µ=Îú¦ …JÒ…€ïï.à?+÷ûdF|LÐ÷K„ ú©B ù§«~óh°èmß2,w: ª懗¯”˜7*@[ÇLW©•&PLû“#þwSùðÂJlC_ÃíædeS¹òdoòÂB„û HVš$ñ°cÂz8ÍœªD\º@IÀ1Tã;K-™»š\ù۟˽4Å[êŒpmò§ô7O<ÁA ÅýT¿Ò{æ¾X‹Ê+⊿¸au–¿ü“ßð ¢BóÆ„—ª­ûC¸ey »÷Æ»ØÔ÷€ßnÊ (Û’+>éL³ö3ƒFEÎì8öœ®HÛ>!|ˆPÖ >o8û…–lèahp„ò ‰òôÛAH©AD©,ˆ EßþÄvd¸c%=0ÿÖÒ\gø%#O.Åyƒm†2ëÉ®*æ"VB ögÞTúì÷q£λ¬ZN'e(Ï6Œ·¾®eÚÒª¥ÍtîÉê {eÈÞ=÷ÿnƒ9IÀ¯ÝoHl¿,{KÆÐ·¸§Š‡Ë÷‹Jh¼À¸W}ð$…玮qÁ…&Ôw-¿%z/üúŒÍÈAÒP ”¤RrƒÁaÏ.€ÚÿÑÓ£‰Uñ·i…<÷ɪ‚;ˆ _øGé b;f|â,]iû/žÁ›ˆ,6Ç»µõëƒ'×M¡7í¦}CäsbŸ†§1ŸUuóµG2šì^è©à­è¤‘³™%;§øÊâÉç@: ‡Zjd[aa'ë&ÃUfg67—òð{xî41û³¡ÙISÒÉ2êõÞ-xuع2Ïê.É,îvÌMú{+I1–Ë.»|7QÈo£:NmGóùì‚ Eí|8Kû—äöÒHèVÒz h¶=U_¾¼bSeâ\eQ ­†›¯³‰ÎgNŸËÏK”Š›ÆjWeb¿4X0=â£*çev꞊f>%¬jû‚†“V‘Ë<~…'~}4ZèîošßϪâS§YÞs ŽoD’á °1*-†%zGô|m®ê!åYÝ%Ž‘—+ûNÀUßoWºíࢺއ”[ Ô[^¢S½³àZaiNu­<øpŽ:À~ÖÔ0†É×–“·ùÄ<Ù0ñf1A?ù殚Jÿ\!9|"·ƒëjäÁó•I·ä¶š§¤î††ÈlWãœYa5šìáq Ϻ'´xc“šðžªï‰u¾jìNMvyJªoF‘ñ·ÛáËŸ¸–×$ßã;Ÿ$éõŸ{ËµÇÆÊÇ%|¹¬º4ÿðø=äçÿ’á4ÞÃû“+$<~¯F¸®p`×€(³b_ª~7øe› ›~ §ª#6ÁÝ2`Òî©aõ†öÒz¿OËŠü ñ­ÉrìŠyÍÆTV.{"m—-°*$»¦Šrõ:öO½UkÐÛ|R,ˆÝÐ8Ξƒm©qtlfGl™(;CÍÂÚýBœîYÝ4ùâ‰UxìɽÝÏ¿Æ.)Ù"Ï8_N8.dþX ¢v¡#Q“òUyƒ–v6ˆÖ6ÒÎÕV~A;3‰'ú]1ߪñ1 ½[éTM«¡˜\fÎmš=ÛØñÙ§„÷”ø‚8O£¼g/bZ^dC4¾žurõ|”WKËŽW±Ûg¤²ŠK¹øt§K±K(ÄÔ§v_hKñ÷Ö…vйн6‰ù0¤Ð+U ^ú¶BxŽì挩Û½µÂ°ïÖuX/o„ì³]¢!aV]‚¯8ØÐßN¤Ø2l5>Êñ‚¡Ñ ЀHʤ”;BÃ6Gb•dopÚ¹¿]Dð´Òä«^Ž’AL Aã}@¡»Áð†©UôÙXW­ ^~&‹ÎåÏN5»•(M¾üVËÄ{ÀÈïm{I®ãÀþŒSP$ùþGŽÿ²@ŒRyC Ü)#"‘UZE`£ì)¡€‰'‰³“’oÆû˜t\=Ö|¹a~?-eÏËÛÏŠz±q2/Õ¶•[ؤéT¥ð­±öË!i¨wmef÷|‚õö,b«!Ï]ÿïJ¼|yÁ?.”zz`påA<¬Q#Þ Ê·0ì}…ޤŒQ‰½M — ÚFë!ïñ7‹5ïl‡ÌœÅc4.¶Ÿ$šQæ<9N£½•$_¬î3¦ÕTü+;×]ësOê½n÷(­GÛXäk~8÷4òñíNó4Å”zK©BËVCjÛ³4ÃX¢ZÛd©ÂiÎîe]ÜYž‘{f˜É}âÓÎòU[}W#Åßl­Q$œOàiÖ+ÍgR>ñÃ;ÐÖð†_\ž&þ‹oK„2-µ‚#5•ã·¦K2žçÇ*љɄ‹ä&Ç !´WjL$pß6 ³íî]r³“ÚÔZ¬iVæÝûMüýBé€Ý#xÐÈ샗ålb’fHEl í|Qfý’P &ðÂëîh«¨.Ȥ¯Pžr¹—%{ke„?)úiÓ ª¡=–¤õ“æÄÝþHZ‘g—Ä©„ࢬç“çgö’º•˜`¡ÒQ°q+„B=Ô¡;®‰˜&Ÿa9n=løÞxDhu*£ÕV`îv‹_UרÚÉwr6•êâ<%Ãeíšcsë<±_J™¯?Ôí ='Ìû¶KØõv«Ù/‡9KY9=ÍŸœL;|$_áÁ á½,ÿVñ-®ro˜èÈ:T7 0zé2K8${H¿šýçµS»â*Ògi÷ÇÌ…i¨±·vë&Ûǘ Ð/æò«ÄÞ‰Ö-h—ù$Êwûò kr|1+K¯+e˜QúVüaŸé+î¾¼áÓ[-ä…àT÷#G±¬ßk÷¡¨¢d¬p—Lgsöß}úy£^R4‚ךäØêY.á !‡‡kÓ¥¢)q³ÿcýöð[·ß¾qy!CºûôÙò3ºfN©@6¢ž¶ƒm—úSD·³Æd²Œ‘'j¼{¼ªQUÞi¦ñ™enο¢ ƧŒGÊ$ð»oé\Z«EdùâVò.η t§˜ÎÈÔÖjà ê7pÁ“æJðÚŸŽ7ºÜò–X¥Y9ý² ³}ôEJ^œËmvvâåÊ%”¶𾉠µTÍP¢¤p›¶Êƒ¢7§Ó"X«ƒ×Ö›R‡šCœ¤ ;Á쵓šW氀ș†Y4%öàsa›ec´çái¢ÃЖ&¬ÒZÁèÌÖë0ô=©¦\Tj£ñõì€)‡ÞX±0õÍAk?w6ž´ö‘- ‚Ô1îî7ø=}„£ÔÒE+" ]–˃ ,%û”¬ŽCxpªKomŠQ†Ú… H5?Hä‘S}œâþb#Òöwœ#¼ Ú1yd©µãÜNO™€ûCÿ”èçw0]µÉ[/[»Ä]»eŽ…ñÁéƒËñ,ÙU¤^!´š°>ĵ½îÈ;Nï'²=ާ[f›Æ[±§ûž0´>”³¦¢'ñBÕ„NEÇ·dTTÖì@6Ô~á2že{Åãšy‹JÁÚi`®À^÷k€IÜÆ^Üg*Øm¡ }6)"µ‡ÉîX.ô£àª=×R®Jd[X]´‹X!`KqrµfM½”ØEsAܯñC“*žÅ`2›t#š°]ÊG¤÷”­Ž{w¼Ù¬Ò¤½G¿×5…ý~äy€sÒô†ŠÞs™[ÌÑzVß}’-ªw XÕÞÆÚÿhCSsA“g !þ \âÊDáÉ™Fsš G—­(dîÝŒiè×îDa—BtBDÎÁ¢A$¯»Áp© i}Qõj¦Ð(¼§âv^eÆ×iÎc÷¤–pô˜óDZMeJ5’J§A°œâx@<•Û¥![MMæ˜_N*þ!Ftý™´QÆ4¦&ô¶&Ð{Ù8ŠVê2OvVaÿ89šFŽCÒ\•²@v&ª˜Ë~¹¼yÞ)‹núPZ¼ÏSzEý¬Á ‰÷œÿ¶^Ê\ø-òsÝBü 'aÓxøJêò/¼—ßwØO©A¾é5Ñ¥ÈÒÀsÜdY«5v¬ÍïHœõìàu:ïsšh.š˜Þñ¢M¶÷>º„¹s£>ª¥$4MvZÒÈTAÞ“„çÛûaªNŒª¨^êTâSok(Áÿ±ôF#9¶YóAœ—Ÿä/l­£ï¨šEæÁ8Þ=8±|ß9‚íó½ÄX¨T‘ÇlŒ,N²s¨«HÎUnöM%¨h£Ö?H•lÎ!†cv&ÏúƒŠ ‹‚-eÍÂ(*éc.Ukú¶hÉó§Ì–÷vØÅîЋƒ‘ ¼0C¯‰´,SMËQ“"v(uÙü²›×lÓ0+bR[ÂÌ[:¬ÍKQH†ÏÉF7a&¼ºvë{)ø\,«bœÀiv« ¸¹D0ôØùô°?PwŸjà Cû“Wah<û³–üÓ†e$Ö@qbŸ+ =nÈý÷þÊ1y!7“F¤_ý¶* àn·ÓB";ÓŠÔùsÈf`UÛl"?Ç-óæ%±Þ»nÖ“±?ï H*sÖ¾m÷ZcLÓq)ê¼¥PQÐê¸v*šy@CL…½V„äÍŠdã¦óûJ»Ð(ª“ÅhðZWœíyd%)®¥E(Á„Ò0ïåJN@É¥½ÀY6Ö_G“DêW^¢%ã¼ü+ó@3ñM¥ÖØ?éŒd‡ÎXû¨E¾™“àO˜®&óN|š89SñpˆÒ Œ FéÒçPh\à¸FFÉùªl†Sr²Ÿq`#g©??ÊOžS'ÛŽS_Û¡ZC10—šl†ig¶ÄjŠ‚ qj·yRÂ-T7`ßOþ“z¬«é{‰%œˇ¿çº¤6$ –ï*ï˜î·ò,é'·‹s™¿j Ié(©S°É Ö¿{{Bâ:™³CˆE÷Ð|“aòµé¼ÃÝ™³¦^éiޒ󶋇ý4LéBcwÓ‹0¹Ž¼'ZlÄç–mÆq%;[]?“’Æ——å± »ü¾k.¾8U=ÉBSzOð¹wêy ´„øåÛÐZ/¬}CxÜ«(ÎòÞð!¢¼w«”õ[‘u ýÑ' y Ž9Cíýæœ×ÀÞRY±æÑClA‚•%ɽüQÞe6ëÔž$]ìL"5´ãbŠÞÅ\äï·S/ yr\4õÛúGbŽIë[ èÓ7:Æ”¢ˆLoÚñˆ@Ôhë½ÕCkÕâmÛÙ Yܹ@eôR¡H޲‡/? )!Š&áIF¤þŽS~¿‚Ë'ͲpóÊhR Y  +í¬8 e[¦Âí¥ êÞç,!65ê§?3ë>桉Lݤþ‰ ñs©ã…<˜¿C!£ÞÆ…ºˆøÊ´ê—^@Ü)“î]lxEH"Vƒk 5°Q{\eñ1ý¶)LdúuØp>õ{…ùƒëÖ9m!`@1£SE¢¿ æ»âëKr%FmÆÚÈÒÊ ‡ïñ”KaGïÆïä=Î@eþì~ù¾ÇoÇ WÂêyÑ‚…ÐqLt;ŠRÁý@ Þ¹ÜrÏH¶‘…Â=è‹xd]7š´íóǶÝÊÖ‹¸î^øWGÆ–¸àøqÈO»¦®A Çv*ÖÂPà‰=c+ ;ß~­“ŒU‘¦Vùa ß‚ÓC3ç¾:SÊ›ÜÑë<%ªÚÍP´üLˆ3é’q$GCò«¹‡ùŠÙkY‰¿%[áf³µfêÕ—é7;Å)cšŽ¯«ÅÅǵcsGs.ƒ%ŒÊ[w|[cÊ[Èx^¾E^\<@ñ(”‘$Q¢Mhdþ•¥Ð„ÎÓgÌþO¾»ly}Í Ф8/ÁïëÖÓPÍ…GË“Ñ(oïg>S+ÓéxS‚Gsjó›ȹÍ!^Á8¶ÕÖÃbWôÆb"hDãiülª« Ù½!ÇýÓׯé&`æ!Ž¡Ï¥¥¤ŽÇŠ~˜•¸FÄÈž+ûZ®N* ç7³°$vÎMùG&¢=T˜â?Þ¦hi¥W}-ø¥/gêãÍÕ ”&vØCÅ_L¹²éèÀ#Š»¿É ú»Y~Ó£öVr|šIÕ–Äyï6ß«"®®à‚ñÕA·[˜Å(†ßÍuè> Mi¾ uÕÏ©*+ 1”º4’|oª©•}xé`‚ó›åž¡0Ë”háàä*‰Tò.KÎñ¦J”.ó~Ø=_)é+}¬¶a1v_+‚ ù%V¦×Œm`NøgÚàþÒØ“¤~hqç&Ÿ¬V³U?l-MÍO–ªÐ0o|Þ`láé!ì:P^0Uúpð%Í0{.®q4ÙíÚ¹šàTñ'¡=uöüŠó¥ô,“o³È;lôôÕIãK V¿˜¢µ8>é ȯ>l;÷,#ž òuª½»W::Ÿ;Ò° H¤’økh“%„Õï­{›Ìœƒ(­þrÛC‰H‡-Ø#îgÙ1½ ˜šëÿØ’ÌRŒõÿ¨ÄÖÙ endstream endobj 556 0 obj << /Length1 3063 /Length2 24921 /Length3 0 /Length 26633 /Filter /FlateDecode >> stream xÚ´¶uXÕÛö=,)¥tצ¤»»»;¤6°éîNéîîîiéî’”I‘úmϹ÷è¹ß÷ß÷ásÍkαÖgQ(©Ò ›Ø%lmœè™˜xròª†6ŽÌLô*@3g+C …¨ÐÐ dk#fèäp:™À¡`&&n €$Ðè^4¹äN†jîv@f•á_@ÉÖщÞÈм ´1Ù©Á!¢¶vî 3s§_9Xééeú-Â14¶´uu´ mL2 ò [W° ²µÍ ­L¶¦5 @]U\E ©¢¨®¤JÍN¬êlggëð.¢ªjê’t1a5qPƒ ©®ªöë·ÐÌߌ  ^ÿUìø+\^\MXM[Iœ™ñ×Ì ƒ#èWÙÿáöÌ ð›8ÔÔÁÖú¯*s'';FFWWW3gG'[3;«¿ø©™ƒ®¶–ð_ ð¯Æ8Û˜€Ûédü;Á¯¡ä@Æ@G௠ۿ­Á­íNÿ7ÂéWN«¿ÝŽ@à¿Ê˜:þ+§¤$°6Ù8m mŒÁŽN†NÎŽƒ¿là@Ê¿ ¢Î¿jÈÿwÉáŸ2ÿ¥.b Þ™®•§·¡ëÿNÌÐÆÙÑãÞü{ÛÆ¶6Ž G'Ç¿3¦ +à/öŽ¿f²ùË&/¬ -!®ªF/ž ½¼-¸;6 NnNyÿÊ',&Çàbâ0s³˜À"·1µµ¶³vDøÕ>1¸ON¶îŒÿG×–6¶®6žÿ×n ²11ýÕyg;Fu½3PZì?Þ`Âo›Ð ÀÚ€nÆæŒ¿Êý¥–_fæ_fp¼=ílí¦†VŽ@o)üÁÓÑÐprpz{þ¹ðo„ÀÌ 0;…>,e—¶1µpÿm3ùïÒ$@õ×A¥ŸR[+w€ ÐQÁÖ ,ªÿÎÙÿÔ’p¶²R0´RýoKÿ×ÏÐdåþ/ÏÿñÐþâJ¥`ë`mhõ?k G ÐD ädlþwcÿ¶K;‚µ/lcfå/“ú¯ãdÖ-øîýººôÌlÿ³–¤±¥ ÐÑÀöw܆ÿ! îý/ºFm -Qu-Úÿ£™¿ÜÄmŒmM@6fv€¡ƒƒ¡;X,ììOf°¦M€n)ÀÈ`cëØ9;yLm~M“ƒÀ(üËô7â0ŠüFœFÑ߈ À(öqÅÿAœLF‰ßˆÀ(ù±¥~#V£ôoÄ`”ùÀ\d#0¹ßÌEþ7sQøÀ\ÿA\`.J¿˜‹òoæ¢ò¹¨þF`.j¿˜‹úoæ¢ñ¹hþF`.Z¿˜‹ö?ˆÌEç7ÇþƒXXÀ†&  |'ýaó04søu\ÿkcýåim>q¿NË?éÀV£3 x7F†ÆàkÝÔé3ûÌŸÄ‚™ÿ6[þåÏÍúýÀ3þ±ƒkÛZÅý_ Û/‹µõï 23woò—ü½'°ZÿªÀÌöŸCGóß2ûcïlhõGð Mÿؘ—)èwZÖ_ðÞ1³‚³šþŽgÿnëìðGBpˆÙ¼‘ߨÀí3w·3Úüá¶þ€àXüÁS¶ü‚;õ'{0]ëßLîwfvp¨ øvø=xp%gk£_w­Ù ˜Ám±ý-6ðl €ØÀ¬lÿºØÀåmÿ(ÀÌ n‡Ýïe0;Cðç÷_š`cþõߊ`³kò¯Á?®Ù@¶ÌÌÎþ÷D!g ã_7ã?>¿âìmþG¥ÌÌàaü1*fp?~o†¼G 5èßBdÿåtùc`ìà$Ž ·ß$ÁÄ­þ”33¸þï²ìà ;™;ÿP+¸1N®¶€s8ÿÁSvù‚™¹þ¡Qp´ÛœÞýÇoràL@‡¿Kýû‹ ôëEô×Çžé÷'â?OÅ¿°ª“ƒ­%Pd~&ÿá"o>Ënï™À_jf°üóßÿéý«ÅïGÆÑ""¶nžôlà=г‚ÕËÌÆÊüklÞÿŠ5þûÕö×+|†ÿ‹=™@ ÐayÁÖ˜7È"¹)¤ÔG<ª †‚›á¤K@K&z9mªG,g›(Xàßâ—þ®ÀVNŠGÏ'ÑߦH‹"Óêy£5¡ròÚDYhÇÐGÞÿ­¸ðh¶ƒz@ºü’_Y)õ¡Lvžv1ÛLz[l@}ôH”»£û>’eâõ2‰T·¬m-Ƶp޹ÃÁ Ím ¯iªÂéå#ú“a¯ð2ͬA^Ö¨ ¬]O7ú.ħBÁ‡¥vìÓ0XQÝ™<Ï'ÔqÕ¡—!ǺÍåjjq–¯ÞX­¹’e T³ÚÿøDš#Ž¡¬?rš7™Fö¢0“ÈÒ1·Ü¯aªº†xŸ®UÕ€ñô¸†Ø0š½ÉtÀq“"8»í‡5JÀ€rsb‚Û¾IüuDâ‰áÛÖM:¬¥Á6ðNg–øá˜™Ï….ášH-̶JF/º=j¯ñ»èR~³GOkRÕÏcýÒÌ`UHÛýYCkŸ2÷“¤Væï,õ ñ®}î·½ƇŒ vÄ{¿j~ï-ïþÞÝzèêó¦ë|¹CmKïï¸^Úe4x‘bQu¸uædïEã'åT©ß~ Í¤"ºbѺ7ž.0˜Šì†CóÙ·ê’M)#m­´lFÿ! §ÿ$Ðݡ䆹‰’Ö—…ˆF†¼° Ùß”QŽÈê<'d_’æžö³B`1ú ƒHGçÉð¦ÃÌc'Ýì–aµPÚ#U¢"íæVùgÕ rY„S_Ù4µÉ¼¼ùÌmÌ–ÆÐ±úýÀDzĩï*ö–—,úß̰Úuõ ¼*Q/p+ßs›0f¨ò%Y4v[êhlà.ÔËp³¢²ëš.d!:˜M埽ª°L¢ Äâ…Ô:jlÄò)#ÂI1ïìpºœi£;8“Õ†v,ÜfuAS5eç‰ð·,ªrvA]% ?o]ú"eÞ¹}®o¤hÆŽÌî«eqX¡â=òèåÎßÊy®ž=¼«ž`IÊQ‹ÍrR~/a“a@W Ò3'ð/dh:Nzù%ž-ÄmÞw`Õ\‡¨z?=Šiüa/ЮªCõ”³( •}”^dPçØbú‰‚+ÚË6ºÙ²5òýkÏòk>–ÔòËÝE¢ÌÑ+Zà!tŽÄsPð¥‘+]Q«Ð»\:•nª“l¥=^åumoÍ&‚¤ÊÖ¢}ëIk®t¶/ä³Úð%mq¸S˜H\|ì9–^NÍ©DÄöÊ9»åiÍš˜ëªûX£³bÞö²GÛöÈù¢…‰)Œ­ÝôØÒkÆâN0ì™ý+òÌã\QÅsÝ+zôâŸïj_°CeŠÇŒà¹¯Ú ËD€M‘˜?%©Z0Ýê3R2Ì×¼[ä­‹™â.‰¡ïp^e¶iu+þÜ=mÑ.½ÏÓÌOë=ŠóSÕ>ç-´Ìm }õZÑ™#E‰*Ž%&b²¡7î£'[‡‘¾¹Ìr†¥J Bº…R«‡‹Ð3¨ŠúÛµ³O¦2~ýK30ef÷œ¬u”¢H7Jš5$Ñ F»ZÓæ±›9ˆ©ðB‡ÞØ«Ó`º¨áÓIHŒýÃ"dœéxòÃËf«×¬.”§z ðT‹i»ŸY… GÞODŸ”Ò‡ò°çŒŽ ³›/¼jð&¼sƒÕÐ[ˆé Á¤ü.‚;k\ƒ¢[1wí‰ ‹ð†ºBÔâj\\<'Öc „¡E€¿KWC1ÿIHž ³‘²$tfÅöyË$^Ý­iìZàWè:½B¥"íYÅ~[¾ðÖÓxõî8!5&q@¢’›Ž9ßûÉ l½¢E'ž®™ÕÉsÚUC¯#eUc\Ñz&ãYK.—µå„ôöŸI‹®u—8³uQgºï9¬íª‘áÙÐ)Åã ÓØfM•ß$ÄC%MÚK¦ç’l+Ó^`1;í¬b¯çú@pÝã(šˆ \ŸXËÇ8H;YX7Å®qä#´á¤_Át5„«‘ŽØˆ*|¸¢ŠvHYÄÅ1¾†tTéðJB›µ§DJ YšeE]ø¼˜†S© wÐè´Qœ\ÕT?cÅ{€®^J2~ƒ©0KZ[XrNóÅ›­IÈ™´œU˜hDþcðû G9Ù[þØÓ.Ÿª—VeQ†Õww®ÔNO_/¸2˘«%(ÓIßÛ1VúεùòEõ,ƒð%žP‹pok°Ë½üü÷æ<*æ*]/ÑbMßÈHÕbÏÏÕ&˜‰d²d}ïÏ—¼Tˉע1¥È)ˆéÿ¼Ð÷uUÖS±lzòªû¨„XuÝ¥m} F&—òú¶Óa°3ª…fß‘kls ÑJU{cì€ìù¶9ñUJ~õœ5©p IâHߎs®‚ž-ÏT¬™Wï® ÍPˆÒʼn’O¦À>à†Í,Œ­€ƒ¾É/¬‰Ùcr,Hâèt˜&UBƒ&Q/ä¸)¡KYÅ£ÉQ²VHåܸ—¦/œ4Œ^^±åY ;Ùlõm­D0ïdj7®IUªê,9ë‚™¤”¥»à§WV+g‹ñÆTJ•<övxËjÜQ@  ”ø|]«¬ˆJ½1[&ïyYKlh^Ôwæ]j bºëcÂBþÙP—ú¯ïÃ1Ôcñ*n¼ê>üȈàìÜÉ--† IM[‹J‘ïô!­j·ÐÂ.K¥”¿×$AB¯üÙwÈ%Fcîòm‰Yóf¢2ôý-2&ïêÕž€2ôªx@°æ/ôiߺ tt{zDˆç9.–ᾞ{žt÷d'LpŠ5’ž¸sÀaNsþñ \‰SteC5¬}ÓùuCÕ‘×€ÆMv&T÷iÿÌI1%d»79^©³Â ·8ùЃ&Ó®GãÛUûŒÖ@ÞoóÚóe)öµTfŽ‚ªÄ·†ý-Ç‚úñæ'îÕÞQ¼?Y@d¼>Žj®<4r³Õb(¬øDOuИÉ%…®LÆ7?e3®™:>ŽDô>)DCYzD!Æs’‘XÁp)çf @X&;޽²õVÍó?,êÌö,Z/ê—lW)ö&ø¦·æÂÕ}–Yƒ†Y€0ú—Íô\”Ï _È¢¼{g·v÷p©ü¢$![ÞUyGã[Ï÷j[èýÈŽÁ'¾ÒH+,ÞÜÓ5ûº‰~žëèqš{X ü¶Þ2h³œq,QØå5P?#ÃX¨e´îñåLôµmÀ ¡¶þÈü2fu91é¬ #8ê!õç¨1f*D; Œ÷–ò+vJ·ÙYCT×t¶™ó°OdQûOÙ¥/ëÜ›>ÄÐi ûŸo‰ÙOÆwÌEãg:Ä4׃ESÚRª«†ŠÀQ¤>)HtÖ‡à}’¹ÖF¼œõYÙ8¥ZüîDSíÓ±1'uÑé¶EýQUö­ Œ‰@x ”õËVñ5â·ã·ó󤇫™h4Ð ä"bä/MÈÑx”m’em^vs”Ñò»ª9¸vÅŠ>8V-+)wöµ{hñÁ‰‰V^·;*ËtÜ´¸©æg.Çm…’;ì`ýOP±Üõ¥šŒŽ»«°yAeJl#dóû¯+'• _…ë–£ ecu¾'E¡ÍfŽuØñc#€°0Éò ç$€âÛFn¯m~]ŒÑŒ`¹SË©*üÙ’1©guFl*˜"ƒ €—ñòy3ÉÄ> ñfûk}y oàxz9ÁžëY2­>„Ù(¬šªmg¹ã¸î†{„ƒºÖ—fa6bòƒ>îïND×ÔȽfï'nŸLßk¡íÎ֟¦¡¿•îùt=yo+¯¹ò€EmŸ´}ùmޏL—ZfÑHÞµ<Ž•5@qÁæêGÔ%mPæ…¢8§\ûÀ^Ã5Rû0Å 2ºÝ]‡¨¾›wO]³H‘{› ‰:ä,Rdê7ÌšáK¯ÒÊëÞ’ùmÏW×\u†ö>38•ñh™v¯¤—-Åw«äE<ùý×Ã>Y†¸i!ÜÃT×I¹ê|ÿA Ÿ cóó ´¿ã ]ýÙˆ³•<ù£Ú2éM:¾Ï‰O5ü3 =¯ê\êàuíÚ@b?ÅÛéhƒOƒ:XyìLFaÉŸ¢ºÇ(¶ª$æðDÆ!c±üâjŽaSR‹¸¦Óì_Ó$jÔ2Õ]ÌéÔr@ôVSæhâ´ ‡\ªQï†Å¦:hÛ‘1¡ž@–‚¯!ÒCÑ‹·<‘µß™áæ.X‡Zw j’Ž$~*¯äà’ÅŸ(ÀLܳ!\|uÿ>x“³Ÿì eºç8¢Ï€ª£NRµ¥`¹Loйƒó,û8A¤Ii-eÌ?~ì›IRÏ2!PôÕjb3•ë:±â5nv‰ŠYÉþD0Ì;êÆ4Ëò?‚¦#¥yUQY»nÈ`1 ,ß /6Ù_@Ö±µkFjñµ>8)‘63´oZâKL¢·èÏf.œe‹t¡xø±ˆð81 ’›*ý>$ž¬x>“e,i.V‡H”Ê”ÖÙOR˱lNô9¦CNêûr­û$ƒ×[¥-wß`­wG­ïrTB¾àÐÞ,ë ¿Ïx‰ÍyÅ™©j²ZbÀ/yl°\¥•¼Mi“'ËâÆË•äÖˆ¾u9/@ÞL8÷} ]ŠNê C£×xfôît_ïH­ôÔ¹äÇOÁD§GLM‡_ï~Nñø}ðF…ã%æˆØ9UEØzŸÐÙ#4ëIëRÿc ¬‡‡A²¢ñ}d—Æ0–1­¬î5µ¢à UÿXl^ëml ¼¿ƒÍ¢[ö l¸²* q_u¯›1ú]í¦ÇnSLU;Á«½´Ô28­èÏdS#qNñ½}ÙÒƒÇn~ÙøxW¶u,À’6_ú|àUßCQeÕ#ŽTµ¨†‘mÅg>>× ßŒ|®â¶Â½5ç‹Is8²KìëûµLØ{ÝöJ‰uõH‹1BÝ¿µÅ¢v«ùëg©=Ñ×­söÓÚ2Ø f¶ ÎÎ×.h6˜T§ÞØ Ææɸ»)ƒ4¾ˆ›œNx:ßשqã8[# kIà}Êl ¼¥¡—²ã(Þõ©¸¬Uߥg ÛÆ«‡…@vˆfò_.ÞÄba”SF)Ͱ’qGBÕÖ‹»;oš½-±)‰½À]pœ&'\/|*õX‚‡$$Ê…H§N‚Ú%#œÞ’ÙÚQdëx1Pï}3é×iC51~5Ú`C%†5χ€Ü¨ ~9ðºÆò6­Í¼UZó4Õ–ççψèE&ÏÏV¢ó®Š8¹•(¥8^,Ë„’FŸP$b…غ…m¢­–Š¥¿ :k¸G‘ !nð‹?8¨H<ÙN›~aßšpßõ¤y“Ë;y°B¤Bˆë¥ ß›uLen½Y'ÆÚ¹Œ_ü6U›ºn@Ö*§ ©Î°8ÿÒ-Ù£”Ié$Q#EtÀ¯ýÓ]«"½U€öÐŽ’wÑK§·2RÖ=²dœ #ô€šIÁäŒgõNJ¨b[Tn7‚Ö€—NËÇö¼âsavg}ôrKç£+®æ6«dÿP$'4 ó‡[Ó™ÛÞüœ5V ,V}ïUéE/G‰=FïÕs&t›É‘Ý Xí*ÕLc9@Jk9À¤Zа©:ª’»6É’SµÏgR¤ØíiÏNŒ¥&[ÌÞLîÁ\,9?HÖ‘žK.ŽãD9 WW’^½bfÃϼùÆrÃJgh$XÁæ­µÇa,B„ˆ®±8$xý©`õ,€"Ò÷m|fYS­9µîw\â§ :Çg±IyÕõ§ñwcœ¢y$Hµ‡°ü¼M#êœå_z9æ|ŸUû²®6”ßÀ\à''¨ R!hýh/G³/Å|0å~E(Z]>ä"n Zp!ŸJâƒ>]b™àHræ=ÄM÷©o‡ô×>Ê º6¸aTßÒæÀŠ‘Ë”¼1µ±8áè‹~Þ ÷ºFvÓn£¥›l‘œí–CŸ…åàÛĬë§:¶ ódëÇ)à–ö\»ÅÞúâîlÃ\Ý9òÀ’ŒÒ[¼ ÝAŠŽ­OÅ?F©%é#¼Ê‰jô¼Q\†"«N^ø¯IòtEc(ùrÀyGí¶ ÔC]Y› žøs0Qm®e¦å[°ù©Än(ÛáyÛ[=¯—&B™ëb™è3îd ý,DÏúIô8 &ÎÆS aÞÈ «ÙÊBã¶$J ™fWK…EÏõDûÄ4)„ÃFžmÀíâˆÏc³‘s­ðAßОßT^ŽÁJæø»…v´ÞèÂ<„6Ôe¤Þ1ÝS‚¢È°‚II{¾¼44ÕBæA¨µøÑßã²HÄL~Í9Ø9”•x½Ñúp”ßùÈS²‰Ì¯2~6c* !S…—=©nÃYýLð$ác]tÝ®v~¥‘÷¥Kszú&òG©—0^sM'úºèå„/: ¨™eÙ~p|éŠâ!£ÌGº º$@W7Ä“Û[ø@„fÌŸrvŽß_é¾è\µ£Á$ð3Y†Èö‹[‹PÇGé¾§`yühWÕãYÖܽñõ ½ZšãŸxìðw¬ e·ÖüRÚoé(»µc mÐÂLûçÝ+>a‡+­péy6 ¨H¦)u¨t€v j®^rèå@IŠÎŒÍIIÊäÕÁ:—“?θDm¼Ìû#ò"™IÔ<ŠU±ªŽÑI2‹¬­·$J`ž7<Å #Œ«÷RúNsuÛe|ÒÉ7P *E;9÷ìŽÑÚÛCã¡F„¸ö@{™‘_ail\¯<”¾á¡X”BwŸ9%þ,àÔ|~æ Â3‡€l´ÓFj¦îŽ®ºùœåÛ´;M¼o 'çïP|w¶{E ˆÎf"vÜ\ÌmÆ[ß2mw‘…«ùÿ¥Ö~!1óîůN®â%Äk0߿ƽ7ç:•({AiÞk ܽÓ,ª‘‘§å{¡ÏgR¬Ý²R²º€ ˆòU­S€7/VÏ“ü C¥_ƒèl.¤[Î/W\ê˜0a(†€*¿T”T¼ÆJ:ïÔ] µ¦Ùd4ô–¶sÝl 1Y™p2 ø5Bä%RÖŒ¿¦{ü‡ìª´™Ø'Ú«¸™!C3ÉùÙÖ‰ 墙†§oGûÚi¦~$Xs®ôleíEL[÷ó9‡kÎû’ )ÍçXÓ!Ù„;ZPãri,œ €OZ‰z¹õh•ìÁБb¯,¹jvp¸ßá >‡EÕKwáâŽqê¢åÖX:äeM®ô7ž=ÙØR‰'¯¡`].*1Ä>9±o ñ ç|sLLGæõjµÃ&îir‹Òªñ…"Í|Ô·?§¶´Fƒ8ùd!jênö]<G;Нmký¢r¹Œÿ‡]óf ³—*WV{e3< †ØÏ’DK^S½6YËùÅòj_8OkL¸®UYÄC!Ä̱k‘¦ïGˆ»Ðç³ìÂ9ßmJ¡¶Ž0(.åCµm lq‹ÛsÓñ¡ç‹ÓÅõt:3Z šlâ`ÙR>üt8äbñœB”Àkù`òÓÚ)~gÛ4¶dl„aǤF-¤)w3åï¤ë-Ébè•2‡¾ø°áA¸e…í‰ö1~jƒ¤ØõL´ÛYŒ…³øZ¨½‡üž5¶Õ\h­;í2|±0å!î…!Z:¢Ò§{ulÒ1m >ªon×J‚.h@Âs”L‘èÏM›Þc_[…æ~°æúJÝ×<öXØ£±ë‘A„œ)GyÜ¢Jòü´,õŒël£vv_ï¿55ãxl¥ïô¥ÖÿíÖ@#ýøš>² ÿL¹’„– éúé'ÙþXè«ÁÄ' $åT¬ÞB/jøË}¡û8?Š©/ þx×ÑÀ|K¨Ôüw_ =AºÍÍBof0û“ðeoViû`-òȵ¨iû_‚Ö#C}ß„Œé š©Š;_è] Í-¹­KåÕ” /æÜŸ„SÈ7ï}Å]–” èŒê2#4Èç·ä°bЖPE¤cÈçê“ĤzPo½›ò0ú×§„yF?ä)OŒôi’Ô[N°Þ_é%°té̳n.øñ8¨lõÌœièfqçõ~È{@¸œYéÇ}Å¥™ ®DÙ:bãþ‚ØóžÜGPëMòX–Â,B¹Ÿ±¥¶î8¬LÕ$3ÚÉB?oíœ3±¦2¥ôäFÄs06Æ57ËÙ¶°¦U|òWUñºd8ò~М”Ëì-É7Üy3ïš}9¥MÛµkP:uu,ÚÒíà—Â/†ôÍOoÜœ*Vå¥X¡zœ H«Ñ3b&|#‘èÔ¨Œp«x¾©&BA³ÅG^åŸ ¼z§kæO¾`Zßþ¨6šY!ü½Yê鹺$%LµüsM{ÊÑlc¥VçOÞŸLXõ:‹dMë¥ìzÒÊi12ÂW!d– ¼^þ°b%{ %2¯dF ‹’«U¦žÙ¹¡aJ§­B&楉 ÏQYd>1Óu¦Þ?fÍ@Ðm<í'el4J"|ßTTèŠÝ—ªkŠ-œ Üo]%{|/ú±/®·$´o yFv?:Ûˆî$æúk6Å’sݦÓºØà®]}<¡çâæZë†ÔfÁÀãó ·:ý†r÷pM§i\‰‰lñ”¶tú}M1ÕT´Ð‡]›‘ñ•L]’ -ÉÏKŒoCŒÑ–¿¢m¾YJ èÕfžtÂÏpjPâx mã}ë EÂ(„õ;Òö%R yr¿5è_Ç㮤‡‹ÉÁâæ%S认ê0µ`È "ØŠ%…°&”áp#o/Ðp¾¶ Q¼ä¸f¬‰A¬ª+£ôç#êeN³äÉ›/;¾Ê•¥áø)Q¦ÛÉ¿Ô3®/ðž9±Zk3Ѭ„¡ä=áª}.ÀØþùÌ inÃãݽ¬¯Ì+;#!cÏŒÏÐfûQtx˜øKÔæ5µ:ЏÅû89~ÞB Õ.Y_×øCò¾Ïb—{1ÜÊŸ32kRt&Ø -Ç(»Þh©ô—»C<ËÜÂnÃRqfVW^Én¿ó2 *šŸmΞ#O˜Ÿií9õgä›8Áÿì~À¹ÞbTÎüñ ¶iU.¥‚¥¡´«7.£nÕi"ÂÞÜ ÖꌪQöxÐ?Ðo‡S‰I:téÕ 9ÔUé`-Ôk&h2?ÄZ~–èu·ZÝÇñ8–!¬¥¬ˆ"RŸÌ0*ægÚSjPˆ4z ÍÕVØu8Î ÎK ÏäÑ; /o3z+…JÂ_bû‡+~’ôdÕß‘@ð!ÜÃ"¬§n¨¤7hiskIÏ•¼ ã›ûM½Š ĉxdxt+ìø²é“2îz¾¤Š7nÚŽò<œ?Î#µ`EsÄí’)„CÞà Ûl·î|."zÍΪm: µˆxÉRvK#Ü>ÙÁW`tk-¡ñ*³—¼ŸsX€*&üT̳A²w>ÛÕOŒóðÉšVÜÇ ñ-Á™3ŽÚ^À@œ .]@aÙH%q •!ÿ¤ÄìkmÔM:_§> ‰%ëEÁÇ~'Á苨5B ™ÒuèO¡Á^—ÔœÎñÕÅ-N¢ÊŠs´ ¹·}ú>¡ó…!üñ.ò½ÂþøÜhWu£BGÏÌ•t[;¸TÒýÜhu¯) F¸ŠF•Ämu;ofeáÆ)rÍ,›&m¦MB†A"•@ÚØ—/¹ÒjñÉdßù`SáßuâÚWò 9.ÐÜÛ ùYÔ™iá°“L;½WÞ9(…WN™$Ò £^Æò8©ˆZá,ÝZ›áÝÆ\IÜD‡½²XßÞå\«,M^8{PØëd´Ñÿ.~Ùº`ˆÎ<¸Ê€“å6<Â2Yß"/N‹o?–ª]}.Òà~_¼1kÙuDpIS‘5ǤÍKuT,>OÄñÒÌ•£?Ÿæ Pâíé38r¬'!“ÙÒŸ%×ùQ^:¡ø$áõ ò©gŸzáéÍmÕ†8ýF&ß&³t8ÜဋD´Ð¿¥r[o©JC¯j×(!&1W-x°[DìÐhìŠÉo_òÎuD¹‘ö+2‰*9óUík›«È‹$Žƒ€ Çq ^¬v›‡Ë›Å‚õ<¾µXßœ½ej2 ûÊ|QÊû(#Ô¾Û¤•O?$U+¼œE^ `ÓYnøZs?b³5ó#2þ;´yø­"V´%D)³o…Ê ú‘žiQ7Œžyè·xû™nÜŠº79×S0ÜqD¡Ú?òùØÊ¹:D˜u šÙgP ”)?Hé`û…‡Ö•Â&ªøâ]Í´º{Äna“…vÿÍê{‡J※8žõkÆ’»6_gN†{ÎscJfL>ÖÖ™ƒ¾‹­ÖŬ¸é`,p±"8å Ã)è8 ƒ?Zò «9ÔæJ£º!ÿjú‚9b¸ôK©(`xŒíʼö™Ýb¬x½™áʾEYæ€6n¡L-üÖÄäÛˆe/DOÅròåv]µ6m4Í[®îàFŠì(—Ÿì¼\”¥ïUå霧Ãtm|ñ‹I¥N/‘.xê׿¡öø,ì~ÀùaG+yRría‘M¼%éõž`æÚ=ú Õò­Ô/°ÄV°fFZDdœ%®î# Ú#^1Þ¿¤s8åy騿iÁýö¬¶Z¥"#IôPÚ.#J=…±¶KVFe¥ ¯õk)UIö9²Ÿ²DÏ÷µ\´¦ñRPðDÞþ4²Ž2< ù8ÐÍç©vaÄŽjp]GÉ¢7);tJ¯+žÒúL¦Ŧi7°‡ra?ˆfºàø+û‹˜)ÒUia(ˆêlṉ¾)#óÄó‚ Pf‰Ï6;/”N•£é" …ª²UÚj3¸™Øm¿S¤7ªî]¾7 ¾MÈü扷_#ÅBç9ÄÕÍ…SÖF ?¿ðô<v7·F¯Ù uMœuþÐy â¸èG?'u¯E3@*b<÷¬C3Ë%öšŸŒžú{¯Áµ|#v'ˆ—šDÒAÐ×I=£×èÁúÞ÷[³¼³oÌg¾£08~¼AØÔÝñ:d˜ôti ;ÍSþ©“'ù‘"þ’™ó²«›N&#DÖj2Ø[ÐTò˜"(Èp+4¯­›€Î­¨Î˜#ìCé“12ƒ§›'ÞÕãÿĹ6AÕ™Ø0_ äånNŸPH~w÷#áý¼Jh¹ÈÉSøþpÅÝ0tuwV"Á$"šjaÜ'N‰"~#Ë2Ød),½ØÇTÙº#ÙŠ:T—£’ ƒ°†öòZ¡",›é.£ŽÌb!ä¼å!3ý¨øñÏ /ŒX´KC¹³8®„D5]WÏÙ·ø’:W !o‰\/f0` éÏÚJ]>SÑÒ_½9¥ÃQw;9ð „b5`y™-!ðP”áo‡ª©4'r]> xï)sq*æ@;÷3Ÿ m5Ð7MîÁÛWâ/D®–(£1Ô9I0zi³ùïa÷Σ•ìBÍs,éI†Ïݺ߹aöGÄÔ[£s¿¬@··"ƒËÎ;ù:0GÁÛ‘4 “XÌŒüw¹Gغú åîÒšö”šÒœtðn”Pý<êÔ§¾]8#›ã®?­~:¸¿Þ‰› ¼†” }Ò{ãˆ.ï÷Ð?y=@ â{ôCvê㣡öÕíípÄÛ¨i‚ºzéIÈÝ ÜóZcåO€ÊnÖLýÌ,¿­ÞöžHŽô¡Òü%]ÂZˆæ-Þ9t>Ñ„%žˆ£¬y¿z„󟞇؈Â#ÒX5–™m•¶Cê,»ìú܃íqÁN¾€©ÔZ˾+¡Ôi¶7”ý’2O}>Âüq ß>–Ùó®˜aSJÍì=±a‡âX¨8uê@ 8cý.¦»ˆáÄ–Z[Æ ‹†Ýn¦¯«O[?ôÎ!b Dg¿¯·Mº…d—?S3Äà'$Óôh†k·ÜŒ ªTOz]¾7¾]:«T‚õæprA¾­6M°š¥Sóñ[æù,{«rØ}cŸèwG‹²õI¬[ Ö„v«º›lÖgò fi #©r…ö`0“NÆFDCqV KjŇæ¹ç}άB§[ãçx¥â-ö~×È£h±ö5Iܦ®CRšiž”ÙéŒ"”Ó ‡{Â.BDÂæZúÌî(é0]8µ™[ïªK$Ô .…MͳN”ÛÊ×E j(îm3Ì8ÙtÝŸ“ŒkI}#ü-í¢¤?zùuòE) ¯˜h ¨ÏË(Yx Jf±©)Ë×_­&`)wìÇ]³ÑKH7æaNhiƒRÛ"\ÓªçÖ˜%OŒw°öÇΈko]™€”í£¾—¦¸ UljœÉ-ÝÛXçN_ݲ"Ò;(±Oi_¬ªÉ&Y¥Ðƒ)S·ŽöU«äE¿Ô½*¹ ‡Úý€Õ~Ù{ÙsyR éû1¾qtbM-ݺÄÛÜëÉ«:i×x%âV%¥äXØÿj‰ì''ûR¨E Ž"rüð¼Jf²•ÎÆö"R™çXš¢£IÂe¨:Aà÷—!gJÄá:oÊh.vu<´O]Ÿ¥ÙIê$ýèÎåÌq(ý¹f •.{ñ•O‡çÕ…Â{ ”wÌʧ?9…ó5Í‹©(÷Aá·¬‹qßø¡h“<î;òrâ_°±Í“7 êÀqe–Q‚o\örb .ÿ‚7)%ï § -kÜäí?pÜ¢œn>Àv}:9üÈ=V¶–­a*ð,¶)Á°üàá´v€ k{d÷(­ ÿ¾ð#‹_àÒ¼Bûsf(¢U0ÁT]gOôWO±fàdïØ€:?Ë,Ên9ÿýïsÏ”è£9Œ÷vZäYãÁðT3šôï^1›uŸcPL>³½OVXMõ5°#z…“_Íø|ó&?í|bq1z¿–ïûí_¬^è‘Ò¹1ä¢íT¸FºŒÅªƒwSI†„·¦A˜~Ê{vŸ¡¡]ï†sRTðõ¦FuÓ½; ×3PŸ£¿1U¬§pvК¥`k*OžCâq‚zå«°OÒöSe„4ÿÀÿÙýçèØ¸ŠOœ‘m ϳìÏ ’B)\ý¶3ĉÞWE|Ðß#^IE:bžë8È«UùF³}Í=Àp¤•"WÒ ¢Ÿ÷ïÇi¼&Š‘—,~úI{f?ˆf:7što©­¥Èr‘ø4v·v4&ƒ2º†æ6Ù?ÿÐ9O"Uþ~a\ Ö¬¿BÈža)Ô,°Ò…<@(rèýM«ÆÒÒ¥¦„9Ô¦zˆÐâãoÅ(ú5I J˜¾{éÚª¤å Yo½°¿ÛçÑ\¯‰ÆñLùVƒ*<: |©rêXZ(õˆ ÃY\¥ hzÝ\•Çl²ú¸, 5Ží×@õ¬I÷#Ùå›Þ³È5¿äÀræQ¹µ=Ûo-·Œ˜aq"FÙX·‹òn˜È¥‚?aNØØº'·q _ M¾Ÿ¤à<ú—º[ŽÑB˜sJä×ÅÅ™É!Ͳ¬{ã`öDxãÌ:;àCØQÓ‘Ï–¿`Z‹Íi®öã6¿Â€9™GËãôô3¬ôëÝÀH²ÏÝ¿,»À¶ IÚlÜ;ûÙ»—Wøºº¢gvÁ#- ‹¦h±W~n´»|éG`¶z»#qí}Há>½”­¼#ÚkL_ëãœ27{=²7DaMnMEÖHÛãê˜øó9øF͈ —ƒ7"¹µÅ´ù6yx-¶?qb‘P˜ÂIH7]5xÔ|Ï"ìJ›|5k‹ŠúxÓ‹?ÁQ»Ø­ÿAOKN¤íèx½¥) ³€5œ²^„çámûÊûÙ\Vä·Íi:@¥•Ç^Ôã5Õ°ƒsçá…&Ö‹vÈ=o‘¯,k8<6®(eàj÷©$(qC8\ïr·dÕ¸K¹ È ³ÌiýšPë¼ïl2D—²EèJ”Ðá662”ß¹‚6O¬HâkgÌæÔ?ºè´Gp½©*–n_P9Oy6”‚£I ÒÕÛ5iAÒø¸ù6‹ÏwEŽëz…æªòB±Äþ©uC”c‰ ø£Ã¾½¦ƒ™“ùÄ3 X[èÃX×Û¨ )qOþ£èû2áƒÃ–âsâO¯ÜqœHw¾>GF<±Ãª¢¹ÓT¦1™mÕôˆÏžWæðCÛJÞy©Êì¢gHŽäxlUÁUGãI÷6úŸ¾Ý§b{Ú×7CMù¢ µÿæƒ˜Ø ùîëÍhÅ·É–y[ÒÜŠ?¥ƒÏYD8Ý]°·û  ) ,5ص™îê«'ÌOÎ*œ}hœùQ½ýó:æîg‘²á'n¹'ÌKÇéµP$LD©´PÙ:Sôš»ìØw§ ®õ†ÎüãsÔaàTŠË°}wã9ÄÒCJxº¦¼ÖçjL0Ù¥³ì9¡}L@9‚ÃÀó}|s7ÊÍøjË›a·*45%¦Õ+ô€ ŒÑ"V°Þ½:š3E> û6ïkÞû /E]aÏÕØžp2Óõüæ¶Qãë~Ë‘Ù);!áæ\ïô˜2y//¬ŒSè¤ûHgáƒÕú²KËðS܉z)†ð ¡ ÍÇ^¢,¸Õ  Bû›õ`Ev“n'ªjÓ£w”ÂíúVŒ¼¼Ž¶jFã¦ð å1Ä<ßš¢£Þèï ‹Sj9ÖOËßY-/kX-dC¶šzzÌrª'ªÈ“öi5³z¢û²ÈÛý°†¶{=Þ}x£ˆ`åéwRŽqt—©LBÄ­:î± Ùzœ¤Â®::Sf®X3–#Š»ï6`]‘ªà^¦ß›tµ@§W?Bj³[6'SÒP]©íB“i5w·ÜJL1VÃJ£Óדâ€Ã—ïENžð2É-¢ZjúìÜV+ëïµ]É£¾çQCD: |‘Psx¶"Dç‘x¢ô¤þhõm|Mè36ñz—…Ûk—&÷™sÛB–Mîýú ÏÒÅ!fú?#˜|.#ò©tðÚ_Ô8r½ÌFRÆ/£™×š ìK‚/ °yõ¹ h1¯-‚w ™Ý• }uo–MÎX¤ëKQ‘šæ¨ß]¦vÊ+Üè1|M<0•Da`;ŸzK²}I÷â³²V©$&¬Ì¢ó¼;ú~ÚGà„’Š´]4̓4¡´¾19ýyHׇó¸¨AÞ [(øME!-I­½¯¨âkf ÝøêÙ@PÇ”çÒÉ+傳[Ã’çx4gË"Ï5ËÚÑZFÛÊÑdR—œ«&ɶg·­í¾Àû!ƒ{ðUï­!<ßÉàk‘åÃä.T~Ñê0¢èqU1æ˜*ØÆ\ürÀÜ@Ô% À> &64“¡ý å·Mo±$ º²Æ7°áòãC%çNoRýfŠD8±h°¥õxá·ÂÈt“Ü*gÜ’VÂd*Ȥ6‹„ ˯uÝ‚®Z"û"yg7óø_iàÔ[1? Ýû–Ê ED;]ÏÆ~+õÿ¡!”ÌýQ'Uû‘5‘ ƒÓé‘tbu“åÃ~WÞH#|2KÑ·mcö•7äe—^D%SÂeX80Ì .¼l¤Ëwµ8;?v cËHò.—ݘFa"ÌT‰(»'¿ø,$<_ÇÍÛåeÁ²Ób&úäK­”úmÏ?6;àÜS¬£g„Bà=,gàÄ H¶Û0oG¡z‡¦¾^ã\L8r¸ÌHnE`VïfhEhK × d Œ2 lB`ò…oã``9ê±e‡ådÂŒ^ǦûÂöœUÔI¢ô5ªkJ*¿øÔbÇëîÐëÇü6ëˆË9 БÌDÍÝj•¿w§´Òª¬ó$mßBÑ anøÑbžÈ)ÀñNáÊ"…ôx^u·$RI{)«á©¸ÏøxTL ‡4ß?M0{N£˜4âÍ«Í<†bôyBË?CÑCÆFgc"Á¡ržórÝ;-Ì­ÝÝ^GKë‘!`=¿éwA©âV°!L ÒìM5ÿBÜáWš¦ÐŸ;åÜ_}ø¥( £š…ŒÊÀ>Äþ„JäJNìÕº’µä婾Zã`·6ÅÀ.Ÿ†í#•*hˆ_ÓóÝœ¤Ìw“X«i‘ÌN ­¦Êä†8dÉÁ©·K™-¢ªïßv‰=;–2-J÷« éY Ž_Ò]Ò<§~ÙªB…n„§^iýaî£/î]5Üž‰t`b˜/2êd´à×Kv^éHºüñö…ÑÌþÒ}ñÝüwZ±ÐjÑm!‚§× ˜Ñ¼×›~„’( Œ=‰öFýXÓn]©zŒïϽX°dQ“í²Ç>f"=x¹ÁƘªÒsô}€ ‡k"Ÿ`|«—^ÅôTAë€"oW·ÓÈ¢¿ê@&'mÒbù½×pòèEâKºMÄd¸öÄ^Åàm{N›ôò˜ž¹¹W²ÁÅ’’˜ˆÖ9Pt‚5"ÙWAªÆQÙÍ*öqmòêBy¥ —`ñ4 UÔJ© \-;÷]Î\]ðÖz ^2³é­¯’̲¦ôÜ©Yç“ö³ð´ç=þO™P£ëÆu© ‰/!€ïEÁÀ'o|4j8÷<,,è1ûJ¦âнšá1Ä[HŸÃ-NIèÅlÕà³ÌL0vôœÙ¡æ£jé&ütK6­¯‡G†¶.†á±’mú0xs—  ¼y˵”(8Vsö&‹O3 áÑô6dg¥ÂòBº´-Ý€b9U:^eTþgÕÁ¦¤kx9iØëôãÇ®™ˆ.o ìZ8vâ²oûÙ( xèdV)w xî ¸ýô?õàÅ2$RHZºÌ# ›Ìsžîjæ®\±ë„ü|¤½Ñhø/•Ø—ÿ‰¿…6–3Õâ{«§¸&ª¶€5‰á«Rá¾d!k†V,¬«CG‰%/[L櫉ÚOi™çNª|ƒ>D[ ˆ0Ökmfpl_œ„¿úG«ìÐùsæZ¹Ðð«$PUâàæSo]Lñ- a>&6 OE Ìu‘5Ÿ;î¤ÜrVr笸ÉOj³5!ÿä²ÖàxEÐ2ì3;®[“1Ù÷‘ðZÍ>¶ò3Ê9yN%òýóùF ôüP•ãÐ8ÞKclöŽ]+ôiqÁlÎ/*ûËeú^_çn;„ÃVügG«{~O‹Ú8!A^d^P-wI…ŒfIãË«‡ªzÂýk× ŸÆâžï‘Ñ­+áŸg”äïQR«Yç] ‹£§5Ñ (£+¿Dp* ë–¼ ޹¡?´_iÒøZÀ3Œ™¾ø¶1Th­¿-EŽ ¥$$nî’á‘exA'ú˜¹ås즒4’WõD°dѪϙǸ¢TD›i;ÂHCQšÂVy?Ï×-‘¦;aBß ã°žc½^ª8YÏé™Q'>©nv‘ÞºŽ6½¶9¬Øo 5A‡â¦-Ù¶•´q­p••gŽãË«È D“®€(8;Fˆ·&%*Ó> Eü\ÑêÒ*òòÐ…5èwêÎR52ßyíQ´$Æ[+êŸ f,[RwìBÓU}„”G¼L¥égåk¢6ƒðnÂák‚Kë!¥?p§©s/ð\ˆöpHèêšómF›'+ãH«’ÐÜ­c¹`ÒäÐf£`Ç®¾÷Æ·ßú_ =앚û˜¤…g²Q#¸Á­€¼/”NÖýÂñG‚”Ϲ:§¬ŽhS‡ \'dR‡ç§Ã¶ êÒó–mU<‰‹O—Ž¢û§o¿Ã0üp”ž ßwµ‘’ùÜ%t ¹‹e˜OV á»[Ê·ÌÃ—É  ‹:E‡9§+,r÷ÎLÓŽ#‘c曼°ŽdgDÙ~”~§öÅŲxâ­¡NO5`¬E8#[a‰œ£¬.{a¸î!¸Ì)˜æø(‰€cv¹IPB2¨ØzÞƒ±â¸ÎÚuMO7)÷PÈæÊlM¬3šoÅ›&ocÄf“´n—F–&ÔÕv¡›G—`$´"…&ÉÆÆxÏÿÆÆÝAÇ4nÙº"°ó*TëÎÖUô>®\ÒæCÐu:!’»­ffMå-¦.V>&hýÇ`ØŠ‡Àà ±.åK b¶bªõk†Ð‡s¼ô[V~šv¥ÚOÝA{›)ky±­?ã÷ï<nc½ã‹33²)ý% í6DÉÂ2Œ½¾Xc~—“…{L«Aš0]&„ÛjŽax¸…üE° ÏÔëx¤åR¿´Š‡i“In@+ÅEhðÔvÖíãÿqL÷CÌžæâîÍÊÓ#"YŸæû²÷õX‡Ð͸¤ NS¼Ã‚§Ã-¯É»Rè-ö¾%UN¸‡Xõit×?HªÌnX½¿ \‰ŸºÉ ^ãèø )g¨­øŒ{‡Ÿ÷ذ51`¯‘àÆ{®$õ0h¨né•-6eV¼÷… ”8ªÜåûýõnÏf[Ä\DQ‘˜öÂÀ€oÛ“0AÌ~À^hý@ká§¾^eÿ¸„%ÚbN:œ'V³>±Nûó¡ÐDšç¼JëVŽÂêŒ3¯ ÔkmIúøOAŨ2ïü„¸Ãä:®†ü_Žpñ¦,ººÄÓEg(ìN¹TŠ4j ½#V;,ì Š¶1·åq(´ ÿ_õ% Úõ±ë$óìj”YbuÍ+Rê(òQYM rB}·Kÿª§Õi¹Çúˆpwn¢ü«l›]Á™,é0î)ò‡³Ì¢h wäBÑhšê÷vÎEtËöŸÜ–¢rK3l@ ΗÓ8Jú\ Îñ3Ý)L/®ÐÞ`f‚Ý\Dú9“Óà±Âÿd-h†.Æ ßç>ùgÛ=à䯉¸¨Š¨‘* v5ý8áÕ ¸õRµ]Uå–xÔI ýî”]UJÓÑ~fáõ#GÆãÏ/½&*!}J ¹‚Éܯ‰¬9ôœ]ÿÊM°úÔL®ö5% ûTíÙW÷.}š½Aۉī g}ñïÔR„j´(6ëôz7Û"ÕÐG‹k E¬×CGèy0É_2}J·“î1Èx2JÌ‹åIS¢„ȈЪG(¡‡Sªß‰ô¹­¶®Pq-@4eEÙ„šò9â¤ö?nf1ÞÒ/Ïe7Êq+èÿT'¤æpX‹p:óîc]"d$“¯¥ô´¹_LÈ=“¯Þ9J•ú&¡=Iää»Ïh Úú¯©Á™º7le¿>6ÕQ% @ÆßÊ0l3q&[C…“•ø3Ï,ýÊšü §÷þ„ Y®óãB‡¾nÊ&ZÛ*|T5“z 7µñ¼8ãT™êZœºXÌ­,wس(¦=WâÈ1vGä ÉÆ&¶]’íˆãAuV"XjšÜm”ýÞ.mךl¾u¬i/ rZ$¼¢lS ¸ˆ¸é ÁÆHa@×,m:´ñ=kfƬ7;QáN«ÿº( Ø& Ú×v²ø1MÿµF|„ÔC˘y‹ ÑNtVןV8=«ð ›pMÐ*¨÷¾Ìä_àÃC”Q9œEà—çQ,©…9–ün–Yìƒ dªdsJ`yM"æ³e7—8ö-?ë—Ô¬Ìè¨Ä~ÞDÑA Ø” ×.ËUûŒ¤;ëa.oÃÜõ"îC€¶ôušV>ù÷º ˆdÒWôS¬¾Xüð„ÅrÀKôiItŒc,9qõR††ÁAöb®%»&V…šýY,f³4³M öuôö¤æÑl³ 騒.«Y%·±Rá[=}vUlaÓ´¶°ûö3âÆz"4lñU“˜ÂçkqÂ*ÖZzˆ¥ Ð;“¹^ÞÔ”"™Ý-Y}¥†°Ž¥›ÞŸ‰2!F(œóÝÝŽýôÎï˜ÖaI:bÇ›1\Õd•w1wlnRÙù¦­î³µièHýëR67bûœw‘ö…ÿ¬xj¾«€”'ÓÉ$g.A†JÃp‚fQ³ÙMqqœs³ Ü‘ôöLD)¦©;á4I”ü7¤³îÙÅ}vå‚íºûªØeuqXܪýš%â`ð± ×2ñ·ÇŵŒù&¡æ1JËÐbø ²Yl3~æžž"< ÝæÔ,¯f%…Ëå "¬Vjÿº…wl—ŠgÔ—f‘d$·LnJuýº!mtïœ2^X ÓÉï‚l,«è~%v\îê?\›©e·†A´5ÅwÑG݉Eñó&Ôò6Ƹü`}’ÚœÆ)ÉÀ0áŠBÄ}ÐúãR˜qNÄQ«X²¹š£uØ™åøú' ®°o@V;*dà 4R¬£u²loj2»¯š"bÞÔÏÜÆÙ®ÝpðÐþ¹>h­ ñ— H‰PxˆëÞ½ÂCrõn¾ñΠ¶jeÈc_MJã3Þó𶘷Š5Âcµ5³a¡ ÍL«÷ä‹Mñ+´ÈeÊ+Âpääø ‹n¢ wýÜðÝ\”‹£}èåOqúÅ„BoSJ?œJx̱œÚŽÄÒ uøûæ°ÖMy b3i`È + ÔO•Y<|R3ャ¶Çg…ň…Á*l ‡HA²äèÇqQ¿ýhÝEÄ‘;l-L9;•Ñ/ÉôÓoV?J)ˆö8IT=šÍ bÒˆP¬·ƒä"~þ÷ö2¢@+ áÄæŸ–…«óeqà ³ô„·÷Iøå^áËdÙîM4Ý‹¢I”R(áJ8Ÿ’1æóÜ`Ú6£Ww῟ә{àqr`.ÑÆ3ÈØ[£|0°o\—OŠPîã?ÆéÈÌš +h6¬vÀ«¤nÝRL³4Y$ù£§ê;—ýÛ°'™€U2!k´ º…ÈûÚ¿ÝòiV¬¶g8”(YÄòN¯6)ˆ ×­b•ÚP%²HPÐ`bµ²ÛˆÀ&›¼›†_©‡†èMÕîû*÷?$R$üþ»t¬-lÛB—WÒÂçd/‰ÆrÇ{S·mÕ2‹Çðßv_­ÄÙxå“¥ø8œ”*|ážÇ»èå·ª,ô?¢«Žä!;ÅÂiRY”Hêw˜,ÞxP1UЫð}µ®Yw©j€äœi•b­ƒ6eìŒëKwíòÊ ‰/•TŸÙ:é­Ãš ¯ -šúåçHŒ½{m)‰n³èÊYБWV„WÊß ywybB扃 xP‰#ûJùÊŠÆíGlõæÁ(£¿“ðVjYß%­$fLš'êJXO”$ó¯d¦ð©ÎzÄûxœu1üË¥8b´ídÍGI¶"@þò/M‚F‰h…먚è’×Ìš¢¹÷˜<÷mf9·œ¸ACû²Hªd<ß)HIÓÂñßàÍäa iCjª¯}V®O Ë‰Ð¾Ïð\Éøä¿È¬+(°dMÎ Äðëb4˜øÖøw„ïwà¸ðÇIòަmiº^AÂ?„ýuË6ò< ê\U­'Œ¨ÕQÉx« Uц‚Sj{J·¹ žJY§%’åÁ‚Ëáô.s›d…G;AO̤ÕÁô¸!I&…–4ã;¬uÜJ Énm÷¡ß¨46‚>dVNж¢nn­Ñúrx–6Z¿C§R –Œ\˜ç¯$Ïø¨0ޤ@Íg¹0A âësÔçÕs jˆ€oFa°®$ó &#Q¹;oØûºFõNš´úN¡pCæQÓ”²Y_æ®;‰ø~^•d¼‚„ÔNZ5[·ùކÛþäËxhÃóãói0ÍŒ30‘‹ëÙbù®×ÒÕ|1dv;°ÙÊz!}¾›R~G“ôî­¹›±û_8àõ‘é5ÖŠÚO«]×öel| œ¸‡˜+f‡D˜ PÎé6ÚððhÛßR3áWG”‹­Ï¨ ‰Ws•/Lüõ×a WŒân5d½æð(†{œñ³¡~D*Õâ2oàñR‹MNÆ%äüR†ß‰Ÿ1JR;^œ!ÃÂøqD+)ëÎ_Iùü6¦œºkn®<Ç›FP),0옄˜ãÜ —PcËÂ’˜ X¶í›ˆO”•Kžnf•G4!‘a'W«íàç¡ßNEÛ³}§gºà‚v•’)†<ÌÛå*á1µ'ZÂTPbº[c ×2~T­0®F¸®D Í¢;'F%Ri¹ÍL)Ç” ~èÌ”ÕYbrtÕn ßÞ_g«öŸ Ú7サI54ÌW¾/¼RÝÀíèõA;üšQɆMrp¶¯y<Љ}ˆ@§z«ßts[béów\®ÚÞX Û)™òní2Ãsa?.xŒVë ò--%¨[ͺg†MF.+,“ѧX ZÑ£˜bª2޹œsØÊo˜`{ÁNÚ;ϱú´†þ{Âä1î?a†øW²û/@;ìú¡U8Rp9¬t¼WbÓr ý«óq&t€Û9ØHJ$=F¥šË÷ì>< _ .Ã4"É­Þ:C;¿t?7^¸Õo'ŒwÍ©ÇúÖFìÔ›¢Hžokôص߶׈Ùõ5÷®§î?‚÷GzóÖøvÕãK¸d®3@ÏêP7UtæÍÁØUCç̵Úmà`1¤‡Z¤ÕØvÜEü*ƒ¶X8¦Ãñ©-,»hŠ}áôË˺Kn2mÁÁ)ÉÒÔ†ËØàC¨iñf¦¹,ÙáZ/Û].¹’r!À ÔÙ±<¢÷ ÝO–·¹ÏÛzÜnÏ÷ ÝnÙ=”,ö^iÏøÒ>Æè­åóolÕwm]±·M?È}ߤQ.ó…mPÒ!}PtÆm‚*sœ†…f£åße÷·Ö'g™ õÎmP¯î¹ Òƒyäþ RŠã’ýuõÐ yóȉ-¡ÙåÓ-W4ëS¨ åc4 ÁQ·¯$‹ßXýÐþ*%^^šúUDÍó]Tøа­7ÊXβ]61:¦o¡à£Ìá¿Þ#N’¥eþ(–T¸!yŽfU¾ÐçÖì¾Gäÿcä7”ÅUðgˇbb"R†ýOÔïË@’öÞmçä!òÐÔ÷iµÍ9î.þDÌáë_ÃË€åK/éEšòÝ.)Wöô8?w–•É©iÞX¾É¦ûÅ¿7›³l ã ÙµæC(à³CÚU)»R®Ñ©uÒÇzžKvhŸoÅDýÔ¦XaÁNôî®`ªCfÂà ã³©0<É'f>D6Sc“¾å>ðÑùÈåà/ÜÚvÇ ™%ÀåÑ‚L5‹âPŠ]*¸ ˆ7ím;AÌ€ã«ÍÕ+ãûYtn^œ» ªt(‚ºkŠïJLÒ±û}è³}×9õ‰e&äíxr’ZEÝUQ¶ÛVXÚ¤{‡‡]¯¶Â81QD—ïè*‹c–ø^ÛóxRêB¨%}ý|¿¿pχÍׇÉ4§È¦ŸÇ4@Dzr¢þ¸Ùø5Ýq "Ò÷´ǼęýÓöT BPÏj˜fþÛ9ÃìZ1,_s1ä>æ¡Ûib‡Í²; »¾iˆÐzÖ^cþâ°RQO‡ÒO¹°89›Šæ‹¥ ø`r ~&7┹yjº3A`"•_P7n± ° øš¢Ÿ”œîá”aûwðJ;ï¤Ëx(Ôz2¿é¶j<Ü*.‘É»³¹þÕ9Ìöãp³‰«šV~œþ—Ÿõ ]YŸ˜H¥#UÊÉËÑóC̘ê`xÏ}²Ú§ ªûJ×ÑÕ¶«ÙÜÕ)T’~>nØÈV6*í³,Ù:~LÚê:ÑáðºûÂúü¤yžÝòk”~c6XÅ›mù9îÙ•nóš€ÎaÍ\í-ߪ£RþªœÐ¯v¨ŒD@bs””šeÔúŽ}åÐ¥NÎ>ñÊú?/uÄ Š(>3+^0·2m}ÞýE—ùú`c«ydËÞ_š’ç?‚5=ø¿C¯ºïæL¿™9aèA²q9B!Ãñ‡'a˜úbS01ê•ÇŽ&¸áÉ8±œ2²1ƒè«U \“ª‡"Ч©¾Žž§mÛ–t—¿T¼vŒ ´5¤6ŒÛØvWüÀ›åÞubŒFÊÄ"|öâÁ[ÛZ¶ªÊIp7¯nN[„l«±Ž'^°Ïh …BN.ÖÀÜ©fÄÍP2/4&­²më¤É>ÓÇÉwvt{rDu û•þ¶YMNn¾F;ö,RÝTt{9ÓÐ~X‘oó£¤d'ØQbŽW˜i¡1+­¯ÔØ ÃbAÂZ*\i2Äk‚fD -ÒŸ|jï-§ýOie_¾“ <·¸Š+ôiy‹Nà#°±É’Q=ظ¾ÂæÏt…;“®Y=äUæŸøni”CìuÕÊcÿ±¿ÝÿJØ™Ò}‹Y—7Üiˆ©è#¼ éóÅ©7ìïéF¨¨$´ßNhi6†²äм¤Àªà½ÜD£}n²|¡©w€•mzY<]>°ì¨$ï]q¸úZ°º$TšÒÓ/”TÁ«YX“L§x!¬é«N*­÷òöL<ö©µ}½§ t ëø„$²Ý¶lH¦/×=ðh®)Ñò\>ó`ìh¥¡ÍŠÓ ãNf9ìvjý¶0ÆÊgnýN†~‚H“qWDù’°…~qdž2] °W polúÑ jÍ´ï̪¹Ú׃ƒ¥t;À«Ah…ò¡ô;þŒrPŸiø3Œï¸ †Áò÷á/îq¶Ô¹lø?ÿY›9’s¤oÎ_2h÷ûäNö¨±ð66O-QcŠ ãËTÀ1ñ*#,+ÜéªçOY^·¥n¾Üô‚þâ·,b¤úËöšü¥‚DüQ•[ê×#­Å„²ë·‚Sæøúz–]@LNJM Ÿ~¯÷S219Ë `†ÎÇøí|b>ù¤`£í$ý9P º*,|®‡¡Èž}Ií*ô4n¥-U:TWl+a8ÇÑžûn‹½\;9 • – ‹ã2û sûŒäÑÿ£¹BÞÓU ˜Â&‘ö¨›Ô­èjÙÞ÷"ð¹3÷ä=Ñîªc+QÁºÿ›‰Œ§¿ì8ZbÆ5Éj þðñ!á|ò09`ŸVô²H-F[X×.–÷*!‰FÜx G8ïÎØ’ÜkÒ¼È+M¨¬’öwc9¤ËP£WÊ|gë #CX²ðÃÆ…>ß "Í»ò_!ìgaPØ]V<<f¯Ñz²(¶Ÿ¼°åÝ}øüKšT3§ b_™\ÆxvfÊ‚ ×Ì+­îš˜§\0ßLzëºÙhpÓ”Òž©åóP¸ï… >M|k®¹ß‰-êŽI¡ï뚊=woÅ„÷z\Ò]¼y^¿Í÷íë¥@üàb´$ÞU²wÈw!yQ:ü²¡bSSRÂ-Sº»¯ ÇçJ†_X§CðLÐF®3j€Á?£»Ú\·þy¦bvf_aÈtØk+}+•¡fºT·h?ʶäHY‚ê¼áx¨Y²·¾G÷8„nüOP3 HÛÕPôÓ¨_ëžæ[Ë>hýÃ8²¢íŸ¸äv>äzÊóX;Ïí)¯€½Ñ¡Ò—Ñ—>aíúŸô¦1ÁÞÛÞ E8ça´Ç‘wqg*ØÎÎ9c˜]\øQ0‰õâÎÉ¿Tê Ñs.²íƘ xPšŠðOw&÷ÅÅãùñKãÒ¾9Ú’Ñ_¢·Ñ{v“Æû'‹ÇPþü[afg÷l/»QoÝsÉ›â]þR1?"C ö¿&(˜Žh­ÆÖÒ–Ú3[G8dp°¢š ØX{¢ dAS’ÓÐ.%ˆÄKt°e$Ü¿Ð'J‡tŸk§0Kd„é_~àG\ÖiH‹ž)–ü=…X`5 Õ›Û)ÜÄÉù5 N`X–7O†úÿhP†œ°°rI %ÍÐñ Á°Hƒ÷¼-{yiö©‘Pdçîi5ç©y,ŸQúÂoò‚ …¥B¡°íbNH:îƒßAoxáSžúîÔîôDN½ú°nÕT=”h¤šÃÛùSYç¾üÒ²¬­#ݘãÚsl:sjEuýzÑ—îq†å+e‡S‰’¯’6  $ºìAƒC”N¿ »_BàôS¢3¾ç1·®º$xš Â… ‡!.°>ÿ}e2z"+Àþtac1`Uàj‹YÉÆóoÓ¾ßÕ⛺¯Îý¿ÞŠÉ-ú9VËxë cáõ ФâÔ%j©“@Ï-€”Üн(¼žÕ%© ß «‹bÿ¯/ÃCõ9zÊŽ_ KÉ’·p¨ÎXœÊþ»ŸrÎ#"‚væ­E>ŽÈ›•sÀ7Ñq=芚ñÁˉH¹ÞM0í«ÝÉò&âv‡Äþ½ÄŠ¸Ê =äÎîöÈðe ÛC¬ùÒqÌÒA/ì6&ÈÚfbJ÷µz×ÅJƒç.Gñ´ó6A¿´?„êKí÷ t*¤‚¦¸piÙ醎Q·Nñ?U7W¾‚àE´Õˆœ—0Öd;̈ÂvgÊ]܆rVZÌsß(¸i°6^Nf °S¨íìrkâ…ТdˆëYpà#E‡j؈‡×è šÆßŽ/@¢ ´Œó6T^ˆ'YbñkOó9ë 4Õ{žÛû8$u\ ò"McjZF9Õ‘®W‰²$‰îñ°ò=aSá¨7ÁB8ù$dç„Sñ¨˜x{å@ÆjA±…äR®3%.5vóˆÐ˜µ’Iã–ËÊ9Äb½s¡8j?लƒ¹IãRêzD-üAK&e8]^_b(F©¥D»v0P±´’# Žù JHœÝ¤áqËí ÜU…B}'„¤`¦ö ÿxÿõ½ !»áQH,íxd7ÝÑNàü‹¢!3ÎvØ¿¾Uçï›Û™—òPåÈÏ`ý‘˜yçÞåçƒBjpŒ½ô,e%XûGÃÇ#éaÒ´~•½£]³ÔÃ'C%Aîò®ß9 ´Ô×Ðå{¤êÁ*ÿºaûÖ‡1 RãEAFâ~‚¬ôäX–æ;eª‘9ã€ݧví7kd1Ë–Æ”Puk8(9¤ç©èÙ¯þI¯5{.r»9ÿ|ë¹pþeAûÚðÔ…ºÞíÎC½H)5mžaúa4ÎÆØ•ï ì%¯We‘”Ü qñáùEŽf4ó»õWÉE{@áÔ)~"òVGØ$úª–ß,!ô/öfÉ1^Ó|ê¼ùwšjMhÕžÉtêSÛ( ÿj3'0ð†y™@ª3Ý3¼äSØŽS Ó ÙpÕf÷¹Çx$5‰ä¸øS›S/ë|‘˜çŒóÀÄ%¾ßs޶ÕP8 àœ$jÓ„5…)¢°¯b‘Ó¡Ò®2p\û÷¡æšl˜s0®a’\jžÈmC;9¦œQ¸ÛH™û58-©á©è¯µÒ7¤ëˆÍéH„`‡}.caµLý_cºvR˜]á¹ V8`‰Z_w%Óx?ã]ZíÛvx=÷˜Q"•î Àè1¯EÅSƒ*k9ÿt`ÔZ×>ç ø$\S95n¬áϦ‡ƒv|0wÀžÜsiY”j"]°Ïcƒ©¼øh±wñâfăŽ4<¼òž%)_Æhc{^˜$G†¯$÷À‡ ª“Û©‘\ìÇHœTìçn¶€|ÁƆ‡€1 |/IkߖݶÀ&k²è•ýE_'~¼>hz(nãËÀO´ýý‰ðŸT!ÔáúI1ñg(½‚‹¤»élívÑzû¼©=qaÐ΀§ŠÜSÿãD;‡zY7¨f%Ç]k ÝtH­÷©újóûéS7yóƒ0Oó„‘Ã>¢¶Ê] þÅG/˜hµ º…¿ùªÎ™èO®OH_ŒmXk„ú½³z+»81ãÖIÈgxQJ ôÞììhÎ÷:U2ðL&Ài¨´ä’¯_°%3ó£E¶y€ìò@¹q¹h,æ”~ìãpþê¨å~ÊLTƒÝœÓ0D ¾®ÀÂyGŸ—÷=ñÃ,¢WîN¯M\EO篢œÝïò‡±~úH6MÕ„¡¦£D›Õú 1Æ‚àÙ£»/ ‹–Ú`ʨŒ€V\¸.ýû$&ªGi_#h†.ŃnJÝÀ/ðÃÍyâ¡LG‹.:ü̾%Sö ì^©DfלɃ—%gïë–”*3ü¸É<OÑ~«N8”ì`Òz™›]Ñ),!Èîop$ÉóÖˆ.>y¨‡•ž#u©<½G§¶Ð š´Ï,Œ ,š’æp_t•m|›3ß«‚þ ¿]ü¸k &_w·ºup¾5RPê‹ö€Ér5¾ öå'ŒTq)’õ_“j¬F™‚’Üë¦[ô ³¾uénq—Í/ƒYëê«qRÓlL·œ[KG+’“4?á3°ûœÒý à ÉÞÏqLj±ßÕÐb7ÏE—=FòÈüøVßܽ§ÇާÓ6±¯\IÛþÓY”Yœ‚¤ ©nßTÚûÄpÕD¥-5‡+håcØ{ØDèsNJç¼YxŋҪQ¶êð´`S2ãMOù1dlæú(/çÔaÛ‘xÚàid.·ÜâU©í§fÚ˜Ð;yœßî€_ ìÍϵ"â¨BÔtü\EÒ„Å€\Jn÷L«õ0fwA“ÙÚôÊ×?}ÏV‘HtK u 7sìû‚µeÍ÷€¸ŠT´úí¨×‘{Ð@Hf{ˆ×ÊÁS˜=»%ˆ)ÐfÕn„úíh`Ûùh>,YÀ„EÝ?¡1ƒ'Q¹ÕRhÔ )¾^Žrh ºDÇ¿iGpÏ"˜+ŸtÉÑ<ª.ñ¯-Îùp/½‘ëX0Ý:T*¡€«;µŸ<ßTîãÉc¾|¬l´ºº½«5·Ó9÷wuËUgj³Æ,çKÜq¡cÛw†?x 1|hHñÿÐðø—Á rzDÔG›¬ endstream endobj 558 0 obj << /Length1 1634 /Length2 1408 /Length3 0 /Length 2424 /Filter /FlateDecode >> stream xÚµT{XW¥ >âB)ÐöŠ" &$¼”‡ÚBDÂC N’2fÒ™ yˆ|ÚêZ•­[¶*T¤T‘Š(m]Jy+`µâ£Å²ug‚VaÿÞ/_2¹ç÷:sî¹×u^¤”ÍWá Šc›Çá±DŠ`ä2ö:˜¤×"ðâp¹>,WW ű„‚`)¥k”]Igp¹þ,W ‚$è  (ÒRˆ,]yÀ1-"q’b+’C, Å ]"Àu隤¡˜Þl6Ó‰©æ€pD™ŒÈd ˜ „s$hî8PƒhÕWŒQRá:)­[)õàÐ¥z'žsHeQ¢% „!(_DQRó+ƒÍ?i ˆÑqfÈ”K„2¾,6RÈódÞð@*$H”;‰ÛBšxI.UxŠip×P”.ÀÓÓ`0p’ô$ÅÁ‰$ŽNkâ'Ó $0àD2 ŸÔB“0zLEËIiàxfO€UBŒ„LQ(>L¡¥¤‹hœú›-ÅôÔŽ§ c4iªGFŠA ‚bÄLI'R¥'ÁF¡Êmœ =A03$/BÄßc^PÆé7‹×fd!†É;†`zrÓ+ÚL|m%Ž‘(I‘ã!P£ZȰ'™=C1&áG„… ¥2¶˜6Æ–à´:‡J£LÙL?~ˆ8,ãúž¿àÒ&b*ž’B³&YŒ|!(­…éž“mŒá,ã`5Š©ÔŒî*½Î3 CßÓðçÉ4Äz‰%A p|À4¥Æ“fò ó˜!+C‡ë€Ñ’0 UCúÁÊ ‘T(B³2^ L\±xK UR´Íé£Â2uÃÔ8ð‡i&/BÏ àn:¦ôUá˜6¨ šåS´Üÿ?§lÒ¬P½V¤@÷IŠNNCRPmú«‰“¢!ÃÔ='Rí¤J†¢iP‰RJ͸¬ãx…оçcIZHo‰ ŠbŽ’–ö,}ï ÌµØYj•ã7„É“´v/ÖÌñ¦A%«£ Wæm4žÎ?–-,n>néêÏ(›µ"&|÷”ŽƒÍçœg‡ü«×®,ÙRS´°¯ HÈþh öiŒkž½ö¯ž³…åMTkßéC²%ÙÎÖB~ã9'*·HÒžsü¼‹Ç/áGŽÆ~æÓRT³»æ-Õø«Àÿ\ÝèN¯ëÏÞÙ缦ûKCi+µMk·qªuno®}z6j·kRÏïXôÆ£ù³çê.Ö½y·,Qc»Ì{ú[æbc€ 'ñüüŽ˜©vnu>ù—mzÕ Aëg•ý»b†6—îT_Á>y:uJÇ x¤:³ÅÜåI÷þrø»þy®fê}½¡ûÝfQ@Ô˜âlU׉jÊW*4ÿný}ÊÉßbÝz›/øn=m•ÐݼéíŸm·M úK”1°ÒiæYµºuMn¾ˆŸ_KYd‚­noÆÏ°4ö4Ì9²?¡]¼í`€×—9ë -ÚuËížÌ[¿=1چŔ‰°,Ïñ÷þnãíS•îróÊå|lWtÈw":ÎÁÀ^ÝŽ4tÎy²·liMôÕµgsåÓšnñ}2š÷­ºk¤Íÿ„]|¢óÁŠ6ÁªÎ °U®Í4 tuF¦š=Î ôN}íJº®´ó¯ßûmã÷óÇF ‹ßäêœCÏÞ šu[ç÷ëÈð4vüÕ÷+÷Ø£™Ä£,ýòñhqã¥cŸÎuÔ sX)V¶ï“|ÏÙl[a>%¸Þ?'×e¹·üžÙjéWc3O-x¼Rq¹öžû7<ÅŸÖÝrß´«ž®à;5 •‚~óN‡ãÉ)3¦´wŸ*ÅömœCš•ßÅGßÿÔE¹ôÆZä4Ãl8L¸¼i嵆â>ã…7.·ÜIø‡»Ð#C»9¦a±Åª2ÝÄŽöǶôÖ1kI^ÎÝo¦vi¡XÖTà[×Ë›Ó\`éŽÕY8„Ê6V—]¹éá`eózB™øÌUë!ªM18*2¿»géµÓ}#—ãl~¼Á©ô«wû¦ç/1¾?½`gÛÌ+ŽrI Ò; >Ñv·ê£%óêèËÌ0:ÄË5]bÕµ9õ+ßóë±V…ø]2ä_í;µ@;8w~§¹èòŸXSãlû›?˜9ü°ò󒛬yºù­Óøqvmê–õÖYéC…ò‡C/»Ö *J­‚?Žó½!8FæÖò†…UR3]—7 (¸3 ¿+»úТqU8>oº­Äìhbã×+¬$®üuä¦E…%j¾«Ö¢oƒ»ö+¨}‹[ÌzÎUTy<¸ñdnbÑ…ûŸUºdðŽº2òˆ_”öììtãžmS·ñ‚ukÏ!÷}(÷eýÚSþçM[£Jó]Áá}þÀ¶ª=]Ò¤Ã÷üŽ9õêËË7ÒWàpŘxtÁpÍùüЋÝ,üRžž_(Ÿú“ èž±×²®>qÑÖùrÓn_·Úcg]ð»Ãçòg«ß¹S[èó¹¹$¬aç’0§ªcv¾ûZá¼çéÖ\~ìÖþ^Þ •Û¬¼ÇÖéâ©'›Wü>mvŸõáóŠ;Oç ‚Wz-s~ÒÔ6¸ç¯–Ò‹ïwÚwYrFfÝ ”yÈ_?óSÖÃöEG;‡.Y û?t:n,±é´˜öÅ¦ÂÆæ…yßejªÆæ=iv{Û³þVSˆ}úØö¼‚iU?‡õÚΈ*^ŸÝbåè]Rz s£eGPá~¿`sI³áJ÷¹*ÓkÍPµÝÁ»·ÊÒ?šnVß,©¹ÿõê/t·wfcð5Ä9¤hûþíÏúb£Ëúå'GyA­|nóΧÿ˜ý­þ¿ Ö×S endstream endobj 560 0 obj << /Length1 1941 /Length2 27032 /Length3 0 /Length 28252 /Filter /FlateDecode >> stream xÚ´yeT›Û¶6Nqw îîZ(î®Å!@°@®…âNq÷â^(^ 8-îZŠS\úÑ}î½{Ÿ3Îßod$ož©ÏškÎõæ¡§ÖÐf—²[åÀÎPvn.€Šª¶…³7û°£µº¥#ÈÕàáàââC¥§—†-  °³Œ(„ÚÔ­ /î—0*=@è „¼(­–ÞU ÔBÇÛÈ `²ø h€Ý ì–n/j ³-ÈÈüâ" vñ†€lí bð²³ÿ‰ôÇû @ÉÂÊìéæX8[”8T9j`Ï!ÀvXí,m`€Р«-«¥ ×R×ÕÐfæx ¬íîâ†üim]y6€Œ”šŽ,¨Ç×ÕÖùó©t~áoËPÓyÑÿÉóbøÇ]UVGJÇPC–›óÏÜ Ä ô'ípcxaø›Ú‹« ìôW“ê"ÂÉéééÉaëîåCl9\ÿâ§crx‚!€—+èü«0îÎÖ/å„ÚÿàÏÆT@V@g7à'9ð¿”N/¥|qz‘CÿØK! b:þËàþ[; ·¿|U44TN g(ÐÙÂÙêÅjuw˜ÿ%{y­ÿEv‡@þäPý_äÿÒü/õ7à—•;úú[xþçŽY8»»ùü£6ÿ¾l+°³È êö¯ˆ@€ Èø‡½ÛŸ=9ÿ%S•RS”“ÕÖaWyi­9¬<@¶h¢‘^˜ã¨ŠPÂ@)a1s¢ƒŒX&“øºøÝç ,†b°Š‚ˆI@Ê;çRú÷ŽÏk­ÉÕ㿬5%·,TÈ0e¥Fóô8tƒ³T‚*ºh˜”ò ?òMeµ%¶QtG¥…;ºïby¾ÿƹH¥1®h[)@ô,™ánÁ‡8âz-`“v’-LtÂBßáÇÇXôJ-²L›†Ž*!¹ôtãmÃÆ”¼¾§oœÚ$qi&;u˜‘ú*Zv†sÀ;„ŽBH„B_rQóZ–V†¼+å8…9–É+íIx‰·‘Ê—r+Ú2>"˜éH›°×k¯œ£ ¦O-e×Äôí·Á+ )¥‡òVLwã@µSçšE;Õÿº1†¨úõDµÓu(–Ì•Ðù¾0.2ø,J…×ÞïúzûËô.gK>ïÇdü èW™d¡S&(âR:HÒÏsl “6¾|ŒK˜:¼„ý祮NàtævÇr:°ŠWØèŽQNB6b¡õaÙŸàL ¬ö#Ä2Ä̼\ɤF†çبX1Ì4ꕉoX Ðk¿0H;}êéG·Ì›Ç6-æ3Q$ eî ÞëïXÃÕë¯#b½³,©D´×k€ Ë‘®5¼AÇš6rçoÈ!¹ò–zWo/À¸OËÛ^b@Xw¤;n‹_ÈuÓ„ ö‹6þ XÎø ·_ryƒu4ªêJP?É´¾–Òœ\èž~E«CÏw´²6*0ùBFçA0y6L©…×™§â¤—ÎÇŒ„„ªWkËè‰ãöq¤ƒŽPJô×ð'ÔuCµ±èÀš+*X0YHdkÝö<¨ÓMÉ:§¼HÓ1ðW ~grƒÁ—/NPÒ߯j®ð øxögOYèua¼™pIk)ô6¥ÃíXMÄìR¹f¨Äh‹]šÆÝ=ÑÛ›!|¹½`|~ïJuñ²ñÉŽ;lµµZl5jƒkûo†!£-}o'ÅNôs}÷§å¼0A&8ËËåÚZœt|ho“dk&ÌNXŽ+Qť Hi þn>tuÕ|s|  Z­¾^Â?¿´û¬,¿“ªlÅ\öïWÌ}·Ýa‘õŠƒZ¿YýÃéµ<|œ'&€ž-£bì 屓®>fqŨ[Üy†¨ÒØtvÇJ˜¢ôÛÂüŠK‡ªÀø‘¶@š›r(i²›ÞAVÇÃ銒5”›ñb×&CŸ¡QªøuM'ßè”Rà4æ ¶dIÕ¢\oqàÐx|¼ •þ¼?µ®$²üª"KÁ-bWª‰:×~Љð¡ÔÕðjOßží[Læ°n`š—º°>C0€ ºæöfª½o)¼Ø5tYOÒ„‡È·‡š~,—qrª€.@ì_çO*€Ï[l›_„UD¿~F±«Æñ*[í†u×cãEËzÌp<éÊ£lÃà'¹õB’G.½]NÜp‰ÁydÄmðãÖçVþT6… Š.ÖqÂ?›ÿš%iëdg¸U@£¥i3,›Á²w;Ño•oÚùéggLrQÁýÀÂSüE Pl©ºµÈ…&z²ˆoé„M¦†ãgu±WŠÄ¸"9šYoΣ»ÚLV]j’Õ‹‡²<ŠâÜl$4tlßeÂ_Ÿ{"|¶[Ýlåšïj}ÂrÉ,§O;Ì!Ñ@t#Tá7Ze@YñroÚr¼±rðÆÓÌ|hm%o¢÷[ñIUcº 9¹Cø 2¬Ÿ.J³ÑEy+™ß•jÌÆ÷•1­ÍqnYôH˜–dJ+ýð†Ä{¥Žpg„Hkº)ïØøØÂ»àž’0‚‚œ½ÆÂhI*«ÁÜù°(êÆÆ—éœ9Eº°P)L¸öÆ•Qì2» ëäºÕB–ÿGGèÒŒþ?ùG`°<7;ð¦çg¬²Ü:‰3yÖ¤óÆ{ÇåšxÂd§ø@LY]ìÊé6è‘?ìŒ-¬f¡[üži%h¹¶þE©.w‹ü"SðüŒx"_å¢ËÝiµtÍUÀö‡ëöïl…®’TŸü$"ôGÚWCq¾9w'k7\ólÙ4ºý~]£­Í4’-Ì€q»T×f$™ì¤‹æÅ]xB—w†&}¶9Á›ÃùPrpþY †4LÖÜá Ð®—ŒU²óÊ2»Â+Q8B´ó‡øe bW'åjk¼®1êä'P·Þüõ6®qLÓ[ì¤ý‚7ÿ4µÇI¶‰QÎdßfŽSFà¬V*ÕÛûµçäÁW™Fèy‡v?¿{Œ?Ä >ÿî6³fWߎ‹'ÝO<×´O/Á•3gaì<ÕÔã7-t T:þšÎK«MoÖÊ?¿!Y—·£³øÉí]Rg ½\MjÑR2¤&e¸-¥²¿WbxÂ%¾©ploD7ÑÒ¿]®Xc½¿Pþça©ä8íB9'Ö}Ý…ià·…ß\†½x-ia®U\Ãä™M¾¶|ù47`¯š^Íþ8ÛhKã“ÿ¾âWµ(1JÄy±]XŠ/è9> fž63²7©ïïÌ¡7và=\\ÖÞavãÌXéösv^²Bðì³ÚÉÎ =cùä¶n¥õƒ…­5c „Óñ¶6æÞÓà‚ž¥\kÄO°øŠ´½¨ëÕÔ_Þ†¡Â­­£Ð‹ºâ& ¶Ú­‚O5~P^8/N:=ýà‘qyr„b.À¯Y¥/t\áÎäîÜŽ÷¶o2GDo¼ªËtxØdÖÃcˆß/µ§õÑå­~h?bÞ̾àó)Ý'âèPaÕ“@‡|[0š §ºþáZyɶã>™8"H3µ•‚üSÝꛆë´\?›y:ÖvÄíLŽˆrCƒ_HåÁ{$9~gžætÉÓ@üöVÌjËYû‰œ­‰k ¬w ŽŸ MPêË ^™Ö3¶Ø¿êCpçßp–=AF[äÜQ3¶X^{Kwˆ¦‚„jáU#ÂNÖYô¾ÛmËäZ{ü½ÃïVI5abM¦÷ÚÌ[Ó”PÙ~ÙŒˆM“ $>‹÷ýÈP7vC;Ÿ?³*“JçzLð[ûZ¹ %fïÃD‡ûªVš äN²˜Ç Ømd`ÍM”ÜÐyG&Qt5%š(5Ü–'ºÞŒ«má ËlXáÞ+|4ù8yu(ÜåvyøH™Úãbû¯±}n¥ C˜`_¡ M‹ƒC;±Å´ýüìýJ³ÞÙ•Ÿ÷¹ˆ*®T¼9•†Ó¬{Ú3!=Øžá¥\âùRæ²(P ú;yIO|3쓌Ê(ÌÔ´°—n©GdCÕIÄÃäæX-P£µÚQÏÉðП-½ê{cc¢Kƒ©Mì;füòCéýåÞïý‹å”êCcÓïo#EᩪN .¤ßhL¬>pavR’|º«WÙ´|ïÑʨÙ¨-‡ûÙ‡€©O„á]Ó²µ/Î'ðO>¼JRöȯHbÝÞ¯\ r…¤?K€gÞI®nñÅòǼ¼Z¨W¹R_G´îm1pÖ ü¸"cèéK4äÉ3û”b¡/R¦ïÂʯpeu\t#̱é>§<'A#€}eà%ßÚtÝ!ß7Ÿz—£,èµ½ÎúLÚFyD¦x<¡>ði³{èÆtTñ-‰ÔžáÇ(‹¥‘…œ@ƒ¯¤°.wMÄ{ô (,Ök<ŽE™”â¤v»õ‹èÓhü.[O¢´]øSy6·ê4ÇÉŒö°s;Cžhfç†{vt"*z–iúˆ‘‘‹E+ÇwB*F«dI Y;x&1+í ø›Ië‡ÍÎñoÚ¨?F³ÃªCXfäÍ“Mú^qB¬ç‹„+B £*ܳê9Œ|ѳüæ (RÄ‘û¬X÷'|y†$¸ývìý¥Óþmn®ì‡<‡g41)ŠèëÊÏS¯ý²=ž¿Åܧþ´ø%ƒË€ûöÈ×[ægЊÞ}j„—l›!–¥Ób¶sm^_¸0gi–ÄÅôK_1ý­¤×ßÞ2ñu¥ƒr÷M(Z«Åïá¥Ë`±é½+:ÀÁk®õ§}_–Ã5¤–»‘› RDþgÂ5a”%›ÝïFŒùÎáo>ìçô0sŠè?EpH¾ô‚´ “=ÓÙÖ½4¸uc'*ϼ´Ð„ËVo*AwM8Pá{з*ýÊ37>K>”å>5 SRK ý÷6䫝ɿ¿UÞØNt §æÔÚ‘~œn0â³Hû(UDÞÓ—‡uo[3ߠޢ7l%wã5IáCtÒ‹CHE™z‰ˆí Nâ]†t‡cnú6§1™y 8¼‰”56»˜#5¹CÇÖÚ‚K;œât½IT“Ãçó°Hâþ•=q¬¶ke°h2¡Ó²÷^-ÊM!™"BN®i°%€üõ ~€„œœÞÛ€-–Ǧã°a$9ˆYÀåk1â6A7"¡ux• eeñuá¾z¹‚…œ¼çùñù =üÓDz½?§„‹OLÙ5í¥5¦R;H²É‘Vänî[_!¹’#+e#øÁ*Êž…Ê/·"þ.µòUbkå  Ñ9‹7XÕ;¹ñÛ![£¿XQDª/GÛªXU‘P:°,æ@a <îÌSÂ%!#ЉÚt?ÜÝe¶…Gâ‘r¦%ü(\è""œU5Š*ô;DzŒz²s/¨ú•T( ¾»q¶#SªúÍp_ßRF t9û9’?62ÿ,·(XX÷+þ¹LáϽ\v‹—54âá*©0=JÆ Ðoa/I¼ï,r7ÛûÀ7ɺqÆÜ?/Èq¡xgÛ#‰—ËS4ÄÔø|8¼Ñ-Ÿ|ÏóÁÆþÂS}¤cJù˜O"Ͼ}‰øâM\ÕÇe³=%ã›ëÇþ6"¼Ð9™_Ívh@Eœ0å¦#÷òâódS:3²E¸—h=ß^›XG.~—›‚¹ñ8öNíÿ™ß'HOæ²¾šNÀ“3ÕÓ'ê~3¯JŸJª©ž«èÙ{ªAÆýIþô•ÔÚß»hÇQÙ¨^1tH§‚f òÄ-†e0Ó¦ëIê*uVô:- 1ŠÜ˜Ï*¥O£Ûú¤VÃvÒv¤&uÛš}4åæ·/dÓÌÜý»LW•C!Ì ›Úvå­AË‹ñkØoëÇé~Ñe-ìv#Š˜X?'HKÏoµ$X%rØž| óëúFœ!f9¨ƒBÀ!ì¢ÒÖÄ•þÏ5^7·Bþ #2%2]›Ø/{<¯F‚’úMJª4ÂÝxQšÚä„¶Z],C–)T='*ø;ýOt&4 è?‰Ç I&¨I •+KvyNó*_ù傯3Ã{L®¸ºÕúi3 .I_V¤jwO/ÌX䘖™ÍÙ,U*ʾpÏbÓ ibßÈ^lˆa æzÈRdTã䯖ö;ò6U¸:ò14í½W”%‚;ø^áÒgh­ç—4œ¸óKOþØ!c` —&Ù­´Ì|j ¹ÛÃ×jª>“ăSN©Ï¹εÀG,ŒŠã§S‹Dè ä>Œ\Í2Œ>—›ÿN'3„;d©E?)g“eÛVÅ´H} FÚM|®¢–fI PŸ!_5ŸÛÆCÌ4¸×u¾3‘:£c G3(Òd‡¤Ôß«pš/ȬFwzøLŸvÉ玼ugnÛwH7qØÄ%_ls)LÑä4QW=]4ÜõŽ –x7¹”oI–¦kFþ޶¿Ã/­;ºt}•¿ò[ë5²ȮMÚ•q_§Íg‰fòaÿªVSß_ºkw OÍN¿úƒá(åT$Ú)ÕµbCºôãÉ^ÆO¡+QJ"6+ÙZ©ëk‘ým²”ržÅžáHDã R¦ÙOlÂ7”cÀs.ô^M»:l…Òý²¬êJŒë Ú™égžTŠ ƒÕ$§c‹ŸþÕöÎ:bn¯"‡›o¿‡6Ù\«h5 /µ‡NÉhm„‰x¡ªµ«ßx7‰ô¾Š2nF¸d i³óš^·–ZÊØ¯c3¤Ð5}ɉ7ó‚­˜_,üNo4+ˆS iq„œåYT>êsm{ äråq2õØí¶FÜ€¥GÌ^a|ØàVIQb…4Mg¼Ÿ8§Î\ÀV ¸Ü`tȈû•!òÚŸß›Ê1íåùÁù0þó†Àö®ë}ÄæZ'_²Ï-{,v¥F¯]JŠ„¢Øì–fxX\"ïg4kCv±e†u›{ø¹ÁÃk(} ¢b[‰ËÝÛ´´~߆7cb³’]ž›Š:ö‡ëãkZ¬§|7픕AfAÜoG{𾏴[¾ön´úþ«çÞŽ|T£ÇöxÜ{U¾¼¶ÌìuÎÁb0£ ‡9$ê#§ü±‚R·õèAøþ"çƒT®ˆÂ¬ëÚ¥#A"¶§A=,ž¥3:M¬†’£(Ô903Œíƒtì@zO’ ™Ë<¥Ñ:‰†³}ºU2‚lRÑ÷åš'ü‡\øN§ï-QÑ—zð±ê¹„1/TÃŃü±µŒºÆ¯6³:·àã÷ÈŽ6¨£jZ$ð}ÄfdxŒB9ùl‘Å'J†í&UólÓú–È¥×dò›_ÖnK¿c:a5IèƒÝÕvÌuŸ–8­‡¨Ggü»K¢i*FÌ}n T½ŒKc°õ€ÑØ@§d膇úí÷aĦ;ý±?0_çí)VÂç&?¡.ÙÔ£FK5|éÏÞß¿¿²+3KÒöŠ2¯À›*-þ‚ÄËãBýàjɽ(@Ë ¿Ÿó™Ã·Ÿ$ïÚîýƒÿu{OTÑ<çÆëÙ Ñ*¿Kb’aÊ,ûiM†y&–ɤ‘¥2ÂÓ¥_—:l"ˉR —ºå·¾Ÿ+L‰ÍåQUôRÏÃ@6b|ô8ÝÔ£ö·`½`tÇ$f ;Dvz ë£<ém?ÕgøL=¿‚%"5h•^Ç,©úþ.'˜¨­‰qª‘>nÔ‹‚ºšKüÄÜ‘› ú;&þ–ÅãVéÈ~Áf<_ä6@K_ Mu,to¤•HüçFVƒ¨]è%:o&bô©]œKŸ!S÷m4PêiÍ>cpWß½K‘3˜ã-NŽ{q@ǦKSCÕ­n ¨p×V¯GmúQëWÿàíWgT·ÀÇ/#k ¿=­¸Þ\Â.¢xæC†Úbþ‘ö)©t•ëŸNêÞûE ^Õmý%þû ’Þ72اïgq»/½¢ª Wâ΃õ¸êu¡+T'_­Ÿ\Ìžøý–z–Yç‹R9ÞC…púª£¤GÜxvà3Yx.„’të±õÎF<ÑŠ†½'É!] ÈmeF=¤eªxÇ­Gš4†ÑS?)ks;o•½\0>4#— êˆÌ¸F‘k>¶^šAáå¨É}²#¼Ukó,Zº¥æÑ;XæÓÙ'“˜¿æ§©ïØ|Œ_ñá˜s>3õÝòð·CÍä…" N2»? R¸›ÅûÏ\mf˜Ë…*¯?ROòùýÖÄYÕÁé:‚8.‘Az«e‰]¦¾|žY¾ò›®rí²Pý*PSŸÎŸØ[ôøuJ•uÐR÷O½+±š®ô÷‡+±}°)õi8ÐuvÌÜÆÛSØ­¥Á>Ò~Øî%a¶ß1ø6ÈΆ²¨bìʳeœ ‰Æq†ˆ8 º4Å¢+zO½|]½µúõ!^®óA–·LíÌUd“!øâÓ‡|/Ÿqmî ¾X7Ìß~ô«Fßy‘—ïò*e –˜ÏCªB>aZÚ€­î9˜<éÚ?ïšýÀ'€ë¡ŽÑõ+˜PŠ3ŒÇ.î=DÅât“ŠóÚª>ËîäqÅWÓJ¼—$Ú…no]†aJ¸ ’UÖË5H¦üb{¤_x;3™šÐ[;€±yeŠ®Âáé"M5ïãµCã²}âEӲ̒.UÒ‘Zûf‰Q«»¼®€!£îysØfsÅú„£«5Qÿc‡…¨ÒœŽEIíd Eù&CŒÖ³ApÖ Û¥9@‡®û2™oëÆM%ÓL‚fjU*Â_0üÒJ,¼£ï]Ç<{ýÊ}ãE!Ñ6<ÀZw/ê˜kÍ:g\)ÿ1FcVý‰ðråœ,õ¬ˆ#m‹üjïSîoL|EØÄàÁ‚Y¶{ô¬õUNää~×]g.(vóãÐÍFǘàJísÌ!ö™5iM¿­8ßïÆÛå˜3”ƒéøòOdÙ¬.ñE-¶]ÀV:1ãÄ»°¯œWÝÑ‚ÛcôöˆÚl.½P“1;/›IÍkîëHÄ@ Ó—úBGÊ‚/,{Aë&9\/VWÎ â÷~â7þ/'«PDH\K¬‚Чd·‹y5›s*b‹ÑwMVd¼Öµ%jâŒðüéCg)û(=ÆBà»XP'+\Mg«Æq†`öÈŸxG_å»–~L±ÚjèJ¦ª6£$ãþ4+Ä ‡Qðø•6ÖUÓ¿ÀJš—]ÿQâUá›MºoЩRDç¬Èç"Žä>#P‘2UF‡V)…£%œû˜VáÒò£)Sîãáaq“W{†ÛSÀÉæAÛbã NùœËËþC÷æâÆ{^³gSˆðoˆÚ‡‹t¤ZŠ‘•†.cRˆºŸè“L²N拚˜•aœ¼ÅÚ1¿¾/ˆäð.W:kì%'t:|¤û=ŒÜ KÀÓºgª˜)“Q “¹½JUðé)e¨ÙÞ¨æÝ§-‚‘JVOnE£ü·Br 0—d5Ùû.‚:ùSd¼lX©oilåÛž ùÍ:$»oTT0¿´õ6ì6¥|gQ?¿ÊŸZ8ªGÄ5|Ú¼ýOÝTºûXY¤wS«"ë yIË$?ŠæN½ó½,üw?ýt ¤1;#öê{­d!`ýLÜø2$eK/ð½ñ”ÒûnF5óªÊœJ#Ц*iåüCþ &ª/šˆuÀ‡ÆÚΙÖÎY_¥Ï˜¡É݃§T¤ë]:x# ä±.0­+XÔD©ŠÇ]7QA²Ks>W<û]† A x'bXI{ ”Ûêcß{ÚQì®jf­€~ U«£Üå3Î/1_ÞÖŽ²²¡‡§gEÎ'è¥Î^ ]²6•/x*qÁü–bÒ²=.p+Ü»ÔecÀ¤!ˆˆª¼¤¿,²Óا6Îö*M ãÐÂ.«|HôôAø=ÂÜÒþC)+Îæl"ׂxKœfšhKD ¸Æ<Ÿ»ê¦±ý j6Üø ]6&Í»5 k£KGA%º (À¡–4rn2kÊ5_ä^ÒÀ©ïA"€· ¬ðw~GvêÂ~µ¿ˆæ¾â–Õ• †Eý ºïŽæìGR 'K5¹âX)0k/­óTj’Swhùé4 °jHšÿŽHýÎá¡qSzXÛ/ŠÄŽf†–êÉ×[+,æ)&`Îön´Ê .~¿C8> è®ÛEI·ÖG)­Ëqr*%{?Þ‘WcHw ÈÉ1 È7¢=¸u%Èâ[JÕ™z|üȨá„$“뇆ÃI|‰ˆzêgµÿqÎàô!mÎ8Ÿ-¾Š{¶îX÷]UϬ Þ]¯dâwk”DW!!g,Õ“ûÎ&¸<ýT†¹Û5ëztÒ—Šjñã0Z»*Ìãq Ë{úÏ#¶ÛÅq™ A¿rŸc„ÙŒîZ¥E.(cß÷c¹#ð‘PŽÚ)[ë¾µv2z\‡>¯]¤~çödöó¸È–;[\c@t4mÅÖmêKX(å‚1|016»w»ÊÜd,_KšŸ[ {—-Ô²ÅÌ2²ÔË–Ó‘d!ú—I2ÑFò«ç%cj(¥‚Ëòo¦kJ<ŦP£ìÑ>Þ¿Ò„*zÍdPM‰B9õ¶û‚Ês!C*_ÍAðå&‚”Ûzc ö›ÊJí$¸Çˆ*tC*:Ê‘`P‘²ŽÔúgry4ì®>U¯¶»Pñ’±ÜI¯Ño8¹RŒ:jv¬WxóŸõà‡ò/tBUãÛÈœÌÈÇù1…¹ªk´gG6ɧÖDeɯ;¤ÎlxwGbu‹š4//öÚ4~¯™hWׯBbà ì˜šsÙîþ&×fxÉ%©0TUbø_kD™=ç>ä¯ b–þd=l|¤ÞnÙ/$êÐÁ¯>â:ƒÞkq©£øn‰-ÊI£F+˹ï¤[åQæ„bß }9¢:ʯ¸ÍßnÅÛÜÝð¬ç ›Ö‡1¾È‰ÔíRÜÝìõÃô𤠬yþàöpv^YÂ˰ÅTöKî+vÙ›Ùõû`Ú:ž‰[üÊd54aŶz7™¼ 3v2[s ÷1­òÑJ ו –/zçfEžö'÷ɲ3ý-Ö"Ð ½Ï©…w*Ü y'Ï?¤¤ÊÚ®|˜Ø¶…¥ÄÂãY†·EÁÎò\õwP“rC´r•ÝiI|UŠ.³É98†l·¡z䙬ôþ¤ƒ¶n¥_¸KPCrß*§&8 };¡ˆž÷ 7ýì·¼ËY7ø²=¶ao§“6A)÷Ci€.t¸–¸Äoï;åç£;žß¬0“Œú÷îº! y£T0ìã …ÅÒ+£tRôkÓ›2RÐóQ~š(«¶04ârfÂàò°ð¼=%¬<Š»œöç{“Br8ÒV³+¤rA¡©åC!Ó?0$‚ì"ö®rž0«è÷RäÖ?qõàØÄx×"d/¬œ‹IsI” a?¥©ò4sa“yÍìöjþ°á°{yý*º1¡ÓTµw¶Ÿb|Ÿ)«/ʼÁÆ]õV õ<1}ö$Ó¿Ý@}°ù®ÏX~NøÁ¿¸oŠéèx·3ÂÔfíþþªg”¨¨C«uÐÀŸM¡"‰åb„&ÕÊ'1œz2kÖŒJ¥õ~“!ôxÔèÌyã[n÷¢ÄUòÜ„\øç¥ÄýÐè8m±•ÛšX…çß1iÅë¿FÄo;¤îEå¼ üÚ=¾£ÕTn@%7Œ÷ÃYf‡{Ad& "‡“7ãFHB[ízX`Ýy>à¹o °þ¬ê Ù¯ZEÝÏ¢ÚVˆ–ñ!JÍÑvúäTJyVN†=C'u­n¨LÂhÛã jΗÐË~Z²]C«Ù®HÜ~/ã+è¯ÁýÚ|Ãì1ÀVkÞÛZ¤×'iÍ÷ªá[_»-Ðûm#9OœC‰r_ %äÜœX(Ä´;]ô¼ßÞ•&ÐD"ºRÂà¼5ÿ6|8Û þôÎ<ÐÅñ®t"œiI<¥ú¼·N‚´ñ¸ZªuGŒò;‘î5ñÝ ª™#‘ÓU÷›ƒË%7â3nÿÏÏE ¥ª£ô2óéèi‚`]› R9‰ªëk÷Ç·†ê9qu?Ú"–g‡v>`¢>Þ 7ªÑì:h uˆ.«Úä†úA‚ÌM—™Î+4xip¿!±8¤>ër,k¶&†£iòX ëz_4LK â9¾ÉÌ rd»­¾Rß)&]A¨½Iàþ8Ë2R}ú“O§þ9j~S]|;ìŽs‰Ä‹7<¢ÙSAÜ&˜ºoŠ ™%ÿ³ XÚj÷¼Œ·ã•í¸ª™R#vi“&wºöOìfBϳiu¤ôéE ÍvÒùÿܦPWRPãÅ9¤áŠQä?+aXFJмËsObØ•[ÖÆ\§‚ÆgtÇj?–-¯OŒbè^<x–β¶ÌÕ t5O<Ö´kEêÅ &‹=;øoäÌìÓÛ¦ÖÃp"ô—úü ÿý¼’ãžr¶]zã<'¡wºû*‚—…ï&?¶R'†õô©kõlÛг‰,k’Œé²c¸{Õ¬¹ÔÅk'+»³he;ÁµW.Kz]n¹Íü-‹§ý#x?i»WÞ–hà£[Ú5Fذ JžÖ4WŒ¾›²ðáÓq™B©¨_u`i|<ŸÂwÍ¥ý#kÏÓ£ÛE7¯-ª<˜²GºŽl¿x· Ù:M^ªw‘Œ ßâ寭è‚Ù·öe(ÕÖæ *}Ñ­’š¬î‚J öž'·-CHrŒ‚Û“EêÅ#Ù>A¢½ßò0ž¸±îÊ»L”Å>ú-E 𑯑ñO®ïÄ:ñͤ Äï2ä…rÖhPc±¢‰ÞßÐjáø é|$NÏI4Aá[VBŒN9>[a;LMÔñWCYL¤ƒ×fÌ=4·¼>(W|þ”'㶈[Ý^» sF§tÔW˜ ¢ãæ˜JëáÏ}sµµGßâæ4ø5)ûäÏì*С|ú- ùÑé•íÏÏÓ˜qÄÓÓñ¤®N47Úˆì¾â^Ïè\YÞg]ä ºñ;yÓ—ü¥=û½}hÉNÜÆ#ZqWô™—¢µ¤ðäôhÝ µÓ´x.¿Ý5kg¸dáð˜¯áɧþÇeC&êAïÀ/6Ê)Ò š}§õÇôN83~nº•™Éd˜—{õÄì½@¥w•§qáN5ßÊï+šu¶‚}[Hh:’¡¢Ã¯Í‡á@ìTÈÐ0S‰éÀÔÎY ë󪤷DÝZвÞfœàç‚C… ò~²“Ó³÷ö2o‚´¨­h>ÂüÄIãcDAÿ ó«õº+¸îã'BD7ñtJ¿ñý5DÃ<Èà4¡ª_)˜3_ j¸[½*—<ó>ÒOH^•Va_<öfÐé<ˆa´òJîJÎ,›r…©Yî†ÕI/È-éyÿÛ0ÓÂÒ3û5q5Ê«ÓýÂuñÖ5â÷ó!=›øAalÆ3´g³ßêÕW*zûnp’|5,Œ!å Ž„ÇÈŒJZ4ãÚ´ÉiÔäxœñ]_®ß¹ÇŽ¿ê]Qõ 6Úô¦Yp}ã+i|C`+¥¥.j׫þÀ/)N0&ÎI­zGž%6"²uIŽ“ÞýÚ!™¿ý(oêýîgÖÁoϰ‘Ç#ò¬«F¾q„Sß™÷*©mÕ‚w›2MF¢N´™u’a;o…-<Dí7åßʦbKwÆx¿:É&"üæ@9…ŽÚx@¶Z¾%¸¹DBÞçoo³B‹:áÖˆóÚ^†_;-ÏT.žÂxÉ müл:nRm@zQ#_~/èD– CøN3è7#EŸbq~Ê„ß-¿'y Q÷Õ€íî»5¾ÜÏÑiþVirJÿå_œ£¯¯UWônQÀ˜¨Õ'02õ¦7>HQÇg¿ú/ ±œUÃIŒÆGÛ„ý´V®ž½VöWP÷Ð’†1ÀDÙ÷Ná™—ûÜ2-ª’Õ¡›b-R'+ |SÒR%i?XŸ 3®HÔ¡4mó«(Ó[·L¹…ó†èZ«½ï•¡Z ƒ3¯>#HJÔhDg´Œ‹¦HÉ…Dú(šEè½-¶Œ´=qÌ× æéÛ®°?¼Ý¡©‚ïWoÿÒé,f oGGÕ¼‰¬uíÃm^Þ®ŸZÄhþÑÕ½å'OM<Ümæµà¢~µ¨A±7{ŸÿXÚ${˜ÓrÃÁ¤Š|¿%QÚÃ[KBdŸ;…)*9rØŸæcͱb_ž™B -ñÑÕlñ¯æê (4n¼d›~:¸y­w ÔîÐðg§¾zÍbJ¶6¯’u*›Üâë<±<Èh–?œD“gÞfbwY+„Ɉã*²…ñ2³ Å‹nÃ?£GT÷Ì(ŽÊ¨Å•mL#¿Kº„Z­ì=…OB,Ùå]Õ¿½Öã/œ´×´”.´½;n²ãóTÅ‘ß>õg<·ÂªØ°eÛ…E$4±§/(ìúœ€NÅ&éy§¯»ó𚘠ý¦„çìòëÅùV F–O$¢Üqf~È‚LÂd…LÔäHØ©´ìðùökz˜Òõóïq&“˸;‹Žs9Y% Ó]i+=Mo­ÜçÚ ¿ã…z'=‡ÓT™·Yò;ãúÓ—~V"¡ & +βe8Ç|EØŽÉ&”=²mG£Ë“ (ÈCã`…ÅÜ9á0Sq¼FâÏkXG]k®r„¦$Ç´Œm’U NòÇ)w ×ò, é¾Ë°ü^ÚãÛfTàŒ|¾ †wm ×ïc6!¶1ÞNëËÔ-ðïèQ£K2ó¬Ä'L‘?Y?m>ó×~?_uA ¯:¸(;boõƒµ|=mÁæãÙøÛ‰ú‰¯Š¯{rì†{#u‹H YÈÜ‹G–ÇÆžl¬J’$q §üWŒ 'ªý/%ÆÇÕš^’ˆ¾b:_#E"ÞúíÚ˜ÄÈðÔ>v ^'ÀàM¬b(kŒçœÞ¢Ì:†¢#äß—·)i {Ú7§ð½Q0¾ØNëŠÚÆ 4óÄÿ­#7Ê5÷µ¹ï½ð‡•å6B:›Î-$gìY ]Þ˜øªmøGu.’î<†W4»Ä-Tœ³¡­vF>š(¿Ë°ŒâavS%áÈëAv¶ìÄþÈúÜÊÝÄA¡ÆÉ_ØzÈ‘ºBjÊbk!)®¬s¯Â°ÄèKÍfÏfÑb^âÈTaµ1§,ŒþyXÁÌR &¿Íå“…»ý+´TæLd&xødçë&~¼çWýY½vqŒ_[£b*ñ-e-TËn¾IªÒBnÑ ÀwÅÍP·{ʇ1}ºX¶³àÄVóš³ãƒ9µ!Yšß\Dã÷Þ’eJ©CõÚ(ÓX¦CûÍ?ƇO{£DÊœ RT`"| 5ÃéÑìô¹6>Æ b›âªüøá -¨ZÑÈ•ýÒIj;Fâgë^@ÔÒŒÜUáw÷Žsí\ϪŒåû^*ÞªÍan¹jŠýMu-˜ÿ7Îú‰ÃÀÊäoӵ̷ÎB}ƒqgðÊÅÕ B´‡%ÚÞ©8_oéñW.ü><=·»ýÄõÒýü>™{I ÍÍÛú'ÉYcVŒÖšU¾™•Ý ·xUªøNz÷UŦ‹Gᵸã߯ Mp‡NDW¬h“®‡£{B5Õv#máô½w¾Íè¹;é`¾Ñ*ˆZÕcEeÆo䀕/”=Ábø8Þ<7ZÛb㮂ÉwWéÉõB¤ƒîôsˆÄ®„·9ŸBË‘dÖt”ÉÐT<Ä52e…}O~úUXº /ná8à“º ।Ž5{›>Xþ„‹ô‹<(á­Õ¸0éû/I`tÿèð…ÆU4S–Éèg›Kü¨M–ž›p[¿1Nr?Ž2/^Ÿ›q‰33~ÿ,މ3a ³B7íí2Ò¸ËÞûÑ-/KÔwïÀ«G¨ Îy€ešQžæÀ\øõ”Vóèâ©m¼JQfŽæVJ™‚WÑIð;šRº…yòà]ڠƤԜ5´¸í×LÏÖͪµO@!¦ ÐÓÜ€4«x#oáF•:q\Å:Æ/Ň”;¢±€´Óí×÷¯„d©Ç’Ž1´å©“Øa×ymm¦ïfÉn$`àtÊlÉùiGš=~d88Ž²Ö Ìû6Ê”W¡@¾Ï˜8tå6¸N0¡LmfwY¤‡•Fƒ«4ßÜo,± ñ¤N(#úý3‰¿ûªât—†ÊB(°œbD(b–EÜ¡åJùÞ¶«Ñr…²z.¢ŒTÎjqw ÊѦi)+§Ëüê6ˆ-oWÚ/ЧJ³¬(ùîo]„ßÁï„õ*Ÿ.š—.Ù:lá¥ú é33ØÄ¢šçËÖ軟–².PvÃ…ÓŠQlWZóî°~³8Gï°¦Ãe:—àN£ÿD³_ºg®Dä±>£±aL/«Ž»—åªvä{mɨãU2æ¼/lDYÒäþ òÑõcW\ËšMÿÙW2JÄsB p#-Π,æCE´F{þu¶u‹“!¤mÁIÝÅag´Û€Z!ߨž~6hÃGãÚ·Àa¹úÊÑ­{§Ù»;ÊÂWF(½!ׯ*jŒÇˆÚ˜â ÔåÂ-XAo\Ü&BQ-ÒúpMåmظ‰(´’ÖÏp2 ç¾)Qðjð¡ÇŸ Y1­²kX 7ß„eã6›!}ñƒk†ó‡±þ+3„WÅ–-VY Ø]œ«¦¶ë³‚Xâ÷®¾X˜i@ý" i8˜X¿|³¹âØTüý3³ßP_ÛùØ4Îy/ƒyª‹Í†rg…Ô€p-HL¾vÖ »íl¿øýÌ\„ÄÔg/ %™³èW¾%­ð‚ª¾m$×IZ¸w›'Ù‚Q¦ «”¢ ZùDxñ*Ù·o貇\‹«©a+Å}–{Ur`Dÿá£O_S¬l‚$kÑmù<ÂÓc'Þƒ_冲YÞL^m¹^‹ÛŒf›Ý:Vý_]››QµZ{È™1ï>ïÔ~–\o‚MdÄÜê¢I}êb˜ù¡žRŸ‚“{˜ŒaB¦Ö€HªôŽb±­?½w¹@híök]ec½@"·¦c6%m¢ïX#W)ÉÈ4ÅQ»Ç»Žá˧ߌF¨>a«‹ÖЛ›U~$ªùEE ~}qj-h£·Äö·xå„üùÕÝ®ÇÏ}–=s#¦ÇÅ÷\†Äî¨Í °Œi£e©©8}GÖ:<‰Å)í¬;hNvø±û!¯¸ú sO=ŠkÄËc-•×ìžœMë‹4<šÔ˜èÊ'÷ñKqùU\ ½~0?ÉMéÿ ÷,Óa\OV·xìjwO6'rg¢ØÃy4Ü«0sJ%`gÝl<žÈ^´ôg‡€Rà àá¯nòc'S\I |²,×ÓqÒnL ø+qÇ1=‹œµ à:î•-¿üßÀ —3SÍ#úÇâ¸nî)6Üýo945Ó§ÁÂŽn‚>lÒô5ªOn&¥7Ÿ —¸ÅÔúÃ']ç¡ËdµÑµú˜ymŒ«¨Rx§ªst.Úåóµ09yÎ,Œ ökôމ%ÆUDz¹ûD“7}k’…ú1~hï,?UZ;˜í0 åKó@$c³{„­ùq>«CÂ3iï*ï “Œ±ÚÈM3 /«( mbkK{Ò׸[À-‡¦)'|6¡¼ãÃx¸ÿS‹iGÃ1*ÏÞŒ¬Õ=– ±¹(ÃsÓDŠ2ÁþÄýW°‰º.u½]]aŠšÝßc+†¸xž”ÐÑô ñVú¨–E¡C¹Õ0žüXÌç)lµÊÂGÝÉ6YýÎë‚ÎÐœÏ :Jý·Pšuhe˜lN(†Ê­ï'‡Œ’Áœß¸$/¹©0çàâßQ|!̺ÓåhÛ!ß´Zsö/_&ï˜pëd¿‡ædD9—!Z?2F[ÔºjYrL¨a`Õ†©é…OPÇÙ+õ³·EEš6ØöCA<Ô´Zî,J0É4ø-üß|¤¡Пf ;~<5Lô®g{…8@Ì )oY0`éÏAÒ¸ÜÛéðÂJ@9ìž0í=‚5pwOè$utTaÉiZ¿GUBdŠMûe×­N ¥³U¿ðÕ?ðž¾aMKú‹}ª ë4 B |¿GÄ¥_-POEÊ à%O;eá#ŠÂ¼ ‘q"Ä•´óúwiÛsÍ;¯ó—0R~™”+<À‘òÍ“ªàô5¬OèÇ\D3œ 7Ïh4ëB–Ã6f¢”PdP × À6Šøièבþ=ÏÃá ~N¦Q@›šr(Vˆ ¸¹UÐP¬âù¶0{º?JŸPmª9ˆl¬M“Öæ‚>yëa0m¶z¦\î,`“yÏÌ^öUö|¿L)Ÿ’µ¸"ÿ³±ãÝ'3` kçÕ· ’{„½$©ŽËÒÓ¦(° 8ÑbüX™Š™¿â@eÖOIôk)t»LÎ^uî<}ÅéA[ã\ükI˜(Edþ͹¶ÕDvHGJù”²©AÜzM¸¹öY¬ì×sŸ•JÕÏ¿:I)yUè’áææƒÒT[à4=÷dí]èáNp|ýEåˆ÷ðΧqyvû°Nj5w ¶ž¾L5çÔ#›‹0$I0/Îéà$ù®WÜô‰µ…õšº¼k¨¿ •°,ò rfùÙ¦vŸø @ Ûü¬bàêcÞMЬd„ÒúT2À›—ý˜{•˜³Ò¬$À5f]ÙŽ&`l±£¨Åz‚M&zÒ£œÞ™^¨.=Mîî?…æ(Èr,›À{‰;.O&U=F)O¸}(C„Ö­µ@~…±ÕH\€¾ÕïŽZÛcTÍì£ý,°=éÏ€šhš‘BeLm< —ÀïÌ< ¯ó®Ð.3l¯´·Ö)¥ýÒ–”ŸéÂm‚._ *vÉ$pá0‡­säºBˆ†P4ªÍ/´_ZÚ@°£\hzëÔ{—âT4£“$3 P5»Å@î½ÉtfÿŽõÛ¥~*°}ë çL.K[1)Ûæ"=ÁŒª«¢R5ZBbÉF{–£õ 3ÆÙþG‚”ñ)>†îqœ›«bcG p Ó;ÄŒ*dKVÙòMÕgC4MÈ–š7‰¸ÂèF€0ÐëL箆ðÚŠAUÔo<ò¾ Ø‘ÒEsŒï­ÖÖj²Ùˆ…êH¬SœP…ÑÇH&+»r! wíeºÊ†¤ôœáÿÏÊ.¶¯<åô“Ž@oX¦æY.ò¹`佺°Þ •áä)EyÙ÷Ž–¥ôÓé>ˆr¢qRž«Ï˾œ?“‚ÐÐóÅ€žŠ]ÆF­D7Bº(5ƒ›šW{¹ä 8¾ú™ê¨ê«›ém÷ˆîV?q )а[¨Øï±ú…x@ähÜ|Γt×m¡#zO¼Éÿµgá—%`hŽNa0sj£:Soq0óúÞYt ÔÌ»úº9sŠñ,cDGX|››Vá1{ä Ô[ý [ýŸë™!–ö:ÃA|TßÏÆ|-%8MŽ{ž³yâÄ`t!8˜#¯`7áˆbá&ÿ~êÿÀT„°ˆ …Å÷ .RHž¢u£º´Äˆ5‚»£”×>$åàLnÑ.ÿt¬öØ0±Ì8í)šïJ… U+žÂçr÷½×u¤·#+°tÜɵ^:I³„n¹ïqà~usµ4æ’Øå×Ãÿ½A6]ûàaÝõ/­ ¹_péýŒ…ÎQól¡•¾‚Ϫdà!ËSì2 ­lìÐdÿÃ⡽†šÓâSxœe2 ‰lÞ.st4ŵÚÊV…œ‘5jGé­\B…ÎaaÏ_|‹F·¥pËV1¬ê0ª´L˜_f›Tl€ÛÉáÝçħq^¸† ftR,A^EÜ.@LPvÿ³©{"cˆŸfóZw]¨½itÓ6Ú‹09šíS)[ÕªWÜ•ÁèóÆ0ø5ô<Þ-F0ÁàŒ‹R¡wt®01X_s¶è™Î.sJúw"¯Ó·¢Æ>Báqw'øz~q&ëdgúc|}ÑÌb‚_‰và p0Ø—tùr›q­óTŠÀ?žã`×àʼ×â÷<ΠD×ðùW’\ñ‚yn*‹M\çy럤”_ER2}òdsÉÉI¢ÕW+Ù0­åöɈ†÷ ñâÔ×׉³Eß-Séê1³ü¡÷ÚÌ¢ÌAŒ”b·Ù–6eÃTÀc…<Í&ª–S{1ô4ºö–]çÚwI»ñ­îî—÷·º"UuE/— €œMe²ãû#6ØF3s-oÏÈŸR3êØìŸMï„àÕôâ‹a‹é^ráîç¦öc{σpܼ Ÿ2Zˇª¥Š‹½; 5–Ïù,®åÏÞØÕè¡J b¡^~n ëø•›‘*ðéç9SwV€ÁGÞŠ0Іw“&‹ßÿ÷ùæ£ÙH”4Ž~ÙbpŒ|2ÌÞŸøZp©s%ºø4÷i>år-ÊáÖ•fm'@K§u¬¥¡n¨«‹JàæÞ·ÊžyÆ,Ñs«`”°s·LAÜÐávô`;ÿ1*J[IÏe<&»Ó¸Š ‰‘‹gØ1}õ}ÊÏ)‚eC;‹¸ˆûÐSúe›ºÎ)ÞžQïXÄH®pÔË™hÝ6Ü-I´,…œ@@FŒ¾ÌvýQþ‹BA•HkòFñLu°gAU|ÌWK½XU: \gªDPMYD¯ µo ’Fzãû[ÙççD«œÓÅð:•‰˜—Tlhï1UêÛ¶y @ši¥À”¦–EŽq ÓÖsI Ø/IÊf˜ùá]WŒ1ÏÊ”EDx Cfü?µ»t¿Æ%Ó"d²D£ež²=”ÛT|i†FúFcï E Ãß–$ø|=ýÉw©Ï…µ—⨸Õ(¾È](Ђ 9Z]xƘÇ6lE?×Ìn”ÁèžêÁm=ßÿ5«Ù.­ø_§¶*ýFß/‹V€æ~ ·¹ö@b…×À_Þ¾Uo^ˆÇrB–A‘× D‰9@TÑüSLÐóá_u—€;Fkwê®/ÝÎ%rÒÂö$;„«½b¨óOmVÈ&"ĸ_ÜM[ú¯} aÆfÓÕøÉã&s÷ P¦>òxÄjO&Þ. =LKˆtsǦ¤#ÇÝyƒíÖ[įЩ¡‹N6 ÍÍñÉ.ìØG³;w×oŒ¼°I'ÓÄ5?ÆŠwCe@}HÁ5Xì¨ÂË 8¶lhÚi±ÂâHÔÙø€Ý—Ç> eŒ²ä,Á‘Cs$‡ûØñ}jšGxº†nÄ¥›b”@þYi ZB¼?µ± 7(Ÿx3_Qäe~¿³ÀD%ÙxZ ¡áÍ“ìÊÇùë¶ ŽH"§lä ðtµ.˜¿Ÿ"˜˜µ5)Su¬¼ ~]GŒ’W1TùR2xÊvÜǵ1œÑLJw5nÌ6à6$M¨¤6’HuõD'ü3õI2ïSœåV‘fâùÝ‹w—<¶héb(âËz”Rú!žIÂôÒÈì€Ùá‡ùáX%õ}-£œ:§ØÏ!ô›ŸŽzôq–ëf…é3Œj]Ũ’ŒEx^ 9…unK3ì¿»Óq€±ÀñnÀʰ`¢ƒ‰¸’ŒŒ¹ÅÝì÷s—zû“eöI—PÔ Ëì¿ý‘åšûcMšÆkuj,6Pï—ÿX#Ìr(¨±`á~LZ'˜°zº<¡4m‰¿×ÕA@zm²(Õ“v˜W;úÆM»Wï€zç©¥í]¤OHr0£p$(É,T¢Âɺb=t$‡NUüSXùòB®„­x³ÓühÈäD­f›×WÌ}p…’í¨ÃHZYý¾j^óá\£Ÿ6f £ñùPi[µÛ™L_X$;‡‡„WØÄPËÙÖ˜B±hm1ÕKÓ8ž8ÚvœSën„"ÿ› Ï¿Lé¹58'~à»tûç˜ç‘,Óòê²R6;ùÎ}–5W!¸QM9‰>¬†6%¨rPZréŸÔ õÏ^ÁÙÚ4É-îpt×Í?ãoÑbâÒÅÓÖüèæ¿ «€wâ›+—JËÅ0ä2¼àŸ‰Û 0àÎÃ<† $fذÞL>󔥸ÂbÚH—ÅÞ¬˜mdµÙ‰Âã§9sþPó=ﮑ<‰Á$yFÜPüÜåj†‚UŠ—fL{6;y ¾¯RÐ)'eÓôR,[‡Ï œàËyY³zo™Šæàr´$>Þ1™]w#8â·£Bä×Âclþ‹Í¾ƒ¯ýªÊp,uËM§EìÏ:šÞÀA%±hç}‹v³âçb·TKUdš€µž¡ØÅE;¥‡8Qaþ˜ôN¢VØ‹ä7õ¹\¿Øþ#Ùé#À›õR>U÷[©àLK[¿×ò}Ä’Öî¬ ÒÕ!TOSkOcîVy ¹;˜{L– JQ>cf>ÓÜú½x@)ê˩벬=C¤LeÌvgtí$Áدƒ®†Ýhô'(£NÒ¿¸ìõ1YÄ/›qï´¼ƒâÔ[ÐÖ£ÐÌ ²G+±e§¥ÉËš\'Ž ö­kÎNhµÎ&Äèb6?fÀÝÙúö«¨*^# ³lh/7òÿŒ+<ü<ÙÍ‹æµ..àA¨p›næØ`èv)DC¤1zh\_dš lqÑ8>RºM“?NrF倨‹añäÚzh¤Id«ŠŽ@-å›~Åæ1C/䣊xÑ_áîþ†A™ôû£ w¿òÌ[àü#Ù=Ø·ó2]ÁåùÈ7|t÷/¨ïr=0Þý,hËNo$’Ü—È3T-<6ž¡UàÈÝ'È™Vɢׄ{P•ºÍ•"ŽnÝ…b–CbAéäó << ©ŒÀ3žH%vkÁ5F,ÇKû`ÓŒ*¥òͲ½f'Iýÿ:²ÐO©a]¨ï.§$?³‚bSø‚p‚g_‘Ï{¸w¼Ùu‚ð&:#yîe1O“\ù€0$+4hh‡bÈÕ/u?Ü^¼¸8€”}ú‡íÌlÎIðŸ®P¦Pui -Q³™*±þ‰ž¦FCtŸ',¤;æÉµÍ>gKÏ…ŠF»/ÿ‰Õ ìR+®¸f±|æy)6ÿ°Ç^pRÌPOhÑ ,ÙáZ/Û].»( áZüm/y¸ü#¤æþÒß˽ÏNW|›™·*àŠ 9‚†·M=Ýö.,‚±V¿FU °ÝS&hmç/q>e“¨ôœƒ6®ÖDÅÔ‹Šš©dßÓúè[¸žRÖšòPäLqú‡Ð ³”eù²î®4`LÒFyý.®g$‚NÃûB:êè&i‚ïÌÇ,jòߥÎþåU¾ ßTR§Y!ÑY4z™â†aë…&¸º Ž>•dåÄQ F½ë¤ñå…w|ßoó7O8RZ›U3ŽYI‡uËÙ&$úüÉ=áwñOð[ÙúéQ°…½öõªšcK[Þ—Zåh™U”QIiˆ±h-k#¬ãàîþ‰#û‚ÑÇRÇIœT´xMù‰k'Á%ÃHuÏ~5Ä 9»Ãc…¯\' zä¤ÂÇãñSŒ„v yI¬èžw´ÏŽjÖ'6ÖÌxú{ŒBøDR­!È—mÁªxPyCͼò"„Ò[fŸ]yw×;¿E3œöl\+ª¥“SõÊ¿‚IYˆáÜZëÇ’Y¶õjÇ+÷[Ø€&­š†µ]b¬·,‡z¢ãC{_~~Ý• ÉðLÉ4@ᨰ¬ÁÜ­·xƒs`3“HÙwB×(€qn’]»ßpf09Xá¿]{@wävY½~0ôéVrY—¼26ϳx&ç&£Ý§å¹g-V>…EÑ"g·0€Ø¾sAµôåÑh‹Ó×1ÐÞ¸½EL«ÓNêü£“«ˆ¥/l_ú(H“‘öÜ.@è]#“E|Wß*èf‘T(JA·Ù+¸ø|Жºþw98.²–æÈ²Çx{Ä5WõË’<ýøÊø¹ÈûšÂ|,/†þî§ûvmr¢¢ö!$ß? ß‚—Ý0×jϨCŒµy/þKC1JX6§eü.¤½h¯¢2¯—í{ÅúûªãÎsÇ{ý'_f;{aQ6‘ÜpP\›Ýñt|¢ùpœ ØC'Ê­§i|ÒÐH“Ðtjû¹ÂLNNUð<ÛH“Qɨi¼¹ „ *åÕû÷ ±¼ïõÂü?ÆÊ%Þ†ŸëEÈp(=V—=ŽCg9+öÁ ëôYÑHv °Ë «<œ)"fó<ƒòØxî3YÇÉëJè=¶äßTo¼‘Joùyî´­x*­[ÅC'«·1¬‡¼Ó¯ºuЀÁJÔÕ"YS £&; ²,^Sno}ø9Ñç\Üem½Ö€@€gÎ&ü+ o[ßlÇ|ŽCÀS \ñ#3ž)³±ëœ7n‡³FÌÜà^8px ^‚µ-<¤a‡ØpÔ«â‡Zø°#rUû»¡èm5/ø©¼uÓVZÉÀ„ê 6ŽúuÎn´HíïJ·v×”p›yÛínX¾¢®Ë3pù"ÿñ‹ Ë 5n~‡r¥Wz9x*¢8¤\Íœ…Ж‚YG2>!!ä€ÜBÑ·CÐ õ®U-_}NÉ E@LRP&á±;Ë Ã~ÂQ½E(r,ñš2ûÊŠ/z€zúÍXù?̓ÜóïXþEg-ûp\ã2?-Ô!uÜ7Ç킌ˆc*§T›ÕPõ` ¨kÆ JÕÐÇ#Â9-UÄ,Ê¢=çSǰRh¬´ØR’ÍKÓ¹Uõ x¦Â¸˜Þ6>d~t¢C‹·z"U3!øA3Ä ÆpÜþ¦B0×)2‰‡I;ìTX)¼,œ™¾ ×»Úõpþ¶ûÏèõÐ{R°ð†pM/t“€ä# hRZ³œ‘Ö¡4A”Š¢ùÖ ËŒÈ$g´xôWdHoßæ‡O‚ÿ ’ó[Z!ûW´EÌ;ž¸™>Osÿ‘Ïé}éP7“†ª$3¶Š5òd´0<‡q€S-¸(UÕÅ~À‡@ÇâÑ¢AŒßOGWÌ"Æ-D€:3F?„NµiÖò+Ó‰+‚ÎàH¸ô!š;L¨Ïn¸iÄ!OèÌÓ^¯á È)˜)ï ~Ó´ûÖŸð嶺h8T Ë}]Ô Íü»I I*"%Çg³xpËfb(tM¶/2XŒZ¦Ì÷¹0NÏ›ž'Â¥|Q}å3Æ€¼ÀË/ˆõžˆ¯éæimä㜠Z‘šBx»„/ÂêqÌ].*j’µí÷ ÎÞj$¿@$j¨Ù!%{é¬k÷ËåÁ9™! Ô×iOsòmg*{â0D}‰“\aI:^·Àlââ†ÐyÛkHœOˆ‡±3uZ@:5itä¹Bd"564Šý¥Ñ ?·2ÞT^ŠAü‡áü¥Á58–@ÃOŽd;S7.O‡™,:É#.ëqº¸¿K°ÊC ñÛ9¾ÅmBÛñuÑ„6%tÓŒ~¯òÏõŒaÀ|ÏïŸù‰Â´˜‘²XáñÚ[†ÈÒwøM6Ê"Ìn†ÌgöÕ¡™‡±¿¨£Sã, šHãM .’šï<€4¦åÁ…Û.`™õŠ‹Ç¥KÙ ½F¢‹IÊÛ_GÔÂþ”ëutBDK²0©Q(L ïhœ‡rý ÇŒ8œæŒ¿W°HøÉäo!;x–/{Æ)ÓyòÝß38m_ªL®¨”Ÿ&¸Z™°Þ«†ï†€¬ÔjûÔŽ¬öË©·jV£'>m–Ѷ™†~±qÚ׾Ń‹X3xv•tÐfÏTí^25Ëé†^ÐQÓŒÞ7©—uŒàC3嶉l;Þ<ÔqNŽ|n×Ö¤ÐEú$­‹Ò¿ï",¬,w[id®¥V,–œ’Ön{Ô¨$H¥ø» ¤Nÿ½ ÔÜŸ{0 s"3ãÛ‹¤&%~² IOÊ&»£ö©'ãºi³Qƒ¨µUi—GÞ#YúK´ì¦yñž°-VMä¦áÛT…­åóãoB|nÈ$_Õ‘%„Ê’^^Fº”ÔC½Eî÷µ"=Ý>“P’` ’bB\š@#¦½—]R;|ý¬WÀ?\R–Î'LU^ ©vªƒ‰\‰6ƒìxIúãÊ5’•ÇÒ–q•¯ÒÙK­Î縗Év'ò#mi“&žÜ-_‚Cm·Pmè8÷$[G’“ežÈ¿Sš }O:ÒÖ É»é6‰I´z‚øÝûÇéañyÁïgÎCZÙ6w·¼O.E…CòÅvƒÇ]”VÎUcܲd(0ï‰g2¨ü'Ÿ1‘rã€4ªÇ˜KôD¬^«ñzdR$;‡ž9ÎÒÌ(ìúû·Œfôû:ñíJþüÖÚUƲvϳŽAÐRyûî·dé?­Ð£Ÿ:ëAd۩ɉ_Jó{g}Åû}E°2O9dÓí<û´aþû¶RŸ×RÒÿ¤èäæ"Ü(îJº63©»Y}aa˲¾ßßxPÃ`±ÎßL 0Ã~0ø³°±¦cÌ”Ï)£¢0¼"˜ž)¾°¡—zÔ÷*{é2]V°UôÖ{“ëdX+}{ŽDì–Ê(ˆ¹`Ö*Èc“YTIõÝcxÅASÈØ“K|ë££Žæº c¦PËÈ~¹ÑÂÛËáVÏ`ŒÙLäfÁü>Úê>Ò\–þ‰§Ç—Ö'÷ÁâÙ{Ø{ ×5Î,`©ÔKð'ÓµjÇÐ¡Š™9±Y 5eèÔDV7«è>‚ëõͶ^ú ât¸8ª:FC¿è{À)­¦j Üøhå‹ÛåàV°0ƒ%åí®¹¯yç“sýäÇç§å¡†0#C r}P߸Ð!Ãú7Æh·VŽ8‹·l¨F¥EIpyWI¬ü¸ç#‚¤\#öÐ|ÔFj1°Ïñ2ø®:ÎöÛ°±9©9úчɣ‰ìQ¢2oVUŘÉKmiÏùP' Á«;)d¡©G"?ï,ÿ¹·r—öžgýÊy:ž1&oÞ+¥8h.ÌÚJ¢Ï‚›·L ÞugS‡ê¼p—ïs¿ý^Aè«kñøy†Ô•”M5²FL‡åÀ ƒùd¾˜Q$OvÀœ'Oe`h è }rk£?€# ”‚nƒÅõÕ\¡“Õ<5I“¥U ÙÞ(HÝà)*ljRXÊŽÓç0ø‰à榿‰îŒVr%¡lL×n°…Ê”Dª®BÐöGé3+ ¾œì¹4G¨WÜT^ ™˜>¯‚:FP×”ÑGuÅtž–Œ´9¾uxc ј·ÐWCÑw¸á8ä,ž›-<úÕKîjC›ËK;x•¬·¯~È-Ï©óøJè¢ò;ÐnË‹¦ù_@–oÂx“Û?Ž¢§â[XhUVÁrE'â`Z‹ïyD&6Ý:cšf %¨Ž^Á•}ÉÛ¥.õߘã¼j¸ŽÑ€6Ú~*×MKðXœÀþÿj'YÚEþÔd”¥m%Z¦Ül¢‹Ä†väw}eóQV3%íƒ3eàj‚¡”ǽ.é hâI4Âemô²ô>~V\su2±k +åR•úÐs8 ‰XBn=X |Ûn(ÍäŸþäO>8ã¸ÒÚut*Öfù%bõ: ›y‹/_Üê ýÇ­ª£’†@ù{nfТU{juÕnú;èi[àêo°R_á¤øðµ_D§VLÔDê²÷ìûuµ?íaþ†[!mÿ»!B´Ï8ïÞ>ž0Ñ®oëŠßlf{uCyÏ•&‘±Ÿb“èaIfØ%7a§”-GAÚFâ–âÒÄMeqôÃÒ«i¦â[‡ÔA@E£1yhÁ+ú¡XJ•raµ¨ª DdbÌ[pTØ{Jкf‡ç@Ø ^c÷ ªïeÑÍãvG )áqãD, Ý“„v’ öxi©Ýõ¢’rß×VUÉà>»X{4 5Še­Ûéâ§©4{ÐÓf.ºï/Ї“¯ÑÕZväͳԃ}\aD-zãT?>ÅÃIÒ L¸#¼ÙŠv`ªúNa\#gÆÄ ‘Â[&õu ç SŸŽ´BųÚŒVêEý«4¿aÃ_’ÃF€_ôc#œ’ù´€´´J'ç(&xHn_`ôÑg;Ücä=õe«Eü6= ¼I—i$6ø.Œ’·)ðöŒná¡Ä” r‚ó»ë‘ß÷Rê[=_ÀÞTï¶0-EQU&ûß~|×ÚÂp&5ɇ,¡š­¾Æä×&†{tVµF5úçÂXžËœÛÛ›ŽT“ÁE½ïppŠP\cÁu}{Q©Ûr“Ê‹—•ºÇ4ÿ@ž¦.èKÚr»ua‘ät±”ðÅ ¨b:a9ßÛÇìÚy?Sz¶$›Xîà§Šhn§<¤gØ:Ù7Œ¥SÈЋèÊ-WÖT(m\,-Žj$³BѺ£ s¿ç)_Ù.÷ƒËÁf`¦Huy/^QËÐŽ¥¬ ôã•ëziÜáj÷yÛQøºn®’oCl¨2²xÒ!¤÷Ë÷Î5v@±; WS&H¥ãAæãv¦>ÓdA"öÑ` N¼É°j.?N z¬¯`™¿÷JlÐN€þŒèü$3#ê•ÄåÎ?rP`€Xï¬ÅJeׯi²õŒ8t½\I9Aò OŽ«LÉ á‡MòŸ©•kÈæÀC*1I·ºŒ¤ˆ§ÆþM×+¦>sŽÊg:Pë&ÕµuIÍ)‹D¾C³ k u­ª#†ý Î:Ê3awE:7Ñ™QD¬"8;­ CTè=¥´<¤Ý[ìŸ ¦cºƒ«W€]„þŠÇ¤Ïã"ëîáʬ Ë!Ui s0Zº³r²—½øPýÌ6çâzúP²•n+tmñ©äœ7êè&i‚ïÌL2Rªû_Cï©ûÊ­ÙƒU€†•ø9y}´Qh©óþö¸¼×ù:º¸h-ÂG~ûs«VL]zÌò£Èö @L¯Bd„^ÙìB¸\õªj?š›†ßÝ0ó®Š]Ú‰*ñ¦D ûE´‹èyA;»äÆóPÚ ë÷’}Xs·Ê0„^äÇÿIøÝuö›æëSÀSëQlR4~×q|ž·ŒÓ6KÄÕ²c§²Péú ÃÎÄ“y–!c¢´3)V ÍqH¦f¯^µ[(_ìšÍ8“˜Äœ2Pâ'ùÛøÍ«e-h.Þ7Épþ@Ü•¤ƒ=çÆ ¶tWH¨ÛÀRBn<•@ŸûÏ^ç%uþ: ïHåÉŽêO™ÍÆ}¥nc_KLíÄK¶ÔåËy4úÝ –cP0w"«dE•÷†86:˰äר`\¹µvô |S´Ë‘ö a‹7ÂÀœÌZ^G¡¨Bç41D‘YiB(ôÑfEHuJŠÐíA/©6d%Ú-,„Ÿ“kz[66ºLœÓ²gi­¢ N¸Óò½‚Ÿ§;¤ö½¤Šïá«q×Î%pàŒ6[Ê¥‰¹ûFéz° Ý8×y*£ƒœ«É»äþo lÿ9ÖI)¿¸ê{ÛûcíÛ!G¿`SâÌžx)­SÒ¾¼‰³4¶‹¶±FÒè÷”ÁTm•n§fñFûh}Ü™PÊ,cB]Ì5é™-®4äuîµl–Ñ—Çeš»èGÙDX3‰„{eÑÊÿÏgXZkËâ-¡â³î+ºñƒtÞédO®¾ó"dVê}„¾Ö¥ï‚ÒzÆj/o‘š#ä¢)ì„¥WË ­Z[Wpw·)YØF°"Grør3/|G:ï«* ±ÏZ@É(mžÕË_Ÿy¼­¬°Î1f…0OT’_LÒ—žD85Lƶ’‰iqò…Y+(ÑG·Jh06{èá‹Ë9™#Ê­¨(a?ª‚„a´X6Tø‘Ðç%èÝÌè•€ë’+l¥W‹§¾mœ®ù܇ FóE¿¸”¿‡],aõ`,èþmmä¿7+ ÇLSJûŠËãh%{S+g=üKºä{Ƒ젠êÈåê49q3¶Ø9¶÷š\MÆ .Sù'ƒ`ŸdŽ!,V0C´Ê­b”TEÀä¢îá‡mSÿŸ£Ã së;£´NçGú;fìÖ»C‡LbÆSTÅ*Ž]žÍl²ØÞ{˜_GËWq€š©Öøôƒ{ofôαÒЃ‘üûq1°íÂåÆä¨l}Ìpֆ׫©DSÛþíÒËŠßÕr":‡ëqé"àH½ÛÀUt÷g…}&ɾV‚MiÅR—µk¡BÎ ¦¤ôâ”ýgñP÷g¥:‚ùØòïVbQú9$ èë¢óE·1õãoÇÖe÷ &cÐlØF] Û!ßñ9¹o[uò¹@$Ë-oWÌ"óºež¸œÁÈ£i iÕÔÃe…æÊqò{šÌúô.†Ó–,þ ræÏÚmàìTÐø×¸ª¼´M»¾þÛêM])Ð"¿Þñ%0Ý÷éÕ1,[ªÐºgŽm®T]sŒ¥¯ÊAIRÌ J™Ì¦Éd`ÒÄ‹n& n ÏñÞ¶ðÅoÌIOwØÐüa ¼x3eaI(žœg(÷°uá|¥š±L[ÁÏ'šÍ6&‡–>ν@ÊóÑ_ÔŠRS½‚zÛCÑ’ëqžÚ Äl¬>?qœãÝlªÌ%(€´Æ×÷2–0ŒŒ]’i!œÊˆL%¦Î»A£ý,IX/’ñééŽôå6Í©tþ˜KvÁ\ˆUGœ¥‚©½Ô¡˜ %áÅû‚àrÙ{àßÍçV—Ìl§ßo{ÙñÚY.wö™alÐ:_ªqiµñ®’Ù¾[NÅNªS4òÖw_”ŠM.¾yó…„'Éñ”œo|ÍâOÕèù“DvbV¯A"(<¡4š9wEežG‰h¬#[õ;„†×!$ååù=t4máTqg©uå4ÔÂÑ`T‚•¶ ±„Pq(lAà†ß¬"G¾õ¶y‡{2²p»¯ˆ‹ç@CrpŠy–Ê;–i»ß椮™}q÷[v âóer±2ï¡jÿß‚!£*ö F‚xSsÌóÅÃÕÓ<CltP½œ\9EP“Ø—Z/†‹gUØi±s4¤E_+ö¡äôW— š<ÛD&ÉL3Ì»$§HÃ4ó ]=Âk›4ìí‹(†cÈW„%Ús’¸gª¼£{oÛ†ÅBÊÿ›ñQZ¡É¸bêäZ›ÙY¬§Êï›Ó¬D~Ä¢²Þ»öl¥Ém>æ ‘Ä?8µ¿‰‚‡.œÖpz‡)u—‡ƒÔ"*›lÛ Ñÿ¥·[‰{NÔWÖü endstream endobj 562 0 obj << /Length1 1791 /Length2 20361 /Length3 0 /Length 21531 /Filter /FlateDecode >> stream xÚ´·eT]Íš5Š»;!ÀÆÝÝÝ=¸»;l\Aƒwwwww'¸»kp¸ä=Ý}úôøþÞÁ€Í3­Y³j¯EF¤¨L'dbod*no¤c¢gäÈÊ)Ú931Ò ÛÛ˜˜éYáÈÈDœL –öv¢†@SnР` üÌs032rÁ‘$LíL>&#€œ)ÐPÅÃÁ” @iø¡hï ¤32tþt›Ú™[Ú™R}¦ˆØ;x8Yš[ÿÖ`¡£û[éo¶0=@ÚÐØÚÞÍÙÚ`hg¦—£ÈÛ»}‚–J{;€‘©…¡ÀÞ  bªPUû¦ ø¦ ª¨LEÿYXÙÅÁÁÞé¿fQVQ• ˆ É«ˆLÕhªÊ*ÿª˜Ú}ÎoN Wùôÿíóø7]NLEHESQŒ‰áïLWS'gË¿mÿÏl䟓þ=Úgª™“½í? ”@ 7ƒ››½¹‹3ÞÞÉœÞÁæŸùT,,nöNÖ€ÏO'SÓˆq±3ù¤haú¯w kiljçlú7IÜþ_NÛO*?“>qàÿ öIðoM›…œMMÿ£…¡ó?¹²ŠŠ²[CK; ©¡ñg Ðèâ 0øûü55¡ø×€¦'§¿=äþÛåô?mþ{taûÏ•éØxùºýß3´sqöü_Üüç²ííœ-Îÿªh 0³´1ý;½óß=³´û“’—SV¡“ýžœý';vô@wà?Ñë ‰Êr8ÙL\¬ÆO‘ŠÙ™ˆØÛÚ~Ní ÷—>QËOž€öN ÿ)jk;{7;¯ÿšYÚ™˜ýåÜÄÅAÕÎÒÑÅTJô¿B?!¸cæ¦@#ÀÔ`ênlÁð·Ñ?:ù 3ý…? ðñr°w˜Ú8›úXš™~~Ày9ºš€N.¦>^ÿÛñŸÀÄÒø)ñÏc÷Ou);3{׿àÏIþÛõ_›OùÏ¥ú<Ÿ&öv6S38y{à§(ÿÿ9aÿ§—¸‹¼¡­)åðùƒ m-m<þ#ìÿD¨›þ”òÿ‘ké,nénj¢h 4¶ø§ÿÂ¥€†Ÿ‚²3·1ýÜ Õ¿gÈæS¬ŸŽåßû @ÇÄÊþ|Ÿ:4¶¶3uvp²üã2ýdàÿŒûIûßa rÒòbb"4ÿ©•bÄìŒíM,íÌÌlìC''C8ÆO0³±¼˜>UlbêþB ôvöÀÏ€ƒ Ð`fï÷w9¸ ¡,.NƒÑ¿­OŸñÿX¬¬ŸÖ§® ÿabd0˜þÉÆ `0³wqú7À`°û\鿘>ìÿ—ùYÒé™ì࿳?-·G³~Îæiêô/à?yRü{9ü£~Æ÷_·æ?¶2ÐÉÞÚTÝÒäóã…È,ݵ?¥Ëô‰þü÷ºÿÑ€ìß§îe Û»{ѱ²3蘹8LìLŸk`aõù\ã]`ÿ›Ïþoûïí05u75†[^´7æùa•Ô\â+–7] IÆEVŽÅ¯! ±œ:ÝŽ‡#š½Cl*ÿ½Ù?<ß^V’[×7á»]¡ÙL›÷–øŠ©;%Á]C_9_<$1¡±,5zÕ€4¹%ÿÒNbªcé¬\Í"ÖÙ´ÖØV€ê؉W{×S$óäêM"±NiëZ¤[Á<çÛ·g,@ÍA÷ÛØÃ∅ô!H(¼4‘eä‚ÅvÝt¢P·Æ~³\í®;œÚ9¶‘›ŽVsøQ›¶5f¸ç/°#Sl`¾Çüë~u¬Ð²i÷BÂäè#mÝ•àQs« ÊôHB5ÁÒ Ávòú¶Ä׬á)­'÷á}ÓŸT»rŒ1f‹ÛŠº7kЕY \qäSæ(A˜ôP§ë‡«vß¡¼ 5¼ Ô¹7JïÿòáB8ÌyôC@›N×¾ v¹0ïg]z6u­æOú6ðBäU-ž·qs÷„¥‰W³P¿Ûc5£‹ô³`G"Bgìiø­9¤¦Qã‡á‘"^nÁN «‹@넎‰Ó2G#:8è£0!›HÒWÌ;=MÃùž/ó–c”gÐ\i‚(Æv9q•«c‚±s#éìJ5;PhJß«‚dñ$«Ù!©ùœ¼!a hÊIzƒ-Åö,¿? ZÛ)bÁš•r÷W7ž-`ž1ÉãŽ~IÀ\6™¿¶W?$ŒÛrøÁæøÕöÝiÓ'÷ùöü‘”¼µy ÑX’w¾ \r5·Ê¶E* §%드f@7Ž×xvO–< &“~Ç›œl  Þ53aÜ{ïK—5ö·9 øö ôºiþÇû¯«ÁwÙb_–&l9˜Åýe n°¿ê¨5ªQ£çóü*†:eˆ)ƒßS†àÚ:ª©ç2•7t9®«27_Ð×w ®‹hÚ(m’z{ÕXÜMEñ çïô5ÑïYqÖ¹ÊìwŸ*›)œ{é TŸ_ƒ¤èݤ·á¤}T!|Ø)õúg‹’?ScK¿†Š¸ðÒ£¢Üã“v•°B‹X5D݆5‡íh\QBì¢ðbjî¢ vQïxè‹üá_ô%k*ùîIÊòuÉAMËQ%ŸOÂB8  ñÅ?ˆx ¡¹{¾QÚ+V®•60~˜N}Q…ÒV‡–.ÊŠ´N{´5ÜÛ¸|‡h·í&_g7Íÿ…"ÂöKé•§i‚Öž¶‰Jˆnôµ¿É®iDCª¿•'Rãö…˜SË¡à½@O=Ý»i šœ4‘BWóÕ,º¥íPRá ö¿ï\%øAáeå"Ü\Öƒ8ðßGk§ú„†ÊisœoÜœL¤sµ¦Žfî:8ŸÓ½«Ò'žò{.!±]’,Ë âúP«oµ~{³ f•'x {˜†’ïêå‚é¿þ\Ϩ¼µY{sLúæV˜¶è=ª¤6c±,¤×þ¢Q2 ßûwÿ…ØTÌs¢7?MßBŠ­e8qÁðƒ"õÝ4W»ÔY¦ñ±dâÃù“¡ß#;éÀ£Bå˜ôÕô` ¤ë!Ùöàþck%˜s´è‚9)˜Q «ÅÌZÒW{õ‹ ¾½_> Þ û£A»©´rª±»N* Qw"o ·Zc`¯‹õw`ÓaµŸZ wB²€r:ÒÄÛR˱3¥Ð#¿NcJTwÎ;f„x·ReIEÐq1ø5÷•[r/—'nO»™˜Þ#D×&?™1mùRÒmʲÆ.#ËPx}t“KGö†ýzW9æœ0¶+æU/²[Ô hì)- ʂěJŒ…`ÛürÆZøt7TÂ娘‰RWGuŒÌwK7Tñ‹×N:çÀ˜†xÅ™ŒÜf\Mä—«ö®ïf>ÒUªSMBv¶1\¼e&5Þ²U£Â7‚4˜0öDK·c4’m¦Ï„†¹™{É„Ý׳¿“ÉA19Š­wãká.Ûn—‡'ÒZÛ¥o¿yï/ L½o/e–Øs%ÔñÉ)'R¿¨1`|ßÑg RcF«MéMüôz9–ök¶Ö8êšø‡ÁÎW®ÆÄ a¨}™›e¨÷¸´İÐU^Õû,dUZ¸þ.ý7¤Ç¨•PˆìÜ[ÌmlÉv±¨1êp“ÀÉ Ê“ zRÒÔ_ €«®îéõíâ0m‰~Ë¥½æŽ·ÅγI)DÏJº÷€„äVȬ°eOü %P§˜JV‚ Çéo!@B«˜ô´BÉÌ "òDÜV0Øn>}d,35*œxyåë-~Š„õÌKÁ9ôXˆ¾]í"rîT_Ù÷hxÃNUc²•KÜ NÛ6GL.•­ÿÁÈëÓs‚ÅHc =ßwæY,Â=mj(ýcaÆ–ÊïFzÇ{É^/Wÿf=K#KÞ˜ PTÄøˆ#ŸÞi‚ ¸ýNÛ 6>œ=9)XÄý@fÁÆ¡Ÿ‰^í%ÇÙ…mƒí¬lÅ„“L‹SõQ Ϩ⑛nïm)†Md†;ÕÔ‘*…~'¸{Z7¸°;æ"|JZE}Ù›u´åóg!æ¦E9±QS•4+íê¸%®Êaõ{ËAýòÂk¯°y!¨{óÑãWÉ¥3Ô=Ei;þUuZ#¾ü//þ–iÄ*ÊU6—‹X‚­¤†Ê4’ñ2dK„JRyZgÀ‹–1~>KÒ5=tDÔè<»™’G]¢Fü‡{œŠb…ò;‚ÖUÕÑz–wä„ÅÊ{È‚=×{‹™­àøíƒd{ÓXÂõðzdã-¾Ekë·OaDàeˆÝêTezryÇ$k°ÈhNf s,Ëa“@öTFªŸ«ì© ÌgÝѤ|ÿäkWÔ;¾ò.IÒ”¸Ç·³U£…Rwn‘²lz?iº´±“Uæ{C3ÜÙõ>ÝDæZLø[ÇãP¢¾ó(íµ–ÐÿDûBðõ¤P0í 3¶-_@eöqþ¨H}—á\RÅØ²¾ÔcÛfS–ú¼pý OBðÚ1¯|vÏK}äî5rp¨ ­WñVäÿý>¼ñ‰•Óo>„]\ä–óÒÉø‡áèÖcWæÒU6֜ϘÓ\¥ï3»û› &„RÆZ¨(a>œ5h´fÏÊø¬ Q©‰ŒNXÅN׎kÒGºUr÷“<)*˜ñUÐÂWkä¤Zg±Ò@¬ t8x%2˜Þ!8Fíø³ü-saíDimeºò{zHÙÕDT óh ~Ž:‰è³nú°;Œï8jo½bÁ‰á˜6fZÉ‘Êì"NÁ*>åée[+pD[òè´aËÐý¬¦·VlˆZ&^í5,™q¡Ä«Ò¼˜RL[n<ŒŽÖ¿]”Fc™Üç•£h9 rƒ_Ò â÷„Á8Ö„<ËŒS–æ5üî' ×btO$ˆL“á>dØ6Bo§pOä2Ps—Úþóœs’,=Ó(+=C$óóE3´õ¤Öøù‰lÕñ±(WëԜʹNB½‘ oޏ¿ ëšTÏj Ì1)¥œ©¸M^Ý)ÜÊŠÇÓ=³æà6ÛËÍ‹¸S¯¨qéÚd*²ÿ”*T u¤„Ò ÎÁ+bY…EÉÇ¥FbX1Ô×¢'‹éæÄ“îýKÇ·ÑWý:;güv7äãŸ!¹xõÇÔW-8dpE ð\\ën°ÀÆTL&Š,њ܂©X=M‘†iÈ%è}óÔÒrˆá2À±6ªÌ9¥‰ñçÜ¢v“ÎóÐþ®R*«}Ô0¦ÄÄÙêFâ·–™˜Ì’ÐIûƒŒt„TÕàûÖ1ÍõAþKJÑÁ ì¡ImàW~½Xî¯[*6M¯GGýÊ"5H½h³}£‹T"öçÅ—Éö ¤3Ŝ׷.ðáº9É?ºŽÝdƒ\q¯:0ͼBÉš€5PFæ®áÎg(ÀÙ5Ë"æMçUáyâßY§ûØþäŸúM̶oö˜×Ù—kË®•3®ÛÒ(ƒ¦G´_r$“FMLÞ²oˆÎ¬Ãªõ°Ó™Û#{”x+JÞ¢YW*Æqb´R’ó7/ì÷Sh1„ÐÜÂ#ÖÕf~á‰úrOT#$Ý)^¥‹šÙâ;~› Ú ´Y¦U)¥âG1¹Šµ^VhØB^Û‡|ᰑ¥’÷øj™è•ÔAˆŸgÐ?YpåÃÔ÷BËJ®jR!˜/ÝÜEÞăÝh¬ÙTSo ²¨wZ‚Q€Ùéü êÓejñ¨"o1—(>\ûÅS|i“ôË[n£Îë Œu A¥á%/gàÙD~Ÿ3Ùî¡>¬â¼Ã²z#Ì#Æ)Yá¦óˆ_¦µÕZÃlGl/‘Í1N-k%*qx]P~ÒË·µ-:ÄÃuBqçãÇïYAM“ÓUBÜ$q»ê4ª&'\æ‹YSÞáÝúÑw’£Î§ôÈ´`±¥dÍ*f^ƒBˆÎ«Ë[¤w-˜RÅ“NÿÚ Á=n?ð5Å»¯âêqBJŒÜÐ,-È\`sP·qe oõo”…çB O¹˜ÚÙxú“N î!‘´éýS¤¶¯m‹{R1Ñ1y´B.]µ`ò•x¿‰ Ä#¦vrgìouø¢õç¼ðÕ ¸¯+*8ÌÄÂ#þ,w\d†š ¨EÎÀ5»+çÅÇ.`P-ÝH^Ó ?è¢ù©Þ¿G„°‡FH±Bã¹qŽj‘Û¹âw|ÜY¬Øž’„‡¼õ¤3€­*£Cz'”2ƒ µ²Ïùeÿ†îÔ¢MüëŒ0¬e_Nû´èpýbkÈ.uké×`ƒ|øõÍm§õ5d'ñnúi½·€î©ïÐAÞE&B³\¹ gÕö£Çiõ¨6£5šæÔ ý·#[ŠUå¨%ƒõᙈ¬A×´mY±¼ˆGsŽÜÇë%x «d.ÖH<Q4"¯Ó$Ž«õÂWåÝ´ãîxom›ü¾½85(T•¦½H'Vƒæ!ÿeí@Â$°ÇMЬd<Óv¯«ø~•M E\7wÇ”_â ù0øù*×@ÍÜŸ#^®.¶Lž3QFVäîë*'z_é³®bNDkç''N$ðš™Kµx|¶…¯Ôzñ~È$uøùØÜäa.õfFÄ4»‹Ùq° ‚{í2¤æFù2”Tø½ø='º}“´UFèbîÇkŒ/JX§¤òí²»®"T@Ö¹ñX‚c-n]€ÞõÊü¶kbK Ðð¼ðíWï"„|!‚# ¾÷äŽÝŸÃÛiß©q·:P¹__ËES9XŸN\0eZ-"­#¯«¦Ô6]ÁîÊè Tø.רq@dÉÈ› Ii]é²aúö^¼\‡Xs¯kh·ßÎQYþÈMMØu>¹njA™7G•4yK´^£PU7ð,µZHí%ì 9Q"xJ¼+­ÖËðæý"÷§zGÔ”´kÂ'¼\è¨óêZãº"»O)Ž8M) ¹Ì±­JÕÕÏ_ÈT“Rù~ª¤_¥ÕdŠc[;ý\dð^v‰=ÖÒ§p6xö<:"¢)l^IbÖtaV ‡ûÿx™¤Z!3úŠBTëŒeoÈT„ž 4'“ÉÙµfšÑJQ“xPTü ⺉áºv¯ûÍ; rIŠU*¢f”J®ðtÉS×0mÐÇ‘æa²×{«é<’)7Ãî'ݱm¸:ÇϤ¸¸³ ÍE±I0jcðDdŒ%A BDÝ20õZn­ŽN …TÙ‚3åìðŒoó¾ºy¼‹/ýC¸KúW§y`Ñ»Ô1jDüCê*%’NßÄÐâtÛcDõ¯N3hW«ÙhŸ¾ „Œ<ÒÔuA>Ô¯zïeÊJ‹¡o8ª (Èy—ãÄ+ÚëÍSžc2ä"+v£Ø üßw¹ ß5õ‰ÖÐZ‰B‚rìø;³ÂLæ4J]7PÁAƽ¢;~Vêhxåv†@"‡8ù«™êgdäTtGÑ Í+…Æb¹h‹È:Ë`C¹ŒÝ[“£Hñ§Öê%Ýû(ä—:Pf™Qd"X6½ÛŒL}Eˆý Åm§”{zëHR©´€Óp~«hÛÀ˜h¼‡NGÙi1$uß@ýºy;Äl5ôÑ[¨e,0Méo¢Lø^{øŽü•iA‰`᜿z†XÞœQúeÇðqþ[FÜÍhdû½Šrγœ‹}³ŠQj™LªØÔ‘³zF)· ,´ \ Ý“b NªÓsÆw2Z§Þý_Ë@êù@ ¢1ÌËÙ€LºTUõ§•Æ(WDÅgüšÑ&d$F]ß ß?Z v#âÆîG_£®ëË®ãþ\=*{v `ô¸-€Š„T›("ùA=!& ejê7,쟺QW6šåh,ñø"w’öÁÒ¢mî l-©0¸i5J4‰tüPÀ÷ë æ™°Ñg.J°¬À‡$œÇ}‰ØÃkg“ÅLªÌ`ïõ(:W$&¥Õ¹°?ÆfÛ`'WxŸótk©7ÐPÈk2\ ¨Ó…x#[·ñ˜´x¬õ{ØðŽÕŠKå1 јü5s•³ËLôÕÀ¡%Éx¿Tñ<·¾» Àjç/d?ø’­1±‰…ÌtëùÓÔp®²“q« 2(üy8{źJ[7y±¥„‡œ:ˬ®å)ºùùžÆì„÷~„<ª‘_ô­¤®±'ßçùÍ=ÕÒ ±Ç,蟃5ðhEòõâ- bTÌ,uiÒ>µwE¬èm>Ø+hn~s÷䣥¥v¦l¹^l°¸×âÑÅJvÄtŒwùdÓj¤£z‹^¯u*–íBÌúEU ³Ï<†[qûÃ0ÇÏ#ºðÛšg‘2l`µ &úý \’¶Û¸IIxî'+óVdÆ /bûC_í à}•\J¡»„yõËÈÎõ¦¿L¶þ¸VH…›0¸sd†îq ùx®PøW¼4ÑÒüà&˜_µaú:~TžÛåÄ8u²”=ñìè+Äš!›¼C¡Ïhs£Wè ™¸›ÑZÁcÈkÈ뙋xê»h×p9íD1 BéÑcTU›–Qc»Dˆlò[#BÒRÐÁÝ‚Î3œ©xã›õyƃÒm´å;âe]úÈ®Q#XnOYgô&W.€©|ô­G=ûñX»é…¸}‰µÛ*VÇkûÍEnoØ/ëŒ®Ôøœ«SÆ¢ôòXDCõy'‡ž‰íáòéa»‹dmÞ{ü¨Wúå—R¬Ò2#–+]¢Jº‹}œ]©ëD…]–VQüXéI]'õN¨›`÷Æ5ÕÚhÁñ¶k—¿l†„¿9F @NØðj‰))Û¬jµæ ¹^Þ34Kµ»v¯Ç:›ÜO1ħÌy»bkH—n* ×´M몌rrÛ‰“3©:«s’<稽ŽÁ™Õ["’óÌ‚!0î»A¦j(²N£{î›RºOªø.b9„°`éÁƒ÷Ê‘ÈSŽ[6äk=¬õ ~«—çløæ5Ä¡26Jž±Jm!^=§´GˆVL€ß’ûUxŽT Ñà8Šñ¦!·ku]™¨¶Ó×™ž¬Û»ç<Ìäª IðA…g“L©>1Ïš#8åÜqT–s;w´OR´×u$HZ\#n:?î¯"¯±Ù Ù!ÔXeVaF¨žÄØ”Åh“¶°z­raìïŒ%˜ÝçñTt«UB†#«í˜v¸ ‡$~™ÆWdâb\ù™þ STÏïÔÝL·>ŸÍ7æZC‚¦ýØhÌ«»6O¾c‚’b}Q†g«ˆU½Ÿ–©²n`µ2}ýÅ®HH½^öÍ…‡ÝAMµB|ÁMpËBÂj»%KÉí´ ~U½æÖ—U)E NCy<×#&ˆ»¶ÕD¹ÕD©ŽðvÖssÀÎÆ–Õ…Ï'½¡~™ü5¸œ9Õç„ŒŽº¼… S ÃÕEÜ‘Ër"¬ð¾‚Qò"µBƒvžzs?ÕÙãËýì MgX4¸âE1¨±ÿüÉèêÂØÐ”€5úÃܯ»¯[”éM:-YSvÄÅbŽÄ™AžÖü‚GøĆ_d²jÄG§Ùò.ñ{~Ñ›Oª—”Úô̽0ç¶øó<É{S^q˜ÕHÎÆ‚aØŒE£¸2Òãâ´‘KÛåÛr3ÛÇ´3¥ššSÕÞ¬AÝÀØÄ,úáp]Uo!îËK> M! ¶÷¤½[9ö)->”–ö-ãÝ\v1ôJ„ÓYÎÑñf÷áíFÑó“!$)ÿ¦h=$Q óµ#mM;$âNö¶·Ê7ÆñB Ô.¾mþÓ’°~1KúÝr‘ì ~sz§ ]X³lÍc;™/g.(†àH‰É=F?*Ñ †ØVIËÝC÷y’±—ÕéTQBÚ1éƒéhzÄ$«ãßR›Ü1 N|K ‰ãò>‡„1ãçlú€TµY÷«ò[MÂSõe]¼mú•Cæ•uŠÓæ_(¬×6öÓi½KÙÌRòÜ*×¶ÀQ³ÙçJ`¹U0C†Òüh¡å$*üæ ÍÅ›=bÌY!d»¿ÑËG}8â—–õw+-”+¶iòzh¦°Úƹӊ¨µ2ðo÷õ¹)Ü Ó÷Ek<»ÍA)i+!,ßÐP¦àcõ¸È¹K®xˆzîtBzÇkhôyâOÕ¨H)"¡z±8u;¼.ì¿þtoiÆq/¯.³/—}`å]<|÷ùzÐrÿÖ‹ÓY0Åý=ž”3|]f-×%v¬;ü«#»‡Ð(W©íÀö6Œ¤àXŒüÛ,Ö) yŸ5’|ć—Ç%8G…W9Âøl²Kå–*rgTµH‹Í¯£&[–3ˆûný{H2íØR`,h?Wž ¿Ñ()[-f#æƒÖMI±ØzWµ,u“‹õ*¢o—vÌŒˆÅ¹VÀéÒ“Xú l>&žEàb-Ð3­±M'€R¡ƒcåÍ ¥wèʇZ.·TÜ/¢p@¹ý™Meý¹¬€UÚõÝ›+á´n¡ØÐ=Áú!™ Mø«Ïýrì%£0š‘=Í6Kå{Ù($À‰Z†pÓ­oQ”pç>¯^‰ ~TW°´l”°]ޱ8œa°º³í®ø~^DJ{c›X¡—*ŸªMã“ϗ駉"]1åá(ЕŰ]\{vÁf‚‰6šŽ´øó1fë‰HÊ¿[»p"ÖÛÆ ÿXŒñ§[ƒVùeœ+óÑn Éíkw¨òÄØÏ¯»Þ9RÑz›vè¥\áv”ïuÕ­/€øŠmM'ÿ“:MŠqæØÇîDA … ðõ†¨ÚªIåS]« ý|ëÙ芌௺úð?ÈÇΉ¹Áñ¤GÌ£i‰ÔÓò¬ÏÖôežØÏì•óÐÞö­Ò/z8s© ¾ñXêPáZy\kN!BðbåMf²D]ý®~vÂ÷AMV$¡%ô^˜¦ÓÆhO®‰uV’;GƘÈlìÌÓCÕ}ò~)Rç%9Y'«Lf>ÕþuV¿.áÓ™Î3 …‘§íµ¼‡ãihœ3žÍÍSk]ÀZ@©­Š =EUTt“ô¶ZM‘â¯ÊLd]Ð4üLÌ!µy»Ô[ð¶I‚ógòèùá—ö\t‘}AFðÞˆ{F‰lŸáüèZ^žF+¥EÝ`éBm6:FUåYMuk{MJ¼ØÖf,1·]ÿyAø#7=Ü ³ãklìBÆ6ba´vØý) ½77qŒôÍyrIÔèey!µ‹MèË^…YðÇwõøªuË–Û´ò!x¤0 ¿¢š0Gò9UsGZ‚Õ®¡­ô¸Â¬€&®Ë …Ÿ’8§>Ѩ'jp?üûëKœÁá²Gˆn›éÌ+õ\½UÒŒÍ9T·ãˆµA”Æ óa§ , nQpç{m”šœ1 bM³”éeßÓYdù»É-ﱋE•†9‰©²NDÈiRgé×𗟪”‚yã…p"g^f¨:x Å-tv‹´0F Èm|ɳa—|btÕÍZm²•or›æ¦¼ùþæëDµNxópR´Tx<Ë¿ÕÍÃ4C‹nÔHÇ•¿œe²9½R;ã:3™Þã„þi+@wM(îÔ= ÜW›ò£©‘€¥Há#à3™–œdUƒïí7ÜÉoßbC×UR®š{ݼw]ÔP|ÕSSÎò_Z‚²\A}Ä»e°¿@Hãq­¦š‹¦¹$;RÔë^ö`}MwåzŒE„1'ŽÃ»eü.Êúø…¿Æî¹Ÿx¦KGÉ?[ ²6B e0Ä»à»KFƒÄ¯Ë—^/nq_ª_Mæ~emîþ´Æm^µ×«Iû±uK3w‹K¼»®¤úŒ•Ìß™õv ‰Á çäÂï·à?u÷ÐÈ ê{Eq ï÷ÝO;XôT‘ÔfìÒ¶jÚ‘œ€–| P§°•4æ›8õË ªcž” (ܲ,;ÙÇCÀ1}±¨Žøž$™m³¤–ž©kÍ~@;3Ùh ¬r^IŠþè|f‘ÄÁC3çÛáµc¤ó¢m$*«ÜŸgkm§'SHW‹—’¬|CñUÆe«…-íFŽJé¯WuCùû;b»sÿÇîÐë9I” ±€qÓ¼U£1,TÃEˆÝP‘ N›¥ÁƒF”ñ¯WráKRÂ`ðÑÈÞ˽Bè¾Si¨ 1³€¾¥EÊNü¶¥Tϲx«túÇÐg—”éÄ×_?gß©d¿;Ñ(†;ÄdeSß"‚Õòõ‰ÃâÑ>]’%qÜx"î-ñi3Ö›³ÿÊË;Öú¦‰ï!ÁŠ3¢vw)Ík›b9.yŽZ;i4w,hŽÀe†]7¤7™`ʨw BøcãÇ_¬òè0×ãuT÷sϨْl©Ç™ýE­(Ë»½¾8îä‹ß(‹“ýá”]+´ëF(£äÝ‘ƒ1†€éñPÌ:Áu¼­±ý²”× É<ºV3XBíóL×Nc ¥ðo‚܇‹Õ#t½~™Œ,o/ò™x¶—÷qNk#ñ~Ìùp+õßH eóçCÉŸ\ŒHn>´UÛÂøŠÆ!16ÎzÉqÐ÷Îꋨ'…¤!ÈHPßéÁîõxÃŽíÁX°ß ÿX\oMV˱Î6È1ý©lO ò|„=gý9˫Ͱ˜º³3Q¥m£wiÔ±<åàtã(Ÿ$!÷¬Ym-ó$k$zCÍÒIÝ’8p2;€hUž™^‚Ë‹éCv‰’™±q~¶×ž¾èMP¯êߌ ƒË!ÃÜg:?Ч²eg……þ5—ºõAÏÌi?+\n1áPY¯*ÌêWO¿g¼%‹fÖ&ljýíµ— å™>´¡,ÅAÜß'€70a?Ù. žé!ëkú«YtPNV@½DÁÄë†ZÞÒT×3®¹¡‚ÏÝÌ×5q‰íž„•Ü5ŸWÖö(sæ ±FëÄva³™‡ž^‰¥¿u¦V‚q^HÇ‘ÚönêºU“ŒÌ( ;¢Ê s`…¹&ÜÆ‰€ö…pæðï"Å—±OCó0¡ÜÔ’àÉ E¢Ò?ìÓ»ðÐì$Ñý¾·É¿Tù@)T gÃà¿ Áp›W@¯9Úz°cO´ûb¼ ÉÐsja`4tÊ/Ó…Mæ´ ­)'õ}.Ù#òÍü¿ÙƸ ô²;* Îà=Ä%õxàÁ€o| ½h3õʬCˆ‰Š=ƒ.¡^ûñÃM $(6›Vó_ú~eKÁB²R¶ÖcÁ'F‰ä•dÞ(x¢Ã¡gW7»<#ð¾$‘.ûŠ–aæÙ¬rÀ–'8»EdUS2Ï-— \d€ÿ­ºÍÚü ‡áÿã•)O’²[+éü”îЃ‹1@tÂ\鹩$\L©ÄqíÞÈ5k`ÏÕ[ö˜04ñŸMz»¶%—õ6þÔ0CaùòR¤?ŽŸÂ+]†á?mV݆½v‚7U:?8î#ñQÁšC™Ð¨á}²ÖoùÁC-L³üd ±+2±PG½¢vG q­Š>þ¬Â¿D÷»û&ƒx8 ûNÑ$\ã˜ç«–pDŽÀ„5TpMž1¶»@çëÞªjøªb s² IçòÇ~¸G^cüT¸_^Ìx HÖí“Xµ¯æewÙ[XìN»PçQ]¥ëÜgÛ­=®EDvx]êD·5ŠÓ“ö^ le‚HªÁìôçôÚïjÞ¾äâÄ%A›·¾Xö=N7á,# YðavYd»bMXg®÷?¶ù°¡YӖ˱ƒH…/vM6BZ›uålâ¢cžÈ;æ„;±Ìdñ)ÏJ¡JKøÜ”GÒçóÛâìQÒÏ~Baåc÷¹S,U„‚ý¡%𱿱¦ÐZÜÆNç‚ï\úš¡œ¸{}qZ‡ërÛI£LIh8µ ÍC®†^ð»ìmÏ"m~ž§ ¦àcœôï'£ŒhsT=Rì#“`crl†B¬ ר¢Ê ×óüˆ¼®®m£•£QŸÝk€<ñB˜}…@ê N`RÈÐ4ð†ºyœ3Û±vÐlkÄu:úÓMB^D±Åºærx˜ÔÀwª’zßü8tTóŽï­©iã’ôÌÄ•êåÛB“€¸Ë’/Ú©âÊŠ @!ÿ8Ï/Îá&qaf$'™#]¨«²(¦ÐtTR‹ØH«©X?ìãtã^_£V Î-à¢ß„)l]ÏwÞƒÜ 3¨qc¾kÀ/uuvB(švϯôéÙ™èáÁ&¹ü Ém¨Í™þ í\Ÿ•ңб¹¹,í5ï4=.!‡‚.²OuÒPkBK‹ÈŒQÜ•©a½,b‡÷™òm`]ø`oë¶Ÿ©²æsÙð*×'P”A`–»ÎʇÚ*,囓¹vZÞp:uNz/²ë›0’ñLj I*†Ž3ÕJF¦ŠÇªl+A¦S Vºïêt·¬Íè/æIû¤iB+Úub2´Lc^E&èB ⓱P¯*<ŠÄ·Y ãÓ逪Q3Þ§Ë|:óÜ#6OßÃCmž´Â7àM.Œµ»©KªÊLBÖÁñE¨Ö˜`P^¤bФ_¦9‰§n”hÅ ^ˆ%8ÍÑô‡ùà8ÿ)…áÔ™š—«ü(Zß¡‡cˆÕúu›Ã‡ºoÈ+1HíóyÌ=oAò]ÇLÞÁÒÑó¹U´Qç}>?‚×4ЦF–»2¬löšÖ ñ¬>Ÿ"uû­ÈY;¤ž‘ï‡|¨sÊu®fÍCÕǞؘ¿Eìàœ>taK,˜B„iyo+úrº ®C6î¨ ‘\hZ1BïÈÜÉ5:ªŒ<è²ÓËQÖf[. SFZßNñ ôcaI‡q?Ÿ®–ni››ê ºÒêÅùe±Ýwü|«l,®)óQ‰¦ùžõ›/GÛŽ‹ñÒŸïq$`’÷ج–ÇxÃà]V¢BËyYô†Öm5d¬3NøÞ‚Úc«Ð»§Üû‚ù}Ѧ "ÍcÌÁ÷#¾"]wš ?o°L´ƒ¬ß˜Ø¸íg@è\Éä-ÇkKú-¬ßB ¨²L# rÀº3/ä+­(fän ± ½md¢}£ »[î²ÉàÁó>ó펹ûB1Å uÍÛÚ#U<ñ«HŽ„r–õly]µüõ~ <¡\e£›™« —{¸‡):LÎï-ñEÅCtÒŠè3DïŽ= ?Ü|m PJˆU&÷c¥ 1ꊨ‹?<Û«ÌŠ}bµ*O' ³žˆM¢l c»r˜››kŸT,&úËä(‹Þ¬UZnEã½3@öa ,9ÿŠªFS– ¸éVêjÿ…ã…h~iäVù|ÇÈ”Ý7(jìþ‘è©ø¢§|ºåäˆx)/Heï“ר¥²ðqñ h¼Ì»Ä€D÷3^bëËOvw·Ç&Œõ†ý”&¦7K3pwž ü¹iùÿíKãÉ&é2wßN\ÉÚíã•ÚIÏ?îžÝ!޳ݪd`BXO»Óf±S9›©RaCÊoŠÏèZ¢ƒÜyAæ i=D&¾~u/ö‡;ˆý&ÿÕ¾V_(G÷gç„Ñe„šYŽìo»ê ÑxÑÒJáé?’)dÝQ<‡¤ÈHÇq™2_ŒMÍä¦p‘PÎc”"©}²%ËÜѾ8PÐàÖ/%ò”rÂ%«2ç²îƒ‰8ʉÁ3ìŒpèlø›ÐLþ˜â tmÅð]ƒAV’ÜQ°gÃ+§âñ}ÿÿÎ1í½ÝÞÖȈß//{R0çØæ¢ò ‹JÐ\WªÊ¼Ñ£þ-Œ‡V>ý®ö,ÑT„ÁEUÏÀksßÀK{‚¹œ›bdCx[ÃGÑï2w!XN a¬„ÕU¨`$ºcW%|l]è?o@—ˆ–¸÷ ´rÑùÿÆxÐкÐáéÚÊEùNü‘ÕhÆ? õQ3ž¬/ó÷^^–mû`]ä±Ê/YiyŒoWd¥ –X;CëåŸz¢›C9ǙꄛͲóŽß3Ìrºjí™~P+×6‰–ý£`F˜é¼#½MÏ?Ž–]ïÂÿÔBöIëp!:¿sÂBªC¹ï˜á*ð ²›ûÛÏÔÊ_‰F>öÐÍ×¶ US…ÞÀóìz¨E *}b°BÙ<Ë—êY£djò¸5²ñ¬:?žFQ…ôß<†ÓÓ(y¥õHì÷[˜Ȧ–ÅÕÖu !Êb4_Ó>CIù/’rc·Ö¸Ó^Äß|cŸ^ë!ˆéКÍ> näi;.‡9Ù½W¤Ö~ QN³¡ÒÜô’°Ñû÷ ±¼ïõÂü?ÆÊ%Þ†ŸëKäFˆ°±-ŽGc¹0µ$Ô`\Eµ âLq7ƒ¹YXfŒoÚ§-€ý>&jE¥¦#Ê­¨(a8͈Þp˜èȤ£èâíëa·ƒá(É‹3¤áo¡|¾?—u 4ø4ê! ðÌÓìZ’«¡·ÏùU¨Ú)ñSn×X f´l vƒŸ¥ÒŒXçŠ «eb”¡±8ü./ è=×hzù üLFEKtY8½Ì8Öw×9HwÈŠAzDšˆHZò4žnôCÒ–ü" d‡•ê&'Ú~Æ©wKª=§MYç lXÅðyåÊ&_ Y'ènÑYœá7¤ÔÔÉoÅ]ů›˜¦ÒƒVêF‘M> óïþ0/iLVÍù¨=Ü×gnq¶Åd¨Ø*Çýx-k“¿RL¥¯}ø¡ âÑ£’ìã㥾䬰“©ä¦~¦ÅìÀ»´€ˆ8Ráà§ov·¹€F7Ç“O龨€êK¶Œø1wѨD D™¨>°¡E,<àwℲ֜u¤+ty Bóù{ˆ r_\lÃËÖ` ²œÌ Ea#*•í+À2ï­«6¤ ‚)êmüœûísë× á4CøÍVèÓQ ?&EÅ ™ðXÞp£ÁoŒät÷Ê+XÕ¬{íÙÉüû;Þ2óÈsÕbR{3ƒ±èl" S`Yc88Eh’uLº©aâÚ!OÛØ¤ô;ŒK»ŒáéuC„ –Ü¡À9Ù u¬ ¦·Z­qNj„rTv<0«ç(¿DÁþ¹ð„ÀØ‘.Ñœ„êªé˜ÝŹÑ-~»Õ8x¯ >çU½YXý62æp5Tq÷A:ˆ‚ŠÂÈûí€0d!BgË*hjðrÕG¥­zE}MáÆÄ )­3Dà©®3öëÉ¡7J ñþA&;«GU;:µ/.EI‘¦/°4s©ŽϸéûRŒ´èÏÓ¡±{Í-–• ûDRÒûE»„€—,ðÞAm†2Au ^©Œß´ÉYêØb;Q5¨[ÔrÖ@§Œ£ûD x-x‡³a)záŠÞYä›-¸÷—Ò×R©¨©wÀ¹Ó"œ÷´šÆu ªNÏ?Kû|º Ÿ{ |[ݳYE”n'Ü–‚d™8ƒZûÏÙ±˜gè[<î8Ä*’¦ÈÝÑåpW"‚òD ˜µš­àžYf¾˜¦‹²£ƒ-÷ÌÁbÛtjÀؽdzW‹Ÿömx×8ú…üEL##oô¶`äm.©ëäÝ.JÊ4[´§±'ö)á9rŠ›#ÈÀî^Þ “a].ž‡¸2u7Í7û—{ss¶Ô;Æèj Õø…ìH€©K Äŧw^õ;kq(ñ[ƪ8mîB¤ñýõfÎ-ë1‘ĺô‚_ ~‰ c¶ürä±ë‡²Õ'·tÇeÚ÷ç?ͯ‹Òvßb–}dë1Uo´%¥áD­Éf‚“täÊUÌqnìÀ…¡ŒÉJUç°`•Cï™\}iHá>å¯_ηDá'F}4Áo .NÚ _yѤñÕ;iM£.3 ÈÇn…Õ‹\ÑG¾ó :uTƒD¬ÁXLÖÈ :t=^Aø&Éemô²ô>~V\su2±k +ë ì…µQ T‚?Ú¬ßÝüÆÝa½\û<_NôMÕºøZŒF-z0kÏzߺ#¶a$ 56ËüªC;œmFƒÃ±òȉ{-ùûKq.ΡY·‹ÄcÏÕsáþWp­ìþÄûb¤–Ç»Õ)&h —V_äÑâ©Çh¤Td}³yÁRØ© /6Ào§²b8ÏU4 $»´$÷qøò2ȤoïËõ‰¼ ôº¤ÕÙeVh«ìè·%ìÆQE©CÐ=,õׂA±ÑÞÜþ _‡ûœScßjÞî©+±NÄÂæf¥i<•–-jÄŸ1¥Ó‘5Ìv#ذkÙéè&&ÉØy8·^÷KâCQ^ÍÁÇ÷üyê­¶ÒÖq÷ÇJ0§~>o0«ƒÉ×·øˆD¡·Ïo~ðü69ÉgwóJcóaÅWžÅà \k#¹î Ö„GiyŠÁ”³¡æ“ÞYÖꣾÿT'À4Ï(ßG¨³¾rO†’K±ðà¥A4ù{JÊéTeŒþ³ÿóü€¸Û7àìÄXá;å§“Jß`×W¤ˆ09Ã>îE¥ ØÛ†Œ© 7Ï|¥[lµD XÎê– x¤W“w¶-ù«ÿa?{m”h7÷QzÈSÝX[!Ô î÷°BÈø ë6ÚV MtLR›#ãM*'M—°Ÿ§ÔeêJ,}j±Ä£yåþ‘“ »Wán½ƒíkÜþ^œL¼-ÉÁk)š!ä,—Ìñõ”´—6Ì÷dÑÐa²yMŒ1³ÂŽ&#zÊ®ÂÅæPÛÝ”Lu4ú(N®ÙËúÜ,Ô`_'äW)4^˜ÎÝ  ?‰ö€üèaœÀÏSIm®„G¨Ã÷Ù}ÅéH&î3hÜÑ1ûv»újÝ­Zr­€‘þd›dWéV§š8b7Eü¸‹Œoðcì„þpXo-#HåJBp›úÎn(ùHã‰Î u¼ ¡Ù-‚s Ñn߯,çÀƒ±ãÀº‘èN÷Z(e§ÿ=Žwá'’'+¯³šä{¯ÈóVÓsÜúóB†Ku?=¦•X±Á´ÐT öþ¾hS~‚=¦|íß.«(\)[Œ¤fÕ¦iX/g=^ŒÐHxóWÅ}ioéÚz“íØB°˜¦1f²FIÄ´R`Þî+u5n‚^ðÛEJ²f9ÍR5KpŸÍ®3q¯0Bù²8R«Ú½[©_W»Oî¶Dù\"ŠôŒÌ<Ù4€”eÁ%@ñòTz­²ÐcÙD2Úì½í,M9ZOÍhîêJ× 0_8éQˆòD¯†¬ù“Sµ±èÝ"€²XCï2_Ë”ì^*¹\ke@FÏeœË•[˜ßÚÁ endstream endobj 564 0 obj << /Length1 2258 /Length2 23858 /Length3 0 /Length 25147 /Filter /FlateDecode >> stream xÚ´¹eT\Û¶5 ÁÝ-XáîîîîN°ÂÝÝ5¸»»Cp×àÁÝÝ $È#ûÜsö¾ç~_£AUÖûs̹ªdDŠ*tB&vF@q;[g:&zFn€¬œŠ¡­#‚‘µ…ƒ ÀLÏÈÈ KF&â4t¶°³5tr8œÍ ÆÎ©ŽfFF.X2€Ðèøá4yä€Î†ªö@&¥á_@ÑÎÉ™ÎÈÐéà ´5³°R}¤ˆØÙ{8Z˜™;ÿ©ÁBG÷§ÒŸlaz€´¡±•›“•ÀÐÖ M/G·sû0Z(ílF@sCkS€)@¨ PSSVH(+¨)ªPÑVq±··sü-"*ªj´Q!yU1P ¡¦¢úç¯*ÐöC¿-@^õÃÿ‡ç#ðOºœ˜ªª–¢ßk0\ŽNhÿKù‡2ÀßÒ>RMílþ"Pš;;Ûs30¸¹¹Ñ›¹89ÓÛ9šÑÛ[ÿ¥OÕÜ àfçhøxuZÿjŒ‹­ÉG;Íÿ*ðgQ²Æ@['àŸ$q»9m>Zù‘ôawþ°F8ÿ©iý¯p€ø¿hÌ þÊ•UT”ØZØ:m m? ]œÙ>~&ÿˆ¸8:þáû·Ëñ?4ÿ–.l÷qeºÖ^>†nÿ½b†¶.NžÿèÍÿ¾lc;[' 'g§UL-¬Ô;ýY3 Û¿lrBòRâb*ªt²ƒgK'g÷Ñ[zgwç¿¢ÿÔ•åp2²˜¸XŒC*fk"bgcó¡Ú öOûD->úälçèÁðæÚÊÖÎÍÖëÿÚM-lMLÿtÞÄÅžAÍöMJô¢?L°ÛÌ€ÎFÐt76gøC÷×´ü13ý1´ÁÇËÞÎ`jhíô±0~¼Àz9ºÎŽ.@¯:þ7‚eâ˜X; úÇfý«º”­©€ë_æ%ÿvýÏPþµQ©>v©‰­µÀh Ë oçü1”ÿÿì³ÿâw±¶–7´RþwKÿ;ÎÐÆÂÚãEþW„ðVJy;GCëÿòY8‰[¸M-œÍÿÕØÙ¥œ ?f_ÈÖÌ cbþ—Qíφ²þ˜ÜÓÇâÏáõábeÿ/ßÇP[Ùœ¬Œ¹€ø/ÉÝÿ#À /-+'¦E󦿝01[c; [33;ÀÐÑÑЖñc˜ÙØ^LSmtÿkV ô¶vÎ){g€©#ìŸõdg0ý1ý ±„ÿF‘¿'€AôoÄ`ûâ`0ˆÿ˜ #ƒÔßèƒAöoôÁ ÷7ú`ÿâü¨©ø7ú¨©ô7b0(ÿ>TþF¬Õÿ ®ÿуÑßèãŒÿƒ˜?Mþ?Cæ`S‹¸?HÍþ?XÍÿY?ºjîao´ýGćíŸù¬þ?”Yÿ~°Ùü ™>¤ý£Ó‡4»¿É>bílÿ!õcìÿ?”:ü~(uüüåôø±>Îÿl¼Învÿp¨vùüPíú}„»ÿ~Èôø[æG¬'Ðñ_Åþ÷¨+þ9ìÿ:Çÿžýÿ¹ þ…Uœí¬€&Ÿþ"gèìhá®Ãøq1}Ø?~þýNïý}~þ#[XØÎÝ‹Ž•@ÇòÑïMÊõ§¬>ÿ+×ø_7¤¿ÀMúoüçnÝÆ°+‹vÆ<Á–©Í¡å¾b…Ód\ôçU˜üšÒñà+Ӹآy»Ä@¢€VÿLò";YIn=ßäÛM²` ë·Í¶¤ê©;%Á=C_9_\D1¡ñ\uzµÀL¹eÿŠnbªéÜ­RÖÙÌöøv€Úø©WgÏS4óä;ÊM ±nEûz>„[ñLe¼ËÏ&3w~/XT7UY‡{ÊÔlkD Ž|}Y‡kÏÝb| d¿/˜ÛõÇ' ¤G¾?7Á騢ŽcÚ9%òB÷„lï! ÕTgýN®=Gø{_ï݆JíV¸  yyX5¤+þW€¦¤ ÉÍìýz™OêOo„€èS˜%èQV¾‚d2üEÂþA ‹çZð£Ûö=ß O~Ùß#ºk#èì’U”|FRè»$Ò˜Cè©’‚¬ ïô9}‡isRÛµgÇç÷ò°°‚s9i ˆØ#C$xÜ© sŸ—½R2;…€4É‘Öñ`2Uà3¬˜5üúß1pxƒSª4G †î¨UShP³¨7vùá6°0,Aswo3_ˆy!*—tiS°y¢ ˆíñBŽm D&*DÐþ±•ýXö‰FbW¢9çì÷ÀˆPâXfÒeK?’]<©Œ /ËÏR}¬Ôw iRÖÂÔR—Á*§“À¯Äª÷ê_£sŒX³†_» #ÑuÏùŒqhšœi9k›×2,¹Ö€æÜ_7 `¨—ì$#ç]?Å÷-brF©Ë@†|36œÓ‡8ŒÁƒ(…°¬º5HérF˜×‰Œìm¡nŸŠö/èpT£V³?Ë´¶x•“és®¿u]QŠ?Ñwõ4V‹TX‡ßXÝþ]ÉÅn\þë’T=SNçkỆ©´jìK®«‡‹®lÄS¾ý y¦}ÔCž÷í$¼ùß×"`#;zge€‰…×Ýá… ºœUŒ\Ä T¥Rf;U:ƒ-ÁUÌŠ þe“t¬‰×H®1¿4‡wŸ„^í:Åæ¨ÿV ÆO‰Þw±†´O ¥æ¸ay7kРó%}…òSrœA” MomÊ9Sl`µXŒ–(Dý+,Ö~¿c›a ã蟬AºÞˆ Ýõ@[›m‡h#I¼<Ë·sì [/ÑHoyHµ‘g2Œ:N”`!Wcó&ÌŒ´&ð ÌO¿'´#àVßP9€ªá0% ³êiË8š¡jÝûÅJ¨8µ=•5Ò·¨ê‡ef ïòyZΓ¥»âz8(a3ÒÞ(_¾&FçœMJÈ»³TdÆ,ÔÕ’×ý N ,\æ]ÒÖQhò¬¦^kìrÌ`Zÿ±Ð« %àù^õƒ )‡ÖLªnÄ·0\ç;D¬~ö©úP$0ú`ù*DâùFê_!oÒ夿«MÄf9¹YdpäƒplUFü^sVÕ‚×[„ì쑞 #G㚨‚t+v <5‘?{”éW}œÑ•¢ä¬I [œ¥úËu­­#j­%‡<‰è=Êp#V=tËÓX j­bQu—”;‡½_ r²iÅåùœ4Kò KJñVÏóUô¨¢®ÍÖO+¯žnõ_I=éÌ6“aFÓ‚*ôB¾Nç[Vh†¯Cdw@ç$g— ]Ûªúäs&㯞éX>±u¿×´ã•|®ùI.!¦›ŠŸÄî´ …‹b÷²£Xªk”Üc·®s ÷ŽÉ5 ¤ ÷ –ƒQ@j²žíP¡6$r–t1OnÈUê§šƒA©‚æº:®b`¸³ùÖ¦,Ñhx›¥„¦ˆm—Zsýↆ€{[­ô:X4Þ«ÊÖ†’î‘16NYÀK §íì+ôyéÀ‹å¼<}@‡b$#•ŽÀ2¶ uapæ©ÃIZÕ„ÏöO{ߊ7S§hÙúW¤6‚|«­<̽kûæ2t=~êo”‰Ü ýðRóô ú§Ý/ÊG§þ‡Ê¿ <æ,àSZbŒF‹•jž!õú4³/¢‘J‡ýêé¨#<þ^^G:,XWÞfl ,|ßÙž…¨ SWÉ*ý nÇÏi§KûI ²õÇmDŸÞî+$îU£âx*_ìÈ~+Ÿ®5çÒ¬诪=¥Å£EØ,aìHKâJH:ãž0 \½AC=J\§»Õ„@n…EMÓ’‹uÕϔտY⢜˜«R»sÎ8È­†Ø¾ÅÄR¤z,Ã3¾Ú«Tæ ÆO–ÕPm¨¹ô³Ó—?é·íØÒJiÃÄÃØ“f‘Òh7]@Bã0_©ÇÌN‰Ã?2€±³ép+ø<`oŸÄRÃtšŸpË»ã`Izü5©çò¤¼ÖaÜ»J4Œµ'¹ÝmŒ Fúc{„˜•Â".´Ch©Ÿm`L>¼‹o¬{Þ*Jä&)m±k!I(8 îžî³þHã¯ËQ3ñ*Ä ä—¿_-N°-6KŸwî„óàšç…- k±Á2T·ñã¡K­§TÊ‘Ú>q~[R?؉p®«EzCàsœÎ ÿ¾8Év´ Žx¥óY‰}гÑÎ7/"ú3õ´!¸Ù¶` W*Î!™q5ß^Dø­qG Jóírg3^Js›sïn܈pæ8Þayˆ¥ÙF?ê.òDº8ìÏP;ÚOB—ÁÆ™3a:a ^b~„Ø®U5Sàí ’Ík›:ðlK‘ÐðÝü”¿óäì¡dvÛx­¨9üLÃ8L(r‡)GÞ‰¤ yq £CÀk Zw9§&ª@p³úºÔ±ZP¨_/0ãçÁC#YD)'µ·´U.|Ñ!–ç™Z ò$ó!R§ü ÂݪxŸ³H;‚Z_‡Cª_:åz¦±(†úÛ¤î ú£°–Ë“:¤Ð dÔ¶sªÞÂ|9r¸EH vè󦸾ž–y. ÛÀÇ=ÇÓýÐíô~´‹N§/ å~êtëWŽ:…Y;Ì L,yw§_ŸH+˜$ô¯ý=ÚKÇ­ê,'ø5ë°’0$Xö^þ_¢M>UÇPätçmvæpüzÊo†ŸH²¹¼WÌ@ó?M3×÷G’Ÿ®%óÏ&•3 Ьƒ%"±7†yˆfV1FÙ‰¼Y—AÎ A&J¤¿b@³¹à9øÔ¾ç"ûÁ”/Iõw·K0\Bô=lx0ù¥Â!Š+‡ ¸;bÿr]DZP‡ó ,¸ö›ë7¿'F¾NÜÜü Kƒ£Æ¹ô=xÈeüK\:Lu—Ίô˜¿‹¬—Fÿ:M&5–Þ= 7ȳ<§Dﯧ,ešÉétÚNqãSߟä›àMÇH]7¨ÖgD/3Àg0u…ïOuý¥+2QM^Ú «|¿ ÷IÍÜ¡ÞæÑ RBN\Ì`QñnÕSwÊÍ~å¥z=ö:´iÑJ4=íðˆ`ÙçJoÃH.J»[À¼¤ïN½˜• ÃcõàäQÁ03›s‚>ÿàÈÞ¨e"KHPŸ–¸é°i(%öKpät·BºÏ5ˆŒÔŒ!À€ùü;òËøã¥Õá—y|è–8z(¸¤w0¼]Æ~§S=oŸV‚¾sŸ}4 –á³2öâHhª Ú-«‚BŒ9ò£µ˜ü¤UMôHœ+†.! Ëp¯Á¤ h´"Ù1ëynrÇÌ(#_ȶ,§yA-T©ñ¯«&6 (Ìtç\ÓN5äö,EòM qõäˆrÛVµK]¥3-õ½tº3jcjÝŸ ã1Ö@./*õ•P]=Æñ¸Öü@&œ>3ï—æÊîåÀ£r>ë‹õF«8ÇWœa¾½ˆ€97;¦!(˜‘Ö¼öòḾ@Sì¾(™¸Cd­u-&šKó9(Y‰¬ÊçùÑ…ÁÊæ—É!/år—;G÷ {,ž>ÆRØ@z¥3ϾL:–"NÛ›NI`4-™Ìs&S[k]Ô/™žex-‚Ê¢ášyêƒ1¦Òçb9Ëü]¶n?Ü¿{%-*£ðz<=W‡:’ž›?7t ?Õ¼Ff#Þ¡›Å`<·Þ5¦ÆQ9ÒßÄ>ï±ÖIµNwdPn^Õ˜ÇBŸVq]s~†šQ’>-x†ŠÕ͙಺÷íDÞ#x ,ͳh¬ÐY V­y\šÉœ¬Ú™ûFFÒ~K<\½°„rî“…—YÓûì8ÅÐF»¨FÊ·qüR*ú73×âý²ç:…h¤®Š¦yða>J¾„:šó¥†õ¾Zí‚­žü]ÀzŒñ¨Rö` *ükœãËïN‘ž àhpyv[„ÈßÊù㱘©uY#dλ›¾ëåêPeóRžÀ5Sƒ=øŠu«ßåxë¼uãùØ' @ ·ââk}­.VMÆ<<PZêí¶nN@êÖPq=enùÐÕ´a[‹ÜÍwòl?ñ+of/ 4×s9 ý‚Z¸ótÖäúå9VPyzWÎŽq••å½¾$-œÚ)±"Û9Àk9w²8€ÎÊ&)Gª÷»•°ad•eI¶E+ÿN™ŸÖzªZm1ÑÔ“"MCbNQÚHO¶è¨ï0k&@b‘·8¿úíÛ¢À–á»Ä¾ _‰õJ¼ –™õ¡k¸å¡Âñí=¬b{4˜öÔã,úmT­@_Z>Ó'fJ#=¬Þ1åL«nÿð;y[¢®Ôõù蘣•*„ù‘«ªK;ú†v]húËÉê»Ô‚'yiÍ{­KS4:6sÐ"¿W^Êüa» ÏdÒªV6e?ǤèÔ¿=Ýë0jþVTÓbpn#\zˆnJ¾^¶‹é£Â÷!S–†H_ˆq!º&¯=ßEåðýéBßâ:YŒˆT !yaF4DÔ TQÎþüB(%i“*í0JOw'êè”’ŽVM¶!jf×E}>"oÉù³$û Įĕ‘ìHÆ©iõý6×~Z!Ë,‚ì4vH-a¾÷º5çÚўΙªG›Íæ«ÚÝç:åk<ÍöAŠÅ(¤ÆäÞm«’ûþ±Ê­Hg¹>FÑâ⻌’NÃKž¾A]“"U¨OµÌD6±)gË3çØó±gT'æmë à2½îg‘w¨cŒl—Y´\n‚7âðfþ¾:ºâº¥h]ýo8/ÀrÎæTØrÛne‰C†Ñ¯‹§ùY²JÔûgþqf0;qÉ`:ÝJŒ•Œñ™ M+lå8‡—Ð<ðû (¿ééEGȤIö†ÈÅAö´ò¾ÍÌO¶í#=u1Ý]2v’>‘‚·=²ÅvÇ"”ñ ÿ©›³=J ¬6Û±öÝÝÅ=,ôÜIãÐÏ‚vòsÁ§±ó¨Î¢±ÁÔÀ•oá"\Ë!Ã<$l ú¸Ñ"¿…q<Öë0Æ(€$ú§Ý›ç©I?úV½ ¿ý~À”›¯£´q·ôC§ü>Aú+ÅÀ"PxXÝ®çq6kB*¸E`&,7ôX2ìQJi½46þ~47«×[5[ËæT18l;/‰t£[MÑŠIèQäU4bW¾æ‚B˜hɾÇQQÃ'M­¾Þ_Ê þÓG14ÁÍF™2ÂÈô!¿ç”Š®ÅÔëɆ ¦K”8f Ê.ƒvŽð{yÞÁö@èI÷êÖù«Ò†/íÒ:lˆ<˜KH¸[// ÈòÙíä˜tõÁz‡ü[ÃsYÓQùàó»[Ã3y÷cö„Ä›„Ãa[±KUëÕp²¼Î’žÄºzîû/0nžVá )mJOôzòJ Ì7™?ÆçúÒ|î+šä$vaã¬>5´”R&…^Ö¨½¯Ÿ4&ÅîÀ}gd´¡EÑä—eÖ‡Q¢3¢!¹‚íYtIÕ,‚YÃsJÚàVóšøˆýERV¨ÎÜðå•—&¯PbrËT¦d ÍE…ˆ„UjÀ®Ü×l•zF¸×§¿H bÀŠf GÙ¼[ >c€c†óß9‚¿²)^ŽºÕ÷ŽQD~ðC̼`‹2Z쬅 bªñP#1“,6…Çú|nI’C1Ž­½¢äxæ•þ´692hžÀ2ëzÂ7ë!»³,?_®uvo¹-Iš$[×H‘év}t'r˽/•jŸ;w!V/vŠR-n|U è¾âÑëšn÷®ƒ‰Ê’\yåÀ_9dsâÙÎZ{}É ¨n&-ò¸É"ÐPºðT7Gç»M#òfŠSÏ!OTЧ*¬Ö €¢‚¬>‰Êç™Ü#¥ß(C7k™NzÁï)¥Üb¡ü &Ý ¬Úx^VÞÄlÌ¿"1Ì+V‡aU¡(L ‘œùnÕmUÎ{аóü¥z߸¸UÂ75ü;i™™Ž¸Ï½j õ(nÜ!™A—’:´’f€Ï¯Yî˜âê(kog5,Œ„óGø vuÅš }|ååÇèùlæṙ+>º× ¿»m^GÉßPµ”ûãü½è‡·3‡;VéLy~¢í<Ë౞2Ò_Éç^%‡ªf,…3.p°ÖMÍí +\þdØ’9Ò«t¯eåuËæUÅïb,–Ý~‰5f£…8’‡CP)bÏò5m…%È :;ZNÓä ?hÀ(ÈbÌéØz2«)ÞëIë6V˜ñ¢f¬ÊB¤5÷ÁÏøÑÓÀ:8UjEÔ¶̬ïxNíûîxššážÏµ™4^a«3ÁŠŸææÆ¨¤Ê©t›@lâYzqõÄ®—9C0(ó|3>A·XwëišlÑæ³¡Â¾'ä—ŠÖ$IûbüЮ_ †J[oavÕ0ú%½…éÕ Ùç'þÜ´|“ÿ±\y¡¬û¶µ¯,£ž%ñ`ÇØîµ,˜Sh3ñƒÉ`îIcrÓÞ8”g–bgBF$êEûˆXöƒOð5[>´Uˆ !ÿƒ€u·6¸òƒCJ «±CŠDW›Mœ`5B£ú —Š=û[+’ ƒB™œÏÈ%ÒB­åû”†«(\šÉ‘øuŠ…+”W•EEtßyŸ5ÏaÂ3‘½6mNñî`:žÚ )ãó§ë0Œ½4’m¥¬$Š]c-©TDæðì¨_+ë*Äd¢8­£ábÖ¤­„ÕZÕ…§æ=ê]#H‘?øPI½Ù÷É¢¬Öƒ+Gîܼy–9„løC~ |.¾Ué Mn‡ÒàŽÉJÀlÔIäC8ézû!ÉsN€èM±ÐÔ‡ §gƒ°´DûùWŠªätàY¤ X& JvY²9Um1y¶ˆþXÔUO9ÛD!â¼ö<<¸â¢VÆèÐ Aƒ‹Ã=ýY õYCg.¯ã'zýbq¦W~iécøôóL$³Æc÷œH‰v‰¬Ëï`Ñ3ïDÃby†ëÁ‰¦cÉÃØŸ‘'–œ[õkòÄ7CÓX•ø‘ǃhÝ7Fø—CÛ¹`üøŸ~hŒ¤à ã}‚±'‡fì:ÆïÜÞ—‘¿¨Ì¤j3š;bsF8]r‡Á[dšáö§mi^1(3 z®(‘Š÷0œBb ~!ë;ëïhxÚÂ5ÂL­ñZrc\¦+"ƒð›-=Uš2èj…ÿ”Vý÷óWCV¥{d8ýǨröWG·Í;ÔÞÅÅc‹q¾="ÝÃGh§ Ĥy6õ‰-!½HkaH õñ•I)ó':β'Å[±;:ÔSÊÚo©›¦ØAhyÖìDÕºøÌRlwÎãF°•wÁÚO)êÇ¿IÇ´ Ú`¦½y•”y¥·1[§ÎQ´Ä#Û{­ª6³Fp6²j‘¾d£®tçÉàl=_~?èkpB3í¥ïkÉEy4É)è|QíÀ1¤ §—¸?tFF—VFò3m–Nðƒ5ëPû)ÛÓÖ¤ CðŒyb88I¤UÏß‘ofßø_Ÿ¶Á”;ó9Žb%_åM˜‰Ãz¶4"Öú*J(ßhì9q{WÂÍF>&±«ç8™Ç œê­Ž|vàŽ?dyŒé.¹ÌÏ¢ú1¦Dæ]‡6…†ïžIƒÕ,Ç$4Žñ†­‹nÍC&YúµJ-—å%Á½ðž¿Ùœvæ68– zÇŸ¯RA(¥ç¼W(o7³J¬Œ‘k,%MÛµŸo:)”)â9Rá¥sqÖåWNÍSE”ŠË[®ŸÐ}Àn¦øÎ]a:Oú%j'—¤¹Kêè¦ %C}²sš—XÅžü²bò2j:ôÓ¤U·0~½f£cóª)‹:Ö¸iÃþמÕdVhâ˜KSSBûjîúv¢ÕJÖ›üþ˜F‰rî®CÆ-9ø4½¦Wo¿?ƒ­ädÀ¨Š¹ë £O?Ć),-Ä—`;ƒ9! ¿ü¢Š’ ¯¼ß¼w—8û^6b÷ˆS Í:Ú²‘°`àõb}sñ’íÜE?íÝI“ü6" ›ò‰FMÅ4¾]MÍq×ùîÖ@Û„S–A9%ä x£—Ç ÓUˆwneË“ƒì€L€-p4BÉa=ø5uÒ€[Õ¦;³|@X?W•õ†5övöWì\éRk¿v·c¹M¿ÞÕV_eÇN@œü*-_Œ/æ™ȸ`3Üö(˜$è›Þãž`TI°ºcC`Ÿ¡Œ›B¿2Îp!–¢€+gšŽÒI9¹7ð4Ÿ‡o]›Êñ¾™Ñ“8‘­„©0^#ᦚ¼SÖ°wÑ`ô?ôl»rNÃ-ûrTŸ¤ÒÊ}ÓÿÙÉ›—GP<ýZÎî*Ñ\˜jÊŠÇ‚iV{´Ý|]‚ˆw“1t¯‰%oároЬ^þ¾Ò[¯t´sý·Ùu³•#¬ªqäoâÝM#7ªôŽï“N¤3~>fñhþ¨Þ+ˆ¾ñ`ÜXí«ÏVƤƒFZØô±`‹>N1À§Ñøz<$h±SŸí5^´Ö¾`ÁUU5Ÿ¢fZrLL_ÏÆ‚!’mf­j-žW§ˆøºIñ·:ðtÁ§lÒ%¸ÖæIêþlën-‚6³˜m3 aás{+cÆIɤeÇS';³üç“;=æþ·EÝ7TíÅ¡Ø%¡µyxä«‹2r¼ä›€£ÇÁÂ<›]†¾—(HU‰ûý¸Jü®Ÿú!Œ&FhÇÕZë{ïÃ/), SN ï6D?p¼d½\’¢·]ˆZ¸“qCä±àO)ïeL¸3»!åx8phòˆ¬d‚¡pÇÊ(ü-pÛ”g3& Kü`Ö+ÍIHõ|b’­â[Æ!k‰åã$Cì6ÑÁí]Ê ̨MRVSW̤Ì<¬jS .µ% )(¾xgˆpwÀ'×%ok¼­Þ³NK‡DDÁmÓ(%%Žþ¼T„ö:2¦š=Txê*5xp¾É˜FpŒÒ4áÃ,§ÅÔñ›:œš7"– GXK½=MƒÌò˜”H(h‰ÏCÁù—ÿ¶ª@‹¦Ôt)¥=hY}aÿ ÙFyÙÈv fÑN§Æœˆ‡¦?c¢¦P­öqZäÑ2ŽÁêibŠŽ T™ínÏ…ÿrÃrýLlKÄmžºÎa¤^I¤·°°‹¥U5¤tZ—Ö¾Ü}p•,â¼Z1 Ê[ó!ÀÉP7žËëÉúz3,9& Ý=UÌyŽ tÕàë—8[äÂ+ +/KT?o(f«é„úŠ{pNå¯Vü܉­qi”äaKËSÂl3å¶ÏY Ô8ú5?W1GÃb×m;l ó,0XÃ2&§‘U±þ_©ž•–¡ÜÂ= Y+¯á|†«¼C‚…¹‡ámæ¯QZ2CÖRÊ/Bª‰©Iø‡°Ó«‰‘©Cƒ_$–§©÷EZ]EJÄY&L{*(:Éö¿\5ÂáïªNݼ³ÜâRèh ¼Zû} ñÚË ðåë[¨G¹-ŠkFåj4¡ñkëÁ)â<íÌ“3›ð¤š®`—qÒô@wÔà•MZϸØ#äºÄMÇt ˆ’Åž¹1bZU_pì,Òp¢‡[×^ seð¢árö/ô ™«@îùn-©FÈäé@ïß/ ¹°ú.dÑ·;6"4©öªçoÌ^˜xÿà" U4Ðù¹ImÞÔŒ¬fŒ™îs·DÄ©Jç² _¸ôÅBä…u -JÅÃKåPNPMÔÖ>P,¿:Wñëuö'‘4—ËeèÜÓ¹Pw W$ûxñl„RZÁ›£Ä¼‹htž¬¦×ÅK÷v‘60bUÝ7æÚ‹eï;3äS(Ò_ª_w±Õ¹#*èP6+8ЧW䔃Ùw}¶:Šbô×µã8Óy™š“Z±Ol¢}Uþqâõ­²ýÂ?º%?ƒÚçÓ.}èÄE¡68æ/?Є ”(¤T+hƒ\qšþ"<·çÀ(LqnÏ'ÜØ)·~¬  ÆÅZƒ·y“½ÇÞ%½á—Þs‹x ò³aýM"è¾p ϶¶:Ú°ý1%A¢'ÝqHÝ€ýod)qÎlòRá…~~íÚBÛ•‡²ƒ•î©n‘àm»ó>ÂœŠ´ ²0JÙñ×-ÝÅèû‚ ½»n áQn/ðÔrÛP½uëI>`Ö½(ˆ»¨úÉÁDh`¥]SÒ3û~Ê’¿Iö3–øÊÉ@j?¼ËÎÒÝrÍ5Ò¿&½Èîॉ /ÚìǶQî ¹ ä`ãKÓE£¶ÆÞÒw éø¾vÔ¦_¸¬ŸAç=¿¼ŒÌ·ìpŒƒœØëº3Éo)ˆ†Ñ=ÓÏDÆMi¶|áÀÂe0X {q<µ¯†A¾Á0áVG¼Ç^vñœ/’¸å/àqyæH=Æå¶¶|m~ 7q»<ÿf¶âä¾G˜ ýñÕ‡ÃktP  †DÓœlÏÄﺩdWôê’Šš²¨*¦O†8ÁD³!YqZÁèU:¬]ꔓ²øåŒ 0xǤ%ÿ‘H¨Ž„ifo˜8Crç֩–=dž×‘½Œ­r)„B2tæF¯:Rzˆй©ŸöV„!ùaÍj•¥~>f‘ŠÕÇ2£#q&^>J½Éc•ä~:jÊ*ƒ²;W²ùÁŠªz]àS«û(¯o‹r•á¾Ït6Þ*ÕI%Aeí|ÝÉ& ‘™¦u´-¾xu5ó°¡#l…wF;[&ˆZ&­\òjz£¿ÒüÆâ?F}jÇv¨ŒŒ}#vË-|›ü± ¹{ º¿}Þ»(ø— ‹‡Äå#%#§åÚrõz Ë—sÆû“Ëñ1N“ìç[«+{±EšÕJÿ5IÑ›>Ÿ9Ï_²oY63zé8¨O¦/Ë8ß Ì¦`f>‡eàç”'4üöH'0 ð· ú¼jXO¨ß_:Û7¹#÷Ù¬³µ?Ñ„3¨)¦ªÄÙ žþ³’Ì©6U´#L4‘9#˜RC2­H٠רÒ<;ÝÌ[Z;5!CÓǼ¨ÊÓ\ ôano6ÉIÅ$ʨó5{o ¶/AñÓf ú¨R¢ë±û…Ü%ÿ!ÉâÛ£ ÒoïÍΫœXWGÁÙú¨- a$Å6 l‡+é×Û3¿o;_ð ï‡æ¤ªrtoÊУ7²”ÍØÛâ°‘l[jÆÚWÎú©Õ½îà+E-lü§ÄØ ô’ïú7°ØÈœFAÝ$|i@ZF°Ý@‘Þ\)ø`“Fú75ÈØtÝ&õdz1+DRž4Ä“§GÈž¹â<`·Zækèv(cÁMyKû5èVd8—r¯AÙÏDË6ÃV)rdŸTS&L`fèãf::d–…—1×PÕÆÉ$wÀb)Þ5§u`UÊÈéÏp3šØ`p»ô:lHŒ¯Qpú§# 3nlÀž±Û ø»&¸Ýχ‘7WÕ“Hx@Öwˆ££pkø¡º!Vú’õ‘¦H¸SÙ@Ž(I›Öj­.ú/J‰yÑ»lÌ‚ÕÓHk?»ÑìºÖ-}©%D,ʼ֡áLä¢kI Œe²ocïh¤š-Là:’| m™ÿ$±îõZ–˜QF~ÛÇ‘z]ie¡9–dó wôN ¢DÊ̘èýñ˯Æ$B òòuÆOÛR"í¾Ã×1quc#=”éÌß}"G‚Z ¬ hà)ýÏQÍflÜÄ…³†1bs(×):­’6Ù Œ3¹aÿœaÊêq³Þ™ÚÑ"ùüɆ[ ÜÅ㕲ãi×wåžû¹—ºÏ_5¸¬ª&Žöä&}"ÙÖ…Siœ-|—Šý÷oãâ ªHt-ƒ߀~æ*I7èÈÌ`’ tŸ¤u,ÅEÈ]REÚÐ)]&{üÜ6LÝ–IF Nï[Ó.@ÐîÌ?Q¬yÎ.ŠCÞãÏ,ÆÖ^×E&䑜#­F: †7›nռƖz.{æ|^ˆ~ªÃ/ÇwW?-µg5i{k÷² /ˆáMµ5é—dˆêhí‘ùhüõW÷wáµk—™ΰÿÇ©\13Ó^ŸB@D±¸ºmR±ÞT™/šýuZê€ë2T{þl7Ôä Í]îŸqÿ5 m‹Îœ`˪V ‰7|…"PàÝERáäÀ'(¤n}_bzOY·ü]ìöQÕå;î.Y* ½¯è•.٘ќ½]íe•bõ@LM\î×»ÞôÌðyŸõižÝ…¢þ’³Á'ëF ›3°ïG šÙ#mXÔPÊóÛ—‘QÆT™˜jæ7BÙ³$¾m½ø¯:Þ,%›riÝb Už5nؼèÏ:®uQ|ÂÀÚyj>«øŸ^@xgßS>ÜVH—è.oØ´–t1q|µ"Ëô…BÁB΋r=™ñ@:¾Oq˜–=í÷zšEëû㉵ Lþð¨‡ë½¹& .pÉ ¢ ëìŠ"¾¹Áá#¶Âªq+ÁÝ‚d9 ærŸ*ˆ²•Ö³×^Q|û’Ð[0L,õ’‰O¹µD‰‡É¿J¤8ØB³ ÃJnæþX•ë÷c{u¤}ÇÙ¢­!•p=ü"PŠ…°–‡ê‘ÆR‘ìkU_5ÍÌh N°ë•óf%©¾C×B’$‚Ç:ÿ¡¾3u»ØgzE‚š½m³5¨Snͨ^¬-1{ ¶`L휃H×F` y_±Õ]I÷ ´ q“WWbߣçñîå¹Tw5y\W£>æÄoá§päUÞ3Áý´~Ðùúýçj"›û™²{ãÒ‡áÍ¢glçšC°#9xè‚P‚×^û›:ëuª=‹xð{hy êë£î:õ¶ÓC ›ý½¬<íØø …ߌï2ôíúqtYúsXB~‚Ü:t‚Z$EñEǦܯ¬ mjG‰–b˜ ØçËßäéG}†Ÿ‘¹4Ę­9ÌߺÿEÛ,¢¿€ë:ÌäDÎr6ËüΌ‡ZéÈ“WÕ½AËI´n‹.•à'ñ#&BÜÂÀP±k)ÌG:ôl½ºž†‹àòíÇX¡Ôº\يžÆñóˆ!”Cpß>ŒMMT'ØÎ)¿u¤«çg(u!;>£ùø¥Î/Ö1ôÍð»gñ”CÞìâÑÜåœH‘Ý.>j"q7ôn;y™´jkþ‘E¡+Èî‰Å8œ9žæм‰0Ä+¾z¥ÎgÓ©Q]g½ÓŠS*ýpÝù¸.DÏ?ü™ï`‹ø‚}´Xsbb—bÖHê (è{%²bE(ª)æ:¸ÝBôw+¯nÖH˧ÐTïõÂJñGˆi &IztÑÀîƒCl šJ©öç\·g‹,£'^u…‡jÊø pÌÑŠ^V‹|%¾wŸÂìõOr^DQ¦‰©ªKƒ™ÅV`>.—þ’È0I»b] ö>‚émÏçÚˆÓÆ²=½Q4M¸–\V/•´ì0Ôg¦fn#þÊ”çÅ…Ä{ÿƒÔvzglW*p(8 —tUab Êcê) qi:ãîŠ'¸¶[^ðBMqs±'–#Õoÿ4Øæþ›ÝªUõ¥Þã`Ò„ž‘í÷àþ ÞYÛ±*t‹Oñ*¹òZ⩳.Wk²B4û¶ö0e»á/ê ±„“AÜÆ¿òcž‘[leÕø›ÀaBÛòxÂWîmž!ÌÇ¥@àl_N²*ÕñGÝ«%L^ÀäY˜¢Ã ùè Éßkp`“ê µe¸1ˆýëÊÒ“¨Ô¡a‰µ4‚xÚð´‚=»ã§ ß3:‰v¯·?à2- ±9ÙN WÝåœFhݾ:Þ¼"Ug5ƒŠ!ä>ëöÑŠÁÍçPfF "‹&$ Zìò;i‚Ù•×â"¯GdkÜF‹³Þ†§'LJ±8ÊùOoTÄë=wwîJc¼üÉ)íÏLòèbupÃû¥ ˜sCe§ÔUÉ_N­Y7Zçe3ì¼…é®ìùÈ öè½Øwév|GŒípÙê& $âþý ã;žà@¾±i­ù—ð•Üô䯡GœÞØ£¢7ÈÞDŠø@듟(´€ø¥_½4ÕWm%ü]^K (Öù"EßSrbÍ%;æŸæM¯)|‰E±à<ìÕÙAÞ™ŸéªÝ:ÈÐ8¦_æ^š%‘–¼«úì£ÍÁ±DJœ6.ÉDÂÌh&÷Ùœ•ßßøP­:ü%ÐÞ×L¦[¼*OýäÔä|(·}½Û°9éXÏ%l«ûþwpìs2!OîTÌ#ª~c›R„—Áps.Rðcj™«&‘ñ9 FXVAT1»Ëëf7¿h´_îE³ˆ,˜4IulôôcÜ{ tÑ<hÒRaBÿh2z}ïÌjf'ÊôBV)㡳ۺøÓ÷xX›ÑÆÂ1q„IŠ¿RöQQÒ=sÞ=Pó‡açhè&“º,šÉß k¬p>`*àÉ+Ù®‰¹ö·Ü”-s®¦Çæ}¾OC¡_fdtù¨° ß¤4€£ÂH É 4ƦoxÎPp€YðG,uédGvùˆÂýc6md‡wI2DZˆ¾¿ÏñÎäZkÄO~nÍ´qW_±¨£8g…™ßž?)I<ýù¦s…kÊÊn®Y)DÒZ…¿¾}±QßwÀh@+ð\df„¡7;æðê‹ï\Á*{ºW•1~E6´l[ÛÕJ]åqÏ0Y˜ž û=°ûkà„º¶|•7ÌEƒ¹îU€W<’Øð$&ƒIOÙK"of4Zš‚‹_i—pb~r=€p* Ê[5»lm€Z§B¦éBÄ@ל…‡·íïšÈ5ü4×g©P±8õä.(ËXNØ)pÏþ®Áìk“ÂF½‰Aø°’d,$Ë—$ôÔMç»è³ Ç«PÝê ¬…+ëS‚­&"õšf(QO3ð2ACBE #òpÛâ!dá;+¦âE⑊q8-ÀÄb™¯”‹ «d¦§ÀÅ$ æ}` 2"À3*›1™Q2y;ÐN¹ÀÙ8ñvÑc[Z{AQ!Ã~\¶Ð>’ûÝb!ñ6çýÍ.#¨ÖKöŽ/ë šÈfpý’ººSSB|”IOÁqÈ.œwïØÀ¥Ò®hg‡^ +øñ­õVRa›¹j »¦v‹‰X…Z4ÖNžã@7:®*ú{47œs«—Ѥ'çcÁ!†”Ûõ7§e†ŽÜGêÖmбUU 0j¬6å~KOPjV*ž» Hc"†zö§[§€X#¯¢sN¬Ç”T¦ãxÈ?»XD£ )pPÏ4uMÐÄr¸¬³ÄÕQá‚xRω®‘¹ X{êQ­&ŽµÐ´î²­3MÁ³žÄЉz—Jlµ›õ¬âÀ˜Ž‡VfKŽ[ÂL%vöVÁÈrÂE¶â`¾`Pøxî-è–NI´P1VÌþ„Œ²ÇdwãÐð93nP™bt{ÝBñhLŒGŸ}wsIÊ6ó@_¥`cÑ5œý¤Üh¥ðü£ÔÖÂY‚¬Õ»N²üoG·t.C­vlZmM_)~^rÓëa48" ËPä‰WËÒÄF²i£ú‚ÄÕ/€iºÄ/òæÆkÇV¤\(+.ŽÅÔÙ•›úˆ¦Ç!ë¡a÷n8"LQ ¢ë‚ªÞ?¾U’¸—¤îwcÃ|ÿtrŽ¢ßJårè‹ÉB^ ñ9¤4·gdÀŽ[ÔÀlŽ<Á…SÄH9ÈÍ@Þ…{‘ Äjp€°ˆãµýÛ¹} 0¶c‘I>†g|K!|´nÎP¢þsˆ¢sé$ÖW¢2ާs°OPXs³ÕýuåýÇá.–&Wõ\É,uäMpðÞ$ûm§„>9 lœó 3EõõÌ$_ˆÕQ ù3ö¾I¯7—Ø“ö² 9EÍC;¨9”<‚Ž ý»Ï{ ç” 3pwí'ºðǺ–I"ÜdYSy; „ŽìÁ™àåýWð oCSËÝDÏ2²gÅŸÚAʹĽªŸÉÑ~ýµ\CQ PÉæFPO2t)%8ó zV7 W5:7]:˜*µ[b‘¸4ÑÝZsï'øS–^B:yQ!åk ºæá§jË”î¸pN_ÂuK¾µ‹ðwäY6šá\α-C:Àã?ãE‹F-ú®Ô¤ ƒ§u‘|#¾¸fò8)gÇÒnËÄÏŒú+Ùç PÐ ÒnØÖvª`|`ªmK €Kyò|íÍ¿õˆ…€5éßr¯µöYÂI£TÙŠyŽàÕVú§?p³m¹Åã1º˜úè(ˆpmœ£ôÖe?çsñtT𖧤X³‡¥‰?ÝÃ> _xÏ•|é+7+Qò›øC;KvûF,lÉÞ¦”.LLWü#½¯Ù{ /ëuðqIôS;’WÞ©ìŠý–ÕÔFŒùBƈ·Uö0¿¨ È·é|Õ¯û•°°Êÿ/8T­£ïÇ´{Ôd©ÿvÞ.€´öBV}Bô5°$fQ¼˜{Àô$ñ(½˜ŠS¤]ö5¤>…q ¯vî"ÝÂýr‚¸ºÏ Àè¿E ê<åÃTe‡ ÀYwñ+èˆ[æ”]m6«lÖRdñHn,¼%ŽoÎcOVªÐưï][ŽŸó×Sj7TžÚ­BÞ‘‡ˆ0¡ H‚aðôÈñRû” d,ÏàñEš¯Ä³arô.áYw!ú¤×•yæe±ØÉyQú'ëµ*uåôÙ¬£º¸ÖÆÍßf=Áø›ƒ˜AquŠ;ª#_[úh^S5Of¥¯Ðãî›…¸eeù¼Š”_H9ÊDˆZP™y$H°¸á¯ß§v- Îôþ?2‰ëÅÎÑåõ‹Ÿ&ŒÙò[åí⯒#?v¦€—öÞ¦à{ƒy°×ÛêÕñ&&5{pt @h~Glð« ¥…·&ïÉ;õæä;>us#Ðnv‰•‡^çœö&J¹Õ¸6À ìþã­ 7+¸Çþ¯SÃÁê¾MÌç îʧQŸí4‚BELŽò°xª|[COŠnxåÁq@æ*ûŸ*ÂlÁÎÔ¼Wõz*0ƒŸg믽Rݹ\¢En°\ ~e5!IÛú ¾Ñ[txX¢Ë¡#ñ¬úÒðZöNº3ôU›’ëÁ]‰¢Šøž?JÆWXEíÄn^â—žxé”þA­•HE$˜„¹ß¤ú^ är’¶¾>Ýämi(È)ƒu¿¯ÒQ8[ÎÁ‹½roZœîz3¸Ÿõ"hPÄÕª5˜­¡ÐÚ@‚µ¤Š„–©óeŽO¡‹Žø…§·ÔÓqùÚÆ>è’Yo¯zC%@Âeë™6þ•Ç&E%ÌßÏh%B]–à*ÕÄ_oóòI…ƒª¸¢HË>ñë+_1¼’zoó©o~D“is™$‡o[ÅA"ý­>½þ_øQ%½›Nƒ$œÁÊY…r<‰¾ÃO.–{ÍÃÚíKð´2ÏW+»—XJuÎ[i}B×փцoƒ{4Ï⾕ە ® kîÕ ! æ×ÚlÛ¬¸°âîøl”Æ`aòyÙà[%a¡p¹ðÐK »R”ëØ6`‰]XÆ©d‘ñ--€ÐèOö gø·Wm,ÜkJì£Vpz¾ÁÞŽ ëd"sz¾üJàE%øI%ÍG:âÛ­?çç#6b:\!‰Ÿ ú†e‚ð8 Õàå¡›ö5ët·@:ÝVæù˜Šlg=«óõŒ÷zf¦÷‡}ÕD×è­ábüÈúÂc90hAøØ&Î@Vju>_ 8Z´²ÉqgÐ"Ž”ÖA ÚXa±|­*S:µ\y-2É“ç¤ Eˆ¸xøYü™¶¤ÜœøÂhyïÁ±™í~KªÅ‚d¾?¢¢7|®Î#Ž­¾îghí`ÊM¹ÖõIu%A˜Y¦×;ç¬] Ùò"?ÁQ\ne/=Ò;c.—_tBÃPÞ`w˜;¸a×w"“RzŒáî»æfæeÃò8x4S±P¾“ÖýàT°,½¯Ë›”sòÉÁ€¸Is#Ù¥€‰ò9F,”Ö Å…0ÛÒ–ç€D–ÿµ®‡¤ì´ΉšU¬¾;W ¹ôô„óDS9ѬñËÆ³újäVðËY£âíš ‘%‘Ùî½LÛ6 s1]É~s$ËVüï½=°ë ÊÀ­ 8²…TÔÐIåA¹¡×:q8sÉc¢­ ß6HPcŒòßÏž Ä}Î\[”X…õøÌ=½SðVHðšöì$|'¿|›àÍå‹ ˜{Çd ÀÌ厀í-¥{5sï¡{`…+%{7{6þãýÀÏœ?`Șºã©KÏ Gz£{þ·IKþ¶-OUlIp”µ†ö7Mîø›äðJ ; >¿/7J‚“ž¦Ô2ã-m\ܧ‡¿šÀË&¬WÕ /Õ­œVõ¬LL\1³ð¡½{H¹;¾¡4ìÿ6n qéÏI^4‚!¦H¬ÿS®€«%ÕÒsÅ›Ógù8Õ/º³¾2–Ч|SE1õÑå—{…ŸG¥Ò)&%K¥9UóÚ¬´¡HÓ<ˆÿдnýæÒüIìAg¥ Tñã ¯AìÓœYa,ˆµŠ:OÜjQ@O}²^±ÆÉSQÅ»`ñÓÂC:{Ŧ,ûNíOh7YJc«­¡{cÒ´µ²p}mÒ×&l#ÁY,Í ,Û¢˜`*u„¥ŽßuöÕä,âEšB­TW‡ñÚœ¹ku1>ƪ0(òZAn¸@×v/Í5}ÛB ~NÃwÝ:oj~‰ŠÚ]®QC^ÁË[ÏMÒwYó‡ÅZÖóâÀ ø ÍG»Þ÷¸è-^[ fû3]WÔb×xÑ+ª´w¯»*v"ëWB¦<²µÎº) ÿèÆÅ_ ÁC«aTØÎ§=å3ôrF( §Ì=R)ß“¹?™[â}…¥`ú£¹äDLô M-4ÐP¾«ÞÂШ¼øMkA^d›ïœñ‚¹»Ÿ–m³qã}ƒ“ÓcÁ¿ê2vŒ< ÄO˜a]”bÅÙÔëŸa„\4L{`LdþÖÂGss.äˆÕöÆ?ü¬Ã’^æ[X>[†~¹Nþ Éš–[ Ò<‚jà<ý8Û¶Ä»b&\:íñèîÈÇÍüÜûŽ\¦!S²ÿ~õâ‡&Ÿ"Wö±èÍ µºô˜ ù´L˜Íßß} []nR_-·í³"ZQcµÍkÈäïD¢Nôi˜ý‘* ’®…ÛuÍî"Õõ‡Û¬Øí|†ønŽ(Ï]7 ž½%:äþ§¿ít»ÃÊŸÌ ¦-F¢8 ûé¥Ôm-6H‡-p1ÚÞ­Z9·A”LìýžDŽj72MºÙ©Ñ%’ Òï[Ñd7|:3–Ÿj>S5ƒ ¼F…ïÆ7n*ñ/êë×í_‘uBHaV œ±ŸÄ¾Ì÷ %©&ÛÜVà ,¢k#ü2Œ— K¨‡û:|ÌC<Ÿ¶à'–"2™cthìÓÀ0åĨ™Ø,çÅÑ–WYÜÊ"b~âíÚÏTPÇÕɘ†&6îKL|оƒ©êLðøˆô}èCõÚ˹Žç…+Fgíò”WQòæ#j7ÊÿQ=ìÃ3'‘*2’™¦³Ø/=稱`@ðRõ=DKvLÇŸd`”r܈ý›o^¶SÿØ\cDH¯£CQ íElFWB%“Û×DÏ„iÛâÛŸC“þCép+¦Uóí)GÂ,U"=iãýýM¢ÐOR,Z‘íEÚD™®Mø¼/ùn†Ó  ‚ ÂU© }²=?¦ ¾jzf)¿Q’7ÍG‰x}”Iþ@ìÊ&#p¿²:Òõ„:~ˆT%T3_(lRƒ¾žyƒ:<+âè{L¨/7K ǶâȬ[Òë§&¦U¡O™’«[Ý–¿lÜŽƒÝ(~réI‹Iœdq&mä‰VËìŠ2†I÷<_óÛ‰æ‹ÚÐcQŠÏ-<lbsG]2íЈ2®½Å¶v€”>JRVÞð ÜßK€^!¼¯ÃÀY{ë:?aüöý«ç›ý_}“©šR¯ò}Nºs/нäÃ_¨LrRnç –‰š~]öV-Ú¹Ñg>SÒò<Û:Ô§“‰J*­*ÂOšB6õ{Í’ˆÌÓ©c¥o³¸ü¶÷öšÊþ†2%Œ7<>dÊíƒ÷µÝ£ûQvMõõ‘QÑeÅç#ñ*¼àÔ£çb5¡².Ä‘‘¨øÓ•)¾Û~·ÊûƒÕÕ2)XΉ,6*rÐ|—ÎM%)m § ÁêŽ S˜°;î€ :³2©x’³3ùõ™±ánŸè8ù$åï¨ÔNò²ºYÂhÔó?ÌÑ ‹H¢ô'¨_1´;ª ™Áà X½èwlÅ«KÈá?ÿ¢çÃ'Õ ÿ-"~^f"h–ÂÈŸà*<ú½Hî+´Fþ&¬ríoÓ*ï ´\¸÷ç¸ÜìDAU9¤ñ$–ÍK/Pe2]9æc'dX¯¯4DÓ¹åhÌØ®PQbÕÜ·ÜØÆêU«¼äƒ5qÃÉ/K¡I#söI¨‹´¬[|¥'s91¾‚Ÿg ~ÝxNo¹·ë³úzôÀ*j‘ù”•¨QŽþl~}]<–%N5¸Ž¯ºÇ;[¨Z®czÅ“æÕAÔ;tðlˆ¨nƒÆÚŸ¡+0ÂfðÓêßÏ« .:~Qjy©ÒÞØ7ɧÙè tΟ·¨ƒ>YøMÌù¤TX‹äú<Ð⋵ÿ¶Že@Ö¸jÔ8vÔÏOy|‰iKywzýÆÒ•&lúÓ6I'ᘓˆ>;.À.69VëáÏÁÔçá=rè—Z¦¡@©úÖJ¤¹GYoXâ=.m¸ 61-¹¤ ³¾]è‰Â{÷ÚjR·ÖΧ`hü¨Ê‡= Ô¿Qnn’|ÜüðØÁ½×´”lNz té,ý•z{»äö ¾éyB? ÎBÏq2¦°?@Úϸ¸Ý*¨­±ø‹ ÆtµÌtÕÕwBjškEš¸lîR7ÜEÌžÃðAÃóQ!ÐiP;æÑº¥±}Ü £e<3uiááÿÜYÀ°Ÿ©ó&Ôy×,gªÞÆ©Wr^]©mëá娑CÃ7v¦‘2ªÇEPŠùå|B#Î3{lS‰Àé‡çt'$jÌsS£:’kư͸ÑAÈáÊ!'›ÎfÂ"þÔU`îÉc¢ÊF|«kZ.–"¾ìhjüeí½¶nX‚ˆa›9?óƒQŒØ=ï§æìɲ[âsó» PÿEýum›B2éµs[¿Pܤ=йdÐàÿ¤¤Ë{|rôñòÎÅ» ëå[µàñéèÜb4ǹØY‚k¿(ágjØÃÏ%”qú"†´1ò—™DnÄ;¯Ô¢Fê¾ ÀKÅ^ßá^XY³h/v¸ßjVe®¾nýðÎØrÆ0jöÑU\áÜ„.WÉ,›`s*Y^ªÅ&˜rùëó¤l˜ýÇÍ[èFä† Ê¸ÓŒÅ.C£Es?»šE,ƒ­È~ÄLªN6JMuðêEÈØIÞ$C²I–²GxÕ>=J¢Ó;Ö‘çégš³ÒÊßF 4ULíHÄDÆ»½ß ÈÙÑnië/™Æ “©-µµ]h¸–`@SÐ÷Ó«‡ì%G@oÉRå„xmc6Ö×ñ–E¥‘Óê6Ñ$´Dù^ÿëXù'€º;8.xyÒ"[úMöÉTVI¤óO1z+­å2jý¡pÒ’÷:‘ŽT5Žè%LAUv‰O\Šl)³c^•Žl’jnü;zt¦„ó,É©t€pwû?¢šÃ)vîJ?K"~•¿?qÈé=|\Ë=:1œ<™'ßD¨òªÖ¬°®pÿ9ý1=«|æÓŒ9å³ò¤ Õv=„•ד{ß3a™Fø­ç{¸ú©´¤wIÉÊÊÔ׉ü8Oå÷vÌW„…mTÙ¼/zë’ô7g®ÑÒDíÂ¥ÐJ2†¥U[]Ùü«¶lš`)Ñ‹9‚ȼXb废J(ª*÷ Õ¿4ã5÷\ÿÅ¡&g–$ò75­¬–5. ì¾¥¥š2{-k®E¨•Ó4|ÀªqN:/+zòåIÜŠ·^Ü &4|äïuÈü!-1åpªá)· G‹¦S©üz§ž¤gPbÿ²kµ6 {B³xÙ(e©UçR-T—憄Š$òj„82ñ[ĆYæ5êïÒ¦"LOrüøN€þç-Qw›–ŒÈÝl&HÕ ³Ö`V:Ì—e0˜HàÁ‘0ˆYٳDZŠlÓ²Á là âc‡¡ìЦ3ŸÊN¿Q˜ÍÂÍØÕ¸÷§­¼ì{9êÔìÒÏÁ§É^r ‰îm—ÓUl‘ÒAœ H’IQÅ¥E8: eðîÁ\~¹^J(kœîíI†Á¥Á6Xö¬…|úîÓiö%ûI}(# mèQŽPwòXÍdÛN*Cé‹‚ÝE™ƒ’!¹Ê‰]oˆF»‰VN¾b´àv4í°Éõµ·È!¦À2ˤ@ L´:n«HÍõb?ê}VâáÈ{è~‰°ÊRÝÓª ‹¯N87Ç•F3 ¾Óñ±Î¥ÝUµúKiЫp—m·à ºEÕlWÑ•&ëšH€ÀN`N8Å”—H $­$|I¢{jŽÐI­Û‰/ç «€6uÖüÒU õDAN£yá·¦ú®:ÊpìTB:0b±Ñˆ1k ™•%µ–)k‰¼Ï:4λ±H¾Â¦Ôj4m3KÅMšØ®}pÂEk ~¡À52Œxá¡o‘Ür}-.RÐa%ýáÞˆ>$jàñÙ‹+”‹à„û±Ø$=<0ÖíС؂öðìߊ©¹rœ7ø ŸÔ’=˜ÚÒ Ø›g×[’ºÚífç;$¡¦$ÕfG[ZÒ=¨sÙ¬¿’á¹Óz —/+üJe†‹ª}€D8Ηò•ÀÞ©_±«mi¯NO˜kö+í lF´L®E¶Ö]MÃìævM\δµ[]Æ®œOK:â3ë`ô–}]šªz¶ëã3gÍbxgzT€‹¬~ÅÖçúÄ–¨+Ÿ»,ò=[±Ü†QÇÉ¢õv>!biàß@J½Nb,»%µ¦˜³©¤I÷¬wÖT4J™¼‘lØÀñSÖ?è.†|)2|í•Õ^†OŽ{0O@">Ï'B¸G9¡-kgL…Š;þÕÔeVž¾³šEn/“¯iešÝ9 `îŽ^w3ý·=Lû‡N˜á^W´¡õÁfâŠùYa|R¶á÷I»°4Ôé&ÂËòøø£”1é(4Ãüø­a7n~´|'-±Æ™Hå$ògÅ2·É¤Q÷ï8í]î²ú&0_¿fä8Kg\ #µág³G°‘¯xä.›*üÃus‰ —Å_A ƒÊ„žq9GòÂvö6ÝgYî ƒ7_¼tÔ‘NÝážÊÄ=Á—‰Øñ²5ß–¡d´A¦t‰Œ›ÿM^/Ü Ü÷"vé÷>¬Nµˆd;ˆ^¾„è~}¼J‡–$t®¨¼À*ÿ:}…É ‹–¼º ¢•Kã|ÚrFz7!öôÓðŒ {§wp2WÞ‡í*©æ S¶6„$, ‰?àäΪÝ}…?¿¨¡¹gßùû¶3‰t1dQм{‹ 5ˆžé÷}Áj_‚¡ZÔ%+‰{56Sþ¦:¨’ð´ßÞ4Ð;øi‹MÏêJ¥È_皟¢ŸM‹¿‰Ö­ò±‡$ÛJËlŒÚ 3Ad°Ý?vûiÿÊ3uµe}h\ Ĩ"8Fõíw˜AOˆÏx´\©Q¾²‘JP†‚0e¡¢cWÑȨ%.Sj¼ ÊñȲ½d¥ª ê{Æâ€*‡ÿ^±À†ž3Æ¡„ëBÇübivðÿâ|ppò«`b‹ð gý•woáTý ªz?(Ñ÷Sgí{Úz,á ]¼!{¶ZmÌæÄÁI^ÿ¦Õaâ˰i$,‡G.‘p÷u€v,4ÞÀHÐ{eˈ&Ø#?jŸy Åq™U§‡Š­*.Í ‰@Œ¦y'Ç>'9ÿX'm¼…âV¨©ïõÀoœ©ß˜ Ö\v­k)'ü+šÀ¾ endstream endobj 566 0 obj << /Length1 1608 /Length2 9377 /Length3 0 /Length 10203 /Filter /FlateDecode >> stream xÚ­weT\Ñ’5îBpmÜÝ‚'¸ Ý@c Ý ÁÝ݃wÁIp'¸ Xp܃}$ofÞ¬÷ͯ™÷ã®uOU]»j×9Ý—™^û·,jV‚:"¸ùyøÄš ø+ £:·Ôx4 ã03ËÃÀ@ê¨D€Å`@l ð‹‰‰á0ä¡Nî0ˆµ À¦¯kÀÎÉÉõOËŸ€…ûzwÂ!ÖŽ–ÇW°=ÔÉìˆx„ø_o|6`€Ä ×Ò~£¢© `SÖÔ(ƒÁ0 =@ÛÅÂb P‡X‚á`v€°ÿÇ` uAþ”çyÄ’…€¸Øò¸ ìf vúãâ8a8üñ¬a@GÄcPÄÑÒÞô‡À£Ý ú— úáðè{Ó†ÂpKÄ x̪­ ôž âOn8äÑ €Z=F‚ –.Júë{„yô"€G8vCüÉe€ p'{ ûcîG0'ä/ 8ÄÑúŸ ¸0°5²Ãá0غóÏ:ÿ­z ““½ûßÝпQÿÅ‚€ƒí­xpøsZ"s[Cqxÿ ŠŠ£ÀÏ÷;ÈÅé?}®`Øß±ý™öG@ÔÑÞ[áðjB)lÿ;•yþ}"ÿ$þ·üo‘÷ÿ&î¿jôßñÿõ<ÿ+´’‹½½&ÐáqþqÁo8@ðçŽùÿb{÷ÿ!ú_ Àÿ`ø?¨ €mu´~”‚‡ïF\ âiC–6+ ýcþÚõA`˜=Äü¨åß6¸ù……ÿŧg±´süÓt±¿.°#è_™?Êó—7¯¡Ž‘®¾,ç¿Þ¦£´UGè¹;=û:4  ÿZüÁ“ƒº<¹ùEÜ‚|¢‡O &$æý?äû Äÿϵƒ¸Œ‹æãÿ[ú<ÿ\™ü Œ¢£%ôgN^!€Ž ÇÑú/÷¥ ö¨èßÓþXò®ÿ9ì¶Ä™Ÿ…ZJÙ¦f¤!>‘e÷ +wuð£ö;×êäùUBÛ}SÃVÅÊÍo«‚yêFÅï?»Ïì9Ým¨rltÚ³¶§€r©½Ù;óž.±4‹rnðšã§ý4ˆò<œV_A3á{½¹6¬£kZt‹A3Ú,Ã:¼d÷ctÍó#fºpzâcù¾&–¤…°‰èSþÞO–ÄË Öž¯ý}½íÇèTœb±™%€d>É{ôIwsØY­åÝ;îJñ¬ÄàzË® žë*&Ü&´MY*›“T)Á•ˆŸiùmÊ]UQšj—øg A­_¹ê¾Öß6¼{%GQ>Z tSbÁÛ JŸ~™ô¢ÎèRÇL%Œ¡Ü#})²]Cµö Œ†á˜Mv—úA)´Ž2M5wpR€"nÂ{>hR²áYh _|ƒ7@x_ãiÃÐuÙ6³HÞÓE˜×W½ø þŽÞ\aÜêÀs©®EŒÆ˜]-½dPXcñrðmÁÔUʧR H)š1Îwæ:©K¤]Ü6>¯¾‹Þ‚Û‡ŸQ_Ô?Mˆ,`¾yQÞ9ðå©Ê<µ¯¥Ü‡Q™Æ¯hdÈÖóÙ¿“â®Ë» éß´]ôô¾ Ä(r—(»8Y>ÈöÞ®åaï= }·ð-INn×éƒzƒñc,ˆ¾çv¾œªv-^;@ò„7Xñ«9Õd! …#‰o,9²*e;ælÿíuµNúdņEyXÚ„lüÚ¥ê˜ÔÐ!ŸñÕ¶¡áq¹ˆç=rId£-›‡j?//4÷C!ãh“òÜû 2/)Š£&•ùz*G:1cÖoªì']êXš¹ñZå~zâRÉ‹Ñõ&dz yÓ‡5Œö5/ºa~™ufïô8Ì.æ-~e°THê#‰¿¨•`uzéÍÆ‰§¦ë—ÑKJ)s­jrÔZê8¥KxcÙÑ:U” •s€qá³°+„'ÃZçR&_VübÚá‹WŽíøL]¤ævx¼†PS¾†HLdñrvÕÉŠ´ØÚ¡Xœ/ßþžÿ¦pí’ÌÁ‹Ó©£Ø;vö´¤Þ»öÜál£_Êø-äfdOl}\蔚ñ“æ.ÁBP9àÕÎ$oïPÔ jÕ—I¯k(Úåæ3•y¯†…„}6»»S±¿(qI¢~^Ù|vÄ ðWm^ïQ›èÓʤ{J·„˜ÖÅÀ(jy nØi¹‹]¬dÙ³Xw@%Ó¥™q`Š èÏu+¢¢žçÙ¹‰ÿNNáIz~+AȘ=Ðæ†}(S–\ž\[¶húõCfqâ{äºz÷nÙ#éFU‘>dO¥ªälÙà-[qRÚ}º´&Û챊g*Ü÷/èÛ©ñh¦ntE‘10ð'Ù:懚°É“Ÿ•H¿:ÖJf—gzŽŠ_8’Àó lUùžj¡ræ°x¼QjqlnGí›vЕÛJyÇ„âIv#n¿J8)ýíü6Î Èá8 XVR‘Y’g§s¿LîŸFÚªiÆÐ¶?Ѷ솽À¨Wg¨£p¼=N„QDm´Hœò4#·ÚP‡~vîi÷2Ôp5ÌÇIÜuòÔ ¹“L²¯ë*ä3~FQÔÕáž؆mÑD7î³,Ž‘ÃÅä é<™0$NþÈ? «h-a[,:µ;Þña(ï²1¾\Lj«#¾‘uÞé“ÞUïcÖËàg²qJ¦#ÝŸ,ªÍŒa ìvhd2}9K¹ÛÞ¢Gi”šÕÌ‘VQêå>Px` âãд Ë9ZõP@}ÅŽn ¢HGÄNì‹dÓ&-Ý5i‰î¡QÞò´á'´÷ƒü ¤Cno^‚¤ÐS6ï…F´JáÏäaïqêÛºë½sçðÌfõnm¹hØz½T9¾A{©ùöGG~k ùº(xú…àÎYÅä˵x|\ZƒßÀÿf/rÒøu–=¾5kéT²ZÜ•hLõQhp£ôþŒŠÔfêZÒ]uáèWLõ‘.Í5®îæ+·]%¨êšÎo º9wÒL’ï§!¸+ Aö¢A·I¨Ô µÝQ?[LÚ§û2J(ÞËkU2ÉJ$;7±Ñ¶SÉÄŠèÞØýkKÉY} ž§á<= 3òb~äòê(L87kO¯R=o×ÄæI€Š³GÏ|ûwšë²Þÿjg“ù,yò^ÜfÐCXÑ`M)XɱWôý j*òBpyšžôótT~/|)ãqóSæÐ`Dcåvû3ª)׆¨+HZ9š>Ê”ú&‰]·÷d²Øâ@/›‡t!DŸx/!ßjÑÊnîJ³–r壥¸×íZ(~÷•Üß]’wWÛÕ‘½8}¶‚Gi R‚Çe&öAeÍÄ#?ùБ:Â6ñšgÜý&^¥mm¥!„BÊMÆ·ß.ä^Â!¹Ð“ÿ˜'\üu¥¯4,ñGe û'V£3†Ÿz®]'o¶vªz½¾A…fÆ?äeÉ1=ã‚tzöe'ÃEemÏÔ•‘;á>^.çÔ&·©v¸D8º?ø»¬Ñì5ó`2$hS;:9ÀW—ä9±ÖÖ‘3îtÉn'»åÀ”¾{6×XW^§Ñ§j–«#êgÏÃD›¸¾*‡:TŒúŠæšö+Ø+Wý½¤{«Œz‰Þï Jó£¥>êО~7à^Ï)Þ(¸Pu|+öœùDÔ§G˜*üL÷ bÈFì(÷¿–j%Hyýõ§ÖŽÕ¬ÓSs‚þÛ±ÜÕZјõÕÐJÙàÞt¼ÐÀ¸Wv¨Pzñ%ÑsOu“OmŒ«ivÑÏŽHpÏp‚¸íÈúD¿GÙ i ͽÍd4Ž\8!¯Ý¶UF E-ó·Ö.êY–¶ì¶¤ÏiŒY‰†Ë|KµÈ+³Vž†„Å@—æ° œÊ«"±,ž‹0ÓOt¦;½h4ë6eH&¼¶‹Îå·~ê1c¿ß¡©îbšúÍåø>~—¥0ÎÔ[“xerÉœÎÑÝûi}Ö–ÁÍ»DmÇ'ÖºGh Eà)Þ-²ï‡|ÛeHüÎùÚo˯ñó…ŒEð\‡Ùr›>Ô¬‰>ý†ôô€{ÕûÒ‡Ð+üØD™ºaqq£ŸEr—-ºãv…ª¡¢¾Nçú+Š;!é n÷i†èY2?üñlë4îÌkZ ¸‘«à¦ªß¿1£~üð6¹±|µh.œ“w·°Û/t¨Ž¼¾ÆÍñ]ÇAÿ5-¶0.çn‚ï‘Cׯ÷J+ñtú6iWÅw“¾ßà¢þ²3[z¬Z8ajšþ…!Š¶Ë¿uguò¦¸l >\Ê#Yæd…ÃðŽ­÷§fGîèÅ Ü$ç³ Eïìä7ªÙÄ¿ó-Ò[•¸¬bËе_;ýì.45UX‰5s~miMS9R`çf©ØŠ`#ü Ȥ—×d«7¾îÝì@ûð@xÿ"ü> S߉t§4<³!Wm%yF èê¨Büù=òIÃÇÜ4 Á ‰!YŒjô&fXÎhê·N¶ÑÐæ.$?Þc;ÀOš3¢1#«:΃Ú‡(ÖÅdÌJ?BÐ ‹¯¥'‘, Ö‹¾ô©&@ºËS•}ð.üt"ð% ëUzxÆËB@³mwRöõ  Á¯ð‰n:z §*åu:|»Bk3r´šoÏ{t.Z« ¾­¤Aáã+ºÔ.jÔ/Þf}^ô^Y¨Õgì8ê“÷aCà @QdÂ]àŒ{p%«–}ÃEÈ?q 튵 _pÂE˜r5#üáÍ'A9þcK³‡Ê‡“£Ks•7{G}¦—òƒ‘#ʽ܂~zÕéqÚ“g™¯Vå69¯_¥û8!-zªúöv¿HÖ7D?W|† ÊÛ4¨%])¼‚ÜTGkå! ´Q“)¿î0>Vi]© É™ÝÌwL¯3G ,Ÿ7î-aL-€rU&{è'{;/4q5.𛓖Y–ꪼŒ‹Š&9`„hyP½Ÿãéj@-¦ýel™¦ æq Ë3G?/NAðMw–¾–Sšª–›.Z|5ŠþåøuGù>Zotw¨»)â’Àª@ìÐ>½WüîI7/56£õáü¥~½Ñëg›¯ãñ®@ÉÅv§%¡l ‘ª•§›ñ»DØÞí6䳞ŽzàÙr™÷¼Œ´½‚Ö-›ãDåT°‚Âtƒ†ë€^^ãg}'hõuì­X¥žª¦µ1üý§]/ ¸?Ã1Š>U¯ 4|Ü-µ?S8B»¢^ÇzÿXíkvOÇÛÕ#íÆmUŒôBe©­>h3}ƒ)âj†Á¥r%Ï3IZ¹c«1Åyèöy󼬂sµøa¶^‰¹æl”¾ï(ëjŸÖÅ«Ó /‚ÌÓŸH4u9݃t°«ËÌöS’ã£:ˆò%E‚ƹz–;Ùä¶û¶Ê_ÇÁ(™GLÀþ±uè7n§Ug>›1Ÿð˜B´hgJÁ)•¡0eî:b;­gÛ} (Kh•ù±`Vš“<8û¤Þ˜‡æ2wæáv;å!' ¬öU¢NìpŠ¡íå# ¯|ÿþ™Ä•§bñÉ©éá¨öѺ[c7‡ÔrªØAÚ8÷‹íŽ…Ó_Їt»!“®Z—”œþ‘÷^A?5*pé`Íš¡ªH¯å/Vëñ‹¿®Ú:ÉnÂsÎO ­I3!öW%%æÖ}\;9Û™©˜‡æ®¢Ô­3·ñ4©ÜQ¬cö\'S4{J•J´úÀóÞ]ëFð‚F/J»+#íáC–Ê» òE¨û¾[h]olÜÏ?Üžäç‡ÔE“oÝe‘p×Òûý†4C޵¸³ÒTyCòô…uV~ÎPyçl¯4쓈iÂ¥)¿6îx•ý!Ø1Ê °Úl8Lùp27F…YõÀᆴ¢¬ÕvØz’À5©þU•ðWèÉbžš†â@Y»ª»–WÍ̤ù¤?{áB¤EÐÝ!å[¯pÓÜý¢bm+ÎðX°H¥dšÜdò~U[Ä‹ì+,µù!ä]´îaÿk{rm¸ÂnÅ;:týï§Y”Œ›Nel.9ˆèа±Sóé°~y':_õºì²Ž6¿TÌø˜ß]­ Q_·ñ àë&PS™åƦÓ%å+ód$n}ê€õ–•æðàÝ<t‡G¢;UsA>BòscGu0¸Ãn,èã–•è8’Ï¥ÂÁ¸ì(}¨ÞpA¶_ÇÝÇ>_>Dö‚Q¤Ü«‚««Ùñuä/£ 5«‚%tâµßËhG—ùRê3Ø6aFÏøIð¨’xÒ‹jSÆ7…™Ë ÍŒveÛ¬Â;;Ã'AVR¬vpélÔmV zunÌ‘­ä×63ßthŸž;y~óÜA³ŽÖ( [ªÔ'’Î}ÈwÀÁá6 @†m¢ÞåÒ`])EE1ÿÖLë\ ¨`2ÖÚ¦&#ó4¢ó åÈ õ˽:e¾eg§Z§bm8:¢A²m90÷”~ý=3Ìg„%ÒÛ#©¨Ô¸‹¡¾ÚP=]X3Àgˆ#žH…W|Ûß+g5íß+_>ÉM_ØIm<²ß´ª· ˜©[¿:®ué—Ëëœ\Y[ÌpF¶J&ЦLT|­ðëJVËŠ"ý‹¨TuefáìÏ@"ï3£/M÷6Ÿù] ‰¯t‘Û†SºDÔ9ÈIX~¹r£ˆáð5½)ŠÄ¥_O6VQtôyÁž“Rç! "ÇÈ?Ì­ÎM¹–¡ÄS6¡As.SJŠ¥ÂÈmÊa©TöVï#ÿõPo+Ͻ;2&§•ãe€{y2íaqEò~6Ý^–yiÓd±z`¹¯CŸîDYé-Jz¶º=ý‰A¶\‚D6<Þ¹…hà#°E¯~¦º¡çÍ¢Q¯„°ÂSj™Ü­hL «‚™-)œÖ¼ˆý2Fkv³›$Ý×uehÂûÛy›”›‚Ró.SÍ–*]̦¼¦WQƒÍàh»0(€š8&‰!âY—û³#D¼#S9)IûE*õé’/Fȯ½²1 b:ïð«/Êvo “ÖÅ”Üô~ÓyÐÆµŽÓØù.¢Ë÷½'­jÒâ*¯âíÛèjÏícƒŠs%‡ :_¿mLSHáÁÖ£kö@Jv ôŽbÔÏe”’Â×EŠ›€D¢Oi›º¿jˆŸXTu‚'ÚCñÞò¬¿ ›*X-v ¤çŠëé<[Ï1C?¡%’<¼zJku•0D¡Õò5úäk¥I>˜9LHä]Œv7Gv\; ŠÊ-y%±= ›UL‡žÆé+*³¼0N»¯&R;~ÒS¬GϪáÉ·Y«ét:¹ÌÎK–?giêO¹½žúq#§óF8\Ið!?«Zí^km¶&1œïÌÚj×Õö.¶nù'úô³oïžxn«!T9TŒd¢ÇXüò8¥ìt­4¡|OO??æ•,bÕÇA–6øm§’~8xùƒm2œŽL,Õ¡alúê»4&éV¼Œ £ˆZèM*˜¶7î]0fPž|6hD9»ÎÏû»ôS]¾Ž‰$².» †÷)ªlq8OÒƒ¾Æ /B]Ý$Ð2é÷„÷]N Ýur:ò­–š_Ëô¼Öo¥1˜‚•ÊœŸ¹÷P¼˜ANšÒµãÕÛfÅÌ% fŠ9jiYšJo`ÏkÄÖŸé3yi§+¹®?T¶iÄçæ½d^â}kà%Êô’±JmˆíÇá°ô8ó5ÃÜîøŒÇ ®”¬à”%·"ç@ž‘ÇxÓ㈢‚³E”’TʆBƒ ½ý^²j€æõE;™ Ýr …¡g‹&ŸÚF%‚j§"Ù´àÍ_·3ÃîñmÜ+,30_ePyœ|Kt½ì²€åÉûƃ¾+c|Ž3°2ã:É/ž­Æg讓üôy¹‚e9û.Ê¿1kR%þB^Äþ âaŒ¼ÒŽãå+ÄÜt³’þÀi ‘K4û×@¿+RÃüÞ-÷ ‘ñ ©UYÖ–äÉ-)æ¤Ö/ª û™ÐW~Àn)ëFJ?ž™lÂü’4ÊÞ¹O¿#×IEZ»ti¼·,_9ëþ57Œ%5ŽÕg¤‡}²A~cyøpþ¥¨Eæ#Ö-ú¬ãr­ú Ø´aí‡(Øò—2û2û<ÝÚk.Qï!…‡€x MûI?_N‰ÂÉýîÏô`A•ß¿_Íz4šú¢}8æ¯dÞuH¢râÓvjSx†z®²¶üPnðëùYq+™n›é[ŒÎÍ dr×èIÜCJÙà„*¦®·¢ƒÐkë;è͆ê–W_™£ŒX²e‡dGÙ<¿Ãî Š‹ËODPÚ"’Ãi‡ð“ƒîä•–ÏJef&<»~£ÈP2øsï¬YÃó߃C± ù_{¦mµÏ17Ÿ= ²á Ñó[(˜¿¦»^þ1Œ*Vt}·85°ë7×z\!ŽAÂì“9›²ê=ý0‹]3ä!JM´üNÝ-çË9‹ñi¡Ôj¢q$?%ìu6Øý†áÛJlÞ´z¹4Ì ÚT2’" ÁÕg­ª„‹Ùôvãj¡;„u°ý¥šLëðI,AÁŽ¢‘Vg‰­3ùö›·g\ÀgÅìhÉØâd¼×ñjŠL-üÕ¸©•^cyN»æît“û=…±Ê8i/Ow$0ûmÏs#êN˜#¬ë±}sTg\í¹ ÑšÏ­ @‰9H­6(K½zqÌ…Ѽ…¤(–²æ¶ÓoKªÝêµÑpËP2ˆ ðÕöÏá*ï% <©zS!’PX¿[:°«j\zÎ ­\i¦;1«þäñwAG˜³M‹# zÅ¥#p€4ô•»åö<ûJ3Òü¥.]¢‡bDÑNWèÛ|.±Œª­TýÅóø¥g žgÏM˵5&tP8¸ ܃ “õLS/AAªü#—Ò,ãœT‡(lë$£8ϱO^2ì/T¾¨à­œ¢ÆšŽþ¶ˆ:ýAšÁv”­Â¦1‹"PÚ4b¼X?¦œ>ZªÇ¤:½‘‰³ò!RÆ]ƒüì4a†Hö{.n1ŠršÌ+T±ðæÔó Öyâá±3¥›+1¾”Y3_­16Ïsò7oÌ<Ñ#©@N¡«)Oƒ±®S¦7÷ƨ~е8Ô“Œò¼Â6{– ÓlÙÒ=)·C¢ì¿¬Mrvä÷eÅf(E&±”î « ú “‹5³n//¤@çYëZ¯n×o—‚†í;P¢ „?ÑaÒ•ʳS Î{ H²¦v5߈k~G¼‘’»¡~êëÅ6)'dà&¸Ì]ëåH!ÞLTZÇÏ“]-÷dÝ&° µÔÀ”2]ÊŸ;\¨ýFÝcsÕÁî«3Kq3¾HçÛÈ´¥úñER€Ya„<Óó‘ðŽÏgÈͺÜ,¬áb=Âÿ‰Å$N^Ã{Ñ»êvÿÊïïÄðÖ¸âcd¯ƪ1˜¥Ê¥bC/S¿Ÿõ‰¢pnô³ÄDn¡.‡4˜;&{=Û´Ÿ×ÊbJžeàw´iØÈf¡Æ77³$§ЧÚ7:‰‘¨â#qŸj1í ÉT\¹Ø4ƒ 𥗕ÁöYé²ÃA}–Ï©÷ž[5¼xBÔu¼±Ü>{SO2¨«ìÜÎÕtµê0Ö’èbÞíL7XYÚêÆàZ¢žô”“mÈç ª¦ß6Œ*´ú@“­ø!÷'YHÌ%BhAïîr^•©(óGÇÅUòáK™‚„|_­°r)çÚàq¢ßó–eê2õ¯ÁGv3oгE?– Ô³ô¶ 8ótÇ?›‡Ø=YE;(F2ëÓerV›Ä3²‰7ˆ8oŒ™d'êK/ËõV+[\2×l‹%’à.ÿ£/dC}è7«Thaq™/‹Aʼ¯Ȩ˨fŸòž,ŠÍÔ;YÎAzE#«‘L–[Qy¯$´å±C½)ÑæhÆÂXqGð»1œ«’ˆ]þ@KÚ¿êôÄ+=$l¬HÍG>fGO’ñè­žïv’..Û7reÏaB笻´ÇOi¹ºTÔŠÏß|óU7F ²œÓŽz•qÞb­laJ¸ø(}”1‹Ì³(ð‚¸K%•ñŒ;%J·eÉ()ÙÀŽÆ–§î}=ý–Ò‹>ZwªûipJú®ó'G2-‘:e´ªÅÖ%rÏj¹Á“™L© q]5Jˆ{Œ k±ÖÚ‚"Ž˜j¼ÕD-רQ† [É…õEïh‰vmïÑ'‹8“Áñ †–s¢_˜T©ìzͺ‰zžäÌÀÞ2@q”m†iå×½‰‹Pœ ”ª@Tƒ´OáP’ü‹æmû½Ï4„\­"¿ 2`?© QM¾ÉCõ¢ ßúR*ìß¿÷­^ç܄طµjòVy¶5¿À…ßzÃ6{‹öÐne©ÎI–Î$¾¨6²^ìÏ猾¶Zü ¤„áÒbWfÖ7‘­¿×ØRUÓ–¢gR¼º¥r,LÄ"è£1úkÖÃ"`ßú£ñmsCÁÑSt2}Šœ£ <üͤd$;ŸƒàVë¯ Â ~ìÁ¬:¬3Æé4í€@åÉî’P1„܇C¼¦- ;ùäXƒv]¿KK²c%>Ñz±Î{ÐùåïD†£ö›”¯ß¼Ô¡¾Cß°Å7Γ9}`ô Ðbûl²)¸¶,!¿Ë-D܈®Â`»SJ\² uWçñމjræýmÓðÙm8K©e ÍYNÑ¢ÃûlEõ€I-€]„-éhÔÍXjЯjûíñ_BgÓB×W2’ü¸ÚÝ‹I-.…¾ÏÏÍX-ÚŸn§êWSEŠ6rtaj·`ÿI’®{ï,g{¤n¹K_ïz˜!ƒÖ( Šóè:‹bb>f¢&—KùƃÅ77…„ˆö¾îÜÄÃÁ™Â@Äœµ&²Rd@¼ºçCÉ^¥ˆÇu KcJïknÏï•ùš‡Oâj줓åsÛŠô›ìñXµÜ–pÄm¢d[ gÈuï¡’( äwÉ…’Ÿ÷eyH .¢£çãf\4qhüƒUKœÕû³ûtW¦ODŸ‡ü°øõå®ožˆ•îIŠØ¦ŠCÌ)gŸW6^¥e§°—€tw­Ž[zp»Pk‹Å{³þF)z1ìÅÞ$é=úÖ¹äë¦Ù¼YWUºŸ©0@ÎúD4ê5$#Vw®¢’¤Î#œ8Ð`Þ/êÇÕÑ'â:·ÌÞš—ú‰KÉ{»pÛojIøg Ë[Ì L’hB9sl ZÆnÓ~©1îåŠ?Á­ÙáYÔG‰Ð¾0¥B…åáƒ(´2¯b/ví_˜jBraÇQ¶ƒxư’ÛY”Êf#²à­FÀ¤¥®@<| ÃB[ÀD“F¬AÆ–àŸBKž4}ÀPNGKàÆeËÆK(Mp€œ&[¿Úí)ÆdÄÇ£/“ŸUùúÜÞ§Ó+,åtl¶vj¥yȯٖËK—LiܱRÂBÚû†Œ7Ä0ˈÞÉUŪ(ŸV§½·ÝpðׯÓÉeV›ë™Ì’íiéU*z¡Q´Äù§Šþ¨¹qNî±ù)y""­\dûÏY,’ò§ -M(W“jô]F •¬%·âzJ–˜ð6ç•­<ñPSyŒê±Í †ŸX4»O÷⺽ã02f«K­÷êWšäA_è>,Ö’Ií¦bØ=c65*”êµEBþ ®we endstream endobj 568 0 obj << /Length1 1144 /Length2 7964 /Length3 0 /Length 8726 /Filter /FlateDecode >> stream xÚuseX\ɺ5îÁ]www î´hhh»„àBÐ`ÁÝÝ%!¸ÁÝ-8—™¹çÌwæÜïÙ?vÕZo­Wj#­¶§,jR‚ºÀ8y¹xÄš`gw=kuN]½à´Æ`dÔà  ÿ¢Ÿ y75 uQ°†=óú k7€—GŒGDL÷yÍÃÿ¯@¨›@Û ì õhƒ` 7Øå™R€Úz8ƒ\`z®®0¨ r‡z¸Ù‚ÜÅvÏ•ýwV€<ÔÕÇ lï°è±²³süðŠŠŠl|þÅ@î`{Óóºþ‘éYBär{.øG¬¶µ" û£]‹ æ*ÆÍíjg zƸÜí¸\@0nÖçB]€òPç?Ü1þ˜™Ø dûÜ”÷?çæäõrñû/Øìü³% ‡+· øµHUჟ!Œ¿1{ ÈÃÇ#Êý€¼m¸ÿH©ïã ú“äý¶vø¹B]vÖwPØôüÃðs·ö`n ¿ÿ—øÏ//¶…l@öÏ×ð·ú3 ²ûk¯a s{Ìx¸xxx<|ÿ^½z¾P Ôâów¸¦µ3À­fª¯¨­ÌþÏÞÿ%'}–ääpò‰>;åYQTÿŸŠÚÖàÿ­ˆçïê.vP€è_…?Oì_Å{‚ÜÜŸ]`ùÓ°¬€ÿTÒ„ÂÀ¶ Ëß&1çäyöÇó÷ÿ4Ïðÿ§…þ™CÉù³–¿d)h8HU™!j ÂG$P(Æ {9‰Êur¡â¼ÁGP‰"?ગÐÃ:Ac™<åé'OŒ%MÍÙ•÷ù¢rL[~eÂ(%?†¯% ¢º6ÝÞy­…BA]ž_‰®µ3Ï*J|z¤¥ ÔC™êRàq }›Šù²»iê†ù¥)fÓÁo‚ÊN|«¹ù¹‚A³Ê°º “Ra±®±n¾[‡N5™.øŽÂè\æísîQÌÇ•!¶Y,Ò÷‰TKXؤ¤!‚êÎâßmÑ(2æ> tN± a‰,pʺXíÛT{ÑE/û–fçÒ“z¨£*¯¬-^·Œò|ë\€ÚÛ¿Š $ìh¸É0œw&Yš~5²å)ß×¥¶º> WkN §C­~ê) mÚóWÕ³ìÍOR~×&à(*[ qÜ`EêªJÈJB£Ù˦ڞÐ;¶8³`BæÐ.¿ðûF¾~_)$ U/èXfÉ{RQþ¦é2ßP¡ŽúÑ#ÇI£CíÓ ±ÍöàÝÖ»9îa©»zÓ‡áreFÉàÑ_ÂtthîV&a6t£[Îd§›£\F““¤~êày£‹“¡f6FÅ .æª(ïέÅ\ßEé-G6éÏ-Ù‚sc#±>1kÂT¿'Ø~¬’ê ‚”%3¾‹À ¦ø÷Ô`aÁoËN¢E­EI]lóÉzôÈ™ˆÉÙ WÏëp´ÑퟑÌò6§´H‹`¡š&yqµ‘òfÕ·Ö.#úø6xùŠ%9êCZ›%·c¸²ß6¦n‡ïzÞä ~ヴäán.Óg(µµíØæ‡êÄ9õ\‰Ý™‡Y’ëÃÃô§búùÑ–ZþŽkºõßH&bßû+¥Ü»鎈-‹_Qù×EdÁ-‚ÆÉ·ºõ~¾s_Sq[ʺiK’/ãýöS¢’VÇ*¢xm7i6#‰ŽùK¹ÛÞkÿ”ìÉ“šÅ2FÊèäòi”ö*T>ÞâBߟôMeT}Tß­ß­0|3¥(ráÅ•4ï3TkA¶ÇY]È¢ j@¿³Ï¿¤—„ÌÂ$ÚJ³Mb8«| !BEÍ–Ÿ¡’–0ôˆRü«âFÃK"CvþS}œæâæ¥<ÀH˜€ÞEC”ßtÖNŠz»-Q ‡‡'ÂKWG®ðyŠSŠDVŒ'ÈG)~œïòxܧzãÉ“ ¾âXƒ©à`ÿ²n-#øv•ó.+ü°–:â+Dú®C­¸'AåÕl«&–Å•‹¥œî¦9 Ûö*øVvÛHŽ|–¦J­é}!6à ãyÉ/§yOéJKJÜíõÐdZl£V=ÈäkR•)&ÆïÍæv‘Ò5ÚEVÆŸÁ†Ð!ªDl“B›Q`¹'V4H9l;ù‹¨¾T¡²£©Ïµ¾²¦ãÍ@¶º¦Y…‚\ð “vþ‹÷²IR‹¼f¡¢- ÒŸÆ̾–0‰ÏãXió‘H¡#ëŽ0qé™c|¹a2É[¹ìRM«ÌC^‰£6êøjÇÆ.“X] ɶTuH‘Pº—²ëw7’òÓ{Åöàq¾c7Ým}š¾{dNO}îÒGmá°ÁÖ”YÑ5³Ø"Œîà÷,s ±pØÒïöeÇÀ,.`¼=íÕ£jÕ ÃÉ×_oàk‚vº·Ê\4º8Hq)K>sé9(LR4",ÌðV’ÓÛûŸ8¹ð_5œçåx¤S™_úCÖ·‡ÞðÇ.}dæEŽ MyÂJöyy_zíä .Ýá…QȨÃejP-Œ¢•!xv¾Ë[|š‡ì>Ž–°••7ZÐZNý¦tûx£ý‰^?ýÐ)šî!À¨‰2¥€¹µ€\˜ Û%"Zo‰4‘gMj ÷ß­¿©#”Zë'=¶n*Œ2ipôzõ,Læ8Æbnì É@4ÈTe»sG|ç+}& Èûªÿü„Kü‚%~†PûT¦%‡øJMLeRÈᤥޝ ´s‹uÂú@õÁ‰ÝOYq^ä`¸]ôж#u«[Tƒ©/Wϲh{«x¹ãUf¥¨cÁL³†½zG+ûƒX µq¯Ä.Å^5Ÿâ)‹¨Ó¸“çùýΰg|°%<×ûÚ(f~j`̯‘«·ÖgÉ‚ƒrfÀ¤0YgaRXÚì€6úÕÉeÚw æÕ»Z€oê ïzÞZI?¤äª¼W„Û¡P™B¾­ÉÇ2º˜ÊëÛ±˜tÓV/ÌçLyÉ•¡È¯êC, 5©ï8e0&O+Ý>ÌŸôlé˜Fc´Â3Ì0³ »t°Ï‚µ¨š‡/‰ –GPª"k8QL1)ì¡ùà\ÆG¶Y÷Ã$YcÛî°ƒ^C¯ÿ„úfÂ2ò{¯7‘Ö£'+ÞÉÅë¬äº|¼ýU-ñÁT†³egŽç¶°&÷“™|kx‡ÉÝ ¦8ç¤ËØçnÉM _R°ÿ¹šÅÑú£ÐO•øÜþÜœ!h˜†5 è%Ño©â`u÷Ô˜:7í£¡\œ0ë ƒý5óiñ~c>öärè|ôò ï7š|¿úéEL2¶E_(Å€ëknñ±E=ú‹…™Ðø¹l¯º›E”ñ£Ÿ!Aîüz±9œM/ߺù¶)û ÿŒø/¦<ꣷR9þ›Î`›_ö8ÄbÜ=n¥ë~C®–cëµ¤Š‡:îãW~ACœ v¢É³°ÙEö5Þòw¦„è1è韣âõ?¯Bˆ<FšÓàXH»šl`žö8‡…×Qâ6Æ/*ÑO”‡3ð’´‹Í€Bé–(=¸¿•ߤSïÏÙÞ”:?±K~® g›]šÞ$G6žë(Æg®mq¶!¥”}¿3NÞ«ºóé[E“)’žÄœZÉ'F7ú8Ú¶8˜‡{IgtOß<ôÑ㣻úÞl½PBuàÝq0PQ¿{Ms…x&ÜuaïŽÐQmJQSNc_¯Z“¦F}ID@è§€°€ìa ùƒ¢‰“h¹ë~7î„£Iºyàc–3e…*"{» œ-a+Ž¥—(*ªW2çØ°åÀ¸vÁÜïÞWÅË-PŒ[ÚLÕɲF¾î°êäO_@u†E6*ѯ•ßJœR§1£Õµà^77-à,ãK‘¤îTà/G·‹ø”}:œdœáà±àÒ÷þ¨¸|‚}mþòˆK Ï3øµyl°|}ß=¦o°‡ògêKËR Ç›˜øÚš+Ö ‰•Õ ©&ãé!‚û% u°=iÀcˆzë~˜Qä¨ÇÇl©Ì!òc-û¯þ6(OÅðb`ÄB¤;@ݟ׬ýëBà)A=UÙ;»‚OvDg¡:¢Ò[Ò„áöûx&΂~BQX8!OUqöáIÁ¨äÜe» Á“•Öñ¡ ÛÞÑòxYç’ù+£q—q*C4U˜-Ã*3hò?½h:9‚©h^_ ÁÚkü}~0i¤cƒ´Qtõ§×IÃY;Û…ÛRÕ‹‹ ” …ar1HOð=j¦]Ûñ˜õròîYr•— “jìàŽÈù6Ñ Þ·µ72ÉdžypÇ#”ß[üOÊî,µ[­×JñˆÄbËoU[ŒïË5FNÓK)ñ,-`ìç9YLß|áKój×5/ÆýøýÖ¢áÃ=oŠvh&¿@©¦„K§åËçl£„tŠuD:)7{QeCúºÒ'=!FSÔô÷óZ œÎ”ßïÇK0Y°Düyx ÍlžFÊì‚› î×uÖlß"â$&ôn޾ü¨T!_è¸ÃNª£×íª(œ‚”â®ÒuTèÐëì¶>s6Ð9ÍñËqä.‹t4‰'l3¸pPKö¾‘ÖH˜®'ýÏÀ¶Vð£ù×—:B&ó¨=ÁB¡þ§‹Œ: Ò˜{þÐzÕ–3âí c•âµcÃeeUœ"Î@§Œô"³²¸#_Há©9{3}FÐ$*Ã[Í 2zÊ7`nT†‰òÜÕléÝN”¿t±d¸Þ*7Ži ?X‚xÜ&¾ÌÚïâ·‡eÒÖMލ·ÅV(QÌ€+µ¦Çë¾¾xÂP“æÔ‰ª?ùqžÑ\Œ(bÊÍ 9¦³Ö—ë„'Ù¬#»Ñ=wúe‹¯n—õ6êË©90ßÓ™~e15oA.M†ÌÕЯòpî%á;ÌʹlZNÅB¶®â:‚kAù¤?ê·æÎ†Wí,¥Åöc'’¸5Ýô±´îÁ O“ý$#S6'Ä@8ôþ§]/”Ap~½9%ÇȧôÓÉ‘‡ã°Á7†·âo1†ïAMöàþRcIÊù•ÄyF· f›û”ÚD¦† o««õ·Iú†l†Í7a‡lÈõïB¥xš^Ô6,Œéʲ·ù'¶aHêøkd¬Æ¢Û`“÷xÕ…É9RÉîM²\´®êÒc²õ”%K~©¡À}ç"Üdžˆvû͹ï4JÔ—µ¿D,f_§¶ÚS¢M¥§Ï`}òÜöÑ{èÆYЖ´L†5ïí3D…Ua˜Cp #Øå^«Ç4žJ½Eë`-Î5úÊ8ì_v§ÌÏûP¿ƒån»ã gR<6¯í¢zGÙ¹ˆŒìθ’tHLfk¯~þÈËòi‹ ÃUÞ¹Ö½¼¬³]3~w/›j^1³WÎßOùfhxӧœ¦¶°“ -ö›à’ÓBº°­‘dИv|·8X'NlŸ9Ïy@î!”Ç_‚Í$rkïl´>µ3ã0¾í-k‹ÓŸ6Q—aB¿i¥…ÁÅ8ÃPšà!ÊDîx&˜©ãnZ^ÓŒÞJo+€­§CÍ2·ô4ð Èú«Tä–L|ivÎ*ÑñÎÉÂÁÅïÔoë-O¨Ö¤ÌÈÕ¬‡°¢a(Þˆ§O¯Í^oh”L|(u9ê;¡’+ÁC(WÛzip3rd†jUâ:° %„¼· ?—µYã53Û²-鉼WFB­Í÷`ëìTFÊη+¯¾ÄÑJ f•C(7‚õ~øB=.~ík¤Èˆ)ÍË,mžly¬4Ëü"•d)©à;PN#Jj%ï=ý$»çˆ94º×ÄrÏòŠP×=ÿÚV1g×­í»Ïò ϺÆC…´kÌ —VkE(Éå#å3Øñ’7ŠÒX©—¹ÈL< Å?îî…cvÆ *¶»hع©_‡=S… v Ì-‹ÉÔ$‰·ß.&Ì[Ñ`\B™ÓîØÐujMo»ÃË´k‘?¦²&µÁ@:‹uá]›ájÀ.ø¸®2]×"¼ûdO:6x£.ð+ŸtnG 9}IõÓï Rp×÷ òf‰‘9š{*¥¥ûíêáF1ï8ao=0ïgG¼ýyð fõËÂb„rõ™ 2JïFaº·ÓAŽ/”ÕšbÔ¬%àbWÄ*Š—RRÍ+„B°5Õ“F"¯Ì 9lW¡ˆFÿìCÚÞiü+‚r¤,ª.>¦-ÄDœ¼l]Š mïì‰ÿ…‹iÍ1é®”)w¤ËK ²AÖãíT\üše}¹tQæ7`ÖÍŸ ¼=Áf”ìrº/WÜ¡ˆ÷^ºšS¬B‰•Žô”Ë«Ÿ•5•L’"ØÄˆ­ñø‰“¶w‰RÜXT Ì?×dk"‘NU$ûI±Yø\ò‰ŸOÄ4x3äÝ~ÈpàŸe†NgoŽŽ«_/§q,…ùÎôq„EUUö»‹z¤ó´®èFƒoÃFÈû GÅ|l¼ÝÓqÔŽ}¨5%þÝbÜ P*â;ˆŒX€”n%.,TÈŒ¬dX÷𤟥ÐÇ0N…4msxª ûùеœëó ”êRݨŒ·«ݳÊ?õº¿®"í™Æƒ n!=Bö |CzSEÑDoÖž†åÑ0"%›d¼ú-®³YSÀ/´°s’3ú#®óO€Vå 89ËÍ›>J'JÉL%56JRd±í¨cÐl“tVQ c!i`WbŸ+@íÍS£¶lU뤎ˆ¦æ‡Ñò!4I}üQ¹{Öy²T|K~ž®á¾ŽÞ"c}–—1åzDÛ6& ´ $V^¼¹†°†·f¸òṳ̀™ &Þ´Ãéå2mîú&Â}ŽÓ·i ­Yîð´f¡ÔcéFö ÞÂêýÃ/È û3EzCˆ fVíØßP¢ˆÜàÏ‹’åpkß–ϦûµÅi2صDÙÝâsðK‹»ñò*™l7Q5:|ÅŠn»€_3Û˜oΪûÃ4¼Œ'9rä‹Uù´½ÆBô³.å^EàFû¯ïÂYõ5Íê„-ã´¼‚_-Èç¹Z¡êdwmtXHË,…¿§tmÑKe´ÉÂÏ›²,Aº!Ä"xkÒ~–*BËÙ©dµº‰‡Ö]NëIH5ÓPݧKkÎXù|-w›iæŠ&­qe;(ÄÌ?÷¨®K<¸#N¡sæ{6ЬKC¥Ô|xêåä4H:€RÈ03wnwtWÎåÜÌËuá-R¬({U†úø RÈXþ˜¤›ë@–ýº@„)g¹J÷ZŸ« û{ˆ²k ÅyMFÛd¢õ†¶:TTä[áÇûõùáƒ)n®òbf½jú%ÿoêÑ endstream endobj 570 0 obj << /Length 696 /Filter /FlateDecode >> stream xÚmTMoâ0½çWx•ÚÅ$ !Ù ‘8l[•jµWHL7IP‡þûõ¬V=Mžß̼ñ s÷ëu;ÑU··õÈÙ›=w—¾´“ì÷îÝÝå]yil;<[[Ùj<=?±×¾+·v`÷Ù&ß´õðàÈ›¶<^*;²~&ûQ·‚>ìþÝþ”MS >Ù_êãP·ò{=éÇsæ@öd”ôÇöçºkŸ˜xäœ;`ÝVY×`Œs4½JaÓQÜ¡n«þª‡í¡.’Uu9\ßèY6î>¼ý<¶Ù´‡.Z.ÙôÍž‡þ“4>DÓ—¾²}Ý~°û¯ÒÜÑör:-d0­V¬²WÑÍÿ¼k,›þ8ãóþy²LÒ»ðºÊ®²çÓ®´ý®ý°Ñ’ó[Å*²mõíLrŸ²?ŒÜÔqù¥ã• â5F8@ šˆ=@Šð)&°  È8Ô¹€ÂÅRx u€Dº\j2H—†ª¡ÐVÁ¹0CzL]ø Âb°ct‘I ©g$`htÑ‹0œÆ\F„áŒ0ä†sê‡á jd< —Iê6œ»õñzgóñºË»þê W ¤qÈ’£+—Ÿ#ö•ñÌÇkÄÞ .‰bªsré…¤šáæÄç†bïmŽXú¾„Kß7ǵHß7Géû„û¾nb§>&jÊØµäuœ¯¼ú•ñ1ÜV™÷•âÜãâµÇ‰Ou$ÕŸqWèS/%1{\øxB!€§ÔK(hH©—TЖ枃»J©Ïϯv×ÜëÁ=küÒ2ø¥UðKÏ‚_:~é$ø¥Óà—ÖÁ/¿Œ ~™Eð+7¿èË¢/ ÿlì¡ÛÒ(/}ïö -+ZXukoûìÔE?Z„ãæÅÛKýqíƒÄ endstream endobj 452 0 obj << /Type /ObjStm /N 100 /First 907 /Length 4480 /Filter /FlateDecode >> stream xÚí\msÛ6¶þî_™;s·®‰wÜI÷Nb'ŽS'q'ÍKý–h›$*å$ÝÙÿ~ŸPe[Žì$wÛÛLBÀsžó‚C²1ÌXäq8§Ì‰³cVyœ=K%]g,Í2fRÁœV8Kæp˜T1—œ óJo˜Ô2o4è%“"͘×LJ©˜w8Ó䯣fʘÔÚ2ãní1§NƒÆY&}ŠY\ÊdfÒ ãSBã>Σb©"™Rœ§hÑ Ä¸•2š*)S–º<º<òS±› ¦…AK&™–Zm˜L¡®M¦Q!Qph¥¨Å¢L–¢‚9Læ˜Ö’Z<*Ú3+0¡…ðV`/©ódÆnX¹„¢Ì%eŠ d“$ G‹tàÂê&ñ 4aÖN£Bâ+Š ТH"-11͉ÑV`€Ò4 ºƒ´Ì¦ÔL [‰#F d©¢Q`2µP…U†¥¤<« D0$€w‚ÐðjBÅ¡‚»K` vH QV ‚.E€APÀÀ§!ŠUN “ 9oÁ³"Sð’Y-È@Ð¥%*Ї…9yËBw™€ò,T–ÉŒ*–e)ÌÒ4)HïVÄ!X1‰”àiÃjž@`R‘:-ŒP*²$k "»²˜I‚cpaÈøH8K† æAg1B§‚Ú0Š‚ p ŸÀ=à8¾† ÂèpGi=‰žbD˜'OI c’©Ïô‚Q´/ÜßÉ ªenãÎ ~øq\0¾ŸŸ|«5Ũ™À"|ô`ƒ“jZ÷ŠIð£Ðô¸è—ù½ê{C4©$TG|§®¦cvçãÏ?¬óÑdœ×Ũ÷‘ñ]ÖÔSÜe =ÛÅyÙ+vîýóŸ¸-(ÜN‡¹ÑD,í×UÚ+jöݸrX¼Ü”‰‰²ßƒÃºÈ› =hž]–Õh;o öÝö?”PF •áœi³)Ìß„øèWýO‘€ãñ¸è3þ L€Åþáý—Ƀé`pœFÄËáY9aøyú;{QÔܚ骳™ò›*Ig̲_‰G¶Wž JCðã2ýú={;Λ³I‘³óv†4Ñ „k¥¿^¦ë„!)Êf€ž¶qÎÊÞ„=6ãió}Õf“È.œóÛG{xKØàϦÇM¸¤F¹ÁŸäCêSü^>)ˆ†ñ‡Åà¼hÊ^¾ÁïzU¿2 Ê}®1¥¾rÊÍ{Õ ÿ©yïhvž5âÜe"I3\ÙÙË?1aô¾»µEìöÁQJu´ÜF‰æ¼ó_ÊÑÝѤ\to—''y¼ë |€ËÑt‚øÃßM«¦' báý :LJ~ZççÏ{ӦིîM‡'ƒâoÊA¿àüWW#~\ Á¼×ƒkñ~‰[LÊ OFUÓ/Nx{ó|x0ÈçgÓÑi^O‡ƒ|Úðê´o!-Í'îG3H¶Ù–ïÆ_¾zÍ2cG°"AxÁ[V“ê@ªA*]¶­²&Ѧ BAæEE$aЃ¤Û ¬9HÚ‹¸¢Ïz(¦ÆQøyùôø·¢çÛb)3سNøKïYÑ@5|û ¶øÐ°£eã¸6Ýå°™þ©Â¦V}"l.“ü Â&–×#ÿ8aÓù¯6óvC—Ëþj¡+]/tÝ0Æ\Iq§ŸI¼¹Iìý¹"‰þt$ѶH¢¯æI²¯I®š÷b– u»,Œ6×çg×MÌÒ·ì/¿ùõŸÜ¯m\r¾¸_wæíx‡!x½öÃÍi|`‘™Lœ°keK)×?—8¬ý"RâÊãJ~Nna¥º˜[Ð;¿ÿ£ÜÐÑ;ÇÏÈÃ.¤^·A@ÉËd_~w“$ 7ªÄ?½P giÚ³mÏi{ŽY$½K×í8é/ˆæ‡kVu¿¨ÿâˆ?ä»|ëMâXøDBôÞHáI/d•L2¤–פ˜TëÄ }4(|¯½åwïÜ 7áw{Cù3þü`—ŽïΚfüÎû’~U&U}Ê%ñ…\èTŠLy/¼W™“ú{p{k†µÄ"€ˆ4c¨&:³\†gÛgäóÚ‰Dͬ§³½1ÃÇeU(ÏǽhʼÈëÁG®„t\(.Sˆ’ ¯’üxÒÔy¯ù,Tê¡%½]O´¡o/2ñ{VC TÝL€ $8‘BDlpÝ;KzÕç5–#,ÜnJmS~®¾ ä2Å9c Ћøå6â?×F0¿ „Ï’’/´ö>ñôÅÊvg™ÁÌ©sŸmØÚóÑq“h„¸_…-º%+æªÎ÷ïß'£¼™ÖEÐ(øo”£|ÀÏójÌG½iM¡ÃÎæã“³f8ø×ý{2ÅÝyýq³Tõ0$^_%—â!Æ·‡ÙÔœRßPŠ.kdB_Š·&ô¥ifKJÚD»›£D"ާÇâO W’Qy–œVç3Ï…|à*9é–ÿCMýu†`gõ¿þûßMU ~ÃÈâw4Dbºý_$@Íl‚ò.KßL­OR¥7Òý¡¥¥¾Å:sÓ óMJØ~;¾öq´ñÆj,é,–^ê$k˰!aÕ†Á3R‡ÖXsˆ ˆd$a­ÈÚ’(\hmûu¬Sߺ‡êÌá.•Æ©¤)×R©‰¬[èµ™K¢×ٶ׉Ïí ™Ihgž/™›&ˆÂ4Ú¹bÝXâß"2°y&•n>ofLb–ù£Ô‘¶ÇŠ–‹0¥UŽö/ºD ­*p¤ÂxfŒ-.[Œ\PÇRÙ´'- ']Ç;„zÚc=”°·sÊÏbqe+F¦]¸ö^šB„À§AÁ°"J')™_PO(é q/ O»Q,èŒ&˜M–R *$*6ÌâÂŒ}2`¢í>‘Ú:·Ë8™Ä6PA曑Se‰MK½Àiæ4ôR‹W>€ÐREÔÖ$ª#ü¢èšèMLûjó^8N Ñ‚kEp4¦4d¢Ê“ôdºFƒOç‰s¯ l£32KÆàMFÈóÊð€ç¦Ô…¹(“¡Çoês6ÐAK„f0cOÙhØ„ˆ WièM—>– TL4>ŒNT–ЪfT" M&mÜã&™II¯Ðí_ód¢aÃüÈŠ¾v8êhl–Oi?,J©P§CÄÖðщvß… ªéþô¾áêÔÄ+ÐС­ óÒá}†ðá–î¡i{îhÛ¹é˜ùÔ1§ÇóÃÒ6-iÃÍèp´³L©x Aœóá: „PÔ–GãZºù¸¶ÚÏMí3&è Ï‰3 猒: ÏëÄÑ‘Špö­ºGPAP¡ŸÏåÚ16Ä-гˆ¶!®Æºµbí£JŸ‡ q>ÖéÑ$l« ëJ§ä.Ф!FÇ5£í íZ‹×à mð¤–,` iËÎl±¾4[ëôD6¿ˆe–Bßb gKÂÄÞ6Ì‘÷E¿j—*uL!ŽÐªÂhåcbA ÇnGΩc©FF â}KÿC á,òé½ûRÖ—…o9ã·œ±“3BÛ¦¥£³À·\ö˜‡2ÒDlc‰dm†p·ì ÜŹ[Î0ï ßÁ?¢Ý-#7­³$¦E»-cšr ó¶…ä× „µê Ü-ÉK"Â]œ»e ‰仸G´—J扞·ÊÊW”>ê4pÜÕD·¼œü´>ëjdU™®¢.éâ’^b„‘RƵ¦þŠ22ÑUÄ岫–nÙ1üËá$<ÇG¢ÿl‚`W$vÁÎÊÎlÿ?„Y/­sÿ£Ãà‘ÂÒn‘ Ï’ên2LùiFq¾Í¯Í…mûÐ~Û\xÆ÷œNÎ":g¢¡z7‡žÑ‡‡…¶ov„‡…θÀ Û¶‹I¯.ÇMUÇWqóÃþÞë{/~ØzüxW t òÓ 3‘â^øÄ»©Û ¿-ÆÓSìÑ¿;¡W¸´znð­|ü°(OÏZL68݆ú6%uî6ù ìÝ ´ áYS _® þ²e´Ä$gyM¯¿ã÷ø6Ì_ñïUÃaÎû¼à§ü4§zÉG¼âc>.ê²êóqÉk>á“A>9ãÓï#ÓJÜÊuõ«AØÞ¾»wø(€à®Æ@¶H'¿^®„à7þnYsa¶v_=Ù?„0«jÄL¡"ûiÄL–4[)Kñnšx5*xØ @{Zb­&j>L'˲¦7‘õÉÎóGÏöHÖzSn¦8¥¾ˆ¨nµ¨$äïE]-Ëão"ÏþÖîþÁ>äyöj•òTÆ6³”$’äîv!Ä»)±R¦¼®«÷QU“rXòzIºö'PëJ·÷ôÁνîuþ,MW£jó 棫%µPFx)Ë”ïÈédWN§²ŽœJ©šS¢ãqÖ¸®˜wv¶xîó|'|Iû‰ï! =áOù>ÿ™ðgü?ç/ø/ü%‚SÎóI¯,ãÆ«|Ò MÞò¼áÇü¸Î{o‹&z[øQ@T£yXëWÀ‰è8j償”ç?©¦5¢Þ?û8>+F|¿ñ·|Ài" ŽJÛh:<¦]|§ƒ‹­p²¢[Áfa>ÇßÅ=fýãAŒ¡Å9n3)?´Ñ´áÍY]¼y_ñ)ŸÒGºI¯ª ~Îßóü#ÿý²©ÛÅÜG÷·^ì.ÃÓãAùnZ\mN¶öÉëí,xµ=lJy‹ { KØŸÛ@¾PøñÒ*ÕÕcñ¡7ȇŸRçm4I\ÖØ­tu£%åÕ‹—[Ï_þ°÷˜4%ÅæAq:…í®X]–•E"–Ðï‹Íê K—ë]ß PÆ\ï¹>ữIƒó]‘y»§rh'ù¨ßzp1÷ß""¿¶[Ïí`Ô'Gš»5ý/yøO1¸©QÄ]ŸÕœñõý\½˜„¯ùÁç#Q´¡a¹¿Þÿ¯3¤­×;?íìüü°5$ÿ ;B*°©¥¡_øŠ v´´Ð‰… ‰äÝJš9ó0oΖ%»ÑÊýhëùÃç» ¡ÍÃ׆3úÙ:sǤä&úÖn²)ÕLNiº‚Zßt;øÄ¬¶Nauds!­^Ä–úþ} ŒôF ýãGOîßßZc ©hQ ?\ð9(Ìu-uºƒ§ÙÛ°\­‚ØM0öKžÞhU{òhïñýW ɯ7t)iÓÅgDÊŽ ølÍX¹ÛFÉEŒŒ–A! aj)2ÍâÒlqzךÉ,<„àp ¹­1/~}ðüîOÊáñtôö®±é4G{S}ØÌ:É­÷ÝäPu“éVé¦Z-ö}%X³È¿ˆù+—û¥¸¾ âªuüý•Þ(ÚþôúðþþNR ¸« 5ÀÇ[‚ù•ÕHå2¤rR½*æÚ¢J/#º¼d¶ë…1.c;¸Þyî4[ø®x¾¨]ùªßo]ý£ ~˜Ö³tožRw–î6Ío×d<„|„¥†V.åNx„¼>yb™ìfB,ÓKÉ즓²ÌuCJPY7É©:¤£&UÚy¼:ZKJ¶ S.äZe°”“’iÛÑÓnž-R¾NVt•nF¿¼B¹KåL+zž©±ÔÞ*µ½V9·RÇ"†bl'%fJ™6}¦?ú³È©éþ´ù*ªé"g]O•F-ådGëükñó­‹ï3—‚cø4áW&ÊzÒP@b¿öòÙ-¿”ýælþN =¬ž ª~6#µ¡áz*Ü endstream endobj 571 0 obj << /Length 695 /Filter /FlateDecode >> stream xÚmTMoâ0½çWx•ÚÅ$ !Ù ‘8l[•jµWHL7IP‡þûõ¬V=Mžß̼ñ s÷ëu;ÑU··õÈÙ›=w—¾´“ì÷îÝÝå]yil;<[[Ùj<=?±×¾+·v`÷Ù&ß´õðàÈ›¶<^*;²~&ûQ·‚>ìþÝþ”MS§“ý¥>u;áà¾×ÃÑq~:fc_0F)l®»ö‰‰GιÖm•u f8GÓ«6•ê¶ê¯bØÒ"!YU—Ãõžeã.ÉÛÏó`›M{è¢å’MßÜáyè?IáC4}é+Û×í»ÿ¢Ìl/§ÓÑBãÑjÅ*{pÝìϻƲéOÞ(ïŸ'Ë$½ ¯ªì*{>íJÛïÚ-9_±eQ¬"ÛVßÎ$÷)ûÃÈM—ÏñP:^9À ^`„ª‰Ø ¤Ÿbr š€Œ@ ‘{@(\,…RH¤Ë¡&€ti  mœ+3¤ÇÔ…Ï ,;F™$Б€‘zF†F½ÃiÌeDÎ(ó0œAº1a8§ÎyΠFÆÃp™ nù[¯w6¯»ü·ë¯Îpµ@‡ )9ºréñ9b_iaÏ|¼Fì-ÐÐà’(¦:×ù(—nQHªY^`nA|n(öÞæˆ¥ïK¸ô}s\‹ô}sÔ‘¾oA¸ïë&vqêcâ ¦Œ YK^ÇøÊ›!¡_Ãm•y_)Î=^ ^{œøTGRý÷w…¾1õR³Ç…'ÄxJ½„‚†”zImiî9¸«”êðøüj'pͽܳÁ/-ƒ_Z¿ô,ø¥ãà—N‚_: ~iüÒyðËÈà—Y¿2qó‹¾,ú’ðÏÆºíŒòÒ÷nЪ¢5Q·ö¶ÍNÝ Yô£58.]¼½Ñ»á‚ò endstream endobj 573 0 obj << /Length 739 /Filter /FlateDecode >> stream xÚmUMoâ0¼çWx•ÚÅvHU„dçCâ°mUªÕ^!1ÝH ý÷ëñ#xÙö?ŸgìÁÜýx]OTÝmÍ$|äìÍœºs_™Iöss îîò®:L;<S›zœ==±×¾«Öf`÷Ù*_µÍð`É«¶ÚŸk3²¾'ióÑ´ž‚}Øý»ù=©½à“í¹ÙM;áà¾7ÃÞr¾›f¶ÆnjÌ-ùeúSÓµOLg~¼À8÷ã ãâþÈ)okà çA„8 ö$`I\èÎ×3`çAfŽã<ÈZ]ƒÂ!‹„ê xNkÇyã¹ãÐð"œ7Á¿ _¥ã“§Ìq âH`òáö•‚nú¥¤kÌÂðRONH=CpB:# =Ñ%8“ˆ88QA~¡!*ÉzÆœøÐäT?!~Ž> étw©8éÄy*ás£¤Ï }nÔÌçFE>7*ö¹Q‰ÏR>7в¢ G]¼;~îó¤ŠÛ<©ò6OšßæI‹¯yÒòkžtèó¤g>O:òyұϓN|žôÜçI/|ž´òyÒÚçIg>O:÷yÒ…Ï“.}ž2îó” Ÿ§Lú> stream xÚmUMoâ0¼çWx•ÚÅvH U„dçCâ°ÛªT«½Bbº‘ ‰B8ô߯ß{ .Û@ãçñóŒ=˜»/Û™®Ú½…œ½Ús{éK;Kîºàî.kËËÉ6Ã/k+[M³ç'öÒ·åÖì>Ýd›¦yÓ”ÇKe'Ö÷$cßëÆS`vÿfÿÌÊS¯fûK}êfÆúVGGùf–¹û\b¸à·íÏuÛ<1ñÈ9w…¼©ÒöÎÁ|Á擬CÝTý¨„íAW $«êrGø]žÜIÀâíÇy°§Mshƒ$aóW7yúÔ÷ÌŸûÊöuóÎî? sÛK×-ˆ`ãθtJ!±'™ˆcøÀ8õãŒ3?NaœâOœâ¶<Dg!Àƒ;IXô ôÀÍ0z)rЃÌ@« kÐpÈBQ]^ÒZä 7ž!‡î /½‰ü òU Ÿ<¥Èɉ#“ÜW ºmÐ/%]cXß!õÔÀ ©gœÎÈ€žhŒœIDœ8QN~ACT/ès⃕QøŠøôQ¤ïRsÒ ç©…Ï–>7:ô¹Ñ ŸùÜèØçF+Ÿ­}n4eEƒ=zG~æó¤óÛ<éâ6O†ßæÉˆ¯y2òkžLèód>O&òy2±Ï“Q>OféódV>OFû<ãódRŸ'“ù<™ÜçÉ>O)÷yJ…ÏS*}žÒÅõÎð—¿tx›à½>zå¥ïÝ{ˆO->tðÄÕ½¾Æ]ÛÁ*üà3>ýcÀè¹þ¤C§~ endstream endobj 575 0 obj << /Length 900 /Filter /FlateDecode >> stream xÚmUMoÛ:¼ëW°‡éÁ5?$R. ¤d9ôMðð®ŽÄä ˆeC¶ù÷³k›m‘CŒÕp¹;;†wŸ~>Î|¿Ž3óEŠ_ñ¸?O]œ5ß¶‡âî®Ýwç]Oßcìc]=~?§}÷Oâ¾yhÆáô9%?ŒÝ۹׬“B|Æœ‚>âþ)þ;ëvÇw%gÏçáí4Œ3‰ä§áô–’>\ ‚‚6ý§ã°¿ õEJ™€õØ7ûÆ8ó 1¿’{Æ~ºðÏ`W(-ú¡;]¾è·Û%=°ùñýxŠ»‡ñe_,—bþ+-OÓ;qü\ÌL}œ†ñUÜÿI--=ž‡·B«•èãKª˜æÿ¾ÝE1ÿpÆ[ÎÓû! Mߊyuû>Û.NÛñ5K)Wb¹Ù¬Š8ö­iÇ[ž_®¹uÊ•MúÑzQ­Š¥Ò)V†€Ú(TØ€àx¿àÞ¢ žjy‹°°!ÀÐÔ•µZÔÀ2àP="¦ZdÔ0\ÃG©R\¡·”).–2*ÎШa!„U¼Ä,†³ÔÛHð° `+jÐÃ.¸5Nα@èâ°èÐVK-àxŸ%ô˜Ü3š% A°YÓ€z¡ÎšÔ>kP#¬³¦õ™5m0W£oš¦Ã¾žj­®§Üý·.†ÐZ¡ŽT$X/©)n)æ#W—„o(æ“oÀRZÞ $K¢p4’ŽZ¶-bâ\­1¦Ü°Jä æP"Gñ‘XÔQ¬‚i/8ºkÉ^€ÂZqŒ:ZsŒ½š9”d š­Bù Ž)ßsLù-ï7½æx˜ÏJ›¡¾Ò`¯ažÉ½)f¥É$†µ’1™¸ dÑŠcªCZCù<£7Ã3JÊgózÌnøþHȰíáÌYÉšäTœ¯a…Šï¯Æ,_»œ-Ÿ—Oë87Ë}êÛKÔ´Ü—Ll¹oKñšò+Êg­JÌâ.¾GZyóº‹Vðc­48¸’ï¼äØWtù]Í:P~`áŒñ±–rZŽq.nÍ1]Ç ÇàSÿæ/©ßP•ýïuö¿7Ùÿ¾Ìþ÷Uö¿·ÙÿÞeÿû:û?Èìÿ ²ÿƒÎþ&û?”Ùÿ!dÿ‡&û¿1y–¦¼ÍH·œn5þ¹ã)º½ÝyšÒ“Bï½x#†1Þž´Ãþ€]ôGoáõñÅ×Mñ?®Xê endstream endobj 576 0 obj << /Length 858 /Filter /FlateDecode >> stream xÚmUMo£0½ó+¼‡Jí! ᫊"RÛVmµÚk N7R$‡þûõ›Úݪ’çñ›ñ›‡±¯~<>ÏlÛ¿ºYt«Õ“ûËиYùs{ ®®ª¾¹]w¾w®uí4;Þ©Ç¡ožÝY]—›jÓíÏ7ž¼éšÃ¥uë{RáÞöÝ'ë¨ë÷{æšÙá8ŽFû? 4Ø/ûóÁ³¾'(U_¢ŠÒ~¹aÜ÷Ý2·ZkXwmÙÑÉÌEšOúvû®D’z…ÀÀ„ªÝ7gÑosô– ùù}<»ã¦ÛõÁr©æO~r<ï¤ò&˜? ­öÝ›ºþ¢ÍÏ=_N§ƒƒ¥ƒÕJµnçKzî·G§æß·ùAzy?9ÒØ°²¦oÝxÚ6nØvo.Xj½R˺^®k¿Ì™ˆS^wwí¹ºö?¡ŽòU°4H6!L‰@Œ@ÂÈBŒ€Öû@æq\s óŒ”*댌ÇTgýâÔÿÇÀ á]¸i/°n¢£ŸTv<ÊÈkã­õØ0†×YÈÚ²ˆ1êg Æk`òÚYÂõ³”1q2î2ñ‚Ö%/̾dchÎJÆð(«S}êßÄØYÍ:sÖcÝœõÇà笟öPÎúcèÉYB¹¬?Aï9ëO‰Ïúâ³ÎšsÖ™âç¬3¢\ÖQ.ë4ôa±Ï½Xñ=Zñ9Ÿ‰#>c-+>c_ZñëZñ~Zñ™8â3z·â3ô[ñ:­øŒÞ­ø ߬øLõÅgè·â3tâ3Ö-Ägð ñüB|†žB|¦\ñ½â3ñÅgâg|2–³½â?z)ÄìÃBü§šü­XªÉßIAuÄp*^+†ÇãŽ&™#ÌsU-'H8ªqµ|\Íeü A÷û8ñ÷û¸¢Ný YôÐÝ6ݧ=ÔÁ_}sߊ endstream endobj 577 0 obj << /Length 861 /Filter /FlateDecode >> stream xÚuUËnÛ0¼ë+ØC€äà˜”¬W` $ È¡IE¯¶D§lÉìCþ¾œÝuÒ6ÍAÂp9»œQäÕ·§ÕĶýÆM¢[­žÝØŸ‡ÆMÊïëcpuUõÍùàºÓƒs­k/³ãzúfåN꺼¯î»Ý鯓ï»fnÝ…õRá^wÝë¨ë÷sâšÉþ0Ž›Þh0Ôà¿ìN{ÏûŠ¢|\}Š+Jýá†q×wwÊÜj­}`Ùµe@?c0MjzQ¹Ýuí ÂÔ2ªvלdDïæàAòêm<¹Ã}·íƒù\MŸýäxÞHéM0}Z7ìºWuýIŸ]ǽƒ¥ƒÅBµnë‹z/Ö§¦_5ûN{y;:ÒØ°º¦oÝx\7nXw¯.˜k½Póº^®kÿ™3§l¶îÒsuí_¡ŽòE07H6!L‰@Œ@ÂÈBŒ€Öû@æq\s óŒ”*댌C¿Ÿ¡³Ÿ±n!>ƒ_ˆÏàâ3ôâ3åŠÏ轟‰/>?ã“°œEè¥ÿÑK!þcâ?ÕäÅRMþO ª#þƒSñZ1|¨8Gxp4Éaž«j9¡èDÂQëåý"hÎÃàﺃèÜlj¿ëÜû5uìÈ¢‡î·ËÍŠÑcü±n㟠endstream endobj 578 0 obj << /Length 862 /Filter /FlateDecode >> stream xÚuUËnÛ0¼ë+ØC€äà˜”¬W` $ È¡ME¯¶D§lÉl ùûrv×IÛ4 ÃåìrvD‘W_WÛö7‰nµzrc7)¿®ÁÕUÕ7çƒëNßœk]{™ïÔãÐ7+wR×å}ußíN7ž|ß5ûsë.¬ÿ“ ÷²ëÞ)XG]?»×Lö‡qÜü2Ú 5øÏ»ÓÞó>£(WâŠR¿»aÜõÝ2·ZkXvmÙÐÏLE“š^Tnw];ˆ0µÌÀ„ªÝ5'Ñ»9xc¼zOîpßmû`>WÓ'?9ž†WRzL†Ö »îE]PçgWçãqï Dé`±P­Ûú¢Þ‹oëƒSÓÏš}£=¿ ilX]Ó·n<®7¬»̵^¨y]/×µÿÌ™ˆS6Û w鹺ö¯PGù"˜$›¦D F á@ä¡F@k} ó8®9ù@FJ•uFFž#`R0J¬Rq ƒyFÅ)KjBS` F¢5§Ô(Z#¥.9€”ºB€kxŒö/}æ³KßÍÏõ yq(¬ ábŒÆuX&Àá &èq,–Ñ1Ç+à„±N97Î8Nüœsk`Ëq8­ ^—8%Ç àŠ½FMq.â†5„Sâhú@ìkO × Ápý$Áƒqù>¦/]½©Îòþ…Sÿ/„wá,¤½À: ¸‰fŒ~RÙ ð(#¯·ÖcÃ^g!chË"ƨŸÍ/ÉkC^d cÔÏRÆÄɸhÈÄ Z—¼03ø’Œ¡9+ã¬bLõ©cOd5cèÌYŒusÖƒŸ³~ÚC9ë¡'gý å²þ½ç¬?%>ëOˆÏ:ShÎYgŠoœ³ÎˆrYgD¹¬ÓÐÅ>[ôbÅgôhÅçX|&ŽøŒµ¬øŒ}iÅg¬kÅgøiÅgâˆÏèÝŠÏÐoÅgè´â3z·â3|³â3ÕŸ¡ßŠÏÐYˆÏX·ŸÁ/Ägð ñz ñ™rÅgô^ˆÏÄŸ‰ŸñÉ@XÎ"ôRˆÿè¥ÿ± ñŸjò¿b©&ÿ'ÕÿÁ©x­>T#<8šdŽ0ÏUµœPt"á¨Æõòv4çaðwÝAtîãÄßuîíš:öGdÑC÷ÛåfÅè¡~å‡ãÌ endstream endobj 579 0 obj << /Length 860 /Filter /FlateDecode >> stream xÚuUËnÛ0¼ë+ØC€äà˜”¬W` $ È¡ME¯ŽD§lÉìCþ¾œÝUÒÍAöp9»œQäÕ·ÇÍ̶ý‹›E·Z=¹±¿ ›•ß·§àêªê›ËÑuçε®fÇ;õ8ôÍÆÕuy_Ýwûó'ßwÍáÒº‰õRá^÷Ýë¨ëg÷kæšÙá8޽Ñþ# úóþ|ð´/ʇÕ簢ğn÷}w§Ì­ÖÚÖ][öG43s¤æ“ÄݾkQ¥^ 10¡j÷ÍYFôÛ½+HÞ¼gw¼ïv}°\ªù“ŸÏÃé¼ æCë†}÷ª®?‹ó“›Ëétp¢t°Z©Öí|MïÃíÑ©ù¾³žßNN…46¬­é[7ž¶¶Ý« –Z¯Ô²®WëÚOs&â”—ÝÄ]{®®ýO¨£|, ’MHS"#p òÐ# µÇ>y×È| #¥Ê:##Ï0)%V©¸†ÇÁ²£â” Œ55¡)°£FÑšSj­‘R—@J]!À5£w+>Ã7+>S}ñú­ø …øŒu ñüB|¿Ÿ¡§Ÿ)W|Fï…øL|ñ™øŸ „å,B/…ø^ ñû°ÿ©&+–jòwRPñœŠ×ŠáCÅñ8ƒ£Iæó\UË E'Žj\.ï÷@sEÐ Dç>Nü}çÞ/©SB=t»M—*Fuðð¦áµ endstream endobj 580 0 obj << /Length 700 /Filter /FlateDecode >> stream xÚmT]o£0|çWø*µilÄTQ$AÊõUSî5§‡Ô"ä¤þûÛÙuÒ” õxwgv0¾úñ¸du÷â&Ñ­VOîØ†ÊMòŸ»>¸º*ºêtpíxï\íêóîñN=]µu£ºÎ7ŦmÆJÞ´ÕÛ©vç¬ÿ'­ÜkÓ~¤€G]?»ß“ýßÃ`‡ ý4òž›ñö¿o)Z«ËZqê/7›®½SæVkMÀº­óîÝÇ`ê¹Õô¬fß´õà¨È L¨ê¦ýŠŸÕ @ñöý8ºÃ¦ÝwÁb¡¦O´y‡wVvL†Ú Mûª®/ªÝžúþÍAÒÁr©j·§f4ëýîàÔôûP—íç÷Þ©×FÔT]íŽý®rî}uÁBë¥Z”å2pmýmÏÄRò²?ç&”«çx˜™Y°F\20/0–b“Ò# “!Ú‡\§)&q)€% 1Ϲ‘NÐÔ"Û‚%”’4¢81`rÈH%ÃDdè‘åÜ#C ýйk Ю%£íºÀÜ"l é%²Ë€ìR„Q ƒÎNÄúìLõg7à×a‘“PFIèÏëèc ñZ™ÁKøµ•x…8•8C¼’¢uÎΚVkÆsH5Ìo"Œn˜?ŒÿÄ`=û´öúLüƒF“È„ûf.œpÑdkæ_ Μ¢‹NÅ0VG9×ú×ʱçÐúwþDKŒù¬Ä4XÃ=CøaCÉ–g2)4X( ÍÆrb0§/sŽù4êlƵ¬Ç®‡ËÃÄÜúÉb®]ËŒÌ[r<ƒÎÔs!?õïf*µŒ{.ø“z.ôI=ÎmZˆoàJ™+Î9ÇRàÊ ñϨxè?Wúðáâr¹\Õiè¦àˆo|ÿMë.—Tßõ¨â?ßnçû«‡2øæzr endstream endobj 581 0 obj << /Length 701 /Filter /FlateDecode >> stream xÚmTÁn›@½óÛC¤äàx ^"Ë#ùÐ$Š£ªWÖ)R ãJùûΛYÇiSÉF³™yoÞ.{õíq;ÉêîÅM¢[­žÜ±; •›äßw}puUtÕéàÚñÞ¹ÚÕç·Ç;õ8tÕÖê:ß›¶o(yÓVo§Ú³þŸ´r¯M{Iº~v?'û߇¡³Ã„~‰ÏÍøF _Þ)ÔPœüà ǦkÕZ°në¼;@ú1˜zz5= Ú7m=x ꊪº©F¿âgu P¼}?Žî°i÷]°X¨é½<ŽÃ;k» ¦C톦}U×YoO}ÿæ Aé`¹TµÛS7š÷~wpjúe®÷Ïï½S!¯è©ºÚû]å†]ûê‚…ÖKµ(ËeàÚúŸw&–’—ý97¡\=ÇÃÌÌ’€5â’yA€±›”a˜ÌÑ>ä:M1ȈK,‰¡xÎt‚¦Ù,¡”¤Å錓@F*&" C,çzdèWÌXP€v-h׿akH/‘]® ˜d—"Œbtv"Öggª_»|¿‹ž„2JB^G—5Äkdwt,uà×VââTâ ñJbˆÖ9;kBX­Ï!Õ0¿‰0ºaþ0büw‚õìÓÚë3ñß4šDvpÂE“q¬™%8sŠ.: ÃXå\ë·•c¿çÐú½¢%Æ|Vâ ¬áž!ü°¡äÀË3™¬?Ðfc91˜ÓŠ—9Ç|u 6ãZÖcW‚Cƒåƒabî ýd1×®eFæ-9žAg깟ú}ベJ-ãž þ¤ž }RÏ…s›â¸RæŠsÎñŸ¸²B|ã3*úÏÕŸ>|¸¸^>îƒê4 tUðÄ·¾ÿ¦u×Tßõ¨â?ßoçK«‡2øê!tº endstream endobj 582 0 obj << /Length 700 /Filter /FlateDecode >> stream xÚmTÁnâ0½ç+¼‡Jíb'$8B ‘8l[•jµWHL©$Q€•ú÷;oÆÐ.Z ¢ñó̼7/Žo~<¯GYÝmÝ(º×êźÓP¹QþsÓ77EWö®=>:W»ú¼{xPÏCW­ÝQÝæ«bÕ6Ç;J^µÕÇ©vç¬ÿ'-Ü[Ó~¥€Gݾºß£þýÏÖ#úiä½6ÇÚ¿ÞR´V—µâÔ_n84]û Ì½Öš€e[çݺÁØs«ñYÍ®iëÁ P[È L¨ê¦:ú?«=€âõçáèö«v׳™¿Ðæá8|²²»`ü4ÔnhÚ7u{QEèúÔ÷ ”æsU»5£Y7{§Æ×C]¶_?{§B^QSuµ;ô›Ê ›öÍ3­çjV–óÀµõÕž‰¥d»;ç&”«§x˜‰™°D\20-0–b“Ò# “ !Ú‡\§)&q)€% 1O¹‘NÐÔ"Û‚%”’4¢80`rÈH%ÃDdè‘åÜ#C ýŠ©K Ð.%£í²ÀÜ"l é%²Ë€ìR„Q ƒÎNÄúìLõ¾Èðë°HáI(£$ôçuôµ†x-ƒLàŽŽ¥üÚJ¼@œJœ!^H Ñ:ggM«5ã9¤æ7F7ÌFŒãN°ž|[{}&þƒF“È„ûf*œpÑdkæ_Μ¢‹NÅ0VG9×ú×ʱçÐúwþDKŒù¬Ä4XÃ=CøaCÉ–g2)4X( ÍÆrb0§/sŽù4êlƵ¬Ç.‡ËÃÄÜúÉb®]ÊŒÌ[r<ÎÔs!?õïf*µŒ{.ø“z.ôI=ÎmZˆoàJ™+Î9ÇRàÊ ñϨxè?Wúðáâr¹\Õiè¦àˆo|ÿMë.—Tßõ¨â?ßnçû«§2ø Ý7rX endstream endobj 583 0 obj << /Length 700 /Filter /FlateDecode >> stream xÚmTÁn£0½óÞC¥öƆ@LE"¤¶­šjµ×œ©D’•ú÷;oƤÝj¥Ÿgæ½y_ýxÜN²º{q“èV«'wìÎCå&ùÏ]\]]u>¸ötï\íêq÷x§‡®Úº“ºÎ7ŦmN7”¼i«÷síÆ¬ÿ'­ÜkÓ~¦€G]?»ß“þíÏ`‡ ý4òž›Ó;íßR´V—µâÔ_n86]{§Ì­Öš€u[çݺÁÔs«é¨fß´õà¨È L¨ê¦:ù?«€âíÇñä›vß‹…š>Ñæñ4|°²›`ú0ÔnhÚWu}QEèöÜ÷ï ”–KU»=5£Yïw§¦ß‡ºl?ôN…¼6¢¦êjwìw•ví« Z/Õ¢,—këo{&–’—ý˜›P®žãaffIÀqÉÀ¼ ÀXŠMJ0Lf„hr¦˜dÄ¥–€ÄP<çF:AS‹l –PJÒˆâtÆ€É #• ¡G–s =2ô+æ¬ (@»–Œ´ës‹°5¤—È.W PL²KF1 ˆõèLõ¶Èðë°HáI(£$ôçuô¹†x-ƒÌàŽŽ¥üÚJ¼BœJœ!^I Ñ:ggM«5ã9¤æ7F7ÌFŒáN°ž}Y{}&þƒF“È„ûf.œpÑdkæ_ Μ¢‹NÅ0VG9×ú×ʱçÐúwþDKŒù¬Ä4XÃ=CøaCÉ–g2)4X( ÍÆrb0§/sŽù4êlƵ¬Ç®‡ËÃÄÜúÉb®]ËŒÌ[r<ƒÎÔs!?õïf*µŒ{.ø“z.ôI=ÎmZˆoàJ™+Î9ÇRàÊ ñϨxè?Wúðáâr¹\Õyè¦àˆo|ÿMë.—Tßõ¨â?ßnãý‰ÕCü_er¨ endstream endobj 584 0 obj << /Length 700 /Filter /FlateDecode >> stream xÚuTMo£0½ó+¼‡Jí!m0U ó!å°mÕT«½¦àt‘ˆ€úï×o†4«j{ÀzÞ̺v|t®võåïð žû®ÚºQÜf›|Ó6ã'oÚêp®Ý…õ’uïM{¥ ¸}u¿gã f‡ã0?ÒD‚þÚŒOû†!|X| Jüåú¡éڡ>P´uÖ±˜!˜O‚Äü"qß´u?©oÐ(-ꦧÕÑ»‚äíÇ0ºã¦ÝwÁj%æ/þç0ö¤ó.˜?õµë›ö]Ü~çnϧÓÁAˆÁz-j·÷5½»£óoVúÉzý89¡i®X[ÕÕn8í*×ïÚw¬¤\‹UY®×Ö_þÅœñ¶Ÿ¨!¨aâ)=Vfá±YúAK@ª=NSbxì…ÇVq ð † ¹5lL} C à@Fº. ¢ð¢¨ú³ë'íRFh-Õµ„D©³˜zé<^°¼äx1NcΠljÏëNKà”ã °å¾ÄÉ8ns²E¡¦ÒŒa€B¯2Ê £¾V ô«„1<ѬSc-š­ÑУÑWkE8ã8Ö¥Ù-šº¤^ ä†àèPCg˜s.ê‡Ç¡m ý:.àÕ2gŒúË‚õ(à’qèqôçq¢ubòYÅðÇÈ«oF]ý4úê¹á3â(QNÄA‡‰ ó3|¼ Û°G:LzõÈØë‰3ä ûhxR¬ÁŒáEÂû‘"7Yp/hJXCŠýKHƒ¢¾ ï½…¶„üR¤3əߪ¿$SÞ›{cYˆšvº;ÐcY¿…wÖòÞæý£ÜœÎ¥Ìá]ɸŒ§A7w¯ÌçƒPûÞ¿ôÑ€«ß´îóµ:u'dÑGÏÜåuÅì© þGß}Ì endstream endobj 603 0 obj << /Producer (pdfTeX-1.40.25) /Author()/Title(\376\377\000D\000R\000I\000M\000S\000e\000q\000:\000\040\000D\000i\000r\000i\000c\000h\000l\000e\000t\000-\000m\000u\000l\000t\000i\000n\000o\000m\000i\000a\000l\000\040\000f\000r\000a\000m\000e\000w\000o\000r\000k\000\040\000f\000o\000r\000\040\000d\000i\000f\000f\000e\000r\000e\000n\000t\000i\000a\000l\000\040\000t\000r\000a\000n\000s\000c\000r\000i\000p\000t\000\040\000u\000s\000a\000g\000e\000\040\000a\000n\000d\000\040\000t\000r\000a\000n\000s\000c\000r\000i\000p\000t\000\040\000u\000s\000a\000g\000e\000\040\000Q\000T\000L\000\040\000a\000n\000a\000l\000y\000s\000e\000s\000\040\000i\000n\000\040\000R\000N\000A\000-\000s\000e\000q)/Subject()/Creator(LaTeX with hyperref)/Keywords() /CreationDate (D:20241029203057-04'00') /ModDate (D:20241029203057-04'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) kpathsea version 6.3.5) >> endobj 572 0 obj << /Type /ObjStm /N 59 /First 497 /Length 1852 /Filter /FlateDecode >> stream xÚYmSÛ8þž_¡å˜6Öê}¦Ó”BHyé•Þôƒd 1——»ë¿¿]ËqäXv!ÓIeïjwŸ}v%ˆ` ãÚ1.5ã†3pxo“B0žH¦ŒÅ˜Q€£aN^2ÎŽ4£w(‘Š÷ ©ô§ðg2BGŽ,ˀºŠ‘%¼ ¥/¤ ^(‹*- ^ ÊpÙs€#µèŠάÄÑ:fĬf4 ÊqŠ ÀÚâˆr-™@— /…àÀ0”ô0!19‰ó”ÐLâ<È$ÎÓ(G‘0Ò¡10Š,Êç9B—àT‰¹¡)§ÌIÁÐ# øOhðÑ£ä/P¡Ñ™BÌÒrd™–NcŠŽ3Åiæ¨P-%7=…ž”Bš”ßQ/4þ,ýg˜ +ËÐ1ùq˜-âÒ þWxÁñj"Dó¤÷þ}¯ùë9cýùtÑë_,oÅ- y¯¿ŸÎ3Ò°þÁÁÞðòdw0›^1û ›ßÎ&Ï‹|ƨD ;Gùd6_ ÒõB¯?LWw\ôúNîs¦°eŠÉ—ùÕtr›ße˜ /D>¼Ñàøút|‰ˆÎ1‘&"³‰H& Í<¢‰G¼ÏéÑÕÉÅðÄr 86€#]‡7áÈ×ÃŽÇçc„sqãGñM@ @"¨¸& õz@×_¿ ®¾íGétΓ·çÙýò1E 5J<€Rd•s§l2½§ÓD«_ödpõéêxv?¼;»yœü½ÌšˆuƒL’ÉÖˆeòÄæõˆG'§‡‡ƒ:âTÑ •‡äª—@µ[,•“áèðz µØÆ¾¶Fl°ŒÁ¾­Ûb% Ï>íïîg³”ðŽòiþö<J§‘Öm°+겫xU¯M¶hÝÃÁ×ãË:ÞV†UƒaZúñÖ…!Þb+ÿöåûùÕÞîéäéf9GÌöæmnꪭ$ Xx=ØÏß/ÇG!XÚÉ"`[¾hÃ*äK°nñL:ú|tôåS¹ÐlÇ–Û|›÷úƒ|‰ÈpŒÓY†Wt´+Ì?Oîæì/WÜáyQûQ—£-å®(+·Š…ñc›Hïƒ;?By/Àz5êíc˜Ò‡ßpð,êq (ï¥,G·u áw<—–£õ¾ebüÈ} )~›‡j‹!eéS—£ïB: ú~[p+gtä÷Å3%9¾¨¢,¶ô m8;[.'SòWt'+× 5's~ý®"‰Êr²xÌðåÄk÷˜+ºU’åN6žeÿЫ@ج…©u+Ójª7Õ6°Ühso©*Kè°,fÿ-è¦é†¯ÜÛî¦<Ù”n"hʃ¹‘n t¡ÃTLš$ꦰÜ8g–º"Ro™„%ÁþSÁ)J\’S5jÝ{E¶†¨÷—Žð«+~•íè ý¬ºÍ£Ôa#êJS¥ª"¨z ä"(UÅ»ªóaùdÄRV¼KÝa)ƒôDÜTKèp²ES±-l»v³Œt³¨ˆ²ÃMØÍ2ÒÍ¢bUÄY-,E¤›¡btG%k¬ê°iDØÚª¶{éPóÑP…÷XÓ@E6ïjm²½Z/%„­½JÀ£tõX¼ª—]±Â’@¤$¼* ïÚªÃúðH}Ö›M‡“°:<Òóñ<îÄï’¡Ýiú”áóíÍA~ûöb‘Î;˜F‘{s;Ydïögé/H¸Þ¡o_5yžÿœ£†“Fšƒtš>d3î¬E• UÃôù9}Lñ™8EK±Cžõèv€( ©ß?`1'O“ÅʈÅͤŠ)§ù¿“ÛŸi™ƒ søšNï²)¾mÜg¨6¤öó7Ïx x‡™9Þ';ô•/”àÐ5 ¤¼‰¤šÞ@íH˜šg‰ÿl]IÔ}) %èXˆÚÌJÈZVXá¿¡„«¨Õ¬`ŽÌUàJåŸD+ò$Lm ò$\ˆ €Š² Ô\Çq¹õ¬8.@z¤¨Á@z¤ªEz¤©IikP‘ÅCRƒ+¿“5€QÔjV¦ÅuˆKRk›@ h…&$ Â""H€x «¶UБmélžÝ.&ùôêuž¨šd¢.Á¢™º„²ãu姢ШŠëY t+UÁGÝ'2¢6DÈɪ£æË›Ê–PƒˆÈiašˆ3P ¸”ÍÙMØk½¦èº]StD¯+ˆæmJ õÖ¦´®Ú”ÅŠhd¶6jͱ>‰WkBT®hBÚgkZ•ÔaªM‰ÙצÄlm4Ûî¨ñoRÖÞÔ¯Ûöº5‚ZG𯔪Ü”ÌN)FÿÆWü1ÅÐõÜ\ê¥ór?¡?»øQ•£.GÓ¾B_€Ý•˜ëÂÖéé ›£N"Ÿ é"}Ìï{þm|ýb¿zŸ4E±tRwî³Q~—õ¯æÙúåûì9›î˜«Žæÿ¬ XÀ endstream endobj 604 0 obj << /Type /XRef /Index [0 605] /Size 605 /W [1 3 1] /Root 602 0 R /Info 603 0 R /ID [ ] /Length 1539 /Filter /FlateDecode >> stream xÚ%–[lUUÆ×·Ïé9¥-¶Ê"R*·^¸ÚÚS.¥VZZ …¶@%^Aã=*„cÔæò2ãdœ—™É /ó0>­ypŒú &“Œ·¨ ƈWŒwqý¾¾üòý¿µÎÚÝ{ÿwáö«YYPhí ¨ƒYȶ®F d`o*ò`o%ª À$Þõ¨"(ÇðQ3@EBÌã­ ¬Uxex ”3Á5x¼å”Õ o6Þu”³@-Þ¼e”³Á¼Íx×RÖ¹x]xK)çùé¶K5xõ” ÀB¼9xK(ÅxÛñSz¡ož·øÐkñvâ-¤ôtÞ.<ï›iÀ;Ž7ŸÒ¢ïžÿ4?Äôt«ðøë3¿€Õx3ñ|[kÀZ¼µxÜyÖšA hBµßï:°žÍÀÝ×ð[Ý€*~ö3C'MIÝiµ9©»­Ú“:eÕ‘Ôi«Î¤ÎXmIê>«­IÝoµ-©­º’zØj{RZíHê1«I=aÕÔ9«ž¤Î[õ&õ¤Õ®¤ž²ÚÔÓV{’zÆjoRÏYõ%õ¼Õ¾¤.Xõ'¬n7‚6…ì_~LܾÓYƒ`ÃàدPü“1Â/Ä«˜Be €(²°l]üb GÁå¨èÎ;+Ôuûøq~¶UZ2ºÁN(4ìõ/|lÙ!5ÞKCÇ ûG¼ê¦+Wè|Ä%Ý$• ½5öj9ÀMW¥0ø‰=1Ú£ý¢Ûo–Â诺£k$í±NáÄr/ÌWxàŸVtJ\¤pò—tOÜ ðÛg]nm Ô+œž>`XªðP¿Kš8ÒL‘¶´PdPD'6*….zµ_á³7¬HlÄ6îƒ W>RÙ™„%D ä¨ +\½Ë%¹Š#Rq¾O9FQއ™Œd2’É8&¤Úé`NJõ—­Ž"O€)ŽO×m¾”UNªû_r&¸Ì9©ã/Tƒ¼TzÞe(:¥TÈs©T‚*©ïª7×ZiäœËÙÒ-ÕVžès¥‰K.ç`4Õn¯—RƒZ(Ýú{‹€§üàÙ¾x¢/“N yŸ‡ùréL_ºÁ³·&üqú97ƒFéÑ7]6ë¥s?»dŽ—V¦wi X+=õµW;ÁÀx(1JÝ EúÍýÞÒZ¥¦±¬ÀFÐ6Í tHÿøGÏ+Ý Gúw£ê•^=›îãÝꄱwì‘^iq9öJ¯/sÙö~pÞxÌ«7Jï½hµ ‚!p K=îÕ 0 œœQéó/‡¤Ÿ§cqŒ#à(W¦Ë)fK^𽮘ʺÛ\VªðÚž».JÙÒ/d ò€Àñ¡èÑ\®¬íïó­PÖqs:´ÿöR¬VÖó…˹ FÙÀô%}¡Z0Ìuʆ/¦¦Žåšþê}Ä"MÇl²Ë%9ˆ ”Ýô“K¾<"IdNŠÙ©H#IdŠ!(† ‚Š Ê-oðoW(ײۊï&¡¢¿H]\­Üå—¼Jh"¡‰­ Y¹ïöx¡$²˜Àâ J±ô€uʇ‡¼™°2³ÅL£@Œ>1{Á.@Ö˜fbš‰i¦Hr"Éa†‰&&ˆdb) ²|åˆ/4¤|Û)«ÊͲVþä˜Õˆòçû­*ÿçãV£Êÿ÷ «CÊüˆÕa• æ­ÆT6vÅêˆÊ^~Ùê¨ õãVã*<<} þr“Õ¤ ¯|TxÿÓ buJ]áÃ4á —V&|2žðÙú„/ßIøæ|Â÷ ?]J¸šö‰[±z«8c±3é³þ„]üÑÖšA h뀿ÒüE¶´MÀß¶í tªXµ*]cÞ…ð+û¸M endstream endobj startxref 464793 %%EOF DRIMSeq/man/0000755000175200017520000000000014710222503013547 5ustar00biocbuildbiocbuildDRIMSeq/man/MatrixList-class.Rd0000644000175200017520000000535314710222503017247 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_MatrixList.R \docType{class} \name{MatrixList-class} \alias{MatrixList-class} \alias{names,MatrixList-method} \alias{names<-,MatrixList-method} \alias{rownames,MatrixList-method} \alias{rownames<-,MatrixList-method} \alias{colnames,MatrixList-method} \alias{colnames<-,MatrixList-method} \alias{length,MatrixList-method} \alias{elementNROWS,MatrixList-method} \alias{dim,MatrixList-method} \alias{nrow,MatrixList-method} \alias{ncol,MatrixList-method} \alias{[[,MatrixList-method} \alias{$,MatrixList-method} \alias{[,MatrixList,ANY-method} \alias{[,MatrixList-method} \title{MatrixList object} \usage{ \S4method{names}{MatrixList}(x) \S4method{names}{MatrixList}(x) <- value \S4method{rownames}{MatrixList}(x) \S4method{rownames}{MatrixList}(x) <- value \S4method{colnames}{MatrixList}(x) \S4method{colnames}{MatrixList}(x) <- value \S4method{length}{MatrixList}(x) \S4method{elementNROWS}{MatrixList}(x) \S4method{dim}{MatrixList}(x) \S4method{nrow}{MatrixList}(x) \S4method{ncol}{MatrixList}(x) \S4method{[[}{MatrixList}(x, i, j) \S4method{$}{MatrixList}(x, name) \S4method{[}{MatrixList,ANY}(x, i, j) } \arguments{ \item{x}{MatrixList object.} \item{value, i, j, name}{Parameters used for subsetting and assigning new attributes to x.} } \value{ \itemize{ \item \code{names(x)}, \code{names(x) <- value}: Get or set names of matrices. \item \code{rownames(x)}, \code{rownames(x) <- value}, \code{colnames(x)}, \code{colnames(x) <- value}: Get or set row names or column names of unlistData slot. \item \code{length(x)}: Get the number of matrices in a list. \item \code{elementNROWS(x)}: Get the number of rows of each of the matrices. \item \code{dim(x)}, \code{nrow(x)}, \code{ncol(x)}: Get the dimensions, number of rows or number of columns of unlistData slot. \item \code{x[[i]]}, \code{x[[i, j]]}: Get the matrix i, and optionally, get only columns j of this matrix. \item \code{x$name}: Shortcut for \code{x[["name"]]}. \item \code{x[i, j]}: Get a subset of MatrixList that consists of matrices i with columns j. } } \description{ A MatrixList object is a container for a list of matrices which have the same number of columns but can have varying number of rows. Additionally, one can store an extra information corresponding to each of the matrices in \code{metadata} matrix. } \section{Slots}{ \describe{ \item{\code{unlistData}}{Matrix which is a row binding of all the matrices in a list.} \item{\code{partitioning}}{List of indexes which defines the row partitioning of unlistData matrix into the original matrices.} \item{\code{metadata}}{Matrix of additional information where each row corresponds to one of the matrices in a list.} }} \author{ Malgorzata Nowicka } DRIMSeq/man/dmDSdata-class.Rd0000644000175200017520000000607214710222503016627 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDSdata.R \docType{class} \name{dmDSdata-class} \alias{dmDSdata-class} \alias{counts,dmDSdata-method} \alias{samples} \alias{samples,dmDSdata-method} \alias{names,dmDSdata-method} \alias{length,dmDSdata-method} \alias{[,dmDSdata,ANY-method} \alias{[,dmDSdata-method} \title{dmDSdata object} \usage{ \S4method{counts}{dmDSdata}(object) samples(x, ...) \S4method{samples}{dmDSdata}(x) \S4method{names}{dmDSdata}(x) \S4method{length}{dmDSdata}(x) \S4method{[}{dmDSdata,ANY}(x, i, j) } \arguments{ \item{object, x}{dmDSdata object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{i, j}{Parameters used for subsetting.} } \value{ \itemize{ \item \code{counts(object)}: Get a data frame with counts. \item \code{samples(x)}: Get a data frame with the sample information. \item \code{names(x)}: Get the gene names. \item \code{length(x)}: Get the number of genes. \item \code{x[i, j]}: Get a subset of dmDSdata object that consists of counts for genes i and samples j. } } \description{ dmDSdata contains expression, in counts, of genomic features such as exons or transcripts and sample information needed for the differential exon/transcript usage (DEU or DTU) analysis. It can be created with function \code{\link{dmDSdata}}. } \section{Slots}{ \describe{ \item{\code{counts}}{\code{\linkS4class{MatrixList}} of expression, in counts, of genomic features. Rows correspond to genomic features, such as exons or transcripts. Columns correspond to samples. MatrixList is partitioned in a way that each of the matrices in a list contains counts for a single gene.} \item{\code{samples}}{Data frame with information about samples. It must contain \code{sample_id} variable with unique sample names and other covariates that desribe samples and are needed for the differential analysis.} }} \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] } } \seealso{ \code{\linkS4class{dmDSprecision}}, \code{\linkS4class{dmDSfit}}, \code{\linkS4class{dmDStest}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmDSdata.Rd0000644000175200017520000000371714710222503015527 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDSdata.R \name{dmDSdata} \alias{dmDSdata} \title{Create dmDSdata object} \usage{ dmDSdata(counts, samples) } \arguments{ \item{counts}{Data frame with counts. Rows correspond to features, for example, transcripts or exons. This data frame has to contain a \code{gene_id} column with gene IDs, \code{feature_id} column with feature IDs and columns with counts for each sample. Column names corresponding to sample IDs must be the same as in the \code{sample} data frame.} \item{samples}{Data frame where each row corresponds to one sample. Columns have to contain unique sample IDs in \code{sample_id} variable and a grouping variable \code{group}.} } \value{ Returns a \linkS4class{dmDSdata} object. } \description{ Constructor function for a \code{\linkS4class{dmDSdata}} object. } \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] } } \seealso{ \code{\link{plotData}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmDSfit-class.Rd0000644000175200017520000001062714710222503016501 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDSfit.R \docType{class} \name{dmDSfit-class} \alias{dmDSfit-class} \alias{design,dmDSfit-method} \alias{proportions} \alias{proportions,dmDSfit-method} \alias{coefficients,dmDSfit-method} \title{dmDSfit object} \usage{ \S4method{design}{dmDSfit}(object, type = "full_model") proportions(x, ...) \S4method{proportions}{dmDSfit}(x) \S4method{coefficients}{dmDSfit}(object, level = "gene") } \arguments{ \item{type}{Character indicating which design matrix should be returned. Possible values \code{"precision"}, \code{"full_model"} or \code{"null_model"}.} \item{x, object}{dmDSprecision object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{level}{Character specifying which type of results to return. Possible values \code{"gene"} or \code{"feature"}.} } \value{ \itemize{ \item \code{design(object)}: Get a matrix with the full design. \item \code{proportions(x)}: Get a data frame with estimated feature ratios for each sample. \item \code{coefficients(x)}: Get the DM or BB regression coefficients. } } \description{ dmDSfit extends the \code{\linkS4class{dmDSprecision}} class by adding the full model Dirichlet-multinomial (DM) and beta-binomial (BB) likelihoods, regression coefficients and feature proportion estimates. Result of calling the \code{\link{dmFit}} function. } \section{Slots}{ \describe{ \item{\code{design_fit_full}}{Numeric matrix of the design used to fit the full model.} \item{\code{fit_full}}{\code{\linkS4class{MatrixList}} containing estimated feature ratios in each sample based on the full Dirichlet-multinomial (DM) model.} \item{\code{lik_full}}{Numeric vector of the per gene DM full model likelihoods.} \item{\code{coef_full}}{\code{\linkS4class{MatrixList}} with the regression coefficients based on the DM model.} \item{\code{fit_full_bb}}{\code{\linkS4class{MatrixList}} containing estimated feature ratios in each sample based on the full beta-binomial (BB) model.} \item{\code{lik_full_bb}}{Numeric vector of the per gene BB full model likelihoods.} \item{\code{coef_full_bb}}{\code{\linkS4class{MatrixList}} with the regression coefficients based on the BB model.} }} \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) plotPrecision(d) head(mean_expression(d)) common_precision(d) head(genewise_precision(d)) ## Fit full model proportions d <- dmFit(d, design = design_full) ## Get fitted proportions head(proportions(d)) ## Get the DM regression coefficients (gene-level) head(coefficients(d)) ## Get the BB regression coefficients (feature-level) head(coefficients(d), level = "feature") } } \seealso{ \code{\linkS4class{dmDSdata}}, \code{\linkS4class{dmDSprecision}}, \code{\linkS4class{dmDStest}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmDSprecision-class.Rd0000644000175200017520000001145314710222503017710 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDSprecision.R \docType{class} \name{dmDSprecision-class} \alias{dmDSprecision-class} \alias{design,dmDSprecision-method} \alias{mean_expression} \alias{mean_expression,dmDSprecision-method} \alias{common_precision} \alias{common_precision,dmDSprecision-method} \alias{common_precision<-} \alias{common_precision<-,dmDSprecision-method} \alias{genewise_precision} \alias{genewise_precision,dmDSprecision-method} \alias{genewise_precision<-} \alias{genewise_precision<-,dmDSprecision-method} \title{dmDSprecision object} \usage{ \S4method{design}{dmDSprecision}(object, type = "precision") mean_expression(x, ...) \S4method{mean_expression}{dmDSprecision}(x) common_precision(x, ...) \S4method{common_precision}{dmDSprecision}(x) common_precision(x) <- value \S4method{common_precision}{dmDSprecision}(x) <- value genewise_precision(x, ...) \S4method{genewise_precision}{dmDSprecision}(x) genewise_precision(x) <- value \S4method{genewise_precision}{dmDSprecision}(x) <- value } \arguments{ \item{type}{Character indicating which design matrix should be returned. Possible values \code{"precision"}, \code{"full_model"} or \code{"null_model"}.} \item{x, object}{dmDSprecision object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{value}{Values that replace current attributes.} } \value{ \itemize{ \item \code{mean_expression(x)}: Get a data frame with mean gene expression. \item \code{common_precision(x), common_precision(x) <- value}: Get or set common precision. \code{value} must be numeric of length 1. \item \code{genewise_precision(x), genewise_precision(x) <- value}: Get a data frame with gene-wise precision or set new gene-wise precision. \code{value} must be a data frame with "gene_id" and "genewise_precision" columns. } } \description{ dmDSprecision extends the \code{\linkS4class{dmDSdata}} by adding the precision estimates of the Dirichlet-multinomial distribution used to model the feature (e.g., transcript, exon, exonic bin) counts for each gene in the differential usage analysis. Result of calling the \code{\link{dmPrecision}} function. } \details{ Normally, in the differential analysis based on RNA-seq data, such as, for example, differential gene expression, dispersion (of negative-binomial model) is estimated. Here, we estimate precision of the Dirichlet-multinomial model as it is more convenient computationally. To obtain dispersion estimates, one can use a formula: dispersion = 1 / (1 + precision). } \section{Slots}{ \describe{ \item{\code{mean_expression}}{Numeric vector of mean gene expression.} \item{\code{common_precision}}{Numeric value of estimated common precision.} \item{\code{genewise_precision}}{Numeric vector of estimated gene-wise precisions.} \item{\code{design_precision}}{Numeric matrix of the design used to estimate precision.} }} \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) plotPrecision(d) head(mean_expression(d)) common_precision(d) head(genewise_precision(d)) } } \seealso{ \code{\linkS4class{dmDSdata}}, \code{\linkS4class{dmDSfit}}, \code{\linkS4class{dmDStest}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmDStest-class.Rd0000644000175200017520000001155414710222503016676 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDStest.R \docType{class} \name{dmDStest-class} \alias{dmDStest-class} \alias{design,dmDStest-method} \alias{results} \alias{results,dmDStest-method} \title{dmDStest object} \usage{ \S4method{design}{dmDStest}(object, type = "null_model") results(x, ...) \S4method{results}{dmDStest}(x, level = "gene") } \arguments{ \item{type}{Character indicating which design matrix should be returned. Possible values \code{"precision"}, \code{"full_model"} or \code{"null_model"}.} \item{x, object}{dmDStest object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{level}{Character specifying which type of results to return. Possible values \code{"gene"} or \code{"feature"}.} } \value{ \itemize{ \item \code{results(x)}: get a data frame with gene-level or feature-level results.} } \description{ dmDStest extends the \code{\linkS4class{dmDSfit}} class by adding the null model Dirichlet-multinomial (DM) and beta-binomial (BB) likelihoods and the gene-level and feature-level results of testing for differential exon/transcript usage. Result of calling the \code{\link{dmTest}} function. } \section{Slots}{ \describe{ \item{\code{design_fit_null}}{Numeric matrix of the design used to fit the null model.} \item{\code{lik_null}}{Numeric vector of the per gene DM null model likelihoods.} \item{\code{lik_null_bb}}{Numeric vector of the per gene BB null model likelihoods.} \item{\code{results_gene}}{Data frame with the gene-level results including: \code{gene_id} - gene IDs, \code{lr} - likelihood ratio statistics based on the DM model, \code{df} - degrees of freedom, \code{pvalue} - p-values and \code{adj_pvalue} - Benjamini & Hochberg adjusted p-values.} \item{\code{results_feature}}{Data frame with the feature-level results including: \code{gene_id} - gene IDs, \code{feature_id} - feature IDs, \code{lr} - likelihood ratio statistics based on the BB model, \code{df} - degrees of freedom, \code{pvalue} - p-values and \code{adj_pvalue} - Benjamini & Hochberg adjusted p-values.} }} \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) plotPrecision(d) head(mean_expression(d)) common_precision(d) head(genewise_precision(d)) ## Fit full model proportions d <- dmFit(d, design = design_full) ## Get fitted proportions head(proportions(d)) ## Get the DM regression coefficients (gene-level) head(coefficients(d)) ## Get the BB regression coefficients (feature-level) head(coefficients(d), level = "feature") ## Fit null model proportions and perform the LR test to detect DTU d <- dmTest(d, coef = "groupKD") ## Plot the gene-level p-values plotPValues(d) ## Get the gene-level results head(results(d)) ## Plot feature proportions for a top DTU gene res <- results(d) res <- res[order(res$pvalue, decreasing = FALSE), ] top_gene_id <- res$gene_id[1] plotProportions(d, gene_id = top_gene_id, group_variable = "group") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "lineplot") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "ribbonplot") } \seealso{ \code{\linkS4class{dmDSdata}}, \code{\linkS4class{dmDSprecision}}, \code{\linkS4class{dmDSfit}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmFilter.Rd0000644000175200017520000001571514710222503015615 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDSdata.R, R/class_dmSQTLdata.R \docType{methods} \name{dmFilter} \alias{dmFilter} \alias{dmFilter,dmDSdata-method} \alias{dmFilter,dmSQTLdata-method} \title{Filtering} \usage{ dmFilter(x, ...) \S4method{dmFilter}{dmDSdata}(x, min_samps_gene_expr = 0, min_samps_feature_expr = 0, min_samps_feature_prop = 0, min_gene_expr = 0, min_feature_expr = 0, min_feature_prop = 0, run_gene_twice = FALSE) \S4method{dmFilter}{dmSQTLdata}(x, min_samps_gene_expr = 0, min_samps_feature_expr = 0, min_samps_feature_prop = 0, minor_allele_freq = 0.05 * nrow(samples(x)), min_gene_expr = 0, min_feature_expr = 0, min_feature_prop = 0, BPPARAM = BiocParallel::SerialParam()) } \arguments{ \item{x}{\code{\linkS4class{dmDSdata}} or \code{\linkS4class{dmSQTLdata}} object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{min_samps_gene_expr}{Minimal number of samples where genes should be expressed. See Details.} \item{min_samps_feature_expr}{Minimal number of samples where features should be expressed. See Details.} \item{min_samps_feature_prop}{Minimal number of samples where features should be expressed. See details.} \item{min_gene_expr}{Minimal gene expression.} \item{min_feature_expr}{Minimal feature expression.} \item{min_feature_prop}{Minimal proportion for feature expression. This value should be between 0 and 1.} \item{run_gene_twice}{Whether to re-run the gene-level filter after the feature-level filters.} \item{minor_allele_freq}{Minimal number of samples where each of the genotypes has to be present.} \item{BPPARAM}{Parallelization method used by \code{\link[BiocParallel]{bplapply}}.} } \value{ Returns filtered \code{\linkS4class{dmDSdata}} or \code{\linkS4class{dmSQTLdata}} object. } \description{ Filtering of genes and features with low expression. Additionally, for the dmSQTLdata object, filtering of genotypes with low frequency. } \details{ Filtering parameters should be adjusted according to the sample size of the experiment data and the number of replicates per condition. \code{min_samps_gene_expr} defines the minimal number of samples where genes are required to be expressed at the minimal level of \code{min_gene_expr} in order to be included in the downstream analysis. Ideally, we would like that genes were expressed at some minimal level in all samples because this would lead to better estimates of feature ratios. Similarly, \code{min_samps_feature_expr} and \code{min_samps_feature_prop} defines the minimal number of samples where features are required to be expressed at the minimal levels of counts \code{min_feature_expr} or proportions \code{min_feature_prop}. In differential transcript/exon usage analysis, we suggest using \code{min_samps_feature_expr} and \code{min_samps_feature_prop} equal to the minimal number of replicates in any of the conditions. For example, in an assay with 3 versus 5 replicates, we would set these parameters to 3, which allows a situation where a feature is expressed in one condition but may not be expressed at all in another one, which is an example of differential transcript/exon usage. By default, all the filtering parameters equal zero which means that features with zero expression in all samples are removed as well as genes with only one non-zero feature. In QTL analysis, usually, we deal with data that has many more replicates than data from a standard differential usage assay. Our example data set consists of 91 samples. Requiring that genes are expressed in all samples may be too stringent, especially since there may be missing values in the data and for some genes you may not observe counts in all 91 samples. Slightly lower threshold ensures that we do not eliminate such genes. For example, if \code{min_samps_gene_expr = 70} and \code{min_gene_expr = 10}, only genes with expression of at least 10 in at least 70 samples are kept. Samples with expression lower than 10 have \code{NA}s assigned and are skipped in the analysis of this gene. \code{minor_allele_freq} indicates the minimal number of samples for the minor allele presence. Usually, it is equal to roughly 5\% of total samples. } \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) } # -------------------------------------------------------------------------- # Create dmSQTLdata object # -------------------------------------------------------------------------- # Use subsets of data defined in the GeuvadisTranscriptExpr package library(GeuvadisTranscriptExpr) \donttest{ geuv_counts <- GeuvadisTranscriptExpr::counts geuv_genotypes <- GeuvadisTranscriptExpr::genotypes geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") colnames(geuv_genotypes)[4] <- "snp_id" geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, samples = geuv_samples, window = 5e3) # -------------------------------------------------------------------------- # sQTL analysis - simple group comparison # -------------------------------------------------------------------------- ## Filtering d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) plotData(d) } } \seealso{ \code{\link{plotData}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmFit.Rd0000644000175200017520000001523714710222503015111 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDSfit.R, R/class_dmSQTLfit.R \docType{methods} \name{dmFit} \alias{dmFit} \alias{dmFit,dmDSprecision-method} \alias{dmFit,dmSQTLprecision-method} \title{Fit the Dirichlet-multinomial and/or the beta-binomial full model regression} \usage{ dmFit(x, ...) \S4method{dmFit}{dmDSprecision}(x, design, one_way = TRUE, bb_model = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, add_uniform = FALSE, BPPARAM = BiocParallel::SerialParam()) \S4method{dmFit}{dmSQTLprecision}(x, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, BPPARAM = BiocParallel::SerialParam()) } \arguments{ \item{x}{\code{\linkS4class{dmDSprecision}} or \code{\linkS4class{dmSQTLprecision}} object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{design}{Numeric matrix defining the full model.} \item{one_way}{Logical. Should the shortcut fitting be used when the design corresponds to multiple group comparison. This is a similar approach as in \code{\link{edgeR}}. If \code{TRUE} (the default), then proportions are fitted per group and regression coefficients are recalculated from those fits.} \item{bb_model}{Logical. Whether to perform the feature-level analysis using the beta-binomial model.} \item{prop_mode}{Optimization method used to estimate proportions. Possible value \code{"constrOptim"}.} \item{prop_tol}{The desired accuracy when estimating proportions.} \item{coef_mode}{Optimization method used to estimate regression coefficients. Possible value \code{"optim"}.} \item{coef_tol}{The desired accuracy when estimating regression coefficients.} \item{verbose}{Numeric. Definie the level of progress messages displayed. 0 - no messages, 1 - main messages, 2 - message for every gene fitting.} \item{add_uniform}{Whether to add a small fractional count to zeros, (adding a uniform random variable between 0 and 0.1). This option allows for the fitting of genewise precision and coefficients for genes with two features having all zero for one group, or the last feature having all zero for one group.} \item{BPPARAM}{Parallelization method used by \code{\link[BiocParallel]{bplapply}}.} } \value{ Returns a \code{\linkS4class{dmDSfit}} or \code{\linkS4class{dmSQTLfit}} object. } \description{ Obtain the maximum likelihood estimates of Dirichlet-multinomial (gene-level) and/or beta-binomial (feature-level) regression coefficients, feature proportions in each sample and corresponding likelihoods. In the differential exon/transcript usage analysis, the regression model is defined by a design matrix. In the exon/transcript usage QTL analysis, regression models are defined by genotypes. Currently, beta-binomial model is implemented only in the differential usage analysis. } \details{ In the regression framework here, we adapt the idea from \code{\link[edgeR]{glmFit}} in \code{\link{edgeR}} about using a shortcut algorithm when the design is equivalent to simple group fitting. In such a case, we estimate the DM proportions for each group of samples separately and then recalculate the DM (and/or the BB) regression coefficients corresponding to the design matrix. If the design matrix does not define a simple group fitting, for example, when it contains a column with continuous values, then the regression framework is used to directly estimate the regression coefficients. Arguments that are used for the proportion estimation in each group when the shortcut fitting can be used start with \code{prop_}, and those that are used in the regression framework start with \code{coef_}. In the differential transcript usage analysis, setting \code{one_way = TRUE} allows switching to the shortcut algorithm only if the design is equivalent to simple group fitting. \code{one_way = FALSE} forces usage of the regression framework. In the QTL analysis, currently, genotypes are defined as numeric values 0, 1, and 2. When \code{one_way = TRUE}, simple multiple group fitting is performed. When \code{one_way = FALSE}, a regression framework is used with the design matrix defined by a formula \code{~ group} where group is a continuous (not categorical) variable with values 0, 1, and 2. } \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) plotPrecision(d) head(mean_expression(d)) common_precision(d) head(genewise_precision(d)) ## Fit full model proportions d <- dmFit(d, design = design_full) ## Get fitted proportions head(proportions(d)) ## Get the DM regression coefficients (gene-level) head(coefficients(d)) ## Get the BB regression coefficients (feature-level) head(coefficients(d), level = "feature") } } \references{ McCarthy, DJ, Chen, Y, Smyth, GK (2012). Differential expression analysis of multifactor RNA-Seq experiments with respect to biological variation. Nucleic Acids Research 40, 4288-4297. } \seealso{ \code{\link{plotProportions}} \code{\link[edgeR]{glmFit}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmPrecision.Rd0000644000175200017520000002234414710222503016317 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDSprecision.R, % R/class_dmSQTLprecision.R \docType{methods} \name{dmPrecision} \alias{dmPrecision} \alias{dmPrecision,dmDSdata-method} \alias{dmPrecision,dmSQTLdata-method} \title{Estimate the precision parameter in the Dirichlet-multinomial model} \usage{ dmPrecision(x, ...) \S4method{dmPrecision}{dmDSdata}(x, design, mean_expression = TRUE, common_precision = TRUE, genewise_precision = TRUE, prec_adjust = TRUE, prec_subset = 0.1, prec_interval = c(0, 1000), prec_tol = 10, prec_init = 100, prec_grid_length = 21, prec_grid_range = c(-10, 10), prec_moderation = "trended", prec_prior_df = 0, prec_span = 0.1, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, add_uniform = FALSE, BPPARAM = BiocParallel::SerialParam()) \S4method{dmPrecision}{dmSQTLdata}(x, mean_expression = TRUE, common_precision = TRUE, genewise_precision = TRUE, prec_adjust = TRUE, prec_subset = 0.1, prec_interval = c(0, 1000), prec_tol = 10, prec_init = 100, prec_grid_length = 21, prec_grid_range = c(-10, 10), prec_moderation = "none", prec_prior_df = 0, prec_span = 0.1, one_way = TRUE, speed = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, BPPARAM = BiocParallel::SerialParam()) } \arguments{ \item{x}{\code{\linkS4class{dmDSdata}} or \code{\linkS4class{dmSQTLdata}} object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{design}{Numeric matrix defining the model that should be used when estimating precision. Normally this should be a full model design used also in \code{\link{dmFit}}.} \item{mean_expression}{Logical. Whether to estimate the mean expression of genes.} \item{common_precision}{Logical. Whether to estimate the common precision.} \item{genewise_precision}{Logical. Whether to estimate the gene-wise precision.} \item{prec_adjust}{Logical. Whether to use the Cox-Reid adjusted or non-adjusted profile likelihood.} \item{prec_subset}{Value from 0 to 1 defining the percentage of genes used in common precision estimation. The default is 0.1, which uses 10% of randomly selected genes to speed up the precision estimation process. Use \code{set.seed} function to make the analysis reproducible. See Examples.} \item{prec_interval}{Numeric vector of length 2 defining the interval of possible values for the common precision.} \item{prec_tol}{The desired accuracy when estimating common precision.} \item{prec_init}{Initial precision. If \code{common_precision} is \code{TRUE}, then \code{prec_init} is overwritten by common precision estimate.} \item{prec_grid_length}{Length of the search grid.} \item{prec_grid_range}{Vector giving the limits of grid interval.} \item{prec_moderation}{Precision moderation method. One can choose to shrink the precision estimates toward the common precision (\code{"common"}) or toward the (precision versus mean expression) trend (\code{"trended"})} \item{prec_prior_df}{Degree of moderation (shrinkage) in case when it can not be calculated automaticaly (number of genes on the upper boundary of grid is smaller than 10). By default it is equal to 0.} \item{prec_span}{Value from 0 to 1 defining the percentage of genes used in smoothing sliding window when calculating the precision versus mean expression trend.} \item{one_way}{Logical. Should the shortcut fitting be used when the design corresponds to multiple group comparison. This is a similar approach as in \code{\link{edgeR}}. If \code{TRUE} (the default), then proportions are fitted per group and regression coefficients are recalculated from those fits.} \item{prop_mode}{Optimization method used to estimate proportions. Possible value \code{"constrOptim"}.} \item{prop_tol}{The desired accuracy when estimating proportions.} \item{coef_mode}{Optimization method used to estimate regression coefficients. Possible value \code{"optim"}.} \item{coef_tol}{The desired accuracy when estimating regression coefficients.} \item{verbose}{Numeric. Definie the level of progress messages displayed. 0 - no messages, 1 - main messages, 2 - message for every gene fitting.} \item{add_uniform}{Whether to add a small fractional count to zeros, (adding a uniform random variable between 0 and 0.1). This option allows for the fitting of genewise precision and coefficients for genes with two features having all zero for one group, or the last feature having all zero for one group.} \item{BPPARAM}{Parallelization method used by \code{\link[BiocParallel]{bplapply}}.} \item{speed}{Logical. If \code{FALSE}, precision is calculated per each gene-block. Such calculation may take a long time, since there can be hundreds of SNPs/blocks per gene. If \code{TRUE}, there will be only one precision calculated per gene and it will be assigned to all the blocks matched with this gene.} } \value{ Returns a \code{\linkS4class{dmDSprecision}} or \code{\linkS4class{dmSQTLprecision}} object. } \description{ Maximum likelihood estimates of the precision parameter in the Dirichlet-multinomial model used for the differential exon/transcript usage or QTL analysis. } \details{ Normally, in the differential analysis based on RNA-seq data, such as, for example, differential gene expression, dispersion (of negative-binomial model) is estimated. Here, we estimate precision of the Dirichlet-multinomial model as it is more convenient computationally. To obtain dispersion estimates, one can use a formula: dispersion = 1 / (1 + precision). Parameters that are used in the precision (dispersion = 1 / (1 + precision)) estimation start with prefix \code{prec_}. Those that are used for the proportion estimation in each group when the shortcut fitting \code{one_way = TRUE} can be used start with \code{prop_}, and those that are used in the regression framework start with \code{coef_}. There are two optimization methods implemented within dmPrecision: \code{"optimize"} for the common precision and \code{"grid"} for the gene-wise precision. Only part of the precision parameters in dmPrecision have an influence on a given optimization method. Here is a list of such active parameters: \code{"optimize"}: \itemize{ \item \code{prec_interval}: Passed as \code{interval}. \item \code{prec_tol}: The accuracy defined as \code{tol}. } \code{"grid"}, which uses the grid approach from \code{\link[edgeR]{estimateDisp}} in \code{\link{edgeR}}: \itemize{ \item \code{prec_init}, \code{prec_grid_length}, \code{prec_grid_range}: Parameters used to construct the search grid \code{prec_init * 2^seq(from = prec_grid_range[1]}, \code{to = prec_grid_range[2]}, \code{length = prec_grid_length)}. \item \code{prec_moderation}: Dipsersion shrinkage is available only with \code{"grid"} method. \item \code{prec_prior_df}: Used only when precision shrinkage is activated. Moderated likelihood is equal to \code{loglik + prec_prior_df * moderation}. Higher \code{prec_prior_df}, more shrinkage toward common or trended precision is applied. \item \code{prec_span}: Used only when precision moderation toward trend is activated. } } \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) plotPrecision(d) head(mean_expression(d)) common_precision(d) head(genewise_precision(d)) } } \references{ McCarthy, DJ, Chen, Y, Smyth, GK (2012). Differential expression analysis of multifactor RNA-Seq experiments with respect to biological variation. Nucleic Acids Research 40, 4288-4297. } \seealso{ \code{\link{plotPrecision}} \code{\link[edgeR]{estimateDisp}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmSQTLdata-class.Rd0000644000175200017520000000571614710222503017110 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmSQTLdata.R \docType{class} \name{dmSQTLdata-class} \alias{dmSQTLdata-class} \alias{counts,dmSQTLdata-method} \alias{samples,dmSQTLdata-method} \alias{names,dmSQTLdata-method} \alias{length,dmSQTLdata-method} \alias{[,dmSQTLdata,ANY-method} \alias{[,dmSQTLdata-method} \title{dmSQTLdata object} \usage{ \S4method{counts}{dmSQTLdata}(object) \S4method{samples}{dmSQTLdata}(x) \S4method{names}{dmSQTLdata}(x) \S4method{length}{dmSQTLdata}(x) \S4method{[}{dmSQTLdata,ANY}(x, i, j) } \arguments{ \item{x, object}{dmSQTLdata object.} \item{i, j}{Parameters used for subsetting.} } \value{ \itemize{ \item \code{names(x)}: Get the gene names. \item \code{length(x)}: Get the number of genes. \item \code{x[i, j]}: Get a subset of dmDSdata object that consists of counts, genotypes and blocks corresponding to genes i and samples j. } } \description{ dmSQTLdata contains genomic feature expression (counts), genotypes and sample information needed for the transcript/exon usage QTL analysis. It can be created with function \code{\link{dmSQTLdata}}. } \section{Slots}{ \describe{ \item{\code{counts}}{\code{\linkS4class{MatrixList}} of expression, in counts, of genomic features. Rows correspond to genomic features, such as exons or transcripts. Columns correspond to samples. MatrixList is partitioned in a way that each of the matrices in a list contains counts for a single gene.} \item{\code{genotypes}}{MatrixList of unique genotypes. Rows correspond to blocks, columns to samples. Each matrix in this list is a collection of unique genotypes that are matched with a given gene.} \item{\code{blocks}}{MatrixList with two columns \code{block_id} and \code{snp_id}. For each gene, it identifies SNPs with identical genotypes across the samples and assigns them to blocks.} \item{\code{samples}}{Data frame with information about samples. It must contain variable \code{sample_id} with unique sample names.} }} \examples{ # -------------------------------------------------------------------------- # Create dmSQTLdata object # -------------------------------------------------------------------------- # Use subsets of data defined in the GeuvadisTranscriptExpr package library(GeuvadisTranscriptExpr) \donttest{ geuv_counts <- GeuvadisTranscriptExpr::counts geuv_genotypes <- GeuvadisTranscriptExpr::genotypes geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") colnames(geuv_genotypes)[4] <- "snp_id" geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, samples = geuv_samples, window = 5e3) } } \seealso{ \code{\linkS4class{dmSQTLprecision}}, \code{\linkS4class{dmSQTLfit}}, \code{\linkS4class{dmSQTLtest}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmSQTLdata.Rd0000644000175200017520000000661414710222503016003 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmSQTLdata.R \name{dmSQTLdata} \alias{dmSQTLdata} \title{Create dmSQTLdata object} \usage{ dmSQTLdata(counts, gene_ranges, genotypes, snp_ranges, samples, window = 5000, BPPARAM = BiocParallel::SerialParam()) } \arguments{ \item{counts}{Data frame with counts. Rows correspond to features, for example, transcripts or exons. This data frame has to contain a \code{gene_id} column with gene IDs, \code{feature_id} column with feature IDs and columns with counts for each sample. Column names corresponding to sample IDs must be the same as in the \code{sample} data frame.} \item{gene_ranges}{\code{\linkS4class{GRanges}} object with gene location. It must contain gene names when calling names().} \item{genotypes}{Data frame with genotypes. Rows correspond to SNPs. This data frame has to contain a \code{snp_id} column with SNP IDs and columns with genotypes for each sample. Column names corresponding to sample IDs must be the same as in the \code{sample} data frame. The genotype of each sample is coded in the following way: 0 for ref/ref, 1 for ref/not ref, 2 for not ref/not ref, -1 or \code{NA} for missing value.} \item{snp_ranges}{\code{\linkS4class{GRanges}} object with SNP location. It must contain SNP names when calling names().} \item{samples}{Data frame with column \code{sample_id} corresponding to unique sample IDs} \item{window}{Size of a down and up stream window, which is defining the surrounding for a gene. Only SNPs that are located within a gene or its surrounding are considered in the sQTL analysis.} \item{BPPARAM}{Parallelization method used by \code{\link[BiocParallel]{bplapply}}.} } \value{ Returns a \code{\linkS4class{dmSQTLdata}} object. } \description{ Constructor functions for a \code{\linkS4class{dmSQTLdata}} object. dmSQTLdata assignes to a gene all the SNPs that are located in a given surrounding (\code{window}) of this gene. } \details{ It is quite common that sample grouping defined by some of the SNPs is identical. Compare \code{dim(genotypes)} and \code{dim(unique(genotypes))}. In our QTL analysis, we do not repeat tests for the SNPs that define the same grouping of samples. Each grouping is tested only once. SNPs that define such unique groupings are aggregated into blocks. P-values and adjusted p-values are estimated at the block level, but the returned results are extended to a SNP level by repeating the block statistics for each SNP that belongs to a given block. } \examples{ # -------------------------------------------------------------------------- # Create dmSQTLdata object # -------------------------------------------------------------------------- # Use subsets of data defined in the GeuvadisTranscriptExpr package library(GeuvadisTranscriptExpr) \donttest{ geuv_counts <- GeuvadisTranscriptExpr::counts geuv_genotypes <- GeuvadisTranscriptExpr::genotypes geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") colnames(geuv_genotypes)[4] <- "snp_id" geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, samples = geuv_samples, window = 5e3) } } \seealso{ \code{\link{plotData}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmSQTLfit-class.Rd0000644000175200017520000000502614710222503016753 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmSQTLfit.R \docType{class} \name{dmSQTLfit-class} \alias{dmSQTLfit-class} \title{dmSQTLfit object} \description{ dmSQTLfit extends the \code{\linkS4class{dmSQTLprecision}} class by adding the full model Dirichlet-multinomial (DM) likelihoods, regression coefficients and feature proportion estimates needed for the transcript/exon usage QTL analysis. Full model is defined by the genotype of a SNP associated with a gene. Estimation takes place for all the genes and all the SNPs/blocks assigned to the genes. Result of \code{\link{dmFit}}. } \section{Slots}{ \describe{ \item{\code{fit_full}}{List of \code{\linkS4class{MatrixList}} objects containing estimated feature ratios in each sample based on the full Dirichlet-multinomial (DM) model.} \item{\code{lik_full}}{List of numeric vectors of the per gene DM full model likelihoods.} \item{\code{coef_full}}{\code{\linkS4class{MatrixList}} with the regression coefficients based on the DM model.} }} \examples{ # -------------------------------------------------------------------------- # Create dmSQTLdata object # -------------------------------------------------------------------------- # Use subsets of data defined in the GeuvadisTranscriptExpr package library(GeuvadisTranscriptExpr) \donttest{ geuv_counts <- GeuvadisTranscriptExpr::counts geuv_genotypes <- GeuvadisTranscriptExpr::genotypes geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") colnames(geuv_genotypes)[4] <- "snp_id" geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, samples = geuv_samples, window = 5e3) # -------------------------------------------------------------------------- # sQTL analysis - simple group comparison # -------------------------------------------------------------------------- ## Filtering d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d) plotPrecision(d) ## Fit full model proportions d <- dmFit(d) } } \seealso{ \code{\linkS4class{dmSQTLdata}}, \code{\linkS4class{dmSQTLprecision}}, \code{\linkS4class{dmSQTLtest}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmSQTLprecision-class.Rd0000644000175200017520000000560514710222503020167 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmSQTLprecision.R \docType{class} \name{dmSQTLprecision-class} \alias{dmSQTLprecision-class} \alias{mean_expression,dmSQTLprecision-method} \alias{common_precision,dmSQTLprecision-method} \alias{genewise_precision,dmSQTLprecision-method} \title{dmSQTLprecision object} \usage{ \S4method{mean_expression}{dmSQTLprecision}(x) \S4method{common_precision}{dmSQTLprecision}(x) \S4method{genewise_precision}{dmSQTLprecision}(x) } \arguments{ \item{x}{dmSQTLprecision object.} } \value{ \itemize{ \item \code{mean_expression(x)}: Get a data frame with mean gene expression. \item \code{common_precision(x)}: Get common precision. \item \code{genewise_precision(x)}: Get a data frame with gene-wise precision.} } \description{ dmSQTLprecision extends the \code{\linkS4class{dmSQTLdata}} by adding the precision estimates of Dirichlet-multinomial distribution used to model the feature (e.g., transcript, exon, exonic bin) counts for each gene-SNP pair in the QTL analysis. Result of \code{\link{dmPrecision}}. } \section{Slots}{ \describe{ \item{\code{mean_expression}}{Numeric vector of mean gene expression.} \item{\code{common_precision}}{Numeric value of estimated common precision.} \item{\code{genewise_precision}}{List of estimated gene-wise precisions. Each element of this list is a vector of precisions estimated for all the genotype blocks assigned to a given gene.} }} \examples{ # -------------------------------------------------------------------------- # Create dmSQTLdata object # -------------------------------------------------------------------------- # Use subsets of data defined in the GeuvadisTranscriptExpr package library(GeuvadisTranscriptExpr) \donttest{ geuv_counts <- GeuvadisTranscriptExpr::counts geuv_genotypes <- GeuvadisTranscriptExpr::genotypes geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") colnames(geuv_genotypes)[4] <- "snp_id" geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, samples = geuv_samples, window = 5e3) # -------------------------------------------------------------------------- # sQTL analysis - simple group comparison # -------------------------------------------------------------------------- ## Filtering d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d) plotPrecision(d) } } \seealso{ \code{\linkS4class{dmSQTLdata}}, \code{\linkS4class{dmSQTLfit}}, \code{\linkS4class{dmSQTLtest}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmSQTLtest-class.Rd0000644000175200017520000000567514710222503017162 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmSQTLtest.R \docType{class} \name{dmSQTLtest-class} \alias{dmSQTLtest-class} \alias{results,dmSQTLtest-method} \title{dmSQTLtest object} \usage{ \S4method{results}{dmSQTLtest}(x) } \arguments{ \item{x}{dmSQTLtest object.} \item{...}{Other parameters that can be defined by methods using this generic.} } \value{ \itemize{ \item \code{results(x)}: Get a data frame with gene-level results. } } \description{ dmSQTLtest extends the \code{\linkS4class{dmSQTLfit}} class by adding the null model Dirichlet-multinomial likelihoods and the gene-level results of testing for differential transcript/exon usage QTLs. Result of \code{\link{dmTest}}. } \section{Slots}{ \describe{ \item{\code{lik_null}}{List of numeric vectors with the per gene-snp DM null model likelihoods.} \item{\code{results_gene}}{Data frame with the gene-level results including: \code{gene_id} - gene IDs, \code{block_id} - block IDs, \code{snp_id} - SNP IDs, \code{lr} - likelihood ratio statistics based on the DM model, \code{df} - degrees of freedom, \code{pvalue} - p-values estimated based on permutations and \code{adj_pvalue} - Benjamini & Hochberg adjusted p-values.} }} \examples{ # -------------------------------------------------------------------------- # Create dmSQTLdata object # -------------------------------------------------------------------------- # Use subsets of data defined in the GeuvadisTranscriptExpr package library(GeuvadisTranscriptExpr) geuv_counts <- GeuvadisTranscriptExpr::counts geuv_genotypes <- GeuvadisTranscriptExpr::genotypes geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") colnames(geuv_genotypes)[4] <- "snp_id" geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, samples = geuv_samples, window = 5e3) # -------------------------------------------------------------------------- # sQTL analysis - simple group comparison # -------------------------------------------------------------------------- ## Filtering d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d) plotPrecision(d) ## Fit full model proportions d <- dmFit(d) ## Fit null model proportions, perform the LR test to detect tuQTLs ## and use the permutation approach to adjust the p-values d <- dmTest(d) ## Plot the gene-level p-values plotPValues(d) ## Get the gene-level results head(results(d)) } \seealso{ \code{\linkS4class{dmSQTLdata}}, \code{\linkS4class{dmSQTLprecision}}, \code{\linkS4class{dmSQTLfit}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmTest.Rd0000644000175200017520000001553214710222503015304 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDStest.R, R/class_dmSQTLtest.R \docType{methods} \name{dmTest} \alias{dmTest} \alias{dmTest,dmDSfit-method} \alias{dmTest,dmSQTLfit-method} \title{Likelihood ratio test to detect differential transcript/exon usage} \usage{ dmTest(x, ...) \S4method{dmTest}{dmDSfit}(x, coef = NULL, design = NULL, contrast = NULL, one_way = TRUE, bb_model = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, BPPARAM = BiocParallel::SerialParam()) \S4method{dmTest}{dmSQTLfit}(x, permutation_mode = "all_genes", one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, BPPARAM = BiocParallel::SerialParam()) } \arguments{ \item{x}{\code{\linkS4class{dmDSfit}} or \code{\linkS4class{dmSQTLfit}} object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{coef}{Integer or character vector indicating which coefficients of the linear model are to be tested equal to zero. Values must indicate column numbers or column names of the \code{design} used in \code{\link{dmFit}}.} \item{design}{Numeric matrix defining the null model.} \item{contrast}{Numeric vector or matrix specifying one or more contrasts of the linear model coefficients to be tested equal to zero. For a matrix, number of rows (for a vector, its length) must equal to the number of columns of \code{design} used in \code{\link{dmFit}}.} \item{one_way}{Logical. Should the shortcut fitting be used when the design corresponds to multiple group comparison. This is a similar approach as in \code{\link{edgeR}}. If \code{TRUE} (the default), then proportions are fitted per group and regression coefficients are recalculated from those fits.} \item{bb_model}{Logical. Whether to perform the feature-level analysis using the beta-binomial model.} \item{prop_mode}{Optimization method used to estimate proportions. Possible value \code{"constrOptim"}.} \item{prop_tol}{The desired accuracy when estimating proportions.} \item{coef_mode}{Optimization method used to estimate regression coefficients. Possible value \code{"optim"}.} \item{coef_tol}{The desired accuracy when estimating regression coefficients.} \item{verbose}{Numeric. Definie the level of progress messages displayed. 0 - no messages, 1 - main messages, 2 - message for every gene fitting.} \item{BPPARAM}{Parallelization method used by \code{\link[BiocParallel]{bplapply}}.} \item{permutation_mode}{Character specifying which permutation scheme to apply for p-value calculation. When equal to \code{"all_genes"}, null distribution of p-values is calculated from all genes and the maximum number of permutation cycles is 10. When \code{permutation_mode = "per_gene"}, null distribution of p-values is calculated for each gene separately based on permutations of this individual gene. The latter approach may take a lot of computational time. We suggest using the first option.} } \value{ Returns a \code{\linkS4class{dmDStest}} or \code{\linkS4class{dmSQTLtest}} object. } \description{ First, estimate the null Dirichlet-multinomial and beta-binomial model parameters and likelihoods using the null model design. Second, perform the gene-level (DM model) and feature-level (BB model) likelihood ratio tests. In the differential exon/transcript usage analysis, the null model is defined by the null design matrix. In the exon/transcript usage QTL analysis, null models are defined by a design with intercept only. Currently, beta-binomial model is implemented only in the differential usage analysis. } \details{ One must specify one of the arguments: \code{coef}, \code{design} or \code{contrast}. When \code{contrast} is used to define the null model, the null design matrix is recalculated using the same approach as in \code{\link[edgeR]{glmLRT}} function from \code{\link{edgeR}}. } \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) plotPrecision(d) head(mean_expression(d)) common_precision(d) head(genewise_precision(d)) ## Fit full model proportions d <- dmFit(d, design = design_full) ## Get fitted proportions head(proportions(d)) ## Get the DM regression coefficients (gene-level) head(coefficients(d)) ## Get the BB regression coefficients (feature-level) head(coefficients(d), level = "feature") ## Fit null model proportions and perform the LR test to detect DTU d <- dmTest(d, coef = "groupKD") ## Plot the gene-level p-values plotPValues(d) ## Get the gene-level results head(results(d)) ## Plot feature proportions for a top DTU gene res <- results(d) res <- res[order(res$pvalue, decreasing = FALSE), ] top_gene_id <- res$gene_id[1] plotProportions(d, gene_id = top_gene_id, group_variable = "group") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "lineplot") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "ribbonplot") } } \references{ McCarthy, DJ, Chen, Y, Smyth, GK (2012). Differential expression analysis of multifactor RNA-Seq experiments with respect to biological variation. Nucleic Acids Research 40, 4288-4297. } \seealso{ \code{\link{plotPValues}} \code{\link[edgeR]{glmLRT}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dm_plotDataDSInfo.Rd0000644000175200017520000000077114710222503017336 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/dm_plotData.R \name{dm_plotDataDSInfo} \alias{dm_plotDataDSInfo} \title{Plot the frequency of present features} \usage{ dm_plotDataDSInfo(info, ds_info) } \arguments{ \item{info}{Data frame with \code{gene_id} and \code{feature_id} of ALL features} \item{ds_info}{Data frame with \code{gene_id} and \code{feature_id} of ONLY DS features} } \value{ \code{ggplot} object } \description{ Plot the frequency of present features } DRIMSeq/man/dm_plotProportions.Rd0000644000175200017520000000327214710222503017757 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/dm_plotProportions.R \name{dm_plotProportions} \alias{dm_plotProportions} \title{Plot feature proportions} \usage{ dm_plotProportions(counts, group, md = NULL, fit_full = NULL, main = NULL, plot_type = "boxplot1", order_features = TRUE, order_samples = TRUE, group_colors = NULL, feature_colors = NULL) } \arguments{ \item{counts}{Matrix with rows corresponding to features and columns corresponding to samples. Row names are used as labels on the plot.} \item{group}{Factor that groups samples into conditions.} \item{md}{Data frame with additional sample information.} \item{fit_full}{Matrix of estimated proportions with rows corresponding to features and columns corresponding to samples. If \code{NULL}, nothing is plotted.} \item{main}{Character vector with main title for the plot. If \code{NULL}, nothing is plotted.} \item{plot_type}{Character defining the type of the plot produced. Possible values \code{"barplot"}, \code{"boxplot1"}, \code{"boxplot2"}, \code{"lineplot"}, \code{"ribbonplot"}.} \item{order_features}{Logical. Whether to plot the features ordered by their expression.} \item{order_samples}{Logical. Whether to plot the samples ordered by the group variable. If \code{FALSE} order from the \code{sample(x)} is kept.} \item{group_colors}{Character vector with colors for each group.} \item{feature_colors}{Character vector with colors for each feature.} } \value{ \code{ggplot} object with the observed and/or estimated with Dirichlet-multinomial model feature ratios. Estimated proportions are marked with diamond shapes. } \description{ Plot observed and/or estimated feature proportions. } DRIMSeq/man/plotData.Rd0000644000175200017520000000755014710222503015615 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDSdata.R, R/class_dmSQTLdata.R \docType{methods} \name{plotData} \alias{plotData} \alias{plotData,dmDSdata-method} \alias{plotData,dmSQTLdata-method} \title{Plot data summary} \usage{ plotData(x, ...) \S4method{plotData}{dmDSdata}(x) \S4method{plotData}{dmSQTLdata}(x, plot_type = "features") } \arguments{ \item{x}{\code{\linkS4class{dmDSdata}} or \code{\linkS4class{dmSQTLdata}} object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{plot_type}{Character specifying which type of histogram to plot. Possible values \code{"features"}, \code{"snps"} or \code{"blocks"}.} } \value{ Returns a \code{ggplot} object and can be further modified, for example, using \code{theme()}. Plots a histogram of the number of features per gene. Additionally, for \code{\linkS4class{dmSQTLdata}} object, plots a histogram of the number of SNPs per gene and a histogram of the number of unique SNPs (blocks) per gene. } \description{ Plot data summary } \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) } # -------------------------------------------------------------------------- # Create dmSQTLdata object # -------------------------------------------------------------------------- # Use subsets of data defined in the GeuvadisTranscriptExpr package library(GeuvadisTranscriptExpr) \donttest{ geuv_counts <- GeuvadisTranscriptExpr::counts geuv_genotypes <- GeuvadisTranscriptExpr::genotypes geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") colnames(geuv_genotypes)[4] <- "snp_id" geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, samples = geuv_samples, window = 5e3) # -------------------------------------------------------------------------- # sQTL analysis - simple group comparison # -------------------------------------------------------------------------- ## Filtering d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) plotData(d) } } \seealso{ \code{\link{plotPrecision}}, \code{\link{plotProportions}}, \code{\link{plotPValues}} } \author{ Malgorzata Nowicka } DRIMSeq/man/plotPValues.Rd0000644000175200017520000000705014710222503016316 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDStest.R, R/class_dmSQTLtest.R \docType{methods} \name{plotPValues} \alias{plotPValues} \alias{plotPValues,dmDStest-method} \alias{plotPValues,dmSQTLtest-method} \title{Plot p-value distribution} \usage{ plotPValues(x, ...) \S4method{plotPValues}{dmDStest}(x, level = "gene") \S4method{plotPValues}{dmSQTLtest}(x) } \arguments{ \item{x}{\code{\linkS4class{dmDStest}} or \code{\linkS4class{dmSQTLtest}} object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{level}{Character specifying which type of results to return. Possible values \code{"gene"} or \code{"feature"}.} } \value{ Plot a histogram of p-values. } \description{ Plot p-value distribution } \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) plotPrecision(d) head(mean_expression(d)) common_precision(d) head(genewise_precision(d)) ## Fit full model proportions d <- dmFit(d, design = design_full) ## Get fitted proportions head(proportions(d)) ## Get the DM regression coefficients (gene-level) head(coefficients(d)) ## Get the BB regression coefficients (feature-level) head(coefficients(d), level = "feature") ## Fit null model proportions and perform the LR test to detect DTU d <- dmTest(d, coef = "groupKD") ## Plot the gene-level p-values plotPValues(d) ## Get the gene-level results head(results(d)) ## Plot feature proportions for a top DTU gene res <- results(d) res <- res[order(res$pvalue, decreasing = FALSE), ] top_gene_id <- res$gene_id[1] plotProportions(d, gene_id = top_gene_id, group_variable = "group") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "lineplot") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "ribbonplot") } } \seealso{ \code{\link{plotData}}, \code{\link{plotPrecision}}, \code{\link{plotProportions}} } \author{ Malgorzata Nowicka } DRIMSeq/man/plotPrecision.Rd0000644000175200017520000000620114710222503016667 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDSprecision.R, % R/class_dmSQTLprecision.R \docType{methods} \name{plotPrecision} \alias{plotPrecision} \alias{plotPrecision,dmDSprecision-method} \alias{plotPrecision,dmSQTLprecision-method} \title{Precision versus mean expression plot} \usage{ plotPrecision(x, ...) \S4method{plotPrecision}{dmDSprecision}(x) \S4method{plotPrecision}{dmSQTLprecision}(x) } \arguments{ \item{x}{\code{\linkS4class{dmDSprecision}} or \code{\linkS4class{dmSQTLprecision}} object.} \item{...}{Other parameters that can be defined by methods using this generic.} } \value{ Normally in the differential analysis based on RNA-seq data, such plot has dispersion parameter plotted on the y-axis. Here, the y-axis represents precision since in the Dirichlet-multinomial model this is the parameter that is directly estimated. It is important to keep in mind that the precision parameter (gamma0) is inverse proportional to dispersion (theta): theta = 1 / (1 + gamma0). In RNA-seq data, we can typically observe a trend where the dispersion decreases (here, precision increases) for genes with higher mean expression. } \description{ Precision versus mean expression plot } \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) plotPrecision(d) head(mean_expression(d)) common_precision(d) head(genewise_precision(d)) } } \seealso{ \code{\link{plotData}}, \code{\link{plotProportions}}, \code{\link{plotPValues}} } \author{ Malgorzata Nowicka } DRIMSeq/man/plotProportions.Rd0000644000175200017520000001263114710222503017276 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDSfit.R, R/class_dmSQTLfit.R \docType{methods} \name{plotProportions} \alias{plotProportions} \alias{plotProportions,dmDSfit-method} \alias{plotProportions,dmSQTLfit-method} \title{Plot feature proportions} \usage{ plotProportions(x, ...) \S4method{plotProportions}{dmDSfit}(x, gene_id, group_variable, plot_type = "barplot", order_features = TRUE, order_samples = TRUE, plot_fit = TRUE, plot_main = TRUE, group_colors = NULL, feature_colors = NULL) \S4method{plotProportions}{dmSQTLfit}(x, gene_id, snp_id, plot_type = "boxplot1", order_features = TRUE, order_samples = TRUE, plot_fit = FALSE, plot_main = TRUE, group_colors = NULL, feature_colors = NULL) } \arguments{ \item{x}{\code{\linkS4class{dmDSfit}}, \code{\linkS4class{dmDStest}} or \code{\linkS4class{dmSQTLfit}}, \code{\linkS4class{dmSQTLtest}} object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{gene_id}{Character indicating a gene ID to be plotted.} \item{group_variable}{Character indicating the grouping variable which is one of the columns in the \code{samples} slot of \code{x}.} \item{plot_type}{Character defining the type of the plot produced. Possible values \code{"barplot"}, \code{"boxplot1"}, \code{"boxplot2"}, \code{"lineplot"}, \code{"ribbonplot"}.} \item{order_features}{Logical. Whether to plot the features ordered by their expression.} \item{order_samples}{Logical. Whether to plot the samples ordered by the group variable. If \code{FALSE} order from the \code{sample(x)} is kept.} \item{plot_fit}{Logical. Whether to plot the proportions estimated by the full model.} \item{plot_main}{Logical. Whether to plot a title with the information about the Dirichlet-multinomial estimates.} \item{group_colors}{Character vector with colors for each group defined by \code{group_variable}.} \item{feature_colors}{Character vector with colors for each feature of gene defined by \code{gene_id}.} \item{snp_id}{Character indicating the ID of a SNP to be plotted.} } \value{ For a given gene, plot the observed and estimated with Dirichlet-multinomial model feature proportions in each group. Estimated group proportions are marked with diamond shapes. } \description{ This plot is available only for a group design, i.e., a design that is equivalent to multiple group fitting. } \details{ In the QTL analysis, plotting of fitted proportions is deactivated even when \code{plot_fit = TRUE}. It is due to the fact that neither fitted values nor regression coefficients are returned by the \code{dmFit} function as they occupy a lot of memory. } \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) plotPrecision(d) head(mean_expression(d)) common_precision(d) head(genewise_precision(d)) ## Fit full model proportions d <- dmFit(d, design = design_full) ## Get fitted proportions head(proportions(d)) ## Get the DM regression coefficients (gene-level) head(coefficients(d)) ## Get the BB regression coefficients (feature-level) head(coefficients(d), level = "feature") ## Fit null model proportions and perform the LR test to detect DTU d <- dmTest(d, coef = "groupKD") ## Plot the gene-level p-values plotPValues(d) ## Get the gene-level results head(results(d)) ## Plot feature proportions for a top DTU gene res <- results(d) res <- res[order(res$pvalue, decreasing = FALSE), ] top_gene_id <- res$gene_id[1] plotProportions(d, gene_id = top_gene_id, group_variable = "group") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "lineplot") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "ribbonplot") } } \seealso{ \code{\link{plotData}}, \code{\link{plotPrecision}}, \code{\link{plotPValues}} } \author{ Malgorzata Nowicka } DRIMSeq/tests/0000755000175200017520000000000014710222503014136 5ustar00biocbuildbiocbuildDRIMSeq/tests/testthat/0000755000175200017520000000000014710222503015776 5ustar00biocbuildbiocbuildDRIMSeq/tests/testthat.R0000644000175200017520000000007214710222503016120 0ustar00biocbuildbiocbuildlibrary(testthat) library(DRIMSeq) test_check("DRIMSeq") DRIMSeq/tests/testthat/test_MatrixList.R0000644000175200017520000000145014710222503021260 0ustar00biocbuildbiocbuildcontext("MatrixList") x1 <- matrix(1, 10, 6) colnames(x1) <- paste0("C", 1:6) rownames(x1) <- paste0("R1", 1:10) x2 <- matrix(2, 5, 6) colnames(x2) <- paste0("C", 1:6) rownames(x2) <- paste0("R2", 1:5) x <- MatrixList(x1 = x1, x2 = x2) test_that("methods return correct arributes of MatrixList", { expect_equal(names(x), c("x1", "x2")) expect_equal(rownames(x), c(paste0("R1", 1:10), paste0("R2", 1:5))) expect_equal(colnames(x), paste0("C", 1:6)) expect_equal(length(x), 2) expect_equal(elementNROWS(x), c(x1 = 10, x2 = 5)) expect_equal(dim(x), c(15, 6)) expect_equal(nrow(x), 15) expect_equal(ncol(x), 6) }) test_that("subsetting of MatrixList is correct", { expect_equal(x[["x2"]], x2) expect_equal(x$x2, x2) expect_equal(x[1, 1], MatrixList(x1 = x1[, 1, drop = FALSE])) }) DRIMSeq/tests/testthat/test_dm_adjustment.R0000755000175200017520000000037014710222503022021 0ustar00biocbuildbiocbuildcontext("DM adjustement") prec = 10 y = matrix(c(30, 75, 35, 70), nrow = 2) prop = c(0.3, 0.7) test_that("dm_CRadjustmentOneGroup returns the right values", { expect_equal(round(dm_CRadjustmentOneGroup(y, prec, prop), 4), 2.6562) }) DRIMSeq/tests/testthat/test_gene_filter.R0000644000175200017520000000234614710222503021450 0ustar00biocbuildbiocbuildcontext("gene filter") test_that("gene filtering is working", { cts <- matrix(rnbinom(120, mu=100, size=10), ncol=10, dimnames=list(1:12,paste0("s",1:10))) cts[1,] <- 0 cts[2:3,] <- 10 cts[1:3,1] <- c(10,0,0) counts <- data.frame(gene_id=factor(rep(1:4, each=3)), feature_id=factor(1:12), cts) samples <- data.frame(sample_id=paste0("s",1:10), condition=rep(c("A","B"),each=5)) d <- dmDSdata(counts, samples) d <- dmFilter(d, min_samps_gene_expr = 10, min_gene_expr = 10, min_samps_feature_expr = 5, min_feature_expr = 0, min_samps_feature_prop = 5, min_feature_prop = 0) d2 <- dmFilter(d, min_samps_gene_expr = 10, min_gene_expr = 10, min_samps_feature_expr = 5, min_feature_expr = 10, min_samps_feature_prop = 5, min_feature_prop = 0) expect_true(length(d2) == 4) sum(counts(d2[1,])$s1) # has 0 counts for this gene # now use 'run_gene_twice' d3 <- dmFilter(d, min_samps_gene_expr = 10, min_gene_expr = 10, min_samps_feature_expr = 5, min_feature_expr = 10, min_samps_feature_prop = 5, min_feature_prop = 0, run_gene_twice=TRUE) expect_true(length(d3) == 3) }) DRIMSeq/tests/testthat/test_lik_score.R0000755000175200017520000000077114710222503021142 0ustar00biocbuildbiocbuildcontext("DM likelihood and score") prec = 10 y = matrix(c(35, 70, 100, 100), nrow = 2) prop = 0.3 test_that("dm_lik and dm_likG are equal", { expect_equal(dm_lik(prop, prec, y), dm_likG(prop, prec, y)) }) test_that("dm_score and dm_scoreG are equal", { expect_equal(dm_score(prop, prec, y), dm_scoreG(prop, prec, y)) }) y = matrix(c(0, 0, 35, 70), nrow = 2) test_that("dm_lik and dm_likG are diff. for matrix with 0 column", { expect_true(dm_lik(prop, prec, y) < dm_likG(prop, prec, y)) }) DRIMSeq/tests/testthat/test_total_switch.R0000644000175200017520000000202514710222503021663 0ustar00biocbuildbiocbuildcontext("total switch") test_that("total switch retains precision estimates", { cts <- matrix(rnbinom(100, mu=100, size=10), ncol=10, dimnames=list(1:10,paste0("s",1:10))) cts[1,1:5] <- 0 cts[2,6:10] <- 0 counts <- data.frame(gene_id=factor(rep(1:5, each=2)), feature_id=factor(1:10), cts) samples <- data.frame(sample_id=paste0("s",1:10), condition=rep(c("A","B"),each=5)) d <- dmDSdata(counts, samples) design <- model.matrix(~condition, samples(d)) d <- dmPrecision(d, design=design, prec_subset=1) expect_true(is.na(genewise_precision(d)$genewise_precision[1])) d2 <- dmPrecision(d, design=design, prec_subset=1, add_uniform=TRUE) expect_true(!is.na(genewise_precision(d2)$genewise_precision)[1]) d <- dmFit(d, design=design) d <- dmTest(d, coef="conditionB") res <- results(d) expect_true(is.na(res$pvalue[1])) d2 <- dmFit(d2, design=design, add_uniform=TRUE) d2 <- dmTest(d2, coef="conditionB") res <- results(d2) expect_true(!is.na(res$pvalue[1])) }) DRIMSeq/vignettes/0000755000175200017520000000000014710277102015011 5ustar00biocbuildbiocbuildDRIMSeq/vignettes/DRIMSeq.Rnw0000755000175200017520000011250514710222503016707 0ustar00biocbuildbiocbuild%\VignetteIndexEntry{Differential transcript usage and transcript usage QTL analyses in RNA-seq with the DRIMSeq package} %\VignettePackage{DRIMSeq} %\VignetteEngine{knitr::knitr} \documentclass[10pt]{article} <>= BiocStyle::latex() @ \usepackage[utf8]{inputenc} \usepackage[sort]{cite} \usepackage{xstring} \bioctitle[Differential transcript usage and transcript usage QTL analyses in RNA-seq with the DRIMSeq package]{DRIMSeq: Dirichlet-multinomial framework for differential transcript usage and transcript usage QTL analyses in RNA-seq} \author{ Malgorzata Nowicka\thanks{\email{gosia.nowicka@uzh.ch}}, Mark D. Robinson\\ Institute for Molecular Life Sciences, University of Zurich, Switzerland\\ SIB Swiss Institute of Bioinformatics, University of Zurich, Switzerland } \begin{document} \maketitle \packageVersion{\Sexpr{BiocStyle::pkg_ver("DRIMSeq")}} \newpage \tableofcontents \newpage <>= library(knitr) opts_chunk$set(cache = FALSE, warning = FALSE, out.width = "7cm", fig.width = 7, out.height = "7cm", fig.height = 7) @ %------------------------------------------------------------------------------ % Introduction %------------------------------------------------------------------------------ \section{Main changes in the DRIMSeq package} For the full list of changes, type: <>= news(package = "DRIMSeq") @ Implementation of the regression framework in differential transcript usage analysis. It allows fitting more complicated than multiple group comparison experimental designs, for example, one can account for the batch effects or the fact that samples are paired or model continuous time course changes. It enables also testing of more complicated contrasts. Transcript-level analysis based on the beta-binomial model. In this case, each transcript ratio is modeled separately assuming it follows the beta-binomial distribution which is a one-dimensional version of the Dirichlet-multinomial distribution. Based on the fact that when $(Y_1,\ldots,Y_q) \sim DM(\pi_1,\ldots,\pi_q, \gamma_0)$ then $Y_j \sim BB(\pi_j,\gamma_0)$ \cite{Danaher1988}, we do not need to reestimate the beta-binomial parameters, only the likelihoods are recalculated. \Rpackage{DRIMSeq} returns gene-level and transcript-level p-values which can be used as input to the stage-wise testing procedure \cite{VandenBerge2017} as screening and confirmation p-values, respectively. Such approach provides increased power to identify transcripts which are actually differentially used in a gene detected as gene with DTU. Usage of term 'precision' instead of 'dispersion'. In the differential analysis based on the negative-binomial model, dispersion parameter is estimated. This dispersion parameter captures all sources of the inter-library variation between replicates present in the RNA-seq data. In the DM model, we do not directly estimate dispersion but a parameter called precision which is closely linked to dispersion via the formula: $dispersion = 1 / (1 + precision)$. In the previous version of \cite{Nowicka2016}, we used 'dispersion' as a name for the functions and variables calculating and storing, in fact, the precision estimates. Now, we use the term 'precision'. \section{Overview of the Dirichlet-multinomial model} For the statistical details about the Dirichlet-multinomial model, see the \Rpackage{DRIMSeq} paper \cite{Nowicka2016}. In the \Rpackage{DRIMSeq} package we implemented a Dirichlet-multinomial framework that can be used for modeling various multivariate count data with the interest in finding the instances where the ratios of observed features are different between the experimental conditions. Such a model can be applied, for example, in differential transcript usage (DTU) analysis or in the analysis that aim in detecting SNPs that are associated with differential transcript usage (tuQTL analysis). In both cases the multivariate features of a gene are transcripts. The implementation of Dirichlet-multinomial model in \Rpackage{DRIMSeq} package is customized for differential transcript usage and tuQTL analyses, but the data objects used in \Rpackage{DRIMSeq} can contain various types of counts. Therefore, other types of multivariate differential analyses can be performed such as differential methylation analysis or differential polyA usage from polyA-seq data. In short, the method consists of three statistical steps: First, we use the Cox-Reid adjusted profile likelihood to estimate the precision which is inverse proportional to dispersion, i.e., the variability of transcript ratios between samples (replicates) within conditions. Dispersion is needed in order to find the significant changes in transcript ratios between conditions which should be sufficiently stronger than the changes/variability within conditions. Second, we use maximum likelihood to estimate at the gene-level the regression coefficients in the Dirichlet-multinomial (DM) regression, the fitted transcript proportions in each sample and the full model likelihoods. For the analysis at the transcript-level we apply the beta-binomial (BB) regression to each transcript separately. In the differential transcript usage analysis, the full model is defined by the user with the design matrix. In the QTL analysis, full models are defined by the genotypes of SNPs associated with a given gene. Finally, we fit the null model DM and BB regression and use the likelihood ratio statistics to test for the differences in transcript proportions between the full and null models at the gene and transcript level. In the differential transcript usage analysis, the null model is again defined by the user. In the QTL analysis, null models correspond to regression with intercept only. \section{Important notes} Currently, transcript-level analysis based on the BB model are implemented only in the DTU analysis (\Rcode{bb\_model = TRUE}). When the model (full or null) of interest corresponds to multiple (or one) group fitting, then a shortcut algorithm called 'one way' (\Rcode{one\_way = TRUE}), which we adapted from the \Rfunction{glmFit} function in \Biocpkg{edgeR} \cite{McCarthy2012}, can be used. Choosing it is equivalent to running the original \Rpackage{DRIMSeq} implementation. In such a case, we use maximum likelihood to estimate the transcript proportions in each group separately and then the regression coefficients are calculated using matrix operations. Otherwise, the regression coefficients are directly estimated with the maximum likelihood approach. \section{Hints for DRIMSeq pipelines} In this vignette, we present how one could perform differential transcript usage analysis and tuQTL analysis with the \Rpackage{DRIMSeq} package. We use small data sets so that the whole pipelines can be run within few minutes in \R{} on a single core computer. In practice, the package is designed to take advantage of multicore computing for larger data sets. In the filtering function \Rfunction{dmFilter}, all the parameters that are influencing transcript count filtering are set to zero. This results in a very relaxed filtering, where transcripts with zero expression in all the samples and genes with only one transcript remained are removed. Functions \Rfunction{dmPrecision}, \Rfunction{dmFit} and \Rfunction{dmTest}, which perform the actual statistical analyses described above, have many other parameters available for tweaking, but they do have the default values assigned. Those values were chosen based on many real data analyses. Some of the steps are quite time consuming, especially the precision estimation, where proportions of each gene are refitted for different precision parameters. To speed up the calculations, we have parallelized many functions using \Biocpkg{BiocParallel}. Thus, if possible, we recommend to increase the number of workers in \Robject{BPPARAM}. In general, tuQTL analyses are more computationally intensive than differential transcript usage analysis because one needs to do the analysis for every SNP in the surrounding region of a gene. Additionally, a permutation scheme is used to compute the p-values. It is indeed feasible to perform tuQTL analysis for small chunks of genome, for example, per chromosome. %------------------------------------------------------------------------------ % Differential transcript usage analysis workflow %------------------------------------------------------------------------------ \section{Differential transcript usage analysis workflow} \subsection{Example data} To demonstrate the application of \Rpackage{DRIMSeq} in differential transcript usage analysis, we will use the \emph{pasilla} data set produced by Brooks et al. \cite{Brooks2011}. The aim of their study was to identify exons that are regulated by pasilla protein, the Drosophila melanogaster ortholog of mammalian NOVA1 and NOVA2 (well studied transcript usage factors). In their RNA-seq experiment, the libraries were prepared from 7 biologically independent samples: 4 control samples and 3 samples in which pasilla was knocked-down. The libraries were sequenced on Illumina Genome Analyzer II using single-end and paired-end sequencing and different read lengths. The RNA-seq data can be downloaded from the NCBI Gene Expression Omnibus (GEO) under the accession number GSE18508. In the examples below, we use a subset of \software{kallisto} \cite{Bray2016} counts available in \Biocexptpkg{PasillaTranscriptExpr} package, where you can find all the steps needed, for preprocessing the GEO data, to get a table with transcript counts. \subsection{Differential transcript usage analysis between two conditions} In this section, we present how to perform the DTU analysis between two conditions control and knock-down without accounting for the batch effect which is the library layout. Analysis where batch effects are included are presented in the next section. We start the analysis by creating a \Rclass{dmDSdata} object, which contains transcript counts and information about grouping samples into conditions. With each step of the pipeline, additional elements are added to this object. At the end of the analysis, the object contains results from all the steps, such as precision estimates, regression coefficients, fitted transcript ratios in each sample, likelihood ratio statistics, p-values, adjusted p-values at gene and transcript level. As new elements are added, the object also changes its name \Rclass{dmDSdata} $\rightarrow$ \Rclass{dmDSprecision} $\rightarrow$ \Rclass{dmDSfit} $\rightarrow$ \Rclass{dmDStest}, but each container inherits slots and methods available for the previous one. \subsubsection{Loading pasilla data into R} The transcript-level counts obtained from \software{kallisto} and metadata are saved as text files in the \Rcode{extdata} directory of the \Biocexptpkg{PasillaTranscriptExpr} package. <>= library(PasillaTranscriptExpr) data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) @ Load the \Rpackage{DRIMSeq} package. <>= library(DRIMSeq) @ To create a \Rcode{dmDSdata} object, saved as variable \Robject{d}, we need to prepare a data frame containing information about samples and we will call it \Robject{pasilla\_samples}. It has to have a variable called \Rcode{sample\_id} with unique sample names that are identical to column names in \Robject{pasilla\_counts} that correspond to samples. Additionally, it has to contain other variables that the user would like to use for the further regression analysis. Here, we are interested in the differential analysis between the control and knock-down condition. This information is stored in \Rcode{pasilla\_metadata\$condition}. The data frame with counts called \Robject{pasilla\_counts} is already formatted in the right way. It contains variables \Rcode{feature\_id} with unique transcript names and \Rcode{gene\_id} with unique gene IDs and columns with counts have the same names as \Rcode{sample\_id} in \Rcode{pasilla\_samples}. When printing variable \Robject{d}, you can see its class, size (number of genes and samples) and which accessor methods can be applied. For \Rcode{dmDSdata} object, there are two methods that return data frames with counts and samples. <>= pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) d head(counts(d), 3) head(samples(d), 3) @ You can also make a data summary plot, which is a histogram of the number of transcripts per gene. <>= plotData(d) @ To make the analysis runnable within this vignette, we want to keep only a small subset of genes, which is defined in the following file. <>= gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) %in% gene_id_subset, ] d @ \subsubsection{Filtering} \label{DS_filtering} Genes may have many transcripts that are lowly expressed or not expressed at all. You can remove them using the \Rfunction{dmFilter} function. Filtering of lowly expressed transcripts can be done at two levels: minimal \textit{expression} using \Robject{min\_samps\_feature\_expr} and \Robject{min\_feature\_expr} parameters or minimal \textit{proportion} with \Robject{min\_samps\_feature\_prop} and \Robject{min\_feature\_prop}. In the \emph{pasilla} experiment we use a filtering based only on the transcript absolute expression and parameters are adjusted according to the number of replicates per condition. Since we have 3 knock-down and 4 control samples, we set \Robject{min\_samps\_feature\_expr} equal to 3. In this way, we allow a situation where a transcript is expressed in one condition but not in another, which is a case of differential transcript usage. The level of transcript expression is controlled by \Robject{min\_feature\_expr}. We set it to the value of 10, which means that only the transcripts that have at least 10 estimated counts in at least 3 samples are kept for the downstream analysis. Filtering at the gene level ensures that the observed transcript ratios have some minimal reliability. Although, Dirichlet-multinomial model works on feature counts, and not on feature ratios, which means that it gives more confidence to the ratios based on 100 versus 500 reads than 1 versus 5, minimal filtering based on gene expression removes the genes with mostly zero counts and reduces the number of tests in multiple test correction. For the \emph{pasilla} data, we want that genes have at least 10 counts in all the samples: \Rcode{min\_samps\_gene\_expr = 7} and \Rcode{min\_gene\_expr = 10}. <>= # Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) @ \subsubsection{Precision estimation} \label{DS_precision_estimation} Ideally, we would like to get accurate precision estimates for every gene, which is problematic when analyzing small data sets because precision estimates become inaccurate when the sample size decreases, especially for lowly expressed genes. As an alternative, we could assume that all the genes have the same precision and based on all the data, we could calculate a common precision, but we expect this to be too strong of an assumption. Moderated precision is a trade-off between gene-wise and common precision. The moderated estimates originate from a weighted likelihood which is a combination of common and individual likelihoods. We recommend this approach when analyzing small sample size data sets. At this step, three values may be calculated: mean expression of genes, common precision and gene-wise precisions. In the default setting, all of them are computed and common precision is used as an initial value in the grid approach to estimate gene-wise precisions, which are shrunk toward the trended precision. The grid approach is adapted from the \Rfunction{estimateDisp} function in \Biocpkg{edgeR} \cite{McCarthy2012}. By default, to estimate the common precision, we use 10\% percent (\Rcode{prec\_subset = 0.1}) of randomly selected genes. That is due to the fact that common precision is used only as an initial value, and estimating it based on all the genes takes a substantial part of time. To ensure that the analysis are reproducible, the user should define a random seed \Rcode{set.seed()} before running the \Rcode{dmPrecision()} function. Thank to that, each time the same subset of genes is selected. To estimate precision parameters, the user has to define a design matrix with the full model of interest, which will be also used later in the proportion estimation. Here, the full model is defined by a formula $\sim group$ which indicates that samples come from two conditions. This step of our pipeline is the most time consuming. Thus, for real data analysis, consider using \Rcode{BPPARAM = BiocParallel::MulticoreParam()} with more than one worker. <>= ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) design_full @ <>= ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) d head(mean_expression(d), 3) common_precision(d) head(genewise_precision(d)) @ To inspect the behavior of precision estimates, you can plot them against the mean gene expression. Normally in the differential analysis based on RNA-seq data, such plot has dispersion parameter plotted on the y-axis. Here, the y-axis represents precision since in the Dirichlet-multinomial model this is the parameter that is directly estimated. It is important to keep in mind that the precision parameter is inverse proportional to dispersion: $dispersion = 1 / (1 + precision)$. In RNA-seq data, we can typically observe a trend where the dispersion decreases (precision increases) for genes with higher mean expression. <>= plotPrecision(d) @ All of the plotting functions from \Rpackage{DRIMSeq} package, return a \Rclass{ggplot} object which can be further modified using \CRANpkg{ggplot2} package. For example, the user can increase the size of points. <>= library(ggplot2) ggp <- plotPrecision(d) ggp + geom_point(size = 4) @ \subsubsection{Proportion estimation} In this step, we estimate the full model regression coefficients, fitted proportions and likelihoods. We use the same design matrix as in the precision estimation step. By default, \Rcode{one\_way = TRUE} which means that whenever the design corresponds to multiple group fitting, the 'one way' shortcut algorithm will be used, which in fact corresponds to the first implementation of \Rpackage{DRIMSeq}. Transcript proportions are estimated for each condition separately and then the regression coefficients are calculated using matrix operations. The 'one way' algorithm is adapted from the \Rfunction{glmFit} function in \Biocpkg{edgeR} \cite{McCarthy2012}. By setting \Rcode{verbose = 1}, we can see that the one way approach is used with the current design. When \Rcode{bb\_model = TRUE} (the default), additionally to the gene-level Dirichlet-multinomial estimates the transcript-level beta-binomial results will be computed. <>= d <- dmFit(d, design = design_full, verbose = 1) d ## Get fitted proportions head(proportions(d)) ## Get the DM regression coefficients (gene-level) head(coefficients(d)) ## Get the BB regression coefficients (feature-level) head(coefficients(d), level = "feature") @ \subsubsection{Testing for differential transcript usage} \label{DS_testing} Calling the \Rfunction{dmTest} function results in two calculations. First, null model is fitted. This null model can be defined by the user via \Rcode{coef}, \Rcode{design} or \Rcode{contrast} parameters. Second, likelihood ratio statistics are used to test for the difference between the full and null model. Both steps are done at the gene and transcript level when \Rcode{bb\_model = TRUE}. In our example, we would like to test whether there are differences in transcript usage between control (CTL) and knock-down (KD). We can achieve that by using the \Rcode{coef} parameter which should indicate which columns of the full design should be removed to get the null design. We define it equal to \Rcode{"groupKD"}. Then the null design has only an intercept column which means that all the samples are treated as if they came from one condition. Note that \Rcode{one\_way = TRUE} and the one way approach is used. <>= d <- dmTest(d, coef = "groupKD", verbose = 1) design(d) head(results(d), 3) @ The same can be achieved by directly defining the null design matrix with the \Rcode{design} parameter. <>= design_null <- model.matrix(~ 1, data = samples(d)) design_null d <- dmTest(d, design = design_null) head(results(d), 3) @ Or by using the \Rcode{contrast} parameter. The null design is calculated using the approach from the \Rfunction{glmLRT} function in \Biocpkg{edgeR} \cite{McCarthy2012}. <>= contrast <- c(0, 1) d <- dmTest(d, contrast = contrast) design(d) head(results(d), 3) @ To obtain the results of likelihood ratio tests, you have to call the function \Rfunction{results}, which returns a data frame with likelihood ratio statistics, degrees of freedom, p-values and Benjamini and Hochberg (BH) adjusted p-values for each gene by default and for each transcript when \Rcode{level = "feature"}. <>= head(results(d, level = "feature"), 3) @ You can plot a histogram of gene-level and transcript-level p-values. <>= plotPValues(d) plotPValues(d, level = "feature") @ For genes of interest, you can make plots (bar plots, line plots, box plots, ribbon plots) of observed and estimated with Dirichlet-multinomial model transcript ratios. You have to define the \Rcode{group\_variable} parameter which should indicate a variable from \Rcode{samples(d)}. Currently, plots can be done only for categorical variables. We choose the \Rcode{"group"} column since it corresponds to the comparison of our interest. Estimated proportions are marked with diamond shapes. As an example, we plot the top significant gene. <>= res <- results(d) res <- res[order(res$pvalue, decreasing = FALSE), ] top_gene_id <- res$gene_id[1] plotProportions(d, gene_id = top_gene_id, group_variable = "group") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "lineplot") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "ribbonplot") @ \subsubsection{Two-stage test} \Rpackage{DRIMSeq} returns gene and transcript level p-values which can be used as an input to the stage-wise analysis \cite{VandenBerge2017} implemented in the \Rcode{stageR} package, currently available on github \url{https://github.com/statOmics/stageR}. As pointed by the authors of \Rcode{stageR}, interpreting both gene-level and transcript-level adjusted p-values does not provide appropriate FDR control and should be avoided. However, applying a stage-wise testing provides a useful biological interpretation of these results and improved statistical performance. In short, the procedure consists of a screening stage and a confirmation stage. In the screening stage, gene-level BH-adjusted p-values are screened to detect genes for which the hypothesis of interest is significantly rejected. Only those genes are further considered in the confirmation stage, where for each gene separately, transcript-level p-values are adjusted to control the FWER and BH-adjusted significance level of the screening stage. It is important to note that transcript-level stage-wise adjusted p-values for genes that do not pass the screening stage are set to \Rcode{NA}. Also the stage-wise adjusted p-values can not be compared to significance level other than chosen in the stage-wise analysis. If that is of interest, one has to rerun this analysis with the new significance level. The following code chunk is not evaluated by this vignette and to run it, user has to make sure that the \Rcode{stageR} package is installed. It shows how one can use the \Rpackage{DRIMSeq} output in the stage-wise analysis. <>= library(stageR) ## Assign gene-level pvalues to the screening stage pScreen <- results(d)$pvalue names(pScreen) <- results(d)$gene_id ## Assign transcript-level pvalues to the confirmation stage pConfirmation <- matrix(results(d, level = "feature")$pvalue, ncol = 1) rownames(pConfirmation) <- results(d, level = "feature")$feature_id ## Create the gene-transcript mapping tx2gene <- results(d, level = "feature")[, c("feature_id", "gene_id")] ## Create the stageRTx object and perform the stage-wise analysis stageRObj <- stageRTx(pScreen = pScreen, pConfirmation = pConfirmation, pScreenAdjusted = FALSE, tx2gene = tx2gene) stageRObj <- stageWiseAdjustment(object = stageRObj, method = "dtu", alpha = 0.05) getSignificantGenes(stageRObj) getSignificantTx(stageRObj) padj <- getAdjustedPValues(stageRObj, order = TRUE, onlySignificantGenes = FALSE) head(padj) @ \subsection{Differential transcript usage analysis between two conditions with accounting for the batch effects} The regression framework implemented in \Rpackage{DRIMSeq} allows to account for the batch effects. Here, this would be the library layout stored in \Rcode{pasilla\_metadata\$LibraryLayout}. The steps of this analysis are the same as described above. The only difference is that we have to include the library layout variable in the \Rcode{sample} slot in the \Rcode{dmDSdata} object and define a full model that contains the batch effect. <>= pasilla_samples2 <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition, library_layout = pasilla_metadata$LibraryLayout) d2 <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples2) ## Subsetting to a vignette runnable size d2 <- d2[names(d2) %in% gene_id_subset, ] ## Filtering d2 <- dmFilter(d2, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) ## Create the design matrix design_full2 <- model.matrix(~ group + library_layout, data = samples(d2)) design_full2 ## To make the analysis reproducible set.seed(123) ## Calculate precision d2 <- dmPrecision(d2, design = design_full2) common_precision(d2) head(genewise_precision(d2)) plotPrecision(d2) ## Fit proportions d2 <- dmFit(d2, design = design_full2, verbose = 1) ## Test for DTU d2 <- dmTest(d2, coef = "groupKD", verbose = 1) design(d2) head(results(d2), 3) ## Plot p-value distribution plotPValues(d2) @ <>= ## Plot the top significant gene res2 <- results(d2) res2 <- res2[order(res2$pvalue, decreasing = FALSE), ] top_gene_id2 <- res2$gene_id[1] ggp <- plotProportions(d2, gene_id = top_gene_id2, group_variable = "group") ggp + facet_wrap(~ library_layout) @ %------------------------------------------------------------------------------ % tuQTL analysis workflow %------------------------------------------------------------------------------ \section{tuQTL analysis workflow} In the transcript usage QTL analysis, we want to identify genetic variants (here, bi-allelic SNPs) that are associated with changes in transcript usage. Such SNPs are then called transcript usage quantitative trait locies (tuQTLs). Ideally, we would like to test associations of every SNP with every gene. However, such an approach would be very costly computationally and in terms of multiple testing correction. Under the assumption that SNPs that directly affect transcript usage are likely to be placed in the close surrounding of genes, we test only the SNPs that are located within the gene body and within some range upstream and downstream of the gene. \subsection{Example data} To demonstrate the tuQTL analysis with the \Rpackage{DRIMSeq} package, we use data from the GEUVADIS project \cite{Lappalainen2013}, where 462 RNA-Seq samples from lymphoblastoid cell lines were obtained. The genome sequencing data of the same individuals is provided by the 1000 Genomes Project. The samples in this project come from five populations: CEPH (CEU), Finns (FIN), British (GBR), Toscani (TSI) and Yoruba (YRI). We use transcript quantification (expected counts from FluxCapacitor) and genotypes available on the GEUVADIS project website \url{http://www.ebi.ac.uk/Tools/geuvadis-das/}, and the Gencode v12 gene annotation is available at \url{http://www.gencodegenes.org/releases/12.html}. In order to make this vignette runnable, we perform the analysis on subsets of bi-allelic SNPs and transcript expected counts for CEPH population (91 individuals) that correspond to 50 randomly selected genes from chromosome 19. The full dataset can be accessed from \Biocexptpkg{GeuvadisTranscriptExpr} package along with the description of preprocessing steps. \subsection{tuQTL analysis with the DRIMSeq package} Assuming you have gene annotation, feature counts and bi-allelic genotypes that are expressed in terms of the number of alleles different from the reference, the \Rpackage{DRIMSeq} workflow for tuQTL analysis is analogous to the one for differential transcript usage. First, we have to create a \Rclass{dmSQTLdata} object, which contains feature counts, sample information and genotypes. Similarly as in the differential transcript usage pipeline, results from every step are added to this object and at the end of the analysis, it contains precision estimates, proportions estimates, likelihood ratio statistics, p-values, adjusted p-values. As new elements are added, the object also changes its name \Rclass{dmSQTLdata} $\rightarrow$ \Rclass{dmSQTLprecision} $\rightarrow$ \Rclass{dmSQTLfit} $\rightarrow$ \Rclass{dmSQTLtest}. For each object, slots and methods are inherited from the previous one. \subsubsection{Loading GEUVADIS data into R} We use the subsets of data defined in the \Biocexptpkg{GeuvadisTranscriptExpr} package. <>= library(GeuvadisTranscriptExpr) geuv_counts <- GeuvadisTranscriptExpr::counts geuv_genotypes <- GeuvadisTranscriptExpr::genotypes geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges @ Load the \Rpackage{DRIMSeq} package. <>= library(DRIMSeq) @ In the tuQTL analysis, an initial data object \Robject{d} is of \Robject{dmSQTLdata} class and, additionally to feature counts and sample information, it contains genotypes of SNPs that are in some surrounding of genes. This surrounding is defined with the parameter \Rcode{window}. In order to find out which SNPs should be tested with which genes, the \Rfunction{dmSQTLdata} functions requires as an input the location of genes (\Rcode{gene\_ranges}) and SNPs (\Rcode{snp\_ranges}) stored as \Rclass{GRanges} objects. Variables with transcript IDs and gene IDs in the \Robject{counts} data frame must have names \Rcode{feature\_id} and \Rcode{gene\_id}, respectively. In the \Robject{genotypes} data frame, the variable with SNP IDs must have name \Rcode{snp\_id}. <>= colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") colnames(geuv_genotypes)[4] <- "snp_id" geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, samples = geuv_samples, window = 5e3) d @ In our tuQTL analysis, we do not repeat tests for the SNPs that define the same grouping of samples (genotype). We identify SNPs with identical genotypes across the samples and assign them to blocks. Estimation and testing are done at the block level, but the returned results are extended to a SNP level by repeating the block statistics for each SNP that belongs to a given block. The data summary plot \Rfunction{plotData} produces three histograms: the number of features per gene, the number of SNPs per gene and the number of blocks per gene. <>= plotData(d, plot_type = "features") plotData(d, plot_type = "snps") plotData(d, plot_type = "blocks") @ \subsubsection{Filtering} The filtering step eliminates genes and features with low expression, as in the differential transcript usage analysis (see section \ref{DS_filtering}). Additionally, it filters out the SNPs/blocks that do not define at least two genotypes where each of them is present in at least \Robject{minor\_allele\_freq} individuals. Usually, \Robject{minor\_allele\_freq} is equal to roughly 5\% of the total sample size. Ideally, we would like that genes were expressed at some minimal level in all samples because this would lead to better estimates of feature ratios. However, for some genes, missing values may be present in the counts data, or genes may be lowly expressed in some samples. Setting up \Robject{min\_samps\_gene\_expr} to 91 may exclude too many genes from the analysis. We can be slightly less stringent by taking, for example, \Rcode{min\_samps\_gene\_expr = 70}. <>= d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) @ \subsubsection{Precision estimation} In the DTU analysis (section \ref{DS_precision_estimation}), the full model used in precision estimation has to be defined by the user. Here, full models are defined by genotypes. For a given SNP, genotype can have numeric values of 0, 1, and 2. When \Rcode{one\_way = TRUE}, multiple group fitting is performed. When \Rcode{one\_way = FALSE}, a regression framework is used with the design matrix defined by a formula $\sim group$ where $group$ is a continuous (not categorical) variable with genotype values 0, 1, and 2. For the tuQTL analysis, it has an additional parameter called \Rcode{speed}. If \Rcode{speed = FALSE}, gene-wise precisions are calculated for each gene-block. This calculation may take a long time, since there can be hundreds of SNPs/blocks per gene. If \Rcode{speed} is set to \Rcode{TRUE}, there will be only one precision calculated per gene (assuming a null model, i.e., model with intercept only), and it will be assigned to all the blocks matched to this gene. In the default setting, \Rcode{speed = TRUE} and common precision is used as an initial value in the grid approach to estimate gene-wise precisions with NO moderation, since the sample size is quite large. Again, this step of the pipeline is one of the most time consuming. Thus consider using \Rcode{BPPARAM = BiocParallel::MulticoreParam()} with more than one worker when performing real data analysis. <>= ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d) plotPrecision(d) @ \subsubsection{Proportion estimation} Dirichlet-multinomial full model proportions/coefficients and likelihoods are estimated for each gene-block pair. Currently, no transcript-level analysis are implemented in the tuQTL workflow. <>= d <- dmFit(d) @ \subsubsection{Testing for tuQTLs} \Rfunction{dmTest} function estimates gene-level null model proportions/coefficients and likelihoods and performs the likelihood ratio test. The null models equal to models with intercept only. In contrast to the DTU analysis, there are some additional challenges that have to handled in the tuQTL analysis. They include a large number of tests per gene with highly variable allele frequencies (models) and linkage disequilibrium. As in other sQTL studies, we apply a permutation approach to empirically assess the null distribution of associations and use it for the adjustment of nominal p-values. There are two permutation schemes available. When \Rcode{permutation\_mode} equals to \Rcode{"all\_genes"}, the null p-value distribution is calculated from all the genes. When \Rcode{permutation\_mode = "per\_gene"}, null distribution of p-values is calculated for each gene separately based on permutations of this individual gene. The latter approach may take a lot of computational time. We suggest using the first option, which is also the default one. The function \Rfunction{results} returns a data frame with likelihood ratio statistics, degrees of freedom, p-values and Benjamini and Hochberg adjusted p-values for each gene-block/SNP pair. <>= d <- dmTest(d) plotPValues(d) head(results(d)) @ You can plot the observed transcript ratios for the tuQTLs of interest. Plotting the fitted values is not possible as we do not return this estimates due to their size. When the sample size is large, we recommend using box plots as a \Rcode{plot\_type}. We plot a tuQTL with the lowest p-value. <>= res <- results(d) res <- res[order(res$pvalue, decreasing = FALSE), ] top_gene_id <- res$gene_id[1] top_snp_id <- res$snp_id[1] plotProportions(d, gene_id = top_gene_id, snp_id = top_snp_id) plotProportions(d, gene_id = top_gene_id, snp_id = top_snp_id, plot_type = "boxplot2") @ %-------------------------------------------------- % Session information %-------------------------------------------------- \section{Session information} <>= sessionInfo() @ %-------------------------------------------------- % References %-------------------------------------------------- \bibliography{References} \end{document} DRIMSeq/vignettes/References.bib0000755000175200017520000003210414710222503017546 0ustar00biocbuildbiocbuild@article{Nowicka2016, author = {Nowicka, M and Robinson, M D}, doi = {10.12688/f1000research.8900.2}, journal = {F1000Research}, number = {1356}, title = {{DRIMSeq: a Dirichlet-multinomial framework for multivariate count outcomes in genomics [version 2; referees: 2 approved]}}, url = {https://f1000research.com/articles/5-1356/v2}, volume = {5}, year = {2016} } @article{Brooks2011, abstract = {Alternative splicing is generally controlled by proteins that bind directly to regulatory sequence elements and either activate or repress splicing of adjacent splice sites in a target pre-mRNA. Here, we have combined RNAi and mRNA-seq to identify exons that are regulated by Pasilla (PS), the Drosophila melanogaster ortholog of mammalian NOVA1 and NOVA2. We identified 405 splicing events in 323 genes that are significantly affected upon depletion of ps, many of which were annotated as being constitutively spliced. The sequence regions upstream and within PS-repressed exons and downstream from PS-activated exons are enriched for YCAY repeats, and these are consistent with the location of these motifs near NOVA-regulated exons in mammals. Thus, the RNA regulatory map of PS and NOVA1/2 is highly conserved between insects and mammals despite the fact that the target gene orthologs regulated by PS and NOVA1/2 are almost entirely nonoverlapping. This observation suggests that the regulatory codes of individual RNA binding proteins may be nearly immutable, yet the regulatory modules controlled by these proteins are highly evolvable.}, author = {Brooks, Angela N and Yang, Li and Duff, Michael O and Hansen, Kasper D and Park, Jung W and Dudoit, Sandrine and Brenner, Steven E and Graveley, Brenton R}, file = {:Users/gosia/Documents/Mendeley Desktop/Brooks et al/Brooks et al. - 2011 - Conservation of an RNA regulatory map between Drosophila and mammals.pdf:pdf}, institution = {Department of Molecular and Cell Biology, University of California, Berkeley, California 94720, USA.}, journal = {Genome research}, keywords = {Pasilla}, mendeley-groups = {Data}, mendeley-tags = {Pasilla}, number = {2}, pages = {193--202}, title = {{Conservation of an RNA regulatory map between Drosophila and mammals.}}, volume = {21}, year = {2011} } @article{Lappalainen2013, abstract = {Genome sequencing projects are discovering millions of genetic variants in humans, and interpretation of their functional effects is essential for understanding the genetic basis of variation in human traits. Here we report sequencing and deep analysis of messenger RNA and microRNA from lymphoblastoid cell lines of 462 individuals from the 1000 Genomes Project--the first uniformly processed high-throughput RNA-sequencing data from multiple human populations with high-quality genome sequences. We discover extremely widespread genetic variation affecting the regulation of most genes, with transcript structure and expression level variation being equally common but genetically largely independent. Our characterization of causal regulatory variation sheds light on the cellular mechanisms of regulatory and loss-of-function variation, and allows us to infer putative causal variants for dozens of disease-associated loci. Altogether, this study provides a deep understanding of the cellular mechanisms of transcriptome variation and of the landscape of functional variants in the human genome.}, author = {Lappalainen, Tuuli and Sammeth, Michael and Friedl{\"{a}}nder, Marc R and {'t Hoen}, Peter A C and Monlong, Jean and Rivas, Manuel A and Gonz{\`{a}}lez-Porta, Mar and Kurbatova, Natalja and Griebel, Thasso and Ferreira, Pedro G and Barann, Matthias and Wieland, Thomas and Greger, Liliana and van Iterson, Maarten and Alml{\"{o}}f, Jonas and Ribeca, Paolo and Pulyakhina, Irina and Esser, Daniela and Giger, Thomas and Tikhonov, Andrew and Sultan, Marc and Bertier, Gabrielle and MacArthur, Daniel G and Lek, Monkol and Lizano, Esther and Buermans, Henk P J and Padioleau, Ismael and Schwarzmayr, Thomas and Karlberg, Olof and Ongen, Halit and Kilpinen, Helena and Beltran, Sergi and Gut, Marta and Kahlem, Katja and Amstislavskiy, Vyacheslav and Stegle, Oliver and Pirinen, Matti and Montgomery, Stephen B and Donnelly, Peter and McCarthy, Mark I and Flicek, Paul and Strom, Tim M and Lehrach, Hans and Schreiber, Stefan and Sudbrak, Ralf and Carracedo, Angel and Antonarakis, Stylianos E and H{\"{a}}sler, Robert and Syv{\"{a}}nen, Ann-Christine and van Ommen, Gert-Jan and Brazma, Alvis and Meitinger, Thomas and Rosenstiel, Philip and Guig{\'{o}}, Roderic and Gut, Ivo G and Estivill, Xavier and Dermitzakis, Emmanouil T}, file = {:Users/gosia/Documents/Mendeley Desktop/Lappalainen et al/Lappalainen et al. - 2013 - Transcriptome and genome sequencing uncovers functional variation in humans(2).pdf:pdf;:Users/gosia/Documents/Mendeley Desktop/Lappalainen et al/Lappalainen et al. - 2013 - Transcriptome and genome sequencing uncovers functional variation in humans.pdf:pdf}, issn = {1476-4687}, journal = {Nature}, keywords = {Alleles,Cell Line,Exons,Exons: genetics,GEUVADIS,Gene Expression Profiling,Genetic Variation,Genetic Variation: genetics,Genome,High-Throughput Nucleotide Sequencing,Human,Human: genetics,Humans,Messenger,Messenger: analysis,Messenger: genetics,Polymorphism,Quantitative Trait Loci,Quantitative Trait Loci: genetics,RNA,Sequence Analysis,Single Nucleotide,Single Nucleotide: genetics,Transcriptome,Transcriptome: genetics,Transformed}, mendeley-groups = {sQTL analysis/Geuvadis,.PhD report CM2,sQTL analysis/Data}, mendeley-tags = {GEUVADIS}, number = {7468}, pages = {506--11}, pmid = {24037378}, title = {{Transcriptome and genome sequencing uncovers functional variation in humans.}}, url = {http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=3918453{\&}tool=pmcentrez{\&}rendertype=abstract}, volume = {501}, year = {2013} } @article{Bray2016, abstract = {We present kallisto, an RNA-seq quantification program that is two orders of magnitude faster than previous approaches and achieves similar accuracy. Kallisto pseudoaligns reads to a reference, producing a list of transcripts that are compatible with each read while avoiding alignment of individual bases. We use kallisto to analyze 30 million unaligned paired-end RNA-seq reads in {\textless}10 min on a standard laptop computer. This removes a major computational bottleneck in RNA-seq analysis.}, author = {Bray, Nicolas L and Pimentel, Harold and Melsted, Pall and Pachter, Lior}, issn = {1546-1696}, journal = {Nat Biotech}, keywords = {kallisto}, mendeley-groups = {.DRIMSeq paper,RNA-seq quantification/Transcript quantification}, mendeley-tags = {kallisto}, month = {apr}, publisher = {Nature Publishing Group, a division of Macmillan Publishers Limited. All Rights Reserved.}, title = {{Near-optimal probabilistic RNA-seq quantification}}, url = {http://dx.doi.org/10.1038/nbt.3519 http://10.0.4.14/nbt.3519 http://www.nature.com/nbt/journal/vaop/ncurrent/abs/nbt.3519.html{\#}supplementary-information}, volume = {advance on}, year = {2016} } @article{VandenBerge2017, abstract = {Background: Reductions in sequencing cost and innovations in expression quantification have prompted an emergence of RNA-seq studies with complex designs and data analysis at transcript resolution. These applications involve multiple hypotheses per gene, leading to challenging multiple testing problems. Conventional approaches provide separate top-lists for every contrast and false discovery rate (FDR) control at individual hypothesis level. Hence, they fail to establish proper gene-level error control, which compromises downstream validation experiments. Tests that aggregate individual hypotheses are more powerful and provide gene-level FDR control, but in the RNA-seq literature no methods are available for post-hoc analysis of individual hypotheses. Results: We introduce a two-stage procedure that leverages the increased power of aggregated hypothesis tests while maintaining high biological resolution by post-hoc analysis of genes passing the screening hypothesis. Our method is evaluated on simulated and real RNA-seq experiments. It provides gene-level FDR control in studies with complex designs while boosting power for interaction effects without compromising the discovery of main effects. In a differential transcript usage/expression context, stage-wise testing gains power by aggregating hypotheses at the gene level, while providing transcript-level assessment of genes passing the screening stage. Finally, a prostate cancer case study highlights the relevance of combining gene with transcript level results. Conclusion: Stage-wise testing is a general paradigm that can be adopted whenever individual hypotheses can be aggregated. In our context, it achieves an optimal middle ground between biological resolution and statistical power while providing gene-level FDR control, which is beneficial for downstream biological interpretation and validation.}, author = {{Van den Berge}, Koen and Soneson, Charlotte and Robinson, Mark D and Clement, Lieven}, file = {:Users/gosia/Mendeley Desktop/Van den Berge et al/Van den Berge et al. - 2017 - A general and powerful stage-wise testing procedure for differential expression and differential transcrip.pdf:pdf}, journal = {bioRxiv}, mendeley-groups = {RNA-seq DE,.DRIMSeq paper}, month = {feb}, title = {{A general and powerful stage-wise testing procedure for differential expression and differential transcript usage}}, url = {http://biorxiv.org/content/early/2017/02/16/109082.abstract}, year = {2017} } @article{McCarthy2012, abstract = {A flexible statistical framework is developed for the analysis of read counts from RNA-Seq gene expression studies. It provides the ability to analyse complex experiments involving multiple treatment conditions and blocking variables while still taking full account of biological variation. Biological variation between RNA samples is estimated separately from the technical variation associated with sequencing technologies. Novel empirical Bayes methods allow each gene to have its own specific variability, even when there are relatively few biological replicates from which to estimate such variability. The pipeline is implemented in the edgeR package of the Bioconductor project. A case study analysis of carcinoma data demonstrates the ability of generalized linear model methods (GLMs) to detect differential expression in a paired design, and even to detect tumour-specific expression changes. The case study demonstrates the need to allow for gene-specific variability, rather than assuming a common dispersion across genes or a fixed relationship between abundance and variability. Genewise dispersions de-prioritize genes with inconsistent results and allow the main analysis to focus on changes that are consistent between biological replicates. Parallel computational approaches are developed to make non-linear model fitting faster and more reliable, making the application of GLMs to genomic data more convenient and practical. Simulations demonstrate the ability of adjusted profile likelihood estimators to return accurate estimators of biological variability in complex situations. When variation is gene-specific, empirical Bayes estimators provide an advantageous compromise between the extremes of assuming common dispersion or separate genewise dispersion. The methods developed here can also be applied to count data arising from DNA-Seq applications, including ChIP-Seq for epigenetic marks and DNA methylation analyses.}, author = {McCarthy, Davis J. and Chen, Yunshun and Smyth, Gordon K.}, file = {:Users/gosia/Mendeley Desktop/McCarthy, Chen, Smyth/McCarthy, Chen, Smyth - 2012 - Differential expression analysis of multifactor RNA-Seq experiments with respect to biological variation.pdf:pdf}, journal = {Nucleic Acids Research}, keywords = {edgeR}, mendeley-groups = {.CM2 PhD report,.DRIMSeq paper,RNA-seq DE/Gene DE/edgeR,Project DM/edgeR}, mendeley-tags = {edgeR}, number = {10}, pages = {4288--4297}, pmid = {22287627}, title = {{Differential expression analysis of multifactor RNA-Seq experiments with respect to biological variation}}, volume = {40}, year = {2012} } @article{Danaher1988, abstract = {We develop estimates for the parameters of the Dirichlet-multinomial distribution (DMD) when there is insufficient data to obtain maximum likelihood or method of moment estimates known in the literature. We do, however, have supplemetary beta-binomial data pertaining to the marginals of the DMD, and use these data when estimating the DMD parameters. A real situation and data set are given where our estimates are applicable.}, annote = {doi: 10.1080/03610928808829713}, author = {Danaher, Peter J}, doi = {10.1080/03610928808829713}, file = {:Users/gosia/Mendeley Desktop/Danaher/Danaher - 1988 - Parameter estimation for the dirichlet-multinomial distribution using supplementary beta-binomial data(2).pdf:pdf}, issn = {0361-0926}, journal = {Communications in Statistics - Theory and Methods}, mendeley-groups = {Project DM/Beta-Binomial}, month = {jan}, number = {6}, pages = {1777--1788}, publisher = {Taylor {\&} Francis}, title = {{Parameter estimation for the dirichlet-multinomial distribution using supplementary beta-binomial data}}, url = {http://dx.doi.org/10.1080/03610928808829713}, volume = {17}, year = {1988} }