Low and high cell number simulated from a E17.5 neural cortex dataset (Drop-seq) and hippocampus P0 dataset (10X)
dodge= position_dodge(width = 0.7)
lambda =ggplot(lambda.tot.plot,aes(x=cells, y=log(lambda_est)-log(lambda_real), fill=group)) +
facet_grid(method ~ ., scales = "free")+
ylim(-0.75,0.75)+
geom_violin(color="black", position = dodge)+
facet_wrap(method ~ cells, scales = "free")+
coord_flip()+
scale_fill_manual(values = mycolours)+
xlab(TeX(" $log \\tilde{\\lambda} - log \\lambda $ "))+ geom_boxplot(width=0.2, outlier.colour=NA, position = dodge)+
theme(axis.text.x = element_text(size = si, angle = 0, hjust = .5, vjust = .5, face = "plain", colour ="#3C5488FF" ),
axis.text.y = element_text( size = si, angle = 0, hjust = 1, vjust = .0, face = "plain", colour ="#3C5488FF"),
axis.title.x = element_text( size = si, angle = 0, hjust = .5, vjust = 0, face = "plain", colour ="#3C5488FF"),
axis.title.y = element_text( size = si, angle = 0, hjust = .5, vjust = .5, face = "plain", colour ="#3C5488FF"),
legend.title = element_blank(),
strip.background = element_rect(fill="#8491B44C"),
strip.text.x = element_text(size = 12,colour = "#3C5488FF",face = "plain"),
strip.text.y = element_text(size = 12,colour = "#3C5488FF",face = "plain"),
axis.title.y.left = element_blank(),
#legend.key.height = unit(5, "mm"),
legend.text = element_text(color = "#3C5488FF",face ="italic" ),
legend.position = "right")
lambda
Percentage of a < 0 :
R version 4.0.4 (2021-02-15)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.5 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/openblas/libblas.so.3
LAPACK: /usr/lib/x86_64-linux-gnu/libopenblasp-r0.2.20.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] ggplot2_3.3.3 data.table_1.13.6 latex2exp_0.4.0 matrixStats_0.58.0 stringr_1.4.0
[6] scales_1.1.1 COTAN_0.1.0
loaded via a namespace (and not attached):
[1] ggrepel_0.9.1 Rcpp_1.0.6 lattice_0.20-41 circlize_0.4.12 tidyr_1.1.2
[6] png_0.1-7 assertthat_0.2.1 digest_0.6.27 R6_2.5.0 stats4_4.0.4
[11] evaluate_0.14 pillar_1.4.7 basilisk_1.2.1 GlobalOptions_0.1.2 rlang_0.4.10
[16] jquerylib_0.1.3 R.oo_1.24.0 S4Vectors_0.28.1 R.utils_2.10.1 GetoptLong_1.0.5
[21] Matrix_1.3-2 reticulate_1.18 rmarkdown_2.7 labeling_0.4.2 munsell_0.5.0
[26] compiler_4.0.4 xfun_0.20 pkgconfig_2.0.3 BiocGenerics_0.36.0 shape_1.4.5
[31] htmltools_0.5.1.1 tidyselect_1.1.0 tibble_3.0.6 IRanges_2.24.1 withr_2.4.1
[36] crayon_1.4.0 dplyr_1.0.4 R.methodsS3_1.8.1 rappdirs_0.3.3 basilisk.utils_1.2.2
[41] grid_4.0.4 jsonlite_1.7.2 gtable_0.3.0 lifecycle_0.2.0 DBI_1.1.1
[46] magrittr_2.0.1 stringi_1.5.3 farver_2.0.3 bslib_0.2.4 ellipsis_0.3.1
[51] filelock_1.0.2 generics_0.1.0 vctrs_0.3.6 rjson_0.2.20 RColorBrewer_1.1-2
[56] tools_4.0.4 Cairo_1.5-12.2 glue_1.4.2 purrr_0.3.4 parallel_4.0.4
[61] yaml_2.2.1 clue_0.3-58 colorspace_2.0-0 cluster_2.1.1 ComplexHeatmap_2.6.2
[66] knitr_1.31 sass_0.3.1
LS0tCnRpdGxlOiAiU3ludGhldGljIGRhdGFzZXQgYW5hbHlzaXMiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgY29sbGFwc2VkOiBubwogICAgY3NzOiBodG1sLW1kLTAxLmNzcwogICAgZmlnX2NhcHRpb246IHllcwogICAgaGlnaGxpZ2h0OiBoYWRkb2NrCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcwogICAgdGhlbWU6IHNwYWNlbGFiCiAgICB0b2M6IHllcwogICAgdG9jX2Zsb2F0OiB5ZXMKICBodG1sX25vdGVib29rOgogICAgY29sbGFwc2VkOiBubwogICAgY3NzOiBodG1sLW1kLTAxLmNzcwogICAgZmlnX2NhcHRpb246IHllcwogICAgaGlnaGxpZ2h0OiBoYWRkb2NrCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcwogICAgdGhlbWU6IHNwYWNlbGFiCiAgICB0b2M6IHllcwogICAgdG9jX2Zsb2F0OiB5ZXMKLS0tCmBgYHtyLCBpbmNsdWRlID0gRkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICBjb2xsYXBzZSA9IFRSVUUsCiAgY29tbWVudCA9ICIjPiIsCiAgZWNobyA9IFRSVUUsCiAgd2FybmluZyA9IEZBTFNFLAogIHRpZHkgPSBUUlVFLCB0aWR5Lm9wdHM9bGlzdCh3aWR0aC5jdXRvZmY9NDApCikKb3B0aW9ucyhybWFya2Rvd24uaHRtbF92aWduZXR0ZS5jaGVja190aXRsZSA9IEZBTFNFKQpgYGAKIyBMb3cgIGFuZCBoaWdoIGNlbGwgbnVtYmVyIHNpbXVsYXRlZCBmcm9tIGEgRTE3LjUgbmV1cmFsIGNvcnRleCBkYXRhc2V0IChEcm9wLXNlcSkgYW5kIGhpcHBvY2FtcHVzIFAwIGRhdGFzZXQgKDEwWCkKCmBgYHtyIGluY2x1ZGU9RkFMU0V9CmxpYnJhcnkoQ09UQU4pCmxpYnJhcnkoc2NhbGVzKQpsaWJyYXJ5KHN0cmluZ3IpCmxpYnJhcnkobWF0cml4U3RhdHMpCmxpYnJhcnkobGF0ZXgyZXhwKQpsaWJyYXJ5KGRhdGEudGFibGUpCmxpYnJhcnkoZ2dwbG90MikKI3NvdXJjZSgiLi4vY290YW4wMS9zcmMvY290YW5fb3V0cHV0X2Z1bmN0aW9ucy5SIikKYGBgCgpgYGB7ciBpbmNsdWRlPUZBTFNFfQpmaWxlcyA9IGMoInN5bV9FMTdfY2wxXzgwMGNzL2F2ZXJhZ2UiLAogICAgICAgICAgInN5bV9FMTdfY2wxXzQwMDBjcy9hdmVyYWdlIiwKICAgICAgICAgICJzeW1fRTE3X2NsNl80MDAwY3MvYXZlcmFnZSIsCiAgICAgICAgICAic3ltX0UxN19jbDZfODAwY3MvYXZlcmFnZSIsCiAgICAgICAgICAic3ltX1AwX2NsMTVfODAwY3MvYXZlcmFnZSIsCiAgICAgICAgICAic3ltX1AwX2NsMTVfNDAwMGNzL2F2ZXJhZ2UiKSAjCgoKbnUudG90LnBsb3QgPSBkYXRhLmZyYW1lKCJudSI9ZG91YmxlKCkgLCAiZXN0Ij1kb3VibGUoKSwgImdyb3VwIj1jaGFyYWN0ZXIoKSwgImNlbGxzIj1jaGFyYWN0ZXIoKSwgImNsdXN0ZXJzIj1jaGFyYWN0ZXIoKSwgIm1ldGhvZCI9Y2hhcmFjdGVyKCkpCmxhbWJkYS50b3QucGxvdCA9IGRhdGEuZnJhbWUoImxhbWJkYV9yZWFsIj1kb3VibGUoKSAsICJsYW1iZGFfZXN0Ij1kb3VibGUoKSwiZ3JvdXAiPWNoYXJhY3RlcigpLCAiY2VsbHMiPWNoYXJhY3RlcigpLCAiY2x1c3RlcnMiPWNoYXJhY3RlcigpLCAibWV0aG9kIj1jaGFyYWN0ZXIoKSkKYV90YWJsZSA9IGRhdGEuZnJhbWUoImF2ZXJhZ2UiPWRvdWJsZSgpLCJzcXJ0Ij1kb3VibGUoKSkKCmZvcih0dCBpbiBmaWxlcyApewogIGlucHV0X2RpciA9IHBhc3RlKCJEYXRhLyIsdHQsIi8iLHNlcCA9ICIiKQogIGNsID0gc3Ryc3BsaXQodHQsICJfIilbWzFdXVszXQogIGNvbC5hID0gc3Ryc3BsaXQodHQsICIvIilbWzFdXVsyXQogIGZvci5yYXcgPSBjbCAKICBpZiAoY2wgPT0gImNsMSIpIHsKICAgIGNvbmQgPSAic2luZ2xlIgogICAgY2wgPSAiSCIKICB9ZWxzZXsKICAgIGNvbmQgPSAibXVsdGkiCiAgICBjbCA9ICJNIgogIH0KICAjY2wgPSBwYXN0ZShzdHJzcGxpdChjbCwgImwiKVtbMV1dWzJdLCJjbC4iLCBzZXAgPSAiICIpCiAgbWV0aG9kID0gc3Ryc3BsaXQodHQsICJcXC98XFxffCAiKVtbMV1dWzJdCiAgaWYobWV0aG9kID09ICJQMCIpewogICAgbWV0aG9kID0gIjEwWCIKICB9ZWxzZXsKICAgIG1ldGhvZCA9ICJEU1EiCiAgfQogIG5jZWxscyA9IHN0cnNwbGl0KHN0cnNwbGl0KHR0LCAiXFwvfFxcX3wgIilbWzFdXVs0XSwiYyIpW1sxXV1bMV0KICAKICByb3cuYSA9IHBhc3RlKG1ldGhvZCwgY2wsbmNlbGxzLCBzZXAgPSAnXycpIAogIGVwbyA9IHN0cnNwbGl0KHR0LCAiXyIpW1sxXV1bMl0KICAKICBpZiAoZXBvID09ICJFMTciKSB7CiAgICAgIGV0YSA9IGFzLmRhdGEuZnJhbWUoZnJlYWQoIkRhdGEvaW5wdXQvZXRhX291dDE3X2F2ZXJhZ2UuY3N2IiwgaGVhZGVyID0gVCkpCiAgICAgIHRoZXRhID0gYXMuZGF0YS5mcmFtZShmcmVhZCgiRGF0YS9pbnB1dC90aGV0YV9vdXQxN19hdmVyYWdlLmNzdiIsIGhlYWRlciA9IFQpKQogICAgICBudS5zYW1wbGVzID0gcmVhZC5jc3YoIkRhdGEvaW5wdXQvbnVfb3V0MTdfYXZlcmFnZS5jc3YiLCBoZWFkZXIgPSBULHJvdy5uYW1lcyA9IDEpCiAgICAgIAogIH1lbHNlIGlmKGVwbyA9PSAiUDAiKXsKICAgICAgICBldGEgPSBhcy5kYXRhLmZyYW1lKGZyZWFkKCJEYXRhL2lucHV0L2V0YV9vdXRQMF9hdmVyYWdlLmNzdiIsIGhlYWRlciA9IFQpKQogICAgICB0aGV0YSA9IGFzLmRhdGEuZnJhbWUoZnJlYWQoIkRhdGEvaW5wdXQvdGhldGFfb3V0UDBfYXZlcmFnZS5jc3YiLCBoZWFkZXIgPSBUKSkKICAgICAgbnUuc2FtcGxlcyA9IHJlYWQuY3N2KCJEYXRhL2lucHV0L251X291dFAwX2F2ZXJhZ2UuY3N2IiwgaGVhZGVyID0gVCxyb3cubmFtZXMgPSAxKQogIH0KICBjb2xuYW1lcyhldGEpID0gZXRhWzEsXQogIGdlbmVzID0gZXRhWzI6bnJvdyhldGEpLDFdCiAgZXRhID0gZXRhWzI6bnJvdyhldGEpLCAyOm5jb2woZXRhKV0KICBldGEgPSBhcy5kYXRhLmZyYW1lKHNhcHBseShldGEsIGFzLm51bWVyaWMpKSAKICByb3duYW1lcyhldGEpID0gZ2VuZXMgICAgCiAgCiAgY29sbmFtZXModGhldGEpID0gdGhldGFbMSxdCiAgcm93bmFtZXModGhldGEpID0gdGhldGFbLDFdCiAgdGhldGEgPSB0aGV0YVsyOm5yb3codGhldGEpLCAyOm5jb2wodGhldGEpXQogIHRoZXRhID0gIGFzLmRhdGEuZnJhbWUoc2FwcGx5KHRoZXRhLCBhcy5udW1lcmljKSkgCiAgcm93bmFtZXModGhldGEpID0gZ2VuZXMKICBjbDIgPSB1bmlxdWUobnUuc2FtcGxlcyRjbHVzdGVyKQogIGNsLnBlcmMgPSB2ZWN0b3IobGVuZ3RoID0gbGVuZ3RoKGNsMikpCiAgbmFtZXMoY2wucGVyYykgPSBjbDIKICBmb3IgKGMgaW4gY2wyKSB7CiAgICAgY2wucGVyY1tjXSA9IGxlbmd0aChudS5zYW1wbGVzJGNsdXN0ZXJbbnUuc2FtcGxlcyRjbHVzdGVyID09IGNdKS9sZW5ndGgobnUuc2FtcGxlcyRjbHVzdGVyKQogIH0KICBzdW0oY2wucGVyYykKICBjbHVzdGVyLnNpbmdsZSA9IG5hbWVzKHdoaWNoKGNsLnBlcmMgPT0gbWF4KGNsLnBlcmMpKSkKICByZWFsX2xhbWJkYV9tdWx0aSA9IGFzLm1hdHJpeChldGEgKiB0aGV0YSkgICUqJSBkaWFnKGNsLnBlcmMpIAogIAogICNyZWFsX2xhbWJkYV9tdWx0aSA9IHQodChhcy5tYXRyaXgoZXRhICogdGhldGEpKSAqICgoYXMudmVjdG9yKGNsLnBlcmMpKSkpCiAgCiAgcmVhbF9sYW1iZGFfbXVsdGkgPSByb3dTdW1zKHJlYWxfbGFtYmRhX211bHRpKQogIHJlYWxfbGFtYmRhX3NpbmdsZSA9IGV0YVssY2x1c3Rlci5zaW5nbGVdICogdGhldGFbLGNsdXN0ZXIuc2luZ2xlXQogICBuYW1lcyhyZWFsX2xhbWJkYV9zaW5nbGUpPSByb3duYW1lcyhldGEpCgogICNjbCA9IHBhc3RlKHN0cnNwbGl0KGNsLCAibCIpW1sxXV1bMl0sImNsLiIsIHNlcCA9ICIgIikKICB0ID0gc3Ryc3BsaXQodHQsICIvIilbWzFdXVsxXQogICNsaXN0YSA9IGxvYWRfZmlsZXMyLjAoaW5wdXRfZGlyID0gaW5wdXRfZGlyLCB0ID0gdCAsIHMgPSAiU3kyIikKICAKICAjY2VsbHM9bGlzdGFbWzJdXSAKICBjZWxscz0gYXMuZGF0YS5mcmFtZShmcmVhZChwYXN0ZShpbnB1dF9kaXIsImNlbGxzXyIsdCwiLmNzdiIsIHNlcCA9ICIiKSkpCiAgcm93bmFtZXMoY2VsbHMpPWNlbGxzJFYxCiAgY2VsbHMgPSBhcy5tYXRyaXgoY2VsbHNbLDI6bmNvbChjZWxscyldKQogIAogICNudV9lc3QgPSBsaXN0YVtbM11dCiAgbnVfZXN0ID0gcmVhZC5jc3YocGFzdGUoaW5wdXRfZGlyLCJudV9lc3RfIix0LCIuY3N2Iiwgc2VwID0gIiIpLCByb3cubmFtZXMgPSAxKQogIAoKICAKICBjZWxscy5mb3IucmF3ID0gcGFzdGUwKG5jZWxscywiY3MuY3N2Lmd6IikKICByYXcgPSBhcy5kYXRhLmZyYW1lKGZyZWFkKHBhc3RlKCJEYXRhL3NpbXVsYXRlZF9kYXRhc2V0cy9zaW11bGF0ZWQuZGF0YXNldCIsZXBvLGZvci5yYXcsIGNlbGxzLmZvci5yYXcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwID0gIl8iKSkpCiAgcm93bmFtZXMocmF3KT1yYXckVjEKICByZWFsX251ID0gcmF3WzEsXQogIHJhdyA9IGFzLm1hdHJpeChyYXdbMjpucm93KHJhdyksMjpuY29sKHJhdyldKQogICNyYXdfbm9ybSA9IGxpc3RhW1s0XV0gCiAgcmF3X25vcm0gPC0gdCh0KGFzLm1hdHJpeChyYXcpKSAqICgxLyhhcy52ZWN0b3IobnVfZXN0KSkpKQogIAogIGNvbG5hbWVzKHJhd19ub3JtKT1jb2xuYW1lcyhjZWxscykKICByYXdfbm9ybSA9IGFzLmRhdGEuZnJhbWUocmF3X25vcm0pCiAgCiAgI3RvdDIgPSBsaXN0YVtbNV1dCiAgbG9hZChwYXN0ZShpbnB1dF9kaXIsImFfbWluaW1pemF0aW9uXyIsdCwgc2VwID0gIiIpKQogIAogICNsYW1iZGFfaSA9IGxpc3RhW1s3XV0KICBsYW1iZGFfaSA9IHJlYWQuY3N2KHBhc3RlKGlucHV0X2RpciwibGFtYmRhX2lfIix0LCIuY3N2Iiwgc2VwID0gIiIpLCByb3cubmFtZXMgPSAxKQogICNyZWFsX251ID0gbGlzdGFbWzhdXQogIHByaW50KHBhc3RlKCJyZWFsIG51IiwgbGVuZ3RoKHJlYWxfbnUpLCBzZXAgPSAiICIpKQogICNkc3EuZTE0Y3R4ID0gbGlzdGFbWzhdXQogICNybShsaXN0YSkKICAKICAKICAjcHJpbnQoImEgdGFibGUiKQogIAogIGFfdGFibGVbcm93LmEsY29sLmFdID0gc3VtKHRvdDIkYSA8IDApL2xlbmd0aCh0b3QyJGEpKjEwMCAgCiAgCiAgI3ByaW50KCJkYXRhZnJhbWUgZm9yIG51IikKICBudV9lc3QgPSBhcy5hcnJheShudV9lc3QkeCkKICB0by5wbG90Lm51ID0gZGF0YS5mcmFtZSgibnUiPXQocmVhbF9udVsyOmxlbmd0aChyZWFsX251KV0pKQogICNwcmludChwYXN0ZShsZW5ndGgobnVfZXN0KSwgZGltKHRvLnBsb3QubnUpLCBzZXAgPSAiICIpKQogIHRvLnBsb3QubnUkZXN0PSBudV9lc3QKICB0by5wbG90Lm51JGdyb3VwID0gcmVwKHBhc3RlKGMocm93LmEsIGNvbC5hKSwgY29sbGFwc2UgPSAnXycpLG5yb3codG8ucGxvdC5udSkpIAogIHRvLnBsb3QubnUkY2VsbHMgPSByZXAobmNlbGxzLG5yb3codG8ucGxvdC5udSkpIAogIHRvLnBsb3QubnUkY2x1c3RlcnMgPSByZXAoY2wsbnJvdyh0by5wbG90Lm51KSkgCiAgdG8ucGxvdC5udSRtZXRob2QgPSByZXAoY29sLmEsbnJvdyh0by5wbG90Lm51KSkgCiAgCiAgI3ByaW50KCJkYXRhZnJhbWUgZm9yIGxhbWJkYSIpCiAgbGFtYmRhX2VzdCA9IGFzLmFycmF5KGxhbWJkYV9pJHgpCiAgbGFtYmRhX2VzdCA9IGFzLmRhdGEuZnJhbWUobGFtYmRhX2kpCiAgaWYgKGNvbmQgPT0gIm11bHRpIikgewogICAgdG8ucGxvdC5sYW1iZGEgPSBkYXRhLmZyYW1lKCJsYW1iZGFfcmVhbCI9IHJlYWxfbGFtYmRhX211bHRpW3Jvd25hbWVzKGNlbGxzKV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhbWJkYV9lc3QiPWxhbWJkYV9lc3Rbcm93bmFtZXMoY2VsbHMpLDFdKQogIH1lbHNlIGlmKGNvbmQgPT0gInNpbmdsZSIgKXsKICAgIHRvLnBsb3QubGFtYmRhID0gZGF0YS5mcmFtZSgibGFtYmRhX3JlYWwiPSByZWFsX2xhbWJkYV9zaW5nbGVbcm93bmFtZXMoY2VsbHMpXSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhbWJkYV9lc3QiPWxhbWJkYV9lc3Rbcm93bmFtZXMoY2VsbHMpLDFdKQogIH0KICAKICB0by5wbG90LmxhbWJkYSRncm91cCA9IHJlcChwYXN0ZShjKHJvdy5hLCBjb2wuYSksIGNvbGxhcHNlID0gJ18nKSAsbnJvdyh0by5wbG90LmxhbWJkYSkpIAogIHRvLnBsb3QubGFtYmRhJGNlbGxzID0gcmVwKG5jZWxscyxucm93KHRvLnBsb3QubGFtYmRhKSkgCiAgdG8ucGxvdC5sYW1iZGEkY2x1c3RlcnMgPSByZXAoY2wsbnJvdyh0by5wbG90LmxhbWJkYSkpIAogIHRvLnBsb3QubGFtYmRhJG1ldGhvZCA9IHJlcChjb2wuYSxucm93KHRvLnBsb3QubGFtYmRhKSkgCiAgCiAgcHJpbnQoImFsbCBkYXRhZnJhbWUgZm9ybWVkIikKICAKICBudS50b3QucGxvdCA9IHJiaW5kKG51LnRvdC5wbG90LHRvLnBsb3QubnUpIAogIGxhbWJkYS50b3QucGxvdCA9IHJiaW5kKGxhbWJkYS50b3QucGxvdCwgdG8ucGxvdC5sYW1iZGEpCiAgbGFtYmRhLnRvdC5wbG90ID0gbGFtYmRhLnRvdC5wbG90W2NvbXBsZXRlLmNhc2VzKGxhbWJkYS50b3QucGxvdCksXQogIAp9CgpgYGAKCmBgYHtyfQpteWNvbG91cnMgPC0gYygKICAiRFNRX0hfNDAwMF9hdmVyYWdlIj0gIiNFNjRCMzVGRiIgLAogICJEU1FfSF84MDBfYXZlcmFnZSIgPSAiIzREQkJENUZGIiAsCiAgIkRTUV9NXzQwMDBfYXZlcmFnZSIgPSAiI0YzOUI3RkZGIiAgLAogICAgIkRTUV9NXzgwMF9hdmVyYWdlIiA9ICIjMDBBMDg3RkYiLAogICIxMFhfTV84MDBfYXZlcmFnZSIgPSAgIiMzQzU0ODhGRiIgLAogICAgIjEwWF9NXzQwMDBfYXZlcmFnZSI9ICIjODQ5MUI0RkYiICwgCiAgIkRTUV9IXzQwMDBfc3FydCIgID0gIiNFNjRCMzVCMiIgLAogICJEU1FfSF84MDBfc3FydCIgICAgPSIjNERCQkQ1QjIiICwKICAiRFNRX01fNDAwMF9zcXJ0IiAgID0gIiNGMzlCN0ZCMiIgICwKICAiRFNRX01fODAwX3NxcnQiICAgID0gIiMwMEEwODdCMiIgLAogICIxMFhfTV84MDBfc3FydCIgICAgPSAiIzNDNTQ4OEIyIiAsCiAgIjEwWF9NXzQwMDBfc3FydCIgPSAiIzg0OTFCNEIyIiAKICAKICAKICApCgpkb2RnZSA8LSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCkKICAKc2kgPSAxMgogbnU9IGdncGxvdChudS50b3QucGxvdCxhZXMoeD1jZWxscywgeT1sb2coZXN0KS1sb2cobnUpLCBmaWxsPWdyb3VwKSkgKwogICAgZmFjZXRfZ3JpZChtZXRob2QgfiAuLCBzY2FsZXMgPSAiZnJlZSIpKyAKICAgICN5bGltKC0wLjIsMC4yKSsKICAgIGdlb21fdmlvbGluKGNvbG9yPSJibGFjayIsIHBvc2l0aW9uID0gZG9kZ2UpKyAgCiAgICBmYWNldF93cmFwKG1ldGhvZCB+IGNlbGxzLCBzY2FsZXMgPSAiZnJlZSIpKwogICAgY29vcmRfZmxpcCgpKwogICAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gIG15Y29sb3VycykrCiAgICB4bGFiKFRlWCgiICRsb2cgXFx0aWxkZXtcXG51fSAtIGxvZyBcXG51ICQgIikpKyBnZW9tX2JveHBsb3Qod2lkdGg9MC4zLCBvdXRsaWVyLmNvbG91cj1OQSwgcG9zaXRpb24gPSBkb2RnZSkgKwogICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IHNpLCBhbmdsZSA9IDAsIGhqdXN0ID0gLjUsIHZqdXN0ID0gLjUsIGZhY2UgPSAicGxhaW4iLCBjb2xvdXIgPSIjM0M1NDg4RkYiICksCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoIHNpemUgPSBzaSwgYW5nbGUgPSAwLCBoanVzdCA9IDEsIHZqdXN0ID0gLjAsIGZhY2UgPSAicGxhaW4iLCBjb2xvdXIgPSIjM0M1NDg4RkYiKSwgIAogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dCggc2l6ZSA9IHNpLCBhbmdsZSA9IDAsIGhqdXN0ID0gLjUsIHZqdXN0ID0gMCwgZmFjZSA9ICJwbGFpbiIsIGNvbG91ciA9IiMzQzU0ODhGRiIpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dCggc2l6ZSA9IHNpLCBhbmdsZSA9IDAsIGhqdXN0ID0gLjUsIHZqdXN0ID0gLjUsIGZhY2UgPSAicGxhaW4iLCBjb2xvdXIgPSIjM0M1NDg4RkYiKSwKICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGw9IiM4NDkxQjQ0QyIpLAogICAgICAgc3RyaXAudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMixjb2xvdXIgPSAiIzNDNTQ4OEZGIixmYWNlID0gInBsYWluIiksCiAgICAgICAgc3RyaXAudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMixjb2xvdXIgPSAiIzNDNTQ4OEZGIixmYWNlID0gInBsYWluIiksCiAgICAgICBheGlzLnRpdGxlLnkubGVmdCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICNsZWdlbmQua2V5LmhlaWdodCA9IHVuaXQoNSwgIm1tIiksCiAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiIzNDNTQ4OEZGIixmYWNlID0iaXRhbGljIiApLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgICMgdGl0bCkKCm51IApgYGAKCgpgYGB7cn0KZG9kZ2U9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC43KQpsYW1iZGEgPWdncGxvdChsYW1iZGEudG90LnBsb3QsYWVzKHg9Y2VsbHMsIHk9bG9nKGxhbWJkYV9lc3QpLWxvZyhsYW1iZGFfcmVhbCksIGZpbGw9Z3JvdXApKSArIAogIGZhY2V0X2dyaWQobWV0aG9kIH4gLiwgc2NhbGVzID0gImZyZWUiKSsgCiAgICB5bGltKC0wLjc1LDAuNzUpKwogICAgZ2VvbV92aW9saW4oY29sb3I9ImJsYWNrIiwgcG9zaXRpb24gPSBkb2RnZSkrICAKICAgIGZhY2V0X3dyYXAobWV0aG9kIH4gY2VsbHMsIHNjYWxlcyA9ICJmcmVlIikrCiAgICBjb29yZF9mbGlwKCkrCiAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSAgbXljb2xvdXJzKSsKICB4bGFiKFRlWCgiICRsb2cgXFx0aWxkZXtcXGxhbWJkYX0gLSBsb2cgXFxsYW1iZGEgJCAiKSkrIGdlb21fYm94cGxvdCh3aWR0aD0wLjIsIG91dGxpZXIuY29sb3VyPU5BLCBwb3NpdGlvbiA9IGRvZGdlKSsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gc2ksIGFuZ2xlID0gMCwgaGp1c3QgPSAuNSwgdmp1c3QgPSAuNSwgZmFjZSA9ICJwbGFpbiIsIGNvbG91ciA9IiMzQzU0ODhGRiIgKSwKICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dCggc2l6ZSA9IHNpLCBhbmdsZSA9IDAsIGhqdXN0ID0gMSwgdmp1c3QgPSAuMCwgZmFjZSA9ICJwbGFpbiIsIGNvbG91ciA9IiMzQzU0ODhGRiIpLCAgCiAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KCBzaXplID0gc2ksIGFuZ2xlID0gMCwgaGp1c3QgPSAuNSwgdmp1c3QgPSAwLCBmYWNlID0gInBsYWluIiwgY29sb3VyID0iIzNDNTQ4OEZGIiksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KCBzaXplID0gc2ksIGFuZ2xlID0gMCwgaGp1c3QgPSAuNSwgdmp1c3QgPSAuNSwgZmFjZSA9ICJwbGFpbiIsIGNvbG91ciA9IiMzQzU0ODhGRiIpLAogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgIHN0cmlwLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbD0iIzg0OTFCNDRDIiksCiAgICAgICBzdHJpcC50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLGNvbG91ciA9ICIjM0M1NDg4RkYiLGZhY2UgPSAicGxhaW4iKSwKICAgICAgICBzdHJpcC50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLGNvbG91ciA9ICIjM0M1NDg4RkYiLGZhY2UgPSAicGxhaW4iKSwKICAgICAgIGF4aXMudGl0bGUueS5sZWZ0ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgI2xlZ2VuZC5rZXkuaGVpZ2h0ID0gdW5pdCg1LCAibW0iKSwKICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICIjM0M1NDg4RkYiLGZhY2UgPSJpdGFsaWMiICksCiAgICAgICBsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiKQpsYW1iZGEKYGBgClBlcmNlbnRhZ2Ugb2YgYSA8IDAgOgoKYGBge3J9CnByaW50KGFfdGFibGUpCmBgYAoKCgoKYGBge3J9CnNlc3Npb25JbmZvKCkKYGBgCgo=