From 4ee854d019813df87d1af9b3ba68d17b286df49f Mon Sep 17 00:00:00 2001 From: gmillot <gael.millot@pasteur.fr> Date: Thu, 13 Sep 2018 15:14:43 +0200 Subject: [PATCH] v3.0.0 development --- README.md | 7 + cute_little_functions.R | 3918 ++++++++++++++++++------------------ cute_little_functions.docx | Bin 162596 -> 168264 bytes examples_alone.txt | 9 +- 4 files changed, 1974 insertions(+), 1960 deletions(-) diff --git a/README.md b/README.md index 0158257..d6acbd5 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,13 @@ Check for updated versions (more recent release tags) at https://gitlab.pasteur. #### WHAT'S NEW IN +## v3.0.0 + +1) function fun_dataframe_flipping() has been renamed fun_dataframe_remodeling() + +2) examples and draws added + + ## v2.0.1 1) functions that use other functions from this toolset now check if these required functions are indeed present in the R environment diff --git a/cute_little_functions.R b/cute_little_functions.R index a2d45e2..f73e439 100644 --- a/cute_little_functions.R +++ b/cute_little_functions.R @@ -1,6 +1,6 @@ ################################################################ ## ## -## CUTE LITTLE FUNCTIONS v2.0.1 ## +## CUTE LITTLE FUNCTIONS v3.0.0 ## ## ## ## Gael A. Millot ## ## ## @@ -23,7 +23,7 @@ ######## fun_list_comp() #### comparison of two lists 16 ################ Object modification 18 -######## fun_dataframe_flipping() #### flipping a data frame to have column name as a qualitative column and vice-versa 18 +######## fun_dataframe_remodeling() #### remodeling a data frame to have column name as a qualitative column and vice-versa 18 ######## fun_refactorization() #### remove classes that are not anymore present in factors or factor columns in data frames 20 ######## fun_rounding() #### Rounding number if decimal present 22 ######## fun_90clock_matrix_rot() #### 90° clockwise matrix rotation 23 @@ -51,238 +51,238 @@ # Check OK: clear to go Apollo fun_param_check <- function(data, data.name = NULL, class = NULL, typeof = NULL, mode = NULL, length = NULL, prop = NULL, double.as.integer.allowed = FALSE, options = NULL, all.options.in.data = FALSE, na.contain = FALSE, neg.values = TRUE, print = TRUE){ -# AIM: -# Check the class, type, mode and length of the data argument -# Mainly used to check the arguments of other functions -# Check also other kind of data parameters, is it a proportion? Is it type double even if it is an integer? -# If options = NULL, then at least class, type, mode or length must be non null -# If options is non null, then class, type and mode must be NULL, and length can be NULL or specified -# REQUIRED FUNCTIONS -# none -# ARGUMENTS -# data: object to test -# data.name: name of the object to test. If NULL, use the name of the object assigned to the data argument -# class: one of the class() result -# typeof: one of the typeof() result -# mode: one of the mode() result (for non vector object) -# length: length of the object -# prop: logical, are the numeric values between 0 and 1 (proportion)? -# double.as.integer.allowed: logical. If TRUE, no error is reported if argument is set to typeof = "integer" or class = "integer", while the reality is typeof = "double" or class = "numeric" but the numbers have a zero as modulo (remainder of a division). This means that i<-1 , which is typeof(i) -> "double" is considered as integer with double.as.integer.allowed = TRUE -# options: a vector of possible values for data -# all.options.in.data: If TRUE, all of the options must be present at least once in data, and nothing else. If FALSE, some of the options must be present in data, and nothing else -# na.contain: can data contains NA? -# neg.values: are negative numeric values authorized? BEWARE: only considered if set to FALSE, to check for non negative values when class is set to "numeric", "matrix", "array", "data.frame", "table", or typeof is set to "double", "integer", or mode is set to "numeric" -# print: print the error message if $problem is TRUE? -# RETURN -# a list containing: -# $problem: logical. Is there any problem detected ? -# $text: the problem detected -# $param.name: name of the checked parameter -# EXAMPLES -# test <- 1:3 ; fun_param_check(data = test, data.name = NULL, print = TRUE, options = NULL, all.options.in.data = FALSE, class = NULL, typeof = NULL, mode = NULL, prop = TRUE, double.as.integer.allowed = FALSE, length = NULL) -# test <- 1:3 ; fun_param_check(data = test, print = TRUE, class = "numeric", typeof = NULL, double.as.integer.allowed = FALSE) -# DEBUGGING -# data = 1:3 ; data.name = NULL ; print = TRUE; options = NULL ; all.options.in.data = FALSE ; class = "numeric" ; typeof = NULL ; mode = NULL ; prop = NULL ; double.as.integer.allowed = TRUE ; length = NULL # for function debugging -# argument checking -# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) -if( ! is.null(data.name)){ -if( ! (length(data.name) == 1 & class(data.name) == "character")){ -tempo.cat <- paste0("\n\n================\n\nERROR: data.name ARGUMENT MUST BE A SINGLE CHARACTER ELEMENT AND NOT ", paste(data.name, collapse = " "), "\n\n================\n\n") -stop(tempo.cat) -} -} -if(is.null(options) & is.null(class) & is.null(typeof) & is.null(mode) & is.null(prop) & is.null(length)){ -tempo.cat <- paste0("\n\n================\n\nERROR: AT LEAST ONE OF THE options, class, typeof, mode, prop, OR length ARGUMENT MUST BE SPECIFIED\n\n================\n\n") -stop(tempo.cat) -} -if( ! is.null(options) & ( ! is.null(class) | ! is.null(typeof) | ! is.null(mode) | ! is.null(prop))){ -tempo.cat <- paste0("\n\n================\n\nERROR: THE class, typeof, mode AND prop ARGUMENTS MUST BE NULL IF THE option ARGUMENT IS SPECIFIED\nTHE option ARGUMENT MUST BE NULL IF THE class AND/OR typeof AND/OR mode AND/OR prop ARGUMENT IS SPECIFIED\n\n================\n\n") -stop(tempo.cat) -} -if( ! (all(class(neg.values) == "logical") & length(neg.values) == 1 & any(is.na(neg.values)) != TRUE)){ -tempo.cat <- paste0("\n\n================\n\nERROR: THE neg.values ARGUMENT MUST BE TRUE OR FALSE ONLY\n\n================\n\n") -stop(tempo.cat) -} -if(neg.values == FALSE & is.null(class) & is.null(typeof) & is.null(mode)){ -tempo.cat <- paste0("\n\n================\n\nERROR: THE neg.values ARGUMENT CANNOT BE SWITCHED TO FALSE IF class, typeof AND mode ARGUMENTS ARE NULL\n\n================\n\n") -stop(tempo.cat) -} -if( ! is.null(class)){ -if( ! all(class %in% c("logical", "integer", "numeric", "complex", "character", "matrix", "array", "data.frame", "list", "factor", "table", "expression", "name", "symbol", "function") & any(is.na(class)) != TRUE)){ # not length == 1 here because ordered factors are class "factor" "ordered" (length == 2) -tempo.cat <- paste0("\n\n================\n\nERROR: class ARGUMENT MUST BE ONE OF THESE VALUE:\n\"logical\", \"integer\", \"numeric\", \"complex\", \"character\", \"matrix\", \"array\", \"data.frame\", \"list\", \"factor\", \"table\", \"expression\", \"name\", \"symbol\", \"function\" \n\n================\n\n") -stop(tempo.cat) -} -if(neg.values == FALSE & ! any(class %in% c("numeric", "matrix", "array", "data.frame", "table"))){ -tempo.cat <- paste0("\n\n================\n\nERROR: class ARGUMENT CANNOT BE OTHER THAN \"numeric\", \"matrix\", \"array\", \"data.frame\", \"table\" IF neg.values ARGUMENT IS SWITCHED TO FALSE\n\n================\n\n") -stop(tempo.cat) -} -} -if( ! is.null(typeof)){ -if( ! (all(typeof %in% c("logical", "integer", "double", "complex", "character", "list", "expression", "name", "symbol", "closure", "special", "builtin")) & length(typeof) == 1 & any(is.na(typeof)) != TRUE)){ -tempo.cat <- paste0("\n\n================\n\nERROR: typeof ARGUMENT MUST BE ONE OF THESE VALUE:\n\"logical\", \"integer\", \"double\", \"complex\", \"character\", \"list\", \"expression\", \"name\", \"symbol\", \"closure\", \"special\", \"builtin\" \n\n================\n\n") -stop(tempo.cat) -} -if(neg.values == FALSE & ! typeof %in% c("double", "integer")){ -tempo.cat <- paste0("\n\n================\n\nERROR: typeof ARGUMENT CANNOT BE OTHER THAN \"double\" OR \"integer\" IF neg.values ARGUMENT IS SWITCHED TO FALSE\n\n================\n\n") -stop(tempo.cat) -} -} -if( ! is.null(mode)){ -if( ! (all(mode %in% c("logical", "numeric", "complex", "character", "list", "expression", "name", "symbol", "function")) & length(mode) == 1 & any(is.na(mode)) != TRUE)){ -tempo.cat <- paste0("\n\n================\n\nERROR: mode ARGUMENT MUST BE ONE OF THESE VALUE:\n\"logical\", \"numeric\", \"complex\", \"character\", \"list\", \"expression\", \"name\", \"symbol\", \"function\"\n\n================\n\n") -stop(tempo.cat) -} -if(neg.values == FALSE & mode != "numeric"){ -tempo.cat <- paste0("\n\n================\n\nERROR: mode ARGUMENT CANNOT BE OTHER THAN \"numeric\" IF neg.values ARGUMENT IS SWITCHED TO FALSE\n\n================\n\n") -stop(tempo.cat) -} -} -if( ! is.null(length)){ -if( ! (is.numeric(length) & length(length) == 1 & ! grepl(length, pattern = "\\.") & any(is.na(length)) != TRUE)){ -tempo.cat <- paste0("\n\n================\n\nERROR: length ARGUMENT MUST BE A SINGLE INTEGER VALUE\n\n================\n\n") -stop(tempo.cat) -} -} -if( ! is.null(prop)){ -if( ! (is.logical(prop) | length(prop) == 1 & any(is.na(prop)) != TRUE)){ -tempo.cat <- paste0("\n\n================\n\nERROR: prop ARGUMENT MUST BE TRUE OR FALSE ONLY\n\n================\n\n") -stop(tempo.cat) -}else if(prop == TRUE){ -if( ! is.null(class)){ -if( ! any(class %in% c("numeric", "matrix", "array", "data.frame", "table"))){ -tempo.cat <- paste0("\n\n================\n\nERROR: class ARGUMENT CANNOT BE OTHER THAN \"numeric\", \"matrix\", \"array\", \"data.frame\", \"table\" IF prop ARGUMENT IS TRUE\n\n================\n\n") -stop(tempo.cat) -} -} -if( ! is.null(mode)){ -if(mode != "numeric"){ -tempo.cat <- paste0("\n\n================\n\nERROR: mode ARGUMENT CANNOT BE OTHER THAN \"numeric\" IF prop ARGUMENT IS TRUE\n\n================\n\n") -stop(tempo.cat) -} -} -if( ! is.null(typeof)){ -if(typeof != "double"){ -tempo.cat <- paste0("\n\n================\n\nERROR: typeof ARGUMENT CANNOT BE OTHER THAN \"double\" IF prop ARGUMENT IS TRUE\n\n================\n\n") -stop(tempo.cat) -} -} -} -} -if( ! (all(class(double.as.integer.allowed) == "logical") & length(double.as.integer.allowed) == 1 & any(is.na(double.as.integer.allowed)) != TRUE)){ -tempo.cat <- paste0("\n\n================\n\nERROR: THE double.as.integer.allowed ARGUMENT MUST BE TRUE OR FALSE ONLY\n\n================\n\n") -stop(tempo.cat) -} -if( ! (is.logical(all.options.in.data) & length(all.options.in.data) == 1 & any(is.na(all.options.in.data)) != TRUE)){ -tempo.cat <- paste0("\n\n================\n\nERROR: all.options.in.data ARGUMENT MUST BE A SINGLE LOGICAL VALUE (TRUE OR FALSE ONLY)\n\n================\n\n") -stop(tempo.cat) -} -if( ! (all(class(na.contain) == "logical") & length(na.contain) == 1 & any(is.na(na.contain)) != TRUE)){ -tempo.cat <- paste0("\n\n================\n\nERROR: THE na.contain ARGUMENT MUST BE TRUE OR FALSE ONLY\n\n================\n\n") -stop(tempo.cat) -} -if( ! (all(class(print) == "logical") & length(print) == 1 & any(is.na(print)) != TRUE)){ -tempo.cat <- paste0("\n\n================\n\nERROR: THE print ARGUMENT MUST BE TRUE OR FALSE ONLY\n\n================\n\n") -stop(tempo.cat) -} -# end argument checking -if(is.null(data.name)){ -data.name <- deparse(substitute(data)) -} -problem <- FALSE -text <- paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER") -if( ! is.null(options)){ -text <- "" -if( ! all(data %in% options)){ -problem <- TRUE -text <- paste0("PROBLEM: THE ", data.name, " PARAMETER MUST BE SOME OF THESE OPTIONS: ", paste(options, collapse = " "), "\nTHE PROBLEMATIC ELEMENTS OF ", data.name, " ARE: ", paste(unique(data[ ! (data %in% options)]), collapse = " ")) -} -if(all.options.in.data == TRUE){ -if( ! all(options %in% data)){ -problem <- TRUE -if(text == ""){ -text <- paste0("PROBLEM: THE ", data.name, " PARAMETER MUST BE SOME OF THESE OPTIONS: ", paste(options, collapse = " "), "\nTHE PROBLEMATIC ELEMENTS OF ", data.name, " ARE: ", unique(data[ ! (data %in% options)])) -}else{ -text <- paste0(text, "\nPROBLEM: THE ", data.name, " PARAMETER MUST BE SOME OF THESE OPTIONS: ", paste(options, collapse = " "), "\nTHE PROBLEMATIC ELEMENTS OF ", data.name, " ARE: ", unique(data[ ! (data %in% options)])) -} -} -} -if( ! is.null(length)){ -if(length(data) != length){ -problem <- TRUE -if(text == ""){ -text <- paste0("PROBLEM: THE LENGTH OF ", data.name, " MUST BE ", length, " AND NOT ", length(data)) -}else{ -text <- paste0(text, "\nPROBLEM: THE LENGTH OF ", data.name, " MUST BE ", length, " AND NOT ", length(data)) -} -} -} -if(text == ""){ -text <- paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER") -} -} -arg.names <- c("class", "typeof", "mode", "length") -if(is.null(options)){ -for(i2 in 1:length(arg.names)){ -if( ! is.null(get(arg.names[i2]))){ -# script to execute -tempo.script <- ' -problem <- TRUE ; -if(identical(text, paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER"))){ -text <- paste0("PROBLEM: THE ", data.name, " PARAMETER MUST BE ") ; -}else{ -text <- paste0(text, " AND "); -} -text <- paste0(text, toupper(arg.names[i2]), " ", get(arg.names[i2])) -' -if(typeof(data) == "double" & double.as.integer.allowed == TRUE & ((arg.names[i2] == "class" & get(arg.names[i2]) == "integer") | (arg.names[i2] == "typeof" & get(arg.names[i2]) == "integer"))){ -if(! all(data%%1 == 0)){ # to check integers (use %%, meaning the remaining of a division): see the precedent line -eval(parse(text = tempo.script)) # execute tempo.script -} -}else if(eval(parse(text = paste0(arg.names[i2], "(data)"))) != get(arg.names[i2])){ -eval(parse(text = tempo.script)) # execute tempo.script -} -} -} -} -if( ! is.null(prop)){ -if(prop == TRUE){ -if(any(data < 0 | data > 1, na.rm = TRUE)){ -problem <- TRUE -if(identical(text, paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER"))){ -text <- paste0("PROBLEM: ") -}else{ -text <- paste0(text, " AND ") -} -text <- paste0(text, "THE ", data.name, " PARAMETER MUST BE DECIMAL VALUES BETWEEN 0 AND 1") -} -} -} -if(na.contain == FALSE & any(is.na(data)) == TRUE){ -problem <- TRUE -if(identical(text, paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER"))){ -text <- paste0("PROBLEM: ") -}else{ -text <- paste0(text, " AND ") -} -text <- paste0(text, "THE ", data.name, " PARAMETER CONTAINS NA WHILE NOT AUTHORIZED (na.contain ARGUMENT SET TO FALSE)") -} -if(neg.values == FALSE){ -if(any(data < 0, na.rm = TRUE)){ -problem <- TRUE -if(identical(text, paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER"))){ -text <- paste0("PROBLEM: ") -}else{ -text <- paste0(text, " AND ") -} -text <- paste0(text, "THE ", data.name, " PARAMETER MUST NON NEGATIVE NUMERIC VALUES") -} -} -if(print == TRUE & problem == TRUE){ -cat(paste0("\n\n================\n\n", text, "\n\n================\n\n")) -} -output <- list(problem = problem, text = text, param.name = data.name) -return(output) -} + # AIM: + # Check the class, type, mode and length of the data argument + # Mainly used to check the arguments of other functions + # Check also other kind of data parameters, is it a proportion? Is it type double even if it is an integer? + # If options = NULL, then at least class, type, mode or length must be non null + # If options is non null, then class, type and mode must be NULL, and length can be NULL or specified + # REQUIRED FUNCTIONS + # none + # ARGUMENTS + # data: object to test + # data.name: name of the object to test. If NULL, use the name of the object assigned to the data argument + # class: one of the class() result + # typeof: one of the typeof() result + # mode: one of the mode() result (for non vector object) + # length: length of the object + # prop: logical, are the numeric values between 0 and 1 (proportion)? + # double.as.integer.allowed: logical. If TRUE, no error is reported if argument is set to typeof = "integer" or class = "integer", while the reality is typeof = "double" or class = "numeric" but the numbers have a zero as modulo (remainder of a division). This means that i<-1 , which is typeof(i) -> "double" is considered as integer with double.as.integer.allowed = TRUE + # options: a vector of possible values for data + # all.options.in.data: If TRUE, all of the options must be present at least once in data, and nothing else. If FALSE, some of the options must be present in data, and nothing else + # na.contain: can data contains NA? + # neg.values: are negative numeric values authorized? BEWARE: only considered if set to FALSE, to check for non negative values when class is set to "numeric", "matrix", "array", "data.frame", "table", or typeof is set to "double", "integer", or mode is set to "numeric" + # print: print the error message if $problem is TRUE? + # RETURN + # a list containing: + # $problem: logical. Is there any problem detected ? + # $text: the problem detected + # $param.name: name of the checked parameter + # EXAMPLES + # test <- 1:3 ; fun_param_check(data = test, data.name = NULL, print = TRUE, options = NULL, all.options.in.data = FALSE, class = NULL, typeof = NULL, mode = NULL, prop = TRUE, double.as.integer.allowed = FALSE, length = NULL) + # test <- 1:3 ; fun_param_check(data = test, print = TRUE, class = "numeric", typeof = NULL, double.as.integer.allowed = FALSE) + # DEBUGGING + # data = 1:3 ; data.name = NULL ; print = TRUE; options = NULL ; all.options.in.data = FALSE ; class = "numeric" ; typeof = NULL ; mode = NULL ; prop = NULL ; double.as.integer.allowed = TRUE ; length = NULL # for function debugging + # argument checking + # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) + if( ! is.null(data.name)){ + if( ! (length(data.name) == 1 & class(data.name) == "character")){ + tempo.cat <- paste0("\n\n================\n\nERROR: data.name ARGUMENT MUST BE A SINGLE CHARACTER ELEMENT AND NOT ", paste(data.name, collapse = " "), "\n\n================\n\n") + stop(tempo.cat) + } + } + if(is.null(options) & is.null(class) & is.null(typeof) & is.null(mode) & is.null(prop) & is.null(length)){ + tempo.cat <- paste0("\n\n================\n\nERROR: AT LEAST ONE OF THE options, class, typeof, mode, prop, OR length ARGUMENT MUST BE SPECIFIED\n\n================\n\n") + stop(tempo.cat) + } + if( ! is.null(options) & ( ! is.null(class) | ! is.null(typeof) | ! is.null(mode) | ! is.null(prop))){ + tempo.cat <- paste0("\n\n================\n\nERROR: THE class, typeof, mode AND prop ARGUMENTS MUST BE NULL IF THE option ARGUMENT IS SPECIFIED\nTHE option ARGUMENT MUST BE NULL IF THE class AND/OR typeof AND/OR mode AND/OR prop ARGUMENT IS SPECIFIED\n\n================\n\n") + stop(tempo.cat) + } + if( ! (all(class(neg.values) == "logical") & length(neg.values) == 1 & any(is.na(neg.values)) != TRUE)){ + tempo.cat <- paste0("\n\n================\n\nERROR: THE neg.values ARGUMENT MUST BE TRUE OR FALSE ONLY\n\n================\n\n") + stop(tempo.cat) + } + if(neg.values == FALSE & is.null(class) & is.null(typeof) & is.null(mode)){ + tempo.cat <- paste0("\n\n================\n\nERROR: THE neg.values ARGUMENT CANNOT BE SWITCHED TO FALSE IF class, typeof AND mode ARGUMENTS ARE NULL\n\n================\n\n") + stop(tempo.cat) + } + if( ! is.null(class)){ + if( ! all(class %in% c("logical", "integer", "numeric", "complex", "character", "matrix", "array", "data.frame", "list", "factor", "table", "expression", "name", "symbol", "function") & any(is.na(class)) != TRUE)){ # not length == 1 here because ordered factors are class "factor" "ordered" (length == 2) + tempo.cat <- paste0("\n\n================\n\nERROR: class ARGUMENT MUST BE ONE OF THESE VALUE:\n\"logical\", \"integer\", \"numeric\", \"complex\", \"character\", \"matrix\", \"array\", \"data.frame\", \"list\", \"factor\", \"table\", \"expression\", \"name\", \"symbol\", \"function\" \n\n================\n\n") + stop(tempo.cat) + } + if(neg.values == FALSE & ! any(class %in% c("numeric", "matrix", "array", "data.frame", "table"))){ + tempo.cat <- paste0("\n\n================\n\nERROR: class ARGUMENT CANNOT BE OTHER THAN \"numeric\", \"matrix\", \"array\", \"data.frame\", \"table\" IF neg.values ARGUMENT IS SWITCHED TO FALSE\n\n================\n\n") + stop(tempo.cat) + } + } + if( ! is.null(typeof)){ + if( ! (all(typeof %in% c("logical", "integer", "double", "complex", "character", "list", "expression", "name", "symbol", "closure", "special", "builtin")) & length(typeof) == 1 & any(is.na(typeof)) != TRUE)){ + tempo.cat <- paste0("\n\n================\n\nERROR: typeof ARGUMENT MUST BE ONE OF THESE VALUE:\n\"logical\", \"integer\", \"double\", \"complex\", \"character\", \"list\", \"expression\", \"name\", \"symbol\", \"closure\", \"special\", \"builtin\" \n\n================\n\n") + stop(tempo.cat) + } + if(neg.values == FALSE & ! typeof %in% c("double", "integer")){ + tempo.cat <- paste0("\n\n================\n\nERROR: typeof ARGUMENT CANNOT BE OTHER THAN \"double\" OR \"integer\" IF neg.values ARGUMENT IS SWITCHED TO FALSE\n\n================\n\n") + stop(tempo.cat) + } + } + if( ! is.null(mode)){ + if( ! (all(mode %in% c("logical", "numeric", "complex", "character", "list", "expression", "name", "symbol", "function")) & length(mode) == 1 & any(is.na(mode)) != TRUE)){ + tempo.cat <- paste0("\n\n================\n\nERROR: mode ARGUMENT MUST BE ONE OF THESE VALUE:\n\"logical\", \"numeric\", \"complex\", \"character\", \"list\", \"expression\", \"name\", \"symbol\", \"function\"\n\n================\n\n") + stop(tempo.cat) + } + if(neg.values == FALSE & mode != "numeric"){ + tempo.cat <- paste0("\n\n================\n\nERROR: mode ARGUMENT CANNOT BE OTHER THAN \"numeric\" IF neg.values ARGUMENT IS SWITCHED TO FALSE\n\n================\n\n") + stop(tempo.cat) + } + } + if( ! is.null(length)){ + if( ! (is.numeric(length) & length(length) == 1 & ! grepl(length, pattern = "\\.") & any(is.na(length)) != TRUE)){ + tempo.cat <- paste0("\n\n================\n\nERROR: length ARGUMENT MUST BE A SINGLE INTEGER VALUE\n\n================\n\n") + stop(tempo.cat) + } + } + if( ! is.null(prop)){ + if( ! (is.logical(prop) | length(prop) == 1 & any(is.na(prop)) != TRUE)){ + tempo.cat <- paste0("\n\n================\n\nERROR: prop ARGUMENT MUST BE TRUE OR FALSE ONLY\n\n================\n\n") + stop(tempo.cat) + }else if(prop == TRUE){ + if( ! is.null(class)){ + if( ! any(class %in% c("numeric", "matrix", "array", "data.frame", "table"))){ + tempo.cat <- paste0("\n\n================\n\nERROR: class ARGUMENT CANNOT BE OTHER THAN \"numeric\", \"matrix\", \"array\", \"data.frame\", \"table\" IF prop ARGUMENT IS TRUE\n\n================\n\n") + stop(tempo.cat) + } + } + if( ! is.null(mode)){ + if(mode != "numeric"){ + tempo.cat <- paste0("\n\n================\n\nERROR: mode ARGUMENT CANNOT BE OTHER THAN \"numeric\" IF prop ARGUMENT IS TRUE\n\n================\n\n") + stop(tempo.cat) + } + } + if( ! is.null(typeof)){ + if(typeof != "double"){ + tempo.cat <- paste0("\n\n================\n\nERROR: typeof ARGUMENT CANNOT BE OTHER THAN \"double\" IF prop ARGUMENT IS TRUE\n\n================\n\n") + stop(tempo.cat) + } + } + } + } + if( ! (all(class(double.as.integer.allowed) == "logical") & length(double.as.integer.allowed) == 1 & any(is.na(double.as.integer.allowed)) != TRUE)){ + tempo.cat <- paste0("\n\n================\n\nERROR: THE double.as.integer.allowed ARGUMENT MUST BE TRUE OR FALSE ONLY\n\n================\n\n") + stop(tempo.cat) + } + if( ! (is.logical(all.options.in.data) & length(all.options.in.data) == 1 & any(is.na(all.options.in.data)) != TRUE)){ + tempo.cat <- paste0("\n\n================\n\nERROR: all.options.in.data ARGUMENT MUST BE A SINGLE LOGICAL VALUE (TRUE OR FALSE ONLY)\n\n================\n\n") + stop(tempo.cat) + } + if( ! (all(class(na.contain) == "logical") & length(na.contain) == 1 & any(is.na(na.contain)) != TRUE)){ + tempo.cat <- paste0("\n\n================\n\nERROR: THE na.contain ARGUMENT MUST BE TRUE OR FALSE ONLY\n\n================\n\n") + stop(tempo.cat) + } + if( ! (all(class(print) == "logical") & length(print) == 1 & any(is.na(print)) != TRUE)){ + tempo.cat <- paste0("\n\n================\n\nERROR: THE print ARGUMENT MUST BE TRUE OR FALSE ONLY\n\n================\n\n") + stop(tempo.cat) + } + # end argument checking + if(is.null(data.name)){ + data.name <- deparse(substitute(data)) + } + problem <- FALSE + text <- paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER") + if( ! is.null(options)){ + text <- "" + if( ! all(data %in% options)){ + problem <- TRUE + text <- paste0("PROBLEM: THE ", data.name, " PARAMETER MUST BE SOME OF THESE OPTIONS: ", paste(options, collapse = " "), "\nTHE PROBLEMATIC ELEMENTS OF ", data.name, " ARE: ", paste(unique(data[ ! (data %in% options)]), collapse = " ")) + } + if(all.options.in.data == TRUE){ + if( ! all(options %in% data)){ + problem <- TRUE + if(text == ""){ + text <- paste0("PROBLEM: THE ", data.name, " PARAMETER MUST BE SOME OF THESE OPTIONS: ", paste(options, collapse = " "), "\nTHE PROBLEMATIC ELEMENTS OF ", data.name, " ARE: ", unique(data[ ! (data %in% options)])) + }else{ + text <- paste0(text, "\nPROBLEM: THE ", data.name, " PARAMETER MUST BE SOME OF THESE OPTIONS: ", paste(options, collapse = " "), "\nTHE PROBLEMATIC ELEMENTS OF ", data.name, " ARE: ", unique(data[ ! (data %in% options)])) + } + } + } + if( ! is.null(length)){ + if(length(data) != length){ + problem <- TRUE + if(text == ""){ + text <- paste0("PROBLEM: THE LENGTH OF ", data.name, " MUST BE ", length, " AND NOT ", length(data)) + }else{ + text <- paste0(text, "\nPROBLEM: THE LENGTH OF ", data.name, " MUST BE ", length, " AND NOT ", length(data)) + } + } + } + if(text == ""){ + text <- paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER") + } + } + arg.names <- c("class", "typeof", "mode", "length") + if(is.null(options)){ + for(i2 in 1:length(arg.names)){ + if( ! is.null(get(arg.names[i2]))){ + # script to execute + tempo.script <- ' + problem <- TRUE ; + if(identical(text, paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER"))){ + text <- paste0("PROBLEM: THE ", data.name, " PARAMETER MUST BE ") ; + }else{ + text <- paste0(text, " AND "); + } + text <- paste0(text, toupper(arg.names[i2]), " ", get(arg.names[i2])) + ' + if(typeof(data) == "double" & double.as.integer.allowed == TRUE & ((arg.names[i2] == "class" & get(arg.names[i2]) == "integer") | (arg.names[i2] == "typeof" & get(arg.names[i2]) == "integer"))){ + if(! all(data%%1 == 0)){ # to check integers (use %%, meaning the remaining of a division): see the precedent line + eval(parse(text = tempo.script)) # execute tempo.script + } + }else if(eval(parse(text = paste0(arg.names[i2], "(data)"))) != get(arg.names[i2])){ + eval(parse(text = tempo.script)) # execute tempo.script + } + } + } + } + if( ! is.null(prop)){ + if(prop == TRUE){ + if(any(data < 0 | data > 1, na.rm = TRUE)){ + problem <- TRUE + if(identical(text, paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER"))){ + text <- paste0("PROBLEM: ") + }else{ + text <- paste0(text, " AND ") + } + text <- paste0(text, "THE ", data.name, " PARAMETER MUST BE DECIMAL VALUES BETWEEN 0 AND 1") + } + } + } + if(na.contain == FALSE & any(is.na(data)) == TRUE){ + problem <- TRUE + if(identical(text, paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER"))){ + text <- paste0("PROBLEM: ") + }else{ + text <- paste0(text, " AND ") + } + text <- paste0(text, "THE ", data.name, " PARAMETER CONTAINS NA WHILE NOT AUTHORIZED (na.contain ARGUMENT SET TO FALSE)") + } + if(neg.values == FALSE){ + if(any(data < 0, na.rm = TRUE)){ + problem <- TRUE + if(identical(text, paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER"))){ + text <- paste0("PROBLEM: ") + }else{ + text <- paste0(text, " AND ") + } + text <- paste0(text, "THE ", data.name, " PARAMETER MUST NON NEGATIVE NUMERIC VALUES") + } + } + if(print == TRUE & problem == TRUE){ + cat(paste0("\n\n================\n\n", text, "\n\n================\n\n")) + } + output <- list(problem = problem, text = text, param.name = data.name) + return(output) + } ######## fun_object_info() #### Recovering object information @@ -290,56 +290,56 @@ return(output) # Check OK: clear to go Apollo fun_object_info <- function(data){ -# AIM: -# provide info for a single object -# REQUIRED FUNCTIONS -# none -# ARGUMENTS -# data: object to test -# RETURN -# a list containing the info -# EXAMPLES -# fun_object_info(data = 1:3) -# DEBUGGING -# data = NULL # for function debugging -# data = 1:3 # for function debugging -# data = matrix(1:3) # for function debugging -# data = data.frame(a = 1:3) # for function debugging -# data = factor(1:3) # for function debugging -# data = list(1:3) # for function debugging -# argument checking -# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() -# end argument checking -data.name <- deparse(substitute(data)) -output <- list("FILE_NAME" = data.name) -tempo <- list("FILE_HEAD" = head(data)) -output <- c(output, tempo) -if( ! is.null(data)){ -tempo <- list("FILE_TAIL" = tail(data)) -output <- c(output, tempo) -if( ! is.null(dim(data))){ -tempo <- list("FILE_DIMENSION" = dim(data)) -names(tempo[[1]]) <- c("NROW", "NCOL") -output <- c(output, tempo) -} -tempo <- list("SUMMARY" = summary(data)) -output <- c(output, tempo) -} -if(class(data) == "data.frame" | class(data) == "matrix"){ -tempo <- list("COLUM_NAMES" = names(data)) -output <- c(output, tempo) -} -if(class(data) == "data.frame"){ -tempo <- list("STRUCTURE" = ls.str(data)) -output <- c(output, tempo) -tempo <- list("COLUMN_TYPE" = sapply(data, FUN = "typeof")) -output <- c(output, tempo) -} -if(class(data) == "list"){ -tempo <- list("COMPARTMENT_NAMES" = names(data)) -output <- c(output, tempo) -} -return(output) + # AIM: + # provide a full description of the object + # REQUIRED FUNCTIONS + # none + # ARGUMENTS + # data: object to test + # RETURN + # a list containing the info + # EXAMPLES + # fun_object_info(data = 1:3) + # DEBUGGING + # data = NULL # for function debugging + # data = 1:3 # for function debugging + # data = matrix(1:3) # for function debugging + # data = data.frame(a = 1:3) # for function debugging + # data = factor(1:3) # for function debugging + # data = list(1:3) # for function debugging + # argument checking + # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() + # end argument checking + data.name <- deparse(substitute(data)) + output <- list("FILE_NAME" = data.name) + tempo <- list("FILE_HEAD" = head(data)) + output <- c(output, tempo) + if( ! is.null(data)){ + tempo <- list("FILE_TAIL" = tail(data)) + output <- c(output, tempo) + if( ! is.null(dim(data))){ + tempo <- list("FILE_DIMENSION" = dim(data)) + names(tempo[[1]]) <- c("NROW", "NCOL") + output <- c(output, tempo) + } + tempo <- list("SUMMARY" = summary(data)) + output <- c(output, tempo) + } + if(class(data) == "data.frame" | class(data) == "matrix"){ + tempo <- list("COLUM_NAMES" = names(data)) + output <- c(output, tempo) + } + if(class(data) == "data.frame"){ + tempo <- list("STRUCTURE" = ls.str(data)) + output <- c(output, tempo) + tempo <- list("COLUMN_TYPE" = sapply(data, FUN = "typeof")) + output <- c(output, tempo) + } + if(class(data) == "list"){ + tempo <- list("COMPARTMENT_NAMES" = names(data)) + output <- c(output, tempo) + } + return(output) } @@ -348,209 +348,210 @@ return(output) # Check OK: clear to go Apollo fun_1D_comp <- function(data1, data2){ -# AIM: -# compare two 1D dataset (vector of factor or 1D table) of the same class or not. Check and report in a list if the 2 datasets have: -# same class -# same elements -# same element names -# REQUIRED FUNCTIONS -# none -# ARGUMENTS -# data1: vector or factor or 1D table -# data2: vector or factor or 1D table -# RETURN -# a list containing: -# $same.class: logical. Are class identical? -# $class: class of the 2 datasets (NULL otherwise) -# $same.length: logical. Are number of elements identical? -# $length: number of elements in the 2 datasets (NULL otherwise) -# $same.levels: logical. Are levels identical? (NULL if data1 and data2 are not factors) -# $levels: levels of the 2 datasets if identical (NULL otherwise or NULL if data1 and data2 are not factors) -# $any.id.levels: logical. Is there any identical levels? (NULL if data1 and data2 are not factors) -# $same.levels.pos1: position, in data1, of the levels identical in data2 (NULL if data1 and data2 are not factors) -# $same.levels.pos2: position, in data2, of the levels identical in data1 (NULL if data1 and data2 are not factors) -# $common.levels: common levels between data1 and data2 (can be a subset of $levels or not). NULL if no common levels or if data1 and data2 are not factors -# $same.name: logical. Are element names identical ? -# $name: name of elements of the 2 datasets if identical (NULL otherwise) -# $any.id.name: logical. Is there any element names identical ? -# $same.name.pos1: position, in data1, of the element names identical in data2 -# $same.name.pos2: position, in data2, of the elements names identical in data1 -# $common.names: common element names between data1 and data2 (can be a subset of $name or not). NULL if no common element names -# $any.id.element: logical. is there any identical elements ? -# $same.element.pos1: position, in data1, of the elements identical in data2 -# $same.element.pos2: position, in data2, of the elements identical in data1 -# $common.elements: common elements between data1 and data2. NULL if no common elements -# $identical.object: logical. Are objects identical (kind of object, element names and content)? -# $identical.content: logical. Are content objects identical (identical elements excluding kind of object and element names)? -# EXAMPLES -# obs1 = 1:5 ; obs2 = 1:5 ; names(obs1) <- LETTERS[1:5] ; names(obs2) <- LETTERS[1:5] ; fun_1D_comp(obs1, obs2) -# obs1 = 1:5 ; obs2 = 1:5 ; names(obs1) <- LETTERS[1:5] ; fun_1D_comp(obs1, obs2) -# obs1 = 1:5 ; obs2 = 3:6 ; names(obs1) <- LETTERS[1:5] ; names(obs2) <- LETTERS[1:4] ; fun_1D_comp(obs1, obs2) -# obs1 = factor(LETTERS[1:5]) ; obs2 = factor(LETTERS[1:5]) ; fun_1D_comp(obs1, obs2) -# obs1 = factor(LETTERS[1:5]) ; obs2 = factor(LETTERS[10:11]) ; fun_1D_comp(obs1, obs2) -# obs1 = factor(LETTERS[1:5]) ; obs2 = factor(LETTERS[4:7]) ; fun_1D_comp(obs1, obs2) -# obs1 = 1:5 ; obs2 = factor(LETTERS[1:5]) ; fun_1D_comp(obs1, obs2) -# obs1 = 1:5 ; obs2 = 1.1:6.1 ; fun_1D_comp(obs1, obs2) -# obs1 = as.table(1:5); obs2 = as.table(1:5) ; fun_1D_comp(obs1, obs2) -# obs1 = as.table(1:5); obs2 = 1:5 ; fun_1D_comp(obs1, obs2) -# DEBUGGING -# data1 = 1:5 ; data2 = 1:5 ; names(data1) <- LETTERS[1:5] ; names(data2) <- LETTERS[1:5] # for function debugging -# argument checking -# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() -if( ! any(class(data1) %in% c("logical", "integer", "numeric", "character", "factor", "table"))){ -tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 ARGUMENT MUST BE A NON NULL VECTOR, FACTOR OR 1D TABLE\n\n================\n\n") -stop(tempo.cat) -}else if(all(class(data1) %in% "table")){ -if(length(dim(data1)) > 1){ -tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 ARGUMENT MUST BE A 1D TABLE\n\n================\n\n") -stop(tempo.cat) -} -} -if( ! any(class(data2) %in% c("logical", "integer", "numeric", "character", "factor", "table"))){ -tempo.cat <- paste0("\n\n================\n\nERROR: THE data2 ARGUMENT MUST BE A NON NULL VECTOR, FACTOR OR 1D TABLE\n\n================\n\n") -stop(tempo.cat) -}else if(all(class(data2) %in% "table")){ -if(length(dim(data2)) > 1){ -tempo.cat <- paste0("\n\n================\n\nERROR: THE data2 ARGUMENT MUST BE A 1D TABLE\n\n================\n\n") -stop(tempo.cat) -} -} -# end argument checking -same.class <- NULL -class <- NULL -same.length <- NULL -length <- NULL -same.levels <- NULL -levels <- NULL -any.id.levels <- NULL -same.levels.pos1 <- NULL -same.levels.pos2 <- NULL -common.levels <- NULL -same.name <- NULL -name <- NULL -any.id.name <- NULL -same.name.pos1 <- NULL -same.name.pos2 <- NULL -common.names <- NULL -any.id.element <- NULL -same.element.pos1 <- NULL -same.element.pos2 <- NULL -common.elements <- NULL -identical.object <- NULL -identical.content <- NULL -if(identical(data1, data2)){ -same.class <- TRUE -class <- class(data1) -same.length <- TRUE -length <- length(data1) -if(any(class(data1) %in% "factor")){ -same.levels <- TRUE -levels <- levels(data1) -any.id.levels <- TRUE -same.levels.pos1 <- 1:length(levels(data1)) -same.levels.pos2 <- 1:length(levels(data2)) -common.levels <- levels(data1) -} -if( ! is.null(names(data1))){ -same.name <- TRUE -name <- names(data1) -any.id.name <- TRUE -same.name.pos1 <- 1:length(data1) -same.name.pos2 <- 1:length(data2) -common.names <- names(data1) -} -any.id.element <- TRUE -same.element.pos1 <- 1:length(data1) -same.element.pos2 <- 1:length(data2) -common.elements <- data1 -identical.object <- TRUE -identical.content <- TRUE -}else{ -identical.object <- FALSE -if( ! identical(class(data1), class(data2))){ -same.class <- FALSE -}else{ -same.class <- TRUE -class <- class(data1) -} -if( ! identical(length(data1), length(data2))){ -same.length<- FALSE -}else{ -same.length<- TRUE -length <- length(data1) -} -if(any(class(data1) %in% "factor") & any(class(data2) %in% "factor")){ -if( ! identical(levels(data1), levels(data2))){ -same.levels <- FALSE -}else{ -same.levels <- TRUE -levels <- levels(data1) -} -any.id.levels <- FALSE -if(any(levels(data1) %in% levels(data2))){ -any.id.levels <- TRUE -same.levels.pos1 <- which(levels(data1) %in% levels(data2)) -} -if(any(levels(data2) %in% levels(data1))){ -any.id.levels <- TRUE -same.levels.pos2 <- which(levels(data2) %in% levels(data1)) -} -if(any.id.levels == TRUE){ -common.levels <- unique(c(levels(data1)[same.levels.pos1], levels(data2)[same.levels.pos2])) -} -} -if(any(class(data1) %in% "factor")){ # to compare content -data1 <- as.character(data1) -} -if(any(class(data2) %in% "factor")){ # to compare content -data2 <- as.character(data2) -} -if( ! (is.null(names(data1)) & is.null(names(data2)))){ -if( ! identical(names(data1), names(data2))){ -same.name <- FALSE -}else{ -same.name <- TRUE -name <- names(data1) -} -any.id.name <- FALSE -if(any(names(data1) %in% names(data2))){ -any.id.name <- TRUE -same.name.pos1 <- which(names(data1) %in% names(data2)) -} -if(any(names(data2) %in% names(data1))){ -any.id.name <- TRUE -same.name.pos2 <- which(names(data2) %in% names(data1)) -} -if(any.id.name == TRUE){ -common.names <- unique(c(names(data1)[same.name.pos1], names(data2)[same.name.pos2])) -} -} -any.id.element <- FALSE -if(any(data1 %in% data2)){ -any.id.element <- TRUE -same.element.pos1 <- which(data1 %in% data2) -} -if(any(data2 %in% data1)){ -any.id.element <- TRUE -same.element.pos2 <- which(data2 %in% data1) -} -if(any.id.element == TRUE){ -common.elements <- unique(c(data1[same.element.pos1], data2[same.element.pos2])) -} -if(same.length == TRUE & ! all(is.null(same.element.pos1), is.null(same.element.pos2))){ -names(same.element.pos1) <- NULL -names(same.element.pos2) <- NULL -if(identical(same.element.pos1, same.element.pos2)){ -identical.content <- TRUE -}else{ -identical.content <- FALSE -} -}else{ -identical.content <- FALSE -} -} -output <- list(same.class = same.class, class = class, same.length = same.length, length = length, same.levels = same.levels, levels = levels, any.id.levels = any.id.levels, same.levels.pos1 = same.levels.pos1, same.levels.pos2 = same.levels.pos2, common.levels = common.levels, same.name = same.name, name = name, any.id.name = any.id.name, same.name.pos1 = same.name.pos1, same.name.pos2 = same.name.pos2, common.names = common.names, any.id.element = any.id.element, same.element.pos1 = same.element.pos1, same.element.pos2 = same.element.pos2, common.elements = common.elements, identical.object = identical.object, identical.content = identical.content) -return(output) + # AIM: + # compare two 1D datasets (vector of factor or 1D table) of the same class or not. Check and report in a list if the 2 datasets have: + # same class + # common elements + # common element names (except factors) + # common levels (factors only) + # REQUIRED FUNCTIONS + # none + # ARGUMENTS + # data1: vector or factor or 1D table + # data2: vector or factor or 1D table + # RETURN + # a list containing: + # $same.class: logical. Are class identical? + # $class: class of the 2 datasets (NULL otherwise) + # $same.length: logical. Are number of elements identical? + # $length: number of elements in the 2 datasets (NULL otherwise) + # $same.levels: logical. Are levels identical? (NULL if data1 and data2 are not factors) + # $levels: levels of the 2 datasets if identical (NULL otherwise or NULL if data1 and data2 are not factors) + # $any.id.levels: logical. Is there any identical levels? (NULL if data1 and data2 are not factors) + # $same.levels.pos1: position, in data1, of the levels identical in data2 (NULL if data1 and data2 are not factors) + # $same.levels.pos2: position, in data2, of the levels identical in data1 (NULL if data1 and data2 are not factors) + # $common.levels: common levels between data1 and data2 (can be a subset of $levels or not). NULL if no common levels or if data1 and data2 are not factors + # $same.name: logical. Are element names identical ? + # $name: name of elements of the 2 datasets if identical (NULL otherwise) + # $any.id.name: logical. Is there any element names identical ? + # $same.name.pos1: position, in data1, of the element names identical in data2 + # $same.name.pos2: position, in data2, of the elements names identical in data1 + # $common.names: common element names between data1 and data2 (can be a subset of $name or not). NULL if no common element names + # $any.id.element: logical. is there any identical elements ? + # $same.element.pos1: position, in data1, of the elements identical in data2 + # $same.element.pos2: position, in data2, of the elements identical in data1 + # $common.elements: common elements between data1 and data2. NULL if no common elements + # $identical.object: logical. Are objects identical (kind of object, element names and content)? + # $identical.content: logical. Are content objects identical (identical elements excluding kind of object and element names)? + # EXAMPLES + # obs1 = 1:5 ; obs2 = 1:5 ; names(obs1) <- LETTERS[1:5] ; names(obs2) <- LETTERS[1:5] ; fun_1D_comp(obs1, obs2) + # obs1 = 1:5 ; obs2 = 1:5 ; names(obs1) <- LETTERS[1:5] ; fun_1D_comp(obs1, obs2) + # obs1 = 1:5 ; obs2 = 3:6 ; names(obs1) <- LETTERS[1:5] ; names(obs2) <- LETTERS[1:4] ; fun_1D_comp(obs1, obs2) + # obs1 = factor(LETTERS[1:5]) ; obs2 = factor(LETTERS[1:5]) ; fun_1D_comp(obs1, obs2) + # obs1 = factor(LETTERS[1:5]) ; obs2 = factor(LETTERS[10:11]) ; fun_1D_comp(obs1, obs2) + # obs1 = factor(LETTERS[1:5]) ; obs2 = factor(LETTERS[4:7]) ; fun_1D_comp(obs1, obs2) + # obs1 = 1:5 ; obs2 = factor(LETTERS[1:5]) ; fun_1D_comp(obs1, obs2) + # obs1 = 1:5 ; obs2 = 1.1:6.1 ; fun_1D_comp(obs1, obs2) + # obs1 = as.table(1:5); obs2 = as.table(1:5) ; fun_1D_comp(obs1, obs2) + # obs1 = as.table(1:5); obs2 = 1:5 ; fun_1D_comp(obs1, obs2) + # DEBUGGING + # data1 = 1:5 ; data2 = 1:5 ; names(data1) <- LETTERS[1:5] ; names(data2) <- LETTERS[1:5] # for function debugging + # argument checking + # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() + if( ! any(class(data1) %in% c("logical", "integer", "numeric", "character", "factor", "table"))){ + tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 ARGUMENT MUST BE A NON NULL VECTOR, FACTOR OR 1D TABLE\n\n================\n\n") + stop(tempo.cat) + }else if(all(class(data1) %in% "table")){ + if(length(dim(data1)) > 1){ + tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 ARGUMENT MUST BE A 1D TABLE\n\n================\n\n") + stop(tempo.cat) + } + } + if( ! any(class(data2) %in% c("logical", "integer", "numeric", "character", "factor", "table"))){ + tempo.cat <- paste0("\n\n================\n\nERROR: THE data2 ARGUMENT MUST BE A NON NULL VECTOR, FACTOR OR 1D TABLE\n\n================\n\n") + stop(tempo.cat) + }else if(all(class(data2) %in% "table")){ + if(length(dim(data2)) > 1){ + tempo.cat <- paste0("\n\n================\n\nERROR: THE data2 ARGUMENT MUST BE A 1D TABLE\n\n================\n\n") + stop(tempo.cat) + } + } + # end argument checking + same.class <- NULL + class <- NULL + same.length <- NULL + length <- NULL + same.levels <- NULL + levels <- NULL + any.id.levels <- NULL + same.levels.pos1 <- NULL + same.levels.pos2 <- NULL + common.levels <- NULL + same.name <- NULL + name <- NULL + any.id.name <- NULL + same.name.pos1 <- NULL + same.name.pos2 <- NULL + common.names <- NULL + any.id.element <- NULL + same.element.pos1 <- NULL + same.element.pos2 <- NULL + common.elements <- NULL + identical.object <- NULL + identical.content <- NULL + if(identical(data1, data2)){ + same.class <- TRUE + class <- class(data1) + same.length <- TRUE + length <- length(data1) + if(any(class(data1) %in% "factor")){ + same.levels <- TRUE + levels <- levels(data1) + any.id.levels <- TRUE + same.levels.pos1 <- 1:length(levels(data1)) + same.levels.pos2 <- 1:length(levels(data2)) + common.levels <- levels(data1) + } + if( ! is.null(names(data1))){ + same.name <- TRUE + name <- names(data1) + any.id.name <- TRUE + same.name.pos1 <- 1:length(data1) + same.name.pos2 <- 1:length(data2) + common.names <- names(data1) + } + any.id.element <- TRUE + same.element.pos1 <- 1:length(data1) + same.element.pos2 <- 1:length(data2) + common.elements <- data1 + identical.object <- TRUE + identical.content <- TRUE + }else{ + identical.object <- FALSE + if( ! identical(class(data1), class(data2))){ + same.class <- FALSE + }else{ + same.class <- TRUE + class <- class(data1) + } + if( ! identical(length(data1), length(data2))){ + same.length<- FALSE + }else{ + same.length<- TRUE + length <- length(data1) + } + if(any(class(data1) %in% "factor") & any(class(data2) %in% "factor")){ + if( ! identical(levels(data1), levels(data2))){ + same.levels <- FALSE + }else{ + same.levels <- TRUE + levels <- levels(data1) + } + any.id.levels <- FALSE + if(any(levels(data1) %in% levels(data2))){ + any.id.levels <- TRUE + same.levels.pos1 <- which(levels(data1) %in% levels(data2)) + } + if(any(levels(data2) %in% levels(data1))){ + any.id.levels <- TRUE + same.levels.pos2 <- which(levels(data2) %in% levels(data1)) + } + if(any.id.levels == TRUE){ + common.levels <- unique(c(levels(data1)[same.levels.pos1], levels(data2)[same.levels.pos2])) + } + } + if(any(class(data1) %in% "factor")){ # to compare content + data1 <- as.character(data1) + } + if(any(class(data2) %in% "factor")){ # to compare content + data2 <- as.character(data2) + } + if( ! (is.null(names(data1)) & is.null(names(data2)))){ + if( ! identical(names(data1), names(data2))){ + same.name <- FALSE + }else{ + same.name <- TRUE + name <- names(data1) + } + any.id.name <- FALSE + if(any(names(data1) %in% names(data2))){ + any.id.name <- TRUE + same.name.pos1 <- which(names(data1) %in% names(data2)) + } + if(any(names(data2) %in% names(data1))){ + any.id.name <- TRUE + same.name.pos2 <- which(names(data2) %in% names(data1)) + } + if(any.id.name == TRUE){ + common.names <- unique(c(names(data1)[same.name.pos1], names(data2)[same.name.pos2])) + } + } + any.id.element <- FALSE + if(any(data1 %in% data2)){ + any.id.element <- TRUE + same.element.pos1 <- which(data1 %in% data2) + } + if(any(data2 %in% data1)){ + any.id.element <- TRUE + same.element.pos2 <- which(data2 %in% data1) + } + if(any.id.element == TRUE){ + common.elements <- unique(c(data1[same.element.pos1], data2[same.element.pos2])) + } + if(same.length == TRUE & ! all(is.null(same.element.pos1), is.null(same.element.pos2))){ + names(same.element.pos1) <- NULL + names(same.element.pos2) <- NULL + if(identical(same.element.pos1, same.element.pos2)){ + identical.content <- TRUE + }else{ + identical.content <- FALSE + } + }else{ + identical.content <- FALSE + } + } + output <- list(same.class = same.class, class = class, same.length = same.length, length = length, same.levels = same.levels, levels = levels, any.id.levels = any.id.levels, same.levels.pos1 = same.levels.pos1, same.levels.pos2 = same.levels.pos2, common.levels = common.levels, same.name = same.name, name = name, any.id.name = any.id.name, same.name.pos1 = same.name.pos1, same.name.pos2 = same.name.pos2, common.names = common.names, any.id.element = any.id.element, same.element.pos1 = same.element.pos1, same.element.pos2 = same.element.pos2, common.elements = common.elements, identical.object = identical.object, identical.content = identical.content) + return(output) } @@ -559,243 +560,244 @@ return(output) # Check OK: clear to go Apollo fun_2D_comp <- function(data1, data2){ -# AIM: -# compare two 2D dataset of the same class or not. Check and report in a list if the 2 datasets have: -# same row names -# same column names -# same row number -# same column number -# potential identical rows between the 2 datasets -# potential identical columns between the 2 datasets -# REQUIRED FUNCTIONS -# none -# ARGUMENTS -# data1: matrix, data frame or table -# data2: matrix, data frame or table -# RETURN -# a list containing: -# $same.class: logical. Are class identical ? -# $class: classes of the 2 datasets (NULL otherwise) -# $same.dim: logical. Are dimension identical ? -# $dim: dimension of the 2 datasets (NULL otherwise) -# $same.row.nb: logical. Are number of rows identical ? -# $row.nb: nb of rows of the 2 datasets if identical (NULL otherwise) -# $same.col.nb: logical. Are number of columns identical ? -# $col.nb: nb of columns of the 2 datasets if identical (NULL otherwise) -# $same.row.name: logical. Are row names identical ? -# $row.name: name of rows of the 2 datasets if identical (NULL otherwise) -# $same.col.name: logical. Are column names identical ? -# $col.name: name of columns of the 2 datasets if identical (NULL otherwise) -# $any.id.row: logical. is there identical rows ? -# $same.row.pos1: position, in data1, of the rows identical in data2 -# $same.row.pos2: position, in data2, of the rows identical in data1 -# $any.id.col: logical. is there identical columns ? -# $same.col.pos1: position in data1 of the cols identical in data2 -# $same.col.pos2: position in data2 of the cols identical in data1 -# $identical.object: logical. Are objects identical (including row & column names)? -# $identical.content: logical. Are content objects identical (identical excluding row & column names)? -# EXAMPLES -# obs1 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) ; obs2 = as.data.frame(matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5]))) ; fun_2D_comp(obs1, obs2) -# DEBUGGING -# data1 = matrix(1:10, ncol = 5) ; data2 = matrix(1:10, ncol = 5) # for function debugging -# data1 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) ; data2 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) # for function debugging -# data1 = matrix(1:15, byrow = TRUE, ncol = 5, dimnames = list(letters[1:3], LETTERS[1:5])) ; data2 = matrix(1:10, byrow = TRUE, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) # for function debugging -# data1 = matrix(1:15, ncol = 5, dimnames = list(letters[1:3], LETTERS[1:5])) ; data2 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) # for function debugging -# data1 = matrix(1:15, ncol = 5, dimnames = list(paste0("A", letters[1:3]), LETTERS[1:5])) ; data2 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) # for function debugging -# data1 = matrix(1:15, ncol = 5, dimnames = list(letters[1:3], LETTERS[1:5])) ; data2 = matrix(1:12, ncol = 4, dimnames = list(letters[1:3], LETTERS[1:4])) # for function debugging -# data1 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) ; data2 = matrix(101:110, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) # for function debugging -# data1 = data.frame(a = 1:3, b= letters[1:3], row.names = LETTERS[1:3]) ; data2 = data.frame(A = 1:3, B= letters[1:3]) # for function debugging -# data1 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) ; data2 = as.data.frame(matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5]))) # for function debugging -# data1 = table(Exp1 = c("A", "A", "A", "B", "B", "B"), Exp2 = c("A1", "B1", "A1", "C1", "C1", "B1")) ; data2 = data.frame(A = 1:3, B= letters[1:3]) # for function debugging -# argument checking -# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() -if( ! any(class(data1) %in% c("matrix", "data.frame", "table"))){ -tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 ARGUMENT MUST BE A MATRIX, DATA FRAME OR TABLE\n\n================\n\n") -stop(tempo.cat) -} -if( ! any(class(data2) %in% c("matrix", "data.frame", "table"))){ -tempo.cat <- paste0("\n\n================\n\nERROR: THE data2 ARGUMENT MUST BE A MATRIX, DATA FRAME OR TABLE\n\n================\n\n") -stop(tempo.cat) -} -# end argument checking -same.class <- NULL -class <- NULL -same.dim <- NULL -dim <- NULL -same.row.nb <- NULL -row.nb <- NULL -same.col.nb <- NULL -col.nb <- NULL -same.row.name <- NULL -row.name <- NULL -same.col.name <- NULL -col.name <- NULL -any.id.row <- NULL -same.row.pos1 <- NULL -same.row.pos2 <- NULL -any.id.col <- NULL -same.col.pos1 <- NULL -same.col.pos2 <- NULL -identical.object <- NULL -identical.content <- NULL -if(identical(data1, data2) & any(class(data1) %in% c("matrix", "data.frame", "table"))){ -same.class <- TRUE -class <- class(data1) -same.dim <- TRUE -dim <- dim(data1) -same.row.nb <- TRUE -row.nb <- nrow(data1) -same.col.nb <- TRUE -col.nb <- ncol(data1) -same.row.name <- TRUE -row.name <- dimnames(data1)[[1]] -same.col.name <- TRUE -col.name <- dimnames(data1)[[2]] -any.id.row <- TRUE -same.row.pos1 <- 1:row.nb -same.row.pos2 <- 1:row.nb -any.id.col <- TRUE -same.col.pos1 <- 1:col.nb -same.col.pos2 <- 1:col.nb -identical.object <- TRUE -identical.content <- TRUE -}else{ -identical.object <- FALSE -if(all(class(data1) == "table") & length(dim(data1)) == 1){ -tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 ARGUMENT IS A 1D TABLE. USE THE info_1D_dataset_fun FUNCTION\n\n================\n\n") -stop(tempo.cat) -} -if(all(class(data2) == "table") & length(dim(data2)) == 1){ -tempo.cat <- paste0("\n\n================\n\nERROR: THE data2 ARGUMENT IS A 1D TABLE. USE THE info_1D_dataset_fun FUNCTION\n\n================\n\n") -stop(tempo.cat) -} -if( ! identical(class(data1), class(data2))){ -same.class <- FALSE -}else if( ! any(class(data1) %in% c("matrix", "data.frame", "table"))){ -tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 AND data2 ARGUMENTS MUST BE EITHER MATRIX, DATA FRAME OR TABLE\n\n================\n\n") -stop(tempo.cat) -}else{ -same.class <- TRUE -class <- class(data1) -} -if( ! identical(dim(data1), dim(data2))){ -same.dim <- FALSE -}else{ -same.dim <- TRUE -dim <- dim(data1) -} -if( ! identical(nrow(data1), nrow(data2))){ -same.row.nb <- FALSE -}else{ -same.row.nb <- TRUE -row.nb <- nrow(data1) -} -if( ! identical(ncol(data1), ncol(data2))){ -same.col.nb <- FALSE -}else{ -same.col.nb <- TRUE -col.nb <- ncol(data1) -} -# row and col names -if(is.null(dimnames(data1)) & is.null(dimnames(data2))){ -same.row.name <- TRUE -same.col.name <- TRUE -# row and col names remain NULL -}else if((is.null(dimnames(data1)) & ! is.null(dimnames(data2))) | ( ! is.null(dimnames(data1)) & is.null(dimnames(data2)))){ -same.row.name <- FALSE -same.col.name <- FALSE -# row and col names remain NULL -}else{ -if( ! identical(dimnames(data1)[[1]], dimnames(data2)[[1]])){ -same.row.name <- FALSE -# row names remain NULL -}else{ -same.row.name <- TRUE -row.name <- dimnames(data1)[[1]] -} -if( ! identical(dimnames(data1)[[2]], dimnames(data2)[[2]])){ -same.col.name <- FALSE -# col names remain NULL -}else{ -same.col.name <- TRUE -col.name <- dimnames(data1)[[2]] -} -} -# identical row and col content -if(all(class(data1) == "table")){ -as.data.frame(matrix(data1, ncol = ncol(data1)), stringsAsFactors = FALSE) -}else if(all(class(data1) == "matrix")){ -data1 <- as.data.frame(data1, stringsAsFactors = FALSE) -}else if(all(class(data1) == "data.frame")){ -data1 <- data.frame(lapply(data1, as.character), stringsAsFactors=FALSE) -} -if(all(class(data2) == "table")){ -as.data.frame(matrix(data2, ncol = ncol(data2)), stringsAsFactors = FALSE) -}else if(all(class(data2) == "matrix")){ -data2 <- as.data.frame(data2, stringsAsFactors = FALSE) -}else if(all(class(data2) == "data.frame")){ -data2 <- data.frame(lapply(data2, as.character), stringsAsFactors=FALSE) -} -row.names(data1) <- paste0("A", 1:nrow(data1)) -row.names(data2) <- paste0("A", 1:nrow(data2)) -if(same.col.nb == TRUE){ # because if not the same col nb, the row cannot be identical -same.row.pos1 <- suppressWarnings(which(mapply(FUN = identical, c(as.data.frame(t(data1), stringsAsFactors = FALSE)), c(as.data.frame(t(data2), stringsAsFactors = FALSE))))) -same.row.pos2 <- suppressWarnings(which(mapply(FUN = identical, c(as.data.frame(t(data2), stringsAsFactors = FALSE)), c(as.data.frame(t(data1), stringsAsFactors = FALSE))))) -names(same.row.pos1) <- NULL -names(same.row.pos2) <- NULL -if(all(is.na(same.row.pos1))){ -same.row.pos1 <- NULL -}else{ -same.row.pos1 <- same.row.pos1[ ! is.na(same.row.pos1)] -any.id.row <- TRUE -} -if(all(is.na(same.row.pos2))){ -same.row.pos2 <- NULL -}else{ -same.row.pos2 <- same.row.pos2[ ! is.na(same.row.pos2)] -any.id.row <- TRUE -} -if(is.null(same.row.pos1) & is.null(same.row.pos2)){ -any.id.row <- FALSE -} -}else{ -any.id.row <- FALSE -# same.row.pos1 and 2 remain NULL -} -if(same.row.nb == TRUE){ # because if not the same row nb, the col cannot be identical -same.col.pos1 <- suppressWarnings(which(mapply(FUN = identical, c(data1), c(data2)))) -same.col.pos2 <- suppressWarnings(which(mapply(FUN = identical, c(data2), c(data1)))) -names(same.col.pos1) <- NULL -names(same.col.pos2) <- NULL -if(all(is.na(same.col.pos1))){ -same.col.pos1 <- NULL -}else{ -same.col.pos1 <- same.col.pos1[ ! is.na(same.col.pos1)] -any.id.col <- TRUE -} -if(all(is.na(same.col.pos2))){ -same.col.pos2 <- NULL -}else{ -same.col.pos2 <- same.col.pos2[ ! is.na(same.col.pos2)] -any.id.col <- TRUE -} -if(is.null(same.col.pos1) & is.null(same.col.pos2)){ -any.id.col <- FALSE -} -}else{ -any.id.col <- FALSE -# same.col.pos1 and 2 remain NULL -} -if(same.dim == TRUE & ! all(is.null(same.row.pos1), is.null(same.row.pos2), is.null(same.col.pos1), is.null(same.col.pos2))){ # same.dim == TRUE means that same.row.nb == TRUE and same.col.nb == TRUE, meaning that row.nb != NULL and col.nb != NULL. Thus, no need to include these checkings -if(identical(same.row.pos1, 1:row.nb) & identical(same.row.pos2, 1:row.nb) & identical(same.col.pos1, 1:col.nb) & identical(same.col.pos2, 1:col.nb)){ -identical.content <- TRUE -} -}else{ -identical.content <- FALSE -} -} -output <- list(same.class = same.class, class = class, same.dim = same.dim, dim = dim, same.row.nb = same.row.nb, row.nb = row.nb, same.col.nb = same.col.nb , col.nb = col.nb, same.row.name = same.row.name, row.name = row.name, same.col.name = same.col.name, col.name = col.name, any.id.row = any.id.row, same.row.pos1 = same.row.pos1, same.row.pos2 = same.row.pos2, any.id.col = any.id.col, same.col.pos1 = same.col.pos1, same.col.pos2 = same.col.pos2, identical.object = identical.object, identical.content = identical.content) -return(output) + # AIM: + # compare two 2D datasets of the same class or not. Check and report in a list if the 2 datasets have: + # same class + # common row names + # common column names + # same row number + # same column number + # potential identical rows between the 2 datasets + # potential identical columns between the 2 datasets + # REQUIRED FUNCTIONS + # none + # ARGUMENTS + # data1: matrix, data frame or table + # data2: matrix, data frame or table + # RETURN + # a list containing: + # $same.class: logical. Are class identical ? + # $class: classes of the 2 datasets (NULL otherwise) + # $same.dim: logical. Are dimension identical ? + # $dim: dimension of the 2 datasets (NULL otherwise) + # $same.row.nb: logical. Are number of rows identical ? + # $row.nb: nb of rows of the 2 datasets if identical (NULL otherwise) + # $same.col.nb: logical. Are number of columns identical ? + # $col.nb: nb of columns of the 2 datasets if identical (NULL otherwise) + # $same.row.name: logical. Are row names identical ? + # $row.name: name of rows of the 2 datasets if identical (NULL otherwise) + # $same.col.name: logical. Are column names identical ? + # $col.name: name of columns of the 2 datasets if identical (NULL otherwise) + # $any.id.row: logical. is there identical rows ? + # $same.row.pos1: position, in data1, of the rows identical in data2 + # $same.row.pos2: position, in data2, of the rows identical in data1 + # $any.id.col: logical. is there identical columns ? + # $same.col.pos1: position in data1 of the cols identical in data2 + # $same.col.pos2: position in data2 of the cols identical in data1 + # $identical.object: logical. Are objects identical (including row & column names)? + # $identical.content: logical. Are content objects identical (identical excluding row & column names)? + # EXAMPLES + # obs1 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) ; obs2 = as.data.frame(matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5]))) ; fun_2D_comp(obs1, obs2) + # DEBUGGING + # data1 = matrix(1:10, ncol = 5) ; data2 = matrix(1:10, ncol = 5) # for function debugging + # data1 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) ; data2 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) # for function debugging + # data1 = matrix(1:15, byrow = TRUE, ncol = 5, dimnames = list(letters[1:3], LETTERS[1:5])) ; data2 = matrix(1:10, byrow = TRUE, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) # for function debugging + # data1 = matrix(1:15, ncol = 5, dimnames = list(letters[1:3], LETTERS[1:5])) ; data2 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) # for function debugging + # data1 = matrix(1:15, ncol = 5, dimnames = list(paste0("A", letters[1:3]), LETTERS[1:5])) ; data2 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) # for function debugging + # data1 = matrix(1:15, ncol = 5, dimnames = list(letters[1:3], LETTERS[1:5])) ; data2 = matrix(1:12, ncol = 4, dimnames = list(letters[1:3], LETTERS[1:4])) # for function debugging + # data1 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) ; data2 = matrix(101:110, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) # for function debugging + # data1 = data.frame(a = 1:3, b= letters[1:3], row.names = LETTERS[1:3]) ; data2 = data.frame(A = 1:3, B= letters[1:3]) # for function debugging + # data1 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) ; data2 = as.data.frame(matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5]))) # for function debugging + # data1 = table(Exp1 = c("A", "A", "A", "B", "B", "B"), Exp2 = c("A1", "B1", "A1", "C1", "C1", "B1")) ; data2 = data.frame(A = 1:3, B= letters[1:3]) # for function debugging + # argument checking + # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() + if( ! any(class(data1) %in% c("matrix", "data.frame", "table"))){ + tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 ARGUMENT MUST BE A MATRIX, DATA FRAME OR TABLE\n\n================\n\n") + stop(tempo.cat) + } + if( ! any(class(data2) %in% c("matrix", "data.frame", "table"))){ + tempo.cat <- paste0("\n\n================\n\nERROR: THE data2 ARGUMENT MUST BE A MATRIX, DATA FRAME OR TABLE\n\n================\n\n") + stop(tempo.cat) + } + # end argument checking + same.class <- NULL + class <- NULL + same.dim <- NULL + dim <- NULL + same.row.nb <- NULL + row.nb <- NULL + same.col.nb <- NULL + col.nb <- NULL + same.row.name <- NULL + row.name <- NULL + same.col.name <- NULL + col.name <- NULL + any.id.row <- NULL + same.row.pos1 <- NULL + same.row.pos2 <- NULL + any.id.col <- NULL + same.col.pos1 <- NULL + same.col.pos2 <- NULL + identical.object <- NULL + identical.content <- NULL + if(identical(data1, data2) & any(class(data1) %in% c("matrix", "data.frame", "table"))){ + same.class <- TRUE + class <- class(data1) + same.dim <- TRUE + dim <- dim(data1) + same.row.nb <- TRUE + row.nb <- nrow(data1) + same.col.nb <- TRUE + col.nb <- ncol(data1) + same.row.name <- TRUE + row.name <- dimnames(data1)[[1]] + same.col.name <- TRUE + col.name <- dimnames(data1)[[2]] + any.id.row <- TRUE + same.row.pos1 <- 1:row.nb + same.row.pos2 <- 1:row.nb + any.id.col <- TRUE + same.col.pos1 <- 1:col.nb + same.col.pos2 <- 1:col.nb + identical.object <- TRUE + identical.content <- TRUE + }else{ + identical.object <- FALSE + if(all(class(data1) == "table") & length(dim(data1)) == 1){ + tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 ARGUMENT IS A 1D TABLE. USE THE info_1D_dataset_fun FUNCTION\n\n================\n\n") + stop(tempo.cat) + } + if(all(class(data2) == "table") & length(dim(data2)) == 1){ + tempo.cat <- paste0("\n\n================\n\nERROR: THE data2 ARGUMENT IS A 1D TABLE. USE THE info_1D_dataset_fun FUNCTION\n\n================\n\n") + stop(tempo.cat) + } + if( ! identical(class(data1), class(data2))){ + same.class <- FALSE + }else if( ! any(class(data1) %in% c("matrix", "data.frame", "table"))){ + tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 AND data2 ARGUMENTS MUST BE EITHER MATRIX, DATA FRAME OR TABLE\n\n================\n\n") + stop(tempo.cat) + }else{ + same.class <- TRUE + class <- class(data1) + } + if( ! identical(dim(data1), dim(data2))){ + same.dim <- FALSE + }else{ + same.dim <- TRUE + dim <- dim(data1) + } + if( ! identical(nrow(data1), nrow(data2))){ + same.row.nb <- FALSE + }else{ + same.row.nb <- TRUE + row.nb <- nrow(data1) + } + if( ! identical(ncol(data1), ncol(data2))){ + same.col.nb <- FALSE + }else{ + same.col.nb <- TRUE + col.nb <- ncol(data1) + } + # row and col names + if(is.null(dimnames(data1)) & is.null(dimnames(data2))){ + same.row.name <- TRUE + same.col.name <- TRUE + # row and col names remain NULL + }else if((is.null(dimnames(data1)) & ! is.null(dimnames(data2))) | ( ! is.null(dimnames(data1)) & is.null(dimnames(data2)))){ + same.row.name <- FALSE + same.col.name <- FALSE + # row and col names remain NULL + }else{ + if( ! identical(dimnames(data1)[[1]], dimnames(data2)[[1]])){ + same.row.name <- FALSE + # row names remain NULL + }else{ + same.row.name <- TRUE + row.name <- dimnames(data1)[[1]] + } + if( ! identical(dimnames(data1)[[2]], dimnames(data2)[[2]])){ + same.col.name <- FALSE + # col names remain NULL + }else{ + same.col.name <- TRUE + col.name <- dimnames(data1)[[2]] + } + } + # identical row and col content + if(all(class(data1) == "table")){ + as.data.frame(matrix(data1, ncol = ncol(data1)), stringsAsFactors = FALSE) + }else if(all(class(data1) == "matrix")){ + data1 <- as.data.frame(data1, stringsAsFactors = FALSE) + }else if(all(class(data1) == "data.frame")){ + data1 <- data.frame(lapply(data1, as.character), stringsAsFactors=FALSE) + } + if(all(class(data2) == "table")){ + as.data.frame(matrix(data2, ncol = ncol(data2)), stringsAsFactors = FALSE) + }else if(all(class(data2) == "matrix")){ + data2 <- as.data.frame(data2, stringsAsFactors = FALSE) + }else if(all(class(data2) == "data.frame")){ + data2 <- data.frame(lapply(data2, as.character), stringsAsFactors=FALSE) + } + row.names(data1) <- paste0("A", 1:nrow(data1)) + row.names(data2) <- paste0("A", 1:nrow(data2)) + if(same.col.nb == TRUE){ # because if not the same col nb, the row cannot be identical + same.row.pos1 <- suppressWarnings(which(mapply(FUN = identical, c(as.data.frame(t(data1), stringsAsFactors = FALSE)), c(as.data.frame(t(data2), stringsAsFactors = FALSE))))) + same.row.pos2 <- suppressWarnings(which(mapply(FUN = identical, c(as.data.frame(t(data2), stringsAsFactors = FALSE)), c(as.data.frame(t(data1), stringsAsFactors = FALSE))))) + names(same.row.pos1) <- NULL + names(same.row.pos2) <- NULL + if(all(is.na(same.row.pos1))){ + same.row.pos1 <- NULL + }else{ + same.row.pos1 <- same.row.pos1[ ! is.na(same.row.pos1)] + any.id.row <- TRUE + } + if(all(is.na(same.row.pos2))){ + same.row.pos2 <- NULL + }else{ + same.row.pos2 <- same.row.pos2[ ! is.na(same.row.pos2)] + any.id.row <- TRUE + } + if(is.null(same.row.pos1) & is.null(same.row.pos2)){ + any.id.row <- FALSE + } + }else{ + any.id.row <- FALSE + # same.row.pos1 and 2 remain NULL + } + if(same.row.nb == TRUE){ # because if not the same row nb, the col cannot be identical + same.col.pos1 <- suppressWarnings(which(mapply(FUN = identical, c(data1), c(data2)))) + same.col.pos2 <- suppressWarnings(which(mapply(FUN = identical, c(data2), c(data1)))) + names(same.col.pos1) <- NULL + names(same.col.pos2) <- NULL + if(all(is.na(same.col.pos1))){ + same.col.pos1 <- NULL + }else{ + same.col.pos1 <- same.col.pos1[ ! is.na(same.col.pos1)] + any.id.col <- TRUE + } + if(all(is.na(same.col.pos2))){ + same.col.pos2 <- NULL + }else{ + same.col.pos2 <- same.col.pos2[ ! is.na(same.col.pos2)] + any.id.col <- TRUE + } + if(is.null(same.col.pos1) & is.null(same.col.pos2)){ + any.id.col <- FALSE + } + }else{ + any.id.col <- FALSE + # same.col.pos1 and 2 remain NULL + } + if(same.dim == TRUE & ! all(is.null(same.row.pos1), is.null(same.row.pos2), is.null(same.col.pos1), is.null(same.col.pos2))){ # same.dim == TRUE means that same.row.nb == TRUE and same.col.nb == TRUE, meaning that row.nb != NULL and col.nb != NULL. Thus, no need to include these checkings + if(identical(same.row.pos1, 1:row.nb) & identical(same.row.pos2, 1:row.nb) & identical(same.col.pos1, 1:col.nb) & identical(same.col.pos2, 1:col.nb)){ + identical.content <- TRUE + } + }else{ + identical.content <- FALSE + } + } + output <- list(same.class = same.class, class = class, same.dim = same.dim, dim = dim, same.row.nb = same.row.nb, row.nb = row.nb, same.col.nb = same.col.nb , col.nb = col.nb, same.row.name = same.row.name, row.name = row.name, same.col.name = same.col.name, col.name = col.name, any.id.row = any.id.row, same.row.pos1 = same.row.pos1, same.row.pos2 = same.row.pos2, any.id.col = any.id.col, same.col.pos1 = same.col.pos1, same.col.pos2 = same.col.pos2, identical.object = identical.object, identical.content = identical.content) + return(output) } @@ -804,221 +806,227 @@ return(output) # Check OK: clear to go Apollo fun_list_comp <- function(data1, data2){ -# AIM: -# compare two lists. Check and report in a list if the 2 datasets have: -#same length -# same names -# same compartments -# REQUIRED FUNCTIONS -# none -# ARGUMENTS -# data1: list -# data2: list -# RETURN -# a list containing: -# $same.length: logical. Are number of elements identical? -# $length: number of elements in the 2 datasets (NULL otherwise) -# $same.name: logical. Are element names identical ? -# $name: name of elements of the 2 datasets if identical (NULL otherwise) -# $any.id.name: logical. Is there any element names identical ? -# $same.name.pos1: position, in data1, of the element names identical in data2 -# $same.name.pos2: position, in data2, of the compartment names identical in data1 -# $any.id.compartment: logical. is there any identical compartments ? -# $same.compartment.pos1: position, in data1, of the compartments identical in data2 -# $same.compartment.pos2: position, in data2, of the compartments identical in data1 -# $identical.object: logical. Are objects identical (kind of object, compartment names and content)? -# $identical.content: logical. Are content objects identical (identical compartments excluding compartment names)? -# EXAMPLES -# obs1 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) ; obs2 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) ; fun_list_comp(obs1, obs2) -# obs1 = list(1:5, LETTERS[1:2]) ; obs2 = list(a = 1:5, b = LETTERS[1:2]) ; fun_list_comp(obs1, obs2) -# obs1 = list(b = 1:5, c = LETTERS[1:2]) ; obs2 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) ; fun_list_comp(obs1, obs2) -# obs1 = list(b = 1:5, c = LETTERS[1:2]) ; obs2 = list(LETTERS[5:9], matrix(1:6), 1:5) ; fun_list_comp(obs1, obs2) -# DEBUGGING -# data1 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) ; data2 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) # for function debugging -# data1 = list(a = 1:5, b = LETTERS[1:2]) ; data2 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) # for function debugging -# argument checking -# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() -if( ! any(class(data1) %in% "list")){ -tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 ARGUMENT MUST BE A LIST\n\n================\n\n") -stop(tempo.cat) -} -if( ! any(class(data2) %in% "list")){ -tempo.cat <- paste0("\n\n================\n\nERROR: THE data2 ARGUMENT MUST BE A LIST\n\n================\n\n") -stop(tempo.cat) -} -# end argument checking -same.length <- NULL -length <- NULL -same.name <- NULL -name <- NULL -any.id.name <- NULL -same.name.pos1 <- NULL -same.name.pos2 <- NULL -any.id.compartment <- NULL -same.compartment.pos1 <- NULL -same.compartment.pos2 <- NULL -identical.object <- NULL -identical.content <- NULL -if(identical(data1, data2)){ -same.length <- TRUE -length <- length(data1) -if( ! is.null(names(data1))){ -same.name <- TRUE -name <- names(data1) -any.id.name <- TRUE -same.name.pos1 <- 1:length(data1) -same.name.pos2 <- 1:length(data2) -} -any.id.compartment <- TRUE -same.compartment.pos1 <- 1:length(data1) -same.compartment.pos2 <- 1:length(data2) -identical.object <- TRUE -identical.content <- TRUE -}else{ -identical.object <- FALSE -if( ! identical(length(data1), length(data2))){ -same.length<- FALSE -}else{ -same.length<- TRUE -length <- length(data1) -} -if( ! (is.null(names(data1)) & is.null(names(data2)))){ -if( ! identical(names(data1), names(data2))){ -same.name <- FALSE -}else{ -same.name <- TRUE -name <- names(data1) -} -any.id.name <- FALSE -if(any(names(data1) %in% names(data2))){ -any.id.name <- TRUE -same.name.pos1 <- which(names(data1) %in% names(data2)) -} -if(any(names(data2) %in% names(data1))){ -any.id.name <- TRUE -same.name.pos2 <- which(names(data2) %in% names(data1)) -} -} -names(data1) <- NULL -names(data2) <- NULL -any.id.compartment <- FALSE -if(any(data1 %in% data2)){ -any.id.compartment <- TRUE -same.compartment.pos1 <- which(data1 %in% data2) -} -if(any(data2 %in% data1)){ -any.id.compartment <- TRUE -same.compartment.pos2 <- which(data2 %in% data1) -} -if(same.length == TRUE & ! all(is.null(same.compartment.pos1), is.null(same.compartment.pos2))){ -if(identical(same.compartment.pos1, same.compartment.pos2)){ -identical.content <- TRUE -}else{ -identical.content <- FALSE -} -}else{ -identical.content <- FALSE -} -} -output <- list(same.length = same.length, length = length, same.name = same.name, name = name, any.id.name = any.id.name, same.name.pos1 = same.name.pos1, same.name.pos2 = same.name.pos2, any.id.compartment = any.id.compartment, same.compartment.pos1 = same.compartment.pos1, same.compartment.pos2 = same.compartment.pos2, identical.object = identical.object, identical.content = identical.content) -return(output) + # AIM: + # compare two lists. Check and report in a list if the 2 datasets have: + # same length + # common names + # common compartments + # REQUIRED FUNCTIONS + # none + # ARGUMENTS + # data1: list + # data2: list + # RETURN + # a list containing: + # $same.length: logical. Are number of elements identical? + # $length: number of elements in the 2 datasets (NULL otherwise) + # $same.name: logical. Are element names identical ? + # $name: name of elements of the 2 datasets if identical (NULL otherwise) + # $any.id.name: logical. Is there any element names identical ? + # $same.name.pos1: position, in data1, of the element names identical in data2 + # $same.name.pos2: position, in data2, of the compartment names identical in data1 + # $any.id.compartment: logical. is there any identical compartments ? + # $same.compartment.pos1: position, in data1, of the compartments identical in data2 + # $same.compartment.pos2: position, in data2, of the compartments identical in data1 + # $identical.object: logical. Are objects identical (kind of object, compartment names and content)? + # $identical.content: logical. Are content objects identical (identical compartments excluding compartment names)? + # EXAMPLES + # obs1 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) ; obs2 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) ; fun_list_comp(obs1, obs2) + # obs1 = list(1:5, LETTERS[1:2]) ; obs2 = list(a = 1:5, b = LETTERS[1:2]) ; fun_list_comp(obs1, obs2) + # obs1 = list(b = 1:5, c = LETTERS[1:2]) ; obs2 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) ; fun_list_comp(obs1, obs2) + # obs1 = list(b = 1:5, c = LETTERS[1:2]) ; obs2 = list(LETTERS[5:9], matrix(1:6), 1:5) ; fun_list_comp(obs1, obs2) + # DEBUGGING + # data1 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) ; data2 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) # for function debugging + # data1 = list(a = 1:5, b = LETTERS[1:2]) ; data2 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) # for function debugging + # argument checking + # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() + if( ! any(class(data1) %in% "list")){ + tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 ARGUMENT MUST BE A LIST\n\n================\n\n") + stop(tempo.cat) + } + if( ! any(class(data2) %in% "list")){ + tempo.cat <- paste0("\n\n================\n\nERROR: THE data2 ARGUMENT MUST BE A LIST\n\n================\n\n") + stop(tempo.cat) + } + # end argument checking + same.length <- NULL + length <- NULL + same.name <- NULL + name <- NULL + any.id.name <- NULL + same.name.pos1 <- NULL + same.name.pos2 <- NULL + any.id.compartment <- NULL + same.compartment.pos1 <- NULL + same.compartment.pos2 <- NULL + identical.object <- NULL + identical.content <- NULL + if(identical(data1, data2)){ + same.length <- TRUE + length <- length(data1) + if( ! is.null(names(data1))){ + same.name <- TRUE + name <- names(data1) + any.id.name <- TRUE + same.name.pos1 <- 1:length(data1) + same.name.pos2 <- 1:length(data2) + } + any.id.compartment <- TRUE + same.compartment.pos1 <- 1:length(data1) + same.compartment.pos2 <- 1:length(data2) + identical.object <- TRUE + identical.content <- TRUE + }else{ + identical.object <- FALSE + if( ! identical(length(data1), length(data2))){ + same.length<- FALSE + }else{ + same.length<- TRUE + length <- length(data1) + } + if( ! (is.null(names(data1)) & is.null(names(data2)))){ + if( ! identical(names(data1), names(data2))){ + same.name <- FALSE + }else{ + same.name <- TRUE + name <- names(data1) + } + any.id.name <- FALSE + if(any(names(data1) %in% names(data2))){ + any.id.name <- TRUE + same.name.pos1 <- which(names(data1) %in% names(data2)) + } + if(any(names(data2) %in% names(data1))){ + any.id.name <- TRUE + same.name.pos2 <- which(names(data2) %in% names(data1)) + } + } + names(data1) <- NULL + names(data2) <- NULL + any.id.compartment <- FALSE + if(any(data1 %in% data2)){ + any.id.compartment <- TRUE + same.compartment.pos1 <- which(data1 %in% data2) + } + if(any(data2 %in% data1)){ + any.id.compartment <- TRUE + same.compartment.pos2 <- which(data2 %in% data1) + } + if(same.length == TRUE & ! all(is.null(same.compartment.pos1), is.null(same.compartment.pos2))){ + if(identical(same.compartment.pos1, same.compartment.pos2)){ + identical.content <- TRUE + }else{ + identical.content <- FALSE + } + }else{ + identical.content <- FALSE + } + } + output <- list(same.length = same.length, length = length, same.name = same.name, name = name, any.id.name = any.id.name, same.name.pos1 = same.name.pos1, same.name.pos2 = same.name.pos2, any.id.compartment = any.id.compartment, same.compartment.pos1 = same.compartment.pos1, same.compartment.pos2 = same.compartment.pos2, identical.object = identical.object, identical.content = identical.content) + return(output) } ################ Object modification -######## fun_dataframe_flipping() #### flipping a data frame to have column name as a qualitative column and vice-versa +######## fun_dataframe_remodeling() #### remodeling a data frame to have column name as a qualitative column and vice-versa # Check OK: clear to go Apollo -fun_dataframe_flipping <- function(data, quanti.col.name = "quanti", quali.col.name = "quali"){ -# AIM: -# if the data frame is made of numeric columns, a new data frame is created, with the 1st column gathering all the numeric values, and the 2nd column being the name of the columns of the initial data frame. If the data frame is made of one numeric column and one character or factor column, a new data frame is created, with the new columns corresponding to the split numeric values (according to the character column). NA are added a the end of each column to have the same number of rows -# REQUIRED FUNCTIONS -# fun_param_check() -# ARGUMENTS -# data: data frame to convert -# quanti.col.name: optional name for the quanti column of the new data frame -# quali.col.name: optional name for the quali column of the new data frame -# RETURN -# the modified data frame -# EXAMPLES -# obs <- data.frame(a = 1:3, b = c("A", "B", "A")) ; fun_dataframe_flipping(obs) -# obs <- data.frame(a = 1:3, b = c("A", "B", "A")) ; fun_dataframe_flipping(obs, quanti.col.name = "quanti", quali.col.name = "quali") -# obs <- data.frame(a = 1:3, b = 4:6) ; fun_dataframe_flipping(obs) -# DEBUGGING -# data = data.frame(a = 1:3, b = 4:6) ; quanti.col.name = "quanti" ; quali.col.name = "quali" # for function debugging -# data = data.frame(a = 1:3, b = 4:6, c = 11:13) ; quanti.col.name = "quanti" ; quali.col.name = "quali" # for function debugging -# data = data.frame(a = 1:3, b = letters[1:3]) ; quanti.col.name = "quanti" ; quali.col.name = "quali" # for function debugging -# data = data.frame(a = 1:3, b = letters[1:3]) ; quanti.col.name = "TEST" ; quali.col.name = "quali" # for function debugging -# data = data.frame(b = letters[1:3], a = 1:3) ; quanti.col.name = "quanti" ; quali.col.name = "quali" # for function debugging -# data = data.frame(b = c("e", "e", "h"), a = 1:3) ; quanti.col.name = "quanti" ; quali.col.name = "quali" # for function debugging -# required function checking -if(length(find("fun_param_check", mode = "function")) == 0){ -tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") -stop(tempo.cat) -} -# end required function checking -arg.check <- NULL # for function debbuging -checked.arg.names <- NULL # for function debbuging -ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) -tempo <- fun_param_check(data = quanti.col.name, class = "character", length = 1) ; eval(ee) -tempo <- fun_param_check(data = quali.col.name, class = "character", length = 1) ; eval(ee) -if(any(arg.check) == TRUE){ -stop() -} -# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() -if( ! any(class(data) %in% "data.frame")){ -tempo.cat <- paste0("\n\n================\n\nERROR: THE data ARGUMENT MUST BE A DATA FRAME\n\n================\n\n") -stop(tempo.cat) -} -# end argument checking -tempo.factor <- unlist(lapply(data, class)) -for(i in 1:length(tempo.factor)){ # convert factor columns as character -if(all(tempo.factor[i] == "factor")){ -data[, i] <- as.character(data[, i]) -} -} -tempo.factor <- unlist(lapply(data, mode)) -if(length(data) == 2){ -if( ! ((mode(data[, 1]) == "character" & mode(data[, 2]) == "numeric") | mode(data[, 2]) == "character" & mode(data[, 1]) == "numeric" | mode(data[, 2]) == "numeric" & mode(data[, 1]) == "numeric") ){ -tempo.cat <- paste0("\n\n================\n\nERROR: IF data ARGUMENT IS A DATA FRAME MADE OF 2 COLUMNS, EITHER A COLUMN MUST BE NUMERIC AND THE OTHER CHARACTER, OR THE TWO COLUMNS MUST BE NUMERIC\n\n================\n\n") -stop(tempo.cat) -} -if((mode(data[, 1]) == "character" | mode(data[, 2]) == "character") & (quanti.col.name != "quanti" | quali.col.name != "quali")){ -tempo.cat <- paste0("\n\n================\n\nERROR: IMPROPER quanti.col.name OR quali.col.name RESETTINGS. THESE ARGUMENTS ARE RESERVED FOR DATA FRAMES MADE OF n NUMERIC COLUMNS ONLY\n\n================\n\n") -stop(tempo.cat) -} -}else{ -if( ! all(tempo.factor %in% "numeric")){ -tempo.cat <- paste0("\n\n================\n\nERROR: IF data ARGUMENT IS A DATA FRAME MADE OF ONE COLUMN, OR MORE THAN 2 COLUMNS, THESE COLUMNS MUST BE NUMERIC\n\n================\n\n") -stop(tempo.cat) -} -} -if(( ! any(tempo.factor %in% "character")) & is.null(names(data))){ -tempo.cat <- paste0("\n\n================\n\nERROR: NUMERIC DATA FRAME in the data ARGUMENT MUST HAVE COLUMN NAMES\n\n================\n\n") -stop() -} -if(all(tempo.factor %in% "numeric")){ -quanti <- NULL -for(i in 1:length(data)){ -quanti <-c(quanti, data[, i]) -} -quali <- rep(names(data), each = nrow(data)) -output.data <- data.frame(quanti, quali) -names(output.data) <- c(quanti.col.name, quali.col.name) -}else{ -if(class(data[, 1]) == "character"){ -data <- cbind(data[2], data[1]) -} -nc.max <- max(table(data[, 2])) # effectif maximum des classes -nb.na <- nc.max - table(data[,2]) # nombre de NA à ajouter pour réaliser la data frame -tempo<-split(data[, 1], data[, 2]) -for(i in 1:length(tempo)){tempo[[i]] <- append(tempo[[i]], rep(NA, nb.na[i]))} # des NA doivent être ajoutés lorsque les effectifs sont différents entre les classes. C'est uniquement pour que chaque colonne ait le même nombre de lignes -output.data<-data.frame(tempo) -} -return(output.data) +fun_dataframe_remodeling <- function(data, quanti.col.name = "quanti", quali.col.name = "quali"){ + # AIM: + # if the data frame is made of numeric columns, a new data frame is created, with the 1st column gathering all the numeric values, and the 2nd column being the name of the columns of the initial data frame + + + + # If the data frame is made of one numeric column and one character or factor column, a new data frame is created, with the new columns corresponding to the split numeric values (according to the character column). NA are added a the end of each column to have the same number of rows + + + + # REQUIRED FUNCTIONS + # fun_param_check() + # ARGUMENTS + # data: data frame to convert + # quanti.col.name: optional name for the quanti column of the new data frame + # quali.col.name: optional name for the quali column of the new data frame + # RETURN + # the modified data frame + # EXAMPLES + # obs <- data.frame(col1 = (1:4)*10, col2 = c("A", "B", "A", "A")) ; obs ; fun_dataframe_remodeling(obs) + # obs <- data.frame(col1 = (1:4)*10, col2 = 5:8) ; obs ; fun_dataframe_remodeling(obs, quanti.col.name = "quanti", quali.col.name = "quali") + # DEBUGGING + # data = data.frame(a = 1:3, b = 4:6) ; quanti.col.name = "quanti" ; quali.col.name = "quali" # for function debugging + # data = data.frame(a = 1:3, b = 4:6, c = 11:13) ; quanti.col.name = "quanti" ; quali.col.name = "quali" # for function debugging + # data = data.frame(a = 1:3, b = letters[1:3]) ; quanti.col.name = "quanti" ; quali.col.name = "quali" # for function debugging + # data = data.frame(a = 1:3, b = letters[1:3]) ; quanti.col.name = "TEST" ; quali.col.name = "quali" # for function debugging + # data = data.frame(b = letters[1:3], a = 1:3) ; quanti.col.name = "quanti" ; quali.col.name = "quali" # for function debugging + # data = data.frame(b = c("e", "e", "h"), a = 1:3) ; quanti.col.name = "quanti" ; quali.col.name = "quali" # for function debugging + # required function checking + if(length(find("fun_param_check", mode = "function")) == 0){ + tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") + stop(tempo.cat) + } + # end required function checking + arg.check <- NULL # for function debbuging + checked.arg.names <- NULL # for function debbuging + ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) + tempo <- fun_param_check(data = quanti.col.name, class = "character", length = 1) ; eval(ee) + tempo <- fun_param_check(data = quali.col.name, class = "character", length = 1) ; eval(ee) + if(any(arg.check) == TRUE){ + stop() + } + # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() + if( ! any(class(data) %in% "data.frame")){ + tempo.cat <- paste0("\n\n================\n\nERROR: THE data ARGUMENT MUST BE A DATA FRAME\n\n================\n\n") + stop(tempo.cat) + } + # end argument checking + tempo.factor <- unlist(lapply(data, class)) + for(i in 1:length(tempo.factor)){ # convert factor columns as character + if(all(tempo.factor[i] == "factor")){ + data[, i] <- as.character(data[, i]) + } + } + tempo.factor <- unlist(lapply(data, mode)) + if(length(data) == 2){ + if( ! ((mode(data[, 1]) == "character" & mode(data[, 2]) == "numeric") | mode(data[, 2]) == "character" & mode(data[, 1]) == "numeric" | mode(data[, 2]) == "numeric" & mode(data[, 1]) == "numeric") ){ + tempo.cat <- paste0("\n\n================\n\nERROR: IF data ARGUMENT IS A DATA FRAME MADE OF 2 COLUMNS, EITHER A COLUMN MUST BE NUMERIC AND THE OTHER CHARACTER, OR THE TWO COLUMNS MUST BE NUMERIC\n\n================\n\n") + stop(tempo.cat) + } + if((mode(data[, 1]) == "character" | mode(data[, 2]) == "character") & (quanti.col.name != "quanti" | quali.col.name != "quali")){ + tempo.cat <- paste0("\n\n================\n\nERROR: IMPROPER quanti.col.name OR quali.col.name RESETTINGS. THESE ARGUMENTS ARE RESERVED FOR DATA FRAMES MADE OF n NUMERIC COLUMNS ONLY\n\n================\n\n") + stop(tempo.cat) + } + }else{ + if( ! all(tempo.factor %in% "numeric")){ + tempo.cat <- paste0("\n\n================\n\nERROR: IF data ARGUMENT IS A DATA FRAME MADE OF ONE COLUMN, OR MORE THAN 2 COLUMNS, THESE COLUMNS MUST BE NUMERIC\n\n================\n\n") + stop(tempo.cat) + } + } + if(( ! any(tempo.factor %in% "character")) & is.null(names(data))){ + tempo.cat <- paste0("\n\n================\n\nERROR: NUMERIC DATA FRAME in the data ARGUMENT MUST HAVE COLUMN NAMES\n\n================\n\n") + stop() + } + if(all(tempo.factor %in% "numeric")){ + quanti <- NULL + for(i in 1:length(data)){ + quanti <-c(quanti, data[, i]) + } + quali <- rep(names(data), each = nrow(data)) + output.data <- data.frame(quanti, quali) + names(output.data) <- c(quanti.col.name, quali.col.name) + }else{ + if(class(data[, 1]) == "character"){ + data <- cbind(data[2], data[1]) + } + nc.max <- max(table(data[, 2])) # effectif maximum des classes + nb.na <- nc.max - table(data[,2]) # nombre de NA à ajouter pour réaliser la data frame + tempo<-split(data[, 1], data[, 2]) + for(i in 1:length(tempo)){tempo[[i]] <- append(tempo[[i]], rep(NA, nb.na[i]))} # des NA doivent être ajoutés lorsque les effectifs sont différents entre les classes. C'est uniquement pour que chaque colonne ait le même nombre de lignes + output.data<-data.frame(tempo) + } + return(output.data) } @@ -1027,90 +1035,90 @@ return(output.data) # Check OK: clear to go Apollo fun_refactorization <- function(data, also.ordered = TRUE){ -# AIM: -# refactorize a factor or the factor columns of a data frame, such as only the class present are in the levels (no empty levels). The class order in levels is kept -# useful to remove the empty classes after row removing for instance -# REQUIRED FUNCTIONS -# fun_param_check() -# ARGUMENTS -# data: factor (ordered or not) or data frame -# also.ordered: refactorize also ordered factors? This to deal with ordered factors that have class "ordered" "factor" -# RETURN -# a list containing: -# $data: the modified object -# $removed: the removed classes for a factor and a list of the removed classes for each factor class of the data frame -# EXAMPLES -# obs <- data.frame(a = LETTERS[1:6], b = paste0(letters[1.6], c(1,1,2,2,3,3)), c = ordered(LETTERS[7:12]), d = 1:6, e = "A")[-c(1:2),] ; sapply(obs, levels) ; fun_refactorization(obs, FALSE) -# obs <- data.frame(a = LETTERS[1:6], b = paste0(letters[1.6], c(1,1,2,2,3,3)), c = ordered(LETTERS[7:12]), d = 1:6, e = "A")[-c(1:2),] ; sapply(obs, levels) ; fun_refactorization(obs, TRUE) -# obs <- factor(LETTERS[1:6])[-c(1:2)] ; obs ; fun_refactorization(obs, TRUE) -# obs <- ordered(LETTERS[1:6])[-c(1:2)] ; obs ; fun_refactorization(obs, TRUE) -# obs <- factor(LETTERS[1:6], levels = rev(LETTERS[1:6]))[-c(1:2)] ; obs ; fun_refactorization(obs, FALSE) -# DEBUGGING -# data <- data.frame(a = LETTERS[1:6], b = paste0(letters[1.6], c(1,1,2,2,3,3)), c = ordered(LETTERS[7:12]), d = 1:6, e = "A") ; data <- data[-c(1:2),] ; also.ordered <- TRUE # for function debugging -# data <- factor(LETTERS[1:6])[-c(1:2)] ; also.ordered <- TRUE # for function debugging -# data <- ordered(LETTERS[1:6])[-c(1:2)] ; also.ordered <- TRUE # for function debugging -# required function checking -if(length(find("fun_param_check", mode = "function")) == 0){ -tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") -stop(tempo.cat) -} -# end required function checking -# argument checking -arg.check <- NULL # for function debbuging -checked.arg.names <- NULL # for function debbuging -ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) -tempo <- fun_param_check(data = also.ordered, class = "logical", length = 1) ; eval(ee) -if(any(arg.check) == TRUE){ -stop() -} -# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() -if(also.ordered == FALSE){ -if( ! (all(class(data) == "data.frame") | all(class(data) == "factor"))){ -tempo.cat <- paste0("\n\n================\n\nERROR: data ARGUMENT MUST BE A FACTOR (NON ORDERED BECAUSE THE also.ordered ARGUMENT IS SET TO FALSE) OR A DATA FRAME\n\n================\n\n") -stop(tempo.cat) -} -} -if(also.ordered == TRUE){ -if( ! (all(class(data) == "data.frame") | all(class(data) == "factor") | all(class(data) %in% c("ordered", "factor")))){ -tempo.cat <- paste0("\n\n================\n\nERROR: data ARGUMENT MUST BE A FACTOR OR A DATA FRAME\n\n================\n\n") -stop(tempo.cat) -} -} -# end argument checking -text <- NULL -if(all(class(data) == "factor")){ -tempo.keep.log <- levels(data) %in% unique(data) -text <- levels(data)[ ! tempo.keep.log] -data <- factor(data, levels = levels(data)[tempo.keep.log]) -}else if(all(class(data) %in% c("ordered", "factor"))){ -tempo.keep.log <- levels(data) %in% unique(data) -text <- levels(data)[ ! tempo.keep.log] -data <- ordered(data, levels = levels(data)[tempo.keep.log]) -}else if(all(class(data) == "data.frame")){ -text <- vector("list", length(data)) -names(text) <- names(data) -tempo.factor.col <- sapply(sapply(lapply(data, class), FUN = "%in%", "factor"), FUN = "all") # get the factor column (logical) -for(i in 1:length(tempo.factor.col)){ -if(tempo.factor.col[i] == TRUE){ -tempo.keep.log <- levels(data[[i]]) %in% unique(data[[i]]) -text[[i]] <- levels(data[[i]])[ ! tempo.keep.log] -data[[i]] <- factor(data[[i]], levels = levels(data[[i]])[tempo.keep.log]) -} -} -tempo.ordered.col <- sapply(sapply(lapply(data, class), FUN = "%in%", "ordered"), FUN = "any") # get the ordered factor column (logical) if they exist -if(also.ordered == TRUE){ -for(i in 1:length(tempo.ordered.col)){ -if(tempo.ordered.col[i] == TRUE){ -tempo.keep.log <- levels(data[[i]]) %in% unique(data[[i]]) -text[[i]] <- levels(data[[i]])[ ! tempo.keep.log] -data[[i]] <- ordered(data[[i]], levels = levels(data[[i]])[tempo.keep.log]) -} -} -} -text <- text[(tempo.factor.col | tempo.ordered.col) & ! (sapply(text, FUN = length) == 0)] # remove the compartments of text that are not modified factors columns of data frame -} -output <- list(data = data, removed = text) -return(output) + # AIM: + # refactorize a factor or the factor columns of a data frame, such as only the class present are in the levels (no empty levels). The class order in levels is kept + # useful to remove the empty classes after row removing for instance + # REQUIRED FUNCTIONS + # fun_param_check() + # ARGUMENTS + # data: factor (ordered or not) or data frame + # also.ordered: refactorize also ordered factors? This to deal with ordered factors that have class "ordered" "factor" + # RETURN + # a list containing: + # $data: the modified object + # $removed: the removed classes for a factor and a list of the removed classes for each factor class of the data frame + # EXAMPLES + # obs <- data.frame(a = LETTERS[1:6], b = paste0(letters[1.6], c(1,1,2,2,3,3)), c = ordered(LETTERS[7:12]), d = 1:6, e = "A")[-c(1:2),] ; sapply(obs, levels) ; fun_refactorization(obs, FALSE) + # obs <- data.frame(a = LETTERS[1:6], b = paste0(letters[1.6], c(1,1,2,2,3,3)), c = ordered(LETTERS[7:12]), d = 1:6, e = "A")[-c(1:2),] ; sapply(obs, levels) ; fun_refactorization(obs, TRUE) + # obs <- factor(LETTERS[1:6])[-c(1:2)] ; obs ; fun_refactorization(obs, TRUE) + # obs <- ordered(LETTERS[1:6])[-c(1:2)] ; obs ; fun_refactorization(obs, TRUE) + # obs <- factor(LETTERS[1:6], levels = rev(LETTERS[1:6]))[-c(1:2)] ; obs ; fun_refactorization(obs, FALSE) + # DEBUGGING + # data <- data.frame(a = LETTERS[1:6], b = paste0(letters[1.6], c(1,1,2,2,3,3)), c = ordered(LETTERS[7:12]), d = 1:6, e = "A") ; data <- data[-c(1:2),] ; also.ordered <- TRUE # for function debugging + # data <- factor(LETTERS[1:6])[-c(1:2)] ; also.ordered <- TRUE # for function debugging + # data <- ordered(LETTERS[1:6])[-c(1:2)] ; also.ordered <- TRUE # for function debugging + # required function checking + if(length(find("fun_param_check", mode = "function")) == 0){ + tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") + stop(tempo.cat) + } + # end required function checking + # argument checking + arg.check <- NULL # for function debbuging + checked.arg.names <- NULL # for function debbuging + ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) + tempo <- fun_param_check(data = also.ordered, class = "logical", length = 1) ; eval(ee) + if(any(arg.check) == TRUE){ + stop() + } + # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() + if(also.ordered == FALSE){ + if( ! (all(class(data) == "data.frame") | all(class(data) == "factor"))){ + tempo.cat <- paste0("\n\n================\n\nERROR: data ARGUMENT MUST BE A FACTOR (NON ORDERED BECAUSE THE also.ordered ARGUMENT IS SET TO FALSE) OR A DATA FRAME\n\n================\n\n") + stop(tempo.cat) + } + } + if(also.ordered == TRUE){ + if( ! (all(class(data) == "data.frame") | all(class(data) == "factor") | all(class(data) %in% c("ordered", "factor")))){ + tempo.cat <- paste0("\n\n================\n\nERROR: data ARGUMENT MUST BE A FACTOR OR A DATA FRAME\n\n================\n\n") + stop(tempo.cat) + } + } + # end argument checking + text <- NULL + if(all(class(data) == "factor")){ + tempo.keep.log <- levels(data) %in% unique(data) + text <- levels(data)[ ! tempo.keep.log] + data <- factor(data, levels = levels(data)[tempo.keep.log]) + }else if(all(class(data) %in% c("ordered", "factor"))){ + tempo.keep.log <- levels(data) %in% unique(data) + text <- levels(data)[ ! tempo.keep.log] + data <- ordered(data, levels = levels(data)[tempo.keep.log]) + }else if(all(class(data) == "data.frame")){ + text <- vector("list", length(data)) + names(text) <- names(data) + tempo.factor.col <- sapply(sapply(lapply(data, class), FUN = "%in%", "factor"), FUN = "all") # get the factor column (logical) + for(i in 1:length(tempo.factor.col)){ + if(tempo.factor.col[i] == TRUE){ + tempo.keep.log <- levels(data[[i]]) %in% unique(data[[i]]) + text[[i]] <- levels(data[[i]])[ ! tempo.keep.log] + data[[i]] <- factor(data[[i]], levels = levels(data[[i]])[tempo.keep.log]) + } + } + tempo.ordered.col <- sapply(sapply(lapply(data, class), FUN = "%in%", "ordered"), FUN = "any") # get the ordered factor column (logical) if they exist + if(also.ordered == TRUE){ + for(i in 1:length(tempo.ordered.col)){ + if(tempo.ordered.col[i] == TRUE){ + tempo.keep.log <- levels(data[[i]]) %in% unique(data[[i]]) + text[[i]] <- levels(data[[i]])[ ! tempo.keep.log] + data[[i]] <- ordered(data[[i]], levels = levels(data[[i]])[tempo.keep.log]) + } + } + } + text <- text[(tempo.factor.col | tempo.ordered.col) & ! (sapply(text, FUN = length) == 0)] # remove the compartments of text that are not modified factors columns of data frame + } + output <- list(data = data, removed = text) + return(output) } @@ -1119,64 +1127,64 @@ return(output) # Check OK: clear to go Apollo fun_rounding <- function(data, dec.nb = 2, after.lead.zero = TRUE){ -# AIM: -# round a vector of value, if decimal, with the desired number of decimal digits after the decimal leading zeros -# BEWARE -# Work well with numbers as character strings, but not always with numerical numbers because of the floating point -# Numeric values are really truncated from a part of their decimal digits, whatever options(digits) settings -# ARGUMENTS -# data: a vector of numbers (numeric or character mode) -# dec.nb: number of required decimal digits -# after.lead.zero: logical. If FALSE, rounding is performed for all the decimal numbers, whatever the leading zeros (e.g., 0.123 -> 0.12 and 0.00128 -> 0.00). If TRUE, dec.nb are taken after the leading zeros (e.g., 0.123 -> 0.12 and 0.00128 -> 0.0013) -# REQUIRED FUNCTIONS -# fun_param_check() -# RETURN -# the modified vector -# EXAMPLES -# fun_rounding(data = c(10, 100.001, 333.0001254, 12312.1235), dec.nb = 2, after.lead.zero = FALSE) -# fun_rounding(data = c("10", "100.001", "333.0001254", "12312.1235"), dec.nb = 2, after.lead.zero = FALSE) -# DEBUGGING -# data = data = c(10, 100.001, 333.0001254, 12312.1235) ; dec.nb = 2 ; after.lead.zero = FALSE # # for function debugging -# data = data = c("10", "100.001", "333.0001254", "12312.1235") ; dec.nb = 2 ; after.lead.zero = TRUE # # for function debugging -# argument checking -if( ! (all(typeof(data) == "character") | all(typeof(data) == "double") | all(typeof(data) == "integer"))){ -tempo.cat <- paste0("\n\n================\n\nERROR: data ARGUMENT MUST BE A VECTOR OF NUMBERS (IN NUMERIC OR CHARACTER MODE)\n\n================\n\n") -stop(tempo.cat) -} -arg.check <- NULL # for function debbuging -checked.arg.names <- NULL # for function debbuging -ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) -tempo <- fun_param_check(data = dec.nb, typeof = "integer", length = 1, double.as.integer.allowed = TRUE, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = after.lead.zero, class = "logical", length = 1) ; eval(ee) -if(any(arg.check) == TRUE){ -stop() -} -# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() -# end argument checking -tempo <- grepl(x = data, pattern = "\\.") # detection of decimal numbers -ini.mode <- mode(data) -data <- as.character(data) # to really truncate decimal digits -for(i in 1:length(data)){ # scan all the numbers of the vector -if(tempo[i] == TRUE){ # means decimal number -if(after.lead.zero == TRUE){ -zero.pos <- unlist(gregexpr(text=data[i], pattern = 0)) # recover all the position of the zeros in the number. -1 if no zeros (do not record the leading and trailing zeros) -}else{ -zero.pos <- -1 # -1 as if no zero -} -dot.pos <- unlist(gregexpr(text=data[i], pattern = "\\.")) # recover all the position of the zeros in the number -digit.pos <- unlist(gregexpr(text=data[i], pattern = "[[:digit:]]")) # recover all the position of the digits in the number -dec.pos <- digit.pos[digit.pos > dot.pos] -count <- 0 -while((dot.pos + count + 1) %in% zero.pos & (dot.pos + count + 1) <= max(dec.pos) & (count + dec.nb) < length(dec.pos)){ # count the number of leading zeros in the decimal part -count <- count + 1 -} -data[i] <- formatC(as.numeric(data[i]), digits = (count + dec.nb), format = "f") -} -} -if(ini.mode != "character"){ -data <- as.numeric(data) -} -return(data) + # AIM: + # round a vector of values, if decimal, with the desired number of decimal digits after the decimal leading zeros + # BEWARE + # Work well with numbers as character strings, but not always with numerical numbers because of the floating point + # Numeric values are really truncated from a part of their decimal digits, whatever options(digits) settings + # ARGUMENTS + # data: a vector of numbers (numeric or character mode) + # dec.nb: number of required decimal digits + # after.lead.zero: logical. If FALSE, rounding is performed for all the decimal numbers, whatever the leading zeros (e.g., 0.123 -> 0.12 and 0.00128 -> 0.00). If TRUE, dec.nb are taken after the leading zeros (e.g., 0.123 -> 0.12 and 0.00128 -> 0.0013) + # REQUIRED FUNCTIONS + # fun_param_check() + # RETURN + # the modified vector + # EXAMPLES + # cat(fun_rounding(data = c(10, 100.001, 333.0001254, 12312.1235), dec.nb = 2, after.lead.zero = FALSE)) + # cat(fun_rounding(data = c("10", "100.001", "333.0001254", "12312.1235"), dec.nb = 2, after.lead.zero = FALSE)) + # DEBUGGING + # data = data = c(10, 100.001, 333.0001254, 12312.1235) ; dec.nb = 2 ; after.lead.zero = FALSE # # for function debugging + # data = data = c("10", "100.001", "333.0001254", "12312.1235") ; dec.nb = 2 ; after.lead.zero = TRUE # # for function debugging + # argument checking + if( ! (all(typeof(data) == "character") | all(typeof(data) == "double") | all(typeof(data) == "integer"))){ + tempo.cat <- paste0("\n\n================\n\nERROR: data ARGUMENT MUST BE A VECTOR OF NUMBERS (IN NUMERIC OR CHARACTER MODE)\n\n================\n\n") + stop(tempo.cat) + } + arg.check <- NULL # for function debbuging + checked.arg.names <- NULL # for function debbuging + ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) + tempo <- fun_param_check(data = dec.nb, typeof = "integer", length = 1, double.as.integer.allowed = TRUE, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = after.lead.zero, class = "logical", length = 1) ; eval(ee) + if(any(arg.check) == TRUE){ + stop() + } + # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() + # end argument checking + tempo <- grepl(x = data, pattern = "\\.") # detection of decimal numbers + ini.mode <- mode(data) + data <- as.character(data) # to really truncate decimal digits + for(i in 1:length(data)){ # scan all the numbers of the vector + if(tempo[i] == TRUE){ # means decimal number + if(after.lead.zero == TRUE){ + zero.pos <- unlist(gregexpr(text=data[i], pattern = 0)) # recover all the position of the zeros in the number. -1 if no zeros (do not record the leading and trailing zeros) + }else{ + zero.pos <- -1 # -1 as if no zero + } + dot.pos <- unlist(gregexpr(text=data[i], pattern = "\\.")) # recover all the position of the zeros in the number + digit.pos <- unlist(gregexpr(text=data[i], pattern = "[[:digit:]]")) # recover all the position of the digits in the number + dec.pos <- digit.pos[digit.pos > dot.pos] + count <- 0 + while((dot.pos + count + 1) %in% zero.pos & (dot.pos + count + 1) <= max(dec.pos) & (count + dec.nb) < length(dec.pos)){ # count the number of leading zeros in the decimal part + count <- count + 1 + } + data[i] <- formatC(as.numeric(data[i]), digits = (count + dec.nb), format = "f") + } + } + if(ini.mode != "character"){ + data <- as.numeric(data) + } + return(data) } @@ -1185,36 +1193,36 @@ return(data) # Check OK: clear to go Apollo fun_90clock_matrix_rot <- function(data){ -# AIM: -# 90° clockwise matrix rotation -# applied twice, the function provide the mirror matrix, according to vertical and horizontal symmetry -# REQUIRED FUNCTIONS -# fun_param_check() -# ARGUMENTS -# data: matrix (matrix class) -# RETURN -# the modified matrix -# EXAMPLES -# obs <- matrix(1:10, ncol = 1) ; obs ; fun_90clock_matrix_rot(obs) -# obs <- matrix(LETTERS[1:10], ncol = 5) ; obs ; fun_90clock_matrix_rot(obs) -# DEBUGGING -# data = matrix(1:10, ncol = 1) -# required function checking -if(length(find("fun_param_check", mode = "function")) == 0){ -tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") -stop(tempo.cat) -} -# end required function checking -# argument checking -# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() -if( ! any(class(data) %in% "matrix")){ -tempo.cat <- paste0("\n\n================\n\nERROR: THE data ARGUMENT MUST BE A MATRIX\n\n================\n\n") -stop(tempo.cat) -} -# end argument checking -for (i in 1:ncol(data)){data[,i] <- rev(data[,i])} -data <- t(data) -return(data) + # AIM: + # 90° clockwise matrix rotation + # applied twice, the function provide the mirror matrix, according to vertical and horizontal symmetry + # REQUIRED FUNCTIONS + # fun_param_check() + # ARGUMENTS + # data: matrix (matrix class) + # RETURN + # the modified matrix + # EXAMPLES + # obs <- matrix(1:10, ncol = 1) ; obs ; fun_90clock_matrix_rot(obs) + # obs <- matrix(LETTERS[1:10], ncol = 5) ; obs ; fun_90clock_matrix_rot(obs) + # DEBUGGING + # data = matrix(1:10, ncol = 1) + # required function checking + if(length(find("fun_param_check", mode = "function")) == 0){ + tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") + stop(tempo.cat) + } + # end required function checking + # argument checking + # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() + if( ! any(class(data) %in% "matrix")){ + tempo.cat <- paste0("\n\n================\n\nERROR: THE data ARGUMENT MUST BE A MATRIX\n\n================\n\n") + stop(tempo.cat) + } + # end argument checking + for (i in 1:ncol(data)){data[,i] <- rev(data[,i])} + data <- t(data) + return(data) } @@ -1223,117 +1231,117 @@ return(data) # Check OK: clear to go Apollo fun_hexa_hsv_color_matrix <- function(mat1, mat.hsv.h = TRUE, notch = 1, s = 1, v = 1, forced.color = NULL){ -# AIM: -# convert a matrix made of number into a hexadecimal matrix for rgb colorization -# REQUIRED FUNCTIONS -# fun_param_check() -# ARGUMENTS: -# mat1: matrix 1 of non negative numerical values that has to be colored (matrix class). NA allowed -# mat.hsv.h: logical. Is mat1 the h of hsv colors ? (if TRUE, mat1 must be between zero and 1) -# notch: single value between 0 and 1 to shift the successive colors on the hsv circle by + notch -# s: s argument of hsv(). Must be between 0 and 1 -# v: v argument of hsv(). Must be between 0 and 1 -# forced.color: Must be NULL or hexadecimal color code or name given by colors(). The first minimal values of mat1 will be these colors. All the color of mat1 can be forced using this argument -# RETURN -# a list containing: -# $mat1.name: name of mat1 -# $colored.mat: colors of mat1 in hexa -# $problem: logical. Is any colors of forced.color overlap the colors designed by the function. NULL if forced.color = NULL -# $text.problem: text when overlapping colors. NULL if forced.color = NULL or problem == FALSE -# EXAMPLES -# mat1 = matrix(c(1,1,1,2,1,5,9,NA), ncol = 2) ; dimnames(mat1) <- list(LETTERS[1:4], letters[1:2]) ; fun_hexa_hsv_color_matrix(mat1, mat.hsv.h = FALSE, notch = 1, s = 1, v = 1, forced.color = NULL) -# DEBUGGING -# mat1 = matrix(c(1,1,1,2,1,5,9,NA), ncol = 2) ; dimnames(mat1) <- list(LETTERS[1:4], letters[1:2]); mat.hsv.h = FALSE ; notch = 1 ; s = 1 ; v = 1 ; forced.color = c(hsv(1,1,1), hsv(0,0,0)) # for function debugging -# required function checking -if(length(find("fun_param_check", mode = "function")) == 0){ -tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") -stop(tempo.cat) -} -# end required function checking -# argument checking -arg.check <- NULL # for function debbuging -checked.arg.names <- NULL # for function debbuging -ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) -tempo <- fun_param_check(data = mat1, mode = "numeric", class = "matrix", na.contain = TRUE, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = mat.hsv.h, class = "logical", length = 1) ; eval(ee) -tempo <- fun_param_check(data = notch, mode = "numeric", length = 1, prop = TRUE) ; eval(ee) -tempo <- fun_param_check(data = s, mode = "numeric", length = 1, prop = TRUE) ; eval(ee) -tempo <- fun_param_check(data = v, mode = "numeric", length = 1, prop = TRUE) ; eval(ee) -if(any(arg.check) == TRUE){ -stop() -} -# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() -if(mat.hsv.h == TRUE & fun_param_check(data = mat1, mode = "numeric", prop = TRUE, print = FALSE)$problem == TRUE){ -tempo.cat <- paste0("\n\n================\n\nERROR: mat1 ARGUMENT MUST BE A MATRIX OF PROPORTIONS SINCE THE mat.hsv.h ARGUMENT IS SET TO TRUE\n\n================\n\n") -stop(tempo.cat) -} -if( ! is.null(forced.color)){ -tempo <- fun_param_check(data = forced.color, class = "character") -if(tempo$problem == TRUE){ -stop() -} -if( ! all(forced.color %in% colors() | grepl(pattern = "^#", forced.color))){ # check that all strings of forced.color start by # -tempo.cat <- paste0("\n\n================\n\nERROR: forced.color ARGUMENT MUST BE A HEXADECIMAL COLOR VECTOR STARTING BY # AND/OR COLOR NAMES GIVEN BY colors()\n\n================\n\n") -stop(tempo.cat) -} -} -# end argument checking -problem <- NULL -text.problem <- NULL -mat1.name <- deparse(substitute(mat1)) -# change the scale of the plotted matrix -if(mat.hsv.h == TRUE){ -if(any(min(mat1, na.rm = TRUE) < 0 | max(mat1, na.rm = TRUE) > 1, na.rm = TRUE)){ -tempo.cat <- paste0("\n\n================\n\nERROR: mat1 MUST BE MADE OF VALUES BETWEEN 0 AND 1 BECAUSE mat.hsv.h ARGUMENT SET TO TRUE\n\n================\n\n") -stop(tempo.cat) -} -}else{ -if(any(mat1 - floor(mat1) > 0, na.rm = TRUE) | any(mat1 == 0, na.rm = TRUE)){ -tempo.cat <- paste0("\n\n================\n\nERROR: mat1 MUST BE MADE OF INTEGER VALUES WITHOUT 0 BECAUSE mat.hsv.h ARGUMENT SET TO FALSE\n\n================\n\n") -stop(tempo.cat) -}else{ -mat1 <- mat1 / max(mat1, na.rm = TRUE) -} -} -if(notch != 1){ -different.color <- unique(as.vector(mat1)) -different.color <- different.color[ ! is.na(different.color)] -tempo.different.color <- different.color + c(0, cumsum(rep(notch, length(different.color) - 1))) -tempo.different.color <- tempo.different.color - floor(tempo.different.color) -if(any(duplicated(tempo.different.color) == TRUE)){ -tempo.cat <- paste0("\n\n================\n\nERROR: DUPLICATED VALUES AFTER USING notch (", paste(tempo.different.color[duplicated(tempo.different.color)], collapse = " "), "). TRY ANOTHER notch VALUE\n\n================\n\n") -stop(tempo.cat) -}else if(length(different.color) != length(tempo.different.color)){ -tempo.cat <- paste0("\n\n================\n\nERROR: LENGTH OF different.color (", paste(different.color, collapse = " "), ") DIFFERENT FROM LENGTH OF tempo.different.color (", paste(tempo.different.color, collapse = " "), ")\n\n================\n\n") -stop(tempo.cat) -}else{ -for(i in 1:length(different.color)){ -mat1[mat1 == different.color[i]] <- tempo.different.color[i] -} -} -} -if( ! is.null(forced.color)){ -hexa.values.to.change <- hsv(unique(sort(mat1))[1:length(forced.color)], s, v) -} -mat1[ ! is.na(mat1)] <- hsv(mat1[ ! is.na(mat1)], s, v) -if( ! is.null(forced.color)){ -if(any(forced.color %in% mat1, na.rm = TRUE)){ -problem <- TRUE -text.problem <- paste0("THE FOLLOWING COLORS WHERE INTRODUCED USING forced.color BUT WHERE ALREADY PRESENT IN THE COLORED MATRIX :", paste(forced.color[forced.color %in% mat1], collapse = " ")) -}else{ -problem <- FALSE -} -for(i in 1:length(hexa.values.to.change)){ -if( ! any(mat1 == hexa.values.to.change[i], na.rm = TRUE)){ -tempo.cat <- paste0("\n\n================\n\nERROR: THE ", hexa.values.to.change[i], " VALUE FROM hexa.values.to.change IS NOT REPRESENTED IN mat1 : ", paste(unique(as.vector(mat1)), collapse = " "), "\n\n================\n\n") -stop(tempo.cat) -}else{ -mat1[which(mat1 == hexa.values.to.change[i])] <- forced.color[i] -} -} -} -output <- list(mat1.name = mat1.name, colored.mat = mat1, problem = problem, text.problem = text.problem) -return(output) + # AIM: + # convert a matrix made of numbers into a hexadecimal matrix for rgb colorization + # REQUIRED FUNCTIONS + # fun_param_check() + # ARGUMENTS: + # mat1: matrix 1 of non negative numerical values that has to be colored (matrix class). NA allowed + # mat.hsv.h: logical. Is mat1 the h of hsv colors ? (if TRUE, mat1 must be between zero and 1) + # notch: single value between 0 and 1 to shift the successive colors on the hsv circle by + notch + # s: s argument of hsv(). Must be between 0 and 1 + # v: v argument of hsv(). Must be between 0 and 1 + # forced.color: Must be NULL or hexadecimal color code or name given by colors(). The first minimal values of mat1 will be these colors. All the color of mat1 can be forced using this argument + # RETURN + # a list containing: + # $mat1.name: name of mat1 + # $colored.mat: colors of mat1 in hexa + # $problem: logical. Is any colors of forced.color overlap the colors designed by the function. NULL if forced.color = NULL + # $text.problem: text when overlapping colors. NULL if forced.color = NULL or problem == FALSE + # EXAMPLES + # mat1 = matrix(c(1,1,1,2,1,5,9,NA), ncol = 2) ; dimnames(mat1) <- list(LETTERS[1:4], letters[1:2]) ; fun_hexa_hsv_color_matrix(mat1, mat.hsv.h = FALSE, notch = 1, s = 1, v = 1, forced.color = NULL) + # DEBUGGING + # mat1 = matrix(c(1,1,1,2,1,5,9,NA), ncol = 2) ; dimnames(mat1) <- list(LETTERS[1:4], letters[1:2]); mat.hsv.h = FALSE ; notch = 1 ; s = 1 ; v = 1 ; forced.color = c(hsv(1,1,1), hsv(0,0,0)) # for function debugging + # required function checking + if(length(find("fun_param_check", mode = "function")) == 0){ + tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") + stop(tempo.cat) + } + # end required function checking + # argument checking + arg.check <- NULL # for function debbuging + checked.arg.names <- NULL # for function debbuging + ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) + tempo <- fun_param_check(data = mat1, mode = "numeric", class = "matrix", na.contain = TRUE, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = mat.hsv.h, class = "logical", length = 1) ; eval(ee) + tempo <- fun_param_check(data = notch, mode = "numeric", length = 1, prop = TRUE) ; eval(ee) + tempo <- fun_param_check(data = s, mode = "numeric", length = 1, prop = TRUE) ; eval(ee) + tempo <- fun_param_check(data = v, mode = "numeric", length = 1, prop = TRUE) ; eval(ee) + if(any(arg.check) == TRUE){ + stop() + } + # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() + if(mat.hsv.h == TRUE & fun_param_check(data = mat1, mode = "numeric", prop = TRUE, print = FALSE)$problem == TRUE){ + tempo.cat <- paste0("\n\n================\n\nERROR: mat1 ARGUMENT MUST BE A MATRIX OF PROPORTIONS SINCE THE mat.hsv.h ARGUMENT IS SET TO TRUE\n\n================\n\n") + stop(tempo.cat) + } + if( ! is.null(forced.color)){ + tempo <- fun_param_check(data = forced.color, class = "character") + if(tempo$problem == TRUE){ + stop() + } + if( ! all(forced.color %in% colors() | grepl(pattern = "^#", forced.color))){ # check that all strings of forced.color start by # + tempo.cat <- paste0("\n\n================\n\nERROR: forced.color ARGUMENT MUST BE A HEXADECIMAL COLOR VECTOR STARTING BY # AND/OR COLOR NAMES GIVEN BY colors()\n\n================\n\n") + stop(tempo.cat) + } + } + # end argument checking + problem <- NULL + text.problem <- NULL + mat1.name <- deparse(substitute(mat1)) + # change the scale of the plotted matrix + if(mat.hsv.h == TRUE){ + if(any(min(mat1, na.rm = TRUE) < 0 | max(mat1, na.rm = TRUE) > 1, na.rm = TRUE)){ + tempo.cat <- paste0("\n\n================\n\nERROR: mat1 MUST BE MADE OF VALUES BETWEEN 0 AND 1 BECAUSE mat.hsv.h ARGUMENT SET TO TRUE\n\n================\n\n") + stop(tempo.cat) + } + }else{ + if(any(mat1 - floor(mat1) > 0, na.rm = TRUE) | any(mat1 == 0, na.rm = TRUE)){ + tempo.cat <- paste0("\n\n================\n\nERROR: mat1 MUST BE MADE OF INTEGER VALUES WITHOUT 0 BECAUSE mat.hsv.h ARGUMENT SET TO FALSE\n\n================\n\n") + stop(tempo.cat) + }else{ + mat1 <- mat1 / max(mat1, na.rm = TRUE) + } + } + if(notch != 1){ + different.color <- unique(as.vector(mat1)) + different.color <- different.color[ ! is.na(different.color)] + tempo.different.color <- different.color + c(0, cumsum(rep(notch, length(different.color) - 1))) + tempo.different.color <- tempo.different.color - floor(tempo.different.color) + if(any(duplicated(tempo.different.color) == TRUE)){ + tempo.cat <- paste0("\n\n================\n\nERROR: DUPLICATED VALUES AFTER USING notch (", paste(tempo.different.color[duplicated(tempo.different.color)], collapse = " "), "). TRY ANOTHER notch VALUE\n\n================\n\n") + stop(tempo.cat) + }else if(length(different.color) != length(tempo.different.color)){ + tempo.cat <- paste0("\n\n================\n\nERROR: LENGTH OF different.color (", paste(different.color, collapse = " "), ") DIFFERENT FROM LENGTH OF tempo.different.color (", paste(tempo.different.color, collapse = " "), ")\n\n================\n\n") + stop(tempo.cat) + }else{ + for(i in 1:length(different.color)){ + mat1[mat1 == different.color[i]] <- tempo.different.color[i] + } + } + } + if( ! is.null(forced.color)){ + hexa.values.to.change <- hsv(unique(sort(mat1))[1:length(forced.color)], s, v) + } + mat1[ ! is.na(mat1)] <- hsv(mat1[ ! is.na(mat1)], s, v) + if( ! is.null(forced.color)){ + if(any(forced.color %in% mat1, na.rm = TRUE)){ + problem <- TRUE + text.problem <- paste0("THE FOLLOWING COLORS WHERE INTRODUCED USING forced.color BUT WHERE ALREADY PRESENT IN THE COLORED MATRIX :", paste(forced.color[forced.color %in% mat1], collapse = " ")) + }else{ + problem <- FALSE + } + for(i in 1:length(hexa.values.to.change)){ + if( ! any(mat1 == hexa.values.to.change[i], na.rm = TRUE)){ + tempo.cat <- paste0("\n\n================\n\nERROR: THE ", hexa.values.to.change[i], " VALUE FROM hexa.values.to.change IS NOT REPRESENTED IN mat1 : ", paste(unique(as.vector(mat1)), collapse = " "), "\n\n================\n\n") + stop(tempo.cat) + }else{ + mat1[which(mat1 == hexa.values.to.change[i])] <- forced.color[i] + } + } + } + output <- list(mat1.name = mat1.name, colored.mat = mat1, problem = problem, text.problem = text.problem) + return(output) } @@ -1354,56 +1362,56 @@ return(output) # Check OK: clear to go Apollo fun_window_width_resizing <- function(class.nb, inches.per.class.nb = 1, ini.window.width = 7, inch.left.space, inch.right.space, boundarie.space = 0.5){ -# AIM: -# rescale the width of a window to open depending on the number of classes to plot -# can be used for height, considering that it is as if it was a width -# this order can be used: -# fun_window_width_resizing() -# fun_open_window() -# fun_graph_param_prior_plot() # not for ggplot2 -# plot() or any other plotting -# fun_feature_post_plot() if fun_graph_param_prior_plot() has been used # not for ggplot2 -# fun_close_specif_window() -# REQUIRED FUNCTIONS -# fun_param_check() -# ARGUMENTS -# class.nb: number of class to plot -# inches.per.class.nb: number of inches per unit of class.nb. 2 means 2 inches for each boxplot for instance -# ini.window.width:initial window width in inches -# inch.left.space: left horizontal margin of the figure region (in inches) -# inch.right.space: right horizontal margin of the figure region (in inches) -# boundarie.space: space between the right and left limits of the plotting region and the plot (0.5 means half a class width) -# RETURN -# the new window width in inches -# EXAMPLES -# fun_window_width_resizing(class.nb = 10, inches.per.class.nb = 0.2, ini.window.width = 7, inch.left.space = 1, inch.right.space = 1, boundarie.space = 0.5) -# DEBUGGING -# class.nb = 10 ; inches.per.class.nb = 0.2 ; ini.window.width = 7 ; inch.left.space = 1 ; inch.right.space = 1 ; boundarie.space = 0.5 # for function debugging -# required function checking -if(length(find("fun_param_check", mode = "function")) == 0){ -tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") -stop(tempo.cat) -} -# end required function checking -# argument checking -arg.check <- NULL # for function debbuging -checked.arg.names <- NULL # for function debbuging -ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) -tempo <- fun_param_check(data = class.nb, typeof = "integer", length = 1, double.as.integer.allowed = TRUE, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = inches.per.class.nb, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = ini.window.width, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = inch.left.space, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = inch.right.space, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = boundarie.space, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -if(any(arg.check) == TRUE){ -stop() -} -# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() -# end argument checking -range.max <- class.nb + boundarie.space # the max range of the future plot -range.min <- boundarie.space # the min range of the future plot -window.width <- inch.left.space + inch.right.space + inches.per.class.nb * (range.max - range.min) -return(window.width) + # AIM: + # rescale the width of a window to open depending on the number of classes to plot + # can be used for height, considering that it is as if it was a width + # this order can be used: + # fun_window_width_resizing() + # fun_open_window() + # fun_graph_param_prior_plot() # not for ggplot2 + # plot() or any other plotting + # fun_feature_post_plot() if fun_graph_param_prior_plot() has been used # not for ggplot2 + # fun_close_specif_window() + # REQUIRED FUNCTIONS + # fun_param_check() + # ARGUMENTS + # class.nb: number of class to plot + # inches.per.class.nb: number of inches per unit of class.nb. 2 means 2 inches for each boxplot for instance + # ini.window.width:initial window width in inches + # inch.left.space: left horizontal margin of the figure region (in inches) + # inch.right.space: right horizontal margin of the figure region (in inches) + # boundarie.space: space between the right and left limits of the plotting region and the plot (0.5 means half a class width) + # RETURN + # the new window width in inches + # EXAMPLES + # fun_window_width_resizing(class.nb = 10, inches.per.class.nb = 0.2, ini.window.width = 7, inch.left.space = 1, inch.right.space = 1, boundarie.space = 0.5) + # DEBUGGING + # class.nb = 10 ; inches.per.class.nb = 0.2 ; ini.window.width = 7 ; inch.left.space = 1 ; inch.right.space = 1 ; boundarie.space = 0.5 # for function debugging + # required function checking + if(length(find("fun_param_check", mode = "function")) == 0){ + tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") + stop(tempo.cat) + } + # end required function checking + # argument checking + arg.check <- NULL # for function debbuging + checked.arg.names <- NULL # for function debbuging + ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) + tempo <- fun_param_check(data = class.nb, typeof = "integer", length = 1, double.as.integer.allowed = TRUE, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = inches.per.class.nb, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = ini.window.width, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = inch.left.space, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = inch.right.space, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = boundarie.space, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + if(any(arg.check) == TRUE){ + stop() + } + # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() + # end argument checking + range.max <- class.nb + boundarie.space # the max range of the future plot + range.min <- boundarie.space # the min range of the future plot + window.width <- inch.left.space + inch.right.space + inches.per.class.nb * (range.max - range.min) + return(window.width) } @@ -1412,115 +1420,115 @@ return(window.width) # Check OK: clear to go Apollo fun_open_window <- function(pdf.disp = TRUE, path.fun = "working.dir", pdf.name.file = "graph", width.fun = 7, height.fun = 7, paper = "special", no.pdf.overwrite = TRUE, return.output = FALSE){ -# AIM: -# open a pdf or screen (GUI) graphic window -# BEWARE: on Linux, use pdf.disp = TRUE, if (GUI) graphic window is not always available, meaning that X is not installed (clusters for instance). Use X11() in R to test if available -# this order can be used: -# fun_window_width_resizing() -# fun_open_window() -# fun_graph_param_prior_plot() # not for ggplot2 -# plot() or any other plotting -# fun_feature_post_plot() if fun_graph_param_prior_plot() has been used # not for ggplot2 -# fun_close_specif_window() -# REQUIRED FUNCTIONS -# fun_param_check() -# ARGUMENTS: -# pdf.disp: use pdf or not -# path.fun: where the pdf is saved. Must not finish by a path separator. Write "working.dir" if working directory is required (default) -# pdf.name.file: name of the pdf file containing the graphs (the .pdf extension is added by the function) -# width.fun: width of the windows (in inches) -# height.fun: height of the windows (in inches) -# paper: paper argument of the pdf function (paper format). Only used for pdf(). Either "a4", "letter", "legal", "us", "executive", "a4r", "USr" or "special". If "special", means that width.fun and height.fun specify the paper size -# no.pdf.overwrite: existing pdf can be overwritten ? Only used if pdf.disp = TRUE -# return.output: return output ? If TRUE but function not assigned, the output list is displayed -# RETURN -# a list containing: -# $pdf.loc: path of the pdf created -# $ini.par: initial par() parameters (to reset in a new graph) -# $zone.ini: initial window spliting (to reset in a new graph) -# EXAMPLES -# fun_open_window(pdf.disp = FALSE, path.fun = "C:/Users/Gael/Desktop", pdf.name.file = "graph", width.fun = 7, height.fun = 7, paper = "special", no.pdf.overwrite = TRUE, return.output = TRUE) -# DEBUGGING -# pdf.disp = TRUE ; path.fun = "C:/Users/Gael/Desktop" ; pdf.name.file = "graphs" ; width.fun = 7 ; height.fun = 7 ; paper = "special" ; no.pdf.overwrite = TRUE ; return.output = TRUE # for function debugging -# required function checking -if(length(find("fun_param_check", mode = "function")) == 0){ -tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") -stop(tempo.cat) -} -# end required function checking -# argument checking -arg.check <- NULL # for function debbuging -checked.arg.names <- NULL # for function debbuging -ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) -tempo <- fun_param_check(data = pdf.disp, class = "logical", length = 1) ; eval(ee) -tempo <- fun_param_check(data = path.fun, class = "character", length = 1) ; eval(ee) -tempo <- fun_param_check(data = pdf.name.file, class = "character", length = 1) ; eval(ee) -tempo <- fun_param_check(data = width.fun, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = height.fun, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = path.fun, class = "character", length = 1) ; eval(ee) -tempo <- fun_param_check(data = paper, options = c("a4", "letter", "legal", "us", "executive", "a4r", "USr", "special", "A4", "LETTER", "LEGAL", "US"), length = 1) ; eval(ee) -tempo <- fun_param_check(data =no.pdf.overwrite, class = "logical", length = 1) ; eval(ee) -tempo <- fun_param_check(data = return.output, class = "logical", length = 1) ; eval(ee) -if(any(arg.check) == TRUE){ -stop() -} -# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() -# end argument checking -if(path.fun == "working.dir"){ -path.fun <- getwd() -}else{ -if(dir.exists(path.fun) == FALSE){ -tempo.cat <- paste0("\n\n================\n\nERROR: path.fun ARGUMENT DOES NOT CORRESPOND TO EXISTING DIRECTORY\n\n================\n\n") -stop(tempo.cat) -} -} -if(Sys.info()["sysname"] == "Windows"){ # Note that .Platform$OS.type() only says "unix" for macOS and Linux and "Windows" for Windows -tempo <- NULL -windows() -ini.par <- par(no.readonly = TRUE) # to recover the initial graphical parameters if required (reset) -invisible(dev.off()) # close the new window -}else if(Sys.info()["sysname"] == "Linux"){ -if( ! file.exists(paste0(getwd(), "/Rplots.pdf"))){ -tempo <- suppressWarnings(try(X11(), silent = TRUE))[] # open a X11 window or a pdf. So no need to use again X11(). tempo == NULL if no problem, meaning that the X11 window is opened. If tempo != NULL, a pdf is open here paste0(getwd(), "/Rplots.pdf") -ini.par <- par(no.readonly = TRUE) # recover the initial graphical parameters. Works even if X11 is not working as R opens a pdf -invisible(dev.off()) # can be used here to close the pdf windows if tempo != NULL and to close the X11 window if tempo == NULL -}else{ -tempo.cat <- paste0("\n\n================\n\nPROBLEM: THIS FUNCTION CANNOT OPEN GUI ON LINUX OR NON MACOS UNIX SYSTEM (X GRAPHIC INTERFACE HAS TO BE SET.\nTO OVERCOME THIS, PLEASE SET pdf.disp ARGUMENT TO TRUE AND RERUN\n\n================\n\n") -stop(tempo.cat) -} -}else{ -tempo <- NULL -quartz() -ini.par <- par(no.readonly = TRUE) # to recover the initial graphical parameters if required (reset) -invisible(dev.off()) # close the new window -} -zone.ini <- matrix(1, ncol=1) # to recover the initial parameters for next figure region when device region split into several figure regions -if(pdf.disp == TRUE){ -pdf.loc <- paste0(path.fun, "/", pdf.name.file, ".pdf") -if(file.exists(pdf.loc) == TRUE & no.pdf.overwrite == TRUE){ -tempo.cat <- paste0("\n\n================\n\nERROR: pdf.loc FILE ALREADY EXISTS AND CANNOT BE OVERWRITTEN DUE TO no.pdf.overwrite ARGUMENT SET TO TRUE\n\n================\n\n") -stop(tempo.cat) -}else{ -pdf(width = width.fun, height = height.fun, file=pdf.loc, paper = paper) -} -}else if(pdf.disp == FALSE){ -pdf.loc <- NULL -if(Sys.info()["sysname"] == "Windows"){ # .Platform$OS.type() only says "unix" for macOS and Linux and "Windows" for Windows -windows(width = width.fun, height = height.fun, rescale="fixed") -}else if(Sys.info()["sysname"] == "Linux"){ -if( ! is.null(tempo)){ -stop("PROBLEM: THIS FUNCTION CANNOT OPEN GUI ON LINUX OR NON MACOS UNIX SYSTEM (X GRAPHIC INTERFACE HAS TO BE SET.\nTO OVERCOME THIS, PLEASE SET pdf.disp ARGUMENT TO TRUE AND RERUN") -}else{ -X11(width = width.fun, height = height.fun) -} -}else{ -quartz(width = width.fun, height = height.fun) -} -} -if(return.output == TRUE){ -output <- list(pdf.loc = pdf.loc, ini.par = ini.par, zone.ini = zone.ini) -return(output) -} + # AIM: + # open a pdf or screen (GUI) graphic window + # BEWARE: on Linux, use pdf.disp = TRUE, if (GUI) graphic window is not always available, meaning that X is not installed (clusters for instance). Use X11() in R to test if available + # this order can be used: + # fun_window_width_resizing() + # fun_open_window() + # fun_graph_param_prior_plot() # not for ggplot2 + # plot() or any other plotting + # fun_feature_post_plot() if fun_graph_param_prior_plot() has been used # not for ggplot2 + # fun_close_specif_window() + # REQUIRED FUNCTIONS + # fun_param_check() + # ARGUMENTS: + # pdf.disp: use pdf or not + # path.fun: where the pdf is saved. Must not finish by a path separator. Write "working.dir" if working directory is required (default) + # pdf.name.file: name of the pdf file containing the graphs (the .pdf extension is added by the function) + # width.fun: width of the windows (in inches) + # height.fun: height of the windows (in inches) + # paper: paper argument of the pdf function (paper format). Only used for pdf(). Either "a4", "letter", "legal", "us", "executive", "a4r", "USr" or "special". If "special", means that width.fun and height.fun specify the paper size + # no.pdf.overwrite: existing pdf can be overwritten ? Only used if pdf.disp = TRUE + # return.output: return output ? If TRUE but function not assigned, the output list is displayed + # RETURN + # a list containing: + # $pdf.loc: path of the pdf created + # $ini.par: initial par() parameters (to reset in a new graph) + # $zone.ini: initial window spliting (to reset in a new graph) + # EXAMPLES + # fun_open_window(pdf.disp = FALSE, path.fun = "C:/Users/Gael/Desktop", pdf.name.file = "graph", width.fun = 7, height.fun = 7, paper = "special", no.pdf.overwrite = TRUE, return.output = TRUE) + # DEBUGGING + # pdf.disp = TRUE ; path.fun = "C:/Users/Gael/Desktop" ; pdf.name.file = "graphs" ; width.fun = 7 ; height.fun = 7 ; paper = "special" ; no.pdf.overwrite = TRUE ; return.output = TRUE # for function debugging + # required function checking + if(length(find("fun_param_check", mode = "function")) == 0){ + tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") + stop(tempo.cat) + } + # end required function checking + # argument checking + arg.check <- NULL # for function debbuging + checked.arg.names <- NULL # for function debbuging + ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) + tempo <- fun_param_check(data = pdf.disp, class = "logical", length = 1) ; eval(ee) + tempo <- fun_param_check(data = path.fun, class = "character", length = 1) ; eval(ee) + tempo <- fun_param_check(data = pdf.name.file, class = "character", length = 1) ; eval(ee) + tempo <- fun_param_check(data = width.fun, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = height.fun, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = path.fun, class = "character", length = 1) ; eval(ee) + tempo <- fun_param_check(data = paper, options = c("a4", "letter", "legal", "us", "executive", "a4r", "USr", "special", "A4", "LETTER", "LEGAL", "US"), length = 1) ; eval(ee) + tempo <- fun_param_check(data =no.pdf.overwrite, class = "logical", length = 1) ; eval(ee) + tempo <- fun_param_check(data = return.output, class = "logical", length = 1) ; eval(ee) + if(any(arg.check) == TRUE){ + stop() + } + # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() + # end argument checking + if(path.fun == "working.dir"){ + path.fun <- getwd() + }else{ + if(dir.exists(path.fun) == FALSE){ + tempo.cat <- paste0("\n\n================\n\nERROR: path.fun ARGUMENT DOES NOT CORRESPOND TO EXISTING DIRECTORY\n\n================\n\n") + stop(tempo.cat) + } + } + if(Sys.info()["sysname"] == "Windows"){ # Note that .Platform$OS.type() only says "unix" for macOS and Linux and "Windows" for Windows + tempo <- NULL + windows() + ini.par <- par(no.readonly = TRUE) # to recover the initial graphical parameters if required (reset) + invisible(dev.off()) # close the new window + }else if(Sys.info()["sysname"] == "Linux"){ + if( ! file.exists(paste0(getwd(), "/Rplots.pdf"))){ + tempo <- suppressWarnings(try(X11(), silent = TRUE))[] # open a X11 window or a pdf. So no need to use again X11(). tempo == NULL if no problem, meaning that the X11 window is opened. If tempo != NULL, a pdf is open here paste0(getwd(), "/Rplots.pdf") + ini.par <- par(no.readonly = TRUE) # recover the initial graphical parameters. Works even if X11 is not working as R opens a pdf + invisible(dev.off()) # can be used here to close the pdf windows if tempo != NULL and to close the X11 window if tempo == NULL + }else{ + tempo.cat <- paste0("\n\n================\n\nPROBLEM: THIS FUNCTION CANNOT OPEN GUI ON LINUX OR NON MACOS UNIX SYSTEM (X GRAPHIC INTERFACE HAS TO BE SET.\nTO OVERCOME THIS, PLEASE SET pdf.disp ARGUMENT TO TRUE AND RERUN\n\n================\n\n") + stop(tempo.cat) + } + }else{ + tempo <- NULL + quartz() + ini.par <- par(no.readonly = TRUE) # to recover the initial graphical parameters if required (reset) + invisible(dev.off()) # close the new window + } + zone.ini <- matrix(1, ncol=1) # to recover the initial parameters for next figure region when device region split into several figure regions + if(pdf.disp == TRUE){ + pdf.loc <- paste0(path.fun, "/", pdf.name.file, ".pdf") + if(file.exists(pdf.loc) == TRUE & no.pdf.overwrite == TRUE){ + tempo.cat <- paste0("\n\n================\n\nERROR: pdf.loc FILE ALREADY EXISTS AND CANNOT BE OVERWRITTEN DUE TO no.pdf.overwrite ARGUMENT SET TO TRUE\n\n================\n\n") + stop(tempo.cat) + }else{ + pdf(width = width.fun, height = height.fun, file=pdf.loc, paper = paper) + } + }else if(pdf.disp == FALSE){ + pdf.loc <- NULL + if(Sys.info()["sysname"] == "Windows"){ # .Platform$OS.type() only says "unix" for macOS and Linux and "Windows" for Windows + windows(width = width.fun, height = height.fun, rescale="fixed") + }else if(Sys.info()["sysname"] == "Linux"){ + if( ! is.null(tempo)){ + stop("PROBLEM: THIS FUNCTION CANNOT OPEN GUI ON LINUX OR NON MACOS UNIX SYSTEM (X GRAPHIC INTERFACE HAS TO BE SET.\nTO OVERCOME THIS, PLEASE SET pdf.disp ARGUMENT TO TRUE AND RERUN") + }else{ + X11(width = width.fun, height = height.fun) + } + }else{ + quartz(width = width.fun, height = height.fun) + } + } + if(return.output == TRUE){ + output <- list(pdf.loc = pdf.loc, ini.par = ini.par, zone.ini = zone.ini) + return(output) + } } @@ -1529,134 +1537,134 @@ return(output) # Check OK: clear to go Apollo fun_graph_param_prior_plot <- function(param.reinitial = FALSE, xlog.scale = FALSE, ylog.scale = FALSE, remove.label = TRUE, remove.x.axis = TRUE, remove.y.axis = TRUE, std.x.range = TRUE, std.y.range = TRUE, down.space = 1, left.space = 1, up.space = 1, right.space = 1, orient = 1, dist.legend = 3.5, tick.length = 0.5, box.type = "n", amplif.label = 1, amplif.axis = 1, display.extend = FALSE, return.par = FALSE){ -# AIM: -# reinitialize and set the graphic parameters before plotting -# very convenient to erase the axes for post plot axis redrawing using fun_feature_post_plot() -# REQUIRED FUNCTIONS -# fun_param_check() -# ARGUMENTS -# param.reinitial: reinitialize graphic parameters before applying the new ones, as defined by the other arguments? Either TRUE or FALSE -# xlog.scale: Log scale for the x-axis? Either TRUE or FALSE. If TRUE, erases the x-axis, except legend, for further drawing by fun_feature_post_plot()(xlog argument of par()) -# ylog.scale: Log scale for the y-axis? Either TRUE or FALSE. If TRUE, erases the y-axis, except legend, for further drawing by fun_feature_post_plot()(ylog argument of par()) -# remove.label: remove labels (axis legend) of the two axes? Either TRUE or FALSE (ann argument of par()) -# remove.x.axis: remove x-axis except legend? Either TRUE or FALSE (control the xaxt argument of par()). Automately set to TRUE if xlog.scale == TRUE -# remove.y.axis: remove y-axis except legend? Either TRUE or FALSE (control the yaxt argument of par()). Automately set to TRUE if ylog.scale == TRUE -# std.x.range: standard range on the x-axis? TRUE (no range extend) or FALSE (4% range extend). Controls xaxs argument of par() (TRUE is xaxs = "i", FALSE is xaxs = "r") -# std.y.range: standard range on the y-axis? TRUE (no range extend) or FALSE (4% range extend). Controls yaxs argument of par() (TRUE is yaxs = "i", FALSE is yaxs = "r") -# down.space: lower vertical margin (in inches, mai argument of par()) -# left.space: left horizontal margin (in inches, mai argument of par()) -# up.space: upper vertical margin between plot region and grapical window (in inches, mai argument of par()) -# right.space: right horizontal margin (in inches, mai argument of par()) -# orient: scale number orientation (las argument of par()). 0, always parallel to the axis; 1, always horizontal; 2, always perpendicular to the axis; 3, always vertical -# dist.legend: numeric value that moves axis legends away in inches (first number of mgp argument of par() but in inches thus / 0.2) -# tick.length: length of the ticks (1 means complete the distance between the plot region and the axis numbers, 0.5 means half the length, etc. 0 means no tick -# box.type: bty argument of par(). Either "o", "l", "7", "c", "u", "]", the resulting box resembles the corresponding upper case letter. A value of "n" suppresses the box -# amplif.label: increase or decrease the size of the text in legends -# amplif.axis: increase or decrease the size of the scale numbers in axis -# display.extend: extend display beyond plotting region? Either TRUE or FALSE (xpd argument of par() without NA) -# return.par: return graphic parameter modification? -# RETURN -# return graphic parameter modification -# EXAMPLES -# fun_graph_param_prior_plot(param.reinitial = FALSE, xlog.scale = FALSE, ylog.scale = FALSE, remove.label = TRUE, remove.x.axis = TRUE, remove.y.axis = TRUE, down.space = 1, left.space = 1, up.space = 1, right.space = 1, orient = 1, dist.legend = 4.5, tick.length = 0.5, box.type = "n", amplif.label = 1, amplif.axis = 1, display.extend = FALSE, return.par = FALSE) -# DEBUGGING -# param.reinitial = FALSE ; xlog.scale = FALSE ; ylog.scale = FALSE ; remove.label = TRUE ; remove.x.axis = TRUE ; remove.y.axis = TRUE ; down.space = 1 ; left.space = 1 ; up.space = 1 ; right.space = 1 ; orient = 1 ; dist.legend = 4.5 ; tick.length = 0.5 ; box.type = "n" ; amplif.label = 1 ; amplif.axis = 1 ; display.extend = FALSE ; return.par = FALSE # for function debugging -# required function checking -if(length(find("fun_param_check", mode = "function")) == 0){ -tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") -stop(tempo.cat) -} -# end required function checking -# argument checking -arg.check <- NULL # for function debbuging -checked.arg.names <- NULL # for function debbuging -ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) -tempo <- fun_param_check(data = param.reinitial, class = "logical", length = 1) ; eval(ee) -tempo <- fun_param_check(data = xlog.scale, class = "logical", length = 1) ; eval(ee) -tempo <- fun_param_check(data = ylog.scale, class = "logical", length = 1) ; eval(ee) -tempo <- fun_param_check(data = remove.label, class = "logical", length = 1) ; eval(ee) -tempo <- fun_param_check(data = remove.x.axis, class = "logical", length = 1) ; eval(ee) -tempo <- fun_param_check(data = remove.y.axis, class = "logical", length = 1) ; eval(ee) -tempo <- fun_param_check(data = std.x.range, class = "logical", length = 1) ; eval(ee) -tempo <- fun_param_check(data = std.y.range, class = "logical", length = 1) ; eval(ee) -tempo <- fun_param_check(data = down.space, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = left.space, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = up.space, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = right.space, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = orient, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = dist.legend, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = tick.length, class = "numeric", length = 1, prop = TRUE) ; eval(ee) -tempo <- fun_param_check(data = box.type, options = c("o", "l", "7", "c", "u", "]", "n"), length = 1) ; eval(ee) -tempo <- fun_param_check(data = amplif.label, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = amplif.axis, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = display.extend, class = "logical", length = 1) ; eval(ee) -tempo <- fun_param_check(data = return.par, class = "logical", length = 1) ; eval(ee) -if(any(arg.check) == TRUE){ -stop() -} -# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() -# end argument checking -if(param.reinitial == TRUE){ -if( ! all(names(dev.cur()) == "null device")){ -active.wind.nb <- dev.cur() -}else{ -active.wind.nb <- 0 -} -if(Sys.info()["sysname"] == "Windows"){ # Note that .Platform$OS.type() only says "unix" for macOS and Linux and "Windows" for Windows -windows() -}else if(Sys.info()["sysname"] == "Linux"){ -if( ! file.exists(paste0(getwd(), "/Rplots.pdf"))){ -tempo <- suppressWarnings(try(X11(), silent = TRUE))[] # open a X11 window or a pdf. So no need to use again X11(). tempo == NULL if no problem, meaning that the X11 window is opened. If tempo != NULL, a pdf is open here paste0(getwd(), "/Rplots.pdf") -}else{ -tempo.cat <- paste0("\n\n================\n\nPROBLEM: THIS FUNCTION CANNOT OPEN GUI ON LINUX OR NON MACOS UNIX SYSTEM (X GRAPHIC INTERFACE HAS TO BE SET.\nTO OVERCOME THIS, PLEASE SET pdf.disp ARGUMENT TO TRUE AND RERUN\n\n================\n\n") -stop(tempo.cat) -} -}else{ # macOS -quartz() -} -ini.par <- par(no.readonly = TRUE) # to recover the initial graphical parameters if required (reset) -invisible(dev.off()) # close the new window -if( ! all(names(dev.cur()) == "null device")){ -dev.set(active.wind.nb) # go back to the active windows if exists -par(ini.par) # apply the initial par to current window -} -} -if(remove.x.axis == TRUE){ -par(xaxt = "n") # suppress the y-axis label -}else{ -par(xaxt = "s") -} -if(remove.y.axis == TRUE){ -par(yaxt = "n") # suppress the y-axis label -}else{ -par(yaxt = "s") -} -if(std.x.range == TRUE){ -par(xaxs = "i") -}else{ -par(xaxs = "r") -} -if(std.y.range == TRUE){ -par(yaxs = "i") -}else{ -par(yaxs = "r") -} -par(mai = c(down.space, left.space, up.space, right.space), ann = ! remove.label, las = orient, mgp = c(dist.legend/0.2, 1, 0), xpd = display.extend, bty= box.type, cex.lab = amplif.label, cex.axis = amplif.axis) -par(tcl = -par()$mgp[2] * tick.length) # tcl gives the length of the ticks as proportion of line text, knowing that mgp is in text lines. So the main ticks are a 0.5 of the distance of the axis numbers by default. The sign provides the side of the tick (negative for outside of the plot region) -if(xlog.scale == TRUE){ -par(xaxt = "n", xlog = TRUE) # suppress the x-axis label -}else{ -par(xlog = FALSE) -} -if(ylog.scale == TRUE){ -par(yaxt = "n", ylog = TRUE) # suppress the y-axis label -}else{ -par(ylog = FALSE) -} -if(return.par == TRUE){ -tempo.par <- par() -return(tempo.par) -} + # AIM: + # very convenient to erase the axes for post plot axis redrawing using fun_feature_post_plot() + # reinitialize and set the graphic parameters before plotting + # REQUIRED FUNCTIONS + # fun_param_check() + # ARGUMENTS + # param.reinitial: reinitialize graphic parameters before applying the new ones, as defined by the other arguments? Either TRUE or FALSE + # xlog.scale: Log scale for the x-axis? Either TRUE or FALSE. If TRUE, erases the x-axis, except legend, for further drawing by fun_feature_post_plot()(xlog argument of par()) + # ylog.scale: Log scale for the y-axis? Either TRUE or FALSE. If TRUE, erases the y-axis, except legend, for further drawing by fun_feature_post_plot()(ylog argument of par()) + # remove.label: remove labels (axis legend) of the two axes? Either TRUE or FALSE (ann argument of par()) + # remove.x.axis: remove x-axis except legend? Either TRUE or FALSE (control the xaxt argument of par()). Automately set to TRUE if xlog.scale == TRUE + # remove.y.axis: remove y-axis except legend? Either TRUE or FALSE (control the yaxt argument of par()). Automately set to TRUE if ylog.scale == TRUE + # std.x.range: standard range on the x-axis? TRUE (no range extend) or FALSE (4% range extend). Controls xaxs argument of par() (TRUE is xaxs = "i", FALSE is xaxs = "r") + # std.y.range: standard range on the y-axis? TRUE (no range extend) or FALSE (4% range extend). Controls yaxs argument of par() (TRUE is yaxs = "i", FALSE is yaxs = "r") + # down.space: lower vertical margin (in inches, mai argument of par()) + # left.space: left horizontal margin (in inches, mai argument of par()) + # up.space: upper vertical margin between plot region and grapical window (in inches, mai argument of par()) + # right.space: right horizontal margin (in inches, mai argument of par()) + # orient: scale number orientation (las argument of par()). 0, always parallel to the axis; 1, always horizontal; 2, always perpendicular to the axis; 3, always vertical + # dist.legend: numeric value that moves axis legends away in inches (first number of mgp argument of par() but in inches thus / 0.2) + # tick.length: length of the ticks (1 means complete the distance between the plot region and the axis numbers, 0.5 means half the length, etc. 0 means no tick + # box.type: bty argument of par(). Either "o", "l", "7", "c", "u", "]", the resulting box resembles the corresponding upper case letter. A value of "n" suppresses the box + # amplif.label: increase or decrease the size of the text in legends + # amplif.axis: increase or decrease the size of the scale numbers in axis + # display.extend: extend display beyond plotting region? Either TRUE or FALSE (xpd argument of par() without NA) + # return.par: return graphic parameter modification? + # RETURN + # return graphic parameter modification + # EXAMPLES + # fun_graph_param_prior_plot(param.reinitial = FALSE, xlog.scale = FALSE, ylog.scale = FALSE, remove.label = TRUE, remove.x.axis = TRUE, remove.y.axis = TRUE, down.space = 1, left.space = 1, up.space = 1, right.space = 1, orient = 1, dist.legend = 4.5, tick.length = 0.5, box.type = "n", amplif.label = 1, amplif.axis = 1, display.extend = FALSE, return.par = FALSE) + # DEBUGGING + # param.reinitial = FALSE ; xlog.scale = FALSE ; ylog.scale = FALSE ; remove.label = TRUE ; remove.x.axis = TRUE ; remove.y.axis = TRUE ; down.space = 1 ; left.space = 1 ; up.space = 1 ; right.space = 1 ; orient = 1 ; dist.legend = 4.5 ; tick.length = 0.5 ; box.type = "n" ; amplif.label = 1 ; amplif.axis = 1 ; display.extend = FALSE ; return.par = FALSE # for function debugging + # required function checking + if(length(find("fun_param_check", mode = "function")) == 0){ + tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") + stop(tempo.cat) + } + # end required function checking + # argument checking + arg.check <- NULL # for function debbuging + checked.arg.names <- NULL # for function debbuging + ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) + tempo <- fun_param_check(data = param.reinitial, class = "logical", length = 1) ; eval(ee) + tempo <- fun_param_check(data = xlog.scale, class = "logical", length = 1) ; eval(ee) + tempo <- fun_param_check(data = ylog.scale, class = "logical", length = 1) ; eval(ee) + tempo <- fun_param_check(data = remove.label, class = "logical", length = 1) ; eval(ee) + tempo <- fun_param_check(data = remove.x.axis, class = "logical", length = 1) ; eval(ee) + tempo <- fun_param_check(data = remove.y.axis, class = "logical", length = 1) ; eval(ee) + tempo <- fun_param_check(data = std.x.range, class = "logical", length = 1) ; eval(ee) + tempo <- fun_param_check(data = std.y.range, class = "logical", length = 1) ; eval(ee) + tempo <- fun_param_check(data = down.space, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = left.space, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = up.space, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = right.space, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = orient, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = dist.legend, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = tick.length, class = "numeric", length = 1, prop = TRUE) ; eval(ee) + tempo <- fun_param_check(data = box.type, options = c("o", "l", "7", "c", "u", "]", "n"), length = 1) ; eval(ee) + tempo <- fun_param_check(data = amplif.label, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = amplif.axis, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = display.extend, class = "logical", length = 1) ; eval(ee) + tempo <- fun_param_check(data = return.par, class = "logical", length = 1) ; eval(ee) + if(any(arg.check) == TRUE){ + stop() + } + # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() + # end argument checking + if(param.reinitial == TRUE){ + if( ! all(names(dev.cur()) == "null device")){ + active.wind.nb <- dev.cur() + }else{ + active.wind.nb <- 0 + } + if(Sys.info()["sysname"] == "Windows"){ # Note that .Platform$OS.type() only says "unix" for macOS and Linux and "Windows" for Windows + windows() + }else if(Sys.info()["sysname"] == "Linux"){ + if( ! file.exists(paste0(getwd(), "/Rplots.pdf"))){ + tempo <- suppressWarnings(try(X11(), silent = TRUE))[] # open a X11 window or a pdf. So no need to use again X11(). tempo == NULL if no problem, meaning that the X11 window is opened. If tempo != NULL, a pdf is open here paste0(getwd(), "/Rplots.pdf") + }else{ + tempo.cat <- paste0("\n\n================\n\nPROBLEM: THIS FUNCTION CANNOT OPEN GUI ON LINUX OR NON MACOS UNIX SYSTEM (X GRAPHIC INTERFACE HAS TO BE SET.\nTO OVERCOME THIS, PLEASE SET pdf.disp ARGUMENT TO TRUE AND RERUN\n\n================\n\n") + stop(tempo.cat) + } + }else{ # macOS + quartz() + } + ini.par <- par(no.readonly = TRUE) # to recover the initial graphical parameters if required (reset) + invisible(dev.off()) # close the new window + if( ! all(names(dev.cur()) == "null device")){ + dev.set(active.wind.nb) # go back to the active windows if exists + par(ini.par) # apply the initial par to current window + } + } + if(remove.x.axis == TRUE){ + par(xaxt = "n") # suppress the y-axis label + }else{ + par(xaxt = "s") + } + if(remove.y.axis == TRUE){ + par(yaxt = "n") # suppress the y-axis label + }else{ + par(yaxt = "s") + } + if(std.x.range == TRUE){ + par(xaxs = "i") + }else{ + par(xaxs = "r") + } + if(std.y.range == TRUE){ + par(yaxs = "i") + }else{ + par(yaxs = "r") + } + par(mai = c(down.space, left.space, up.space, right.space), ann = ! remove.label, las = orient, mgp = c(dist.legend/0.2, 1, 0), xpd = display.extend, bty= box.type, cex.lab = amplif.label, cex.axis = amplif.axis) + par(tcl = -par()$mgp[2] * tick.length) # tcl gives the length of the ticks as proportion of line text, knowing that mgp is in text lines. So the main ticks are a 0.5 of the distance of the axis numbers by default. The sign provides the side of the tick (negative for outside of the plot region) + if(xlog.scale == TRUE){ + par(xaxt = "n", xlog = TRUE) # suppress the x-axis label + }else{ + par(xlog = FALSE) + } + if(ylog.scale == TRUE){ + par(yaxt = "n", ylog = TRUE) # suppress the y-axis label + }else{ + par(ylog = FALSE) + } + if(return.par == TRUE){ + tempo.par <- par() + return(tempo.par) + } } @@ -1665,322 +1673,322 @@ return(tempo.par) # Check OK: clear to go Apollo fun_feature_post_plot <- function(x.side = 0, x.log.scale = FALSE, x.categ = NULL, x.categ.pos = NULL, x.lab = "", x.axis.magnific = 1.5, x.label.magnific = 1.5, x.dist.legend = 0.5, x.nb.inter.tick = 1, y.side = 0, y.log.scale = FALSE, y.categ = NULL, y.categ.pos = NULL, y.lab = "", y.axis.magnific = 1.5, y.label.magnific = 1.5, y.dist.legend = 0.5, y.nb.inter.tick = 1, text.angle = 90, tick.length = 0.5, sec.tick.length = 0.3, bg.color = NULL, grid.lwd = NULL, grid.col = "white", corner.text = "", magnific = 1.5, magnific.corner.text = 1, just.label.add = FALSE, par.reset = FALSE, custom.par = NULL){ -# AIM: -# redesign axis. If x.side = 0, y.side = 0, the function just adds text at topright of the graph and reset par() for next graphics and provides outputs (see below) -# provide also positions for legend or additional text on the graph -# use fun_graph_param_prior_plot() before this function for initial inactivation of the axis drawings -# REQUIRED FUNCTIONS -# fun_param_check() -# fun_open_window() to reinitialize graph parameters if par.reset = TRUE and custom.par = NULL -# ARGUMENTS -# x.side: axis at the bottom (1) or top (3) of the region figure. Write 0 for no change -# x.log.scale: Log scale for the x-axis? Either TRUE or FALSE -# x.categ: character vector representing the classes (levels()) to specify when the x-axis is qualititative(stripchart, boxplot) -# x.categ.pos: position of the classes names (numeric vector of identical length than x.categ). If left NULL, this will be 1:length(levels()) -# x.lab: label of the x-axis. If x.side == 0 and x.lab != "", then x.lab is printed -# x.axis.magnific: increase or decrease the value to increase or decrease the size of the x axis numbers. Also control the size of displayed categories -# x.label.magnific: increase or decrease the value to increase or decrease the size of the x axis legend -# x.dist.legend: increase the number to move x-axis legends away in inches (first number of mgp argument of par() but in inches) -# x.nb.inter.tick: number of secondary ticks between main ticks on x-axis (only if not log scale). 0 means no secondary ticks -# y.side: axis at the left (2) or right (4) of the region figure. Write 0 for no change -# y.log.scale: Log scale for the y-axis? Either TRUE or FALSE -# y.categ: classes (levels()) to specify when the y-axis is qualititative(stripchart, boxplot) -# y.categ.pos: position of the classes names (numeric vector of identical length than y.categ). If left NULL, this will be 1:length(levels()) -# y.lab: label of the y-axis. If y.side == 0 and y.lab != "", then y.lab is printed -# y.axis.magnific: increase or decrease the value to increase or decrease the size of the y axis numbers. Also control the size of displayed categories -# y.label.magnific: increase or decrease the value to increase or decrease the size of the y axis legend -# y.dist.legend: increase the number to move y-axis legends away in inches (first number of mgp argument of par() but in inches) -# y.nb.inter.tick: number of secondary ticks between main ticks on y-axis (only if not log scale). 0 means non secondary ticks -# text.angle: angle of the text when axis is qualitative -# tick.length: length of the main ticks (1 means complete the distance between the plot region and the axis numbers, 0.5 means half the length, etc., 0 for no ticks) -# sec.tick.length: length of the secondary ticks (1 means complete the distance between the plot region and the axis numbers, 0.5 means half the length, etc., 0 for no ticks) -# bg.color: background color of the plot region. NULL for no color. BEWARE: cover/hide an existing plot ! -# grid.lwd: if non NULL, activate the grid line (specify the line width) -# grid.col: grid line color (only if grid.lwd non NULL) -# corner.text: text to add at the top right corner of the window -# magnific.corner.text: increase or decrease the size of the text -# par.reset: to reset all the graphics parameters. BEWARE: TRUE can generate display problems, mainly in graphic devices with multiple figure regions -# just.label.add: just add axis labels (legend)? Either TRUE or FALSE. If TRUE, at least (x.side == 0 & x.lab != "") or (y.side == 0 & y.lab != "") must be set to display the corresponding x.lab or y.lab -# custom.par: list that provides the parameters that reset all the graphics parameters. BEWARE: if NULL and par.reset == TRUE, the default par() parameters are used -# RETURN -# a list containing: -# $x.mid.left.fig.region: middle of the left margin of the figure region, in coordinates of the x-axis -# $x.left.fig.region: left side of the left margin, in coordinates of the x-axis -# $x.mid.right.fig.region: middle of the right margin of the figure region, in coordinates of the x-axis -# $x.right.fig.region: right side of the right margin, in coordinates of the x-axis -# $x.left.plot.region: left side of the plot region, in coordinates of the x-axis -# $x.right.plot.region: right side of the plot region, in coordinates of the x-axis -# $x.mid.plot.region: middle of the plot region, in coordinates of the x-axis -# $y.mid.bottom.fig.region: middle of the bottom margin of the figure region, in coordinates of the y-axis -# $y.bottom.fig.region: bottom of the bottom margin of the figure region, in coordinates of the y-axis -# $y.mid.top.fig.region: middle of the top margin of the figure region, in coordinates of the y-axis -# $y.top.fig.region: top of the top margin of the figure region, in coordinates of the y-axis -# $y.top.plot.region: top of the plot region, in coordinates of the y-axis -# $y.bottom.plot.region: bottom of the plot region, in coordinates of the y-axis -# $y.mid.plot.region: middle of the plot region, in coordinates of the y-axis -# $text: warning text -# EXAMPLES -# Example of log axis with log y-axis and unmodified x-axis: -# prior.par <- fun_graph_param_prior_plot(param.reinitial = TRUE, xlog.scale = FALSE, ylog.scale = TRUE, remove.label = TRUE, remove.x.axis = FALSE, remove.y.axis = TRUE, down.space = 1, left.space = 1, up.space = 1, right.space = 1, orient = 1, dist.legend = 0.5, tick.length = 0.5, box.type = "n", amplif.label = 1, amplif.axis = 1, display.extend = FALSE, return.par = TRUE) ; plot(1:100, log = "y") ; fun_feature_post_plot(y.side = 2, y.log.scale = prior.par$ylog, x.lab = "Values", y.lab = "TEST", y.axis.magnific = 1.25, y.label.magnific = 1.5, y.dist.legend = 0.7, just.label.add = ! prior.par$ann) -# Example of log axis with redrawn x-axis and y-axis: -# prior.par <- fun_graph_param_prior_plot(param.reinitial = TRUE) ; plot(1:100) ; fun_feature_post_plot(x.side = 1, x.lab = "Values", y.side = 2, y.lab = "TEST", y.axis.magnific = 1, y.label.magnific = 2, y.dist.legend = 0.6) -# DEBUGGING -# x.side = 0 ; x.log.scale = FALSE ; x.categ = NULL ; x.categ.pos = NULL ; x.lab = "" ; x.axis.magnific = 1.5 ; x.label.magnific = 1.5 ; x.dist.legend = 1 ; x.nb.inter.tick = 1 ; y.side = 0 ; y.log.scale = FALSE ; y.categ = NULL ; y.categ.pos = NULL ; y.lab = "" ; y.axis.magnific = 1.5 ; y.label.magnific = 1.5 ; y.dist.legend = 0.7 ; y.nb.inter.tick = 1 ; text.angle = 90 ; tick.length = 0.5 ; sec.tick.length = 0.3 ; bg.color = NULL ; grid.lwd = NULL ; grid.col = "white" ; corner.text = "" ; magnific.corner.text = 1 ; just.label.add = FALSE ; par.reset = FALSE ; custom.par = NULL # for function debugging -# required function checking -if(length(find("fun_param_check", mode = "function")) == 0){ -tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") -stop(tempo.cat) -} -if(length(find("fun_open_window", mode = "function")) == 0){ -tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_open_window() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") -stop(tempo.cat) -} -# end required function checking -# argument checking -arg.check <- NULL # for function debbuging -checked.arg.names <- NULL # for function debbuging -ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) -tempo <- fun_param_check(data = x.side, options = c(0, 1, 3), length = 1) ; eval(ee) -tempo <- fun_param_check(data = x.log.scale, class = "logical", length = 1) ; eval(ee) -if( ! is.null(x.categ)){ -tempo <- fun_param_check(data = x.categ, class = "character", na.contain = TRUE) ; eval(ee) -} -if( ! is.null(x.categ.pos)){ -tempo <- fun_param_check(data = x.categ.pos, class = "numeric") ; eval(ee) -} -tempo <- fun_param_check(data = x.lab, class = "character", length = 1) ; eval(ee) -tempo <- fun_param_check(data = x.axis.magnific, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = x.label.magnific, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = x.dist.legend, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = x.nb.inter.tick, typeof = "integer", length = 1, double.as.integer.allowed = TRUE) ; eval(ee) -tempo <- fun_param_check(data = y.side, options = c(0, 2, 4), length = 1) ; eval(ee) -tempo <- fun_param_check(data = y.log.scale, class = "logical", length = 1) ; eval(ee) -if( ! is.null(y.categ)){ -tempo <- fun_param_check(data = y.categ, class = "character", na.contain = TRUE) ; eval(ee) -} -if( ! is.null(y.categ.pos)){ -tempo <- fun_param_check(data = y.categ.pos, class = "numeric") ; eval(ee) -} -tempo <- fun_param_check(data = y.lab, class = "character", length = 1) ; eval(ee) -tempo <- fun_param_check(data = y.axis.magnific, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = y.label.magnific, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = y.dist.legend, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = y.nb.inter.tick, typeof = "integer", length = 1, double.as.integer.allowed = TRUE) ; eval(ee) -tempo <- fun_param_check(data = text.angle, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = tick.length, class = "numeric", length = 1, prop = TRUE) ; eval(ee) -tempo <- fun_param_check(data = sec.tick.length, class = "numeric", length = 1, prop = TRUE) ; eval(ee) -if( ! is.null(bg.color)){ -tempo <- fun_param_check(data = bg.color, class = "character", length = 1) ; eval(ee) -if( ! (bg.color %in% colors() | grepl(pattern = "^#", bg.color))){ # check color -tempo.cat <- paste0("\n\n================\n\nERROR: bg.color ARGUMENT MUST BE A HEXADECIMAL COLOR VECTOR STARTING BY # OR A COLOR NAME GIVEN BY colors()\n\n================\n\n") -stop(tempo.cat) -} -} -if( ! is.null(grid.lwd)){ -tempo <- fun_param_check(data = grid.lwd, class = "numeric", neg.values = FALSE) ; eval(ee) -} -if( ! is.null(grid.col)){ -tempo <- fun_param_check(data = grid.col, class = "character", length = 1) ; eval(ee) -if( ! (grid.col %in% colors() | grepl(pattern = "^#", grid.col))){ # check color -tempo.cat <- paste0("\n\n================\n\nERROR: grid.col ARGUMENT MUST BE A HEXADECIMAL COLOR VECTOR STARTING BY # OR A COLOR NAME GIVEN BY colors()\n\n================\n\n") -stop(tempo.cat) -} -} -tempo <- fun_param_check(data = corner.text, class = "character", length = 1) ; eval(ee) -tempo <- fun_param_check(data = magnific.corner.text, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) -tempo <- fun_param_check(data = just.label.add, class = "logical", length = 1) ; eval(ee) -tempo <- fun_param_check(data = par.reset, class = "logical", length = 1) ; eval(ee) -if( ! is.null(custom.par)){ -tempo <- fun_param_check(data = custom.par, typeof = "list", length = 1) ; eval(ee) -} -if(any(arg.check) == TRUE){ -stop() -} -# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() -# end argument checking -text <- NULL -par(tcl = -par()$mgp[2] * tick.length) -if(x.log.scale == TRUE){ -grid.coord.x <- c(10^par("usr")[1], 10^par("usr")[2]) -}else{ -grid.coord.x <- c(par("usr")[1], par("usr")[2]) -} -if(y.log.scale == TRUE){ -grid.coord.y <- c(10^par("usr")[3], 10^par("usr")[4]) -}else{ -grid.coord.y <- c(par("usr")[3], par("usr")[4]) -} -if( ! is.null(bg.color)){ -rect(grid.coord.x[1], grid.coord.y[1], grid.coord.x[2], grid.coord.y[2], col = bg.color, border = NA) -} -if( ! is.null(grid.lwd)){ -grid(nx = NA, ny = NULL, col = grid.col, lty = 1, lwd = grid.lwd) -} -if(x.log.scale == TRUE){ -x.mid.left.fig.region <- 10^(par("usr")[1] - ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * par("plt")[1] / 2) # in x coordinates, to position axis labeling at the bottom of the graph (according to x scale) -x.left.fig.region <- 10^(par("usr")[1] - ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * par("plt")[1]) # in x coordinates -x.mid.right.fig.region <- 10^(par("usr")[2] + ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * (1 - par("plt")[2]) / 2) # in x coordinates, to position axis labeling at the top of the graph (according to x scale) -x.right.fig.region <- 10^(par("usr")[2] + ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * (1 - par("plt")[2])) # in x coordinates -x.left.plot.region <- 10^par("usr")[1] # in x coordinates, left of the plot region (according to x scale) -x.right.plot.region <- 10^par("usr")[2] # in x coordinates, right of the plot region (according to x scale) -x.mid.plot.region <- 10^((par("usr")[2] + par("usr")[1]) / 2) # in x coordinates, right of the plot region (according to x scale) -}else{ -x.mid.left.fig.region <- (par("usr")[1] - ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * par("plt")[1] / 2) # in x coordinates, to position axis labeling at the bottom of the graph (according to x scale) -x.left.fig.region <- (par("usr")[1] - ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * par("plt")[1]) # in x coordinates -x.mid.right.fig.region <- (par("usr")[2] + ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * (1 - par("plt")[2]) / 2) # in x coordinates, to position axis labeling at the top of the graph (according to x scale) -x.right.fig.region <- (par("usr")[2] + ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * (1 - par("plt")[2])) # in x coordinates -x.left.plot.region <- par("usr")[1] # in x coordinates, left of the plot region (according to x scale) -x.right.plot.region <- par("usr")[2] # in x coordinates, right of the plot region (according to x scale) -x.mid.plot.region <- (par("usr")[2] + par("usr")[1]) / 2 # in x coordinates, right of the plot region (according to x scale) -} -if(y.log.scale == TRUE){ -y.mid.bottom.fig.region <- 10^(par("usr")[3] - ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * par("plt")[3] / 2) # in y coordinates, to position axis labeling at the bottom of the graph (according to y scale). Ex mid.bottom.space -y.bottom.fig.region <- 10^(par("usr")[3] - ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * par("plt")[3]) # in y coordinates -y.mid.top.fig.region <- 10^(par("usr")[4] + ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * (1 - par("plt")[4]) / 2) # in y coordinates, to position axis labeling at the top of the graph (according to y scale). Ex mid.top.space -y.top.fig.region <- 10^(par("usr")[4] + ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * (1 - par("plt")[4])) # in y coordinates -y.top.plot.region <- 10^par("usr")[4] # in y coordinates, top of the plot region (according to y scale) -y.bottom.plot.region <- 10^par("usr")[3] # in y coordinates, bottom of the plot region (according to y scale) -y.mid.plot.region <- (par("usr")[3] + par("usr")[4]) / 2 # in x coordinates, right of the plot region (according to x scale) -}else{ -y.mid.bottom.fig.region <- (par("usr")[3] - ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * par("plt")[3] / 2) # in y coordinates, to position axis labeling at the bottom of the graph (according to y scale). Ex mid.bottom.space -y.bottom.fig.region <- (par("usr")[3] - ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * par("plt")[3]) # in y coordinates -y.mid.top.fig.region <- (par("usr")[4] + ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * (1 - par("plt")[4]) / 2) # in y coordinates, to position axis labeling at the top of the graph (according to y scale). Ex mid.top.space -y.top.fig.region <- (par("usr")[4] + ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * (1 - par("plt")[4])) # in y coordinates -y.top.plot.region <- par("usr")[4] # in y coordinates, top of the plot region (according to y scale) -y.bottom.plot.region <- par("usr")[3] # in y coordinates, bottom of the plot region (according to y scale) -y.mid.plot.region <- 10^((par("usr")[3] + par("usr")[4]) / 2) # in x coordinates, right of the plot region (according to x scale) -} -if(x.side == 1 | x.side == 3){ -par(xpd=FALSE, xaxt="s") -if(is.null(x.categ) & x.log.scale == TRUE){ -if(any(par()$xaxp[1:2] == 0)){ -if(par()$xaxp[1] == 0){ -par(xaxp = c(10^-30, par()$xaxp[2:3])) # because log10(par()$xaxp[1] == 0) == -Inf -} -if(par()$xaxp[2] == 0){ -par(xaxp = c(par()$xaxp[1], 10^-30, par()$xaxp[3])) # because log10(par()$xaxp[2] == 0) == -Inf -} -} -axis(side=x.side, at=c(10^par()$usr[1], 10^par()$usr[2]), labels=rep("", 2), lwd=1, lwd.ticks=0) # draw the axis line -mtext(side = x.side, text = x.lab, line = x.dist.legend / 0.2, las = 0, cex = x.label.magnific) -par(tcl = -par()$mgp[2] * sec.tick.length) # length of the secondary ticks are reduced -suppressWarnings(rug(10^outer(c((log10(par("xaxp")[1]) -1):log10(par("xaxp")[2])), log10(1:10), "+"), ticksize = NA, side = x.side)) # ticksize = NA to allow the use of par()$tcl value -par(tcl = -par()$mgp[2] * tick.length) # back to main ticks -axis(side = x.side, at = c(1e-15, 1e-14, 1e-13, 1e-12, 1e-11, 1e-10, 1e-9, 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10), labels = expression(10^-15, 10^-14, 10^-13, 10^-12, 10^-11, 10^-10, 10^-9, 10^-8, 10^-7, 10^-6, 10^-5, 10^-4, 10^-3, 10^-2, 10^-1, 10^0, 10^1, 10^2, 10^3, 10^4, 10^5, 10^6, 10^7, 10^8, 10^9, 10^10), lwd = 0, lwd.ticks = 1, cex.axis = x.axis.magnific) -x.text <- 10^par("usr")[2] -}else if(is.null(x.categ) & x.log.scale == FALSE){ -axis(side=x.side, at=c(par()$usr[1], par()$usr[2]), labels=rep("", 2), lwd=1, lwd.ticks=0) # draw the axis line -axis(side=x.side, at=round(seq(par()$xaxp[1], par()$xaxp[2], length.out=par()$xaxp[3]+1), 2), cex.axis = x.axis.magnific) -mtext(side = x.side, text = x.lab, line = x.dist.legend / 0.2, las = 0, cex = x.label.magnific) -if(x.nb.inter.tick > 0){ -inter.tick.unit <- (par("xaxp")[2] - par("xaxp")[1]) / par("xaxp")[3] -par(tcl = -par()$mgp[2] * sec.tick.length) # length of the ticks are reduced -suppressWarnings(rug(seq(par("xaxp")[1] - 10 * inter.tick.unit, par("xaxp")[2] + 10 * inter.tick.unit, by = inter.tick.unit / (1 + x.nb.inter.tick)), ticksize = NA, x.side)) # ticksize = NA to allow the use of par()$tcl value -par(tcl = -par()$mgp[2] * tick.length) # back to main ticks -} -x.text <- par("usr")[2] -}else if(( ! is.null(x.categ)) & x.log.scale == FALSE){ -if(is.null(x.categ.pos)){ -x.categ.pos <- 1:length(x.categ) -}else if(length(x.categ.pos) != length(x.categ)){ -stop("\n\nPROBLEM: x.categ.pos MUST BE THE SAME LENGTH AS x.categ\n\n") -} -par(xpd = TRUE) -if(x.side == 1){ -segments(x0 = x.left.plot.region, x1 = x.right.plot.region, y0 = y.bottom.plot.region, y1 = y.bottom.plot.region) # draw the line of the axis -text(x = x.categ.pos, y = y.mid.bottom.fig.region, labels = x.categ, srt = text.angle, cex = x.axis.magnific) -}else if(x.side == 3){ -segments(x0 = x.left.plot.region, x1 = x.right.plot.region, y0 = y.top.plot.region, y1 = y.top.plot.region) # draw the line of the axis -text(x = x.categ.pos, y = y.mid.top.fig.region, labels = x.categ, srt = text.angle, cex = x.axis.magnific) -}else{ -stop("\n\nARGUMENT x.side CAN ONLY BE 1 OR 3\n\n") -} -par(xpd = FALSE) -x.text <- par("usr")[2] -}else{ -stop("\n\nPROBLEM WITH THE x.side (", x.side ,") OR x.log.scale (", x.log.scale,") ARGUMENTS\n\n") -} -}else{ -x.text <- par("usr")[2] -} -if(y.side == 2 | y.side == 4){ -par(xpd=FALSE, yaxt="s") -if(is.null(y.categ) & y.log.scale == TRUE){ -if(any(par()$yaxp[1:2] == 0)){ -if(par()$yaxp[1] == 0){ -par(yaxp = c(10^-30, par()$yaxp[2:3])) # because log10(par()$yaxp[1] == 0) == -Inf -} -if(par()$yaxp[2] == 0){ -par(yaxp = c(par()$yaxp[1], 10^-30, par()$yaxp[3])) # because log10(par()$yaxp[2] == 0) == -Inf -} -} -axis(side=y.side, at=c(10^par()$usr[3], 10^par()$usr[4]), labels=rep("", 2), lwd=1, lwd.ticks=0) # draw the axis line -par(tcl = -par()$mgp[2] * sec.tick.length) # length of the ticks are reduced -suppressWarnings(rug(10^outer(c((log10(par("yaxp")[1])-1):log10(par("yaxp")[2])), log10(1:10), "+"), ticksize = NA, side = y.side)) # ticksize = NA to allow the use of par()$tcl value -par(tcl = -par()$mgp[2] * tick.length) # back to main tick length -axis(side = y.side, at = c(1e-15, 1e-14, 1e-13, 1e-12, 1e-11, 1e-10, 1e-9, 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10), labels = expression(10^-15, 10^-14, 10^-13, 10^-12, 10^-11, 10^-10, 10^-9, 10^-8, 10^-7, 10^-6, 10^-5, 10^-4, 10^-3, 10^-2, 10^-1, 10^0, 10^1, 10^2, 10^3, 10^4, 10^5, 10^6, 10^7, 10^8, 10^9, 10^10), lwd = 0, lwd.ticks = 1, cex.axis = y.axis.magnific) -y.text <- 10^(par("usr")[4] + (par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3]) * (1 - par("plt")[4])) -mtext(side = y.side, text = y.lab, line = y.dist.legend / 0.2, las = 0, cex = y.label.magnific) -}else if(is.null(y.categ) & y.log.scale == FALSE){ -axis(side=y.side, at=c(par()$usr[3], par()$usr[4]), labels=rep("", 2), lwd=1, lwd.ticks=0) # draw the axis line -axis(side=y.side, at=round(seq(par()$yaxp[1], par()$yaxp[2], length.out=par()$yaxp[3]+1), 2), cex.axis = y.axis.magnific) -mtext(side = y.side, text = y.lab, line = y.dist.legend / 0.2, las = 0, cex = y.label.magnific) -if(y.nb.inter.tick > 0){ -inter.tick.unit <- (par("yaxp")[2] - par("yaxp")[1]) / par("yaxp")[3] -par(tcl = -par()$mgp[2] * sec.tick.length) # length of the ticks are reduced -suppressWarnings(rug(seq(par("yaxp")[1] - 10 * inter.tick.unit, par("yaxp")[2] + 10 * inter.tick.unit, by = inter.tick.unit / (1 + y.nb.inter.tick)), ticksize = NA, side=y.side)) # ticksize = NA to allow the use of par()$tcl value -par(tcl = -par()$mgp[2] * tick.length) # back to main tick length -} -y.text <- (par("usr")[4] + (par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3]) * (1 - par("plt")[4])) -}else if(( ! is.null(y.categ)) & y.log.scale == FALSE){ -if(is.null(y.categ.pos)){ -y.categ.pos <- 1:length(y.categ) -}else if(length(y.categ.pos) != length(y.categ)){ -stop("\n\nPROBLEM: y.categ.pos MUST BE THE SAME LENGTH AS y.categ\n\n") -} -axis(side = y.side, at = y.categ.pos, labels = rep("", length(y.categ)), lwd=0, lwd.ticks=1) # draw the line of the axis -par(xpd = TRUE) -if(y.side == 2){ -text(x = x.mid.left.fig.region, y = y.categ.pos, labels = y.categ, srt = text.angle, cex = y.axis.magnific) -}else if(y.side == 4){ -text(x = x.mid.right.fig.region, y = y.categ.pos, labels = y.categ, srt = text.angle, cex = y.axis.magnific) -}else{ -stop("\n\nARGUMENT y.side CAN ONLY BE 2 OR 4\n\n") -} -par(xpd = FALSE) -y.text <- (par("usr")[4] + (par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3]) * (1 - par("plt")[4])) -}else{ -stop("\n\nPROBLEM WITH THE y.side (", y.side ,") OR y.log.scale (", y.log.scale,") ARGUMENTS\n\n") -} -}else{ -y.text <- (par("usr")[4] + (par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3]) * (1 - par("plt")[4])) -} -par(xpd=NA) -text(x = x.mid.right.fig.region, y = y.text, corner.text, adj=c(1, 1.1), cex = magnific.corner.text) # text at the topright corner. Replace x.right.fig.region by x.text if text at the right edge of the plot region -if(just.label.add == TRUE & x.side == 0 & x.lab != ""){ -text(x = x.mid.plot.region, y = y.mid.bottom.fig.region, x.lab, adj=c(0.5, 0.5), cex = x.label.magnific) # x label -} -if(just.label.add == TRUE & y.side == 0 & y.lab != ""){ -text(x = y.mid.plot.region, y = x.mid.left.fig.region, y.lab, adj=c(0.5, 0.5), cex = y.label.magnific) # x label -} -par(xpd=FALSE) -if(par.reset == TRUE){ -tempo.par <- fun_open_window(pdf.disp = FALSE, return.output = TRUE) -invisible(dev.off()) # close the new window -if( ! is.null(custom.par)){ -if( ! names(custom.par) %in% names(tempo.par$ini.par)){ -tempo.cat <- paste0("\n\n================\n\nERROR: custom.par ARGUMENT SHOULD HAVE THE NAMES OF THE COMPARTMENT LIST COMING FROM THE par() LIST\n\n================\n\n") -stop(tempo.cat) -} -par(custom.par) -text <- c(text, "\nGRAPH PARAMETERS SET TO VALUES DEFINED BY custom.par ARGUMENT\n") -}else{ -par(tempo.par$ini.par) -text <- c(text, "\nGRAPH PARAMETERS RESET TO par() DEFAULT VALUES\n") -} -} -output <- list(x.mid.left.fig.region = x.mid.left.fig.region, x.left.fig.region = x.left.fig.region, x.mid.right.fig.region = x.mid.right.fig.region, x.right.fig.region = x.right.fig.region, x.left.plot.region = x.left.plot.region, x.right.plot.region = x.right.plot.region, x.mid.plot.region = x.mid.plot.region, y.mid.bottom.fig.region = y.mid.bottom.fig.region, y.bottom.fig.region = y.bottom.fig.region, y.mid.top.fig.region = y.mid.top.fig.region, y.top.fig.region = y.top.fig.region, y.top.plot.region = y.top.plot.region, y.bottom.plot.region = y.bottom.plot.region, y.mid.plot.region = y.mid.plot.region, text = text) -return(output) + # AIM: + # redesign axis. If x.side = 0, y.side = 0, the function just adds text at topright of the graph and reset par() for next graphics and provides outputs (see below) + # provide also positions for legend or additional text on the graph + # use fun_graph_param_prior_plot() before this function for initial inactivation of the axis drawings + # REQUIRED FUNCTIONS + # fun_param_check() + # fun_open_window() to reinitialize graph parameters if par.reset = TRUE and custom.par = NULL + # ARGUMENTS + # x.side: axis at the bottom (1) or top (3) of the region figure. Write 0 for no change + # x.log.scale: Log scale for the x-axis? Either TRUE or FALSE + # x.categ: character vector representing the classes (levels()) to specify when the x-axis is qualititative(stripchart, boxplot) + # x.categ.pos: position of the classes names (numeric vector of identical length than x.categ). If left NULL, this will be 1:length(levels()) + # x.lab: label of the x-axis. If x.side == 0 and x.lab != "", then x.lab is printed + # x.axis.magnific: increase or decrease the value to increase or decrease the size of the x axis numbers. Also control the size of displayed categories + # x.label.magnific: increase or decrease the value to increase or decrease the size of the x axis legend + # x.dist.legend: increase the number to move x-axis legends away in inches (first number of mgp argument of par() but in inches) + # x.nb.inter.tick: number of secondary ticks between main ticks on x-axis (only if not log scale). 0 means no secondary ticks + # y.side: axis at the left (2) or right (4) of the region figure. Write 0 for no change + # y.log.scale: Log scale for the y-axis? Either TRUE or FALSE + # y.categ: classes (levels()) to specify when the y-axis is qualititative(stripchart, boxplot) + # y.categ.pos: position of the classes names (numeric vector of identical length than y.categ). If left NULL, this will be 1:length(levels()) + # y.lab: label of the y-axis. If y.side == 0 and y.lab != "", then y.lab is printed + # y.axis.magnific: increase or decrease the value to increase or decrease the size of the y axis numbers. Also control the size of displayed categories + # y.label.magnific: increase or decrease the value to increase or decrease the size of the y axis legend + # y.dist.legend: increase the number to move y-axis legends away in inches (first number of mgp argument of par() but in inches) + # y.nb.inter.tick: number of secondary ticks between main ticks on y-axis (only if not log scale). 0 means non secondary ticks + # text.angle: angle of the text when axis is qualitative + # tick.length: length of the main ticks (1 means complete the distance between the plot region and the axis numbers, 0.5 means half the length, etc., 0 for no ticks) + # sec.tick.length: length of the secondary ticks (1 means complete the distance between the plot region and the axis numbers, 0.5 means half the length, etc., 0 for no ticks) + # bg.color: background color of the plot region. NULL for no color. BEWARE: cover/hide an existing plot ! + # grid.lwd: if non NULL, activate the grid line (specify the line width) + # grid.col: grid line color (only if grid.lwd non NULL) + # corner.text: text to add at the top right corner of the window + # magnific.corner.text: increase or decrease the size of the text + # par.reset: to reset all the graphics parameters. BEWARE: TRUE can generate display problems, mainly in graphic devices with multiple figure regions + # just.label.add: just add axis labels (legend)? Either TRUE or FALSE. If TRUE, at least (x.side == 0 & x.lab != "") or (y.side == 0 & y.lab != "") must be set to display the corresponding x.lab or y.lab + # custom.par: list that provides the parameters that reset all the graphics parameters. BEWARE: if NULL and par.reset == TRUE, the default par() parameters are used + # RETURN + # a list containing: + # $x.mid.left.fig.region: middle of the left margin of the figure region, in coordinates of the x-axis + # $x.left.fig.region: left side of the left margin, in coordinates of the x-axis + # $x.mid.right.fig.region: middle of the right margin of the figure region, in coordinates of the x-axis + # $x.right.fig.region: right side of the right margin, in coordinates of the x-axis + # $x.left.plot.region: left side of the plot region, in coordinates of the x-axis + # $x.right.plot.region: right side of the plot region, in coordinates of the x-axis + # $x.mid.plot.region: middle of the plot region, in coordinates of the x-axis + # $y.mid.bottom.fig.region: middle of the bottom margin of the figure region, in coordinates of the y-axis + # $y.bottom.fig.region: bottom of the bottom margin of the figure region, in coordinates of the y-axis + # $y.mid.top.fig.region: middle of the top margin of the figure region, in coordinates of the y-axis + # $y.top.fig.region: top of the top margin of the figure region, in coordinates of the y-axis + # $y.top.plot.region: top of the plot region, in coordinates of the y-axis + # $y.bottom.plot.region: bottom of the plot region, in coordinates of the y-axis + # $y.mid.plot.region: middle of the plot region, in coordinates of the y-axis + # $text: warning text + # EXAMPLES + # Example of log axis with log y-axis and unmodified x-axis: + # prior.par <- fun_graph_param_prior_plot(param.reinitial = TRUE, xlog.scale = FALSE, ylog.scale = TRUE, remove.label = TRUE, remove.x.axis = FALSE, remove.y.axis = TRUE, down.space = 1, left.space = 1, up.space = 1, right.space = 1, orient = 1, dist.legend = 0.5, tick.length = 0.5, box.type = "n", amplif.label = 1, amplif.axis = 1, display.extend = FALSE, return.par = TRUE) ; plot(1:100, log = "y") ; fun_feature_post_plot(y.side = 2, y.log.scale = prior.par$ylog, x.lab = "Values", y.lab = "TEST", y.axis.magnific = 1.25, y.label.magnific = 1.5, y.dist.legend = 0.7, just.label.add = ! prior.par$ann) + # Example of log axis with redrawn x-axis and y-axis: + # prior.par <- fun_graph_param_prior_plot(param.reinitial = TRUE) ; plot(1:100) ; fun_feature_post_plot(x.side = 1, x.lab = "Values", y.side = 2, y.lab = "TEST", y.axis.magnific = 1, y.label.magnific = 2, y.dist.legend = 0.6) + # DEBUGGING + # x.side = 0 ; x.log.scale = FALSE ; x.categ = NULL ; x.categ.pos = NULL ; x.lab = "" ; x.axis.magnific = 1.5 ; x.label.magnific = 1.5 ; x.dist.legend = 1 ; x.nb.inter.tick = 1 ; y.side = 0 ; y.log.scale = FALSE ; y.categ = NULL ; y.categ.pos = NULL ; y.lab = "" ; y.axis.magnific = 1.5 ; y.label.magnific = 1.5 ; y.dist.legend = 0.7 ; y.nb.inter.tick = 1 ; text.angle = 90 ; tick.length = 0.5 ; sec.tick.length = 0.3 ; bg.color = NULL ; grid.lwd = NULL ; grid.col = "white" ; corner.text = "" ; magnific.corner.text = 1 ; just.label.add = FALSE ; par.reset = FALSE ; custom.par = NULL # for function debugging + # required function checking + if(length(find("fun_param_check", mode = "function")) == 0){ + tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") + stop(tempo.cat) + } + if(length(find("fun_open_window", mode = "function")) == 0){ + tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_open_window() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") + stop(tempo.cat) + } + # end required function checking + # argument checking + arg.check <- NULL # for function debbuging + checked.arg.names <- NULL # for function debbuging + ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) + tempo <- fun_param_check(data = x.side, options = c(0, 1, 3), length = 1) ; eval(ee) + tempo <- fun_param_check(data = x.log.scale, class = "logical", length = 1) ; eval(ee) + if( ! is.null(x.categ)){ + tempo <- fun_param_check(data = x.categ, class = "character", na.contain = TRUE) ; eval(ee) + } + if( ! is.null(x.categ.pos)){ + tempo <- fun_param_check(data = x.categ.pos, class = "numeric") ; eval(ee) + } + tempo <- fun_param_check(data = x.lab, class = "character", length = 1) ; eval(ee) + tempo <- fun_param_check(data = x.axis.magnific, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = x.label.magnific, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = x.dist.legend, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = x.nb.inter.tick, typeof = "integer", length = 1, double.as.integer.allowed = TRUE) ; eval(ee) + tempo <- fun_param_check(data = y.side, options = c(0, 2, 4), length = 1) ; eval(ee) + tempo <- fun_param_check(data = y.log.scale, class = "logical", length = 1) ; eval(ee) + if( ! is.null(y.categ)){ + tempo <- fun_param_check(data = y.categ, class = "character", na.contain = TRUE) ; eval(ee) + } + if( ! is.null(y.categ.pos)){ + tempo <- fun_param_check(data = y.categ.pos, class = "numeric") ; eval(ee) + } + tempo <- fun_param_check(data = y.lab, class = "character", length = 1) ; eval(ee) + tempo <- fun_param_check(data = y.axis.magnific, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = y.label.magnific, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = y.dist.legend, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = y.nb.inter.tick, typeof = "integer", length = 1, double.as.integer.allowed = TRUE) ; eval(ee) + tempo <- fun_param_check(data = text.angle, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = tick.length, class = "numeric", length = 1, prop = TRUE) ; eval(ee) + tempo <- fun_param_check(data = sec.tick.length, class = "numeric", length = 1, prop = TRUE) ; eval(ee) + if( ! is.null(bg.color)){ + tempo <- fun_param_check(data = bg.color, class = "character", length = 1) ; eval(ee) + if( ! (bg.color %in% colors() | grepl(pattern = "^#", bg.color))){ # check color + tempo.cat <- paste0("\n\n================\n\nERROR: bg.color ARGUMENT MUST BE A HEXADECIMAL COLOR VECTOR STARTING BY # OR A COLOR NAME GIVEN BY colors()\n\n================\n\n") + stop(tempo.cat) + } + } + if( ! is.null(grid.lwd)){ + tempo <- fun_param_check(data = grid.lwd, class = "numeric", neg.values = FALSE) ; eval(ee) + } + if( ! is.null(grid.col)){ + tempo <- fun_param_check(data = grid.col, class = "character", length = 1) ; eval(ee) + if( ! (grid.col %in% colors() | grepl(pattern = "^#", grid.col))){ # check color + tempo.cat <- paste0("\n\n================\n\nERROR: grid.col ARGUMENT MUST BE A HEXADECIMAL COLOR VECTOR STARTING BY # OR A COLOR NAME GIVEN BY colors()\n\n================\n\n") + stop(tempo.cat) + } + } + tempo <- fun_param_check(data = corner.text, class = "character", length = 1) ; eval(ee) + tempo <- fun_param_check(data = magnific.corner.text, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) + tempo <- fun_param_check(data = just.label.add, class = "logical", length = 1) ; eval(ee) + tempo <- fun_param_check(data = par.reset, class = "logical", length = 1) ; eval(ee) + if( ! is.null(custom.par)){ + tempo <- fun_param_check(data = custom.par, typeof = "list", length = 1) ; eval(ee) + } + if(any(arg.check) == TRUE){ + stop() + } + # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() + # end argument checking + text <- NULL + par(tcl = -par()$mgp[2] * tick.length) + if(x.log.scale == TRUE){ + grid.coord.x <- c(10^par("usr")[1], 10^par("usr")[2]) + }else{ + grid.coord.x <- c(par("usr")[1], par("usr")[2]) + } + if(y.log.scale == TRUE){ + grid.coord.y <- c(10^par("usr")[3], 10^par("usr")[4]) + }else{ + grid.coord.y <- c(par("usr")[3], par("usr")[4]) + } + if( ! is.null(bg.color)){ + rect(grid.coord.x[1], grid.coord.y[1], grid.coord.x[2], grid.coord.y[2], col = bg.color, border = NA) + } + if( ! is.null(grid.lwd)){ + grid(nx = NA, ny = NULL, col = grid.col, lty = 1, lwd = grid.lwd) + } + if(x.log.scale == TRUE){ + x.mid.left.fig.region <- 10^(par("usr")[1] - ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * par("plt")[1] / 2) # in x coordinates, to position axis labeling at the bottom of the graph (according to x scale) + x.left.fig.region <- 10^(par("usr")[1] - ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * par("plt")[1]) # in x coordinates + x.mid.right.fig.region <- 10^(par("usr")[2] + ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * (1 - par("plt")[2]) / 2) # in x coordinates, to position axis labeling at the top of the graph (according to x scale) + x.right.fig.region <- 10^(par("usr")[2] + ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * (1 - par("plt")[2])) # in x coordinates + x.left.plot.region <- 10^par("usr")[1] # in x coordinates, left of the plot region (according to x scale) + x.right.plot.region <- 10^par("usr")[2] # in x coordinates, right of the plot region (according to x scale) + x.mid.plot.region <- 10^((par("usr")[2] + par("usr")[1]) / 2) # in x coordinates, right of the plot region (according to x scale) + }else{ + x.mid.left.fig.region <- (par("usr")[1] - ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * par("plt")[1] / 2) # in x coordinates, to position axis labeling at the bottom of the graph (according to x scale) + x.left.fig.region <- (par("usr")[1] - ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * par("plt")[1]) # in x coordinates + x.mid.right.fig.region <- (par("usr")[2] + ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * (1 - par("plt")[2]) / 2) # in x coordinates, to position axis labeling at the top of the graph (according to x scale) + x.right.fig.region <- (par("usr")[2] + ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * (1 - par("plt")[2])) # in x coordinates + x.left.plot.region <- par("usr")[1] # in x coordinates, left of the plot region (according to x scale) + x.right.plot.region <- par("usr")[2] # in x coordinates, right of the plot region (according to x scale) + x.mid.plot.region <- (par("usr")[2] + par("usr")[1]) / 2 # in x coordinates, right of the plot region (according to x scale) + } + if(y.log.scale == TRUE){ + y.mid.bottom.fig.region <- 10^(par("usr")[3] - ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * par("plt")[3] / 2) # in y coordinates, to position axis labeling at the bottom of the graph (according to y scale). Ex mid.bottom.space + y.bottom.fig.region <- 10^(par("usr")[3] - ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * par("plt")[3]) # in y coordinates + y.mid.top.fig.region <- 10^(par("usr")[4] + ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * (1 - par("plt")[4]) / 2) # in y coordinates, to position axis labeling at the top of the graph (according to y scale). Ex mid.top.space + y.top.fig.region <- 10^(par("usr")[4] + ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * (1 - par("plt")[4])) # in y coordinates + y.top.plot.region <- 10^par("usr")[4] # in y coordinates, top of the plot region (according to y scale) + y.bottom.plot.region <- 10^par("usr")[3] # in y coordinates, bottom of the plot region (according to y scale) + y.mid.plot.region <- (par("usr")[3] + par("usr")[4]) / 2 # in x coordinates, right of the plot region (according to x scale) + }else{ + y.mid.bottom.fig.region <- (par("usr")[3] - ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * par("plt")[3] / 2) # in y coordinates, to position axis labeling at the bottom of the graph (according to y scale). Ex mid.bottom.space + y.bottom.fig.region <- (par("usr")[3] - ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * par("plt")[3]) # in y coordinates + y.mid.top.fig.region <- (par("usr")[4] + ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * (1 - par("plt")[4]) / 2) # in y coordinates, to position axis labeling at the top of the graph (according to y scale). Ex mid.top.space + y.top.fig.region <- (par("usr")[4] + ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * (1 - par("plt")[4])) # in y coordinates + y.top.plot.region <- par("usr")[4] # in y coordinates, top of the plot region (according to y scale) + y.bottom.plot.region <- par("usr")[3] # in y coordinates, bottom of the plot region (according to y scale) + y.mid.plot.region <- 10^((par("usr")[3] + par("usr")[4]) / 2) # in x coordinates, right of the plot region (according to x scale) + } + if(x.side == 1 | x.side == 3){ + par(xpd=FALSE, xaxt="s") + if(is.null(x.categ) & x.log.scale == TRUE){ + if(any(par()$xaxp[1:2] == 0)){ + if(par()$xaxp[1] == 0){ + par(xaxp = c(10^-30, par()$xaxp[2:3])) # because log10(par()$xaxp[1] == 0) == -Inf + } + if(par()$xaxp[2] == 0){ + par(xaxp = c(par()$xaxp[1], 10^-30, par()$xaxp[3])) # because log10(par()$xaxp[2] == 0) == -Inf + } + } + axis(side=x.side, at=c(10^par()$usr[1], 10^par()$usr[2]), labels=rep("", 2), lwd=1, lwd.ticks=0) # draw the axis line + mtext(side = x.side, text = x.lab, line = x.dist.legend / 0.2, las = 0, cex = x.label.magnific) + par(tcl = -par()$mgp[2] * sec.tick.length) # length of the secondary ticks are reduced + suppressWarnings(rug(10^outer(c((log10(par("xaxp")[1]) -1):log10(par("xaxp")[2])), log10(1:10), "+"), ticksize = NA, side = x.side)) # ticksize = NA to allow the use of par()$tcl value + par(tcl = -par()$mgp[2] * tick.length) # back to main ticks + axis(side = x.side, at = c(1e-15, 1e-14, 1e-13, 1e-12, 1e-11, 1e-10, 1e-9, 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10), labels = expression(10^-15, 10^-14, 10^-13, 10^-12, 10^-11, 10^-10, 10^-9, 10^-8, 10^-7, 10^-6, 10^-5, 10^-4, 10^-3, 10^-2, 10^-1, 10^0, 10^1, 10^2, 10^3, 10^4, 10^5, 10^6, 10^7, 10^8, 10^9, 10^10), lwd = 0, lwd.ticks = 1, cex.axis = x.axis.magnific) + x.text <- 10^par("usr")[2] + }else if(is.null(x.categ) & x.log.scale == FALSE){ + axis(side=x.side, at=c(par()$usr[1], par()$usr[2]), labels=rep("", 2), lwd=1, lwd.ticks=0) # draw the axis line + axis(side=x.side, at=round(seq(par()$xaxp[1], par()$xaxp[2], length.out=par()$xaxp[3]+1), 2), cex.axis = x.axis.magnific) + mtext(side = x.side, text = x.lab, line = x.dist.legend / 0.2, las = 0, cex = x.label.magnific) + if(x.nb.inter.tick > 0){ + inter.tick.unit <- (par("xaxp")[2] - par("xaxp")[1]) / par("xaxp")[3] + par(tcl = -par()$mgp[2] * sec.tick.length) # length of the ticks are reduced + suppressWarnings(rug(seq(par("xaxp")[1] - 10 * inter.tick.unit, par("xaxp")[2] + 10 * inter.tick.unit, by = inter.tick.unit / (1 + x.nb.inter.tick)), ticksize = NA, x.side)) # ticksize = NA to allow the use of par()$tcl value + par(tcl = -par()$mgp[2] * tick.length) # back to main ticks + } + x.text <- par("usr")[2] + }else if(( ! is.null(x.categ)) & x.log.scale == FALSE){ + if(is.null(x.categ.pos)){ + x.categ.pos <- 1:length(x.categ) + }else if(length(x.categ.pos) != length(x.categ)){ + stop("\n\nPROBLEM: x.categ.pos MUST BE THE SAME LENGTH AS x.categ\n\n") + } + par(xpd = TRUE) + if(x.side == 1){ + segments(x0 = x.left.plot.region, x1 = x.right.plot.region, y0 = y.bottom.plot.region, y1 = y.bottom.plot.region) # draw the line of the axis + text(x = x.categ.pos, y = y.mid.bottom.fig.region, labels = x.categ, srt = text.angle, cex = x.axis.magnific) + }else if(x.side == 3){ + segments(x0 = x.left.plot.region, x1 = x.right.plot.region, y0 = y.top.plot.region, y1 = y.top.plot.region) # draw the line of the axis + text(x = x.categ.pos, y = y.mid.top.fig.region, labels = x.categ, srt = text.angle, cex = x.axis.magnific) + }else{ + stop("\n\nARGUMENT x.side CAN ONLY BE 1 OR 3\n\n") + } + par(xpd = FALSE) + x.text <- par("usr")[2] + }else{ + stop("\n\nPROBLEM WITH THE x.side (", x.side ,") OR x.log.scale (", x.log.scale,") ARGUMENTS\n\n") + } + }else{ + x.text <- par("usr")[2] + } + if(y.side == 2 | y.side == 4){ + par(xpd=FALSE, yaxt="s") + if(is.null(y.categ) & y.log.scale == TRUE){ + if(any(par()$yaxp[1:2] == 0)){ + if(par()$yaxp[1] == 0){ + par(yaxp = c(10^-30, par()$yaxp[2:3])) # because log10(par()$yaxp[1] == 0) == -Inf + } + if(par()$yaxp[2] == 0){ + par(yaxp = c(par()$yaxp[1], 10^-30, par()$yaxp[3])) # because log10(par()$yaxp[2] == 0) == -Inf + } + } + axis(side=y.side, at=c(10^par()$usr[3], 10^par()$usr[4]), labels=rep("", 2), lwd=1, lwd.ticks=0) # draw the axis line + par(tcl = -par()$mgp[2] * sec.tick.length) # length of the ticks are reduced + suppressWarnings(rug(10^outer(c((log10(par("yaxp")[1])-1):log10(par("yaxp")[2])), log10(1:10), "+"), ticksize = NA, side = y.side)) # ticksize = NA to allow the use of par()$tcl value + par(tcl = -par()$mgp[2] * tick.length) # back to main tick length + axis(side = y.side, at = c(1e-15, 1e-14, 1e-13, 1e-12, 1e-11, 1e-10, 1e-9, 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10), labels = expression(10^-15, 10^-14, 10^-13, 10^-12, 10^-11, 10^-10, 10^-9, 10^-8, 10^-7, 10^-6, 10^-5, 10^-4, 10^-3, 10^-2, 10^-1, 10^0, 10^1, 10^2, 10^3, 10^4, 10^5, 10^6, 10^7, 10^8, 10^9, 10^10), lwd = 0, lwd.ticks = 1, cex.axis = y.axis.magnific) + y.text <- 10^(par("usr")[4] + (par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3]) * (1 - par("plt")[4])) + mtext(side = y.side, text = y.lab, line = y.dist.legend / 0.2, las = 0, cex = y.label.magnific) + }else if(is.null(y.categ) & y.log.scale == FALSE){ + axis(side=y.side, at=c(par()$usr[3], par()$usr[4]), labels=rep("", 2), lwd=1, lwd.ticks=0) # draw the axis line + axis(side=y.side, at=round(seq(par()$yaxp[1], par()$yaxp[2], length.out=par()$yaxp[3]+1), 2), cex.axis = y.axis.magnific) + mtext(side = y.side, text = y.lab, line = y.dist.legend / 0.2, las = 0, cex = y.label.magnific) + if(y.nb.inter.tick > 0){ + inter.tick.unit <- (par("yaxp")[2] - par("yaxp")[1]) / par("yaxp")[3] + par(tcl = -par()$mgp[2] * sec.tick.length) # length of the ticks are reduced + suppressWarnings(rug(seq(par("yaxp")[1] - 10 * inter.tick.unit, par("yaxp")[2] + 10 * inter.tick.unit, by = inter.tick.unit / (1 + y.nb.inter.tick)), ticksize = NA, side=y.side)) # ticksize = NA to allow the use of par()$tcl value + par(tcl = -par()$mgp[2] * tick.length) # back to main tick length + } + y.text <- (par("usr")[4] + (par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3]) * (1 - par("plt")[4])) + }else if(( ! is.null(y.categ)) & y.log.scale == FALSE){ + if(is.null(y.categ.pos)){ + y.categ.pos <- 1:length(y.categ) + }else if(length(y.categ.pos) != length(y.categ)){ + stop("\n\nPROBLEM: y.categ.pos MUST BE THE SAME LENGTH AS y.categ\n\n") + } + axis(side = y.side, at = y.categ.pos, labels = rep("", length(y.categ)), lwd=0, lwd.ticks=1) # draw the line of the axis + par(xpd = TRUE) + if(y.side == 2){ + text(x = x.mid.left.fig.region, y = y.categ.pos, labels = y.categ, srt = text.angle, cex = y.axis.magnific) + }else if(y.side == 4){ + text(x = x.mid.right.fig.region, y = y.categ.pos, labels = y.categ, srt = text.angle, cex = y.axis.magnific) + }else{ + stop("\n\nARGUMENT y.side CAN ONLY BE 2 OR 4\n\n") + } + par(xpd = FALSE) + y.text <- (par("usr")[4] + (par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3]) * (1 - par("plt")[4])) + }else{ + stop("\n\nPROBLEM WITH THE y.side (", y.side ,") OR y.log.scale (", y.log.scale,") ARGUMENTS\n\n") + } + }else{ + y.text <- (par("usr")[4] + (par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3]) * (1 - par("plt")[4])) + } + par(xpd=NA) + text(x = x.mid.right.fig.region, y = y.text, corner.text, adj=c(1, 1.1), cex = magnific.corner.text) # text at the topright corner. Replace x.right.fig.region by x.text if text at the right edge of the plot region + if(just.label.add == TRUE & x.side == 0 & x.lab != ""){ + text(x = x.mid.plot.region, y = y.mid.bottom.fig.region, x.lab, adj=c(0.5, 0.5), cex = x.label.magnific) # x label + } + if(just.label.add == TRUE & y.side == 0 & y.lab != ""){ + text(x = y.mid.plot.region, y = x.mid.left.fig.region, y.lab, adj=c(0.5, 0.5), cex = y.label.magnific) # x label + } + par(xpd=FALSE) + if(par.reset == TRUE){ + tempo.par <- fun_open_window(pdf.disp = FALSE, return.output = TRUE) + invisible(dev.off()) # close the new window + if( ! is.null(custom.par)){ + if( ! names(custom.par) %in% names(tempo.par$ini.par)){ + tempo.cat <- paste0("\n\n================\n\nERROR: custom.par ARGUMENT SHOULD HAVE THE NAMES OF THE COMPARTMENT LIST COMING FROM THE par() LIST\n\n================\n\n") + stop(tempo.cat) + } + par(custom.par) + text <- c(text, "\nGRAPH PARAMETERS SET TO VALUES DEFINED BY custom.par ARGUMENT\n") + }else{ + par(tempo.par$ini.par) + text <- c(text, "\nGRAPH PARAMETERS RESET TO par() DEFAULT VALUES\n") + } + } + output <- list(x.mid.left.fig.region = x.mid.left.fig.region, x.left.fig.region = x.left.fig.region, x.mid.right.fig.region = x.mid.right.fig.region, x.right.fig.region = x.right.fig.region, x.left.plot.region = x.left.plot.region, x.right.plot.region = x.right.plot.region, x.mid.plot.region = x.mid.plot.region, y.mid.bottom.fig.region = y.mid.bottom.fig.region, y.bottom.fig.region = y.bottom.fig.region, y.mid.top.fig.region = y.mid.top.fig.region, y.top.fig.region = y.top.fig.region, y.top.plot.region = y.top.plot.region, y.bottom.plot.region = y.bottom.plot.region, y.mid.plot.region = y.mid.plot.region, text = text) + return(output) } @@ -1989,71 +1997,71 @@ return(output) # Check OK: clear to go Apollo fun_close_specif_window <- function(kind = "pdf", return.text = FALSE){ -# AIM: -# close only specific graphic windows (devices) -# REQUIRED FUNCTIONS -# fun_param_check() -# ARGUMENTS: -# kind: vector, among c("windows", "quartz", "x11", "X11", "pdf", "bmp", "png", "tiff"), indicating the kind of graphic windows (devices) to close. BEWARE: either "windows", "quartz", "x11" or "X11" means that all the X11 GUI graphics devices will be closed, whatever the OS used -# return.text: print text regarding the kind parameter and the devices that were finally closed? -# RETURN -# text regarding the kind parameter and the devices that were finally closed -# EXAMPLES -# windows() ; windows() ; pdf() ; dev.list() ; fun_close_specif_window(kind = c("pdf", "x11"), return.text = TRUE) ; dev.list() -# DEBUGGING -# kind = c("windows", "pdf") ; return.text = FALSE # for function debugging -# required function checking -if(length(find("fun_param_check", mode = "function")) == 0){ -tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") -stop(tempo.cat) -} -# end required function checking -# argument checking -arg.check <- NULL # for function debbuging -checked.arg.names <- NULL # for function debbuging -ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) -tempo <- fun_param_check(data = kind, options = c("windows", "quartz", "x11", "X11", "pdf", "bmp", "png", "tiff")) ; eval(ee) -tempo <- fun_param_check(data = return.text, class = "logical", length = 1) ; eval(ee) -if(any(arg.check) == TRUE){ -stop() -} -# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() -# end argument checking -text <- paste0("THE REQUIRED KIND OF GRAPHIC DEVICES TO CLOSE ARE ", paste(kind, collapse = " ")) -if(Sys.info()["sysname"] == "Windows"){ # Note that .Platform$OS.type() only says "unix" for macOS and Linux and "Windows" for Windows -if(any(kind %in% c("windows", "quartz", "x11", "X11"))){ -tempo <- kind %in% c("windows", "quartz", "x11", "X11") -kind[tempo] <- "windows" # # term are replaced by what is displayed when using a <- dev.list() ; names(a) -} -}else if(Sys.info()["sysname"] == "Linux"){ -if(any(kind %in% c("windows", "quartz", "x11", "X11"))){ -tempo.device <- suppressWarnings(try(X11(), silent = TRUE))[] # open a X11 window to try to recover the X11 system used -if( ! is.null(tempo.device)){ -text <- paste0(text, "\nCANNOT CLOSE GUI GRAPHIC DEVICES AS REQUIRED BECAUSE THIS LINUX SYSTEM DOES NOT HAVE IT") -}else{ -tempo <- kind %in% c("windows", "quartz", "x11", "X11") -kind[tempo] <- names(dev.list()[length(dev.list())]) # # term are replaced by what is displayed when using a <- dev.list() ; names(a) -invisible(dev.off()) # close the X11 opened by tempo -} -} -}else{ # for macOS -if(any(kind %in% c("windows", "quartz", "x11", "X11"))){ -tempo <- kind %in% c("windows", "quartz", "x11", "X11") -kind[tempo] <- "quartz" # term are replaced by what is displayed when using a <- dev.list() ; names(a) -} -} -kind <- unique(kind) -if(length(dev.list()) != 0){ -for(i in length(names(dev.list())):1){ -if(names(dev.list())[i] %in% kind){ -text <- paste0(text, "\n", names(dev.list())[i], " DEVICE NUMBER ", dev.list()[i], " HAS BEEN CLOSED") -invisible(dev.off(dev.list()[i])) -} -} -} -if(return.text == TRUE){ -return(text) -} + # AIM: + # close only specific graphic windows (devices) + # REQUIRED FUNCTIONS + # fun_param_check() + # ARGUMENTS: + # kind: vector, among c("windows", "quartz", "x11", "X11", "pdf", "bmp", "png", "tiff"), indicating the kind of graphic windows (devices) to close. BEWARE: either "windows", "quartz", "x11" or "X11" means that all the X11 GUI graphics devices will be closed, whatever the OS used + # return.text: print text regarding the kind parameter and the devices that were finally closed? + # RETURN + # text regarding the kind parameter and the devices that were finally closed + # EXAMPLES + # windows() ; windows() ; pdf() ; dev.list() ; fun_close_specif_window(kind = c("pdf", "x11"), return.text = TRUE) ; dev.list() + # DEBUGGING + # kind = c("windows", "pdf") ; return.text = FALSE # for function debugging + # required function checking + if(length(find("fun_param_check", mode = "function")) == 0){ + tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") + stop(tempo.cat) + } + # end required function checking + # argument checking + arg.check <- NULL # for function debbuging + checked.arg.names <- NULL # for function debbuging + ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) + tempo <- fun_param_check(data = kind, options = c("windows", "quartz", "x11", "X11", "pdf", "bmp", "png", "tiff")) ; eval(ee) + tempo <- fun_param_check(data = return.text, class = "logical", length = 1) ; eval(ee) + if(any(arg.check) == TRUE){ + stop() + } + # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() + # end argument checking + text <- paste0("THE REQUIRED KIND OF GRAPHIC DEVICES TO CLOSE ARE ", paste(kind, collapse = " ")) + if(Sys.info()["sysname"] == "Windows"){ # Note that .Platform$OS.type() only says "unix" for macOS and Linux and "Windows" for Windows + if(any(kind %in% c("windows", "quartz", "x11", "X11"))){ + tempo <- kind %in% c("windows", "quartz", "x11", "X11") + kind[tempo] <- "windows" # # term are replaced by what is displayed when using a <- dev.list() ; names(a) + } + }else if(Sys.info()["sysname"] == "Linux"){ + if(any(kind %in% c("windows", "quartz", "x11", "X11"))){ + tempo.device <- suppressWarnings(try(X11(), silent = TRUE))[] # open a X11 window to try to recover the X11 system used + if( ! is.null(tempo.device)){ + text <- paste0(text, "\nCANNOT CLOSE GUI GRAPHIC DEVICES AS REQUIRED BECAUSE THIS LINUX SYSTEM DOES NOT HAVE IT") + }else{ + tempo <- kind %in% c("windows", "quartz", "x11", "X11") + kind[tempo] <- names(dev.list()[length(dev.list())]) # # term are replaced by what is displayed when using a <- dev.list() ; names(a) + invisible(dev.off()) # close the X11 opened by tempo + } + } + }else{ # for macOS + if(any(kind %in% c("windows", "quartz", "x11", "X11"))){ + tempo <- kind %in% c("windows", "quartz", "x11", "X11") + kind[tempo] <- "quartz" # term are replaced by what is displayed when using a <- dev.list() ; names(a) + } + } + kind <- unique(kind) + if(length(dev.list()) != 0){ + for(i in length(names(dev.list())):1){ + if(names(dev.list())[i] %in% kind){ + text <- paste0(text, "\n", names(dev.list())[i], " DEVICE NUMBER ", dev.list()[i], " HAS BEEN CLOSED") + invisible(dev.off(dev.list()[i])) + } + } + } + if(return.text == TRUE){ + return(text) + } } @@ -2065,80 +2073,80 @@ return(text) # Check OK: clear to go Apollo fun_export_data <- function(data, output ="results.txt", path = "C:/Users/Gael/Desktop", no.overwrite = TRUE, rownames.kept = FALSE, vector.cat = FALSE, sep = 2){ -# AIM: -# print a string or a data object into an output file -# REQUIRED FUNCTIONS -# fun_param_check() -# ARGUMENTS -# data: object to print in the output file -# output: name of the output file -# path: location of the output file -# no.overwrite: (logical) if output file already exists, defines if the printing is appended (default TRUE) or if the output file content is erased before printing (FALSE) -# rownames.kept: (logical) defines whether row names have to be removed or not in small tables (less than length.rows rows) -# vector.cat (logical). If TRUE print a vector of length > 1 using cat() instead of capture.output(). Otherwise (default FALSE) the opposite -# sep: number of separating lines after printed data (must be integer) -# RETURN -# nothing -# EXAMPLES -# fun_export_data(data = 1:3, output = "results.txt", path = "C:/Users/Gael/Desktop", no.overwrite = TRUE, rownames.kept = FALSE, vector.cat = FALSE, sep = 2) -# DEBUGGING -# data = 1:3 ; output = "results.txt" ; path = "C:/Users/Gael/Desktop" ; no.overwrite = TRUE ; rownames.kept = FALSE ; vector.cat = FALSE ; sep = 2 # for function debugging -# required function checking -if(length(find("fun_param_check", mode = "function")) == 0){ -tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") -stop(tempo.cat) -} -# end required function checking -# argument checking -arg.check <- NULL # for function debbuging -checked.arg.names <- NULL # for function debbuging -ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) -tempo <- fun_param_check(data = output, class = "character", length = 1) ; eval(ee) -tempo <- fun_param_check(data = path, class = "character", length = 1) ; eval(ee) -tempo <- fun_param_check(data = no.overwrite, class = "logical", length = 1) ; eval(ee) -tempo <- fun_param_check(data = rownames.kept, class = "logical", length = 1) ; eval(ee) -tempo <- fun_param_check(data = vector.cat, class = "logical", length = 1) ; eval(ee) -tempo <- fun_param_check(data = sep, typeof = "integer", length = 1, double.as.integer.allowed = TRUE) ; eval(ee) -if(any(arg.check) == TRUE){ -stop() -} -# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() -# the 4 next lines are just to know how to detect a missing argument. Important here because if data is not provided, print the code of the data function -arg.user.list <- as.list(match.call(expand.dots=FALSE))[-1] # recover all the arguments provided by the function user (excluding the argument with defaults values not provided by the user. Thus, it is really the list indicated by the user) -default.arg.list <- formals(fun = sys.function(sys.parent())) # list of all the arguments of the function with their default values (not the values of the user !). It seems that ls() as first line of the function provide the names of the arguments (empty, called, etc., or not) -arg.without.default.value <- sapply(default.arg.list, is.symbol) & sapply(sapply(default.arg.list, as.character), identical, "") # logical to detect argument without default values (these are typeof "symbol" and class "name" and empty character -if( ! all(names(default.arg.list)[arg.without.default.value] %in% names(arg.user.list))){ # test that the arguments with no null values are provided by the user -tempo.cat <- paste0("\n\n================\n\nERROR: VALUE REQUIRED FOR THESE ARGUMENTS WITH NO DEFAULTS VALUES: ", paste(names(default.arg.list)[arg.without.default.value][ ! names(default.arg.list)[arg.without.default.value] %in% names(arg.user.list)], collapse = " "), "\n\n================\n\n") -stop(tempo.cat) -} -if(output == ""){ -tempo.cat <- paste0("\n\n================\n\nERROR: output ARGUMENT DOES NOT CORRESPOND TO A VALID CHARACTER STRING\n\n================\n\n") -stop(tempo.cat) -} -if(dir.exists(path) == FALSE){ -tempo.cat <- paste0("\n\n================\n\nERROR: path ARGUMENT DOES NOT CORRESPOND TO EXISTING DIRECTORY\n\n================\n\n") -stop(tempo.cat) -} -# end argument checking -if(all(class(data) %in% c("matrix", "data.frame", "table"))){ -if(rownames.kept == FALSE & all(class(data) == "data.frame") & nrow(data) != 0 & nrow(data) <= 4){ # for data frames with nrows <= 4 -rownames.output.tables <- "" -length.rows <- nrow(data) -for(i in 1:length.rows){ # replace the rownames of the first 4 rows by increasing number of spaces (beacause identical row names not allowed in data frames). This method cannot be extended to more rows as the printed data frame is shifted on the right because of "big empty rownames" -rownames.output.tables <- c(rownames.output.tables, paste0(rownames.output.tables[i]," ", collapse="")) -} -row.names(data) <- rownames.output.tables[1:length.rows] -}else if(rownames.kept == FALSE & all(class(data) %in% c("matrix", "table"))){ -rownames(data) <- rep("", nrow(data)) # identical row names allowed in matrices and tables -} -capture.output(data, file=paste0(path, "/", output), append = no.overwrite) -}else if(is.vector(data) & all(class(data) != "list") & (length(data) == 1 | vector.cat == TRUE)){ -cat(data, file= paste0(path, "/", output), append = no.overwrite) -}else{ # other (array, list, factor or vector with vector.cat = FALSE) -capture.output(data, file=paste0(path, "/", output), append = no.overwrite) -} -sep.final <- paste0(rep("\n", sep), collapse = "") -write(sep.final, file= paste0(path, "/", output), append = TRUE) # add a sep + # AIM: + # print a character string or a data object into an output file + # REQUIRED FUNCTIONS + # fun_param_check() + # ARGUMENTS + # data: object to print in the output file + # output: name of the output file + # path: location of the output file + # no.overwrite: (logical) if output file already exists, defines if the printing is appended (default TRUE) or if the output file content is erased before printing (FALSE) + # rownames.kept: (logical) defines whether row names have to be removed or not in small tables (less than length.rows rows) + # vector.cat (logical). If TRUE print a vector of length > 1 using cat() instead of capture.output(). Otherwise (default FALSE) the opposite + # sep: number of separating lines after printed data (must be integer) + # RETURN + # nothing + # EXAMPLES + # fun_export_data(data = 1:3, output = "results.txt", path = "C:/Users/Gael/Desktop", no.overwrite = TRUE, rownames.kept = FALSE, vector.cat = FALSE, sep = 2) + # DEBUGGING + # data = 1:3 ; output = "results.txt" ; path = "C:/Users/Gael/Desktop" ; no.overwrite = TRUE ; rownames.kept = FALSE ; vector.cat = FALSE ; sep = 2 # for function debugging + # required function checking + if(length(find("fun_param_check", mode = "function")) == 0){ + tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") + stop(tempo.cat) + } + # end required function checking + # argument checking + arg.check <- NULL # for function debbuging + checked.arg.names <- NULL # for function debbuging + ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) + tempo <- fun_param_check(data = output, class = "character", length = 1) ; eval(ee) + tempo <- fun_param_check(data = path, class = "character", length = 1) ; eval(ee) + tempo <- fun_param_check(data = no.overwrite, class = "logical", length = 1) ; eval(ee) + tempo <- fun_param_check(data = rownames.kept, class = "logical", length = 1) ; eval(ee) + tempo <- fun_param_check(data = vector.cat, class = "logical", length = 1) ; eval(ee) + tempo <- fun_param_check(data = sep, typeof = "integer", length = 1, double.as.integer.allowed = TRUE) ; eval(ee) + if(any(arg.check) == TRUE){ + stop() + } + # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() + # the 4 next lines are just to know how to detect a missing argument. Important here because if data is not provided, print the code of the data function + arg.user.list <- as.list(match.call(expand.dots=FALSE))[-1] # recover all the arguments provided by the function user (excluding the argument with defaults values not provided by the user. Thus, it is really the list indicated by the user) + default.arg.list <- formals(fun = sys.function(sys.parent())) # list of all the arguments of the function with their default values (not the values of the user !). It seems that ls() as first line of the function provide the names of the arguments (empty, called, etc., or not) + arg.without.default.value <- sapply(default.arg.list, is.symbol) & sapply(sapply(default.arg.list, as.character), identical, "") # logical to detect argument without default values (these are typeof "symbol" and class "name" and empty character + if( ! all(names(default.arg.list)[arg.without.default.value] %in% names(arg.user.list))){ # test that the arguments with no null values are provided by the user + tempo.cat <- paste0("\n\n================\n\nERROR: VALUE REQUIRED FOR THESE ARGUMENTS WITH NO DEFAULTS VALUES: ", paste(names(default.arg.list)[arg.without.default.value][ ! names(default.arg.list)[arg.without.default.value] %in% names(arg.user.list)], collapse = " "), "\n\n================\n\n") + stop(tempo.cat) + } + if(output == ""){ + tempo.cat <- paste0("\n\n================\n\nERROR: output ARGUMENT DOES NOT CORRESPOND TO A VALID CHARACTER STRING\n\n================\n\n") + stop(tempo.cat) + } + if(dir.exists(path) == FALSE){ + tempo.cat <- paste0("\n\n================\n\nERROR: path ARGUMENT DOES NOT CORRESPOND TO EXISTING DIRECTORY\n\n================\n\n") + stop(tempo.cat) + } + # end argument checking + if(all(class(data) %in% c("matrix", "data.frame", "table"))){ + if(rownames.kept == FALSE & all(class(data) == "data.frame") & nrow(data) != 0 & nrow(data) <= 4){ # for data frames with nrows <= 4 + rownames.output.tables <- "" + length.rows <- nrow(data) + for(i in 1:length.rows){ # replace the rownames of the first 4 rows by increasing number of spaces (beacause identical row names not allowed in data frames). This method cannot be extended to more rows as the printed data frame is shifted on the right because of "big empty rownames" + rownames.output.tables <- c(rownames.output.tables, paste0(rownames.output.tables[i]," ", collapse="")) + } + row.names(data) <- rownames.output.tables[1:length.rows] + }else if(rownames.kept == FALSE & all(class(data) %in% c("matrix", "table"))){ + rownames(data) <- rep("", nrow(data)) # identical row names allowed in matrices and tables + } + capture.output(data, file=paste0(path, "/", output), append = no.overwrite) + }else if(is.vector(data) & all(class(data) != "list") & (length(data) == 1 | vector.cat == TRUE)){ + cat(data, file= paste0(path, "/", output), append = no.overwrite) + }else{ # other (array, list, factor or vector with vector.cat = FALSE) + capture.output(data, file=paste0(path, "/", output), append = no.overwrite) + } + sep.final <- paste0(rep("\n", sep), collapse = "") + write(sep.final, file= paste0(path, "/", output), append = TRUE) # add a sep } diff --git a/cute_little_functions.docx b/cute_little_functions.docx index bb6becf69348134310e704189a7f9c98788b9ab0..a57aac26b02b771f4a8ebd7301151b5d757fab3d 100644 GIT binary patch delta 161307 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	_u+IsD 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∨CF@1emcfA>q_FL=I_fxaK95P_HOtpC3-f}jV z>{@ihY8+Qb0KvmXq*THs0__@Dxnp)J?EEW*Ab2XpwsbvR?rj6gF<bxkm#qyu@;FRT zl?KrV#KQba2DD^yFDEDl>U;I(vrQt#{dF@*gr1c%y@TQ6hiRw0GqB-@88C~Wt6S-g zDaV_o?qVTqlw8y!ZWs&fG`Agj29QYu2Z9-le=jWZfWlAka92JYNSTM*x{Szg{4{WX z+*#F3OtF<&+&ntAPm#yhR0~91$D1+ZyB&Mh^TBh<?LaOna!pp5_#eL;YGjN3W4`Zp zCTD(n2d9O(xc<Hq*WuGSt8l*bajBUWyB`ro_$X9~nA!x~oPG+=+m_ZBUntL>ZSTw5 zw02nP0pXAc3nS+QOdd<=0<IoXbV+&vZ<yC1A+N}+x5t0)f@hVCVYW@UsUIAtVQ<mA zHI6R1qu82n{l<-u^+)kiny?0m=++tCg5CrWx4T09pg|V{!zRAD41~?@icsDCl~(5d zCT$QwCw!l3TrT44<BJ1@Y#;uBtF?kbIdC4J3HWfLoZS^4-*UzZ`Vi=mA**Rn$O4~9 zA0<k+>k?}aknqK^MHYQf7-|IqC6OsO_v!1Y1g$DfP^Nq?_>#uc%y82R&Y~w9o3F#P z>pd|q@iBspc7(6ed6WYXSqHeg7&&O2&|TyzOZ4&wXwCE+!}Ml@-nuDOzjP~1sP_v0 z0gJo`Gi_lppk({MwDNTW8y^iz+8&|~q1K5esnhJ<doZz<LLt=p1>mL@M!1PbWwZkF z;Gokm-nC7>3#rPFwF@^ie1ydzWQH`;lK<ER-e7p4*;F8t4^|~LqVjM{k7`GXbm#;{ zs&juaEY~S^(A=DxB%b3P%Ia)GusL6m0es%W&2;2!7>>TtxC@dxNamJ8q@eb-B6WYX zeOrQOetcpINIAM<<UE#$<r+Wl&Yv7$G!HSwyJ1H3y%@2nN$%S<ds+AnV#hI9@V0`N zx&|vg5d&;Jew)dlS7YM)rf>f~Ihren$9C>U#F3J!(O#8Gs|C6RI#IQ_hwk%@0Gz-x zh{c+VFso5%0@!k53@%hF*Svy$sUzhN2_aGh!`oK#q9BhPYnu|mQ9-1WG3$=;&0?`0 zVc`Qylz*rHN)+C2KAEV9_%^=w?qA7MM^pE3)8P;RCUzD?CN$2Ae*AQ%92k271%~pR zH7pzNE>pkJghM*p{Ki_(-@t?dAVbhRY0g7#ai_K^&(pLIqaid5^_!bO#+uN#-UwF@ zOLmV#YGU=Z+K*o;owVjioaGT!g8f2j%K{j)9BA`cYR>YY+qrEHWh@J!d-FyWV3N@D z-#a}%P6Jb>E8vk0c1(xjW#gvOEsSvvMX%FO8QJ-wQ=KB9?2GxN!_(qZ0mL8J>wSZA zyow6A(c=kb%p~g*rQk>78fKSiMv-tOYbh`*6&!t#PruaB<a|YWQAk11`L$#)CSfL& ze26N$D{Rv}*tE(87!rRst@en+fv2wXZk@ZlkcVt0fz(#V+Ti`>l%E+s4r;i&2?t%Z zs?FhpquI<AAV%QTUJec@2Xu=Vq;;do5f*rLvH6V~%46{{N-qqU{1kVnsf--1C?C}H z)a=(H7y3R+wS(au&h-^t;GZ8~W{Klca*8NSzqNE(eBK=njhJJI)HlJtLq5L0t0rsO zYK<II`opR?p0-=Busy>ATf85xe}uoKm5WX>K$_)v_UrDcN$v0m11n$)sD7^!LRu?W z6a};xCS#Fxii)X69lf*D@p93USPHdMN~%2HRVA;N{eN#JH{Gh7Bt}>N21|dwkf3?X z3@jb}zO{2#!uWoJ+xR_K2~=zhzCxp=*QzH7j_N3j6rP|<rjDiwhA?>}vHc#557FEg zwgO$<0FDwT2}K<s0n|0*hT%!-QxcWVsBuUqv#*Vg#vG&AN9|o6pC9LRFjPbqmaULf z_;h$()@p6ZwIN<c-y&SfUq0C0xLrv&PbLv9<W(+@ljkLqA!#2)PT=FL%i5zx`#*dt zL)lVw0Vh*5%;WO5soyoF-klwsx|NQo7euwt?oSs58r+Xtz}Ge;s-eHfXwdk>ifVH& zIktN&E=Xqk6Kd+qt`zac0#j(!2t({PNfmk+7#_+HJZ)UNSlZHWp>Fk8_zUM<bHLa= zQp`O$PF@>(KIeFDNyQNy(xu7}=eu3Yd2@A{^b2*OgiKRm5$5{p!Lu|*F3NX8758PY zr_sW0$2%1n=<xD;R(H0n+q>+A1-IGnV1<3xsx{La5cu|i-AcHYrb4NR`MgISYnUN( z57+1WCo)jFwe`B(okjBO_S5)Gci=}LJ8DRY(>q=_Ng4gi=CqQI1@>%hs<Ee=TdW(; zZ`)WX>X?T}&aX&XmQ`P@o9xL~EM}ku-t4>al}O2fc8v2~q&$t;It#2yy^fozk1oNS zaxr<RQysHyJy6uBkiK7Koy6dXXm2S)M3C8mbzC}G%RZo&3@7KukkVY?`H;?B-8|sg zPLKGt7`8t5{QAh78+$mlDJ5k>>=m>|ZRR1q4CFLvPPUeF2Ab*PA7Kj6ktEdXeyZG( z#U~oTBMVf~i3&_V>s*UP?PN-u4;(ZI-QYl<vjw|n@Mu5lw)gCR5fzcI1TL{e=x*_W zIb8MndqM2=s`QWnd3fAMJd0-k9u<kU@jq59x!v8wdy=1QWEXY4D3v})-*6}>Qfh-d z{aWb>>6@{=jy7IVc%AttLe1tt-{js3mq>v0LAM_oHa6wi@cL|7L$-)`@^ceIw0&RU zBUA_S-eWPtsklA?-SG|?YiVAC9fRHvB(c6#>$_KFZ|;m5Ve_`z7Ktz(2>6u`qbJz` z-Uw6coOAJX&VC3D4Vi0FMI<ISZONTm!X}w3YlD2=+u5O9VE)<gUP!srynn{~Jr=OJ z=J1it^<<R1ua3U1&Hk#M{_jL@FtOn*hv1)$u<K$ZQxP=eQC;!0y9FFOQhj6JZP)1x zL1T#r=gd#Tdxe0<{W;(lfD;#5>FenLWs|*dlca6Mn7D_TT84dr_WgJ3v3IQTpmYhd zSse|e*|){_n^)&0WU+n(#D=MNN>!lTSo-l~cb%5V$c`vIv|sF$9KNZf0e10>wO%Xb ztijB7i-e;mu9E=^gc>a~VYNDWiW?_vE|Icm5}|qZhgk+n?z6sSNACHiBHD^+G8D#V zN(vkw3oVw;R2ao>6frNcrpo7V&dU7H3gjlkNQzi94oCG<m`JTl%%bTP+$5kxBnkKI zJ?(aJBGy1rwEZ^xz6LG;F`@GyV|Fxa3zT*GPFjO$m(#K{0@E7P#4HS-@|ajqTR@d* z+OIW0<!5M^i`7H>g6K83YiHK=5?72h%ga5{B|{Fbilov%EFmScPH;?#%4XQAleg*< zcoxJ+ymIcO;%{(~q^^s{<1BzD!-0H|(Ra))i^f`eB6|#BnE|3UL?D1fsTi_`MF=P6 zIuow}i#*oyP^rdl5=ndFt3N1MItj}3GH(?1fNj@Xooy^0@-kZ8*2c1_4x?D5R87Iw zoHUf&faNX^k^SOUTvp2Q=;M+!R>r$|#YdrH*43Vd8+3{0mNuou2f(TS$b;*x>rP*N z@-9<XC&gISXj9F_`-WRhVpu<^L$MkUt`(w*zDeSIeAG;szu0E)ItaHk5n>FA*~&Sj zwp1<x_gwshW&v4Dwl~!{ymz#OksA@_Nd|jHP{Dv3lcP;q<x*Dkg}0!;`H$yKvwho^ z6-geV%=O4OqXxQ&4}c!#E^%C-AOO58WH;^JrV4zODwCip+v(rY5ZF-+s|g)e-?vO_ z8%uaZr`ZaPrpcWjI(FkbjiWn;cw{*&TxIzyt^D%*cUZO#Zcp3wM8@6f6dV}vXjyf< zN}H4&gCG&AGdD3}p+$^0z4T06#xzUKvvalPp~z4%p{9B~y8!Y?f}~f%!F0c=4~J35 z;$?V<#Sr5FRsJKp%nyoY3q4_nDL5hqBWk=m5>s`J*go|;dOk3a9;r!31icwsa9#>z z>s*q%HwgS6F9<9aTB;J--Y=57p-$Rx7wMR5bMU?pJ*yy-np?fSSXNr?6~qq_!#<~F zIJB;LP-hlJg8=EbFx9Fc6xwq99wV%?@b~E-lD7_{W0>ryWN{&SuwMhFb<=@nVwyCm zWQ|5xYlaa;WB@6)&OsBe*FkL#h+pU&ojwy9J0&_8om1+!p&HA-1LeLhm3hIZ`9-%v zNa0KLg2eP!%+b-IZNy##y@QOBIT$e@0_vhdmm!{)Awa}H970pzxhflqmXK=*;YYmg zIM<Hb@$w)-`ENokb0+nAreb3#-9_j6^Z@WyPx_$5zk%5TDQtt%cq<jc2D7v4OA8EC zrWzZybYt82%`D^T#_k0y6mAi15URuX`#a57kf#Cx;~X3f&+RahSxbr3o|?P*Zzt61 zI=kX>(ZCpKCQPZngi0@}oT^Y9D)wQ6IqIzDNQks?t`b_1xTM@qEw*{2Y8&~%R?FFb zIO`6qvF$wnj_|^TcKUDqd{Sg#!!M`b&)V6~#7x-?CXT|7FRw1|-PhYoW4*!(cut?? z5DR!%a%p!B;t@`vwB|O*Z+@uJjk0A~WFA}Et^+-9X{@j&yA(^~qzq7X90@T+Lj#09 zXTB!<O^W^u^6kHuylxrfo0Bn@NGWDwhW|WqP{$fM5s1Vce4Ffv|2ftVyPK-vDlG6> zQielk=eXQcF=|?j6eT{)I{k2L`r-h&UZes&AU72J=SW-o4~l1u-(q|Fs_hj^FJR-% z*$YsHeG#sfz7e>^9`0X#O2H~o;-4qL%dMkJ`A$TAzH39rJQ)wMYO2}t`M!psbx^UZ zWhRdukqd_1@GsYvEoSAWa8+bhY%G^tu1<~9kRSrDd@yD53}o*1T})4WSv6bj9)$t- znyR?MhK9N4dt{Wx8i%ca;8oGk)x@3f?7$8*Nm+MFm)~*e{IQzW1Ls5Kj7_?j8Hc2m z%LWe~30~1c$0$!sI$1z04~kEx0ugM?)53l~R0E9A;c+^HL*w$=`svx;!5JYDWm?)w z$E>O#8bd`hth&80Oqx-Ku3Rg^RQwJ5pczC5lKDgR+P4)oQs6S8_WZeYo%q($3~+L* z_6i$d@Qg6jh~ak+)O$A6cr~2i8mM-MI}%E*q(ablclTqHd$Z*9q+_=wdt%&oywK{j zrFXz3N<@JffbU;`(daxj=n|=`;aLhFzu#}-hkehmO7XcNlll|Bs}!3Rg@T<>)~xg0 z%R2L0irxTJ(mjfYUY-hsBXtstJ+K#&^u|9<#==3yruL+G%jYF#-ac&Zr8kSA-@CrS zZ7HB!5sWDJ(7i_v4XX2G9o+~MC4FGsDd|w<|I@vOm+#M!^&)RUiY}jQ+ZxY-b%`5F z?Ei~1JtP!iz>}!_Ve)gm(poF!Ku{Tn*Z5B;dVDYfh1&tico6%GEYl?tSfU72F(>Lo z?-k3-DE*_I8c=v8-<G@B0K<22v4>z6?T)IJJ3CZRk2v=<*}>x6c(40l(~J{M4<b2j ztzX+omI5O}q+O91xt4gzh3FX~Qycl0D+z@y{>jx7(gFpAL-J9&x)~N0-IWYOWz5Fn zU-}4rX9SQYzh;r@k}1NZrzboZRHsrf$E*O+YQ4ds|6I0}A8vO6C-|^qPc%8jLM_Q0 z0Ck?9AjSV1tGBvslW%3+j-d}!GNO6mBq^k(Aw)u&Fo#>BkTTb@W6`*O#Fi7X<ZL0A zm2=*$_P-!G(%6hR`PkmV{R>^<pzqIQCtbAgHBiRjDVzBOWpaG3quC{YZDn8Uym7Ga zoD?Lnz?-~Yp?6}UR4@LB8{?a6LgOEban@Ul5Cb<eras_5KOxjh8>08&eT^Mlm7JLc zcjmA*;AYWMm^D?twcD(%Z)`-oX{*laMk>lpv%BUZKIL|f^QHUxioU7QAjeX=a1s#a z06kv@=0R7Ydp;zJ`Gxw#-a0LBqZN2?oN*OMA!e0-?+;qB6g-}2a_!e%cFEx_Xy%o; zyQ;^C1Mhwlb_1>Dk7&f(tl;V^Esg2J0mOC9-`P}gsF+Np+}0NtGg0*^(dm+a)Iu_4 zkqL=x@)a~Xu<{>bTA8<!v&(_CeV7FL@TxX1m2BpI)3B~eOue^&=RiC1ow#Uw&k;`J z-J+iz3CX@uOGe#yxAR`)e8?}rqU!ky+Yi2yKE?^PJ{RCnm@Zc7(cY0&PVA>(`Uhm0 zTBvDR8AOkhUyW1$|05_WFE(?b)f;!WT}ah>K)2-Y{x2u(3Y{wSF!rz|8{v6wj8+(5 z08bZ0zV-iuP@e5zHtHPUfW2Ky;z%SIpLxU?zPJeNEreM_Zgzl7rhp>Hv0Yr+P1Qm> zDlP5*u&5v*MD_5!AO1f3Te*<a;wNvo3|d^c;3Q`@crKv3xJJ1_4sMQC(3ijgSnnI; z$c=154dcFPTt<vzP}vuVg1eRQA?EdQv7%=a=ea;7{MD7v@|yFJml%_4who7*aOu|~ zG6HA6*_+v(JD|}i2=O<vAsj5E+u^Zl^a;80TjM~Ozu={QLkXbW^5{O&?n0oz_g7a7 z88jIBSsiA!^D$?Z4gc(*gAb@H%6I-LC@b=Kdl)V(6_*(j<H5rrJ&hHgO3x3Wc#mzK z+wI+D^bQt%b4LzeI>EI9A@25Dcg-nU7}o$0focStyS6LGNC#JmFOfRTPFq>zm(yQ3 zF9&nKs7L5|$n;l)0j2`k`lC~Lt{S6Nyimk4+meRWZ*?tK6p`nufZ+oyx<N9Ca`HH= z41FOM+vqaEt0m=8a>~_jB~~Jn=TOwL${169UWi+;3o9ENZ!J#Ye0gHmHWk~e=a&*~ z(Tiw?n}qrVzBb-;r0y&J3RtV5dqIb~o|sXFs@$npzeUxlcGg+B(0SaSJ{|{=s<umZ zJ0guu#Jc>r{PjV#fF~xuh5x%6iW%OY*$3||s1STy-4@3R6H*7>KHk2t&*Y1XpO-md zOr_shCCxy=0378nh06cI%Ac%w*}g>fS|h%XB?TkjC{+p|uufpjzW808QSiL8opU-5 z1>X3>^os<s1SX5VP`RKCCxt=*P2?^8Iw0-z8w-~Sez}zEn+kih)~RdGFLmuCrO<ht z;17N>ezIs!o;pke?mbtyvE91tu1~sU&6B(s)({x>LEMW|mx1WgY%PdCA~;bJM8^yd z&ivNw;QkYZ3?mp~JX%T%9<$$JZWnIs`qyJ<pX9~M^2=W+d@R_15xP^y%V;b1PXb_E zDMNbUGWr#@GU#Dr_`RBEH$f^xdP#J7p9rRvqlRSZ75?OV0u0{1jFQOw=@4NtLY4O7 zdB+dEv*sR33Bg}eup=&Iy*vu)hL~!zm9^l-mfs^&SWu=4T~JbLid<h*C~UE(iV!Rm z|3wnYsuLKgK<N=tYYJfx>`WC(wE)C%hwB(ye2b_<k!UxHacAMBv88@I`otVXJS6&| z3a+B{xZ1A7<1@`z$+EeWJEgHOz#?oE4Mknncv`STMv{(}zq~z9={PMKJKHQ<P`v6P zWCJ?9Zn%DEn7o?47$T)!4v*?#Q@{G2W+h(C)?cL*4Q?xEK7u@o!rrfmDxio$%`>6l zdP7g4V!hvmK0+HjN?)0Ui8W<C#RN6JV$r2d&n9X7qPL6Y+bp(7>}VSqYPFAbo1P4| zSH2VPGOA5auoCTBW5$5*gR^<*1`@`a%<@qw5t51fQO>4BIY(+_9D`CDp&R4%DI0cE z5t}C;w-`?%?BRPd`WBUuAds*%CZ%94;`eQ&!;7pT+|Ja8jqMT^d>?(2H_*g=eM;|r zociJBp{!huT)X?16GWb6<+$`u@Ym_pqxY-=iom!EMG`YlSw3dySt$JlC)c=G?r_E< zn~!k>*}Q%DYBmh=00F;s^oyDa<d7IeuTJsE+>B!uNIbn=TxP&887KtXTr?+EWc}WI zoEB^8Xv5*!EmH06x+u9(M*vQ$8Z*QcI*63eAt|KvS4b(ny8A*u0}{u3ePSj^&g%h0 z^X%nNVkq>%+lP%I#QsNLe`dZhjRL7zRd7rE&||7IH%9;zXHLfcVVE#w`}&jLtS+H9 z+Ms4E|J+STh9idvB+&Yx3c9rkOuXEg2Y9oq)5*FhJ)j!LNvyKFMP!h+6|RJI9>xWg zIV0+1MrW(A@!1ijHD|X(|6LpG>A35{C>;j>F3Z;9RkBm|r-Rd$U(CxSPU6o5Lsim! z;y=iXw?BRI$hYt2`4(svG?wPpE^xFNKYCm5t~@eNn+9LvmVvXQ-h9)s0?1Mi!|aSY zYl>NjbsX$et;rv?F@`$0-OP~uWvz<P^RftDnb7>+vOd%YW0)oxOKHNn)5usB6}FLj zabx91u;OqDowDH&gf3Wq#xw??x7ZWP`4zYh|AQhh9(A`$<m!k?vsz^b=f$Pj!WLAa zRC$WTEmEX_Kr;*aH^;xr7QHrJrJM6P#;4n5FfvY-F3jrCMFP{bu*O6ri=c!H&W?$d z;ECo@oigeTSdJ~`#wg#FNE1rEA@$RF>q^!?4tuhtB-?n$H-~U?>_4&^Mj;URYbR*< z&>FH>%)h%%zo_o)QY-l<lsdo1M=vZqV4T8!8oRy#sY9Ib#o`3Z4+K`<UZZoaXr;1n z3kh##(>juGZUij$?-EGdJfTQX#w<J}iAp#=J7(3&6G_S~mgDQ)3pW7?Q1V_iM!l74 zVxu5&zO-UXDeemXO&OUk)*%e7EhlT}T^#WQ9@gWtDBpd8DS}sg<k&FWf$>R0H^`75 zgPf57dPE)y3rPW`+Ep8s(02_{5wPf$Roo31Dzw#baLKw5{p#@PM17*e&7TiXPo6WR z_6s$>JS7RPcp+_brJGwvtQ%g3rDCIw6-_NOG%t4f1``i<NccHjc0ub+FRUTdE5g&h z>Y-cw@TO?)gJ3I14q^Q`dtqxkAb*H;y&t>ediiY;-ol=hd(O&>%zl^lQxyqGXYq$l zU+jXK_YvNR*HA>4{I`B0ij}G22a!Q4LqjGS#+Rl@j(n@dR|4IeoMxG=N{;XR*|L_y zkOX7O0XRWu?-|QRFY<B^wpxiR<8lr><#zDOlRsITJVu~ub{>ZCLxmG)_h{PHUhvD7 z;CD_aza-DV%2XBLL^oa~2Uml}oxi-zX*%+ABtWLm++IjYT8vh;v>{aOsJvO3Uo3#J zl^?Hang3y0VUKPrJWa%dieW=T**QI78F@j`25P9aHE!^DSZ;KqG9oEGX;PF~bc4l5 z9*-ho58AE?0@%6PlMINtwVX^d;i6@g$;vs(BnO_;{{{KriG6L$3lqv1nS7W|Rjiy) zncYf1FJ-5!MjA-Jc$gInsVmBoE$1cEG*1Mboiso1PI0oHsJ43w6@l65IY<DNjKTCY zplNGYrXMt6Y{1<uZ4Qxyf`C~2m!CFGDspB}9-6=BZcTOU;^yp-Y(nBOj<e;$HB6#I zHqC@6h0k5oi2yUMml07lL!`50q*}79szy1A=F(Y`hnk&p)8^sNLo%PLslbgB6}u~y z9Uo5d))*=R>mU3WIhbl7iaiVL-)O5Yz}71g$ME|z8H#*O(mr67LL?m@@t^lyK<ZiV zy2Za=7$zbM$W7lmd4`+4#yQtFD8&S9!Q)0hM>3$MdoVS{t@)Q_#rW9tC0kfV-daCz zlFduyk@2T|nP(`k(gj45vH5N1;+@1MZ8mBvGE@kOcbd%T{iGk)mY-D_1)AD#MaCnH zX%lb4^{lno%hm>qaPL$v;6cj95C1u#B+pv;YgW@f#f2YW+G`w1iir1Ol@?}@j>`lv z5p|kv6=e&@NzDGzPYU>&X^%U=8KZNErNh%&jI5$@kG~ctjla5#-=7(!CNEj&!n1kI zs0K5aOiN^#iY+T4?Jz%4hJ)a<-&fMp>&N(YCSw9|r>z+;O9P%SxOg>xy=lW1CY=EH z+FWMw)Lv!WT((qh-0*&%^kPm5T<on97fXOIT|I8T^U7=%EJ+LJmL8J0U7nz+|2f)1 z|2m_0P4YWJDKSO~)j93Y+pwi1iTAg{iL;S4qW`ZW!|lZ2t2$p|M`28zccu7ef^ty= zt`rL%<7u5xfHe?{s(S~lapi+VYx=tLxrc;3fhs{gL##&FQ_!Pv9AKSTPM#O9F(kM9 zW(Hbw^V{2Xetb_0)NT)nloZS9Jq-qZ<a(I3d@u4CWo=0p{9P$%hk~2dHGRJL>sf?W zbh3NiDf^(9QX`Ca^~!LV&LM^bQW*kL%79@09O>^a(s*KQxWO-E;*<HFd;WZU3~zBd z?oJ&>nj7Aku0;CHRDe0o-uF2Yj`fWNE$+iw&m*SzPt&3>xexTdeFTpUY1&wdLr<6w z$!C%4^!xystzv!o4xU!ya7v2fz!3$UrbuXSSdZ)oN=&klV^!1w)p(Nvq^c-Him>Lb zaq6&1@HmZeQDq8H35wnSPW=>=tCS4GI6_?m9YKfW6c0}7K)|_P-)_mYtH%lxOA-n% zODt|jfvneh*P43c581`tg&nUTI+e<axX9ShurREsg(GTdmEWqVVU!HjWD68a8F?l! z++5z=Sy^>Sqp}fL?B9@cUwe?JhX-4CoP(>4>>bQY!kBnZM6ZxlS-Jk?a0=(9+927A z&Y6Jb*1oid0L9-qqtpv1e7T2ePhb8*F)71Wf8p}%$aQNuRe1hxoY(VW>%hjFI0#{N z-2y6yHZ)rfW~#s`*?a4FA~sX~A7toXchyCF92r8aW|tGOIWiZcF7Wd4VA<F&ijI_< zLU8-79IoaVhecIfK@%c)o}qy9(dDjIM5~%6(Pxx_0OqnAk#Un)^g@dL74F)V8eeJ- z%640e1=8DTNGvwZib0ft>I1q#Ov%<*emVl|`hJ3{K(P8_>RR99!BXyO(rkuf4<o9e zR?ags=6k<-*`PK!-ykKKvg!~XQD(^xi6d2<%4V-q7#zM}5(HN!UMLteknxtFvB-%8 zSP`KdK=fudd6KGe;D&rv3#UAV6r{BOAO*xFC6^zSIQ$p5h}1$wjJhbc$sEDM4M7$P zLcZrcP5d4b^PbfJVsls6R}62sB4D0_rFlQ(>b~b+BFieN7e9p6(n@M=g@ec4bI0!! zzMHCnL;k4+AFKVl$qQKVS;wno2JiglM_$Yf)Dg&Z6Z83jF~S;k3ZeH?4fVQ_h@{Jd z`Tn4sS;weOH&n({3gEu<bX4Jm8Hsg2oXoCZe2j5sbN*|uYuc}`95HJPWi20_iEh$t z1}b!01cmn8=<(awSTD-Q%HvuBk-+d)-<pksu9(5n6337d4{z9I)yGnEBRE`kYHyqd z@cY@n5^oTNUpXxiI<x>Ap!|m-4jI7&!Q{EMHe@)OLYcnWAIZ1Vm^PmdHe;lpqH<iy z0oM&tdbG3jHkS&b7zU0ATW;xXFhvy2YmSR1@a(R%E_-SGS&RY`#tZd+9JvdDNbDgT z$(Q9`draZ?GbPnUntn$jxS16`A3C-P5S_P`ZzQ3_)6narnEOcMu&_hY`y1aa7@C^p zq4=a$wFJHSO;o&O{#K;GhN1YooFLNpUwW|-6kL%^2de_Zw&X+_?Izj+1lH$K7wWwq zPmtJ=XKOqv6ht}o0|Hp*jte0%WL^s)0G0aWJLd$)oNQ&lCsUMMkJo8!peIj0@Fzl( z*|s!;&Cs+DhXY@z%2^d}xD)g&zX-1{!w@3F!=-qdP?ku$ET0-nL8C&iG#^WiPtT*W zKsSJMt>RE_r*kiYim!0q9g~9t?Qqav?|nqeR9;(#s=bIYBJ8(V<CWIo_rbLYuz@2x z_Yz>Cl=fzun7l)#Y5pW(d0gr*kdQ3-pn5_zL~1|Ax|lMj+;H+RCkl(4R1!%w<c4_V zvObXG_LH2(bvAd!oidc=<H)N=3vaZLaG=z9;~D1r*U>W1fNkSFnroD%IH?$NF<(nL z)ii3($XQCkMJ>sh)z<N_i{ZPjlbv-+(D!4CXPe$5dzyf=vWrd8WrC|F0M3}Dqhwa- zh~3HV3@+sl5v4(SlIWZ3`%Ag0>2ToWqltFZ>`$=Gc;Y0Pn1bC)KEKK9R?m$K7LeR* zfzqw-oa}n!&wntfck0R5?L{TBed}Io6Pfe>QQkw8_G8BpeaVQL<1(_0RZ#|5yeyGL zDhjEe6NYZ(u|zR)b5W(DfUHxHW2&+-=+5q?{HNw1N<0d~Z<D#%$eBL-j|4F!BhpzZ zG<Wdd1iRA(_lAVbah#D(|5h@z4I08jl|z{{!l{C1y(G)U{07xWz#{Q<eoE4S#Dz}I z(N-6q4=dX=Ke;_^oo!G&++?=Ni7{?QKw{s_5^PYQi$ti5bimqU0<Iy{dMTiEzh}sv zT;GgWYsW~}){ICnS<CfiCDU@F2}*w2X-QqG4q%GptIlONwS-28XB+eBCD;$l%<0?M zOW@<GT^%spgf6`Ap~}u-N<SJ65yqIwlA;v<fQpu%7W7lK4P5F|KBT`iEOVDcJ5MY8 zCIu1I_R_piPgVz+1zZ>Jb}Xw4NU7$m@A(>uAdox7Lm=H6ALbO~GIJ*zhbZ5kR}@8v z?K_x~)^>#X9Q<(RR;q0a@Ji#n_`4S{0|jnz36ePkbR9ERrW9aN52>}|Xj5Dg4HZXv zId^pN-*h?5)qhs{DgF*GMImB#6ky>YQgYS@IVJf+b3bfS1y~l+peS0wX#SQ0LEda| z*`$%VjARR^py72vN-F=`xI0uIgcpk8TB;8AYtcJ5LlYJ)D<5=ek)%@COT?52`Se%y zu?C5KL)S#sQvTha{|(>_Swmok+IHo<P)||p)=P}{arNd=qrCjKY)_DJhZj#neQ~y1 zMV}~Jf}(Q!kR^5~#gUh4_W_8ZXCi}qlRRGniXowP6mfIq3Ero(%m&(_?_AJc3B8RU zdwZ{-`I!%NV}nQP`(SR0#*jfX-PeG5PxTw$r~Rs6(uTb>u-!uEDfag5A+HnbRjQoV zO=K?o4n6|<XpPCsFvrCR2{J$zo~4|HHfz7gytJPHnmwTCJRkPAei9~m@9-I9*|@P> z#FV7jaLsSxEZVLWleiQ9Rg6kF*!JNC3GL3Wn~DGKEUf>LP$gD+$lHQfeo$qXdmXYS z`5y%qWyK9h;K4|1Hr6QUk9bzO)&BF5&+HaqrtJC0@En~;EiCgpOkBA^`p}HI{4>*? zvJflZ8#S1}<^io7h-<&l>g`ZHA_%1&^()FYDy0{h`c<-|O3TULf%PSMpf-zLav9{T zngQheU*tg<sfG~5R%YSSrB1G$Z0v~&@$rTI>604(;C*ECTqksj{{2tTu#sShjVG04 z@cmrR;eU0*TWdhcb*VwZ*Bz*Z88O=5oBZXXec@(fU$dTQC2y|XzeW3RqW#P0)gCDN zh@I}!&Hc};SUKb)eq=~gh>QbAKGS!Xpio2itVzy3yZJj@Jk)JQBi-=Kc#(nsoO@`X z1MDJiTO<Bc%<T<$yBMDQ{4Rm~g>mE1gh>v^L(DV-&b_bQDYI=W#y>}d?s+7(7T?SQ zwg13{NcVf#7kW_!wK9A%7EilUIn7>w8a2b+NBaBg%CjDG9eau?+uwKO6gJz5BjPQA z<=<&}vH;|~yb`>G)op$R5P+CQVUb5{5{VNIfM}O9#(93Xoo2aMZ;W9^d<pXBAeO&D zc)R_7HH(*V<~vF0$%(24#n}xC5PXGxoQIkLW3ciep)aLkz`EX@0EQJ76e(gV-l^Cq zcQLYjv<kv66I1;lKWX?s)0h4~)0alARSjzq>wVnVvXH<~=^h)4&0N`TCOa4~DN^KL z`Z4_0Db&NeLY&;VTNN#$&KA`cTvPqz-bU<weqAo4B?W`Cb~o@d0_x{AuElg0a&`B) zR`bvqJw0}|!LvkF$d$JZ;O;c)ZUG&LPMVXJzx8D=cMg*MV0~{KKP47R0x$DvaH8rX zi<C`6%!&9Tm_8^QI3UgwsK*A_1X3*9M7qe*IR$5s#En_sgf|AWj-$T95eNMgHu?F$ zR<8+>h@D9dO$zGUr^Y|T%6JbFY%<c}WInx!{W{E@$^FQgJEjdkx7g5KTJmT3qK>NQ zbRb9KPZq)=#VyyFI>+RX$n&$X4jBva@pgs_>mgbjNpI=naqL?;424O6m|3a!%9lfa ztf?eQStxW0?EDWbz!jV3@Jk9by$ZzTF9<GU?NieZ3|yGTxnYnLPTa@q+kgjKW9*Cq zlm)TCuWa>la4If+?jind=knjo<ZU#FSplj~BUdwmG4j)r={BtX1q7lqSU2p*mAt&! zZ9pVJvn#*JuH$HK@Z%xSXsmQ~$%b2_p){p&4=;Asf2S7Bz6YZGs7CvGbMn{6N4ZLh zlDj5zoMnH?>&13C=thsbegjgSM(MJ_DevRlxb;r}`-A;P1pj99i{df~1^v{zP}OI- z>T?8Uxdo)WqdG5wNsFNuw9Sj+xjx4V4Z%cMMFX+jPU#e3vO7CKb2TpfPni3Mf`Tyn zWQUJ2sDUzasCPh*lYnM??n2PS1WN9ry@{x?Mk(~@y{&f|EaL9XATjHAK2%XEu(f(9 z+movL=-xroof=d@k2L4o5;e$$1qP2m!;ljKeS9obfiOY6V$Oo--9R}Qqx4uN|D$a3 z;InWp|Hd$u)~{7vDXg1-<yN)zG@w%yESf4HN>pKbU8tgm)|_#tG&`8pdYl5W^oT;N z#~ddCo~B|OK+UE)(06k^!1*o=I(7!02%nv<eg;N(qLyEDmi}-ydJplakNqe1ypWI^ zLA{Yw$Y?o3i*g!ym&!m{3o47r{GH}l8Jr?oNT1Wt6Mq!gp?87eLs0~q;n)O@9uv8R zp8P-{b*?)mLgRX24B|LzI9m#eh%CY(fzem`A(evQ+<aL6vG4SVVZCf#xOQ{Sl1W^H ze~)5Di$L}??UYF*g_TyDYH1LX%GJ&6R7qk$;~<zPg*eRQ(EOYk37<*LRY*Q8>5q}? zsfy3zxF>-PEPQffw~$5L$SB9Dx?QiN(*exnU$>~lJ?rjIS9C`9qMa5=(bF$XF}h5N zJ9wUI6Z{&L__$}9^v5&WH>j?;>O{gs?}eYI6C<cir5Tls^@;r-X1!Pq5#3EOM?%if z&02wk0XBpJ<pOKUqsuf3IZQ6*eZ*5iOUv}<`zOF(TQ-4^Upxk!oK^05mSD}@Q%KEP ztP31hz&h1V;i?6#yepj$eW=~l1FuAmKtWvsBVSDG$xf{so@27HuyldMk`xBlb0>ne zEz?-2Bxbm2EK%@d?dIx5t$O)EBFY1j0@#EMt_c@n-OgME%H%pO`+AiL-wV0SCS?;< zW-?%J&&9(7e0~g!c^|@<jci-di61&7yZ^BeLJNiPD0F=Uuc@@LY>NvW*ZHr#n?igZ z8{{;XI83{pO3MGMOyRv(f+|r?Pk638@ass@p^O0#UP5VHUVZjSo>{a$*QKWi1l}9i z?Fbxc9V=cb;UPg<j$k1Vj%WCOi4%DK0DkKjdxxt7=6AFFvVCrD9C+`;sZB7dO+9wj zBx>3Z8SisZaiouAj~E>?Vom9LVHg!m`O}h42bV0pW#!v?SP|st@)Wx1*J=g-qzK!< z;|)XZL6{F;m=6<&FcdQhSKS{=WU*HB6tbXyIwT=s;&%^~6Eqj<E|A<nEb(KZ0+GIo zf-iZb4?&XL!e1=6wzhlA19iMESeKG|{J~sNfZomI{+M58QXyDyAP4Ve9krDc@gIIG z$2Gx3Tf=eY8`7uVn{V$YgP))^hexbH{TccBxSzLuNfW06)%fB{;nJ3$yB~8izm{*d z1@7T**Krn(q1V2oWbgm==z&u51`1m>k7_m<n-=edwH)VwN+d4p%O1i>#$nBUkJ(c? zu84-vx8U|VsN^ZSr73s!HQsmSr74YGBC}l4K{v2ZBMwK7<Rab5@-SEOky72;m5BPd zbsU0DZsa_NvnlWOjBeZ)bOzSGtgpYj8iK7jwh&Vv2aH?gXeZ;V0h;Mz=j{2Xd{us^ zFSGMbpxjSUt3xSw@2-g@h>9B9S?kv87Q!kSq~-QFh-Q7kd31A0UpJLRznV9|UKsAR zpRMV&daXYN-Y*iodQPZ!t?w6cSvT6bNC_D~52+h~FB^iALX&*Mugwr};1E8ZL3t~o z?D@Y`d*J_Z?US}gbN#QMaZ5_DCMlA;m}^xTiL(^2Ax&Uv0Md!4?4Hf5d*~DwqU4{n zf2B^o>P_gcg2p4c?3_FGLhq}%?AW8Dp%F3QdUf6wtPPw+A_n{5lC28)-+~i5Rj1!v zrdo;MOSRWYU>EQ|YPt#ridPlQ<aA~#pu&dhR{Xt6%#BFRNXSEBSHu9LqtlLM{3XU- z96`?K@nA$OH(NXHp0+J}I&<pGAk7UY)HqYY8yqSKI?m6k^nAX*-xX#5r*S;rlTtX& zfOG$w%tWsz=6>6iY*G~U@)+$Xe0;gJox76%@XF?+k$|nd0}9+X4@O2Nf1JM0^UA&% zFN^Qr9N!3yL#0X9l&)2RAP$|lJ+>ss{uS>)u2MKIu~?cLJ=6L1VzH0>xl$kc-q7vJ zcM0HW{Tf-)`aIc}OmOzsCC_cmOEOPj@=Pp;bRZAx7Bt@9|1mQjZ?j^fYMWoN)J)q| z9qF#>@UFUpZ4Q9pe^rPceah?VvVY;yFtFY)aj^c8ET~4bmm3;?N+`*D?qK9!u*fO( z9W3TwVC7#BL%%56DmgF~!<BP9LK<bXeNZ;)F+9>~?vOTaX4>OXHqwjZP#O8R<5>!? zN97*8Eaqdy;K2Um%zSm#+gF3C`xV<9vXtoRkDA&G)(1opnIyqh)GkV$nFO46Ds!8c zTh{yI%@dCX*e2{546~HLnG|wcT;U#8L0)>*I3+93y)aUA9>#Z^Fiuvn+G4C?$!vNq z^%+leVx}&I%7!2CX-6j>h+en~oBAMe{yoMrLPEO|W!#xy&|wfMM6b$t&_mzO)Uw~A z^pU#lq5#+^ooduX&APw9rUAOJ0df<PYfbG<_GlLcUQUz;+eJ`mH-#!?V2zfYsnHl{ zQ&M_OM7pz%JcI%9FP}Q!3{xMuukY-vFvu3X;3;>BsT!b{%RC^N=SX%_ko^L8SH9vi zY9bP9<yw^Ls*w?=Z%a*2e#@l#2f15F-k<za>j$zJGQFwu9&L&}`(>0=i&8i@dMyX& zu-p&uY|Xfjztk9-TS03vlW=%<lQUHHUJ02ktD_0zo1u_T0IVjI$zxKS4-POVW3Ep~ zihVD}Od8SFPTI>C$Y_ZOB$+fw4#r?R{?1J(+Hj%P7`^CIAUm}kudmM=<=YfME}ovi zllmi9(xyB#{>YP9R1;N1X^k(nB$xI8(FfXlHx;71_xW7-?}1jxb3fmwU@2j6%cV{M zg^&D^9?jd^x_+f3QcvngE)DR!9B1|>t_ZazasY9V;@C1Zic=9N4<{K%Uix|z1hXqK z(*T}*<~pa~h<k^W-JY#DYs5O>7M@)pnNv_&kTGcek@53T_J9O0D!FTQoG7xapE<hT z<^M{U`lrb2mDPreZU5C+)>^g?d_qyI<yGx3ajb~h1i-{-X*${!)o6$dE!^jSINq8j z2Fg?M-cF(9EV6%K;2)l_mY~3Y@~NANQe2Z&pU70CO{Gp1fA{kB(xaVW{*e(l7GWf6 zu9MkvWvkv|eII?qgY_D$(j)`MyY2a4U~<#O{?jgo`ZIf&vB7q;s~=DO$_MIl$0K9r z0Q?eQgUYoFY3uPdAN;?Wl<NDe6R%`sz8~Y2dQUr2ll)Wvf!0nMqRv`S*W-;(0*yf( zEwQ=%54#`EMz^p3HJ5}$95l-ckj<)j*@o{2kbbL!>Q@Kf+>+V_X&yx|Vx*_|IZ-(r zJD06r@ujuoL6t1^eK5kCIbg$=Xy!Em1dQ+B;6P036nUEWV*N`s=O&q{K$XA>rjbL1 z?OyeFh&Z4=1}0t2mm*rVjaYA0IHf8aoC(&Qi?_ai%cMA$LFXN@<4p+{-2!*XDmq4W z96G1sjBQBd{T1s+CA3LzGslcviaSxJI&uVg<fTe9PYohec>gKdBxRcmP5vtyxPm$? zGlS;?&aux|Nh7IXhdTZ78sV_>+J5vUUDZ5)$W;I=7z3S0QI`tGS(g&T-w@fG1s-OG zi9hPh5MM2P&pkFi+3E%2#Olk1MGO$$sSz<-H5}st{wP9=9Y1J*tyxJ*Ta~ioLBD|= zI;6aQgB%aT?Up=Ls}^-4TCQRM0%aN?7uOy$vDz_9Gc=hZgxiX-TZB#ff)y_dZm}qM zC(6PxhC?Q|5juYpNU_wHV6LkWO+(733}jHJcM$b$Sic5KmK&&-kI^d&IU@#MLxLZK zK*cFas7w*65LO$xwjQ7*$dHx0!r2w;NU>U#>lm{Zwp9K@KEOy&fw1odkSOflX`sL6 zM~>!e#u!O@VE%N4#pL9G*@%xZdcpQcMhp0q{Ztjbi?pha_l^}D<!AAprEilsAlh|^ zGgSOV(DC`X`ucLwm_oO$Q6^IC{rBqzF(#Za=P5m$eU~LNd8l<(XN?y+MqE=J!gw61 zLCVefE2qz#FHf?r!`=4>kV00AkSH5**2DuX!=k?U@p3T(_9XdcxIwy4^s~i#@JJ@J zaju%6(eCW@2hmiSf#)%5w6|)lchSiW_XpEuf@9p-qFqgZ-m7K@sXI?8YAuEuzu2_l z8D!(==A1c`;Syu?L!v#5D1V-sz37ilSpGE`E2eRsC~PSQ>64g5K;60|JT>KdHtQ53 z>=HpdSQymbCv{zb7%|fWe`B(~#q5&Dg3d{6X^=zc>d_8kvVp;u3lT!Ck3o^&hBmVU zbMz%7E!}r-9eu)a>~N|?0Se4^5uqD_9{nPr@82g^(JnWce-)OLCTJhXKgK{2BDAaJ zok!xTvHRtN_2+XaKsI^(rz{xyP}*=hj#3|U0U4W;UA@K69K`Hds$f$RxD_XzH%DRd z8tlsDRnZ!j`%RkaDJ%s*RU`&xU943;4Res@EeSf{CNb51+q&o7?T3q&F6`KResbxR zigYQzk@lF>T=n6YQj&Zn!x=&aLLq2d&{QQT+F2jHBRxDB&~d|jlp&p2>(!+AyDtaw zYZ&vI9uDJg<)Vqzz2}WH48md*|63HtI-PRt8ZRdT|1yr3dM6Hsv{z*mRXj^qK&#+O zZk4X>NPHgwqzMxGx!3!CS|ca)%wYQ&#gf{=Km9tz1Ck}kWTv|61rcmSX$CBEdntjg zAN5(9*fFkCK*fz*<;1;QbBSkLEF@fWglohG<j*3VU;)|6iocunsDU<D8+68c{<(6M z6`f6c4jv|4wVMeS>xDH-LB2=pOYY^PQ&RBcSJ#Xjqgtl;r8i8aVa$w2Dm?ySx%g{# znx)E&iO*0WU^n0Ue+qqG?Y*6>32^h1r_8qFuVc<<0V+<5c93DDw2eqtz7E2V6zV6u zJq<Ln92(Kt48u`Ew9BBdJFrjRPoS`unC{;|i1OqJt#{b2_)3(}Au0PUZxA10DQMt_ zImLC7H$BDFl=fqG%a8KhquriuTsD^N5Rf#h2(h4sEyELS!VgqiDmgIh!Ds+cw%3Zd z--;t$fLGIEjbQ{v6>Q+A?Ys~sYz`6pHCuD>{LM_)3D|?S4E@VX=KQh0e-562wm_cR zx<YSF2~?N(PxXID?KJiv6N5~N#yGC%19{PP_$Mk4qD463{6qu(o~*+%%=(c8*9YVM zgG_EBI(e+h26zJ?DMlpO2?>WCeb_R_IJ&&)01nhk9d94(gb9xD&*Vu7{p&}4YGa&- z#JQ0{CdH?}FQxG415^*IrUlSEJFM|s!a2f=IeMEFF0{}^OQ}dCZ2uk!jiEvE0fMle zZgQCw&;q>3DO#0(A#UVeT4AP+)2JBwbZb4AwLjo_AxY+|zG<Z@)KlA_^+qNNad?Vc z0)O+_3rWi&&O^w28eyxm38kFee=zPalZ#9Yy}C1XdO?UqPS4_D(|{FY_UynF{VT00 z!w$zwHsr{8aYK3QIPB0&X@0stK_JeLjxjf8v}4HU`8iDlZQ5EA8YyCDqcQ07O*{Kd z=RwWUl)&1qwXU-Z<<AcHjyNjTXfVFU9k9q^SBYz9dQ)b};7v)QPUz;6RPY_rnC=Y* z*#rlkBieCqW)o86Epd50;t`S0Ysi=Z3<?c}1QV!^wE6~w1bhqJ;QL`n*8LaFemGB@ zS^wV|CMMYkxlY?-3~>wQ;y+0D9sC%B%HfucUt!ZHDEkI<M7nRC@h>;9)&J&XTY)Q2 z*6li9Co4fU%}LI<QTsY8!TnCmznwR+<6M4W$?{~Kzuc8e>>54m)^wXsNJ1^IJNm8) zg_czMVoZCwO=<t+MsJ_LLiMDzmk;c?M|5^1WHLYNk$C<iVfWu2synU^4Erv9mVbOJ z=l=-MHuLnZd>UT>vNLI~8|Rh#M8L_ZpIMXbKa57R_kPU+jmiQ}@LD*eg--Fcp+W7K z{{zQBIKSF%9=BL@Is17yS(o+ZuC}v&VN~01Xn8TFRA|)%vD^`<zuG|yMy(gE)(ZvV zMUppbVaZ*(^8jU{Zvw^J-O0WQ%oV%5ZvqdJF?|!2+6l9$yAgn*kq10=Vw1iJI>C>B z_CnC{8K%FX>{%+AYea7H#r+M8SFmS+@sH_>Dfu*UsT5sk9MgxeBV$wKCKOJ5(}%Dt zGjkI95atTNWIIZ(^<}IeI&)1OQ`r&XYXrni9<$hhc#>o**CKUHbDeMMm`Yvs!1LQc zZqtXb8$%HbPH&q&go5)R@jisP4`=Xy`wroE5$iMfz1;YH<!Qe5IIvBHVyO|FjN*mN zE7y{dz3EUWxh*irUK0D=NDvoWxN4An@yK53P?*PPk~$O?px@YkNfDH<ZzZPZO@~6{ z)RXejyjVqFWUXV?rGr}5I=)6i#&jqYn~>QtwXIzZbJi~`btnkjW;zshtA6)?<yM;= zrG0*M+&F%Z>d6nB(cs*^w`SuoK3U|ebP2mHdFQ1AeK1e$v3(D}Qlu%*T7q;m<;jO5 zh+c+~GZ6<sa2M_uVvWa3`p^%E(%}N!AUHx{6K(ozm+TG9zn#Gz&=4l?<-$qo$)0cW zbvkkDHFqm()|ZTj%rg_)asxPjN5cvit#6Co7;0YTk>JJk1A@N?hb*w)<P9~yoD$3w z(O*IX1<&(KhvfQk7Qg|#9&v4ZL_&`^?r=OC*?5Ep9PlxGw1?mE&<2G+QCz7O5?m^2 zCviz(Tyb#|{Z^8gl-LSof3y*7EFqnr)u9M-4UfKJ3^yOEA<leJ9)!bxTc3GQfGB*B z@#~Ur<PXws<PWYfv_qkUAkRjeT8;`hu@%bxXvC?4`woYm8^Y;Bn^Zw5dmuJuBOWP- zQ!chb*&ls)WXE88juANB8Q~SGDaxS%^bz(sZiyI#;*%;xy6QQ~ygsCVxt`y|w%2M$ z4Gig+@#~c`j$b$AEx0&;!kdNDnSk$OCkUB8IfU}a0M3qNaS;3gn%Ma@`d>IP5)LIj zq+yl$#{<HChJX2e9wp&l#C|#;^Q+>55^mvtlm%1Z&$17v{Db_(cr2>?)$lX_a(0J) zJ-xX21Jdu%Z>G1!C-^q;5zd@noHcPO{UE&n9Vj8a0RF7ruFLO#2e-kUmNHoLuZ2I# ze-Hn>{I%j|_4fR0`EB^xg$4HR{$dY9_`}gl@<YOJlb_<(iaoefFNyzfhLckuMn{K{ zX%JdhUl;?Tz8%hdcTWjA=5}y$)(8m~z*Lql?;j^XvGRrE^R&TB>Sk#vURlH8i(aGG ztX0q-NJvbUfVzo)36G<bYPCwwS&HUv)jKqI%P*B-i*Bxx>`USnb^FI>XSI2Hn?(t0 z{d(g)b&#U_*1xEqol{kScj&(HZ;<wFdKLa0+n_FJk^i+5`gXm_--vVHo#%a@SpN5` z(DFlg(ixprD4}rl&1vQK+8Z|OM@RMJ<JJ+IGDhbZ!<<Qf{y%a*b8iu8-bPh8d>egh z%y>!f7Iuc-WSa6}J|r|!yQu0FFe1rG)V+OzFS#@Y8hx?kZ^5^<d?)Z+;@y+*$%}m- z?s(Y2Jy3IhPi?WgeOi3L_Lc#Tcv3LJ0Fqa&-dRFxxxPUwHL|{pm@Rsii?|x;wwh;0 zbKRojzJX_d<oQCARjX&!CRJoOi%ML5K^c{*KqO!ybe6JjDBsynD^{>{p36h!^oI1X zJb`@qm#E?`!Q$Ew%djmUOEMlj(w%zav8OCEjltDKD6+1pS<3sZi^lPJodVUId4DYl zR;>oIIN}h6>L9d2oYB&A#8d#kXS5&$6ww9g^Y*uYh?{sF0gz@GI-bkMW<pre3axsY z@)H&L$TgqpofMd;$iP&NLYfZ)Wc|X-<a9rNZYvC&w;nDsS(x>fy^bQzdKEzUWH0Is zMB>qpf@;YG52`Rdox^$)9Y1#14?pwg0*a~vSfUjS9p_X@^ug7~t{cR!4g>W;1uZ)C zr;N;h%pr${cu<6IPdx|&I4-dWnjhkT$NOl*0TQUP0~?m{X#KELNVOWDkTth@CxzxN zvYIt({*a_vBh9TS?FfwObz8lYUQW0$>+N5vjuK-y+2h<C*3-e<CmGxBL-?rBDR1Ly z#BfC}KL<iDv!e>pH5X0{1y4LTx+HB>WipL_V#-BpctdC4D-<%C<^d>5b1Js`R*gjH zXz-J{cy->S958^XpK{47^RvPUv~j5EsJzA2L|BRi2oTgC^#Aqd<Dh>|E^aP+*B`%J zUKOgSOA>F<25tbwUC*_PrE!53+F7G$9gQ*2xI6f8^SOU{ZG?GiMwVsGnM(r`Z)l`{ zt=29VCW)o8a>pXADy^j|qOT-t-q2BNEps7grq3|5GOos?F5CWgr$i7~U*8Naiv?On zWnqO{afz=tBFTk~GM0n0U{WNuROyuyTk0K?*or4LUpv+LhWr!l98=_43Zb*Azg#Py zvIYxSX_1f&f<<ZL)h1(yHW_;l&d?fvACfLq4U~*z?rd^r`&dwJk8K*NTeSB@m#PgR zJO4*{^}I2@Nk|qRZ~P~Pz(#YvvO!y>IZH;Rxw4F|OB>CYOsJ9>wd6%E?3+tV$+V?m zM=FBbqeCJ+D2?-<oWM@e0<1a*#%<6Zp9)_B%OlE-Rk;L{cp-@XUd94-69Zm<*T}Yr z$|g-cXAoj-?NPG1W$Fn3MdvcQIL*l=utaoOy5m6XD_5)Rq3(V@?uQt(!6pxE-|=;M zMDr4KlICK|Mr4&tXb&U6FS<O<Y4#B(>e~=_1>%Vqr9psVj)@@dCQaied|7<>vW(du z)I(9_qd6d=BNN*M1}8e$HV%V-4qa9jbwEe(091-DSO}!1eh3G)(N$?q#*$HKxx*F2 zR;mr<Itw?03t3&^LX*TRSFaD07niaIqNG-^o?r!GIxr6yD3U5=V{;#OlZW3c^({r$ zrHwXCHW4xFpf_4cUL*=&sqA1);X-2v%V!7q=yrw9MvH=S+S0O?c|o9mBZ5=QNT;V8 zn5<Ya02f`S<_2-$b3_*=EMwUaj98bRjM-5e$xD#-H_84rlKt9fooAigvZ)tsD3fgB z){pm=jgZDpcr)LD&WKC9*z8a;V@gFBCOX=~8J2YFk(jg|IhH~DNl0)aS~#%X5#+r` zU#$oG%(t!Ybk-(LP+uK?H!YhcDuGEc!BafAz?hURHz_92Sax4z9`870hdD<21=z(v z0voa8{PY&$WN`Hzk1T>r7F+&7EXXC+TsF%p)}?1GD4CY5G!TjfM=<Bz4Po|RG_t1+ zp6KkG;82+raxw!0ykBT(&cYEj&98EOrKs!quNoz$#Srym9*C!ZuZ61C(gfMR5680+ zOtp!sVzH`H8K7m0)RJ^7YGF!AJX$;wrJz9!xC05N1e-z2#m0sq_SgT9?&q(c`eq{Q zE+RwkE~t^ymC&ww-s-_Y&DyA}WB`O?TKBAUOV!&Bb!zQq)ZT~{Az~;8JrBqo5c5<2 z`no^3`c`Y#e}l7s7vajp3VrAIy;}Qtf1msc4oy&ptA_e;lKMbL>UUBSS{&8Bit}?l zCN+<`@!MsqVeZXww|Um=>Z6(QNTg|WN!r+z&K?>|Xixx^l42@SqgrnqpWxV6A7xK! zr&aIJVXFMnGEi*B=N3Iam*XO8H=-OXNUCRyAqgI6BZJ9**zQ2V0WUH8hJ=MzBPAGg zq?oYZ#^lL0Vz1n-@IsTvJqw{9C6lM#p(amqLz3b^#^e=h@{$$n8w5KTAE0&+9WG-F z7X_TJES$+CJ0L?Klk688d$`>va=g&NH3m{&1F3p`&-jFVtgi71S-JdHYFlF<;UreT zdsZ-Xw(m@Tl;>@su#?U9dx#%PvEu^*QFP;%Y%6777K%GMKWa9bNufCP4)sg;rDbZj z97l!<7mdX~n*G{Q{X(BOax(IbAL^}5SgUj1KfC$x;p628#lOmXFo!wgxY%NgWqgY# zNj{f_*DZIIyw+#)u;mHJ3KgqmkzN{~R8dtWn49o_E1koM)dJC#=}gKs<xt{Uv3et# z)LOi<ADWOpi5I>sV_-c=n9Ra4Db)w<y&?CWj~TBajsPYj`)>B|5G`g;1b=ECMGhdT zcT$|tYQW!ifxjJsM%qYfvgV0{BMcPL<KRWAY*nGDo=RBjvJqo61Ka;$S2{asG$ZE| zGWn~2_3Otct)!Ts`gj^kTE>_l-ydyMH8iqV{=*E<n<m3Ydk7u)YI9&Bo~k!mXZ6OM z3m9u0pVdy@_vRO+GM0;8vsphDcPMM{Z@_&@Dr0#q));zYfS7!yQLB1X?N-G>Q{t+a zbd=)gsSjuP%dmsA0~UAkD?5X|0QSgpC3wPr{2LO$5S5|5bS?$D!V;BpZUWAGxs_h~ z-3?fS;N1ty9=|*HhE!&PcguW6+BDFB4QLgSAjo_9SCrPVnV%xYQ7&5V2u<hy^KIyP z<KPyY>s$YJWdC>@<>?Zrs~@#P^%N6n3|6^B^&QfXM@ATB4LvCX=Ty#?x9U9{M8z?G zLF<Z33KG*_Y?A{C6^t9$Fm`fpYWab^7uvsv&!is`0c)=X2(J|8ISBpRJ1cO8w*cmE zDUL@)zPpUmQ9I2d%DyzPG+93OW8n&+9weM5F71TIh}XD?<>QXLKWTP*h4h2wZ7VFu zjQp@d8xCrP12M*qi-)z2$SlAs_9AtE5_-(ppZop+2|_EJ1@v(^X&RpXNgk~qHo3EH zmpyFb7eRP{_8fucwI)o{?5VPr7%)(SLvjK}y|ZOuBRc5!j<+ZWe+8ydh8?E}0Tes{ zIqMfjPv5!UBfkJ+{9NklGab^pXdIu{bMkicSlAGTJFj$Ub1fdqV?}$kBx;|3{K0Ym zKq{CTt3)wCKA<p<#q96@O?mk=iiL4vz1uu)CH9cNT-y}bP)9d0TP-8ZoU$)DvOorJ zk18j$CsXfmXocjD<M7vl{MW3u9~O{|%g7Xl$=lVv%AegoyQh)=;kEu?@MX}Bp|>3A zm7#50y6o#e_1RI)q&xU<^SOV2c}+gwTwRm1KIz8RDi{`VnRe>;)5oi8MP=ny-j^Y- zc9wBtbR~i`Md^}_cvDTipiZe23{#6X92;#{31DgvdQ%7mal?^<*j&8`wwCgh2`E9* zMX#K%%o=Lto|eq|g;ALQt|+H8$k33NrJi{PI=f(a9^~CEms1;j*C|_n1b`MFDyk$B zDVEfJ_5}<%NKUfj!2<%z7RmtK$$8_vl~)urhoyF6p$%clwe%fKuqHO}F9C+}OQ<oE zU|7+ZJA-hC1iu9T7Uf`N@b-ws=9t?AYx4E?GxYFQ25VN^3GKrCiAG)<%$01>O(+eH zl*(p;3WX*asX`M<qeFXt5rC=2d$Wvh(PlkEMJt(iZB$O@#i6t;iCtjnf7V`!L~Iqy zX=gKE9$#ai)wBmiTRl`p(5*cv8GXddsq)cnIh+lUydXH>dub+8VQg*I*;%8jE272O z!W&1mM)D9a_3_=Q+)^c)?@vCAk+p$BcRjEs_F>6fys_;*gpaF#7o{7ak~I~Jv5?D~ zPoI?Krb&Srfd+YkjaqG@wZm$L`3>{;FczZJCXX$s)aKW0_wCXG4`a<vD?R9Lb=DhD zpNECUqfZs(E+r)u9j*=NFt&_y7h{*KnWj8(2gCa9DN6NJsO5xEs-gnKbF0gnxT{9L znH2yz;PF1S$M$`Hcv>m)@L<FGa9nQ89;06d4K|0)s9bu#bBF?Md=?bE3{p%>^}KGr zZ7G8g<+EL#!>I@7SkWFF6LJ81sd!kMbbku7t=MvH;JguEEs8;@_|}d18tV(FTf{vV zP;+S#K+F1BJR{rkLmXsSE(~pAC$AGbDHo<TGQCwHUIVOu+xZmPl^IwY8QwY>Ht3oL zbWLoFR}~<-c1D0fouM^8^zQy*5BUre6F)KW6CO2?S!4)(3^;pzgBY7h{pi)%KGzRX zKXqH<fALu=Y|a=Qpamx|*40rPI<>%c)|fE1k+hYgk)_NSn+4=cQUkcH3PmkO1I)BC z#&tco=_{&#GEKRk5mP+Igm&W@mX>P!hJjk{$LdkCu1a~1r4@FLRreX~v*L)s97xsS zV^bBXq){@8WC?LInn!od!=_I;!J#`FkN2>wBj6me&Pdu#_@NGmt>Lj*k5J4FlebSR zFxQryN45P4Xj80|>4bs|!{r#HN-9<|a4}wOo1(3Mv6Mop9R?{cLo2XEf3QgHX>?86 zsGha4qJaUr!@}|w=xZyD+Z8t|B@ifA8I<C&>tl41z>SDEuqA0nCRzbiPQ?>ll}ah? zkaZ2(1aZ7ZZ1}T2@<WeBDj8YSv}>AhrGcOk2&$dZEaU7Rv~6e%V#hOUqh3~`(2{AL zxiLt8DE&yIgA@QJ4C5w>saD3C3hgk$y7MCWLJcE`arO}lr5z)%Ajyulmgz>V7a1;X z%yDO}f+1s=pt1ric*%z2twhY_Zm7{s8!6K!<~TEopY>5gCg>12qk++@Mz3md=3wdp z0$S=-(WqDwy&4M^2@g_HH~QF$VuQIQiJ9nsL*9AIm)a7#mZM^VWjeL{&3l2>M$h6Y zUyfsS^bz^L+vC9go8rBsiH{rU)>68aPXCMUrz_L326Jv}C#+c^?JRm-q<d@y;Q-DI zvVD8>)q1eceB1g?8<U{5|9+4BLgofvQ2-EK+twu}^my~C4;seUKOoYN^?enuZt=Q* zVy&h{_k5S6C~#Z(HcsEfi0`((eq8L5PjlJU_m6Ks8)RZkU}RWu*-T*Ac?E!LbZNnj z(MFdBjyf*@;*5oj5a=*nT6nC$h*_>;7PI-uWf%+y#EvD^1_>muim|l5UXkwbY~4{8 zCN8zLu6rDVn`%r;iaup`PKS1xUlxpi+DjZ|LjGt?roWQ-J&5kCGv`Ffyoz+}CTgQ3 zFhp#HvOn5b@n}3#8HaN~Xfr>xDabW1Pj|3QQBM*dY{WDtN6per%#n`o+y1#fI9-PN zjmR5(uI+l^AVp$?7;VHHWgMrZol#mdaFjhalu=b^#|=?cu~xLh@J1<%OeG6{vH%)2 zHTRgNs3LpzFop!|@nhG0)$r&RxVgqhp<w%!8G$z)O6tM@PLR)>PAk<8Vn7rGI7IPW z$sZi|4;gu{d_OXAPz)s90=p7dCkB)nZNi$EmK;?u_hRIO{dCE4#S;imkIwM%Ifbb# z&%p3r5H-1JYkq{~P}~%KBE$xNhMR2D|Hi0q3}@B%qd2R!L6*Satdh-UFgUAyN4o|x zob8Wxn73Q&ZB~-YhZLM8dYTm=qE#<K6lWzWOl5fnXBnJDS^QNPp(KstdTYi`3cy`G zZ}r|cFg7b40T;O_Wzy9<^vn}}3EdEGP#kvz-#51JL+I=)<J3iI$$FH3S;$GT7o8xi z(pxULQSTT|VDr#Gj4t4yX7uo_VCckq0$w{6w%`PS5F4B&t%M+i_K*~XTB()daHLWy z3hgo=+|yE!B=EE#u$hB5^QALFUs;%wJ)f6V(lx5}20J>C+J8xc)jL#z`K5B3dVS)l zJdCzXSec5JXr>2Np<@JpSU8Z54v#KRANr)Kb5_M{pb$-{-A$yjl!YhSF*UcV(&#|0 zrqd;iBTQoWVU9=?dC^8SBwKD8vy@n*Oex~178j~bPx^IAWTX_zBnAsJ)IKHg^0ZMj zX+nU8ywP;2KIG*t00qhm%nZr%6diUEx+|JksAq#TG)Ed8gFM@R!C!%$GpljdM>!<n z$!F$abDf~g8k2!E_pKCULvx|<j}{~5S-L-_)s+PqsP-Vl+IHWnrKz|#oY2~^avG?n zW>t8w==|uoar}Os!j(+6`uLV5VR`{AX>#blyQ-oAzfmo%NVb%4VW3RAG?M1SkCs@K z(^G=sIzA8O7h;Wn$McCPE2&tvw3#+KHJOk!t_FjOR|_3itJ<u!BL?*B6e|ixl_^T? zXhzR7-k{VyL)%}<M3Ht30f1mW5`HhLp!Cs2JEep4Aq%y9QLfTkg(jQ$xN+BqNINAv zD)VXQ=urDzE`jQ#N*<`8h3q2{^)e1P&<~Adc`BI_%MfyZze%*pAXW_ey>bz1By6dF z>}tK^*s^EtawtH3VAtI3I#f?!++;$OanGZr6+-VT@}duur0A&28yS_Pgi2)u?U2!$ zvuO?7(dcx9Y%Rhjq%Vogms!tmL|${|GI}z_otO1;Gj7PMk>d7d;dB=ADzLE=gt1JD ziavA;J0{0}ylLEc$zfn(y;zB$-SmP}A}vjvFHBDPLBp$~uey=8bHEl$M-=mg<7ak) z3M`uaAWy_PCDKpQuhV1?{07}T{55(Z@<2WMK>a{`-Lj1>TQ!T24Lx1bWL*GM<xF9y zs71vu7fVAeEvTiaRzov=XlBH$UeU)3r`dG@P>h&=X(MKUAs4YT@9r=5Fa#<_FUb#y zl#BcnzZRvtKJ5GQ^M`gP%AlTYtwFzz`ocKH+PA}*@5Vw4`tT<UljtH}aRL-8U(Mqd zEw`}T2giLlt>DkJcWL`u3bhokVq>%=pl)JAXks?HanY#N&Qf*^9-TnQ@Pwkqg!!&z z-8a5}YBe@=Q9U}j=qBx(`Z(>hjPKj@D*QRN;VWq``n41KcCCs!WFen-p7(uX`QNWX z%Mam6XLMSjt(_RZJFVPad&6e^=%{{t+-h*`llY2ggqEB@^Ct4YSQ`}m-Od*V+a}(~ zxp#(E=y-0#Qiyl$({aD-P5EN*E2iSbFkYyC?vFf2R=u-i=j4gPJHl}i6f|4pj0Oo@ z!~(Xpe!U@0uzu;jB?x6bg;0Xv0)NM)vdN_~g#g9`PZpR)uhBn=&gJG8@w++bh@2c0 z$4K`x_ZH^}-20$FZX*)x%YU(1t6p3*<mkY&U+&wW9_%r|q39RC;1!bt*n9f~_0-CL zJ(AuS(fG1=kr(;gwl2|`D_=vR%93BV()_-7O~%#om(pot(H$0#qg==jCvPXA^iS~} z;%nn?vE++Gk33pGY%=u5vx!U7Q^X30MgDVUjhzq-$Ks|1mg0vqwBP=){lJR6P28L; zjH9t9cyiRzF&Bx*PqiAx<hG~JaS^wFC*4-_>}YL}w+&DQWYI(2PH|?ndRA>xi}tkM zBqY_SEU@a_dMNuQY5u%M;pe$L4D7riy+?caoqYM1h>9wr1SaprwaIX7TRs83{os-A z)EkdIWtk;XCObG{Mio}%=1mY_UJ|_4xS#map2vJlHPylYtR2hHcDon01ZuH=<2rzz zL-fWq4m_hna)1EQ4ISvV86Tn_1sS3WyHug~#<5#tr;=u_Wro0~R$yVScFHR27iOln z`|)%8d3#iSU#-@gnSit+YwNS#vZY|G`@Y)fc5~8rS+8Pws50g^=YuW_Taa^4!bh8+ z{$n0FaRM^2MmF*8i94IvzBA;1o^$|pn8dZ8A`cIJ+Y0T`0eN!5NBU*8AQaB`g9YF2 zLpTOUlhK>vJHZo}+4z;<fh*DlktALAbZiCTz;;KrZ;!rO5B3>s#dn&43p=>0byyo1 z6O2OK*|-UKky;kmT>K0-qiYx84veBm;iT+SdO5II2UZ#&<KWsH*9jeeYb<e#veZOS z&lfEAK#H8IcTxo9%b-Lz-y?~G5>jQ$_vkM};j9mBH?;k{^2%8=;ZpM>Z3Gu3*Zb;w z-aQr9NL(34x5DymknV2aSP5aSr}oIVo<O2OQ%&2B3jt@)q0rWG4PslNpU&o=KFvR2 z$^gE3T5Gf|clhY}A0e54*6g128|NpO{KOmf$O-Xsz1paqo%d<@d)l^t4}lJ3_&eOF z*PGP_e9!PF9A=41;)o^Q;Hmq2C~WGpXCXWX4~6t!pZ<G?|KfV5?U6V9>O=h#d|icV zq|?gB31~1<=MM}oe|+$*>7z5ez&Je?dRgrU>B=W>_&q?kzzy1eutkqyIBmas7YrZm zi4`1rQ`?1m_ntqoLio{tc*l2aGJaRDR*&CJEXRdE?e!j^e8KJpQ+RV&5B~Xg@Pe!U z{-%FbTFN=vJvc#ajRj1dAynJgfN0=T8~)E<3qEc9ZSIe+4iJcaHEac^70{FAci=Am zZALBlgScJ%H!OUA6-J!+<}UWz_r0e_+ZqL8&(&{vhd(NBaW{6R7tVN$n}?r?-?k@r zHgFJdF?zBVGU=xv<e%8C{;ht}tybUH&))W$)!y4iwbg&yecx!kZB_fNMzwKL>(zRH z$KM9lp9MC&xHUeXI)cQtMr<!9&d~P)?>+=SZSu~$hg`6KEtm^ft5)T##X^mgpXjRr zUoBn{KH?(qT?2nO0Nw+>gU^rv4~LKV@gCO7ufxOh8+2n9dx6^&fMz9kPoE+2bXu`y zp+`64_j`YW-vcj5Kx%<>Ag)yW=v%B5W%z^Q*Qb6Eez3g>!4I(4@TT<Ztsk(}C@Vm3 z{s{gx*FzeA(Y1_S<pMm2SLplW8}pB_0Qx0dv{4@9pW*Xd!QtnH-h<Eh9gtN=w5Fui zRa-5``PDnSY{i#{1XM?INA^e~(7z<3x;in;$*qfH6LvnX@(VpcJHn6S{tdcuczO6} z`PL8+BY}L+J$!=yut(B*kLY2t-w5EpzHbLp&mB>J@5!T%MKFad?)>jFKa%WOLwHzz zZ1E=S+x8F1WtUiBHLcOe9)T~5UJ7_`=&;z<@R9#j%tO%pG2X^bMf_8DxS)FiMl(R2 z2SzR{{U-s_7a{cRcL>ooP&>1+jaYY&j2Baw7gKNc>le*#FXF{i`xmW~TK@tt3*ZRJ zi>bYTKRG$6b1&w&(QKUv&tn}YrY3+fb7H6$@r)Be-5TS>Y=IL)sinFfuj0hCD6lq8 z%nO~EC6c^LKFqrINpl;%+=o%`r14=)S`$N#$@7M?4wAC8=Ai$tHy;Q6b8>NW*}MMu z<?`xzWUJD3z-k$qXVr`IKEA#mKv}dDv{xU0Ps0YSDwuMZAX`97Q`WmG;4W-~*a~HT zwDJ8g_69*MYY5@2DY##@{{y0&asO7E1<`_|Dfp$6TL@1Nzwf1J(^FY@Gp07Wt!UlW z9elX?+`qgwDh;c&YbP|R1GToj08|qVjEigW%ok0-ux^ght28WoXlq-35YjdbUbX>$ zQ7afv0BsDRG2@2kUr@lLf|XkHxLVh!Osf;A*;JUnq)<#}jpa?TQW(mDXc-jL2hb=y zBccev^8zBZ)J!2P8YYCFO4>0?$Y%Ty^uoGs0F@Cv4+<n8|8Z$Q6^i51`XTx&FsZOy zVRNIuV%+!2JlR>QzsAlMsW0Pk7OJU#AUHDUU*8Na73nob>Opv$OZ$Xl8qTx{ytanJ zvIjO}1&SmVeF4R?wozb3E3p25bU%On)PH%zOp5oL(zSMmZJb#rC|KIZy9@X+1Ss2w zbPC5FR7lmJ+i|bfZtVZBTJ->-OkI(9Nl`-?tC*goO$s2{mw+V?_bOfJ?yQ`D;XmC< zbj{i<5T^7eyuNUa%0sgKeSO2V$xQewL6M9yUim2ZYnnBRWwXrb2?it2uy#yLm)dgm zx+Rkh@~|AwPd3m|$#nKW_%=!h8_cuim?v55zM)!|&98V42mwr3rJkkgukA1BLJ-(& zpG4QAkBU`=wVbe2Tk0gsnn5^!l4&#u=c#Q4LnoeCdhNhhIT22>NFwYxSZUQF*;EF| z-=8&m-E)lqd89fZ)kLSL_7xH<39+u`GC3u2e$;FvPcBmKu=-tg2{$0AU9B8(TS0MN zzuT`J)oBNl9$sj&#OqwYd)`00`S9W6<p)JHlbM;F4In5e1*cVowyVW|=qA7R+AxEr z)J|z;jYr=tFiW-e(E+)G4~_QmKKXUUC_?h9A_bBM#MM=+bzIe`f-hNJv0>fOQH(He zF}iqdO!1O+z9CoyCq`(Jk$pFNz~g+BbsANds+2%;UU<XO?JIQyq~=gt)Y`QpR1*r9 zXs-&Q#k>++k1kYmQX3_IzL=o_Y^yspjS^S8iZ<yq(wrBbRpMhigz-4RH$Z&985NEL zVn6|0cy5TjX<Hc?T!P#T4xf)fGAjH8>-9|kJCkOk!Wk>*>5wO(aBbmt=emD&9esNt zs+!WLbTJTPNsT3yvTH&-P4HfK$2iFu!XUTo1L0gy8vi!Vka328=3U0GoTXXf@<BO) z)T_(GlO`#_Js+dO5oppHP)yixX)d8Ngen{wXKd`5q5nKq_Kh0HIF{zbHfafymcT=5 zs;%?J*?DUo(_)Tt<K(yxW117-x%xP*t>KqYAj(@Prj5A6gaY6G&zS=Ul`U!w=rF`o zr3NZ}<!OlOoh_q(JdCn?YTxm0sI^Xbg_EF?=i%i;`K(_UyFHwHZO&zlpQk&v-G}fo zwg91mm|l`pP4*2qo0BBIs(Uz+eXoMeg3?q{08=n_fgU<5s(~u8W|wVcyZ9RS$>}Mn zMkBA=`u?h%qu8W5*H=}3d>nGU+dOV1ri0YS)9A_q$B<EfKF?N1s#41LB}Wd(;O&v} zp*@*;heIo5a}o+<;cOPLBz7@{;|%TUUggj3pWV~Q|L|IWF!(Zvj}{a}L{#{`RX;h# zV-mQR3;)S3ai0|f0tu6MU_S6XN>Q;yU9E{~N206Cky;x;tGLOC%;nC_o!;D}$IL}C z$IVCUlaE(_<nza?t7r=YEKx9DG4iz$#nP_&<0ZNNQ=be-|MK5H4!&ICB<=#aG8--0 zS*9nWD-i@_+9Q7}w-E{BLKnf9iIwImaM{fLD;m;lv|TF4=N{C}K{0iL(3|efA&u%# zq#?Fq6a}wKnOT)L(zI0-*dv(rhHA+He^)eCdYYSmaG$oR90>Q}!IqnZ{LbIkTHT|h zV6S?IN<6=WQ1g|8y_-wCY9cj|c=d&sx<8ixa7ZJ*eEi?#&8JVX{-J!Fg*@g_#ak|* zaV}Lb8{F91$)ew#<F;0---6>P0g*=zu~HwW?9MN38@t2MMrbAE2fVbZN7XJpZ~O@k zei2uH#j!6b8Z=b4lH@?_5!<+<TCLH@t2;hxX<jNER50w(AqokeOdw`tCJIS`8?a@P z)35jIi>#o80;|fM(xJemvXGCyER5}Kn;QfBcRcAWfTKC~qIP1qxN<<KBk@mD-@6;z zlYO#!giNh*bo9QOXSi@9=T0RmMt);jKtaxbTO5yyEoDhOip{$lF3qQ55Xw+3-H9hT z2q_Hl<pPF>6;eaApTc8Tm9HG0dHKu}<D4S~Og@J-4~kQIb0r)}2uGEV3OnjBgS&RD zk#dbGoo%(9YS0hu0w38D872m!7{*o*U={H25d?M!ZM~4hXC(_*(yoebB-USRwz?;O zjjg3$Y!jAPl;tBR(3Wt`qz|QSI2?1&wpGd{hRlr8Ehajaz0w7t4F?b&v!NL7tMy=? z`L^|){u!S8H|jX!to}wYJ*J5ybu2Yw7;RkXtQZJXa&4>vT?2vh>O|OF8^^_2>jG8F z{ke#b(3;2V!A(C3-Sq)LY04h66gE?T4v?q685cHM4v+%gW=UfcQz(|kDH8tmM(eEJ zz}KSbE|$tUKC7L)@69ht;r)wVvsphDcW8K@e*<c^S5EmVIg)~MVEHKY!d8MojW;BK zgPn(VEG{FM0wJSB<?LH43SDlc*M4^sz~HraA1r(P?%W&BCN>Nmdl$9U^75;H4cLIZ z3Z4sH{uQNluxhd8q4kc?bUrKiHuSu4a0`QkZ~fbm{o`$v%q37)KWc|7Poyl5sJ=rQ z@+r`avWA|NfwPNB6{>m<2T^g9O$^t%;*x^I^cUOYtU(1w{m@W5^gjkRlqdflLc-+5 z+th18l~XCqa}fHscUIsGZ=w8u;+EDSpdx?qj&KNHR>ny<{Z$A~snBY&*sRXA?V=(v zIs_beHfJb=P7hzw9#2mAcpIrG*lm^4iPX|W67r>Sf0C8Q%dKn4ZAtt<EZLO2KWTP* zg`A?3XT%EQJW!Y7{IEisgpW=@#*S+f3wlFl0ba2e(_li6u=W5zAS^V0LW0l=X90cO zxyPq}l1J-@P3~;lWe>wRnOOi;_xLsPFpEelZ(;>Sz1r%XB@Rlc;t@tQHQdM^Mqu;G z;l`{}U{Ym$KCmt87e=OnoE`ZE7~|(2t%2IZ3aOP~bwR%D<A`}IaG(6aasNOnxG;81 zS7kp<ZY;voyt!oQND%dZaTZu#Y*iAc7o9L$t9L}rJ4qZaRIIWuIkJ5QZ;$Lg@1JF* zK~YZM`UNb31Z$22$#J<ER|?@60$RM;9elXKF$CoE&DAwI>ys`y?_PJw#i0AS$ZUN^ z{Agwq(6lA>`In-I?bodta=WBs^%2h(&n8ewI^b61MI3NaJvn24W!Fj8)s!kA>dveE zL4^fqSW}cLL@H4j&6m$6P#@p2PDCZ|kby18UFx%bVWc^mO(48X=0~P#+*V0Dmwws@ zBY>q;w4y$~Wt_0N&!YDHNt__ILTE?5`h=39Dg)s65X*oLch<$Y?I2vG4>JDD9Xmm| zwBANfdUeLubUOZjNh1Kf2ERbcY=ofV6jBQ#r2w&}v{BcCIs(DrRA>mq&#IO*N_EM+ zXR&3PG6Iwa?K#A8;hcFsQd!oh(a07s{<b<1F_}%a7fZ7pjD9E0<7)jZr{>GeF;i@j zfSHD#`@{A_!fhaA4Q3M;V)Fq2DBgUk=-t;5_M)Sc8S4Lk(jX|kC%#+bF&|gRIQ^TW zu(kd+`8OPlUSW$X=p@Iioec!DDzwm_ENPNEd1Iw|{g~!MA1xP0nVnW(l04!O*xk&J zhRd2KN~1oL0R?6ez8w(fx8l9e3~d|=t`)!-K#mxw*G8A6in9R^Jv@ybhC!TG#K^oc z2&K4YyKhy0j8+=%Uppep=g|m1$;9D&u@#!Sj4uz(?+(q?L`G?ZKiTxjk%Ho_-&$D` zRXLY7_L@vDB_JDhp7a2dNHIJNOGPCma55Bfq(NCmr*3U1QZ)j|vQQPtqpRpH&}ks` zHT=qrXkK&#ZY}++Zk=R5b5u_myeOwJRKD)*p?VU3?o;hIN^5BhAo-&;nf^)-^b-%& z`9m%gSNqNodf@&m@&4R7t0a7h_)FqTmVC$jcKkJ>->^>#=FoBmIar17_OtJ9SF(P* zh$V({B-uuR8&yT3=0TgH;0M4%Ilg^1`Z5`!l6gHY9E>KH;*!tZ^FH}<LF%OU<<rgQ z%c}!_(*Fo$yaRZQU745gUP49h;A4+;FVE?DV_)F00{3Sl>c$<E0qOmzJLvYV`-21W zWk6SS{qJAIHbhrl;6k%ugw*G$<;c<*lPt~AX_1tH4DEWyM;G(<rxfLBdKpete-#7q zHlnZk!l-axT%H^uHVgbU`>pd{;#4j5@e~|?P%9eTZ?vJRj*~b*4UF>r(MRkH4vcC= zb5)4SLv!%#pQ+o-pN-eD!>SO1R!atC&v>)Xd8+%|Ro#n>$S1!*sRO%K0aq11NfVp# zW)#M#s-fGcpB&{?rbQFrYwfAZ<Y*~yjbo?CYL1LvJQiTxRy7>o^EJX2%ph~F609bF zL$VV%vS6zrSq5ZZs+99Tx;TTkM`_#b7)DfOZmYzmv^*a_e;s`J3jTd`T|zz;q0Moz z88K(X0!CN0^$SSG2N;ovE=6AgNgyP;C|&6@=wJ1(uRmUXxH`np(G_&K^OkoAunqbI z?+^a1e@-rdl8e^&t9ii9B_f{218?Mi%jKv4o3_zB$8F2d2c=L=g*<2t@#R<b#K;K2 z1a186#&B+4gBpj0n+9!UV!sp)>J^_+_fCR^+bYcJ3!^X>9Evg10ScZDV2=a)Z;FY2 zslMKN5zYX179+YDyeNt+pBx5VJ_=o9wO!4V`cX62^AXotP|U00-YDzmi7qLBM@^c| z+b==;Z1$O`BH8v;#qC10p*3%<p;u~7<zY#Cs2-h(2iZ^0*t@laFvhM+gfQiFHdE8m zgR@N>+b5T=OE2MYlVvq6UoQK+oP$<)eEtG{`SqW=mvXTS^WB9DE~eFS*W7sH&PX}i z(Rky=8$Y3A9Fm5)l_PVWBZl06D6|$cW5yd_(Jrd)mV~(sdCf>~3Ns(OZs43&(u0|7 zr8gObV%-b0JLu;D;%M^dTdVGk2{6EZteEt<mT#lFmJshrW-C5iebMR?B~^}EajkW! z>Ko%&a1;@1u5p4xcLw1s*P7S?ZT5+uGm_(Sveg2eHL7ZMCu5>=w`9bBRn1}oC$H;> zrwp8keD@+7jsx=WOq7I?@qg<6n{eLACCrS!GQN1k7vK6!ONN?K5`BGCJI#!5R{ii| z8k>yiGZEwrnbIW0S5ItGF<dbsoDtXrHw@<@Mp3c~JB&l~>JE*`n6~j?meRGdy@u+@ z*fOxXWIn&?^5)YgMVX*~Hbf+owhZ#cK)}S}iv<Glf!}l_%^L1KtG}<|#OyAvfu6jy ziO;{)#S$P0bk?c_55$_4jo1>{FJ2e1pDf`+-ifCOdA{=^UZSt$*FK=`_L@UTH{nB5 zt@~Vg%S%Z5)Q${DRc+=gI48#B6l-#54=e{5zCD!#;s?aGhL7Zbl(@e4loTUJb-T0p zLuf<X1U~0mwK=_h{k&1j>9~p)H(`j^MUnPq;dB-r(ts&DmI*(y19Q0vI$&+zFAqF1 zd&}1@Hl(x)U+k*H1Y3wPSduG>Dg<#9if!TBOWYb=!WO<QBpAoxuW!llnYd5Cc~rZ2 zzm3`<(hJKq!6BS~U2}+xqyr6<cSPBI&Pp*E;4~3}v60r=<`{Z{))H%0Hew6K>+kC| z7qMlv-XArO8kxAmC2>Pkvh)4f60)c8O(4QP99sb^-~eY-j7eRTsH`12$&gpJI&|{P zE=#~hb6%0q?(oiWN7SKF48`_DTAm>aV)$?M=(}r9pWmW?>(NFHC0ENG#Og0KClCsd zwlwN|i@v(%)BsbbtSAl2-3ZWbb6_q3&~AzL5O20#B$dI|le1Q@cBCC_eesE^Vy}>u z6C-MTBesyV?(lG8{jLb)_Mi!|ufT)Jrs^3>wY}R;LoH_4S>bN3ttb)?b%4|NLhEj9 z$3k3ND49urs6{pX+soeH4h(M>%iGEN5e|Xbe@z{^wk1W>@rKy<_x3P!?g<F4Gnq}u z$cFRBF>Yc93WK5HMG;<APh=no7<Q<Z8z>vGb&3zD8xCxDWc&8$tMy=?`L^|)CJn=m zdk2Ahh42Qe<kP?@TTO#iq-h_8VHE?+<smDDZTnk)VgO=JP2rMGNk%K*4)D;rsD3XH z^KJ-NTyJvcLpz@hEqml2|BqOIfeHW^6f}i_LB#*Zf5XiF0Dc@>tmE(Ak0zx{4`bFY z{=uEmEV4q!##7rFOvg@WTu#Y~u9ySxk|Iz^qjZeRDF%`iWh;}Fc<r}%{%Gr*jO5b| z3$!$UYb!#UK{e48K6|eyR__2XQE*A=E%n+^NJC2<Z(gFd8>YI_|9<=C{I;z*e#rtR ztK-*%(;F!{6LpaAQek?|noc41wzuGWV`_>vHQ38?*){uK^uE*JGN}6fef5|J2r(B3 z4A-{1%X8#!Xxaoq5+l#~VY?yu$Nz*7rl8S(iGTceK*pXQ{O8OjV@R%uj7vZQ51t%3 z_xJz!Zy$aMZn^kd_z=&)9FpEY+d)WXt^>b5!EdIK4*V{tW2OJ`#-8iK-*Q6uO)~k% z|4eMM2$PJR2Y2mEPKI@^rY0I|baFK^DGEcSb{T5?rPeNn$6k!UH!2(3=01pLc2mNC z;9KH)Kl8%q)v8)Ijf1s2<V`sVuzObRH@e%>niZqDx(cMZZ-+DAjfF;4d#hb@hos09 zl@&u0+R^LfL6A*kw0Yd3cFA%d9QWb0f<IHAl8(%P-Q1?5;Z)|9G_cCd_3F_{?N}ob zEmkdSMRIlIgdlm|maD8=)aW((CyO3`M^>d&>(?9a7Z)XMqCQSXfbmPT5R4@Yr&r-m z@H_aRzH0|On0gg;h#=Ne`_A*ePb~lYRcQGkJn4*1E43Qx9qbuCt=wLF!)E>HsD6Ch zI_ByJ|H6`r<Tw0(&&1uNSLMnqGR{O*Cul40XYQ?UvxC2!zgnT=xl!vPfxYK{zAiah zxVKO6{bMgr7Yx>V;{5>Mjuqg+=vpfz7Wjm&2mf_{PCWQL_3Z#XK^SezUNs<|&p#6A z#GXyu0B_Q!HktufEBO`#>ARx^IXKBEY2hlZV>_)>t11`Bhqb78QjCb(5xH6|LPu=U z8r^3mLeOvs8$P!0LuP>Ches`c4D$NgnX8^|t9h19^U7<n7RVb2AJ=}>>RGi(mETi) ztvR8pN?K@8{0mZHX^rihq>J*xX?ZRWHSQbId$fn&$(Mgwp=fnoTpRSbZTTeh$b(0^ zQ*S)>lx3#DF-%f8rWI@;X&A0f_?@yT;iUpm0PklY!6`w7Age-aZC03njC1&?8-P^M zUhx0f`xfT5kz?JzGNH36vLe$2A0j1}c#03mQ5{>}LrFQQ@@}ahY9!&BBp3jc?M?EZ z?r*ri?DjlBVep_p5d(9e*{!T?5LP(T-Cw`EorO{z^&;01A|4=X<~eo8rA6~F_Uv+U zWeTz!i##ajhQ44N#x6L2WE2?v-8$tH3#=uZIzV(eVw(3CX1aE8_UTw)+AIoaCmI*n z7@qf)rCMKuqegomD+HYPDS+_F_?+y4<{$Qxa3JuK10Nmoo`L5JW;ogO!aiC1!Ok7L z@#F~~Aa4a@D=l!D7qcJqFHm25?Nk$Io9~R7;YS!Kg{lh&;rY^k{{iV$@}O2nm+=3? z{u)&X<S+1-Z4Z6LOMh!2W163HR$vZj$x{klS027w&4{(nqd0^e8RrD?9P5rWE5O85 z_6mgD5md$j|9HN&n2O``q+_$zza#{iTqiFBwcenK`9D`@6LXACug*u8XP?h6wgw7~ z3F=@%R>d3OJ$L_qx}DLHtl^(B_?kq`mlkwdT~A3YM__5C4CHFDxmWD~ZJ1UsgHhk0 z!Q{i$C-eML<L(Sna6Oi5i{!CVJzWu|%HjnP-{3eg8>faZ#QmLW5SjvW5|V{Ak`jD! zdjw3*VpwW_gr!3%4}>BC%0zo!XnV9eMo-pS0vV7Vj>-yuOs<sSaSZNYD53$8W)NQ% zX=abT|ALqU#1_D}yv5cGeY5?C=qs#P;K2&Y2T+Coj0&o-pHdNSC<_ei<ZWpGvUvaU z@@jHkER}VH7wn>K>iQ+XU{<hKMtk)w1cN+$h~h4M%U(d7Z2P<gGhxO9<H%5N%U#|~ zqM``{#UX!xX4W|gq|P1al(O+Ha&G<)Osv})<TN`dZqX8UV1f19W16_(e^?hwl1TbG z8)QLE9S0Fe0TBjDdY$et;~o@G=&+Y}aGkWxq)vnuc*^|8;M1=kO&t-^5h3>xSAZh~ z)uNOi>D+j{?26zQ-`QtDwbDoP^3t4Kd@+s>VRq1e4Ln)G3{c#t&ae*|N$-nMCm&3! z#({CrgnwHHty&Epz?<BQtOh@$du+g{7TEC$pTW<I-c}GLB&Fk~c{o0NGQOA!<`31e zMPbz?9JMkK-Di~;BiTQweR&H6KW^3zen;<PTpy-m!)TwjM-_EQ=E0DS*^ktwN6MQ+ zh;=o86*?0L_a<3Wjz$MTJ<X<5nTk;<S<*I$7sJGEw>>;ni5a)+l*+MyKX1pF6h>A- zv<}ee;Nyi^a0XZh&vft%+;V7%r2l<U$AOryCH%a1X5g@W+Gvnqc&LX-n}NYF(ZVXw zl9f~W%|Ht8ym(g|8x3u2*eBWMugfzwNc)g~wl#FfN%fFZvPyX}Kv-;j9XlfNr?tL$ zF6vMY-;dlydUQp*e?L8W&fPza$b5)_E(=vU3Gf^uN5lCVl6eoW=$>jLSsTf6=i%k; zT!cz|L{=_KrGC_PS0)|x93&?g$w6`i5|1u^6zykiKtmu=WO0qwKOe0#=TFA1PP?;z zjs}OzrG!t|C?ocWh&o?R79N&Xk`6kNmpi7>YM!c-m`+AFmCI<x=J4vnhqLn!g2s{F zFQJoxAPBmWKIdd0tz@Oc{%Jqp&o2s7uuw(y`mcTsLXZ(g5Q@LTZFH=HP=LOey=4r$ zr$dDb!jg4V;t)5*y$bY(PLv78?m@eM;LYlu%yt(Ds&&~t=$c0h5>R;YR;-}Vel%Q- z<xTClOYxJHb3X)O2|lyn7i&ZVK4y&=8qs*+QP|aFL%6x;m0@abk^8H3WH1SrOF79f zglNwuW;CQ}NNXH*n?1I(Csa$>?j4%FW>QE^e4XMPe^l;}nld^M`psPY&z0?eLTB^Z zXs2`3GTH1ReZ$K+#838&^0eCdhU>W;s-8nOyBx~r{e?-HwtW|CP}<ioA0LQ5!;5?W zA$9<6P)&GU)3`kxcO`|gcPB~wRCkbFs8%8a4J!v^_yCOo1rk~jYc~T+o2_%nvD-z) z8Efd|1T}<kz#e~p(KjbzlVwbQy$F7s8=C`I64T2^OBNWbr#z4^Mv79(??oc^<nZkY z<>`vr`V>}T6}`DWp97>sA$coy<+sIei<8Jd<e52{e4ZRX4G)fru1L+Ua+v!w#>dJ4 z*2wr+l|VIxGlMbJ=<EW0I=i@llqfnoN0)yy(FB?2e?OaiJ}2W;qa3+^|4@=9YtfU4 zvLzoWce07&_DsZ1A!ah6%`!L^X@rmH%21F@{3MGDQM6jz>AFPILP;0G^POdNtrkV2 zGz+l>Gd*C6oj9Ptp^v*`cnLTl!|q^FjJYwaLq^Ju_JxoUhUsRzgpI_dft)2^5%6J; zt^=o`#SjdLuV=}Y6bJ)<g=I_l{m3zH@;(Lem)^kY;QQ5_><Z2vQ5+u`-9h3`R`C<c z1^f}UDdM|qi!9IFT^WehlLF>|_=SPs$yPk@K%J7Gj|Mxx`uH(6?MWr3CUYKxKpd%W zfdZFIv2w6<jowq?F|&P|-LBbvnoSV`J@IwQ?)=fdvAeLOx7%ocH3kLjAZ{5(yDh6s zId5rB6%HyG__j`jge;>E=I12}Nnju|&XIZna@4_#CC6-<%|y$fA$+oDmO<WJq@Yfi z!I;MhSc@3)i@#d;c<5s5E4`N#ZGkaY6Zrem#hyo2_eM3y^y$d~qTc79m#%X&!}A(C zh^dx9YDlcXXt!E_M-7D%LNR=Z28iS+&b&D{75_M~r>TiNO|^v=FN91U*(8B#uy~pa z7+J7JRa7lQm`8-=a9O}!yK=i<pmGtNm=VviTwE?Andm6^1klP&*+#2p94Z8^G0@pp zFcrBf6-;R{-$|+hWK`;n+U9V)w^WK9wI41!j544y1Ops@W%K=Ekn_yBx2M(&$~ssP z3z=grVk)HW0@0%SuhSj$+Uk%jIS#O43K2OZR~hP16hr$)6=RWdiAfJp=V@)o`vUf` zS}Be`N*Bpliyu#}60N%;Q>N4f(JZA`c?z3OCzEP5S<XgW*l0Rg1L_OLQmUgiGbD_g z?e4JIUKdJ#GQ0I~X!MRo>xZF0d2e7ed*k2}8Uy4%f!xYIjqNBXP%eiVgpjbzlcf4L z@tGcBEBSQP=`>}zpG6+N?>Q@Xieuhs_^=@cr*#D2F`UA#LJ!`_xph`DrTdl9@w+Pz zb^yKmVBy)ju`{I^WA9zmObH*q(S{3<RoGuBtuH8ltv7B~DG#k*2~F2C53YU3nR(Zc z_PTbjZ}H>XO*~y5{CYI%%}pmQkMzDHWaR@c7_l{pCp4N<8i1}(HnB3t=0G<IrfONu zunL*xL!)0y%k?nS|9<x&hPm}Mjk-`PQVJ#R`R?_N<=N9~NL63coGpR-t#5?;IAvv= zS}hBIla%%J=|lJlV7^8m(HH`58;gSbeS#rR=<&_=AFd<W*Vhdx{Yc$GBu7>nCn+U) zrgg~_pHxUm7*5$)6WCw`O^<q=!Dt{UV_Il@z?%B@qvc~*A#ZzVW-l-ztL0Z7d4iwn zkZis4e^_z9>>Jy*-I$GSt5IXy#)@qxjm^e(V>Y&JHRjE;_de&Ii{I8?uwLJJ&wOTl z!xolnWH0&mpHq8okIy(a=sv;uHREtL41i7prv8bz6zHb${o$WMEasCLH)tmm3(}Kv zb1(ZijGjvr!Y&+^w~{3M?NStbcAT&-(gA)rX?<qDK4q1_W{XwK1*0bYM9M*5&?~eX zv{Dw~)TQ~cCs#E_u9o*r9J)Va67>whX}>kC!YA&_9nT#lg>&B{s6WUb?~|uJ8UPGZ z_7l>ORJm$p1N*tvd4il_pt$*`UZ@BM?i)v6|G%ml{5q}s5`QcMM%j7AX95z)Pu3}F z+Ur*C=6CdV)Dy<*HCf6<gWH|R=zXEw-;9hi(_-LCdWGYE(bf1rePRU^hYkk_`k@Q^ z7DA*YJ;mY}WpaOOG}U!@syjQDi~yPK%<%_*I>pj*Gc3_4cQ!>4<%*zF3G!~X(QsT? zpG;08=o`;+JpLB6W1p%^hE>nq!!-D^LpTK=#tV}q<T}6o5lge-PcQ|qd-RlW-Apf~ zsAHR-J&@i63$wDg4WzfeO>IZx%x@C<)lFf+OjCcr@gpQ>H$(&@_V@9ka4S#`Z;B+` zsu|6AN)iz$z!O~lA}W1S(Wy>b$7+3y?R^8E`Qw|9H3U1`k44mxW5b2I9M|h)amy}2 ziK65z#xho~^A!Z6w!VgQ*-Dpd48WTzhJ=HtG^n(#NnD8}MW)Ktg8_?gp^r{V-{#lN zd|w5@uRxP@R36PimV<-UAB4b~j3k@P#dljpy&tae0x;SLx@J<G7~EItG++~bH1R~h z)GItXS3F{1XvKkT*jr=~CaatdHKB{z3+^Y`5dymHqapmpXtGM*%GRRD+`y(YJfhJ& ze$=E3d*i%JwtBMfpodmixv3A$HiF=8#&9LNC4oaz?PuGcbLlA$=1|}Q)tK`)qh(^) zZ{>H(ZDO+^CKNVo&ja^KXzCPO(bCiJ&P66H>8NlFbg{A_xpM3j%OD%QVD4g?qKY1L zO|wtP4j>XN<H8_cyX-{H;I44zS(I>oP7l0uUUPgKT-AM1i`)N-RhOs;qeDAJc}p1h z!;>Ddsf4rQ1(|4UZD#?<!!^bg2TFM!z4?4w9z?W8YXlkPB-?fm_g(mQWYI!C@qRMd z5q;W!!atky{F_mF9K>|^j831_&6<yD!d4ncl=_Hr%)l}@O|oE*OIUdxD~EzW&S7me zvEDlAVL=6)45lw#7FB)RWnnQ#kUL5j2F?%z0yW94zMe$=Gn>F-cw{L^krZR0Spvxq zTJ5lz`Yc~Q>$a@-vRi$#bH(6aPpi?Zpn<yAC_gIVJ)B#=*2aaldD<qYcn{``9_MR> z0*le!U##Z3nRWsC<vHVe#$nDW9Wqr<+%DnAWpiT>3j_>M(V9bewF7*;0i6-BkX4L= zhms;vRBm|2=zE}gbwrP3FP-65I(vDNJ<AGa>PVU|z!jrtf8^?tCHDJJchPSETZ`W3 zLprvKuwH1M^tz$TMf*vD*|OVT8O?F$)#x+UPvP-r!&1R(Gd#X1g(QNwu>(xUtc1KP z0qAduSvI88iWH{aRik{-iTN)=+u6jVHd}atJ~V0cuK{pm-`FfSSfn-|0Fia8w_~sR z!|`DwLE_2Fkm*g4If`22F;hgfN`zXipQPV0(x5%?OQy_lL4r<N@6Cpt!2`-THWqAj zEM*#HBfNy3O58aHPyP{BKIxl3N6bTnL=#iuS>5CfsRus0NJ7z7WDa6B`63-I{^WGV zIBn`SK_rkn9ho(`&jBabeUwe-LAmeyd)uhSGRNJEOYEQjdy2wRd8M`Ig5@1Zq^fBt zUD~m3SyKErN|q$w#IbfBX<aAvszGGkU<%8Sm#Cqj0kY5032ZtMy3p6##h&s5bpl}( zjZnBB(F6v`4vPZtx;BiMNk4jMc7$kcaBZ^sxAFm=pWAXq4l_y?dCR$4+_m@7C>Q?m z{-^Wk*cmMPwDxfk5X6?HHAnN{0q@dHL_AeW^eg((&xQWFv;JD4KT~HRuFwG)-AoL< zaP3$XMDD|Eg#2&Tq!sOCrH0dAgB#39fLrtXQ3^!MY7A917mXELdDgk=HZN?G?`d99 zx<4>asqze&V{*){i`IE`hnno1`V<L*51M+ef>vedN*uZDBJDsqdvKS8n4P>$^DBoS zvzY>>_N(q0?FZ4vTcSZs$*X@!JB21CyE?WA8zfEg8TtI+iZ{0F%;3s&K!XN6wvjlI zfp>Ua!dA=G<N9FSH)*y+o`hP2!IfR5foy=P@T866FT>sh%THM=a@Kf_s^-mz&h`ht ztI=^X`>#zk!IcKsGS9TQ5UVS7;q#1xXY|h2LB{U)h4x`lY#n{eY2EZ9c``@+JHA@` z;Z&}sN5;=|wA9x}wx*I$Bl7Rh``L-!Lu1O~CvYVuGXX5Ui$2dpKcK`i7^D~z$hLsc z83EgG?0=ex!5!2a)yD301@zNsN*mkSWagq`cB1R^SjA+Ce^nOTQIJDsKrEve<H;O! z<lsIIO}cZ_r?ot1uX=&Yi!<i%#-$^1<?#F~K6r8Nyyo9u?<?rJGC8d~ARiyJ*m<(J zTwitP>=v(T8{FGqxU)?Z7k2;6F&qf|G%HtGri@qLXFTq-w!?6VVio5h3!p!QLk>l3 z;3s(&SZc6$hX<04F<l%m|GbX~CvR{+o)&-!LVQpCd;ah`HKzajEw2Q*y(hV@VAot) z2DDN>hrODBZGFM8bxEWMJj8NfB0{GR0%U@woE{Zky3w(z%^A7TuhHO!L9Y|QoXa6~ zmZbGVQ53G{XME7OEEr=qs6&|MK1ai^P)nNn74zfocQuPy&rlov0jSNvLFLH(0$a@R zP8&`7Gt4I54L$cpx6JfXgY?M<W$$<90qxy0_VN*8)NgTrk9G8(1kJt+oye}aJ2v#i zcz=w=?D=HtTrR;A?}A>J_`>r7mzKPkE1zyEZQU*<*=Cgse0=9_qxuK=*~t$3_#cWB zzfl*2jw_w0jiDxW`mkfl(ZL4XD+im-s<2ufb_J}QgAvw_{1oczepZv-4mJSRJ%T%1 zkPJWm;h+C;a&d_&eOS-TFOK35uM+Dvb(lNceK^U<D8wYrAx-2u7m3OROh%}B=mNOe zqa_MclnpqM9U0HM#OE=gGlg5&<T|--?)eY7aLBe>L4(=x`X$0dHd^)w%s3#&7!J2^ z&NoFsC@OK34{u<)yM+s(`Q9T1KHVW&A~m<DULA%lc=}VLe4saYEoxoN*d)J~G;4#6 zM$m4dTw(Wq-7}v#FM?$O$wS4sx8;Wk6!^@1obVE}^DWsSyD2Zw1IZOkb_TpQ|3I|d z1>DX^dRp!UYtMT7$466W!|f5$)C;Y8jw#O|57piNI#PLOuA`3v4HldF>E%m(E2YK( zmJP=QIm|p(jnLeb^Kb;kX^;G&><QsJ;BJCW^QxPrAa+ti*R8KW`9#3WJewqz*MKT< zl>-f}fA6(S6*5c!JFOoJ-cUZR^+`TN!9BmQSBgk(kdntP$QO`;)`oJ5;>VB72||HV zVt_GRUw!0E4pmwh*Eg+0EC?k93ks*gVxoZ03IWs9c})>d1@<QeNcUAFOSbazpL>EL zEG(r<ow)CkWYmBU{o(h>?wyrrQ1B@8z;n^brJw_C)!OcaqYje$P0;oL9uyT~v&n8P z!Or`w-rxKoBj(rc_Sf^;p6RKn{01&u&h)u?L$h_{j>?mYJGJh#2pj(vvTDH_K>XwK z3Q%~g%o>PC-1`KZd{oqrd7PQCrBKPt(bi&Uh^JMR;==*rfY&TaN2@NnIT?<9!`#}W zMZtJ)E-(6T=+ZvPfk{wF$Qrp5|Hk3_ZfD~YU|Gjb$P&hC_cU`92wm~r62NS=Lbj9! zApV|6ABaG5GB$4)jp!LiV7YPQ>iY{7XDMQh$M}7+sz{p}7#WB~vtWNZi}!;WF$<9x zU=dasr{x2zUQUKR^=ekQ+=4_M7>X<Bt{oexMeRMEuCNhHl8Fjn|H8mBz~a6chfoaX zVoKEPgHL98qotG;Ht@ReJb4%r<>dt;tPp7%VPoY?L~y}{Vt+3a$xFgFCuN!slL|%o z5L5rzQ$w65v0>3Xz1Fk-dUbM@07<DA!xP;4tLq-vlPHwvff>~u8vnpdOEtl)Y2}+9 z39<Jbj8Y=-!G>bihFtr{Gb&35nzUp#s)T1hJ@A%W*$}}kQL1rNINtF0Xf2E}UFHM< zztotmJl^qjK$=_RluYdQRhhtO*DQ$@x&U$orKjm|Nmb>$=ECxiTZ{97&d$s%_*4fs zE(bn<ITk_p&+X~Dkn44H`r}zSc2%sYwcgS_Vq(SMfu{ALAXKj3yM>*7;f2_dQ@ZgO zjGL1UiJd3pLvdo0WxP6*1yvY=^!of7c6>;icz^%p&b3tjccXxmCp4NQdS0afCW|3W zJ~eJS`31}z6ExhIBctfC85lg?!k?wlNT*4Ffy3QeWsJ?J5B3p{sYS9+-j7Pi#vm!b zQbNIBs~G2^i+?N<*TqX8ehy>G=Z2%^pqzfQWQ`~tMH`*|(ZjQ;ThIPARU7KG>MZ9@ zXVW019BA9-SP-^5Qc>*}it)^_lG5i7r}O?EIa5ZEC(~v#)_u$AHwu$jCB7G0%PQdq z^q{dGkJAWQCkaF%z$MVUEMRg$H9Du9|BTVecB8KQBmNW|lVubKgZ__I`&X>;uN_`u zue>qkV~ShPVRr3FRacRX(RQ*+$8vBnV`q>1o&J?)Xwdk?j5cWD0zEP|_*|3p+>#E5 z5snX&qehpBEFY5g(L$G%tfG^fu{;G<Am3$dawB&{oi*a?L+b)H!DTE)WK&OaI}wt0 zKYy4Uu^^^O56$}`H|m5s1<xy~Jakh~6~k$jmms@h9t=iaK5(Z7E#}3?i%N-db`&NR zLjLfNNGn(44MRFE+@6NrkH<%54e{?yZti+Fjfes0YP+8%(X*FRcHSM76g!CkZ1G06 zZ+(&L@0%jlRly^PBRuEzCKAw9m){BW@T=C)jry#(ku~@l{FmijW4`qeoSrErwbD5X zl-5rHh!$b|?a<2Qy0e~@=({1*v2nYPh0*E#Ii%xVVV+^|#Abwl*8TtNAwn*~O}lz> zWnt?zu9R%E{PqM4S*6FjD+>gHe7XsZiWkAu<+j4XIt~}7K)N%_v=qD-F5Es0;9yZ} zW5VI(h*=45%eY0QvdbU@u0Q<{#I375t+RAsEUj|jn5PGudpU8bg_{0w?|HUd6q#Np zNKI~@ZWz1>LO3<`XiuW)c5Sz1P<o&Eb|OnoKru3Nl?og$Qg(iv`Uf*miRati-Wog! zYvKQ47t1K9IDMq*;&*Rpp}?qgf1dTWnUxiT;=}r~X26Q0n~8pR@^87Sc!qoIuej`q z0v>(0N(Wg<_gJ#Qh>nzqS*{qyW<+;Eh{*Kv7o)4nZMVpo6lQ|Uq@)WvjW0B?oIB*8 z)tAfRPUqr7L7J@1^YZ~rT%aSyeFqgS9KTvQpI)gow6FYh3NDpF<OZ1#_T`%q`htF| z9%a<L^Zf_0{qQA)&c8*nLBWb$A{8PPDQWF3b6>{E{XPD>jd$rHb7Sbmu*_P=C%c{( zXtY0Pq!+v7)Q%Ab9k0>}ov|A~{XU|TsTvXl2i0ATPO7Epd=A*6q0P{L@wHb<Zo~#l zPV~KsU1}{ntYnpEvVl}dYJ-Vq0zkig`QHfEaam5f06(`7yT$EM@tKf^t)A#fajHwZ zWXA%Jm6Vl4A_(F;4qTa0Z`4~xq*K=N4b}t54Eq9>UgxTGsxDEXHo#zDBF3sN)`XCg z4%3|!e^LLw4A>VNXd#f7!Hm<xO&%o5u_GW3#|A2r6s;TBHhK-^i)`aXU5?yvxGlkx zX%q)q%IF?<=g=W>ieGNU3t@t#vU9+==BAM3yMv7Xz<R7Le}TYd&WSDoJxkR%%3UJW zIra%UV4x0HBPx={Q4Z=?Fz1WsU{{-RrN8#gwo`iC27DUz1igBFO{daF2CWmp?h2`7 zN_mf)9<g4HN~MuTY%Kgp!}hgx2@?&syXdCs{Z#Pj8Oz6KprRVC4GEv>{)5O@y5zY& zFa7bB;#Lh-^8Iw7gvsPBPw85~*|W8XW@a(F?T|`j_;DEv#-R_UwI2_((7Ji8hcJ8u zJ1)@yU8jpG;vg~ztRvToXUvcBJXSTz3NRi=S2G4bK5-{YO4CI6A|w_)rM5Ozld4`s zde48q!9vXlR4m2g%iu=2VS*U@;grEE=%&Q7hQ9b<=6``b>O-yTfB(bvNZSMmU3n(^ zx6w1hzqlSNk}8`w3sh~MO&5U>HgG%3s`y8SpU<KwdpG?Sv0o^B>=_?Dgs6p;$It!1 zaLN0z?@xofvAGPdey6+g8oAG#1U_TlH(H7x$2Uwg)m`#o4F65<RE_?d-qrHHuXc40 z#@QE|FoOQ%$GbPX(>%afa1Rdk`9LnLDxo&rep_D_$!`%@8E7E@T)}@}(X-qSa&k+8 zGX!6uB3=p^ZT71Z1COLOE&qk^;<VuI&;J*~qrouN>4c59_a$EsX8JlJx6(>4sw!0^ z?iFJFRf8(U9$FRDS+p{am_N+52DHY`3v}5@ok&)EkkRJNwhE5&aKSrt(~(njBawa= z5S}a41I(H6lKcL(lytvaJmWkgH;0)$fRV#vxmEGqLKNOlC~q063N4BX^ZgIHdm!|D zh4!i?VrlR5=+g@=s7Zl-7v3KZuB5MA3ro*9So<%p1I1E}DuMbt1~+@B%wLB6_mCb! z(aVk8?Lh{&n~R!7exml}7a3>9qG|*{K$9&shx6ZXIL5J%DK`DYiTW|+Bz-*D2LjV( zq_XeHdAz$FeN%T@bNlt!Ir~*8X<ykAk?U|GN^9-E%?=OlN<YPGy8{neG^9nvOhmL} z84gQG^(oo$$GQ%Z1(BZjA8`nOU@}6_{Uw=StH>)kIRSbF%O9Z`4lT>W1}NVF_%EeI zT=Jh+`k<8`cm}F4k?W7vpAPFS*lxa;>rh=0`z<zaON%B)tiU`DVp7_WZI^jv??+i@ zh`jiM9BTGALyJAlI6v9#FdVd4oRtHMn$CzMt56WMz#ed{Q=13y=SwS4^zmyvWcv&6 zwJjo~jGv8O8*@K)!;$Ms%>DwaZU4HxFb~MMoxm&?Dq_wdS!1<0SkRMJdsIZ}z{qLH zX}60#Rjq~11ZPJ;THwO-g}@-=47k2u!l#Jmh$tJ3=3zxPws9#n%IdZ;JzSai(9n7@ z6ben$HC-=y1xODplA+KQt!YED8y>Pogz^h{fb7~(W2VQAfk8bl86N-_ycK0&Bhfzt zdJRBEg|9d4dGqn!k$hHP5On_Q#Sf8KJ{B;LhfS;EBh1~N=M%&{s6e)Ct;|&lgE|if z9j>6+((Mvxsa!cY@$i<e233T4+*MP6cVq*Du$lBM)cABDrVC5iC(I010Iih8v-4yi zI$?TIClc<cRWF*P2Z*Wq(;vh*R3&c=sve<sSZ_g2_ahZ#4S15q@1hdNzLEAtCrPN` z4p$epKm`V$|JgaJ*yOo}Cf>zW9quYNr{Dw`9ZyuNxzgs`_q|$KBjXxJ`e*fekI%AY zir5h;?ei(<akvA(I%I_m1@1#{S67#GHN6`LD~7&=(?YhA0uB=N?c;mwP7^e+n(02L z9+q*e(5K)L^wVnAF4)H@;)(8P+Jv?=IMppw_8&sJB$NLnKq$%OT4HOubi~b6lV>~R ze`Fe_X$VnTcF$a*PN!qemk#pH)DSN>fVqvaz?x)9-z}?=NwSunJb}};prx}%84kC$ z%$;XtK4VB>11G<%Cy@hewKWP{dluj8C?7%w!xB+FlP<AS%sW=the9VR&I#J7rQ}*~ z55`$iTK2Yp8W>F-n`u#ei2Ym7IuRLNrxk=i6H;%{y??*zF_bw|j0+B{BO@9q)#R|g znV})2$PFS&7oAJ|EZo2&AUv2o_)&z~!jTG@sAxy!2$=Kqz;H)@?AFL~<0*=!uC6-0 z)_)MbjCXw!h3?E5#HN2PMql54aL%kRGkuWA$Kto&!K}$;F9cq7OCW;&ZD50BszbID zN%8mFL?Hl+;qMDWxchuC`0Id)c1u6>sxg4GTQgFYuYW$s#18$}e=w72t8ky|ll9+L zZeH7c7a+43A;cnz_#V>5SgR&C80&rEHk@pkebkwkzNv60H>SipC=#ASjbeh;s~jr< z#N<fMnIEhw*|@}7+Dg{pWA2jLFK{7&HiNF;NWcG0_9Tj3i%|{9{PRlClY&W#lSz(+ zKIo!gi3gTZ;zx%<5u+%Ko2?{>(<tA6&7)6Z17M-sQ(OP;mAR|VE;WxPr>t(P<>=wu zkEHYrSisHP-|l@kx4va<xE%RT;Qr4tZ0jsu0d|mYCHknCIKyngVfULc&SQS5r`>a5 zdQ<TftbrZq{8xoZ&a9h_u$3{VjP?9Uvp3xH;IuM&<qOJ&)Pg3X)`-C`n(U^$JD;L- z3?L#|Wol<h7`LAHTaV?Q=bAdjR8<h`t32^R5bH0@3aeFUsBV^|unF&uC^_$>i)MUC z1^Q8Z>tvU;md72ph%p>U1*W-u--M{&qm>He<Qcv7IqFZ;{%7|d?J^V?)s7t|<aE*_ z2bT1P%U#&nh9|*G;oVoZ@pv<sA}-jk-vIXnW?l9ul7{Q{nG+Y@=isGL2#)Y+43;VB zU)CYNtiSpbu*#PqKgYbp`yX~JmwsxfJ8v`px+pA_AI|qi*Du}kcqUJT+_@hchyNT# z0RK5{ikQ}XwQClHU_c>eL^;V7`_I*`O`pl94BDUTLTC9@2pWW`id&%kr#{b|LIbd1 zMMUKGTn`<&K|6_J|0MWV?i9vXee)-3xqOTwGzG7AEZ$rO+q)Oy3h~m1-vy5mB=`Wo zC~e-6pOKSXkGAMO%t}wsmY~&J&u7#z_N!UH9^S(NiVt@bf@5TGLEtN=VdKn8Gq*U+ z!FKuCN(*}Zuq1_(M{e|!bg1P-jSOIegjhHum1R_Y71NOVecbiWj@k4D0{WG_k8j+w zye1zK+WfIn@2lHe!4w~AXpYhxVv$;F3(C`oOz#LE(db0y|G{1Uj8vTN#DW&r9VG5N zKO*7LXRl14#+KV+Z(Cb^OE!v76<jgf7S1$qC-`?hz@xkptz-hs>$Xj$cJ?s$H+^A~ zJ&};EkpZnujns-0D9M<Iy!gpPrrD*sk3bW0LA%Xy<qglI5Qkf=O$jUvV<-e_YlDU0 zw~1=Rp2XTN9)uext?`42P}7nRF7HU>V~7o*w*2BVzSUZ;C>N*++a=eZmw8`lEE%ZF z#F=&j6k+oodqu!78!w~nb-VR}c<N7>pqJpG^LdA0bEv|QCgGd~hvJfQOg2tsZ>Pj& z;IGKiH$S!A=KoKm>A{~1j$UP^6EsTS_ye@8q^g~BniYXmp(A^7r>r0r0;Lozv$X2@ zKDl)a>|Ye>2*LY)XGW|h8k44THE^S&LLdg^`@aKDx5Y5klOmbfQVW|Eo}wt5<mz<8 z!m$NoPMBjNn)O2gG`R;6@XVlT;?;!&2V**-$y|3KMe2lwyNH?TX&On+!Wa#&S9<}D zCJ48V4PzEEl~k9by(Lb|kwe5;I<K)1bZGMmZhA|kA(IjjfuxYYKjI+89zS+{s}fG{ zYGL=H8GGG%bQZU#cbY=Px#_=cu+4O=Amw<&5_=#FB(zA`%FKo5{A4wqiVT~i92_xr zkF|zX86l9QPok!FG?Wdrn#e4_G&neqH3Bl%*1Dn#@X$G}VGq)G5L0YfZO#~4h>fz( zPQ$PMCxk=_fKVyutLs@M^?Aq4Du=6tnPneqV3WgDz^bukHzF}$r!<^SOQ7?pp?wql z5=jTtfS6dCM#5TSrf2AtPZ`mYr?yb2?V;5nA?O+zb}7<Z?Bvcu7_#{hF$AbQ0)99> zKI1QJ!O=exrqQ7(qUz-Yh=pB$sKKby=C9#x?!zkqMgo52@VNF#qBGZ`3+9PR>qn$X zz1<Jy8&|rOH|4g4WF8O&&XG4~(+-qRU5(NiIJh#QwM;^h5EyTH&ka%d5GrPLQ4(gM zY=Y*E_vXP+ViiiZ|H-G!JfFp`^*d^)pe9ADZUhYKRg1}F&_P>V3RTl&ur_JSNk19^ zCd<hx$(8v@Nh5ek{2w26v-f_f0W4%sH=NyvAnp9#XDE*fnp%19vd?^B^?;EA#ijM` zBN?i<)6)Zlvk#v>&wcrz`wa$6&X+aI-5mV?CwOD?(E_n?B>z_P9DYRqQN|r3SNUFn zR#xI*rZfh`PBBiGHblY0u;n#4yF7ED%g1|uJT{CTIjczF9*n$)C9-Qp<%lISJWI9B z(Ur8OVAZMCdnC)04`%<CWoHmMRVI5qd<uz>xbrdB(ybgsklqpN5C3%nT5~l33MtX% zK75VlAQW0x7QwzmT4+J)Pf(r~Kj81=iV#t(`$qyWdZl}eLqLC+oo2COZ^Q`%y}3s) zR*=a!|3V39xtf>!=X3rC#b47nlWy+IKAF{nU=v}Yh3?6kG9EmqE}3Bgs`6SvpAb%p zugTDuW&<wx)k8vKFj-*BqKDGq>NilHQ)Ah?^T$NAI0(uaWVEfk&+=E;N~#Zz-wOBK zHHZMWuCKE|KJTx#2{p4$cgrb|>NJ~v$PqYOEU!0snX~z!Jg1qLl<7OHt*Xl_(jb=$ z-l>U>P=45@%X<btpa0Zs_AV4E+e^e@KCvF4{YU12nR0w}Y<{coJWZ1K=@>;*{p!{f zjm1>4j4)i(#x#TVz%jz#dJpC|GQ3gf1WJ^#={wQN%q>>#skbi-%aEV`m$9-P1Ocp{ z;g2_zE*Ts)l*2>pa>&XX3SG?(8qD(V!qM|e++>z9gA?BK1SymDcbMqZV^Ne6Gvr2d z)bq19V5d(pX!kwo&RXD@)QlRCpQ04>3f{#-8+&RH`EGQR+kXlnFOo|DTsTb2<4Sq; zw<DTGQeJ$C4^q)Azb4J>nUOjN98U6|VDE{a$-x{2SAcm`iEF5QImmZdoIS}DBoqT@ z(ix_QU2HW&MDvtmfg5_h-q!>b=i4>5(5cZ}HHqzsm1XgxC;Wuwa%ur11o_WjiZZV$ zNBf2CKVr2~xe$b-saIYAvIt%6AbhzI;s41F1jS4iPX3<3BfPN9PD?)|Mg6T9G(Nf_ z2v?-1Fk3RWct#0Q;I}+kM5FDzpAP9qXn6)x*LE>|92**O@3VWhTGlB34Fn;`_NA7h zEY~lzu_@hUpL^`CvFYjMY*cxSg*zBQOkpglxEegoIV!mbkkX!l-7s_asaS{6<z-sq z4Sp4-56UO|f=V_CUr>n?XP-i8LE-@nci7~Iv{iFmne#ze%II@ADPa>cCZ+m(PuNfU z8S0q<X<VlDPbY)VDR=kQCuLdX-ytxbU__*97sa7}l^a-a_)`vORI(`bH*UNW$}Zs~ ziJm3LhVx{BSW-ut+gwnx=dgJf**P5C(*bmOy9P^yp$IL4oBMaC?tNpF9&A@;n#K;# zh7h_>lV>4i09msgqEgJ*t;^@-D0+77mqv%CicG@Kb0qj(=!kM{)T#bD*PA2+A^pW~ zR?#|p%Er1gy+#<*r1AA>+CJHv_<&d=6qB>ZiJld3iZ$@4LY$DYNHV)GNDC|2oywy} zj6Q41q=O?LDMobde)iJm-C5$w<iqc}N@e-N@JenD`mKczr_Mi%*CZb@*{I`zeR;xw zDbFS3ZCQt}>8Lg=N`0OJVd}#zt5&6*kp7wK(|nvHSlC)j+$mIuG{EU6%rUYd;r))V zy^JH!nU1#s1Gg(4EG+z1WRq7riRl_6{A#%c0v;0j#5|$>huYi6USuP4lV~yx6rUfe z_AhABCQ(=PPPK((ryKK*49}+kofXKwjZvx91G`4z@e)iIE^CfkyW~b4kEtj=xSp^h zgBFpgNh=%~niUGckiM25;d$!|c=E2k!f!bMN9W>eL7I9G#Pd8&@&VrDzT~NSihT%{ z=Rde@ytf1f2u?0~l7^zxO58N&ej}x>sYweb79EG1@K9)mNo0_+%wq~0Qa#Oh-cDk% zhxZG}@YpU2h;j?skPlz_9_Y3cOOci4xT?uk#rh|`prCBa1~!MSl&t)Z!<BtHxh?Q% zm~avb#?Sx}p3bv`Usfi7oMjPzMe>JaJ&v^#!f)K`@Fz3ud2vVC?S2ecrRzVawApJ3 z)+w84@-aN*1XZXLNL||kOFTEDLB+<Ib{$ZsO%<t%e<C`0aV?APylvE`!AxCJF24f3 zaNjy<PkSej7cAzH9~|L#%M+K9t0(|vD;Ftwp5m-}6E*T!MhZ&oC!(Je$5BTS(o({K zM?HUt8YlXHo<hU>?Fr5C{VUBg74SkVkj=}IOFS;I2I6vLaC50bv@FfN@022wWauN{ zJPRp^1o_Sh2np#h63Yw!f!3R`9pQIl!ldvE^o1~xRC4Z;-M}vN(rBgb30MF^4kdb$ zg|UuSbOX=+t@O`iwZ2k0<0hO0!x$y36~%(imlx$6m4$3^10#q$&PM^kBc$#_2w=$X z*ms>9Hxzijmfg2LM$GF5pZFO~|DfFnc|wO#K>2v5I41g4+3J|QUTej0v(^0sPnj3- zQ|<UAOx|V@*rJ>#nGuH=1}=d+qI2Hd`s|iWg}NhD*_09^eu$xO8KB}?Gj65V#&&*r zJ@vWtB(iQ2b8xQCy**WM>V%^al(%9!c?1wDTIPQS+6=_F=aLq*34J5W#9|$E3X_|! z^&>)RkVuLZj^-u!erY~7>>bCkf=ZJ(<wdf~bfG1~!A!O0t=P5n$*Ka-?SE3T1L+p? z!?TC1M@OKburO$Q#Fch1?K3j}NUX8bC4$_Pt>6;SVUQ>wK_xaM4Sjb(&bbcs=$ych zouL0gTfSUVD9bv&;znx6-h$nT7<-i08(hLtZ2w>*VI;GC-G6NEw$FptD~bkY(6rLm zp$dNq=|@z(c8H#H@^lRJGGn(=$T|oqSxmY)Z%~$>89dY>nHlNn$xk&Xam&fpt<t_p zW6`CtRB6T<i17Iq#D*C4jd+8Im#IB6fD8@#ex&Fo&y2=U$d%atdFh11@kCw>tlH!* zk5@2Q44izllhsyD6osVdbN!%9$#<_Gi(_*zaBmQ3<beEV-<=2;j=pPwm=z;n8b!`W z+`CTLFxxr8K(DUmSg_-r&0{UGTSum9P=RBa{VueEty-cjvzn_??1K0T^3n<%GD1k3 zs(yl*HKWC;$T~&neCU-<(;2_r{ddsQ7=w{FfPtS>3sLes9^CnB!|#?BY&&1)eB}|I zMkS;b1{MJVU^rK@mfV$4DkXb^Se)!?nuh231|m)>an0k}&RSKHU;w;x&W?$>Q7kSw z2ys#QdHY*Xr#(@wtY8g*aKUg!q}=8PDk%I{CcUkxHf-N(`OIzdp68ifnY2)xI>Yi) zOLLEM!eP`lo%Sq%?UUu{?o878_4g)9w!XD;J}dBq*cCf(B}m#M^iRT7+qVR=+|+H- zk#tSf8Ai7liHnbUdyDF=#@WHeL7=Q}9?xGGM|F-u*3ABbJ3`*WMNctCv6||p|MY){ z`qz4h^Kc)0)1_bls}F^b9FU0odFlwp5DA_NRNXPYacM%c(mM=EtU-0HaJvaUKs{#f zwVXV?;H@0tAaQacNG;%-A#TWSBbWu{gK082c&?(d^!RKji=FE#Vd8848EpSh!Zj>g z;0n3OS+KvWbV(YdMxVu0X%EfR=FLRn7d(pl-!JeTxry%UMWuwmpMp@x{REq`Fk91- zmIQjS`#r3Uii?%jxk7*e%>6|{QxrOX8tdI@+64ER>~;S<<)!y-a7|db%3p}AvHS1p zPyE@Xa6PjD7014JWuOpjlU}Q*&G@3O72!#JG@0h%Ia-7(*+268>Se%?p$70ruJEC+ z?d93YM42mhnL{zix=BrbQYVmfxHPm=hbVz@pv%W11xLo^oSOqft0$FygG=Sglf=at z1U&U}SxM#8SQX>Z^c_#R-_}CbjpEhTjkao}wj7GfpGI?(^;)M0z<$kI-`;-wp(r)j z8pQe>6~5Z&>1;)b@Oj47TYp8a0}rQb;k839h8#A{Iz?)pQ~Q?ioQesPAOa5)Y%@Zw z%KFfPrmAwP^jiW@NktT%^H1DZx?)0tpw3D&mFR}?LocEH1zyIgry+J3ngYplnEdzO zpp>%AbC=Y<KS4KterMc~Y^gxVjw6uqe6@u&^5^UEKZx^FJ0}i*Vaz^i3yV4d7-4f} zedgo#!(%4oZ;_I}XU1O4Wnfs!)K?_FzO%k_L0fSuwPgYvQ#92|*DoWPpeksyaHClz z&9RT?Rt6y<#AjBx+uwdgP>t|?zOL;5d;Yq<sTayTAdh(e--;lEO;+MOnV!g$MvuX2 zhMrMu#>%nu46Rt`{~1!xFdR^q=sn|g6bjf0>U324@>OaFH870r5YB*jR0iHe1!vqC zJ9`wp^@1-+U_?r04y!rpy{w~=ANo#y<C>aj-X>?1-IY4e*F($=RZbuP3x#fj`rirl zZ{<RwZ^2HWKqK_e+74C}M6Z+H_(yCgXzrCrXreOJzmeE>v+WOM*_CLjlB(44yraoH zmeFe$n<tqKo=V|>+GfqLU9hm?|FX=cN|LYDJ2oULSuASJUa+}k%bie`!_IfLzx=aY z8JSWns;^p@Jl7-`*lNeGf<{O^e*)KQqfwS$W^6O87BIQz8K&`E*tBKnW+*yY{!QVe zJx`Ucabb+j-Lu}(Ggvszu)SMpjJQ$f^cBj8tiFJklYiOcv-u{Xy6B1c2!*eGqfT{U zC{Nx@+>R(qB%A$|JO|SMok%AZPx(ni5@0pm*$WvhHc}oLi7|qrQ~)KNmu=x512S${ zX;!1#w!y^AQG&gW6z9<t?WnpaHoBomnrU!0kBz-3<;A1!lJdPmirHyiXS{_3SW<Yo z&Oy8K3BxGbJ^3I_j50r{Orarx4yH14@bda@MIb@{ap^ZF;72;$W73!E!BY;8q|iKO z&%-XL?|>ZX1WJInwe(y&RD^Y=WSCbViP3+b|4%7<?F7l|qN^#{=w~K@x5sbT<Z@c> zzOW6$?`|UkP@z>u^ePJ0+uk7fKx;-4oL(m;le}<R#8L*uw>9={Q<Qm|Mz7E+>E4ci z&g)g-D@do|yGa?n+7KeCpv3>chrlXTAc}EUP>TCf(Rg|c89LZX!|?}D<_&mn!3;RO z=nHs*0?PZ?5S#IA(1*50P{fg%8z1RLX}$lffV1LQj&5MgD9q+n3O^pDefb{@M5}*7 zMj&QXzrt&K3A47T7#9ketlF(PQ0qx>qvD2NcT_JtMIc`D4fd`|0Prhymsu?7J5N#V z77}%f6EVlORWBur2a84ps5=14MZ~Al-iBwEB$%>1?YB`>l*?1MO3%>o6~(s`mB}@% z>qx@H=3EV>fbvF5GV+`SG`a9FW%m$bBqV~^r6k4}kisOcEE@fAtQdL!<J#SyHM%8# zLIm2p&a0~^1vGtGb}|vBIl=ojn<Rg=+EfW-=|%j*y{a3V18$^YV|8!|dpZJpgC8%0 zLd>s*rd&9NQINdTQmLti?Hhkx*pZU=o2tGB&aSSxEXRw@h4KOhL2p^TB3iF0(=Pl` z=d12n8SaSu;Qys==`A)T^4Wd=lfPfrAyW30v=}L!U>URWQh_X@!CRpI_2iaBS<<~K z|C^)g>j=Bi45DPz180cL=aCe->p#}rw1~$4Vci{X8_v1H{J*R_pmeLV<bVS#VhDwK zb|uuhN0E6SmcM)Dqu;gYbKg}|MsPM3QbR*VgG=kk40LLnM>E1@)K%K&M%=+?_nG)h z`_2fds7mI?CP5l25i=0?v#PC$vUvw2K(bl>Ao9FzB*J_~!sibJ5!JMS@a#UQ;d|k! zk`HMC@}SR93-J+vC>+lohBuP>NR~kM1W@k?(!&QsZySQ@{+Q^KSe}@NZA%L`8YtRs z1>^WP)R{*?Zm10RG6A&;EQewTK_|JaPDN0|Art1nWPJ-m5bI=7pziQ9x2wic0blyx zhlbbaWvcHHsZS8U>2K!n=raP|u!{_v$;&g9Jlo1ZN(nT;k=6aRr$-ThX)ne~5LU6! zQuR&~qe0sEyL9!eXA}B;jFK_SxUnt4Pg8C20(Fd0CSS@uiI<tE5o(&clB-1s`TkFn z%`Sr7PkTvr7nXEkg~1RKX%-7Sxh#_YD)mvvNi9z4p`XpVKH)l<C5%_>FF*Do_igTw z*&S(pUNz@{X1tqGSs3)#Xe$0Y3uaGu+0eU!$Cf3o;|U?~J3j|D?$7YwL-;q|;VHL) za9W#tVWSISm7|l-3kMv5mP4XJQ>>dNpujX`(f8%lBGaW-i$O%@+2_?(VJ;2te1SRA zmsI2IM}l+l%7~<B*Qr$=b^}cs&`{5+JjJz;r+^;-nQ5Qj4ajlT3fbS{DoUL)2}Ts( z+&s<7s=-1QJ7LV@y>rnb@OMZpy#>9gqq^cB2(=ve)n4X+<mKpf_BA6$mYg9Ob+s-W zIh(JPOZq?%{3r?ea@i(_M4|eGILwc+8fx6;j27s$0#|eh)rW)U_v3yze6JoPk9387 zPs4a%^bWP;L*DnC3e<<y{n|ljRL+p0hMUcDW9g5iR{K;bw;$Y@TNiAhf;7a;s4p{A zh|6*#8<b#ydWje)g#ycnbG$vqV)r_wvBULwtEW%Nd2RyYM^2w`IUZ@qu^v4E0Wnwm zy|M%crlllKI8a!-9dJU9E0zD|FOsH)PsIv+SB&0)*KzmVe$kI_>no?Cz;ik6GHV?Q z7MwrID)<}lVYUK@&L2D=A<cZ|Lt`@?Lc`BNAN7Y0cpiLq1vp0T>PPIS-*bEJS3=(o zv;TI(qYP#Y@#!%UsV7xhjU-YtiI(x~mmPhRTn0g4g-bC}TD;jNJ<{8iQ!zYzIi3T! z?j&YK27=>xH6iw?>gn;7FFBl%U^dq%AylR2tFwa#4*pVpfV7QDh?OnKgMtr6O00A0 zbaV6gjQQ8xtGQcUe63)skBUAau@<>R3M&O-11tha5<}N-@7rLAHH^Qhjx~%uoSW)C zD@jOhU(7%T@oHUO&WTBN8JE9<CRhTZY8=RgeFw)3(`m}jPS=~Q5?50I2jl27xI-#A zd1+yNGyT}~)Q}BfA=AvzAx@WD*7a^dGz!cHr2S$P&iPy{xE|5@TEyW2Jw+npUn^Rj z$hvjqO6Sf^p-TA4Ik%e-O*_tTh6^S+gYP=+M2&S_2KjE8V_i6bjIX(qj=sP&?;?%= zU-#@on1Q)_8sn_Ep1<$8fQSiit4lqFGMg@j*6K;z1g6%iemV^+D|YdiXL?IgvY7eV zcx1gPb)=>gHOdCjIITdxjZ|#Q+ka95cPuB_)nTEy6bZgqVm5e6jb-a7jK6v)v`z_P zey$1$E5Xz!;P)C#xcyLXwFGj>IH%-TnQQ&wBv*&-zPLS402jwmx=G9kF_trQVisGy z{bEyhYROfj%1?%}OcWHE94ci`-o9+30rPs)C;Dxq>8xl~px(x6=a|*>kycYlVv@8% zc(6a|S^fP_&?j3UE?jMp=lfE#0iGH4sQ><@SKc4SEC^r1rl0uNDu5L9z^bGl6K=ga z+*VHhQE7;3wg@EHeHw*#zC9RjS5ZFSF*$&2DLpItakjmS#j0*TG-(gDUtvWN6LNZe zw6p!NIs*I6B%cQat#+gSEciAw_2m6%qm?y)Aj6|nDzpHV=WW4sKD+CO^fRB6>8fnq zNbMX!jg2gr;x~8rdSK3WRH52HniZoHqlcM=$kZsl!t(0xE(2$3TM|mg1gMC+m!t0} zu-6v$sZlS;w6Mg#40(g*s~f-GE%4$cS_y^h-K?WqSgL#(+5X3bZeH=&@A5li)Js7R zI&}+{lN06U)MAVD($o+|>j$z~tO$vJ7E$O>h@wvW9q-y<C(!49GK;Q`x5QW%B@6g@ z8h5hg&8D|K^ki?nIk|d+|MpGD_BwEwMu<_DIoI*JxBQ*F${&jnqmr!Wo6jFGTe*eH zZBk}B7n1r;y#0V#6rx0or-~hr(m%7+9V3e*L!@%@F6a+_J*YNGG0&>419c5&+bnyF zmD!2X(Le~i0O21_k*7M)?gp)LM>hPY#%W$LfnxRtB*;C)zBaED?LEVc=N4w*5}w@W zv&|oxyWn$`etoKfFj3v>_QuLPiI#s5v)lhkhFkj`&ACrrO>8dc@*sWQ8wKmgfPC)< zaqmaVYg*0vl_S{qfPisy9`x-0_ot0ti2@*ZoiV8c3rHg_HKEC#B>y-Kn?e@|U!;g7 zrFc<f=l54zae3Zn$VD=s!x2@Nw1~Zc{$wctX<E1&EHL{-VeOorQWe2Li-W09a--#& z)oIT^i<@T%W5-z<IsF?52YOISsh{E_?)29rleWAfodMe!zGC<0TxgQ1QhHgZW7o1- zVZW<`1_)8BK@mw&SAGzmqV@6qLl@1WXMHws{Lnx6?BHM=9as_B_XH(FZ)b?S!8;(L z4$W+wl4>hvkRs=F@g`HO07K5`o40qhQ}dhKv%9jZ|7amh%?W~B$DNImA9gd9E%z7v zaxqd+n)1Ol%tsBJHQpy^wz>vakN>Q}Y2Xj@6yQK`@Z0CJ9m>UEwty#i4n`#-#CBoa zDy?;(o{l^Um?8}oRms<kgsRz#QGjS7{2{vv+3ZEyL(0_2F8Hq;MmF!0tlguli4r+z zj-k6w3LCIiX2z|Jw|Yy`P6+9{y8e8B^Vs%ps`Xf$N=kBGwER5mJj8J^5sscgLrIm7 zWk4-!8GBPPMZ59v13z<G30G6q+}N~MJC@rFWdn|&m%c7b*`h|I9xfZLG1b|IBE+P_ zoz)5($_RJ&qvAKywZX@D>quduL}EH)D&Ao^lOx#<_Jp5_xwf?eriYUNp48WP<)UJ( z(Rr^(YRsttY4V_bX4F=kbGHiCknOHV2hixo?ltN5yYRbeClle^w^IY`lZ7{aoGY{k zCfS*F<d$3aGyTt1H8+@C*&_0DX;3dAp~2b3Y_XP!ueLdX?1JB<H2OmxT1hP=^6oDX z>&{g6u^nV(&Zz~=#}*zf@p`G>@whswS8-?9f16KIby%Exu~-oO3~>>B8R1sry#}a8 z4t)Gb?DRLGd}Py5)+ZF?RH8ZH`_!c#3z3ufc5BQqsRHTiH0}+p1aye{sVe!r^pQN) znvPlp@WniF%BvQRYVXluTLVkxvb^|4NJk%fV&mO|yE{AI&8ZC;Lx+~aQe;u6*%7A< z_b{cL0-*3`ghs7`L7(Rgx0BGTtAG~|ow_sxjXY#o-MkLV5wLee>x)H_V$48sG2qSb zu8ypeqtT#DDp+)<&{7oN6@>78vi?&7i*&Ic8lIg?^=Q@6$fEXrkzs_kqAbwFp2Hl$ z6Y+L(e=+{MptOrNTEsSwoA7tY9RypK{6-WVGGHKNN&aTA%oEEWmROxQ5P+0NoQ8`U z(!j>n=t;nO*;yD|*vET^dar{DgoH|}oVh@0zt9TmvS^;cJ!dtzLS&>GGPpy&Gc@{{ zBy;{xR?Ls?UF+I?3)zn9h<HZ&Pqz=z!Qv6spw3JhF`00`5Tfj+xpc};^e&cmb4V7_ zL>wz;z*C9EbxkMUrEcQ09nh+_H9s$%LWC4H%5)Bjo+*^|O7y?ez4j<a58rs2xsc*6 zrHDionuoiEXj(8NpsQrMAmRL5K&QIHx;s;`Wf+CC$|%!HQld#5V1i4;y6V`#x0o4o zSXMX#rG~ai)lZWGhWlG!QHEkJ(y5etoZ@OI9HWF0#x<k<gw{O60$>>r9=IaW(_n6D zf<C2#TnU5%as3G+K~P^;W`iY>?(woLPnkXa%n>*mV_|gtoh>+(bhc`&(ad9({v=Ex ze4=ipiDle{>_#BZlRG@$BM3(<{d1Q)#d9xYY4h(5xjAF9fbJCHxuB7|E$y^-ylWw5 z*Wb9sy9BI9v`4P!TEIj@vV-Oqnp?=<bkb&-nb-j%6Bvc6)5d<uxhx;Za#0%ZrNQd& zgVtFdo@g=^La@PVVk2GJ)r;g*fp>#`D53Z$rp4(pKjLkQI4eA&Vvn*%beh`_BGZ~l zn9xrY3bpL3AX;oJklj0OUuPtzvWt5(Uwqgn*KgmXc4c!L$^fvafE&Z}HN2L!piBwN zjtX0W9p=-8P_olJuBt~*hUCOHMcxA;<0T{;!QWtgMk6JNY=7kT^GYt+pEgi$Z!~(^ z{TM%3=-o2WRe!gScKUp6raqJLV86;P2^c)Q9W<IfI2y3WLQ8C?T|iu|60Xk6ndNFe z^jn6!WlSX&d;@m-Zq`b<udk*?+`%(ou4<MfJG$1Tw+0R8BHLS*=uYW447wHxn-;-4 z($(0DEkbB8Z_n6c`-oA8lm}S!7P?}rCpSIvW~m}BZ5=OwU&giVE>NQ}2OX_?d&&D6 zucM9vf*F@b)>|&V9&?#}i_SbrsoRHhV;eDSwp^K$5<ux(A%IEolXLHl7tLvK-l7xs z9eebPHLL+gneb8^9;EXqKB7Uf%ST&rCz;3oiqG0I5~>qIzSSB<%}O$aoH$(G)lI18 zJoF!%`%C3WdvTm+%u8M#!M>=19O3>)hKFH9gUDF#pR{WC@#Cs?_IvK)vAF`8(ytgM zt>^grfS@*!(>gBwY(^&MOYqEWKbt4}8nR)kfsN@XgHHALu~41Mw1*8gdSAz!owSTk zk0YbMFX#p@!eGO~i`Yr?3$mjuybOb5{>Jl$om{9S7$n~kr|=2fwfCy<C|JK6=Z*w7 z^adCN8~lXfureo=>4Q4TgFq@ECb+t`!LTXZ04~@&aEq1d(axcFvo;vymVDZET2uEn z84hFhzvD{U$6q|bj73iOgL4~-@)*H_gglpQ=8D#bBo1Mn@{{4zf->z)%=J!7FH2Ip z2V4*Jk$y*j(I!mT6AauE%6aw&l})8Z48dTgblQ1Fw+V8OFejdX_Bk~A$Ci@bn!X}| z4$QLgkfU(>LWCOhd)tTvLT)h-{AJ3!S2FgQMqPZD&`xzAiIE@D+9t}|C_E9Sfmvh6 zQ40ibH_oi6&a>;9zay3JNfD@t(H_>_@OeL3zq!tC=~X?;f$pc+M<2z&oIQ$DgdfSJ zP=w!4fQ>itsFdr4pQXJO@60J$f6y4%0LThwc<hQZ-fbyHKio!oa3((%Gs2G0rg2O6 zJqoz6t_Iq?Nn4b=zbEEK#I%HQ#DYZhJc=5F;&Y4d!{EnGqJbv#pq}jwtrN*p<l%;* zoFa6NjQm}@MkL_9b$jdC%njs1o2qB4e{kIQeEX}sMSM$m3KIrXII`;=C<EbC3y5D| z#ZNz4tK+Ptt-z#6-5zxPj?AP<<49kO^qV#zmhyoXXUsNibt@M*ZvLA|$3WksV4o>i zKrqR=7f%7Pn6u|Sa`#!bN|~MpA3#S`QMoW>Wve%qRB#Yi!0%?iPd8fw8h<UDI&3@$ z+AqoX9{u}+w`jg>cK*$Q+Ja}e1dyG72nvFNHy3a(GNv=$%-(ZbDys|@$@hC2{}n>^ zcndWqasnq5+L`kQ+ZQz!ZPGD(8DRi-c(R0Lf(9Z3%ho7?&VC6@llz`wIJVIyV%UBu z|05w)Y!<We{ON7yLp3X~tKwZc(Nb6oy^|8gVrbRo8)vGaGQIqsWDBf00su2!rWqZi z^KgfXRm@ncgIGp*h6JOLKzao=)8{g>At+uKRUG^eBcU<EgGW@vPP{k#_4fk?!&(LF z60TnW9*;%b85K{>X7DAtV>OmOA$nTrDZ>OUV?;%M%!R5@POze>Bf$gD#gJoaE3@gI zh?YyzccK>SYGIv1bi#baDPT4y<9A2~NT6A@`r5ClGLC^O>I_<9o_rMMB*A<`0#Ix^ z?diamQ$92f%cG`{)EFBB(Jv_mX#jO}h2Cg1lDr>spC87HDlmLOWVuyX5**h3fAMq< zUX_RK*Uz?XPquB_c1^aw*>;m{yQXQfZB2GfO?Ge3^Q_<d51e(@I%nPYeSP-6_KvQE z6^K<fj=+(1`<n#YOWA`>VJ$&79aaKsE;?HMaC3^Te$dxFZZ2iq6!{4J2G@L%7Gswx zp7PY<0~=4BgCB@*N~KoW8%jJ3OmU60DydD%w8Z{#`DM@`r!q(~cZfy|xonVQE&L!y zP-@%(h=P6SE6PK*g$Ax7i9kkFz&K@pC56myGKUhug^PTIvZ_^U;V))mKvbcCT9s{v ztlBJyH=wav*_2ayo}2)wW4(y&Fzux~>Ba%>V+_1*ZnEo?7~IFYBCaYj^Xr=95R*e* z8VZcIHCPO>aGCkWr$rAn$<1j^jMMjPvFWm}QV}FJe>3dU@3m&zRka(jjS*Z4AcGWo z!AR_>Dcit|v!Qa)R)2CDgAW9Fod03aIcja3<karCm}{jMIJyRe^R0Gs{WzdAYR7!~ z^8@f|$Fd35e^)YX@n<M<Fb-#mwW6(F9AWlwbT$a)v7%Cy%M5AiKc`T@E)pCslwXR# z*)ZChvhTFX$9{GS<o`xG`FDAEee`yAqub9Q8~rUpp)Jm*nMJepYP4RBbCrLBbEd}> zw@JkK8i#1-u^16>{Hfm9tQOyWX-Qp;mDge;Q3WZD&5bVtjflK3gLW$>Er;&{>X-7X zTh+-TOux!D_v94{k?P7}8$W{!mfbCKR-TjZe%Uz!394Md3JfX3NXfJU-YBP^Ne=%R zsO+M`;aCVCpigz5ji$2clHM!CDdCHPNNm|13aC)`I5!0*uTB{{;~vt^82nfF5LH{! zhR0Y{ls6eqT}3+!g=ggt*n<~}T}9m(He-Ll{P?;d!e4Zb1wmOX>a7>6RwS)(IYcdt zgBLA1i>gAz&ZIp!Cr+i>9<7Ai128#e(K+pr0}lP<s9elkUtntOjbt9um!tLCj<X-s z4X>))%FKcN0Xd(2mbN$ERt>NZ)zmvEl|-_%JKN&1B^M&%<s%j%&SkM|HPP*kO(x>y z?U$Sbi1<CdBYx|B(>R0lsW1cHOw}9<Vs4b<)hzLw^Lh*)D9iYLHxHecYlMN~rF-=t zbn$=$BEprIg+~7!s#UWm<2AI$Q03f$L3c^_?0A4izF=W5(*I<Rf-w7W85|)(iZLM2 zTb^c2n9AQvt9DKFXC>jTOS}oTP;_ObtYwJk2~Hfk_@^?R#g>I$ZK{?JebC8mC9Uit zDnCXO-px6s_yTi5TP}Y3sar06FnZw{ud}wiQf6(L340H!G;>te(#R}6*DN*tYIzyl zau@J4W8Mr8nm=iq#axy3g5i2Tc4LCiELPU1TMv?*yfSK3WKsc+Q!{9$k#Lj~OI7I2 z#F<GF^dr?^fpwx@D;+T1+*D+w#7yKjoU`><FE-OaO`pVA#DRN`MBJ5{qE>~}4Lel~ z5L)l>w%vN}VWuc=<t)Eg_$T|sQ@ffQ2nt}@F>S_2UrwN@7YUZ-ZCa5djwsoSVB@ct z`4Rm5bTaw*vqq-iHs+BkbuG=BTEjtnTd~##dn$U1*$qW&v?Oj^Qw=3Nc=<b;8)`7t zB-pv6_`OJidK$gc%k^4op;fPD+KTFTr4GTuq?|4Dh2N(&7w*$iddZbMYJH)g5L7_C zd;N+74tX5G`6}(ZPZj!j8gsP)j8g=zvX#rwjrqS(oanWnO_5b95w|iP+cv%PB_^=& zG@(L9UO;?O+SxxXa5qaFyH!b+n1-2k+F`qguh);-hROoPcJnfR*sas5qg4Fs5NZZ_ zSD)1XZC=C4u62HSHIxMre5Qh}Y7Vr+ztcxmKRg*sB}?3O&(6py9b%%Y)AYf!H6GDn z7@NFvpt^(@slmurt?c|x6rPtysR;<(Ld{P{R_1ykac)KvY4zRu`){3a$EM0~<b;;b z{cwf0W-np%zRFl5Yi5)$e|JwPJw3+idq6=kWSa?eAK&Kpak<mNTCBG*cpf0CqQPJV zSHW2N6+T5i-JO`0Wm@w1^5c;F9OKp1PUtBi34HVyPnIzMnI(q6<evIt!@_X^+K+!K zJfcd|2q899`Lh;1m^@D4J37SUghgtR0y62A3BA4a$KrO$cDgBP#E#Q82<y2HN*Whr zy?KMOH#=fPLyW023rk5&sW*V{SYn9U(?jTuV1O?75-t7S^Xum4b2)(ycP{u~M+N-C zt@CBUjnZrWgUyN1&19y09ToNYnBK1I#NwjT@keBotPW1XtT<(Esx5*Q6x*M#QN;%c z@JD1ZbPI@b2w<6oz|H8*Q>tSe3oT@p`rAtvmC|}GW4<<SsP?x-n-hqh7v-jmlIl!> zPioisO87FjE-Z!LeV*Pkw!pGb{t>!L@Aq5bf8uHUZpfCq7by46cJi>S;;kkwD;a3W zWT{}xLp~Rb*yjkNN%6jAxn<4yM;2ZMew<=`^-aRpn-~}*MwK(#q%kc(Eqxt>+B6@a zW{xv{4z(wyOrQbc<IlH5)P^8$s8iveiUoFpx8j0g^H{YIYycCd#3dRcuL9YznV*(! z-oDO-&bv13?qHoM=8ZR&w@=(PcX(TMbG4PLJq$h5!J-#msa~&(Sz?^0&j&F)LbYz+ zr`8KJ3olwVR>?Gx%<WfeR`hBc1se@oos|22H`Ae_ZTJEGf2c^u{(&{IK<}2Asg70R zA{G~lL)}pOh9k^tHV!qy;<yTq7-2I$@Mn6uqO_qe+^3L>`%m^V>K`u<2oV+)M}oqd zhj^H^3o9+(sUW^bVkPEO2_PMeb@5_>IhiV%Ex1!I*)iDwdh5Dj=A4>fmR(2a9O4nM z!8}bjnE1dW{=TKJIYdQxmBokkcEf}wibQvZg1Dj%W6XpF%{GCiV34hap>^@{#S$ML z?MmeQ*l^Gv1A2?PXpJ(q1uiZ(1r|CB-a{q^J0*6dUzF3hC{ZWVj_?Q}ss(}rP5y6z z1{JHu_p~KBH!xE<l)t}>?HbR=8m@w#d4+pt7+Zk6LmYPyxhBiPn(&%_L>zI|4jf}& z7LUY!-;n!3;JUQ2QCo1}Aee<Ts$BQiUgCo$Ce<Rf@^nuWXlK$&ggK7a6^L1u%lP16 z%=N?vM9xCGF5%WVT5pFs*$DH)3V5!$&jO(qV)>Lt_b#@{iNZ^*E-nEkRZ0l@m4->X zcq;&tNJYaPc8I&$T837zX3iknkz7nn%yLbsU)dwuQItvW4Q3B{I-$JQUaq4_ic<(r z+lO*D9pSyORy0{fG_)KxY|0~?TDp-wS)!b)FNqujk$ZI7=(O#sw|-V>z@F)HC#qYC z$V8oXj^826W0jgr;wOxIsccb8NV<csh7mB)K?L9N7geM4qBIU6nr86H|Mc6m_K<q_ zGG2=fQSlvSz7i3%P!o<B(pDyVMg0hK((eB;OhI->VTM{O8v&+&Y_xS_8EWLhK~Oy$ zZFzQ2N~<r>SizX82)?-<``Y;gOdA(yf@-JdA@9fFy6lTY7STkb$2x3{g8&N3L`C~q zSpj#r5ZR>RUgpnQvD5Pf2gUUC6{&5Pc0qQ+t~;t@YBz~>o3J}-<45?qJEMB6^jAj- z26{lX;{zY}#x~JAwU=2Y&syMcs-?HKJMd(OS)->$aGi7Pf?21;1HH|K2+lcW$+u{} zPL8Bs^0;txOv>WW<_9|?HIR28w-14?bjHD28Rf@t*4iK~dR+5|kEo6aPR(I>z@xj- zCl^oU1O4H5S`u%N>)GA3WZ|&~S`qAj^xrNu0@?`J%wSFwW<lED&ff-7+S>zDdfKn# z`2jwcGPl1GkDLTiXbDE&Idr#bhMSLMFTcxvcU&-mj8YUrOFK6)0$>%i#OAL2MzVZ8 znSbs~_hj!f@gROorj;3;{d>KOETfCB_(jQnu>Tj=Le57OJk?O2Uu(Kn5zTt*_nEY` zJkVTSw^&IaS`wYU@HM>-Fz5fPM$XM-`c-CvZTXDR&+q%o_i^m5=9CZtx3hSGGxDqI zB<`!~M17ctU%sD00uXpV;#^f=G*EFYStPBlVS&Bu2!8NtdmHJV-HctSRedRpVsUa0 zT4G48u5Rm;!LV{7tOxr-My3>-PMhD6!$V@LY+b_gsV>Z(O<!=H6VfA&(&Lg~2b?p$ zqSscwrTIln2}=YD|5yDzWfFMla##BE5l%G4gyY}8YRLo)geI0kH&c!!bb>Qm39?+H z{kY4g7@W*x3^;2dNcz((o+mz6yIy?oQ~N0DXG<@03{7(71nBEe<08g<NQ&zGzK*r; zwN!3VI#kc@<FNhgg@|DsEjfQ%ZqN-NGDa+av^es(wvCb;mT*edeZ_R1r95*iGqU)T zpm4qym^+jMr5j!WPcrTEa&uLc9jB;GPgo&NCqibGlFGr#Gv$z;4`LeX&i^2(eD%SP zclaHKvYLh<z)P0d8)Q>=2#Rbg=GUZ^x8gTF{~AFe!b0vN$wH`bbye!z2b?l(J%yan zro9hs{-a!{?E%GIJcWInA4U%g@l7ZEHdGJ&7ZaEJOLx`|4;fOPC6JR|r^k?7yexR9 zo=|kk6IH#{*zGHdv4lk}e6L{^SB%7a=1vgigQcuy&D%UCF$u3=>A)7~)A+<qpW>TY zvigdO2)9?~REcV_K_yOu$)_g4Oxi)wVmmusKCbm}ek4cxar4B*s@vX`=XNVA(@m;b zRryf}xFM>k;SVj8pVnQkAm7E7QB=;Cty~wj6h`UNVyU_OVzc8n9t_6kzau^|&b@ex zIwYyuaig~GPhq(b?+5L>PfNsx!h;E#-!Wuga%2q02<&O3j*-e_7doM`tACzDllFkw zg%_m<MBg<(B5`;moaMU39^;QxrklDwDYVc57}M^0Ed7uEl5tuQ&r6+VSNc>&XAScf zUv~?Els8_==Yl^1eE9P>Vp}qd<)`4uDMqwn&`pZQzdQcex=p7dj?PoxML$gprA1R{ z4Qf|Au<MT0)?WROg^@rQB>0;>Gdj$^uYxw_DGBmSA5$;9`(0+&Av@|eFUaPe0fbHH zFD)*f`|=xcmd$ggcX)QKoVjcmYAOH1KOb}L3WUF`m~0VEjXN=>ujLhP$-L@TL6>}% zMx5Mm+pj9N6#-6>qn-(V&i&y5pKu=*=0%?E$1o3ZOqP!)eH_>c%U^C%MW<@0RE4^~ z7^!w><M32sSlLCeQk6pC<^Wb2Fy)glrWxsJ<RTGbS-+xR30Efswe_&}QaGwRe;(Vq zS}d^8J-->Dds(wwhIjG&RintNQ(v>RQ)MFF#pQyDoAGJk&0o~<r(l;nFF;c3vq!|t zlA}}Td?2^rlpvci7%2i88W9WWf-^0?a<M&5(sz?6g2H0cZZWizHn;=<i07+q<R=UJ z44q0&_EmWKOJZ2-APnV#5?VW`^U)u=-3yK`yglE^4Uy`w2X2p41I2bOvNcP7unG;L zUBxz`=U0yX>ZOg(`RLi_k-A=$WLF<LD1};5#ocja_mla3giiX-bG6OTaoOiSQS=zO zwKFK-aLrjrY=jV|N-wDf(5^sHXb{8=NpW*)(v_gx+YT(nrQ7G!B~C_bmD@Zy>w$FO zrnlJ^*DT(!XFq3WErHZ|T?GH*Rs@Exy(%jgqlIQ&u8ZHIrbOQ5VMMF&s7kK$bHVMK z2EA`LNWxOp6RI9^!bi2);lAQ!O*QJe2D&5LN?ZK770UF|uzA%C(7|ld$<vts2TX~< z6=~fwB_6LHTt`=1^}f))T=qKT7P5P$4$_QB5!Km~leh<mf6C=h!|IeNeLI^NYX3WQ zakwDCA7W(2x;TXkJ($%+C056uut^>Jf5x5BgB@<D+4-l4Q8mg&bAr1^Zp;T$54mCc zi&WY%YMN1Erp5Kjfd>g4b#JGS4{=jdi;7k@>t&Nkhn-<qh;$(tQDZ@6!N-Owk7B|3 zkN(shv|2IHD9w7#3NAL)KHMBhdq*x&IFaWPWLg(Kva$TH|5ZsnY0Ra90qb8Ibc>m; zDX2wa^P<FH)ptS+H42iNvJ23XORkxW#kimJ4@Gr?%5<iRfOHsHx)3d<b9CqI=D`ah zFIxb<d~8Zw|0b^ka<-X&Xy=vqO9qFQ_(^|LhEW2i&8AAX!Ii~f!|`w;s^DUdlX;mb z!IHLvD3{zCwrYPBebo`f1_9-q!l-eIZssd{IkIV{JY!KTCW~rqA@LNyIiDcw@yu7G zRO`!7%h6Fez!UzSzS=TouJJi{Hzx(rtT*PHjwq&c?3&r#)hH#-M=qGlBtYDDOQLPs zk7T3NxG9b5Lfu;IhS~Q)de>+efoF;n%1(N3E%*>v_V~R^4y<PIM6!D$s1zDh@;EKB z^>0OKO-_bU`R`mIvMv!!vTw!^65cxNCz2J@CC%A{fG5;*T&2wbh$V!!SvpAzRSJ;I z+s=+hh?O<PQ}Dw_TNtLsc7~y(D~W^PHxo18J`yK{9uUkT!<ycGfMad%EtA`0oI&w# zUb44hz~qbwo1y=Q%!Kbfg;sB>sdf6gU?EjR2z>El4DHb3{eCtjRvjch68XM)>q;-l zEVFhp;N>~^?CnKDZTIFSRS@b?o<>@u&<f&av}d*FEP!M;6V0#Tcr{HD4Hplxi)f6! zgTBh2K!D=|<6m|?3GJrUByWRRClf-m${xR9D$7&6%6RQ9jZkalCK(vm+E<V9cgt*5 z<6y5lZ2uXu1=aRkkxb?>$*aOJ)RzJ4WA1Jh*rP}5q`eg2s8nULt^C=p@y7@D&F!z( zQ~a{^_DJk0OpQtq;hkdhTJ1Nhw$c3ANC80nq$YaxwrH7OQn)nE7V=S#m@y!PYWQ<A zPbn4^Z`%;bak`$dz8CqIMc0k8-)jvg5pB8XSUt4~cwWa`4x;(m@fUY;tZ>%FaQyBH zkigX$b*wepv*TG^YDBA69H$Ev%1;reb=ez<B7}@}Z#)hkPPqr)6?MUuZd@!y(A`Yb zQ<DO_DRX9DkmUqCQsf^CDK!NwVQQ4v)6FZDa+wfU&>Iw350f?g^L?_xXr%bmDrKbr zLd6W~r%pE%lsIuAjAWuT8H$WNMu-<McjN4Ta)<EGrR_1ttzB3l7y5P5O5={GYDODs zxQXEk)&E5j&)B#Q;f5Jh=-2-67u%I*%Oy)`n~=b3tvcaar>9p)A#D^FG=S=J!{rZC z1IRNDz9#N#s|uc+U0+w8$HRX9y#bXcEEwmv)fzP1-;491u-02GkYkEbDRzJ&3a)KP zj&B!`F^Zq-$mVXh4MAI6TAPU|ea{K2)og&@c6a5@O#(kIT`$;g<d5JjK0?)GF>Ohr zUEnx6qTC@t-I#WhCKeRoaMMbdir43I;Gh|T+{CO<9VFw-`&CzBs;u;#UP4w5{C;{| zLBI_p?b6&H?Ln4M^NbnybP!NXj}Dgtrx-Ig;3I4!O4FcgWZ4m5{k?ftrrF|gCZ(m$ zB70df^mI+1Wzp#kM+7Ir@a&Gah&Jq4Iqz$M;5Kvi)o{Y%zencgrdwJ4pr_UN>{0gG z;P(|MctU@s?b?e<*x*?Z|1@@oTzxX02Nc(uwzS|FBHkmxkjkR9R04>6wLyhSn;Hy} z8s^$9%$)IsVZ~5zKR^+;rnl=e88Th8v&@KpSgl<V8DE<OhkP&2US$8X**SAs!RMS| zC?ivr<W^4c5nV2~{Ss^hDI)R>)go0G{#0>g<9tf&$(@bH)<SMwK~v1V`s6L(y?jO3 zf;DQu%#~ZSPsX}8s}N|-PSEE07PH5O07bZ>oeW~}BNmx7{gC93cdAkOG&vxS?nJDA z6C<%QmgIkDE@Ko|`;*2F2w(y0+lCK<RbMWK<m1oKMT6|Sq$z%WRe6l))g`haE4kPA z8<u8PCzww=>4h*tJA?S0hM*}SaTH98Nl46-r#?4UpHXU5Uk2QLTbR4kIrvsedsmvi zafO0Mj<xp<{Nr1^K80}V>2M$d4hvKlxHdH$o_{bVtcW*kHutgja!8z&RLf21_9#It zNTn>P9?0<#7k`R_bmi({@<&wSX~hzs6}UI0rOrjK)hz_o@YLnO&8vF4O(%X@%xXD1 zcU>zK_!jxG3KJln&Fs7_uI^ns0gv8NKX}ggj2<o22{XvO-q(UL)qT}c*uK6gfy?d0 zZ9N@<OJP5~`dM9)30a?&Qzls99{>HNf`C`f=db*L)qFUCZF)@lbrgL$agy{xh;lRH zhLF4vEYblrA`;V%@N<f4#$N->)E|vTX^a-#g{>+Q{?<T2g{WC_TUQGJX3?LHtcO=P zH6F$z*)l}1fVu<CjDt_LY|45`u-;(zHrXYPrj9XDCF!Pipd?GFPFHxZ-TMahBmt5u zh<B_sl75>7Mqu$(UugP5Pzgs@0fU#yVI+*?gM^2v%FRck>|IQCHS6epb{X!HH=<L& z!J#<;QvqmVrk7MkXH7unRNEBEwl)u7w2Trto{X{!BK`S#9H7Ng?+HxOy-oi{{iJ|R zib367kVu+Rn8`QBPZ!%+gT4jL51M$$ieL8q_oP%e${{vj`x#~@LQ+lt9NP&_YEfH1 zzuke=CB4X3w2xgSEZ#Kd?{)LA9C9!0xSi$o;Q@s9%=~H&L=zKLo3}75tv$RZ%cX)N zu7Ph=RC$!HSu6r9DRr3)Fo{nj4V#k>Kb|(xLU(y{ul^=5p{2-l`f_*v@*!0XMVC1K zL3<wn=GprnMk#Ad2lO+;`(|n1BmP#ueT%CpT9@ouo3+lUUQd()PwFCJ>lOMRtOUMj zWhIscY1sVzo(2u5PFO|P+t|6tVV?#wpL#4^?!CN#L%`e&><+TGOcd}F&X0nW<f(Zu z5cNFqP=GaKc`tGJ6`kg3D5t*N&Kp3I3F)}Aa}Xs65ei9?L0!?Tr40>!t6*Uw+jpZa zrYA|IHC{s;r1Cb~k{w$riSMh$2d3-F`%fZR&ZtVHCcxMSylrp#gCUv_Y&06V2fiRD za#Z>zf-XbxFQUq+(LZPIv4&zCDVhPf>na}=tI{gO2=|r(flfon%qG?^-uNCUD2s+_ zhPrW$X;Y~YS16-n>jTya+Aj*?Uo?%iY`!bOu5&uv-t+SYHFQ4T?6nU7VhM!9NzLtV zX{vX_b#l&#y5N!NDB5J%9z4}iNOv9%CYeD=gF-dU9|=Lq1ylLN%gZaUpeA2m-Ys~j zO<kXQ=RLK2vYT%9qkat+Y@IgwPv>!<Pf#DMq-c*3xC;Lt=KP|Z;Hv+ha#o%e|JUW1 zyh;M-p~@eFuoydm;xg*<RlF^Hl>6hoB=ECQrBsiN`FxXm+GORpU+8RVL(FFsYeQJB zag^Aqkcm|!USGK)QmJCe!M*qtIbJz=f4=7sf0=!z?0Oy&MmN|0@Dc3nqL^TJDOuBO ziOy*!rvAR0GTM~ZQzoB9DfWdtYd6QjMmGTZzitMsTGpqcUWqh<+F25~sZ?Jbg~U!N zsMjxw1d01?ZCiwaU{1e#DdW;|jx0tap<r1vUJzsn3$78*3O(TPX{AP&;v~!4={zys z$)DZNh+&)a4ds4iZ7XpWFyag9#4X5wl^GDObcdADrGL$Voq<ARS~nq`#-3&*;4i== z=9iwx?eW2VEu5B|?>%*L^RP#j%(N6$IZ%l{noAL#)}B4JzrT-Z#dfhkLiwk4NeuM$ zOUv>&PI!phDxW53lHt$atmXI~qHFP5p;AKt@swzw-)!jE+En#xOo6+?_;)-#8AZwB z{00RDkD)N<k+I(YD5oUUJhd<Ig*lIk_EsTcdGhz`;jJYp&VL~Fdzf|wfT_7jpWN5O zuRODlC`DM`8c+Jbv)gO-yxO3rL8O!G3cFM_Au?QH^e4Kz(?jeG<_(vfTiZy;v=)*h zGOM;R`;P~MYJov*;N(}3^2(!3t`(%0_RW{-{;4JAhL2VY8$V=CbwmQb5#xHW+cp4Q zDRaiD^on>YylYQ*-GDm}9!|BqRhc7Q7p*y6Ty~tUFHniWLq}*NcC;6krG#&KpD>Hz z11X?d#^Om-Lu(h!Em|WFnYZ+1i#kd3p0jp{_3kL-Pt8frj`1(GhM2fx!B8MJ*4Gs+ z%<(fj?TAN$t3IP)FadmuE!dQ~{T=Rt6|RHpas|OGbDJOqO4|gSWo&dR?N0?#1Efwp zLo@J?j@2>(pufrfaU3AKe+pxH`6aqk@v4qD7;qW@!C0CozIi?#wG~u!(VX^I%66k* zfeLZVB^62qI;7*wZe<Mz>RpwS{?@&=5+jl?IIA341Ll&RbOQ*8=A8DU3vo48^Vnv{ z596c_ab?OmSJoYw=glig6o}_0K0C@4kWnk;!zt~}3o5GhR!{l9W%jczYnL4AL&CXc zkJq?H6tYwbSNZ214To(5lN_J*rbF+3yoKm@6UBcvVX1)W7d1@%$ESfVjN8lS{3!FK zER#psrmbsI+XL_eZ}ExE*M&Pd5WwEIWSx|#S&NDh`SR$sU}G(dcz;b)&|cqyFzYl6 zoT>Aa&70ArYb}0*7c6bKr;s(5F{bvFYq=+VP|Ky1VB0GMjh~Qt{etDPPc7@pD*g>m zl1Kt$EA<E!Aci<xT*IN)Ct?2_oJ6uT^ycsD#a#JAL4o$6D9Fg6uF_*-Yn8s+<6`?~ z>Xr`KOb@*WBcXhLBs(Tumo%d>l_-fv;+U#S5_ss)k*^9IfvWUiRk<`>x=de{Vd~n7 zqxZR&jsi@k`Pn;Fsi2djO<op(7-7;mIKN6*&1`SUZtU-)xTc6_NC!;vMLxPS!<?6n z=WDQTn?RFoZ4hTth&X!2q42XqzoudmMP+2oW_m@#9Br~p7rk7VY&wE<r84?tRL#n$ z--ZTOEF=h@)%~A;PWQ?PQV1IjTC`80;p9(B1?ic!W`W)>zsFtut_CDa2&_V6Z&O@; zB&5ZO&RkLqUi=aviWSb<gK@%gP80r0)Mo7@;sSnpFJ+1LG+p{S4iuXHdur7zUYfG4 zl&Bl&Eo*t;By8hu37}**s7>y=CA9jx)i>JC_vjGbd(gs2ss;6-TF=Sp?C30h&rnEe zgf>j0H=nY;aTl%Ta=3YBj=t?6YWh-);12OiwCJ>@5<-*78>eg?xGxkv7+PV!=!aMo z%>=AwJg)?^@;G`z=3?zIF;xzjexV}m#*A}EM95^8RFo$e`OAqG)T<<=@<NP@Wj<a$ zMj`2ZPq3N*e!?r@`)$#c68~t%t*W7oeJ%bkAKiJ8-7P4xUEsoZJm^><LV(76N8XMI zGFZl57#Rgx_}Sa-V&x+j83b-1>ao#*S0vMFaN&rCS(qEY1tXt3_w&4;?}!3FjF?|S z8>bA151{+R18&R)1%4F1Tg$k3#GdYXE{*C$2xN0n@?g+jFii0O&3VAKM3rc&rZOfT zCW&g}5N_#Mu7=*VU@4>kM5F!)eqTI8xchDdO?_;|O6{|LYDv<yzA7xsg+nY2aLx{Q zvdACs#5Jq5;u3Tkd3)$LHFfhg>-)zHqL=zuJio@9!-cBLSZ1A3;xV?X*Xy!snaZr3 zVJWZ@H+=HT1q&Dsu9OZXX;L2Ool<8@gRy<Y9TO=w;Jit&GrF%B&S|TlQ}LC9^~@{D zTY=(%d{h6YHE~PMqwOC!1GhK_h;s2xonIdYkA9Us*Apmf&~PRlrekI^LkDf9g6Xgu zXHc@#CX^|(4diOB=Q8R=r=xx^Ip2ZQBH5A)mrv?%r?$=H{H<PIHgnV&!SeBkSU4_W zw*SuW>n<I%N96j?Eh+=SZQ-?<+a@V7Wfce#BieAy1Lj<`m3%o|u`~+ML`!|e!t}Fe z{_OU5)c;d3m*yPDSnn`<ZOh71C!}u>KdbN*iOZ@dd)z5HJaT)UeLLZ4?Iy?)&ZU(C z49ciKxq*V-&PVW#X}L*DQ~+AIFR2PSCz@Olxks70Y)uBn#Btk-E0opbgy4pWmabUJ zjUaqzQUBz=ymLx+&nW=JU|j}Fs=gV`J4NZD#dX(c+Rcd7)IaC%Y1zh-Hmi1s8|U}) z!M9|+zpP+mT2cgc&#n*)A;ECPO43epN&m{uRiPbUyku*&UicpGTt7xXPLZG2efxw1 zXRwd|3KI>RK?jivid`pY1n>moB#j6qnv8W*_P9>WUGg~M7c>A-l}_bSbS>v~=GBKi z;sz5WU4HuwyllN~{r1KGAfWwNGNR7hfAfX+vM728--iN=g5!~iPGt@P?guvS3f+%S z>$O%iJ~zOK3CKqB0I|I1DY3Ltd;eOJCjx=2h3fCRvF;{o6ZLnVn03{w_;f?1u|hao z4#k~}9VT2{oB*DJ`)m0dFJ$Z2b{A=Mq@T!}dRFt(yLB;VsdHsUJ2rMQJ?(R_Rab~B zd_deAtOe-bGmLD=yTS)HF$S3`V$tO3!CrxjyC21A#ouNPQOnTGccEi|bxs+j{N=W) zSy@V0FPJ-88^H>Wu2w@yYtj&U9|Sb>R(U5-Xy&D<A>b%>eMU`OvT+nt_rBDc{D9>c zVA<*(+4@(Ji@LRtE{!(h6;i<epKw5U51X|v3q8Tf6A9$HPOp}-Yd#VoaUL{%3C_jo zy+vlNbune{tN)1Y@U0Kf=D|R6j+pd1qy;0;WEIYTDTk5j9cYu;_`TIO<bj49bX54? zJ;N&ybEuPl^aQdlT0Q;#F5<_fh9o7Qt=#yB(I=$LHR7>q^$C|HlRT;uZG1e)i)D!J z>%&N2TD+wa1MTh%znoaszPh`#N!;e`@MwK>YN*0m<LN;jSpB@~4c`%HLVjhyAufi( zi3XE5w{7*TcaUjWeQ^)vEn2Ob$Y{+E^BJH(a@|KxOoA^$bp*EM!Xz;LKL$mpx&<pA zCN~=D7x=FBqf9LZu}da~*jTj*1UIMT@8sS78Y7XKXmH<|Oh*iCWK+gW|2`SIvveb~ zWefUg@bDv0?xxbTF4%dT@1CKpNuYC7z40zp1P{`ZIeVuMmtUe=SE!h+n+zGCngHoY ziO4A$ipKs=n|h3+x*}Ix3$2BZ{d`|ZkkG{E_aOu12SN7@W5(2Y5qxg~s)1-Zxdp#a z7Mjm@kefT>Tb|uhkk9FjO+^V#!}h<s&i{%E9H(>SKd6Fzp?!DAd6R~D)<UPHSKZa_ zFp^k7YT5;Gz~WKdDMLgjp%<E9`v9@EQk2@Tk_N1n@MhK}gkN|viOJgEa{P9AQLKG~ zIkr|QWD&upm7|2iOKWt9`sgvq7QNbJs$%-yG~AFDjHHM7Uf{bc$f*$eC<~;VNI9#x z0#Jim4nXADlo9>^f;s00kz8@8BYHo}wqQ3oi>ezYnPPgCLwI;!y+%ulk^sBvW!e)M z-%;>k*s}t+f~Dj;Z8A;$)1H^;UJ%Qky_n;%P<U4X)4jg7jrfG8%zOnXL#{z|^lDB4 z_ChD9@E!@}y7|;G${^EN(T{`sK^pUaOz4x{wUHAbzlN>@TJm&>sr_u%nPZbWtl7f* z#!yByx(GHk{uV6Ip~3booB<}M_H*s9JA#if6o?h-(An4iBsgH3X-4I|qO&D%9eSg| zrl7m!SB&Mk+q#E`MtNxFfiwX-F~Rtu)hbS6c`Eik3AFMOC`D^Q!qSh)aq}|g8|Y_h z@Bdz)eo2oj!FU~_3`nQ=5L0PcVSi1EZnqQ99RJ4%=bW5mfU-D!e`dzH?hRLn1jcD5 zN1>u>*jUm|@hfOCYu?Tt{;&1NPiKF#pHk4obKPS*15C$aZeMFc^1~s8K>@h>#o6E7 zEDOHxm%S+A2LSigEVza}Tqi<ap@RB2A>UtEKr@+n7xW627SX+O4`60N%5vpn$1W|N z<{yoC$4{xu0pqdIr-3HHeCc4clV4ND#xsjR^we4~?r37U+E=&HZLinC*k1zWevy-! zjoZBjhyj%YT|E|g5<t`-&}I6}aB3%Y>>CMj(Y|~2?@MX|yl+zV9hcEF8>98Tno^t# zta0=NI#_Tf_GV+eW@2V05Km-)sE#lSQrM$zqIS3-aDA9idinx{%VMXR)Fc+L9q4in z&!42GkG4*(f4rfe#?s@PRd&JsoFTKYpBP@9#4~#wi7(GZLQnN3LI2uxWioNV?_7TW zMo7mb(UZ)wDPtomucA+&VYfEt!q%Rg3P(l?H-qvUq<~V9?(;p@P`EG%3PuKGEZoO- z+$^L42;Z`LomPy?9oHLAY4;nu>nUSNAE`FU$oUlSJh<8qC40mALy0Y_9iWWtYD|tS z_6PoR?3?x9AGgq-EjN{orBm>hhGU81OW1HisK2|f{&6`A3|z(A|2|Plaj=l4AGfHR znqce+j?WQ0!jLK;cHid6uf8WYS0X%bA<8~e1q!%+%%Bb~u8ZgIYnE@(S;|W|fQ6l+ zXU#OF-5KOTqo|Dt_hsVp>W5F7^%Xza{cQO7lf$Go{wFJROjLx6leZitX*|XH-8*&0 zi+&^h@UOy%q!O|+0M~3VSqXX@aP*Ya-XKq`jl$25Jg#Pd<1*+K|LeC>1!hr@WU+va z60j_`MWdwnBTl!wIRHl#{Oue9u|X;mSG;l3C&i=Q0T*%eFs=?w1+=?HG?esF%~&JW zvmOc(OSxCdhly>`E^cJ2uc6H{S|O*uSCKnRKz0wKt;=+ygXNJA$vK)`o|MxuQ-R*9 z3p7NU8ib-2y%ixjrOJ+77Ke%qF|7b|764|APyN5XJOo+p#ZKPvpvgy$0!^a21h2kS zX$pn%o>xyqxYhl|5B%Fgec}!jC18z*{77GN1ezh#EB6W<3EJvesY%!svP1EkSj4x= z_4OO~*#3pEq`78cjvs7~;g&%XN>nqXXi>pz{iM)k1=iNn6eb{shAxQ$^Q&TU01;`R z3Tv{&g<YZ0X+n%qVLgr>C*n+FfQ!PaOTYfz3FIibs?KoEzd5k<R9Od@eWMu^ePu+G zfBF{DwG*&q{<GoC&s>2E9Wz)Oih>9k1=`fdMg^`H6Ng^RFGgJ+FVXDDjmw-TG6S{N zKresquW+h%)Rruf?lmmr{N}j?Kqt{1o3Q22ZgJFwP0$eq@%n?t=VliW?|I*^NV2Wf znh?$+WtqV;`|+aLX>NL(Pm^F&<<KGBo$6L+G3-GrXhNW=@kU**tkErla%4Ot`a<Vq z)Q-tAqjJ87!Rl2J6_jjGIA%^c<487n+zf{S10teLFmff7#rCy`CTWrnY=+8$3?9_H zCgzN1g-bE-!>nZe7Poo9_Zu!YNMR?2QXo03L(XV6?PEDu2(7RniRM1g8W^I1ToO1k zL<#0NLS@%sFy`2zeZQ(3d!WjTo#CHKY}gZXr*F#8Hy-Z&^_a=oZaaj+xe93Ui)DZ& z{N+r}1q9&NbPRSw9A-=aut%HHty9yKUu`GeeBh4BI7F7A)&wU__CcjzNh8aq_>Xmj z$R^if<(WQiRT;NDGQk`QGUKMzYHz15oaL*@$s)Rm;y)06>6ezxMGF}Sww&K;QXfb= z%KdODQw`tS_>b=St!DH{Xsn3GQ}-c>d~dsucPa}M4a6~MnSL7pr?6fy2-);QUSqOY zyUq^ZP!{lAw&#pD(o6~K5{K~bU*kP&CtNSS_Q&U?bqm098OJX;@`78YbZNaQP`Ue4 zN%T>?SIe(2uKSE#Csp~j)nYZBq7{|uF(}VsmL!Uy^S32Ljhdzjyu`oVjTrBh==14P z_ErnN*e8-;Lzfg#GV-oyYMDBQ>yHBxUND9W&mItxmg){X&(Fym8@l&X$vG{alCgq} z0_UihBqqb6`TY`RAvst!uy~{QUCmbr!GZ{sl12mE3OltdP|vh2M1Qj-7j54_7xSnj zoJz0h3ZuCl)FEfpQ#^=0gP*kBm+=mketSG>W|?Rj`Bns!R+>u^{gQHrMhBay?pm|J z3?^{l5<Z{Bxqz;sDyC|?5D4iO;{Mx0CF+^~8QSq$SdI2Il+2A!3}F67ZlK({WB0Yu z(NIOswz<5mc7xo91taP0ei8zi0malF7C_jsx%**1-`bOc^hU7c0&^rY0Agw;GhC`Q zkIhK2rgj0~#`<iTG#i?y3P?4X9OBp|L=wrm@LKAGqYAhLF0&BE5Xa;&5e{v>=}nR+ zh1a~#*c>D&Ob#A+Z_}kCJfb_XOLR6F;MG}>^E4q)r-j!K<s>#KQpczbh|M_BQh!E) zmHHB`Q|i3^>_LGP6;KZC;^NrP^*{#Sh!Ija?VSKt>>f>A&5}KeWwS4JlO%iZ<uv{2 zmsjX^;Kfc3cE>W#_T5a>K)3xDlbAra-Ogmn>7H$AP0Er+9P!!W-p=9vUh-}3<LHip zBsmq2Yw_p4E!HkXn*ih5{rGVG6Dr$DORzLQIMf47Gx9*U{Dx>FwS#qeW6E>DSDWSB zJL~}Mls1#}E)EuhRde#pRo6HRh$kH9e-V>Bfj3FHAuu4y7T*$0kV}iar_+(4T+XCV z2y$8rH#D_l$xhbInD#5;3UDB)(l4Cwh2v#OlR!(<>~Vc~p0SFZ_98w*#lar3Kwa!$ zU|EENP{#>+nHdKHZ7Ei+GwN!2<bcLd9#~*)Md-Q&iLI~W&!zATwOVK>?COM!ZlHUC zeXS?g$ajRf+?BU2k8;g#?E1O;w9IVGSOt7_3=6mDTU7d0^Ox+pOycQF-O|=ADcQ-e zC~xejq2GKI2{vX}46^IZqffJbW`Lxm#07tw#ptQ@<P&6}82DvhX8Z6#Z_3*jij4%Q zM)ccQkgNZDWp*{~B5yJD@$UMt$4e7^DlM=M_=?JBMH4w0{>Q8U+JUa+(7au){7cqZ zKb+nXqHh7jnN{n$9$kCJP%-#^gJ>+J7$MBqKgff6gh^gEo*R=2!$(kbVBjI}T?|#= z!(G(%fhOq4>kRFKhwqfZJH>r8bA|yBj87S82k_AkgdKVKJy|N7CuDlIh?Jm2jLGd- zw&|!{Ht`eI!Ix-$wmajS3aLYSotK#TZ(2t|hg{dIWs3r$(!KO`Z)p~RnxvFCD`i)B zad>%`SbizxDSRW(|0=qL>io9ucNJVcbSod3ORp277sfAJ|F?TqzVLky=!K($`%Gru z*$sS8iQLSp^?R;Dz|>{-XM8GZ)J3JwWd`m%{+`7|=rxhNc<la&_w8;V$Y0pHIJbDK zG#vq_Qr$5doEDzm`i$*`n9Os#mvXcET>=Nb>$p2`@pF_5_OFM$56s$B(+2g|+EhLD z+${uR49uqtSml6!^kix(peT+vpzE)UZHxLh#lO9cCpbemF^ul8WBI}j|NOP6NQ>BQ z!)oe&AQ5)oh&p4G2-Py~ao}(COj$hStx2ZlfA@`w7V{KcK*0LKg3Y1k$F}f)MF$hE zktIZMoPy#B;w%uKY#5QhMALYTA$tawr5AR?V0F$AvTJjvA36ae7_x8)qKvddq!?bC z{OB^#!sJ&h9Y97GD!I^~@gsxQ?0xJ2LKhecq6q8-ZBuwz5@?Ndn0b^bb<m<8FJ)%s zmenNKE0yjs7ldOO>!#vTvp<gTP}m+7wt`1lvvz;v!P2lm^XpCPlNWn&Lab4b+*_8< zKEpgG_x3t-Iz|DNKB1b?b(5ug@*M{+yao!05tlOc%BWK#SR$$Ks2+{B=>b;S1QhTl zmxQ{1{1j>1g!opPo(bxh);&9*3uyBfqGYrfcYT-dtQOSfu`Sp4SQG`{Doc<@4Es}4 zrtWG}?@(#5$_gpwtxod*n^m>}4$JNPPUj=M7vyB5e`$ce<YANRrVVn01Qg=UT!m@O z)ic|rjw>mt1&G5y;xWvwRrP2y`#0W9H_7{bGRGZ*0Ji)Lc?66;b0581tQQO;@pb2j z#4bA-x6Ob(4C0Hx)DSNz7$pXcgMo3Gak|4pQB=pPDClz<nX&ZrGNLR|SYzZk1;j63 zsu)$S3<4k$Zua+k3q$doT3MYrAz^9c(<9*uyWP)(&VW#3)WUk5;mwAH!A36Y#r2e) zp#nckTxwe@r!LF&C|MDi#)ZPx1@O2j$?ssk2oD<V!;!RtrH+aK$o{(PPZFXfPQosX zyT98!Gv;%cIUUJC-KC_?LK?5B!5*fJbp)jE&L%+CBYOs<n*#awf1q`qVPK}o*?;jf zGHbq9?O}{Xkl9*o+Ieg=;b*vk(`DmCYaknn*q?rz@_Hb}L6rYd7$2pQ@hJFp_Mgu! z6eNFBSR41CXGsI^D$8xbi0&ZP@uj1mzI?zdu4^#O{R~yFX_mqfFO^qVm;63BOMXh) zrGF17Ji`eZqgKf?L6IH3hc(K120|ShDRB!j<_zoQM5R2YjY*p|!tn_UA$o?D#lJ5! z$Q*#t-5_c`A{+?eeBnd>rUB1gFTvCNV5z_^lJ2v!hBEi~bfS;6eFB(+TS<C~i|2NR z0|h;Lq>iY|KeHxIsm?J<zbXNSkwFR6kxIbwB#n4wL*azr0G8`NvUGod^2a?rT@S$? z<4<CnJHKS4$mn`@Xt0hkAIQmV5k1hw2ZVfU#`zFiMH}#nUHrO?bx7Tg){VW2$e$XK zvCBv(Q-@EET*n#vs6RIK5$b1p4fLJu^1}Am!B>e^vg5{dIl^^WjF9anDj?V1rGaAh zCR-816{W6A%km1-%AXRPAS^A=K=i9L&k=Ma6=LU$&JH|N)NY&KM+&{PM5S%b`QXHQ zw6VIAAd}FxAEA-H)$DA|TvEoAVvqZ#_h|vLjrG@A`>tGFLUZ?<{caih?ZCg8w3^{3 zz0JX={TZ*g1&`mf^woEDg9(KJL4a5<dF(B64VjFDbcB3uO`43n&d44#;UW5LZCWqa zSiF!4YZ)%W*U5U6GcVB$pQvP?pPlWm!bWCcH|FzX5Vn3v_w6A$#=zi9W{HZxyHIhX z%yjU?1gbn+)FXq{BYAS|;yFunlWJOFbExh&Yy%u6ocf=ZhjyU-q?+h^yMVe2PRTLF zmPC)~@YMWhQ>O5_<Xg%h4yWeQzG5*rn`H@)-DeD&l$#TTydXL6^D}z<<|mJ=x=lPq znNej0m0-~*n9a#sUMqi+c^o#`KUCJd^5Oo7UuYHlxr9k?Q}6SX9`w>1frardqJhj} zZ$$h>Xfrjb>;x$cap*ZLZh)P)A`WcaXlV7T2LF~NB3hDbg4zAj0754n5o05ZF`U8f zVQo|^3}|-7nAb#Xou<rLyF3IPZ5P_cDffY{$|&U>=@3@V2ckvaDat}@7*3FF%3`qA zKXzsd=t^=W+ke5L&t$eYV3xEgKjJp}c2cz|;BtSd3R6%nfUxq6VFSn^6Y?~TxRZNY z<NL-#RjZ}XXQpR~YXOmy54Xx`i!SrbeWV`0o%FW>7wNU*d^ri}fA*20-x|&2#Qp_n zwA({cU?c{XMUUno3DSdf@;CCQqDz+`tEHmLM4n<RnMxP`9E2`vwnm*YfN;Jn8HI)F zj&tZ{)JP+0{beJSj0E%o6$B}6i>Rh~bnGC{b!Kzy$sZT+#-ZU*a@*dE{sX#mtiBN? z1w}u<b&iW13DD`Bb@#>(NZM$KKHjEI2OlWX)y$bB<LiS)fConu%Bp_2tIFUd`)kO^ z!jIo(?`R2|%fzzm6=>lhVug;+Lu0w-Fifot4kqL5vYL|q*au*L(+>fAykdh{hfC*^ ztZinLa;#JvEMuK`7M!}Z&c(}wwZ3x|)>1^_u~?t5EV>t{zZ#KkT11aCiji&u<y$RN z>XdenXOF77*~F=h_&h4^s@?LiX}jyzk@)Bd%fSn6H6!DyYCi{nl0wpmw*oS{-!3^d z(#6a#i!8UZ&A<n}BWcfS=18u*IweK~Ec#Oivr)NeKL(eoTY@O^mTWj3i{WD<UE}D0 zn+7hOmwJ`z?yGxs--9msm|%ztEqfzf0Uy4(<fCc#PtYJaXvy(4@oTJ1)YZc#l_#@4 z1gENfW^%7gSj!62y9L=EEz&UGN}c0*u9DuGT^^D2TL7Xqidhd)(q@2czXCR6_#H*> zT*~^A<8rmqOR4&gZNEHAl+RI>6U9Qf3GM8{TSd0>6-CHGVN1|Flu#U8Y<{xl!K)Xs z#@)tkkwN?)qpmg?%l!RfWm!`bpTIEY-jMnN>c8`hYCejFqO=9zdNGD`A$$bOk`1z| z*4SS^7;r-O$y=RABD6a|RWxoQj;!49c?}WJP7}7UQ2sF`^;?)3V+CME$ew=ii0g!f zmEf1cPG}*k`zHSkHNsi83XWU8Ecfiw{5X}Pew(w%Pt7`3l?kQI-xDX_@&?1J5YYQ~ zAd${evjjHwA<fK_OyWJ&<-+iIwMQtJ@T~785wKvhaK0$g79rY_&tR776}oCl4UzqK z;_f7i+f6#u^<%oRB_qKT#h{>M$^W8UlL1G7Kpr;$*3hOR{g+uXZN*Mm1w8(|uIg&* zF9(6sZwd4rjr8EUj|8f)u~xhk&c9;$=RPs(RjnfYK@ED#a-HYxJ<icC&rog!Z2b^8 z837^6$^yK<U`LHV7D`J8r2k;sykl|*K^2a1Kya`SEQKNdxRNTmpsv6eNSXZgRRrxm z{!5bYa2|9<r~A*vsJbge#jul!!j{sO?p|7UR{~LPzGM+3lSUIadjOmhfi<)uHOLGU z4B|f4nsm1D!b1FN1xNPHK)O4o0euHG8xQch<hu|?*b#*9l0bAE({Za3a8uM>ifoZw zql%`!JTKN;@MBq;ugk7~L#s58+V<rPv(6UUdVCMGp6G{UoO|=!4|!g+B@wZ)7i3|* zhfP2_`INOUk-I3BdRC^gg=h;lG^8@m{m%NN4O(uC7#pibkjjJ<q0rsewgz7Cx(1jD zJA7&wvop90%12d}tR-0NTWR5ZwL$KZfDWDiq@JXCEZ0Q?jDJJ<8C4@6?7l+$)-*eg zpmL+f*^Eltu<c2G_3cIes#V$<`^o>hiYP)*AG(PvbJ?GJTk~8UmK0Evkf>#o&yh_S zwHy?sv60&w&Bv_UP)imyuHD*v3k`e_99pe0mKr%5w}}t+_qzRKQhS>~`@E@_4PTfD zL5pY2k#x|F#?1jCUb#+BPiRjM{s3#($4&4|7r`!5AjBr3Cx{#$IBxOtuJVPdQM~mZ z2#d;~XNC^@huIy>?*;i0Jo3T&Cj8eDlK>_w01~=v*aosWW;dD-%sZ*ty&EWQ6L;#Y z5Aihl^W8iHgc^#aM9o85_;R~M13zCO`k$vY{jfP3OV4&OH(yADzhI0w+so|v1)las zA9rn5UqFI^@XQ+_QIk6gv+Fn6Em3+SR4I98c$A)!F$%${qQ!RAZAa}m;Zh^b`&>;% zaiy}Bb}o*o1<$*3JEc|&)l)#looEN;VvX>ztF;L2WTP8O_bV&DoZYf|roWzh3M)ma zFzp9{*p`^Ud>p)nlYlfe^Z}y#{!M*~gZ=}|_FM%0x@Cq2Ov1shnd>P{y06PUTA$Ru zvEeRFlDb!tlGoTC>Njn#oT6yff=a4vhdw+yqN>6-nA${oblBgs@(TbInW_R6BI>J5 z@ka4T>aqAtjLzMJ6odjR9%V;R<8;tTWhtpnKWM)EXJ3$QZj8vCxyu5ZoV((GABNwr z2XrEL?nuQ4dlgYoeM7T^Ny#!sMQPi*Ar{N&ojDy4r_HOToe_c4^~P~{8#fK0a3uZg zhJqFvBLjCtg@~LDFeWPCCZs775+zN7Z#`wZB^vJEdEg6J3!P;+Y_;_gh5MAj^4D{0 zYv2TC?QsNng=$;)40zo<J_&LCxV9^y(xl{(XAhrVj&6cOkiyimrutOWkNV?=5W{!^ zW4YU?@y-3&(A|9FRN6a-^+>IU08#N=0oh<p*~NbX4vrJRASm7^=hMsk#FH&su5Vy9 zUrMZ-B@^|W4(zMuDg6W5eo8brd-yGAtFzhWN!^$N3!5)Z0z<dadb?M_)&N5gYdidk z+oqoW`y`8Bg%hcphj+Zrl+%yEj%3y3StVD*1x|l-sPp{!LuIKG@1FgK!!_CKSO<)9 zjc?aff8Lw{2u>6(16wy0zdKrky3T+X)<a^VK65bskSs-lVgPB_WL_vq#&9>`^bPK- z+OZassHNorm6pY-2m2bP>MFr$4Ue`vOh^n7FIE(0X=^rrAn*S%^^U=rJ#VyjY}<A+ zv29H}vF(YiC$??dwryi#+jesD`=9qzy;b|e{?ygAt7~`Py{>z$*m3W>td~-*PEmIA zT}PB{WO^pI<h+@(|HwRsxWrhKV*%pipKmb#a#(u-=!9$fDai_Q+jDeGqYvgh3vO4Z zj%SWBbGSY!A5`2Jah@dI^%KC0X<q78UgiaMMsb;ziBk-}K|#V^*B6sd9rWwKV6(;7 zJzDtBq9e*GH?o7p%19%mg|zEJh<i=L*U0TEP)hM7HpABri<*0Lln&_m+PLI3<~kl8 zjtq$a;ai7A9E6)niS!IbudPM-PVUtB(UP>>DJj!&+5sfa?oyxeVoJ*N3`s_>LSh$p zC_Jpri17`vuPTG|40W%WUy!*@VbM^(B|d&*9oV)GUv%(uOzVdZBP!*cJ_}ffQ)(tE zk$6x>dVjW_c1pIz{fu~-*cvON*x88|lLGaVzoFGEy%U(|yoPK-OLs<?>xp#&PCoOe zp6svb#;@a6lW?BGTFz>Y(`NBGYLY5lvkj|C+Fp^voR9ND!)QJl*Vhu>pt#nK<L%$5 zzGtukGK7(*F)g(Lbcx65MO&;i*TJ|SdT!6UTY6Xw@9ft`Q$Rztm+w7ZUW~+9jD$P@ zAU&5&{HAH~P5*F^2+pN0i<xrtjd0-%g-{}4K7oft9HiU69Hc0nU8}piX%&M1wK(h8 z|JULyz;LW?jqp9-{d}QX&*bZKpv$l75aE0nICH-g*O^%FNgW&D`0|u`*L~Y+$9iHd z0jU4b6R@{dpo2Yj^aV5S@YPRJ1XQSgS$r?>M|}k3L@_Y*=wu64Ja5}fGmI1rzB#VZ zQ{+q^HeF(r;VdTggtglzs3#3m4JKNGn914D2d^A&)6c%5zj^pLgJ1HTe1PbDn?%yj zz3c&|e@6PRHnEK}war(#==>!636U{gPiHnuj@(J4YrfN=A8el5>!=1q9K%rSK+U*f zEH!ByJj!DjI#Q7CJi6NVVsuDsUjrrjf__a{R9>*E5tGjQtG6yTI0HFVJID>60|{B) z>llz?Fv62%m;1f7&YgBm#zB<<|5R_@En3Q;?%Q^u<bltBB6AX-scU<je3$oG8YIvp zMjo#OImtr51MPr418V@HtN{B6?HeDXUeGrrOf-?3pDZdQ?Z`bpNLFE=Gq!?=3<f<z zeq$yxy5O>c|A;{2|3?Hme}vF<iMQ}vEiWUANXG!OYI!_=GFSPX=|(B)nxZ!~8`w+d z>O5`hIl>%ztp-fHwk*-vl#HzUg}??<Ez~8gv2ss}0MKI?4EjA}l=CkHC@5d3>3W3= zBTurDcS%8p4~NVDwivN;aA#mU=@7+(R0~`T-|oOn33g}C2{EfdJzohB=M*P>!Rq}& z9G0|lEv!(AybU#d9m~VvfA!D?_MM-JLiL97$;zxym#^x2dB?i78vzTi>A_-U@BN0G zGYHm40MvL51jMgpX_hp*98$UD#UyI7XEUyOVqGNfiRLl4MIK}nj8iI9!PPG78!0Fb z%tq{7rp~Xbt&d57q9&cnJUf?yhbmd<$)mF%yS4IAr9FCyYaqnO@k*G(EPWGHFZ<5L zGeY7s#1t>l+*JC6`b5RiBh~gphGP)x4$E(r18{~rCWkay6mcU#C{t5mpCr>@P3Rf* ztPx?nksOgv@GKWa=99mT2cNC7QqL}XBJWg=NQsJ=2`Q`1rW0R7J>$pMcU<q4k{*19 z&>&mx(qs4?=~NY?a859#WQRO@Js-5+&zOcPvp8#t@!+XEFflU8Mv8{B#7o?Vxo|Gx z01m8)1$lVz>CH|0030fBy9;^R;7{rTe(BKP;LD%|3%j*^r%TW5OsG8O0=#XiX)%n{ zY0;Z%xHyoe?t^9RmvS9UN0X4Ag_9x7gyUXl=KQ7i$nor4d&(QjR3<`+;EEW7Q??>* z$iR3>Sd^(YIiYAHhm$M%YtABr(%c1kfZbo-<LX{WMsqkEmYdFZJlbMETh!gp%p5op zJMuQ7Kz^QmY%Vn4{bHJ#oIVsyOkt;BW@PYq+U@oepQjttn#Ux*Sc~R32ZE<<cO<hv zsP&lOG^u!(ebTF-+(1==4wsVzWM&N^18b#CKM7r5Kdb&)h)uNOhvH*@cLLN?XW%dL z?KZh6isA<nkxlWNZwcol|C6mvi3zrnYlDa&HO6&>x5P}ImGKUz2w+e%T5>{WbSQP! z)QCY%3UB=v!<qh}(%`02Tu<<Og;l!|wK$wSY|uxy)KXOgu{8Tp3jXq()*|UqVcCeo zpMc>qVZ|fVSy`Blrq?c>n-tI&zFV5Kv633aO!b(}IDmoKdoc!&KDjpiPhJIk$Zh4_ z`^0aLtP3vfRYNxb1*~B-`?|C^X~VbFJUQGns;$a{CS7bncl#9ZRA$P8fTC=ZNwn!r zq9h*L(MQ;q<xP|vHTD~s)LHSLhy{?(w%<(>KJ32K{pZkDVYu6CO(~#T+C|~VPTga9 zH~sq`=_C=&dUgFJ&3ZT2I{mUDE*%^jC9y?9!7C!W(R;edq=A<BBKjY8aHnEi&O%Fv zq;zfPe9u3BWUI^J@P9mytflkV#oGHqy171q*@v><5ecV?dmp~Rm7R3-wo3i0d*Pv5 zLQ1LIX~=7o?%d2(Vov~Lu^(fUVB+{_r;%g-_srah-e23=ukljL2a)ndQG*$m$cqk1 zlR@j|<5d&^=nI-oBL6znOPa_24%gvQ4!C0wskYm}52@E4AEZUCk?CZ<wF+#gYm)+K zs~>flp1KCBaA(wQHRemVZ7YsfMTRrejF(as+*uZ&G*JQr^x@G1B@>R%Qaq2+nPaaR zV-xm08vY;(R~t`*coxzKJQV<xmoQMow6fRwy_;}v>s6`l)YadlS+YNsR@_TXk|P+q zrK(Xc=05K)ObmbhBQ^Pz*wjlUyyRqEeX7pEjQus=)WoVr+Sn%*-7cu^i^n(9z19(V zI;RlTR*#wq$l9qAYSj+-E_8D7KgR1UiE^fv8aVU5*G(6n<)mM_R8es~UVG?E{o)iY zX|$8p>{<}`Kz!b05<%ughcM}s?2`Z2&bD_e(3@+rke%}%qjwp+4ZtNWs&(&fC^h{@ zl0zAFK7}!C6h5rIWUo76?+)uL0sraR0JUNjCFBX%G;x-qb>;pKC}o7|4LbB-wr;^a zUkO7t5imf^tjd$9o+s;(!=JGCTOB3yx2e*=T`c7vGeEH01?g!@(5L4TBv|Z~k4n9T z|H-#Zx>p<3;<GVvyPJqIYu#eVaUOUxIgl|ZFS_*XvFk^<Ot$!G#J4HJqH9{(*F)AE zSq5w-CM**M7PIWzaE;WSF1zAQbac6HXg#}_ete+)q>C}$%(O3u63|X|HO+^fF{B3L znV|DQgC3{2u9lxI(J#EP!-tJAH1F{rz+|Jz7N-eCPP3Hr8$0LLe=Pk#rXc;aLGDjp z&rfpClc&GHP;I0bfobp5wxI%UOiVHd1^{$2O3Mr1>4!IdvIpAj^;@Cy#5=XKz6`n= zN5PFF38w-ZTMU<43UzM<O4K{I1b6l|p*3naYHHSwNmsu3_$5g}R)R=7C5nD866wx- zS51%uLfE_j@3Ra6=WW5SfK%d$M)<;Ymd1x0R8YTgUrapQR|Jw)P+*X}JmiDdc0kX= z==l+!k7p3ULk>hc3tUFG^$sBz0o50if$V)S5(}I9qmB0>euQDHm#D`KihHKWZLtC= z;V^s<j(foLl^HAqU&x<XM$$#AD)(>)ct$u%&wjc;6`N&`?N)NR7jqR$(UeV(0}3+) z-`oZ<#E~fHOJQ&&lklW0+VZqHIDnTDn_m*Q#p{O)F=4#@^krBC#EMTp%J&ic=m&~Z zep|3bMt9kWM+wN$NYfSanj>7@vzaX8IGtW5`8hZCV#f$W1EEOe3_zHTGzrz~7s;}k zh8o?47<%Y!c_tHg$qmWu{Y&eXMHCDOF6+!F++qe8hf6k?>6ZwcB05#_H9!*$n@3Tv zrE*XdYl&56{D3RIN&rU}JzsLo=~Q)pI);@}N}ppkOG=oWdWhy}z8*<oG85-6IvYrU zM+6z!wy}Q*LI#(4L4Hz0QV3>JqhRjzFM8);si!cJ9FF@1YRdd<wv1=-s_Th-^7lFA zWV7;|oiKIa(^%uNfTDuw3LpWeAb5VB?;8b=`~N46_%r64NW_a|b{n{hL$D3g(iRQN zX^$<b|802lK%WwsZtZniN}_Dmk*5>+OGYSV*c3NlYV}W-!4GkQ>-#M`trBEE{%*7_ zw~r{4R#CzaSuGn?r;2x~@jB~lSAb?~d>~u*P%m>2<Q_mfWgq|9F}@9K$StpXcq4%8 z)g>&I+JYt|Dd~0OCRdI{Vsj~oi6F&$>N7UFveK>9jtHI-1Nd+e3-(k+j5E@rJvgOB z9F|x+as=-?K2gl^=^&wQWGL?PqUh0TU~><+<)rKuZV78)y{;D;H}P4czv}H~rmClN zpMy#(3j<gp@JvC6IkaYTd17Av_UCd(oxUo;a@G)p>iX8Z&?oVw5Y~#ug{BoX@I76x z#Ex$Z_zuinm{o!1MJd8=uEh2QpCz2_vcP8C08?Fci$#6(DrhFgN6t6=%Hk4Z{Mfk3 zF-88QM3oLA{+Bd3j3OsBQ4mOvnY{10X6Q0=iUlYeRpOdVwB11`zCWYf7yq+yJKB>i zX8V+W`InsdF8G?6f_M-?*-cm@vB<r5)`Gp`F`1X^xw}PsXHV?<y4^|yI7#hsQ{}P6 zqYLJKgRho=-6oGnOAFx}IRgB~%*<LZGJ8CO3pLBc2}lb%7l}#Q%p!Ve1$h=xaRtcl zXa6Jhqe#wh@`l&p8Vv@(m!b#Z{LywTpK)FoHrvL)`-dZM8EQ%7dyUDV*A3J?ViuAl z?V5b+7Dxb(KS7^3FDweCwjF$eIMkM!6_pk|o%e6qO`G!s@nHl{aa!;K{Q>B-1#A7@ zONok?Zio9F?twWmv~C%ev+O45y?+PFwib})9m5N^G<ln2Tz7p)#r%&X1#MRpspj<& zfhp+N?LbToOT?Xz!y5TA&T}%)jv?^Qjb8s*DROi2e0`r;Iv=fx`b192p&oxAXCHVl z6`g5G?X~1n{+;y>(FcQ%Ql4+P<6XY%I%RvhJF+J`_q-=lFK=vW=;rNX9UKRNo*vMx zQ((J2f_ZX3#pN%dH_c$<BeG3D2mY~pt`7zLkP&geJ-hU+s}s|ce`b4ff4K9mHyv{F zvFG8%g$*}y!Vo~~^a-C8HMjJl`CbCw^Zg{SKe5|VV{|9LE4<wk38{8q1lPdItB3(l z|9{n*{hshT798!!pF4}YBN7k5={umu)+lE$=v!yW!D|9k6~q%5qPgm8+d0GwS#1;! zZFGUl$3Vu3x!Jnv3mwmE1t$s#(t17dU=qW&>L{!cCFlc$|FyW>{izBFeOzWgDJ@QO zL18Qltt<{q9ZQVJukxxGvl=Sr+gDY>4icUFxl_5D_Py#ZLu=ah%d-s7@pT<1sW+!g zFBKKQ3-l|1JUUT!Ayvln-zi&=PSwZxAWDP8iz-+W?0TX5)*2(&*g+oGgSFLc&s5oU zEOjv$!6MG4rhGQ9mOoQ5pPb!V`K4e-J3r}=58W<C7qEq7s@=a6caQ@i>NUPAIq^$> zs`M6pgX3GE<1B5Xvkz8)cD%E}0L1LZ5+>r2atjd{q)2>oV{TU{=^Nue49X1c{hzwp zqd@_ErtOx6bG$PhUWE25A*R6B-NyC@WNsGidi7rTvhbidz?C|0aRe}!e{Ss|!|ptR zRXO_>Cl3_ktPZ12R5-TFK=HWqr-*~x$<>TO3rXG<;%x1B63qjCc$8;)-2|daOSb`^ zc-r-w;L!2HR>nI<H048qF<-J~?832i!Ld?_A>nXJZlKW0yM2Oqi5mxNg-FCij=EA$ zM%URa{!hP6FzrOKnTZ=vzokaT?<EEQj#wZ^>bBSt7WDG@4a;K25GNauYn<VJ_Mq$% zAZiRNMk?f^z-B=0a4?A6;tD403FQzBb*LH;M?6#2@0Fp$twy_49(@eRV|Y#KM8$Rc z9Tj&zq}g#KYx!xr`y3=j)pnt>j#9U=JYm#=IJicW0~8>buLOtr<Qk}Tgf$=3zpo78 z7O+*>)wfUv=9d}^c`FHjHiK4+J5?w$$@<p(|HMR4wYUK)GoccSM$%KN>{4UD$s!i( z%H-Dx_+-_{j_k~srLt1hm}&vb2A2wn8lY9uib^%B+~>2%d*DeZhl22xnsNolRKwps zo=jdcxZ$Tt7#_+O|A5r88#D`!G)iVWmE<zf9nmKGHG(opInX15a8w)Xi}m&(s`Htr z9hGZVE#Lv%LkEYBe9J!<G_gh7KN*F9y!&z7mFF~_=1`Ay(`R~yD(Zw)^rce_xgGr7 zauTS?iDuSikp1$~bQ;mQBbQ_KIYTn6&t(S`B4CvviNk9FMH*c$V&z>;g*2`owJ~FS z!_j|)Mi(;t&a9PiYTlq9+|%@5j@yVl4b(kKjTWHHO^3coj0-v|d}Y_8#z8s@t509M zP3e}K*}z8M^Om_M(Zuu>Dl3(qMmI%k(}dsntio+`OvD9xjIFk4&$%f*eC5%e%+ENY z5TwJu`>mf(1-%9qZ%M7RQkzuIVfdU8MftY9lN-tbgn&l(cz+JB6L?YyK7Y^o9lgdX z3K!5+ZASt84W0MPGjQNEe_mZ|{ntFko^!T9z#ccIaIDtZk?N9j*{yD-&IC%;K6ymc z^<~uANEC6j`(W~x9Z9+vk}DWn!+Q!y2{9*Ug;+sL-Tt7?4I7hz267f;z%i|9a$BS@ z&5wNcR`4QU|I;9_^w-Y&U(=f$Zk`)W0}J39IjMm=n71hvN`jy}qLl|__u?x#aBx%P zo1s-qDYdR|qQF!?CQuAOu{Nu+b|b56Vz@uePcv4M0QIoj!*{d|w*>5NIoibmsH08j z;0E%<r9J$6z~Xu!3lngh<LZv<4zm}XD;>S{BRujkS5<-uy5kl>6ppX=lB9@XLI5~5 zNYt3=`e8^?lE$$GZ42hI8!6963E=I>ad(g}PAgXeR-}kRKf&neJkeYkx`2Har^r(9 zD0}8l+65Fy@)9r6WR1FL{kGc%2D(hm#Pv}bk%GPNn~#1ySkR%?Lxy-n`2`GwQo97w z?QfNs@d{6f-SEusNPGiLC_1kP0|A_IR+h!9=2nRm7`zS~w%eW%%P98~=H5N(`7^?i zZJ~oE<x@2}{wwphT!kNF=2K-Y(JfB@eXb4ccd1BmS3?&xKHUh`D96@jec5*dttCzb zre*(++Ay;qJA=n*B4gFa{qmum`BYlKu^5Td5W&lPLoWAQ^46VXHxCDl*>^!VsDOM< zzXEwmvUM`d&#R^1UfAkOaGgNn>`&_r9SwsW#3J5=Gm*4AX0rjBsF<L#ab|D?OW^mK zNvpjo;ui@qlig!x(9=**`~rEnmuaUOQaNIfDDcyQm1q=(%qel~TOiL4lL{kPm3Pf) zo8=;Iq}r=Is%{O(g;fCbACzPcLj-Yz!oPiGJRt<&-|I_~-l82^S4q`O#&^TV^+5Wi z*@35X#F<R|h-f0<{_ddS<?kH}1hIB#yD}_afp~U)qrIY;km%w>cWioe&HlCFvd6%< z7!VLgZ1{dgl=~3C`40EF_JzVq<iM>OE6ioGU1j+(H|7zdijM|}lk4Jqz4b^PQ!#}# zJ2tLx!ezA8US}*2A_><Ye~F-s9Wb*a^Ww0iXYF6DzF2>c2vVGc{Q7G>3V%gGQSwn1 zbaW&?K-$1V4M}pG{Q=EV6hf5TZI>0a|HCHj$IvaX$07n3lRgZ%=y&}j5H5S8tOkXp z70dFI)wtud=dS}SiAZ5*P7$39++{7Dd|1nJoFU$4@IKR*qr<I;hdbQ(q0A9(Mf6%q z#Ba>@p4KNucskqfZGudPySf{_;B^Lu5oa>jQ@MQ7S%w7(KImU6QrAi?aUC}yA%1M8 zA~K5zeT)pa_~}5iK#gwi1p}|F$bwNE^j_tkT5m`=4p0E)#WaDt4)6K@0RF)v$5o-w zpUc<GQ+0c8b-=ZmZAX35x}ZgsP=k`j8x~IK;HzyU(d!J?mSDQS1I<|PbByN*J@vS{ zfE}fa1f<cvP@--&J;CW!{lcK+m?g-QwUi%-L@Zp{&LwISgq6ba{vsh;3>OK2ZuoK5 z70wdD@C5)EO>#>P{z=5;29geZWa~9G`H%2ji-___LmeHJN(P12HxnL8?cfV-{rq~Z zfHW3s)j{>`CLbJ?=PtWeFXSQgs)y%leo;D;0NbMX(Ih~==|xMR|D6!k3Y8mHO-3)} zQgNzRGsqYY&R7N=^sl4g=K3=?#)nH40jw_LcY_5GPyej+_ZtE)@AnEX9jtW|IT6DN zFFh&jR&(?;j+7HdoPq!+kAU3(K#SgigDU7LV~DAYa^2ApDZ&EwNy(I%V3K--Q#o3Y zi0H)?^ZsC+G|b)aK`sXw?(^0r4cheb0)3;b8NjckdaoQ0r&*l{grZ89h&aySW6MbO zkUaskBR9+9QevoR(&3ZxT2G?nc}&98OD}dYFcpkLO`nISOpi_OG@!O_a*)>QCH_5K z&&9HY<2b;z1Xt?&G5(;Ala{tR13$VugguRRWq1T<ePz3Owlhyv$|G~5I>{a5AjSu! z#y|hV1VVjim`0?`|E?(D;X17Mdk5>h@c_ir)Ic}s5#UM*w#X!0h+hBfp92y7Ya*bp zaAROYklz1SwgnC(bk;;7iW#$UqNuKRsy85O^C}KJ5`UbBZ~O<=V9Q#Of1T~Mwb)To zaG+l;`uQT$IK+3(z~O=W0(V@!18>p%?Ud<~U&G2?`+bP>o8aD}J9c^#^=bof6C|bV zXQY}Jd?;j}+WA3=y~E6&q>eNB3c7PC5C0KT6~`S?IprdmIe<AOxn|$7ZlM$}=&6<3 z_(2)ic!6Bkd)r47*{D@;WOX4YgD|K_Li~J>*>@xMAH=CkksiE5_U*BHC0lu;Yj3+R ze%{)YE%m(Ssipl&d!p^h{bSLrRgz@2;2I?kZ*+~>*6El@7}Nf~Kfa<vxW#J5cz=xb zP5Ae7j<ae*muJDHVAa}*y9*=WGPM9ze21VGfYMNp=I<hIZ5guN^CQVU2P0%h*mv0R zeq%g`J4h$TEQq;m++?P`bd`rd0UG|TNOO&wsp;|RD_02&f8l5&Y5;&k<sCPyTtl4a z2QHo;J-6+|w)uCvk@%|+Z4?i#!HlsJ6lEf*BJD);0(*cNL<l8lyTscyryADM6k=QD z>(`CB(4J|lOSP^MqSw!9^LIM_=M#S(LJa<+iC#tVt+51fIMbO+nsL{v@>Dd1!Av$U zk`$1GIU_-lx!S$}Xkelp(A;?=!x3h0`h35>YynZFr6l(^!0Oa*KNj(p*huvE_^ht8 z`n&4M1NeW;%iXbNh~!#y&skAH$_6)>AXXXRSso-^F7Q=A4dGEyp<MX1kU}}!K|iP& zx6S&={br5uVu#V^@w75aL|FTw)R>1F43q*C_HDZ6-0b53rQC_pZ!<X9dJf^1ncPry z&SO&98}s3a{67JII;&xHN6x7_AIx{4aWb}VI*sX7;sK(jp}&bJ2Pij(l%L@@kiG2h z4}ZV0!AV>;j7>N=an<B~SH_`QSt#`sBy^8en>fYv-A;=hpscs*o4OapPahYldb>fT zK9$b=z2C|NfJiJhu~*9F{+ThFSuieKjP#c%sbeFuldxD}#Ni030~eb2BksHDm<QIQ z$^tB3uxiRhuLtz~rV>>GbuCF_52RvaZa@UX<A#7*l;v@!ChEf4_5Gj;MAU`1R~Qi1 zF=S~`g4$-|9r(0RexnU{W%26~s#>o8T?4cl_6PY35G_}Z<Wr13SeNQW=SI2wNc7CT zCH>%s{1tBf97gQ!z!Hq^nGFFW9eJacF8p%trFy!bNjnuCu*W)0=#<g*^jk4FGul^O zY|r2tXVGHce&nPznE=`#LjYuvYKYG`GQ{9I^shxP0Z6pJ+i)VM?C!|a11wElcxQ$c zD+g{MAo#eNYoU^|(>P%`d<@hL5_h8na)E<=aLFU!s1<dyNZYHFjBs)(hr2qe%Q7~H zb*YXtdh|HfFv;%}wh$g1et|xh-TI-O!I^V?9{W{Wkgz|`B7~OMc>z6hgBiD$&b%Ix zuG0eUS6gE-{$B;FMpuR6*ccKNt34+TKC6{sz`nVA4&9TA*Uop#pgUG)oZ5mJmb>xj z@-xn+spI<&A7T4*9*)L9U59e4qVO_;c?QK?fq27QEV^bWHm^?pq3IztRLy<pyP5!& zqF>5_+y?gY8vML(-I7CoCK}q)=e%4CX(-+zYR_q6-Hn65Z!PchR_J0=9j+O7ZlO^! zfU?|7k6d`*Drsi=@3iLHDE>ePW$0sX7)^Wu&To%?`_5Y9OiJ5UF*DW+r<vuBHR#>d z0<wNv`)uJYwWoR4=4b{-e?^%rr>zpn3+9OD6!7@yf)le#58FnSDc#<__pqaOnLt+k zDRNzRsk7bLSH4AvIuAR!Mbg8aM{!4Gfaj@0(!KCo*dwDuHYK#iLVXFmzKo)iWqQeV zn!A!OjC8(vx_R@+=A0dsxKTVVKH<|nL>5<Awpf}mW{5Wun3sM6TcH*^9#>$|o$cTT zj^n`m-))UpCZfLiLoN&Xl{|q=u)vd-lEI1Imw+UD>FF!Cj>f1{Ir`pAk1(@h051bB z=mV3~N=36l%oB*JMM1e478FR<^q=575#(I#J7#yb7yC?j3pawbD(uTR8+Qc%VLa3p zZ4b8!k90pH)|8`ML(*tEBZPfV<WWv4HwTB!e9Nsm<Yp()v$hDNxAifSUcjBbDAA2* znQA4QR@0R)+^@KQbOgCYW@KjofZ_c~FNMXRe`6LZK@WL?nN8mb&reArhYby5<Z%Tz z>jW{{4$U3ImT7btB7^$?Y!14xoCo_^61`*y6wDcf)W~wcuhR(Bx-x<c!Rq)(nF@Sh zKZ11DbihgSJvIVOG(oxsdE)TV^3%6|3nlyiiN@9Je=<X?t^Y}S0<>+}0|&%kR-kcf zC0_DH-2<6}6MneZ0bE1YL_E1-aj*Hm96TcKk(^96i<PpsGQ`oZMe}PK5Wgf)+K3q< ze@fPJ`jALz(&*0sDk}*62xpPZrs)G@o;nAqps9d;Iji}&<51BCPS}BNa6C50?EHg- zkb5BD0Y>H(ee;zMKvr9)6H*ay)j9$5b-^)g!?Bx!Rg}lw>=pdQ7){PWo@H};mr%ia zg5(Jblmv%75#F$j(VtWE)GGZdvU!OPH_kU|fD?jcvWyb@g}j%ddTF&7L6MU$L`sfr zcQivaOKYB&n_pXAmdAPPJ@XqKnEmUD9<conEWv-BI}J+<0AtA<C}=YHU}r?eull^4 zczK$59nw3uu5{5KEOQ*WQpIsW(F$mVrJeHA$H1$8-F4D0-6@e#<_^=av?wJr<v~#y zl5!ly+U)anK1NnK58<o=vv5-W+i!b47E;YLVsPN;h;V<*_TY+%qhgeT3`ODcr7jlB z`i#nO9Dh^+h>-g20Nfl<+<KFiB1bHYjKCb;C>IEa`OVFw{li+eB)(XL!KoFpt8o|l z_)1_vh-k~tVwy#FmLagf+u=Z01Rl$)3w>Zm$-X4~W<NC8MAAE_KA<94r=m&(|B<a4 zWmNyzSc@EO_{i9yGLkkQPeBwa6fy+9d|!BbI_|RrlCRYa7FVg=hfPKK{vK<#7;B8X zsEmv`yUtuy$rMK<o2RWa7m=SfXRUfY^8rEO?uZnU34>5g60)F%ZxY+-_S{1lortL7 zIjwS-q4?9>XOYvuKFnHTSKjR<szQK2P}VN;*yV!RTzNSj34KCINCp(K*k9{LmUxDs zK_F)VYy{aqdk8PN5@7-rh;OFKAoH&2=RN~RfWUL+y0bvYois-Va7zE|r4F;xn~3w5 zs$1Y+^Aa-vvX*j9B#0Gkak5Mh*aGcOYe>q_TnyhECllI>l#lZSk<Iz9Z~JZyh+GRd z`dov0!A@L&niQB$r}{l-Z<`@&F|{5^QJd%hQ&}C1=|h1LW!W3Ac;yvv=b0aI9Ny#h zA;F!sG%@AfJ2AwXGEo8D4{53)#JWT$Mo@VO(Y;0&T&gQ`ysMfWZ*J+ZOa5T<CUJ0i z&%a@5a@Wod+TYb#7EF~==|UF@jUNYHjbm{{$zn+)3M_#qgkKpVt#TY(W6SeiTUBfT z3jP3{kT%~Gr+$-fU-W0Kg*I!v1;WVcqdYED&nJ~qGx?a+j;%pgYx5=F(ZR*AF9DcA zkXnyG&2MnDN3%}kT$oZS4OBBIlUj+lDqb^+^iW70__clI%=*OhfOBV9HrHEF1!^&( zLYC&?%V;GcV_y$gN?3*m13?B9Q5sVK<BJzpi(Y1#AKzHeHTTCV+so|LF3!DeqT(FV zFVX}uwm0AMlu<xwF!=Z&29CF2B9;a_%6J~TYyskSYcgq|{Ms(pO`N6gp9PgwG5U}5 z5REKsT8Fu<@2@UE^bGCU4NFGQ^meB%SYKF)U*>MeP>V5gzOdw3p=KZ%-<v1^9WwaS zxW_n4ehB2pj#AXr90Z?f&9VYcqL^^*G4^9q#HZ=)pmMv7A5NCmPJsZ7M(quoS`iA1 ze=<4va)!w9Du~J#>X%zx_21!s<&cV~^%0~OZo|tnRIde1diZFoiuQkKYM`Ycnd@h+ za=Yl}ApZ`UZ;G404RhISffok>f$|7sI)v7-xOY&R!ucNkZ~YlPf+J14zl1@<$EC=* zW}KPC;<;H>*<{mgSf-LFjAzZ^>4I=l6S|lZFR_Uv2;)j6*+$KIIoTu89xybX@{~fN z#&}#!@nw<Yr%QuVJ6T3!Zyb3cw?f~b?R8AL!aAVGM7KOV&wYfOnq-;*BvpwdLYGGE z_cxjJ3-$m(WM353Ga_<4^cE_5NJ*p03tlhko_hsP=A|cNT}j37HlYlVEtqG;TFyBr zG4;wy@lxQ$7WG>;)m2A<mlb<cYL7stA)#jZ^U3*cmfvw;Y3;}`B<Mz^Z^C@PT!?lp zQ|fW@NW!m6k)^eE%C+<XRPa0;ty^e@CT;4%ba17nwlF#oVxE71W`rqW)-!~&Pqq?E z@VSL?L@o$Le%{r`5~~raY;4DWo90WXg-HLwFZcZ8WINvWLRASt_zp?f&T*(+fY|Mt z+<cL@w%bZr?q*RePMGTJ5OU^ZEA5M#y9ZxuxrA0b_%KAbae@RmtO#FTQ7d@)s1jYF zQpmv1(zrcnt)8OS&d`DPzgMXr`h7WkIefzG+>vLaZ5$6rhJvb-OcRP2+!oAHySI9q zbz1W@*%sKxs8@#%zwkR+CA<E^aM+KlrXRgP2O_AMx-n)uhQ>P69(|SrsW0uNZ;`^Q zM;|wE@1VlNGhh#J;Qm+ZW{;0Ivk@H<XVuvn$DGVJ7y<N}2M&*WCJ$Q6_UL0RBV0-P z(0waa(%71~BppjB52HbGft%-?nw1N|lnn$iz6jQ>cKf^?ywlo`r$Ti=ShJ$MJlNfL z!?Jlq`d6;F_W%WU<%|?C>FuCi4aBFi>h#=jpm{0X!lMqLg(Q$mgO~2O)(SUfSk%vY zJ)@VTuT&n7d}9^|TfIIY1u|cD<OEwaR8e-gZjO;>ZrjCnW~^T5j)9*&(=HwxOJSa_ z*Wy%@e?y?hVn=@emJOz?B2Q8o;abSZy%-PGq-H9WZph)Z@9-?O?q4jZx@*PX)wOlc z+2zW5>ohrlVU@u|c^uSg+^_Zgor99!jq`}S_vUG$|9Z005{A5XYg{zTg$RS1yxU*f zn<(|nzV?vukYq&LsRC~0WI92j^Bq5uEwrP*jO<vXbs-=7;!x+$G}W@|gzL(nWn>=# ztszrx_PVNkm%tgHc>mO*T-yxieMYis-Ew8u$^Iq)Mk}A|U7?dK6HL2#*pB5tmK#Kg zs><1=EXX4v$vx)Q6#q$H`ZNrTpBkZEi11oY>dY{mIf1}>MCS0eE!_AlV5Kh4X-ZV& z7XZsSNP;;vGOJerrbiitW@^Ob7J>R2Ir1kO8Lx9^YH=X=u)*}<-%fMc&Y}n1REi91 z$NHZEc-x|<U#+1F_f#4HJpYY-90;r|Q~467QnOZd9OG0<F3!io9Btcnw>_Jk+>KxT zf39L1xqqCf<6^k-)_-R`mKJS0w`h#$ls_zxyCLCLmf}bvmYReN4$^kai@}?)FuQKo zZ4N+_=alc!^F+;+{@HK(E?vi0k6H;)o6h<Ka3U&x!~*c;{UZs8L#gJ-M(3|Tca$@c zCiTks0}dIAufgPoYGoA3DPjf5g+U8zfRYTjv7a*OD6(Il?zXbP%mFc<Kx`U5H_1IO zPWSF$5#fABM?mU9k_pI{4D88YdoEYJU?Xl7kZU`@3~@a$#Z+F7l(kQ%WAN8ekP2!5 zdNfaL*Q<*;*ZlNq5J!_21V3{F%VzEay%e{@eAN*4#Y+m8{mQ!gRL#*s^vKr0x&TFj z=FYOpqVlP454e8wU(7GknV3$oyKc9Ev}#$!>yV-<d+)+ZaWZW1a9A`5(oP-^fGFfr zu@R11o1h@b{l1VG(gim_NDdxpi2D^l5Y^W32yWu((qP6?FAUD{VlV$}hT@{%B@&hu z?vdeX;BF)-q#D9?hwp@TrVPja-Oc0I){2tZ$T~_mGpJ1r5Im64HutP9R{rW6nr!YQ zf?L0@OmZ#P<fCb=E?m?Q_-!vBb0M;98rAlTO%uojczvZVYw4DluyGPz7<L>0|CZ+4 zNk<^ldz1-<N5+YSy~f~uC`XZ*C6a~g)Zm*mlTT&1cvU-RksVfdO)|X(3AoXcHo=O} zP%hBRaaF=j`x7U8s(}8i(&he@%CzrQCSymsAKG>s{o<!lj7}X|Bmtt}d;H4{v`Ba* zN5D(nnLCbzdd~?PO&s1|5zGOwWHG}%RWT<Rsf2F7=96C=aVWE7zJeH+6Vkb*!m1>< z6<r6D72gS`;XfUy1dl769pg7J;!+Cf*rD#_UHe%>y0cy4=<1<p#jfxTRA{R%J>rE+ z0Xg`sM0R4)v__TYgb0e(JJnw5+|GArOUI|6$~~z+&o3;abV?Yxc*_IWH+?w0pJE%i zPyE75stMlQDoRQ|J%4P6Pc=lY6Gf(Z#(80wSFVP~jOm7*YqmNLyJ`Djv=q`{dI>Oc zLTV53L?cMu;CRFfRf8iIrfld^^a9JI;=jvRte>`237Fp^Q~W?Ox2#>{X>(^vn~$#~ zu%Cd)pFe3_j;oZ>G9mz}f>|Q`8HlA;{cW(ak|x5<xKqWW+|B8MbY#a&IxedhnNfOC z3FU*}^K!%z_)&CyxTC<Sz@qsvtrw3><1X?Tu!O=(v1o`Vzh~TD8AnhxX%Xg_W$+@J z<-(w|L0<}gkQIH1LyIb?Y(e)lE8<beJ6287?kc%Ha_FSlP;~(0-i5UiwdE(}bk^(} zqBiJ~0`ZmgY%NkH`c$JTGDiFtx?ii^QjsEK<C<3V7X;alSNhJH)^MG_A0`=(5C!ly zp8r6tFwuga+k_@1$%EWbGk0&Sxex|+y@$P)d8taSOBAjOG?w8C7ChSgTz@H$ZIW9B z=o@M`6APjYtsvkMH>W1jF23<b$XEsnViBj-A=(}V>`ERS0b**)B84_))~5C$E#N_$ z^ktZAX8a^lJxho@i-!MOJ)ceoUTag;tF%`W9BXbnS45gv+IX$cxPys=yAZ70qM&b= zp%rM~1vx(&OUM5f!%B~Q|BO?m6Nbz<co)P9(;)UUw;cc_GU`BgSl*04^6$&gvMLlE zANOxfuxjLkzH&evY*p#)p4R!paZITpyfm|&YasoULOE-|ju;kiSsw{1pgdUfppOKH zo(7HDGON^iPb1>5reZ^H&$pqa_b8@`vIrpwJeGmz+<2_**4}|{|Me1^Wh7#m)uNMN zoYfo{!Wuw_m_RXDrq~Y_hshlxdTc4IG|Mat61`x^0mzboi7yN+VMw>hz)x9v*Eet3 zizwTvJk=#iv8*HA5R{P-21`}-wa6-Xsq8?ybdaBrX(Q+BH}%BqsQhL<9Ez;b!w~T( z3ZW^DVsiS_w8?w?GTp5y*;0fdse%VRgiZ~eyCZ;=jBxHO#&Lh_X-)>K6Dth#kgCX+ z){1HlnN?5aOK#gp+xqJfWYR#z2nwwWMvUnnkI_R;Kn~!O@hx=*c_40y3x8y3NX60X zjom$9H*{gar6S_kE6-<=1P>WLvfm^Nvnhe%O^uqLk7k(QpnlPQ%a1SHfP@=cnptlW z4i^BQFha|A1RHIXDhNJLP~j$)wLb&5myB!PykGEKo7(PL&B8Vsiq2mjS1#&~or}T# z$M{8Sfh2%LG(1eEeIliS9>sy%n1tj?J4Qx|9HIMRGbn~41Q(DNB9M*c8ncDjnRg7E z{rnF8{RM8Y#_a>dXUW(~?{wKFH0(rx`{V!RI;n3MfYMInNfRA~`GlQ*<PJycO@OhD zS3h#_I3tdjBU{;``|bAd62wmd0Il?WnAEqBpY1VEa^S&d#m#~fDUEh$P$j5qr*ntP zkk$7}r(o@f6#SbRU+okVHBv;u(&Ct(ZcG9114%l2x?zJqkdL!+tKZuM{7sm=)(cQ# z=)9yJNoT{YN@kOBJzuOdg>U%d?ztSow0(6z8@rUzrzG-E&BP@-YJI2yyPFQ#yv&_V zeG~jE-SZhH&=)hG5*dPIvMzI-fg&(S9~bLGsPhZfp!8<$nNgec<b3pHu6JjWy9Fmo z1#_eQ!r1^bbqxlB9*e8ZE{>r|B?J(~{!;4w&xy^Ss{8Jw;0ir*R{8zJ`yhCOi`}l{ z-lPpm_`<J}mmPC*58vG+(U^NkucZikYCoy4hqr+~q~_OjQak9s>tW8c8oBf5(HU)T z>ZppRr9(k`cS$q2`cH(!-R;ZQ0#siME(K`f2~bBv5EZ-B_a^y*m>kuN?lS;Q|I&w! z#brot-mCr$Z>X(2(6_oNYApGYr`hy3&<vs~Jeq6ywD{%3?Yavzn@Ia-@T!*Bxpb)L zH|Ke%CCabOWZaK<Tcq3TNRCt^&omw~1!h|njNjNd>jHZxnd#M9hl5HnA!By;HTzCF z4^W%Z(pr8+EE~7N@9$kReN%u*yZ7nEmYhzi^$5paGJI{K+ldB<Yg!9An#Ji#)h|aI z$X$4_1-zYfy~{MmQ=TU^-fk|LmC@_1hwI`tMSkv(FKV{x+x8tFHoK0CD9t5VOVzPd z5ji}DVup)!HNVDFr3b@3>{-kTLp95If;G~kr(fY>$L|MAMc0;Q4P1a``gN5kNeZt! z<q%#<Q%_BuWjCgXj{PKkG`o?GOvHgjZJP4^@E2pXDmfk|9_EI?`k^j4FXlU{3Cap% z{C3S9?7vjqI66LGrzOuT0`_#-XT>od7#B9OGi`;OY9HsR<oOaBbc#_^Lk~2Ii}0sz z*Z6|lP`7Lj%u7k3a>amckX`_VPFMtos<wF2$+xwf{t7kCT<h1zE+`(ihrTdIjyIOj z@mjc*P~4RCjz1lN6p&;?00Z0=Mckr>z5J44&R*)R<suHd#Hp%yR;jCLl55gv`082* zn+}7M7wXceAARl4sg>J~Zxp!Rx`X8K9=Q!2r}>zhe5=tV96R8sT(>vX1}5Kg=dbay zj<OU(XYecn7Gx|%i8?%_YLwL;P$qP>@bRDIShNs`q?)VJc$D7GYzTx|Ww3=O)7H8h zIO0H2XFguoOlWa5>m_g4?Ct5vF~jbg?at`5Yq_ac)bf&;Ow<psEq}_U5>F1NyNB8T zj=(fAT$HfeA^=Xft7oK2xcn;vq-0enkYhrepg4}Wp~+EZaqlzBk&U-78m0?+G|m=g z1pD?|Jt1v2Sp&lM)4UXZI|Ux1$5)CN;5E&__FGca$LUs3SO^u;gjpT8;l(!Z%qe|w zB#GNaEUy|Xwwh_fxwt0_SEuli<{cpjnKHa@?&v;=7(l(@&64B<6)9${-)+|SkByJl zX%r#F^Yp<v#YHa6p}il5PB6v?@EWc>Mi2zY$HW?Le{AW;nNfa3p4Td2<Z^GjtFzn| zF(b+O$hXs2wXhJOyoUiQ<j$qtb-B0uQbn0#InPSQvQ=q%Or%twKNP$=qaW1st5THC zKI)0IBH(JY)fd53g)=6HHInoCL~o-7vn75?sAS#KDsNL-?TYaazQrK3GZ{nCTo+X0 zJPIpszSjva9VS(?42&xmI})w`As!JZC_`T0s>Pz!_s!R?&fr%-c9e~cPa7A9jrjNV z{d>loN->WpQiBI~%1Sd&;h8EBnFY%EI95=g5@2d)^7i<Ax8%7;8~0iON1*5X1-U#h z@_A*r1VD(*F?{lNeQoR0_T}#MX%WIoD}nN^QI8=oR?TKIMu$B>EoNP$WNKe=zE>nD zg$c3;Gx1jOUmFkdPa99b-J2?2?ZA!DDt}r$-VJ3*UHGhaf|@2r#)>4jIFgL^vth<G z;D_)QMLFskg5sP*J@>UXIf*w@r^COVKn3H$kiQjCpzTeA@ar}hqg?1qmq-;q!Cjd~ zl}4#tIO^)EC3{RkSQg#QAda*>4%l#{^2?pUyAJH(frz*PDGOi=tXseY7f+F`ao+a= zN!@}=QHQkZ9{d%|J?zKi$*nE|93glIIMtu}$QMsiklCgbN<&!wx4M#KK>%KVtvZ|d zt$#3asxKRcISxeT%&GsW4}aV5<Q)@J&J(!cg{2R4nhZsn*9{r<wpBb_!g8hqzaOwy zrPz?s{T%_oPw^6qiOnsPl~^~JY`(xXRrh~R$bUyJz#ZoYuSd9sThHO+&lLj!3{CX7 zX>K#->3m_1wE|77s1Ex|$ircV61)AZE+~WpcBY~NCgW09;ww$XZ1JS&eN`hy>(W0m zNxOpAm!XD%?7AbcL7hP`96VLas~VlrEvx5I9#JcMx~iFND`A`o5-3#8a@>-Ra%ksg zY`zw_jirtOwKBz-f5wP_%1kr>mrv@>tG#QzY3Y(IZchQIjOoNBXA&pik`!FLc!oiN z?_%q`rw(SP6n*w2KcR&wv)ssn5~6%Ic$BvC`q+r&pdUX;V>ZXr195d8s#!}Ad}Xn# z7nF^H8-_HX_VZ)-$e!^UJkh<;#hSdAT_n4TB=O?C4=TOZ+djR)C#8Y_6J&wQ2xqYu zy;{xbG|*;|ki-Fc+@T5<;&5gMX_yMqwn#RC!6d|(4*ihLvLzKr*GE)o2~`sE{*lvh zC(96aR`mE?>)J58us7&A(Q2u#x;1)nROuuxfB=)CRGPdzrOwdkLbw&o(3oT36S~AZ zK~>|WSABL&i^OOy!!;8`+>6tkV_vK9XA;OU1bLqS9F;Y2?Q@x*!W)qZ89I@c zG*?m3Vyevs_hAx4Gy@i{Ue1&>OOrS)bFh<f1kx(YS?ojUCiwiCNTE!Y^a(0?>W&qh zJ=})#7c3tjZhryQg;+a9d*W-wsx~a)BQVO-+6uXCDH4$m0T==O(2TJ_%L#qr!q@iv z@@~?d+=h}Nj`s?(6ir9q&ViIzv=!lR5@MERr1c7#OnW2W!v6cBBn?0t)t(!_;f$z> ze56vVf$@gHl`7(#1d+rH_S%D_4H65ySX?xX=(pOHL+_irU{h+%P8+$|b^F#22uL<i zv2@^Xenq%YVIu<!a7+}ewtpnyT+Fp<NUX<&sbj?tr*S;;tl$uoXbo5y7VUE0)T5|^ z_~lN)D%;4;L771UW~k`zA}IeqG%>^Hw&3Q|fLfPa<7c2byf0xnGzN2PnvCzFP$)}E zm?V~~YBwPs#kH{bGGN`u+CSVt66J~Zg}f(PH=9zj`*(mx_&_DBOGdlb!`88C4pSn| zZ`kJVInqMsruC+CKT=)+5~%9So{y&<`HJN|18RPKoKqzeLltip9|C87d>19Arw=wp z904S9r0{Tru|0O@=~432eab&aSf{=h3b89oNo-eLRk@}zEZ?x~Q*)%Ent#)qEVguz zNECVUT3rBRW44A?y=u|%>g<1r%caK?w6?UFNc+^?&gvSRtww^6CuK^}eFCQ!%su0p zX{lX;fQ#3v%{%fh#~0kKTQx}7lA|>dN2>>Ap^v4I*UR7}Pxj%5!R15|%cyYNbhhvW z%9#_TF+1YzfQslrzm2<6jWcWA<k1M{x9M>!13m%VxL!UT-c?5NIf#>o2bM*~OWe?C zV6sq?^`3uK5QaJ;J)TSZjPsK}7&tA*Sl=wJl{{0{I?xVuP*D3NGiZpVua}+pPBa-s zT<@A3#L0Y!%30%5n9Lg?P+~Hq*4}SSPU)`pB$Oa(3Oiy-uep54ipl~DEskD(A~Qvb zzs3QR&GUs^?8OlhSodaYz^WdC6bsoinDW!gE$mVp+xAgXEMDaJxGKAVIX0I&MU9nz z1`D}11$PnHt$#|^_V?1q)9;-Yo7%-R+AMr7!{a1kA~Nd5wPPX@DsY+87-z+`eMseC z5B2uO<KLXZhihf9GE5;DIi|u0Ww3L2CL{qp2$)<4V|Jaet^?%fROif6NMDcR?p|K% zwIBiT4vTRP1-l4_%y<mObgKIRY7!rhQa^g5ITJdCVbF2jahzcAx^&fOc@mS5mZn*x z%!mbDPkiFA_|yy+DsY-k=zr6kCpZ#uaM?}=uy8mLaccYa;?7pQKFE4(&H^|7#>)UH zWnv{^lV_EY{UFGwp#uln6m_G!&2k-lfhw5~Wg`b{##g@?G};9WbEs}Dty+Gt?eRsc zyQ}!l+B3>d`_8g`o`wH+GTrDeDvA0$Q-c6w6v1CK2b*0OHr{$@Zl}<?Wqr;I6vHi$ zJ9h|-j6wuYuvSm}20xz6mjHw|w%f`-UxvY?kc0M~HTz&rrcrZ<PcHr$L~sblvPEy~ z;-tLt3)B@>ia2w#G12CFya=i{sjZOkixX||IB=^q%l15$OC<kovlNm2?cQBzgP%^9 zTX4;JQY6R}*t}7Afuv<+vL^}7$M@)8>yf<zEEf@dG^+sGPj>&JX9v)Z#nvp?_vfZB z-S>aJ?}X8WJv4PqTO!yLE7r-oRhSbcx1m@3qRJ7GqO~v+;lYh1e=xxzN^q)Jl%*|_ z5O7F_k5yM8OFw&2$-Bo(Z|10QpzT6XJ=I?lo4S>ABQFY2K|vS1EfmU7Z~9co<3yQ4 zVn2@NfW1ciwO;ptIRP*aJ;`$;Q2S*yYgvNcc-ynntMUM4K#boy??;Q@I*zFQ_rN{( zV}GfL4a-FrJb{yRPQ*Dgt~YHb?_n($FI>o?Me9<PcDSW3M8+fVJ19}sb!|$wKoy#H zprxL6C+CJRQlZ0BjiZ}oqxXT}_#P~<1e>9-p1WXr>5x<WZ5V*dwsex;_P@L4yqlZv zf&zg3D1IG&GDWgFvd#&qIN7USt)#e8I(fXuJdokrW*@OmS~zm7%-mhz)&|rIa$<?f zQPU4P2W(19!-E<*C{84&kI!1%!E2SJgP>Q%XC$b^n8gcWjI|^87xUZo2J+<ZKU;ue zgPhe|f&mf$(Cm=J7I0eni(HA9-|DH77S3o1h#%;I^B>TwWTh#&^)glIU*Hys=s{GA z*(NzHGZ^Hs{6G8K+Sl7~aLNI1akm1)ldj44Z}SL0?P?)3^k1(C;lEDKCB~JSb6%XX z{l~*J;4%XeZz01U%CY8Xwcbsp7g)Ej6FklCmj1#2`0sG437mo#b1QW=b?hbz6kV_n z*R5V;lhAr1a(S<0=qz$?64a^OWh9+pNnAMOF$E6m9qq<Y4x^a%az=R=Uglxd{erDD z4nG&@1h`?=edn4LWMt^sOrr|RyrwgD)QhuLXS^7dnQF}Q$r;(*FC6DctmH)I2mn5e zwWA}20REXEX;19)ljKBy(IP*d=Ku)R;sehDi2PUsdi);_Mjzg+A7J12w+lN*3-9MS zkrUsD#gGJW`P(&+0x^*}|A(@3?2fDpw{~pXwr$(CZQB)hY}>YNn;qL7bjMCko^!_g z1Kv-yM~(ey*QmAUy4F4C-2L`<iw!6Wq*m|_;#69iY$jt1Kxy^vFg!ZQYwLi#jDt8Z z(FU-0XE%w%<=TUe(3K8t_eAUA6KNPVnOLrL18^{6<-{3DK?`hko(z{&0()YA>Y#g5 z>5$=Y9wSvQ$0xYIc_x{X`wLOn=2KjQ63Wb!H0g%r&heC0bBAaBJZ<Lk%bat{=AffW zlf4VKWxi6Hn*B0aO)bsInZ5@nDwi(I<f^C2lJ{zIKafR7;-{)-9;D!s6#^~|?{YGs z0nihmc$ou7EDmf0ma;Uz*1f=MN=DbwN-cel_&C+#PE$oMv?N8@)I&t;{KzzDRDhM& z_LZESq{vf)2!H9%j%8<28R!3e_8W|_TrU9VyKjPoN!e1y(Ag&btlT}Jb0e?TSQHQ8 z#Z%mlsL&JV-!P)nIY%3Y@zCkWn^3?4o>mH>^3CN^PAfH#m)2Ut-Ee&)i&LlCIwy3{ zYuJw)r5tLBzkPtui)`VYOHcCJ@%u4;UN@qtK1fpAIAq*$QeIAFS;&(>mR&VU>F8CU zS5YbGcfVC|HCN1lZh>-GYZUa1uA7F`+Nf9)8;6~cZ%C;cead<48UrM3t5Glky$#sF z*E{lZR6@JErK{(C@O8!$)8D~670bf5EBNZB67m*FQRB6X^b<Dsud0EHxpBIhCCz`Z z?*mi0nZ=O(=5OWMfW2A~i*V@Q!;&-+N=z=}h9PegB1O=S(|E-XWwCP--M`X@6W!f2 z{KCNME#54O-EG`UuOAhu8mi_1)1}=HMl-*wyG)MXYdLQ07p5AWJKS9g61#TVJs=G< znfsOW!w8JSBu_nljwx5Rw>x2tCnCdhyTfvIG>yAea;I#9EL@5O4oVhZ>c@%L&Yo&n zIj<|b^eHdSbD2@^M`v=^T^$M+3TKWEg=utoX1_(`MIQClgIqe*JLsqZ`I}^FGh|AX zNh_1$AQcFL4EB2uxdYN-aAy1>MJtNgFe#;jomtybkmDsOuHNY&*wN?dQyYkRo*7qR zEHeg9c$|`!+KB0Fai~D`(U7QaDtsxVm)Kr$BBgp^JSJW_ZTLSj4KT5+2Mqlan1`%I z%0(Bm>ink?e?`W%!|MT{Kh9~E+5g!l=yd~8`1Dx5r457swPXL%F0?BAR73NH2{&5J zRviVY00RX46@rYUR53~yX=3-c)ZxA15<=cufQ5k}Mv*gL5@z@YgxAq4(ZrqlTNc?^ z6~_I(r@Ex!plcSS6rYd0y|_{3sR@LQ!HBU|!gb+d2}oV7WTzL<qA;%lDe$BuzjrCa zLbtZK7wDJ4kLY)dGwB40<wfF^BUZm?1Bc^A3hm!D7KdW62aEZVn@iSQ_gCMfg8lK& zf<@PD!?JZ0&F99+!8@>*6)L4`H8c<1@P3B}Ves(D>mOczJA1FM;j@9;5W;|_+*d@+ z=*gpyqp(3l=Zqo1QrDtGn=ikxxdAW#m!#aK(W-H^=p|_3#eW2$ke|SCXw-zjuT%HM z@PkqHY-^H+MN<;s-#l|#m8>D@0}wJhiKvzK3%OEtm$KWfF*#9JQkUbgP5({Je`z2} zuGN7+=;9RwdjFm;swL6(#18KZ6hv!060-2^Vhee53=0s`?c2A4Re84ElR7?9OLdNm zi(-;iSNt|j99B(`T~b3ogRB)TnzKc-lHfU(_vPz6_)PDX{0m#5^)6hErst|Gl&_)g zZM9>pm=nE;qR#xbm!ku4r#ruDVZ}nILLzLSEPS6uz$fkT1U0?!i8B^$pEnK6<ASJw z@-jZaJ^+wxjzaT<f+@uiwG58~_229kwj0LyzGs_m^TbIScq|x#1<<_NYRRh_3PLEt zrGalH_|}((O@W<q%k?V9OIR4?ah@-JUJ1#jI>DHw?qVZ2;hs<ru@5liP)H<Nx{=hq zdoWo&DeRfN$h}g3!y>G4X6HIv=BzEAb~pQ4IRSXBi)IGqI7-u;5{E?Z$?Fipra1qd zPJAt2&Jzk8t9Gs0#gA8}oB|e81lmI)FAY{q(6yc~<BDj5$XQ+K0y!@a%<>NBqm^~C zn;G)IM5bt1pCn?Iwd*Z~edNDfiE!}z=cNf4z5tIHGBb}UUf&msMZY%g+E4#xzNj-V zeE?cX)T9?g3)E6}^v)FevdruPuSWKjiB*)r1Kq*GO$MCT?c8hDlAs_IZtDp%66Jfz zf@<{QPQ=B-<|)`Xvw__>d7T+{9}C-(=E0)Nb%E7<Gu##Q<`?Yr*~Pf8%oRsOgL5>b zI&FtiM`9a+4=Zo*>dlLiYQ`FD;TfluWdPj_t#mG)PN=to86fV_xZ=dWUs*;Xy@rL- z?2x_OH?G|w@DnFIm*ey4FuoWdwd~$<Pn(N4bAF;XLkI<vL$~=Wbz=cH|9ID!!_@?d zsKo?yubKbZO7?5_6OIdJw8N!qjN@>MM;(QiPZ*`WSd*D0qfsay&q1GE{fpu}js*x9 z-<<x<?qV`83ahX(+>KyThli3&#I_fhk6*NhLMwfA8ren|!i{+3?PL91&Ern*GX;ze za9@32%z%~)UB*I03Y3)#6*)v1vPs2A?r6@G?mi^3OC9S@uPNBs`P?Rp)rSfpZ?6Ps zU=trU;{%0bYr)&5Y=(|)^@Sh|O90Zzl)$2ea5H|{iki!=*qwP%MoO9Y3(=A&{-(My zzcAuUdi1i3f$Uf$pPUCriUBMRddcwN$9U#B`7Z`Uu^evkC4NVUMO4?ysLPmlt?^*> zQ=_Z~{AT#5N#|NA*_6F=la%mNhdkPd;!3L3=e3jtmZrnnTN?D@xv;mq>G(-lx_3@M zFD#P}fhNP+`#tzVQb+XPBcMi(StEYtrfcFZZFUX^c0ZbIM)QGjV`WDx868J4XsRqE z;+%E2<S=MW@I7%V&>?=FO_aH>arR)RDxXk#YYNIKaHj~2WRNZhW(aO}=_ByA$PVA0 zj&V>=gFUXGrXB!Ca`{oEfd7-FVmE1srxAiHJOWxl!#hJgJEMMy>kf^Vrm19&VH)}) zBul!j<zj=D-nQK?UPAul*SyIMaikj^d|Q4J<h2m@`zM^X?qC`{3uz-eADwxHs>~ir z4?rW>Z^o5+gt+ZW%?Pk)3^A93Z=(silM-Qan&^#DWwrl6CICst0qh{i6WQb;@HHuC zirsdF)R7=Knj^zm*@rOITUfa|BwNx`#NIwnsLoD1z8XgRVoiZpK0o6OmGYUU!@kPN zbhn-CNCT(6jH}S1NY**8Xso(U5%_sRB?!D6r^G1emt4)0xoTw<vz~#h9@U5*U}--b z9CsdNu~Dr@62NWHN2lbQR_q%EHqV<Ldt30BMNh1AR%M#Y&Qp(w&6o<n_oNq#U$C#y z$}LuMi_1q%!_JLnkmg|6?<Xi#8gNhDv7->|`qzPbYqmaBL8g#)vqB|sL*YCHa^x_A z>Oe}L#V3>K%-LfQvl#$!ecIux9*47|nlwCW-ioVF2Kf8QVxtxio0+jgvPF6C8J*Je zy02h7v7>J_=FSgZ?KLe^@489h>dKr2EZE*dZ)DyG!!wu5%j$0l5mMD0Cz>$zQnjec znUZ?(L98Qg8h>KRzY?otPLpev6#37n<n)9REoEcP8669s*DMFi{RuiopPw1-CYAIE zGNh*|2k?uj8md2dkLcU(6G2wzOXdsCAH@>l!jS?r`P0bEfm}7_&hIxj@($YMU@0*a z6D+oyk7Y;REu6NeRC71MmB7SyoYaIxY$2uL!lB~r_$(}T6kFt>BBU*KTJ*puEzOl> z%ivI-yHWJ$OoM38z@Z0ncr>JG5T=??Y-Dc_C*aSMS+KR>wDPKrD#48fWmT&j%`>W2 z*5M+}L{ZS$?cFB2H_ybOGyZzzm+?sKgGd`pv-DrWp;jr3pHREdk61hg`v)WAjs@#s zaXq^qe(129CyeoKKLH<0OEYzRSo+o0KsXiPdMI!KIeo;@oUgkgh++MYqw5?FDt(mU z4!|{Zb$#aB6SeJ|XG@#EJ8h4ieslU>^9%pXHL}G+A*{{sIVu=k??vQrdKQ{&!n@Os zOzN;(J>L09m_3qFQ+mw&Fd4<LHrNjr_VLd&{L6`-8PuW#f|MPLEQti|k{BA|3lkL= z=;V>nl>(M&asAx=gL>y_jS(kOh0#OhD&R^_rxJJQ#YjDogz=(SF}qDBVkQRdIp4KU zfIYC)a=vJQ(lT66Dn`nTpm?QPG8L0o*{d{wonb=Guia0%9wbJM4XX@B(p>8|SA1j3 z(kO{-3^F~6?Yw2T8_kLM%Gi-dIdf9~b6q~Jm8y7_SzP~#tG3`cux2<+KQ17d2cYAr zRI*>)a~LijaGrt6qbx~977s>{p)`TZNhcH$H6g}RL!w^xhq|f@T$(1lmd12;l@#2t zG&Q2W%7k_41hlFp+n3MiR>`i9WSVQgTkM+j5ipvL7AZ)8#`IULXo@cqr|=;bJ1(+; z&}*{QCkLA$?Kb|jHB8Fhuq?)$N@lp`&ohli1g%0<EzJmGRY=BZnlcQl`(-%ZB-dLe z*QG^Ol7w-8msOuw*ZbT;xOSDn>Y?$)O)ntHee|%=^R|R?_|TRGhC9qJy)gk89dPFp zC0gc3a^@B?WT@02L?N@PysvfrRD;I}y^}S<!F_hAPM<J%&zE*Du4RW2PEvWop4!Z( z(F2rz;t4^m3gl!G_&Qi<%fdk7fWI=2LPNs%xp$<gD6gVMMfneJ6yCMZ$!x;kz(~^! zG3(_>ow=c!Lwuc^cygc)saAs`8}NAFT`iuK!4jWTh*Y$1p?4vznE7x-^pZAlttK6m z%xoV?Dx+8@z{(DBcsidwcefBwNW-g_S8P@LR8hsQuSE1kPvF0e_Dumh7G^caf~Zo! zp@*FGkox3!A2q2)9Q@=cKAVOT|GO0cs}&GS{^yXos0$Fy`p5aKUIqa*7od+VSd7%o zn77vwqI-z+$THd57~;EOt(OaL@QmT4Y(Wzdvo_ryU~~i$3T0nu^od;$u^>?Y<gFi| z1s`!|*8R#3d3ygF)i<Sr<5;cagGSi5m!ZbA-y<&}Ru{A<y(%5mp#H%xId4BOtA#6R z)ui#>8tt>^Nzpt+cqv+(5Wwzy=CKFe^UabQ4u`!aj#IFFWpqfvyn^#oEGKf}zIQ<q z%O2}nIkG5BXVt)9->R2cBCYAf6G2Yh$$?;UD@s=!n^RtX-Q0X&YZeV{a$AoHZK7Sv z@fE$j;qRr)Yi;6g>dU&W?xuX{=F83pp|Q&zok{-r^LCE!{&G7F0^Bpsy;AM&Ah$Lv zX`0h&R4lxxZdByyjc04El5SC6p423^p>K5RTToHpqnJssSN%>XdVtw6dqrD4XJL0g zg`Dc7PSr4Joji@roB2mw%|a~Mo2lMpB^C}ddod~xcaUWI7SPvHM##A#KXgfw_@vYm zUBlTtq%t3aKBAuUU!EtO!{)58lBk;pP2Z{q!l32vZ0&a1&;rc}2zW9NnyU>#^M3mN zpMTv7=JUq7qrx_2s?6~(cAwnkC$GJuhmCo99zE%<XoYb$7_Y&fwQ1fk;b!-}VN_)| z81Ko&RR-?3dm|Kgb~I}6O1dP=HOu?BN3WMSg_>-uDI+Nr(6UFq2Rjf@ofI=IHcIvz z`VaLsX)m$c?Rm5cjI&0mREDcg*m}$10l5Ub8IepcF<L52iB2?2eP*WN+$}s(#XgW& zF3I2G>}W_yuS!&IjOLEv9Kt4r->@*sXr%!zWtW7Hx>QM>SC{aGzBjE@I4Q`Ph19An zEOfNxXPL)YfI6)ota;#31<sHx<09z+lM#crrtsrfraZM62Nw@e)xuXf-%0NI)gkdM zRXHX7gtaVuQI6^%UEs4xO{r8GRVejK-RJrEcdX+H4a4Ixsby>U=AClMyLv&n0iQ*h zqw*4ZVB*>*4GTBrmzO%;K^cd*M!eI}Q9OzJFR$Hc06oo4WF6yuj(@K&%IHj^B>hM& zL#kG!MH3D5ng@FWWa_6f*{rCb>fb!M7#36%3F8}HP@J)A)K$W}(Ctjthx=*L6DiB4 zJ-`3fmuiBj?%Em1`bnx|v^#xX-Q+4v#XfWpvnQaSbf~-)*61DXIdBYWEziQA@AWym z*n0t9O*2VNA5>C%E76oY7qNU4JwTIp^xYG+Mx*fNLB(R7NWJbVO|K<rn-Zg%J_W?( zscZiPr(%psif3uU-5!NR`Hbz9I#Md-IF@xOiOVX_urX?jXp<k8*mHJyye$RijQ<%G zH-4Rq@YmnCzjeQmDD}GEZ6mhuwzl(wMs)*Jy~FB3b`n&2H%G46uNAzFfzlh?oin`} z3U{arlGP9xaLpCt^ppE<gyw&(eWj>@xI2BJ^|vM{&{0?gXIWU>;C}lgzW&>s+^kFv z^RatO674;9LiEqOK(0DAvmtIMQKJ-R<T8_JuQAS-B^NR0H@J8e)K7Q}9+pSVEsX+* z8^jkj1rc402GemJM{Q&rpmgC071ah_;K+^FyM6rWnPIXv{O`&J-cOI>Z)tT$NVMUt z_BU0)>d&<B5rctjgi4*<M--q}>Z7XZ9llsLiO}P7Qn>E$6LdIy6{~U<e2~znv47(} zI?G*WIGQa)Fq}$vf<Jq>Oa5)<7NGDl>YJGhy7)Mu2zX{dj!*n9HgpN+pmBZwK_PGy zPumA2Ob0I!g7eo*5oCdPZ(}TpJ3VgBjV{X}t3P`t2$E;J6yK?@^6dFyf7CiK@^Bpg zcn*DMTy;6nwSAD9+J(S}4LYUgTj5?BD%q5_F8$DhLt<6OA{<5Tr)@MV!0uwQ25yLO zv*#vyC9SLq9k|aJ*ql8LD_719Dg~>P8hTW`cA9rr-|EYmjV^@?lu{+7arcyN<RhQ` zL+B3mvJ711NIlaQ?|$t16!eR&G5-|-WnCnqhZ=xrWBLzBe+C}xippVRCND_z0H~?6 zW$1Gp^ZoTnuW~zOa+shyVDMYN7JG#t6vFc!MV^_(6@f<5mq@%2sy#jr9%2Vv)_15o zX%v(P8JT*G5HFz|lF~w#tTY;zH*LwA88K0$V*``+$faRTZ>2rqrfd1Yx=chAAs<fx z%=i6uH<;u(?+jz2+|cE=-;Hx`4|-u9_?5)5l#9X4j7k)7e^40@aCpLm{{apTDR~iS zhz1t=O<k+q-w{NQL@+H1GsSfWwNWP5l`42#HCz*&^u{oa76UgsaUqOk^9O1oBmri^ zPryk<{LgY_%CGViY`!$u=9My3*h!+8H_l=L-zMWLc7~Frtw1-9I$b0`jcYnrUMNRA z$3HJ~51PKGdT()`0CY{*P=5-U-MIW{nk6b^5~e_%vea|Ra4M;J+fO_~ar@LFR(hA0 zj8`f${WD=xpfgVjN$M*FWwhrCPJVlbGV(g|FspQydGCp72`dvR?xND@qNZ2+2#^e( z&PPDrT(sKBf)P>FMQI#+I^#<YW)q4vaCC^IPb1ZB6c<Y!0KEb~xjZB8(<FC;#u9Da z;v<Q$ATe%y*<NZ1P-@3$d&<XoOtLfUnpw*-OvUvz@OGuNkybhi#Vx)o@0>Dq-so0G z7Ol)B7{ZI$6b5C@NZm|=Kl@yL5@&g6$hfpi;V<kPmmcCkFM=epopM;kb|#uA9w6LF z!k;Id)fEQ<Ae-ilni_djgkxgWYEH@}xfa7pw8^8wqj5@+a_-GiES7VhuGFNkryu~2 z5Zv7)rY((xwn@hL8jGY6yNoU;%vwyBYF3l}qG5?7V(-xat5Wag;g+PO4WBAvG2-V` zO$*+_dlJ#=;u)aB?<Whv5~0(t{E~OT62-2W892@b0L7_HE<^$DZk)s`&lbKWwH9ii zZ(lg}1d)s8ruek-2ZBGLRWpA{bFyq!(lm=1@bx0hRpP+aJXPHDOvb{>DOZnq>3m%B zeD!{66so|#MOUt&o`-GP!p+bnzc0}jL^)`f;1R5b=J=om*H4i_RnBO*_j{Y?(p|h# z{47HN9}w!_sK>2ZP;#QFRoN(wkQbvO^^}3PfjenS#K~SY!cfbp7iCZRNBJ|R$gR{( zK5uCsBa4^ND=>f0ivm#~HBzchGlX3i1Rn9=O^@6R6N`Wj3vxZSh7I1?D@I4^f7kDA zFZ%?O$P;i&>y=3awqq|oLMhjmnv4kMdhgo-cv8Doe>A-Yw;Yi_GUI}dVyTA#=HLxA z$Zy6?!(uN^j`Fn3E=7KZQP`&j%r<~Y11iTu&k^1*)T%r-ah)eOda;Y!keyG@M-ngr zWyFe#dGNTK$*IS|rT2J)+bLB&Az!ev$bgA6MZpUMI>jIFaj>)fTi#1U<1$?$mJ~I> zHoXybt$}Pup66BcuH77yRM+8r%fa1%>M0!fpBnL^xLGh)$w1X-@}Kg8Uu;E8l9|e9 zhbRg0-G#v1)0}ZKl4_ZO<!3hnKg1Y;EEOqY?y0>wRGdIoU+5H;O@^A}@xm*L^T|Ap zBr@4BB3ZjCKoL$ck}!yKorILCG*1>VYLjE5=ifDR5mZi+n|COj?Dv?jAc$|{erjc% zgMVo5;;f8bbUs~DMd0;^EXVO8GL0c>3Zmn2VEO)#M4r^<U%#6kHsYw88!t`#fOW{> zexd>0RL^-(xe2XYMz_M6IZq2c8PV{zZ%tZ}oFnG}@1Mc!+O<2ry5=~Wn_3tEXKDS$ z^esJ>ECrZ1IwvqUVH8~mK@WCE*R58B3&VgvB?PO2l;VzBw|F$}eoi-)gi*Jt^BHNr z`0_zcUe|@`vc@KY`Yjo62QahW_)KiLS*W>spqbB~vU=r>FB>c_wYFq9p-KjM^RsxR zzge!GVdt#3r&t~VBizw~c@qtQ`j?}Va^%wTY=XNAoRL-eI~%r1%>0~rMf(|jmy!Ou zUwnUv<Be1)2gU6>yl{hBEpVKdk)+GK>vbY4281*+8@TurN)HnxGfEBDLI}h?ZBM5C z`<vp@kn9)?G9C-YIcXuo9Sx=F`OlplH32^gU8i6WgHWp?V4I8p1EmNMGfkF~_dw;$ z(oj#ypSIzuTee-|OU4sXDuHCXB_02N${PJZW8;Ef-iHo;ffYQ&58*gPF9``&Yjdrb zW=N2`ICd_iFLP_{XKH;c*BNK<)zE1riQ8)hZQn<=BfHZT(_n?}5$bE%9RARuMUOjq zUlaebX0dWo!s+W0fIPU<Ee0m>6(7J+ST(@RzyLS>LU?qYuOkUAks8;v6SOLIWcZa% z^3h!mb4D+gcLo#=I4S3;V)8doU>plUB$ON<YyO0zA**o4fh9_^gM9r+T*Z<)ed+5X zkx4^?5t9ka!WdhrtM{fI>3k6AkWGq(_3E5n=y@QcYG%O$cq-Iq-RUN{{rd}1_RN*P zmOmSb&(lnL^uJCDF&gOr8vgA6RRT;E%ym{&tsbME?ZZIj9~@bb$@~3oUBua0?g}HR z8qMyjNG*-2TCFaM8{a?1k`(s>edId4;K%4d++C!G)}aqZ@B#Ve4gOK8$=scgLVoKa zKu3Eo09y{d<3F>3+3({lh%weqm3;`Oj_cli;w8yF&=&14i(F2C<l#EkX5c?OTUGH^ zcq6O4wuv|u_l_V)131ow_x&HXWN_Lq00IXEqWTn(Q5-lv94$aEz+;~qxA%L_VHmg8 z1C$mLuW+ZZjEZ0w>`=BXCnx|JiDL)F)DaT!5a?_y_eY7^dCBIu%>+5=CNnuR`QR}f zxqmFSLCkQ2Z=N<V;l{)~8)FRRGve7%_`xfT7sD(2vN}`_I27!<mbH-(bQ}nCz{aVK zTcvM8AiwANhU+xEdm=UqWf^q`tT)fzt>NP-vk9sz&rmugoFJzgJ`!#CZPDq5?7<6= zRR?7)C8i0q1($Rf>iG>UMneg8$9}XYp&fO^8tI@Bvh+xgRE$JkMD|Ni-BgslWJ~2* zhg>4}LSdz`ke{;88VqhC&7Z8se<?sUGTj>}KvnMmy3zAecb{Lhc2=N+46|hwpH0=X z<xY8+1Uh6YJYxJfDb(o_qZMxw>2?f&U>m7dV6Yj{F9{Jh-cwuUI#^(7er0Q5h$*Jm z5aLI?nCIX<`2$qVlDz~5BWKb+uOQsj;5~2gIP3VHB}P)e#X8#lVx9gr-0y*OJ|O`8 zZhv__7L<t#DTk8|7!OF9N|}HzsT7SYHZ^tF<GJ4-@=S|d+R=~pi`3y{MN|b;pPcZg z78<ZpvQm5zbrWfsPp|{B477+G6;)Z?C=ElRCAPuTm3QM<V1cBUgvpZA;!cpnd@SYs z-=Q4`g{>w7Te<w`DM9?8<Z5hO59Smm`_xSwJ)tr?GIS#YgfXSb98&^dMsN{-rX6l} zVjR?nrjp5){gM<i`KQ=^dI14H4$I;v>G}D-)kdi<eB223!Z%o&g=^ggk%HF!{3rk8 zr3)_ikcAvx*70nMTzK?6!&sf+Qz<iK;Z91~dC5Vw=<rTY!;<afr$k8<AX|$fQnCJK z=X&o|mE3^wu@P?r;;{3Q+(z&aX@hrIXr~B*DZ-|K&9TgE#HSh8zuN%mG&vV9sr^P7 zG5U$!dju_-f3|Sh`c^$fSn+slPYJ*QAB^HlWbZHulE_Pk8)Z3@#&S7qk4<1M;*&UV z;%!5dcwp~l?ER7>7+x%i3Bh3h2rQ=e3Yw4WGnGKHx2g@^Wvpg*HOS<~20<-@bKL?_ zcIkTdII-J#^igi^Y-j<>%JeDp(;B#$c~eo5S`p-1nrZGH<WRy;TxNj3IaK>f*bN@e z>0M?SS>Oja=9ZM;?9Kn#VUsHPxqFDll%Tlm2_d=Qw>;tYG6fXycCl$esqAw^cinZd zS9cDBl4#t?FH{Km7}EPt!M=^(2_C>8-M^i~c~&vv3y;<)9|3Q=TXOL3Ex+Rengaw` z6l#j^j~V5)Mxo=#99kOZY9T&EuN~Q69A`3a2&+v9rFx;*gR<LqDCJ)tjo3Mqvnk_Z zMQ$Z-f0c;nA>=WjIidk7k`R*ht)`?<T6b(Vo84l;p^}v;*FZ`2u%7(-h$e|wE+B=% zy`;aVciWj-V*zHc-{`T;yx^V#rmyg-FSPwq74k&s<8uzP$FkU@5u9UBS|kJ8yx*UB z%ZSBkI&F5Iu&qUzRa{a-ix>9+#k?=}Oabd`sv{9W`9+Dqpz0=!h-mvcaOSia>KZXq zuVm9fAZS3|2}TNhsP1HygXD?HWn@xDamnudSOMU<&46v76`M(lU*%Lp@-g5oH;@gG zaTy38S}N^Y53a8*=#St}&?y?U%WR1lfz%w$dRX*P_30&Gm7g_)bK3{NuAdeAa!;ZH z?Ref=CJ0_3B(9cwb;4n+ergwzVF4)@kSRci{8;^<gpkMc6tB&~Up2{s7nlos<^6L3 zxPOxj$pMC<3`y_D%6GcQuoIq%_2l0m(18mgduR)3hh#PPVuupN7ol(*B)<?r<0gLQ z^zsk`4vh~e^Y8)=nTIF|ko@+I2O$aY{Pu~5APK1a_78?2-$}msk4ZjJ-clbR{G+~L zKK<X!AF?k5MZe`oq6&aSGO<4W>L?(HETQS#!2vEIq&h1-L-9@;N{>opt;vhvQWb0R zH2zT1&=I#p5zMrNa>8yoQIM6ROT2Bok55H#Lzn|dgoee3#HbjsyqNq7kdYl!X>E$) zDpD^;>+j}-rH3xSWrTd}ATcp%v_iUAX6RFgdQmSL+}VwE&`Y)QM{VAqt>VyF)<xxR zNPyOtC#|hVOgHh!1D$*yiAOXc&ej=uU`7#B*(XjXm#3f_WgYvGxr4Xdh@b=JF~|3T z;{?^2KYN3Xsq^SOAy9CZ_9UFzdq}0BeiJKF%{I3fOpSgb<8;u=n{Fvgmv0B#mJyW| zJ!>=N!t6_RB;MUn`sOYUK=MW>qM!@@vH%NT2dV5<BdfqkE3ZceeDRnsYs`1oyGY=I zv_iJXQqza$N}3@90cIe25z~cKMYw`6@NKjbhz5lR>h?pXq=Fy*x>MaoyYyIL`zzx` zByVJ>LKmDwJY>KUH@anTj`A9U)vd$lY@z5%$o*q{Fn2kVH>93Shc;&4CsV(51~5qf zd<h9Tp2efh!MKUa9PY=IFCgcjAt%WM7KE&;p?8M(P37fl+>(SYXa3@hO#(V2Uz$q| zIrNqsrBnw%11~W~QU-(+)RCNm`3YmQQN<h#<l8arX?Bo|A?cZ6k`|4mAb5MHcy#6@ zoQ}#*5={fo(Siiq#y&I`iul5{0=g&SZkx-l6*>*9k5hq#L5$9d7E^YjfQFz|c|M}p z?G__tkX3)>MO9)i7eB!r57Gb5AeaI_HR2^)W<9GbpWoe2uPC*RLI!EIAuGde)|%y- zY^k)NNvDmC(^*aNdVW1c=%G3w6=k?eV3Vnf4c<H4Dh_HYX$xzr4v=cA0-!;OKB(pB zVM?N&$5Rg5)DZsdF)TVOBL^=bakK9!+q_A&EzQFTNxCMIrjzJG2m+FXXh(|v^9w&z zVs87`9h#QGs_lgd+Z&^ng1nGbU<=qn<~lisu|IH_AONEdESN<lJ*2fi5)!rJyqXF5 z?+CR-KrKCcmF{1XlkVRTB7maY--Si!qQ?mxOm^w<hDT`eW7dp>{Tzhcu9qv`+ZCbW z%t2A76^v<e>@6DMs`MOz2P8SWoU*R?*tkFaSkp<vxVU{1o5{7U6kd_kRvNgZHY=|A zb?Aii?(|SLwKes^Yg5{WJd@Go5{5I}4S%mt;1K+sjUt$(E<avOjQ|i|Xt(Q+tZt|f z0oZgS__zV2``8CeOnVi16(3|S&VdG~NRv4KmUP%LX4phRD)-rnauBmgnlIJhvvnk{ zw}T%d?QU<`qV2AY8IQQAJfofLFeq)VA-0}W`1OQR5wlH*8DA!T$rsYn?qSvqYFnKQ zmpRO}!ouT6Z27FKl>+qm1?s9J%lm&f!CapL@sh<hdWc)6_Jf^C;;>@kyPl5Q76gwp z{iJR&u<+Fp-b$xbK&kSB!Q5`htziB}Yyfe)<r}~u<xh)s-Pb6dM@RW7nn-Yb8onaE z(8HE@*w-ANtMycyko2)52-FlqHY@o>UI{AIyPgKQ=}|){A`EzH2|{@?32x^0s3nAa zZZ>pcJ$R@)M}Rz<XrxsGIZ5W)KCp6AJ69kyV5~(St9C>ACE>D7LyH;kiLT9^??kDN zDWk8Xeo9@{i)G5$)vI%+wJA=u8(FyOg;^-<Zcp;ZKRj1LXGbb1k};|Se@9}&;yf!2 z@lUVHaG=BhejNbB05hu=ETRU-k?UVh_u(Z-X~dF+swbxgI6*0QWYA1S;tp}qh-3i@ zXy=Dcsam$IVWMa<GC8!e{aYAu0u?P@%i!n`du-vZNvzPhu&9!U6_`+B0n#jmH=i{= z_Ca&A8Ou-)(4p-Flz4~!%e1y}eS(96AfS+>Er6@3DHs3(O1|ykq10>0@L0v?FLG57 z&<pX6DymO$<icx(Or3JZ897+SLAUGDdqF3ay<H`KHubBS?e)9JLzvLH90`o{Q{?7( z@^A9KZnoFU9n<yree>M=*RNrv8V+rwN39y-)GRtB8#;XM-G#vyCwFIS_qX3C-F@zh zUkmNK&x(LOgTCfX%*+uA789v}jEF_8BPy4EurLN?%gGUj6(?I-3HXqVJacxqpy(|# z*JiZm(+~M(TLDPEop1z<7J*r(;f0e|bwLTdq5vb!X;|6qy(p61$z_6HpzPQZ;vWdu zzB-?dgHIs5alF6lH$G)DdG%vHK{5TW7<Y+ZEXe>tZLU#%Y&`jDgN-=kfA!C9b~C*k zQlgDA_GMV)Y6H~<DpR(`70DBNmAQoTGtHBiPXSXZo?6A~IkDvi&NthGG=oH1)*-~l z&(q2+ehEf0x2ULXl)R+Jl#)BDi7RR^kt{LtqLX*rtVu_mUi^<e7rlh?omWaKd1b2Z z{FVT5kCsEEf<lD6^QADDMSqMg7fJQZTzqRj?Y>%|qs5WN^=<I&5;7<xYZ-o|NhF$k z?l%9g*cY#;Pux%1LwRV&iJ!`m-md$Wp&R4f8i}oab`|KA;x(ug9RKCunxKJx;!blI z@Sz#-oQ7My9>N_bT1ps}hbNg>oo1UMf+)b&qJC)lxOllXFnDJL6fZ0uk64<*NoN=m zVrKw-mmS>sze=eo+hQsvTq@VIU6_Mi2eqtLo44qm6S2s*YOaj!*j#>Ci?8}X^{(@Q zg2E}Q>Cv1@yBHOuSeHs?8Vl8wV{H^$bPX-_6uAif16b3?g`#6tD$8X@uilaf8fZXY z&*6Q1@-|9#iv~se$hfsjGDje>!u|2@GF4&pS6FWs+oR4J8z!Q5wUWu&7U;phG|A+% z&m{z;$SaS%<en<=lu#w2;9eBVTuWw>5J*Eu*cP2%K~pPAUP_i`6xY_VfoD?4xE<%R zwh^9pEfO2Y4N7^x3s{TM6x!5Q*W&;|L3U;AC~#;M&Kf$hn=5e3A+o%`?#!0bpGM#j zy>*t5D#Hhkzht;FQ#jt4=kZQ5i-)=G^2t?w?q?EVca^)kxb9{avC0BDU`J?hMN!b0 z9_)eEawhw*CRjOL(M(@*&Rc3H5So4|Z_r7r9d8I5V~`Ou>4X+?@RGN~JGlUc6o7eu zZJjyR3p^+?ipmpTaAIiPHEapA&MEAD<LdU=UtVojO-P_xfl1O2>4ZIoF+7s^jC+*t z8n7+UBX+$+VVdbpS#Xpl$qKI|9UA9Ppbtk~5vc^be07njGji2K0U;-UJT^{MtJJZ- zGivFD>D)S_D4M2EaQ?E?DenisW)ZH_9&*MRju|G4>0tQJniV;~Ay|BjGxyWj(FiEO zg2dU*62KFd1%<3}H%ZOB*+HIs0$<u{5{94HxWyuWyb<d{0_Rw?=e82sW7WwwY~;4) zBdm<C57Et?|1<COTOC&kDpg({EBu31z-_vwy|<`Mo+^G9pFG3jh*1W3b*R(x=<g7+ z`<?!H2@MxHRHz)B2w|7NafdK2pGn)Iy3fm5+dIVYCejBEkI~z$wH~PG^!G2xJ413s zf);q$!~iV_?ySY*egQ5!2+QYNbT+HN<z*^$cE7URnpD>@4NlnMkr+?CP@#Tdakzx1 zq0#%i0JcPO1}vWB@+~OfzK|&vCbOSn&{l4h)+GAY(oIU#j}O5Gmppq!Vn)2~t7D9Z zEn)&4j|lIkHC&X~B!RfcO|MaQya_Aq#S1UAJTF^wy*5#94&fp->^Z7^Poiw?E!IG@ z>uL;(CSq8cR)GoS`^sx69)Jb%tQY!G7b3bp_4`}Il;yh;r`#4$W?0{Tog{}7;dv+( zvJ(CMvXa0t^6L|s<Lov<O!PVUE5)jbZ8O%UH?xaHYVj|)HH9Z>?b#sedX$3|h~s7g zS}>*3O3V_(p7&T|h%lk@HVgg^{RWec{#fea5%sA|?ouYc;@d5wcGbnWf3rsAS}eWd z>E%@31r$hM0}B-(YAL?-Y$8h*CzmaJ8zZQk2!U&n96WwgnhV(m7%q>BOSxh5M5cb_ zcjd#1$i|TOtTGUJ7#Fw-Zf_D-T6x9fN09KX0vvw&SE%pA9U44OK4B7vGj$&o31-Ts z(Opjn#QDwM07v$x1!0<C;kR;BJ6@w6Z(T1K5tTI|8x99R4cJBaq`F2sA7^F@jZ7y_ zz-Ir97*AzWO3cq!f<#z4?JL~^4ByXLR9WaH$=N)nrDno>2A<nNBWs+UTu!?(?R@_= z)O7gPmpAD0RBQU=s86#@`%7X%St^Ih)|g|(X`JEn`%}hxK1#e1E|NMJT$**loZ6@N z&e%#NjtUg8<XM!j;+NBHQkhqO8b-sOTiz+~3|cSVf$LafYsuy1gb%w-*PSxc6&wph zGz22oOr%UEIhx(uW@ui>-3eep=Ik!Ek`Qj>2`p1`Ed>B`uAvIdrs7o{#kU^UNB)tk z37Niy5xf4{7`<UzdKY^yd<nu1)s!A!70=>tPd^0IB*dbE9+pJ*=mqfeH)sBv>@9kH zY*vIQjVZ)5P@dc2>Dc0k>keVeA@SL1c3JzBI-dfMwwyk|4^U6xy@5ew_1q3g=^Fc& z`N&Qee~102gObFZlXq2<O^MUj*rLDz8+20DhAe{+?oV_fvWHZ?9ck#&@IlJv8**~3 zOT{U`eK9if&%+BX@pcqrmpog|P6IE8edhqOA`McW5F<irq;Bj3QvAX%+r-X|*OJ)I z(RN9YfmAA9t#*I0>GtQEAWyM7zm-aVr?Y-_0p!02CnAr_H+kZi!1%Md+Em1e586~C zR5_7+u&RMi(*>o8Y&p({rpy_AJtT}}`CiEYAuWpq_JAJlrl36n$EaPamsNh6UJiVU zpuQc=V~!Ia5b|2bekvG!*z_2f2r=_u7|{vlw5}5#xL{;*`TZir_bAULy@7T2Nv)O_ z2N|h`$TXW08VkuHWpvuQF>(G&_;Dr2X2u1{iU46jGhAvsWX438)GX9z&*r^?(EEM> zNhdyRRlKZw_nNf5u={$IOD=KZ>S!Zt=Y3xf2M#*wIn2E<t#%a#ZsIZYdqMF+IGOhK z#*?rjs<aJIQ)>=Nt7|4i!m$U>-j=)^xh<1tO{eQUlbZvWUDZOX$$?FsZ4j*r&N2+N z757C4V)Mqf^Nu0p{iK!4+06{$O~WC;{cWH7KKEb_fxcgKRDEFE(fFD3efg%Z*B7f# z`Ku*bfTeP+8SxtBL+Paw2=H?_{0XhUEPE2IL0sj6IBKnHRFjZs!XaJbLINM;z~|KK zYUy$mNcX|j;mYG``7c#TSga+)<L(!gS}}5OVkNeT-8xQqeI9(0o%orsvLPz~nb;lv zk%)$y{A-MnQgJJdvlZg#_F?g^j|)RXMA1<j5yVGEsq=;CP_JrFJZzRn9;Do=gt51i z57WPO`&alsS(+#QNUumYm8L7v;=+{o`2~!!6tZNr17Z3f6=0)}7;Y$h1_r!e#UZ+T z_i4mN-1R#N4C>HIIe!T4(KZW!e>jU?X5}nFGh<P@S-F)pBwDpg(2NrO;h6CIk*Rt} zGyVM^aeCN2o&75-1f!((pd{X}8LS#3cQFkl)KF5|7?i-_Hs0Bz2iQX>Ylu{?xjy}n zH{6$srFfW6s%69qxB=gVWW@g;{t?Q`D#G6rLk*=+_es!rY82aa{{rt^DAs4CTBx3c zeT`XC9q6>=Kwee5V$H2cCd`thpaE2-|Az)529AT+1p^`nNjN&63g#B|ge0ISVMH+{ z<6mSGl7JG!5ag89i;y=oAr<ezPi}}`1LGlJPn01|1Fz7yg;>)FOvT3z&5J7%-6>mw zC(tm;Jjx{sAOn}eLX}w}WJz<HiCzqlXZ~{%8hw%`EHWD#yiN5Fep1VRTr5E&p)QF7 z2CY;_7?!~%DTL^xCaGCwj-~_{=@YvlFnmrGIi!}mykmHgY9%V)Hw!uYTy*X>O9mX^ zs_s#%NAnCS4|Zkphnzj-foKoyFQjMk;<Xi)8IfpfIhOD=tGyG*^m}RdxJSJj;980S zFguYHb5?Z5=lwh0^l$oSLiPL9%&G4yMn~;5H?{lO4oOJ=21?T(%1cUGC*wU5cH^ta zsdD{G%clvuE8#|lk2wMV;IA0PkMvf6X|!fx=cBt9YY@cw<C@v89K1#r=o1WmQ9;ZT zr()d;_Ev_k4VtW<q|3>f=ZWbOejSy%+QiJ&A&hD&4qT{^H=mTggH5001n}I)X>nH# zr!e}4@S{H#$39A>UXY`Y%3Pwb9|eZjc$#iFj5gvDp~<(+>NIs3)@C^NZA{>RD-d*v zQ&Xs~INXywjgQLf#gwCXF=8^fadl4&KXH~cva)6?yxKa)jHae`pVqB{%X-iwpLG&0 z31DU$4nte?Hwj_e#hH8TYMfbMaK<R&;eMx9j})0gEpy$!s)*5gSlSoa>-a7nB7^N3 zBYy_ZNLqX_b`FesKrDN+{FSNz7i?f{DrCfgq)wJk5IsmK^i9(o6ZSaRvh+zHTLz;1 z9c55azsoL*?ws8Q*DED9ccccxv>g_`ogVPa_#EO@*vkQUnIsWXm&~{YlDzj$J_bk~ z52hBQbhf7dfK6fLB}Cb!xWk*o1?Z9*dJ5O4e~Fu@jbLS_BSz;?&e&7`_^GHl_M3n) zdu>WJtr?>P)gCUh5-ZW<6%7ALri@(qEjgyW!kuEuvQ9}5iBzlBx#RMf!bicKy*?Pb zG@C@VP+KKI%KcCxWBb=3HgesW>3>HoVw=4--AnonOzzR^qYumU_;gC4)Ha1}45HkL zKImZXsfyD`YaC&qfF@7Ca}9bXzbY3K4^Fs9<6h<FwaZ&rkzO2KIw~ATVzu1Gu(i0l zl&jOs_^t}EBgY+y`1^B2t6iGLW%{@7YD2`SK$#NfY}zwzsYGQvQ@cw%wbIt)oMiDy zWd>3xi$dR7I692TsfQChyHE?-b!SFwa2*os#4I#bf`RseIbIv!KDZ9N|1E{Fy{O{e zDheI0bovs_4O_B0yQ(6@;<{i*t*Yp>xSMfT**KprTbgdDT^WqJsYaH}#X}0`F(tTN zQj~l{rlQtHain-W9l)Sa7hMb;GeJqKSTsbec5^NnsdG-UavJZs%eV+WEFDx8@#eu< z+jT*(vgIKei(~`PusM!ap$+x=t7k?KlsiT%i~E%&RzsK3^aGV{^TamU#-B6?{*?M} zqC7V(fW(NvIo+XS20>8{#WPWKmtM6_h(2~4OZ{2w|0`N+WJer%tUJ{)7!>Z&xpMxy zg@ej5Y$!o?eX2d>VhXeZ1D9x)lrHhFgKVY-gDiq$Lq8ZmGqc25R=ds?cIRT)?|7#6 z=cJWcfp|@3?rw?Ryr(Y^*Pdh3-2-|Ix5vw31geC*@q?M^J0QyI>J1wQJfuGs6y5G6 z^+X}hxot*=p(fyb<;C6Q&tR>aMSTHmqqOZR438=kMD0XJ&sBs46^N>opFF>n9ZN>X zr?e=74zN5xfitV~<Fa+-^puueOkql2wKY3U?SOpgsa)Nv5yQ%sJqx-ZN`Kk!6%+Rt z1mXB{<XLb5p&dULvotaR8}j3b_|Fe(^Qu{<W{)Jhowq<RzZBF_>zS#%qOsL#P+CM$ zt6Y~%W^Zz_;tpf!RYjz7+Z?hm+$m;jch{A%@gfT-&;=t(NrHM9s-QZQaSZn(r&;El zQO-!l#yWnfO2!|J<f@6Jaaxp=Kg>l#T-Y!XR+N(*%wR?}Ym0-vw;TzHe*pUrBoTAR zs`wVasBwLw;gvSqesXo>f0~>$yPXEG&M;{Dl(x-<qmTCK3dmBzPlj+cyV-o|)VtC( zy8%Xd#i|=+M;3}m0g}nML@SN1u;wA=78hk}5<1M=)0W`4L_Ch39S>-9#t|4+ey_F1 zVp6HX2m4O@+@7Og#7ZTd|Is3a)tm|OGl6R59@Jm`Gq8-&ID*(;Q_?9=K=t5cQyxg` zM1_=|yXi`RUgxACK4IkI9>Wx{t;q;I03@RfM|fR_NdyHo$NXf(P|QeylMpRWqP8)k zD0<`LaAGPt8Wz=o3on$b>#gSwxhZ5Vsum)*gt6+*<4+5sm8t<ytLlsY-TU#;tM-}y z_pou2aq~7uX<H>8qg6vdM^{G+kN@SJ{$7_A;9U3bd$}Xyp7u5D{cWh4CR5xmz~PM2 z1pPY3;c5@`40BV(<I$4yr@1qje8L*ymCfr(5n~OpfWi>YmCDpmxSLgRuv3C!?tKA2 ze@P0(ut-3R9uA`gyiD7uRSYhb5LA~%CJq(B3br;0D_$ByArk_L1~K!s3D9Dr69*Q{ zh7k5fj61wC!ob3I<~14&lQ#J+K&gl(QK&H)dBzA6Qo)BI5s}4nkiTivid2g%CmyV| zHY_>iVtE1w@-o()m5?u~j+><>(tV+@45c9oCsPX-&nJbX$apBqCnM@~KGSO4PI-k? z2V`uExrF%B+5>dx&)r8A<DCdz*2JQs>$uKw2n&z+J%Y(ii}+M9yV?mC09cCpU2|&n z=%}maP1uhw4%gJcLj&$EbN<UrwYdQ50Yj9kNj9%$VzN^EA8B&TR^^aXLPUqZ5r%-y z==)-95H&v?<unXL(LND;&kxh_(Ua<L>&4$eKbzaJ;)w(qXBu0F9ZK}Un=p0LFw2-O z>5vAqlT?CGm<DA<RZJ8G;N+d>`?%O8Ce~nKm~g?cq-5f-!U*2@smC<!RIu5uK1{oC zhgxxCLMC@NqFM^}xXA|zAB8d-pt<t*P*dk{N$V_@KBi+wc^-0gTRYh3E6*I>yRt`V zkFIi#wNytEizh{rW=}CGpl({&%)L6|8LMPc&6CPaDwx79yAT)yWZdu!pnzR2$>W*u z1FRLd6SZy-Fgm_qyhKUmO2nCQ8DweE_K)f`2~37Y=4_oM2uwD8G*X8&a-l{Wp$yUP zkx>6lJspjr711FwzfO57rJWH|h(5K6==u_v1T(jJM@V1NLEsaYVfhA*7#(<USs=%% z&5cbPVJSO+8(R_r>?3XS`+MIO1bf*Q3N2QRcAhHTJ>I_d)<rbh=H_Z?IP`y<_^yX> zVUN*R+NJgDt;I!6%&B@Xiyua7=+A(#5Gm-X*Gm&4K8e5TrFyncThVV~Fv@?|Z&nN$ z-jrws`XmS_dr7ljf?k_ANCGyjtwtPkidep~A~f-)<f{_^lUOZScytH}W~CQ2k9L2` zga6$}i@6H)wluu!KB^j#f)QY<^fg2>3USH7RoSk${BVhgk`)G<7{{*2rcm-r1MRdL zFW({_r++hVZCx%ZOiss!W{cetHPw$R8rrvZ4Pif6Wk!C08wNV7-`UMPqEFOX0IFag z1J4$66Mh3=_zcr+HTMoN+|+$^p}&ZaP~ZZcw~sI*{#5%l;N&{BIV)4?vY@pdEwHSl z1~bBD$59Olsjt$+0jqc~*PoKU4u|8-g<yWq8D+f#sdPS^=0%Cnb_J6=mY|b6GY=t; zA!FaN7W1jU6P~<I4fQ2)Nu`F&{I#F{bK8`PqXgg<^sZ2@CEcZ%uT7aD3DWhpXtec* ztJui&0zp-NO3BKRvHa{>={7ZcJ}pr4M_p~6gexgjH@VS;P^7s^9#ny&zr@<ylE!ij ziWl2e*XW2?$dVqaTC@0Nx-Q0LVu*4k>|(CE{JVdr#EoMT8j6ZgB1x1NbD{a<CSnK` z>jDJMt?iA~pune`)_6TBIOn!IU;p3U2`dJ9dR2Omk<IFtpH*FPLM|c#jYnxe(!QEe zWAue(ETzh@Gz-vZM{M5PBEk4hRADl4fRNA15&;Nwv_VPFzOHLgF`5Mo%JFTL(=zEV z1nsJgx`#`DP_|<yo_wx*6P$)pHGql_)0^#2L0qx1m1Q8IJY=g*rC$N6d{j_Vu@+2Z zou86DXBLETv*pI9R74UAiVZUvCI-``-Fc15Fm)>S!THnYz5`1aK78~BIzdtIHLcmI zV(L_^p;PFw8ub0S(#;W&?B8h9TBWt|N145wi$n$<BL{iQ5vmrdR0h->H~?E6HdUN_ zh-TbTk^9ZeSV&>>3TOfW&^>;u7mzNTE?jn&;%LF6qrRZ7;z&i%H3dkbYLb(~4PLao z;ST{PfP;jW|0SG{Y>a7xD${FIf3MOlMoqpsi9u*MJV{aSt+visteF-#-aG2Vi%gi9 z*QQ{j^7Mqo8ocN?Z6*%10RREFGESurgspVwjCq+4xkR57N;%wzC{tXzO}0zDXlg!R zZ<VoX>0*uu&|!N@$Es2Eg6W7UN78X6`U7EV6tn!y2veCFB#L|?R@NvhrjwNsX^0%* zEuNVc>e|F2kzs>PS(PuPn=S#Zyw)u3#Maa%*M&WNJg=;j5yr)H1Gx41<Gt)_Nal%1 z$Bi^y4{wT+Ga;%`YGOYhENBu2f2Gr@h9L2GV{`?Vj6PV`63;USUEb0fOqM<i)U;N_ z87!AX;(yrsrszPzZRt!hF(<Yswrx&q+qTiM?POw1Y)@=+V%xU!=bZbm`*h#G)xEy% zhuV8r?W#~Y+GYZxm@DHSuL}CJYyO~@Gw=0nmaW+(J-RbX@=5g(GZ>^RaoEz6<Ekjf zNtjyh8N~31w$9e<D+~b2xrxQM$Mn4Xtk-deOquh{oR_k>wdFO96lmrcB6~5P;p)N* zGK2sO9;{xPfcT^mNeS?FO%yd-WZT^l^M(udI(s37xubpWv|#pC0wV|g?41ep%7crg zlxG?Rufu1W%H#qZ=<*sO{64&L7aZ2#4<fruBxM2TF*;Sh)b@agSYT1P8-db>idq`H zy@LNjBJ@|=Y!EWQc#hU`Wc7q{>AgtW6GQw?T1z~$PQy+$os{m&;nzS^yvs#>k}BO3 zxt1HVQ7bkYeXe-iVgyn}yc$t5$%rd%Y-JWziw-&MI>(_7rIv$>c8SC}N=HP1y?lVr zzY*`Nu*>;aZvp)H9&`U6+J5t|Pnvi3Wah}>(9E9cOUs&8Kuo#pJP27bY;M-_gw3_- z-X!US$gwysqn8j#rReFP^_u{6!6QQsYBA!*nPAg7<-3H?bvisc%y;a<ba{n2=Hl{& zugL&L{c15*Keq^TjTAMDF!FqXPAUr#RryJ@bbxAk5#TDL^n)upMweL~)nl_@q&c4Z zFFrRn`(*RZ-GeJR11K#j$O25hrHJT)mY__xJ&#LXIS3al*<``bnK;F!5;rMU^ATiG zr>*>0+J0^a+^KQ0uqA~;-N~_Y*ekJ00wEcgQpi8x<xgaYyVtWB4o2F?M9Kle*LavM zg1ni&B0z=tGE*?OrbFG)x78kU#IJG?|AjD>BkmbW#B6f0u5^PP4WUnwk{xS}`(hHd z{#+9vkomBk855jDVa=n*W&k>7jHtamD?T+^Mgbfdv5;R$67d0y&AuJJ)74l=PFnng zqJa+ku9XPqdzl|8uvi2-qe0TMk;tg(m+^d10C(!0mB?s7O+cntc|gF=dyrvxQ7Z^x z`%L8ZCwtT<#KS)iQ&Uruh?N-Ee=*A~b=tYxJU8n%8b6oG6HVk+30^Q3mKmS(ydJiV zUf&XE;@km82aBHI#DC2T*U!t4Hy{VouC(pJpVC`;d<oIk`|TtQNrO(CqaN^!t^Laz zz}Ln%P1KJT^Q5Dt6FAZ6OB5mt(Z5f<B`qUd$-zfRD!Fq;da%o_jM%zP8RHQ{41bK2 zL&7|K@C(n_J=d$o8ITA*C)*JfmKKkQEcU#>*${5HEgN$!x&^;@FQpR@T~uFG4rO?p zz;w*I=5;#ujC*iuMUeEUeTh2@z3b~sAc|jUD#Fn#HR>qu_+T61qs9!)H>aJ~4)8Yf z?|?x+Gx>b${d=URnQFGczj|5SU3h*UD<}KPTYh^fFOi%mD(1c_UqR=cuu1MvaRwr# z#7B>(c9!7WQvT#lR!6Mwnc$Z?_2(doCUcPb9~dArR{;#HIrhOIirD8@T3%lR(ohb* zmhr<T#qq>@`OA06yHRx<^24epuGJ5{f08u+LCTAyss2i)?Ctv_mS7I^%x)0o#?+%n zy>rjk<Yh8m<*tyS?iU|iex7&BS083RhX9xVF#jrLN??=cEINNujB_nZmUIE*{B$IS zigHFVD<{n;M3`$E>$9_ZC?lB<;8D9Onz+&krXcBBCQ-#L?V_Fwx44JebF>8|(T#X5 zr;D~AUN|4-Y4FmhVD84BibAxd;Rx1ND>ze1Gvx9mHD!n|7fAM$kg-uBhDpFob5@gq z>&6JRX%PPG+U?mxko{cM_g1zid(9&a#0{PqLx~#D*IxibqKsmL9S5KQ$09MJg5+<3 z_M{WOmVQPF%pBZYP?@C?5gX5msImLzLYjsL3jJ^&i>X1QHA&3KL-%iJO+8ii^QA>; z3aBPw;b9|NIONGz1%3Y9xJAY0AsQ~r!U`d2VG*roc@*H;)rM9?UL2!HIN)SB2W1p4 zWfZ?LN8w<36XzT9q9Hf|lA@^iy69rKTBXTfk?xAWjNqmQDt0J@t%FPh*|VO-ln$vV zlc^{ZB}S1*Opy7P!<l%@ltxXW{Od5lMzJAH5QVV}iA?Rx5XCii^2doOg`<)t^et0b z{^vCYPL8gi&`>f_2TZl(elo*ITK;b`LOZ)2u>R0sb4SMK0N#ouQXnZPo^Zn&QwC}O z5VT~C)DNAX3@Oph#ZecX?&87kOdoOmNoI;ymAN2WZRR+qYSdYZ;tQgrUj(-8YP4*z zlqvMDzhRi2D8jY97Z5R)Z=`eMQUkS&f7dHlA!kXDFQ-ZJ5$VmsD+qp|{dDcp=8dyG zh;Xs3hrRST1Frr=kHxdQjs844*c$faY0sAJ+CV(eqi^q73nUk37Y}B_l8R;i6$_I? zU)-nJsz|wbI)QETJ)OjqI3jbi<}+oInDV|1GJ1;w$Mr|o?|B7CY}sDnQ+skqEZ&dh zEY7|en||9E)=tHZKF|V?9~Ba56jhjFDY&v2gN3oV;eePaXAcV-XrH<H`UGS>{gvcl zNt=H$=a;_dH-<A~(oPre*fZTyW`8L!hKx39&`Wa){tujj0qDr^KduD}rNa%`PaHpv zI|a2VXFdCl-MJ3M6{%c)u@d7FAhOqai#+!uvIzAeOI?We2Jl#?Sh==J|D-u|5Tr<~ zNBH>lRezZYX++@V94YCDcFRC!g@#qa*;QO%m_5yNy^0GUA+z=?2bXsDoUPP?asO#A zbzyH@sXun-LF-P6pqZ(-d(A{H_v4jT2E!vkfUWRTuX*1pi6ep}`KGxkK^KH=qQ!WQ zJ~?A904XmkYG1E-K4+8VG{Tu!{!QCfr-Mcv#}g<xCY@`rL(uIaHp9~ZU&>KMYQdD& z<Y(f3w`@~lhqSBY?R1Qirr@a?j%hSOdI^d#g{}-?GOFAuVHs1g&*32R`6txR-M?dy zO5A^8B?G%`Xrq?oQ6LUa?WJHT)F8))3v)*`Urvnu?y1s_0@+jD==JM<r5b}<6*0dx z<g5PLHUJ-EPmm$sHKQJ_ZnBqKH9u-$+-WENXfA+bqo4=}QI&=3_vg6$e4HQQ93STG z<T}^Q&dk!SpoJ~zQ8`VD@$zBC_JfA%8}XwS-uAvzw=N6k<O-pLpDt}SVgV7+hQ$oz zX!+z3srDdGwPC2FSolsNjHdJYc8+#Y+X@Vy<Dhb1<mg}+BV#Ex(yfSUxUQA3*kqJ2 z2i)&Zx^P$+MA_Tsann**=HSTO%dpuyW6rW?A~W77oh-DW>9p;!mJo8{`8tJcICq-C zUlb>NPy4Rx8&15^AZ!lr21Dbc=Jyi;;1O`VmwQ`HwAmf%I)a3V*eX7K#qu2|a|52X zqiyZLB0;@_a_|zC>ixRJYwGE!ep&`C*=#RZAwT`zfM9N>$0vh$lKjK<D?2@GL3QTj z4zS62M5HzQKE%+RZ?TaP@&M<A@aR8DpFVQuI3k|TE9D;Rce{Zlt*s7<C`AFe%eV}I zXgKNV<<k4y+o;|T{tIU-+$!{@e*(z9hw9q*27?i@<!Y<J*A`cPpLNHJEQnO@vj+8@ z!6-r__>>KFf77lr76^{k{_(5w86BQXIWi>=-9%-9*jR(rFWNzIug;#0K&D-yJi9L2 zK}6CKa5}VQ=n{;yF?fu#Pu%st!WVc!p?9K`bM7f%cB@#O`R?4yocJhcVh+GHX?@DM zyOb)9DuMUgva@8mZgjPC@yno(Ef0Uk?CW=o$FmX61rlJbw#+0zhT`3oJ5)|xD`|8p zXD!&UeO4BBVr+NPwyPU7O(K&TW(JVofku9B?@c{^$&=eg5n4>hkyh0H_M2&5D(7Ov z+aGC4#gin|kgAtPQIJ(`7l5>FH%Ht5wp`9WqO7hW8TFk{(TrTV0|E8Z%hysOIl=O^ zi>Ij>S!I7Bc<-0)HU0a){1%4&xS(=TPy>b(NO5wIasuwrgVw6tR`M1|JZErEbn5-m zER9PzX;@uUV6F1DF~e9O%pA)TRp98s8nl~nI<f`x%`nS=tpi5td`juv#^m|6K_V!} zsI(ANsX$Q2S(adOv+5%c9Ek`xG1)BTU#4L8dLSMn%9xu(m?Yv_sfTLs6do2O`C6ml zf5I_1$*UN~Fyn}+Gax)p2Vl^kl<`@PRV-C3ybFof@~W6Sf~2V|a`q=km#KbUtR~;o za+=0wp7kjJqE6p!syACbUmy1FY~T#hxeH1#tCCO8@sFLdg){Bivcs*vhl*SeP7dJ) zxRW3Wb?eh$nJ$h!C#yQ*X&64^rySGH&nz=ws~sIlr;UBg!qh|+MOO^k8-IuIs<kz! z0Phcz;Ab`7ttPm*AT*(`sh*=KeZVQYxX$kiAHB8&>No6u?YBH})G99(S!+=ZB0<4T zrEvp1QG~;vLWqTo<|vL=MQ)1G9tne6K1DDueeo(sdvL>k0V_s;TKlugm!xOv_J|EN zMCx=bazxSl`M=a@5D3zFu~_xWF)ND))apNZOe%_izsr>RXB&%okZ7Ne|8O9O#O%ZI zngG`Ep0z3$XXE7WGGMrg3y+9yF_#~)R~Off#;x!L&R=0!t;rSA)2l?zRjOhU+M|=A zB;a3y)FjSqC;s2)d3eE-1wV!b=%LHM5%ywc3g&N8o}>Eayzz0uyoD~l93Gk-hA!lb z@<BC+$=n)OQP>1dTab=b-g&5d1fjfG_yCV_^3l1{d{I4Itu=g^+S&qzBV3$~bes2; zPUXPMRN`&D(wVg^l9?q(E!u#UpoGZAEIlP!qH(uucmZ{^Vx$&c>M*$2UnIISo>h$! zQAQAS$YmDqZe@t#`$`JJo*B+nZV;?ozpn4$Xat8I!^3;{P!zE1RMw;mAKCSV-awbO z9bH*x^BBZW3JB%J#%I)TsbRg(M~o-R!u}t#I93c@UM+69Gqk=UwQl<CE3<hsJ9x-a zrm0sFx}2vS9ZX2@o&;z|f-NT)5J6*=?z#TNg8aXCJU#C}d`dvn5TiW9xYD@%*CZ>{ zJt`GBIXKk&0Scwm+JB;4jLP1baR7H)5}PB&ffxI)WJRr^xI58CUfz}n8@2MkW&FrS z2)&q-GC$J4LpHaKrHLp*Y9bQqWGbDczM7Pp5N_lp%QwuD+DO+aY!Q}o^*CT=am&@W z?*8SN<1Qf&p;vpL*)jUCVaw5t&3e_b@|dsE0hiQbqBuuM01Z$oVsB_yfdYgJrzBAP zh`c<Off&}jO2nX!_J4ALwgJcIQ9br_6bd43i~*eaSFD2uN<MyM87C~M15ZqGb_g&8 zGiMa3`bQ?7>?lE`iqy&^xkHOf*=7Cagk00?V0IuDfc3Z4`ajHTKHI%hGmc3agA6dW zD;LG8pTXO3mAwp*qQ9f<wSh^)KihH_k6I8$Xpq*Xu;R2%wM69A>&ZTAa~9I&6wuUE zkYb9L9FwXcsm6YJb__E3B*E*$=i%JQ<mRN7mMFs9?Cpv=*wm>U<Jh;XlNUV=fBhrL zGz@q;0tE+*O6CibOYJ8<Vty(U_8dwbN4ha#)S`SjLud<M2hW@``~~Q|89aQ$aS{}b zG}zrWqXQV2c9d}<X&QBK$&Pz>Dtlvh9I!^L3j?S^Mv9S#pwY!kVj?iZcQIKNU7@YG z!CJRHhivhkF))07-L+^1Zs_}lQYbvYQ!MK)k7GE7Lhpy%L*4Zg3O2qDIvSL1PD2k+ zd%U5U)jri!bdJy{*aNWZeL2<IW)~lCu3J&Sg-mFn;_y2s)rF9lu*%qcNL5IcNKY4G zi)-q)-+0;pIfqVz0`TzXU+pUvOfcURf8TKGJ7EShVO8hyfFlx3S0R;2hzcNvTL<A0 zv5cD&<TpQHkBrtaaBJe+Hjd1kW3wM$2`W}5@r1P!qXWss1!VI;=~wzluR|z*nh5c> zZM@yycjLkH3u_?jBt-;xpQ9L%d8<N0CNMC@kd{x==a9Vd!X#*i(1ZZ)v`Iwtv%5bY zHhmD3SG+fgi_l6K0}F0(;?f;}Judc`t-T?^F;Au{sop>&&Znbi0v4-tTP-CSrTl|K z5K~*9K%I~p0Mcqt^Gjw)q*be*L$n+<Al@G5liQN(Gb6IES;c;ZuYL1$gr4Ku)Ct$g zSwl9HK8;SDwsW_&b5ZG62t5wb%|K<jpZ*yJMr8WSdB!K>OLHZ)2aUO2a>uv57I1>` z=ZEOozwc-bwutzvMdRUp81CqoNQIB($+F?LIllYdfK#@0*hvow!uo%i^nJ_X1#@<n za|VTIyh3}vzai4!kN;D6d32e*@9s62W#MVrO|24aW;s{te&&#`e+0XDn7VA{=-kmR ziCYWiK|Jr{X==k-L|p4b5M%!0tPtvEi2o%OkD?Ci)U0^EpsV?o!i?|=K^%JA%~5g- zo(<q|H*Y8qk&yhpfAZxrmsEV{1}9VrhHE_#aK1i67f)P0p1iOFe_S5;=<O}e?XrdA z_+iQdmq`5v6UFS~4BPgJLb-t~kOzTA7s_c(c`9gV2$Cfm&IuPdA263r2x;lpr1Hjr z?;Z#7_j7ewbjB;2vnIll%b&LSVr#h(1`$Y{QSy)4=^%hJDCV>s^5M_m;fe2}9nRqC zG1unE<%k$54&-uKyChYHub39}U`5JKsp8|A8PG3sQ|}gY<$L#GdG^{k>1)OX#ZIVP zLm)9zDWAHq%{1hVhkhUM+`-$?s+FSH_}Qs~b+Aw9LsmO4+&ExjOqAN?%6~YsO#!Tl z$9v-IRPu|m8OP{s?Kl=?;8&^G{7V~dbi~14eq`^R%28*Q^&fjg6DvV%%aFQ4?WgT2 ziR&YHAZjU<QSEfGS+%u{Xew9z8P6a_JPS!2n(-3KY5PUEmVwKX+VYzDBIemZ4kAqs zerbext8yxb=(mJ~6!%T{dI!u}o`5HCCK47BVu=rds#@{mb!$U&_%u>44JJqvUgNU4 zNkXwmL4hHK7><in>Kkn5YX`%sgN?m0P1lAo6dP7}ZW_iH1W*O*937I4@W74sO44Qh z9=%CSWOR=u&#Ec}R?dIl`xZ#&AO)=inI(-p^DEY=%=Hf$JB*i6F<D}dc>#O`ZIWH^ zT0>98TgDZ~FZp~~vd%BTT)9SYJHuf=S#gwp$8Lifnerrx03`-&F2S@rQiMdMf-x)2 z5?G~bW$Y$N721owC~47m7ls@G+MKrCi5#~NlU43EuN3ZpXX2$ye<OHTHvo43R+JzG znuyn2m6nP)%jXncx(iI455PK^2SIN+@Z*mZ!>p}CVTd4bGUIqZ7?<28=L1o}MoJ9w z3w9#urecK=W!+(i8Q`{}NP9lIfStoXPt>UjFG?0W>t~N}i*Ra4m|=s_!!*Z-tWxI} zSS#c3z>H0827do>l?dYXSTDd7{Eg|~DL?vhwp1}UEjhCM!+5v!7HH`;P>QnAtEDNY zAE5R^r;#{ol9QXF)4)1jEl-q>ws_q!kuxmbw9yl6J>KV5*L(cfyF1Za80ey>dnKsY zz)C9E!RWC1thdY39@I!ALsp<WuQgndu#oF@Wi;fY`Z2jDX^8#qm2;AW5rO-Mn`(7u z#24ul;DI~X$eBix|MEYvc>|I11`C(Yk`ZoIZJbJsGFGK9okl=h44U36-HLby6$Bl; zZ&|`7rmRf8yRvguJ)Rs(UYF<T!ED)cp_>7Np?Ij%yf)xi5z517tVlMp$yx!O@8xBZ zEv}*%l0H~#0wveyfqDsM_KRo<*!BhChw<c_w=C5;O;;*k0<dK|qt|}WFp+q=d3v>> z9I?ZvV`>UYOLGaJ@{cC;21r*@vcd~Ah3r!PUiQoLl9r#Q64`l!jvIvDR5FaQB}6w7 z#{Z{wu1AGHJXq2Ji+V2)8dimkL_q$1i#d?=T+pLvs;s-#@RJc@a-i(jf;Mqo6Mq9W zpRD~PU7inpAK(!nnpS2~7S9MK$+B47NrD59IePDIQT7AH;xbTd$YiO|!^0-HIhyEq zWK)o+mTv!1>z1pxxM<XBjoC(8CWF_(^PfxBO;S&A-&KVMszrOu#4v<XHU;ShynX0M zd*ldm3X%fyIj1|$!1NO-wl%Ryqn%Zkq6ot%kMS7=WZ?Q5Q<2{7Cvua@LTtj5^o%m3 zh%))9jIw1V=23K$#@9^OFcW&P&GD`d8;fk(z;m4d5dljT-RLg}4hqe|MGTH>fv{B8 z`b_kuCmI2H(v=Pzc1m_EK8ge@Z@p@Wy-fTUg{~6u?|_Ebhud*j?05b49>~mgRy=D) zP0<o}!<R#b+LxcHIk_|@R=7;M45s5EM!+}`=(Eio<?Q9aS%hk}T4+#zZMINVe=40J zrG6P|^p6)uW4Zy&HmzpFqe+naS{OX_z7pxCnuQ1wHw_sC3^qP->2{PpKI%hW3dyG0 z=&wEt;gmn~OPJ_jf9QNLxkbGl73S|J^>-te93VDopjToRL}DG)YityAe1`R*vAzv< z@x0Ib$3K*eA&ALo^t;skEeozdPH-uzM-NsW&D$deQ&C`+o|RkkP>obDmS}|;lK(Qd zy!qc{&TQwVZstafxm?rN>|N%!vzzcRiCX6IZ=!d_oQ^1JFibY}07LMXNGSw_RLlvm zPe6pEoQkdoRZmCL4No9*>JQpwzrlnx+}7dfpgeX=yaN*BSYjAV;FL$hk1+GBY!*D( zmzSU#_*?SUT$y`|XQs$yvk%P?y7`#af&D3}Ft@O7vsC$ATFPo5tA_{1r6?9;T;T$V zAe(!m&s&kS2L>}wDr9RQt%#V|lN)(BA1JY#J1J6J&&B`s3o=i`;$WId(LTvb@SI`S z9=Y!Uy<m{~oFU%E2y+i>X5=95`h^VR=Y?+l3}4BZbDeqFP`5|rM)##;zNJP1R*FfI zoso$dNE;7~18<gZ2f=vP!$`{E%!ERoHl2I|%x38{H?wVaBEqv`f!aAuT8N`!5uicU zL34lio2}`JW1G|!I$XwZ-SntJEoarCbe6}K9^s#OLG7fC>o#vJUiV~k&r^v#=gmQk zj!<TY`U37I2L3okAUX74`4he2%W=uovm;kUGIg?J$3}&c^AzV_4T_LXlKe5N4(K<t z`yA7Mt&m{(22nMy3?UGWcp3dTYrvFmZTmOrG<(skH}~Pq5%EBkkA)zrCs>Iin{|>K zJLV}Wi~FyD?ck#vj~YLPmRme0y{#|`lht>}d%r88C?})Mtwc@a3+kb5K1ECHgHDKD zzFzYiXDYK!dF)7LxZttJvWglL9uNo<!`}3>$lbE|YC8h59K7Dq96N{&Lf{B>i+kXW z>iKuysD=0QbR_+^hh6XQ%m;yX$k3&Wj>4UA&kyL{Q(3H8L!V@vQ0VwktQ{Y*%t7zA zD43aiK3ArQ*)FjEuE6x@;_VwHpfPe~a)MAU_s*z^yKGmB6h;5=+&TqvxrW~u8&<EE zxD+0uj~z(_is8u)G2Hk=vj8PsH1lCwK0M0Y9eRcAzq5bKp_k!*_8EQkGbE~+^Y1%w zU7BW}P{Wm^2^D|+xf?=^%s@_Q{w%D|Sx)`gy;cTEY!ezAcgjJMWmek58#h=DW`*z< zWxf;pH-b=h&ikhvoa<_yr=TJTuOM1+B=gECDA`e2KSq7V>qh9O4m1E&9W7$-Zg-T; zisP=QKO~>$^>mwjI=-H>iI90cr9e^mw^FOT=~c%mZs~;cLd}i~R>%Y)J2%&fiFOAx zZ|Hg0X-Tn!*NV@F6ufGndJ;}e6t8(x@9wd}PM=rqaDeDcLRZ@<3+qijMg^8GD6t8K z<tNr3c3IhSUjs{*204Ha_k+M|u{Vh$rRj4N>&+FW+#37)^=y#}ODcZ3X9NG-`$Ks) zCAHAp8Hj<T`D*(5XXljHB=p{1eyt=iBr_{>5fLHz<@-ZBOffm*fKbij-^LeP<M+3L z2hJ&j*M^*3rdo{Q*^$G<=naWi)U6QnQ?x9?xb#rej`KAHmVH1Hj)X0`2QPL-_dPc| zeq!{zFwo1$6b^(1nX8<QCmb$e9F37A^PG{a7CL89!H6>-p>X0WnPE`2DW$y0Q_bvr z?B8vDWN&{SwhA}Wv-RN=n?L#uOtKqoT#RbgXY_V-A(`w1)BVHa$wUQlTEqSlHJ)_d z>(C<DFDlCM91URA7afwa++|d#v`eKYSkdmDU*~;=x9v?qN7stwZ{u*nnHId--8E=) z%ca|1@=KgJx-Jir$ePz}x^zBGE!2&b(}B4XT9q}~Vt6pfRSD}tdi<0)4uZcd>iz|Z zm<6xt=1WkXeo}7e@9f2Lq5}DykFaQKQV#_`O7(&5_hbP56M&hImzkyfnDy_B56qZ* zm`7tD#i58j<F?X|>RqL2tTmkRjd8&l)hJ_Zb>&L?ZE3Slnei)sCI*Yd4+@?j{dwI{ z`;e0bYn=ka=Pu8~N=7<Vl%eb(U;G<dY*mT)KgTr20f;st)unH6I|~B*t!Y&vucmX` ztf{l2ETuqYVYWmb?h?wPNHZOU`6OJZDpH2u`rS;^_~|EqhC!m?*^F26MMZSQ$H|`q zBpIrAq8FHMEvI)Lr8|2&A)kq`C?2A%8n4~ok}|36WMck<=1|xP3)xF^G*g+ijMyU% zgsOwmae;T=sLDW#TLa`AjtW2vghc;RR-(3t!1Mx(lucngRA+Z7Uf-F1S`GU$jWR;1 z8uD+p5~xQ{;N4Kf`FHPyvpQ%$MLGZLP6KW0sR+|n^=Rvz438$Dp_$QX!R=KJe_L?2 z<TkfbLREHbqWPP`Mh6>VDq1LTxQj!<&w%PHdY*_V5YrNCyQYW;_h^y#?Ri|@gU3yK zHZl#sX1W|-j`b9@a8#P%0X4h%sji@*oLTCzcT)zany2O)?1A&f>tc#b1kP*T8c|bE zXVSRiBW&|Z-(uHz=YcK?fxCXryxfl+UW{?mM$ib%fNeA#GQ)l>q>o?>cQgqCrcoP8 zYxy*D93@Sb*!Mm;R|;IB4ySXQ7+IP_TMEE=2|iEKK~Mya+g!Ukh$b)RS_$ubJ~{q= zn0`c{D@>cXDf3Czi!O;HdG-s;P+?qZSQ{}&7Mt;;tVxyO+DW5~P4VmX$-m-%^>S0p z^(&66fNgHgzx8rgj2Z!Gc{R4e!opS;s3`<bVw}jJ{47YZW0BxZpANB3B}-Y!?L?p! z5nA>nUR^GhYw#!9K=}9K#hl3q{zq5JkA~ex2#)QE(Z5~a&^=>o_Fx^w3CB-N%Z!xU zX752gZxx*cuO@!BR7d9Jy7G{1hlDkYFnNN3b_`5!j_|~>va#45xVeR&cvjlplQ0Yg zW_#6p)wCZ`pO-Y>nrrK>oOvg*b@BrDjv1dBT1(e$dyoj=S0rb-u>0V~oiuU9+;hqB z`~N<AzrXwGNC>JlSLyM=dC<Oq3q#7^BXg2vy+_rgtCCATDPy8yrAR4<e(8~Oof(=! zgC@kQ?bXM-KbFQ}JTx*LejA*ss$fhi&Dcm-CxGCUnaUkhxM`^y*w-**Q6B@N?d)Mi z<s>SU$x}at*Asi2$w%7`+%281#&X0jLfts)?71Mr!Yzv-uq(><XYCR<$%g!aBhBVb z{!0Sd__}~Y)zZ?ONtH&MD`%{_B1p^+;V-k~SP;-zY@FaY#prEm#Kh<<-5NbPdOCS} z<6^V3n^d~f`itdFxz|Ippj#l3WWqO0HSadNe?;?&w9MM1no`Mh#4iVVxdN#sSu=eg z89#Lt?asP$yroG)ExEwgpe_udySkR~SH{5i#2?=bBYSgLu<)y^`@eBEfmdJPmLn=l zAxPA8FeV&C2NIinx0uR2(1819%_#j`ox~P#cHARWeIWR&#EY}czaa;xiT%kFO)*#K z&9|%`+8`&mU=WE_-}aoA3!Y$x${pJHuDa(-a*viRm6CcC-|l$1b22F4a^#~O2jBDc za|qoVFc9%e>~F^A>CDt}_(PGr>Nt(qr15C7a$OT>)HZC{ys|_;#G&plK78G}{<a)F z`XsH29*byevb(Ce3Y`OLr}L@^uk9zS(gTloBj;kUkQi`I>O@4_uxi=J$n&_yFCYt2 zjy3D0Z8*nRCDrysrOh~yZJ+^dHPH0G6DB9f(*Eo@S<?>mQirnnfS>p4dzge?W8MOP zm~n8zhgNCuIienC*iP>I?$^QpV0$_y3273hL5vRa9EjOUo(TfhtyQ@z{k1Vt{vN~r z1-i(0qkfj;u-^(~K-Q3K$R!R+M%8}1=$7*foZqk+B=@0}C5;JmaF%#0HydHV?ptXH zqF2afTuBQ5GSf*e9aS;L;P@D?4Z7IqF;xZ|)-nfEx3&_p^7}5^OISfw+q0a|@xCBv zWV60My<D(v@<0Tja(b>wl8I1}`aoG5*2*rksEjHcO$oP$6?mk2JLG3b?b6k>_w$R) zp}tw=+~OW<>*T6TPBYRHzd*p~tb&bG&?Yiv`lGqJ>N3S=u&F&e(@xx=W;8h~nrmXp z4`HM0p2t)C8e6&Jf_7M1q;A)|c&$K*SANCQ`WaVs@vjyb(sgQHd@hMa@!H8jgu|C1 zpr1EG+(!;4zDV=PcK_jK&#lpqSA9MUQAv~lZkw~fsNZlH>0svDe-O>za!A9S9vNm_ zd0v?Mt`HIftD^m#OjN(_BDzjcMVn%cH40zYKfKsJRroWwiMGKe&j!|}jZWjVMrWq0 z1$r9ZnSck7m8sYjuu!5~mPdx;wl<%dc~WA`jPULV2o`w&V}SjBl%Od<{VV4*2b@Pz z_eB{tQ&h;;2j#{f^_Nu?w9!q=nc!XxxB`gX%br6bAx0skwMQT->c6zKL1h^OV|vL9 zmPv<cs`Iighz?SN;0*nZx_>rv!bmz3v5kR!u5+1yWOYY#^Xi@MwukpKbm6jYYp`y* z@UX=sDNb<qs$@yJNhGIwB@=`2wttu9{29wiWnWZTX)Av79G@q!pT>OnPTq&xak&J> z=W^7JxS;($RL$m!^Qz%5yzlu2D{FOF+GmSUxd|nM5f`;sWfPle1&60QRTX;BoT(q` zXtD*^HI7~=t+jFHzhs+J^ss@Oz<U14tQbyqqJA%adZ3h(2Ixutigq<bXMB^p0O_4( z^hdZ|7frb+9h%!1n!a*uSAr88i+tfH^V=J*vV$AK);8+D&X{_MCk9T!+eHVLH)MNB zUv7mPmUwuVkSU3n3RmaI6_1eS7)91I{h9z%zVmDS*2hKv(vCyrQPcWqNqt>bdC(P1 zBjie+Y~@V5nG~K5nX@bX>Umomp`AVu>^t^8R;(sRZfj#1X;Y94tBYwgC+MS#6;OYR zZ^L^GL#%79eRj>Z#~0$RcHYd((H64(6D3uXc!aCdLr>QwiG^u6m13_~(^6EwK=yzG z+m62&>4D02hnx}~;T5Y~`-A}0r&8tW>&>Jt->;VTo98|KX(bNPGtwb+vyS5SRnx{9 zE7#k&F6T*)*)Z-2vYBWZ3Pln;&`Jj8W&XpMv0RRiv?atd{Lk&fyyFb8R4i-jZw=sO z-+sW$HL5OA3J920eXD5pa?TWvhJynXg{Nt~8z4_C4BOzK=r$|zIM;gQ%=fn{m}<V+ z#$F)Ks=w(X?(2G-#3$3J*r8hf3Btz0M|H!|6Q8KiEmTT2smLH|A!JypV5;jb#*NF$ z;}7$tj)ix#N6dZr5pvokXYhksc-1B5`ES+vdG)1b*N~^Q=P#Dc9j2PDbmkC1*h%t+ z^q<BsZkxwmwfl~!ZEw^zG`!d?5i~P&?jxHRBgEeOLRu_CBYb86=UsqaP)F>ph<@s$ zlUb++U0|-!v@r`Z5cw5g3bp{EJ39TD^4;YmcHOePO`Dojk|ZkBjMGN|>g0SaJT7%3 z0cD%JE(+i5l;r?9;R0pE2p1HXA|Io0kBW|0f@mi8IpX0$i?tiO8$%_t+(~KP-Q^3` zVR<ZFLWg6X!>uq@?<_jL!;g*A9<F1(-CIQ2WE!EDY(+JDmaT&HT?v7AOE=0ef_%iZ z2hY4=Q>JQbG=2KV(*pHDX)*b12J<B35n3#Udz5-T=OaSS+sU!)^A8VDcExOp-EKqW z>c+%NwS+WoB8bW4U!60DTcN3rhC4Fxn8<8bDk5L#J^cfgUyp6PJpyBp=QyB*oas>1 z=oWSCe5d}Po4+b4p&y(Xam&$JE53SWX2kRU<*iw3=eJqor@S)w8Y)j)qh5fgD#R)5 zAnX(VlNSw68=SNM-0cY9%`|;(7mfh?1vbeO3|^<wMw)FOPLA}QK_#5Uucg}rU*miC z2)wq_AD*7xcsZ$Y<_Qert>J%zoDV1(HB9X2L^JCj*wnXO^<5f?U5wX!e<RznNH6Wb zeJEnm(Bu<e7Iq<SWia%wvAycJV8Y+ble7IE-+q%?m90AwUG?n(v^<onNg_QS!9V5E zC2TsPSR0qe^kFu$H9;}7Gz;&gTkcOUE2q?!n&#d&%m4W{_jw-rXm&Zzm{figQ?GP5 z_k3L5-C(%7PI9g5o}Mt%T|H{!GQwS7bs?_?rwP|&1!H@)-n_sxl5Z4+>2+pU-izmr zes@rrex7}CFLRRthNLXxbYGV!kD&&tIv>(iGY-NC_b)XGC}=#PzP90p(|YNL)<~&4 z9<CL41pD=Be^cnahEdiVC!D*dt8v`84yt;Fl%clgE2ZpE4o_b3dR9-YQ$k<$&Ul~S z7D^X<9~qqwZd|Yc-HS^d)N4I8aIsTp?D-2*?g@kZB?NH?5~6;HQr)BZXEY14#Hvg$ zlj^CODc-}Pc*GY94SH~iFLJ$=DH67#rZXypQ>`NHEOwMPlW+UCM?1s(AynO{*E7ug zs@cTUF`42Sp)=~?IJvUGMATG7ejPl!Tyo;Gn+VeuvJYM6P`0-7;GAZ<(Z`v#8K2+! zc6nXzzg6@BbW<9Uvo^(e3m--Ec8&CHKCTYSL-}`xeH@{7hrf%0{AC8P4=cl!lHha1 zCgt6Vo`NyrXM|A5uX<E=%W}aft>gO7(6`X%da~xR>uOGuyX!B`&t0*{vTI_@<w+>j z^tShsQ^QspWB<$*7ZuTn`w4n*X($KOq?dTgkCiY2Jdx@K<`Yy0Zm4;}Td*(YOH7sR z+efPT{HnBn#0R;{N_cTDOPa~!$J;BdVem8MzQP6QcJOYuv6vHjcSEbMRCn<bHk*;p zoj)Bs9m0=7T&82DJ9#cYfggu7JGd%SFFJbn$u4u<lp*kZG8M6C2WYve{hU;iY9y{d z4tb1#T*W<E7)w3;L#WRuQ5L<NpSdu^axhJNPT%BSVNoWUF<q}|hRQkM;6kcU`|ysf zG0d}i9K?JYxQKO6To2x_O)_lO(QU>99if>cm`}MiNu``S93ux#$=(mJ1-R&gGcpou zLgbOpb@AMPMb3EXg^28v#)Fh!xM3R>=qiT*q(dAuHtA#9lE!gzVKMsMBBKZtWl}ft zI<n2*Iip5X__A+8^vRx(MgsZq>dU<AFR3P`@#_a4^rocSB_PJcVE&nc<#{qnQ;3gA zjywKZFt$%Jhlqdw%&qQ|N+vX{GBt5)_7HeE!0)qUuox=pIOxQ*&>DiCgO@0zoAajt zTvS^okQ#u{l;D7;TCgM>fwy?hR;Np9SPNh%g{wXHjZ6t&wZfXws@GDSj|_^1!r+ex z&KR!IWRo8uBOVsmH^Y5OZbV|Sr~-CO3=jcL^~7%=<Q&)&#(bUM3c*dMvnV%Wwr_F% z#c{A~NYi)7jqljAz;eiW$0B8yb!Tq_2%x6h^w0`c)`oBHVaxZ>GLxHWa7dgDiY^lM z^+q@(u5ViU64?+p9EI?@TE0km1{{wIv<7-hD8B#3|F#v!BJ08GH98xuGcq!q;<1{+ z`^s-pkGsW~*v5`0Q{3{ZbG?p^Ii^%$-`=R5KH|ao(}W7e%=}F&)Dimbr#oT^B%9aT zgXNSv?dOOo3;O~o>OMaOnQ{s3Cij9fN`@7bvN@44)n-O_%Xg4V3T!16#mk3%XoqMN zRwOa->P5&u8O3om>?~kD7>e6<-b)*hhUDatW2p<V)wWaN6-cv3l<TUNTQ)45-uq^T z?brA`>X@CL23nZ;dxJj$Kd~Nx{(lVndC0P+=<0<4*W-5>=BNF}KNw;&KW)K;3LK$* zv!PxBL+64&*%E}x+A0&<`@ioz+pGC{+*JN-NTrA0lKOU)kNXn=N>s~OCD}~AMbVe# zFTBJbvZH=^u%cw4l3t}r&LC_|B{x3iugD}dem6fePNvwOZ$Iv3^N&980SFaiEfD^1 z>VlT@9AdsTLUDf)na5aF*0WpjDY)t!FNSY~sPx5s!TLFw&XWf2Ef0H;xnYie_GW`| z6$+%$L<Y5cqflM3KG>1*L2=CSuobM&2$uY<cs3UnqV;LloL;FmX*XDfn~#Fx{|(vr zGUUl6!_Rq=-Jrvd_m6X?6JVdZ4&rvGiw|lTLE?_89k50n1>v$AH-!+$Lp$V(3L#I^ zyk&-!-q8Zt&WDEngefQVbPYIMJSZWTT1Dpx%rJ|Oko+AeDn*hh$cS5v%Vu?|69g;T zq7RRfbilyAN<sC+se0uki-Wp1!H(@bZn3|Rfk}c!onE{F{3cZM190Lfu6FIndK}@5 z6ZWL1K6E><T2bXXd?w}uR_F?1vR|R6;F2-c@;M-v|9mQ?<wv;8_St%{ZD^sp@Mo_| zp}O2UOUD_OU9O<yr%xRJL(f%rG<1t&?BBzpq}^}VXsc!c_k+}w22Waf@HQnn;{`(w z*m|LH=hrJX1}nj#1VBR9Evv_dG@i6O7-nBP1`P@@l695r4#hm(+^U-wZ;e_^Ss)Sv zeq4=LJyPKAb#{&Ouu9bYI{Ef<A@YTX?uzWM%VUk_(hslXVmAz6M+tvAMvuGV#-iWr zZH>oVIrzKur7!EzWy=HVA`WX6mAl>D%_7dK%lY-qW4uRXm)!2Uw;i^*9w*(o8fT-e z4bJZn^sbEwosaT2C;NHxW^_APj7NKD+?7B%W~(qY^NwW<SSylPse3X21wY&!+q>u> zn%8@ee~Z?8_jm*VPyOZ$iq?#H|7{ZjxakC+4S)mzNn-;6K?4B+akFzYrnfOMwlJXo z+Bq^aVWcy$F+J1rF;_9c1TNOs+o@~0?=LP67PFQzYy&1a#g*KemI<|3e;vm_OvXy| zIE%7U&cQ;!1jjJp{$$KA6zcmxMxHSpyg`JQ3{#$ti=cQRB!Reic+GOkZrfb}lD(>4 zTOwbzeIGqG9(gXkHmWx{4}B&(@P91B&4K;wzW0tdC4keSn?kWjCr0+TiWmD4>#Pz! zE|7=oQgg5QWSvRo`0cp0VvcAcnN#ua5P6Bfs6Uk7$tX{V_@6!mkd5wADS703&D=}n z%zngaw?FaJD90e_CVQl3;311NfE_ERs+P611nzH}C*%hnVPk|*^jgsH`3%cA9aD*3 z;7@#NO(fo7w#6R#jZ*2qW&Gk#1-oak6^OBqBiQ5i!>D@rzEis_T8;N|wZjDqFPhhf zb1a^a)X1g<VChp_r|u>6rb}IGX>0KFP@_%fCCBxcK<?zy)qCv)k(Cb@kjpWWK{pC` z^RsjeJr4B;5f}k)nG82}2{1gsMwlK*Y0Cx6@bkqre~h~(hTOew*^P5%LfJvt?1fmS zq947jlgu7;6TuI@s6iOpwg`QBArBMr9$J>Rcy;XbD11(z8h17yWM8yaYjt;AF0DEZ zmH8|<l^aGmnp5CSOZnghdae(aay%-Cf%#zHCbO=+v{ZUsEs9!=6yKt|Fc04jF3g`p z<F43=DZlqw^<HlW--LZkJzk}4Zo4{*J}&UfyEMD9<;H-QMMxhUU8Z9B3t`drP6zX^ z9vaHC&W1V1;uZTy2mDoKi$fmNJ5=&K=wPkvEa(ULjX&8$1M44PE{Uyh(FlQkOlUmY zL`B~;l^DPhIB#H$)m-I)7FLhA6Y)FGv{~ix|7R=Wi=q$G{-<r5uNsXHb&r!`z;83J zc-4YkTR#hzegO+ac`yxj-DhYanhOK2?e?##(mv?n@4C`0ZT?0_V+IWDUz6!;^1zE? zl9pQU0Q+SSY*q<Sj_-~^i1Ehp<52Y{B1Ee_dpGM5YUG!@J%n)r_!~_UcoSOu02@Kd zPD>R~T<I}aFaf)P68amXf*H)iV6A;Fdmnru4U*!!`#KdU*(%#@x+!0OySQ_22_%d| zTzi<HldX#4zG!e9+K*EEt9+Q`I7nGKj`Q06f#V-r1IOdQ-hk3-U3)iI|E%joWCw+a z?i*MZ0zJAv${UU2m7%2AEioTxdzcv+J>B{E4Y7>wo<H24D0dtJJ(Z2FGMBpoFU*ue zS8lDE|LQsY+Qq~tN_qHQRd>y=y7$P{7s%`k4XX;a=F>MA_FB}Jw(z3qO&OYj8#&$- z!)Nl?BDi^A6X(^mLV_(@_;s=6&d%X@Gk$LK{O#{OL0MNH9_$Wot*qnksmN~vCQ*-F zM#!)`tbt6rk6o`b4<LqGKc}O%-Go+k0)F0*b-&Xe{)M)WaQb}3&G)b}iEQ@^(-o<h zGhLcI^ejI29yII3$EjRGTD-O&3Tc>x+Y@7B3u0vheq4c+Uii0ddx7BS42BFx_tfTj z#mm_e#-u0V;5bMd343oWKE(~nW?2C>Sy3bfSk!eFBYim3vs}z^<jd+m7OejA7*vGu zgbQ+C5|!SF7>VwM4@M4R$c3=G8efy*aL+#4LM)J(wDVcH6r8u`Fu00j!^PkgjiN;3 z#gk(L{MdRtSR3jI1Buo&$De~Jg9*clu1C%n<k(WgaxB>_+3vkdAyYLMLoLp0*KJle zK`xFo9<hiZR7UM?mlynX)HqH9##;+po<LpS!HAs2jWOdB<5jI9x*V0FuiW8UThznH z-e70Ok1a_V)0@5Jb&c%8k;E>W?1t?}t#$~Ytng(`WnW+N>r*}LNRB~W75-%QVESyN zk*n$c*P3JfjsI!w-X?=b!x2{Qzek3?j*u{W+?;OE$j$DJAhOA2_#CgxmDz2FCu75A zi#WuagNog)H(xVt_~e*h;q356U0*=lb>URYi3T{jC>r7Zx|}Hcab3FJ?fu#X;E$7U z*lp^Tvn9ky;Q7#cZMC72jT!#kB3A5p#50odxN;&>7?LcMOSgz6cZk{LRvml~AunE| zGCV+R2>nT<f`*uW*tY}@AKRMKtH@A<x#_Eq*WH1xo!M1=NK!{z8#M8<2r>`yUP@Uu zaLRa_-s}ho^zahCY((u}Kt_N7Hq|d>h_}Tc))?p5-H6g)pxxQ~Pja$QpPT+VFeOK? zd@)8XE=Ck<D>y6l?d<&s9Ag-{TRpidzA@+_3pYH6O$$}>f@50S6lbGE-biGLokw2V z)HBU}hXrlDyfYKq^)o}gi~08kO_8_x`S*@zyp>wQ*$dgzjYoEZJFfRYPP8w<S$H;d zcC0UQJ2EfQS>y#QdIK(;C6JQO_YetN_7%sC2OxvJsnESZRvHa6F4hKPDdAMB7@c*o zLez4lHNh?6Mk)#{N|2n{>hm+C#hQfdhYBa00b;&=r$$;6t&PtCrjS(d)#+x*GM`-% zG9~(8S8P<Y!b7l(3LU_7#zqXnwa>Elb6RoTz=&jV<&fQceZ282XEko@u>i=HyL+@h z<Ca%*DacQd=?@GLkk3yr5P2!E@2DUUAW&b3O$5S}22l_R0RqDD^Z&+hrvGBNrk#1R z%Ku>aN6*H(&LM5;1~*_ck(sv|rjXe2C>y$r?BP^Px|ETakTgMvBGf?;AoR-=^SdMm zLk|NJOaN(yY(S^Fdd@f^xX+bvoEU*n@9L%7#$)T_`pwFQ$2!>=R@W=fVdmkR$CQWf zVaMTFh=?&p+_w|I(UM_(%n<Ui)X1|;`h>MB=THd=O?+f5Q4JuS%l##oDn2zOOk2qF zC(ivy$^la;Kuv5efbB=>cc2=47B|=3<X6Lb!<^(?U>DHo;EW7@)HX+#3hwMjQ$Kd| zfX!`vA}%f2L~AlNk~+T<-~Jv(TL;PqJvCM0@Ia+?^C5K}(Vlg4-!Yf{dn!lb_s8|q z`&1AP{vsnLw-<005S7`oMIbEs-Z2@`xH+$qy>N~B3Jj7Y*eC%jYRF*ePwl72hUc53 zUA!vm`2E0=Cv)znxxlBk!e{O+%G{^wZQpa$QgE8IL2to-LA)3QHa7_@$|+y{cOiSL z@i(elef11KSHB)4EP6+p)UoFX<FNF&Fp-6(F~4?zs(M&<*?+3gI>dK^Hszm`>_!Wx zxbcKrj#Jv~>$#;;-TpwewC8mo|NBX+DRbYc*v991!!>{XyOjq7qRSw4X6E0N*eTj& ze(I&cwaQdmM;`H_acjLbEsAB6D&LL|lz#wU-S1A8UEJ1L%M+_kzNxlyxebQ<j%-i0 zPli9h`|jcT;rv4*f92=09>Mz2rd5i3O=Sk__MEDhD=62&nAyrISf7?b*SAdY6TdO_ zIU@6_%27eg^=|E4C1&2}pRBWycdixNbQ+QKPL*O6*3>tP-{yR^ZcALoVHtz(CFnso zJ~XFHA${Axp0oVm?d1@AeJ;>`C>s+bp(5P_$Jq3EL9o_|w*zdn0wx))(^{XRn@LVR z5BR!9F8SJD=@hQ2y6uvcxL8xc4}T*=a8Bg(A{?!@KIZPZw|kLRMnMQb_k>XK9Bfpm z^y6S}zYXT<X_M_az7LbaJ~gW@xT`A8;uB~pR9#;-v&MRsdGxp$mU{HCnGw<_T#p3; z_3Z*t!G4y0ud1M79{(S{Nka6E{VY)vFf{&iR}qgH3S&`4Y@c@hwmttGSYIzs4@OT6 zcSbH|k6N2e8hWHqsPpc2j;LRI1Dn%{+oC8OJzZo3^s~$v7_DvHk!$071N(vX?P;X+ zR00q;hDd2}^clRmEV0|cURA(V7s;C|<p#!QkVw_HW^TRjyuUvWt4#N@?$cB$U45Zf ze7CijwI-Te8rqxrhIL@x1J{bC`G<8PPW9gCejeRI+|#r17rkwiJ58$VfvEe9vgAM( z@7o69=C73>3TE#ow49a(9%MayjSmP`Bfn1t{>VkSip+*=CT6yIs2vB=E?bm529<16 zxfaYW`CuOXnwp;;Eh{ejp7aI<W84U$?yubl4!cbTxsK#n7IMU~F8S8H5VLP)MW<Yq z@IH$=cc&jW;nq≧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 delta 155567 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%0A*6QXJ^ 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 CK1Fu` diff --git a/examples_alone.txt b/examples_alone.txt index cf20849..625f35b 100644 --- a/examples_alone.txt +++ b/examples_alone.txt @@ -23,9 +23,8 @@ obs1 = list(1:5, LETTERS[1:2]) ; obs2 = list(a = 1:5, b = LETTERS[1:2]) ; fun_li obs1 = list(b = 1:5, c = LETTERS[1:2]) ; obs2 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) ; fun_list_comp(obs1, obs2) obs1 = list(b = 1:5, c = LETTERS[1:2]) ; obs2 = list(LETTERS[5:9], matrix(1:6), 1:5) ; fun_list_comp(obs1, obs2) -obs <- data.frame(a = 1:3, b = c("A", "B", "A")) ; fun_dataframe_flipping(obs) -obs <- data.frame(a = 1:3, b = c("A", "B", "A")) ; fun_dataframe_flipping(obs, quanti.col.name = "quanti", quali.col.name = "quali") -obs <- data.frame(a = 1:3, b = 4:6) ; fun_dataframe_flipping(obs) +obs <- data.frame(col1 = (1:4)*10, col2 = c("A", "B", "A", "A")) ; obs ; fun_dataframe_remodeling(obs) +obs <- data.frame(col1 = (1:4)*10, col2 = 5:8) ; obs ; fun_dataframe_remodeling(obs, quanti.col.name = "quanti", quali.col.name = "quali") obs <- data.frame(a = LETTERS[1:6], b = paste0(letters[1.6], c(1,1,2,2,3,3)), c = ordered(LETTERS[7:12]), d = 1:6, e = "A")[-c(1:2),] ; sapply(obs, levels) ; fun_refactorization(obs, FALSE) obs <- data.frame(a = LETTERS[1:6], b = paste0(letters[1.6], c(1,1,2,2,3,3)), c = ordered(LETTERS[7:12]), d = 1:6, e = "A")[-c(1:2),] ; sapply(obs, levels) ; fun_refactorization(obs, TRUE) @@ -33,8 +32,8 @@ obs <- factor(LETTERS[1:6])[-c(1:2)] ; obs ; fun_refactorization(obs, TRUE) obs <- ordered(LETTERS[1:6])[-c(1:2)] ; obs ; fun_refactorization(obs, TRUE) obs <- factor(LETTERS[1:6], levels = rev(LETTERS[1:6]))[-c(1:2)] ; obs ; fun_refactorization(obs, FALSE) -fun_rounding(data = c(10, 100.001, 333.0001254, 12312.1235), dec.nb = 2, after.lead.zero = FALSE) -fun_rounding(data = c("10", "100.001", "333.0001254", "12312.1235"), dec.nb = 2, after.lead.zero = FALSE) +cat(fun_rounding(data = c(10, 100.001, 333.0001254, 12312.1235), dec.nb = 2, after.lead.zero = FALSE)) +cat(fun_rounding(data = c("10", "100.001", "333.0001254", "12312.1235"), dec.nb = 2, after.lead.zero = FALSE)) obs <- matrix(1:10, ncol = 1) ; obs ; fun_90clock_matrix_rot(obs) obs <- matrix(LETTERS[1:10], ncol = 5) ; obs ; fun_90clock_matrix_rot(obs) -- GitLab