From 4427828d3b165da8adbf714bd47ff3a00778e015 Mon Sep 17 00:00:00 2001 From: Jessie Maier <45083046+jlmaier12@users.noreply.github.com> Date: Fri, 20 Dec 2024 11:39:08 -0500 Subject: [PATCH] Delete docs directory --- docs/404.html | 87 - docs/apple-touch-icon.png | Bin 9128 -> 0 bytes docs/articles/TrIdent-vignette.html | 1897 --- .../figure-html/unnamed-chunk-15-1.png | Bin 117792 -> 0 bytes .../figure-html/unnamed-chunk-15-2.png | Bin 108596 -> 0 bytes .../figure-html/unnamed-chunk-15-3.png | Bin 105595 -> 0 bytes .../figure-html/unnamed-chunk-15-4.png | Bin 126288 -> 0 bytes .../figure-html/unnamed-chunk-15-5.png | Bin 109761 -> 0 bytes .../figure-html/unnamed-chunk-15-6.png | Bin 108985 -> 0 bytes .../figure-html/unnamed-chunk-15-7.png | Bin 109559 -> 0 bytes .../figure-html/unnamed-chunk-15-8.png | Bin 104130 -> 0 bytes .../figure-html/unnamed-chunk-16-1.png | Bin 117792 -> 0 bytes .../figure-html/unnamed-chunk-22-1.png | Bin 92086 -> 0 bytes .../figure-html/unnamed-chunk-22-2.png | Bin 94837 -> 0 bytes .../figure-html/unnamed-chunk-22-3.png | Bin 103293 -> 0 bytes .../figure-html/unnamed-chunk-22-4.png | Bin 81163 -> 0 bytes .../figure-html/unnamed-chunk-23-1.png | Bin 103293 -> 0 bytes .../figure-html/unnamed-chunk-5-1.png | Bin 40968 -> 0 bytes .../figure-html/unnamed-chunk-6-1.png | Bin 9821 -> 0 bytes .../figure-html/unnamed-chunk-7-1.png | Bin 6525 -> 0 bytes .../figure-html/unnamed-chunk-8-1.png | Bin 72360 -> 0 bytes .../kePrint-0.0.1/kePrint.js | 8 - .../lightable-0.0.1/lightable.css | 272 - docs/articles/index.html | 62 - docs/authors.html | 85 - .../bootstrap-5.3.1/bootstrap.bundle.min.js | 7 - .../bootstrap.bundle.min.js.map | 1 - docs/deps/bootstrap-5.3.1/bootstrap.min.css | 5 - .../bootstrap-toc-1.0.1/bootstrap-toc.min.js | 5 - .../deps/clipboard.js-2.0.11/clipboard.min.js | 7 - docs/deps/data-deps.txt | 13 - docs/deps/font-awesome-6.5.2/css/all.css | 8028 ------------ docs/deps/font-awesome-6.5.2/css/all.min.css | 9 - docs/deps/font-awesome-6.5.2/css/v4-shims.css | 2194 ---- .../font-awesome-6.5.2/css/v4-shims.min.css | 6 - .../webfonts/fa-brands-400.ttf | Bin 209128 -> 0 bytes .../webfonts/fa-brands-400.woff2 | Bin 117852 -> 0 bytes .../webfonts/fa-regular-400.ttf | Bin 67860 -> 0 bytes .../webfonts/fa-regular-400.woff2 | Bin 25392 -> 0 bytes .../webfonts/fa-solid-900.ttf | Bin 420332 -> 0 bytes .../webfonts/fa-solid-900.woff2 | Bin 156400 -> 0 bytes .../webfonts/fa-v4compatibility.ttf | Bin 10832 -> 0 bytes .../webfonts/fa-v4compatibility.woff2 | Bin 4792 -> 0 bytes docs/deps/headroom-0.11.0/headroom.min.js | 7 - .../headroom-0.11.0/jQuery.headroom.min.js | 7 - docs/deps/jquery-3.6.0/jquery-3.6.0.js | 10881 ---------------- docs/deps/jquery-3.6.0/jquery-3.6.0.min.js | 2 - docs/deps/jquery-3.6.0/jquery-3.6.0.min.map | 1 - .../search-1.0.0/autocomplete.jquery.min.js | 7 - docs/deps/search-1.0.0/fuse.min.js | 9 - docs/deps/search-1.0.0/mark.min.js | 7 - docs/favicon-96x96.png | Bin 3864 -> 0 bytes docs/favicon.ico | Bin 15086 -> 0 bytes docs/favicon.svg | 3 - docs/index.html | 202 - docs/katex-auto.js | 14 - docs/lightswitch.js | 85 - docs/link.svg | 12 - docs/logo.png | Bin 10640 -> 0 bytes docs/news/index.html | 60 - docs/pkgdown.js | 162 - docs/pkgdown.yml | 9 - docs/reference/NARemover.html | 84 - docs/reference/TrIdent-package.html | 104 - docs/reference/TrIdent.html | 8 - docs/reference/TrIdentClassifier-1.png | Bin 72155 -> 0 bytes docs/reference/TrIdentClassifier.html | 182 - docs/reference/TrIdentSampleOutput.html | 100 - docs/reference/VLPFractionSamplePileup.html | 127 - docs/reference/VLPtoWCRatioCalc.html | 104 - .../reference/WholeCommunitySamplePileup.html | 127 - docs/reference/allPatternMatches.html | 88 - docs/reference/allProphageLikeClassifs.html | 83 - docs/reference/allSlopingClassifs.html | 83 - docs/reference/blockBuilder.html | 98 - docs/reference/blockTranslator.html | 101 - docs/reference/changeSlope.html | 110 - docs/reference/changeSlopeWStart.html | 109 - docs/reference/changeWindowSize.html | 89 - docs/reference/contigClassSumm.html | 83 - docs/reference/figures/README-example-1.png | Bin 9573 -> 0 bytes docs/reference/figures/logo.png | Bin 10640 -> 0 bytes docs/reference/fullSlope.html | 95 - docs/reference/index.html | 85 - docs/reference/leftRightBlockTranslater.html | 121 - docs/reference/makeBlockPattern.html | 113 - docs/reference/makeFullSlopes.html | 102 - docs/reference/makeSlopesWStarts.html | 105 - docs/reference/noPattern.html | 87 - docs/reference/patternBuilder.html | 99 - docs/reference/patternMatchSize.html | 92 - docs/reference/patternMatcher.html | 134 - docs/reference/pileupFormatter.html | 84 - docs/reference/plotTrIdentResults.html | 121 - docs/reference/prophageLikeBorders.html | 100 - docs/reference/prophageLikeElevation.html | 113 - docs/reference/prophageLikeZoom.html | 99 - docs/reference/resultsHisto.html | 95 - docs/reference/slopeSumm.html | 89 - docs/reference/slopeTranslator.html | 112 - docs/reference/slopeWithStart.html | 89 - docs/reference/specTransductionPlot.html | 136 - docs/reference/specTransductionSearch.html | 133 - docs/reference/specializedTransductionID.html | 162 - docs/reference/zeroCountSearch.html | 102 - docs/search.json | 1 - docs/site.webmanifest | 21 - docs/sitemap.xml | 48 - docs/web-app-manifest-192x192.png | Bin 10035 -> 0 bytes docs/web-app-manifest-512x512.png | Bin 53713 -> 0 bytes 110 files changed, 28372 deletions(-) delete mode 100644 docs/404.html delete mode 100644 docs/apple-touch-icon.png delete mode 100644 docs/articles/TrIdent-vignette.html delete mode 100644 docs/articles/TrIdent-vignette_files/figure-html/unnamed-chunk-15-1.png delete mode 100644 docs/articles/TrIdent-vignette_files/figure-html/unnamed-chunk-15-2.png delete mode 100644 docs/articles/TrIdent-vignette_files/figure-html/unnamed-chunk-15-3.png delete mode 100644 docs/articles/TrIdent-vignette_files/figure-html/unnamed-chunk-15-4.png delete mode 100644 docs/articles/TrIdent-vignette_files/figure-html/unnamed-chunk-15-5.png delete mode 100644 docs/articles/TrIdent-vignette_files/figure-html/unnamed-chunk-15-6.png delete mode 100644 docs/articles/TrIdent-vignette_files/figure-html/unnamed-chunk-15-7.png delete mode 100644 docs/articles/TrIdent-vignette_files/figure-html/unnamed-chunk-15-8.png delete mode 100644 docs/articles/TrIdent-vignette_files/figure-html/unnamed-chunk-16-1.png delete mode 100644 docs/articles/TrIdent-vignette_files/figure-html/unnamed-chunk-22-1.png delete mode 100644 docs/articles/TrIdent-vignette_files/figure-html/unnamed-chunk-22-2.png delete mode 100644 docs/articles/TrIdent-vignette_files/figure-html/unnamed-chunk-22-3.png delete mode 100644 docs/articles/TrIdent-vignette_files/figure-html/unnamed-chunk-22-4.png delete mode 100644 docs/articles/TrIdent-vignette_files/figure-html/unnamed-chunk-23-1.png delete mode 100644 docs/articles/TrIdent-vignette_files/figure-html/unnamed-chunk-5-1.png delete mode 100644 docs/articles/TrIdent-vignette_files/figure-html/unnamed-chunk-6-1.png delete mode 100644 docs/articles/TrIdent-vignette_files/figure-html/unnamed-chunk-7-1.png delete mode 100644 docs/articles/TrIdent-vignette_files/figure-html/unnamed-chunk-8-1.png delete mode 100644 docs/articles/TrIdent-vignette_files/kePrint-0.0.1/kePrint.js delete mode 100644 docs/articles/TrIdent-vignette_files/lightable-0.0.1/lightable.css delete mode 100644 docs/articles/index.html delete mode 100644 docs/authors.html delete mode 100644 docs/deps/bootstrap-5.3.1/bootstrap.bundle.min.js delete mode 100644 docs/deps/bootstrap-5.3.1/bootstrap.bundle.min.js.map delete mode 100644 docs/deps/bootstrap-5.3.1/bootstrap.min.css delete mode 100644 docs/deps/bootstrap-toc-1.0.1/bootstrap-toc.min.js delete mode 100644 docs/deps/clipboard.js-2.0.11/clipboard.min.js delete mode 100644 docs/deps/data-deps.txt delete mode 100644 docs/deps/font-awesome-6.5.2/css/all.css delete mode 100644 docs/deps/font-awesome-6.5.2/css/all.min.css delete mode 100644 docs/deps/font-awesome-6.5.2/css/v4-shims.css delete mode 100644 docs/deps/font-awesome-6.5.2/css/v4-shims.min.css delete mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-brands-400.ttf delete mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-brands-400.woff2 delete mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-regular-400.ttf delete mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-regular-400.woff2 delete mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-solid-900.ttf delete mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-solid-900.woff2 delete mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-v4compatibility.ttf delete mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-v4compatibility.woff2 delete mode 100644 docs/deps/headroom-0.11.0/headroom.min.js delete mode 100644 docs/deps/headroom-0.11.0/jQuery.headroom.min.js delete mode 100644 docs/deps/jquery-3.6.0/jquery-3.6.0.js delete mode 100644 docs/deps/jquery-3.6.0/jquery-3.6.0.min.js delete mode 100644 docs/deps/jquery-3.6.0/jquery-3.6.0.min.map delete mode 100644 docs/deps/search-1.0.0/autocomplete.jquery.min.js delete mode 100644 docs/deps/search-1.0.0/fuse.min.js delete mode 100644 docs/deps/search-1.0.0/mark.min.js delete mode 100644 docs/favicon-96x96.png delete mode 100644 docs/favicon.ico delete mode 100644 docs/favicon.svg delete mode 100644 docs/index.html delete mode 100644 docs/katex-auto.js delete mode 100644 docs/lightswitch.js delete mode 100644 docs/link.svg delete mode 100644 docs/logo.png delete mode 100644 docs/news/index.html delete mode 100644 docs/pkgdown.js delete mode 100644 docs/pkgdown.yml delete mode 100644 docs/reference/NARemover.html delete mode 100644 docs/reference/TrIdent-package.html delete mode 100644 docs/reference/TrIdent.html delete mode 100644 docs/reference/TrIdentClassifier-1.png delete mode 100644 docs/reference/TrIdentClassifier.html delete mode 100644 docs/reference/TrIdentSampleOutput.html delete mode 100644 docs/reference/VLPFractionSamplePileup.html delete mode 100644 docs/reference/VLPtoWCRatioCalc.html delete mode 100644 docs/reference/WholeCommunitySamplePileup.html delete mode 100644 docs/reference/allPatternMatches.html delete mode 100644 docs/reference/allProphageLikeClassifs.html delete mode 100644 docs/reference/allSlopingClassifs.html delete mode 100644 docs/reference/blockBuilder.html delete mode 100644 docs/reference/blockTranslator.html delete mode 100644 docs/reference/changeSlope.html delete mode 100644 docs/reference/changeSlopeWStart.html delete mode 100644 docs/reference/changeWindowSize.html delete mode 100644 docs/reference/contigClassSumm.html delete mode 100644 docs/reference/figures/README-example-1.png delete mode 100644 docs/reference/figures/logo.png delete mode 100644 docs/reference/fullSlope.html delete mode 100644 docs/reference/index.html delete mode 100644 docs/reference/leftRightBlockTranslater.html delete mode 100644 docs/reference/makeBlockPattern.html delete mode 100644 docs/reference/makeFullSlopes.html delete mode 100644 docs/reference/makeSlopesWStarts.html delete mode 100644 docs/reference/noPattern.html delete mode 100644 docs/reference/patternBuilder.html delete mode 100644 docs/reference/patternMatchSize.html delete mode 100644 docs/reference/patternMatcher.html delete mode 100644 docs/reference/pileupFormatter.html delete mode 100644 docs/reference/plotTrIdentResults.html delete mode 100644 docs/reference/prophageLikeBorders.html delete mode 100644 docs/reference/prophageLikeElevation.html delete mode 100644 docs/reference/prophageLikeZoom.html delete mode 100644 docs/reference/resultsHisto.html delete mode 100644 docs/reference/slopeSumm.html delete mode 100644 docs/reference/slopeTranslator.html delete mode 100644 docs/reference/slopeWithStart.html delete mode 100644 docs/reference/specTransductionPlot.html delete mode 100644 docs/reference/specTransductionSearch.html delete mode 100644 docs/reference/specializedTransductionID.html delete mode 100644 docs/reference/zeroCountSearch.html delete mode 100644 docs/search.json delete mode 100644 docs/site.webmanifest delete mode 100644 docs/sitemap.xml delete mode 100644 docs/web-app-manifest-192x192.png delete mode 100644 docs/web-app-manifest-512x512.png diff --git a/docs/404.html b/docs/404.html deleted file mode 100644 index d63247d..0000000 --- a/docs/404.html +++ /dev/null @@ -1,87 +0,0 @@ - - -
- - - - -vignettes/TrIdent-vignette.Rmd
- TrIdent-vignette.Rmd
TrIdent- Transduction -Identification
-TrIdent consists of three main functions which should be run in the -following order:
-TrIdentClassifier()
: Classifies
-contigs as ‘Prophage-like’, ‘Sloping’, ‘HighCovNoPattern’, and
-‘NoPattern’ using read coverage pattern-matching.plotTrIdentResults()
: Plots
-pattern-matching results of TrIdentClassifier()
.specializedTransductionID()
: Searches
-contigs classified as Prophage-like by TrIdentClassifier()
-for associated specialized transduction events.TrIdent automates the analysis of transductomics data by detecting, -classifying, and characterizing read coverage patterns associated with -potential transduction events. Transductomics, developed by Kleiner et -al. (2020), is a DNA sequencing-based method for the detection and -characterization of transduction events in pure cultures and complex -communities. Transductomics relies on mapping sequencing reads from a -viral-like particle (VLP)-fraction of a sample to contigs assembled from -the metagenome (whole-community) of the same sample. Reads from -bacterial DNA carried by VLPs will map back to the bacterial contigs of -origin creating read coverage patterns indicative of ongoing -transduction. The read coverage patterns detected represent DNA -being actively carried or transduced by VLPs. The read -coverage patterns do not represent complete -transduction events (i.e integration of transduced DNA -into new bacterial chromosomes).
-Reference: Kleiner, M., Bushnell, B., Sanderson, -K.E. et al. Transductomics: sequencing-based detection and analysis of -transduced DNA in pure cultures and microbial communities. Microbiome 8, -158 (2020). https://doi.org/10.1186/s40168-020-00935-5
- - -
-if (!require("pak", quietly = TRUE)) {
- install.packages("pak")
-}
-
-pak::pak("jlmaier12/TrIdent")
-library(TrIdent)
-if (!require("devtools", quietly = TRUE)) {
- install.packages("devtools")
-}
-
-devtools::install_github("jlmaier12/TrIdent")
-library(TrIdent)
Transductomics allows for the identification of bacterial DNA being -actively carried or transduced by VLPs. A transductomics dataset -consists of two parts- metagenomes from the whole-community and VLP -fractions of a sample. The whole-community fraction is generated by -extracting and sequencing DNA from the whole sample. The VLP-fraction is -generated by extraction and sequencing DNA of the ultra-purified VLPs in -the sample. VLP ultra-purification is generally done using CsCl -density-gradient ultracentrifugation. Additionally, it is very important -that the VLP-fraction is treated with DNase to remove free DNA! After -sequencing, reads from the whole-community fraction are assembled and -both the whole-community and VLP-fraction reads are mapped to the -assembly. Read mapping should be performed -using a high minimum identity (0.97 or higher) and -random mapping of ambiguous reads. The pileup files needed for -TrIdent are generated using the .bam files produced during read -mapping.
-Deep sequencing of the whole-community and VLP-fractions is -needed for transductomics! Sample preparation, -sequencing procedures, and bioinformatics methods are -detailed in Kleiner -et al.(2020).
-TrIdent detects read coverage patterns using a pattern-matching -algorithm that operates on pileup files. A pileup file is a file format -where each row summarizes the ‘pileup’ of reads at specific genomic -locations. Pileup files can be used to generate a rolling mean of read -coverages and associated base pair positions across a metagenome -assembly which reduces data size while preserving read coverage -patterns. TrIdent requires that input pileups files be generated -using a 100 bp window/bin size.
-Some read mappers, like BBMap,
-will allow for the generation of pileup files in the bbmap.sh
-command with the use of the bincov
output with the
-covbinsize=100
parameter/argument. Otherwise,
-BBMap’s pileup.sh
-can convert .bam files produced by any read mapper to pileup
-files compatible with TrIdent using the
-bincov
output with binsize=100
.
TrIdent requires two pileup files from a transductomics dataset as -input:
-Remember- The data used for each pileup file must originate -from the same sample. Pileup files must use a 100 bp -window/bin size for the rolling mean.
-The input pileup files must have the following -format:
-Dataframe with four columns:
--V1 - | --V2 - | --V3 - | --V4 - | -
---|---|---|---|
-NODE_62 length_245921_cov_3.25857_ID_9556347 - | --0 - | --100 - | --20626396 - | -
-NODE_62 length_245921_cov_3.25857_ID_9556347 - | --0 - | --200 - | --20626496 - | -
-NODE_62 length_245921_cov_3.25857_ID_9556347 - | --0 - | --300 - | --20626596 - | -
-NODE_62 length_245921_cov_3.25857_ID_9556347 - | --0 - | --400 - | --20626696 - | -
-NODE_62 length_245921_cov_3.25857_ID_9556347 - | --0 - | --500 - | --20626796 - | -
-NODE_62 length_245921_cov_3.25857_ID_9556347 - | --0 - | --600 - | --20626896 - | -
TrIdentClassifier()
is the main function in TrIdent.
-This function filters contigs based on length and read coverage,
-performs pattern-matching to classify contigs, identifies highly
-active/abundant and heterogenously integrated Prophage-like elements,
-determines which contigs have high VLP-fraction:whole-community read
-coverage ratios, identifies start and stop positions and sizes of
-pattern-matches, and calculates slopes for Sloping pattern-matches.
Note that TrIdentClassifier()
results should not be
-taken at face value and some manual curation is needed! We recommend
-careful examination of the output plots to determine if you agree with
-the TrIdentClassifier()
classifications.
Contigs that are too short or have little to no read coverage are
-filtered out prior to pattern-matching. TrIdentClassifier()
-filters out contigs that do not have at least 10x coverage on a total of
-5,000 bp across the whole contig. The read coverage filtering was done
-in this way to avoid filtering out long contigs with short Prophage-like
-patterns that might get removed if filtering was done with read coverage
-averages or medians. Additionally, contigs less than 30,000 bp are
-filtered out by default, however this can be changed with the
-minContigLength
parameter. While contigs shorter than
-30,000 bp may be poor quality and are often not long enough to capture
-complete transduction patterns, we allow users to set a minimum
-minContigLength
of 25,000 bp. If you would like to
-reduce the size of your input pileup files for TrIdent,
-consider pre-filtering your assembly for contigs greater than
-25,000 bp prior to read mapping!
It is expected that the majority of contigs in the dataset -are filtered out due to low read coverage during this -step! If very few contigs are filtered out due to low -read coverage, this may be an indication of DNA -contamination in your VLP-fraction.
-The input pileup files have 100 bp windows in which the mapped read
-coverage is averaged over. This small window size is needed to detect
-read coverage patterns associated with specialized transduction which
-may only span a few thousand basepairs. However, read coverage patterns
-associated with other types of transduction generally don’t require the
-resolution that 100 bp windows provide. While users can use the 100 bp
-windowSize
for TrIdentClassifier()
, the
-processing time will be increased significantly and noisy data may
-interfere with pattern-matching. We find that the default 1,000 bp
-windowSize
provides a nice balance between processing time
-and read coverage pattern resolution.
TrIdentClassifier()
detects read coverage patterns in
-the VLP-fraction using a pattern-matching approach. Several predefined
-patterns, described below, are built using the specific length and read
-coverage values of the contig being assessed. Patterns are translated
-across each contig in 1,000 bp sliding windows and at each translation,
-a pattern-match score is calculated by taking the mean absolute
-difference of the VLP-fraction read coverage and the pattern values. The
-smaller the match-score, the better the pattern-match. After a pattern
-is fully translated across a contig, certain aspects of the pattern are
-changed (i.e. height, width, slope) and translation is repeated. This
-process of translation and pattern re-scaling is repeated until a large
-number of pattern variations are tested. After pattern-matching is
-complete, the pattern associated with the best match-score is used for
-contig classification. Contigs are classified as ‘Prophage-like’,
-‘Sloping’, or ‘NoPattern’ during pattern-matching.
There are four sloping pattern variations in the sloping pattern
-class. The sloping patterns are representative of large DNA transfers
-that take place during generalized, lateral and gene transfer agent
-(GTA) transduction due to the decreasing frequency of DNA packaging
-moving away from the packaging initiation sites. During
-pattern-matching, the slope values of the sloping patterns are decreased
-until a minimum slope of 0.001 (change of 10x read coverage over 10,000
-bp) is reached. The minimum slope value can be changed with the
-minSlope
parameter. Generalized, lateral and GTA
-transduction events can span tens to hundreds of kilobasepairs of DNA
-and a single contig typically does not capture an entire event.
-Depending on which part of the transducing event is captured by the
-contig, the sloping can be very severe or almost 0. Patterns 1 and 2
-represent contigs that capture a Sloping transducing event somewhere in
-the middle of the DNA transfer. Patterns 2 and 4 represent contigs that
-capture the jump of read coverage associated with packaging initiation
-site of a Sloping transducing event. Patterns 2 and 4 are translated
-across the contig in addition to having the slopes changed while only
-the slopes are changed on patterns 1 and 2.
There are three block patterns in the Prophage-like pattern class.
-The block patterns are representative of integrated genetic elements
-that can be excised from the host chromosome and mobilized. The blocks
-of read coverage that define this classification are formed when the
-reads of mobilized genetic elements packaged by VLPs map back to their
-respective integration sites in the host bacterium’s chromosome.
-Prophage, phage-inducible chromosomal islands (PICIs), and transposons
-are all examples of genetic elements that fall into the Prophage-like
-class. During pattern-matching, both the heights and widths of block
-patterns are altered and all pattern variations are translated across
-the contig. The block pattern widths never get smaller than 10,000 bp by
-default, however this can be changed with the minBlockSize
-parameter. Pattern 1 represents a Prophage-like element that is entirely
-on the contig while patterns 2 and 3 represent Prophage-like elements
-that trail off the right or left side of the contig, respectively. While
-a Prophage-like classification is not an example of transduction by
-itself, there may be transduction associated with Prophage-like
-classifications. The improper excision of Prophage-like elements may
-lead to the specialized transduction of genes neighboring the element’s
-integration site. TrIdent’s specializedTransductionID()
-function (explained in detail below) will attempt to detect specialized
-transduction events associated with Prophage-like classifications.
Since the best pattern-match for each contig is determined by -comparing match-scores amongst all pattern-variations from all pattern -classes, we needed a ‘negative control’ pattern to compare against. The -‘NoPattern’ ‘pattern’ serves as a negative control by matching to -contigs with no read coverage patterns. We made two NoPattern patterns -which consist of a horizontal line the same length as the contig being -assessed at either the average or median read coverage for a contig. -This pattern is not re-scaled or translated in any way. Note that read -coverage patterns are heavily dependent on the depth of read coverage -achieved during sequencing and therefore very rare transduction events -may not achieve sufficient read coverage for detection with read -coverage pattern-matching. Rather than label contigs with no read -coverage pattern as having ‘no transduction’, we instead label them as -having ‘no pattern’.
- -Prophage-like elements that are actively replicating or are highly
-abundant will typically generate more sequencing reads than the rest of
-their host bacterium’s chromosome. This may create a region of elevated
-read coverage at the element’s insertion site in the whole-community
-fraction read coverage. Conversely, if a Prophage-like element is
-integrated into only a portion of the host bacterial population, there
-may be a dip or depression in read coverage at the integration site in
-the whole-community read coverage. In order to determine if the
-whole-community read coverage is elevated or depressed at the site of a
-Prophage-like element, one must know the Prophage-like element’s genomic
-location. While some tools rely on annotation information to identify
-Prophage-like elements in whole-community metagenomes,
-TrIdentClassifier()
uses the VLP-fraction read coverage
-patterns. The locations of Prophage-like pattern-matches are used to
-calculate the Prophage-like:non-Prophage-like whole-community read
-coverage ratio. Prophage-like patterns with whole-community read
-coverage ratios greater than 1.15 are labeled as ‘elevated’ while ratios
-less then 0.75 are labeled as ‘depressed’.
If a contig receives a noPattern classification, it proceeds to an -additional classification step which either leaves the classification as -is or re-classifies the contig as having a high -VLP-fraction:whole-community read coverage ratio (‘HighCovNoPattern’). -In other words, contigs with the HighCovNoPattern classification have -even read coverage across the contig (i.e. no notable read coverage -pattern) and the VLP-fraction read coverage is notably higher than the -whole-community read coverage. This re-classification is necessary -because certain biologically significant events that may be of interest -to the user can have these characteristics. First, certain transduction -events, specifically those associated with the Sloping classification, -may be so long that they extend across multiple contigs. The ‘tails’ of -the sloping patterns created by these events may have little to no -actual sloping (no pattern) but relatively high read coverage (Fig S2 -Kleiner et al., 2020). Second, there is evidence that membrane vesicle -(MV) mediated transduction (also known as vesiduction or protected -extracellular transformation) produces relatively even read coverage -patterns when purified MV sequencing reads are mapped back to their -bacterial chromosome of origin (Faddetta et al., 2022). Lastly, phage -genomes that have assembled into contigs in the whole-community fraction -may generate high levels of even read coverage as the phage reads in the -VLP-fraction map back to their own genome sequences. Contigs with median -VLP-fraction:Whole-community read coverage ratios greater than 2, in -other words contigs where the median VLP-fraction read coverage value is -2x the whole-community median read coverage value, are re-classified as -HighCovNoPattern.
-Reference: Faddetta, T., Vassallo, A., Del Duca, S. -et al. Unravelling the DNA sequences carried by Streptomyces coelicolor -membrane vesicles. Sci Rep 12, 16651 (2022). https://doi.org/10.1038/s41598-022-21002-z
-Default arguments:
-
-TrIdentOutput <- TrIdentClassifier(
- VLPpileup = VLPFractionSamplePileup,
- WCpileup = WholeCommunitySamplePileup
-)
-#> Reformatting pileup files
-#> Starting pattern-matching...
-#> A quarter of the way done with pattern-matching
-#> Half of the way done with pattern-matching
-#> Almost done with pattern-matching!
-#> Determining sizes (bp) of pattern matches
-#> Identifying highly active/abundant or heterogenously integrated
-#> Prophage-like elements
-#> Finalizing output
-#> Execution time: 23.19secs
-#> 1 contigs were filtered out based on low read coverage
-#> 0 contigs were filtered out based on length
-#>
-#> HighCovNoPattern NoPattern Prophage-like Sloping
-#> 1 1 4 3
-#> 3 of the prophage-like classifications are highly active or abundant
-#> 1 of the prophage-like classifications are mixed, i.e. heterogenously
-#> integrated into their bacterial host population
-TrIdentClassifier(VLPpileup, WCpileup,
- windowSize = 1000, minBlockSize = 10000,
- maxBlockSize = Inf, minContigLength = 30000, minSlope = 0.001,
- suggFiltThresh = FALSE, SaveFilesTo
-)
VLPpileup
: VLP-fraction pileup file.WCpileup
: Whole-community pileup file.windowSize
: The number of basepairs to average read
-coverage values over. Options are 100, 200, 500, 1000 ONLY. Default is
-1000.minBlockSize
: The minimum size (in bp) of the
-Prophage-like block pattern. Default is 10000. Must be greater than
-1000.maxBlockSize
: The maximum size (in bp) of the
-Prophage-like block pattern. Default is NA (no maximum).minContigLength
: The minimum contig size (in bp) to
-perform pattern-matching on. Must be at least 25000. Default is
-30000.minSlope
: The minimum slope value to test for sloping
-patterns. Default is 0.001 (i.e minimum change of 10x read coverage over
-100,000 bp).suggFiltThresh
: TRUE or FALSE, Suggest a filtering
-threshold for TrIdent classifications based on the normalized
-pattern-match scores. Default is FALSE.SaveFilesTo
: Optional, Provide a path to the directory
-you wish to save output to. A folder will be made within the provided
-directory to store results.TrIdentClassifier()
outputs a histogram displaying the
-overall abundance and quality of pattern-matches in addition to the
-composition of classifications. The displayed pattern-match scores are
-normalized by dividing each score by its associated contig length. The
-scores are normalized to visualize the overall quality of
-pattern-matching for the entire dataset. Remember, smaller pattern-match
-scores correspond to better pattern-matches.
The output of TrIdentClassifier()
is a list containing
-five objects:
windowSize
used.Save the desired list-item to a new variable using its associated -name.
-Summary table:
-
-TrIdentSummaryTable <- TrIdentOutput$SummaryTable
-contigName - | --classifications - | --normMatchScore - | --VLPWCRatio - | --matchSize - | --startPosBp - | --endPosBp - | --proLikeWCReadCov - | --proLikeWCReadCovRatio - | --slope - | -
---|---|---|---|---|---|---|---|---|---|
-NODE_62 - | --Prophage-like - | --0.1428571 - | --NA - | --171000 - | --62000 - | --233000 - | --Elevated - | --1.4880 - | --NA - | -
-NODE_135 - | --Prophage-like - | --0.2737766 - | --NA - | --32000 - | --149000 - | --181000 - | --Elevated - | --1.2795 - | --NA - | -
-NODE_1088 - | --Sloping - | --0.0802549 - | --NA - | --63000 - | --1000 - | --64000 - | --NA - | --NA - | --0.0024 - | -
-NODE_352 - | --Sloping - | --0.1829770 - | --NA - | --121000 - | --1000 - | --122000 - | --NA - | --NA - | ---0.0001 - | -
-NODE_368 - | --Prophage-like - | --0.1530534 - | --NA - | --30000 - | --26000 - | --56000 - | --Depressed - | --0.4001 - | --NA - | -
-NODE_560 - | --HighCovNoPattern - | --0.0694395 - | --16.6016 - | --95000 - | --1000 - | --96000 - | --NA - | --NA - | --NA - | -
-NODE_617 - | --Prophage-like - | --0.1613141 - | --NA - | --48000 - | --34000 - | --82000 - | --Elevated - | --1.7726 - | --NA - | -
-NODE_1401 - | --NoPattern - | --0.1006696 - | --0.0192 - | --54000 - | --1000 - | --55000 - | --NA - | --NA - | --NA - | -
-NODE_2060 - | --Sloping - | --0.1037661 - | --NA - | --27000 - | --1000 - | --28000 - | --NA - | --NA - | --0.0275 - | -
plotTrIdentResults()
allows users to visualize both the
-whole-community and VLP-fraction read coverage and the pattern-match
-associated with each contig classified as Prophage-like, Sloping and
-HighCovNoPattern.
The TrIdentClassifier()
output contains information
-needed to re-build each pattern-match used for contig classification. To
-re-build a complete pattern-match for visualization,
-plotTrIdentResults()
uses the pattern-match’s minimum and
-maximum values and the start and stop positions.
The whole-community and VLP-fraction read coverage are plotted for -each contig classified as Prophage-like, Sloping or HighCovNoPattern. -The pattern-match associated with the classification is overlaid on the -VLP-fraction read coverage. The whole-community read coverage is -displayed for visualization of elevated or depressed Prophage-like -region read coverage.
-Default arguments:
-
-TrIdentPlots <- plotTrIdentResults(
- VLPpileup = VLPFractionSamplePileup,
- WCpileup = WholeCommunitySamplePileup,
- TrIdentResults = TrIdentOutput
-)
-plotTrIdentResults(
- VLPpileup, WCpileup, TrIdentResults, matchScoreFilter,
- saveFilesTo
-)
VLPpileup
: VLP-fraction pileup file.WCpileup
: Whole-community pileup file.TrIdentResults
: The output from
-TrIdentClassifier()
-matchScoreFilter
: Optional, Filter plots using the
-normalized pattern match-scores. A suggested filtering threshold is
-provided by TrIdentClassifier()
if
-suggFiltThresh=TRUE
.saveFilesTo
: Optional, Provide a path to the directory
-you wish to save output to. A folder will be made within the provided
-directory to store results.The output of plotTrIdentResults()
is a list containing
-ggplot objects. The list contains all read coverage plots for contigs
-classified as Sloping, Prophage-like, or HighCovNoPattern and their
-respective pattern-matches.
By default, the plots are displayed with raw read coverage
-values. We recommend that users also view plots using
-logScale=TRUE
as some specialized transduction patterns
-occur at such low frequencies they can only be visualized using log
-scaled read coverage values.
View all plots:
-
-TrIdentPlots
View one plot:
-
-TrIdentPlots$NODE_62
Specialized transduction occurs when an integrated Prophage-like
-element both excises and packages a small portion of bacterial DNA
-directly outside the borders of its insertion site.
-specializedTransductionID()
searches contigs classified as
-Prophage-like for dense read coverage outside the borders of the
-Prophage-like patterns that might represent specialized transduction
-events. Because specialized transduction tends to be fairly short (a
-couple kbps) compared to generalized, lateral or GTA transduction (tens
-to hundreds of kbps), averaging read coverage over a 1,000 bp distance
-(i.e using a windowSize=1000
) can ‘blur’ specialized
-transduction patterns. This is why specialized transduction is not
-identified in TrIdentClassifier()
. Instead, we use the
-locations of Prophage-like elements identified with
-TrIdentClassifier()
to guide our search for specialized
-transduction in specializedTransductionID()
.
Note that specializedTransductionID()
results should not
-be taken at face value and some manual curation is needed! We recommend
-careful examination of the output plots to determine if you agree with
-the specializedTransductionID()
results. Setting
-logScale=TRUE
will plot the read coverage in log10 scale
-and may help with visualization of low-frequency specialized
-transduction events. Be aware that in some cases, log scaled read
-coverage can obfuscate the Prophage-like element pattern itself.
Since, specialized transduction read coverage patterns are relatively
-small, specializedTransductionID()
‘zooms-in’ on
-Prophage-like elements to aid with specialized transduction
-visualization. To ‘zoom-in’ on Prophage-like elements,
-specializedTransductionID()
uses the pattern-match
-information generated in TrIdentClassifier()
to subset the
-contig 50,000 bp outside the pattern-match borders.
Since the windowSize
used for pattern-matching in
-TrIdentClassifier()
is likely larger than 100 bp,
-the Prophage-like pattern-match border locations will not directly
-translate to the border locations at the 100 bp windowSize
.
-To re-identify the borders of Prophage-like elements, we use a rolling
-standard deviation (SD) to detect large changes in read coverage
-associated with Prophage-like element borders. First, the contig is
-subset surrounding the left and right pattern-match borders. For contigs
-that have a Prophage-like pattern-match that trails off the side of a
-contig, then only the border that falls on the contig is subset. Next,
-for each subset, the rolling SD is calculated between each read coverage
-value and the contig position associated with the largest SD is chosen
-as the border location. The border locations are marked on the output
-plots with black vertical lines.
Once the Prophage-like element borders are identified,
-specializedTransductionID()
starts from the border
-locations and searches outwards for dense read coverage that meet the
-‘requirements’ for specialized transduction as defined by two parameters
-in specializedTransductionID()
:
noReadCov
specTransLength
specializedTransductionID()
first makes sure that any
-coverage it detects outside the borders is not disrupted by a defined
-region of no read coverage (noReadCov
). The default value
-for noReadCov
is 500 bp. Secondly,
-specializedTransductionID
ensures that any read coverage it
-detects outside of the Prophage-like borders meets a minimum length
-requirement (specTransLength
). The default value for
-specTransLength
is 2000 bp. So by default,
-specializedTransductionID()
will search for coverage
-directly outside of the Prophage-like borders that is at least 2000 bp
-long and is not interrupted at any point by more than 500 bp of no read
-coverage. If these requirements are met,
-specializedTransductionID()
will label the contig as having
-specialized transduction. The ‘end’ of the specialized transduction
-region is marked on the output plots with red vertical lines.
-Additionally, read coverage plots for contigs with specialized
-transduction are colored green instead of blue.
Default arguments:
-
-SpecTransduc <- specializedTransductionID(
- VLPpileup = VLPFractionSamplePileup,
- TrIdentResults = TrIdentOutput
-)
-#> 2 contigs have potential specialized transduction
-#> We recommend that you also view the results of this search with
-#> logScale=TRUE
-specializedTransductionID(VLPpileup, TrIdentResults,
- noReadCov = 500, specTransLength = 2000,
- logScale = FALSE, matchScoreFilter,
- SaveFilesTo, specificContig
-)
VLPpileup
: VLP-fraction pileup file.TrIdentResults
: The output from
-TrIdentClassifier()
.noReadCov
: Number of basepairs of zero read coverage
-encountered before specialized transduction searching stops. Default is
-500. Must be at least 100.specTransLength
: Number of basepairs of non-zero read
-coverage needed for specialized transduction to be considered. Default
-is 2000. Must be at leastlogScale
: TRUE or FALSE, display VLP-fraction read
-coverage in log10 scale. Default is FALSE.matchScoreFilter
: Optional, Filter plots using the
-normalized pattern match-scores. A suggested filtering threshold is
-provided by TrIdentClassifier()
if
-suggFiltThresh=TRUE
.SaveFilesTo
: Optional, Provide a path to the directory
-you wish to save output to. A folder will be made within the provided
-directory to store results.specificContig
: Optional, Search a specific contig
-classified as Prophage-like (“NODE_1”).The output of specializedTransductionID()
is a list
-containing two objects:
specializedTransductionID()
results for all contigs
-classified as Prophage-like in TrIdentClassifier()
.specializedTransductionID()
-are marked on each plot with black vertical lines. If
-specializedTransductionID()
identifies potential
-specialized transduction, the plot will be colored green instead of
-blue. The end of specialized transduction will be marked with a red
-vertical line.Save the desired list-item to a new variable using its associated -name.
-Summary table:
-
-SpecializedTransducSummaryTable <- SpecTransduc$summaryTable
-contigName - | --specTransduc - | --left - | --right - | --lengthLeft - | --lengthRight - | -
---|---|---|---|---|---|
-NODE_62 - | --yes - | --yes - | --no - | --45400 - | --NA - | -
-NODE_135 - | --no - | --no - | --no - | --NA - | --NA - | -
-NODE_368 - | --no - | --no - | --no - | --NA - | --NA - | -
-NODE_617 - | --yes - | --yes - | --yes - | --33300 - | --9800 - | -
View all plots:
-
-SpecTransduc$Plots
View a specific plot:
-
-SpecTransduc$Plots$NODE_62
If you’d like to combine the summary tables produced by
-TrIdentClassifier()
and
-specializedTransductionID()
, try the following:
-FinalTrIdentSummaryTable <- merge(TrIdentSummaryTable,
- SpecializedTransducSummaryTable,
- by = "contigName", all.x = TRUE
-)
-contigName - | --classifications - | --normMatchScore - | --VLPWCRatio - | --matchSize - | --startPosBp - | --endPosBp - | --proLikeWCReadCov - | --proLikeWCReadCovRatio - | --slope - | --specTransduc - | --left - | --right - | --lengthLeft - | --lengthRight - | -
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
-NODE_1088 - | --Sloping - | --0.0802549 - | --NA - | --63000 - | --1000 - | --64000 - | --NA - | --NA - | --0.0024 - | --NA - | --NA - | --NA - | --NA - | --NA - | -
-NODE_135 - | --Prophage-like - | --0.2737766 - | --NA - | --32000 - | --149000 - | --181000 - | --Elevated - | --1.2795 - | --NA - | --no - | --no - | --no - | --NA - | --NA - | -
-NODE_1401 - | --NoPattern - | --0.1006696 - | --0.0192 - | --54000 - | --1000 - | --55000 - | --NA - | --NA - | --NA - | --NA - | --NA - | --NA - | --NA - | --NA - | -
-NODE_2060 - | --Sloping - | --0.1037661 - | --NA - | --27000 - | --1000 - | --28000 - | --NA - | --NA - | --0.0275 - | --NA - | --NA - | --NA - | --NA - | --NA - | -
-NODE_352 - | --Sloping - | --0.1829770 - | --NA - | --121000 - | --1000 - | --122000 - | --NA - | --NA - | ---0.0001 - | --NA - | --NA - | --NA - | --NA - | --NA - | -
-NODE_368 - | --Prophage-like - | --0.1530534 - | --NA - | --30000 - | --26000 - | --56000 - | --Depressed - | --0.4001 - | --NA - | --no - | --no - | --no - | --NA - | --NA - | -
-NODE_560 - | --HighCovNoPattern - | --0.0694395 - | --16.6016 - | --95000 - | --1000 - | --96000 - | --NA - | --NA - | --NA - | --NA - | --NA - | --NA - | --NA - | --NA - | -
-NODE_617 - | --Prophage-like - | --0.1613141 - | --NA - | --48000 - | --34000 - | --82000 - | --Elevated - | --1.7726 - | --NA - | --yes - | --yes - | --yes - | --33300 - | --9800 - | -
-NODE_62 - | --Prophage-like - | --0.1428571 - | --NA - | --171000 - | --62000 - | --233000 - | --Elevated - | --1.4880 - | --NA - | --yes - | --yes - | --no - | --45400 - | --NA - | -
-sessionInfo()
-#> R version 4.2.1 (2022-06-23 ucrt)
-#> Platform: x86_64-w64-mingw32/x64 (64-bit)
-#> Running under: Windows 10 x64 (build 19045)
-#>
-#> Matrix products: default
-#>
-#> locale:
-#> [1] LC_COLLATE=English_United States.utf8
-#> [2] LC_CTYPE=English_United States.utf8
-#> [3] LC_MONETARY=English_United States.utf8
-#> [4] LC_NUMERIC=C
-#> [5] LC_TIME=English_United States.utf8
-#>
-#> attached base packages:
-#> [1] stats graphics grDevices utils datasets methods base
-#>
-#> other attached packages:
-#> [1] kableExtra_1.4.0 ggplot2_3.5.1 patchwork_1.3.0 knitr_1.49
-#> [5] TrIdent_0.0.0.9000
-#>
-#> loaded via a namespace (and not attached):
-#> [1] Rcpp_1.0.13-1 bslib_0.8.0 compiler_4.2.1 pillar_1.9.0
-#> [5] jquerylib_0.1.4 tools_4.2.1 digest_0.6.37 viridisLite_0.4.2
-#> [9] jsonlite_1.8.9 evaluate_1.0.1 lifecycle_1.0.4 tibble_3.2.1
-#> [13] gtable_0.3.6 pkgconfig_2.0.3 rlang_1.1.4 cli_3.6.2
-#> [17] rstudioapi_0.17.1 roll_1.1.7 yaml_2.3.10 pkgdown_2.1.1
-#> [21] xfun_0.49 fastmap_1.2.0 xml2_1.3.6 withr_3.0.2
-#> [25] stringr_1.5.1 dplyr_1.1.4 generics_0.1.3 desc_1.4.3
-#> [29] fs_1.6.5 vctrs_0.6.5 htmlwidgets_1.6.4 sass_0.4.9
-#> [33] systemfonts_1.1.0 grid_4.2.1 tidyselect_1.2.1 svglite_2.1.3
-#> [37] glue_1.8.0 R6_2.5.1 textshaping_0.4.1 fansi_1.0.6
-#> [41] rmarkdown_2.29 purrr_1.0.2 tidyr_1.3.1 farver_2.1.2
-#> [45] magrittr_2.0.3 scales_1.3.0 htmltools_0.5.8.1 colorspace_2.1-1
-#> [49] labeling_0.4.3 ragg_1.3.3 utf8_1.2.4 stringi_1.8.4
-#> [53] RcppParallel_5.1.9 munsell_0.5.1 cachem_1.1.0
ztmR?)lR*eG@%><;-wX!|SsY3|yKF3JMA)Kl20vx%Iq-EIXOPyB=+%-@0|HYip8L z`KM2m_|ACMB<7|0aUZAUx&2&RwHwT$*u}*5#wkWtxNY9?^{wm0 h(Ey z>eP&k^TUlX4evGhv X*^4oUo zc-fWcYuTEj7a7-O;CElynVvR${tEZsC(N)#YAT=PHslu)QstqRqU&|`5mjkrWo5jm zzue(^nS?8H5!?a-J85=to;h>IwRQ2=uU}gk89lnY^=n=U&|optKiu9=MaS%RK AZRK=ApI}HifWLQM|t=dn@f$7I?EQySCiFfB#lT z=4P?`bN=Q!Zhn4#Joo2racX5>G%FDo6x@}TmUimy7*ni5IQ6}I_ugw{P+`Ngg{Djd z3(ZxOS4xj8N*H}%SedHkjvjApYMLBr;b?Df@5^IlH#y12muB%(#OBYB-4+%W%uN!3 zv-~>^M;aCu>^@dj9uyVb mwy(LIurvjBA*xxK7i&k?~=Tvg-d5-EHwL-KZhU zOl@Il=~<&Us~B^}jr!J5J#Fnh?^KhHQ~&As{=K}up8jW^?fKb}mc{vmgoK5GP)i=` zfr}xn1M7PvocAOrCvT#qWmp|Pp;sg-Vl(9W=VyL-W#vXyRaM81)#dqyXek=cJ;GCO zItK@K?b>yO`j4ijX7trW)uGlTmXWp;pW|2G^%)NLSx +s9 osMQaQ4KPbys+?NOR5O1nYa6IyQ4fZr{HB_F&y! zPW4n0wfn>R9LGhgi@`jl@kZgN?wlLN;eDHZxh~P)pMl@xD`~v5kb=~ltiwXjCjRj` zBX_FHy0dnX g9UW8bh{V_R3S=QVRIymBnN$Vq$l?!7b8%wBMRehZ$+ zry{3iyS2Ti@Age&L(%Wwzdt>xE#0X4Yt;FTod@1s3_01JYkjn{@V*EBaL-V~oA!(w z^w`N0J>?tS9zTv&2p4f&!wMQqbeE *x5Imf6tBy<^Qj0YoJ~; z9DnfO!3W#XK-sCHyT6%5?)|B$EG#J4x_7S^3QRO=0<+JWmb&_D&8(a18OC%64jkz2 z>)WvJwC~X9sM(ds=VgJfgoBjcUf4#Ir-+D%;FCtwxHgT4zCH&Ii6v9=e#i)uS?Hpi$s(Dc&uM9+C~QJfFr03VO^DUC~yu==Xz zqp7Z5(%86tZf _i7739vz$(d@>a6p`O`}T*}j9xZn zj5S2 KIE>Si7C-Y0D!uoLw8?+Qy_mJW z-!^-8_2<2={bFKbibe;vnxA*7+^|2_$iUzM7NfMI c+#GeZr~R_?wOe eG8jPbgKBG^MQlgAv4jbr0K{b _T(5n4X0SZ>n>op2HZ3#rqxas^3w90;B9u?B z8`rGu`^bb&7|kNOk)E}tvhly7Auc#$8OT5#e)?X;lWhkV7FHIgx9#4|F5hWtYPzsE z7`eERQoQzT`(e4h<0 L lEDj6- zLoSA$+7@&|$Ip?LBS0=p#Fo0tX@0Nx`ieC^uC%IZv$L~vFs~uicuupnz4^CvN@{m< zYWH)^wv|}&g?Vhe!LEB_?JrzXE+1Q{PPOTOQ(Yazon|wvoO$cp_7f*g+`fJLOp<2S zMDhA6{rbwZ&)eCJQ$;QoT}8FktAIIcPA%`QF3xLZ-{SpHID@WSYFWJcSkS!VHGmKP zu4`P}QEBfzPknv2K2qd;uU8zwt@87pupuq#8 spD$Nw5Ly>ZjM)?K#l+S={X~f z`FfU~^WtGPZy%qwc0pXt;P(S3Pj2_*-E- C!9y2ag_6jI<^_M ln-RvuDpv%+Jd_-G2CTwB+W6#YKbuF98=66zW>C^*wujeR|F$c#Dbn zUhGEVdwVN=Di@~*504w>j`ENI;7;A2<0JsbyQ_(1b#+?=%vwL9Buy?%8b&0mCTTiq z$=Z|Mx_0e=D!|MMoxImJ!;OyXp6HXff}E=4owQZ8_9?`pz1jM{YWkgaZh9vp^{(dM zX9@hOY{Gkv`n8+e1}awO1-i?B}`9g?Z5(p;=sr8>k}1aI+tD9p59p5wxHk1SoO_Gd3o)-8O;7l}1} zGExfM(_kO>yD8ID< }7ljTMsg7P$``5-n;K$j-y#tC(*)x(jIK zRqL!?p+lC5c $GS ziHyfI(*WAkR9DN}yhq`YGwWFS!TPr$vSl3D_trNxE9+C~qmA|)@$vD;IJG})ZHiN@ zS1Bsn 0!<{29D_e@@bqBb|&CP8e2L}zx#km}dpI>t<^^&;RtDl1tOa!HqeQpv* zrQu;qzLKzAE|4=MF1^2nUSh?Sl4jSFBI|qiWNKdt7@*DJ(v*T2fHxlJ qJx@mXQrE0*b%ZaL7qV`j6E;sO1fKUWM3F6ipsGJMoyV3pow-^4*P4g fqX>Tp3};Wj+O;*9Lax#m)D*O?l{hWMXR7^~2)he+~_{51VQBhGOSG3R`5Ead3hx%dg$cgFc z-f8l0I;H%#+P9)Sl>_o^+qsjHWH;5f89Vg>NXu*d9jfUQ$4;I+N$`P*iQA-a-^b7a zj$M7{FWsSNaQ|;J>kD1+=GhVLmA$LrCbre~OHFNM=jCX0g@lBvl3L$R&Cd_o3*KzL zV3?=PWfve9b1V}5%k(Y#EiOA^jjBa%wewUk8KP?9D9GKAXG8nGi|waTy 6m!VR4Cs(*?f)Tz=3m_zm4m{syd5ZQeK=u0pQXr()PcLMb!+_h*Q`b zVccEvVC-l9z3AcN0nc=Dt=xr0M4mN wS6p5Rntx#xb2ub7j~*pxGjv%g4}>y&G&CdNu5(WJC0W^R zEe0yF7aJ}dyj7Yg?tSjuxdod5xla*d_bV#gegOb%m{ zah^D#aKnD;{=cW}SQAgLt332xJ&oMk+uN}KJjicpSF?1&m0##xj@s=G+}v1%g^AhG zHlr#P7I}I3Q^LZNlR&*MxvI5w3+zfgbhNcoZ}*(TI(m%vf<#53z(=p$;p5|Lh>>UH z)GbgCJSl27LBh7~>y;1WteU0y0O|>9wP1%QJFQ(*5G-J}iwy@xXrLy90z}!%CObQu zN#G^}z)4y0j%@O)@^W&&k`}RSsbIQZt<7L}CSPBZd9z8>6@SmOO_VMUuo^H@AjAqZ z`^5!`^_53}47-TRf0~AdCex(h+)R4$>(~24@6TQI5BjkzV}VmHb@3vt>sVkkP;9wS zm*b-YQXlCzfbGx$` +7@8T?we$EMb &fd+GBWtK zu!(az+|dSoIy@UXf&%jO>*Wvm`O`=FUB?(3xHL02q0;ttQBqQx)>uBXz77Ca5R;C- z_@}ElWzx+PXeE$S<6)Qca&5N=`58zOLz|=U8J I$=^z1PmQ z(tTDDz@g?%f8+Y~;2EVJ>Yc|Y3=H-u1>ODK@l^MaQO!{fj_T{9QRaIEEq*)!b0H^5 z`>+ypl;A?`IhJg=aaR;O5PYAwNFD=n^y^n~{Q&Gwb#>Knva7fqnvQUBUE 2iL4-eU_H!S}bZvU-ElkAw{xcK(ABlw_24vQf?HM)I9GhkW<8 zSJ!@Wk(PdJqOHa8`p4%GMGGw^`Tb*&JcCOnZ >N#{j>4xu`atPYoPh;U!)roMs3 7FM~HUUR!S~}CSik9SB52jwP+U~XQS(tr@{LP!k zPiTKAsg&{FV|qIRV5$U^jp#a*{TI_*`WRSQ>y{NL( NcMVrpA%S6$N z4qWWGlBnuMzm7Uh6=ZoFP5i6 rio aJleoVRXdIMCS8DG~a3Ttg{ zOVMK^c6Uf87&VG(e{VxW!-^4i#f6I(C9%hEudg{pSgNZBckYr^?sHTMy6v)4(v!Eq zd6gLikdd66{A-cZeep|7j%wC-@9v_!-jQwo91Y(PVnH FUp{t- zG7Kly1JCN#j}P0>j85LPulU0zytzJc7nkOcqsCPQ$g@4=BbB*XrtPUw(&1q*Q{|Zh z kk=~`i!)m?humkINfzCRzfe_bP`=gTUezCZWAGqb3u zh-!MrS~A5ep( r*UG+zJCwhco>xP09+KQAxZWqoa^v+(ptOX7_QZC^fa>#cK9qr=1O z?E8)cXfMm0!0HW@KPLA*SC(w4tfDdrwBfanl?00ZNndy1&&~Zg*rt!Uix$ZB949G@ zmPR;;{>Bg{_!j-wAuiNGkJPwK!}uqMMaaUHH+EW-r}-Sq*MiA+K6?f~0~0Q$7X7*E zMk~g<6(Gms>hYbAX?GuB*PEr2CT*gjdCBi1oTQVldazsk&M!%uv38|#uQ4Cne~5wM z5KI_%P4vdExz;y2>3={d>=_^D&b58w >5 zWZ7@+L5WW93uT0e63lmFi}PYX a?ohY u_06PHbG9A>f$b)J{BvfMe>N$vUTjIqSL|A>y@uFO<=Z&&fI$<*J gR)?AV&H>c^^LPJ9$z$yE|DE$7J!g zu1^|hOj%bK8+HWo-CoX;s}Q^v#xm+t^-IZ>^gp6rii?XA;tA2iK?~l-#{PmH>^Ef# z+IQs&gT;>z5763gnkQj3(oCC 6W!UR zqjKvn9@%=}FCGavrbG?~;V8<_&w%R>6m>x*UYr0FnHZ=I6%81~60Nv%ktDfEFTX>$ zIm{e%nkR(KD*N@9Z;@#y%8KsK7Dnlq!xo6{&d<+34eaD27jRsbGr^{;9|ZG|VkHXo z^6iBQ1IPKF_lVWtU*c@_;C-A@wDc@TJp=e)s=pde)T5f3i*D}j24H(k{3ctA7JktX z!rE-5_D@X+doI%F&XGsId6R}dzOcM(_BI@?8;YTEV8KOMCP(MVUs4fMCui5HIC^qT zYx0g9J^H*t;&D;gbg1y0l(MqlTT%BU^`xXE+w9JON9=XmdUi-CFE1H;4&N%Id7{UZ z;5>Q5LYy*5e!K1MHnc|c{hd12L;1ODX%_$R+e5cx|Iac}V6)NAMmU_ub0u^nBqWsd zBJf+aDjEazk@X&X_wH3n(Jd71kE@TCdcJTwQ8h{YS&3|&vzxoq{P01?uyy!|Z6V&g zkHIMoe|>zqk`J4w2TOfSBmM1*n1G7PN||P6i}khD+%K@$ppfo#bOa@no;{BStJ4r# z1Le#Uh%5?rpNLlL=4D#J>=<4Av4#{qi9I4Vn;?#yvKjInViK4+;-J!ZSjZqU7J`NS zO#|b))t4-g?;YENEiSt``Ef8%%L?f~aUN)A1n%?qk4s&qU}IyeGOD6e2|K8(tLvzK zlTl>EBHU&Xk8L3}wZQ()+?a;!*~==n^(4~y$FvVTJT|(HSsX{5sf+_zq{LBZ5{YEb z-uPE)-u8yXy=XGlp7v;CKKzrS#Q~PLF)_Qt>MJU!Bvxm3u&wuauvx7hc>g`e(r~aY z+|jY8%>9Vj9auOAM)=T0hL31?=k8=zmYiv|PT=BeSsf=o1MF!V8w!An9}9Mo;!d}5 zO)uxx6D}X)vG{RHX?JE}?N48jiszawUVBfs#xFt?tM^E}l5k-7upGKocX@{ r1U@icGwXQK+LGA{ z;Aeq*6#JY{*hq6ixkr8Y>7%)}g?T@=*=Z3Ol2 zHSfse6(I%r`yaX~r5z);la`tPbG+zVIYq@vpxf$7h_op}@fz)$x>5_lFj0_3E@3I2 zL-iFuF*dDg0*QmT9yT^qEqJUJfsFOF!Mu;UT O8|Fvb6c5(MW&Q&{Q#8a%$H0O#X??$& zEoiB18} ^GY(1mq-f87R`)Mjb$aCPq>lWDL zY*)K%2&=3ACQd4 BU*8gdKb+E6;ItNx;#`Y4OrVhz7D`U&Gv7Qp?NAB%P!N-zq13jZ Q#MQgVc9DEW7N&h7uo%wI`4o!c8R{7xsy4LA$T ~q>Wp6 z`Ey@jXn1(|kl3c93SnQDuH`El{U? z)HHM$Q5ez!v@dk6uWbasYl!>|{=x$Jp#G;^-)j&s$bP`w`2LNM3!}xyP v1b%Q5RL^mTi&VXScHG0 zcu3HvECrleF#;)3Y}{gE&KrTP34&WvTYIUwzMl||qs~#j3F?AvF8*FQp?iEhWionS z1=F9-!smedPv#zI*6I78a}LEm^YNiygJs~gPfk^J7g+7S5jn|rbN3(iAu15i?KpH} zl!?6+1|PdOR?^0X|CNws9mO4-1Sy=9MH`hdHUR_ui*htlIxtUZz=}xUlJ-MNy)*Q6 zzn87k+}LiobBC$RHd0c;=-S^_Em#3F=`{?bqY`=JJOb8Z#KDL0^3+0?{0y{sWKfQc zM4V;n
0fE$?D#J#{W zY&$6Z#5sQ#w{DHrr(IOAM|Z+NudPHI^Mc{2^h(k6zlTdBeSys1*SCZ;p@>GUGz~DP z%P&C^bY8KOotBoA 7(`c;=q5+~#a1twK zAOhX&(}KoAd}wQ$p^UMa8HXm&X})CTH7l!h=?L7C@s=%HqD27^LW+weSb&<%THXaz zOp0Fryfvvmh%W{3e1acYj@DPPV4$M45GJj|u^`(M)zhM-!yCW_T5+URA;vWDyPqpX zk-QeTTFzt$;<~N>Tb`|%pvl*LcYl4{{HFCKZv_B!$jg^6k4b>x5tsD$ehVFJy==eU z p~SFBf;^INd;!Vx7n`A(?+s3@s@+^Je63Mc+?C zSd|GlewE+594zNrk}G3PvAywP*F_;^e!4Fsba zsLOG`QC_59t^6muu<=n(_>r@xkm*A8CDdd43v?4FD+oJ|X49svt4huD?5gjXXlQAh z7msqsg_V*UN`P68jTf&6X1)(2>nw2g{N`;%7$?>?HqBZ9ibtV0#Paz7RQ1~z&QeNQ z^`e^)?$OlLX>2&GB;A175WN#T?PKu?qfJOx%|U&E_6}R4ze_LAMt0Q7@Y*$X=!u7u z kA)h3!AQ8FQb9y)U5 z8bBSgb|;gi1PL=10UBs^AF*tApp^W`vz4D2828ZtxSCv=HQOU>wE t zHJi~^I#AI{lxP|t&TxAot>$?+Fc#0?gVVAgtGMG6LIOsuKv2UK*T%`k)iW^g7)OeL z#C9lUYb(==Yp3q&GO#OeK!~86(4$dr%bS{ZplPM% (tOIV-A-|H)57KjT zDznYM6QLROg(yHBe1%6qz)m v!ACr)Z5q!(n1Tuqx|caE&h z$apay9*GzkO(||2df21V@egtiTrUmYmU8FlKSMPp%dG7eG6viv{gs7D^-L2b@t}Bp zYI=GP*p{wip|)ktlm9ZORrEGmVSk-3M?ct4K4_#-NJIroxD-{$@6A#wZr?##Sy{QL zAxh}wThAS0_v@nk7im2t0o}Y8NliOM{ZMxw0R|F?OQh*2_G05(S;qp9uz_Po{v})- zlxY5CP^V g55tQ@ZBdn~iJ9Xjjb&H!f zKMdM>Efd}%f 0pF!w}z-xqmeG1eV(!M*+`;&+HKxmZ^vATzbg4sU( z3*bsp{NGE-#JTDPNhac^gvGoxV~R4{jpudS%IYDOnaJtEG$Xd!qK@{z)sy55_HU!y zaqh{Pf4teK9%@lu`k?IJYb5?P#S41&Z^8cEJ%e)d#{buE{Qo!(Yzi((#DNVFdj-8^ z3h kF z3${{ZB-^c9w SWmgft1f`^AJh~gc7!tUAc0X7}Y%bU& zGf(F_EoYDQR}G^95aA@HVrQpQr%n;MlcDc9+(ZR~=9SUE|Ax47xUjW!W}!9f`oQZH z3og&uS_B58KxyqJ^w+|*Z3~36J+zIubn^IdX|MQA52#etq`YofAGnKxt1ATJf2{cV zL0R3Dmb+u^`-gK9km8w`nUVBi6-$MXbm-{O>JPgpWeoDfx#DSC+?PgX%NAII8QIFm zrO)2@vYz3#wFy~pc3%J=gk2Yp9z00F$gRtN+y_`>KQFJ6zfS_lA%XJ<-woGx!_Nrx zj*yEHLpV~Ur{JFOUO5RaC-OlHla*{eBO}LOseWy}hl2LGrbZI{;{|?L_Fs^bdkCb9 zge{!~OGWUIw!nblv#CwL+tVlj%!38ZnUj&oL++x$VU`-w)X m-K-YAOF0p*WoV8x4Me<0_qW(@47 w5l#Gla zng$ML*~h0lrt?ox37 L2cm*sfhb9Y#hGR|d967?Wh0WQL`IXi27G5Jx}B1e5?YavEUVRk zp(m0#$c$2ukcn{vuiLO;gFeb5T(~dRYmXg0ZOx30k5~?0;PTzX%cjzN6e16HN%I1z z1>%Eyp_EjjY=JJ3NLb%TXuNC7UF%;ox18HlmFP41>bb8X9c-@$gTH<~#8-`VWYIu1 zeC*}rRca4~2Y{N6l$x2@$JqK&6l&&+E-7C+Lt2zJD&L>a)V@rrZABKB46T|E3-}l| z)~}3ualUFRxEq8f3Xs+rKb;JYiO6hRsm<{KYUtCwy+~pplIB||O7aD BrU13$t9T!i0(3fK*F6f9zU93Ot KG%~?f)yGbImvN-b)JYgL)$d+KH%p= zY8ge*eEa$Y^MwaO2%3s>W`#aR4 t9?OdM_7K2D$fg*3GN5EP^%Hg|3oQP}o0jM9hQ8b06WThkfxPB4W#5zcVxY z2|<3xWo)q $syA)>m%dhDOn6C<#}(+ZMrg6t9gW {jI*< z3Z`;oElJlmX4Xtz$P1&QWg-zKMmbvO#k}_tYYP;3Navw%kV-l_n2{(v3oG47ivT1? zE(ViG1au^nftLXuycHCEU Ju?3M|(iw)a{cesc1V|MJljw2e{0l3@rO~4(Bf`V?BCAQc@3aZ=*b0Y{jUWVc zQlr*|n3$NJk_Qw_D3L_^5V|Z84vch~+r2dR`#Er{iBrhSrQcJ8=h~Hpm~Zh}4K RL8S}1$muAr%~8tEhBb0uT4j;4{0mhy2S~+?t>EX8Up~R zALo!bOTF20T%%Lf2}>aIWad^fn12aZeDzsq!?yiNF`tk z1nhNOTO1_jK@daZ0h9hw?4qYE3{#8B#l?m6wd39dB6E`8HIo_B>Gp~+01*;S4g n-KIIWzFkYbg<~LEnCEV%VAU)H0sA9pI02`a1#S*q3jHpk z`-P *t0jBN+EX67;Az|=dv(rYYQkWY?5r%uZ1UlDVd=qBr8gp9-=EG{DQDy}Qd z&_k(Ox%#(&t6*-@dQ8#oHQ*yhr}^LC<9KyePoH#Ib0mG^uGJ`X5Fo<)Fw5VdFB0c? z?$1vS(=K#hB6$wKm2k0Pt$8CB+Wq;(L20qwenIA8ZMI*2XTADCq;ka_3Hco<@ONjU zF6%?p#A8;^wK|MY-BaRoA%{Ui@@W+v|C#Rr*!{+Nb%}`J0&z^XsOcGC)u=`f=cWiZ zPbsr~wmtDhqcUVkQ-zv+Htz)FKVp2Ka=AUt&^97}KvT_{^C)-q ^Dv^qiUZxima^a;L?NDslznnGky05l+c zOtP%4%PS}tqs>s|Q~^9^)#>HmHK%e7U{{fzaRSkz8wi 5Lb=HFHWBBQQ;|mn1y%XE#Kd&`2eI4VT88bx+|frwpvs}zCE11_SA8EmTCm&j z7E)3LVK~iv_V(BTAA@o*2lA*|C6XJ;VEO>?S;d7*my7}f18GUq6BFHCxW>sP<*3W4 zo}RRi?E7Oo`C=_vRJ#!6J&Di;m8-pj1LCL nVgsLvbH`q+5{hnVb6F_1d-+ z--Jzc?a!Y-BGV^SVrlQs3~l4U&lDwuYL%WYA}q{Hs;R8>aEVh+P>+!dSXkq+@!Xuk z*jeP1D3l~ ICP@LU=U^()y6|n88T3rc%k})_usj9?* ?M`s0q=1k1qIlx`o{x~ceP&i?q}*ywc (aPZ(aEJjF53b&$4+BK;LN(-n$_Yp?;{^8C+#f)p8sOM&eRfvBA0|GuZ z5urT@S<^P~#BO0Pj=^!^6cr7-6e{SYXnp&(KDb|W`a73`ma~kIrv(uVy4(L{=Ny6@ zcQO8>O2j2)uye9>Kki1%NOEyyrb!V6(^Jf0=E=_@r%)~=^K5!1pgNfLMU7tL6Bm!L z3=N9}E}L6fw7%P0K^J@ZnB5vYryc!KSB`5C&DjRpYBqKsf$Q(0 ;@CgQX%+X97b)OsA&CItxQB zgMb;BYH~o+nZGM}i}ux2GGPn!+xHc`IQTvhhv}_Q 7*;{ B_`@Bh!bi&>Vb3ZEwnW{ThNJ!HJ0+^>4r|#!xxOAlh)AIu$Hn-r-NC zkI@{_%L&{ip>63SOK*xCW^amHUbyh2?stN6LNK@$MF|pi$$a4_> Cl?d~%T{I;%Yt6FVH5P_--?Ao@i6aeiTG+N2gH{yRtsYoHD z5r10DalzN!!y^Mq{L_c;iFB$aYi_b|Up#%^DFvpNDc*c-S+TF!$qVFS{AP!nWUkDc zBzn|lC0lXHbY=SyJS7j9ZN*Nbz>fF%lPCJv5QcCEe%Z(S>?gek zz z>hXYR)pIC2jj!U+ak9jl?rxmJ+??YQq>jvi>1yuc34R0@+8hiV#@cxsBH8!P`Uv^{ zwEELi?!i2L!`OI=?H*|iy0m6>bUjkjv}JRTAqjCWJwhAZ>&0K@ zMC(e7>zRq8ku>GM4{I)U$4O Z9+#azQwK-)s^&3D93WJS(>aI_^csKW7PSyv*2ORXCs=6!io zzKLr=r%PzAZ`8{Y%k_WpV*gSGH!bVC%~~D^C+QgGDJNXVhS`;LzmAlm{aroT)=xR| z!i!LnCB!FdYwO-=%8eVJ$0kw~kb)y4BRg4Uh%q+8lXxd!4mZT)KK#;~Z(oeQI+!y1 zAgry|s^!i=Uh9>Yr%Mu*6WV?EpSSylAZXHb@X5BkFIjt>zRM*WZSpZi{olpN827>$ z{W!We9*d(Hd1@P#z2(n5Bfpc3nIe8${ai4aO?}9mOt&YJS?4EzJR2`iU=QQTJn{m| z&H@8My$5r;j?7q#Rs?k42#@U7Z=%>fqUUug6AssS_*ZleGdl83E(P~~cf?q);aE-C z;8{22>vr7wp6yki^82B*In3erfJ3*2zD6-K9?Yei7+7iYQ<0XYviv#v`*%{#b7BIn zGx|$cS693hPlcol2_W~4P|^hb8UTt->~k-#{^3kpvHd?PiHX(_p9x+?L@yqV9vEXT zXGpS{tuk{J5)cT8JdL?0dkd+3S)wB>a;|HwkvB0R@@u$7$KW%;mM-kvv7>wtOORE8 z%=lqyX@F`JNpD23A(1mBD#tu4T}>)VxB?2^z^0!&%3`a=LhL{hon#T+wmG}mk)4q# z=xQR h~++YyCi}PdktIZSodX#`;MM^k?74gh>8Q@ zAGevecoGCPyz*&o>(#pcA++EV=fCiBi87M?CR3?k%6DEBQOq!`-15>t_jSt)H{X@> z+!_bnA0y18t)oLm0-b1kh4Lgoa>Xv%?MMb!X$M562Pov%aI+3gh(b;D%#U}msN5oz zKt5QI-%k`Fb)d0}r!i7Zq!$q02K^3i 7^Wl zaw_-$JF&j*F-Dz |P;@usT!1Ek!Dmj0Bg1?}J4d zqh+Dp W%W1?SgUF_OJRtqALYJVYyxBxz3l}FR56ndI zB4ino7C-BZ_di}rn&su?g*Kg5F@r3@Um1tTe(HL|_~Re5wGiY<7w#{{v5zbu1Ub(`&gN|f~ z0}d{vF70W=(8YGb^cMcf@cmTI==I|ma%x<9s1D-|i%tv=B1mu!^qX`h>T)+og#$K@ z{mYkmtYof`tw#!5x$yD>7^(F8mW^& * zkkaSP;AqwLe$*bl>D?cEb2m({mZidsj0}?xU_+Ws0Vi}`(I@H!n|=9LSFY*)eQ&@8 zVgMCEWBm%x-R)Usj2JE40NXMyE;g1B-AJww5eH2*poK3$pvMsBQxqBl$b^osmOR>- z{swh0P8idfiB HwOL_#mKc*Co zB}IGaEypv6HXR9NB_VX5a8DTcxAy9yRfgAex S-s1jLrviZGZ;<- zc2laZpH;-&@y>9|? _c`hokF =MVMT{kqcTx!n|1aGQ5-0xXgm$$UE=#Tal9D@std|<_+ zt>|jOLYAzcpBqWU%N3~TSv?5@31MG*-A;5AyREV~C%~d2>xYn}2&H$KZBdivmKkwB zW=ISEP13)@lZjnL)wIc{7W*a1 JImPo=wB$c$aF(TQut(N14(+&i+Fc1oLifP5^ uHu=IC_~)WsQ}cff~{xE#S&&g$U87&}p7MlmVvS;JaFx2M^R LE?ie 27*I`1adsqq>^ pRK z8+Z`!E4g%IsbIrVcb{CA1Gl{1aFoP&`M-WLK_8NQa(CVtijQ0dw3MrEl@|^247taS z>tpoXSm!QI*&-yp^wOEKWbWq52Y)dt1IpGwIatsqh|;#PJJ;^40woBL7oY^#^TL%T zhQbN^(bKc9G#I3DEqDR~3ID*$j3QyDB}_5B&W$2HNf=pxe?aEj+V6=O7VIm!R>s&h zv8A=;@kz{UP>^s49ut$GpPjGW0J9*?+}p4JB<$Z)uc|JRm6Id)-7Cp&Q^36BeNU)D(|B2$CNDO-A_ht683jhcWNM(dyN5U0HA>O6SC2oPN?&0%)P zw2yI|4&W6XNNJwOQIgWJ-5fHS*RiLX_tVL@Ya2iR_M*$J*4{dL;oKAZzpti1_JZm3 zT~0#QRT82@V;4I53eatyV!C({EwhA6P1+qSm-K0;l^E)t6U zyL9yjW1oAhTt ~{tn)u0UPFgCKu3?C$cWTP-dyvF4f8cw;|hWhqxta z9}mw~;F_k>J`?oPa&ph!wsPd|FVM2Qc;<>+S5#T+vAi|63&WwjhYx?!7r$9%SQqSS z>wL}A0BScWy_z$|HZ06dh#3=lQS+0hNd+-!uuIk-osc1nhYNVx@h&nXhxIUODJdx; zV84Ko;)Q#ZF`d)X(~p2Gh?mNM+^;RX kO+_IvvY`lROR<(l+sG>BZO{` z)FSa#1C08gMF2w5N$s6h1}XRcTPeH20v@pg^w;NmG>V;_h{z>2;(1KsuPyY_uSGw{ zu+}vQFw%pk9cD~A^)yjIX^Ye;T#wl?Ff!hlIT-^Rzne=FL!L+M#o3*nQ0s9j }K-+B71mZNDnSD9ch$L74ETAI(F6|5drV)!w7vcvdZ| zczcAt=kUtVsK|byFpOowo>a&COYr)pH_~3@zB=Ra`3JvLX}7fusC(zON-4Of)wuaS z^un7 vVcDr%6X{72u=*-XjJ2IlI7rXxobXalDvF{3@eSO!j zBx&wMvZQHg;I_*0@0_l$Ksez^(NIkq(1(@2VXnro`6MxD$Cf_}#{qTvuvll`=xDWv zyQRD!<*eZksQUf|^@yL+#$J_By=7z+GhN>bSWB1PxSh55@zUm9R0%Pn&os7fs(%TI zHP~s97>8ZQ>tTj3aokes!+?t!ad1B4jUI~=euw41=HIh?6o~+ucs-HLEq(p)%6Nia z<{Tz<+&nybA@r}@(VeAXwf0LaQkoC>hB*gE^YDXXUG 8> zaN&}UE$N_8UlG-3v(*%FLE6G^+CR^A`MW7LG36y3atyhqFi=ppbY+vCx+$92w^9`W z9jDo9r& s$d)()nQG-BJh)s3 ztvIAR$?>VBU=33-U0*Ov(v4R|;4XsWV Lc?kPtti7bTVcFEqKmCuJNAe8 zy^cSFv!ctQ8GQHtgqhy>vl>>v7$&=7bhv5N^>VhfU7E!HfPetUBVC!MO_Gs0UE`G~ zzmoG!U%$E%FMc82ZqvC}<*YzWO}$X9Ea1&og{Qkvop7Rl>s;SUMe YFRWmu{r#axp?OeuglcEirqIPjp*cs2g9sy _=yQiV0d3MCIj4TjwCR2-I)&mr4mW8u{ec3Nc*KAlYW8$)XWjHSK8kivI z-19C;<5%xu26;)ocI#|)L*}<``E#0XKcVyTA_To2Zir6Pe&36xzHmh646iaDl}lMW z6mF3>d}M73QLaPFErEf%Fp14{W++GR7Vo)2AK~W4QR`?mwxBPDwbw^FvN+bYHoDcl zxF#{5;E ts^x? yKfA$Hf3<`?7*c8iU8A<> zonO8)T`Tk^FYi^cf{9eu=TBGNcAXtTFv5jLLsj*$ny$Un#Os2jBszN036kq&k}Y5d zb)=W`fsAi|ir1YR*cOmAm=3ZmS~QkgwlFd2rijbU%_UeFEYQRc<`Aq)Xt)bV`xtCi zn (&^uysH9?e|>#`=K`7` u)=hB-Ly-~~66WM5b;3zTk)j1dEd zuGNTR_b%-dn~NHB{^&T 28pa zZUhx+R6_EM=fC&+o_Fsr=kvL)wbr%PV#<8tjxm09 bam%FlHKsq`G` TGre140iF-~C3Xz@WQwLPml6 zQZ6Ae@rDBg7CQM*ptfLLxjnxFHQ>)$Yj{WHf}}X=N4^_H1$yujN=i%3p@}nrp3f4b z=4PmA={JF=<-u}BI4dmppb8%T592{`mytX%Y>?QGHr|#$PIoOXwfv zDUMIliOeN$znr4dU#aBYmWMD5O$DUkEk5(O(+ zB_b}>*4D0k|DOC4^nn6EG+!KovyLZnHT#ek;3Z5yNRo+e`SRVR@@YrV{?RFTWRhp> zER>a%KV)S|{~q2w`g6MP*`!{+3d`9HtnYd+UkaC$m06VNmRr=$yI}jif<{lz&@gRd zs_nbW{;9{m?@5fcRJ_lwqPHTNZ&U^J_LWDAuc8v-<0~NX;uDw<5mmE~FOB!#m}Q^# zUFTzN7fHBGJ0M-pED2C4AT8YbV`Xi nM5h5KN6BzUQEDXhn!682F;_T(p+>fDQQJBozAzU;K!0VDq5r?9A)p z;zfhuzBifZh476fU#Mr!>_ZP xu#B~eM9;vaO_H@_C(`(6UKS`Bqo#q6y9C)b}UFE&eSyPF<>^Yq!+EV;vg9El-A zT}JPP(Am`VG|NjGVNWXb^@&SCety}SpOrn-rpTbUckiAZ;FM>(zmZAm2y4Ys=k~*2 zuf9%C_wN3LY_N!ih1LCvyI+I?mVV6ImYV~G^iz^uaN)V;{HrS9Y;zmCJ;j+B&qE1f zyemguWp=?!B11v?2+NH9_6t!8*ld=9LJ66xfP}5y*s#&j&}f(Vw-#48JP!_nt4BFg zybrU_U#Is#JcV oHxu+t11{@dB^?=IJ=4IW$^Y|X?0O2z4LS#$%m;qT_QEntbv z+p=|CaGT<-ouhL1%?cQTVs~Iib!!(qIL_s(hVBcDuUbG_TLnW)xg5>(?SfMWE)EK^ zklwAmSRp(MruGc+h9{f7-8VF34vR|7It;meK;WlAkj9Yl#I8bT5F|6lr=6IxV$`bR z5_cI}Z3R;P2`qRYEm%87&A;M>4&`$*BiZSQt7Ht4Hn4PA*07`Dwp78K?%}`G1C(}- zgJSNIsZz6}Hu-YILQ<@h!sm1S(-eG(V?Q(#-_yAzGa6&}7P=l?+Jfv=eSB_-0t^NFI3Lq2mO_i^X9L@mqTnDXf{~SX3 zA)7f!hdfr^knkWT?O$UUaFL|KE)0l54AE#+RS_U`*_qIabsKevaPpw4S6tz8U* zbyDniFFjJE{r>%%=f#%Z8OVHO6&0}^8ny*y&ewkYcm}vA !nG&*E?!tl<0V|!siy3ny%N6RfoDHLrb1_E6 zHGdn0B~f8dYV`HdOJny1H!C~4PWJLfe{8PLDC98##Fej_5eYr)Du56Vp~P}~xuXCk z4?@7TI*^RMImZ?%z%B0^8Bue6UcS OG8Z$ik75=O*Qlao4Pun1M (R{+)+OJuTy=j0i+1eG&Tuc{NF^@JMwGQ?yEv@d!OT2*#|m(u7MP z;FQOt6@_XAz?x7$I^^b UHP01ox+JIExN8mz;_&i{Tz`Sno0dh6d17%eoj*n=qeLbGu|>mJie+5tO7 zpuhhWWD7HH5+VCLnD5-Munv(wUJ^72BW_s?x10athefl}fU@91ASiaOsVtNg7q^pH zroJ}e34x6s33n`Vut^0h+5}`WC{)g92y`O(b#j4bEr*G1DMQ|rAQ{ib>PK|)*M)_J z5qGGc+7G=?X8TA*wD->oi5kLizfOmY0b}fAc>O)vx`uDy>oQ@8!bE}jOkw1)f+4XN zlaUd%+kDE!X p6!8T)64gfCgahvX{B&WYq)?oZ$&R;#0!}aXJf+`;LJa zOm>f-Y3_T|keL0Q_iulGr5*>k5G8>l4&K<<_{b6X@LHdkQ8@|haD*UA<*ZwP4XqM5 z$U-?CjXsCk9DvN!r_$UeAG3hK?bjXCz>k*OoB<@g=@OA(QIN;{&;4OQbw!2 QRCC!|8bB1@kspVA7-roxsLy(=m*VyG{^sy zuHE;42X_De;{$Fo^%PRqP^37RpBEfZt;v?@p^c4={Iwzf@2y7 gVV8g8%Cxkjtr3fscOw{@nvg1YRf?FGM0&k ;HK%cXCTHxtILr4M6sax!ZI^ zovOkNLcFk7J9Sufbv-Fa!ENw-R1TSG7ypKRvtgf#;AHymcLC#bF!~VXm`kW4gqCFB zavjl4em3AbJJ~FM2l h-%1+1d+L{-@(5x1+ZZ${rk0taO8*XcRz%RA_BI z&JU(WXJ`8zzry7HPqpE)cI^ T27D1oAMbCa)on2<=P$>VIhgRD@On3+IYUN}PY?C1sbD;h`!(^gj>3 zTHaA~bQmJyE1*F@`SqE}06;o6f9Jmjy$vOQ9dEX-<#SQG9G5 To_Zv68_w6Ls rJ&XxPCd{(FHzdVa448gr3r;MRMl^`n#1jESgRL z1$d$JSX)~wTy%HX**9B*mXdK?<-aZ|kj1@XC_ mVrwjWAE^=s+IAJ1}Y@+9!kz&*o}+}i2r-A$bP9RR_p6xYY-gbq+>Y! zClq9CQ+hm5NceT(b}XX?^)eMS)#*Mb)&@{vLxEc0aJmh-;PVc(4yVYz{^;Z?+5Pk& zGI3-Q$cqQ5og1RG0+Mc0jSG1RS!I)wsB^(36&JJNP>TsA;3MX%XbvsA{cm=~OAp~c z%-#gpJH$V}pWL98{W`i+d%98R* |g- zO?CO+2%`vm>R6pQa?yPZ-vzjp7Evl2@AV>lkVniw(y@QifHK*~c)E`<+MsE4LN50x zvE<{a$#2Y&wcn;Df+EyRzct>sl?20r_FNF{?I`ID UPWQIT K1tTzUB20qqc*n zV<2(RP{3O%Wpwu!mX>ybNDcOGPneOxj_yLe4G?SgPKjwA*5czKN1wP@0i+PxHheP_ zE}%-gFx0DXDLm#c*z@&07Tlo*eU;dKy@Z9}%JcfXtb2hU@e>Z6{H7vGu#S{mZ666d zQt&%!0E86u4ji6{@7cMZwSeI-DF9pcGDk_K{N#w59+7s&&XpRsP(wIKXHJwv7$6b& z(3a7 *E7(;-Oo1OUY_{2d4n)r$Q`Bplm0rk6Ats*m@_AxEG2q{5=*OX4peI& zpP|_7vdA98=#5uU2o1VCZMnP;Gdi}?79|DBFCNP;skz&}@UEeM2(fb_LE%vfp=jgN z&PMLzuRzE6?QQ}xtFqH4NMuu(rN|n|r_ZIwh0pb-OjO-9MdA kj@ Kc2$f##~)-WT`+kaDhSsv=>D$lPPK zM`nhIf0!wAn7vVPTZv93 d~GpwzO zAvy`S?tO@Qx3K+!HhG=hI{brjnh23Z2KNRx C+KKsoILKxqnk zYI*CsJ @UJhn_Da?b$JkN~<##D3+w09_AyxZH6tQsdE$ zwI@rJ#G)i z+yMSG9GgX!fRC15n2w@2?--v5wa%>_u11GmaV@IqvvN$*WQo#8zB&)SS|@ZO;QCUM z$wdtD?T=%pQhci6%(QyxFf(4z;PMk>tD6s^`flB&`g-dntfD($#e#CO3&1 )-ukFPCpPS-sGlq@&Z D?`2?@J2Kg5BQ=Xapuv%`K!aNzNufFEG#26_AodeJ#-ceNK$E^ z5V48G+50qHUy*DPH;RT5n*XBGOm65i?InF 6)$j nKfiK(lD)4kD%wrkCylmvZN;+zAkOzkx9|v#K-n9` zge*l=VWO>Bi)1&LM(@~eXiYa>t6D{)b&P(hm_r}Ixj`yGJ+LfpW@B7pKoh}oM0XEY zH16ZeE02xY=zB?(u6Sp#x5_m!%Qj#Z& zwz>33-bXH}nMZhl&01d#=qb>8Fqs$8#Hk*0I@tlce%r~`iIsI4PW8ru+f=d$9 zZ9vtv 1iwe+jev7 eas ZbQzdo_E-LPvtZnL&h?zvgkLh)jH%Rvxr zF-IM3ajQ3s^OHwK^-Snv%L7Q~j0|Ox+G;^3~n1laoOZaIgX$#P{+B*yQAD5vPC1=jjh`1XNM |D`0#R_ZB*Oo(_I08s5TPjsPBH zLCYb==V+$&bXPF^(UPvuaHa8$y~D9^(3w(dc?RPh$*F-74v+n_K}pM!s?&;st~Zi+ zyJ J#;v?A2XV=P(^hSbCX6BnJdkvD8#&u zu`B0Qja5BD?LsMeZy}M@$nzH?;MAC)Q^Q0JLf$O27IM%4*3X!mU*lyno?b>6fmEuBOO~{QR|M&%V?WuDV-d|) `X;`_$X~;ml6T<^HnQGY_ zh0}8qZ+<60`InmcQTvYW h~FXq$WA zFVM)QwI4Mu{vyG>9e1dBM1Z^92V_nVK-O($d|8Es*8q&>A& k1I}S0 z0GLDBT@$Lo=nuN9dvrJBE(* D8$9QXu1@%4V?|QPsVCR;GYpNku z`s!gEA!acCc|F6fldEnu;Z$n&<>}fDCuB;&c ej}E7 zTmc1Hf^}z3G%0EO_ap9^_VcqmHsRzT!!9LyB1SsXpctIu(_H@rbE vfv+?=s zX2v|yNXtD9KfwciakM_^QhFwQm0w)GZ`F7Iwh^xJHGd=+)z$Z*5{m2q54|&>fZxV7 zRpkI+j){xQIpNkuOudTSO}CLM)pb}r7{S?q-r(`MJYCWR&<+Mhs9LvwBF^H%(Cii3 zm}JAtyLt>HqW%0XUs ZsU3g zSK$jG+?g>?LXjd#E0;fHRmm*BR98St>0oO|rEu)HbD3D4Gw|uw>t8lwg?)crOl5 z;~1gzj1q*CD=Y7iJaI8sOUAs1F5zjp$A{9K(*Bm$^uX{a1-ChzmG!s0yzP9eM|P@D zB#l<|dn(!3`yVbG-i^JP+%WW+@s2rU{*GqUun>v#@sPmXjuhfR$Q^slNG3!eWo>9^ zX$y9tvDwftFC|~F&U;;UzJRG=UN58Bd{3HRcaqGjYew5F&vV-^1V|dCG4IC~VC`5D ze92bsyb*vwLlseO?{S$(E>Xdx iX?c-ucNS2LY2i z!4F(MyO?VV8=MB{_maamJpyn}^$&2LPl%qstE+pk_vubGmLs**6_g#H!c~uIv11*F zgD{H?3zy`eX^um!$(1zUT)A3rR H)=)UuY3yTNeyco}rFS6mJa3@hlftg~*fbkIYGdjW)iZE6kn1!~ ze>1%^Zg^Rnc-cM^XAuv9Bf #bw0|?QL*ry|2-UovEjCRKcKMq6rqkj@f}Z&F`}WL29VSO9 zb*E>_h8y{Z4w8wFZ6AH}H+_&q1OIzpMp8j($;?mwTlJp}ANqcKqc+&T!#Jsx$<~sy z^|C* 9y_Su^ z!EX_`k@Z(nO}Z_jdC# |lBPGUW5_NvcBxcuXy-c_e} zwh@dM$&~YbiTDd33)}(3Evc?wgb~gS4gt#D;EtQweu2OVkn+a|fq3C1W%V}%o>+`4 zAr&wm^tI*nnesxJg$$1f*aZSeP#4C|XIkg73^^|>D&=O-&SpLLGjr2P{kEZ7`>n#Y zVVHGPuU|mx644Rt##bIA*y}X>03A=kto)x);%FYu+M@{rt?CL5wwllA6`f|Es08XT zsu%w1tnRg~;jYKh?Ou0rV(a~~^$2Yd)uZ 9iJ2 z9xEkdTKaX+OzC`^bkmLvzgtvUJc$W~^6*s!qM~gqQkf+}@iPruLQ187r$(k@18h_^ z9u=9gOQu)y&L|0~0!^+>e49|z9NgEeAK;H?>s`d>#3Av;Ns55viWEv8JU2dc4xFsl z2|*!p Swh1!QN3{` zYh}tT2QS&Xl-e9rc-2q%)n*n+DJ72G$oX$=tacoJsy|M~N|r5blr~Ea@+_c9D&^=p zn#kJJS=UlME- __2*`KZTvB^Stsw3yuZdL%6`G>+!Qz z9~Bc7^wh@k=LTb@aTcFrc}VK;j2PJ*EJqi4o003@pv3Mej-BcLf&Dw+O`p+LqFG}6 z13gF?L_>j{M-~K?8vjPZ5Jr%Zk&zUP^u7y#Jp705s;eVwGr5Tuj1GUnzX0@&aM(aI zesM%XFST@abBc>^ym|8mu_r)4#1#}mi39qsanT6RH(JT^`9BPF;&j@A;zg5VDIG;W zU6$it*Ii-{bS7+^PTYo@HC=xvgmElV-O^k&L{rfes3BM}QLa&8=Jrfn?fvm)G8YpE z+G&0!o=3FtxP@4iRRp3MYWZ0eoPWI&+2*q1$N2DlA{lQF9vfqFvk{m4oqlC|h A zhtcmn+#(52`*U%O8YDxw2b8M =`xCfC;t57_2A;9oM>X%nRIfbkqsAV8)q?IG~zEL5&%tJ &^nphy>d7DygxAa6jVan6+Q=>c2T&2ap^jl{MRW51&i zVR5p?FQ@`*C;GRhzsXiY
*qv!r;o>Z# T}aJ*+#V$v6vmtfJyF(FbQ$ySk9 zyXUyg%-F|?af`k8UG|_|9l?EtE=+~I{zHZ*p So0HP_ zB8^^{<^Aa1If`DV`c&xgxGF6>U%Mwb{Hn?p%U<2QGa30#%DQS}FDT%i=T(o==1em~ z!y3GTr^SUc6rF1s{d=|nhjC{j1*!sjNsp3)$b<1)n4ZSmsT3J+&|e#{W?*aFqeLet z>nQmsi;fyXmn)~S3hW~3T;wQPr65|?Rtwh*Gg!XcOL_qc_6Z3xzXsoX%Uh1&BbK9R zXBP#0jcOybb$U4(8jn4Ll^oh;I4SSX-!Zc}*CG_Z`MGQ{vZDvHv{5?f4lY@mHlH+; zu3yI!td!%+-6ah|!IGbUH2(dpQCw{eCRjo3HtXnWO@1VByM8sjRzQS^Gq;}ib+e>~ z>mcpZgoTt(u{ A#2eKV(w)vv%eO| z=ZaU<+iK=l{8qr-ujAq!D$^i8ROdj%Vvnr|GK`al;>HNS0fdrtsTQ`atU@VIJEzcR z(&iKKS`Ofu5@x@HgA>b`@S27pLaCSj($cIJjyxNGlB}RKzKj1c-m}Q loLTvOAovE+P&-XWMotD6%DDOv5A&Z?L?q>T onjr}7$jUXaSCaf?87mm=8^LiBq*IK&0i9+dr?B|<>_Wj z-`F;Cba&=J;edcli#0AepYvgvEc(qGv%Xn(&~>(6mGwNcw87lHL&aZrk24T6Fh2_$ zSA~ 95^@4S)TG?YIv=$ZU?Q8j;CaG5Qy z{l|oX%+ri8>6#&t@mP`@@%bfqyZfke!{;{z=69JIWCQe~p;OhYMSUJK`Cy0X*vZS8 zV70ENLB2c$GAodcBN5lgAu8ZHe*h#aTM8{}sx}b2%(jbw0(hfI?Y(?si=U!Y#6742 z49zLSD;sB~7!j2A`xt_{;)+=UT#aPIdW$`3Y#uAtuWIJ_=0#_2PdJg~E+gU7N=1-o zq0Po#;^QV3^;=p VOnq%o-0~5|IryCo4)K;#mV+ncc%&$Vt_Sl3& zxobRSH~kf^`$pls$S9M(bV>P3`;ZSkxw5V7+`cSugSWV^d6jf8>O3N>mK(4vp6nNe zi;p+^mT{caHRs|Cv+1^)I)=iGDJn0Vy_>{WW>Z7W7C9&N^65T_-G3+8ySG28GlXUY zMPjbDx&P~*7>xG*0UvxKpZ@qk4p>^3d4Cnd8%(l;n-smZ$Nt6s$FN0D+7!MX&Mez` zd56&x)!M_WcU7YHS8)eLdK&cA;dmZ_mMXdIPy8zueqi*0k8DGrw 8p?^`5 z6bFfkhp26;{{H^xl$3CwoAGrGoH4-TSAHxG98>n&E|NgO-j&?4f4>|Q#&~<->ErG_ zpggNB{@}}!&^EXHo4%DdH9F poe!$BPQ=deByEg zIs8=9hbv07h_l*r1(#1b1DBDJ+>7!)P>r|PjCXsLjt>q52E|HRHV&`H48$)ccfOf? zHlXdq!LR4EFtTJdn=$)q0$XuzZ}8n~(#7hyt&S#ct^d*jeB$1*54kZYSa)9d>C~y% z|1@9G?j-<(BshMP>3Y^sUd#j>9K1Mla8jMI?>c!X*;7&69VYtlul7Xuqfnec4pzYx zW0JJDVnjc!a9WG?_gzqzoHp|7f5v`XUoO@**L$^nEp@4d!cT4a_&{d=b(rCh%6w&( zf-~+DSj_3FDNIk@zRs)A$pjc@#D8S<@h#ah`si_`ShD3nrKR|dg`fa~fF7&PrXUqr zqfew96@>$zh?D;C`cfKD;NQs_(`m6H(H3q~UdjS666+Q%$!*)gzKU6N(%dCt=CWF# zZytc6#6HjOZl-<;U=dV>5e||nJChf~%#Xs*8(~)pSfW`HuKo1s8*E-`O_ELMjmXP~ z%=AEzu)zt1BqRn-uZvGfh=`CehT4NdLt;aqoAi_2%oUUn7)1VBS0D$>wL_8N4*bZ& z)kY(3pNoH%X8?b{gYzR0T7T{P_v?#GD^AOy%;|okR&VQlV6Y &DAku` zZJOr<{YKYSYjrv(%%;cITi58C%xYnzsAcomMoN2#G_Fh+k9gu?^fVh!T)*mZR8t?T z!R-#a888mi|N4@7j=EnnwY|-wHD#&sbaGfKD?Tdv%g{XiO`Qthw?N}1lPS(tc0rVL z?^aNTY46liKc+-AfmJ5cjVq04kt-A44>%g1fpQs3*}+TuR?E$iNQ;6EKf|=IQFIHM ze;RJ5@LC>VjBZ?C?&R7~eJac(9!+AqxMBhNvLdt~B22~ED~*5 dX4?5>MPW?;6nznu>93%f!)1(x-7Vl4|-e9a}UX4|`a~X ^{iB;ExP-zaDMeguSL@O{ypwnN^3!BtzeIVJ{8bOr<^m!C zZVV66koZKa-sd0;#P|INdZXZp;t!d^H~XWTR)Q#wFE9TVNXji3si~oo*vF-NFn!~S znwzP?FhU7>AVf6?PPJ8F_1nR!=k!%s@ITfqI&zMmLU^F-3mUbO1(U!|!>&XlXdEH2 zSOPRWH&85`oLvAhV&y-rr-mK;DYTS^#8Lg2E^fc#E%&H>o32m>$UQY7jh5V>%E5Ci zVQ!^qEHSi-Fg@X5BL4K?DQ7F6ElYr|{1bM7U2sU;{WJ~v?yJ~w4#^s&n8jP7{F+L+ zlnfrn#-F$Y_qZrA&f(dR$cH ^u2>6mSsZ}@idU~_mG+$HJmNl0!mrk|fRL=l}jMro@Zp*{NC zx`;qPa%xsi%oj&Lv6Mx9dZtcDuxsw<(g+Ue|Z*iytpk7|Wet@A% zZvWjt??kEOps2`Cg+{b$AI#olm|BGi=POUj*hXB(JHC0I#~*M6vX$`uJ45^k#%W!U z76b|ekUc*GSOPi3b-!Wh9Ivjfz0wILJV?|)z>zY%NClp*vbrDS7l#m{^9@G9&s|qA zD=}R5QT_o%06GeJ(+C#KHgE_ErViM!_Ti;I1AQG2DUQ&=xMt2y3kXdBdAovw4rQTm zZWq+_sUU#!0Fj`&zJ3^J|DFL5BJZn$kdBl!9z2BsZ$AxSco0o3M+i^b?_V7$sNUO( z*K &AwBu!r4sAW@ps(I6A_iCEw1F_kVGcRdWe*jTOiKR?b*FnI(Up z=BS-7RIoMZ9$wgVn(r}1|4RIT;=cLbMc6@(x4GU%s7zSyiA7X&%dUMi4&@tS{mmQ? zUmfF{f@NiDjZKN3Z)+k~cOO@a`u&Hp%#j!n(%Jg AY^F%t%o*F_$+o>)+YWxV zWph
2jV#jR_3k5_@GnBW`1R^R?r^ jV`5{aBELuB14_p|Z^kx{Wbq`*i>g;gUB4*`hY4r$1&~}bCsx%?&LU?L zC|t(nBi)*{?6 S0-Ns (1X=eSf2RBoP!MbwJ5lF@LEyB1e$82SQ4Z$QQ#YUr2 z1F!((ol--dWZ>}6`*36fa!@-^VJlI-XY|PFnxK64Ulro#=SLzT^(voXq<&eIyaV#~ z>3TPI;~f)lY 9Z^7EXkDopvLVVQTasd8~M74KtNR`CJu_>q^!H!PP z<_CZ_9A=4$dIz$8gFO-yf=do?HQ+#MY8xbzf_3y7od_%6D*_`SHVP*kJ?6O4v3#EO zTd!p1zwNIMF0qJ`#gq&cKEyN$VE3eXrEdV6rRP+oxS31G`fo+NJ3J`!9u*tK57ap8 zY)wIaYA=I$0y={C(Z{jOJFg{JjrgNYzwab3m1244yUqRGW4k?$*K)8mP*EFTy8R-h z$#?H@jG(Jjwq