Introduction
Last week we explored the coalescence times we expect to see if sequences are neutral with those we estimated from nucleotide sequence data. As we discussed in class, under an infinite sites model of evolution we can derive estimates of θ=4Neμ from either the number of segregating sites, k, or from the nucleotide diversity, π.
ˆθπ=ˆπˆθk=k∑n−1i1i,
where n is the number of sequences in our sample. Since ˆθπ and ˆθk are both estimates of θ, they should be equal if sequences are evolving neutrally and the population is at a drift-mutation equilibrium. Tajima’s D is defined as
ˆD=ˆθπ−ˆθkVar(ˆθπ−ˆθk). If D≠0, then we know either that fitness differences among the sequences are not effectively neutral or that the population is not at a drift-mutation equilibrium.
Esitmating Tajima’s D
It is quite straightforward to estimate Tajima’s D and to assess whether it is different from 0 in R
. Here’s how we’d do it with an sRNase data set from Solanum peruvianum.
library(adegenet)
library(pegas)
rm(list = ls())
solanum <- read.dna("solanum-peruvianum.clw.clwstrict", format = "clustal")
solanum_taj <- tajima.test(solanum)
solanum_taj
The output is pretty easy to intepret. D
is our estimate of Tajima’s D, PVal.normal
is the probability of getting the observed value of D if the sequence variation were neutral and the population was at a drift-mutation equilibrium assuming that D follows a normal distribution with mean zero and variance one. Pval.beta
is the probability of getting the observed value of D if the sequence variation were neutral and the population was at a drift-mutation equilibrium assuming that D follows a beta distribution, which was Tajima’s original proposal.
Here we have a positive D, suggesting that there might be diversifying selection, but the support for that suggestion is very weak. There’s about a 62 percent chance we’d get a value of D as large as what we observe here even if there were no selection acting on these sequences and the population were at a drift-mutation equilibrium.
Lab 10
For this lab exercise you’ll be exploring genetic variation at four loci in loblolly pine. The data are derived from Gonzalez-Martinez and colleagues. There are two data sets for each of the loci included in the analysis:
- ccoaomt-1 : caffeoyl-CoA-O-methyltransferase 1:
- cpk3 : calcium-dependent protein kinase
- erd3 : early response to drought 3
- pp2c: protein phosphatase 2C-like protein
One data set for each locus, the Pinus-taeda-<gene name>-coding.fasta
data set, includes only the coding portion of the nucleotide sequence as downloaded from Genbank. The other data set, the Pinus-taeda-<gene name>.fasta
data set, includes the complete nucleotide sequence as downloaded from Genbank. Each data set contains 32 sequences that were aligned using Muscle. The following table shows the number of nucleotides included in each data set.
NOTE: You’ll need to specify format = "fasta"
when you call read.dna()
.
Using these data, answer the following questions:
Is there evidence for selection, a recent population expansion, or a recent population bottleneck at any locus when the complete sequence is considered?
Is there evidence for selection, a recent population expansion, or a recent population bottleneck at any locus when only the coding sequence is considered?
Assume that there has not been a recent population expansion, a recent bottleneck, or a recent change in range size. What kind of selection might account for the patterns revealed in your answers? Are the patterns of selection you detect consistent with these loci being adaptively important in drought responses?
LS0tCnRpdGxlOiAiVGFqaW1hJ3MgRCIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgdG9jOiB5ZXMKICAgIHRvY19mbG9hdDogdHJ1ZQotLS0KCiMgSW50cm9kdWN0aW9uCgpMYXN0IHdlZWsgd2UgZXhwbG9yZWQgdGhlIGNvYWxlc2NlbmNlIHRpbWVzIHdlIGV4cGVjdCB0byBzZWUgaWYgc2VxdWVuY2VzIGFyZSBuZXV0cmFsIHdpdGggdGhvc2Ugd2UgZXN0aW1hdGVkIGZyb20gbnVjbGVvdGlkZSBzZXF1ZW5jZSBkYXRhLiBBcyB3ZSBkaXNjdXNzZWQgaW4gY2xhc3MsIHVuZGVyIGFuIGluZmluaXRlIHNpdGVzIG1vZGVsIG9mIGV2b2x1dGlvbiB3ZSBjYW4gZGVyaXZlIGVzdGltYXRlcyBvZiAkXHRoZXRhID0gNE5fZVxtdSQgZnJvbSBlaXRoZXIgdGhlIG51bWJlciBvZiBzZWdyZWdhdGluZyBzaXRlcywgJGskLCBvciBmcm9tIHRoZSBudWNsZW90aWRlIGRpdmVyc2l0eSwgJFxwaSQuCgokJApcYmVnaW57ZXFuYXJyYXkqfQpcaGF0XHRoZXRhX1xwaSAmPSYgXGhhdFxwaSBcXApcaGF0XHRoZXRhX2sgJj0mIFxmcmFje2t9e1xzdW1faV57bi0xfVxmcmFjezF9e2l9fSBccXVhZCAsClxlbmR7ZXFuYXJyYXkqfQokJAoKd2hlcmUgJG4kIGlzIHRoZSBudW1iZXIgb2Ygc2VxdWVuY2VzIGluIG91ciBzYW1wbGUuIFNpbmNlICRcaGF0XHRoZXRhX1xwaSReWyoqKklNUE9SVEFOVCBOT1RFICAjMSoqKjogSSByZWFsaXplZCB3aGVuIEkgd2FzIHB1dHRpbmcgdGhpcyBsYWIgZXhlcmNpc2UgdG9nZXRoZXIsIHRoYXQgSSd2ZSBiZWVuIGdldHRpbmcgYSBjb3VwbGUgb2YgZGV0YWlscyBhYm91dCBUYWppbWEncyAkRCQgd3JvbmcgZm9yIHNldmVyYWwgeWVhcnMuIFRoZSBkZWZpbml0aW9uIG9mICRcdGhldGFfcGkkIGlzIHRoZSBmaXJzdCBleGFtcGxlLiBJbiB0aGUgbm90ZXMgYW5kIGluIGxlY3R1cmUgSSBkZWZpbmVkICRcaGF0XHBpJCBhcwokJApcaGF0XHBpID0gXHN1bV97aWp9eF9peF9qXGRlbHRhX3tpan0vTiBccXVhZCAsCiQkCndoZXJlICRcZGVsdGFfe2lqfSQgaXMgdGhlIG51bWJlciBvZiBudWNsZW90aWRlIGRpZmZlcmVuY2VzIGJldHdlZW4gaGFwbG90eXBlcyAkaSQgYW5kICRqJCwgYW5kICROJCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZS4gSSBzaG91bGQgaGF2ZSBsZWZ0IG9mZiB0aGUgZGl2aXNpb24gYnkgJE4kLiAkXHBpJCB0aGVuIGJlY29tZXMgdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIG51Y2xlb3RpZGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0d28gcmFuZG9tbHkgY2hvc2VuIGhhcGxvdHlwZXMuXSBhbmQgJFxoYXRcdGhldGFfayQgYXJlIGJvdGggZXN0aW1hdGVzIG9mICRcdGhldGEkLCB0aGV5IHNob3VsZCBiZSBlcXVhbCBpZiBzZXF1ZW5jZXMgYXJlIGV2b2x2aW5nIG5ldXRyYWxseV5bUmVtZW1iZXIgdGhhdCB3aGVuIHdlIHNheSB0aGF0IHNlcXVlbmNlcyBhcmUgZXZvbHZpbmcgbmV1dHJhbGx5LCB3ZSByZWFsbHkgbWVhbiB0aGF0IGFueSBmaXRuZXNzIGRpZmZlcmVuY2VzIGFyZSBlZmZlY3RpdmVseSBuZXV0cmFsIGJlY2F1c2UgJE5fZXMgPCAxJC5dIGFuZCB0aGUgcG9wdWxhdGlvbiBpcyBhdCBhIGRyaWZ0LW11dGF0aW9uIGVxdWlsaWJyaXVtLiBUYWppbWEncyAkRCQgaXMgZGVmaW5lZCBhcwoKJCQKXGhhdCBEID0gXGZyYWN7XGhhdFx0aGV0YV9ccGkgLSBcaGF0XHRoZXRhX2t9e1xtYm94e1Zhcn0oXGhhdFx0aGV0YV9ccGkgLSBcaGF0XHRoZXRhX2spfSBccXVhZCAuCiQkCklmICREIFxuZSAwJCwgdGhlbiB3ZSBrbm93IGVpdGhlciB0aGF0IGZpdG5lc3MgZGlmZmVyZW5jZXMgYW1vbmcgdGhlIHNlcXVlbmNlcyBhcmUgKioqbm90KioqIGVmZmVjdGl2ZWx5IG5ldXRyYWwgb3IgdGhhdCB0aGUgcG9wdWxhdGlvbiBpcyBub3QgYXQgYSBkcmlmdC1tdXRhdGlvbiBlcXVpbGlicml1bS5eWyoqKklNUE9SVEFOVCBOT1RFICMyKioqOiBUaGlzIGlzIHRoZSBzZWNvbmQgd2F5IEkgaGF2ZSBiZWVuIGdldHRpbmcgdGhpbmdzIHdyb25nLiBPdXIgZXN0aW1hdGUgb2YgJEQkIGlzbid0IHNpbXBseSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuICRcdGhldGFfcGkkIGFuZCAkXHRoZXRhX2skLiBUaGF0IGRpZmZlcmVuY2UgaXMgZGl2aWRlZCBieSB0aGUgY29ycmVzcG9uZGluZyB2YXJpYW5jZSwgZ2l2aW5nICRcaGF0IEQkIGEgbWVhbiBvZiB6ZXJvIGFuZCBhIHZhcmlhbmNlIG9mIG9uZSBpZiB0aGUgc2VxdWVuY2VzIGFyZSBldm9sdmluZyBuZXV0cmFsbHkgYW5kIHRoZSBwb3B1bGF0aW9uIGlzIGF0IGEgZHJpZnQtbXV0YXRpb24gZXF1aWxpYnJpdW0uIFRoaXMgc2NhbGluZyBhbGxvd3MgdXMgdG8gdXNlIGEgbm9ybWFsIGRpc3RyaWJ1dGlpb24gd2l0aCBhIG1lYW4gb2YgemVybyBhbmQgYSB2YXJpYW5jZSBvZiBvbmUgb3IgYSBiZXRhIGRpc3RyaWJ1dGlvbiB0byBjYWxjdWxhdGUgdGhlIHByb2JhYmlsaXR5IG9mIGdldHRpbmcgdGhlIG9ic2VydmVkIHZhbHVlIG9mICRcaGF0IEQkLiBJJ3ZlIHVwZGF0ZWQgdGhlIG9ubGluZSBub3RlcyB0byByZWZsZWN0IHRoZXNlIGNvcnJlY3Rpb25zLiBJZiB5b3UndmUgYWxyZWFkeSBkb3dubG9hZGVkIGEgY29weSwgeW91IG1pZ2h0IHdhbnQgdG8gZG93bmxvYWQgdGhlbSBhZ2FpbiBhbmQgdGhyb3cgb3V0IHRoZSBvbGQgdmVyc2lvbi5dCgojIyBFc2l0bWF0aW5nIFRhamltYSdzIEQKCkl0IGlzIHF1aXRlIHN0cmFpZ2h0Zm9yd2FyZCB0byBlc3RpbWF0ZSBUYWppbWEncyAkRCQgYW5kIHRvIGFzc2VzcyB3aGV0aGVyIGl0IGlzIGRpZmZlcmVudCBmcm9tIDAgaW4gYFJgLiBIZXJlJ3MgaG93IHdlJ2QgZG8gaXQgd2l0aCBhbiBzUk5hc2UgZGF0YSBzZXQgZnJvbSAqU29sYW51bSBwZXJ1dmlhbnVtKi5eW01pbGxlciwgSi5TLiwgYW5kIEouIEtvc3R5dW4uICAyMDEwLiAgRnVuY3Rpb25hbCBnYW1ldG9waHl0aWMgc2VsZi1pbmNvbXBhdGliaWxpdHkgaW4gYSBwZXJpcGhlcmFsIHBvcHVsYXRpb24gb2YgU29sYW51bSBwZXJ1dmlhbnVtIChTb2xhbmFjZWFlKS4gKkhlcmVkaXR5KiAgMTA3OjMwLTM5LiAgZG9pOiBbaHR0cHM6Ly9kb2kub3JnLzEwLjEwMzgvaGR5LjIwMTAuMTUxXShodHRwczovL2RvaS5vcmcvMTAuMTAzOC9oZHkuMjAxMC4xNTEpXQoKYGBge3IsIG1lc3NhZ2UgPSBGQUxTRX0KbGlicmFyeShhZGVnZW5ldCkKbGlicmFyeShwZWdhcykKCnJtKGxpc3QgPSBscygpKQoKc29sYW51bSA8LSByZWFkLmRuYSgic29sYW51bS1wZXJ1dmlhbnVtLmNsdy5jbHdzdHJpY3QiLCBmb3JtYXQgPSAiY2x1c3RhbCIpCgpzb2xhbnVtX3RhaiA8LSB0YWppbWEudGVzdChzb2xhbnVtKQpzb2xhbnVtX3RhagpgYGAKClRoZSBvdXRwdXQgaXMgcHJldHR5IGVhc3kgdG8gaW50ZXByZXQuIGBEYCBpcyBvdXIgZXN0aW1hdGUgb2YgVGFqaW1hJ3MgJEQkLCBgUFZhbC5ub3JtYWxgIGlzIHRoZSBwcm9iYWJpbGl0eSBvZiBnZXR0aW5nIHRoZSBvYnNlcnZlZCB2YWx1ZSBvZiAkRCQgaWYgdGhlIHNlcXVlbmNlIHZhcmlhdGlvbiB3ZXJlIG5ldXRyYWwgYW5kIHRoZSBwb3B1bGF0aW9uIHdhcyBhdCBhIGRyaWZ0LW11dGF0aW9uIGVxdWlsaWJyaXVtIGFzc3VtaW5nIHRoYXQgJEQkIGZvbGxvd3MgYSBub3JtYWwgZGlzdHJpYnV0aW9uIHdpdGggbWVhbiB6ZXJvIGFuZCB2YXJpYW5jZSBvbmUuIGBQdmFsLmJldGFgIGlzIHRoZSBwcm9iYWJpbGl0eSBvZiBnZXR0aW5nIHRoZSBvYnNlcnZlZCB2YWx1ZSBvZiAkRCQgaWYgdGhlIHNlcXVlbmNlIHZhcmlhdGlvbiB3ZXJlIG5ldXRyYWwgYW5kIHRoZSBwb3B1bGF0aW9uIHdhcyBhdCBhIGRyaWZ0LW11dGF0aW9uIGVxdWlsaWJyaXVtIGFzc3VtaW5nIHRoYXQgJEQkIGZvbGxvd3MgYSBiZXRhIGRpc3RyaWJ1dGlvbiwgd2hpY2ggd2FzIFRhamltYSdzIG9yaWdpbmFsIHByb3Bvc2FsLgoKSGVyZSB3ZSBoYXZlIGEgcG9zaXRpdmUgJEQkLCBzdWdnZXN0aW5nIHRoYXQgdGhlcmUgbWlnaHQgYmUgZGl2ZXJzaWZ5aW5nIHNlbGVjdGlvbiwgYnV0IHRoZSBzdXBwb3J0IGZvciB0aGF0IHN1Z2dlc3Rpb24gaXMgdmVyeSB3ZWFrLiBUaGVyZSdzIGFib3V0IGEgNjIgcGVyY2VudCBjaGFuY2Ugd2UnZCBnZXQgYSB2YWx1ZSBvZiAkRCQgYXMgbGFyZ2UgYXMgd2hhdCB3ZSBvYnNlcnZlIGhlcmUgZXZlbiBpZiB0aGVyZSB3ZXJlIG5vIHNlbGVjdGlvbiBhY3Rpbmcgb24gdGhlc2Ugc2VxdWVuY2VzIGFuZCB0aGUgcG9wdWxhdGlvbiB3ZXJlIGF0IGEgZHJpZnQtbXV0YXRpb24gZXF1aWxpYnJpdW0uXltOb3RlOiBNaWxsZXIgYW5kIEtvc3R5dW4gdXNlIG1vcmUgc29waGlzdGljYXRlZCBtZXRob2RzIHRvIGV4cGxvcmUgc2l0ZS1zcGVjaWZpYyBwYXR0ZXJucyBvZiBzZWxlY3Rpb24gYW5kIGZpbmQgZXZpZGVuY2UgdGhhdCBzZWxlY3Rpb24gZmF2b3JzIGRpdmVyc2l0eSBpbiByZWdpb25zIG9mIHRoZSBnZW5lIGFzc29jaWF0ZWQgd2l0aCBkZXRlcm1pbmluZyB0aGUgc3BlY2lmaWNpdHkgb2Ygc2VsZi1pbmNvbXBhdGliaWxpdHkgcmVhY3Rpb25zIGFuZCB0aGF0IHRoZXJlIGlzIHB1cmlmeWluZyBzZWxlY3Rpb24gaW4gb3RoZXIgcGFydHMgb2YgdGhlIGdlbmUuIFNvdW5kcyBhIGJpdCBsaWtlIEFESCBpbiAqRHJvc29waGlsYSBtZWxhbm9nYXN0ZXIqLCBkb2Vzbid0IGl0P10KCiMgTGFiIDEwCgpGb3IgdGhpcyBsYWIgZXhlcmNpc2UgeW91J2xsIGJlIGV4cGxvcmluZyBnZW5ldGljIHZhcmlhdGlvbiBhdCBmb3VyIGxvY2kgaW4gbG9ibG9sbHkgcGluZS4gVGhlIGRhdGEgYXJlIGRlcml2ZWQgZnJvbSBHb256YWxlei1NYXJ0aW5leiBhbmQgY29sbGVhZ3Vlcy5eW0dvbnphbGV6LU1hcnRpbmV6LCBTLkMuLCBFLiBFcnNveiwgRy5SLiBCcm93biwgTi5DLiBXaGVlbGVyLCBhbmQgRC5CLiBOZWFsZS4gIDIwMDYuICBETkEgc2VxdWVuY2UgZmFyaWF0aW9uIGFuZCBzZWxlY3Rpb24gb2YgdGFnIHNpbmdsZS1udWNsZW90aWRlIHBvbHltb3JwaGlzbXMgYXQgY2FuZGlkYXRlIGdlbmVzIGZvciBkcm91Z2h0LXN0cmVzcyByZXNwb25zZSBpbiAqUGludXMgdGFlZGEqIEwuICAqR2VuZXRpY3MqICAxNzI6MTkxNS0xOTI2LiAgZG9pOiBbaHR0cHM6Ly9kb2kub3JnLzEwLjE1MzQvZ2VuZXRpY3MuMTA1LjA0NzEyNl0oaHR0cHM6Ly9kb2kub3JnLzEwLjE1MzQvZ2VuZXRpY3MuMTA1LjA0NzEyNildIFRoZXJlIGFyZSB0d28gZGF0YSBzZXRzIGZvciBlYWNoIG9mIHRoZSBsb2NpIGluY2x1ZGVkIGluIHRoZSBhbmFseXNpczoKCi0gKmNjb2FvbXQtMSogOiBjYWZmZW95bC1Db0EtTy1tZXRoeWx0cmFuc2ZlcmFzZSAxOgogIC0gW0Z1bGwgc2VxdWVuY2VdKGh0dHA6Ly9kYXJ3aW4uZWViLnVjb25uLmVkdS9lZWIzNDgtcmVzb3VyY2VzL1BpbnVzLXRhZWRhLWNjb2FvbXQtMS5mYXN0YSkKICAtIFtDb2Rpbmcgc2VxdWVuY2VdKGh0dHA6Ly9kYXJ3aW4uZWViLnVjb25uLmVkdS9lZWIzNDgtcmVzb3VyY2VzL1BpbnVzLXRhZWRhLWNjb2FvbXQtMS1jb2RpbmcuZmFzdGEpCi0gKmNwazMqIDogY2FsY2l1bS1kZXBlbmRlbnQgcHJvdGVpbiBraW5hc2UKICAtIFtGdWxsIHNlcXVlbmNlXShodHRwOi8vZGFyd2luLmVlYi51Y29ubi5lZHUvZWViMzQ4LXJlc291cmNlcy9QaW51cy10YWVkYS1jcGszLmZhc3RhKQogIC0gW0NvZGluZyBzZXF1ZW5jZV0oaHR0cDovL2Rhcndpbi5lZWIudWNvbm4uZWR1L2VlYjM0OC1yZXNvdXJjZXMvUGludXMtdGFlZGEtY3BrMy1jb2RpbmcuZmFzdGEpCi0gKmVyZDMqIDogZWFybHkgcmVzcG9uc2UgdG8gZHJvdWdodCAzCiAgLSBbRnVsbCBzZXF1ZW5jZV0oaHR0cDovL2Rhcndpbi5lZWIudWNvbm4uZWR1L2VlYjM0OC1yZXNvdXJjZXMvUGludXMtdGFlZGEtZXJkMy5mYXN0YSkKICAtIFtDb2Rpbmcgc2VxdWVuY2VdKGh0dHA6Ly9kYXJ3aW4uZWViLnVjb25uLmVkdS9lZWIzNDgtcmVzb3VyY2VzL1BpbnVzLXRhZWRhLWVyZDMtY29kaW5nLmZhc3RhKQotICpwcDJjKjogcHJvdGVpbiBwaG9zcGhhdGFzZSAyQy1saWtlIHByb3RlaW4KICAtIFtGdWxsIHNlcXVlbmNlXShodHRwOi8vZGFyd2luLmVlYi51Y29ubi5lZHUvZWViMzQ4LXJlc291cmNlcy9QaW51cy10YWVkYS1wcDJjLmZhc3RhKQogIC0gW0NvZGluZyBzZXF1ZW5jZV0oaHR0cDovL2Rhcndpbi5lZWIudWNvbm4uZWR1L2VlYjM0OC1yZXNvdXJjZXMvUGludXMtdGFlZGEtcHAyYy1jb2RpbmcuZmFzdGEpCgpPbmUgZGF0YSBzZXQgZm9yIGVhY2ggbG9jdXMsIHRoZSBgUGludXMtdGFlZGEtPGdlbmUgbmFtZT4tY29kaW5nLmZhc3RhYCBkYXRhIHNldCwgaW5jbHVkZXMgb25seSB0aGUgY29kaW5nIHBvcnRpb24gb2YgdGhlIG51Y2xlb3RpZGUgc2VxdWVuY2UgYXMgZG93bmxvYWRlZCBmcm9tIEdlbmJhbmsuIFRoZSBvdGhlciBkYXRhIHNldCwgdGhlIGBQaW51cy10YWVkYS08Z2VuZSBuYW1lPi5mYXN0YWAgZGF0YSBzZXQsIGluY2x1ZGVzIHRoZSBjb21wbGV0ZSBudWNsZW90aWRlIHNlcXVlbmNlIGFzIGRvd25sb2FkZWQgZnJvbSBHZW5iYW5rLiBFYWNoIGRhdGEgc2V0IGNvbnRhaW5zIDMyIHNlcXVlbmNlcyB0aGF0IHdlcmUgYWxpZ25lZCB1c2luZyBbTXVzY2xlXShodHRwOi8vd3d3LmViaS5hYy51ay9Ub29scy9tc2EvbXVzY2xlKS4gVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyB0aGUgbnVtYmVyIG9mIG51Y2xlb3RpZGVzIGluY2x1ZGVkIGluIGVhY2ggZGF0YSBzZXQuCgpOT1RFOiBZb3UnbGwgbmVlZCB0byBzcGVjaWZ5IGBmb3JtYXQgPSAiZmFzdGEiYCB3aGVuIHlvdSBjYWxsIGByZWFkLmRuYSgpYC4KCmBgYHtyLCBtZXNzYWdlID0gRkFMU0UsIGVjaG8gPSBGQUxTRX0KbGlicmFyeShodG1sVGFibGUpCgpkZiA8LSBkYXRhLmZyYW1lKExvY3VzID0gYygiY2NvYW9tdC0xIiwgImNwazMiLCAiZXJkMyIsICJwcDJjIiksCiAgICAgICAgICAgICAgICAgQ29kaW5nID0gYygyNTgsIDM3OCwgNjI1LCA0NjEpLAogICAgICAgICAgICAgICAgIENvbXBsZXRlID0gYyg1MTcsIDYzMCwgODgyLCA2MzQpKQpodG1sVGFibGUoZGYsIAogICAgICAgICAgY2dyb3VwID0gYygiIiwgIk51Y2xlb3RpZGUgc2VxdWVuY2UgbGVuZ3RoIiksCiAgICAgICAgICBuLmNncm91cCA9IGMoMSwgMiksCiAgICAgICAgICBybmFtZXMgPSBGQUxTRSkKYGBgCgpVc2luZyB0aGVzZSBkYXRhLCBhbnN3ZXIgdGhlIGZvbGxvd2luZyBxdWVzdGlvbnM6CgoxLiBJcyB0aGVyZSBldmlkZW5jZSBmb3Igc2VsZWN0aW9uLCBhIHJlY2VudCBwb3B1bGF0aW9uIGV4cGFuc2lvbiwgb3IgYSByZWNlbnQgcG9wdWxhdGlvbiBib3R0bGVuZWNrIGF0IGFueSBsb2N1cyB3aGVuIHRoZSBjb21wbGV0ZSBzZXF1ZW5jZSBpcyBjb25zaWRlcmVkPwoKMi4gSXMgdGhlcmUgZXZpZGVuY2UgZm9yIHNlbGVjdGlvbiwgYSByZWNlbnQgcG9wdWxhdGlvbiBleHBhbnNpb24sIG9yIGEgcmVjZW50IHBvcHVsYXRpb24gYm90dGxlbmVjayBhdCBhbnkgbG9jdXMgd2hlbiBvbmx5IHRoZSBjb2Rpbmcgc2VxdWVuY2UgaXMgY29uc2lkZXJlZD8KCjMuIEFzc3VtZSB0aGF0IHRoZXJlIGhhcyBub3QgYmVlbiBhIHJlY2VudCBwb3B1bGF0aW9uIGV4cGFuc2lvbiwgYSByZWNlbnQgYm90dGxlbmVjaywgb3IgYSByZWNlbnQgY2hhbmdlIGluIHJhbmdlIHNpemUuIFdoYXQga2luZCBvZiBzZWxlY3Rpb24gbWlnaHQgYWNjb3VudCBmb3IgdGhlIHBhdHRlcm5zIHJldmVhbGVkIGluIHlvdXIgYW5zd2Vycz8gQXJlIHRoZSBwYXR0ZXJucyBvZiBzZWxlY3Rpb24geW91IGRldGVjdCBjb25zaXN0ZW50IHdpdGggdGhlc2UgbG9jaSBiZWluZyBhZGFwdGl2ZWx5IGltcG9ydGFudCBpbiBkcm91Z2h0IHJlc3BvbnNlcz8K