1 Differential Expression version: 20180410

2 L. major differential expression

3 Filter the raw data

mm_data <- subset_expt(mm_expt, subset="hostp=='yes'")
## There were 24, now there are 16 samples.
mm_filt <- normalize_expt(mm_data, transform="round", filter=TRUE)
## This function will replace the expt$expressionset slot with:
## round(hpgl(data))
## It backs up the current data into a slot named:
##  expt$backup_expressionset. It will also save copies of each step along the way
##  in expt$normalized with the corresponding libsizes. Keep the libsizes in mind
##  when invoking limma.  The appropriate libsize is the non-log(cpm(normalized)).
##  This is most likely kept at:
##  'new_expt$normalized$intermediate_counts$normalization$libsizes'
##  A copy of this may also be found at:
##  new_expt$best_libsize
## Leaving the data unconverted.  It is often advisable to cpm/rpkm
##  the data to normalize for sampling differences, keep in mind though that rpkm
##  has some annoying biases, and voom() by default does a cpm (though hpgl_voom()
##  will try to detect this).
## Leaving the data unnormalized.  This is necessary for DESeq, but
##  EdgeR/limma might benefit from normalization.  Good choices include quantile,
##  size-factor, tmm, etc.
## Not correcting the count-data for batch effects.  If batch is
##  included in EdgerR/limma's model, then this is probably wise; but in extreme
##  batch effects this is a good parameter to play with.
## Step 1: performing count filter with option: hpgl
## Removing 35767 low-count genes (20053 remaining).
## Step 2: not normalizing the data.
## Step 3: not converting the data.
## Step 4: transforming the data with round.
## Step 5: not doing batch correction.
mm_pairwise <- all_pairwise(input=mm_filt, model_batch="svaseq")
## The be method chose 3 surrogate variable(s).
## Attempting svaseq estimation with 3 surrogates.
## Using svaseq to visualize before/after batch inclusion.
## Performing a test normalization with: raw
## Finished running DE analyses, collecting outputs.
## Comparing analyses 1/6: pmn12huninf_vs_pmn12hinf
## Comparing analyses 2/6: pmn14dinf_vs_pmn12hinf
## Comparing analyses 3/6: pmn14duninf_vs_pmn12hinf
## Comparing analyses 4/6: pmn14dinf_vs_pmn12huninf
## Comparing analyses 5/6: pmn14duninf_vs_pmn12huninf
## Comparing analyses 6/6: pmn14duninf_vs_pmn14dinf

keepers <- list(
    "12hr_infuninf" = c("pmn12hinf", "pmn12huninf"),
    "14d_infuninf" = c("pmn14dinf", "pmn14duninf"),
    "inf_14d12hr" = c("pmn14dinf", "pmn12hinf"),
    "uninf_14d12hr" = c("pmn14duninf", "pmn12huninf"))
mm_combined <- combine_de_tables(mm_pairwise,
                                 keepers=keepers,
                                 excel=paste0("excel/mm_pairwise-v", ver, ".xlsx"))
## Deleting the file excel/mm_pairwise-v20180410.xlsx before writing the tables.
## Writing a legend of columns.
## Printing a pca plot before/after surrogates/batch estimation.
## Working on 1/4: 12hr_infuninf
## Found inverse table with pmn12huninf_vs_pmn12hinf
## Working on 2/4: 14d_infuninf
## Found inverse table with pmn14duninf_vs_pmn14dinf
## Working on 3/4: inf_14d12hr
## Found table with pmn14dinf_vs_pmn12hinf
## Working on 4/4: uninf_14d12hr
## Found table with pmn14duninf_vs_pmn12huninf
## Adding venn plots for pmn12hinf_vs_pmn12huninf.
## Limma expression coefficients for pmn12hinf_vs_pmn12huninf; R^2: 0.828; equation: y = 0.857x + 0.37
## Edger expression coefficients for pmn12hinf_vs_pmn12huninf; R^2: 0.771; equation: y = 0.876x + 1.21
## DESeq2 expression coefficients for pmn12hinf_vs_pmn12huninf; R^2: 0.781; equation: y = 0.874x + 0.42
## Adding venn plots for pmn14dinf_vs_pmn14duninf.
## Limma expression coefficients for pmn14dinf_vs_pmn14duninf; R^2: 0.89; equation: y = 0.995x - 0.107
## Edger expression coefficients for pmn14dinf_vs_pmn14duninf; R^2: 0.849; equation: y = 0.871x + 1.55
## DESeq2 expression coefficients for pmn14dinf_vs_pmn14duninf; R^2: 0.851; equation: y = 0.897x + 1.11
## Adding venn plots for pmn14dinf_vs_pmn12hinf.
## Limma expression coefficients for pmn14dinf_vs_pmn12hinf; R^2: 0.656; equation: y = 0.907x - 0.086
## Edger expression coefficients for pmn14dinf_vs_pmn12hinf; R^2: 0.561; equation: y = 0.618x + 5.07
## DESeq2 expression coefficients for pmn14dinf_vs_pmn12hinf; R^2: 0.549; equation: y = 0.642x + 3.01
## Adding venn plots for pmn14duninf_vs_pmn12huninf.
## Limma expression coefficients for pmn14duninf_vs_pmn12huninf; R^2: 0.732; equation: y = 0.838x + 0.338
## Edger expression coefficients for pmn14duninf_vs_pmn12huninf; R^2: 0.718; equation: y = 0.736x + 3.1
## DESeq2 expression coefficients for pmn14duninf_vs_pmn12huninf; R^2: 0.695; equation: y = 0.729x + 1.88
## Writing summary information.
## Attempting to add the comparison plot to pairwise_summary at row: 22 and column: 1
## 
  |                                                                                      
  |                                                                                |   0%
  |                                                                                      
  |====================                                                            |  25%
  |                                                                                      
  |========================================                                        |  50%
  |                                                                                      
  |============================================================                    |  75%
  |                                                                                      
  |================================================================================| 100%
## Performing save of the workbook.
mm_sig <- extract_significant_genes(mm_combined,
                                    excel=paste0("excel/mm_sig-v", ver, ".xlsx"))
## Writing a legend of columns.
## Writing excel data for pmn12hinf_vs_pmn12huninf: 1/16.
## After (adj)p filter, the up genes table has 269 genes.
## After (adj)p filter, the down genes table has 138 genes.
## After fold change filter, the up genes table has 222 genes.
## After fold change filter, the down genes table has 122 genes.
## Writing excel data for pmn14dinf_vs_pmn14duninf: 2/16.
## After (adj)p filter, the up genes table has 0 genes.
## After (adj)p filter, the down genes table has 0 genes.
## After fold change filter, the up genes table has 0 genes.
## After fold change filter, the down genes table has 0 genes.
## Writing excel data for pmn14dinf_vs_pmn12hinf: 3/16.
## After (adj)p filter, the up genes table has 1586 genes.
## After (adj)p filter, the down genes table has 1951 genes.
## After fold change filter, the up genes table has 1534 genes.
## After fold change filter, the down genes table has 1829 genes.
## Writing excel data for pmn14duninf_vs_pmn12huninf: 4/16.
## After (adj)p filter, the up genes table has 911 genes.
## After (adj)p filter, the down genes table has 1012 genes.
## After fold change filter, the up genes table has 855 genes.
## After fold change filter, the down genes table has 918 genes.
## Printing significant genes to the file: excel/mm_sig-v20180410.xlsx
## 1/4: Creating significant table up_1limma_pmn12hinf_vs_pmn12huninf
## The sheet name was too long for Excel, truncating it by removing vowels.
## The sheet name was too long for Excel, truncating it by removing vowels.
## 2/4: Creating significant table up_2limma_pmn14dinf_vs_pmn14duninf
## The sheet name was too long for Excel, truncating it by removing vowels.
## The sheet name was too long for Excel, truncating it by removing vowels.
## 3/4: Creating significant table up_3limma_pmn14dinf_vs_pmn12hinf
## The sheet name was too long for Excel, truncating it by removing vowels.
## The sheet name was too long for Excel, truncating it by removing vowels.
## 4/4: Creating significant table up_4limma_pmn14duninf_vs_pmn12huninf
## The sheet name was too long for Excel, truncating it by removing vowels.
## The sheet name was too long for Excel, truncating it by removing vowels.
## Writing excel data for pmn12hinf_vs_pmn12huninf: 5/16.
## After (adj)p filter, the up genes table has 251 genes.
## After (adj)p filter, the down genes table has 463 genes.
## After fold change filter, the up genes table has 240 genes.
## After fold change filter, the down genes table has 447 genes.
## Writing excel data for pmn14dinf_vs_pmn14duninf: 6/16.
## After (adj)p filter, the up genes table has 27 genes.
## After (adj)p filter, the down genes table has 15 genes.
## After fold change filter, the up genes table has 27 genes.
## After fold change filter, the down genes table has 15 genes.
## Writing excel data for pmn14dinf_vs_pmn12hinf: 7/16.
## After (adj)p filter, the up genes table has 2242 genes.
## After (adj)p filter, the down genes table has 1123 genes.
## After fold change filter, the up genes table has 2222 genes.
## After fold change filter, the down genes table has 1063 genes.
## Writing excel data for pmn14duninf_vs_pmn12huninf: 8/16.
## After (adj)p filter, the up genes table has 530 genes.
## After (adj)p filter, the down genes table has 688 genes.
## After fold change filter, the up genes table has 527 genes.
## After fold change filter, the down genes table has 652 genes.
## Printing significant genes to the file: excel/mm_sig-v20180410.xlsx
## 1/4: Creating significant table up_1edger_pmn12hinf_vs_pmn12huninf
## The sheet name was too long for Excel, truncating it by removing vowels.
## The sheet name was too long for Excel, truncating it by removing vowels.
## 2/4: Creating significant table up_2edger_pmn14dinf_vs_pmn14duninf
## The sheet name was too long for Excel, truncating it by removing vowels.
## The sheet name was too long for Excel, truncating it by removing vowels.
## 3/4: Creating significant table up_3edger_pmn14dinf_vs_pmn12hinf
## The sheet name was too long for Excel, truncating it by removing vowels.
## The sheet name was too long for Excel, truncating it by removing vowels.
## 4/4: Creating significant table up_4edger_pmn14duninf_vs_pmn12huninf
## The sheet name was too long for Excel, truncating it by removing vowels.
## The sheet name was too long for Excel, truncating it by removing vowels.
## Writing excel data for pmn12hinf_vs_pmn12huninf: 9/16.
## After (adj)p filter, the up genes table has 557 genes.
## After (adj)p filter, the down genes table has 972 genes.
## After fold change filter, the up genes table has 427 genes.
## After fold change filter, the down genes table has 825 genes.
## Writing excel data for pmn14dinf_vs_pmn14duninf: 10/16.
## After (adj)p filter, the up genes table has 168 genes.
## After (adj)p filter, the down genes table has 165 genes.
## After fold change filter, the up genes table has 151 genes.
## After fold change filter, the down genes table has 150 genes.
## Writing excel data for pmn14dinf_vs_pmn12hinf: 11/16.
## After (adj)p filter, the up genes table has 4132 genes.
## After (adj)p filter, the down genes table has 1275 genes.
## After fold change filter, the up genes table has 3962 genes.
## After fold change filter, the down genes table has 1083 genes.
## Writing excel data for pmn14duninf_vs_pmn12huninf: 12/16.
## After (adj)p filter, the up genes table has 1222 genes.
## After (adj)p filter, the down genes table has 825 genes.
## After fold change filter, the up genes table has 1132 genes.
## After fold change filter, the down genes table has 682 genes.
## Printing significant genes to the file: excel/mm_sig-v20180410.xlsx
## 1/4: Creating significant table up_1deseq_pmn12hinf_vs_pmn12huninf
## The sheet name was too long for Excel, truncating it by removing vowels.
## The sheet name was too long for Excel, truncating it by removing vowels.
## 2/4: Creating significant table up_2deseq_pmn14dinf_vs_pmn14duninf
## The sheet name was too long for Excel, truncating it by removing vowels.
## The sheet name was too long for Excel, truncating it by removing vowels.
## 3/4: Creating significant table up_3deseq_pmn14dinf_vs_pmn12hinf
## The sheet name was too long for Excel, truncating it by removing vowels.
## The sheet name was too long for Excel, truncating it by removing vowels.
## 4/4: Creating significant table up_4deseq_pmn14duninf_vs_pmn12huninf
## The sheet name was too long for Excel, truncating it by removing vowels.
## The sheet name was too long for Excel, truncating it by removing vowels.
## Writing excel data for pmn12hinf_vs_pmn12huninf: 13/16.
## After (adj)p filter, the up genes table has 1 genes.
## After (adj)p filter, the down genes table has 0 genes.
## After fold change filter, the up genes table has 1 genes.
## After fold change filter, the down genes table has 0 genes.
## Writing excel data for pmn14dinf_vs_pmn14duninf: 14/16.
## After (adj)p filter, the up genes table has 0 genes.
## After (adj)p filter, the down genes table has 0 genes.
## After fold change filter, the up genes table has 0 genes.
## After fold change filter, the down genes table has 0 genes.
## Writing excel data for pmn14dinf_vs_pmn12hinf: 15/16.
## After (adj)p filter, the up genes table has 329 genes.
## After (adj)p filter, the down genes table has 434 genes.
## After fold change filter, the up genes table has 319 genes.
## After fold change filter, the down genes table has 416 genes.
## Writing excel data for pmn14duninf_vs_pmn12huninf: 16/16.
## After (adj)p filter, the up genes table has 57 genes.
## After (adj)p filter, the down genes table has 44 genes.
## After fold change filter, the up genes table has 54 genes.
## After fold change filter, the down genes table has 35 genes.
## Printing significant genes to the file: excel/mm_sig-v20180410.xlsx
## 1/4: Creating significant table up_1basic_pmn12hinf_vs_pmn12huninf
## The sheet name was too long for Excel, truncating it by removing vowels.
## The sheet name was too long for Excel, truncating it by removing vowels.
## 2/4: Creating significant table up_2basic_pmn14dinf_vs_pmn14duninf
## The sheet name was too long for Excel, truncating it by removing vowels.
## The sheet name was too long for Excel, truncating it by removing vowels.
## 3/4: Creating significant table up_3basic_pmn14dinf_vs_pmn12hinf
## The sheet name was too long for Excel, truncating it by removing vowels.
## The sheet name was too long for Excel, truncating it by removing vowels.
## 4/4: Creating significant table up_4basic_pmn14duninf_vs_pmn12huninf
## The sheet name was too long for Excel, truncating it by removing vowels.
## The sheet name was too long for Excel, truncating it by removing vowels.
## Adding significance bar plots.

pander::pander(sessionInfo())

R version 3.4.4 (2018-03-15)

**Platform:** x86_64-pc-linux-gnu (64-bit)

locale: LC_CTYPE=en_US.utf8, LC_NUMERIC=C, LC_TIME=en_US.utf8, LC_COLLATE=en_US.utf8, LC_MONETARY=en_US.utf8, LC_MESSAGES=en_US.utf8, LC_PAPER=en_US.utf8, LC_NAME=C, LC_ADDRESS=C, LC_TELEPHONE=C, LC_MEASUREMENT=en_US.utf8 and LC_IDENTIFICATION=C

attached base packages: stats, graphics, grDevices, utils, datasets, methods and base

other attached packages: hpgltools(v.2018.03), foreach(v.1.4.4), Vennerable(v.3.1.0.9000) and ruv(v.0.9.7)

loaded via a namespace (and not attached): minqa(v.1.2.4), colorspace(v.1.3-2), colorRamps(v.2.3), rprojroot(v.1.3-2), htmlTable(v.1.11.2), corpcor(v.1.6.9), XVector(v.0.18.0), GenomicRanges(v.1.30.3), base64enc(v.0.1-3), rstudioapi(v.0.7), roxygen2(v.6.0.1), ggrepel(v.0.7.0), bit64(v.0.9-7), AnnotationDbi(v.1.40.0), xml2(v.1.2.0), codetools(v.0.2-15), splines(v.3.4.4), doParallel(v.1.0.11), robustbase(v.0.92-8), geneplotter(v.1.56.0), knitr(v.1.20), Formula(v.1.2-2), nloptr(v.1.0.4), pbkrtest(v.0.4-7), annotate(v.1.56.1), cluster(v.2.0.6), graph(v.1.56.0), compiler(v.3.4.4), backports(v.1.1.2), Matrix(v.1.2-12), lazyeval(v.0.2.1), limma(v.3.34.9), acepack(v.1.4.1), htmltools(v.0.3.6), tools(v.3.4.4), gtable(v.0.2.0), GenomeInfoDbData(v.1.0.0), reshape2(v.1.4.3), Rcpp(v.0.12.16), Biobase(v.2.38.0), gdata(v.2.18.0), preprocessCore(v.1.40.0), nlme(v.3.1-131.1), iterators(v.1.0.9), stringr(v.1.3.0), openxlsx(v.4.0.17), lme4(v.1.1-15), gtools(v.3.5.0), devtools(v.1.13.5), XML(v.3.98-1.10), edgeR(v.3.20.9), DEoptimR(v.1.0-8), directlabels(v.2017.03.31), zlibbioc(v.1.24.0), MASS(v.7.3-49), scales(v.0.5.0.9000), doSNOW(v.1.0.16), parallel(v.3.4.4), SummarizedExperiment(v.1.8.1), RBGL(v.1.54.0), RColorBrewer(v.1.1-2), yaml(v.2.1.18), memoise(v.1.1.0), gridExtra(v.2.3), pander(v.0.6.1), ggplot2(v.2.2.1), rpart(v.4.1-13), latticeExtra(v.0.6-28), stringi(v.1.1.7), RSQLite(v.2.0), genefilter(v.1.60.0), S4Vectors(v.0.16.0), checkmate(v.1.8.5), caTools(v.1.17.1), BiocGenerics(v.0.24.0), BiocParallel(v.1.12.0), GenomeInfoDb(v.1.14.0), rlang(v.0.2.0.9001), commonmark(v.1.4), matrixStats(v.0.53.1), bitops(v.1.0-6), evaluate(v.0.10.1), lattice(v.0.20-35), htmlwidgets(v.1.0), labeling(v.0.3), bit(v.1.1-12), plyr(v.1.8.4), magrittr(v.1.5), variancePartition(v.1.8.1), DESeq2(v.1.18.1), R6(v.2.2.2), IRanges(v.2.12.0), snow(v.0.4-2), gplots(v.3.0.1), Hmisc(v.4.1-1), DelayedArray(v.0.4.1), DBI(v.0.8), pillar(v.1.2.1), foreign(v.0.8-69), withr(v.2.1.2), mgcv(v.1.8-23), survival(v.2.41-3), RCurl(v.1.95-4.10), nnet(v.7.3-12), tibble(v.1.4.2), KernSmooth(v.2.23-15), rmarkdown(v.1.9), locfit(v.1.5-9.1), grid(v.3.4.4), sva(v.3.26.0), data.table(v.1.10.4-3), blob(v.1.1.0), digest(v.0.6.15), xtable(v.1.8-2), stats4(v.3.4.4), munsell(v.0.4.3) and quadprog(v.1.5-5)

this_save <- paste0(gsub(pattern="\\.Rmd", replace="", x=rmd_file), "-v", ver, ".rda.xz")
message(paste0("Saving to ", this_save))
## Saving to 03_differential_expression_mmusculus_201804-v20180410.rda.xz
tt <- sm(saveme(filename=this_save))
LS0tCnRpdGxlOiAiTC4gbWFqb3IgMjAxNzogZGlmZmVyZW50aWFsIGV4cHJlc3Npb24gb2YgTXVzIHNhbXBsZXMgKDIwMTgwMykuIgphdXRob3I6ICJhdGIgYWJlbGV3QGdtYWlsLmNvbSIKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6CiBodG1sX2RvY3VtZW50OgogIGNvZGVfZG93bmxvYWQ6IHRydWUKICBjb2RlX2ZvbGRpbmc6IHNob3cKICBmaWdfY2FwdGlvbjogdHJ1ZQogIGZpZ19oZWlnaHQ6IDcKICBmaWdfd2lkdGg6IDcKICBoaWdobGlnaHQ6IGRlZmF1bHQKICBrZWVwX21kOiBmYWxzZQogIG1vZGU6IHNlbGZjb250YWluZWQKICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQogIHRoZW1lOiByZWFkYWJsZQogIHRvYzogdHJ1ZQogIHRvY19mbG9hdDoKICAgIGNvbGxhcHNlZDogZmFsc2UKICAgIHNtb290aF9zY3JvbGw6IGZhbHNlCi0tLQoKPHN0eWxlPgogIGJvZHkgLm1haW4tY29udGFpbmVyIHsKICAgIG1heC13aWR0aDogMTYwMHB4OwogIH0KPC9zdHlsZT4KCmBgYHtyIG9wdGlvbnMsIGluY2x1ZGU9RkFMU0V9CmlmICghaXNUUlVFKGdldDAoInNraXBfbG9hZCIpKSkgewogIGxpYnJhcnkoaHBnbHRvb2xzKQogIHR0IDwtIGRldnRvb2xzOjpsb2FkX2FsbCgifi9ocGdsdG9vbHMiKQogIGtuaXRyOjpvcHRzX2tuaXQkc2V0KHByb2dyZXNzPVRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZT1UUlVFLAogICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPTkwLAogICAgICAgICAgICAgICAgICAgICAgIGVjaG89VFJVRSkKICBrbml0cjo6b3B0c19jaHVuayRzZXQoZXJyb3I9VFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgZmlnLndpZHRoPTgsCiAgICAgICAgICAgICAgICAgICAgICAgIGZpZy5oZWlnaHQ9OCwKICAgICAgICAgICAgICAgICAgICAgICAgZHBpPTk2KQogIG9sZF9vcHRpb25zIDwtIG9wdGlvbnMoZGlnaXRzPTQsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgICAga25pdHIuZHVwbGljYXRlLmxhYmVsPSJhbGxvdyIpCiAgZ2dwbG90Mjo6dGhlbWVfc2V0KGdncGxvdDI6OnRoZW1lX2J3KGJhc2Vfc2l6ZT0xMCkpCiAgdmVyIDwtICIyMDE4MDQxMCIKICBwcmV2aW91c19maWxlIDwtICIwMl9zYW1wbGVfZXN0aW1hdGlvbl9tbXVzY3VsdXNfMjAxODA0LlJtZCIKCiAgdG1wIDwtIHRyeShzbShsb2FkbWUoZmlsZW5hbWU9cGFzdGUwKGdzdWIocGF0dGVybj0iXFwuUm1kIiwgcmVwbGFjZT0iIiwgeD1wcmV2aW91c19maWxlKSwgIi12IiwgdmVyLCAiLnJkYS54eiIpKSkpCiAgcm1kX2ZpbGUgPC0gIjAzX2RpZmZlcmVudGlhbF9leHByZXNzaW9uX21tdXNjdWx1c18yMDE4MDQuUm1kIgp9CmBgYAoKIyBEaWZmZXJlbnRpYWwgRXhwcmVzc2lvbiB2ZXJzaW9uOiBgciB2ZXJgCgpMLiBtYWpvciBkaWZmZXJlbnRpYWwgZXhwcmVzc2lvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKIyBGaWx0ZXIgdGhlIHJhdyBkYXRhCgpgYGB7ciBkZV9mdW59Cm1tX2RhdGEgPC0gc3Vic2V0X2V4cHQobW1fZXhwdCwgc3Vic2V0PSJob3N0cD09J3llcyciKQptbV9maWx0IDwtIG5vcm1hbGl6ZV9leHB0KG1tX2RhdGEsIHRyYW5zZm9ybT0icm91bmQiLCBmaWx0ZXI9VFJVRSkKCm1tX3BhaXJ3aXNlIDwtIGFsbF9wYWlyd2lzZShpbnB1dD1tbV9maWx0LCBtb2RlbF9iYXRjaD0ic3Zhc2VxIikKa2VlcGVycyA8LSBsaXN0KAogICAgIjEyaHJfaW5mdW5pbmYiID0gYygicG1uMTJoaW5mIiwgInBtbjEyaHVuaW5mIiksCiAgICAiMTRkX2luZnVuaW5mIiA9IGMoInBtbjE0ZGluZiIsICJwbW4xNGR1bmluZiIpLAogICAgImluZl8xNGQxMmhyIiA9IGMoInBtbjE0ZGluZiIsICJwbW4xMmhpbmYiKSwKICAgICJ1bmluZl8xNGQxMmhyIiA9IGMoInBtbjE0ZHVuaW5mIiwgInBtbjEyaHVuaW5mIikpCm1tX2NvbWJpbmVkIDwtIGNvbWJpbmVfZGVfdGFibGVzKG1tX3BhaXJ3aXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZWVwZXJzPWtlZXBlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VsPXBhc3RlMCgiZXhjZWwvbW1fcGFpcndpc2UtdiIsIHZlciwgIi54bHN4IikpCm1tX3NpZyA8LSBleHRyYWN0X3NpZ25pZmljYW50X2dlbmVzKG1tX2NvbWJpbmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlbD1wYXN0ZTAoImV4Y2VsL21tX3NpZy12IiwgdmVyLCAiLnhsc3giKSkKYGBgCgpgYGB7ciBzYXZlbWV9CnBhbmRlcjo6cGFuZGVyKHNlc3Npb25JbmZvKCkpCnRoaXNfc2F2ZSA8LSBwYXN0ZTAoZ3N1YihwYXR0ZXJuPSJcXC5SbWQiLCByZXBsYWNlPSIiLCB4PXJtZF9maWxlKSwgIi12IiwgdmVyLCAiLnJkYS54eiIpCm1lc3NhZ2UocGFzdGUwKCJTYXZpbmcgdG8gIiwgdGhpc19zYXZlKSkKdHQgPC0gc20oc2F2ZW1lKGZpbGVuYW1lPXRoaXNfc2F2ZSkpCmBgYAo=