From 66bb67a7bf29aad4510a0913a2dbc88da0013be8 Mon Sep 17 00:00:00 2001 From: Candace Savonen Date: Wed, 15 Apr 2020 09:40:00 -0400 Subject: [PATCH] Reconfigure how SNV-callers uses BED files for TMB calculations (#671) * Copies of old stuff that I can take pieces from * BED ranges set up * It's mostly working! * Few tinier edits before testing * Change back to normal files * Get rid of old scripts. * Development remnant * Run styler on it all! * Change back the indexing change that apparently HGG was dependent on * Retire old analyses from CircleCI * Add back TCGA processing * Incorporate @jashapiro doc and tidy suggestions * Add TODOs to things we won't do just yet. * genome_size -> region_size * Write down 256GB to figures README * Drop Panel samples in calculate TMB * Use a better fix for the Panel problem * Refresh plot --- .circleci/config.yml | 42 ++-- .../run_caller_consensus_analysis-pbta.sh | 42 +--- .../run_caller_consensus_analysis-tcga.sh | 21 +- .../snv-callers/scripts/02-merge_callers.R | 1 - .../snv-callers/scripts/03-calculate_tmb.R | 224 +++++++++++------- analyses/snv-callers/util/split_mnv.R | 2 +- analyses/snv-callers/util/tmb_functions.R | 107 ++++----- analyses/tmb-compare-tcga/compare-tmb.Rmd | 4 +- analyses/tmb-compare-tcga/compare-tmb.nb.html | 130 ++++------ figures/README.md | 24 +- figures/pngs/fig2-mutational-landscapes.png | Bin 1510491 -> 1263900 bytes figures/scripts/fig2-mutational-landscape.R | 4 +- 12 files changed, 273 insertions(+), 328 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 9e41309fd5..efe29dcd19 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -192,35 +192,35 @@ jobs: name: RNA-Seq composition command: ./scripts/run_in_ci.sh Rscript -e "rmarkdown::render('analyses/rna-seq-composition/rna-seq-composition.Rmd', clean = TRUE)" - # - run: - # name: TCGA SNV Caller Analysis - # command: ./scripts/run_in_ci.sh bash analyses/snv-callers/run_caller_consensus_analysis-tcga.sh + - run: + name: TCGA SNV Caller Analysis + command: ./scripts/run_in_ci.sh bash analyses/snv-callers/run_caller_consensus_analysis-tcga.sh - run: name: SNV Caller Analysis command: OPENPBTA_VAF_CUTOFF=0.5 ./scripts/run_in_ci.sh bash analyses/snv-callers/run_caller_consensus_analysis-pbta.sh - # - run: - # name: Tumor mutation burden with TCGA - # command: ./scripts/run_in_ci.sh Rscript -e "rmarkdown::render('analyses/tmb-compare-tcga/compare-tmb.Rmd', clean = TRUE)" - - # - run: - # name: PBTA vs TCGA explore - # command: ./scripts/run_in_ci.sh Rscript -e "rmarkdown::render('analyses/snv-callers/lancet-wxs-tests/explore-tcga-pbta.Rmd', clean = TRUE)" + - run: + name: Tumor mutation burden with TCGA + command: ./scripts/run_in_ci.sh Rscript -e "rmarkdown::render('analyses/tmb-compare-tcga/compare-tmb.Rmd', clean = TRUE)" + + # This analysis was used to explore the TCGA PBTA data when the BED files used to calculate TCGA + # were incorrect https://github.com/AlexsLemonade/OpenPBTA-analysis/issues/568 + #- run: + # name: PBTA vs TCGA explore + # command: ./scripts/run_in_ci.sh Rscript -e "rmarkdown::render('analyses/snv-callers/lancet-wxs-tests/explore-tcga-pbta.Rmd', clean = TRUE)" - # Retired analysis - # - run: - # name: Lancet WXS vs WGS test - # command: ./scripts/run_in_ci.sh Rscript -e "rmarkdown::render('analyses/snv-callers/lancet-wxs-tests/lancet-paired-WXS-WGS.Rmd', clean = TRUE)" + # This analysis arose from 'PBTA vs TCGA explore' and was used to explore Lancet's ability to handle WXS data #- run: + # name: Lancet WXS vs WGS test + # command: ./scripts/run_in_ci.sh Rscript -e "rmarkdown::render('analyses/snv-callers/lancet-wxs-tests/lancet-paired-WXS-WGS.Rmd', clean = TRUE)" - # Retired analysis - # - run: - # name: Lancet padded vs unpadded test - # command: ./scripts/run_in_ci.sh Rscript -e "rmarkdown::render('analyses/snv-callers/lancet-wxs-tests/lancet-padded-vs-unpadded.Rmd', clean = TRUE)" - + # This analysis arose from PBTA vs TCGA explore' and was used to explore Lancet's results with padded vs unpadded + #- run: + # name: Lancet padded vs unpadded test + # command: ./scripts/run_in_ci.sh Rscript -e "rmarkdown::render('analyses/snv-callers/lancet-wxs-tests/lancet-padded-vs-unpadded.Rmd', clean = TRUE)" - # This analysis was a side concept question and no longer needs to be run. - # - run: + # This analysis was a side concept question and no longer needs to be run. + # - run: # name: SNV Caller VAF Cutoff Experiment # command: ./scripts/run_in_ci.sh Rscript -e "rmarkdown::render('analyses/snv-callers/vaf_cutoff_experiment.Rmd', clean = TRUE)" diff --git a/analyses/snv-callers/run_caller_consensus_analysis-pbta.sh b/analyses/snv-callers/run_caller_consensus_analysis-pbta.sh index 4bd6f8c0bd..c5d40e6a07 100644 --- a/analyses/snv-callers/run_caller_consensus_analysis-pbta.sh +++ b/analyses/snv-callers/run_caller_consensus_analysis-pbta.sh @@ -16,10 +16,7 @@ consensus_file=analyses/snv-callers/results/consensus/pbta-snv-consensus-mutatio # BED and GTF file paths cds_file=scratch/gencode.v27.primary_assembly.annotation.bed -all_mut_wgs_bed=scratch/intersect_strelka_mutect_WGS.bed -all_mut_wxs_bed=data/WXS.hg38.100bp_padded.bed -coding_wgs_bed=scratch/intersect_cds_strelka_mutect_WGS.bed -coding_wxs_bed=scratch/intersect_cds_strelka_mutect_WXS.bed +wgs_bed=scratch/intersect_strelka_mutect_WGS.bed # Set a default for the VAF filter if none is specified vaf_cutoff=${OPENPBTA_VAF_CUTOFF:-0} @@ -54,7 +51,7 @@ python3 analyses/snv-callers/scripts/01-setup_db.py \ bedtools intersect \ -a data/WGS.hg38.strelka2.unpadded.bed \ -b data/WGS.hg38.mutect2.vardict.unpadded.bed \ - > $all_mut_wgs_bed + > $wgs_bed #################### Make coding regions file # Convert GTF to BED file for use in bedtools @@ -65,46 +62,13 @@ gunzip -c data/gencode.v27.primary_assembly.annotation.gtf.gz \ | sort -k 1,1 -k 2,2n \ | bedtools merge \ > $cds_file - -##################### Make WGS coding BED file -# Make WGS coding BED file for strelka -bedtools intersect \ - -a data/WGS.hg38.strelka2.unpadded.bed \ - -b $cds_file \ - > scratch/wgs_coding_strelka.bed - -# Make WGS coding BED file for mutect -bedtools intersect \ - -a data/WGS.hg38.mutect2.vardict.unpadded.bed \ - -b $cds_file \ - > scratch/wgs_coding_mutect.bed - -# Intersect the mutect and strelka coding beds into one -bedtools intersect \ - -a scratch/wgs_coding_mutect.bed \ - -b scratch/wgs_coding_strelka.bed \ - | sort -k 1,1 -k 2,2n \ - | bedtools merge \ - > $coding_wgs_bed - -##################### Make WXS coding BED file -# Intersect coding and WXS ranges, sort and merge -bedtools intersect \ - -a data/WXS.hg38.100bp_padded.bed \ - -b $cds_file \ - | sort -k 1,1 -k 2,2n \ - | bedtools merge \ - > $coding_wxs_bed ######################### Calculate consensus TMB ############################## Rscript analyses/snv-callers/scripts/03-calculate_tmb.R \ --db_file $dbfile \ --output analyses/snv-callers/results/consensus \ --metadata data/pbta-histologies.tsv \ - --all_bed_wgs $all_mut_wgs_bed \ - --all_bed_wxs $all_mut_wxs_bed \ - --coding_bed_wgs $coding_wgs_bed \ - --coding_bed_wxs $coding_wxs_bed \ + --coding_regions $cds_file \ --overwrite ########################## Compress consensus file ############################# diff --git a/analyses/snv-callers/run_caller_consensus_analysis-tcga.sh b/analyses/snv-callers/run_caller_consensus_analysis-tcga.sh index cbab0cb4dd..5365265b6c 100644 --- a/analyses/snv-callers/run_caller_consensus_analysis-tcga.sh +++ b/analyses/snv-callers/run_caller_consensus_analysis-tcga.sh @@ -17,13 +17,6 @@ consensus_file=analyses/snv-callers/results/consensus/tcga-snv-consensus-snv.maf # BED and GTF file paths cds_file=scratch/gencode.v27.primary_assembly.annotation.bed -# The WGS files are really just place holders and aren't used since the TCGA data is all WGS -all_mut_wgs_bed=analyses/snv-callers/ref_files/gencode.v19.basic.exome.hg38liftover.bed -coding_wgs_bed=analyses/snv-callers/ref_files/gencode.v19.basic.exome.hg38liftover.bed - -all_mut_wxs_bed=analyses/snv-callers/ref_files/gencode.v19.basic.exome.hg38liftover.bed -coding_wxs_bed=scratch/intersect_cds_gencode_liftover_WXS.bed - # Set a default for the VAF filter if none is specified vaf_cutoff=${OPENPBTA_VAF_CUTOFF:-0} @@ -61,24 +54,12 @@ gunzip -c data/gencode.v27.primary_assembly.annotation.gtf.gz \ | bedtools merge \ > $cds_file -# Make WXS coding BED file -# TODO: Update this BED when we get the target BEDs updated in v15/v16 -bedtools intersect \ - -a analyses/snv-callers/ref_files/gencode.v19.basic.exome.hg38liftover.bed \ - -b $cds_file \ - | sort -k 1,1 -k 2,2n \ - | bedtools merge \ - > $coding_wxs_bed - ######################### Calculate consensus TMB ############################## Rscript analyses/snv-callers/scripts/03-calculate_tmb.R \ --db_file $dbfile \ --output analyses/snv-callers/results/consensus \ --metadata data/pbta-tcga-manifest.tsv \ - --all_bed_wgs $all_mut_wgs_bed \ - --all_bed_wxs $all_mut_wxs_bed \ - --coding_bed_wgs $coding_wgs_bed \ - --coding_bed_wxs $coding_wxs_bed \ + --coding_regions $cds_file \ --overwrite \ --tcga diff --git a/analyses/snv-callers/scripts/02-merge_callers.R b/analyses/snv-callers/scripts/02-merge_callers.R index ce3537ed02..0b77777340 100644 --- a/analyses/snv-callers/scripts/02-merge_callers.R +++ b/analyses/snv-callers/scripts/02-merge_callers.R @@ -165,4 +165,3 @@ consensus_df %>% as.data.frame() %>% # Write to a TSV file, change NAs back to "." readr::write_tsv(opt$output_file, na = ".") - diff --git a/analyses/snv-callers/scripts/03-calculate_tmb.R b/analyses/snv-callers/scripts/03-calculate_tmb.R index 4744285b0a..c6949c2d7a 100644 --- a/analyses/snv-callers/scripts/03-calculate_tmb.R +++ b/analyses/snv-callers/scripts/03-calculate_tmb.R @@ -9,14 +9,8 @@ # --db_file : Path to sqlite database file made from 01-setup_db.py # --metadata : Relative file path to MAF file to be analyzed. Can be .gz compressed. # Assumes file path is given from top directory of 'OpenPBTA-analysis'. -# --all_bed_wgs : File path that specifies the BED regions file to be used for the -# denominator for all mutations TMB for WGS samples. -# --all_bed_wxs : File path that specifies the BED regions file to be used for the -# denominator for all mutations TMB for WXS samples. -# --coding_bed_wgs : File path that specifies the BED regions file to be used for the -# denominator for coding only TMB for WGS samples. -# --coding_bed_wxs : File path that specifies the BED regions file to be used for the -# denominator for coding only TMB for WXS samples. +# --coding_regions : File path that specifies the BED regions file that specifies +# coding regions that should be used for coding only TMB calculations. # --overwrite : If specified, will overwrite any files of the same name. Default is FALSE. # --tcga: If TRUE, will skip PBTA metadata specific steps # @@ -26,10 +20,7 @@ # --db_file scratch/testing_snv_db.sqlite \ # --output analyses/snv-callers/results/consensus \ # --metadata data/pbta-histologies.tsv \ -# --all_bed_wgs scratch/intersect_strelka_mutect_WGS.bed \ -# --all_bed_wxs data/WXS.hg38.100bp_padded.bed \ -# --coding_bed_wgs scratch/intersect_cds_lancet_strelka_mutect_WGS.bed \ -# --coding_bed_wxs scratch/intersect_cds_WXS.bed \ +# --coding_regions scratch/gencode.v27.primary_assembly.annotation.bed \ # --overwrite ################################ Initial Set Up ################################ @@ -67,27 +58,9 @@ option_list <- list( metavar = "character" ), make_option( - opt_str = "--all_bed_wgs", type = "character", default = "none", - help = "File path that specifies the BED regions file to be used for the - denominator for all mutations TMB for WGS samples.", - metavar = "character" - ), - make_option( - opt_str = "--all_bed_wxs", type = "character", default = "none", - help = "File path that specifies the BED regions file to be used for the - denominator for all mutations TMB for WXS samples.", - metavar = "character" - ), - make_option( - opt_str = "--coding_bed_wgs", type = "character", default = "none", - help = "File path that specifies the BED regions file to be used for the - denominator for coding only TMB for WXS samples. 'OpenPBTA-analysis'", - metavar = "character" - ), - make_option( - opt_str = "--coding_bed_wxs", type = "character", default = "none", - help = "File path that specifies the BED regions file to be used for the - denominator for coding only TMB for WXS samples. 'OpenPBTA-analysis'", + opt_str = "--coding_regions", type = "character", default = "none", + help = "File path that specifies the BED regions file that specifies what + coding regions should be used for coding only TMB.", metavar = "character" ), make_option( @@ -109,15 +82,11 @@ opt <- parse_args(OptionParser(option_list = option_list)) # Make everything relative to root path opt$metadata <- file.path(root_dir, opt$metadata) opt$db_file <- file.path(root_dir, opt$db_file) -opt$all_bed_wgs <- file.path(root_dir, opt$all_bed_wgs) -opt$all_bed_wxs <- file.path(root_dir, opt$all_bed_wxs) -opt$coding_bed_wgs <- file.path(root_dir, opt$coding_bed_wgs) -opt$coding_bed_wxs <- file.path(root_dir, opt$coding_bed_wxs) +opt$coding_regions <- file.path(root_dir, opt$coding_regions) ########### Check that the files we need are in the paths specified ############ needed_files <- c( - opt$metadata, opt$db_file, opt$all_bed_wgs, opt$all_bed_wxs, - opt$coding_bed_wgs, opt$coding_bed_wxs + opt$metadata, opt$db_file, opt$coding_regions ) # Get list of which files were found @@ -180,15 +149,16 @@ join_cols <- c( # Create the consensus for non-MNVs strelka_mutect_maf_df <- strelka %>% # We'll keep the Strelka2 columns and drop Mutect2 columns - dplyr::inner_join(mutect %>% - dplyr::select(join_cols), - by = join_cols, - copy = TRUE) %>% + dplyr::inner_join(mutect %>% + dplyr::select(join_cols), + by = join_cols, + copy = TRUE + ) %>% as.data.frame() # Get Multi-nucleotide calls from mutect as SNVs -split_mutect_df <- split_mnv(mutect) %>% - dplyr::select(join_cols) +split_mutect_df <- split_mnv(mutect) %>% + dplyr::select(join_cols) # join MNV calls with strelka strelka_mutect_mnv <- strelka %>% @@ -208,8 +178,8 @@ if (opt$tcga) { # Merge in the MNVs strelka_mutect_maf_df <- strelka_mutect_maf_df %>% dplyr::union(strelka_mutect_mnv, - by = join_cols - ) + by = join_cols + ) ########################### Set up metadata columns ############################ # Print progress message @@ -220,19 +190,33 @@ if (opt$tcga) { # Format two fields of metadata for use with functions metadata <- readr::read_tsv(opt$metadata) %>% dplyr::mutate( - experimental_strategy = "WXS", # This field doesn't exist for this data, but all is WXS - short_histology = Primary_diagnosis + short_histology = Primary_diagnosis, + target_bed_path = file.path(root_dir, "data", BED_In_Use), + experimental_strategy = "WXS" + ) %>% + dplyr::rename( + Tumor_Sample_Barcode = tumorID, + target_bed = BED_In_Use ) # This field is named differently # Manifest files only have first 12 letters of the barcode so we gotta chop the end off strelka_mutect_maf_df <- strelka_mutect_maf_df %>% dplyr::mutate(Tumor_Sample_Barcode = substr(Tumor_Sample_Barcode, 0, 12)) -} else { # pbta data +} else { # pbta data # Isolate metadata to only the samples that are in the datasets metadata <- readr::read_tsv(opt$metadata) %>% dplyr::filter(Kids_First_Biospecimen_ID %in% strelka_mutect_maf_df$Tumor_Sample_Barcode) %>% dplyr::distinct(Kids_First_Biospecimen_ID, .keep_all = TRUE) %>% - dplyr::rename(Tumor_Sample_Barcode = Kids_First_Biospecimen_ID) + dplyr::rename(Tumor_Sample_Barcode = Kids_First_Biospecimen_ID) %>% + # Make a Target BED regions column + dplyr::mutate( + target_bed = dplyr::recode(experimental_strategy, + "WGS" = "scratch/intersect_strelka_mutect_WGS.bed", + "WXS" = "data/WXS.hg38.100bp_padded.bed" + #TODO: make a padded/unpadded script option + ), + target_bed_path = file.path(root_dir, target_bed) + ) # Make sure that we have metadata for all these samples. if (!all(unique(strelka_mutect_maf_df$Tumor_Sample_Barcode) %in% metadata$Tumor_Sample_Barcode)) { @@ -242,63 +226,137 @@ if (opt$tcga) { # Add in metadata strelka_mutect_maf_df <- strelka_mutect_maf_df %>% dplyr::inner_join(metadata %>% - dplyr::select( - Tumor_Sample_Barcode, - experimental_strategy, - short_histology - ), - by = "Tumor_Sample_Barcode") + dplyr::select( + Tumor_Sample_Barcode, + experimental_strategy, + short_histology, + target_bed, + target_bed_path + ), + by = "Tumor_Sample_Barcode" + ) %>% + # Remove samples if they are labeled "Panel" + dplyr::filter(experimental_strategy != "Panel") + +############################# Set Up BED Files ################################# +# Make a data.frame of the unique BED file paths and their names +bed_files_key_df <- strelka_mutect_maf_df %>% + dplyr::select(Tumor_Sample_Barcode, target_bed, target_bed_path) %>% + dplyr::distinct() + +# Get the file paths for the bed files +bed_file_paths <- bed_files_key_df %>% + dplyr::distinct(target_bed, target_bed_path) %>% + tibble::deframe() + +# Read in each unique BED file and turn into GenomicRanges object +bed_ranges_list <- lapply(bed_file_paths, function(bed_file) { + + # Read in BED file as data.frame + bed_df <- readr::read_tsv(bed_file, + col_names = c("chr", "start", "end") + ) -############################# Coding TMB file ################################## + # Make into a GenomicRanges object + bed_ranges <- GenomicRanges::GRanges( + seqnames = bed_df$chr, + ranges = IRanges::IRanges( + start = bed_df$start, + end = bed_df$end + ) + ) + return(bed_ranges) +}) + +#################### Set up Coding Region version of BED ranges ################ +# Read in the coding regions BED file +coding_regions_df <- readr::read_tsv(opt$coding_regions, + col_names = c("chr", "start", "end") +) +# Make into a GenomicRanges object +coding_ranges <- GenomicRanges::GRanges( + seqnames = coding_regions_df$chr, + ranges = IRanges::IRanges( + start = coding_regions_df$start, + end = coding_regions_df$end + ) +) + +# For each BED range, find the coding regions intersection +coding_bed_ranges_list <- lapply(bed_ranges_list, function(bed_range, + coding_grange = coding_ranges) { + # Find the intersection + coding_intersect_ranges <- GenomicRanges::intersect(bed_range, coding_grange) + + # Return the reduce version of these ranges + return(GenomicRanges::reduce(coding_intersect_ranges)) +}) + +########################### All mutations TMB file ############################# # If the file exists or the overwrite option is not being used, run TMB calculations -if (file.exists(tmb_coding_file) && !opt$overwrite) { +if (file.exists(tmb_all_file) && !opt$overwrite) { # Stop if this file exists and overwrite is set to FALSE warning(cat( - "The 'coding only' Tumor Mutation Burden file already exists: \n", - tmb_coding_file, "\n", + "The 'all mutations' Tumor Mutation Burden file already exists: \n", + tmb_all_file, "\n", "Use --overwrite if you want to overwrite it." )) } else { # Print out warning if this file is going to be overwritten if (file.exists(tmb_coding_file)) { - warning("Overwriting existing 'coding only' TMB file.") + warning("Overwriting existing 'all mutations' TMB file.") } - # Print out progress message - message(paste("Calculating 'coding only' TMB...")) - - # Calculate coding only TMBs and write to file - tmb_coding_df <- calculate_tmb(strelka_mutect_maf_df, - bed_wgs = opt$coding_bed_wgs, - bed_wxs = opt$coding_bed_wxs + # Run TMB calculation on each tumor sample and its respective BED range + tmb_all_df <- purrr::map2_df( + bed_files_key_df$Tumor_Sample_Barcode, + bed_files_key_df$target_bed, + ~ calculate_tmb( + tumor_sample_barcode = .x, + maf_df = strelka_mutect_maf_df, + bed_ranges = bed_ranges_list[[.y]] + ) ) - readr::write_tsv(tmb_coding_df, tmb_coding_file) + + # Write to TSV file + readr::write_tsv(tmb_all_df, tmb_all_file) # Print out completion message - message(paste("TMB 'coding only' calculations saved to:", tmb_coding_file)) + message(paste("TMB 'all' calculations saved to:", tmb_all_file)) } - -########################### All mutations TMB file ############################# +############################# Coding TMB file ################################## # If the file exists or the overwrite option is not being used, run TMB calculations -if (file.exists(tmb_all_file) && !opt$overwrite) { +if (file.exists(tmb_coding_file) && !opt$overwrite) { # Stop if this file exists and overwrite is set to FALSE warning(cat( - "The 'all mutations' Tumor Mutation Burden file already exists: \n", - tmb_all_file, "\n", + "The 'coding only' Tumor Mutation Burden file already exists: \n", + tmb_coding_file, "\n", "Use --overwrite if you want to overwrite it." )) } else { # Print out warning if this file is going to be overwritten if (file.exists(tmb_coding_file)) { - warning("Overwriting existing 'all mutations' TMB file.") + warning("Overwriting existing 'coding only' TMB file.") } - # Calculate TMBs and write to TMB file - tmb_all_df <- calculate_tmb(strelka_mutect_maf_df, - bed_wgs = opt$all_bed_wgs, - bed_wxs = opt$all_bed_wxs + + # Print out progress message + message(paste("Calculating 'coding only' TMB...")) + + # Run coding TMB calculation on each tumor sample and its + # respective coding BED range + tmb_coding_df <- purrr::map2_df( + bed_files_key_df$Tumor_Sample_Barcode, + bed_files_key_df$target_bed, + ~ calculate_tmb( + tumor_sample_barcode = .x, + maf_df = strelka_mutect_maf_df, + bed_ranges = coding_bed_ranges_list[[.y]] + ) ) - readr::write_tsv(tmb_all_df, tmb_all_file) + + # Write to TSV file + readr::write_tsv(tmb_coding_df, tmb_coding_file) # Print out completion message - message(paste("TMB 'all' calculations saved to:", tmb_all_file)) + message(paste("TMB 'coding only' calculations saved to:", tmb_coding_file)) } diff --git a/analyses/snv-callers/util/split_mnv.R b/analyses/snv-callers/util/split_mnv.R index 26638ea824..f8249466ea 100644 --- a/analyses/snv-callers/util/split_mnv.R +++ b/analyses/snv-callers/util/split_mnv.R @@ -62,7 +62,7 @@ split_mnv <- function(mnv_tbl) { mnv_pos = dplyr::row_number(), Start_Position = Start_Position + mnv_pos - 1, End_Position = Start_Position - ) %>% + ) %>% dplyr::ungroup() return(mnv_df) } diff --git a/analyses/snv-callers/util/tmb_functions.R b/analyses/snv-callers/util/tmb_functions.R index 34c89715a3..771a38fda0 100644 --- a/analyses/snv-callers/util/tmb_functions.R +++ b/analyses/snv-callers/util/tmb_functions.R @@ -32,7 +32,9 @@ maf_to_granges <- function(maf_df) { ) } -snv_ranges_filter <- function(maf_df, keep_ranges = NULL, bp_window = 0) { +snv_ranges_filter <- function(maf_df, + keep_ranges = NULL, + bp_window = 0) { # Given a MAF formatted data.frame and a BED regions data.frame; filter out # any variants of the MAF df that are not within the BED regions. # @@ -52,7 +54,7 @@ snv_ranges_filter <- function(maf_df, keep_ranges = NULL, bp_window = 0) { # Turn the MAF sample mutations into a GRanges object maf_granges <- maf_to_granges(maf_df) - + # If ranges is given as a data.frame, convert if (is.data.frame(keep_ranges)) { # Turn the bed regions df into a GRanges object @@ -72,92 +74,75 @@ snv_ranges_filter <- function(maf_df, keep_ranges = NULL, bp_window = 0) { keep_ranges, maxgap = bp_window ) - + # Calculate of ratio of variants in this BED using the @from slot which - # indicates the indices of the ranges in `wxs_maf_ranges` that have overlaps - # with `wxs_bed_ranges` + # indicates the indices of the ranges in `maf_ranges` that have overlaps + # with `keep_ranges` ratio <- length(overlap@from) / nrow(maf_df) - + # What fraction of mutations are in these bed regions? cat( "Ratio of variants in this BED:", ratio, "\n", "Ratio of variants being filtered out:", 1 - ratio, "\n" ) - + # Only keep those in the BED regions that overlap the `wxs_bed_granges` filt_maf_df <- maf_df[unique(overlap@from), ] - + # Return this matrix with the WXS mutations filtered but WGS the same return(filt_maf_df) } -calculate_tmb <- function(maf_df, bed_wgs, bed_wxs) { - # Calculate Tumor Mutational Burden for each sample given their WGS or WXS - # sizes in bp. Based on the BED files provided, tthis function filters out SNV - # outside those ranges and uses the total size in bp of those BED ranges for th - # TMB denominator. +calculate_tmb <- function(tumor_sample_barcode = NULL, + maf_df, + bed_ranges) { + # Calculate Tumor Mutational Burden a given sample in `Tumor_Sample_Barcode` + # given a target region BED frame. This function uses `snv_ranges_filter` to + # filter out SNVs outside those target BED ranges and uses the total size in + # bp of those BED ranges for the TMB denominator. # - # TMB = # variants / size of the genome or exome surveyed + # TMB = # variants / size of the genome or exome surveyed / Mb # # Args: + # tumor_sample_barcode: A string corresponding to a sample + # id in the `Tumor_Sample_Barcode` MAF file in maf_df. # maf_df: maf data.frame that has been turned into a data.frame, has had # the experimental_stategy column added from the metadata (can be # done with the `set_up_maf` function) and has WXS mutations filtered # using `wxs_bed_filter` function (If the situation calls for it). - # bed_wgs: BED file path with genome ranges to be used for filtering and - # genome size denominator for WGS samples - # bed_wxs: BED file path genome ranges to be used for filtering and genome - # size denominator for WXS samples + # bed_ranges: A GenomicRanges made from the BED file of the target regions to use for TMB + # calculations. # # Returns: - # A sample-wise data.frame with Tumor Mutation Burden statistics calculated - # using the given WGS and WXS sizes. - - # Read in the BED files we need - bed_wgs <- readr::read_tsv(bed_wgs, col_names = FALSE) - bed_wxs <- readr::read_tsv(bed_wxs, col_names = FALSE) - + # A calculated total region size, and TMB for the given Tumor_Sample_Barcode, + # returned as a single row data.frame. `experimental_strategy`, `short_histology` + # columns are carried along. + # Sum up genome sizes - wgs_size <- sum(bed_wgs[, 3] - bed_wgs[, 2]) - wxs_size <- sum(bed_wxs[, 3] - bed_wxs[, 2]) - - # Don't want integers per se - wgs_size <- as.numeric(wgs_size) - wxs_size <- as.numeric(wxs_size) - - # For WXS samples, filter out mutations that are outside of these coding regions. - filt_wxs_maf_df <- snv_ranges_filter(dplyr::filter( - maf_df, - experimental_strategy == "WXS" - ), - keep_ranges = bed_wxs - ) - - # For WXS samples, filter out mutations that are outside of these coding regions. - filt_wgs_maf_df <- snv_ranges_filter(dplyr::filter( - maf_df, - experimental_strategy == "WGS" - ), - keep_ranges = bed_wgs - ) - - # Bind the filtered WXS sample rows back to the WGS samples - filt_maf_df <- dplyr::bind_rows(filt_wxs_maf_df, filt_wgs_maf_df) - + bed_size <- as.numeric(sum(bed_ranges@ranges@width)) + + # Filter to only the sample's mutations + sample_maf_df <- maf_df %>% + dplyr::filter(Tumor_Sample_Barcode == tumor_sample_barcode) + + # Filter out mutations that are outside of these coding regions. + filt_maf_df <- snv_ranges_filter(sample_maf_df, keep_ranges = bed_ranges) + # Make a genome size variable - tmb <- maf_df %>% - dplyr::mutate(genome_size = dplyr::recode(experimental_strategy, - "WGS" = wgs_size, - "WXS" = wxs_size - )) %>% + tmb <- sample_maf_df %>% dplyr::group_by( - Tumor_Sample_Barcode, experimental_strategy, genome_size, + #TODO: Make this column passing stuff more flexible with some tidyeval maybe + Tumor_Sample_Barcode = tumor_sample_barcode, + experimental_strategy, short_histology ) %>% # Count number of mutations for that sample - dplyr::summarize(mutation_count = dplyr::n()) %>% - # Calculate TMB - dplyr::mutate(tmb = mutation_count / (genome_size / 1000000)) - + dplyr::summarize( + mutation_count = dplyr::n(), + region_size = bed_size, + tmb = mutation_count / (region_size / 1000000) + ) + + return(tmb) } diff --git a/analyses/tmb-compare-tcga/compare-tmb.Rmd b/analyses/tmb-compare-tcga/compare-tmb.Rmd index fb645680d0..74e861f42a 100644 --- a/analyses/tmb-compare-tcga/compare-tmb.Rmd +++ b/analyses/tmb-compare-tcga/compare-tmb.Rmd @@ -71,7 +71,7 @@ tmb_pbta <- data.table::fread(file.path( "pbta-snv-mutation-tmb-coding.tsv" )) %>% # This variable is weird when binding but we don't need it for the plot so we'll just remove it. - dplyr::select(-genome_size) %>% + dplyr::select(-region_size) %>% dplyr::filter(experimental_strategy != "Panel") ``` @@ -85,7 +85,7 @@ tmb_tcga <- data.table::fread(file.path( "consensus", "tcga-snv-mutation-tmb-coding.tsv" )) %>% - dplyr::select(-genome_size) + dplyr::select(-region_size) ``` ## Plot the TMB as a CDF plot diff --git a/analyses/tmb-compare-tcga/compare-tmb.nb.html b/analyses/tmb-compare-tcga/compare-tmb.nb.html index 468aaae30d..fbff2a698e 100644 --- a/analyses/tmb-compare-tcga/compare-tmb.nb.html +++ b/analyses/tmb-compare-tcga/compare-tmb.nb.html @@ -2965,18 +2965,24 @@

Packages and functions

Declare names of input and output directories.

- -

rr tmb_cdf_plot <- function(tmb_df, plot_title, colour) { tmb_df %>% as.data.frame() %>% dplyr::mutate(short_histology = tools::toTitleCase(short_histology)) %>% # Only plot histologies groups with more than min_samples number of samples dplyr::group_by(short_histology, add = TRUE) %>% # Only keep groups with this amount of samples dplyr::filter(dplyr::n() > 5) %>% # Calculate histology group mean dplyr::mutate( hist_median = median(tmb), hist_rank = rank(tmb, ties.method = ) / dplyr::n(), sample_size = paste0(= , dplyr::n()) ) %>% dplyr::ungroup() %>% dplyr::mutate(short_histology = reorder(short_histology, hist_median)) %>% # Now we will plot these as cummulative distribution plots ggplot2::ggplot(ggplot2::aes( x = hist_rank, y = tmb )) + ggplot2::geom_point(color = colour) + # Add summary line for mean ggplot2::geom_segment( x = 0, xend = 1, color = , ggplot2::aes(y = hist_median, yend = hist_median) ) + # Separate by histology ggplot2::facet_wrap(~ short_histology + sample_size, nrow = 1, strip.position = ) + ggplot2::theme_classic() + ggplot2::xlab(\) + ggplot2::ylab(mutations per Mb) + # Transform to log10 make non-log y-axis labels ggplot2::scale_y_continuous(trans = 1p, breaks = c(0, 1, 3, 10, 30, 100, 10000, 30000), limits = c(0, 30000)) + ggplot2::scale_x_continuous(limits = c(-0.2, 1.2), breaks = c()) + # Making it pretty ggplot2::theme(legend.position = ) + ggplot2::theme( axis.text.x = ggplot2::element_blank(), axis.ticks.x = ggplot2::element_blank(), strip.placement = , strip.text = ggplot2::element_text(size = 10, angle = 90, hjust = 1), strip.background = ggplot2::element_rect(fill = NA, color = NA) ) + ggplot2::ggtitle(plot_title) }

-
+ +
data_dir <- file.path("..", "..", "data")
+scratch_dir <- file.path("..", "..", "scratch")
+results_dir <- "results"
+plots_dir <- "plots"

Create output directories for this analysis.

- -

rr # TODO: update if the this tmb consensus file gets updated in a future data release tmb_pbta <- data.table::fread(file.path(.., -callers, , , -snv-mutation-tmb-coding.tsv)) %>% # This variable is weird when binding but we don’t need it for the plot so we’ll just remove it. dplyr::select(-genome_size) %>% dplyr::filter(experimental_strategy != )

-
+ +
if (!dir.exists(results_dir)) {
+  dir.create(results_dir)
+}
+if (!dir.exists(plots_dir)) {
+  dir.create(plots_dir)
+}
@@ -2995,7 +3001,7 @@

Set up consensus data

Read in the consensus TMB file.

- +
# TODO: update if the this tmb consensus file gets updated in a future data release
 tmb_pbta <- data.table::fread(file.path(
   "..",
@@ -3005,23 +3011,19 @@ 

Set up consensus data

"pbta-snv-mutation-tmb-coding.tsv" )) %>% # This variable is weird when binding but we don't need it for the plot so we'll just remove it. - dplyr::select(-genome_size) %>% + dplyr::select(-region_size) %>% dplyr::filter(experimental_strategy != "Panel")
+ +
File '../snv-callers/results/consensus/pbta-snv-mutation-tmb-coding.tsv' has size 0. Returning a NULL data.table.Error in is_character(x) : object 'region_size' not found
+ - -
# TODO: update if this tmb consensus file gets updated in a future data release
-tmb_tcga <- data.table::fread(file.path(
-  "..",
-  "snv-callers",
-  "results",
-  "consensus",
-  "tcga-snv-mutation-tmb-coding.tsv"
-)) %>%
-  dplyr::select(-genome_size)
+ +

rr tcga_plot <- cdf_plot( df = tmb_tcga, plot_title = (Adult), num_col = , group_col = _histology, color = #630882, n_group = 5, x_lim = c(-1.2, 1.2), y_lim = c(0, 30000), x_lab = \, y_lab = Mutations per Mb, breaks = c() ) + ggplot2::theme( axis.title.y = ggplot2::element_blank(), axis.text.y = ggplot2::element_blank(), axis.ticks.y = ggplot2::element_blank(), strip.text.x = ggplot2::element_text(size = 9) )

+
@@ -3031,84 +3033,27 @@

Plot the TMB as a CDF plot

Plot each dataset as its own CDF plot.

- -
pbta_plot <- cdf_plot(
-  df = tmb_pbta,
-  plot_title = "PBTA",
-  num_col = "tmb",
-  group_col = "short_histology",
-  color = "#3BC8A2",
-  n_group = 5,
-  x_lim = c(-1.2, 1.2),
-  y_lim = c(0, 30000),
-  x_lab = "",
-  y_lab = "Coding Mutations per Mb", 
-  breaks = c(0, 3, 10, 30, 100, 300, 1000, 3000, 10000, 30000)
-) +
-  ggplot2::theme(
-    strip.text.x = ggplot2::element_text(size = 12)
-  )
+ +

rr # Put the plots together tmb_plot <- cowplot::plot_grid(pbta_plot, tcga_plot, align = axis = , rel_widths = c(2.5, 1), label_size = 12 )

+
- -
tcga_plot <- cdf_plot(
-  df = tmb_tcga,
-  plot_title = "TCGA (Adult)",
-  num_col = "tmb",
-  group_col = "short_histology",
-  color = "#630882",
-  n_group = 5,
-  x_lim = c(-1.2, 1.2),
-  y_lim = c(0, 30000),
-  x_lab = "",
-  y_lab = "Coding Mutations per Mb",
-  breaks = c()
-) +
-  ggplot2::theme(
-    axis.title.y = ggplot2::element_blank(),
-    axis.text.y = ggplot2::element_blank(),
-    axis.ticks.y = ggplot2::element_blank(),
-    strip.text.x = ggplot2::element_text(size = 9)
-  )
+ +

rr # Save the plot to a png cowplot::save_plot(file.path(plots_dir, -cdf-pbta-tcga.png), plot = tmb_plot, base_width = 35, base_height = 20, unit =
+)

+

Combine both TMB data.frames into one plot

- -
# Put the plots together
-tmb_plot <- cowplot::plot_grid(pbta_plot, tcga_plot,
-  align = "v",
-  axis = "left",
-  rel_widths = c(2.5, 1),
-  label_size = 12
-)
- - - -

Save this final plot to a png file.

- - - -
# Save the plot to a png
-cowplot::save_plot(file.path(plots_dir, "tmb-cdf-pbta-tcga.png"),
-  plot = tmb_plot, base_width = 35, base_height = 20, unit = "cm"
-)
- - - -

Print from png so rendering is smoother TMB Plot

- -
-

Session Info

- - - -
sessionInfo()
+ +

rr sessionInfo()

+
R version 3.6.0 (2019-04-26)
@@ -3204,9 +3149,22 @@ 

Session Info

[131] askpass_1.1
+ +

Save this final plot to a png file.

+ + + + +

Print from png so rendering is smoother TMB Plot

+
+
+

Session Info

+ + +
-
LS0tCnRpdGxlOiAiVHVtb3IgTXV0YXRpb24gQnVyZGVuIENvbXBhcmlzb24gd2l0aCBUQ0dBIGRhdGEiCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogVFJVRQogICAgdG9jX2Zsb2F0OiBUUlVFCmF1dGhvcjogQy4gU2F2b25lbiBmb3IgQUxTRiBDQ0RMCmRhdGU6IDIwMTkKLS0tCgojIyMjIFB1cnBvc2UKClBsb3QgdGhlIGNvbnNlbnN1cyB0dW1vciBtdXRhdGlvbiBidXJkZW4gc3RhdGlzdGljcyBmb3IgUEJUQSBpbiBjb21wYXJpc29uIHRvIFRDR0EgYnJhaW4tcmVsYXRlZCBkYXRhLiAKCiMjIyMgVXNhZ2UKClRvIHJ1biB0aGlzIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgdXNlOgpgYGAKUnNjcmlwdCAtZSAicm1hcmtkb3duOjpyZW5kZXIoJ2FuYWx5c2VzL3RtYi1jb21wYXJlLXRjZ2EvY29tcGFyZS10bWIuUm1kJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuID0gVFJVRSkiCmBgYAoKX1RoaXMgYXNzdW1lcyB5b3UgYXJlIGluIHRoZSB0b3AgZGlyZWN0b3J5IG9mIHRoZSByZXBvc2l0b3J5Ll8KCiMjIFNldHVwCgojIyMjIFBhY2thZ2VzIGFuZCBmdW5jdGlvbnMKCmBgYHtyfQojIG1hZ3JpdHRyIHBpcGUKYCU+JWAgPC0gZHBseXI6OmAlPiVgCmBgYAoKRGVjbGFyZSBuYW1lcyBvZiBpbnB1dCBhbmQgb3V0cHV0IGRpcmVjdG9yaWVzLgoKYGBge3J9CmRhdGFfZGlyIDwtIGZpbGUucGF0aCgiLi4iLCAiLi4iLCAiZGF0YSIpCnNjcmF0Y2hfZGlyIDwtIGZpbGUucGF0aCgiLi4iLCAiLi4iLCAic2NyYXRjaCIpCnJlc3VsdHNfZGlyIDwtICJyZXN1bHRzIgpwbG90c19kaXIgPC0gInBsb3RzIgpgYGAKCkNyZWF0ZSBvdXRwdXQgZGlyZWN0b3JpZXMgZm9yIHRoaXMgYW5hbHlzaXMuIAoKYGBge3J9CmlmICghZGlyLmV4aXN0cyhyZXN1bHRzX2RpcikpIHsKICBkaXIuY3JlYXRlKHJlc3VsdHNfZGlyKQp9CmlmICghZGlyLmV4aXN0cyhwbG90c19kaXIpKSB7CiAgZGlyLmNyZWF0ZShwbG90c19kaXIpCn0KYGBgCgpDdXN0b20gZnVuY3Rpb24gZm9yIHBsb3R0aW5nIHRoZSBUTUIuIAoKYGBge3J9CnNvdXJjZShmaWxlLnBhdGgoInV0aWwiLCAiY2RmLXBsb3QtZnVuY3Rpb24uUiIpKQpgYGAKCiMjIFNldCB1cCBjb25zZW5zdXMgZGF0YQoKUmVhZCBpbiB0aGUgY29uc2Vuc3VzIFRNQiBmaWxlLiAKCmBgYHtyfQojIFRPRE86IHVwZGF0ZSBpZiB0aGUgdGhpcyB0bWIgY29uc2Vuc3VzIGZpbGUgZ2V0cyB1cGRhdGVkIGluIGEgZnV0dXJlIGRhdGEgcmVsZWFzZQp0bWJfcGJ0YSA8LSBkYXRhLnRhYmxlOjpmcmVhZChmaWxlLnBhdGgoCiAgIi4uIiwKICAic252LWNhbGxlcnMiLAogICJyZXN1bHRzIiwKICAiY29uc2Vuc3VzIiwKICAicGJ0YS1zbnYtbXV0YXRpb24tdG1iLWNvZGluZy50c3YiCikpICU+JQogICMgVGhpcyB2YXJpYWJsZSBpcyB3ZWlyZCB3aGVuIGJpbmRpbmcgYnV0IHdlIGRvbid0IG5lZWQgaXQgZm9yIHRoZSBwbG90IHNvIHdlJ2xsIGp1c3QgcmVtb3ZlIGl0LgogIGRwbHlyOjpzZWxlY3QoLWdlbm9tZV9zaXplKSAlPiUKICBkcGx5cjo6ZmlsdGVyKGV4cGVyaW1lbnRhbF9zdHJhdGVneSAhPSAiUGFuZWwiKQpgYGAKCgpgYGB7cn0KIyBUT0RPOiB1cGRhdGUgaWYgdGhpcyB0bWIgY29uc2Vuc3VzIGZpbGUgZ2V0cyB1cGRhdGVkIGluIGEgZnV0dXJlIGRhdGEgcmVsZWFzZQp0bWJfdGNnYSA8LSBkYXRhLnRhYmxlOjpmcmVhZChmaWxlLnBhdGgoCiAgIi4uIiwKICAic252LWNhbGxlcnMiLAogICJyZXN1bHRzIiwKICAiY29uc2Vuc3VzIiwKICAidGNnYS1zbnYtbXV0YXRpb24tdG1iLWNvZGluZy50c3YiCikpICU+JQogIGRwbHlyOjpzZWxlY3QoLWdlbm9tZV9zaXplKQpgYGAKCiMjIFBsb3QgdGhlIFRNQiBhcyBhIENERiBwbG90CgpQbG90IGVhY2ggZGF0YXNldCBhcyBpdHMgb3duIENERiBwbG90LiAKCmBgYHtyfQpwYnRhX3Bsb3QgPC0gY2RmX3Bsb3QoCiAgZGYgPSB0bWJfcGJ0YSwKICBwbG90X3RpdGxlID0gIlBCVEEiLAogIG51bV9jb2wgPSAidG1iIiwKICBncm91cF9jb2wgPSAic2hvcnRfaGlzdG9sb2d5IiwKICBjb2xvciA9ICIjM0JDOEEyIiwKICBuX2dyb3VwID0gNSwKICB4X2xpbSA9IGMoLTEuMiwgMS4yKSwKICB5X2xpbSA9IGMoMCwgMzAwMDApLAogIHhfbGFiID0gIiIsCiAgeV9sYWIgPSAiQ29kaW5nIE11dGF0aW9ucyBwZXIgTWIiLCAKICBicmVha3MgPSBjKDAsIDMsIDEwLCAzMCwgMTAwLCAzMDAsIDEwMDAsIDMwMDAsIDEwMDAwLCAzMDAwMCkKKSArCiAgZ2dwbG90Mjo6dGhlbWUoCiAgICBzdHJpcC50ZXh0LnggPSBnZ3Bsb3QyOjplbGVtZW50X3RleHQoc2l6ZSA9IDEyKQogICkKYGBgCgpgYGB7cn0KdGNnYV9wbG90IDwtIGNkZl9wbG90KAogIGRmID0gdG1iX3RjZ2EsCiAgcGxvdF90aXRsZSA9ICJUQ0dBIChBZHVsdCkiLAogIG51bV9jb2wgPSAidG1iIiwKICBncm91cF9jb2wgPSAic2hvcnRfaGlzdG9sb2d5IiwKICBjb2xvciA9ICIjNjMwODgyIiwKICBuX2dyb3VwID0gNSwKICB4X2xpbSA9IGMoLTEuMiwgMS4yKSwKICB5X2xpbSA9IGMoMCwgMzAwMDApLAogIHhfbGFiID0gIiIsCiAgeV9sYWIgPSAiQ29kaW5nIE11dGF0aW9ucyBwZXIgTWIiLAogIGJyZWFrcyA9IGMoKQopICsKICBnZ3Bsb3QyOjp0aGVtZSgKICAgIGF4aXMudGl0bGUueSA9IGdncGxvdDI6OmVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZ2dwbG90Mjo6ZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcy55ID0gZ2dwbG90Mjo6ZWxlbWVudF9ibGFuaygpLAogICAgc3RyaXAudGV4dC54ID0gZ2dwbG90Mjo6ZWxlbWVudF90ZXh0KHNpemUgPSA5KQogICkKYGBgCgpDb21iaW5lIGJvdGggVE1CIGRhdGEuZnJhbWVzIGludG8gb25lIHBsb3QKCmBgYHtyfQojIFB1dCB0aGUgcGxvdHMgdG9nZXRoZXIKdG1iX3Bsb3QgPC0gY293cGxvdDo6cGxvdF9ncmlkKHBidGFfcGxvdCwgdGNnYV9wbG90LAogIGFsaWduID0gInYiLAogIGF4aXMgPSAibGVmdCIsCiAgcmVsX3dpZHRocyA9IGMoMi41LCAxKSwKICBsYWJlbF9zaXplID0gMTIKKQpgYGAKClNhdmUgdGhpcyBmaW5hbCBwbG90IHRvIGEgcG5nIGZpbGUuCgpgYGB7cn0KIyBTYXZlIHRoZSBwbG90IHRvIGEgcG5nCmNvd3Bsb3Q6OnNhdmVfcGxvdChmaWxlLnBhdGgocGxvdHNfZGlyLCAidG1iLWNkZi1wYnRhLXRjZ2EucG5nIiksCiAgcGxvdCA9IHRtYl9wbG90LCBiYXNlX3dpZHRoID0gMzUsIGJhc2VfaGVpZ2h0ID0gMjAsIHVuaXQgPSAiY20iCikKYGBgCgpQcmludCBmcm9tIHBuZyBzbyByZW5kZXJpbmcgaXMgc21vb3RoZXIKIVtUTUIgUGxvdF0oLi9wbG90cy90bWItY2RmLXBidGEtdGNnYS5wbmcpCgojIyBTZXNzaW9uIEluZm8KCmBgYHtyfQpzZXNzaW9uSW5mbygpCmBgYAo=
+
LS0tCnRpdGxlOiAiVHVtb3IgTXV0YXRpb24gQnVyZGVuIENvbXBhcmlzb24gd2l0aCBUQ0dBIGRhdGEiCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogVFJVRQogICAgdG9jX2Zsb2F0OiBUUlVFCmF1dGhvcjogQy4gU2F2b25lbiBmb3IgQUxTRiBDQ0RMCmRhdGU6IDIwMTkKLS0tCgojIyMjIFB1cnBvc2UKClBsb3QgdGhlIGNvbnNlbnN1cyB0dW1vciBtdXRhdGlvbiBidXJkZW4gc3RhdGlzdGljcyBmb3IgUEJUQSBpbiBjb21wYXJpc29uIHRvIFRDR0EgYnJhaW4tcmVsYXRlZCBkYXRhLiAKCiMjIyMgVXNhZ2UKClRvIHJ1biB0aGlzIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgdXNlOgpgYGAKUnNjcmlwdCAtZSAicm1hcmtkb3duOjpyZW5kZXIoJ2FuYWx5c2VzL3RtYi1jb21wYXJlLXRjZ2EvY29tcGFyZS10bWIuUm1kJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuID0gVFJVRSkiCmBgYAoKX1RoaXMgYXNzdW1lcyB5b3UgYXJlIGluIHRoZSB0b3AgZGlyZWN0b3J5IG9mIHRoZSByZXBvc2l0b3J5Ll8KCiMjIFNldHVwCgojIyMjIFBhY2thZ2VzIGFuZCBmdW5jdGlvbnMKCmBgYHtyfQojIG1hZ3JpdHRyIHBpcGUKYCU+JWAgPC0gZHBseXI6OmAlPiVgCmBgYAoKRGVjbGFyZSBuYW1lcyBvZiBpbnB1dCBhbmQgb3V0cHV0IGRpcmVjdG9yaWVzLgoKYGBge3J9CmRhdGFfZGlyIDwtIGZpbGUucGF0aCgiLi4iLCAiLi4iLCAiZGF0YSIpCnNjcmF0Y2hfZGlyIDwtIGZpbGUucGF0aCgiLi4iLCAiLi4iLCAic2NyYXRjaCIpCnJlc3VsdHNfZGlyIDwtICJyZXN1bHRzIgpwbG90c19kaXIgPC0gInBsb3RzIgpgYGAKCkNyZWF0ZSBvdXRwdXQgZGlyZWN0b3JpZXMgZm9yIHRoaXMgYW5hbHlzaXMuIAoKYGBge3J9CmlmICghZGlyLmV4aXN0cyhyZXN1bHRzX2RpcikpIHsKICBkaXIuY3JlYXRlKHJlc3VsdHNfZGlyKQp9CmlmICghZGlyLmV4aXN0cyhwbG90c19kaXIpKSB7CiAgZGlyLmNyZWF0ZShwbG90c19kaXIpCn0KYGBgCgpDdXN0b20gZnVuY3Rpb24gZm9yIHBsb3R0aW5nIHRoZSBUTUIuIAoKYGBge3J9CnNvdXJjZShmaWxlLnBhdGgoInV0aWwiLCAiY2RmLXBsb3QtZnVuY3Rpb24uUiIpKQpgYGAKCiMjIFNldCB1cCBjb25zZW5zdXMgZGF0YQoKUmVhZCBpbiB0aGUgY29uc2Vuc3VzIFRNQiBmaWxlLiAKCmBgYHtyfQojIFRPRE86IHVwZGF0ZSBpZiB0aGUgdGhpcyB0bWIgY29uc2Vuc3VzIGZpbGUgZ2V0cyB1cGRhdGVkIGluIGEgZnV0dXJlIGRhdGEgcmVsZWFzZQp0bWJfcGJ0YSA8LSBkYXRhLnRhYmxlOjpmcmVhZChmaWxlLnBhdGgoCiAgIi4uIiwKICAic252LWNhbGxlcnMiLAogICJyZXN1bHRzIiwKICAiY29uc2Vuc3VzIiwKICAicGJ0YS1zbnYtbXV0YXRpb24tdG1iLWNvZGluZy50c3YiCikpICU+JQogICMgVGhpcyB2YXJpYWJsZSBpcyB3ZWlyZCB3aGVuIGJpbmRpbmcgYnV0IHdlIGRvbid0IG5lZWQgaXQgZm9yIHRoZSBwbG90IHNvIHdlJ2xsIGp1c3QgcmVtb3ZlIGl0LgogIGRwbHlyOjpzZWxlY3QoLXJlZ2lvbl9zaXplKSAlPiUKICBkcGx5cjo6ZmlsdGVyKGV4cGVyaW1lbnRhbF9zdHJhdGVneSAhPSAiUGFuZWwiKQpgYGAKCgpgYGB7cn0KIyBUT0RPOiB1cGRhdGUgaWYgdGhpcyB0bWIgY29uc2Vuc3VzIGZpbGUgZ2V0cyB1cGRhdGVkIGluIGEgZnV0dXJlIGRhdGEgcmVsZWFzZQp0bWJfdGNnYSA8LSBkYXRhLnRhYmxlOjpmcmVhZChmaWxlLnBhdGgoCiAgIi4uIiwKICAic252LWNhbGxlcnMiLAogICJyZXN1bHRzIiwKICAiY29uc2Vuc3VzIiwKICAidGNnYS1zbnYtbXV0YXRpb24tdG1iLWNvZGluZy50c3YiCikpICU+JQogIGRwbHlyOjpzZWxlY3QoLXJlZ2lvbl9zaXplKQpgYGAKCiMjIFBsb3QgdGhlIFRNQiBhcyBhIENERiBwbG90CgpQbG90IGVhY2ggZGF0YXNldCBhcyBpdHMgb3duIENERiBwbG90LiAKCmBgYHtyfQpwYnRhX3Bsb3QgPC0gY2RmX3Bsb3QoCiAgZGYgPSB0bWJfcGJ0YSwKICBwbG90X3RpdGxlID0gIlBCVEEiLAogIG51bV9jb2wgPSAidG1iIiwKICBncm91cF9jb2wgPSAic2hvcnRfaGlzdG9sb2d5IiwKICBjb2xvciA9ICIjM0JDOEEyIiwKICBuX2dyb3VwID0gNSwKICB4X2xpbSA9IGMoLTEuMiwgMS4yKSwKICB5X2xpbSA9IGMoMCwgMzAwMDApLAogIHhfbGFiID0gIiIsCiAgeV9sYWIgPSAiQ29kaW5nIE11dGF0aW9ucyBwZXIgTWIiLCAKICBicmVha3MgPSBjKDAsIDMsIDEwLCAzMCwgMTAwLCAzMDAsIDEwMDAsIDMwMDAsIDEwMDAwLCAzMDAwMCkKKSArCiAgZ2dwbG90Mjo6dGhlbWUoCiAgICBzdHJpcC50ZXh0LnggPSBnZ3Bsb3QyOjplbGVtZW50X3RleHQoc2l6ZSA9IDEyKQogICkKYGBgCgpgYGB7cn0KdGNnYV9wbG90IDwtIGNkZl9wbG90KAogIGRmID0gdG1iX3RjZ2EsCiAgcGxvdF90aXRsZSA9ICJUQ0dBIChBZHVsdCkiLAogIG51bV9jb2wgPSAidG1iIiwKICBncm91cF9jb2wgPSAic2hvcnRfaGlzdG9sb2d5IiwKICBjb2xvciA9ICIjNjMwODgyIiwKICBuX2dyb3VwID0gNSwKICB4X2xpbSA9IGMoLTEuMiwgMS4yKSwKICB5X2xpbSA9IGMoMCwgMzAwMDApLAogIHhfbGFiID0gIiIsCiAgeV9sYWIgPSAiQ29kaW5nIE11dGF0aW9ucyBwZXIgTWIiLAogIGJyZWFrcyA9IGMoKQopICsKICBnZ3Bsb3QyOjp0aGVtZSgKICAgIGF4aXMudGl0bGUueSA9IGdncGxvdDI6OmVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dC55ID0gZ2dwbG90Mjo6ZWxlbWVudF9ibGFuaygpLAogICAgYXhpcy50aWNrcy55ID0gZ2dwbG90Mjo6ZWxlbWVudF9ibGFuaygpLAogICAgc3RyaXAudGV4dC54ID0gZ2dwbG90Mjo6ZWxlbWVudF90ZXh0KHNpemUgPSA5KQogICkKYGBgCgpDb21iaW5lIGJvdGggVE1CIGRhdGEuZnJhbWVzIGludG8gb25lIHBsb3QKCmBgYHtyfQojIFB1dCB0aGUgcGxvdHMgdG9nZXRoZXIKdG1iX3Bsb3QgPC0gY293cGxvdDo6cGxvdF9ncmlkKHBidGFfcGxvdCwgdGNnYV9wbG90LAogIGFsaWduID0gInYiLAogIGF4aXMgPSAibGVmdCIsCiAgcmVsX3dpZHRocyA9IGMoMi41LCAxKSwKICBsYWJlbF9zaXplID0gMTIKKQpgYGAKClNhdmUgdGhpcyBmaW5hbCBwbG90IHRvIGEgcG5nIGZpbGUuCgpgYGB7cn0KIyBTYXZlIHRoZSBwbG90IHRvIGEgcG5nCmNvd3Bsb3Q6OnNhdmVfcGxvdChmaWxlLnBhdGgocGxvdHNfZGlyLCAidG1iLWNkZi1wYnRhLXRjZ2EucG5nIiksCiAgcGxvdCA9IHRtYl9wbG90LCBiYXNlX3dpZHRoID0gMzUsIGJhc2VfaGVpZ2h0ID0gMjAsIHVuaXQgPSAiY20iCikKYGBgCgpQcmludCBmcm9tIHBuZyBzbyByZW5kZXJpbmcgaXMgc21vb3RoZXIKIVtUTUIgUGxvdF0oLi9wbG90cy90bWItY2RmLXBidGEtdGNnYS5wbmcpCgojIyBTZXNzaW9uIEluZm8KCmBgYHtyfQpzZXNzaW9uSW5mbygpCmBgYAo=
diff --git a/figures/README.md b/figures/README.md index 31eb543b23..c453d2eb7a 100644 --- a/figures/README.md +++ b/figures/README.md @@ -1,12 +1,12 @@ ## Running the figure generation script -Steps to refresh all publication-ready figures. +Steps to refresh all publication-ready figures. All steps assume your current directory is the top of this repository. #### 1. Obtain the current dataset. See [these instructions](https://github.com/AlexsLemonade/OpenPBTA-analysis#how-to-obtain-openpbta-data) to obtain the current data release. -We recommend [using the download script](https://github.com/AlexsLemonade/OpenPBTA-analysis#data-access-via-download-script) to obtain data because this will automatically create symlinks in `data/` to the latest files. +We recommend [using the download script](https://github.com/AlexsLemonade/OpenPBTA-analysis#data-access-via-download-script) to obtain data because this will automatically create symlinks in `data/` to the latest files. #### 2. Set up an up-to-date project Docker container. @@ -22,7 +22,7 @@ docker run \ ``` You may choose to use [`docker exec`](https://docs.docker.com/engine/reference/commandline/exec/) to interact with the container from there or if you'd prefer the RStudio interface, you can navigate to `localhost:8787` and enter username `rstudio` and the password you set with the `run` command above. -#### 3. Run the bash script that generates the figures (`scripts/run-figures.sh`). +#### 3. Run the bash script that generates the figures (`scripts/run-figures.sh`). This script runs **_all_** the intermediate steps needed to generate figures starting with the original data files. @@ -41,18 +41,18 @@ However, we list information about the resources, intermediate steps, and [PBTA | Figure | Individual script | Notes on requirements | Linked analysis modules | PBTA data files consumed | |--------|--------|------------------|-------------------------|-----------------------------| | Figure 1 | [scripts/fig1-sample-distribution.R`](./scripts/fig1-sample-distribution.R) | No high RAM requirements | [`sample-distribution-analysis`](https://github.com/AlexsLemonade/OpenPBTA-analysis/tree/master/analyses/sample-distribution-analysis) | `pbta-histologies.tsv` | -| Figure 2 | [scripts/fig2-mutational-landscape.R`](./scripts/fig2-mutational-landscape.R) | ~128MB of RAM are needed due to the run_caller_consensus_analysis-pbta.sh handling of large MAF files|[`snv-callers`](https://github.com/AlexsLemonade/OpenPBTA-analysis/tree/master/analyses/snv-callers)
[`mutational-signatures`](https://github.com/AlexsLemonade/OpenPBTA-analysis/tree/master/analyses/mutational-signatures) | `pbta-snv-lancet.vep.maf.gz`
`pbta-snv-mutect2.vep.maf.gz`
`pbta-snv-strelka2.vep.maf.gz`
`pbta-snv-vardict.vep.maf.gz`
`tcga-snv-lancet.vep.maf.gz`
`tcga-snv-mutect2.vep.maf.gz`
`tcga-snv-strelka2.vep.maf.gz` | +| Figure 2 | [scripts/fig2-mutational-landscape.R`](./scripts/fig2-mutational-landscape.R) | 256GB of RAM are needed due to the run_caller_consensus_analysis-pbta.sh handling of large MAF files|[`snv-callers`](https://github.com/AlexsLemonade/OpenPBTA-analysis/tree/master/analyses/snv-callers)
[`mutational-signatures`](https://github.com/AlexsLemonade/OpenPBTA-analysis/tree/master/analyses/mutational-signatures) | `pbta-snv-lancet.vep.maf.gz`
`pbta-snv-mutect2.vep.maf.gz`
`pbta-snv-strelka2.vep.maf.gz`
`pbta-snv-vardict.vep.maf.gz`
`tcga-snv-lancet.vep.maf.gz`
`tcga-snv-mutect2.vep.maf.gz`
`tcga-snv-strelka2.vep.maf.gz` | ## Color Palette Usage This project has a set of unified color palettes. There are 6 sets of hex color keys to be used for all final figures, stored as 6 TSV files in the `figures/palettes` folder. `hex_codes` contains the colors to be passed to your plotting code and `color_names` contains short descriptors of each color (e.g. `gradient_1`, or `divergent_neutral`). -Each palette contains an `na_color` that is the same color in all palettes. +Each palette contains an `na_color` that is the same color in all palettes. This color should be used for all `NA` values. `na_color` is always the last value in the palette. If `na_color` is not needed or is supplied separately to a plotting function, you can use a `dplyr::filter(hex_code != "na_color")` to remove `na_color`. -Biospecimens without a `short_histology` designation are coded as `none` and assigned the `na_color` in `palettes/histology_color_palette.tsv`. +Biospecimens without a `short_histology` designation are coded as `none` and assigned the `na_color` in `palettes/histology_color_palette.tsv`. | Palette File Name | HEX color key | Color Notes | Variable application | |--------------|--------------------|-----------|----------------------| @@ -130,8 +130,8 @@ gradient_col_palette <- gradient_col_palette %>% **Step 2)** Make a color function. -In this example, we are building a `colorRamp2` function based on a regular interval between the minimum and maximum of our variable `df$variable` by using `seq`. -However, depending on your data's distribution a regular interval based palette might not represent your data well on the plot. +In this example, we are building a `colorRamp2` function based on a regular interval between the minimum and maximum of our variable `df$variable` by using `seq`. +However, depending on your data's distribution a regular interval based palette might not represent your data well on the plot. You can provide any numeric vector to color code a palette using `circlize::colorRamp2` as long as that numeric vector is the same length as the palette itself. ``` @@ -155,14 +155,14 @@ df <- df %>% # Some plotting packages want a color function ComplexHeatmap::heatmap(df, - col = col_fun, + col = col_fun, na_col = na_color ) ``` ### Updating color palettes -The color palette TSV files are created by running `scripts/color_palettes.R`, which can be called by `Rscript scripts/color_palettes.R`. -Hex codes for the palettes are hard-coded in this script. +The color palette TSV files are created by running `scripts/color_palettes.R`, which can be called by `Rscript scripts/color_palettes.R`. +Hex codes for the palettes are hard-coded in this script. The script can be called from anywhere in this repository (will look for the `.git` file). -The hex codes table in `figures/README.md` and its swatches should also be updated by using the `swatches_table` function at the end of the script and copy and pasting this function's output to the appropriate place in the table. +The hex codes table in `figures/README.md` and its swatches should also be updated by using the `swatches_table` function at the end of the script and copy and pasting this function's output to the appropriate place in the table. diff --git a/figures/pngs/fig2-mutational-landscapes.png b/figures/pngs/fig2-mutational-landscapes.png index 027484b78ab1f46611f687c5da2d76f46d1a6a55..cf08d99f4165a7bf21def3c9a7dca014574cd945 100644 GIT binary patch literal 1263900 zcmeFac{G=6+Xk$5cBP_8Dngn>q7ag4M@of4$docgA!MGmb}1E+A+wB`qs&vKGLuNj z@H5ZzJo}EDRQB_%Z+(Bff4pmb?{BSVSKPn*zV7Qfuk$?4<2=smc_1w*zJX#V1sNIH zhBK!{FOrdMxkN^`$$iaA{KPQQIv#(lH9W0oOh$Hi5AnYh=3zpnWMqtFXGBG0&HZ}n zEX-wFXL;t%I5?~=WKlOh7;I0`A%E!pix**@VnKgxrFoh3-HA2U{ZfKlv|5r^l3b*; zmu~dle;gE8&WgEyVOn#T@x=}DwZ1*Rd!K07+O>=q8wac@IOpcQe!z0J@phk;V0*TZ zqey&_vH!TAyCE+fF|c1BM(@x|W`F$pH}N<3{VR$0`Sp2XA}YM%*FW($H|I6X%YGpI zdD9B=Wj{H6oGED856I4luiCooCybr8tR}Q=T>nYI1ur!-Ioq*GjW|FsJSJFs}6R_gC51 zJ=3i=|2@S(&EwGWZM{*xfPO_?meshDL6+RUvo^yeJWuzZk8%rJ_AIg{mg+r02HBHZ zwzjrung4&Gu4%kM1?gu4C+TJH9gg zdPR6=MTD19Ri?$TBZDpPo;@M8g@3H3oEZ+Bk8!G6_6@Qo=EyxkX=!O6K745P9PK9w z;cEGK)eCWoo!S4ok`-6-@$r?rYieqW%_+uVBxXgPY#zGnmR-nL>c+D&{ptrNDxsN| zwTW6KKDWCn4{oKn-Cr*tAdpo%6&xHq*qkRXVz=yTWVfDXZu->I)1y;3HQpcSt51u3-BLwnK*=9S!#O@Q~{(-p!`)^2(Pexg%!F zFMP5Q7uxh^jUO|pSJqdo2tUtn)~BqSDDFa!`yW1x#bItNtbXpSMC@C#<4v(>$ zpNoui)E9)sXqN?)A990}p>({aL%D1?jJw@fSEk!ck44HvoRT4?rcr9or8woua&ZQ+ zFFTf9E4*@_{3?@~iNV!W^oLSn&OF`k&u?}(BnY=Z;Ai+37k^t@+o>A5<=+Y3E5C}1 zpP%0+(ROw!EG*39!V_0lOpS|86IhC6<=W6OEP=8uorF+D~_mSa7N(U)R%wiTC@JP!YtU8=h= z6TV^BdBq&t+0UOp7qUgGWSF|p3j`|~)~4RNd-v{tJmOTMsIbs<&#Mm)X~c;sqHguM zaLIOd^ed-U@qMH7%SXTJwC5Tf_jt0B;^H2-U3a~)t}htO<#JhKcGC7QyIOeVUa?iL zQ&Y{0pB*We9qaze&c?=8sHyigj_^%7EU*!2Y3YrviOar4Ht4x^(6&K$% z8jhM8HoW;e{JgJzO>(SdO@4mRXiCNFoj8zt_g*h~5zi~T+v_*`0tlx_3$ zfK*)H;pOA~>$%2#Vz0`Zt((um=Iqj6eiz2A6nBZoa_i@q_1B+zyt9{-le5$6{tLxd zZEYpK-Ib9tb&r?dGA~`%c3p?BLALka$uenXS!wBkGP}7~=^4u}d(pQ>M^aL9^q8~+ zqTlV5<-gr1vDPv7OVapPHM=^@96Vo_ZbJ=>;@Hjal`qwEyYyEr`vPycT)UERp7SnW z*@cJ7%8q=bHIOx%gCdGx>L*Z$h&(M)nKI?9ym6>UZA zIfqgb5o8Ge?{VWY##lp|OHNHqtu1uk#cwAvY)hB;}uX;s_FR!;5GN8v_rlx&w@zlgF~zHnFFF0*9-q=+h3!wIw0@=SgC=)6nm z?)36a`aX1L{Ys3)q$@H)|J%#wwS_X0e3~Ub+>w!To-%bW)la_CDhZCf0ke+?w7o3% z-@bm_xUE=c2uAh-j!o{_{QA3pAyo9%rWtd2JfvY)O}?Q>t-oQ}du`0pT`)UwMZ&MO zW{e|#78b((SV+5;UC6i-3&QI<-P+!+t)WmPV zv1s$w#-w-w3dq$gy9b$Y+UD79p9-EH5PwPxZgzS+erQIUdF%1s*A>T2IyRnfb)se! zoSSH7Fe6oy zny=Gg-g-IBsMT9LV8{8^gAsm2T<1+%eg{L|wHtV{2S3u5w+NklE&k5i&)>8f#K4so_%iv!*8>7Snt98p0JF*L#|8>#-PZB#_ z+28WwC(>%xgC8aan{y_b9&VsLMxd41sZls1RYZjDuLjkLtsiLAYQxTYtz*yR;7)QP zCBDRVGpo1I{{H%U_t$t5yyC~lv^+Pzy9WfQE_}NiUMJkRy_819+L(gzVlGhF2G6tK*f$AGxrFMY}H1l{;D zefkXZ*6(=ES@tY0fHo|d#I(rYP^pv zWv-aBjP8W_fQ#)&h~;RPoKbgBi}i~(4|&ze0x8?g6nEoNo1B2)^Gx)QDqqmo?;HK9 z#;~K*mnR-c$%E?j_Zj`!HF(|pf!LIK#D4j^@)={_^^h{sP}~i$?23GT((%#)x)yGo z@aN!V!Vq@xo5oyD(gnR-AI0(Z@$STm+{&Fpz3Q zW-m3{wA55ydMmjH@Ht-T3A7YFm#ZR5sp_cV?7 zn+0Xzr+s#xyys3Q1V@$-5b%$@N$7N4zpea`rF~bdt+ zOv=SrFU8y+S1s~l&*@FB$)2C>H~98)cfFNdF;FrUU*OZHPa7ncyy6Q}3kwT*mD^u} zMD8Tttl8F`7A+s2-QspOz^X5eqQ`2W;Vq^x*??q=go2varYu0<&T6W@?@8U578b*) zlzlZPxsfp4`E$efSK3m{Tf1sf3=p)hsqC(f>tOx_lK^hu+e)#E*YFBp&T2}!7k$on zdV_*|NIET9)aL_%)}MigCx_cpZd4zww>lpvm<6cSpEEyKa3GMbKkI7ZwLE7`JHt>& z3dzlZETvN;^NvA15#D2lGh={A#73W45Ly% zJ}(v1YODUNuQ7_RI?U#i_rgs3?dGTb_>BL0E-fKZ7~&$hv%B+*xmdvspms$?Mb}3B zF5RTlD8JB=-co0zqa09vW~4$&{L%JXB%ASlQR2irY!nsVy`#=%yzYR%$>&DF4UV~1 z7&xMX1NpkD7)6<`ir$)(@xD5%w+`eWF`TvHS+OaCA0B487XR+uJ7g2FuvffshFL$Q zEs<>M#ieQCn@Ek+4qE5!GP^;_&Z?~gyd9Wq4-~IH_nw?aS^8rHGJm03mojQ<>ccvne4f#?yss=z17-* zB}GN+N=cU8vG5+5u${u*y;~_T>UgO@!HNhec5YJYt!9SV4sqgoi+2C<-dOArA75X7 zqn7-JR>!}dw-$M+S$2jo*iNX!M}}0-K5^@P?t=ug)^2`wUmj1LNkv+F0Btu#fvK4I z;|gpPZK3JvK)`Zo<`H5@Fs;Wsxug2Ri7EZIZzV;6&bOE9CB8f^;X}cN6mAOPiYlCK|VtlU_DfzlzijCdZgU7HA{5Ii*0LdLqmgt8ls}(SVk|E0RqnT z8rbR8rH?k2>Q=re|MdK%-Bd;39I^?!Ru6fmVeA~(^mHDBoi!Y^SC+x8TesloG37Ec zGW~dEae9l;M}haSgBw-M>bT7Z8ZLyKs>7tfeLl8+4WC(KkYm&HErCSoeCl8|ebgjr zewKvy#-t+bpO_iQrB)!eqRvt4iGiHC(fDZ~GvqsWs00z0*e{t8Mrhc>GTS8BkZ&|M z+3vz1g#QMzbI&^p&8Q>Ekjs$Ap89jcPAaxJ5LP0-*VRT(Av`VJGnY$$4Tsa=6BrseC9wFTp|IO4UK?@$^@rxq_sQK z@eTE+kSI$lqviW?={zP$_S76F6B}D^Tt=Ve{OmZak@7#?1NJoL*#)^cv}FR^#0h=DhmhO5Yr?y zXKomd49ae{Tdm^r=V0aC`}Va;*-gp7``vk3CNQq7uCBgAJ60j#DlGA>_q`3YrO%Fp zAZ}ggQwqjh0qheqbmu9Rz=-sP3m49HyPr;W)C~X#10wUHquR;!VkPU|8tPp(Or*1L zUT{%zStWRzHwoufZFSyEd=F9k4kz}QONFY<)JP;ShM^W5#jWqGmyq^TQo`Rpb8|E5 zP5S!h0oED4`}p?4hwfls=5Q%o`Kfym@S4w#T!VdXs$jZ){W^Q*z+Z;@+1U-cDkC-h zhOiP`oAnPVsu#K+#GZD!PTCA}U`d)rQoCQ$PvP${x31?tc%RwHGP}ckrNzZF_2b#{ ze~YO>&0i8rZ$N^+*abp$H~hHs|UP#xpLZbJI58_$cp(PublVkrwQvRWR34Z`q46R zk5>Oaw->EMHtTT~B!}zicwe@p1_fQId~xAR4Hbq=_X;7lqZ}sDV2JoLSQCv<`xfh~ zJ~QT|8c7=KuFEjhx5l`{ePd{ih(-j@Rjhb5S8bN9= zPQN(Z?48`3HOU_g;t@i~9gz!K;$<%0x-|%6aNu;MeGf1hX4}Yq;6S?}Pt(%N@CE}X z<-qs9^@isW*tak2-8$3mDmLC)gnA?%*(%8v!)@3w4aM+w*d-Gb{Yp)%g(gH0TKD9_ z)#BG;c9vLxS6ALT0DOAVVX>>*{moQkSobzKAr~}zOHO0b@u?B<-x@DCKTVq7wskAQ zm`#D(zAXnNGXcGjmoeDQ40hP@%p(yyvsU4i)_E>%B4IPH%B2#b>%Lp;&(C9Ii9~83 z^OGg+W@?})B5;~zVs`D-;?yNrBg4ldv9E?0?xf%eO>Z+XJ~YMcKXqE zM1Y9T8vFjj{>pyNrpG+>yoL?J8sC7jR{Zg&tQKiALb+2P60(~ZXapV^#2kgF&73xAe#~>qnb=&q zJw$@&tjHaeu_CAt4Ch|n;^N{*6{m#dcuwparojy24c^{aO(Z}UOcSx%^;uT)J=#JK6X#BEopBDA z^uH`EZJ0kpnB_*H`jr&o53rAin_^C3~4}1%5Wf{V%BJt641dB{n}L5J>rz~CsN^lT%~9ZDGa>% zgX+EEiU)ELlKw?=E*D*%`Xf0?(*gD1C6;n`n40E&$8EH6o@kn$iDJj_k4|4n@9QP zIQDbs4J0ZFs$%b6->flho4?T2bqauKQU~F{QE4|f_b7q4G$yK)3_c{N;58ehiTs1` zZbGA#GH<M1FaV75N@ zG4KUd(UOYD3aDc%&xP=g5|8LT#Ih~>&zS@I>4H*=N`$>iofs5FS?oqELxKaT5`1A) z!WO&&@39B=?_7Idl?i4vA{b=!CSM#T(4g+uxLqX_L`o(@84u_KjFH-tSfroc8IEmu z3#i<6i_&YIBbtToNS-dWj>_f(^M#-D-t3nK?uSZIv5RJ|-g>wMWv%_rzurXwNfH%h zH{i+N^5-wT0gk$pi|Ee1!gpZ>`2h3Y-CegQmqJvy*^J2N%;6p#ILl59pELev-|ZzW z01T>#w-p)Ze2IarjAWkpT|E7ivlpAvwnqxYc33M-$G*0J?$xt4c5zwm}2?!0pBO;uw>OT}Tg)kZ*_w zqdvlNJ9mkUwcqmFa7y4bQavJ*l2@~lv+Wj7ys`@HDvUe`cJSrfLip7qa-`W#DZ8kFG?>gY-dk5Q zbG})k#5JeJd+sMnPQw4TLV>~Do`rFM- zBCB^ASJj+GOeTshJLnO`0ADpL)y(Q{zio6sC?ip4x8#8v@{<5D8#wBPLg^Eb6*s(u z5kIINH*_0#?&HBKf65uV0swDwMJL=Xz!uy+&D(lxr%jsjfBd=r^gYrimz1Ycf_z4F zGxXR?_NxZA!6|8IXw)K^C2X9CSQQ*DV*Ez0r|7q{M1+1M)-M>dGq5M{R}qM*J;0|PZW(d^=q7`^|zk00maoza#a^*vKSDTJc&o6AF*}C-+CIXQX z%*H-WF)=Z-+FRnF-2Pm@UHb1j)`N7EC_o+OHHM*h*hmm?Aamdy3bY(Y!HoQpju@J} zz$6$xd&#U7DQ<>n;`+>n>L4FOlwy|U?H1muH9E@iI>0n<)qz{DcJ(5$6bfewdfUGV zLp@ElN&57u?y6Wl7{G0_TWh%Ws_3|MK2g~Y+zAk{I;@<^aa0Jq9I1RT61ug0+Q7VE zh90lit9;?=<1>W~kN~=@KM4d-4)a2{&7ch0VFW2Eh_uPu%obmy77ze%1*AB3oO_ zxRT<142D5exoVPc(xy!V29zQK3L<@6+ZS4CFipK}8}7wZB?j{VOzH>k7S+8}?6&W^ zz@n52Lq(B*TfdgKo(Q{#K~I4*?Af*5BhoB!tz>T(b+3m5=Ys8<8Mlamv;IhlQDTOrpdIKDU?WMs1Oz&rRf z6wgc!v*z@`9rsPy-K5E^8Z9ANCGloQS1WiGleud zO5{IMuK1#>j^1$u=tSqB)AAJmJbL{LiYa}e+_8;Eb{FU$rvTnpc5FIHg*HKUe=aeh& zOMLYz+At|8|oX68mib9nR% z+Ya=e3_Mjw+fk!caVRucVOu z^x!~%`B1@u)!I>Ad1Jw@fq_D{GZPKP2%fagVo+k-iO|;8p1!@bH1;8H!n{;>(%IrW z5FW&|_#g+OqJ*7I_xfDi^a;kzrka`RHtjjl@>FVQXec=HT$`h=!=_IcUEdu=LI7Hq zhK}H0!n-enVK_Hh{_r3(tvt*Z8VdO2okWqs{@P<=b|xn$!}LE8yo7p&ln>W+B0{U{ z>UJf4Ri&+*6s@~;oF3|XRcOm@`{BzYuP(Tl+1 z&jeSfpi**kTB zwryLzQ4t$LE46|yK!cRPsH|Z){2V4(Kw}UB9u165e7g1|N#5rHV!>`~{()NSi=)1zX|j&Fi40p#(zWQ039Qcfy7| zM;zMjF5)5+#jt#|x^Zln+5U6H>_rUFXfWyeEc7PZ#OhsB+IN!sxWEWrJ zB>j))-rKOQ)Ow^`{N%m$YqN_vB@iYCJlT{SI8n#wZgfI@%>+!(Ds5Pt+2|K}d0z4< zB82VW++WzV*X~6)!oF)WSW(eomAySqwiCGwe>xHv6f|F25oSklxR{f=LmT_CwaOZ3 z46_mSrfG2FjJ)uI@NqMUp8JZnwsR;!=1g@(=bwWy-%P3VeEBE#{+(PR*}TfmnAPT^ zNANd(fI5+~+Dq@S*AcL#0X)yT(i8JD!$f6?t33NY;f+zCF)<9s=GM%)KLq)S0Dgam z6J_5tkaIi+^>nk@sQ#v=PT+SoNCHEI_F*+TktBT9=PUTGwRAuN23ly|Vb zEKmqzF!CbUF+#zivlCEhi$gB?x^3<%43v&%HJ?S7BZ#0pMYH42Un{izpWMdkSK4Yu z1^a*`avX*M-fsY~U$s;KnE?*nfm4$t$9@uwK2gkAtz8eC0XXTzLwH5vBW%PA%bpuc z$?>3=BWPei1b{z_vA?64fC zDrO2jSV5%Ep^Sg*s0{e0M5!}#j=GSwF=RS{G7ajP5>>r`WwIRa+jVIBQH}i2GfxW@ zhDq~t9h>`9>G)VDl$}I51S;E@WTf ztP9aoO@^64H9_!TW~)J!qiP2`SL&+hw{GVTv+d!ClbBtph6s{w*00+51we)a`!L@S z-c2U_9N@1WOZ`vbUcqzlImipUu&L;*huevo1&AvEvzu@1R}kz$%CH|fIXTiL8YaQ@8AV&ZLh=mq#sCyj|L18*V^OI#MwMIo>0MGMDO6<(c&tM*?3lbW|D`j87 zO3R^sRK%9zo^X9gNY)rW>vqQ{^}gD)eYu#hhHzhfmJq?W@+08+a%RVBz(2DSjsaUz zC=-fIM=AzY!UW!n*FIwJyAqY_`f9Kc_| zW!tG71v=0|eRBQR9Z4W`m|5?r*AZ!)eqH)t2Voz)bV$OhvW83fkq}GXl`{Ag^!ELO zEwo%Z(s$WBcK-l_6;M=M99OvZIYKJ%;`kY``oHAM&Xg!W$N=dXq&D8WaykCxOG6NY zAP@*fAJvSnumE5anr++kfn7$sz6`gQ3ANC&!;I)>`$NZjYrtpEnc;VcCcFHw(aP*5 zi`3>oM4o_myPSN3SaV<(kR5OpEv>D@hI3tW^?k$JJ76P-%HGjr{)_Zcop84tD=(kY zY>Iz@h~pwK_6>C-8t;RL4iQcYCO-*0PVgF>oW?LTINDv1O@T{f(j-bR$SDD7RX+BC zS2Kd~9FPj2^HzMVQ;r&r0Ki$%;fxqKQG%L65dsiz8qnr2f^%p%6nRMK*hkx?)x+jS zh{`JLBl&uT7Q8x``5QIKy^WIVZDk1R$4v|KZr?#fzOT3nl#p#ZKk3XjX9TfMWM&SW z1X|VHcA_)%Ddb~(>hJ!^FUBMy0U+p=!b3~AQrImYVn#R-eH2>}zr3b82w}ppo0qvB z*1`!8)2Lf{zwto^?9m!kGr0OW_99Xc#ntYAk}nKNo}ef2 zJr%>Zpt(!t3E@dlajq+VC%X2 zWFIbk&N_!!duwd=5wf$zo|ACKTD~&r{7jLj*UUmki5bkp>~Boc;i7!YJ=ttcrr z0*hnn>rM|Mq9h?!xi!1x9Pr4DgFg|N9jQQepoZ}xWbMRr@jW64Iu?zqnpSHrsSnO|En=_n0K^I!JTtf!~9&f&_tf7TK~_3+_RGiFH- zi7?Pgvj}&qL^itQ;fVrZm#rOW-|D)AEqwmvqfAxz2XF_p7q;`Hib0WxJj`(ifW1&BYtobSpg&Wm@Ba z=-7iX7nl*EYu>MSBV}1gzeIKR#--2`uxIonLRYa`L|RQvO-aeOU$i|Pu)E#u?BUMd z-p6^(NPBTf(U3nOJT1Mg|C>;5=n9HRge1w*w&Cy9m|Dg)*@KS_M#jee6dAyacG+PK zg}0{uW^%X(8KY6{Z<9v+WFsF-5b@`)k88;PUGhISFCVaT+xi{gdfk?-~FU%LH|Km8>B!wi1g01Fo}iT~dv#P;~#G%rrW zyX;@+UB6EBL%=N&{AzM?GO%D_VIj&Q15T`Q6UEwsTU_#1tHPg-6VV%fE7y_gz|(@R zt}eJuLf-(ip}w6mhp4{&`s6?0@Q`Tb|6>zEz@>QASx*q9i)V;S0n$^B-QcC9o7^lf8G@vKvY#GOTqF3+21y?@9mV8&jal+m4+wgcuAg}3ZIjnj8dMAL_ zQI~iK2==&~a67&CUfyBiRzE*2mu_YMvGD>?kAjrcJpkBb$|K&o73de*9NR&AXFg8-vctUfvtdqD)6xhKo+M^Dh>-M$VJFXA`oePIaIu zg22JPZj%!e`#_qlBjJ&~{G>_AjjLi~V{@R;)JLLN{C8<-DUy(|_V3@n6V;>jxg*Ue zeR>{NxvZ+14Y10%hETdAaX$Bq<9U$T4_Iq|-)j1Oqqd;+@Z+jG5jp7^m8twfN9JWb zwv^ejEKJjOg+rtj_k#lh0(eN)oB|}%nwtm4g*ZXs8J3IDgtepi;WtAto_aTLZg9YJ zp;%z82s^hf_hnpMTyQW#na0sHB*=e}eojG8o@4!-fkD=H?Rm~M4nn&O=BDD*W}Ew_ zG+1tX-dPyhn>Vt;ow+FUpuebM7_BXzNeQ4FLmiEF0<&g=BLTPZ@wp=ld#LYrk^V8GJKK=ot3?4N)B;%jY5%GsdXnl@V_B&7fG zo7?BzPKzS_JHaapgKnFd@o;g?j6?|C)YqqUxB|g5kx+6P(9+U!4ntuxHSK18LiO@x zpTnxhjvXuY=8Ou|i#bbQ~=t=Gc!&+NQBpKmWuT4e_tDEzD$^-UnU!{iw zzIo7m`#q73Ga&s`6EzA@b(9i(a`3*VmlxHH9IB1j>mwRf^WB^&uV16Br%zmHsvI4EIg=#@fRA@T#z^HjXEY*L_+n3W|Upq(AM z@#pr^>FVh$xZ3S@q1h;4(bN+|R!T5{`yL0kCxqOMs69+*V6#|ubab4i0up8bePRh% zoieR-V)6^Jx!-IfD6YOGkl$G=VY|!Z?VSrl41PyatZ;-PJIs-&xEUUDJ*{zg9;DVe zD)sF!5FP=vO@!stO-)S|mqkTIvDE%D4^uO`-ky@SZJ)*^U$>lC>_pTMCwCXrn0i8} zZYg&iuOuaa2V?V)@K4;lO62Cvo0dBG7#IlI9PyCQ^zlSSdVBjl@~ofJSkfpe?)k7z z@$f<{6fTXl|Lll-93>lakxzAXvuIz~`?R2+uxid<_RQuXlu zkLSWJmXwqbWGqDKpR202trFROkKj%YcB2%bXG!#wfV$rDKy>Pe_c^e?(S)#e3fY{2 zAJh`h`l&bMOe=F)w${6cFL$^xhsyZWW7^=;3$M?i0PBnm4Q=ry&9seYk7psQY6{-C zc~fBW9D)jJMYEAoHeDm59P5edGXN8K%0ERuRaI4e`eZotH_8mPU_%GZt<8IuUe}KrdL%=E#XduQpw$2j-VKWQk_mFQ^L%WiI7xNpACuQWQhq?LM0=@8SxFIxPT|Dyfz!GpVcszNt~9NwwOy>$Ua zk`Zoc;cEP6J&&0BL|B0rrD^xrL9e?fU4OXwUlha}juD0fmC7d);Q-2_dHe6(;=Fg5 z5DDSSp1(a!`blvgSaZ6 z<>%X9+U4z3?s|J!nbk4VZp*C-h`XbbH~(#{d}ww9&m-T- zr0aonDkqp+b}u|KNb0xmN!IHF@C0XR)~&&#D#|4NA+0Sp;HTf z#NLIb$ZTn*$nvvfH?FUpFXsJrdnTv<`+%3|^e2Lb0ud!5{qs$)Y@foQ0?y2H_8OYy z<@OuwEL>E%aOnK@e4bqe0qtWv>vhAP$99^rP2XdtT6m6z$Zs~=#=~Z%l+M38V|3W1 zp4MrxN9f6}-)+8xZTi(W%i(X&$282A(1_`;1aZ6mnCWY+gfISG0-tW5SPGl`zYl~> zz`vS}zOyg?zuJC&u-grq=Ct#Rdqq*^*K4MFZ)EVUYkI%ww^*`x6&V>v?Mz9>8O0kV zaE>Y$J%|6>$i?K^Y3?>&N!jM&E4cMXJYP02841>Gj=6Utv9ccSv+cuL8!pfIQ3CGeS0((9)6RC(_P{@$^!(8YjG2=clzx*Y0bg=d3xK<-}kcXDNxv6Z#73! z=GH1yJiUm3wIzR>_Rg8a@_Fmd$AM9Pyl=d_+!F0#6itdOxV709v5epIChMh2Et&oE ziz*kBZ;Z7cW4Jj}EsjEK!pR5q8f{;ShY|v#vm1oY`^oJbX60HKx~OYT&Y}YVVfsvo zSF7vY5gC3fD@xN{LZ9mtx3LEBUX_(Qb3NO5!D8PC|5{1j1MVN4BD@}Zt9te?9+F_F zwTy8k9`Gje*B2HZNcMl62{8}lkDtJr-ArF z$a=!?sCNvo1p+P_Hz6WmxYs!Fv!iNZRqXwwS7>fT#)bk!>C6B+yKPbU3z%s{K0>sl z0WgFoC!0b<0bG`=wWLX1Tu~!taA#ZHfE5CGZ#A8h48Ir&QHFnQ*daEyUEI2|ZG&hc zvTJb_$NdMsEhWT@&#g6D$E>~ALm~_94rQpG?Fc|+;(S~7r~l3`h-}OROdu|VHk@z0 z>7wUe90nOnuU;8L^w61>oID2V`8aBI zxg6^k$bE1$S?GAEFhCu@rm|ADV+l?z-uj6#fRi3lRf1^#p+^H1Jzh+sX4RVnc*M8{ z#f9#;jL%|)k2uzMcXhF_usATD-v1QoIqS$0fL^>=J|DHTQG9l`pg?heKt_7{)W{$I zHJM+$nok~~QS>X+ZX@rvNcqhapil(~F~`6q7LV`QHddBsaZtC*ivu1Vk?*a`0ONEU zeURkoO8|TEHYY{M-EGlkp$1Lx0lSNGa-#`KK)e3_{+*K`etP@Ap{&AbeC^t`bV+1y zi(mTjUyiM^!UYK+V~Ytv!kqJm=0Th(VKSJQkZ=oKo8;*=5wa|!$WO+{k8OL1!-85- zIyoTe*U`WHtde$Kym(A(EE}i1tn7Nj#Kgp-DiOsoTbuL)QP#DF7;td2$OiZ@^>->oIc z^V!|he@)4AUeb!~`b~r8mJ{Esj&iO(N@K9CN#73I^3SB`Meh0B{?&6!?s0K8N;O%6 zS`^y;or?CjBgyZTIkav11G{ZGsRkJgk;ncKvxxqG%%m_f&h7d*5X8f~=KJ?Qc`d-e zjBubs^IhHYZSg#4rG)c&|Kr@8+I__*RE~Pz083K_CCb5{+1TPOw^Lv^-;k+7#o!u% zKF8iUXa5;p&~m>r)x|3b3!qzlH9#^`rql;YSdFnm6cmpiJ-9#9zgBCY^oMj3yVqgmHPxhHIZf1 zS_r=1_T2ub#B)&5_qEMLdIeKb_>b?RLhxq51Oj99BN?NcLS!R4&b!b|?tSFisqOdB z55Z?SqBB*D8aPPZ|KLD@V^1=z&xJFIPfRpI+tLE>$<4*(XN@Kra-w(g1U&=&@{RCB zi6v;ghxv)QqZrz@|Qn;T!~%0k9kFo`L3rZqvAbQeB})3^R@mVBFj19*$8 zAsP06wWa^L+R`tmxj4K3%PV(8DQxL;Qcp^}JD##1-3M>PAB-hyT)i=P|GH)fjk9-R zs--1?(<&B1qA=+f?Ao4u*(yEY`}D`Dwz@14mSJ_7;H-n?bEmrB+Ud_Ulcaox)%KUM zQRJSux4<~r3;v$p-g_V5Ts1#c<&#umCzv*Gk?5>ZHuUk{{9x(F=7RT%rHjsy;a8E~ zUcCcJhK+#%@2A@{*QBz`EeGtf$1^md`h6Dbz%6G{ei)dCx@87x!r1tD5_A(t`q7a*|P|<{EM25FI82l=-7aZDm1(JV-D$ym^Cls?gE}zVZho$UM1S0bd5r_O4s;>QKmw;W@s0*Hf^;Z3UeOc1NyI0J zn1joIGPyj=%aRMSFn=v6N*K_;fv}V)FZ2His zHH-3b>0e7FN_&UlhvDOYW_)(-sWvnpm;PsARqT6S*tb;^2XUZhwDVkHU<4r`ic9Z` z0^hSN{C|$570CcnHZ&y%LvxBAx+BCLV zUC8eMJLgfTDpS>8xD(z*N3XN9*eHR&Xp#HfPLW`}n%68AM-e@LzI!-Tqri;>RcXYy zkkqX&a`HFpGYQ?EQQOn@04t(J?WD)z3SfagJz`-gFiPMJ_(8P{e3f2N;!C`i_awB7 z=8&CTP2ij=yP&K*bBAH3!C-#OfHM$Lfn|L1$7skXDkjV=E^OCI;5{OEbSe4NV+pd5 zQBw=_Cc3&P+w4xfznajG{yOhGfXLRPO9BMp-K>wP%VM8B`Ea%OS-}#ohXl057mBqo zN65{GaAw5Lo+;u$3oJ=^JJIsuRq*rSwWD7uR%dKp_wK_Nn)M>v7Ji=ZhRH_BEzA*x z$DV9;Xp=ghr={`ncrShJ-d)3*f?O=>g@=>J%8Tz=jB-p~UV0Lkl%pD*^u0#6M(=D=G_UMz(`gYp zGBMY6)Z}6@!9mRA7xwRX_iWYC1MSm!odRC#9L^LMP&STEMU>S~Ta;QHNWJt`V#tq* zEa?h47Z+mXLu!;GlC18ww6rLcBV$M}Smdh7$UZTLin{6d9%E)ZnC3IvTj49&^_l&- z>%yx9g~!<63rCuga24?yUq@dD^Cc4q-z68BHC)BDGlJ{pXpw%qtoFLsw=Y-O1)K=A zkgyc^!4q}8TDj8)?BGWyv`qEaro9Sp2EbOzwzh~tzwyKFUuzX&sH)$dGm_o$&!e7@ zkrBQ6x#u#D{?Dp|>n|=kNN&Xy8%l_?XP}B?Tm!hiA4<)~r=o?Fpn1V@VH}slnOvcB zJidF=Qj+0(ix}L5Jo{|*gFmDUs*WAp{D4$;T4K^tvR%l}daf?(@C|RD9asNacwJsM z_m_XrLm%du;Ej-_DP@}9>KXD>(kIlXEAK3E z7IZ}ynaEtV0_-p*};Im~qX}@GuWL zxS@(Vq@4OPD2P#zsIx6}6qdey{^Mzjf4oWfFm~mgO*1X&#f5p)2(>U=P_ZE?Voa`3 z-$B|KNa@gk(`qwOG1Oxqy1jmVbgsnM(?2bUHanYO)sAl_hq%8YAS=Uo)T!4drXiS$(dGUgV?N9&nZkj)-nZ=8O-X{DD zpnYmk_{mExUZZ1p@g3!-3F27Na)ZIaJca{PY|F-AKczv=)dp&R1 zZrdSqLd1Z>JrxwtrRe7GPaL%fJ+loC&5$~KmVasj9h#Y7(NQVy#aRqUyO5nD;GBS3 z8w*JLKy+u@p=CpzDK2^}H=eA9=AtD&h!hdhksPwwT=_;x;p zj!g}ehbN&MBlrvS%i}z#Nu-fPubk{9IZCn zMQj~X&iw9I^`f*?ej_*O7B@UrMK%B+NaeU@8_|>C+bsUOmfUFOFn$Dt3XrF`zRsk7& z4;%cbX$kjNx}mE77@q_Mzi=}Tnzx0poqVCqMkyC=3mp@70~L42SI`Rw_>T6tLthDXS-iQ*Z~E>q1kAA~rf z2CsC7mW7oSOWC@1%YHPwkAZ6-uo(pf#XE^e$s!A=nldpT^+?q%U?EXEyad~Q3RDDsGNtQF*sjY9<(j+^LMT3X)sb_vFrM+9Y7ZiV6> z4rdEduo*b>9Cqat$Vlk=>95bcu8@5Am1yu}bG^rHwRezxz|i&dURKsnAZ7VEX3?MT%4)-gS7>o>R&&7dQ_z z73$vi){Dx_v~Df*K&`b0p~8U?Z=OCLYKT5NtoLR6bJd|F`H_~_bW?2m~;#tr=!gP^rJ&Srs#3kQEs zLdQfyP5pruagD(Stse|FREmiJv5Q&&RHF&+NQA@t*Q1-qbLMSSRSETmX@9-S<;y!W zETEbq;5Gu(U^3cH%OT zil?jVEyG;Yis>yop1*98BcWT9IDZh}bYiak$?lW3klePnw9wUVtBG6hz_@2mb4P?P zj;GCYg6hpsdzpzcZbI~=MGVLu_U}IdJpsB={m`F}?BSiHEGBHs+t3(EHbdNHU zFPv2;n7TWg(Z|E%_J~&@PCTI=>@9h@-0&GUA-D-|xKW!rh<**9BiBBnP@Y?QkrVwh z3YqnoeUxx#QgUV&&VK;@&`)diM9%k-9w#V&aAH4kjkA8E&}+_^>N4sFqJ7Z8>=7Uu z?r^HXmb0PD7wj(er)zJJ+ynq8pc+mPMC#g+fAI0~K|AtTl!=h{Dk@gvgeyA|PJr9D zk9@U%f}*lA6gjSLM(^hZiFQUY>%EK5${tIK-_?1YYv<#fUuib+KkEx zYndHnglYX892^L|gH;CAgu~$+d0y*&=}Ig*Ov`WDgN`IL$#)AimP65ZC|Rr;D}cDm z5Q&9}#Vf+ULhJC<0C?2;ps_V{|TE8Hix$xgUL&sKOZ~)&zBK+g?NPo=-99yA)aew_Lq~BO9)1{ z`K8zBM=ZDsw7Jlet{rq}|AiP^b69g{;5`g2?fcV#LW8=i!7iB_g z(d8JTC&E>W*j^J>t!-`h_?P2}2gp~VKxC%W%_o-Rs<1o9&tvPl+{+PnG zdc)4G4@Cb8Tu$5`*Cv0him75l|47sO2Uv)ij}RsR)b!V+^f%l?rw_a!y2`F0_7gr0 z(}DSUC!xeo^qpvFX>D8ukxuCmJ2E5naS|LcCmS93T(GiExM3IKV^0 zYcdFCfUrbg9^)Ffr%%~&zQi4dyZ^>lrNCGBPlXVzOH$D3AiA%oKVgo{D?#&JYG`OE z`q}1j@>MrpyB*d6_5~>Ipl~Al( zcZU%RgDA(VVGRl*!4ecR+&Mcd>q8YN;IaYYsZIXJ7XFlOUqHsQ zIPL?J@o{RjTWGu!r#RshRetDVKE9UYMcD!9mGHtM8xcnuy>ezWH?AU-vN%ACjZGkR z7>D_w_%Xh_nKV_ELP&F=%7LzC(av$|;~A)&pidnaxzSCZOFAC&FYKUnNq9>i zPHf_x(SmgAaL&vShGT-4ncK7P@?ul)F{E<9gzpX7+S?gwD*!3bdPiu~99@tu2F|n` zz{yY0!%;Z|p@$J+Yc-GG?J7km1<##5tH=AV7f)d-*Wv0}{}`BtZ{jG$ZCPRpX05D|a z7oiT#wVd>k*2BM)1Oa`yjN21An%9@Ki2J@ty0WT{1! z!nMZo3$MHSY%*o$J$wkNVszj;s}Tn+Yy026bl-ybR>StINLIQut`Bs~?4ehRSt`~D z+e~%5fj&@a^wL~%VpQQoN$Ba8*Wt18Jp&%EluRg&(9%&YUMw7I^Y+N2A0r?$d=z#6 zQr)XThF4}W0y7m!$nQMvTCmQ0^8|@G)?{qZ_jKF#m*B$Hyist>OWzZ&V~vl>yj2q1 zE@&`6e5Gjo=4@k^*Oll@RqN0CtzQ|~Z5{cdA(!L*Zib{uHVu_s|Dw-dnDTZ~AC&g!K zh`k*XZCMD`_TPWylfofG`i)~cv46%c&M~mx&&)FDLN%7G?9ReNpRBpGDD=g@bYvx> zS@d`mE-Ds@Ed28HD%PNdzu-SyENPKDl4x&ucq*oxS@>Z?(aWFtt8mC?Hr9ybJ8WG) zG)vYye!s8e_3tb^NgvxSPB~nWez;|`>!R#HH}99S;jzTUjXUb% zzVKFzw|<%l*{5%hu78cTv8?DC*WMqYZ2TALee2?@U;b?<*Pgn%4`l?jYwnMbjo{n7 zD#etx^7($&kcB}@|1c!tAD`CTE-Li?Zl&YPmNf?+TqNT1@=EX#Gs??N7bPj2g0HD7Mnd`yRDte5;)2 zd{^_n_`YgcyM)F2e*f*hYi6&Ep4Fr3nS7T#r1ORSYgTe1M?C!^wI%#m0dy0zbK|k| z$;icDHZOc1|KXxHGnmNB6SIo0R^B0MFxAewPmX%+l9gn3wA z{y#}Q(8BGBqshPG85@qQ{V^utYl#}9@XO~~<=t&BX2vgxcw!003?5qY|6%RD!?FI~ z@Zr0XC?P6YQ4uN`*|HjDc1E_4nZ0+2B9xImLS%2sUL}-~y)&{$_U5_X_f6l=?>K(X zaXf!K_whNZk8$7c@p@mc>pIW#Ixon|l=lGghAx5Y14oEA%D*;id9?4WDFZ{s5kRX4 zCykUtU@I33mabSrY-C9D8_aj8#Xs6M%}x3>pJ-h0?=rPjo!&1&cekNXn%);$nPEPR z8ze|z&JMIczv6ucUHJ{(=U0Bwb~G?f+(NvZT&8uSx-9UV6t$FRxZ{J!K(BOV)-{4Oye#z2hj-Ti^+Y2KrsLUnw6_uTOrZAzB`4H2#> z|MVQz;WN@_aoQlf8QMYr_m&5VNoh}&o>=G=q)Dm-|Il?)w8$_Digt9FyyLbp9o0!i z+POZyJ}pU1g1O5^)r&W3R>2|9hZ6nV!H423-xQDQU25rGH`)GdV7B`#?8k&=3%9m) zsRpC`o%=t8=bh6f0|^M`Vxx+)cz(J>7Jm8A)J;Tr_=b)DB7nJ?lWBe5DUR$O%_pwk z_x!(Z1(Hm*^i@n8Sntl*@jBBIiE~wW9URoXnEw^U|9Pw2fRInTe~YnnXlO6mQ3A6v zI`#iOhg?z*J+&IW|Fq02JB7psrTOk~WGgEbOm>-0(umBxxGZs1$lS(9zU8~A(}uTO z26xWRU+)0YpQba8io+AnX9dX7SM;&Zzrg#OYwf#!dO*biX|ef+cXY>_2K8+^9wM8C zj^s=#9-AJ0+Lul1E=8#{0@)d#9*Tc^9l`Bs$z$7SaM2cHxx+_6J#Ii?_86yqh;GjlO5fL10)j%7DR2P5u zflBaXLa;J`EkNFJorCu9F<|5Ammuh{HFq1t$YfDmL^tELO90qFFvm?jKvIx)Rlw6K zz&!vlj~Uqme}Nh(k`WPsC=F5R%0lVl{sd=bYRc!sH*HluulT;xG$%gcJ!bPnp(8Dn z3~t~bGa7~%kpo5oec5*3W#fFf{)EV1hU^mpD=qEb?64{L^g`c=gbC7SjJyogB2$vO zO_}M~6HS9LU!r(@p|utC*~XA{<~o848)U>SU>!3t2VxB*5m#1+Q6^x=be)0Hp$=?n$o!^^&7I)`4Jbg`mjEM$&4XRh4#1;-r(I<+#yjsQIc=le{bNGJ$RKWL zwV2PxIa@w%`_bWB!T#0832iRQxnST`32rFtlx~26!IOC|-3O0U?jN`J+x{0*>0n}t z`gZz)XNy_yM@bb$OPZkbuM5PRD59-u7zdkU_d7=>$E{EEVzvSEyW+UKRZHMSCyUG_ zc)BLZImiapDIoU>R<^K%a}Jo_-?apfJ)1bp%>eUR@`iWcPcoKjwB{KTVkro*y~2jN z=5RlBAB&L}ypNb|01?TmNCi(N0D0vgN(0QZ(%c;Eb^#MzfD%t948gO(?uhu(QEPnw zotRMFA@$Qr2&didwm<0x0fSW$Krovjx>=-m=5IB4CPOy@;w^(4h;w+5=5sew(|RC}R#b=x zj)ect;qsy{c*o1at`?OvCAoU8(TEXu%f z2MHU{*;4{5m1#~I+%OjGDxIM3z5v$E<xur^%Xc>s8(KK9T3;1oI7BcqNOfI-rqX5T@uP6I zLa5hbQ)C_^BwS!983No>{1Gtd?)|J`=%?GJ_141j=>3I71|~=w7G9PGR(2-u9CUwl zQ<1ZzUqbFde57J|!2%pfwf`XhAt_+AR5ST#Q@FccPfggg^-wK2O7ZzxP=3n(6{~;oG zzSfB|^V8`B5hM7+YNg9Xtzd(IE-o%6NF%NneURI>8U1^|EBQ8F?!>XoY7DdO(XC|1 zI*KL8A6u&hh&wbS?zcb?L!1hI+ldJCl-hzol5p0IPz`0mQ8uY<&VPW0>s10{)JxzxOH`ncFHtPa9 zLkvCps{!n|c<2J9aIJTyY(qmC$`Av#@Qt01xQ!<|?m%uNI#=+6K|UFp^wxpn01J3z zrU)RHLm(1{2UG_rWQ4SW&sR}U$dr$&UEAMT)P&1`^b{iPmEee?=w=RjW3U?(A_Oi9 znQie7>@Ok#$N~NgD2y{6@nAs#w4CWbKuOSZxvr@5)Qu)%w&foEMG_@N8cf;U(N}79 z@Wd~*^GtWxtQh*%N>__hI@Bbfc_z>e0FN<0b{U~et}Z2d(PBQP&Ua_h*;7?DVo^|3%l)%QX>%F-lN*EfDQd7?;)Ld`MX0Zm zBln=G?Eq|fw_EQM0EO`!tTb_dDjM@Su7zh-H*OaJLv z4qU?1H{-8F3ApXQI(H4YDPtZ4<3$|4z&rahBwEDh<|H6m%nX(9RNGlvSyh^YQKI@% zyCgzdTq^|sC&ML2Wb;<|@sBHjmE`n<@qotE$&m3Bk|+4f(IslDBS&BG)!z2nv$8Derz&~;u%9Tn06X7Y(PD}H(fjki*un?KIQpIv8^JsTD zqw4;o?#x9-6$%6{X9Ua9qJl3FTYJK&y5=T*g%c5mGH{iRn|muMSPHO6C5R;N9FZp+ zUhaLp@)~lb)lgEGVERimHT>2kIkVFSwem}vk9$=?S_8R67P!uPZV13^1zQk5;gNIP zB6>|R5CP#2o^arRq@W)V(mvS1YhgZ)P9Sh@i0vAaM%m`ucRG)?M-C{M2Qzxx_RX$C zr+1MrDHX2qy4AzPHsnT58`2Pg#~}CikwODin4h2V$<{MMZ2v8?8@gjp*6mXcyKRj{ zN_~8m6m72359?{>2@psDn#h0#2f5{>Z>93i9eLcQvWP4a^BR~u}i(2smY*&XjVHNRB(+guFg zhAJ^W$7bRn(?zJHC1ma<@EV4IJ=kDhd-ok8kRt&6&I=Nh?W6h$&-C;t%VDU%9mTq0 z&f3U-Pe(|e!NYm%{v?;`ICKdixHoI9(x0s{kSGjvzj;GTvzW}~_}GtLl)pC%0h6~! zMu@_cz7B(37+eBulQ0_@-}uJ>sL~I%tzZ0yO}aJ>nDD#HE`XrJ7?=we3U^-~>HW;l zhqf8OrzUfzV&DoHx^KJdHEy?il}jo!BKPzIdH0gCZ5|oW#1A3Z4R8pfYamE4<{5(d z#faM&1Xcnx5n~f^>+aGW4ju9!1_qJc#eA4f^Y&fNGXW(zxnBT%xWd?15Vas?Um+Ig zbq0H0m!*8*I`3YhIi_kpD_T+-p@Ojbqi9)F6?vg&8OXiruhMF2ds{8i4^S16| zN-zr}!vOSQuTEV1A0YwPqH2=GWFJA9wAEXuy zNvd`^p!2;?#4b$WSTwizjJ<`+v0sU4!J>9WDft-}J0TeX;&_%q&q!~t zId!}4Iq4@Q(NXOesJFcDmZIXDj>wJZonDJOD@t*5@B=p()d59Jh*b@O4Umke_=VQM zUh&NrDvmD0f>sRaR9;X33J*I^=GTdc6lZTKegYwaVM@%!^fArB5yT))xea0yq?P|@RtR!-4i@v+ zcA+GlnEo|UuOD-(`(ZK5^QtZ7+e~3^%8jQUb`umF;QEKdlcNT+6OiX_8-gngEmU9A zhvWqe(c$tFVgc#|l%J$%9W#h$s1-BRzT|zHvU1HQ@)sUcjRd<+-v?Jev>a&w&Wc#d zG!0MFb=qQ}EuuPzS72gF1;nwk3+x=g2Ow|3;|Y~6sA?S-zDzz1L%h4;RuYHi4MEQL z88Le#e5|Mlg3`Ue-q7+3Ziy#_-bP0|gZ0J#^cL|W1`+QSN~;wMDbaDk9ShRoWW-1e z)Dl)1`#>5%>1kJcmJ^htbRsj^85zzXc7Gj4#6Xc^2|jph?+Pm@oIg#2h#v}6 zsMao)zH!<5ztcs6wH8M0U4`K@A#Jxf*%J?O$*Qn-MDTPBf(c<86h9#RJO!jLoFHiU z!8mZ(1>`vRmzd*0s|y@481sQuF2Hz**#aO0NXEWt0`gdq01AZir`lr#7xs6*nGyoP zTV)vWh$A;EJBL*b>KGtS?O?VNh}6!KQ{M}WKhgqlK&8Ue)ed|M44USQ{ueu6aB&u| zl*LeWThGjL#}J>xlrj}~fM39Ei*q_a^hgk+E6kmN76YNxeoc`9o64B(2lzHj29$qfF<07TB>96IuQ?^QOGDK8$^ei zLYvxg|*Kx^Sa5&=nw zNO~IgvZqwaWb(7?Y?y{agvFR?KwL>dwA*Qr1OO{kgBgSU|Dztg5H!urakOgKWm&j@ z>}OcP0!MPpH4H~#@Cr8kX_%s6)ALW=NA^KN#jZ(8Y-eq|+wVqGU`O!z2U!dDeO^+U znJrrAvypKDEOixn=&#Nlm2W8j_TSOO$!=@?2OIgJOpDt|1!>E_MZ|=X+*a1Rqg#vh zg9ma((Xd1nN#6fxjR56s|+g!E;>30+)#7~fFOdnBf-F%ByU*mfdIK342S@? z0fT_2U9E8Y|t49wN<}Csq z0+f0OihY<^TE_$ivAaO4BffY`yg;nOp0?D4NY_9qhs@jttq)Skf|T~_0tpETVga&t z{{K9pPbBb$D-gWuXTgVP7SPTGICGF7?oPnqk4n&ADi4BC5oC4sR1mxnNEi~#+$Mm; z3N^0&pI34X*)oRUV9*;IklUAsazI~T&j+}#D2?Ucb|B>u`9|(GgjPxAM@Lr${Wmoh z97sMyROL3%bb$|REjd1aKVtfRx9kJlhTNxcuW@nyJ-X;$^14n7A`xWHqH-Ig&$V$- zsKQ_a8bp5$(Nus3M4 z90H=K05PD~E)VPuMVHxJXiMAtS(bMK2y%^_+4e5OCjwK}+c{l>_a0$RL_{9|N8ps+ zWV$2LWgh{+qD{*XG+JQe0s#0{f`Fc3 z|5HN3Q|QWAYJ!_g#qSCy3QrNOBGp|4FR=N@O6FqNy?wHjU;WAFL{>8Y!5@#LNL$Nl z|8npl;PGcP4)a?Sc=Jd5Q7y za0R)!l7hllD!$d$`;d|Pb%J^J42Wz( z^!rTup3B3C$met3)1_ER0T}j4XMAygU8o)69X52I1ktEwBdOD*otO?b24YGWMn$6w}0pN%EWRY zdDG+hqsPJh?i+U_WJVM_ng5G5@I-b6t^%4#j6j%&xI#lX@$3hUh-J)zK*b}DsCfV| z5DOE}7LdO)v&NwB*!?>1qO^~vx*l`)@ATw%YV5R^$0=~loijd+2wn+wiur>YB#Pr7 zXVj%Cl|Eu54sc-KpS6}$wT6Q94^YIr(6{u$2MJBc6w8{}y1Kg9#Mrg9HAG4(Cic2z z@(h1OY^*CJXb%3{w*Rjpy!WoZ(Hlx*}aK_t=r2t|DA}BJU8I&zJFiW+L$deyO+% z=1tslI==ASudIF|T~ERBwdv@cTcxox&*0g-e*GF500Nz-h?PD}wm#v!Ui07$O(qVYH8sZ2v|GSfOHQDfDB!4O_a|HE4%sI0;#Md;|0 zI%;tY9)nZ627PTbq?I5rle4v5he>%6k&$GWtL%Q|>-5HZTee0V)51>H!{o!=K&!K% z?9z2%v&Th8qy}oQ9%o7rRMeJm4U7iS2|cp`dnqNqSkSo)D?0{_Lmd3=mD=++IWHxe z9M!R?ZRr#n%#9;t_{>?*u^X=OGdc#;+p`#1uj;Ev>;Fdk26;)5_IDTq6QAC-zGyN!%qaU*$ z&+?Hd0uoV6ef^X&JNjF1>wwt0|0Lsyz!i`!`r7|5QXMT?wN6``HQ zw;uCrisd6^9kNCthrc!+5qH;l`V}dU(A_`H=M(?D_BbgfEP;hNN%%Fw+ronE*TjAS zyo1aVcda0}7LU9g>f}%HAF&bP7Zk_)GQ=3vu3)l9cX}(m2``Z|%~EXPJ3V)3`S-py z_$})MUF$kxaouw+72IaF&IG?OCzM9N)uvapYS73gN8;`$)&V-)bq@Ggb*u;N|sbnSE$sw3{Qrdir8g z0M{D#2h2|bW9V~E<|m@NuP)TcK7ghdP*UgRcnhE}fXw~0w(a_*$w3zb_007A#h5!p ztW=~`QPFVlxLSlDEP&-&T}Xr*ZCb8UH%lD<6J(i19)9%%w)ZV7wfEdovqyM2$_qIkED=G;>+K-$O#|WwSJS=+gqDL3I7$j+1I@TlTnoHmd7J z;P~QJna24^I)X|DyFMJ_1jWIlD~Do!#d16?0=)mK5|9ojevN)s^!HYcLfEG#M%v9T z^Q+HZMSscQnZnpR0R9z`5QNb!Bd`er|xHV=N##C$!(1pQFe07p}_aG3`Wk&{8WR``Qj^Z{a{{Dz=*li-eh8g z`%m0{r>RrzuWdG;P-h%+qcRv<-YM#xjpZr&Q~#0bLVsEzBRbNNEpNIs-7FTnvKWRn z(h}MqX zU8fm!^^MEh+doTO-rYjS#x@w72a-%cHGx{Cz^{jvURKcHB102kzs=2Uo3}L{#2hRhM-cU0 zH)nn2bH&3OmTRV%vlO(p+%Avd=Z@=fq^wS8WbVl$`-nxQ z;}e!3M`^dh)AZirF9OTLQFpGlo!I-~=YNm#6Jd^OB$nUqC5ArfP}XPkqTh z)mzd+ggh<_g^cyC4u8}82{QP4#e!Z*;m2*jIZJaNkp5oZS>WB3Y+?F$QQJJ_1q~gvUS3|HnFhD{6=>vQjdgS~`eu%l{p^y8)7j7|bCdI|moO*4f$#l9$ccwRCb+>jfbFq^OPjBVrw9aix z4yk!@nE@7``7F;_vOyO~d)IyqxAuybSbAkb}VLF*?3n}c8=K>K5IF6 z6P~Jp-t>`=8rQ};FDnw11d?(fa*Qvx98^-JbkExG#Q6LB15beXL7IX>2SBk6GP}}2 z5WgdH(;WGqs3I=}_-~11pM@?K2~klQbcuzka+e{DV&%C0N7T+(Id$=40Nd>94F%)| zxEt8+yt?ztpT&)@qMb?9#iaDA)$Vf#yuh<}GcQl(-A@TWz%y9kTI4R<|0?Fk`ZM<& zz4!iKv0tShBuzI8@|ONeereBeyq$Cuiyx4{e$na&c9BqLW9x$&A{~nN72>M zkz|vN;{eqe(slQHH-+98GPb3qrRuX_os8(C;HN60LTL;^5W=U=#duKydSm{Mz{o9E zKs!nXP4zG;bv)|I@3VVF;&eJ~q^3XkBtN2eI>J8>gg$dP{nEUy!A#4a*nO6G>{o1z z`TqR1=GNCwy-GhE>_5&e9I~0&YH{ZXTvio9Sa^0qif;lW?u#|BdL&`ehz<** z^L?tLGX`AZ9+1b_uCEcmNnc>67q`;-a4q6d>tBDS8N)q0*^i4v&~F8d*D+ zekIqX2nZ~B80ptvSG9>r&+i-)WmV4mX^|gnDXcXyYB@@@F zE=vgrJb$c<&U^(!nhNVQL%D@!FUtHN`6=S`h0_X$L0B+R&9D9nQ_tLj;(uzHl=hM; znaPbEH^j;mz@n7sgE>P?vohkh>cn@;`uDP9IpBYI8OX5j*p)aT;0;M(_@9H#0QY|JmV%S-Nz9MIZdKLb&i0nzK%GW5tC!?vwtIgCip>s#ik~`6*W1T@XV#xU6 z0~nSS{kKdbI}S|Dpn=mIm`gQq{DA8j&G8(1UhZDmf&R<^U=+^HrI(bH@T9bpDoaP( z|2p#sMmJF^_m~vLwwMi-ap!~sGzk47cAmnC77!s{tbtG_v=O~2Fbk@4m<$M{XgEp? zP0NqA`j~R55Kco9I!0XsdF7L*6^R>Jr`p`XtHQz#-!|E}wp_I~+X-`G}NqvEY zeo$B8Ki66xaDun%NY_1><8I2F|C$bdB8d4dfQFS$sN|+U+Y?b{h#@_&=cfn`cJ~(D z1YlJl^V%&xc8*(q0Xr&M91p1!32AA8-lBztg{rG8EG(NzG-A-4_hJn|Rq6MPw{9Vg zq9=tuWn>ie&%dynl18WB?#CF1w6-m}lBo10iLj~{Y)BufLsiy@(UqN0FK(F)-CfR` z*RYEoN;09M|2|>ca3&zf@?ZKxJp(x(X-Yf7$6!;z2zrQQyr6#L?RCxXb%rr_$iyvZ zL+l2wK|w>~vb`(#xx&ar)(Gs{dI`|cOmh?W-z@G&*sZFPNwE)LYF17B078Rv-X`eP zJiv=>rs|UZ(SuF)8auxWU00%By;Ux6qo28(mn^tNVjYsdqZ{D8#bpwPU9 za}N*!SWAS?g|J>eONoo~^hSk0y6*Rt=+Y)w^2M?l$_eC`2hmJ}VvV;qohRn@ojdv9 z3T+>aNhZ|p=*%H^{D;xfKJ$3jR7ob;LlFv$ksbC;noT>;@7 zRyTrM--|xLgV|o&Fqfdje5B^L>eO@>%F4=@l)*NhzV{aV zp8;#c@dFX4y!WAWL*04-u}NB3j#x_!OEX zRt07eTF4dTe7EjpX>` zako=A0rp{}u)?pLFS#UQZ;!c*n^ zS7?Q(owr4HNND>jlS(0WjBc4W=Yr5zZT{<^sK3Aegdh6e140H9x8mkHL8FFPM+9PQ zW6>W)eSCEFTgtbX(z(_Wd8rrABF19L>`e38h$5a&1u7Yf>m^wyNG)AII;>SHfy%B& zAjZ>@l>=83?O_kOpd`S%svMyyP@Kch5yqPtYR%hIAO)ghptY^7O{6S8|4z;; zfB$*6f7L#Cxti-mjA?`y{HBc=IvhJsyvvo@-v%8TpAVOd zCw|Hl|4+U_d@Vi_nRj~J4@|&8N8m-S31S04DNfA7=y&;sXMIp50t1e8$fu=kZ|i>5 zWrZooSY5C>UpzE5H8sEgH=}uRdCPflaPWoAU&-y@lSiir?#Kofj$_#(E$SA11lbLd zTs4sf=WRTwFFjDtqTToXvBV^)vHCZB3kgB&=Yp72Z{F{Flb{CLmq5Kq(=f84vZf|_1ns=K9SwClG&`KE$AQ^A&;Sa_a=(lR^r}XJ z#1ANl69iyKxCAClf|>8%K{j(inS$3gBk;LtF|Ylm{=Iwmw66G$LUcYp3riqa4{x>e$;%Nw4!#Kn+WSY4C!q`M+HX3IkijIL1VB8tfU^Z+V*z*V z#TdQxZ`)Gn-E0CNK^w%5(ASU8e*pQr%B}aJY>JxZ_*Mt|djOu(^(#JpOe6LS_nZ(R z-0%y^AX6+YEe#{Ep%FVRWe@W+eG@*3{%75x3{3T%Jm)fGJ1i)VZaVd8mg6pi=^95` zfV7W@4HPty;_!#iOd~^gA=*Jz58_})nC7Jc5=U_A_zC~w0@3B?&z}+d5SZ0cGQ3D2 zj1(Q^oW9BtYz?YC@1GP3hskoz&d~V_ z--eIcHASuf)G%O@u(l05SLLL{e=Bzs>Sy_|xr{AGo0eP-8jnHFLY&1wT}zbs;Sz`% zL382^`gTYD#WhFpSb^7005Z%4QBP~}1h8JeJ^|w@5nUOU5SYT$gMa~9cF=wv9)3wI z2prs?zZ_;4GWyhB!SSH?1;sG;6<3(rTM6x39@K~z7rX@|5}Xl_Jg7IFE8r2t(jdap z1`RKebmDr)48AYeDDccZznmhQ(!%`pP0{sf?6x>x%;lz=T6UPzQ1Wei+O{<20$-!u zqBXqVzhtJ8zHZA=XipJDokYe66-l#rGcO%&3$>-&{EHD$rKq{N4z8>t$QkwETGqL? zaC%>9Xk5iX|la=#e$- z(qZY7&EVuuf;2r}*$2BQb1*-H($Rw&QG+8EMj#b?C=2jSPOr%eKB$j1K_+eIHVxa! zgQ0IlV~br>1A}e9gOh#-iwQUNHaKvOKf3(Pw=)NWCb;Jn^%z$g@TfdZpI-fPqJ@T> z5g<#ZM=b)3{P+7!;nY2=is#o_9-Ht^K^1d+wv_b{xYl_T@jv=5$(Md5Dy##$DbhhyCo;1qi#B*c3UbT#}#8GAu^V zlO&M@EWYU^XQJe|O;kwTv=AWN+l!SLk^V1HX?uOH)gS~ETi;0a4F>P&fQA}gd1F9y z!|PqkahcHC$?}cA+ZB@nv_d$}Jf(R{=0&s%^-qGYwxcDOD8VOi%<|1{*d3)M?mrL4beBR1A<(q(BgOGPOqEfn)uKVF_{8-4kHfbqY-rX9sdh;?I#pTUb26x^DgXlkgJ#ZnC9+&8r=BKv zIH`HfB)4sA!rpUmHb;+LqWpuxiRo1^QRQn;JXpHf)$ZygZdZ_>j0ZzTTucSHv z#22km1LKh?vg{KTgr%LIIWhVs*XZ#*H|x!TynJkaiKFoKfJIpF+Q^6x6@C_YV0m7P zPq=6IE`&zx-NrF@gQ7tVrfZ#lRw(97Vu|8D*#El_MV*b}ox3fsB7DP+p|t3&wh$cN z<(KjV$^O`#CzUjzwrs#tRy-*_h?ULPr`0p=B+R3ing`~YT2z-;5M00e7knK$lrC?3ig zk+8&vp8ja0)y;M)9sYRNH?M z`edX8oA%BJ&iJ`Y>;bd{yEc+ikqzePQ}<$?&KC4Zo3;^vAfq zymwes>0Y^x)CFIY-a6ZvQD+i*K1NE*N$ABgp)QT!fDEDJ# z5TiMbHeN=N5eNT>35T<&Su>RHZLcq~r*X^9-aa`EVhYCfzWOuG5$D4$j=*+>cMi6s z3Il#JQzKKk05ar~d5D{^Q)<|KPG$dD@5;Yxz3`n`CMhC=1zSfyTyx4IH}%@*J%h(- zHa6eSs939U|4TlNpriyAHb~53niU)Gb_+$eFf0Ujp*g>a#6T*>Y3>7u(I=NYsB!M4 z*IU$A7ycP6LSm?v=oe;}N1xBd(C<^b6kv{kqu)q3DRN*?WGigBO7>|wuHC*op;xaM z#WAvvYOc~+ZL=+T+i#5uZXB`iu$ozb#lLjvfzamHzwI{nE^RblCJrv6XVfegM>gda zK&4;nL`mB(>khx*b{^8C(pX&H=`cMB{2Uvfc26{O;Hp~4dx6HtBqT_AM>^Vtm1)JK z%lBTFX$fPzz$*7>OE^U_u>D}Mt;Jk=l#;a8uI=cN`1B3u(|gxtGk`c)N5PB+uMWYi z=!edt5?Twqv|(?&I648OXIrlRY@NBlI8-K=e#K_@P2=h(<#%;%Y3vEDK?GzD*|Quc zeHO!C_w!oj>tg@#R3zYfhXnj3@Yz*ros=uW?Ep~<9bM;bx|4i z5DAe&z^nJ6ixVUy0=_)*&DhB3_@X)JpN7F~<8;^w_fOX9>$;WHW!BDNns2vz-WvwE zl>LsTkZ`U;Zz9J*DDqU*=5y)>8U8+(6A|YStkWkLa%(E(Ia6~4Q95Uu3NFM=+6Jxn zB#$_hL!KWGwWoE9s%N-1_16JbIM$bgmx8qTaS%G5s`V%tA1zlxvFPJG?f`XSU9_AXnB8qTtJG;?9n63?ChC`OCqEvnIu)%IIh#ye1+e_E`gxTDkr(Ha9^Df9U))s z6r`G{OXyAQ#AOZ)&98jwh6w)QdUp`v2=&z;BP;7Jm2Ldi8#;Z2H^f*QqboRGmFRx? zS5;jFe&o~*u^>dzu3TJTp2_I`LGRhUiQyEr&xz&Q^8HKK2A^k|`iP}aJqw7rEHF10 zQg+KK8qLLGC+XlvmHlor?ceNqtk;CxuP=KQVd-{07Yx_9hO_!BY3$O(Ve7nPbUN6I z-{>xdsZkO;OE*!rFctmnW-Zp4)!4TL>I6h5ue^L+Jr%5*gOfn5lV%srE&P(_=nBz8 zhJb?%8sD~G19%Ys@-*q`>~1G;?}5IXQn;lt{F#lV7ell$u5Sv_0hCbT0RrOUL}*f^PCtpc3>E^~Z4v%ont86QjvF zK|(A)jfpkCi4xW&3%zpBKVdc%?^Nuu46n4Ei z7BdPSqZ70QVSr8vID974Yn7(rxEw=S`WG zx7ah-x>nP^bzZqM6+#N3ci2X#Z|dRn))iBZ+0{yNr;9%K@o$kNPmg>SM}0i|J4E@qNvjE5jN0LdF6vSv zR5o6o0OKh&2{-dF*^Dz3f1UOZ^ykxeHc8v|k59T~HE^N!o6m(WT!~sq?6M#E-~OZ% z1JRgflVFKsd@l(lB z-qQWUy=Cc%S3-UgKa~%g_$gCLq-(IorK|7Hvk;9Ts{ur{ed8`H3b+YXHgx~2m1B0i z!U*eaa?9kqs$ck4U(w@mPDm+agI?^ud=Un|GiObpR*U7{2eFV6Cslus?XE#_=Fc(a z>DB4va9Cu+5|kE>_maCPuf)lA@M)MgpU@*O>Yv?){mJ=TqD~9kp?3`4IjfTtElU;* zzH3L=5~b-F^g%FTE>D`=)5g+(7R3P{ z>vooWL$mf9uE%c@niy)MK^))LoZ&*8Z>gpm zvMkQu+iSS=$l_@4N}vSwfaBg;_X)oOwyZFS&mhKWp`W=->D2sdFFieaK4su86ZgjZ zGSYJfuw}?tJ$q`K*48&_;T5V9&L61_u=-W^t(IyLCf{y7=?X5Lx$aDbsON>9&9+h9 zp$5$Qs-qJ$f1-nq<%%aqv%x1CO+1Rb8mxQZ

S5?s~6vPSIy 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