1 TODO

2 Changelog

3 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.

4 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)

5 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.

6 Roadmap

7 Bibliography

LS0tCnRpdGxlOiAiSVBSR0MgdHJhbnNsYXRvbWUgYW5hbHlzZXM6IGByIFN5cy5nZXRlbnYoJ1ZFUlNJT04nKWA6IFJFQURNRS4iCmF1dGhvcjogImF0YiBhYmVsZXdAZ21haWwuY29tIgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgY29kZV9mb2xkaW5nOiBzaG93CiAgICBmaWdfY2FwdGlvbjogdHJ1ZQogICAgZmlnX2hlaWdodDogNwogICAgZmlnX3dpZHRoOiA3CiAgICBoaWdobGlnaHQ6IHplbmJ1cm4KICAgIGtlZXBfbWQ6IGZhbHNlCiAgICBtb2RlOiBzZWxmY29udGFpbmVkCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICAgIHNlbGZfY29udGFpbmVkOiB0cnVlCiAgICB0aGVtZTogcmVhZGFibGUKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OgogICAgICBjb2xsYXBzZWQ6IGZhbHNlCiAgICAgIHNtb290aF9zY3JvbGw6IGZhbHNlCiAgcm1kZm9ybWF0czo6cmVhZHRoZWRvd246CiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cKICAgIGRmX3ByaW50OiBwYWdlZAogICAgZmlnX2NhcHRpb246IHRydWUKICAgIGZpZ19oZWlnaHQ6IDcKICAgIGZpZ193aWR0aDogNwogICAgaGlnaGxpZ2h0OiB6ZW5idXJuCiAgICB3aWR0aDogMzAwCiAgICBrZWVwX21kOiBmYWxzZQogICAgbW9kZTogc2VsZmNvbnRhaW5lZAogICAgdG9jX2Zsb2F0OiB0cnVlCiAgQmlvY1N0eWxlOjpodG1sX2RvY3VtZW50OgogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgY29kZV9mb2xkaW5nOiBzaG93CiAgICBmaWdfY2FwdGlvbjogdHJ1ZQogICAgZmlnX2hlaWdodDogNwogICAgZmlnX3dpZHRoOiA3CiAgICBoaWdobGlnaHQ6IHplbmJ1cm4KICAgIGtlZXBfbWQ6IGZhbHNlCiAgICBtb2RlOiBzZWxmY29udGFpbmVkCiAgICB0b2NfZmxvYXQ6IHRydWUKLS0tCgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgpib2R5LCB0ZCB7CiAgZm9udC1zaXplOiAxNnB4Owp9CmNvZGUuciB7CiAgZm9udC1zaXplOiAxNnB4Owp9CnByZSB7CiAgZm9udC1zaXplOiAxNnB4Cn0KYm9keSAubWFpbi1jb250YWluZXIgewogIG1heC13aWR0aDogMTYwMHB4Owp9Cjwvc3R5bGU+CgpgYGB7ciBvcHRpb25zLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19rbml0JHNldCgKICBwcm9ncmVzcyA9IFRSVUUsIHZlcmJvc2UgPSBUUlVFLCB3aWR0aCA9IDkwLCBlY2hvID0gVFJVRSkKa25pdHI6Om9wdHNfY2h1bmskc2V0KAogIGVycm9yID0gVFJVRSwgZmlnLndpZHRoID0gOCwgZmlnLmhlaWdodCA9IDgsIGZpZy5yZXRpbmEgPSAyLAogIG91dC53aWR0aCA9ICIxMDAlIiwgZGV2ID0gInBuZyIsCiAgZGV2LmFyZ3MgPSBsaXN0KHBuZyA9IGxpc3QodHlwZSA9ICJjYWlyby1wbmciKSkpCm9sZF9vcHRpb25zIDwtIG9wdGlvbnMoc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFLCBrbml0ci5kdXBsaWNhdGUubGFiZWwgPSAiYWxsb3ciKQpnZ3Bsb3QyOjp0aGVtZV9zZXQoZ2dwbG90Mjo6dGhlbWVfYncoYmFzZV9zaXplID0gMTIpKQp2ZXIgPC0gU3lzLmdldGVudigiVkVSU0lPTiIpCmBgYAoKIyBUT0RPCgojIENoYW5nZWxvZwoKIyBJbnRyb2R1Y3Rpb24KClRoaXMgZG9jdW1lbnQgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBzb21lIGJhY2tncm91bmQgaW50byB0aGVzZQphbmFseXNlcywgcGFja2FnaW5nIHRoZW0gaW50byBhIGRvd25sb2FkYWJsZSBjb250YWluZXIsIGFuZCBhbnkKbm90ZXMvaWRlYXMgdGhhdCBjcm9zcyBteSBtaW5kLgoKVGhlIHNlY3Rpb24gdGl0bGVkICdSb2FkbWFwJyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIGEgcXVpY2sgcmVmZXJlbmNlCnRvIGZpbmQgYW55IGZpZ3VyZXMgcHJvZHVjZWQgYnkgdGhlc2UgYW5hbHlzZXMuCgojIFBhY2thZ2luZyB0aGUgY291bnRzCgpDdXJyZW50bHksIHRoZSBjb250YWluZXIgaW1hZ2UgZm9yIHRoZXNlIGFuYWx5c2VzIHN0YXJ0cyBhdCB0aGUgbWFwcGVkCmNvdW50cyBhbmQgcHJvZ3Jlc3NlcyB0aHJvdWdoIHRoZSBtYXJrZG93biBkb2N1bWVudHMgdG8gY3JlYXRlIHRoZQpodG1sIGxvZ3MsIGZpZ3VyZXMsIGFuZCB4bHN4IGRvY3VtZW50cy4gIFRoZSBmb2xsb3dpbmcgYmxvY2sgcmVhZHMgdGhlCnByb2plY3QgbWV0YWRhdGEgaW4gb3JkZXIgdG8gY3JlYXRlIGFuIGFyY2hpdmUgZmlsZSBjb250YWluaW5nIHRob3NlCmNvdW50cy4gIE9uZSBtaWdodCByZWFzb25hYmx5IGFzayB3aHkgaXQgaXMgbm90IGNvbXByZXNzZWQgYnkgZGVmYXVsdCwgdGhlCmluZGl2aWR1YWwgY291bnQgdGFibGVzIGFyZSBhZ2dyZXNzaXZlbHkgY29tcHJlc3NlZCwgc28gdGhhdCB3b3VsZCBiZQpyZWR1bmRhbnQgcmVkdW5kYW50LgoKYGBge3IsIGV2YWw9RkFMU0V9CmRlZHVwbGljYXRlZF90YXJiYWxsIDwtIHRhcl9tZXRhX2NvbHVtbigic2FtcGxlX3NoZWV0cy8yMDI0MDYwNl9vbmx5X3VtZF9zZXF1ZW5jZWRfbW9kaWZpZWQueGxzeCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSAidW1pX2RlZHVwX291dHB1dF9jb3VudCIsIG91dHB1dCA9ICJkZWR1cGxpY2F0ZWRfY291bnRzLnRhciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbiA9IE5VTEwpCm9yaWdpbmFsX3RhcmJhbGwgPC0gdGFyX21ldGFfY29sdW1uKCJzYW1wbGVfc2hlZXRzLzIwMjQwNjA2X29ubHlfdW1kX3NlcXVlbmNlZF9tb2RpZmllZC54bHN4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9ICJoaXNhdF9jb3VudF90YWJsZSIsIG91dHB1dCA9ICJub25fZGVkdXBsaWNhdGVkX2NvdW50cy50YXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb24gPSBOVUxMKQpzeW1saW5rX3RhcmJhbGwgPC0gIHRhcl9tZXRhX2NvbHVtbigic2FtcGxlX3NoZWV0cy8yMDI0MDYwNl9vbmx5X3VtZF9zZXF1ZW5jZWRfbW9kaWZpZWQueGxzeCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9ICJzeW1saW5rIiwgb3V0cHV0ID0gInN5bWxpbmtfY291bnRzLnRhciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uID0gTlVMTCkKYGBgCgoKIyBPdXRwdXQgb3JnYW5pemF0aW9uCgpUaGlzIGl0ZXJhdGlvbiBvZiB0aGUgaXByZ2MgYW5hbHlzZXMgYWRvcHRlZCBhIHBlY3VsaWFyIG9yZ2FuaXphdGlvbgpzdHJhdGVneS4gIEVhY2ggc2V0IG9mIGltYWdlcy94bHN4L2V0YyBmaWxlcyBwcm9kdWNlZCBnb2VzIGludG8gYQpzZXBhcmF0ZSBudW1lcmljIHByZWZpeGVkIGRpcmVjdG9yeS4KCkkgZGlkIHRoaXMgcHJpbWFyaWx5IGluIGFuIGF0dGVtcHQgdG8gbWFrZSBjbGVhciB0aGUgZGlzdGluY3Rpb24KYmV0d2VlbiBvYnNlcnZhdGlvbnMgYmVmb3JlIHJlbW92aW5nIGdlbmVzIGhpZ2hlciBpbiB0aGUgd3QKc2FtcGxlcyB2cy4gYWZ0ZXIgd3QgcmVtb3ZhbC4KCisgMDFkaWFnbm9zdGljX2ltYWdlczogVGhlIHNldCBvZiBwbG90cyB0YWtlbiBiZWZvcmUgZG9pbmcgcHJldHR5IG11Y2gKICBhbnl0aGluZyBlbHNlLiAgVGhpcyBpbmNsdWRlcyBzaG93aW5nIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuCiAgcHJlL3Bvc3QgdW1pLWRlZHVwbGljYXRpb24sIGNsdXN0ZXJpbmcgYmVmb3JlIHJlbW92aW5nIHRoZQogIHByb2JsZW1hdCBzYW1wbGVzIChlaXRoZXIgZHVlIHRvIGxvdyBjb3ZlcmFnZSBvciBzZXJpb3VzbHkKICBpbmFwcHJvcHJpYXRlIHNhbXBsZSBjbHVzdGVyaW5nKS4gIE5vdGU6IGFsbCBvZiBwbG90cyBvZiB0aGUgJ3YxJwogIGRhdGEgYXJlIGV4Y2x1ZGVkOyB0aGV5IGFyZSBzdWZmaWNpZW50bHkgcmVkdW5kYW50IHRoYXQgSSBkcm9wcGVkCiAgdGhlbS4KKyAwMmZpbHRlcmVkX2ltYWdlczogTW9zdGx5IGEgcmVwZXRpdGlvbiBvZiB0aGUgMDEgZGlyZWN0b3J5LCBidXQgbm93CiAgdGhlIGZpbmFsIHNldCBvZiBzYW1wbGVzL2dlbmVzIHdoaWNoIHN1cnZpdmVkIGZpbHRlcmluZy4gIElmIHdlIHdlcmUKICB0byB1c2UgYW55IG9mIHRoZSBkaWFnbm9zdGljIGltYWdlcyBhcyBzdXBwbGVtZW50YWwsIHRoZXkgd291bGQgYmUKICBoZXJlLiAobm9uZSB3ZXJlKQorIDAzdGhlcmVzYV9jb21wYXJpc29uX2V4Y2VsOiBUaGlzIGRvY3VtZW50IHdhcyBpbnRlbmRlZCBhcyBhIHNpbXBsZQogIHRyYW5zY3JpcHRpb24gb2YgVGhlcmVzYSdzIG5vdGVib29rIGJlZm9yZSBJIHN0YXJ0ZWQgbWVzc2luZyB3aXRoCiAgaXQuICBUaGlzIGRpcmVjdG9yeSBpcyBpbnRlbmRlZCB0byB0cmFjZSBiYWNrIGFuZCBzaG93IHRoYXQgdGhlCiAgcmVzdWx0cyBJIGFtIGdldHRpbmcgYXJlIHZlcnkgc2ltaWxhciB0byBUaGVyZXNhJ3MgLS0gd2hpY2ggaXMgdHJ1ZSwKICBidXQgdGhlcmUgYXJlIHNvbWUgZGlmZmVyZW5jZXMgaW50cm9kdWNlZCBieSB0aGUgc2xpZ2h0bHkgZGlmZmVyZW50CiAgZmlsdGVyaW5nIHBlcmZvcm1lZCBhbmQgdGhlIHVzYWdlIG9mIFVNSSBkZWR1cGxpY2F0ZWQgaW5wdXRzLgorIEluIHRoZSBub3RlYm9vaywgYWZ0ZXIgdGhlIDAzIHNlY3Rpb24sIHRoZXJlIGlzIGEgbGFyZ2UgbnVtYmVyIG9mCiAgbm90LXJ1biBibG9ja3MuICBUaGVzZSBhcmUgY29weS9wYXN0ZWQgZnJvbSBUaGVyZXNhJ3Mgbm90ZWJvb2sgYW5kCiAgcHJvdmlkZSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGNoYW5nZXMuICBJIGFtIHByZXR0eSBzdXJlIHRoZXkKICBhbGwgc3RpbGwgd29yayBhbmQgb25lIGlzIHdlbGNvbWUgdG8gcnVuIHRoZW0uCisgMDRpbmNsdXNpb25fY29tcGFyaXNvbnM6IEV2ZXJ5IGluZm9ybWF0aXZlIGNvbXBhcmlzb24gYWdhaW5zdCB3dAogIHNhbXBsZXMgcmVzaWRlcyBoZXJlLiAgV2UgaGF2ZSBpbiB0aGVzZSBmaWxlcyBldmVyeSBnZW5lIHdoaWNoIGlzCiAgaGlnaGx5IG9ic2VydmVkIGluIHRoZSB3dCBzYW1wbGVzLCBhbmQgYXMgc3VjaCwgYXJlIGV4cGVjdGVkIHRvIGJlCiAgdGhlIHJlc3VsdCBvZiBtUk5BcyBub24tc3BlY2lmaWNhbGx5IGJpbmRpbmcgZHVyaW5nIHRoZSBUUkFQCiAgZXhwZXJpbWVudC4KKyAwNWluY2x1c2lvbl92b2xjYW5vX21hOiBQbG90cyBvZiB0aGUgMDQgcmVzdWx0cy4gIEEgcXVpY2sgYW5kIGVhc3kKICB3YXkgdG8gZ2V0IGEgZmVlbGluZyBmb3Igd2hhdCB3YXMgbm9uIHNwZWNpZmljLiAgV2Uga2luZCBvZgogIGhvcGUgdG8gc2VlIGEgZ3JhYi1iYWcgb2YgcmFuZG9tbmVzcyBoZXJlLgorIChoYWggSSBjYW5ub3QgY291bnQsIHRoZXJlIGlzIG5vIDA2IGRpcmVjdG9yeSksIEkgdGhpbmsgSSBoYWQgb25lCiAgd2l0aCBncHJvZmlsZXIgb2YgdGhlIHd0IHN0dWZmLCBidXQgZGVsZXRlZCBpdC4KKyAwN2luY2x1ZGVkX3N0cmljdF9nZW5lc19leGNlbDogQSBsYXJnZSB4bHN4IGZpbGUgb2YgYWxsIGhpZ2gtd3QgZ2VuZQogIElEcy4KKyAwOGZ1bGxfY29udHJhc3RzX2V4Y2VsOiBUaGUgbGFyZ2UgeGxzeCBvdXRwdXQgZmlsZXMgY29tcGFyaW5nCiAgZXZlcnl0aGluZyB3aGljaCBpcyBfbm90XyB3dC4gIEUuZy4gdGhpcyBoYXMgdGhlIGhldGVyb3p5Z291cyBhbmQKICBrbm9ja291dCBjb21wYXJpc29ucyBvZiBnZW5vdHlwZSwgbG9jYXRpb24sIGFuZCB0aW1lLiAgTm8gZ2VuZXMgd2VyZQogIGV4Y2x1ZGVkIGZyb20gdGhlc2UgdGFibGVzLgorIDA5ZnVsbF9jb250cmFzdHNfaW50ZXJzZWN0aW9uczogVGhlIHNldCBvZiBpbnRlcnNlY3Rpb25zIG9mIGdlbmVzCiAgYW1vbmcgdGhlIG5vdC1maWx0ZXJlZCBjb21wYXJpc29ucy4KKyAxMGdlbm90eXBlX2NvbnRyYXN0c19leGNlbDogVGhpcyBpcyBlZmZlY3RpdmVseSBhIGNvcHkgb2YgdGhlIDA4CiAgZmlsZXMsIGJ1dCB3aXRoIG9ubHkgdGhvc2UgZ2VuZXMgaGlnaGVyIGluIHRoZSBoZXQva28gc2FtcGxlcyB0aGFuCiAgdGhlaXIgY29ycmVzcG9uZGluZyB3dCBzYW1wbGVzLiAgRS5nLiB0aGlzIHRha2UgdGhlIDA4IHJlc3VsdHMgYW5kCiAga2VlcHMgb25seSB0aGUgc3R1ZmYgaW4gdGhlIDA3IGRpcmVjdG9yeS4KKyAxMWVucmljaG1lbnRfZXhjZWw6IFRoZSB2YXJpb3VzIHJlc3VsdHMgZnJvbSBjbHVzdGVyUHJvZmlsZXIgYW5kCiAgZ1Byb2ZpbGVyMiwgdGhlc2UgdGFrZSB0aGUgZ2VuZXMgaW4gdGhlIG9mIHNpZ25pZmljYW50IChwIDw9IDAuMDUsCiAgfGxmY3wgPj0gMS4wIG9yIHdoYXRldmVyKSBzZXQgZnJvbSB0aGUgMTBnZW5vdHlwZV9jb250cmFzdHNfZXhjZWwKICBkaXJlY3RvcnkgYW5kIHBhc3MgdGhlbSB0byB0aGUgb3Zlci1lbnJpY2htZW50IGFuZCBnZW5lIHNldCBhbmFseXNlcwogIGFnYWluc3QgYSBtaXggb2YgR08sIHJlYWN0b21lLCB0cmFuc2NyaXB0aW9uLWZhY3RvcnMsIG1pUk5BLCBLRUdHLAogIG1TaWdEQiwgZXRjLi4uCisgMTJjbHVzdGVycHJvZmlsZXJfcGxvdHM6IFBsb3RzIGZyb20gMTEuCisgMTNnZW5vdHlwZV9tYV92b2xjYW5vOiBNQSBhbmQgdm9sY2FubyBwbG90cyBvZiB0aGUga28vaGV0CiAgY29tcGFyaXNvbnMgaW4gcGRmIGZvcm1hdC4gIFRoZXNlIGluY2x1ZGUgbGFiZWxzIG9mIHNwZWNpZmljIGdlbmVzCiAgb2YgcGFydGljdWxhciBpbnRlcmVzdC4KKyAxNGdlbm90eXBlX3N0cmljdF9jb250cmFzdHNfZXhjZWw6IEEgcmVwZXRpdGlvbiBvZiAxMCBhYm92ZSwgYnV0CiAgd2l0aCBhIHN0cmljdGVyIGRlZmluaXRpb24gb2YgJ3NpZ25pZmljYW50Jy4KKyAxNTogeGxzeCBvdXRwdXQgZnJvbSBjbHVzdGVyUHJvZmlsZXIvZ1Byb2ZpbGVyMiBvZiB0aGUgcmVzdWx0cyBmcm9tCiAgMTQuCisgMTZjbHVzdGVyUHJvZmlsZXJfcGxvdHM6IFBsb3RzIGZyb20gMTUuCisgMTdmdWxsX2xvY2F0aW9uX2NvbnRyYXN0czogVGhlIHRhYmxlcyBjb21wYXJpbmcgcGFpcmVkIGdlbm90eXBlCiAgc2FtcGxldHlwZXMgYnkgbG9jYXRpb24gKHJldGluYSwgZGxnbiwgc2NuKS4gIFRoZXNlIHRhYmxlcyBkbyBub3QKICByZW1vdmUgYW55IGdlbmVzIG9ic2VydmVkIGhpZ2hlciBpbiB0aGVpciBjb3JyZXNwb25kaW5nIHd0LgorIDE4bG9jYXRpb25fY29udHJhc3RzOiBQb3N0IGZpbHRlcmluZyBjb3BpZXMgb2YgMTcuCisgMTk6IFRoZSB4bHN4IG91dHB1dHMgb2YgZ1Byb2ZpbGVyMi9jbHVzdGVyUHJvZmlsZXIgZm9yIDE4LgorIDE5Y2x1c3RlclByb2ZpbGVyX3Bsb3RzOiAoSSB0aGluayB0aGlzIHNob3VsZCBiZSAyMCk6IFBsb3RzIGZyb20gMTkuCisgMjBsb2NhdGlvbl9tYV92b2xjYW5vOiBNQS92b2xjYW5vIHBsb3RzIGZyb20gMTguCisgMjFsb2NhdGlvbl9zdHJpY3RfY29udHJhc3RzOiBTYW1lIGFzIDE0LCBidXQgZm9yIHRoZSBsb2NhdGlvbnMKICAoc3RyaWN0ZXIgcC12YWx1ZS9sZmMpLgorIDIyOiBPbnRvbG9neSBldGMuIHJlc3VsdHMgZnJvbSAyMS4KKyAyM2NsdXN0ZXJQcm9maWxlcl9wbG90czogUGxvdHMgZnJvbSAyMi4KKyAyNGxvY2F0aW9uX21hX3ZvbGNhbm9fc3RyaWN0OiBTYW1lIGFzIDIwLCBidXQgc3RyaWN0ZXIuCisgMjVmdWxsX2NvbnRyYXN0c190aW1lOiBTYW1lIGFzIDE3LCBidXQgdGhpcyB0aW1lIGNvbXBhcmluZyBhY3Jvc3MKICBwMDggYW5kIHAxNS4KKyAyNnRpbWVfY29udHJhc3RzOiBFeGNsdWRpbmcgdGhlIGhpZ2gtd3QgZnJvbSAyNS4KKyAyNzogVGhlIG9udG9sb2d5IHhsc3ggZmlsZXMgZnJvbSAyNi4KKyAyOGNsdXN0ZXJQcm9maWxlcl9wbG90czogVGhlIHBsb3RzIGZyb20gMjcuCisgMjl0aW1lX21hX3ZvbGNhbm86IE1BL3ZvbGNhbm8gcGxvdHMgZnJvbSAyNi4KKyAzMHRpbWVfc3RyaWN0X2NvbnRyYXN0c19leGNlbDogUmVwZWF0aW5nIHRoZSBzdHJpY3QgZmMvcCBjYWxsIGZvcgogIHRoZSB0aW1lIGNvbXBhcmlzb25zLgorIDMxOiBUaGUgb250b2xvZ3kgeGxzeCBmaWxlcyBmcm9tIDMwLgorIDMyOiBQbG90cyBvZiAzMS4KKyAzM3RyYW5zbGF0b21lX3hsc3g6IHhsc3ggcmVzdWx0cyBvZiB1bmZpbHRlcmVkIGEvYiAvIGMvZCBjb21wYXJpc29uczogdGhlCiAgdHJhbnNsYXRvbWVzLiAgTm90ZTogdGhlcmUgaXMgYSBwcmUvcG9zdCBzdmEgdmVyc2lvbiBvZiB0aGlzIGJlY2F1c2UKICBvZiB0aGUgY29tcGxleGl0eSBvZiB0aGVzZSBjb250cmFzdHMuICBUaGlzIGluY2x1ZGVzIGEgcGVjdWxpYXIKICBzdWJ0cmFjdGlvbiBJIGRpZCB1c2luZyB0aGUgZGVzZXEgcmVzdWx0cy4KKyAzNHRyYW5zbGF0b21lX2Rlc2Vxc3ViX3hsc3g6IDMzLCBidXQgdXNpbmcgdGhlIERFU2VxMiByZXN1bHRzIHRvCiAgZXhjbHVkZSBnZW5lcy4KKyAzNXRyYW5zbGF0b21lX3VuaW9uOiBVc2luZyB1bmlvbnMvaW50ZXJzZWN0aW9ucyB0byBmaWx0ZXIgZ2VuZXMuCisgMzZ1cHNldF9nZW5vdHlwZTogR2V0dGluZyBncm91cHMgb2YgZ2VuZXMgYnkgdW5pb24vaW50ZXJzZWN0aW9uIGZyb20KICB1cHNldC4KKyAzN3Vwc2V0X2xvY2F0aW9uOiBJYmlkIGJ1dCB0aGUgbG9jYXRpb25zLgorIDM4bXNpZ2RiOiBVc2luZyBHU1ZBIHRvIGNvbXBhcmUgdGhlIHJlc3VsdHMgYWdhaW5zdCB0aGUgbWgvbTEvZXRjCiAgZ2VuZSBzZXRzIGZyb20gdGhlIG1TaWdEQiByZXZpc2lvbiAyMDI0LiAgSSBhbSBub3Qgc3VyZSBhYm91dCB0aGUKICBsZWdhbGl0eSBvZiB0aGlzIGFuZCBtYXkgaGF2ZSByZW1vdmVkIGl0LgoKSSB0cmllZCBvdXQgc29tZSByYW5kb20gc3R1ZmYgYWZ0ZXIgIzM4IGJ1dCBkaWQgbm90IHdyaXRlIHRoZSByZXN1bHRzLgoKIyBSb2FkbWFwCgojIEJpYmxpb2dyYXBoeQo=