fImport/0000755000176200001440000000000014673240232011675 5ustar liggesusersfImport/MD50000644000176200001440000000441214673240232012206 0ustar liggesusersfcb25fbcbbfd5499a94ebe3f236bcf5f *ChangeLog b57fad418348e32aa833f0b515b0706b *DESCRIPTION 87159d76b94da27bb6572db5e252ab22 *NAMESPACE 0443cf5ed7021f98826b3c0af110dbe8 *NEWS.md 3d4e399e4839c80820502b1665443a56 *R/class-fWEBDATA.R 478f813ec3627b4b1db6551c5ec9473d *R/import-fred.R a21cdac9f417754f3b7e5275647c5b5d *R/methods-show.R ce96382e27aa2195df1c4d542ee83c60 *R/read-lines.R 38a9022acadd1f79da81e1048910e5b9 *R/read-links.R b0558f82b124f37fc535bf7dd5abc231 *R/read-lynx.R 1195cf1567cd1b15c2972925cd1cef8f *R/read-w3m.R 339e19e5795c8fcd95defe017a486773 *R/utils-download.R 41911843e69ca95e0df5d932c6f586f6 *R/utils-split.R 3f285adc43c177ff837f67cc67b37400 *R/zzz.R 00f7cb5bd035eee1f9e122019c2751c6 *data/amexListing.csv.gz 30cbdcd691504f14309a4f536ce07c96 *data/h15Listing.csv.gz 4a1c9396090cd3cfec68d3f7cf8a3fa1 *data/nasdaqListing.csv.gz a80bebcaa876e5bc3167bef5be4fbee0 *data/nyseListing.csv.gz ac49aaba0ae75c925f8616d7affdb2b1 *data/oandaListing.csv.gz 5b684d6ea5fc3cd61ee1af08c631dbac *data/stoxxListing.csv.gz 4206ea65858d926cf340c31955d54ed5 *data/swxListing.csv.gz c0cf877b6ef11a54b3ba691da216f68d *inst/_pkgdown.yml ed967b1e07f635b23aee8e7903238314 *inst/obsolete/class-fWEBDATA.R cc4f44d2123d36f17af64ae048582a41 *inst/obsolete/import-oanda-loop.R a43ee682faba5d0ad50f6240b473eb16 *inst/obsolete/import-oanda.R aeef81a916035a3ca1bc15971cba4b82 *inst/obsolete/import-oanda.Rd dfd9d1d17ca46ca47963fffd4e60ecd2 *inst/obsolete/import-yahoo.R 62ba802bf8cecee58c00354d9a594113 *inst/obsolete/import-yahoo.Rd bfed86b132c77f1f2cd7e3edee857795 *inst/obsolete/utils-yahoo.R 22aa80553ad0389d779d690853fb0544 *inst/obsolete/utils-yahooBriefing.Rd 91e4a7d24ee19419502ce73e1297253a *inst/obsolete/utils-yahooKeystats.Rd c39547abc445514b9cb6712648e20bf9 *man/00fImport-package.Rd 8a68aa36f73f95e86997ada2906780eb *man/class-fWEBDATA.Rd 76e141e3941ceed204680e09592c0035 *man/import-fred.Rd fe6a375d6c5413bc5469741f06452db6 *man/methods-show.Rd b235367d41af3f145f3cf34611056d68 *man/provider-listings.Rd 33106f53a3ff7d47d6ea2b175eed8fce *man/read-lines.Rd 18e78c733f68fe5f7c28e1f510f2be49 *man/read-links.Rd 2ed0e97aabdebcbe745d73d66f00e87f *man/read-lynx.Rd 577c0d31f423fac5da3b25aaf0eac7f4 *man/read-w3m.Rd 12c376d1524c1eeed8a625fc4de075ff *man/utils-download.Rd a131ed9459afc0a248fee7ef75ba0ff9 *man/utils-split.Rd fImport/R/0000755000176200001440000000000014673050776012112 5ustar liggesusersfImport/R/read-lines.R0000644000176200001440000000250214263246022014241 0ustar liggesusers # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received A copy of the GNU Library General # Public License along with this library; if not, write to the # Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA ################################################################################ # FUNCTION: DESCRIPTION: # read.lines A synonyme function call to readLines ################################################################################ # wrapper function of read.lines to have consistent function names as # described in ebook. read.lines <- function(con = stdin(), n = -1L, ok = TRUE, warn = FALSE, encoding = "unknown") { readLines(con = con, n = n, ok = ok, warn = warn, encoding = encoding) } ################################################################################ fImport/R/import-fred.R0000644000176200001440000001472514673050776014476 0ustar liggesusers # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU Library General # Public License along with this library; if not, write to the # Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA ################################################################################ # FUNCTION: DESCRIPTION: # fredImport Downloads market data from research.stlouisfed.org # fredSeries Easy to use download from research.stlouisfed.org ################################################################################ fredImport <- function(query, file = "tempfile", source = NULL, frequency = "daily", from = NULL, to = Sys.timeDate(), nDaysBack = NULL, save = FALSE, sep = ";", try = TRUE) { ## A function implemented by Diethelm Wuertz ## Modified by GNB to work with html (using html2 and rvest). # Description: # Downloads Monthly Market Data, Indices and Benchmarks from # St. Louis FED, "research.stlouisfed.org". # Value: # An One Column data frame with row names denoting the dates # given in the POSIX format "%Y%m%d". The column lists the # downloaded data records. # Examples: # fredImport("DPRIME") # Notes: # This function is written for one-column daily data sets. # Some example data sets include: # DEXUSEU U.S. / Euro Foreign Exchange Rate # DEXSZUS Switzerland / U.S. Foreign Exchange Rate # DGS1 1-Year Treasury Constant Maturity Rate # DPRIME Bank Prime Loan Rate # FUNCTION: # Settings: stopifnot(length(query) == 1) # Source" if (is.null(source)) ## 2024-09-19 was: source = "http://research.stlouisfed.org/fred2/series/" source <- "https://fred.stlouisfed.org" # Check: if (frequency != "daily") stop("Only daily data records are supported!") # Download: if (try) { ## Try for Internet Connection: z = try(fredImport(query, file, source, frequency, from, to, nDaysBack, save, sep, try = FALSE)) if (inherits(z, "try-error") || inherits(z, "Error")) { return("No Internet Access or another error") } else { return(z) } } else { ## Download File: ## was: ## queryFile = paste(query, "/downloaddata/", query, ".txt", sep = "") ## url = paste(source, queryFile, sep = "") queryFile <- paste0("/data/", query) url <- paste0(source, queryFile) tmp <- tempfile() download.file(url = url, destfile = tmp) ## # Scan the file: ## was: ## x1 = scan(tmp, what = "", sep = "\n") ## ## # Extract dates ^19XX and ^20XX: ## x2 = x1[regexpr(pattern="^[12][90]", x1, perl=TRUE) > 0] ## x1 = x2[regexpr(pattern=" .$", x2, perl=TRUE) < 0] ## ## # Compose Time Series: ## data <- matrix( ## as.numeric(substring(x1, 11, 999)), byrow = TRUE, ncol = 1) ## charvec <- substring(x1, 1, 10) if(!requireNamespace("xml2") || !requireNamespace("rvest")) stop("this function requires packages 'xml2' and 'rvest',please install them") xml2 <- xml2::read_html(tmp, encoding = "UTF-8") tbls <- rvest::html_table(xml2) datatbl <- tbls[[2]] ## VALUE is character since '.' stands for NA; ## TODO (GNB): ## maybe should be defensive here - what happens if there are no missing values? ## will VALUE be still character? datatbl$VALUE[datatbl$VALUE == "."] <- NA datatbl$VALUE <- as.numeric(datatbl$VALUE) data <- matrix(datatbl$VALUE, ncol = 1) charvec <- datatbl$DATE X <- timeSeries(data, charvec, units = query) # Time Window: if (is.null(to)) to <- Sys.timeDate() to <- trunc(as.timeDate(to),"days") if (is.null(from)) { if (is.null(nDaysBack)) { from <- start(X) } else { from <- to - nDaysBack*24*3600 } } from <- trunc(as.timeDate(from), "days") X <- window(X, from, to) } # Save to file: if (save) { write.table(as.data.frame(X), file = file, sep = sep) } else { unlink(file) } # Result: ## TODO (GNB): could do better - tbls[[1]] contains header information ans <- new("fWEBDATA", call = match.call(), param = c( "Instrument" = query, "Frequency " = frequency), data = X, title = "Data Import from research.stlouisfed.org", description = description() ) # Return Value: ans } # ------------------------------------------------------------------------------ fredSeries <- function(symbols, from = NULL, to = Sys.timeDate(), nDaysBack = 366, ...) { # A function implemented by Diethelm Wuertz # Description: # Downloads easily time series data from St. Louis FRED # Arguments: # symbols - a character vector of symbol names # from - from date # to - to date # nDaysBack - number of n-days back # ... - arguments passed to the *Import() # Examples: # fredSeries("DPRIME")[1:10, ] # FUNCTION: # Download: X <- fredImport(query = symbols[1], from = from, to = to, nDaysBack=nDaysBack, ...)@data N <- length(symbols) if (N > 1) { for (i in 2:N) { X <- merge(X, fredImport(query = symbols[i], from = from, to = to, nDaysBack=nDaysBack, ...)@data) } } # Return Value: X } ################################################################################ fImport/R/zzz.R0000644000176200001440000000356214263246022013062 0ustar liggesusers # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU Library General # Public License along with this library; if not, write to the # Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA ############################################################################### .onAttach <- function(libname, pkgname) { # do whatever needs to be done when the package is loaded # some people use it to bombard users with # messages using # packageStartupMessage( "\n" ) # packageStartupMessage( "Rmetrics Package fImport" ) # packageStartupMessage( "Importing Economic and Financial Market Data" ) # packageStartupMessage( "Copyright (C) 2005-2014 Rmetrics Association Zurich" ) # packageStartupMessage( "Educational Software for Financial Engineering and Computational Science" ) # packageStartupMessage( "Rmetrics is free software and comes with ABSOLUTELY NO WARRANTY." ) # packageStartupMessage( "https://www.rmetrics.org --- Mail to: info@rmetrics.org" ) # packageStartupMessage("Documentation: www.rmetrics.org/ebooks-portfolio" ) # packageStartupMessage("Rmetrics User/Developer Workshop and Summer School 2012\n" ) # packageStartupMessage(" June 24-28, 2012 - Meielisalp, Lake Thune, Switzerland\n\n" ) } ############################################################################### fImport/R/methods-show.R0000644000176200001440000000314014263246022014636 0ustar liggesusers # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU Library General # Public License along with this library; if not, write to the # Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA ################################################################################ # FUNCTION: DESCRIPTION: # show,fWEBDATA S4 Show Method for WEB downloaded data ################################################################################ setMethod("show", signature(object = "fWEBDATA"), definition = function(object) { # A function implemented by Diethelm Wuertz # FUNCTION: # Unlike print the argument for show is 'object'. x = object # Title: cat("\nTitle:\n ", object@title, "\n", sep = "") # Parameter: cat("\nParameter:\n ") param = cbind(object@param) colnames(param) = "Value:" print(param, quotes = FALSE) # Description: cat("\nDescription:\n ", object@description, sep = "") cat("\n\n") # Return Value: invisible() }) ################################################################################ fImport/R/read-links.R0000644000176200001440000000345014263246022014252 0ustar liggesusers # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received A copy of the GNU Library General # Public License along with this library; if not, write to the # Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA ############################################################################### # FUNCTION: DESCRIPTION: # read.links Uses the links browser to read from a web page ############################################################################### read.links <- function (url, intern = TRUE, bin = NULL, pipe = FALSE, ...) { # A function implemented by Diethelm Wuertz and Yohan Chalabi # Description: # Uses the links browser to read from a web page # Example: # read.lynx("www.rmetrics.org", bin = "C:/cygwin/bin/lynx.exe") # FUNCTION: # Paste Arguments: ldots <- list(...) args <- if (length(ldots)) paste(paste("-", names(ldots), "=", sep = ""), ldots, sep = "", collapse = " ") else "" cmd <- if (is.null(bin)) paste("links", args, "-dump", shQuote(url)) else paste(bin, args, "-dump", shQuote(url)) ans <- if (pipe) pipe(cmd) else system(cmd, intern = intern) ans } ################################################################################ fImport/R/class-fWEBDATA.R0000644000176200001440000000235614263246022014545 0ustar liggesusers # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU Library General # Public License along with this library; if not, write to the # Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA ################################################################################ # FUNCTION: DESCRIPTION: # fWEBDATA Class Representation for WEB download ################################################################################ setClass("fWEBDATA", representation( call = "call", data = "timeSeries", param = "character", title = "character", description = "character") ) ################################################################################ fImport/R/read-w3m.R0000644000176200001440000000365414263246022013646 0ustar liggesusers # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received A copy of the GNU Library General # Public License along with this library; if not, write to the # Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA ############################################################################### # FUNCTION: DESCRIPTION: # read.w3m Uses the w3m browser to read from a web page ############################################################################### read.w3m <- function(url, intern = TRUE, bin = NULL, pipe = FALSE, ...) { # A function implemented by Diethelm Wuertz and Yohan Chalabi # Description: # Uses the w3m browser to read from a web page # Example: # read.w3m("www.rmetrics.org", bin = "C:/cygwin/bin/w3m.exe") # FUNCTION: # Paste Arguments: ldots <- list(...) args <- if (length(ldots)) paste(paste("-", names(ldots) , "=", sep = ""), ldots, sep = "", collapse = " ") else "" # Compose Command: cmd <- if (is.null(bin)) paste("w3m", args, "-dump", shQuote(url)) else paste(bin, args, "-dump", shQuote(url)) # Download URL: ans <- if (pipe) pipe(cmd) else system(cmd, intern = intern) # Return Value: ans } ################################################################################ fImport/R/read-lynx.R0000644000176200001440000000372014263246022014124 0ustar liggesusers # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received A copy of the GNU Library General # Public License along with this library; if not, write to the # Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA ############################################################################### # FUNCTION: DESCRIPTION: # read.lynx Uses the lynx browser to read from a web page ############################################################################### read.lynx <- function(url, intern = TRUE, bin = NULL, pipe = FALSE, ...) { # A function implemented by Diethelm Wuertz and Yohan Chalabi # Description: # Uses the lynx browser to read from a web page # Example: # read.lynx("www.rmetrics.org", bin = "C:/cygwin/bin/lynx.exe") # FUNCTION: # Paste Arguments: ldots <- list(...) args <- if (length(ldots)) paste(paste("-", names(ldots) , "=", sep = ""), ldots, sep = "", collapse = " ") else "" # Compose Command: cmd <- if (is.null(bin)) paste("lynx", args, "-dump -dont_wrap_pre", shQuote(url)) else paste(bin, args, "-dump -dont_wrap_pre", shQuote(url)) # Download URL: ans <- if (pipe) pipe(cmd) else system(cmd, intern = intern) # Return Value: ans } ################################################################################ fImport/R/utils-split.R0000644000176200001440000000641514263246022014516 0ustar liggesusers # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received A copy of the GNU Library General # Public License along with this library; if not, write to the # Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA ############################################################################### # FUNCTION: DESCRIPTION: # dataSplit Splits a data matrix from a downloaded file # charvecSplit Splits a charvec vector from a downloaded file # stringSplit Splits a string vector from a downloaded file ############################################################################### dataSplit <- function (x, split=" ", col=-1) { # A function implemented by Diethelm Wuertz # Description: # Splits a data matrix from a downloaded file # Arguments: # x - a vector of data records to be splitted # split - splitting separator # col - columns to be extracted # FUNCTION # Split Function: FUN <- function(x, split, col) { unlist(strsplit(x, split))[col] } # Split Data Set: data <- unlist(lapply(x, FUN, split = split, col = col)) data <- gsub("NA", "NaN", data) data <- matrix(as.numeric(data), byrow = TRUE, nrow = length(x)) # Return Value: data } # ----------------------------------------------------------------------------- charvecSplit <- function (x, split=" ", col=1, format="%F") { # A function implemented by Diethelm Wuertz # Description: # Splits a charvec vector from a downloaded file # Arguments: # x - a vector of data records to be splitted # split - splitting separator # col - columns to be extracted # format - date format, by default "%F" # FUNCTION: # Split Function: FUN <- function(x, split, col) { unlist(strsplit(x, split))[col] } # Split Date Character Vector: charvec <- unlist(lapply(x, FUN, split = split, col = col)) charvec <- format(strptime(charvec, format = format)) # Return Value: charvec } # ----------------------------------------------------------------------------- stringSplit <- function (x, split = " ", col = NULL) { # A function implemented by Diethelm Wuertz # Description: # Splits a string vector from a downloaded file # Arguments: # x - a vector of data records to be splitted # split - splitting separator # col - columns to be extracted # format - date format, by default "%F" # FUNCTION: # Split Function: FUN <- function(x, split, col) { unlist(strsplit(x, split))[col] } # Split String Vector: data <- unlist(lapply(x, FUN, split = split, col = col)) data <- matrix(data, byrow = TRUE, nrow = length(x)) # eturn Value: data } ############################################################################### fImport/R/utils-download.R0000644000176200001440000000323214263246022015164 0ustar liggesusers # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received A copy of the GNU Library General # Public License along with this library; if not, write to the # Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA ################################################################################ # FUNCTION: DESCRIPTION: # composeURL Compose URL from partial strings # indexGrep Greps Lines given a pattern ################################################################################ composeURL <- function(..., prefix = "http://") { # A function implemented by Diethelm Wuertz # Description: # Compose URL from partial strings # FUNCTION: # Return Value: paste(prefix, ..., sep = "") } # ------------------------------------------------------------------------------ indexGrep <- function(pattern, x, ...) { # A function implemented by Diethelm Wuertz # Description: # Greps Lines given a pattern # FUNCTION: # Return Value: x[grep(pattern, x, ...)] } ################################################################################ fImport/data/0000755000176200001440000000000014673226105012611 5ustar liggesusersfImport/data/amexListing.csv.gz0000644000176200001440000004532614673226105016243 0ustar liggesusers}YsȲ 91/wQsDMz)X˜"tAROeևyQ7+ d|?߾/p\ ~.]yuv/۽6n7S6_ŏm!}m:w}د u'{s]EvnlW'~m*{SUzx7^FkM 8}tuoC #*P}^ͭ,vbgul:~wwcԕou9www+?W=uSWvT1x~uWen^w}tu\^gu?iT7I7NVƮ=V}g|m՜~]Kt>؏\g|ILݬÔ_ܽ 6bGW4q/WL`^ WZm8L22xWFhݵmGj[dMV1{?{;y?֯s7ъn oL?wWq}&FkAS:S秸ᄌ7Ǖ~o< n&6ȉbyX|YS>pܭW1w7OFrbӏA xʯN6B~oEuxq^Jwq۸bo3M-]zBx̺^l [n'ޠ15%ĝ~;; '9z{./_G ayy[]tarfiUD8yCSOK\QPϊܿcԫ44B,*w;3~xxP[l 2cybG<;'ćҬ4 1ܸǃXV! bϘ3]Oʜ0G,Woβ |qՁ2luLkJ}uhjf'VoČ@xxKr!2E[-Vup|dĺG.Cid1[Q 4JZHE_oЖ:% =A+;O1`Bxăz*T789Z7g Uy>k/t!U#{"1w/G2u!1w:ިLw`EG8Q!UlUf R<2pŏw$4$ {|Aeb?q ?${j/78zO&Y˧o⌉2DKS/T^!z}dz7̈́ob'ms`?g9[_&h$N_ћf=#UjW7Bju"Xsqs^Fؒn:ߥN,Rm~gw+"/.NOK0xrWΊѻ )7x'T8X=xX=!\&iܒCr֧DQkEAD)侺F?N/mJ|^ K'ʞ~'~Ow>}EoYaf +=WpP#l&+L}k  fTvly&=sB!OϴLwn/H}u_>bIzl˫LyeXw"Yl(<])H]oÑnoQ{z|}6JDZ>?ra$Nu]2`Yabjɫ%w3 mu:AIHC0D:V&HNEZU_}ʰTC@rf\,QD>޺"g<0orիr C78#K`nLJ_7@Kn]q"Aq2ы1{JXak=zZǷa͊(Ҽ:^@j6C:8oG)a[ fzdn@ΠG?L3 e{mveqLSV AW~z'(ysb\WP=JI)fؐ^Uؿ1ezQZm>ɭM q6oZx'l(bKljb}OÄP' Tv8pZm}ljѧ/& d@ OfgLqZZ+ zj3 =Y N~ ,힇`Ir-,FYt @.# ~]tYgxHs 9n@<APq<$`DgNH5M份"⵷0B<^^+ }L1  ]όA"ƾ&ʍI; sz<*}d5ALX3C"J3^2;{&r VDAŊ〓6.(`O,e=FZnn{K&G;7 tA"/E jjB|`\Xn3^lW(k2B.^.8sx/}HUwJꥸK eUg_\ñ:9p0p#tK%6D>@lL7kb9G;<&-NG m-}`s{ 먶&K`XIe3)<x84i?rᴑ*{9e"6Thm^pko`M姞aJZ5־;E_?PjWvVu9p= Q?U #Zb#8V=vҪne*jj٤[}6X@~UOn?v-#$doAM]nB58S(tћ00vV~}Ό4>bm MgQ\5c#݇;A)\3-+êiv%Bc?\Irplɬ 1yQ{*OEF$ٗIxQ$Aŧ[fB4}@|ʛ3Cu )įLLQ8!eNjBI2ϬRZE4*M8lyRm@Tfdn[puw$48zBb2 :%\RvBgDl +Es=p3S`Ii2ϝYGuA#Bye lGt;*A1E8x[َd$MLPBW{{:N4{bޱk53 [F&>CH>TR|t c,X] CIc'+R]@?E`fG(-5Px^GgUS0zDqFwu`x:9U2K \ E(c(װ 5$ CyBn}]V ɛ\b8(rޡG.k7(:Q=rYYuy(jM@ J{}<ȝ+N~8 v:e:1'{ oof8÷Fdg5ؓPT1߶fOA*RHfc olIC?8W`  ~dY|kC8r8*3d#}sq̔*nuS~G!1^AM#2mpl#YNC$!S)yW C&@Ք<49RgwPz~ǿr5ϟ,m!?UI&Io~fsRr{.>'/J9`Ha1gk_ڍK*!*7 =LbRdFY<~:d5 B6 ܎u{VD)ǞJ0&bXny=8BݩVCD@;$OGfFqd_ H#|eI(AVa޶ ňzA|{6T9w޷.q< $"]p?@Lwt~E2Y⾆K|!D5!BQ HfLbw7ѹK^3\&E*u~:I$+ 6euZ.*~C!+Jp=.ti<`I0 BY#Qٚc/huF;\Ӣyl{BxrpOOV#Gd,QK}dY *S\JUQ{bh{6]P9&ُݹ9_jW\MŃQ?N ?S"0RS(2np{Goi%_Iҁ*` 9z^0" iPkDBj+3F=bl*e8~?ܬfcltUaw4d],H#>ls&t Zu4D75jʰ.k p0>vaDYh}3 ^шNpd&-˕C$UNKhnCcRu+bFYH&RMuRO':Bxp*XYgl2Ӿ۸qH &^UyHꤴf.8N UM_[J.Ϝh"CҮ=;G 3$cPVvdqd9GWH3~CWltKOI:j?~ jhdQl%[TĕhNX FP$]j3S[ٳ ;aĝzWd P `8fo:gظ(Y2e{*U+k#Q˖ؒ؝6 ApQ{W:?2ijW[J8w,PYO!Ti݋wMM f'de25y9Sry(٤wBhf]5g0e|g{^#I*'Ȏܱ50afAȮQO 1"Sa4>mc6i1snrJ E\TZf(YYcT]G:l0#at)XF܂$>O0j!ӥk$%nB79Gcw|R(3ٙ>vv>p(UR\񀞥'JoHBJ†!Zs$inϝ?4$_kmsҍ,w-"wg8>ܘUnԻ$2kBu1@8mBF˄ c](sVk-p  @~_y(<7o'**K3?=ނqG@Ksmax\߅91{Oy@A WFQ]Q 5V4MrB60Rb9b)P ⽂ wy˰@c rq`(8aXyf4cN:C 'I?N7vJJn9s=v3R^= 4z6LMQg_ ltwC !di?_5:`,O֓7ؚ8\/w.rEU M:UhQW/ykA{㹻5hY4Fq8O-sIb}"U/\+Mͪ6U6:0Mf򑲠r|mʟ~̋xS]6X+'٣Z0c:ȼ8B%gsb5Οi2aw-G;=.4ٔcnx2?DpMф)*'s:ƓIc$`2<]ovbZh#)W^^~ONBHw?d#Pf^? gZtN0 GyI~DQbNsw;;;GP@!bV0-(|zvpw^HU |dߒ;C;#nBx@5AOd f;3w_݀t;>pDS+P=ت;[1:@;l;§J^⎟luRT_Շ{奻7hi6ɭ 'Us|qm.Bbthǭ DOSeԝ +{^QK{oqQLb{ w]zyIs?鹆+_+M xfUz{m(I{8}?j댨)KPJ [ը=ͯX^6m^1#фbp|gز nn,lڥ)%uʔ؁BQkrة IA9'ϔ\1Rt٧b)WKHfk{Ss@`'H"J֪~Bx7@C/!ݧnf©1j Sޱ)p?}knn!j)S_iNl5eHєeҧs};/b9v'ږ"4krMA1dd5nuΌ,;(a[ޕ Fȸ޽PUg2#v971_YjBȮ՝gF R\FIo^ўa_ `^uS]v,;pИNMMl$ B H&u\E*|7(uO֋b֫rl] ,'3 iPs뉬0T~ Cf[Y2r vjTȼtCueH2l+QDkecYJG=V6~Ct yH Tꃕd NsCMpJ\uZ ktx[hҹ1MB%K.5 {C 0 >(t]ak܅#N *\Q|}4oh⑍3յ6>+**nrRE.3Fk* x~oӘdQ1M$??k>.4ZgHU0^r!IvCbR}X_|5e JS\3;3 CHzFeP+Wz ]Os$X!ERF}ZNҧYzOqӋ/r#uLl?Y0jGs&Xu=Y&O\N@aQ]fۡ鑺Dk\ރ}u\Sx.!du@Ef%tnWU6;zt.J*Yq&AhM~* o5 i.l+J'}q_iN]XDffRˇT5%`h:bEe 'gKbQW_ NdD﯁1+w Fw<\~C4?y&jpc DCA5Dl0]A/aK`R_6蝾+&W4Ue$n2[Ņ 2 [5.wp6&Za)2*CݏBFe[[~]J|뀰%dYWH.lY#A㾜ĸ0r*R%jaG]~߅L^}+X$9MߞB >Cm1?-4c qoMOjܗ53^rW3<y{6Sf s;@8@?3=YSV_684|F{Y o@ ,&A mGzT a@Wxir5Q v`:O;`5J Cyĥ쑈rLP#%wTK3U8н"'ڻ`E.:gӪJ)1'T?0sʸSWIH+)2^5o7[Ðtg6g!ݘ3(R6ԅrWcn% OuPg54p 1! EUz|y ќcI0~vGCCJVⲼnTQi$rnk40VRYB吭:Ro4Y󍊦}Q0"Q'elYDŽ.y4m%3֓(E|708=NULz y/kw7.E( P6 Tzp%{E-+P{,)D? lQ^[bgkT!jxR,RwRe0D"ՓB k<TdqÀjϸ1 tCoT{,1 -`뒊:,ZZYF>@t,#6XH JCĆWm'6=00\g^a{ϵxo6* \ HgNl $_Be5Baf?(+6Ğ43Y?+kwK)VA%,I/.h8[!FK*"&lVzlrff:F^6F ׫84b'lγAr &2YJrۚÜ?z&׽0N5GS^M,7- Jm-'>@3U--pүf{ͪCӸ7@;A#K ɾgrЫR-L}3rm.o}eqj 9&ER]HItϏQXo4!rzP:`EJ .`.]>h|(!&nr:#?tlOcvg$ȘA{[ǝ4,8bAv zb$*<.϶TŨ&49C_gy,u< dt즢*^c`1ٹ\|% .Iӑk%evyHBQ1 Ӛؚ"y31?i ;=8"\Sh*8[kOp8R<(3n-`$`o ]OP ]xpd$LS{**D4̴!:8hRa}z9h|C٠4&.\ KHH,͔8hXn`"#ǂ8 ޲ 4#%ר&B6ɡG)|ΙcRbx w_sG{\No]U(I5/brH WϐY *DƤvQSԞڈprՀү愉BWwwWP9fRNdY0ncޕ{@Dd=̻Q9h˘wܼRyW`}y+h#ܗ;:}h[ظy_RҒWrSÝm-q>6:20IY[~Q(+*4&zY|T=ijB9 KTaLWK|Y1uV-MĹQ:!wDdP` G^_|9^DD.uUMhzb;Hί}YߦYNFM\v$nUΆ14 e[niU6$j(QM0a(fZR=bYGɔCGL.SyUJhe䳾>U5]WB t 5drNK/ALC4Jy6rag?4rd`͛h2R9 ×̜&&ߙ ?I2u9:{Tz]i7 .ɖo|.'6 ]m>;&ǒStk>cS9Ҁ@j)oTKqRDgS9D%O8QѓZxc il1TadPgw1z5{DF%j#WFZh3*\oA.yX"HB9: zz3U˘ rc:X]:Qɰ2 9EPRp U$-79 ,nd Ϫ2cq)9~϶̾{uK`plҌĶF_\Ғ8S0csT53!S`i8;^{b z}Cj0rYeoO3 3mqW W9\HS!q)s"zERq=Pp4Dw6%dI8nVO lXi\^M"}JֳCi\&253G}|d̏{ΆGjf{XFM}Dخ0q8xmncSv֥liWE__/J# `j~zUDtǓ 3Am3@00cqMZ^xUM4vQoӅwPFs+.:溗LɤiÔ?~4nzk[1wI_+O*OuHT䡩 !ĶG9=]Iͽl4SgMEhfmplqꑏLJeIaaw{^&,xAྐྵ&ςu ^dGᢗ]vgCpi;%L3n\]Wce/A$5>Cc>U?r ^L#_Ot/)1[,A\e3FQ>'mt4^p9swK[{~ʹaa970wܪ :nǝ3\&$ypf]YE:VnޛgzLIsOY^(Bؼ=x[w?ӝk#T p %7_`Vq&(s6!ͅJ4ff^iцb!pR5wi*=M/mΆ0O54#sk![GrͻgZk>#_\>!% !qCL1[!Nt9Pul9'>/+cb|r/zQҌhTFRs*xF]cL`YmShϔ)FjM-o&zlg"pq?ĻUʧ6 d~/B8?[u NV YM|/QpAПOjF2peAS4OSN:EG bΕ77~imlX2=JԂDRc[PD7$DHVuB@nχ:1R CU/eLD~yd6-wS0|oӣ,![ Ǘ PMYn^kN >6(;ߏw*bHJ{G"T5Y @yŀ,; @@\6(W8=n8wyE8׸KD*49)en"M /Y݂-MtBrN'0[`gMF*7A+fz03>tVT#݈K3HrovkHυw&YMWUYR< ^<,$'P_$Ԯ-Ȫ0J(Yʛ!!Oj `y vpnY#ړne>ѵ8=EcXpap},bJ]%Yg+Ͳ]K+^e!ΦӮ%TW VC^:qIλuT~`j!u;RTH4hc⻆Y4;RGG' ֫TLx0Oj9r> Jq2T[C.Uxa{"*E ĒEL\gv忓M}X@s *o \qϬupۆ4 [7Z qns^BlPV ZE*#zA T#?|Nv$ dosjc'+фc\z%D3!nywe*9TpMd,SY<7B~LL8CڶH8wWʚA UV'W}9+{ƥV!v|΋ y@p9ej[VM^#5}owHn qk *l8_ h4-7F"8{OO9 ?]sAL \tћUamU᳖Y#AYl @)T'{9?C^R!`o4U⺶ RDAܓfҐ2$D y bqOaBpqi=zQ.6u 7KJ̇zT/>(-ҿs>q7'ven D1³ɔ `z1O↼,Ӛ$>[2ўp9m#hŠkΏ%~Q7fImport/data/nasdaqListing.csv.gz0000644000176200001440000013633214673226105016556 0ustar liggesusersYsض6 SqZ'ܦ1\hH(%켓l5 /t3 L\#JZHh?c}f77޾%{'~%G8_]u}oInLdtݺh|m\OedcWcktdtiKz]x~o]'to6_nuv#|L_tU>]͓=z}ӓ73.Zv>}U2OZ%{&h|-ef}o.>tp_[dӯ)SyKxXۋdqm ^.tg򨞣˵yg5/^U8< b[%;OIw}B/O5l6#ӷYf[~ o"-.ݜ}C!ݾśM~/;['qK2M'~yqU:tq57yOayG/K4q/poײ皗}Kؽ02_$_5ޮerD I;Ǐ}:zyr7Y"UvdW5u2#ttk~N_As9?.] Ai|]ϩ 1;-GvщG!kVuKO&RC8|VSD5ܻzi[޼ >\>tLd1alcxUd3N[wSl틱g//FSףmû,A~~_^5P8c}הkn9C4&"I_sc餺-mUmnQ4ULeU%dWm ءR츥;.E݀G}u,&vYsz0w {8 _⧸F}lWW8З餳3ٯdk&Z'N8ʧI6[75F4G4 %lʶop6ybI: % v)@0Y=)?'zFkTNt>Ob^N갍?ց;-obZ!x'. U!ol&kI&WwqoG\{WwSqM*5]kdodU xsCPװ8ç1}ӞY"Ѥcw}N*Y9čz?D>If" ?w 5'([={d+fV_]aNg75vGx"ھ_}Z.~ݓ1'nW;~'K*#X uw$Uh?Vvh\3O~&읾T]qaZX`p} gosBܝ~尥w9 -t᭞)ٽ~yiH4n? ^i6=1uO'rsVom\Y~6])jabfc!pPjG1:4YwNҡCysJzY,fG* M1/|ƞl+czÙ(½ɶ6{gwfl'z8w=d3] @)ߗ``THK ]~ȣ]Eh4$OgEj`G^)P8.]zI05ɇ}Bigzz6ڲcg/q'eFuK$eI'j'"9Jlr/Z%MNզ}ۓB>j[׭ ǷxgvYoYƷ$!9fp-r.߲4>10z8fV2|T+Ly؂ט5%!_x~Okk*yz99tv+wLٖ^QiE]_\Y (3x a'V2e"[Y[]fϘLT ;s`O6NJzˮA]4It[EsR~R{ނ8Fhc;ۍ:[frtE՝HL>,싛< =! 3|LV)P.a7\}6U`{b]6љFMwgJ7(1j]1 W/d{ot@M@Gң~Y`e!d(DS vK3~wkwgL8-Kiz%_8#|AfnzZ;N/>[24+C*O$Z+._s!sInWחp5[K۬!òq ^\)xuqf[,<=Xf[C ƈw'N+q>cxJ>za:taV-[gǒG~zkẪ=dz󪍿>)m5'Iw]x5$;,[f@[9k-.s?$|\l}ۑ,tſ% t3 GSY>ar4p:F1槇)z_kO_-y_on$+s'mL} lmɆf[7(^LgN9ufdy ;K1Ek,%I͟:tr3)RqZpB"EnuCakD.J ]#S=Fғ^6/No7h݆PMxn2㥮ژp 6^ &LxL7PPA6o41*p=#C6A)eF`#CEi! 7-Nn8M{ 7C2WEey,«CW.t+Nwy]ZН1P ߴ,ɗ<2}5Fh7( 93j4p҂7R Jﴴ&JP3R8|vcYh㟍nc:dFcN ږrSpL!(HAXkC+ֳX"*#FUBx57VOgonߵdq$i2]#0ꕪ%X,z v,1hwc|b)hb5ml[(SΖ}]=Ց\Č_%ao/1)RW3(US)5,HqZW}εTz8ڊT\o۴"UQys1XK~XM|.ktU6T7;hFmJqK˶ּ]fYNxX׌!H,X5С44+cT"ќh97Zcӟj^ԯ-%w=9avųRkc<4s}B9^bN*W]dG!lNW@`8[sp16a &lۼ+yS6b⧹ڤO?33fD5 ъ'haor'W +/?ӧ3xfNONApM枈VI`Y^s>_7zσէ0,^~e7{*vg̣Z9A<`.^pY@xQ 薓8ѽ\@Xֽ[+a:u{ r8z d// JA ݐXW#Yk. ^tZvi(!u=̪VMa?ӄP4 t&2ZvÑ㇪O&kq**x%\H>x(:1vO }yVo7~j>ǯۣ>+̫kۓ]SW&4JaIZoXlI,F27I[%6\\-cIV`1)wIכXe 7׸zvIv\$AU]}y) s xH>)Xm"7%.X='*8{dw]sVnAr,ՃX=w5W;W { :<ΖzN(.)a :p2ޛ*R)%?䐹Ȣ- Sj^_DyL?#-=33 ND^ e,"JK"lܐ-H'+F}J9pڠIg&H;( jliMLi^{)}LEѴhQo[7Ȳgga2pӡW7K|Lc9V0.@f>r(р"Lk0fm%kT5/Lm\Lǣ ,nؑE|hC15imZΘ?ѩm"1OVP\_\lͮ Ȩ7wf^/ /SȰ߳TYr6%d.z%]`mW [rU<ڰ1fc+/Ѭ} &jxȪڼK4GW0׬su^% ՘\j]Iy^6o,_Q4]9 l? iޠ <5 2C,(fpؗ GW]p]f׆-ٳa~)*e4C7wCCc  0M= G*;Ujki7oNqDwYIJ7$EXSyH9$材-hx54mNW؁Wv2EeBBJ͉\pZD)ZQxgK'L_hHб%'."ߍ5>y;1tΉ߅_/`ҭz%ڧA.SMFBp  TX=xYM\:dG8§ (SO.bИ<ayy 6t{/Hk]dQ!)KS<P<]@Dc{ UW9f ;H)SitjR]&.Y(H>IeAJ'_8ݹ~O4"~A׽=*%haA;*|XpW8LG֏$ܺUQ:f2Nob4/x,3 i ӻN*!CsV\= [? {}ԍnv͆Ŗ"?x Zehrf0ڴڦف>9IзlI/vt׽_/c{4טr\駘"ƜTC/MU˗N-`Q726s2 rOps8֣rDU8|ݒP>^-r1۫EQtx2^3Ἆ3㛽ef/,2[3i1V65 wLA#cP1r,P+/t6ʇf ʿr 'u@wfyw̋{]ԟ8)q NSW?JE ִ~ق?ytKt r\sYt̲g Xkee $oѣˬBm~ u&8k[7!rRQˌp,`VlCG^*@7 bT#3~:Hըw.Q` - v *:{ b2Fp=YruC3T5.)tsXWh,V@hܜ̘ : %ւ0o/PhK#BiVhnHJhĜ8=E_݀5{/ 0Q.g1eW ZԶy Ji:Z t6F}76:Pt=hp|/v PU%M>l{hd>Y$Lg_ ٿDdH $ LTХf fzudMɉ9) yת__a`yJK$0.-}4sZ'ڤ-q J,%lvVùJpϹ.:(Iu\ˁuڽVP Y˷υX;"o W촧< (m`\x7xSdmhgfPho(~7!Mhrq H- 'gtӡdri2K@QOǽ? _yowɯuiS;B1trhTGuL.zhu^mIeCSrmu|mtݧ;V1)n[:zgѓDdGjL5bYnSOZa6 ,0KBPL3i Y`tuN._ޒd,Aב|Vg~st{~PS~v PSVb#;pQKsd jjWjyýlTN?Ї+|2a}Xvq>Ë+<+Cr fRѹb6}" IiL'83wj&׵iQ:F(lwj8b:^w1R讟mu!񵑪F' }->S{V4<oU[;Q;RjqzQktz"-7E5kO@VCDx|Z !Gy-!cgb|}j]y13S3NmT賞~#}|2ҿl|7dk/r &fxİ䬟G2}CqH\ 4ҍR2Qo0;18׼ {ѽwz0,rgyYm_RM,|1R1?>e|lϡ_klB3KhS85'5fڡD86;-jᙹsf?K錠7 40m8nw7?ni2l3)p2DX+C"njm/lT]^vx3i-.8,ϧnμG׽A{gޥF,W#=5#-#p~uMBی7WN>U ֗#~LQ0XE3Bxi3*g}&ȎXy^5!oef|0'|y[fご$w9~h#f QXr67Ѵ,ݭˏ,?미v&]+V e3}mayOa*T,pa)xx/17K~WS2cQ?,glcrl1%wM Y IbXROIO4cf#A.~W #Pm1?ʟ`JKpњ*݌FِUh6L^q,%!KgN޶C7P)^D~]{XXд GN9H Ln㧏MR{+6y%5vbJ+ t1?V ݮe'||~ZXsuE#~30@B%)\5( Fɧb8wPl]T ~ aL)8Q \ڿ̖mAM lcnr?VN`c'=g;B-mWF1 R4XWK^fhXap-Cyٴ15O XL.@m-5^Vuld6u%'1?do]4 \~3RK#mӿuuInaոv5y@e)yPD".6;_)yXAcI_2i1`v9 #=EnLGNQ!HAu ]TL IS[>4u9tEjyy\lOɪ݄HMA%gSDx۲\UŻ7#:x$3Yv${?Z#գ!A?i]_ei<;VS@a59Y1mv5DxyԬ_a 'w^6_wp,fyӉa8J"^OTiƺ7ë!79YBZN+_&U4evO);sMĈ'9'53W %tPA%d ZyEOpӴ@J΃x KvpBy.Wʼ@Q:Oɡ*ó,tZ hP^\# cp =els#i#q-d#1jTg٘h#,UAYj{P>U6B}+Fْ^L5ki@"$i8`Y_a$)׻E&k.] 7:|΃kA%B|<&ޒI4,$ނ$zMORK;]4~2R0޹Š>XhVرh,bϳ٤'V3-J:yrMQgwb@ MTWetkKI4ϚǝcQ$՝c11G,* ;w'Rߏ%F yܹ֙kaIu]<ޏ߀V+QwػAa/:mM R_Bߝ sVH[ɿ썩/A{Sd = D1dEeߑə:gӪ` x>idn[CAg$M !ۏW>[c=T+kܟ0Mv='h%yPA o!"R| , @FIQ+]}ԾSG :_Ew|?O?,T تO#cLTSsoYxD < cl${\k.QFF?=8ռkbb -h? N4ǖuVݩcpXW/*TmXځ/pmwE.+Wfy!~{,-/_+_H㩜kcX2҅_w0J$O_OoG݋'R4/t1̈́̿{i_O,ֵC߆k?oRݠ s|uȠ'Ҥ\ /nKb Rg- zL߅DAO 1iuSLJXmM=1O gv! 켐}THnbp"[<bHqj Lrr,W?pgRW!xZ-xmviȩ >I*IfhgOn1/DxDO#eRƒ3)ɱcW%.\Ӡ/#|10}8lȰQ7țKyhV;ŀ ˋ S@T ZWA'? M\7pņ"RgffX#o2t-{0(]ub3]z%yȖ&aX(?xh $Nex;  z$^(GGc~`oI!Êw9jCѸj/+HwGǧDǪ6ь7q`,DբqXo 81ʎݗֆH5TI<];?!>"ImV H3]ym(&xQ2t1 ~l8O}d(Dp %!46()E`16$h|Ɋ_$ 'j03/aBbƁ$`*ɨlrNҎrU W~BS[#VFh? Ȗ+uuFLgXp }` ~vi mhjgؽe9toN+\]Ap$5bdprYR6-f'\V@U~s *w ԖomLzAxSBɮl BL+փ6)eh y3'B8yux1ۿ x!F\ ܂?9073Ax(74^JeSW݋<\wFV 䓚˳I :I$ˡ: OX }jU$3$ߜYrew`'&i'T 钖ZE ÌU1 =Z6gUCqJAΙ$:kaVr޳"':,%yii ׷ł@"xRy:&5%f X$ǸŢ 99;aV{?x/ 9CfLZ9L*fm`b?Axc ; *`ŀhֻnb# grv1A(Ht|T%^66Ƞo(y*vF{ tmP(Zx` |9 ӫn36vB/g6jMF&rSf0I.{ 7Lj; ر[i0a{R#hi4"<=U"/r1쉧_*UN>HTw= w).K(&jAO,!׷U6;tsJm~Wz'dǔvpi9.;L0hW2t"oTvtDA2aԾW -:':۩NS:2lQJ˲{A3t$]MQ8)O¿ǷHnJ&o#f ;MxBƧQy經9}#{'Pp-kWحa_v۰YTPÁjkEDĶ 6JS)_5ۢFl8Vq+n<]>KPx'{[=:KCz]?:4ZK˙l;X 8ު5vY2&rdptĖ?ҏ-,/# hbDw8TQ_=HBt$]j)>&d(dX'mzqdk8f}~l9~ǣ8pxyO MJFp;9X?M/%8!& 7"̸ұ5T*]*$I,f0婒| ѰNb]b8USh+OdS=\e>O0w,fƗkA~uf)‭x8F)S*['2C] `꜒em;ynЕ,#L9șQht5tǷdH7& ݓsVskֆhЍr[~TG{ xħ 7hM9Eq,U'2Ζ',:(䞆艼ao[ }o yb ?JMӠR`񡣒4<(%z͇8 7$y9&Cz;L5y|x!OZ;|v?|1mC-݇Z}aastNv5QCy7n/sj0LnB.i諰{V;}9l0RǨ;P> )3/GFFbO n B?8!1 $X~$\?Cx a`Ҏml칎*:O* :Tfu3 pcn]v'j0_Vwj,⹺Hpa!& ?մݦW.̵S2(0H#Y3zasvƠ G'5{ R;G'!P=[vߓRKKC lP feK`ExEgWGꔸx4.|amJ5h#fC2g]mdxjTNߠ6E?2VEP lhBvP~kGr9{N2L`v.fT ;ryu;#+eؐ%;ȝpK+,#£G;\n_"@v+el'ܹi-xM]!G6dq~LE"ꦰn-hx/d-wywȇ2¼=d a֚kZ<$dԕ(Όc9%)QuZe|KXJ?i7X FNKbCBiԕLhrR&Rz蝖52TzR4:)Z֏zтpbishCP#GD49?kmKX+ D)F<k62CY๎%c4tG.IC8KDn4pl:Mam*}99zXl9iځt&|&Ccݓ.M|kyy&z&vGH_dkFCSB{/4N8(@Jউz8սő⿅s9NϪᵘ0޳b,M^ms/!1u590rK$6I\=aM`Ҝҗ)ZYAsÞ)`Dֺ1w-":W5p4P(:" mu'i-sHZhDe.ɥZwƼV;?o-N p`P+m 輲la(-z1=0C*ǨE> )ST:N1v0viPx'g%! p=Mn$[2L(FFqS b<W $̋oy gI(lww2PsGFhc2Q)=Y`%v(:Hk`[r-@g.1r5I[C)|Ev/z2PU?}8LEcbuGzZgZgL #_K&FVK7z,!D F, nq.́@N\#!xtC䟀M$h tɞkG (~ݦt77By.A0uKcdCA]7/U wl5bJ_h7P^8VWx&} ֎f ;e ,4'=rSQ2. < :#?|kI(qSTrXxqNl 6rDd?@.nC}6P|dF4pfa! pTX:CpEU&t>$yp#Gg{X;P)d{{޲ȱh}AYHRW~tEחWlt7Q<^Y*:. ';5!gba U]Vicу+ ~Hv?9^>C0R3&F<~m LJ@.flVw_%0? qW@J*US3۬kOHX&:7ن'vʘ\ hX:7h!rOE]#7EߦRiWA&R<ؑĄu/I;N(~$JbBέ% 'D:91*F}s~l]v4/1-޼ˋ(q?Nxs,}k8h}&%X1v%,Z/ކ !2-Guw/. 0֚q>Lhw U mV!T(G6*1GF <2Jq^g'%X"WGiӗW W-K'=6ܬc~nŽ4vMysbGd('[/[xCs+c! .&M!Ӊ:,0Ơmq84 YcWꝮ|>'gd3)* ٱuIx'Wkr0ܪ8@[AcgojuhՂYȆ (R_n O h9]{]'4 f~X=z Y3!%**Oz93ݎg~<β7bqIx~-Wxx6/niq3fw򐷃Adx3uH~␂6O76,߾_-/$~lY[ݮ !fb:B-6I/mρ;n%űc<-^$3uO:UٿM}mjx,>UѪ:_ȡKg˹Ms7+^2 *ahӚpuiFFwp86[v8P=!Aq!._]aiqr7{o//Nn!Ve p5\{|u =>Vΰ|K1,UR$ގsOi9[Lw~JYwЧRDђ.BGmDR4=>엯i~pC(\$$AW$]+mk4{9yiݴ۸V$ON;.r7ȓnZH@T'.uQdw#]syc y8eK*/9(xK (O-kqv, iO5;Y/T#a#=Ӧ(B7/ w;H? HV7!=^ܪJi/uЗ}m~L+K6 ?YH![ULMVM&f>ITp&_ \d]UGkceuÓʽ2v&W SvMHeDs:>jŹB_#} ,_c?AđN<|S vyFƻ1mɜEUO,b6{ɐD!o,-iҟY d^|qJ>6H{%K8a"Q];ߕ$<ٮ K}xNvV+6,8d! Vuk1F m+E)mꬻVfGcq5J|L'dJn#X;ћk~ /-ٰ6 p?xH!U[Nj|`].ǫ2׷I2&!z?v &',-JxŨ5[1U};8,>j>,Mn}J*-4o'}y~UJa N[ٻ7Ɩ\-NN˗H9I%Bn큜7e%E3ľu!.55YW^??OG]MS84hJgH{tIYmщfޚϧua9-*z]Q[dIސmV1>DCŷd-:rvE@La v&;cNp̗[z]Av&mÜn}_a ])Q_Y/oO7n cQķ&)xsxr-hf%_(nR#JߺAA2$+!68 o# ]~Gӧ-FPeߎ;ia`m Dv.mVbQᩈLC:4WB/M H&j@Fpuu &DʗiW'S܀*ViW6ڔ&!{" buqBTRN5/똖Cӵa+MTӮik'aY&۴|X؛^rWjMjOl6u'c )M{B0n :axxE_@.ZqbiU4QGZ Sڋl,N Y}2!;0_<bagB1>I'ygC?sS1.Kѯ`:)wu}MTpGґ+4ؙϜo]!+4l찉Je/4}M}.e;6N9ݶj_4yZg%z=XJhaƦ{ G ,^ByTF'u랁Gy+c:eHRBHG+fzߊ5[p)HC!!C#E ۔Ϥr?N|鉸676N:?~R~L}VjNɤXvyF4eVn9JSf[t囓O4;kN]᧝&nImR0q5uW:yV ۍy'Z7f2vEW+B.-~([[5ʄ`D2+L L]/4m,p*.:F ^;JT?caI[8^?w3CNv*bz`ㄩ[G)w0ۖX : vst Ǽhnܙ Q{hlpR=_7UȒC _%n!3Ͳ\}$3k{Kwn4Lp"čD$~77kv¶NzD,:~[-;_pds|I!6T0MY17-Dh0!}=7_GW>]]oZ\If6tb-dHK/a>HU-`:*m{162 | S$;X{҈*MWѶΦ~(<`E3 7O{){pAHv#f>h]A>nbքx:.p%7G7Rhz' Ձ?Y3iJ\%=7Uz穲pFBqo9$D/SOJj2]bʰtVw7]`ҟ3FoߝGbuAzM=,4擕v|oӟ eRڽ9t;oB7#imBenWfE|"ʛW[ a-zdd>*Le0XJ]]xM#4GW}ƫRx\|6$qy 08jdI#|ɖB-\[FIqٺ]Qt -:ȅD7Mw:C |_r3tnt/`ҭͤ6^s7=d2y ?J\(\Ҩ*o_kLƪ'ezf&@ԲkM~AZx<]J7Ǐ3MʣzBV i<=I#d?7cv&,;'ZUV^nOS$lC\űϺ f!Dv{ 7GRǀk]J!ǿΐ&5FɬЁR|H7y(?q=Iꭕթm:lEd=s6[1 ^5QHDF'W!.-hf62 !7fz:1ܬ| 4,# g5YK[Eß L. A|֨ĬaKVqY  ϫ(j XcE=Vz\~;TuMRXC2pC!' ;U &^6F?1?|p ɹty*0ۏq/=⎦Ͽ$7R;:%?ݑ/6⊶8/=CJ V\? dMm6`уز.Xm_b ~X8eEfZgr,$nV~D`?<پ;wL bwH%YS(e%܉t1 X[܆mTb6j(䍬^Cׯ/J7[f,ꝝ^7> UN%;*S-Lqַ%YݩXVJ=J&\z8}9,ΊZׁ Mws,OzIOG5 KMCjnt]T8Υ}7kJ/ѩr4BYںI{l5kuTHZ7DXz*d7cXMy[?l7zRGf154֕'#bhLoi) cmiM递 jD֌)whվ͵itRO'=w|tCخ?.5]trw"j&^."|JPELCt )wYx5`%g< lK/2W{ —=;QjCݝ CPΆVbonjRDf s3YO b~Wߙ2vp8X1f/W͙~ȨEA7f6@YYo!g@iKbƓ--d %hJ!]K*i6(bJ =@AI7; DA`nW(S|vaNtTqpOB ۡ< sI#5rկfG_(þĿ{?#P΅H,b~9˴,T4S'[FGǹ0U ^fyDRB׆X4NS(wBɽioy19(IC?27[ㆡ%M:o |r!~{)}͒#B9 Y9e ֕r>7IʼntYu7p" ~6B:ngt8 q\G>rqnۿ6&YޓeظdbxQ\cJFBEs]g;XFw9Bx>5=%L0| iFVp"7QX3٪I4{ż (Mטm̂LAm;ϓ}S6Vkcc.UW"+~Vs3m }%:nlP\^D<Ť6OHB⾉-r/ 4v~Z#UCMN&"dmTƲ ئwNʔ%ڼ`1I u?vӉĔK2NZs?PȌvX^wrQN~a\^BMf#8v烔_ Hx]}z;{ECxR쀬sKq  R뎍]W Sk!3bC GLEfKI=I [O ™hبx5z4r Io-v:đdWO˼L* KzZ%m,=Ig\oDA756tדr7@{ AOa]{ gҝrD%n@ w/I]Y]}4 4oQp =g ;pb۳&iC s^vh10Cb{h]ހywN@v6[Zϑ<ž_{hׯZ~ߵ.#TTyid_ppX$vSڬs߯eHUPurR&0j_@lQ3`%l?eM6ndO'z}Tן,Phğ?BM H.jO(Hegh,4P?k`gx4 z -Ue۲ wOj N@`4DЎeUX&YXE횭 @ҝ!9&EPYց7")7ˆ-m)v)7F@3+SW 5}.+YԀ7u2UFgI;>,nCL"])8*2Jṵx)v;3m{B3o$t9:fe $yh$;#tdS^+xGyo5JmkAjԒF 7,_k]J ӢdLC&5[;Ivd,}2|UѱbgM>iyPwřvc6 H_N`Ux+>/ycieCb)o*xb/{LVc^T+PkMIN%+p#yHsek}<.GϽ`UhBFҷQ׸1oxd=<󜡔LoU\7u҄A  *)٠0g[v/9h?;A/l&P?TfqC6޶V1ϯ!Sb~%e||6?ZE,̤Jdfs^NH! ҽ^~g5W^񓍝QJghxŞ?.*8ė,]>&bSΕq7,S0NzVw Gр' ]]4ӝELm*uPN빆cXRݎA\ֆLf^8(mc)k)~}Cqy 0zXc`$h+E+[3@'W{753 /3-ɞ| աb7̩@TO3q2R/5N: (a*˜sFzQW}}df,5v6җyQSY~$H uW v^$=c Be9 'hJTVQ23(/gv: QB#ۋFJ<"5RVǘ4/J:k*|9T$+zwҨ;lN&y_{*w9Њmӿ~4ZVk;*vrR1w*8ɼ;5x,'u--/xƻa~.RTaKxs!\XUd̡7|z1'v,8K5L[Ӳ9v a7@/IYLKhZ( 0D"$>ri= e&{na=pܥ9 Pod,&skb%ަa1YO"\ȹy\Ȭ'ƌ ѿ[ktu f*BqL1hԽt}JYݾω~F "~fZ?[s1~_XiGEX ++5|9s I1~IJ - 3734Vx9sSY=$*, d$g̘G=gހG*a/={&ۥR ĞE.2`Z$SlpY<-7u|՝gN &JR_+2S34Cȫ<8? % Vu |qX[k@ YNLt|a!CëKtDvWqe( TRP6|BgXf/$Š& gW ШAB{4T{&ifW31b*,_$]4w|.i*Q`$2䷙Fk@ aH&/3=Mj |8EvQQ(vI[a̛yJyid_|Uq|B2!jK+g%qF{Z#Bz]]ߒDZ>`D)ofɉc,{dPsؤjLE\+HRn'l}).Ԭw._AE3!pH[C[\Zr\޲W(BGٰ&gJ;/veyWxɃsTPa\Y^S bb<ޥ[_ agswpѝ*^&sSik!gΤ n ~=Ӛ 47eoI)lFY͙ͤGݫsJx"Վ{ӋމE""ky7V oa(d4F8悝3܌[ Kh=QMO ^}ʭӽ`wY&ك@?R%s}nHasmfr +xj#͍OWRԯ0wE| wŖ1-tpowd/ǐm/;uW,\X^C4O1WϚXN#yomOd;9 ]igMOs.BoWߵ!  ɰ ;ζT+Db!%Ѡ )ΗЛXPw>Tr0Ie8u=1${_q;&x-Òm!B*D'Ym@%X"S/0 =ji/O\Sa݇dcy6z~V W|³˔CS?>FMLE9-H>*T裯#$ps b|e=*=·1CpҀ$q$_VKD R&m} Wsߞ>iޥ8ʫpZYirMnSMYJK ~eDb REJσk="?㔟Ģ /x9;cЛY~F3b٢=5[d/ L'0qxw&I)07̀03HWTr3^zu@J^is<6̟4i|7ZM(^ړ_`3fBckqzxatN?)A-Șp"Q "vs -Ga.|]0f%Dq9^ᾒLHXuS6(@@?Du)7Nɔ4|ZU4UTY-CioZmUe.G3e?\UePWWhT@EIai3T{Θi9^}-W;f(]? Ȼ?|ֹRHQd PDžWWl[-T?VM865ʠnKMWSz,fGwzͺ%]Yٞ1JY媋~,YZcC"ƞx':bvf?pRۉ*t(!V7 ;:%H <4A(d*Wu+jLJ؞F+PɟJ 6aŁ sdŌm.3lQA_Q:L&p4WݐO7:>})P O1/u؟zMlC r4ۮ.R` Jg 4Jw#]M0qS)W lf-!;X7Pw]@sXJ%懱WRR ɲؖ܆Krs<Dw9^j6p܉ˏ-1v Mu>Oœ}Ou{ _]a@9xS6;$3ՊCjaRߍ (#'-v 'k=!lfLSۘf1kFc1Г͉ȓQtSf4Bȑ{Cs2Tk35F穗F7{_3gy/1 vǧvEx}TvocepeWUWJ ?pd:y ]'9 * [{a+fci($Xe5PfK%KIV{΄KQM$Qga4[i23a A5-(g>' H~f8I:?/*]bZ1K1Ep\%.k5\L_=\#!:r_ݩگFqDWY/O#<7xk}M--gܟktVqA>[UDBU } :/ e3~s"6O_2SݗhpwKƪei|0 ;4I,Odp闆g@v_C]_cj#nkEp|/Z=sxǖSdCOA\U~.RhNx $G4}UpӨ%ɔDB {wgn< '#i9؏?pM7}T</̮k9F*_%+Y%PayJYs^c<I()} ɤZ:6nZ,V۷d UL5j;&gkodOLnb0`ZM,cťeMZA ~(?-,pg?ڻd{6SYotp!4ۥ4">OBw_ï1{ C%l>E;|+ O"71FF"+kVhe`p?~m]~2기ȂEDO=ۮijySO.:8tP+َ&]W* ~Vun bil?Qe ev0T? xH"~42B5GC6FJ7G T XO4 ;H-'jx>s{#U |Md 4ETH ,٤~R f+2)ynկˁ_ t"yh"knAhG͙,A)+|a hZ }h%%Z݂S1b!QC>h6xߵi }::bUw?ԑ{*&G߿֣!ЅrN`UCB5~|PZE.y{ =A(!F?}QŠ+GΦ&bߠ법LB[;m,٧A>$S ntNW&I(*;sw+;`p!u-AW*af]"+ui՚P @s$$mR/A#G6V e͆9',>ao*މ~6 <ߟ׏T*P@+'T[E3On.]ͻEIu!@6|ItpV2G).䥬=>;@#% 88¼BL9M kWG֎+)ϴi HxWV_c4ܴoZ@@0+KH<=e)ށDl/X%Os^baG<\t$nAU0VJs\@բ#"Imb ݃TyIzj~ҁtH0|_ CJ MxrO,W5! t0R  AvD2>I ;g(GP60Oces} ]01G@塞6ea DE {ӘI>! į>dL\ǃb$;] j}3|%y-,P7`#阢oDL It0cGHt삱Rn}m>1F^!j𡓑 -w$̈5CL]S~ShAZ0q]iԦFEUm!7غWa5E2JXʻ dd\i| ;_CXaԱX?Jj+j $-Ø=D3+H.i?j|:G{&{ *s,M@愕$o"--Ebmڧc7 z w7[~{ٯ%$/׏x#F O(;{ *,u|%s`zL$(}$4n H\}ثFu$ DfY_>Aц_ztT gJ*1MA1dЭ{Qu&9^/h.v: fz{*`L43U ,%}lV ,Fȸf;ӈFD:bWo\C/=L !Zp0Ɛ)DWy!Z>۬d[ F&O$QIaRӷPA*.UEģy^Nlq K$b sIn,5 XNYlzwCQNp˖J0Muocz1Br'B%EvMt%wB>#q%Z];vvnhPA n;Db{l'"҅WO';ہm1 /2CR#@ AC98NTGzd{[ћ8 ,\fyOIv|;D}e%Q] HFH&C(έy7st:.0i:V{慞J<-glΡ#K,aɼI˗h U17\ڟ8@R;ė(1VÁ'0$X z`;Ӡgz{.{&nm̶fb8r3c/2C.x^}PWa^#'BUO#,:Cd`y$hȔH+9'0Li6\P8&hw+[sMCe 1e_+c`2G 69(t8h%8}IWuHzΑSBjN~4,,xu#^~7Pѽܠ!2 ?iPyny}27~@L4 (ֵDiH34u tIwZ/6WҜ 4yLslP5l ?*_CɵP[Ml/vCŜʛk<[Ld5ecLO2r}mZfY ~c0Ԅ|!u'>ה+!6͆OE%M%O"ԏcb4<tNc ,f`h~44V4۔r{;*zí4T%7PzMA!!chmݪV-}WHks{j?*~ya*5o],gVt}X_J31Ѱ HSU֒u},hϹs"FOܞ, $+SI7`5Ba2u M.{Hw.5b_ zh#@~D&9MYhWs"#5?}i8K*k;t,={YGIhuJVӧx&\ O&o\i~?~L6S5tn2dRd'Wh #87,C+t5౧a^3A<, hv^mY&6 ])qצvUIa-.6 3!LnU6712Jn5gY g+0#+X1Dy[va$;>RUXO &HHpF5H.ȩ/-!\$3BftP Dc4PYjeƙtġ'U:dnS"VS,z,J~mկ-Joh$ϣCO?aeY6 BOq#nt = 01ȓ~I;ZC]ۖLÆOzј> eL2`,iu`6rm ٰ;wFO=%ZtSLZYs% NÙslѬy˳Βa?CnK^z(: <3 .ǫC)aT$EO#`wl3UrO1!%g!Y6M-;K͞ktSWNq2$Q2lf7_,LMm3O氳dfn.P͂ܲ.v"WYe wۓ[%1Ipr"KxXM |15u.nXDXSϒyWfmVcxҿ'ɓB/5N½ͽ {~_XJeMn2*bɕM,V_өNe#qоA-T’dXl),|=6@1HI`) bcu?1WEkƄݥ<茅GeFf;4koOk4#R iKd>ӆ ؉fN2<*X=ދI|_] %iB:sF}1)7 1G!̪K$| _]70"]anlZffBpmfS LVla%jO700 -9ȥV6&{h+eH>PJ"U?8u0J(R!v0geMsjZJj&KZX Mw߫)ХnW]P*abD&$s޸D~翁a(L[5}Twp<$]|Nʬ ֝CAž9MN*hk$@2(M&fP=/y$25:/yYω_ {|17j!"RS>C_R?#KG.K0apaKD\XeS-Vj &];Ma]c6CVH?hcLP6'\ ;&S9FSUm})b'՝ @$n0y5wi{DajIg:DN^?=cc~ǻ,-Z fj@ *∢A yb&vW 5x>-KO{AeĴ_-Qn%}~*w9m XNqYc Jk465nSf*پ/<]^K~X3ǬV4Ѩ͙& KAS&짰(?#nvк|PQE,!8&Zwr.`t<x1mYl'΂{_,JFB6Pag.,oSpt-׺L|n8͍;\P}#VF:^i)EH_EuK -&GÃ^,V62[U`~Q73\JHuMl/drAx҃?VܡΜr > v\T,럆Y GRbTЊ-pXM5H82slHKMRI,F%R G=!oE9"䍼sܩWZ*FٌD"%:1F~#6OEs@kEC# `2Q;zw-c¤US>]vQ_ oT jF+3|x󯘛χhU-L4hȵzZ[,[q[4(YFC,rfkmcDU=p&?[ bATř};xsU(RN/ 01:5Yu:JI 1~H:n& (b|N+O&H 3A/Jϡ&i] agah"'yh"({:y8ʘEruAB0\"J/_9gb*M")ڱ)F0-[*7.Q3ӆbHq"ʕ>ԯ 7MK-gYӁ|XJ@i^"*0hf .> g4% I&Q~\dM*psjvh"דb/q\qPV8m- G/_'VDB~\%IfYT$w&{&O3 ͦp bUcW$Dh&HPG@Ic3u?0vFixZvŶdg\<:|F,>?=]t`|YPsYJiPqW6Hәޜ7K8ETV) B Q_JR>ڙfTr-*ovҠ!OI72<ȍ+ghX,@HSyLmhӧ^ $4MK陵6}z)';GTؾ ݪ:x Kdd_-9$~ʶ5C%`KM!N}Q btnmlFIsF\HFE -P`~ ҃G-vy`:ҍԸ o<8k*fHDj$n_ZR۬ssbWCQ ({WCf{f,V"<46_M%^x<2qN_`Z@J&]UC¨~ 0!Gx|_I .f(#jd15K$Man:S, 5\>cvJ OVіPݖg/ZCq,@>YXZ*jμ|Ӆ #7 To0 >K#ҥګ6t=WBk,IClFZ{@'MlH, [%bVUmAtP+^KƇвu1U \tկqg_4!z Ӿ[ZwmevբWȞ%F2/Qx"cz}پ٪ ͢;Oj7D!kkOv7<>P\MaǛL t4@{'gs\Q\.2*3Kmf>*2]0>®_2!ۯ>O.9>,,=;QPؗ`]h2!al/p4ho*=d~7!zN]P8,D C.|ψ(1̎P0t=ҍ< 1~촯f̰74b|!F; .<ݗb 6Jhl<3$mU5&ּSt$(|_L.H~gtے̉1ەӮ zB:ZҮa;eR%HMhVͻknj,P; "qg#d1:'=戭me\ ڂ Ǻ^P1wFrq#ASE[."Ɲ7FV_Ap>%~W}-o+%SKف\䗟1B޺չ?vud1qB 0հ%u<9LV֠B ]!Cw*@F{O&3M,6 {O W|N/  *+aJv8@#i :SoԛM܎є1]8U^ S4Ggz K0& /bk?>tER=OoG]u~ETO˘"Cߋc] x|Ceיs f%nӓ:it` GF?ChaЗm]t=ɰJ{کȐyLcMr ɯc)Z-;,DTM# Tg2 ~L+3m$Mg{Ilmwk?}F{YX:aß/nf3w#iT6]ʏ]oDD I`?fR##cpS| ?4) ֖uQ HhC'! B2i W'OFJ$§jb Diyž]ӪM*$iԅ6_sz\lOCJ^PUy_k>9 b~jnX~l4}a| A[wՉm/֝[$@n/vmBƻUbl[_B웺L\YL7&M\tWv۱6i*yy:-e6FQicoB=~:GI˺U1'oDƻJr ?n)4i W !xK55bMӲa׼sWVϝSi21-.ݾ[A҅= T%leq?{VJ{έp hڎ~ORk_D/ ԮiJn[O9%ue<_OC{ ,-lO1veqy/~zc/-ZR40u$ -{4iI=P" A["u3[ B&yS0 ;"&gEj X Aw@^ug@$QzIg HEҔ%UV@"+u83H:=,yࣖ4-kۧGuDBTH~eA>OiQUmV1UeG қKed3 jQ~\~3Jrzض8k)$@@_+_C;YB):)4E?[Zʌzt`ڝtEFu݀u>On=EdJ}컶ڀhVe_./v?v˕b["4 "zC X\@4m?_l嗯ޚ"vahQYUg4b랺jUVy@,_ϫ]{^s>Kq#3uU:eV׀?W~.VGotƀfB8I6lX,WK.˝v/EZ9Q ɩh.J>k0,) r _۞w߇33 ͳo:_.~<y?.C6./ƀ>czs)}8s Un@$Оy<7/p]p# !asUa!v]JqԐ๢p#l]>oH3iC#p#R(y~JXIvӇu M-5!)ZkJ2Nr)S( jj6qN953a7\RC8T$.7+}Ү5$L9VnD!$H9; ӮNcS $D_} )+(X䎫4$H*+ 7^Y$T_u?\'H=߃WnDR%B`vǭvrQ S/-FOx4$L JÍ(WB\" j5$L:K-܈$$yϭ68+tjN 50dҝJ 3IsiJ A+x0*p# !M;@DߟO:&4vicFBR_ʂK3܈BH/Jm!ǩ"Ϸ~Ejap,sn sOE,J 3IVO}[Ar1iV6(cH0j`DCwh5B)(TBH.-輽?4p׀JMH` 8 gSSS|؟5 Q \ k A|)>R!InFD!Yԟ lOPas; s cgT%YE5U Tb=܂<(!Xit'p# !a a[A^`sgcavQ KvA۫^rxiH8r ̇e':7),5NL+ !#ywn xp# !A4Ц=fj @$$e OB:ٮ=NL p# !AȳiA@NqG ʁ,nDVi7rܴf0ׄp0iU[@|/; (nD!$L;W)vô+ACzY:1Z_ :p#2̥,]Vzi-p# !ez#zEz0` 9%!6Bj(TM! &K`5͉fJ IeAN4ÙnDR!6B/g'x lc 5!=6{Ep7u+Q ZV҂N;չPt ܈BHCjvטn0 ^~¼ɧ@Hgޘ9ɜ*p# !a&4>5Q s08]{ր0sr35!̛Vt)' !\#&&@Hlb$C4\IB()baI`:\C8k(j,n?VYP 5z0k8;jl%JqFf' ܈$$7eYЎkE'5t^\qcQQ "C:3Q JC]Lm.tk],p3u V€?-L j(Q40H8fXA$mv4.[4mFB|bAjsl$diaAZ5pɦ^FD!4,LXK[U380p(f~_@tnl{q4"M3 V!a:Z̞A9 35!4M-|`r̙<0P)Yjù*p#Lq`!Suܴ 0ׄpŢq.= oд#|7ҔCeN{q"}jR!MnD!C*S 0XԌt(0$ؚeЩ@NH!M 77R!eEŠ\s vYY0 |6B)eA(M!a`Yc{Xl1 $o ܈BHX'Lb߶[ KCIB(X`CL@;r慄aDsd*s<]8[֖ ǖ8ˠ PCp# !vMeA<% $]]8 sMgZ}$gm{.[ gZfIba @NGor e:#`! (թZi>LBRp!J.e{@Nˤp# !AVS%sa<]R!AaQHNa#i4feGn(0p(#ZD"S6%5F1t$ֿtcVvUO'nD!$,qO' *4$,s 7" Ɍj8vϠ ݝ&ЪS 7TO[vnDM=@(Bױc9g]nD PT$Ea˪3܈$$Sϫ5d^8 7SmIBC2'SD){ Lt^B2e% 7̈};R[=˅vK fD.nD!$LbZ`֐`pԗFBBT{R,PzTCt2ֶ5^0p(8*3 lRSkvg.9 +?O-"Â<aV,XE*K :\&Ea`W`im|h,zrĴ6܈$ܤ4IgNզ)80ׄp2H:-hEJ'ts&S@8MXo3j Í(43 :8XҴoFZaFB!'8P:m 54g$!\ͦur )4\MZ\8Sk,8A0pI$S`QC $=&GBLQ VR ֝z8r ܈BHڗB;-ei<_/pVF$!;ʝ#!$S`yGFBJ'ثeЙҍq{֠0!PŢf"Zڄ%z+eIB(™Wխ =ex 3I[%En!OPH 'xf !q L<\4qc3/"齂-\w6L˵\)!\+Ei8%Bap^#9А(d we8Go+itI  /UԈשe '_ S*_^ꪏ󂉁`NgqiV.~@QbL?JoM/Z1;>a|K1q˧l97Ό*g9@wNi܀tՉ*/UJSr4|^ ;K~Oá;E ӠO&ѵ*7~unu ~&yM7<+'ɰSs~0,!LqR6OKXsҫp^;PFA421LmڿpZx]3m`݊?uYeB^WNؔ+ϩA,.0ק.[xXw8^ˌd oK;LJVѾ<R]o'OvvǑh!Jz*ݮ{:ӷU_R0EA_ VkʀX_^s^Ф+&t l-Wzsֽu[h/`zAsƯ2k9a~uͥyl16>SI u1P#{@j}mIsx}1޺W2 q}uϝunY_۽W }IkF_J"d|gQ"^MӶvq<,d_@g_2n^վI8G9NϜI駜52zX*{Y׉7yX_ӻu <;;ǣ_I'j\Nj}7Mu;I[GB ݜwu+l?uu#>I\]ԑ'ؔL8)>ɁpQXAlQu%u9? )[A~}qMhسcbنU;#dmw6D];.-ūww}Eb;n(nwP,z\BS S<k<=:bQ_= ێ(A;:k6 ág\tE+^&Y5΁S֩h?|jW @ H\/ݰ Hp3Èm|͉Ά~1?^=R`p{zԸ,;.y|6 @q]41\7@@Vγ84n& іu7_:0Y:'>&T]7BPKg}2.&`3zK.(oBOb"r]^>K\Hի>+>Y?2ORhKߪi^[OJV^>`@9\?u+obs:9{ 7LM ΟLiMgCm"[8 j4S@۩ M&-E\WbsHO`'fO_6~B*13` f,*JPV)cas鮛~*&p?wq&l^caTG}+ LԀ:z_\?~/4Br}5<A i:ؑm\;3lO~T§jv1\}{>D.v~rބXt[]ִ}]Va7)Ǡ KHT.-/>^=x6q&t\;nq _=UCdբHKGYUk_K?Ej\sZlbKkZ~&ETޑ)/SP:wԧ'?=tע/q,R)/w?^L}6_N@˃EL6ߋ|9#8xqE$g>^en00rnKןSyJ2KgQ네! '1 ec z×LJ~v&Tӗ'I➭'Dj }hGD!mea0=>4|Ndua_ʻsKXw*1p?uu띞)}\M(@ߝu*T+ z~^lLwtS 6ϞzLM*.^tKZ+Q";%̪6p?$08gඦqn y L YÃgg)M+Hr=.ðtsI#W`8x9~͐*gƲlznh  ^tLΠЮ|e@怟O#$0w~r<ӥFgdoQazWi C׉ftG=^;?mGM{}ID HvZQӳoӲ0-Kz`A^wDA׵N:삷G1Ә2 KswnBwҝw]o(`߁}{k2Q*^4o@hn7̽wq&qqM4wIU(tVr_z|L~\ӷ6K:7f ,)B{b|xpMpz pɠp\Qe~%?O?7ڈݟ\>8~ig(Vt.,ԾY7Ew[7 k"|en,}%.7}^x>je]?hݾoIo[:'ovqSG |a[/ ֬66b< =EӃy|U8 }j3*Tu̹? x$/OOeh;iJg)qlܓN6˕uGՏT-10ۿpGVRwMKgȒϘ;BnMF+IcG)c+(9Z0RQ7GcJ?(`cWWE;PBퟧk8]tt/|=cpv?W0 ܔ.>|duuZ54Sw<=6=}NYB};xz}=SZ:(z:vz<&- !Nϝn?D4nsD͙JS<]L,9 /[wO4>'߸;վ lثjAV| 6ZQa<- -6W?ŧӹÎ~ϥg<^~{u:j] h 9^bnIw݆7~dIcj[X4?m;C$UfĔD$H%z٫C&K ,O ȟB(>Cy>tzZMU@.0lXN߻ >Z+9݆z)Xu,/Y~eEɨb`E6d! (9ïk% C9QWs0 U&A( $`x= A+`&.6O*QAiY($(.)pDy `$>:QCY($HW9 A4D`~) a1:H Pka$(M&fŽd2TΧ#uz^;Х·>@H_yҙаNKzX r||΃${ںt-G4h|ҥN]2NZg";~|!`#|C[%ϧNwe2_9m-҇6ݪ?揗F&EByb$p ' :Ua@T>=ܗX]  :2g7 1:&B?<_F s)ꄦ3",p+ΛrO$lt!_{1oxZG3q\.ˏi}X˯ QXڋ( 2NJ)(: p%L?ЏTDW"|7$M IJ]ToH@ă N #<GgGXopzd%oG&Ij w~?9&Gގ'GQ9&G,|NSrhxBS N,|789 L(1=\nG 鑧oGQ%PopzTMcG鑧GSYopzTpi[x7pUaۿM3 N5GYYx7cQczԉoG%5?·ӣp?6 ɲ·ӣ(* Nӣ(,|78=Z}dۿAۄ-E+thHJ 9 ZzL#=*_4cYR N=B >֗vI %k k:vˎ /JUA+"iJ^b+-I9^!"1 ن]^8.c@ipT'R_kB dܷ??~߾_?E-(0~u3t:&˵[ g#FֺQG+3s(W9N_G'JwsQ9<`) HR>w 5*IMJbXۇKupqk.~E۶K?RʺL Atd](W"<u?Z @o3ih#ՉLc pW'm^L-yڴl'\{ #MFH2擯0 ",%H^!.Iaa.!_Z]c+]/Jpl_20S OtaEMma?R#/ $8b䍅D,I>QU[)đL!~X܂QD?xa?JF)ď2$+K 3IXE~G<0S ?t/L1հ3Q:@Q:Rb\2sĥQ$XG\"`Xv<)L!`YbaG0O20SVX0òr 3lL!~8,[uja`?-][ ˖ò橅d $iia.E]IXK=$U9 Vv4.Z/Da>n;=bwZIn )A)-E wԯ,so5ޓP} u(q=]t؁My\N!fxG-C]Z2ǡS0K,뮶 ~X֋;jc?qQ%2!@ 8S2D #Hwԣ1]b5]:Puޓ"+ GcO2 w o08pkQe[xG-c0gxG-~Л0<33g0exG-~ð`!L89pΪ{A9 Oޓ"Ga<}ףUiQ/!O{wݹϠW`J8pɷ{z֣XCEHXKMO/D!eba2Xc[X"PPd,q62ɠƱ)K)Ḵ݉W@seei.BY٘ 3 0S-܂Q7S+Xx V N,XN$H\"~eMaa.a_l_ Deemb-hZ(ؗUc/ǼȳǬ0}Y8 V!.i,̂'Cf vve.++1X  F`WV}]Y]Z+kzk zh Xb]sZMRE!Zhcs繅XbM~,d,f(0K++1q,-+KMW=4 *S6֯B(hϧVT= qLuy_l++^ pOƾmYѵ=YX$&i.pO Id][{R0zQ"[ R oW#7-Qhފob|+7[2 o7H<$7ʓ\Lio!V,__NǿX xZV5- o8f]j{"[m$wϹY;΋kft]<2mWXb+DyjG `uCͪPZ%fE()-LioXlVƂk#$oY@s14OQO&Ca^BgΠc0`PK+ j4zALX}Rd 2U(0~L*g!J|͊TZYH| guf%f*-CՏAC80Zg[( 5LDtgQ!C08E- [NIkWȊd<1A0bs"h4&c3.. u$ vS=4HjR, +5Zrʡv3%۬ 4Zr<`U0\cUbZˀ棘CUzs7w{1 !qߘ1ǸG1;D h㾚n㖨(k4G댾k X /`&.l }vEV)L'U&r_aUIejOD "|r[("̧p+b2`E2ʪ nUY:Ok;eU,G0vZZY|2寀m^ksRluW/r[U8۽6W̪Vyt[y)Oǧ]"܊'mzZXO ,­}N,Ƃ.>8PjzUFQ[.pG~1[7 2ױo0ՊuL<.2בks- 0ֹ˜;AT0ticjL!]^Zdn'Ip oAְ447 MV5 ٤=\ ndyp .F2Qgp͕p)Jkma wT"vpӞFU&2L/Q`pG~|bt6KnpG5 J,Qa wT엹^ú&LfLq,ܓ ":e{QdZ 3z{2 %Y͎L]8 ÂG7ޓ" Z;+mtZxg%5 C \ gxW/CN \fxW/C ̩`2>NP=nT\} wi2 LSޓ︜^{rZ3'gI[r<J{AVHޓ"|w0WexOξE;axK{ + C7~=f=92mX o01wԉ="k y(t"{r7)#0v.ޓm`e=ޓf#~q0s4;5,3DûQfûzŭpw CnqF uo H%<`8p_aO^4JvpXgxKboÞ[Bl2 }.mΦalpl>  d޷~(rTGl̞]bJ!n^qlS Ts T#i"S  ndaژSE wu+`Yn>% O:\!vT7Y1Sg8n=eN5ʀapG5 Q꺴pG5 ;1IPAܦFemJXQf'pV$A5ܦcZMYwe"8GsG|Z =D*YO1SQ ͼ)s sUltFdj`Ա&K,S:VT/<0W\eS"wa we#0`qᮌ}x^V57pOŞR TY"̞eR6*go̦eaOFaW]d7sp(~)¬E CspJX/Z VZ(WcT " 9԰ZpK$) /[7nE98cV]=8E"­hSZ"|r­}2jnn37v[P #z;ATS-;QTX`QgكC l22 98Y[x寁 "q _.nEvp'<8" x<­H|ƒCnEyV`{pHs7 *-QB\eᎊZuuwT(~-a<dF ܓ"{x=oyXrp-Qg9x;*q,Dz:pG%~W6Q9ҡgimN|+t:"pW'tBஎMB0TAWo:e;AT0MWfEe;* r $8XS{2 zc/ dtc~&,ܓoy 7\YXpXdUp yYW8b]aV$NေHj " NjyUYt5<-ܓ_8Z̳=x|I'#F8 7Q4EF d`A;]#{Qd]=v1uk *L.5;ATX(*ȴ:),Q_X

tXv'POA0$?,r{JnL;R oJb ]1)YZ@n70'`#~>-BO,*GvO=.y$s/Ox.;E-S^ /nuˆA Alڷǘy$cV 3~O)8wYzd3J _{O~jbiIkxGcRNO(ǖemYR[{1|,anj@ǯY_~j U:W}i因p?u_?eLn}_.3&D +}~>/ǩBgM"~܋yYp?|zk!FFm$xؾ@/s$/;KaXFpYQ|{3JÃ0֌@w~Ƽ#ܕn tYVzvOGCCY٪%iX~28ގ_ΕMjRuE$qIo),8tOL!$,D?/>r|>,LA:32hfomThB ` z5)a ϰ]q^RKXacxO.Cuz uxG.:{r>"rqx14qx18y.LWoN%=+Y׍D"ў,a_o}:.sthPVpD-uƳ`x[,^ .e,ypVVpFmlǂWWthZRx歀Ux~qX?ڳ,6V[ўXyYi]]8ڳ>`x[<.0-E f ߘʷ1Af˖Uƭi'hlpYo,WCfKUƕi_hpV[haMhrVp zA(CmtVp zZ6g;+.(aqhxo >YO=?mg>+DX|Ƴ.--fP"D/v|(-D=u,Enw2 zO*G3 c\~_Na}:or_ :ro 4M|_X<,_~f* Z *֟.'Y֨# uK}1fV®i(vt I50VP/y۰$eӠ91eSXJitS!sݹ?R8~ܽ4TПG<9:DdiV*2];=tʊe<\^R"L[k& qzz1|__C `uH,-R/q~wݺ2͠Kt$Y?tK?!ӓl L'1?wf &jzO^^*ZG%@SwAT?ӧΜ}Fa<\.X9eS+rR\aI3 5+ ˡvC(оakRbÍ ,,aMzfGƬwG1ȒKԡzgpzJԑ6B<…OB9ΰ0#sȂ- YX@Q1tII% uʀ+~H,%\a) X1/J0SP x˂u:6 jt s ÙZW`4\&Y,A4Ԃ{4`)Y$> b'GbTVQ!fxcVPfz,;%ZYm)-km3enxEeGxXsMWdfɌ+ XNXb Ϫ+5ueY@A1EiG1ǨW4neccMՌn+LƃC (d,qzjVơZZƗ&c3$d,qJYɘldkMOJ+Lƃc0b q_kP9Φ>GXcncd<19~Aa2\&&c3 ]cb+T<0WHa sGxa`?LRq:6)iR\]XA1]eGƪ$m^-'z[Yyط; 7%0*].v Í}Wk3xĂJױ2xTa`Oe,=ha`GU.,y6P yt6gn$Kpc,Up#!_?-3shO|d9a+D{GYZQ]'K91E o 0LJ0S\ Wf qߑ+.8L!~ɀ<'2RD0x #h)|& s#>4À2w! x YY-+Gx sz"y9?sbb'&Rj_3$F{J"o2X(Th3!Fs»X0' 0S 0(0+ B0V"*RDhO4pC5Deh)^f 9« V >i ^,~hO(d`_4F{*!Kؠ90ړ,`9}K=q0|qaD^_K<=Y0ړz: LA~lM*M9dp=[=v6ҒjҀJS߽ϧE{iI)ڀ?_}8e-ZCn=h9d0_w+800 "b'\Q$0Bn<\Bsɜq9xL_K%rEA"; xG\/?hgt{}M_ =Ư@G3a^uB;ګU%N?a"E{:*po my5t ƂUСuWyzS7~6$ϯ,||ӖZ#%/ ףP{8BIY@eV鶃`{g$(i_%DvXa閻BiRo71eR[t72yR>B@BJ}H//`Qe1 wy^89o-y4j9yڥUv(|cm@et}ڜ)e,IДt_|CH?Oo rl];~|{[m(")7|mFԀw؞OAz ҄Pu$NwW܈ q.v2~.O8c'je)q? Wj@˥;>Oԓ Km b:Ȝ.;:=V6YF?W]l94nܤ`Ow|=^OsK^N>B!(|'t'AA3;P_ `J" K |:^F|qS1BڝuUWj +lG?8:ԓ T:5HٝB8Jӥw$S`.?| ΀$mD}#vi>Q1_WͪTo+O_Ɛst2^ ixڟ=/~ z.6vn˵󃵝=މN"0S& u{-S1_$א $S! e4\C5Ef)טiYf)טt hL9J hL9,fƔk=)טya);4Aмvn)^yP&ɔüg0RusEma2| # &SʵsN-LgfSYXL):̱40R~u_ &Sʭ dP^5o_%6+Y; `KRm<*? `K9+K `KY,+ `KyB61=~e%\@Yc6r-g0P0PY ({沶0PNƜ{ϐ99ge3Xsϐi:kN9Ƙ%V ֜3~(5 A`)o?c3攳1g1XsϘUeS>BVyn͏#dk̞afOy S0=#l#m=e#f-fп3)s!?KXm`S>z ćafO 3{=o3_+~afO̞w 5afO0c3S1a0c=AfweafO1H*Sw,W_E{\itk\+tnyZucߟQ_:ReN<&o|kɹbמG9}ƮviH:}7UA}wYZ/Ew]\|qrPd%L ̟RzAw[hd|#Ž_bnHn@CLpXyg}:k&AO]|see@e L;O{!@g\[HO',u!hN°_b<,O~oTR0t+.CFy< 5jza zYO]/\>pU7G`'CVVg x6T5}SlM4o?W)~zxYw˦.ĀZӖա,4yTࣳ/?5z!MGθeݾn1꽨,Z//[zc&=!XϾ߬u] ,uK TFM[ʫ%r[B9|Šy~x9)FKbTbu|YxC]r:f3·)-#pt//>9y9A܀$aw>&~ѩ"5`hn7)G߾ԩ+ \ W4EB{x WAO>:< 'T.tXlOOG-p…,Y0eK]ۇ$ّ6=c죔r:tk:Ȼ}ppݏ?JߒqɏŷTǏlx7\6_lK+eY4`/Gk^O,'\ ({*ѱktEa.1=a. <0Le|a":VN4+,ec0Jp,S s~ÉgEYM9p( 7&hr.VTЂɖGSIna'C}6\ze Dn7bZ?kQfucjh2|\*"`љ4Z@c%&:3PFљ`љG [h LL7Ո3SPh"XAt(vfasa*:=+L%.a➣L29-3 2Δ4-TSX/SX꠻I&ez}#LÒA!0SMNAҪ0SJti,$S@e%z!0Mn9p+ sYˁ_YXk&&\R: KjL49=R<0^!:PffrgYq+W4--X{ud M'3ߵ"DW\,(\,}_/\P!>%Ad&ܫK*ɉL.ytJ4a'/nI_0LNAF6^N f)h[f4Rjdr ., p*WY&p#T)@TMfa&&<Le+ s4 sY չfrl Ư=4-3Z 3Uj K$8Յ׽&ou\/]߰i!fUhBfi `4> ^f :߯spi QM if LL#q L; F0935&K QM i0 o&835#ަr`rƁ3"5؄b"XwҩV19mG7xx$ȳB C dUihCdOh{?F0`SY@hAXԝ!RųI hVcK4N $oVc7jlJk1\Ll90Oi5#`L$P fZ%˴)-ec0rp,KS sX 2h6j, sX e+e+ sCʰLlWntk\.\/ +܈&PKgAkJ'װ噅jr +YVX[`U$u5aJ vv8}s*LNt8}*LNgf)l8*l7ZnTIcafs 3Up [H-$Sh8( 65mӵ?jr ,T)l1\ZYI&pЛ0ʴi/vlr a. ~ak35cWf`k#sf)lL\- 4kZ]t?چm褉 @_/q馬n }_?|ZLVF7aj߮ABdhߎQ5rdV+x,O{B*u}G/8W{|k oB*lc{\> DH7d _{J]X>}G fImport/data/stoxxListing.csv.gz0000644000176200001440000006311514673226105016472 0ustar liggesusersr8;?OQ9&H)RZ(#ԕaPԮOH?H\0]]!kX߾ޯ?_|?^/߿O号y}y쟞V?Ђ+Wg[}~׏?v?g?@EZ*DE:MMo_Fl**1kºmXh*/ؕIF$mn؛M>rIK4/&]yn]T'Xj:A`;Q2mC8l;uIֽfa%yT%w@GM\}iZ]_޾zN *Fj>K *С Q]JQG~yr;d&l?l.P;cj2 Oz4ue V<8g_>hݠ/ nS=X / ‚Oǧ5V5+OѳduzR &w+ghn. ^U)&dho%wS7ԕ{U.C{(xo7\Sk'LW;[aiI Ȉ驈GPkhjKb.|]--$m-`‰_a+)͗o5V4̫XC{zeaՇ$o9>Nj̵QHA|ۿRj(9";'%Y8ɤ{~#ed#,IIIǜ6h)y_\g†Wpɋ.}]/mۧ#\ }%;V7ޖZ&4uSZo'LjWw^CMN#zFU( e}uUWw!`N ZNWh{5u)K=N+i&ptcUt$qκFGW]%vX άbY:s:t Y]=]+@9fZQs-`?qB/}8nz9jƧ mˏYfߋJ 06^e]iE{ia9kn/}tQ3MK.&(nRXe9Z= /L75B8waگnwq9BvNtzs?KvRz$ =].:Mh=SE7VleaաE(!Opǫ. l=091]`@N#JOjuqº_hue(^eA 4# D0g5YX\,H(O_qkqkH 07ɜ[@ :B&5zGJ^=tLFHda 't6zfܚ21b =}8U |\5ΙtYiM'( HD!bb& '\D1=9 Nڍ/-7Oơvw ]p j8Qh7G>n 3eH湎dg7{ءhXPw͉md [2ddXkn  ]QOcUOOWݠ4-o>}?&i^c/1O;`Þ}V!gi>?$,d,́mq\ɹ-*8W X*8\iwOWS 㗳UvLCLa:9qˆXR &>S,(딸}y>|~{9[ s; 8=02(/m z.6mz}]>2-\ӖN7-\Ӗgor[ɦ-7Tmym]x姛 rqs4^AKfDMx oq 4};|w݈LU9樫@]ΕdiHKu5Y;U㷿~aerrs+ |3V"'i ae?w!IgOUN/3xE?Wq0xBs.a<`cԏϨ{.CS+QS8p;kZ5jNRtF&6JN;ܦ,dwb̹n+9.1.)6Es[Ұ^vF+_AuAÖ'ĖCcəY; P1sJ}x9u^)-sG}lMWFmQ$lwGSߏFd3:vJLLEkԧ~_sFW\o^6Do YgAx?DU>zBdlCYAB$lC2!zrgK}I(A4eewÓ=[[VDim%c+G~zr]Kay+y`~|򑳪@f*8 >UUǁfO֌ބ଑p ,CQp6`EчY# ~k4~d8>3|F[^=dl8U4DNƚȈOdWl8-}zdFءC`|{^tFΔ>68$$ž[|OOv˚ nn <[4)';gǫpJ䄧g.m ٞ o ٞGREKKz .x5SrA'5Sj5{KC'e R>)0b!C kvXޒIvņ%#!rV۴oeVOYsjQۻ2 ub֚f5w J,Mk2.XsgP7y`MF R_F#pݯT}D߃u/d<߃vw'щ>xJxnx7=~( /<0:?TIwɚ.u;+WRSIw̚P%7MMC,7Zfn4W*ÖYUݫ6{l."6HQeƊ I ]ѮS-={is*OywB0I#_ `B%^vNTB DwROBxƦT;?jb aFʰ-*ŔagjK&!%Eu;r\0LޡjXV@9zmӆamG1=éPh 792=UO\͸ܞ--W7=V[%@^S̝=`NSIz,NCoon%w@KvΚ;?tfclKswgZ_Yg/OUFiFpu0Ri*_?WO-Nx^]l!~=_r:_i־Nj L3]1Gߞ Z?Gqyk7xs/u@`sc[i\k# ؛?.IFz湎Mepw,9]e9ETmNMaju߿]hcUhN7!ؗ(",=OmDl4gȍG]zÍoe=JWOMp[) "m=$ns?{bz|>t Ψ{ {^s_t&>ӦmO3-Bgu[g8v/8?tϳߛhϠ3F'gAӚ{ChLA|ՃZo>Uo@2g|tgхRzr[:ض[:mOkO6ߺi}R[o̮_z~ZRb-Ⱥ҆8C=0])޸l;㭞zri~v:=-4?|4|nOI1砤)amHfi W4DO־hp=M懠\4KYZJ2e+Kb[&qe ,8{r۞:,嚱isj}Y EӓggwM;ctc|&:lwƴ΋i3n'K7KD$l4'KLdśx,huam IB_7_1jRo6Ϡ/U-O۞B_Ĥn֧hsIޞ͚,.&=cdIs'_Nv%/u!͒UIYS'JG̉8-O[z#'͕ݙr̥l^>}kՎ͕ܙ Y䵎 ٛұzrY,N]/fA1;阝ГW;07=mch YpNK5\W8\%$@ψ,g1nSC ż"f}ڸI87/oɺLsNSJ\[K\`b&bE^/Z`/ZrIJ:CqKNV .Qp)HԹ)'LQUTXSX:CVF9i`׫|~맋ߚCVSgVS#ׄ.(=5 ^P\r[k}\'Kf${u!"{UK?}:68g֭M:΁9#_n> m&GJSr58zKKo#Ckm5&Dh{;9h{ܨq袭Q#- ?=+?Xs% vJz0NHa6֧͕)pt)U)ǥ#vF{206; ,O\ kݱtwm VƬlvWù;p?=#4B5u'k,:V ]~1mU2'`K[ثo+<!{5n^xBu ]_ޟ|!ʩ͗o<*q34ټaNK!cM†z lٜ0ݖ5}?=tCLJo?]w3N!3#* \-$rDm4vw0d+%lUjvBMUзgON#99ROܖ9oODV-; ,J |AE/plpdbąL$^{cӽ9{H Z LFl6nR l2!x9?8\Vń?#ix2:NO[FΠKe^3qf९M[haIعhgax=l4 -/a?lN Mw8dq7?2*|3Ҳ^NBܔfdCJ{,ARK$E_w=!چӺ0>pĴP')ai TA1RtnFFMTj4!n`J )1b0WhLrp5VԠM֘Z!28c|m!Tr|o|bt|hVDVFזՌik Сx9!PLbY7?qUSFZv#zYXn~!EDGe8h1%p2:j|Ov|c|>c 77 c6_>w³0lsNɑa溌ӂ7- =$i>c9UgMg#0Qfci4&{دG+smt=j4VOyFVd6Wh* <Y\RύVc6WG²jhd- ׁ8MoKr&ĚbM Vܴ[oAi =Q6r~FZL ֓%]\vo"ԓ5^ZCrO/T/cެ* C*OjmP446F+r:F<(AQFBlJiot"dz%QQAoҴ4d 4`UZ{TKv+AvxܔV|g4 57@d8.lx8yQ -4Tx;\iAKo ڼdF=Rpiws xf/?31٪PMc@p]rIɈ>L<\w91}sAsE ,=5c'>!g.Wd窽AN.MYZ-uwsv0檽G{zSɄ窻V颂/BXxBUd`jT\CD}3GeSDZi PXLs6)"=xS }*QNı :J9 ȯ5Ly´rbU䅆X@N  d*P^oХ f}$T@V=ԽuWDǻ` z mnzfQTS{*1bT=3Y&SK="56Tm*!E7(/K"&A=y2ܠ*"&jG-he(@ܣcLso٥,j{TTDM.V{)c#Vs z6Rβ~,}-G``car`5ރƺW_JX0+>&2cB.-@`PȱF  B5N 6T.esK7x.j'%fDu ˵#0؁]yk#48鮲}6dxASjl-l6FoVw}ϩEݽۇK>jxہo W}ݸb5 U 5nu)e.j`)?c]g{ո\= 5 "v5@VCAF ,Ԯ&ڛ]Pݵ|SB js=p/G=dwCv.;6Jh'lol7 ݲ2 K|ؠOȢDGllI{&*{Uƒ{ %yBu'~9>83gpvkIޱn{?NkItVPH#T/^Z^4a >TLx9w-i2>$ fVƋϹCMiHz/oT$1m郺4m9#jy 'Q9g`ѣJi>UCѧ|y8. ԒRs{+(@ +%Ǭ*5;Ǽ*F_9;tq~"%{"n3D3] aby)@vn0b]SVu=/n(>OOgd(2ĭ*Q)F( K@P@\A +D=Pz%Й??VJ3+_b_(۝HMl՗+d.6_<?5/,z],t7礗ѯ-z\ƨB-|Ozk\+ ^o/͍[O/4X Y[noͥm?X^Yn ״/jѻuհej6ktkݭſ+/un l=Ҽ۷reL< 5Ĥ}Pb\۸.,zw&Q\.3lѠ.xg7o㋫ˏ`)-^^rDN҂$8ܜ80-FcfDK!QGZRipbe7+ kd6X_?M]_5d1w6'E- )CSk^e4%Zz'aIdݳ IG&gGr=Vr8_Xczv{nb3԰ɈGv ,2澏#¬:{f|)Yeh)ԡEf hNoΚ< ٝ ݃z|KKP,T0U jkE3TPuB&a6^ M#mP=ݽ!Fۣο"4-J9G-0=³ˆѰԗ{  G#`5ѨW xZ3TQ3>ЍФ-@9»KBHH_Wp |)/P~埪EPvRp zvf|BHCtw $4{D<Ԯ'z^[tgya\=y~k#s~?|яwO@q/ܥv |SE?0^F1%y79737U73}Eo~y:t.U5לvJ 2oϼ6z~zv@"BOT[D핐ļMҨ N֣dt&7}:6s[M?],9{E~Z94{B9zy94,W/; .|~df䈍ΊrhW/$ǘ>$?tWD`>tM7=9ӉJĘ>t8f'Ƙ+ОPolL};Lz/!3tA|gJD=C}Buޡ(3V"I!{rӓV)q<O㷯E^*Ee وӳJ1ysAqܱJq4t#m*x9h.,i}G9.b ȝ\: O#y&Yw̜v//͖>իlZ1ӳڻځTE-^/HD4O竺ܱ3:m" %?ݜ8К0D8i>DnLݧvowy1KЛO/Z'2ՖZ9JKPgs\j[(](Dgj]%'~sԮ@BS9z3Իی3f(Sn co edO,4L@fʈ(ݞWX#>;Gk}HrT#vVvH~*ٚS󳙊S EԛhD 9jS"SlP~6>Ns3Bůpˀ9o1GLg35bLQٙo1{ȝvhŘ"Yĭ療1(gޟlZ#J bjsc5~ &$gQ`?VZq sߓ.$Tz-w:S'sY [u0.s;Qcm5!Ap̿zgغ1;Aq}6 =Wr~|HWbեKeɇz>?-@Vł\.xJuZG@Ǧz|gxb5#ܟ ə{wV^sZδnmuV1`?ƛM2*ȭpO'm>]x,Ήwq?]) Dg*}J`9b߁،%Ə,J '̅5{iW:l}B81<-bJ_Źџv-Xp>#}"lӾˡ;-Pٞtowܵ ʷVL.U:lF. !sb17;O[|3Y؝!# Xh.I a$x*爿5KZʰ_Ck\y5p QG7qxϨk;zE9uu0ܵp*!w¢C P}L@FX@}&j_ 1D |-3`}%Bu:zܵ `&cx[P2dy[^h=C͕ѝZ{uXp;t\7yXG5`_S 5 o:]%Z oz]bXnWYt.Y17W-"ՐS wPUrƧPoHx2|Ezd,Y$9ǚJNAXjɉ8IQ ?},;ª ''>8C) oJ͂g8BkpJ e-)O0 ٙK*lvgsSQ9/Yjn0$_ ߫wK^ݧg.ZPF' vnZ^\cAJg.w?լ-\ 9ayոC3e;[ t;߯&|;7-Sy]nw_լ-\ 9ayոC3eZ-f'_:^x[!.Sxu|g'lwܸ<'ݟ)ÅtDՄ/MR@.@|5ad B^K!jC\&YhiEFߝ/Yyu/J #HJX"ewKiJNx$UIX-#@Fۙ,$8u&K'2:I>g,YFyu.K)pbe%e4*eTai +#b2|)2 YݎYRC\$%,R’<:̺Kuv${YhsS#Nc*\~|dQ ]B8 Hy\n(_@"C~RWi*XyuҤFX+6GGXj\IVn"a+8G/~oFXd2Ώ^?CWuG щ,4hJd;_J-~,lc1_JX}wO2^7V;䞿}= >7ÊS^\3-]ΔAS2z"]Jio5e iY֥KeaU¢Pv}%׆kL:uʯ "hϞQZ5k=Q:-cQ}!P#ej-?ʲvbGIeayGɄUa9GɩOz(z} ݁Z]RXT]JȯҪJBj-;xE^y݇(B VĢ YЉX!2$X~PnՋCJajE gFYܪE,dqV~YH߇KfcSȢ:aV}{ZavlAb/&/SSSȲ^Ŋ_LP! +~[ЯXR b|w%w*RJX֣X;܄«S~]p.dwB1W uKo uE). .#t`jmVme,ª!d)<ւՇ(KіՇ(=,oY}4TȂՇ(EB-C֋V?7ɽ;oLETKc2#jE;$*EC¥ւĚBxKL)&YIJĚXНXxM_vBֆ:YhGB[=,V7")_ªL=K aWW2ՆkC@" ,ւXe M7p/`ruͅeյ`2+Sײ _'{S+DZNp6!dBZWz?_/1*x~ÿOvη?}к) h>0|E~-`"+5|C;\O"$ԃngMfׂ4 T;Iss@:(kWFCmf@ej@R ȭԁ&"BejFEz`C=BϦ a+ n[lI(\򳵱a8?TC>!6[#]Bx05PL%hɃu_jhEWfW P` 5q} e+cAU\өxl~]P RM6욠PezPxD쑶ٵ@?: Ew}SBٵp5!EQKȭ[ |e,5|rb sfx.f\S@qo@@7>W u@ =K2Hh>Dik`u(* VPT"j h* ~^%Fւa=vcJ,RVXV kS#$XBJ]o9D{-\֓i7FyԄU-aaLR2[R=fZLSx3g 7c;s3[[Ps.#za:TN~\)EH-%nndid *ԌV%[/^TQH) jaAY'UקzH,Ydr1U-#yT(t̺Y\JkLV)Z2ZJfݬo%*TN~ݬo0Vh)u5ud15'S1Bٽu'S+S-dAlMHL8Ȭ͕M-AYEаh.">6W{ ɯPN.">V?8Qj֤BLg_r;?t]*%r_++%\W/fUd٨VN Y?dL/џYx9yC-\QHA7-^JR߶u*Q_N2֩5H)ykYf%Z=[VN!+#dNCrHk=J2 ֹ Hp#isIigya+ ]ƒu/dڗU Ԉ*dJQvgSAzi 9c^bV#B Z¬Ο^_11~̢^<i 1UwK=Q +[ %uqEsPE3`4{>? fl/ovNp"`ۄ0&8N외U˛/D/>[sưw|hYˎ6~2A5x%2E3VY9մ+$_a*S4DXhXjCsd^h)T3R+S4嘕YM;2K&Ph )mG-mdjQK; [1 }גޠ/Ob!ؼ q`qn Ÿgq; ߸>7K>8{bK \GRpW_#ᨻh=F11z\N77͒o;i zb{ \)}9^O_ʕмZl$4Ox] kDs%?<Ks;'-/@}=ANĴ4ЦGo=91/Zhrc͛`Z2lWpڦH8rfsg%}=WKzݯe4_-IvZ~ jQv_Oբ쾞d%}=WKzݯe4_-IvZ~$jYv_Oղ쾞d}=W zݯe4_-IvZ~$jYv_Oղ쾞d%}=WKzݯe4_-IvZ~ jQv_Oբ쾞d}=W zݯe4_-IvZ~$jYv_Oղ쾞d%}=WKzݯe4_-82E'>xO#|hlG{g{lG ˔mXlt|hl](+6Tۧ}_?ˇMi7KloNۯyWwAv~l| a{ǁ5LO{Sn)=S੼(,_=߃v0zoU{Wt=[JoY>[gn3|^ @Y~[o9a|^s!aD׭7ǎʉOݺuw8o_؉;[+oGՁߺ_\B7|p`Y*8σ, ]P^֊ki ?O?ۇ c~܂L 6~ xI"y>l> / LJk

\bv}.}}A7|"y>c? ~txK#~.a"~c?xkp8>\`ì a<Kp~ho :al[5[;{{k:znlNCtZ~k7g9rZ=Vr׭3}uk,Gڎ=K7WkҲylSvtR" =Kk6xi);Kk:z)v=Kk6z));Kk:zi T.y^Z-/ڃ^*yi<^b~viڀxo~>1?eҌ_ɟ=kJIDZ(~8nKhg|ֿ|W+ 9 t!"d,x'nIJՌ\3Ui^6l:5>f7'ǟl3?y67cAʐ͟6vgzſ)3om:Z }auiȚϳuv6F!͜35܌u 9YI @'gk8fwszc^=l ޵aCjmr{֚=^aCJp9a'{2i㷿~yy& {=dPr{5ig=f(,W|Sto2N4 O[9'k.|[Y'B'mﭼ ȓܞ/Փ)-$^|Ό3Za  -'7|V^~r{:*@9ɸ Ѕm<'z<ϻ%o حG;`U'=bM?]*873@ŹQuz_l =վ8?[Hzoۻv{6/{o朇@*J旷7/|$y_ނH'8G[(8=Zmykt~i\G2_ꭑZR|,;Av#Щ<ͯ!n&/wPtxݴt(!tGWROd!aڻ:Wj s5nw< OV53^0ɺo۰o8Wѝ达فÓu__0oAwYR{v} K,ŷ$@N{ rKz$k2Z.!3W͕њb(j6S 'k:Z`4/?ԣߋlW0FTBም ƈJ+d'+1ҚUIOmɎ[d*Sŧ(a 843[f֑ EMoco|86y[ ?f SkcKʒ'CZ^s!xro~kZ|=S!aR\@Zķ;`n?8w'ԃ%Fѹ,1;`|5$WfYP:{xgK lW;`[_/.XɃ$KY68;X])+-Ύ*VO X] --++JI+hDo~ٍCEpNK<@K,NnhݖUm|xXXZfk:~@O/cx `iyzsa3{kO֢>s;,#K 1}Nc_euBn,}8X2->C!KA]4- -+=Aw?Af  \.~~KO^34yA} -iu@뙊h;J8OP-$dqEpJmu$7zcH\Anct;S)sҽ GCU~}uCZA2nw!]-Pßcle-4hG#bnӿU&)~CXn X_řPG"D__1r}+߾ß/ةӾaUjo=4,G,+hX;`uڬڱsvC+4;RsRC v,[>lklp6oP9 gpwKXk'k-JF(׃tto0Ƶ;]G~jZO/Ƿ7 <=9%npf:NVZ]R-F,cߣJWt{ uZZ/:Y nJ7Ea2=*6EY:9J3PZM̂s?Ď($>tAt ,xPdAoYQflv ~ K&ůAq)0;Yk\,J4W%U*9Go z+&Bd)iHdPkaMQPmPo%důPqê$kuas[\ehͮ^v[\SV%Y5j8ÛۣQp^9jQmQRQjb$Abۣ:o*7;'91u^ڣJPiV9ZPkdWAI&~W\Q/;G_QqMdIê$kN&<*9!҃Q\ twAtw(6gT}@!ߦzSHG>R36>R3vB?9=*6QcmMˌ"LlgzDt#%fImport/data/nyseListing.csv.gz0000644000176200001440000014044614673226105016266 0ustar liggesusersrH6x?O)> &b;)qK"%A$$OPdf~=)fUʪ |=??ޛ/1㽋?~%pv?h*_m62= ֡]|F4*p cMuo~xoNИ{@ix٬_+*& 3[g;MidZW-iXwٚAM{1vfѿvy2f^?Ŀ;DLG{o'p4,Ry5v\,ppC'{hYo7_T9zޛgß~dt·wo!W 7Ld:4͏Cx~ۏ^xfF1$KVצhTr 5u;ţѺwg;Zbv?] D9uN6RjWqzOj-kI}+쭍~;=D=;f ?f9Y _4͠C9:42hwOo=&(L_R- _"lkC#\"h;m|02;~n$>]UmkhgА>c]|l㫭(6o` >kǶٴ`˛>Ū5qګ9_!+6h-$r7br7@pFU7o-^{{?y{;!Sv&DRσ -HNͬX8N?yA'7QSZ ~;YfîúuNoL$|1:[qOq#Om Wl *o]YΘF;i**M* ÷LT} P6K=E>UY'Fxq.T^;5E^^#鱞"7kȎB1˃leV 8]G]t>G-/[HG%fxbl{$ޖLwoTJexc/Q$[2ņF_;>te˕ e^:R{ۿ*la{ynY#RJSYm&V !*T*z=GBk1^|#S["|6}oz7&^,*:Jf*Aooǵr篅FMU.)X0z_k=&~SK"|̒|zdj ƞs3*YұfV[^<9|"yV_ p`WLQ4:xvfF$Ub%5~;3H(lX`40۞Og`WPzjU!X6- :9[أ qg5`E$^F ֍g4|RCvБog}dq#aԈ$YF%UC=]\gc {$MC{V:x9Y F aM NGt*}ϰ*%¤{klZw950254̰&HfW-{Q 4\JY__ W !oq'̒y.e+Dj )~;q!GJ a=z{xHY*fyp|3.!Hk_\E5q<}FZIؓ)kfrKt?#iALa5v֢g8r9iR*(а8l_h#o :uhT d>!jD׽β0Q"P0E]7 D#`ΗV l4=˶XE*6Go+2*E#>?V~F =}{yX-'^k^$uz:j2j(FFc6м?Ƈpz;!s~{t5&b0|: t·z&ۻ0rYcdҾ?B-H&#'$5 `jœFh Q JȄy)9-̏-%)nKx3C]˙^곓V/FN菦igzIw,knTciWn͍'UB96*h5# 7k˿߻.F~X#K.B7ve,|C+U3%tcO9$bv/"Cpބp ]U%PϢ@(bn ¾_FNk6a n}Tr%m+PəxԑwH)tqusR 6J:<8ϧuedr߽6 VĞ0j%F;XX B.J oEC 7JU\i Ji}kT^q _p~4ԥH-jn}akicQRtkQΞY1`i2!iE]9ߣph{ae5=o4: ~jf΂;zR%w ާEo2=gvPC *h.V[GqKyP6-T }cAafԂaE".X$3,8qcCt.͋sCJTdZ-RHW \v!CR1TkzByN2V}1ǹGkoA K( ƱP{8*M1vx!8]%ԖV56o^ˋ"2u܌gVIK|mGk7O|12;9lwq#pg.INSɁuyN?'qwH{hM'!C $tɉYZ^UGc]ܡw+˖tr(Kvcwv);t BI!3ԅ pek8]XBL|3}E}+]Eɩe־X9Kӯ\&B 7l-TyóٿBN{wYL+28V {^{c6wpRncɭ ےԴf ߒybV^Ԗ|~xp>Ԭ;͙u -Z%eˮ|U0\@dKnEnno1ear23uS7/+dCDۄkԒotzW 30ַcC(_2;]>wYҖQ'0^Ȳi# fF[>*E&Wݕ'XzRHTeJ~2zbQC]A*U놻PLr! wP ra ʬdہQ!!cS/ӷT)TMrGBzQ&gDZo@bFUm7)wVx`Ѻ~tՃR虭_;LdACj0 T͊!zr vXC i[(|Fji~$!=@5PuG^]Ŝژ8Uir&l_G{/{}NDոGG/]/l0*+ΗQ-r|.5(@Ė>'+hP Ծ*8} M?kYhM qP-]0 ׏޲sbrM]?iJ*֠w0b*tK []K&NL(<-o}RF vJ*J'ªxt w҉/әOv׬Xn]~@ 1B2v NeAR{K|cl R|+>`9 r΀$ ^_Ryobc }3sc8w?v165pƶ*YIH*M$au |]ilT^GX$QR^[Jp>[JߋSV.2kکu \ !2IS30d 7/^"ըJF3r P-*X)ʊF5{ 7/ϱJq("$`5hm'I|PsDHNjaWRWۘg$%.{l51ĺ'ێd"e8+ QBQ$/&V,rbH22%ԑ;2w,ު).jjpz<[KY@e%rJ8JVZSvDž< u ڮǭ*Pv'Rk v/VF K\^0pq.$ 4j]tB ˳2{O?ii2ȵJݬX9L5SYd3'`tWOM[˅۴8KgA:ܕ̎^WqE#ꗬ:^Iu^#Ho3W>9^akVZ;c>ƣ$Z wcC[IşC _Ыb9o{{&%#OIa+5<| ,4"^kcos"YU|h Uyٕ |N[<'幪)?A<)26n}l!1ÍLonAw|\6dp!6|g| 5MwaT ɼB)_Sy Қ;=vgO9%G>UAIw;/~%9zͫ|쏔;<ɓA}A|5JxzV~`]\Qlgh  bivL3zt, _s2v83:⻍2;}E;*`3 POA?Q(q$I͇ζ(#R+$9;vVQޝv*\6!nQHa Nj{^b"D*ܯ@Rh\ݜOI-o+4āIS{|~%AXy\Ѣw w>1""fBh=M؝X⽽QkPJEb[MsE59s{.Үuo9*]o+OuSrdWC~CݳIְTFWp ~l|g 8/y@8Y:YXug\@?}Uw.b- VF(q{ٍG!qM\,{PJ:A )4B3R ^3l`A6\D,Ő5%Fyިix>?9L ;ܲBw{P,nDrS9?U ta2e<{``-{^"@}m67NE?ԅeKS\9hcHwk4!& cr2 7NsGdnBhIULf> 1&RnJVea{ :V|yLIpa s//Y@ɩDX]BPљiWm|\eJ\Yw?#J˳ IY-b"EȇÑ-fUÐ];0 +]ʎtsHR ɰH|Ⱥ'RwJ]fu&1gk&A !k3ov:60<咇ș&O7&$'&x{ J֋:8=58!;IL۴x&>xF9.Jaf2a?~_nʎ_-Ѵh gIt8\SFM `s^x7{uO/d"#KgF(oyȪ:z3EuI95ʛE=o`δ~&XFqgXګϧ^GAcqlDMۜcAg:RY\r3M`:v|wPݯ'Ճĝ:ǭJ)H6wHT>ݪYMLgRnģWѣ2ɄPԡd9 \$57ʀ~ `3w3s崯8 ZBgW}(%MM8j|L,o}yM˱Nη[NȇfK~NO@A`'֊u6@VTSʃsn!R4<rB$ğ56Ti貞c" SΪ&3'-Vq%c}8YԼs'Ρ32ح)~ڡƝ?f8+f.е0;2iV2~?d0wfx~|1hq8S29Шr+L[ sďH3VbFzPC\Fi)K虓yGov扙Jے&Ǻ#Yb2`g 5Q+9e%*Ƃ:r7l`CEWF#'!Ŕ 1}v0`yc"sg^30(.^ACR;%[+sYz5X;B̒4r_uq<Bk+Gbl$\ ^L'%Bk-ZF"p<)8|cp3J6/\B.shtܐ,魝yYK\na*pTt \Z8\҉>q:Or؁mwޛDA4ȝ"&߀2:)6^7, ީ*XIDp\d[5#"vT_+-eX^B -7G*Yz]~^TחHZT}$̒"V"K4zeo 6r,.:.5 >R# osIyqZlZGxWtuޒ:v< W)п WB!v̭L5eHA~ o"DT qKP#`]Cvb9yMSe%ViG,Z>o!Lc|yƂNf6'9AH hIɩ7jxWG.Gm`dG_i GPňuj:ZBaRY“}OSRȶ]֔%rcnkښ9d7#ON.5BG@x(9'SZ+SgVN]uFJNc s./ 0ngv:+@Tln t9i5xp 2DM{H2kkv,+=̐GU&Ah'oY=z Pu3dѻX=P Vtك9;A܍|q'%KCaԽaBT\w !.d]`J*y݁.בm'a: fBotprC":uy>kP]NF´  WtM_Qō~wpf} .gw)̓tg&^ j,/u)}𻏱3 d>̝.6].ۨECUsQ;Pm0I!FkQYd3~K\1^Q ׊w OّO}1!>1wM]WWGmK9\ŗ R0"E4LB'PWQ׻=wMCpa B' %Y nzln_6PZ61uV?w% h >rl'fg^" .?TwxU{ƒR;-wW|h*Ym9NUўG;D>4 [ݓa_AUtO>T1d2 \C.'ws0Xj]! 1ˬղBl쿂=/]6XhkLWUݻC',[ϓlzM a\->b@0˱签rx;׬i?{gYp1Z2dhv9ϋ~FӅj0jQbj&.iv?%Brnw>_&u'rEDV̙&T& Ҙ,^PI/za>efɪ#^^|+"ETw*ե=k5SI@ϠHW9hź^^[)EXlGwgru2V #9k%\%bftӠ8UY& ܡm!m(5wǗKM|]NH@Hܘ|bT7 jhӑ/'[^.} wʃXA.&Q4ϑ 4+YR̈+we0:|mgbFeב}?G}ê()olGfTUTgnZ7bp<;gG7ѭ ļ鋓"e<$G[`ojn pJpAG9'}[BΙ`g_%@uZ-^ɟ:R ~C:zU✈%%fYR_C>%6UݸZ]U-.JCyxbut2Dm`LnL$voiFj]CJZK2m4ph7~;w` .? UbO9.We痹ǞR[ ?3p&f̡'HG_ճnysf$F1td8_hg!!Qo=7CΈbc|` (^VqqrlΈ"?z [ rt:ծGA ɋAöu- Hv )UqT$* KzE] J`C&w1.jVla'lHJwcꦚN']CA=l 1ZT\%D zS)ea5DcD%p— xƏ1DXj)w>yA7}dTthvάoUCXSNM-= P;9ĥ;P7!ǽ0iV87iDl6_͜bM}ުPRSZ]V5Ҡ:C`#QOpc;u5 )nr 3+w$Y/ (ăr;|7q5qrC>Y @M1_$HSI *b8Sd2a纗Ze*JcgUhx{\fB}Ƣ猺86:%3*$h@ ^x:T<=?XFP NDhE.,0BXQ a-}ߝJ8<ł4kMw-nE$Gǽ'b ivu]sƤqM{ZUIP>:0bmhFYB>jڡn ߔ=4, 8# +>.WQ%Kz\BHc}cOT}6YG^X5u4J6"8|87K7ͪ 2tZEF.([m=z5Q,PS$jV%{ϝsɅ9GT8ܰ-|'JPsZƋ릲0Zմy.M_z\ R.'v}p?p۴+d\C_Ƃ8jOI{~+pk)"ToRnVE[7O'{x#TYu]K&P'A{5=n*XYr٪eZ/Eyf{̀~)2g PHk v)^պ. g ǝ-ZlJ(,459$2]iE)%oP.c_2Tu(mel=^nsآh9%,s{=(A}1+zM &^IGtB(3PqE5ԅeGVЅ#τ2)h<[8^ʽW8PsO*7OX.mv+n{#+kI0#G[B]O[] LB~wsEw-FE1:89] ;%!b}!ܡpMͽj-(%F@&\K yf7^vA1"'t o8펐]6+*%#֛MmG\߉s7+,RW@3g'6g=Z=G&2Yk?":o~1=.f!AL!nCg'|h&Ih/ Nsv{ vF`k'qwrmHߟM+GSx jkǙW}˅~V&$H{)︀P Qkz E1)aSFnײ븰(D-|*PXزW8m(AR/;&Ab\ oϗV5ƬLeTzb ֌ePA1^3A6 =ɶx'(g w#縓ԕ]r=%Y9}=)e {/RVж$~>jZ6lPvi% _2eibms~}n"P/dBnޗQN~kf a~zUyo=%FZ{@ pBW?`{Bz5d.ƒh$D)<)Lk%C7[ lWƟƔ7'-Ġ؉S4L ;Mje+Rhy^Bv? ]1Eq!kP-v%53Yrva~E/c=[GT ^BviCk|6ֱO[,F ήXts2&m.NN}U*;2B@aH>9}kJNwP&}GE()2)&fewTjuaƵzrZF!\w;5hUTvKpAI|01;S4u}J p.؏.{ֽ!.ۣܓY>K7*+XwSv@:n6Y\~=ïFPv;BZ,$Iw8q7胺ϔ}R嚘qSwh,RE!"6)g5rH Gx, o!~F AN~A!L$ĮkkxƤk_ ֐#5ٻTY{y57tL.jtZd ";N,f&마pb}R,Tob Zj62gȷť.c{#3LyLX &;Vw9>{G'`v̇Yrd2RڜZ6XEk/P 4h?%Rf6Ĺ^zM BįpFKLa.=\^l*C+tY~uup>m5|@ H!qMlls Bi!DkY<1b6߮r{n 0ئ@*yg +7. :ȧRcIFgt[р9U0\UJOJWBk2?.RNE%}O6zUf zB"g\ y4+8]XXQBwW3XtD?,A#1GG빑O#)SRGvai aMYh6sh 9mlZl6&!CO& 6,t<FH#AIURz$!Ûnw'|{FΨ!dijc^*ιAxl&_$| bp;> 1JCcF 0pc*fQgr9Gu l,h6/fpävqTfk|ap48 eh?wg4V[~.l u 2pFҬb)cè! |vA:>Q& o(;VCϻ{ 8erSϛ[\xr:cuSxW7,,? i߳gG]g:[6MD$D3&^$XsQY8 g`W}zR5]c3 L RΓFꄧVHXMx`]+Y ;^fU&uK-" ý0b!K+l"球*yfr8bB/rTMƐ!\HtyQZ/yc=7>d[5ZzcΦhڽw$B Һ(Yx׆XM3{D X6>NW_~=c_oBg j+]'iXp&Oi|g}1X7]Gޑu@l&O*x9:EPӬTÊyESX9z[ ã;;??!b%5FoIsec\t.GrYчŢn*y<*Zvymĭ~vo Qe9rp|RBU+ ^+;xoCY"8 rL*uHr 0sz3me5-r޷/r*X\˞eLӥqq#Ӹg~szN" 0<폇7/_e6lf`֬AVclICR6?9JVpՍɇ vx¼j<|f;wk #4Ð] ^EuE1!r~e]G[ZV۹3869_d  I%qMϩvۛ(YO5&~/~+5V4t24,'Ayk嵏H]G⅊,m^2!Xҗyݻ v|aA"8Owޓ8>#4ں 9Z#MU&>A aF-pW2&9P%o}=)RL:,(2@,T>՛#ƴ@>NŜPLc_[u5#3j+]~#N ~$SCQ8I0[,Оz[ ˩ gpǓ|#ol;8$|N;AO̦_kuJo,C1Uqˇj,cQ|V ceBğ@u]stCp)hC|qgq6{h+Ux5&HbaQ'˕،Ӫ0wE? `Վ(= 2F\S<~яWN*dԟJxb聀Wa"+JSfk8H]5Xɞ=bkڈ1P'6e=搝 9QdžK~KTGPX첩ss"nw񉾒$Nxr[ &ZD*njCF-m /]o6LRa <ߍ掣Qrvp Tam6^){;H6+|BWM,qm=0wG#kT1o4:۹WFQF\?uINv*J;RY|/! y5NnĥFnzln6G@Ob~PGwkބBrLv/ì4 v$&hq#IԯN|u*;FcҖ2p osصx\xZ'!vJ BMȎ #5%JEL׹ 5n c$xwO0dCP:F"Fpt^djZ\sawϑ)z3OΖ- dܐCG4+V+(/ޓ pAUkzF84Iq|%u,@7PwưbO߷`E7ت]?${* MUS:TȿwI fflSwئr^ g(Z{0n52QW ;W GFI:/Jos6)Yb{ >G3CJMz}BiK:G )U:Du6gt[HD( !8G ݎ!zMmlT89۶XS]e$I'h.k`WsJY_+ |;84q71C_6 nEO6>8sFSǩ]B69{*l_ ƕ l* ORqH=S`ǩ€43F n[B`:'Y*d8+y7OvƐNO P.lۓ!iNd%hh4c0@g-G^nu;[)!%f4CA!{ԝ%j"]"7A.`Q3Ak/Ad/N εlNNztIx`~SLTv=EuAQ)a-A]a ?J< o鶷>ms=gYXvpL.kQ`Y:[WaؚD8UB 2%o J ˵ d޺K:c\LIjEX8-}18 ia i_&`:e*P/Ɋw36BƆomc6`>ѥZx]?ۧM&ӿd.@Rɹ~n~hn7݉} _=SؿEwnk&q+wt[gWkܵ߸;ݱa(~Փc[6>ecVPA\}P :?i4@߱vG&$$_L q)عsSZ]=KX 6lؠFvvy|7@wTYer ߅zsBU7;ac{y#Y< "MjV ,Nכ0ɛL+Cn' v$n-\39WHfGI"|l"!3AZnD[{ X<# rOІ `P~9'-4'؆>#o d~8Uc\2ICV6%keij2[Z#X,i"MƬa+،{#~Y<+5qnCwl'-ԼnŢuxEaRJH#sʂ >!`-wQpx0I6N @, g?}P} DY;6ž24ZBX%=t8H%U 8sɁ~[z@J?V[>88O 6+Fx7%nT +ȅW︈ʡ̳\v#o GBe>qiun:v5Tkf!f$CN.o5kkr-SKINʬFZ('>EkܪPK5d;=mV x8?e2=Dh@#3pG]/{]Q3*X1K61{T׵J7t+~-.'vwuM'~V6($Fzlui I^q[_2dwV cO^Pm }_r!1w? kGѩN>antzP :.%{ڕJ _c>a4Aa;9\U ${R3 Js4IGh屩-Li쿾R/e~<!ZWjX:MM IȜ4kh݋ p1A+ \ޡ4S^$hZcO&U} +_'Qͽc~fT%_!,K8}v8"XUx95*)^k_x[ PFǜx#n).buE/]NFҫ*xɦe|s4B!Q bԊCux, &Ԩ_n ǜ>HWs F$ ZV13^F`H/Q="Ms/ڣ dZ:OIUŀ)JqV {>_\Q.6(D{ NNh0%a|m_ů=eȬeTX^(vFfSh:pgSckG]ܳ_&*1y ,bE&ٯ};UU~dY ? 80O:0~INpI~(Xq4~0D)sfAnnG-c44zkI cx*Lq'/FYtNZLln]NԱ-z6iMlE9J ;a+30 FGZǫIL KQ.@wNUY BseKIR/Smˤ/V$ys:Hm"p:lؓyUw310h1$Y:R؄dM]M>UM,*pbt<)G@k%NYфYMl3f|ܯ\؄&3†mhw(;:2Ĭlc>K5 (, ԺYLf#QQOG=')gmnOn:Uqܽ-+Xq,\|yuIzAdnl-!_uHvMGD}׹Y^M] 9Kf7gny`Qq,kwB3PEq-QA66482nlk0dxC(z:N9$7ESc}3:5Ys^.LX1udl\TJ,750_*EkH7$\P}ԯ]⫃r"3*6/"ȩޯ dL$P*cV\U)Wq ,IP}[BEs:^:"(W);Mք{{S}׸ QT{GUFVkG B4niY/ NPGـk&aFcڹQU,f5Zu8=S!CpYVj\5 嵽Q0툙 waj8Qn9 J*c.$NÁYksq>;|~xzdD!O汥v "nzKq}*./} S&s=ވg2;/t"4sML̥K#;te莥C>n6pcw('s.%K:V>A%*~QbC&e6M$*4y0j5|Aъ+Z1Y1X.㜊%7 -Se B|,A<; q"︍# uTgDp)c9dRL^!WP뒗CfIrN|gAkj8nk:f0n% O8ܣPny)* @9TU8qXBcsY>q4zȽҖ&w q:M&rѣLvn [zhlͫzswfB Kh@ .>(f '>ǭG`?şA_7{ШX@s!j%M/j*LDCjߩu0S;x ׈uͭguFk_(BelnִI;z?(bJ+QsZ#n;Fg((-H2WGalܸ߄ܝer\ݒ&E.ؑoLWaĬR\Qǀ9LYPtha&9<H2 Rc >a"J~K/AǛXM,7QZX@G(zE})8y*t ?3R {dpiq BIKٴaˆBpע\K,9"3j5K_>~B9YFu6RR1-5R^rlk~e0| N"гGTu?<1>;h`}>uQzwah,VݤjeTR7d׭P=RJհՄo%DSp~r6+6KLA̹2o/)o8^&v+ߋԜY,44Ai{ cr|1w Qm4SWq6ҴZǙKlbJjpN1FK]ήfg.?8/WxS+fJ`CI+Ό"\٩]h? _xo,`2}wd" 7FO%X+3y<)f*sL<Oe'0IC:jOK uPG5 r㫃UC_c>}مoE'>Q+aY&laoT@[%SO[ r8j,:sP刪>m)hW=j2eLЩXpnȚ_exS:ݴ5)kg},PO9>p?W\M9 jzx\aϖ<}ݮ3SyS}Gp8z7F\jcz%=N]nqkOǠWxamB;5Hs\ઘ2=cҫi , ؒ/(b'TM_S82 ;eSR-t1 e"pQԙT37.[c72RHV Z ڟi)LP?#k% t_e*;"W\ݖl ^_<1#s3֙}14:;AvOS2Nko7*r᪬lQK.3`kpܩ U*k;W0iJRueMY+Q*~o^oU|`KAy o`C_5)67F7uc6?;[n"fu9[v >[Q* xE\B1 ۜ$+$;ĝ`d o!%TԶceV ^>'fz;´L zs}Ŭ x;*~SR/)${~JGj>̛^D闤40ui2%=^8M {܌] gr#f ,@|bԹpLmQϋ+{HۧD78ssO#uqcU pSB U=yuCyBdtԞj^bBW &LUy֤-D3=uiMG&YSW~.e1鈯ȉם0 av!6olPS2q=S9@)Jd]00[]EN:Dy:.]+We:Znu16v%w9TT8,{N{-l)=GI8[@|FjUPdx̺#a4䠍 { >Ӊ^]՜tB$OeK3f#FΈ/臎ǀ:YM+ .uTbthߩJ3ʦ62 ߄b_*d?M9^;t2UޤJGL\#أtjZmb\~[ԅZrT0(C *r/6SdaTJvՆ T? 9I?\n%h&S#|y*Tn՗@ܽzKUC6Ni (]3oC ~<=? $_0 tMՎz,ҳo)l?ydxh~TV,:~zMY]gSO(L˶qg<7'{fl~v="_-tņ;fZi SMԝWjltʉ,e*bM1^ħl Wbe{L,8I`t^ƱӿVjLlnH@hXI7Vz'ҳ< ~ÈFE2i.D l=g޼FS}|UT.3Uy1v]m1ɣtc3Pa1J'ɹŚƕR@):٨/PI|U{E.kU z_\,j J{C4s*~^|s!bG^{N)om7hR9<:k6ɲ]V%|>6ml9}X#鍈|ifӴFC KI`d YǶzFhNɴJjAh|jVE#yѕ%+ pq,,EP~ ]+*H(șyL4[((D>B9-f 1|dW=J(WR[-[2bmj379} ޷C.*xf1;l-uo@ dxKE}6x)Zk P&8@R2^3fTZ(qe*9\f`jH>{KبX69kCȶlf a f?z=ۛ '/Xs3 ;jvY< jAU|ιmC Mҋi٥~V(7.ζ1t炇~jL(t2ұ~" ; ̹ujRFJÜ,G<ϸMBsn` nwYj\C efV:8}"x%xtȈsȝluu 7=6j͹+>!M @,+7aa gԕ(r"s3 } i!G+qz__xL@fdWH5zcWLFRlsιey-ib7OUjo/nƅy֨Ŝ۟|Xowޖ _,;ŨQD)2:&O5ײKBylkxm1$WӬ&nOIm}vz⦻q~7_k6hX-NIגˎf$x鍅X8NezTn, 3:gBrUbg^sޗ%dIp,d.sʜoCa2з\pM/+1fYh ѰMzq6iCy_'Iyйe,6-fEq޴<&U2Z=;:G!7+&B+E08:tlBV y )/G25ܥCkbíV;pf܅{qv2v vs\a`v C.Cikxt%_KSz2:hۆH65'6$8̇lmajx8wj*N4H4a-q/3 19kkiqκ խQCc]7B?]ʳ){[T5#.;aښa_ȹB/6&9(JVЭyWf1mcbWfs5 ?7XGux?3|ϖQ{Ks0un,CRqtyu)GV-)zsq;cqbwU!.)}*hu{l{G߃}ojea0q+?bʃ3UupQ0\м2I? %x O(Xp K4ˋ)_ j*MPcOh3%"Q he"Z_|Nmc8~ROilmklTfHP*?oz ?f?F$e Km*5)b6;/n>#Y ~ι49˘<=8Q,dK'hxM F)H PH0K&I2HoǞ$RVI{#cPTؓiچ"|:C¥r /?<ɴ@x>f~w9j  "~J;:i&I{O WDtΞ 0MTY@x0 vdC VιuQ1 )A;oy AF|W5}:B댷'IɹAN{œ\4_?zU!@WN5:=-'}%{g9!W'  v4 zf_1'T&0'MO^X'|u@4k~P;2ШVej-m{ib-M +Xpg#C{38)Y˅«#m0w(x~&NtPq+ .Xt&J8ep"e= C+,Ÿ^֬78m6AQ5c =ՅZ<k1Wjѕ:r '*qw(O i_"MӍ ezXY 5&S3U9"N>=Ob!~> RfKI'!qdBi$wT~w㼟YBW|o6>nS/.4{XźPi|v(4Ew?On$G,HLA1>(,^cMv+Mu `F2 tPiC`_ d0x-%$9 ;#wx8k*镳_ [ x/ &4ŐCAH9/]q ]6 ` {Upne=,8#x18>CJA,FĠRHpvơdvFFYqd|@l\gT ňyQ*]p:!ar)?ͦUQ,G7r"XCqt,&x2EHP<)'k.|scmNϒb6I1 -tn(̏F;ԨYA x#;0T,|@ a|Neizueolym+(XEmvZ<@Y'f?ðPZ"&&?L7ɡcV.ݪ7{w6fj#;ÚT,3isGAYO41 8VzԋWs$YK@E ʘfViXsV`;t_ zZb!\I{8Uݬo6B ~a5q~|NQ1餏VǜhNo1icECC;p1ά݄I^ȟLޑ;d1-յH&[ >GNq)51|N{OQR)I G|ůN|*,!zJ1cWLˆ1V6*\ɤ&V$8U7rcI"l b;?(Q,hL^MA ?N&M 7,NpR`w̄Ĺ$x{;_ PX09@%M7Qhb%z/%G'k#F]l`pA) %xxAiXIϬ#0l31>>-O~LK88ц1<X٬ iѾJb;x={Mhso] MT8T9<&'(Wo'bӬ !W\ѠwM`3)e54UGNܤNk3B v2z/ H/WDQGi6:'r$L\M$:6SFD[  zp]*5kT׏?ɹ-p:1Q5KM@us: !9SF'uAJt;Qc&eDŽD*~߾d ˱-wķsK]CpLnq|0Q<ۦN7bXo[{?5uE*FsDOjRi61a<$)5 1æOEĴ렚:=.P"ZA󔁀o._y0Ѩo|_ /|M ڗ(HINStVcwk]rq~}9Zh-:_O^GB]SW/&s8<:RH5x?GN~޻00_ <|pax{0P = f;o(ȵUvg3x9\1@zzzgך $*-مP9ۜ3]jĬȡV0\SxՌ=He.R_M6sD4ҥױǚ )ɷѐw򣛮 Bx*+^?oVè5,sxeJAK:1Up8#oY׷*lC4wscV\;0Afk3zi2;Oa˳ߕBኄgރ(+ܒsu"t{f(B진2՗("ZhBq1nOPu@8rnXܮrepsC]., v¹3 &*Awd' svʣ(1;wBc= +W> c`8}+6Sf?x9_ 6 Q1ߝ•>)AY.pT:7H&SxQlg̗}, u/Cy&q0 !dP䌥c(2~:cbL͚6}fh=. ocw W 8.\;NaG9$`X {-w6M˨=^Wck6b ZFG]7~hI`!eR`Loc*0N~"-aM)\^#8}Dڼ djh ޒoZdXtxל~34˨qL _3pUBXBj?"]e C䭠u0C֖WKBot /JX ? !؃#\~1:gy4.xߍ=)ߋ0kK>pεo] !kG3}ܴ~}ԹzPXM G]KZܾ[k,(S‘ΦЅPmieT"BV EP(KҙJsf-}BlV*(xg˘'[#|BRFTrM2:"α^*:ܲy_e@ X~6jYp# M.J.RQ~JPi';SI"oٛ&լ$ɧ%Fg>Zmw?;}Qp(su'cƲ2\N/:4{,3BÆ(iNo2_b ytuhClϳT@㇕aH.PPD9~qn|'1sQ,in>!k⁹;l֚ܳ*({b]p *(g,]K!ʚx/ ai4<-hөL[sm0OS{bK 88f ˜ ]1uUP\X-ao%PHJmL5Bs;$znVh5z;mNVPx49N?Y rsyi]=! *$y24q_|t?UΊπ>E tͼ`SJWmѼ%N"[ܖs/9p}`N'2'k߉ Hb!; 9F}|/h3U|#C +p&@Σp$J|3<(8**'_\J- .w/K A.'x/k5XABM:ձm7Uw9-m,?f6` :NҪ$p[;)LBڎG9Uv{v9g,}BE'BgJ+M vrۼ}n$f^*6m('ټN@ZbMn]'Z;n'=%됖F6L\![ ".WR_oìZ%|/ws1"s'X?BVcoAiNGoO 7mR^y(gI㇗wy~DAB 2W5r6WA`6 ,SyrEG3 F^wk@nO7hJWl-z3<5޴#x㼨8ML]JQ.{AYlb{LJ}_H0@*?E`0w3x׏)Pۊ Fg:Kxq+KbzSn3LPӄ\os+Zm"Ry]HJGq5 XʢF|P_ a =uV3kzZ]b,,(xckDWjЅdFĩ 0I!>Eik)7A/ڤbK$d1I31I3w'eeK[a޾Q:*KxDvn΂#u4U;-&3?r 3Ml bNlCBeUE>re&lj + XЄ{w;kv 8-w[˷cAsbzOժ9XC=8&-5*oS=QwE5c^nC"((u v7XE)dGhE.'Nnv24 >LZ ˙/]NqC!aQxZrvgl-f//-U$_S8N~EG6u\Ĺ\_'HZ&! no>X^Y%/!杼FaJS PHI"(m:^E+=s8+\BބCޞ 2T NgQ\ *71I w F8er٨Qdnwߐ\"Pim>~(fz Y/$XjI&i6lrA,1C @;zH\{yp*+'meM\,vq,VmJƏ lذ@kC9Pyn0/],ؾU 6e L˖SPΪjNr> @! jPWk,u>Ȟ-̘.5g.fULKs8(TIsƄ]BweaQ˔jQ&$ :]\4MSTUe_MicВکyH?+v[Ba(gr¤L 1_&gfx?6N=ƇӇ>ij oXjy#,Duo染X^ΕPY TV:$^"VOW}8<ŌZC-1aw :)-xdOf#l_7)h{;rntYv9.2'mDQ`pL@&aŏ'wgd7! uX{!BHqTSmI޾_N=#G^r4f#ĶRE* YEϜ *#~d7:̯z"]}NxLؽ3I ׻8}7CKF}_ g6U2}=($K}ZܢOW#ǟojH>;!wq\y6_xп9J  r?")~Z^uz?y(0*^~~t4Qc3Bm;\zadT(xT =WQAW=lr6RuF'T~xš+rS4wM'~m~,Fق Wr G000DO=CQ^}ͥqq6 AѸ7,G%mܨ`\Q`e Wɽw\<2ͳҊv~\s̻j븘|ʝ,aJMrC([5`ܻ1\@\vf pdLևcp<L=*Q?Me@^=C񵹔Zm%t/0<oI\p W2@׾Z^MJZ +%%k?3D}xǩ^^%c."NI{.efRIed{{{'+3JT+aI5سgy!zĨ&L0S}4g<eCq*$\!7a⠀;\' Y+$i[aXf7R&Ы{ym%A/diǴRKZp hirR8T~꒻Q( "ͩ5~b:,j)._>lr96PztK%7`(:7R}-Gp"xD]TN݌(oCSue2a1K aZ2VL`WJ#ԔSr&FVAh9"o[rB`3iS~`r}ژHYb|gH*Lѻ@ xxҜ0A.r^y<|tay鲀,\rnJn|'&e Mj鴛?a_(\皌~:) &꒧c]TwXj/@\r*@j)zR(z!(o3oɡTbgXZŢ|KcK'N\5_2P\FRU+ѽt[ݏFJª͸A& \}(1,<^2FBJOX98q-]Pz4,R-%5*߇6,_\jEa|$/NP+Y>357s%7MW޳8.QĊ+o`ejݰ%R+6&R]"Ptgr=*Gem 2suc4sax=4{LÝ e3^.#_-\xhcۚNlu٭IFӪ}oPb }(R+gy9\7]\D2G9ж@^(~rD³";qv M Њ;̨SUn%9Gr4GVfCy_ QЅ5z?ty41/e ;S,c'WJAՊ%[er\1<}xQB;+뗤h@];a2΋^ì!PUaߣJ!6gaZXDsvI+Frpк^`OG{ mXq3%[.nX!?jVBu#_hyGcďy _@ζ[GW=7lw(dc(qL J VcydRQ6j3ϥK45D b?+r6 .Wb>BΕ8F ?i#Ž<iqxv&Rl'WMi"h[ZB'CP1 l(:H&AId˴0t )F'y IWCʂݖqz<UɎhu (⭇x3!.̶}RW*,A1,8謪6j+ob 3S_]U-kD)$ӓpgK JW܈2 !cL8X*~Ix9 K`57bG8zWRM:J 0F'\#$Dr'jm\kxNG(c㊃v<#G=:3P^%Lf ]Qf͂Ur>(W.:DW f&HG z4S3dv!E'!)􋸱gyq{OJOqO,$rﮅWN-.WJ9>g''Pz<0,pY|WiAԔ vBi*m &+N'eDDŞl)jYgry+vB{'*t#sr&sVGu %Y*&>޹K *lcPoѽ"mNNu9V^}o͎`٦@IJ{#GY<[PSf 0:x]J6 פDZIqq#oo*(x#ރޯwm><3Ï:`ܗx[>?➖ G c3 r~*_B$y_]98P'-طzxy~lW^?ίz(U |%uI:=?!<ԉ2m 7==ǹp6'*R󿻻~|D`yd[51 Y3ڙޯ_asLTލ y \Y>pQP9#9FX2W0f+9B Hv;u[fՆG!wA.'$T4KJQR#kH[p/xv,kU7)A viOowAM(M||K܆'w!J+XMo{/o)6F3aǘӳ szccOȇ,l=6X)55O?XXFBq#iW1'J{Vݣ1/eתn3N'v M$oo UNĹ,,ELnN4Tw;9}QqdVCqZFXo=TVPR19 A~9x& >>IPW: 8hI"NdRh@˟{~P'$VN,}1)st͛ \3{͠5 \3hx͠5n?0ȰfImport/data/oandaListing.csv.gz0000644000176200001440000000414514673226105016365 0ustar liggesusersmXK{:ϯbYciNlt:|e\O`2l)QǩGhϺ_Jw?c_ M# !uJ*:uE Cǐ5g|'? Uk]!xM?. gs8w n>Ets& L-^u41d}#Z! [m_F4|zBY媚Fu5D/iB&a":ѳ .pɁ^h] SS~pW7JKw}ܞ AvZҰLIP껕%\[^-ֶEX%pݨAEwNC" |Eearjiė,R4K>lTW/Ӷp8eqe-jp\b8sp6)6JPEqr%aj3܉[o;HSI/_lEGţ;Qt1OJ'*;ZWת]E [m3+ߡ(.(|8?v!5Pz$F#!}="m7Y&z܈SbW'V%/W/#>ZFwm̫V?۞TV5D|߂=jWD "r`n\,՜ {10#q_P?nяpW?p&kqp" 7"e=XXZ$2޹~k{VmXDZCrYȎ1.c/qJmy9H5 iN\ɊsplOx{a&GI/6#;Ԋ^ᗕET"!Zh gҦ56BqCm@|n'Mܻ|'h[7:3[ ۋ́гMmIܺx>4qb% \_zm1-:bda{7='wnYnn{7b Eh%;2~s!Fd\}"T<Մ|a0=a"u߇?U;@!<;G_g:{v|̽j]HodoIz"`)aL/@fr=N.XЈZނL2s|R †tv >(ҵ% ԇ$`Ic$vlm $SG&'olj)4gTLK1Qh) ӄFօi̕WD[eȞniX~'%cK-'z-EHcoAkd& functions from fBasics to fImport 2010-03-07 wuertz * data/oandaListing.csv: oandaListing updated 2010-03-02 wuertz * data/h15Listing.csv: white space in data file removed * man/providerListings.Rd: provider listings added * data/swxListing.csv: umlaut in description modified * data, data/amexListing.csv, data/h15Listing.csv, data/nasdaqListing.csv, data/nyseListing.csv, data/oandaListing.csv, data/stoxxListing.csv, data/swxListing.csv: data listings added 2010-01-06 chalabi * DESCRIPTION: updated version number * ChangeLog, DESCRIPTION: updated Changelog and DESC file * R/fredImport.R, R/oandaImport.R: missing file name when saving data set to file. Thanks to Nicolas Chapados ! 2009-09-30 chalabi * DESCRIPTION: updated version number 2009-09-29 chalabi * ChangeLog, DESCRIPTION: updated DESC and ChangeLog 2009-04-02 chalabi * DESCRIPTION: more explicit depends and suggests field in DESC file. 2009-04-01 chalabi * DESCRIPTION: updated DESC file * R/yahooKeystats.R: yahooKeystats now returns NA if there is no data is available from Yahoo 2009-03-31 chalabi * R/yahooKeystats.R: yahooKeystats returns 'NA' when there is no data for a give query. 2009-01-28 chalabi * DESCRIPTION: updated version number * DESCRIPTION: changed version number to match version on CRAN + 1 2009-01-11 wuertz * man/00fImport-package.Rd: typo removed * DESCRIPTION: next version number * man/fredImport.Rd, man/oandaImport.Rd, man/yahooImport.Rd: * DESCRIPTION: next Version number * R/economagicImport.R, inst/unitTests/runit.economagicImport.R, man/00fImport-package.Rd, man/economagicImport.Rd: economagic download function removed * man/economagicImport.Rd, man/fredImport.Rd, man/oandaImport.Rd, man/yahooImport.Rd: spaces in >item{} { 2009-01-04 chalabi * R/economagicImport.R: update function because of new format 2009-01-03 wuertz * R/economagicImport.R: DW: Economagic has introduced ramdom centered dots for numeric values, let's take care of this fImport/NAMESPACE0000644000176200001440000000137214673011601013113 0ustar liggesusers ################################################ ## fImport ################################################ ################################################ ## import namespace ################################################ import("timeDate") import("timeSeries") importFrom("methods", new) importFrom("utils", download.file, write.table) ################################################ ## exports ################################################ ## from v4021.86 export selectively ## was: exportPattern(".") exportClasses(fWEBDATA) exportMethods(show) export( charvecSplit , composeURL , dataSplit , fredImport , fredSeries , indexGrep , read.lines , read.links , read.lynx , read.w3m , stringSplit ) fImport/NEWS.md0000644000176200001440000000111314673024775013003 0ustar liggesusers# fImport 4041.88 - fixed `fredImport` to work with html input (using xml2 and rvest). It had stopped working after a change of the input format from text to html. # fImport 4032.87 - fixed 'Lost braces; missing escapes or markup?' NOTE from CRAN. # fImport 4021.86 - new maintainer: Georgi N. Boshnakov. - updated DESCRIPTION with links. - in NAMESPACE, now export selectively rather than with the pattern `"."`. - tidied up the documentation a bit but some obsolete stuff remains. # fImport 3042.85 and older versions See file `ChangeLog` for changes before 4021.86. fImport/inst/0000755000176200001440000000000014650733640012657 5ustar liggesusersfImport/inst/obsolete/0000755000176200001440000000000014263246022014464 5ustar liggesusersfImport/inst/obsolete/utils-yahooKeystats.Rd0000644000176200001440000000322414263246022020761 0ustar liggesusers\name{utils-yahooKeystats} \alias{yahooKeystats} \title{Import Key Statistics Data from Yahoo} \description{ Imports key statistics data from \verb{chart.yahoo.com}. } \usage{ yahooKeystats(query, file = "tempfile", source = NULL, save = FALSE, try = TRUE) } \arguments{ \item{file}{a character string specifying a filename, usually having extension \file{".csv"}, where to save the downloaded data.} \item{query}{ a character string, denoting the location of the data at the web site. } \item{save}{ a logical value, if set to TRUE the downloaded data file will be stored under the path and file name specified by the string \code{file}. By default FALSE. } \item{source}{a character string setting the URL of the source. If \code{NULL}, then the URL will be set automatically to its default value. } \item{try}{logical indicating if the internet access will be checked.} } \value{ returns a data frame (\code{\link{data.frame}}) with key statistics downloaded from yahoo's web site. } \note{ This function is no longer supported. The reason for this are the too many changes on the Yhaoo web site which made the download very prone to many failures. Feel free to use the code here to adapt the function to your own needs. } \author{ Diethelm Wuertz for the Rmetrics \R-port. } \references{ Diethelm Wuertz, Yohan Chalabi, and Andrew Ellis (2010). \emph{Financial Market Data for R/Rmetrics}; Rmetrics eBook, Rmetrics Association and Finance Online, Zurich, \url{www.rmetrics.org}. } \keyword{data} fImport/inst/obsolete/import-yahoo.R0000644000176200001440000001417614263246022017247 0ustar liggesusers # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU Library General # Public License along with this library; if not, write to the # Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA ################################################################################ # FUNCTION: DESCRIPTION: # yahooImport Downloads market data from chart.yahoo.com # yahooSeries Easy to use download from chart.yahoo.com ################################################################################ yahooImport <- function (query, file = "tempfile", source = NULL, frequency = c("daily", "weekly", "monthly"), from = NULL, to = Sys.timeDate(), nDaysBack = 366, save = FALSE, sep = ";", try = TRUE) { # A function implemented by Diethelm Wuertz # Description: # Downloads market data from Yahoo's web site # Notes: # Requires: fields() cuts a string in fields # Yahoo Token Description: # s Selected Ticker-Symbol # a First Quote starts with Month (mm): 0-11, Jan-Dec # b First Quote starts with Day (dd) # c First Quote starts with Year: as CCYY # d Last Quote ends with Month (mm): 0-11, Jan-Dec # e Last Quote ends with Day (dd) # f Last Quote ends with Year (yy): as CCYY # r Aggregation Level # z Selected Ticker-Symbol [optional] # IBM SHARES, test 19/20 century change 01-12-1999 -- 31-01-2000: # "s=IBM&a=11&b=1&c=1999&d=0&e=31&f=2000&g=d&x=.csv" # Examples: # yahooImport("IBM", nDaysBack = 10) # yahooImport(symbols = c("^DJI", "IBM")) # yahooImport(symbols = c("^DJI", "IBM"), frequency = "weekly") # yahooImport(frequency = "monthly", nDaysBack = 366) # FUNCTION: # Check: stopifnot(length(query) == 1) # Match Arguments: freq <- match.arg(frequency) aggregation <- substr(freq, 1, 1) # Automatic Selection of From / To: if (is.null(to)) to <- Sys.timeDate() to <- trunc(as.timeDate(to),"days") if (is.null(from)) { if (is.null(nDaysBack)) { stop("The \"from\" and \"nDaysBack\" arguments cannot be NULL at the same time.") } else { from <- to - nDaysBack*24*3600 } } from <- trunc(as.timeDate(from),"days") from <- as.character(from) to <- as.character(to) # Extract Atoms - From: yearFrom <- substring(from, 1, 4) monthFrom <- as.character(as.integer(substring(from, 6, 7))-1) dayFrom <- substring(from, 9, 10) # Extract Atoms - To: yearTo <- substring(to, 1, 4) monthTo <- as.character(as.integer(substring(to, 6, 7))-1) dayTo <- substring(to, 9, 10) # Compose Query: Query <- paste("s=", query, "&a=", monthFrom, "&b=", dayFrom, "&c=", yearFrom, "&d=", monthTo, "&e=", dayTo, "&f=", yearTo, "&g=", aggregation, "&q=q&y=0&z=", query, "&x=.csv", sep = "") # Source: if (is.null(source)) source <- "http://chart.yahoo.com/table.csv?" # Download: if (try) { # First try if the Internet can be accessed: z <- try(yahooImport(query, file, source, frequency, from, to, nDaysBack, save, sep, try = FALSE)) if (inherits(z, "try-error") || inherits(z, "Error")) { return("No Internet Access") } else { return(z) } } else { # Download File: url <- paste(source, Query, sep = "") tmp <- tempfile() download.file(url = url, destfile = tmp) # Read data and revert: mat <- read.table(tmp, header = TRUE, sep = ",") X <- rev(as.timeSeries(mat)) colnames(X) <- paste(sub("\\^","",query), colnames(X), sep = ".") } # Save to file: if (save) { write.table(as.data.frame(X), file = file, sep = sep) } else { unlink(file) } # Result: ans <- new("fWEBDATA", call = match.call(), param = c( "Instrument" = query, "Frequency " = freq), data = X, title = "Data Import from www.yahoo.com", description = description() ) # Return Value: ans } # ------------------------------------------------------------------------------ yahooSeries <- function(symbols, from = NULL, to = Sys.timeDate(), nDaysBack = 366, ...) { # A function implemented by Diethelm Wuertz # Description: # Downloads easily time series data from Yahoo # Arguments: # symbols - a character vector of symbol names # from - from date # to - to date # nDaysBack - number of n-days back # ... - arguments passed to the *Import() # Examples: # yahooSeries("IBM", nDaysBack = 10) # yahooSeries("IBM", frequency = "weekly") # yahooSeries(c("^DJI", "IBM")) # yahooSeries(c("^DJI", "IBM"), frequency = "monthly") # FUNCTION: # Download: X <- yahooImport(query = symbols[1], from = from, to = to, nDaysBack=nDaysBack, ...)@data N <- length(symbols) if (N > 1) { for (i in 2:N) { Y <- yahooImport(query = symbols[i], from = from, to = to, nDaysBack=nDaysBack, ...)@data X <- merge(X, Y) } } # Return Value: X } ################################################################################ fImport/inst/obsolete/utils-yahoo.R0000644000176200001440000002434514263246022017074 0ustar liggesusers # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU Library General # Public License along with this library; if not, write to the # Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA ################################################################################ # INTERNAL: DESCRIPTION: # .getYahooData Downloads time series data from yahoo finance ################################################################################ .getYahooData <- function( symbol, start = format(Sys.Date()-366, format = "%Y%m%d"), end = format(Sys.Date(), format = "%Y%m%d"), freq = c("daily", "weekly", "monthly"), type = c("price", "split"), adjust = TRUE, quiet = TRUE) { # A copy of a function implemented by Josh Ulrich # Description: # Downloads time series data from yahoo finance # Arguments: # symbol - character, instrument symbol # start - numeric, starting date, in ISO-8601 format as ccyymmdd, # default is series' first date) # end - numeric, ending date, in ISO-8601 format as ccyymmdd, # default is today # freq - character, frequency of data # either 'daily', 'weekly', 'monthly' # type - character, either 'price' or 'split' # adjust - ogical, adjusts the Open, High, Low, and Close prices # for dividends and splits, and adjusts Volume for dividends. # References: # http://help.yahoo.com/l/us/yahoo/finance/quotes # http://help.yahoo.com/l/us/yahoo/finance/quotes/quote-12.html # http://ichart.finance.yahoo.com/x?s=MSFT&g=d&y=0&z=30000 # Examples: # ans = .getYahooData("IBM"); colnames(ans) # "Date" "Open" "High" "Low" "Close" "Volume" # "Unadj.Close" "Div" "Split" "Adj.Div" # ans = .getYahooData("IBM", type = "split"); colnames(ans) # "Date" "Div" "Split" "Adj.Div" # Note: # DW: # This is Josh's function "getYahooData()" for udjusted prices and # dividends+splits. We rename his function to ".getYahooData()" # leave it untouched, and use the wrappers around it ... # JU: # Thank you to Giorgio Beltrame for the URL to download dividends # _and_ splits, and for his correct adjustment procedure. # Many thanks to Ion Georgiadis for helpful suggestions and testing. # DW: # Modifications: # function renamed to .getYahooData # description added # examples added # argument matching added # attribute "update" added # code shortened to max 80 characters per line # Author: # Package: TTR # Type: Package # Title: Technical Trading Rules # Version: 0.14-0 # Date: 2008-01-23 # Author: Josh Ulrich # Maintainer: Josh Ulrich # Enhances: quantmod # Description: Functions and data to construct technical trading rules # License: GPL-3 # FUNCTION: # Match Arguments: freq <- match.arg(freq) type <- match.arg(type) # Check Dates: if (missing(start)) { beg <- as.POSIXlt( "1900-01-01" ) } else { beg <- as.POSIXlt( as.Date( as.character(start), "%Y%m%d" ) ) } if (missing(end)) { end <- as.POSIXlt(Sys.Date()) } else { end <- as.POSIXlt( as.Date( as.character( end ), "%Y%m%d" ) ) } if( beg > end ) stop("Start date must be before end date.") if( beg > as.POSIXlt(Sys.Date()) ) stop("Start date is after today's date.") # Get freqeucy and type parameters freq <- match.arg( freq, c("daily","weekly","monthly") ) type <- match.arg( type, c("price","split") ) if(type == "price") { freq.url <- substr(freq,1,1) } else { freq.url <- "v" if(freq!="daily" & !quiet) message("Only freq=\"daily\" data available for type=\"split\".\n", "Setting freq=\"daily\"...") } flush.console() if(type == "price") { if(adjust) { if(freq == "daily") { # Get price, dividend, and split data from 'beg' to present ohlc <- .getYahooData(symbol, start, freq="daily", type = "price", adjust = FALSE, quiet = TRUE) divspl <- .getYahooData(symbol, start, freq="daily", type = "split", adjust = FALSE, quiet = TRUE) ohlc <- merge(ohlc, divspl, by.col="Date", all = TRUE) # Create split adjustment ratio, (always = 1 if no splits exist) s.ratio <- rep(1, NROW(ohlc)) if( !all( is.na(ohlc$Split) ) ) { # Start loop at most recent data for( i in NROW(ohlc):2 ) { if( is.na( ohlc$Split[i] ) ) { s.ratio[i-1] <- s.ratio[i] } else { s.ratio[i-1] <- s.ratio[i] * ohlc$Split[i] } } } # Un-adjust dividends for Splits ohlc$Div <- ohlc$Adj.Div * ( 1 / s.ratio ) # Create dividend adjustment ratio, # (always = 1 if no dividends exist) d.ratio <- rep(1, NROW(ohlc)) if( !all( is.na(ohlc$Adj.Div) ) ) { # Start loop at most recent data for( i in NROW(ohlc):2 ) { if( is.na( ohlc$Adj.Div[i] ) ) { d.ratio[i-1] <- d.ratio[i] } else { d.ratio[i-1] <- d.ratio[i] * ( 1 - ohlc$Div[i] / ohlc$Close[i-1] ) } } } # Adjust OHLC and volume ohlc$Unadj.Close <- ohlc$Close ohlc$Open <- ohlc$Open * d.ratio * s.ratio ohlc$High <- ohlc$High * d.ratio * s.ratio ohlc$Low <- ohlc$Low * d.ratio * s.ratio ohlc$Close <- ohlc$Close * d.ratio * s.ratio ohlc$Volume <- ohlc$Volume * ( 1 / d.ratio ) # Order columns ohlc <- ohlc[,c("Date","Open","High","Low","Close","Volume", "Unadj.Close","Div","Split","Adj.Div")] } else { stop("Only freq=\"daily\" adjusted data is currently supported.") } # For other frequencies, get daily data and use a routine to # aggregate to desired frequency. } else { # Construct URL for 'beg' to 'end' url <- paste( "http://ichart.finance.yahoo.com/table.csv?s=", symbol, "&a=", beg$mon, "&b=", beg$mday, "&c=", beg$year+1900, "&d=", end$mon, "&e=", end$mday, "&f=", end$year+1900, "&g=", freq.url, "&ignore=.csv", sep="" ) # Fetch data: ohlc <- read.table(url, header=TRUE, sep=",") ohlc$Date <- as.Date(as.character(ohlc$Date), "%Y-%m-%d") ohlc$Adj.Close <- NULL } } else { if(!quiet) message("Unadjusted and adjusted dividend data are always returned.") # Construct URL for 'beg' to 'end' url <- paste( "http://ichart.finance.yahoo.com/x?s=", symbol, "&a=", beg$mon, "&b=", beg$mday, "&c=", beg$year+1900, "&d=", end$mon, "&e=", end$mday, "&f=", end$year+1900, "&g=", freq.url, "&y=0&z=30000", sep="" ) # Fetch data ohlc <- read.table(url, skip=1, sep=",", fill=TRUE, as.is=TRUE) div <- data.frame( Date= ohlc$V2[ohlc$V1=="DIVIDEND"], Adj.Div=as.numeric(ohlc$V3[ohlc$V1=="DIVIDEND"]), stringsAsFactors=FALSE ) spl <- data.frame( Date= ohlc$V2[ohlc$V1=="SPLIT"], Split=as.character(ohlc$V3[ohlc$V1=="SPLIT"]), stringsAsFactors=FALSE ) ohlc <- merge(div, spl, by.col="Date", all=TRUE) ohlc$Date <- as.Date(as.character(ohlc$Date), "%Y%m%d") # Create split adjustment ratio, (always = 1 if no splits exist) s.ratio <- rep(1, NROW(ohlc)) if(NROW(spl)!=0) { ohlc$Split <- sub(":","/", ohlc$Split) ohlc$Split <- 1 / sapply( parse( text=ohlc$Split ), eval ) # Start loop at most recent data for( i in NROW(ohlc):2 ) { if( is.na( ohlc$Split[i] ) ) { s.ratio[i-1] <- s.ratio[i] } else { s.ratio[i-1] <- s.ratio[i] * ohlc$Split[i] } } } # Un-adjust dividends for Splits ohlc$Div <- ohlc$Adj.Div * ( 1 / s.ratio ) ohlc$Split <- as.numeric(ohlc$Split) # Order data columns ohlc <- ohlc[,c("Date","Div","Split","Adj.Div")] # Return (empty) data if(NROW(ohlc)==0) return(ohlc) } # Order Dates, and only return requested data (drop 'end' to present) ohlc <- ohlc[order(ohlc$Date),] row.names(ohlc) <- 1:NROW(ohlc) ohlc <- ohlc[ ( ohlc$Date >= as.Date(beg) & ohlc$Date <= as.Date(end) ), ] ### Check to see if supplied dates occur in data set if( max(ohlc$Date) != as.Date(end) ) { if(!quiet) message("End date out of range, " , max(ohlc$Date), " is last available date.") } if( min(ohlc$Date) != as.Date(beg) ) { if(!quiet) message("Start date out of range, ", min(ohlc$Date), " is first available date.") } # Add Attributes: attr(ohlc, "update") <- format(Sys.time()) # Return Value: return(ohlc) } ############################################################################### fImport/inst/obsolete/import-oanda-loop.R0000644000176200001440000000524414263246022020155 0ustar liggesusersoandaSeries <- function(symbols, from = NULL, to = Sys.timeDate(), nDaysBack = 366, ...) { # A function implemented by Diethelm Wuertz # Description: # Easy to use download from www.oanda.com # Arguments: # symbols - a character vector of symbol names # from - from date # to - to date # nDaysBack - number of n-days back # ... - arguments passed to the *Import() # Example: # oandaSeries("USD/EUR") # oandaSeries(c("USD/EUR", "USD/JPY"), nDaysBack = 10) # FUNCTION: # Download: if (is.null(from)) from <- to - nDaysBack * 24 * 3600 else from <- as.timeDate(from) to <- as.timeDate(to) to <- trunc(to,"days") # The maximum number of observations allowed by Oanda is 500 # We need a loop to dowload the series sequencially if ( (to-from) > 400) { getMore <- TRUE to2 <- from+399*24*3600 X = oandaImport(query = symbols[1], from = from, to = to2, ...)@data while (getMore) { from2 <- to2+24*3600 if ( (to-from2) < 400) { X <- rbind(X, oandaImport(query = symbols[1], from = from2, to = to, ...)@data) getMore <- FALSE } else { to2 <- from2+399*24*3600 X <- rbind(X, oandaImport(query = symbols[1], from = from2, to = to2, ...)@data) } } } else X = oandaImport(query = symbols[1], from = from, to = to, ...)@data names(X) <- symbols[1] N = length(symbols) if (N > 1) { for (i in 2:N) { if ( (to-from) > 400) { getMore <- TRUE to2 <- from+399*24*3600 X2 = oandaImport(query = symbols[i], from = from, to = to2, ...)@data while (getMore) { print(from2) from2 <- to2+24*3600 if ( (to-from2) < 400) { X2 <- rbind(X2, oandaImport(query = symbols[i], from = from2, to = to, ...)@data) getMore <- FALSE } else { to2 <- from2+399*24*3600 X2 <- rbind(X2, oandaImport(query = symbols[i], from = from2, to = to2, ...)@data) } } } else X2 = oandaImport(query = symbols[i], from = from, to = to, ...)@data names(X2) <- symbols[i] X = cbind(X, X2) } } # Return Value: X } fImport/inst/obsolete/class-fWEBDATA.R0000644000176200001440000000262314263246022017132 0ustar liggesusers # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU Library General # Public License along with this library; if not, write to the # Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA # Copyrights (C) for this R-port: # 1999 - 2012 Diethelm Wuertz, Zurich, # 2009 - 2012 Rmetrics Association, Zurich, www.rmetrics.org ################################################################################ # FUNCTION: DESCRIPTION: # fWEBDATA Class Representation for WEB download ################################################################################ setClass("fWEBDATA", representation( call = "call", data = "timeSeries", param = "character", title = "character", description = "character") ) ################################################################################ fImport/inst/obsolete/import-oanda.Rd0000644000176200001440000001006014263246022017342 0ustar liggesusers\name{import-oanda} \alias{import-oanda} \alias{oandaImport} \alias{oandaSeries} \title{Import FX Market Data from OANDA} \description{ Imports FX market data from www.oanda.com. } \usage{ oandaSeries(symbols, from = NULL, to = Sys.timeDate(), nDaysBack = 366, \dots) oandaImport(query, file = "tempfile", source = NULL, frequency = "daily", from = NULL, to = Sys.timeDate(), nDaysBack = 366, save = FALSE, sep = ";", try = TRUE) } \arguments{ \item{file}{ a character string with filename, usually having extension ".csv", where to save the downloaded data. } \item{frequency}{ a character string, one of "auto", "quarterly", "monthly", or "daily", defining the frequency of the data records. Note, the import function tries autodetect the frequency of the time series to be dowwnloaded. This may fail, in such case specify the frequency explicitely. } \item{from}{ the date from when to extract the time series. } \item{nDaysBack}{ the number of days back. } \item{query}{ a character string, denoting the location of the data at the web site. } \item{save}{ a logical value, if set to TRUE the downloaded data file will be stored under the path and file name specified by the string \code{file}. By default FALSE. } \item{sep}{ a charcter value specifying the column separator. } \item{source}{a character string setting the URL of the source. If \code{NULL}, then the URL will be set automatically to its default value. } \item{symbols}{ a character string with the symbols to be downloaded. } \item{to}{ the end date of the data download, by default the current date. } \item{try}{ a logical value, if set to TRUE the Internet access will be checked. } \item{\dots}{ optional arguments to be passed. } } \value{ The function \code{fredImport} returns an S4 object of class \code{fWEBDATA} with the following slots: \item{@call}{ the function call. } \item{@data}{ the data as downloaded formatted as a data.frame. } \item{@param}{ a character vector whose elements contain the values of selected parameters of the argument list. } \item{@title}{ a character string with the name of the download. This can be overwritten specifying a user defined input argument. } \item{@description}{ a character string with an optional user defined description. By default just the current date when the test was applied will be returned.} The function \code{fredSeries} returns an S4 object of class \code{timeSeries} or alternatively an object specified by the function argument \code{returnClass}. \cr } \note{ \bold{Internet Download Functions:} \cr\cr IMPORTANT NOTE: If the service provider changes the data file format it may become necessary to modify and update the functions. Feel free to inspect the code of the functions and to create your own download function from other Internet web sites and Portals. } \seealso{ Two further download functions \code{\link{fredImport}} and \code{\link{yahooImport}} allow to import data from the U.S. Federal Reserve and from Yahoo Finance. } \author{ Diethelm Wuertz for the Rmetrics \R-port. } \references{ Diethelm Wuertz, Yohan Chalabi, and Andrew Ellis, (2010); \emph{Financial Market Data for R/Rmetrics}, Rmetrics eBook, Rmetrics Association and Finance Online, Zurich, www.rmetrics.org. } \examples{ oandaImport("USD/CHF") oandaSeries("USD/CHF") } \keyword{data} fImport/inst/obsolete/import-oanda.R0000644000176200001440000001321214263246022017200 0ustar liggesusers # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU Library General # Public License along with this library; if not, write to the # Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA ################################################################################ # FUNCTION: DESCRIPTION: # oandaImport Downloads market data from www.oanda.com # oandaSeries Easy to use download from www.oanda.com ################################################################################ oandaImport <- function(query, file = "tempfile", source = NULL, frequency = "daily", from = NULL, to = Sys.timeDate(), nDaysBack = 366, save = FALSE, sep = ";", try = TRUE) { # A function implemented by Diethelm Wuertz # Description: # Downloads market data from www.oanda.com # Example: # oandaImport("USD/EUR") # Value: # An One Column data frame with row names denoting the dates # given in the POSIX format "%Y%m%d". The column lists the # downloaded data records. # FUNCTION: # Settings: stopifnot(length(query) == 1) # Check: stopifnot(frequency == "daily") # Source: if (is.null(source)) source <- "http://www.oanda.com/currency/historical-rates/download?&" # Download: if (try) { # Try for Internet Connection: z <- try(oandaImport(query, file, source, frequency, from, to, nDaysBack, save, sep, try = FALSE)) if (inherits(z, "try-error") || inherits(z, "Error")) { return("No Internet Access") } else { return(z) } } else { # Download File: if (is.null(to)) to <- Sys.timeDate() to <- trunc(as.timeDate(to),"days") if (is.null(from)) { if (is.null(nDaysBack)) { stop("The \"from\" and \"nDaysBack\" arguments cannot be NULL at the same time.") } else { from <- to - nDaysBack*24*3600 } } from <- trunc(as.timeDate(from),"days") from.date <- as.character(from) to.date <- as.character(to) ccy.pair <- strsplit(toupper(query),"/")[[1]] tmp <- tempfile() url <- paste0(source, "quote_currency=", ccy.pair[1], "&end_date=", to.date, "&start_date=", from.date, "&period=daily", "&display=absolute", "&rate=0", "&data_range=", "c", "&price=mid", "&view=table", "&base_currency_0=", ccy.pair[2], "&base_currency_1=", "&base_currency_2=", "&base_currency_3=", "&base_currency_4=", "&download=csv") download.file(url=url, destfile=tmp) # add an EOL to the file to avoid the warning message #cat("\n",file=tmp,append=TRUE) ## Compose Time Series: # fx <- read.csv(tmp, skip = 4, as.is = TRUE, header = TRUE) fl <- scan(tmp, what = "", sep = "\n", quote="\"") begin <- grep(paste(ccy.pair,collapse="/"),fl) fl <- fl[begin:length(fl)] fx <- matrix(unlist(strsplit(fl,split=",")), nrow=length(fl), byrow=TRUE)[-1,1:2] dates <- !is.na(as.Date(fx[,1])) fx <- fx[dates,] data <- rev(as.numeric(fx[,2])) charvec <- rev(as.character((fx[,1]))) X <- timeSeries(data, charvec, units = query) } # Save to file: if (save) { write.table(as.data.frame(X), file = file, sep = sep) } else { unlink(file) } # Result: ans <- new("fWEBDATA", call = match.call(), param = c( "Instrument" = query, "Frequency " = frequency), data = X, title = "Data Import from www.oanda.com", description = description() ) # Return Value: ans } # ------------------------------------------------------------------------------ oandaSeries <- function(symbols, from = NULL, to = Sys.timeDate(), nDaysBack = 366, ...) { # A function implemented by Diethelm Wuertz # Description: # Easy to use download from www.oanda.com # Arguments: # symbols - a character vector of symbol names # from - from date # to - to date # nDaysBack - number of n-days back # ... - arguments passed to the *Import() # Example: # oandaSeries("USD/EUR") # oandaSeries(c("USD/EUR", "USD/JPY"), nDaysBack = 10) # FUNCTION: # Download: X <- oandaImport(query = symbols[1], from = from, to = to, nDaysBack=nDaysBack, ...)@data N <- length(symbols) if (N > 1) { for (i in 2:N) { X <- merge(X, oandaImport(query = symbols[i], from = from, to = to, nDaysBack=nDaysBack, ...)@data) } } # Return Value: X } ################################################################################ fImport/inst/obsolete/import-yahoo.Rd0000644000176200001440000001340614263246022017406 0ustar liggesusers\name{import-yahoo} \alias{import-yahoo} \alias{yahooImport} \alias{yahooSeries} \title{Import Market Data from Yahoo} \description{ Imports financial time series data from chart.yahoo.com. } \usage{ yahooSeries(symbols, from = NULL, to = Sys.timeDate(), nDaysBack = 366, \dots) yahooImport(query, file = "tempfile", source = NULL, frequency = c("daily", "weekly", "monthly"), from = NULL, to = Sys.timeDate(), nDaysBack = 366, save = FALSE, sep = ";", try = TRUE) } \arguments{ \item{file}{ a character string with filename, usually having extension ".csv", where to save the downloaded data. } \item{frequency}{ a character string, one of "auto", "quarterly", "monthly", or "daily", defining the frequency of the data records. Note, the import function tries autodetect the frequency of the time series to be dowwnloaded. This may fail, in such case specify the frequency explicitely. } \item{from}{ the date from when to extract the time series. } \item{nDaysBack}{ the number of days back. } \item{query}{ a character string, denoting the location of the data at the web site. } \item{save}{ a logical value, if set to TRUE the downloaded data file will be stored under the path and file name specified by the string \code{file}. By default FALSE. } \item{sep}{ a charcter value specifying the column separator. } \item{source}{a character string setting the URL of the source. If \code{NULL}, then the URL will be set automatically to its default value. } \item{symbols}{ a character string with the symbols to be downloaded. } \item{to}{ the end date of the data download, by default the current date. } \item{try}{ a logical value, if set to TRUE the Internet access will be checked. } \item{\dots}{ optional arguments to be passed. } } \value{ The function \code{yahooImport} returns an S4 object of class \code{fWEBDATA} with the following slots: \item{@call}{ the function call. } \item{@data}{ the data as downloaded formatted as a data.frame. } \item{@param}{ a character vector whose elements contain the values of selected parameters of the argument list. } \item{@title}{ a character string with the name of the download. This can be overwritten specifying a user defined input argument. } \item{@description}{ a character string with an optional user defined description. By default just the current date when the test was applied will be returned.} The function \code{yahooSeries} returns an S4 object of class \code{timeSeries} or alternatively an object specified by the function argument \code{returnClass}. \cr The function \code{keystatsImport} returns a data frame with key statistics downloaded from yahoo's web site. } \details{ \bold{Import data from chart.yahoo.com:} \cr\cr The query string is given as \cr\cr \code{s=SYMBOL&a=DD&b=MM&c=CCYY&g=d&q=q&z=SYMBOL&x=.csv} \cr\cr where \code{SYMBOL} has to replaced by the symbol name of the instrument, and \code{DD}, \code{MM}, and \code{CCYY} by the day, month-1 and century/year when the time series should start. Here are some examples of symbols: \tabular{ll}{ \code{[query]} \tab Description: \cr \tab \cr \code{^DJI} \tab Dow Jones 30 Industrial Averages \cr \code{^NYA} \tab New York Stock Exchange Composite \cr \code{^NDX} \tab Nasdaq 100 Index \cr \code{^IXIC} \tab Nasdaq Composite Index \cr \code{^TYX} \tab US 30Y Treasury Bond Index \cr \code{IBM} \tab BM DJIA Stock \cr \code{KO} \tab Coca-Cola DJIA Stock } The meaning of the tokens in the query string are the following: \tabular{ll}{ Token \tab Description \cr \tab \cr \code{s} \tab Selected Ticker-Symbol \cr \code{a} \tab First Quote starts with Month (mm) \cr \code{b} \tab First Quote starts with Day (dd) \cr \code{c} \tab First Quote starts with Year (ccyy) \cr \code{d} \tab Last Quote ends with Month (mm) \cr \code{e} \tab Last Quote ends with Day (dd) \cr \code{f} \tab Last Quote ends with Year (ccyy) \cr \code{z} \tab Selected Ticker-Symbol } } \note{ \bold{Internet Download Functions:} IMPORTANT NOTE: If the service provider changes the data file format it may become necessary to modify and update the functions. Feel free to inspect the code of the functions and to create your own download function from other Internet web sites and Portals. } \seealso{ Two further download functions \code{\link{fredImport}} and \code{\link{oandaImport}} allow to import data from the U.S. Federal Reserve and from Oanda. } \author{ Diethelm Wuertz for the Rmetrics \R-port. } \references{ Diethelm Wuertz, Yohan Chalabi, and Andrew Ellis, (2010); \emph{Financial Market Data for R/Rmetrics}, Rmetrics eBook, Rmetrics Association and Finance Online, Zurich, www.rmetrics.org. } \examples{ yahooImport("^GDAXI") yahooSeries("^GDAXI") } \keyword{data} fImport/inst/obsolete/utils-yahooBriefing.Rd0000644000176200001440000000324114263246022020676 0ustar liggesusers\name{utils-yahooBriefing} \alias{yahooBriefing} \title{Import Briefings from Yahoo} \description{ Imports briefings from chart.yahoo.com. } \usage{ yahooBriefing(query, file = "tempfile", source = NULL, save = FALSE, try = TRUE) } \arguments{ \item{file}{ a character string with filename, usually having extension ".csv", where to save the downloaded data. } \item{query}{ a character string, denoting the location of the data at the web site. } \item{save}{ a logical value, if set to TRUE the downloaded data file will be stored under the path and file name specified by the string \code{file}. By default FALSE. } \item{source}{a character string setting the URL of the source. If \code{NULL}, then the URL will be set automatically to its default value. } \item{try}{ a logical value, if set to TRUE the Internet access will be checked. } } \value{ returns a data frame with briefings downloaded from yahoo's web site. } \note{ This function is no longer supported. The reason for this are the too many changes on the Yhaoo web site which made the download very prone to many failures. Feel free to use the code here to adapt the function to your own needs. } \author{ Diethelm Wuertz for the Rmetrics \R-port. } \references{ Diethelm Wuertz, Yohan Chalabi, and Andrew Ellis, (2010); \emph{Financial Market Data for R/Rmetrics}, Rmetrics eBook, Rmetrics Association and Finance Online, Zurich, www.rmetrics.org. } \keyword{data} fImport/inst/_pkgdown.yml0000644000176200001440000000144414266061237015214 0ustar liggesuserstemplate: bootstrap: 5 search: exclude: ['news/index.html'] reference: - title: "Overview of package fImport" contents: - "fImport-package" - title: "Import data from internet" desc: > Currently, only the FRED database is supported. The listings from the stock markets should still be useful but have not been updated for years. contents: - fredSeries - fredImport - provider-Listings - title: "class fWEBDATA" contents: - "class-fWEBDATA" - "show-methods" - title: "Utilities" contents: - composeURL - indexGrep - dataSplit - charvecSplit - stringSplit - title: "Read webpages using a browser" contents: - read.links - read.lynx - read.w3m - read.lines fImport/man/0000755000176200001440000000000014673051400012445 5ustar liggesusersfImport/man/read-lines.Rd0000644000176200001440000000242514263246022014763 0ustar liggesusers\name{read-lines} \alias{read.lines} \title{Read from a text file line by line} \description{ Reads from a text file line by line. Wrapper to readLines() function. } \usage{ read.lines(con=stdin(), n=-1, ok=TRUE, warn=FALSE, encoding="unknown") } \arguments{ \item{con}{ a connection object or a character string. } \item{n}{ an integer, the (maximal) number of lines to read. Negative values indicate that one should read up to the end of input on the connection. } \item{ok}{ a logical, is it OK to reach the end of the connection before n > 0 lines are read? If not, an error will be generated. } \item{warn}{ a logical, warn if a text file is missing a final EOL. The default is FALSE, note different from function \code{readLines}. } \item{encoding}{ a character string, the encoding to be assumed for input strings. } } \value{ the downloaded text. Same output as readLines() function. } \references{ Diethelm Wuertz, Yohan Chalabi, and Andrew Ellis, (2010); \emph{Financial Market Data for R/Rmetrics}, Rmetrics eBook, Rmetrics Association and Finance Online, Zurich, www.rmetrics.org. } \keyword{programming} fImport/man/00fImport-package.Rd0000644000176200001440000000710114266060153016107 0ustar liggesusers\name{fImport-package} \alias{fImport-package} \alias{fImport} \docType{package} \title{Import data from the web} \description{ The Rmetrics "fImport" package is a collection of utility functions to download and manage data sets from the Internet or from other sources. } % \details{ % % \tabular{ll}{ % Package: \tab fImport\cr % Type: \tab Package\cr % Version: \tab R 3.1.2\cr % Date: \tab 2015\cr % License: \tab GPL Version 2 or later\cr % Copyright: \tab (c) 1999-2015 Rmetrics Assiciation\cr % URL: \tab \url{https://www.rmetrics.org} % } % % } \section{1 Introduction}{ The major content of this package is to provide download functions for financial market data from the Internet. For this we have implemented the web text browsers "Lynx", "Links", and "W3M" for an easy and straightforward download of data from the Internet. Furthermore helpful utility functions are included to split numerical data matrices, to split date character vectors, and to split strings from downloads. This allows to create in a very easy way \code{timeSeries} objects. Examples are provided for downloading data from the Federal Reserve data base in St. Louis web portal. % from Oanda FX, and from Yahoo Finance The data part contains instruments listings from the American Stock Exchange, from the FED H15 Report, from the NASDAQ Stock Market, from the New York Stock Exchange, of OANDAs Foreign Exchange Rates, of STOXX Indices, and from the Swiss Stock Exchange. For the download of spread sheets from the Internet we refer to the functions \code{gdata::read.xls} and \code{xlsx::read.xlsx} for the contributed \R packages \code{gdata} and \code{xlsx} respectively. } \section{2 Download Functions}{ The package makes functions available to download financial market data from the internet. Currently functions are available for the follwing web sites. The functions are: \preformatted{ fredSeries downloads data from research.stlouisfed.org %oandaSeries downloads data from www.oanda.com %yahooSeries downloads data from chart.yahoo.com } The economic and financial time series data are extractes as objects of class \code{"timeSeries"}. } \section{3 Readers and Web downloaders}{ The package comes with the following tailored readers and web downloaders: \preformatted{ read.lines a synonym function call to readLines read.links uses the links browser to read from a web page read.lynx uses the lynx browser to read from a web page read.w3m uses the w3m browser to read from a web page } } \section{4 Split Function Utilities}{ This section provides functions to split numerical data matrices, to split date character vectors, and to split strings from downloads: \preformatted{ dataSplit splits a data matrix from a downloaded file charvecSplit splits a charvec vector from a downloaded file stringSplit splits a string vector from a downloaded file } } \section{About Rmetrics}{ The \code{fImport} Rmetrics package is written for educational support in teaching "Computational Finance and Financial Engineering" and licensed under the GPL. } \keyword{package} fImport/man/provider-listings.Rd0000644000176200001440000000252314266062005016423 0ustar liggesusers\name{provider-Listings} \alias{providerListings} \alias{amexListing} \alias{h15Listing} \alias{nasdaqListing} \alias{nyseListing} \alias{oandaListing} \alias{stoxxListing} \alias{swxListing} \title{Provider Listing of Symbols and Descriptions} \description{ CSV files with provider listings of symbols, descriptions ands related information. The listings include those from: \tabular{ll}{ amexListing \tab Listing from the American Stock Exchange\cr h15Listing \tab Listing from the FED H15 Report\cr nasdaqListing \tab Listing from the NASDAQ Stock Market\cr nyseListing \tab Listing from the New York Stock Exchange\cr oandaListing \tab Listing of OANDAs Foreign Exchange Rates\cr stoxxListing \tab Listing of STOXX Indices\cr swxListing \tab Listing from the Swiss Stock Exchange\cr } } \format{ All files are given in CSV Excel spreadsheet format. The delimiter is a semicolon. } \references{ Diethelm Wuertz, Yohan Chalabi, and Andrew Ellis, (2010); \emph{Financial Market Data for R/Rmetrics}, Rmetrics eBook, Rmetrics Association and Finance Online, Zurich, www.rmetrics.org. } \examples{ data(package = "fImport") head(h15Listing) head(nyseListing) } \keyword{datasets} fImport/man/read-w3m.Rd0000644000176200001440000000331514650724113014360 0ustar liggesusers\name{read-w3m} \alias{read.w3m} \title{w3m Browser interface} \description{ Uses the w3m Browser to read a web page. } \usage{ read.w3m(url, intern = TRUE, bin = NULL, pipe = FALSE, \dots) } \arguments{ \item{url}{ a character string specifying the URL of the web page. } \item{intern}{ a logical which indicates whether to make the output of the command an R object. } \item{bin}{ a string with the path of your w3m binary or NULL if w3m binary is available in the operating system path. } \item{pipe}{ a logical which indicates whether the result should be returned as a \code{pipe()} commmand. } \item{\dots}{ optional arguments passed to w3m binary. For a list of options, see the w3m manual page. } } \value{ the downloaded text } \references{ Diethelm Wuertz, Yohan Chalabi, and Andrew Ellis, (2010); \emph{Financial Market Data for R/Rmetrics}, Rmetrics eBook, Rmetrics Association and Finance Online, Zurich, www.rmetrics.org. } \seealso{ Alternative text browser functions are the Rmetrics functions \code{\link{read.links}} and \code{\link{read.lynx}}. To download \code{xls} and \code{xlsx} spread sheets use the functions \code{gdata::read.xls} and \code{xlsx::read.xlsx} from the contributed packages \code{gdata} and \code{xlsx}, respectively. To download text files line by line use the Rmetrics function \code{\link{read.lines}} which wraps the function \code{readLines} from R's base evironment. To postprocess downloaded files use the Rmetrics functions \code{\link{indexGrep}}, \code{\link{dataSplit}}, \code{\link{charvecSplit}}, and \code{\link{stringSplit}}. } \keyword{programming} fImport/man/import-fred.Rd0000644000176200001440000001001214673052720015164 0ustar liggesusers\name{import-fred} \alias{import-fred} \alias{fredImport} \alias{fredSeries} \title{Import Market Data from the Federal Reserve Database} \description{ Imports financial time series data from fred.stlouisfed.org. } \usage{ fredSeries(symbols, from = NULL, to = Sys.timeDate(), nDaysBack = 366, \dots) fredImport(query, file = "tempfile", source = NULL, frequency = "daily", from = NULL, to = Sys.timeDate(), nDaysBack = NULL, save = FALSE, sep = ";", try = TRUE) } \arguments{ \item{file}{ a character string with filename, usually having extension ".csv", where to save the downloaded data. } \item{frequency}{ a character string, one of "auto", "quarterly", "monthly", or "daily", defining the frequency of the data records. Note, the import function tries autodetect the frequency of the time series to be dowwnloaded. This may fail, in such case specify the frequency explicitely. } \item{from}{ the date from when to extract the time series. } \item{nDaysBack}{ the number of days back. } \item{query}{ a character string, denoting the location of the data at the web site. } \item{save}{ a logical value, if set to TRUE the downloaded data file will be stored under the path and file name specified by the string \code{file}. By default FALSE. } \item{sep}{ a charcter value specifying the column separator. } \item{source}{a character string setting the URL of the source. If \code{NULL}, then the URL will be set automatically to its default value. } \item{symbols}{ a character string with the symbols to be downloaded. } \item{to}{ the end date of the data download, by default the current date. } \item{try}{ a logical value, if set to TRUE the Internet access will be checked. } \item{\dots}{ optional arguments to be passed. } } \value{ The function \code{fredImport} returns an S4 object of class \code{fWEBDATA} with the following slots: \item{@call}{ the function call. } \item{@data}{ the data as downloaded formatted as a data.frame. } \item{@param}{ a character vector whose elements contain the values of selected parameters of the argument list. } \item{@title}{ a character string with the name of the download. This can be overwritten specifying a user defined input argument. } \item{@description}{ a character string with an optional user defined description. By default just the current date when the test was applied will be returned. } The function \code{fredSeries} returns an S4 object of class \code{timeSeries} or alternatively an object specified by the function argument \code{returnClass}. } \note{ \bold{Internet Download Functions:} IMPORTANT NOTE: If the service provider changes the data file format it may become necessary to modify and update the functions. Feel free to inspect the code of the functions and to create your own download function from other Internet web sites and Portals. } %\seealso{ % % Two further download functions \code{\link{oandaImport}} and % \code{\link{yahooImport}} allow to import data from Oanda and % from Yahoo Finance. % %} \author{ Diethelm Wuertz for the Rmetrics \R-port. } \references{ Diethelm Wuertz, Yohan Chalabi, and Andrew Ellis, (2010); \emph{Financial Market Data for R/Rmetrics}, Rmetrics eBook, Rmetrics Association and Finance Online, Zurich, www.rmetrics.org. } \examples{ \donttest{ a <- fredImport("DEXSZUS") head(a@data) # a@data is a data frame b <- fredSeries("DEXSZUS") head(b) # timeSeries object } } \keyword{data} \keyword{ts} fImport/man/class-fWEBDATA.Rd0000644000176200001440000000374314266063621015271 0ustar liggesusers\name{class-fWEBDATA} \docType{class} \alias{fWEBDATA-class} \title{Class "fWEBDATA"} \description{ The class fWEBDATA represents a download from the internet. } \section{Objects from the Class}{ Objects can be created by calls of the import or series functions. } \section{Slots}{ \describe{ \item{\code{call}:}{Object of class \code{"call"}: the call of the applied function. } \item{\code{data}:}{Object of class \code{"data.frame"}: the data as downloaded formatted as a data.frame. } \item{\code{param}:}{Object of class \code{"character"}: a character vector whose elements contain the values of selected parameters of the argument list. } \item{\code{title}:}{Object of class \code{"character"}: a character string with the name of the download. This can be overwritten specifying a user defined input argument. } \item{\code{description}:}{Object of class \code{" character"}: a character string with an optional user defined description. By default just the current date and user when the test was applied will be returned.} } } \section{Methods}{ \describe{ \item{show}{\code{signature(object = "fWEBDATA")}: prints an object of class 'fWEBDATA'. } } } \note{ The import and series functions like \code{\link{fredImport}} and \code{\link{fredSeries}} are typical examples which show how to implement download functions as simple \code{timeSeries} objects or as more complicate \code{fWEBDATA} S4 objects. Inspect the R code and feel free to create your own download functions and objects. } \references{ Diethelm Wuertz, Yohan Chalabi, and Andrew Ellis, (2010); \emph{Financial Market Data for R/Rmetrics}, Rmetrics eBook, Rmetrics Association and Finance Online, Zurich, www.rmetrics.org. } \keyword{data} fImport/man/utils-split.Rd0000644000176200001440000000163414266062766015250 0ustar liggesusers\name{utils-split} \alias{charvecSplit} \alias{dataSplit} \alias{stringSplit} \title{Split downloaded data sets} \description{ Helpful dataset and charvec splitting utilities. } \usage{ dataSplit(x, split=" ", col=-1) charvecSplit(x, split=" ", col=1, format="\%F") stringSplit(x, split=" ", col=NULL) } \arguments{ \item{x}{ character vector to be splitted. } \item{split}{ the split character, by default a blank. } \item{col}{ an integer value or vector, the column(s) to be selected. } \item{format}{ the date format of the character vector, by default the ISO-8601 date format. } } \references{ Diethelm Wuertz, Yohan Chalabi, and Andrew Ellis, (2010); \emph{Financial Market Data for R/Rmetrics}, Rmetrics eBook, Rmetrics Association and Finance Online, Zurich, www.rmetrics.org. } \keyword{programming} fImport/man/utils-download.Rd0000644000176200001440000000170614266062615015715 0ustar liggesusers\name{utils-download} \alias{composeURL} \alias{indexGrep} \title{Utilities for composing URL's} \description{ Two helpful utilities for assembling URL's. } \usage{ composeURL(\dots, prefix="http://") indexGrep(pattern, x, \dots) } \arguments{ \item{\dots}{ for \code{composeURL}, character strings from which the URL will be composed; for \code{indexGrep}, optional arguments to be passed to the function \code{grep}. } \item{prefix}{ a character string specifying the prefix of the URL. } \item{pattern}{ a character string containing a regular expression to be matched in the given character vector. } \item{x}{ a character vector where matches are sought. } } \references{ Diethelm Wuertz, Yohan Chalabi, and Andrew Ellis, (2010); \emph{Financial Market Data for R/Rmetrics}, Rmetrics eBook, Rmetrics Association and Finance Online, Zurich, www.rmetrics.org. } \keyword{programming} fImport/man/methods-show.Rd0000644000176200001440000000126114263246022015356 0ustar liggesusers\name{show-methods} \docType{methods} \alias{show-methods} \alias{show,ANY-method} \alias{show,fWEBDATA-method} \title{WEBDATA Download Show Methods} \description{ Show methods for WEBDATA downloads. } \section{Methods}{ \describe{ \item{object = "ANY"}{ Generic function. } \item{object = "fWEBDATA"}{ Print function for objects of class \code{"fWEBDATA"}. } } } \references{ Diethelm Wuertz, Yohan Chalabi, and Andrew Ellis, (2010); \emph{Financial Market Data for R/Rmetrics}, Rmetrics eBook, Rmetrics Association and Finance Online, Zurich, www.rmetrics.org. } \keyword{data} fImport/man/read-links.Rd0000644000176200001440000000324714650724113014776 0ustar liggesusers\name{read-links} \alias{read.links} \title{Links Browser interface} \description{ Uses the Links Text Browser to read a web page. } \usage{ read.links(url, intern = TRUE, bin = NULL, pipe = FALSE, \dots) } \arguments{ \item{url}{ a character string specifying the URL of the web page. } \item{intern}{ a logical which indicates whether to make the output of the command an R object. } \item{bin}{ a string with the path of your lynx binary or NULL if lynx binary is available in the operating system path. } \item{pipe}{ a logical which indicates whether the result should be returned as a \code{pipe()} commmand. } \item{\dots}{ optional arguments passed to links binary. } } \value{ the downloaded text } \references{ Diethelm Wuertz, Yohan Chalabi, and Andrew Ellis, (2010); \emph{Financial Market Data for R/Rmetrics}, Rmetrics eBook, Rmetrics Association and Finance Online, Zurich, www.rmetrics.org. } \seealso{ Alternative text browser functions are the Rmetrics functions \code{\link{read.lynx}} and \code{\link{read.w3m}}. To download \code{xls} and \code{xlsx} spread sheets use the functions \code{gdata::read.xls} and \code{xlsx::read.xlsx} from the contributed packages \code{gdata} and \code{xlsx}, respectively. To download text files line by line use the Rmetrics function \code{\link{read.lines}} which wraps the function \code{readLines} from R's base evironment. To postprocess downloaded files use the Rmetrics functions \code{\link{indexGrep}}, \code{\link{dataSplit}}, \code{\link{charvecSplit}}, and \code{\link{stringSplit}}. } \keyword{programming} fImport/man/read-lynx.Rd0000644000176200001440000000346214650724113014647 0ustar liggesusers\name{read-lynx} \alias{read.lynx} \title{Lynx Browser interface} \description{ Uses the Lynx Browser to read a web page. } \usage{ read.lynx(url, intern = TRUE, bin = NULL, pipe = FALSE, \dots) } \arguments{ \item{url}{ a character string specifying the URL of the web page. } \item{intern}{ a logical which indicates whether to make the output of the command an R object. } \item{bin}{ a string with the path of your lynx binary or NULL if lynx binary is available in the operating system path. } \item{pipe}{ a logical which indicates whether the result should be returned as a \code{pipe()} commmand. } \item{\dots}{ optional arguments passed to lynx binary. For example \code{accept_all_cookies = TRUE} or \code{cookie_file="~/.lynx_cookies"}. For a list of options, see the lynx manual page. } } \value{ the downloaded text } \references{ Diethelm Wuertz, Yohan Chalabi, and Andrew Ellis, (2010); \emph{Financial Market Data for R/Rmetrics}, Rmetrics eBook, Rmetrics Association and Finance Online, Zurich, www.rmetrics.org. } \seealso{ Alternative text browser functions are the Rmetrics functions \code{\link{read.links}} and \code{\link{read.w3m}}. To download \code{xls} and \code{xlsx} spread sheets use the functions \code{gdata::read.xls} and \code{xlsx::read.xlsx} from the contributed packages \code{gdata} and \code{xlsx}, respectively. To download text files line by line use the Rmetrics function \code{\link{read.lines}} which wraps the function \code{readLines} from R's base evironment. To postprocess downloaded files use the Rmetrics functions \code{\link{indexGrep}}, \code{\link{dataSplit}}, \code{\link{charvecSplit}}, and \code{\link{stringSplit}}. } \keyword{programming} fImport/DESCRIPTION0000644000176200001440000000231114673240232013400 0ustar liggesusersPackage: fImport Title: Rmetrics - Importing Economic and Financial Data Version: 4041.88 Authors@R: c(person("Diethelm", "Wuertz", role="aut", comment = "original code") , person("Tobias", "Setz", role = c("aut"), email = "tobias.setz@live.com") , person("Yohan", "Chalabi", role = "aut") , person(given = c("Georgi", "N."), family = "Boshnakov", role = c("cre", "aut"), email = "georgi.boshnakov@manchester.ac.uk") ) Description: Provides a collection of utility functions to download and manage data sets from the Internet or from other sources. Depends: R (>= 2.15.1), timeDate, timeSeries Imports: methods, utils Suggests: RUnit, rvest, xml2 LazyData: yes License: GPL (>= 2) URL: https://r-forge.r-project.org/scm/viewvc.php/pkg/fImport/?root=rmetrics (devel), https://www.rmetrics.org BugReports: https://r-forge.r-project.org/projects/rmetrics NeedsCompilation: no Packaged: 2024-09-20 08:03:17 UTC; georgi Author: Diethelm Wuertz [aut] (original code), Tobias Setz [aut], Yohan Chalabi [aut], Georgi N. Boshnakov [cre, aut] Maintainer: Georgi N. Boshnakov Repository: CRAN Date/Publication: 2024-09-20 09:30:02 UTC