Example 1: Sampling Distribution and Likelihood functions In an experiment, 10 seed are planted. 7 are observed to germinate and produce seedlings.

  1. What is an appropriate distribution to use to model this process? Why?

Solution: Binomial distribution as it models numbers of successes in n trials.

  1. Plot the Sampling distribution assuming 10 seeds are planted and probability of germination is 0.5: Calculate P(x|p) for x=0,1,2,3,4…10 assuming p->0.5 and plot Probability Mass Function

Approximate solution via simulation then exact solution

x<-rbinom(n=10000,size=10,prob=0.5)
xProb<-hist(x,breaks=c(0,0.5,1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5,10.5),plot=T,probability=TRUE)



plot(0:10,dbinom(x=0:10,size=10,prob=0.5),ylab="Prob",xlab="Number of Successes",ylim=c(0,0.4))
mtext(side=3,"Sampling Distribution",line=1)

  1. Plot the Likelihood function given 7 of the 10 seeds germinated. Estimate the mle for p?
plot(seq(from=0,to=1,length=100),dbinom(x=7,size=10,prob=seq(from=0,to=1,length=100)),
     typ="p",ylab="Likelihood",xlab="P")
mtext(side=3,"Likelihood")
abline(v=0.70)

  1. Plot the Likelihood function given 700 of the 1000 seeds germinated. Estimate the mle for p?
plot(seq(from=0,to=1,length=1000),dbinom(x=700,size=1000,prob=seq(from=0,to=1,length=1000)),
     typ="l",ylab="Likelihood",xlab="P")
mtext(side=3,"Likelihood")
abline(v=0.70)

PROBLEM 1: ************************************************************************** Make a figure with 6 panels that show the likelihoods for the following samples (seedlings,seeds): (3,4),(6,8),(12,16),(24,32),(300,400), and (3000,4000). Hint: Use par(mfrow=c(3,2)) to set up a figure with six panels

Solution:

pVect<-seq(0,1,length=1000)
parOld<-par(mfrow=c(3,2),oma=c(1,1,1,1),mar=c(1,1,1,1)+0.5)
plot(pVect,dbinom(x=3,size=4,prob=pVect),typ="l",ylab="Likelihood",xlab="P")
plot(pVect,dbinom(x=6,size=8,prob=pVect),typ="l",ylab="Likelihood",xlab="P")
plot(pVect,dbinom(x=12,size=16,prob=pVect),typ="l",ylab="Likelihood",xlab="P")
plot(pVect,dbinom(x=24,size=32,prob=pVect),typ="l",ylab="Likelihood",xlab="P")
plot(pVect,dbinom(x=300,size=400,prob=pVect),typ="l",ylab="Likelihood",xlab="P")
plot(pVect,dbinom(x=3000,size=4000,prob=pVect),typ="l",ylab="Likelihood",xlab="P")
par(parOld)

Next moving from likelihood to Bayesian. Example 2: A Beta pdf is often used as a prior for a Binomial. Why? Use a Beta(1,1) and Beta(10,10) as a prior and use a grid approximation to calculate the posterior distribution for problem 1.iii and for problem 2.

First, plotting two separate beta priors: A flat prior and a diffuse prior

a<-1; b<-1
bMean<-a/(a+b)
bVar<-a*b/((a+b)^2 * (a+b+1))
  
pVect<-seq(from=0, to=1, length=1000)
betaDensity<-dbeta(pVect, shape1=1,shape2=1)
plot(pVect,betaDensity,type='l')


pVect<-seq(from=0, to=1, length=1000)
betaDensity<-dbeta(pVect, shape1=10,shape2=10)
plot(pVect,betaDensity,type='l')

Now, plotting the posterior distributions by modifying the likelihood code above to give a grid approximation to posterior probability distributions for Beta(1,1) then Beta(10,10) priors:

a<-b<-1 # Beta parms
parOld<-par(mfrow=c(3,2),oma=c(1,1,1,1),mar=c(1,1,1,1)+0.5)
plot(pVect,
     dbinom(x=3,size=4,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)/sum(dbinom(x=3,size=4,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)),
     typ="l",ylab="Likelihood",xlab="P")
plot(pVect,
     dbinom(x=6,size=8,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)/sum(dbinom(x=6,size=8,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)),
     typ="l",ylab="Likelihood",xlab="P")
plot(pVect,
     dbinom(x=12,size=16,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)/sum(dbinom(x=12,size=16,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)),
     typ="l",ylab="Likelihood",xlab="P")
plot(pVect,
     dbinom(x=24,size=32,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)/sum(dbinom(x=24,size=42,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)),
     typ="l",ylab="Likelihood",xlab="P")
plot(pVect,
     dbinom(x=300,size=400,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)/sum(dbinom(x=300,size=400,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)),
     typ="l",ylab="Likelihood",xlab="P")
plot(pVect,
     dbinom(x=3000,size=4000,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)/sum(dbinom(x=3000,size=4000,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)),
     typ="l",ylab="Likelihood",xlab="P")
par(parOld)

Recalculating with second prior…

a<-b<-10 # Beta parms
parOld<-par(mfrow=c(3,2),oma=c(1,1,1,1),mar=c(1,1,1,1)+0.5)
plot(pVect,
     dbinom(x=3,size=4,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)/sum(dbinom(x=3,size=4,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)),
     typ="l",ylab="Likelihood",xlab="P")
plot(pVect,
     dbinom(x=6,size=8,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)/sum(dbinom(x=6,size=8,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)),
     typ="l",ylab="Likelihood",xlab="P")
plot(pVect,
     dbinom(x=12,size=16,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)/sum(dbinom(x=12,size=16,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)),
     typ="l",ylab="Likelihood",xlab="P")
plot(pVect,
     dbinom(x=24,size=32,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)/sum(dbinom(x=24,size=42,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)),
     typ="l",ylab="Likelihood",xlab="P")
plot(pVect,
     dbinom(x=300,size=400,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)/sum(dbinom(x=300,size=400,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)),
     typ="l",ylab="Likelihood",xlab="P")
plot(pVect,
     dbinom(x=3000,size=4000,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)/sum(dbinom(x=3000,size=4000,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)),
     typ="l",ylab="Likelihood",xlab="P")
par(parOld)

PROBLEM 2: ************************************************************************** Make a figure with 6 panels that show the prior, likelihood, and posterior for the following samples (seedlings,seeds):(1,10),(10,100),(100,1000). Choose both a flat prior (e.g., Beta(1,1) ) and a strong prior using the Beta distribution.

Solution

a<-10; b<-10 # FLAT Beta parms
seeds<-1000; seedlings<-100
pVect<-seq(0,1,length=1000)

parOld<-par(mfrow=c(3,1),oma=c(1,1,1,1),mar=c(1,1,1,1)+0.5)
plot(pVect,dbinom(x=seedlings,size=seeds,prob=pVect),typ="l",ylab="Likelihood",xlab="P")
plot(pVect,dbeta(pVect,shape1=a,shape2=b),typ="l",ylab="Likelihood",xlab="P")
plot(pVect,dbinom(x=seedlings,size=seeds,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)/sum(dbinom(x=seedlings,size=seeds,prob=pVect)*dbeta(pVect,shape1=a,shape2=b)),
     typ="l",ylab="Likelihood",xlab="P")

par(parOld)

LS0tCnRpdGxlOiAiQmlub21pYWwgTGlrZWxpaG9vZCIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKRXhhbXBsZSAxOiBTYW1wbGluZyBEaXN0cmlidXRpb24gYW5kIExpa2VsaWhvb2QgZnVuY3Rpb25zCkluIGFuIGV4cGVyaW1lbnQsIDEwIHNlZWQgYXJlIHBsYW50ZWQuICA3IGFyZSBvYnNlcnZlZCB0byBnZXJtaW5hdGUgYW5kIHByb2R1Y2Ugc2VlZGxpbmdzLgoKaS4gIFdoYXQgaXMgYW4gYXBwcm9wcmlhdGUgZGlzdHJpYnV0aW9uIHRvIHVzZSB0byBtb2RlbCB0aGlzIHByb2Nlc3M/ICBXaHk/CgpTb2x1dGlvbjogQmlub21pYWwgZGlzdHJpYnV0aW9uIGFzIGl0IG1vZGVscyBudW1iZXJzIG9mIHN1Y2Nlc3NlcyBpbiBuIHRyaWFscy4KCmlpLiBQbG90IHRoZSBTYW1wbGluZyBkaXN0cmlidXRpb24gYXNzdW1pbmcgMTAgc2VlZHMgYXJlIHBsYW50ZWQgYW5kIHByb2JhYmlsaXR5IApvZiBnZXJtaW5hdGlvbiBpcyAwLjU6IApDYWxjdWxhdGUgUCh4fHApIGZvciB4PTAsMSwyLDMsNC4uLjEwIGFzc3VtaW5nIHAtPjAuNSBhbmQgcGxvdCBQcm9iYWJpbGl0eSBNYXNzIEZ1bmN0aW9uCgpBcHByb3hpbWF0ZSBzb2x1dGlvbiB2aWEgc2ltdWxhdGlvbiB0aGVuIGV4YWN0IHNvbHV0aW9uCgpgYGB7cn0KeDwtcmJpbm9tKG49MTAwMDAsc2l6ZT0xMCxwcm9iPTAuNSkKeFByb2I8LWhpc3QoeCxicmVha3M9YygwLDAuNSwxLjUsMi41LDMuNSw0LjUsNS41LDYuNSw3LjUsOC41LDkuNSwxMC41KSxwbG90PVQscHJvYmFiaWxpdHk9VFJVRSkKCgpwbG90KDA6MTAsZGJpbm9tKHg9MDoxMCxzaXplPTEwLHByb2I9MC41KSx5bGFiPSJQcm9iIix4bGFiPSJOdW1iZXIgb2YgU3VjY2Vzc2VzIix5bGltPWMoMCwwLjQpKQptdGV4dChzaWRlPTMsIlNhbXBsaW5nIERpc3RyaWJ1dGlvbiIsbGluZT0xKQpgYGAKCgppaWkuIFBsb3QgdGhlIExpa2VsaWhvb2QgZnVuY3Rpb24gZ2l2ZW4gNyBvZiB0aGUgMTAgc2VlZHMgZ2VybWluYXRlZC4gRXN0aW1hdGUgdGhlIG1sZSBmb3IgcD8gCgpgYGB7cn0KcGxvdChzZXEoZnJvbT0wLHRvPTEsbGVuZ3RoPTEwMCksZGJpbm9tKHg9NyxzaXplPTEwLHByb2I9c2VxKGZyb209MCx0bz0xLGxlbmd0aD0xMDApKSwKICAgICB0eXA9InAiLHlsYWI9Ikxpa2VsaWhvb2QiLHhsYWI9IlAiKQptdGV4dChzaWRlPTMsIkxpa2VsaWhvb2QiKQphYmxpbmUodj0wLjcwKQpgYGAKCmlpaS4gUGxvdCB0aGUgTGlrZWxpaG9vZCBmdW5jdGlvbiBnaXZlbiA3MDAgb2YgdGhlIDEwMDAgc2VlZHMgZ2VybWluYXRlZC4gRXN0aW1hdGUgdGhlIG1sZSBmb3IgcD8gCgpgYGB7cn0KcGxvdChzZXEoZnJvbT0wLHRvPTEsbGVuZ3RoPTEwMDApLGRiaW5vbSh4PTcwMCxzaXplPTEwMDAscHJvYj1zZXEoZnJvbT0wLHRvPTEsbGVuZ3RoPTEwMDApKSwKICAgICB0eXA9ImwiLHlsYWI9Ikxpa2VsaWhvb2QiLHhsYWI9IlAiKQptdGV4dChzaWRlPTMsIkxpa2VsaWhvb2QiKQphYmxpbmUodj0wLjcwKQpgYGAKClBST0JMRU0gMTogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKTWFrZSBhIGZpZ3VyZSB3aXRoIDYgcGFuZWxzIHRoYXQgc2hvdyB0aGUgbGlrZWxpaG9vZHMgZm9yIHRoZSBmb2xsb3dpbmcgc2FtcGxlcyAoc2VlZGxpbmdzLHNlZWRzKToKKDMsNCksKDYsOCksKDEyLDE2KSwoMjQsMzIpLCgzMDAsNDAwKSwgYW5kICgzMDAwLDQwMDApLgpIaW50OiBVc2UgcGFyKG1mcm93PWMoMywyKSkgdG8gc2V0IHVwIGEgZmlndXJlIHdpdGggc2l4IHBhbmVscwoKU29sdXRpb246CgpgYGB7cn0KcFZlY3Q8LXNlcSgwLDEsbGVuZ3RoPTEwMDApCnBhck9sZDwtcGFyKG1mcm93PWMoMywyKSxvbWE9YygxLDEsMSwxKSxtYXI9YygxLDEsMSwxKSswLjUpCnBsb3QocFZlY3QsZGJpbm9tKHg9MyxzaXplPTQscHJvYj1wVmVjdCksdHlwPSJsIix5bGFiPSJMaWtlbGlob29kIix4bGFiPSJQIikKcGxvdChwVmVjdCxkYmlub20oeD02LHNpemU9OCxwcm9iPXBWZWN0KSx0eXA9ImwiLHlsYWI9Ikxpa2VsaWhvb2QiLHhsYWI9IlAiKQpwbG90KHBWZWN0LGRiaW5vbSh4PTEyLHNpemU9MTYscHJvYj1wVmVjdCksdHlwPSJsIix5bGFiPSJMaWtlbGlob29kIix4bGFiPSJQIikKcGxvdChwVmVjdCxkYmlub20oeD0yNCxzaXplPTMyLHByb2I9cFZlY3QpLHR5cD0ibCIseWxhYj0iTGlrZWxpaG9vZCIseGxhYj0iUCIpCnBsb3QocFZlY3QsZGJpbm9tKHg9MzAwLHNpemU9NDAwLHByb2I9cFZlY3QpLHR5cD0ibCIseWxhYj0iTGlrZWxpaG9vZCIseGxhYj0iUCIpCnBsb3QocFZlY3QsZGJpbm9tKHg9MzAwMCxzaXplPTQwMDAscHJvYj1wVmVjdCksdHlwPSJsIix5bGFiPSJMaWtlbGlob29kIix4bGFiPSJQIikKcGFyKHBhck9sZCkKYGBgCgoKTmV4dCBtb3ZpbmcgZnJvbSBsaWtlbGlob29kIHRvIEJheWVzaWFuLgpFeGFtcGxlIDI6IEEgQmV0YSBwZGYgaXMgb2Z0ZW4gdXNlZCBhcyBhIHByaW9yIGZvciBhIEJpbm9taWFsLiAgV2h5PyBVc2UgYSBCZXRhKDEsMSkgYW5kIEJldGEoMTAsMTApIGFzIGEgcHJpb3IgYW5kIHVzZSBhIGdyaWQgYXBwcm94aW1hdGlvbiB0byBjYWxjdWxhdGUgdGhlIHBvc3RlcmlvciBkaXN0cmlidXRpb24gZm9yIHByb2JsZW0gMS5paWkgYW5kIGZvciBwcm9ibGVtIDIuIAoKRmlyc3QsIHBsb3R0aW5nIHR3byBzZXBhcmF0ZSBiZXRhIHByaW9yczogQSBmbGF0IHByaW9yIGFuZCBhIGRpZmZ1c2UgcHJpb3IKCgpgYGB7cn0KYTwtMTsgYjwtMQpiTWVhbjwtYS8oYStiKQpiVmFyPC1hKmIvKChhK2IpXjIgKiAoYStiKzEpKQogIApwVmVjdDwtc2VxKGZyb209MCwgdG89MSwgbGVuZ3RoPTEwMDApCmJldGFEZW5zaXR5PC1kYmV0YShwVmVjdCwgc2hhcGUxPTEsc2hhcGUyPTEpCnBsb3QocFZlY3QsYmV0YURlbnNpdHksdHlwZT0nbCcpCgpwVmVjdDwtc2VxKGZyb209MCwgdG89MSwgbGVuZ3RoPTEwMDApCmJldGFEZW5zaXR5PC1kYmV0YShwVmVjdCwgc2hhcGUxPTEwLHNoYXBlMj0xMCkKcGxvdChwVmVjdCxiZXRhRGVuc2l0eSx0eXBlPSdsJykKYGBgCgoKTm93LCBwbG90dGluZyB0aGUgcG9zdGVyaW9yIGRpc3RyaWJ1dGlvbnMgYnkgbW9kaWZ5aW5nIHRoZSBsaWtlbGlob29kIGNvZGUgYWJvdmUgdG8gZ2l2ZSBhIGdyaWQgYXBwcm94aW1hdGlvbiB0byBwb3N0ZXJpb3IgcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9ucyBmb3IgQmV0YSgxLDEpIHRoZW4gQmV0YSgxMCwxMCkgcHJpb3JzOgoKYGBge3J9CmE8LWI8LTEgIyBCZXRhIHBhcm1zCnBhck9sZDwtcGFyKG1mcm93PWMoMywyKSxvbWE9YygxLDEsMSwxKSxtYXI9YygxLDEsMSwxKSswLjUpCnBsb3QocFZlY3QsCiAgICAgZGJpbm9tKHg9MyxzaXplPTQscHJvYj1wVmVjdCkqZGJldGEocFZlY3Qsc2hhcGUxPWEsc2hhcGUyPWIpL3N1bShkYmlub20oeD0zLHNpemU9NCxwcm9iPXBWZWN0KSpkYmV0YShwVmVjdCxzaGFwZTE9YSxzaGFwZTI9YikpLAogICAgIHR5cD0ibCIseWxhYj0iTGlrZWxpaG9vZCIseGxhYj0iUCIpCnBsb3QocFZlY3QsCiAgICAgZGJpbm9tKHg9NixzaXplPTgscHJvYj1wVmVjdCkqZGJldGEocFZlY3Qsc2hhcGUxPWEsc2hhcGUyPWIpL3N1bShkYmlub20oeD02LHNpemU9OCxwcm9iPXBWZWN0KSpkYmV0YShwVmVjdCxzaGFwZTE9YSxzaGFwZTI9YikpLAogICAgIHR5cD0ibCIseWxhYj0iTGlrZWxpaG9vZCIseGxhYj0iUCIpCnBsb3QocFZlY3QsCiAgICAgZGJpbm9tKHg9MTIsc2l6ZT0xNixwcm9iPXBWZWN0KSpkYmV0YShwVmVjdCxzaGFwZTE9YSxzaGFwZTI9Yikvc3VtKGRiaW5vbSh4PTEyLHNpemU9MTYscHJvYj1wVmVjdCkqZGJldGEocFZlY3Qsc2hhcGUxPWEsc2hhcGUyPWIpKSwKICAgICB0eXA9ImwiLHlsYWI9Ikxpa2VsaWhvb2QiLHhsYWI9IlAiKQpwbG90KHBWZWN0LAogICAgIGRiaW5vbSh4PTI0LHNpemU9MzIscHJvYj1wVmVjdCkqZGJldGEocFZlY3Qsc2hhcGUxPWEsc2hhcGUyPWIpL3N1bShkYmlub20oeD0yNCxzaXplPTQyLHByb2I9cFZlY3QpKmRiZXRhKHBWZWN0LHNoYXBlMT1hLHNoYXBlMj1iKSksCiAgICAgdHlwPSJsIix5bGFiPSJMaWtlbGlob29kIix4bGFiPSJQIikKcGxvdChwVmVjdCwKICAgICBkYmlub20oeD0zMDAsc2l6ZT00MDAscHJvYj1wVmVjdCkqZGJldGEocFZlY3Qsc2hhcGUxPWEsc2hhcGUyPWIpL3N1bShkYmlub20oeD0zMDAsc2l6ZT00MDAscHJvYj1wVmVjdCkqZGJldGEocFZlY3Qsc2hhcGUxPWEsc2hhcGUyPWIpKSwKICAgICB0eXA9ImwiLHlsYWI9Ikxpa2VsaWhvb2QiLHhsYWI9IlAiKQpwbG90KHBWZWN0LAogICAgIGRiaW5vbSh4PTMwMDAsc2l6ZT00MDAwLHByb2I9cFZlY3QpKmRiZXRhKHBWZWN0LHNoYXBlMT1hLHNoYXBlMj1iKS9zdW0oZGJpbm9tKHg9MzAwMCxzaXplPTQwMDAscHJvYj1wVmVjdCkqZGJldGEocFZlY3Qsc2hhcGUxPWEsc2hhcGUyPWIpKSwKICAgICB0eXA9ImwiLHlsYWI9Ikxpa2VsaWhvb2QiLHhsYWI9IlAiKQpwYXIocGFyT2xkKQpgYGAKClJlY2FsY3VsYXRpbmcgd2l0aCBzZWNvbmQgcHJpb3IuLi4KYGBge3J9CmE8LWI8LTEwICMgQmV0YSBwYXJtcwpwYXJPbGQ8LXBhcihtZnJvdz1jKDMsMiksb21hPWMoMSwxLDEsMSksbWFyPWMoMSwxLDEsMSkrMC41KQpwbG90KHBWZWN0LAogICAgIGRiaW5vbSh4PTMsc2l6ZT00LHByb2I9cFZlY3QpKmRiZXRhKHBWZWN0LHNoYXBlMT1hLHNoYXBlMj1iKS9zdW0oZGJpbm9tKHg9MyxzaXplPTQscHJvYj1wVmVjdCkqZGJldGEocFZlY3Qsc2hhcGUxPWEsc2hhcGUyPWIpKSwKICAgICB0eXA9ImwiLHlsYWI9Ikxpa2VsaWhvb2QiLHhsYWI9IlAiKQpwbG90KHBWZWN0LAogICAgIGRiaW5vbSh4PTYsc2l6ZT04LHByb2I9cFZlY3QpKmRiZXRhKHBWZWN0LHNoYXBlMT1hLHNoYXBlMj1iKS9zdW0oZGJpbm9tKHg9NixzaXplPTgscHJvYj1wVmVjdCkqZGJldGEocFZlY3Qsc2hhcGUxPWEsc2hhcGUyPWIpKSwKICAgICB0eXA9ImwiLHlsYWI9Ikxpa2VsaWhvb2QiLHhsYWI9IlAiKQpwbG90KHBWZWN0LAogICAgIGRiaW5vbSh4PTEyLHNpemU9MTYscHJvYj1wVmVjdCkqZGJldGEocFZlY3Qsc2hhcGUxPWEsc2hhcGUyPWIpL3N1bShkYmlub20oeD0xMixzaXplPTE2LHByb2I9cFZlY3QpKmRiZXRhKHBWZWN0LHNoYXBlMT1hLHNoYXBlMj1iKSksCiAgICAgdHlwPSJsIix5bGFiPSJMaWtlbGlob29kIix4bGFiPSJQIikKcGxvdChwVmVjdCwKICAgICBkYmlub20oeD0yNCxzaXplPTMyLHByb2I9cFZlY3QpKmRiZXRhKHBWZWN0LHNoYXBlMT1hLHNoYXBlMj1iKS9zdW0oZGJpbm9tKHg9MjQsc2l6ZT00Mixwcm9iPXBWZWN0KSpkYmV0YShwVmVjdCxzaGFwZTE9YSxzaGFwZTI9YikpLAogICAgIHR5cD0ibCIseWxhYj0iTGlrZWxpaG9vZCIseGxhYj0iUCIpCnBsb3QocFZlY3QsCiAgICAgZGJpbm9tKHg9MzAwLHNpemU9NDAwLHByb2I9cFZlY3QpKmRiZXRhKHBWZWN0LHNoYXBlMT1hLHNoYXBlMj1iKS9zdW0oZGJpbm9tKHg9MzAwLHNpemU9NDAwLHByb2I9cFZlY3QpKmRiZXRhKHBWZWN0LHNoYXBlMT1hLHNoYXBlMj1iKSksCiAgICAgdHlwPSJsIix5bGFiPSJMaWtlbGlob29kIix4bGFiPSJQIikKcGxvdChwVmVjdCwKICAgICBkYmlub20oeD0zMDAwLHNpemU9NDAwMCxwcm9iPXBWZWN0KSpkYmV0YShwVmVjdCxzaGFwZTE9YSxzaGFwZTI9Yikvc3VtKGRiaW5vbSh4PTMwMDAsc2l6ZT00MDAwLHByb2I9cFZlY3QpKmRiZXRhKHBWZWN0LHNoYXBlMT1hLHNoYXBlMj1iKSksCiAgICAgdHlwPSJsIix5bGFiPSJMaWtlbGlob29kIix4bGFiPSJQIikKcGFyKHBhck9sZCkKYGBgCgpQUk9CTEVNIDI6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCk1ha2UgYSBmaWd1cmUgd2l0aCA2IHBhbmVscyB0aGF0IHNob3cgdGhlIHByaW9yLCBsaWtlbGlob29kLCBhbmQgcG9zdGVyaW9yIGZvciB0aGUgZm9sbG93aW5nIHNhbXBsZXMgKHNlZWRsaW5ncyxzZWVkcyk6KDEsMTApLCgxMCwxMDApLCgxMDAsMTAwMCkuIENob29zZSBib3RoIGEgZmxhdCBwcmlvciAoZS5nLiwgQmV0YSgxLDEpICkgYW5kIGEgc3Ryb25nIHByaW9yIHVzaW5nIHRoZSBCZXRhIGRpc3RyaWJ1dGlvbi4KClNvbHV0aW9uCgpgYGB7cn0KYTwtMTA7IGI8LTEwICMgRkxBVCBCZXRhIHBhcm1zCnNlZWRzPC0xMDAwOyBzZWVkbGluZ3M8LTEwMApwVmVjdDwtc2VxKDAsMSxsZW5ndGg9MTAwMCkKCnBhck9sZDwtcGFyKG1mcm93PWMoMywxKSxvbWE9YygxLDEsMSwxKSxtYXI9YygxLDEsMSwxKSswLjUpCnBsb3QocFZlY3QsZGJpbm9tKHg9c2VlZGxpbmdzLHNpemU9c2VlZHMscHJvYj1wVmVjdCksdHlwPSJsIix5bGFiPSJMaWtlbGlob29kIix4bGFiPSJQIikKcGxvdChwVmVjdCxkYmV0YShwVmVjdCxzaGFwZTE9YSxzaGFwZTI9YiksdHlwPSJsIix5bGFiPSJMaWtlbGlob29kIix4bGFiPSJQIikKcGxvdChwVmVjdCxkYmlub20oeD1zZWVkbGluZ3Msc2l6ZT1zZWVkcyxwcm9iPXBWZWN0KSpkYmV0YShwVmVjdCxzaGFwZTE9YSxzaGFwZTI9Yikvc3VtKGRiaW5vbSh4PXNlZWRsaW5ncyxzaXplPXNlZWRzLHByb2I9cFZlY3QpKmRiZXRhKHBWZWN0LHNoYXBlMT1hLHNoYXBlMj1iKSksCiAgICAgdHlwPSJsIix5bGFiPSJMaWtlbGlob29kIix4bGFiPSJQIikKCnBhcihwYXJPbGQpCmBgYAoKCgoKCgoKCgoKCg==