TODO
Changelog
Introduction
This document is intended to provide some background into these
analyses, packaging them into a downloadable container, and any
notes/ideas that cross my mind.
The section titled ‘Roadmap’ is intended to provide a quick reference
to find any figures produced by these analyses.
Packaging the
counts
Currently, the container image for these analyses starts at the
mapped counts and progresses through the markdown documents to create
the html logs, figures, and xlsx documents. The following block reads
the project metadata in order to create an archive file containing those
counts. One might reasonably ask why it is not compressed by default,
the individual count tables are aggressively compressed, so that would
be redundant redundant.
deduplicated_tarball <- tar_meta_column("sample_sheets/20240606_only_umd_sequenced_modified.xlsx",
column = "umi_dedup_output_count", output = "deduplicated_counts.tar",
compression = NULL)
original_tarball <- tar_meta_column("sample_sheets/20240606_only_umd_sequenced_modified.xlsx",
column = "hisat_count_table", output = "non_deduplicated_counts.tar",
compression = NULL)
symlink_tarball <- tar_meta_column("sample_sheets/20240606_only_umd_sequenced_modified.xlsx",
column = "symlink", output = "symlink_counts.tar",
compression = NULL)
Output
organization
This iteration of the iprgc analyses adopted a peculiar organization
strategy. Each set of images/xlsx/etc files produced goes into a
separate numeric prefixed directory.
I did this primarily in an attempt to make clear the distinction
between observations before removing genes higher in the wt samples
vs. after wt removal.
- 01diagnostic_images: The set of plots taken before doing pretty much
anything else. This includes showing the differences between pre/post
umi-deduplication, clustering before removing the problemat samples
(either due to low coverage or seriously inappropriate sample
clustering). Note: all of plots of the ‘v1’ data are excluded; they are
sufficiently redundant that I dropped them.
- 02filtered_images: Mostly a repetition of the 01 directory, but now
the final set of samples/genes which survived filtering. If we were to
use any of the diagnostic images as supplemental, they would be here.
(none were)
- 03theresa_comparison_excel: This document was intended as a simple
transcription of Theresa’s notebook before I started messing with it.
This directory is intended to trace back and show that the results I am
getting are very similar to Theresa’s – which is true, but there are
some differences introduced by the slightly different filtering
performed and the usage of UMI deduplicated inputs.
- In the notebook, after the 03 section, there is a large number of
not-run blocks. These are copy/pasted from Theresa’s notebook and
provide the starting point for my changes. I am pretty sure they all
still work and one is welcome to run them.
- 04inclusion_comparisons: Every informative comparison against wt
samples resides here. We have in these files every gene which is highly
observed in the wt samples, and as such, are expected to be the result
of mRNAs non-specifically binding during the TRAP experiment.
- 05inclusion_volcano_ma: Plots of the 04 results. A quick and easy
way to get a feeling for what was non specific. We kind of hope to see a
grab-bag of randomness here.
- (hah I cannot count, there is no 06 directory), I think I had one
with gprofiler of the wt stuff, but deleted it.
- 07included_strict_genes_excel: A large xlsx file of all high-wt gene
IDs.
- 08full_contrasts_excel: The large xlsx output files comparing
everything which is not wt. E.g. this has the heterozygous and
knockout comparisons of genotype, location, and time. No genes were
excluded from these tables.
- 09full_contrasts_intersections: The set of intersections of genes
among the not-filtered comparisons.
- 10genotype_contrasts_excel: This is effectively a copy of the 08
files, but with only those genes higher in the het/ko samples than their
corresponding wt samples. E.g. this take the 08 results and keeps only
the stuff in the 07 directory.
- 11enrichment_excel: The various results from clusterProfiler and
gProfiler2, these take the genes in the of significant (p <= 0.05,
|lfc| >= 1.0 or whatever) set from the 10genotype_contrasts_excel
directory and pass them to the over-enrichment and gene set analyses
against a mix of GO, reactome, transcription-factors, miRNA, KEGG,
mSigDB, etc…
- 12clusterprofiler_plots: Plots from 11.
- 13genotype_ma_volcano: MA and volcano plots of the ko/het
comparisons in pdf format. These include labels of specific genes of
particular interest.
- 14genotype_strict_contrasts_excel: A repetition of 10 above, but
with a stricter definition of ‘significant’.
- 15: xlsx output from clusterProfiler/gProfiler2 of the results from
- 16clusterProfiler_plots: Plots from 15.
- 17full_location_contrasts: The tables comparing paired genotype
sampletypes by location (retina, dlgn, scn). These tables do not remove
any genes observed higher in their corresponding wt.
- 18location_contrasts: Post filtering copies of 17.
- 19: The xlsx outputs of gProfiler2/clusterProfiler for 18.
- 19clusterProfiler_plots: (I think this should be 20): Plots from
19.
- 20location_ma_volcano: MA/volcano plots from 18.
- 21location_strict_contrasts: Same as 14, but for the locations
(stricter p-value/lfc).
- 22: Ontology etc. results from 21.
- 23clusterProfiler_plots: Plots from 22.
- 24location_ma_volcano_strict: Same as 20, but stricter.
- 25full_contrasts_time: Same as 17, but this time comparing across
p08 and p15.
- 26time_contrasts: Excluding the high-wt from 25.
- 27: The ontology xlsx files from 26.
- 28clusterProfiler_plots: The plots from 27.
- 29time_ma_volcano: MA/volcano plots from 26.
- 30time_strict_contrasts_excel: Repeating the strict fc/p call for
the time comparisons.
- 31: The ontology xlsx files from 30.
- 32: Plots of 31.
- 33translatome_xlsx: xlsx results of unfiltered a/b / c/d
comparisons: the translatomes. Note: there is a pre/post sva version of
this because of the complexity of these contrasts. This includes a
peculiar subtraction I did using the deseq results.
- 34translatome_deseqsub_xlsx: 33, but using the DESeq2 results to
exclude genes.
- 35translatome_union: Using unions/intersections to filter
genes.
- 36upset_genotype: Getting groups of genes by union/intersection from
upset.
- 37upset_location: Ibid but the locations.
- 38msigdb: Using GSVA to compare the results against the mh/m1/etc
gene sets from the mSigDB revision 2024. I am not sure about the
legality of this and may have removed it.
I tried out some random stuff after #38 but did not write the
results.
Roadmap
Bibliography
LS0tCnRpdGxlOiAiSVBSR0MgdHJhbnNsYXRvbWUgYW5hbHlzZXM6IGByIFN5cy5nZXRlbnYoJ1ZFUlNJT04nKWA6IFJFQURNRS4iCmF1dGhvcjogImF0YiBhYmVsZXdAZ21haWwuY29tIgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgY29kZV9mb2xkaW5nOiBzaG93CiAgICBmaWdfY2FwdGlvbjogdHJ1ZQogICAgZmlnX2hlaWdodDogNwogICAgZmlnX3dpZHRoOiA3CiAgICBoaWdobGlnaHQ6IHplbmJ1cm4KICAgIGtlZXBfbWQ6IGZhbHNlCiAgICBtb2RlOiBzZWxmY29udGFpbmVkCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICAgIHNlbGZfY29udGFpbmVkOiB0cnVlCiAgICB0aGVtZTogcmVhZGFibGUKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OgogICAgICBjb2xsYXBzZWQ6IGZhbHNlCiAgICAgIHNtb290aF9zY3JvbGw6IGZhbHNlCiAgcm1kZm9ybWF0czo6cmVhZHRoZWRvd246CiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cKICAgIGRmX3ByaW50OiBwYWdlZAogICAgZmlnX2NhcHRpb246IHRydWUKICAgIGZpZ19oZWlnaHQ6IDcKICAgIGZpZ193aWR0aDogNwogICAgaGlnaGxpZ2h0OiB6ZW5idXJuCiAgICB3aWR0aDogMzAwCiAgICBrZWVwX21kOiBmYWxzZQogICAgbW9kZTogc2VsZmNvbnRhaW5lZAogICAgdG9jX2Zsb2F0OiB0cnVlCiAgQmlvY1N0eWxlOjpodG1sX2RvY3VtZW50OgogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgY29kZV9mb2xkaW5nOiBzaG93CiAgICBmaWdfY2FwdGlvbjogdHJ1ZQogICAgZmlnX2hlaWdodDogNwogICAgZmlnX3dpZHRoOiA3CiAgICBoaWdobGlnaHQ6IHplbmJ1cm4KICAgIGtlZXBfbWQ6IGZhbHNlCiAgICBtb2RlOiBzZWxmY29udGFpbmVkCiAgICB0b2NfZmxvYXQ6IHRydWUKLS0tCgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgpib2R5LCB0ZCB7CiAgZm9udC1zaXplOiAxNnB4Owp9CmNvZGUuciB7CiAgZm9udC1zaXplOiAxNnB4Owp9CnByZSB7CiAgZm9udC1zaXplOiAxNnB4Cn0KYm9keSAubWFpbi1jb250YWluZXIgewogIG1heC13aWR0aDogMTYwMHB4Owp9Cjwvc3R5bGU+CgpgYGB7ciBvcHRpb25zLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19rbml0JHNldCgKICBwcm9ncmVzcyA9IFRSVUUsIHZlcmJvc2UgPSBUUlVFLCB3aWR0aCA9IDkwLCBlY2hvID0gVFJVRSkKa25pdHI6Om9wdHNfY2h1bmskc2V0KAogIGVycm9yID0gVFJVRSwgZmlnLndpZHRoID0gOCwgZmlnLmhlaWdodCA9IDgsIGZpZy5yZXRpbmEgPSAyLAogIG91dC53aWR0aCA9ICIxMDAlIiwgZGV2ID0gInBuZyIsCiAgZGV2LmFyZ3MgPSBsaXN0KHBuZyA9IGxpc3QodHlwZSA9ICJjYWlyby1wbmciKSkpCm9sZF9vcHRpb25zIDwtIG9wdGlvbnMoc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFLCBrbml0ci5kdXBsaWNhdGUubGFiZWwgPSAiYWxsb3ciKQpnZ3Bsb3QyOjp0aGVtZV9zZXQoZ2dwbG90Mjo6dGhlbWVfYncoYmFzZV9zaXplID0gMTIpKQp2ZXIgPC0gU3lzLmdldGVudigiVkVSU0lPTiIpCmBgYAoKIyBUT0RPCgojIENoYW5nZWxvZwoKIyBJbnRyb2R1Y3Rpb24KClRoaXMgZG9jdW1lbnQgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBzb21lIGJhY2tncm91bmQgaW50byB0aGVzZQphbmFseXNlcywgcGFja2FnaW5nIHRoZW0gaW50byBhIGRvd25sb2FkYWJsZSBjb250YWluZXIsIGFuZCBhbnkKbm90ZXMvaWRlYXMgdGhhdCBjcm9zcyBteSBtaW5kLgoKVGhlIHNlY3Rpb24gdGl0bGVkICdSb2FkbWFwJyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIGEgcXVpY2sgcmVmZXJlbmNlCnRvIGZpbmQgYW55IGZpZ3VyZXMgcHJvZHVjZWQgYnkgdGhlc2UgYW5hbHlzZXMuCgojIFBhY2thZ2luZyB0aGUgY291bnRzCgpDdXJyZW50bHksIHRoZSBjb250YWluZXIgaW1hZ2UgZm9yIHRoZXNlIGFuYWx5c2VzIHN0YXJ0cyBhdCB0aGUgbWFwcGVkCmNvdW50cyBhbmQgcHJvZ3Jlc3NlcyB0aHJvdWdoIHRoZSBtYXJrZG93biBkb2N1bWVudHMgdG8gY3JlYXRlIHRoZQpodG1sIGxvZ3MsIGZpZ3VyZXMsIGFuZCB4bHN4IGRvY3VtZW50cy4gIFRoZSBmb2xsb3dpbmcgYmxvY2sgcmVhZHMgdGhlCnByb2plY3QgbWV0YWRhdGEgaW4gb3JkZXIgdG8gY3JlYXRlIGFuIGFyY2hpdmUgZmlsZSBjb250YWluaW5nIHRob3NlCmNvdW50cy4gIE9uZSBtaWdodCByZWFzb25hYmx5IGFzayB3aHkgaXQgaXMgbm90IGNvbXByZXNzZWQgYnkgZGVmYXVsdCwgdGhlCmluZGl2aWR1YWwgY291bnQgdGFibGVzIGFyZSBhZ2dyZXNzaXZlbHkgY29tcHJlc3NlZCwgc28gdGhhdCB3b3VsZCBiZQpyZWR1bmRhbnQgcmVkdW5kYW50LgoKYGBge3IsIGV2YWw9RkFMU0V9CmRlZHVwbGljYXRlZF90YXJiYWxsIDwtIHRhcl9tZXRhX2NvbHVtbigic2FtcGxlX3NoZWV0cy8yMDI0MDYwNl9vbmx5X3VtZF9zZXF1ZW5jZWRfbW9kaWZpZWQueGxzeCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSAidW1pX2RlZHVwX291dHB1dF9jb3VudCIsIG91dHB1dCA9ICJkZWR1cGxpY2F0ZWRfY291bnRzLnRhciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbiA9IE5VTEwpCm9yaWdpbmFsX3RhcmJhbGwgPC0gdGFyX21ldGFfY29sdW1uKCJzYW1wbGVfc2hlZXRzLzIwMjQwNjA2X29ubHlfdW1kX3NlcXVlbmNlZF9tb2RpZmllZC54bHN4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9ICJoaXNhdF9jb3VudF90YWJsZSIsIG91dHB1dCA9ICJub25fZGVkdXBsaWNhdGVkX2NvdW50cy50YXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb24gPSBOVUxMKQpzeW1saW5rX3RhcmJhbGwgPC0gIHRhcl9tZXRhX2NvbHVtbigic2FtcGxlX3NoZWV0cy8yMDI0MDYwNl9vbmx5X3VtZF9zZXF1ZW5jZWRfbW9kaWZpZWQueGxzeCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9ICJzeW1saW5rIiwgb3V0cHV0ID0gInN5bWxpbmtfY291bnRzLnRhciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uID0gTlVMTCkKYGBgCgoKIyBPdXRwdXQgb3JnYW5pemF0aW9uCgpUaGlzIGl0ZXJhdGlvbiBvZiB0aGUgaXByZ2MgYW5hbHlzZXMgYWRvcHRlZCBhIHBlY3VsaWFyIG9yZ2FuaXphdGlvbgpzdHJhdGVneS4gIEVhY2ggc2V0IG9mIGltYWdlcy94bHN4L2V0YyBmaWxlcyBwcm9kdWNlZCBnb2VzIGludG8gYQpzZXBhcmF0ZSBudW1lcmljIHByZWZpeGVkIGRpcmVjdG9yeS4KCkkgZGlkIHRoaXMgcHJpbWFyaWx5IGluIGFuIGF0dGVtcHQgdG8gbWFrZSBjbGVhciB0aGUgZGlzdGluY3Rpb24KYmV0d2VlbiBvYnNlcnZhdGlvbnMgYmVmb3JlIHJlbW92aW5nIGdlbmVzIGhpZ2hlciBpbiB0aGUgd3QKc2FtcGxlcyB2cy4gYWZ0ZXIgd3QgcmVtb3ZhbC4KCisgMDFkaWFnbm9zdGljX2ltYWdlczogVGhlIHNldCBvZiBwbG90cyB0YWtlbiBiZWZvcmUgZG9pbmcgcHJldHR5IG11Y2gKICBhbnl0aGluZyBlbHNlLiAgVGhpcyBpbmNsdWRlcyBzaG93aW5nIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuCiAgcHJlL3Bvc3QgdW1pLWRlZHVwbGljYXRpb24sIGNsdXN0ZXJpbmcgYmVmb3JlIHJlbW92aW5nIHRoZQogIHByb2JsZW1hdCBzYW1wbGVzIChlaXRoZXIgZHVlIHRvIGxvdyBjb3ZlcmFnZSBvciBzZXJpb3VzbHkKICBpbmFwcHJvcHJpYXRlIHNhbXBsZSBjbHVzdGVyaW5nKS4gIE5vdGU6IGFsbCBvZiBwbG90cyBvZiB0aGUgJ3YxJwogIGRhdGEgYXJlIGV4Y2x1ZGVkOyB0aGV5IGFyZSBzdWZmaWNpZW50bHkgcmVkdW5kYW50IHRoYXQgSSBkcm9wcGVkCiAgdGhlbS4KKyAwMmZpbHRlcmVkX2ltYWdlczogTW9zdGx5IGEgcmVwZXRpdGlvbiBvZiB0aGUgMDEgZGlyZWN0b3J5LCBidXQgbm93CiAgdGhlIGZpbmFsIHNldCBvZiBzYW1wbGVzL2dlbmVzIHdoaWNoIHN1cnZpdmVkIGZpbHRlcmluZy4gIElmIHdlIHdlcmUKICB0byB1c2UgYW55IG9mIHRoZSBkaWFnbm9zdGljIGltYWdlcyBhcyBzdXBwbGVtZW50YWwsIHRoZXkgd291bGQgYmUKICBoZXJlLiAobm9uZSB3ZXJlKQorIDAzdGhlcmVzYV9jb21wYXJpc29uX2V4Y2VsOiBUaGlzIGRvY3VtZW50IHdhcyBpbnRlbmRlZCBhcyBhIHNpbXBsZQogIHRyYW5zY3JpcHRpb24gb2YgVGhlcmVzYSdzIG5vdGVib29rIGJlZm9yZSBJIHN0YXJ0ZWQgbWVzc2luZyB3aXRoCiAgaXQuICBUaGlzIGRpcmVjdG9yeSBpcyBpbnRlbmRlZCB0byB0cmFjZSBiYWNrIGFuZCBzaG93IHRoYXQgdGhlCiAgcmVzdWx0cyBJIGFtIGdldHRpbmcgYXJlIHZlcnkgc2ltaWxhciB0byBUaGVyZXNhJ3MgLS0gd2hpY2ggaXMgdHJ1ZSwKICBidXQgdGhlcmUgYXJlIHNvbWUgZGlmZmVyZW5jZXMgaW50cm9kdWNlZCBieSB0aGUgc2xpZ2h0bHkgZGlmZmVyZW50CiAgZmlsdGVyaW5nIHBlcmZvcm1lZCBhbmQgdGhlIHVzYWdlIG9mIFVNSSBkZWR1cGxpY2F0ZWQgaW5wdXRzLgorIEluIHRoZSBub3RlYm9vaywgYWZ0ZXIgdGhlIDAzIHNlY3Rpb24sIHRoZXJlIGlzIGEgbGFyZ2UgbnVtYmVyIG9mCiAgbm90LXJ1biBibG9ja3MuICBUaGVzZSBhcmUgY29weS9wYXN0ZWQgZnJvbSBUaGVyZXNhJ3Mgbm90ZWJvb2sgYW5kCiAgcHJvdmlkZSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGNoYW5nZXMuICBJIGFtIHByZXR0eSBzdXJlIHRoZXkKICBhbGwgc3RpbGwgd29yayBhbmQgb25lIGlzIHdlbGNvbWUgdG8gcnVuIHRoZW0uCisgMDRpbmNsdXNpb25fY29tcGFyaXNvbnM6IEV2ZXJ5IGluZm9ybWF0aXZlIGNvbXBhcmlzb24gYWdhaW5zdCB3dAogIHNhbXBsZXMgcmVzaWRlcyBoZXJlLiAgV2UgaGF2ZSBpbiB0aGVzZSBmaWxlcyBldmVyeSBnZW5lIHdoaWNoIGlzCiAgaGlnaGx5IG9ic2VydmVkIGluIHRoZSB3dCBzYW1wbGVzLCBhbmQgYXMgc3VjaCwgYXJlIGV4cGVjdGVkIHRvIGJlCiAgdGhlIHJlc3VsdCBvZiBtUk5BcyBub24tc3BlY2lmaWNhbGx5IGJpbmRpbmcgZHVyaW5nIHRoZSBUUkFQCiAgZXhwZXJpbWVudC4KKyAwNWluY2x1c2lvbl92b2xjYW5vX21hOiBQbG90cyBvZiB0aGUgMDQgcmVzdWx0cy4gIEEgcXVpY2sgYW5kIGVhc3kKICB3YXkgdG8gZ2V0IGEgZmVlbGluZyBmb3Igd2hhdCB3YXMgbm9uIHNwZWNpZmljLiAgV2Uga2luZCBvZgogIGhvcGUgdG8gc2VlIGEgZ3JhYi1iYWcgb2YgcmFuZG9tbmVzcyBoZXJlLgorIChoYWggSSBjYW5ub3QgY291bnQsIHRoZXJlIGlzIG5vIDA2IGRpcmVjdG9yeSksIEkgdGhpbmsgSSBoYWQgb25lCiAgd2l0aCBncHJvZmlsZXIgb2YgdGhlIHd0IHN0dWZmLCBidXQgZGVsZXRlZCBpdC4KKyAwN2luY2x1ZGVkX3N0cmljdF9nZW5lc19leGNlbDogQSBsYXJnZSB4bHN4IGZpbGUgb2YgYWxsIGhpZ2gtd3QgZ2VuZQogIElEcy4KKyAwOGZ1bGxfY29udHJhc3RzX2V4Y2VsOiBUaGUgbGFyZ2UgeGxzeCBvdXRwdXQgZmlsZXMgY29tcGFyaW5nCiAgZXZlcnl0aGluZyB3aGljaCBpcyBfbm90XyB3dC4gIEUuZy4gdGhpcyBoYXMgdGhlIGhldGVyb3p5Z291cyBhbmQKICBrbm9ja291dCBjb21wYXJpc29ucyBvZiBnZW5vdHlwZSwgbG9jYXRpb24sIGFuZCB0aW1lLiAgTm8gZ2VuZXMgd2VyZQogIGV4Y2x1ZGVkIGZyb20gdGhlc2UgdGFibGVzLgorIDA5ZnVsbF9jb250cmFzdHNfaW50ZXJzZWN0aW9uczogVGhlIHNldCBvZiBpbnRlcnNlY3Rpb25zIG9mIGdlbmVzCiAgYW1vbmcgdGhlIG5vdC1maWx0ZXJlZCBjb21wYXJpc29ucy4KKyAxMGdlbm90eXBlX2NvbnRyYXN0c19leGNlbDogVGhpcyBpcyBlZmZlY3RpdmVseSBhIGNvcHkgb2YgdGhlIDA4CiAgZmlsZXMsIGJ1dCB3aXRoIG9ubHkgdGhvc2UgZ2VuZXMgaGlnaGVyIGluIHRoZSBoZXQva28gc2FtcGxlcyB0aGFuCiAgdGhlaXIgY29ycmVzcG9uZGluZyB3dCBzYW1wbGVzLiAgRS5nLiB0aGlzIHRha2UgdGhlIDA4IHJlc3VsdHMgYW5kCiAga2VlcHMgb25seSB0aGUgc3R1ZmYgaW4gdGhlIDA3IGRpcmVjdG9yeS4KKyAxMWVucmljaG1lbnRfZXhjZWw6IFRoZSB2YXJpb3VzIHJlc3VsdHMgZnJvbSBjbHVzdGVyUHJvZmlsZXIgYW5kCiAgZ1Byb2ZpbGVyMiwgdGhlc2UgdGFrZSB0aGUgZ2VuZXMgaW4gdGhlIG9mIHNpZ25pZmljYW50IChwIDw9IDAuMDUsCiAgfGxmY3wgPj0gMS4wIG9yIHdoYXRldmVyKSBzZXQgZnJvbSB0aGUgMTBnZW5vdHlwZV9jb250cmFzdHNfZXhjZWwKICBkaXJlY3RvcnkgYW5kIHBhc3MgdGhlbSB0byB0aGUgb3Zlci1lbnJpY2htZW50IGFuZCBnZW5lIHNldCBhbmFseXNlcwogIGFnYWluc3QgYSBtaXggb2YgR08sIHJlYWN0b21lLCB0cmFuc2NyaXB0aW9uLWZhY3RvcnMsIG1pUk5BLCBLRUdHLAogIG1TaWdEQiwgZXRjLi4uCisgMTJjbHVzdGVycHJvZmlsZXJfcGxvdHM6IFBsb3RzIGZyb20gMTEuCisgMTNnZW5vdHlwZV9tYV92b2xjYW5vOiBNQSBhbmQgdm9sY2FubyBwbG90cyBvZiB0aGUga28vaGV0CiAgY29tcGFyaXNvbnMgaW4gcGRmIGZvcm1hdC4gIFRoZXNlIGluY2x1ZGUgbGFiZWxzIG9mIHNwZWNpZmljIGdlbmVzCiAgb2YgcGFydGljdWxhciBpbnRlcmVzdC4KKyAxNGdlbm90eXBlX3N0cmljdF9jb250cmFzdHNfZXhjZWw6IEEgcmVwZXRpdGlvbiBvZiAxMCBhYm92ZSwgYnV0CiAgd2l0aCBhIHN0cmljdGVyIGRlZmluaXRpb24gb2YgJ3NpZ25pZmljYW50Jy4KKyAxNTogeGxzeCBvdXRwdXQgZnJvbSBjbHVzdGVyUHJvZmlsZXIvZ1Byb2ZpbGVyMiBvZiB0aGUgcmVzdWx0cyBmcm9tCiAgMTQuCisgMTZjbHVzdGVyUHJvZmlsZXJfcGxvdHM6IFBsb3RzIGZyb20gMTUuCisgMTdmdWxsX2xvY2F0aW9uX2NvbnRyYXN0czogVGhlIHRhYmxlcyBjb21wYXJpbmcgcGFpcmVkIGdlbm90eXBlCiAgc2FtcGxldHlwZXMgYnkgbG9jYXRpb24gKHJldGluYSwgZGxnbiwgc2NuKS4gIFRoZXNlIHRhYmxlcyBkbyBub3QKICByZW1vdmUgYW55IGdlbmVzIG9ic2VydmVkIGhpZ2hlciBpbiB0aGVpciBjb3JyZXNwb25kaW5nIHd0LgorIDE4bG9jYXRpb25fY29udHJhc3RzOiBQb3N0IGZpbHRlcmluZyBjb3BpZXMgb2YgMTcuCisgMTk6IFRoZSB4bHN4IG91dHB1dHMgb2YgZ1Byb2ZpbGVyMi9jbHVzdGVyUHJvZmlsZXIgZm9yIDE4LgorIDE5Y2x1c3RlclByb2ZpbGVyX3Bsb3RzOiAoSSB0aGluayB0aGlzIHNob3VsZCBiZSAyMCk6IFBsb3RzIGZyb20gMTkuCisgMjBsb2NhdGlvbl9tYV92b2xjYW5vOiBNQS92b2xjYW5vIHBsb3RzIGZyb20gMTguCisgMjFsb2NhdGlvbl9zdHJpY3RfY29udHJhc3RzOiBTYW1lIGFzIDE0LCBidXQgZm9yIHRoZSBsb2NhdGlvbnMKICAoc3RyaWN0ZXIgcC12YWx1ZS9sZmMpLgorIDIyOiBPbnRvbG9neSBldGMuIHJlc3VsdHMgZnJvbSAyMS4KKyAyM2NsdXN0ZXJQcm9maWxlcl9wbG90czogUGxvdHMgZnJvbSAyMi4KKyAyNGxvY2F0aW9uX21hX3ZvbGNhbm9fc3RyaWN0OiBTYW1lIGFzIDIwLCBidXQgc3RyaWN0ZXIuCisgMjVmdWxsX2NvbnRyYXN0c190aW1lOiBTYW1lIGFzIDE3LCBidXQgdGhpcyB0aW1lIGNvbXBhcmluZyBhY3Jvc3MKICBwMDggYW5kIHAxNS4KKyAyNnRpbWVfY29udHJhc3RzOiBFeGNsdWRpbmcgdGhlIGhpZ2gtd3QgZnJvbSAyNS4KKyAyNzogVGhlIG9udG9sb2d5IHhsc3ggZmlsZXMgZnJvbSAyNi4KKyAyOGNsdXN0ZXJQcm9maWxlcl9wbG90czogVGhlIHBsb3RzIGZyb20gMjcuCisgMjl0aW1lX21hX3ZvbGNhbm86IE1BL3ZvbGNhbm8gcGxvdHMgZnJvbSAyNi4KKyAzMHRpbWVfc3RyaWN0X2NvbnRyYXN0c19leGNlbDogUmVwZWF0aW5nIHRoZSBzdHJpY3QgZmMvcCBjYWxsIGZvcgogIHRoZSB0aW1lIGNvbXBhcmlzb25zLgorIDMxOiBUaGUgb250b2xvZ3kgeGxzeCBmaWxlcyBmcm9tIDMwLgorIDMyOiBQbG90cyBvZiAzMS4KKyAzM3RyYW5zbGF0b21lX3hsc3g6IHhsc3ggcmVzdWx0cyBvZiB1bmZpbHRlcmVkIGEvYiAvIGMvZCBjb21wYXJpc29uczogdGhlCiAgdHJhbnNsYXRvbWVzLiAgTm90ZTogdGhlcmUgaXMgYSBwcmUvcG9zdCBzdmEgdmVyc2lvbiBvZiB0aGlzIGJlY2F1c2UKICBvZiB0aGUgY29tcGxleGl0eSBvZiB0aGVzZSBjb250cmFzdHMuICBUaGlzIGluY2x1ZGVzIGEgcGVjdWxpYXIKICBzdWJ0cmFjdGlvbiBJIGRpZCB1c2luZyB0aGUgZGVzZXEgcmVzdWx0cy4KKyAzNHRyYW5zbGF0b21lX2Rlc2Vxc3ViX3hsc3g6IDMzLCBidXQgdXNpbmcgdGhlIERFU2VxMiByZXN1bHRzIHRvCiAgZXhjbHVkZSBnZW5lcy4KKyAzNXRyYW5zbGF0b21lX3VuaW9uOiBVc2luZyB1bmlvbnMvaW50ZXJzZWN0aW9ucyB0byBmaWx0ZXIgZ2VuZXMuCisgMzZ1cHNldF9nZW5vdHlwZTogR2V0dGluZyBncm91cHMgb2YgZ2VuZXMgYnkgdW5pb24vaW50ZXJzZWN0aW9uIGZyb20KICB1cHNldC4KKyAzN3Vwc2V0X2xvY2F0aW9uOiBJYmlkIGJ1dCB0aGUgbG9jYXRpb25zLgorIDM4bXNpZ2RiOiBVc2luZyBHU1ZBIHRvIGNvbXBhcmUgdGhlIHJlc3VsdHMgYWdhaW5zdCB0aGUgbWgvbTEvZXRjCiAgZ2VuZSBzZXRzIGZyb20gdGhlIG1TaWdEQiByZXZpc2lvbiAyMDI0LiAgSSBhbSBub3Qgc3VyZSBhYm91dCB0aGUKICBsZWdhbGl0eSBvZiB0aGlzIGFuZCBtYXkgaGF2ZSByZW1vdmVkIGl0LgoKSSB0cmllZCBvdXQgc29tZSByYW5kb20gc3R1ZmYgYWZ0ZXIgIzM4IGJ1dCBkaWQgbm90IHdyaXRlIHRoZSByZXN1bHRzLgoKIyBSb2FkbWFwCgojIEJpYmxpb2dyYXBoeQo=