Below is the popARRAY script for Togiak and Kotzebue pairwise Fst in
a Manhattan plot
# togiak saf
angsd -b /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/pherr_togiak_bamslist.txt \
-r ${chrom}: \
-sites /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/gls/togiak/pherr_wholegenome_polymorphic.sites \
-ref /center1/GLASSLAB/salmgren/atlantic_herring/GCF_900700415.2_Ch_v2.0.2_genomic.fna \
-anc /center1/GLASSLAB/salmgren/atlantic_herring/GCF_900700415.2_Ch_v2.0.2_genomic.fna \
-out /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/diversity/pherr_${chrom}_TG_polymorphic_folded \
-nThreads 10 \
-GL 1 \
-doGlf 3 \
-doMaf 1 \
-doMajorMinor 1 \
-trim 0 \
-C 50 \
-minMapQ 15 \
-minQ 15 \
-doCounts 1 \
-setminDepth 20 \
-setmaxDepth 100 \
-remove_bads 1 \
-uniqueOnly 1 \
-only_proper_pairs 1 \
-doSaf 1
# kotzebue saf
angsd -b /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/pherr_kotzebue_bamslist.txt \
-r ${chrom}: \
-sites /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/gls/kotzebue/pherr_wholegenome_polymorphic.sites \
-ref /center1/GLASSLAB/salmgren/atlantic_herring/GCF_900700415.2_Ch_v2.0.2_genomic.fna \
-anc /center1/GLASSLAB/salmgren/atlantic_herring/GCF_900700415.2_Ch_v2.0.2_genomic.fna \
-out /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/diversity/pherr_${chrom}_KZ_polymorphic_folded \
-nThreads 10 \
-GL 1 \
-doGlf 3 \
-doMaf 1 \
-doMajorMinor 1 \
-trim 0 \
-C 50 \
-minMapQ 15 \
-minQ 15 \
-doCounts 1 \
-setminDepth 19 \
-setmaxDepth 95 \
-remove_bads 1 \
-uniqueOnly 1 \
-only_proper_pairs 1 \
-doSaf 1
# -doSaf estimates sample allele frequency (saf)
# realSFS (program) uses saf files produced by angsd -doSaf
#estiamte saf, then do sfs
realSFS /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/diversity/pherr_${chrom}_TG_polymorphic_folded.saf.idx \
-fold 1 /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/diversity/pherr_${chrom}_KZ_polymorphic_folded.saf.idx \
-fold 1 > /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/fst/pherr_${chrom}_TG-KZ_polymorphic_folded.sfs
# 2D saf into sfs
# calculate per-site Fst
realSFS fst index /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/diversity/pherr_${chrom}_TG_polymorphic_folded.saf.idx \
-fold 1 /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/diversity/pherr_${chrom}_KZ_polymorphic_folded.saf.idx \
-fold 1 -sfs /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/fst/pherr_${chrom}_TG-KZ_polymorphic_folded.sfs \
-fstout /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/fst/pherr_${chrom}_TG-KZ_polymorphic_folded.sfs.pbs \
-whichFst 1
# which Fst estimator
# sliding window analysis
realSFS fst stats2 /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/fst/pherr_${chrom}_TG-KZ_polymorphic_folded.sfs.pbs.fst.idx \
-win 1 -step 1 > /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/fst/pherr_${chrom}_TG-KZ_polymorphic_folded.sfs.pbs.fst.txt
# across every site, sliding window of 1
# concateante fst files for each chrom
Plot from concatenated fst output files from popARRAY script (R
plotting script is the same for both)
setwd("/Users/sydneyalmgren/Documents/SA_P_Herring/bering_sea_pop_gen_output/sfs_fst_spawning")
# read in chromosome list
chroms <- as.data.frame(read.csv("chromosome_list.csv"))
chroms <- as.data.frame(chroms)
# make sure that numbered column in chromosome list (header for 1,2,3,...) is CHR for easier use with qqman
### calculate by chrom, concatenate
### not necassarily correct? saf and sfs steps not in order
tg.kz1 <- read_delim("pherr_TG-KZ_wholegenome_fst.txt",
skip = 1,
col_types = cols(),
col_names = c("region", "chr", "midpos", "nsites", "fst"),
delim = "\t")
# change to dataframe
tg.kz1 <- as.data.frame(tg.kz1)
# filter out sites <0, make MB pos column
tg.kz1 <- filtered_tg.kz1 <- tg.kz1 %>%
filter(fst >= 0)
tg.kz1 <- tg.kz1 %>%
mutate(midpos_Mb = midpos/1000000)
# add chroms to fst dataframe
tg.kz1 <- left_join(tg.kz1, chroms, by = "chr")
### plot with qqman package
manhattan(tg.kz1, chr = "CHR", bp = "midpos", p = "fst", snp = "nsites",
main = "Togiak vs Kotzebue (calculated by chrom, concatenated)",
logp = FALSE, cex = 0.5, cex.axis = 0.8, ylab=expression(italic(F)[ST]))

This is two scripts: one that estimates saf for Togaik and Kotzebue
separately and calculates folded sfs, then calculates Fst. These scripts
are not submitted as an array
# togiak saf
angsd -b /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/pherr_togiak_bamslist.txt \
-sites /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/gls/togiak/pherr_wholegenome_polymorphic.sites \
-ref /center1/GLASSLAB/salmgren/atlantic_herring/GCF_900700415.2_Ch_v2.0.2_genomic.fna \
-anc /center1/GLASSLAB/salmgren/atlantic_herring/GCF_900700415.2_Ch_v2.0.2_genomic.fna \
-out /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/diversity/togiak/pherr_TG_wholegenome_polymorphic_folded \
-nThreads 10 \
-GL 1 \
-doGlf 3 \
-doMaf 1 \
-doMajorMinor 1 \
-trim 0 \
-C 50 \
-minMapQ 15 \
-minQ 15 \
-doCounts 1 \
-setminDepth 20 \
-setmaxDepth 100 \
-remove_bads 1 \
-uniqueOnly 1 \
-only_proper_pairs 1 \
-doSaf 1
# convert to SFS
realSFS -fold 1 /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/diversity/togiak/pherr_TG_wholegenome_polymorphic_folded.saf.idx > /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/diversity/togiak/pherr_TG_wholegenome_polymorphic_folded.sfs
## repeated above for Kotzebue
# 2D SFS [pop1] [pop2] > [pop1_2]
realSFS /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/diversity/togiak/pherr_TG_wholegenome_polymorphic_folded.saf.idx \
-fold 1 /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/diversity/kotzebue/pherr_KZ_polymorphic_folded.saf.idx \
-fold 1 > /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/diversity/pherr_wholegenome_polymorphic_TG-KZ_folded.sfs
# Fst binary files
realSFS fst index /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/diversity/togiak/pherr_TG_wholegenome_polymorphic_folded.saf.idx \
-fold 1 /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/diversity/kotzebue/pherr_KZ_polymorphic_folded.saf.idx \
-fold 1 -sfs /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/diversity/pherr_wholegenome_polymorphic_TG-KZ_folded.sfs \
-fstout /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/fst/pherr_wholegenome_polymorphic_TG-KZ_folded.sfs.pbs \
-whichFst 1
# get Fst values by sliding window
realSFS fst stats2 /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/fst/pherr_wholegenome_polymorphic_TG-KZ_folded.sfs.pbs.fst.idx \
-win 1 -step 1 > /center1/GLASSLAB/salmgren/lcwgs/ebs_popgen/fst/pherr_wholegenome_polymorphic_TG-KZ_folded.sfs.pbs.fst.txt
Plot for non-array saf, sfs, fst script
### calculate whole genome saf and sfs, then fst folded with whole genome
tg.kz2 <- read_delim("pherr_wholegenome_polymorphic_TG-KZ_folded.sfs.pbs.fst.txt",
skip = 1,
col_types = cols(),
col_names = c("region", "chr", "midpos", "nsites", "fst"),
delim = "\t")
# change to dataframe
tg.kz2 <- as.data.frame(tg.kz2)
# filter out sites <0, make MB pos column
tg.kz2 <- filtered_tg.kz2 <- tg.kz2 %>%
filter(fst >= 0)
tg.kz2 <- tg.kz2 %>%
mutate(midpos_Mb = midpos/1000000)
# add chroms to fst dataframe
tg.kz2 <- left_join(tg.kz2, chroms, by = "chr")
### plot with qqman package
manhattan(tg.kz2, chr = "CHR", bp = "midpos", p = "fst", snp = "nsites",
main = "Togiak vs Kotzebue (calculated by whole genome)",
logp = FALSE, cex = 0.5, cex.axis = 0.8, ylab=expression(italic(F)[ST]))

These Manhattan plots look very different?? Also I can’t figure out
where along the way the global Fst is estiamted (I’ve done this before,
but I didn’t take good enough notes)
LS0tCnRpdGxlOiAidGVzdF9zYWZfc2ZzIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgoKQmVsb3cgaXMgdGhlIHBvcEFSUkFZIHNjcmlwdCBmb3IgVG9naWFrIGFuZCBLb3R6ZWJ1ZSBwYWlyd2lzZSBGc3QgaW4gYSBNYW5oYXR0YW4gcGxvdApgYGB7c2h9CiMgdG9naWFrIHNhZgphbmdzZCAtYiAvY2VudGVyMS9HTEFTU0xBQi9zYWxtZ3Jlbi9sY3dncy9lYnNfcG9wZ2VuL3BoZXJyX3RvZ2lha19iYW1zbGlzdC50eHQgXAotciAke2Nocm9tfTogXAotc2l0ZXMgL2NlbnRlcjEvR0xBU1NMQUIvc2FsbWdyZW4vbGN3Z3MvZWJzX3BvcGdlbi9nbHMvdG9naWFrL3BoZXJyX3dob2xlZ2Vub21lX3BvbHltb3JwaGljLnNpdGVzIFwKLXJlZiAvY2VudGVyMS9HTEFTU0xBQi9zYWxtZ3Jlbi9hdGxhbnRpY19oZXJyaW5nL0dDRl85MDA3MDA0MTUuMl9DaF92Mi4wLjJfZ2Vub21pYy5mbmEgXAotYW5jIC9jZW50ZXIxL0dMQVNTTEFCL3NhbG1ncmVuL2F0bGFudGljX2hlcnJpbmcvR0NGXzkwMDcwMDQxNS4yX0NoX3YyLjAuMl9nZW5vbWljLmZuYSBcCi1vdXQgL2NlbnRlcjEvR0xBU1NMQUIvc2FsbWdyZW4vbGN3Z3MvZWJzX3BvcGdlbi9kaXZlcnNpdHkvcGhlcnJfJHtjaHJvbX1fVEdfcG9seW1vcnBoaWNfZm9sZGVkIFwKLW5UaHJlYWRzIDEwIFwKLUdMIDEgXAotZG9HbGYgMyBcCi1kb01hZiAxIFwKLWRvTWFqb3JNaW5vciAxIFwKLXRyaW0gMCBcCi1DIDUwIFwKLW1pbk1hcFEgMTUgXAotbWluUSAxNSBcCi1kb0NvdW50cyAxIFwKLXNldG1pbkRlcHRoIDIwIFwKLXNldG1heERlcHRoIDEwMCBcCi1yZW1vdmVfYmFkcyAxIFwKLXVuaXF1ZU9ubHkgMSBcCi1vbmx5X3Byb3Blcl9wYWlycyAxIFwKLWRvU2FmIDEgCgojIGtvdHplYnVlIHNhZgphbmdzZCAtYiAvY2VudGVyMS9HTEFTU0xBQi9zYWxtZ3Jlbi9sY3dncy9lYnNfcG9wZ2VuL3BoZXJyX2tvdHplYnVlX2JhbXNsaXN0LnR4dCBcCi1yICR7Y2hyb219OiBcCi1zaXRlcyAvY2VudGVyMS9HTEFTU0xBQi9zYWxtZ3Jlbi9sY3dncy9lYnNfcG9wZ2VuL2dscy9rb3R6ZWJ1ZS9waGVycl93aG9sZWdlbm9tZV9wb2x5bW9ycGhpYy5zaXRlcyBcCi1yZWYgL2NlbnRlcjEvR0xBU1NMQUIvc2FsbWdyZW4vYXRsYW50aWNfaGVycmluZy9HQ0ZfOTAwNzAwNDE1LjJfQ2hfdjIuMC4yX2dlbm9taWMuZm5hIFwKLWFuYyAvY2VudGVyMS9HTEFTU0xBQi9zYWxtZ3Jlbi9hdGxhbnRpY19oZXJyaW5nL0dDRl85MDA3MDA0MTUuMl9DaF92Mi4wLjJfZ2Vub21pYy5mbmEgXAotb3V0IC9jZW50ZXIxL0dMQVNTTEFCL3NhbG1ncmVuL2xjd2dzL2Vic19wb3BnZW4vZGl2ZXJzaXR5L3BoZXJyXyR7Y2hyb219X0taX3BvbHltb3JwaGljX2ZvbGRlZCBcCi1uVGhyZWFkcyAxMCBcCi1HTCAxIFwKLWRvR2xmIDMgXAotZG9NYWYgMSBcCi1kb01ham9yTWlub3IgMSBcCi10cmltIDAgXAotQyA1MCBcCi1taW5NYXBRIDE1IFwKLW1pblEgMTUgXAotZG9Db3VudHMgMSBcCi1zZXRtaW5EZXB0aCAxOSBcCi1zZXRtYXhEZXB0aCA5NSBcCi1yZW1vdmVfYmFkcyAxIFwKLXVuaXF1ZU9ubHkgMSBcCi1vbmx5X3Byb3Blcl9wYWlycyAxIFwKLWRvU2FmIDEgCiAgICAjIC1kb1NhZiBlc3RpbWF0ZXMgc2FtcGxlIGFsbGVsZSBmcmVxdWVuY3kgKHNhZikKCiMgcmVhbFNGUyAocHJvZ3JhbSkgdXNlcyBzYWYgZmlsZXMgcHJvZHVjZWQgYnkgYW5nc2QgLWRvU2FmCiAgICAgICAgI2VzdGlhbXRlIHNhZiwgdGhlbiBkbyBzZnMKcmVhbFNGUyAvY2VudGVyMS9HTEFTU0xBQi9zYWxtZ3Jlbi9sY3dncy9lYnNfcG9wZ2VuL2RpdmVyc2l0eS9waGVycl8ke2Nocm9tfV9UR19wb2x5bW9ycGhpY19mb2xkZWQuc2FmLmlkeCBcCi1mb2xkIDEgL2NlbnRlcjEvR0xBU1NMQUIvc2FsbWdyZW4vbGN3Z3MvZWJzX3BvcGdlbi9kaXZlcnNpdHkvcGhlcnJfJHtjaHJvbX1fS1pfcG9seW1vcnBoaWNfZm9sZGVkLnNhZi5pZHggXAotZm9sZCAxID4gL2NlbnRlcjEvR0xBU1NMQUIvc2FsbWdyZW4vbGN3Z3MvZWJzX3BvcGdlbi9mc3QvcGhlcnJfJHtjaHJvbX1fVEctS1pfcG9seW1vcnBoaWNfZm9sZGVkLnNmcwogICAgICAgICMgMkQgc2FmIGludG8gc2ZzCgojIGNhbGN1bGF0ZSBwZXItc2l0ZSBGc3QKcmVhbFNGUyBmc3QgaW5kZXggL2NlbnRlcjEvR0xBU1NMQUIvc2FsbWdyZW4vbGN3Z3MvZWJzX3BvcGdlbi9kaXZlcnNpdHkvcGhlcnJfJHtjaHJvbX1fVEdfcG9seW1vcnBoaWNfZm9sZGVkLnNhZi5pZHggXAotZm9sZCAxIC9jZW50ZXIxL0dMQVNTTEFCL3NhbG1ncmVuL2xjd2dzL2Vic19wb3BnZW4vZGl2ZXJzaXR5L3BoZXJyXyR7Y2hyb219X0taX3BvbHltb3JwaGljX2ZvbGRlZC5zYWYuaWR4IFwKLWZvbGQgMSAtc2ZzIC9jZW50ZXIxL0dMQVNTTEFCL3NhbG1ncmVuL2xjd2dzL2Vic19wb3BnZW4vZnN0L3BoZXJyXyR7Y2hyb219X1RHLUtaX3BvbHltb3JwaGljX2ZvbGRlZC5zZnMgXAotZnN0b3V0IC9jZW50ZXIxL0dMQVNTTEFCL3NhbG1ncmVuL2xjd2dzL2Vic19wb3BnZW4vZnN0L3BoZXJyXyR7Y2hyb219X1RHLUtaX3BvbHltb3JwaGljX2ZvbGRlZC5zZnMucGJzIFwKLXdoaWNoRnN0IDEKICAgICAgICAjIHdoaWNoIEZzdCBlc3RpbWF0b3IgCgojIHNsaWRpbmcgd2luZG93IGFuYWx5c2lzCnJlYWxTRlMgZnN0IHN0YXRzMiAvY2VudGVyMS9HTEFTU0xBQi9zYWxtZ3Jlbi9sY3dncy9lYnNfcG9wZ2VuL2ZzdC9waGVycl8ke2Nocm9tfV9URy1LWl9wb2x5bW9ycGhpY19mb2xkZWQuc2ZzLnBicy5mc3QuaWR4IFwKLXdpbiAxIC1zdGVwIDEgPiAvY2VudGVyMS9HTEFTU0xBQi9zYWxtZ3Jlbi9sY3dncy9lYnNfcG9wZ2VuL2ZzdC9waGVycl8ke2Nocm9tfV9URy1LWl9wb2x5bW9ycGhpY19mb2xkZWQuc2ZzLnBicy5mc3QudHh0CiAgICAgICAgIyBhY3Jvc3MgZXZlcnkgc2l0ZSwgc2xpZGluZyB3aW5kb3cgb2YgMQoKIyBjb25jYXRlYW50ZSBmc3QgZmlsZXMgZm9yIGVhY2ggY2hyb20gCmBgYAoKClBsb3QgZnJvbSBjb25jYXRlbmF0ZWQgZnN0IG91dHB1dCBmaWxlcyBmcm9tIHBvcEFSUkFZIHNjcmlwdCAoUiBwbG90dGluZyBzY3JpcHQgaXMgdGhlIHNhbWUgZm9yIGJvdGgpCmBgYHtyfQpzZXR3ZCgiL1VzZXJzL3N5ZG5leWFsbWdyZW4vRG9jdW1lbnRzL1NBX1BfSGVycmluZy9iZXJpbmdfc2VhX3BvcF9nZW5fb3V0cHV0L3Nmc19mc3Rfc3Bhd25pbmciKQoKIyByZWFkIGluIGNocm9tb3NvbWUgbGlzdCAKY2hyb21zIDwtIGFzLmRhdGEuZnJhbWUocmVhZC5jc3YoImNocm9tb3NvbWVfbGlzdC5jc3YiKSkKY2hyb21zIDwtIGFzLmRhdGEuZnJhbWUoY2hyb21zKQojIG1ha2Ugc3VyZSB0aGF0IG51bWJlcmVkIGNvbHVtbiBpbiBjaHJvbW9zb21lIGxpc3QgKGhlYWRlciBmb3IgMSwyLDMsLi4uKSBpcyBDSFIgZm9yIGVhc2llciB1c2Ugd2l0aCBxcW1hbgoKIyMjIGNhbGN1bGF0ZSBieSBjaHJvbSwgY29uY2F0ZW5hdGUKIyMjIG5vdCBuZWNhc3NhcmlseSBjb3JyZWN0PyBzYWYgYW5kIHNmcyBzdGVwcyBub3QgaW4gb3JkZXIgCnRnLmt6MSA8LSByZWFkX2RlbGltKCJwaGVycl9URy1LWl93aG9sZWdlbm9tZV9mc3QudHh0IiwgCiAgICAgICAgICAgICAgICAgICAgc2tpcCA9IDEsIAogICAgICAgICAgICAgICAgICAgIGNvbF90eXBlcyA9IGNvbHMoKSwgCiAgICAgICAgICAgICAgICAgICAgY29sX25hbWVzID0gYygicmVnaW9uIiwgImNociIsICJtaWRwb3MiLCAibnNpdGVzIiwgImZzdCIpLCAKICAgICAgICAgICAgICAgICAgICBkZWxpbSA9ICJcdCIpCiMgY2hhbmdlIHRvIGRhdGFmcmFtZQp0Zy5rejEgPC0gYXMuZGF0YS5mcmFtZSh0Zy5rejEpCgojIGZpbHRlciBvdXQgc2l0ZXMgPDAsIG1ha2UgTUIgcG9zIGNvbHVtbiAKdGcua3oxIDwtIGZpbHRlcmVkX3RnLmt6MSA8LSB0Zy5rejEgJT4lCiAgZmlsdGVyKGZzdCA+PSAwKQp0Zy5rejEgPC0gdGcua3oxICU+JQogIG11dGF0ZShtaWRwb3NfTWIgPSBtaWRwb3MvMTAwMDAwMCkKCiMgYWRkIGNocm9tcyB0byBmc3QgZGF0YWZyYW1lCnRnLmt6MSA8LSBsZWZ0X2pvaW4odGcua3oxLCBjaHJvbXMsIGJ5ID0gImNociIpCgojIyMgcGxvdCB3aXRoIHFxbWFuIHBhY2thZ2UgCm1hbmhhdHRhbih0Zy5rejEsIGNociA9ICJDSFIiLCBicCA9ICJtaWRwb3MiLCBwID0gImZzdCIsIHNucCA9ICJuc2l0ZXMiLCAKICAgICAgICAgIG1haW4gPSAiVG9naWFrIHZzIEtvdHplYnVlIChjYWxjdWxhdGVkIGJ5IGNocm9tLCBjb25jYXRlbmF0ZWQpIiwKICAgICAgICAgIGxvZ3AgPSBGQUxTRSwgY2V4ID0gMC41LCBjZXguYXhpcyA9IDAuOCwgeWxhYj1leHByZXNzaW9uKGl0YWxpYyhGKVtTVF0pKQoKYGBgCgpUaGlzIGlzIHR3byBzY3JpcHRzOiBvbmUgdGhhdCBlc3RpbWF0ZXMgc2FmIGZvciBUb2dhaWsgYW5kIEtvdHplYnVlIHNlcGFyYXRlbHkgYW5kIGNhbGN1bGF0ZXMgZm9sZGVkIHNmcywgdGhlbiBjYWxjdWxhdGVzIEZzdC4gVGhlc2Ugc2NyaXB0cyBhcmUgbm90IHN1Ym1pdHRlZCBhcyBhbiBhcnJheQoKYGBge2Jhc2h9CiMgdG9naWFrIHNhZiAKYW5nc2QgLWIgL2NlbnRlcjEvR0xBU1NMQUIvc2FsbWdyZW4vbGN3Z3MvZWJzX3BvcGdlbi9waGVycl90b2dpYWtfYmFtc2xpc3QudHh0IFwKLXNpdGVzIC9jZW50ZXIxL0dMQVNTTEFCL3NhbG1ncmVuL2xjd2dzL2Vic19wb3BnZW4vZ2xzL3RvZ2lhay9waGVycl93aG9sZWdlbm9tZV9wb2x5bW9ycGhpYy5zaXRlcyBcCi1yZWYgL2NlbnRlcjEvR0xBU1NMQUIvc2FsbWdyZW4vYXRsYW50aWNfaGVycmluZy9HQ0ZfOTAwNzAwNDE1LjJfQ2hfdjIuMC4yX2dlbm9taWMuZm5hIFwKLWFuYyAvY2VudGVyMS9HTEFTU0xBQi9zYWxtZ3Jlbi9hdGxhbnRpY19oZXJyaW5nL0dDRl85MDA3MDA0MTUuMl9DaF92Mi4wLjJfZ2Vub21pYy5mbmEgXAotb3V0IC9jZW50ZXIxL0dMQVNTTEFCL3NhbG1ncmVuL2xjd2dzL2Vic19wb3BnZW4vZGl2ZXJzaXR5L3RvZ2lhay9waGVycl9UR193aG9sZWdlbm9tZV9wb2x5bW9ycGhpY19mb2xkZWQgXAotblRocmVhZHMgMTAgXAotR0wgMSBcCi1kb0dsZiAzIFwKLWRvTWFmIDEgXAotZG9NYWpvck1pbm9yIDEgXAotdHJpbSAwIFwKLUMgNTAgXAotbWluTWFwUSAxNSBcCi1taW5RIDE1IFwKLWRvQ291bnRzIDEgXAotc2V0bWluRGVwdGggMjAgXAotc2V0bWF4RGVwdGggMTAwIFwKLXJlbW92ZV9iYWRzIDEgXAotdW5pcXVlT25seSAxIFwKLW9ubHlfcHJvcGVyX3BhaXJzIDEgXAotZG9TYWYgMSAKCiMgY29udmVydCB0byBTRlMKcmVhbFNGUyAtZm9sZCAxIC9jZW50ZXIxL0dMQVNTTEFCL3NhbG1ncmVuL2xjd2dzL2Vic19wb3BnZW4vZGl2ZXJzaXR5L3RvZ2lhay9waGVycl9UR193aG9sZWdlbm9tZV9wb2x5bW9ycGhpY19mb2xkZWQuc2FmLmlkeCA+IC9jZW50ZXIxL0dMQVNTTEFCL3NhbG1ncmVuL2xjd2dzL2Vic19wb3BnZW4vZGl2ZXJzaXR5L3RvZ2lhay9waGVycl9UR193aG9sZWdlbm9tZV9wb2x5bW9ycGhpY19mb2xkZWQuc2ZzCgojIyByZXBlYXRlZCBhYm92ZSBmb3IgS290emVidWUKCgojIDJEIFNGUyBbcG9wMV0gW3BvcDJdID4gW3BvcDFfMl0KcmVhbFNGUyAvY2VudGVyMS9HTEFTU0xBQi9zYWxtZ3Jlbi9sY3dncy9lYnNfcG9wZ2VuL2RpdmVyc2l0eS90b2dpYWsvcGhlcnJfVEdfd2hvbGVnZW5vbWVfcG9seW1vcnBoaWNfZm9sZGVkLnNhZi5pZHggXAotZm9sZCAxIC9jZW50ZXIxL0dMQVNTTEFCL3NhbG1ncmVuL2xjd2dzL2Vic19wb3BnZW4vZGl2ZXJzaXR5L2tvdHplYnVlL3BoZXJyX0taX3BvbHltb3JwaGljX2ZvbGRlZC5zYWYuaWR4IFwKLWZvbGQgMSA+IC9jZW50ZXIxL0dMQVNTTEFCL3NhbG1ncmVuL2xjd2dzL2Vic19wb3BnZW4vZGl2ZXJzaXR5L3BoZXJyX3dob2xlZ2Vub21lX3BvbHltb3JwaGljX1RHLUtaX2ZvbGRlZC5zZnMKCiMgRnN0IGJpbmFyeSBmaWxlcwpyZWFsU0ZTIGZzdCBpbmRleCAvY2VudGVyMS9HTEFTU0xBQi9zYWxtZ3Jlbi9sY3dncy9lYnNfcG9wZ2VuL2RpdmVyc2l0eS90b2dpYWsvcGhlcnJfVEdfd2hvbGVnZW5vbWVfcG9seW1vcnBoaWNfZm9sZGVkLnNhZi5pZHggXAotZm9sZCAxIC9jZW50ZXIxL0dMQVNTTEFCL3NhbG1ncmVuL2xjd2dzL2Vic19wb3BnZW4vZGl2ZXJzaXR5L2tvdHplYnVlL3BoZXJyX0taX3BvbHltb3JwaGljX2ZvbGRlZC5zYWYuaWR4IFwKLWZvbGQgMSAtc2ZzIC9jZW50ZXIxL0dMQVNTTEFCL3NhbG1ncmVuL2xjd2dzL2Vic19wb3BnZW4vZGl2ZXJzaXR5L3BoZXJyX3dob2xlZ2Vub21lX3BvbHltb3JwaGljX1RHLUtaX2ZvbGRlZC5zZnMgXAotZnN0b3V0IC9jZW50ZXIxL0dMQVNTTEFCL3NhbG1ncmVuL2xjd2dzL2Vic19wb3BnZW4vZnN0L3BoZXJyX3dob2xlZ2Vub21lX3BvbHltb3JwaGljX1RHLUtaX2ZvbGRlZC5zZnMucGJzIFwKLXdoaWNoRnN0IDEKCiMgZ2V0IEZzdCB2YWx1ZXMgYnkgc2xpZGluZyB3aW5kb3cgCnJlYWxTRlMgZnN0IHN0YXRzMiAvY2VudGVyMS9HTEFTU0xBQi9zYWxtZ3Jlbi9sY3dncy9lYnNfcG9wZ2VuL2ZzdC9waGVycl93aG9sZWdlbm9tZV9wb2x5bW9ycGhpY19URy1LWl9mb2xkZWQuc2ZzLnBicy5mc3QuaWR4IFwKLXdpbiAxIC1zdGVwIDEgPiAvY2VudGVyMS9HTEFTU0xBQi9zYWxtZ3Jlbi9sY3dncy9lYnNfcG9wZ2VuL2ZzdC9waGVycl93aG9sZWdlbm9tZV9wb2x5bW9ycGhpY19URy1LWl9mb2xkZWQuc2ZzLnBicy5mc3QudHh0CgpgYGAKClBsb3QgZm9yIG5vbi1hcnJheSBzYWYsIHNmcywgZnN0IHNjcmlwdCAKYGBge3J9CiMjIyBjYWxjdWxhdGUgd2hvbGUgZ2Vub21lIHNhZiBhbmQgc2ZzLCB0aGVuIGZzdCBmb2xkZWQgd2l0aCB3aG9sZSBnZW5vbWUgCnRnLmt6MiA8LSByZWFkX2RlbGltKCJwaGVycl93aG9sZWdlbm9tZV9wb2x5bW9ycGhpY19URy1LWl9mb2xkZWQuc2ZzLnBicy5mc3QudHh0IiwgCiAgICAgICAgICAgICAgICAgICAgc2tpcCA9IDEsIAogICAgICAgICAgICAgICAgICAgIGNvbF90eXBlcyA9IGNvbHMoKSwgCiAgICAgICAgICAgICAgICAgICAgY29sX25hbWVzID0gYygicmVnaW9uIiwgImNociIsICJtaWRwb3MiLCAibnNpdGVzIiwgImZzdCIpLCAKICAgICAgICAgICAgICAgICAgICBkZWxpbSA9ICJcdCIpCiMgY2hhbmdlIHRvIGRhdGFmcmFtZQp0Zy5rejIgPC0gYXMuZGF0YS5mcmFtZSh0Zy5rejIpCgojIGZpbHRlciBvdXQgc2l0ZXMgPDAsIG1ha2UgTUIgcG9zIGNvbHVtbiAKdGcua3oyIDwtIGZpbHRlcmVkX3RnLmt6MiA8LSB0Zy5rejIgJT4lCiAgZmlsdGVyKGZzdCA+PSAwKQp0Zy5rejIgPC0gdGcua3oyICU+JQogIG11dGF0ZShtaWRwb3NfTWIgPSBtaWRwb3MvMTAwMDAwMCkKCiMgYWRkIGNocm9tcyB0byBmc3QgZGF0YWZyYW1lCnRnLmt6MiA8LSBsZWZ0X2pvaW4odGcua3oyLCBjaHJvbXMsIGJ5ID0gImNociIpCgojIyMgcGxvdCB3aXRoIHFxbWFuIHBhY2thZ2UgCm1hbmhhdHRhbih0Zy5rejIsIGNociA9ICJDSFIiLCBicCA9ICJtaWRwb3MiLCBwID0gImZzdCIsIHNucCA9ICJuc2l0ZXMiLCAKICAgICAgICAgIG1haW4gPSAiVG9naWFrIHZzIEtvdHplYnVlIChjYWxjdWxhdGVkIGJ5IHdob2xlIGdlbm9tZSkiLAogICAgICAgICAgbG9ncCA9IEZBTFNFLCBjZXggPSAwLjUsIGNleC5heGlzID0gMC44LCB5bGFiPWV4cHJlc3Npb24oaXRhbGljKEYpW1NUXSkpCgpgYGAKClRoZXNlIE1hbmhhdHRhbiBwbG90cyBsb29rIHZlcnkgZGlmZmVyZW50Pz8KQWxzbyBJIGNhbid0IGZpZ3VyZSBvdXQgd2hlcmUgYWxvbmcgdGhlIHdheSB0aGUgZ2xvYmFsIEZzdCBpcyBlc3RpYW10ZWQgKEkndmUgZG9uZSB0aGlzIGJlZm9yZSwgYnV0IEkgZGlkbid0IHRha2UgZ29vZCBlbm91Z2ggbm90ZXMpCgo=