library(openintro)
download.file("http://www.openintro.org/stat/data/atheism.RData", destfile = "atheism.RData")
load("atheism.RData")
Exercise 1
In the first paragraph, several key findings are reported. Do these percentages appear to be sample statistics (derived from the data sample) or population parameters?
The first paragraph introduced sample statistics of atheism.
Exercise 2
The title of the report is “Global Index of Religiosity and Atheism”. To generalize the report’s findings to the global human population, what must we assume about the sampling method? Does that seem like a reasonable assumption?
We would have to assume the sampling methods were both independent and random if we want them to be generalizable to all of the world. Because there is so much variety in both access to data questions (surveys,etc.) I don’t think this is necessarily reasonable, unless extreme caution was taken to get a truly random independent sample.
Exercise 3
What does each row of Table 6 correspond to? What does each row of atheism correspond to?
Each row of table 6 is a country broken down by the percentages that people fit into the various categories of religious, not religious, convinced athesiest, and unsure. The sample size is also included so this is not the entire population of the country.
Exercise 4
Using the command below, create a new dataframe called us12 that contains only the rows in atheism associated with respondents to the 2012 survey from the United States. Next, calculate the proportion of atheist responses. Does it agree with the percentage in Table 6? If not, why?
us2012 <- subset(atheism, nationality == "United States" & year == "2012")
nrow(us2012)
## [1] 1002
us2012.atheist <- subset(us2012, response == "atheist" )
nrow(us2012.atheist)
## [1] 50
us2012.nonatheist <- subset(us2012, response == "non-atheist")
nrow(us2012.nonatheist)
## [1] 952
p.atheist <- nrow(us2012.atheist)/nrow(us2012)
p.atheist
## [1] 0.0499002
Our P-value here is 0.0499 which we can round to 0.05, the same as the value of 5% stated in table 6.
Exercise 5
Write out the conditions for inference to construct a 95% confidence interval for the proportion of atheists in the United States in 2012. Are you confident all conditions are met?
inference (us2012$response, est = "proportion", type = "ci", method = "theoretical", success = "atheist")
## Single proportion -- success: atheist
## Summary statistics:

## p_hat = 0.0499 ; n = 1002
## Check conditions: number of successes = 50 ; number of failures = 952
## Standard error = 0.0069
## 95 % Confidence interval = ( 0.0364 , 0.0634 )
The conditions we need are normality, independence, and randomness. All of these are satisfied.
Exercise 6
Based on the R output, what is the margin of error for the estimate of the proportion of the proportion of atheists in US in 2012?
1.96* standard error (0.0069 ) = 0.013524
Exericse 7
Using the inference function, calculate confidence intervals for the proportion of atheists in 2012 in two other countries of your choice, and report the associated margins of error. Be sure to note whether the conditions for inference are met. It may be helpful to create new data sets for each of the two countries first, and then use these data sets in the inference function to construct the confidence intervals.
fiji2012 <- subset(atheism, nationality == "Fiji" & year == "2012")
inference(fiji2012$response, est = "proportion", type = "ci", method = "theoretical",
success = "atheist")
## Single proportion -- success: atheist
## Summary statistics:

## p_hat = 0.0098 ; n = 1018
## Check conditions: number of successes = 10 ; number of failures = 1008
## Standard error = 0.0031
## 95 % Confidence interval = ( 0.0038 , 0.0159 )
cameroon2012 <- subset(atheism, nationality == "Cameroon" & year == "2012")
inference(cameroon2012$response, est = "proportion", type = "ci", method = "theoretical",
success = "atheist")
## Single proportion -- success: atheist
## Summary statistics:

## p_hat = 0.0298 ; n = 504
## Check conditions: number of successes = 15 ; number of failures = 489
## Standard error = 0.0076
## 95 % Confidence interval = ( 0.0149 , 0.0446 )
n <- 1000
p <- seq(0, 1, 0.01)
me <- 2 * sqrt(p * (1 - p)/n)
plot(me ~ p, ylab = "Margin of Error", xlab = "Population Proportion")

Exercise 8
Describe the relationship between p and me.
The relationship between p and me is quadratic, it increases up until a p of about 0.5 then begins to decrease again.
p <- 0.1
n <- 1040
p_hats <- rep(0, 5000)
for(i in 1:5000){
samp <- sample(c("atheist", "non_atheist"), n, replace = TRUE, prob = c(p, 1-p))
p_hats[i] <- sum(samp == "atheist")/n
}
hist(p_hats, main = "p = 0.1, n = 1040", xlim = c(0, 0.18))

Exercise 9
Describe the sampling distribution of sample proportions at n=1040 and p=0.1. Be sure to note the center, spread, and shape. Hint: Remember that R has functions such as mean to calculate summary statistics.
This sampling distribution is fairly symmetrical and unimodal, with the mean around 0.10.
Exericse 10
Repeat the above simulation three more times but with modified sample sizes and proportions: for n=400 and p=0.1, n=1040 and p=0.02, and n=400 and p=0.02. Plot all four histograms together by running the par(mfrow = c(2, 2)) command before creating the histograms. You may need to expand the plot window to accommodate the larger two-by-two plot. Describe the three new sampling distributions. Based on these limited plots, how does n appear to affect the distribution of p̂ ? How does p affect the sampling distribution?
p <- 0.1
n<- 400
phats <- rep(0,5000)
for(i in 1:5000){
samp <- sample(c("atheist", "non_atheist"), n, replace = TRUE, prob = c(p, 1-p))
phats[i] <- sum(samp == "atheist")/n}
p <- 0.02
n <- 400
phats1 <- rep(0, 5000)
for(i in 1:5000){
samp <- sample(c("atheist", "non_atheist"), n, replace = TRUE, prob = c(p, 1-p))
phats1[i] <- sum(samp == "atheist")/n}
p <- 0.02
n <- 1040
phats2 <- rep(0, 5000)
for(i in 1:5000){
samp <- sample(c("atheist", "non_atheist"), n, replace = TRUE, prob = c(p, 1-p))
phats2[i] <- sum(samp == "atheist")/n}
par(mfrow = c(2, 2))
hist(phats2, main = "p = 0.02, n = 1040", xlim = c(0, 0.18))
hist(phats, main = "p = 0.1, n = 1040", xlim = c(0, 0.18))
hist(phats, main = "p = 0.1, n = 400", xlim = c(0, 0.18))
hist(phats1, main = "p = 0.02, n = 400", xlim = c(0, 0.18))

The first two charts with a larger n have a smaller spread. Looking between the two charts with the same n, the larger p gives a smaller spread.
Exercise 11
If you refer to Table 6, you’ll find that Australia has a sample proportion of 0.1 on a sample size of 1040, and that Ecuador has a sample proportion of 0.02 on 400 subjects. Let’s suppose for this exercise that these point estimates are actually the truth. Then given the shape of their respective sampling distributions, do you think it is sensible to proceed with inference and report margin of errors, as the reports does?
We can proceed with the inference and margin of error for Australia because the sample size is large enough and we have a larger number of atheists, however we cannot do this with Ecuador.
On your own 1
Answer the following two questions using the inference function. As always, write out the hypotheses for any tests you conduct and outline the status of the conditions for inference.
- Is there convincing evidence that Spain has seen a change in its atheism index between 2005 and 2012? Hint: Create a new data set for respondents from Spain. Form confidence intervals for the true proportion of athiests in both years, and determine whether they overlap.
spain2012 <- subset(atheism, nationality == "Spain" & year == "2012")
inference(spain2012$response, est = "proportion", type = "ci", method = "theoretical",
success = "atheist")
## Single proportion -- success: atheist
## Summary statistics:

## p_hat = 0.09 ; n = 1145
## Check conditions: number of successes = 103 ; number of failures = 1042
## Standard error = 0.0085
## 95 % Confidence interval = ( 0.0734 , 0.1065 )
spain2005 <- subset(atheism, nationality == "Spain" & year == 2005)
nrow(spain2005)
## [1] 1146
## [1] 1145
spain2005.atheist <- subset(spain2005, response == "atheist")
nrow(spain2005.atheist)
## [1] 115
spain2012.atheist <- subset(spain2012, response == "atheist")
nrow(spain2012.atheist)
## [1] 103
inference(spain2012$response, est = "proportion", type = "ci", method = "theoretical",
success = "atheist")
## Single proportion -- success: atheist
## Summary statistics:

## p_hat = 0.09 ; n = 1145
## Check conditions: number of successes = 103 ; number of failures = 1042
## Standard error = 0.0085
## 95 % Confidence interval = ( 0.0734 , 0.1065 )
inference(spain2005$response, est = "proportion", type = "ci", method = "theoretical",
success = "atheist")
## Single proportion -- success: atheist
## Summary statistics:

## p_hat = 0.1003 ; n = 1146
## Check conditions: number of successes = 115 ; number of failures = 1031
## Standard error = 0.0089
## 95 % Confidence interval = ( 0.083 , 0.1177 )
The confidence intervals for the two years are fairly similar and overlap, so there is not much change.
- Is there convincing evidence that the United States has seen a change in its atheism index between 2005 and 2012?
Single proportion – success: atheist Summary statistics: p_hat = 0.0499 ; n = 1002 Check conditions: number of successes = 50 ; number of failures = 952 Standard error = 0.0069 95 % Confidence interval = ( 0.0364 , 0.0634 ) Single proportion – success: atheist Summary statistics: p_hat = 0.01 ; n = 1002 Check conditions: number of successes = 10 ; number of failures = 992 Standard error = 0.0031 95 % Confidence interval = ( 0.0038 , 0.0161 )
For some reason my lab will not publish with that code in there so I had to delete it and here is what it produced, sorry.
This time our 95% confidence intervals do not overlap ( 0.0364 , 0.0634 ) and ( 0.0038 , 0.0161 ) so we can say there was a change between 2005 and 2012 in atheism in the US.
On your own 2
If in fact there has been no change in the atheism index in the countries listed in Table 4, in how many of those countries would you expect to detect a change (at a significance level of 0.05) simply by chance? Hint: Look in the textbook index under Type 1 error.
There are 39 countries in table 4, so 39*0.05 = 1.95, or about 2 countries we would expect to see a change in.
On your own 3
Suppose you’re hired by the local government to estimate the proportion of residents that attend a religious service on a weekly basis. According to the guidelines, the estimate must have a margin of error no greater than 1% with 95% confidence. You have no idea what to expect for p. How many people would you have to sample to ensure that you are within the guidelines?
zscore <- 1.96
ME <- .1
P <- .5
N <- ((zscore^2) * .25/ME^2)
N
## [1] 96.04
Our sample size would have to be at least 96.04, which is 97 since we cannot have 0.04 of a person.
LS0tCnRpdGxlOiAiSW5mZXJlbmNlIGZvciBjYXRlZ29yaWNhbCBkYXRhIgphdXRob3I6ICJLaXJzdGVuIEdvbGRuZXIiCm91dHB1dDogb3BlbmludHJvOjpsYWJfcmVwb3J0Ci0tLQoKYGBge3IgbG9hZC1wYWNrYWdlcywgbWVzc2FnZT1GQUxTRX0KbGlicmFyeShvcGVuaW50cm8pCmRvd25sb2FkLmZpbGUoImh0dHA6Ly93d3cub3BlbmludHJvLm9yZy9zdGF0L2RhdGEvYXRoZWlzbS5SRGF0YSIsIGRlc3RmaWxlID0gImF0aGVpc20uUkRhdGEiKQpsb2FkKCJhdGhlaXNtLlJEYXRhIikKYGBgCgojIyMgRXhlcmNpc2UgMQoKSW4gdGhlIGZpcnN0IHBhcmFncmFwaCwgc2V2ZXJhbCBrZXkgZmluZGluZ3MgYXJlIHJlcG9ydGVkLiBEbyB0aGVzZSBwZXJjZW50YWdlcyBhcHBlYXIgdG8gYmUgc2FtcGxlIHN0YXRpc3RpY3MgKGRlcml2ZWQgZnJvbSB0aGUgZGF0YSBzYW1wbGUpIG9yIHBvcHVsYXRpb24gcGFyYW1ldGVycz8KClRoZSBmaXJzdCBwYXJhZ3JhcGggaW50cm9kdWNlZCBzYW1wbGUgc3RhdGlzdGljcyBvZiBhdGhlaXNtLiAKCiMjIyBFeGVyY2lzZSAyCgpUaGUgdGl0bGUgb2YgdGhlIHJlcG9ydCBpcyDigJxHbG9iYWwgSW5kZXggb2YgUmVsaWdpb3NpdHkgYW5kIEF0aGVpc23igJ0uIFRvIGdlbmVyYWxpemUgdGhlIHJlcG9ydOKAmXMgZmluZGluZ3MgdG8gdGhlIGdsb2JhbCBodW1hbiBwb3B1bGF0aW9uLCB3aGF0IG11c3Qgd2UgYXNzdW1lIGFib3V0IHRoZSBzYW1wbGluZyBtZXRob2Q/IERvZXMgdGhhdCBzZWVtIGxpa2UgYSByZWFzb25hYmxlIGFzc3VtcHRpb24/CgpXZSB3b3VsZCBoYXZlIHRvIGFzc3VtZSB0aGUgc2FtcGxpbmcgbWV0aG9kcyB3ZXJlIGJvdGggaW5kZXBlbmRlbnQgYW5kIHJhbmRvbSBpZiB3ZSB3YW50IHRoZW0gdG8gYmUgZ2VuZXJhbGl6YWJsZSB0byBhbGwgb2YgdGhlIHdvcmxkLiBCZWNhdXNlIHRoZXJlIGlzIHNvIG11Y2ggdmFyaWV0eSBpbiBib3RoIGFjY2VzcyB0byBkYXRhIHF1ZXN0aW9ucyAoc3VydmV5cyxldGMuKSBJIGRvbid0IHRoaW5rIHRoaXMgaXMgbmVjZXNzYXJpbHkgcmVhc29uYWJsZSwgdW5sZXNzIGV4dHJlbWUgY2F1dGlvbiB3YXMgdGFrZW4gdG8gZ2V0IGEgdHJ1bHkgcmFuZG9tIGluZGVwZW5kZW50IHNhbXBsZS4gCgojIyMgRXhlcmNpc2UgMwoKV2hhdCBkb2VzIGVhY2ggcm93IG9mIFRhYmxlIDYgY29ycmVzcG9uZCB0bz8gV2hhdCBkb2VzIGVhY2ggcm93IG9mIGF0aGVpc20gY29ycmVzcG9uZCB0bz8KCkVhY2ggcm93IG9mIHRhYmxlIDYgaXMgYSBjb3VudHJ5IGJyb2tlbiBkb3duIGJ5IHRoZSBwZXJjZW50YWdlcyB0aGF0IHBlb3BsZSBmaXQgaW50byB0aGUgdmFyaW91cyBjYXRlZ29yaWVzIG9mIHJlbGlnaW91cywgbm90IHJlbGlnaW91cywgY29udmluY2VkIGF0aGVzaWVzdCwgYW5kIHVuc3VyZS4gVGhlIHNhbXBsZSBzaXplIGlzIGFsc28gaW5jbHVkZWQgc28gdGhpcyBpcyBub3QgdGhlIGVudGlyZSBwb3B1bGF0aW9uIG9mIHRoZSBjb3VudHJ5LiAKCgojIyMgRXhlcmNpc2UgNAoKVXNpbmcgdGhlIGNvbW1hbmQgYmVsb3csIGNyZWF0ZSBhIG5ldyBkYXRhZnJhbWUgY2FsbGVkIHVzMTIgdGhhdCBjb250YWlucyBvbmx5IHRoZSByb3dzIGluIGF0aGVpc20gYXNzb2NpYXRlZCB3aXRoIHJlc3BvbmRlbnRzIHRvIHRoZSAyMDEyIHN1cnZleSBmcm9tIHRoZSBVbml0ZWQgU3RhdGVzLiBOZXh0LCBjYWxjdWxhdGUgdGhlIHByb3BvcnRpb24gb2YgYXRoZWlzdCByZXNwb25zZXMuIERvZXMgaXQgYWdyZWUgd2l0aCB0aGUgcGVyY2VudGFnZSBpbiBUYWJsZSA2PyBJZiBub3QsIHdoeT8KCmBgYHtyfQp1czIwMTIgPC0gc3Vic2V0KGF0aGVpc20sIG5hdGlvbmFsaXR5ID09ICJVbml0ZWQgU3RhdGVzIiAmIHllYXIgPT0gIjIwMTIiKQpucm93KHVzMjAxMikKdXMyMDEyLmF0aGVpc3QgPC0gc3Vic2V0KHVzMjAxMiwgcmVzcG9uc2UgPT0gImF0aGVpc3QiICkKbnJvdyh1czIwMTIuYXRoZWlzdCkKdXMyMDEyLm5vbmF0aGVpc3QgPC0gc3Vic2V0KHVzMjAxMiwgcmVzcG9uc2UgPT0gIm5vbi1hdGhlaXN0IikKbnJvdyh1czIwMTIubm9uYXRoZWlzdCkKCnAuYXRoZWlzdCA8LSBucm93KHVzMjAxMi5hdGhlaXN0KS9ucm93KHVzMjAxMikKcC5hdGhlaXN0CmBgYApPdXIgUC12YWx1ZSBoZXJlIGlzIDAuMDQ5OSB3aGljaCB3ZSBjYW4gcm91bmQgdG8gMC4wNSwgdGhlIHNhbWUgYXMgdGhlIHZhbHVlIG9mIDUlIHN0YXRlZCBpbiB0YWJsZSA2LiAKCiMjIyBFeGVyY2lzZSA1CgpXcml0ZSBvdXQgdGhlIGNvbmRpdGlvbnMgZm9yIGluZmVyZW5jZSB0byBjb25zdHJ1Y3QgYSA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbCBmb3IgdGhlIHByb3BvcnRpb24gb2YgYXRoZWlzdHMgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgaW4gMjAxMi4gQXJlIHlvdSBjb25maWRlbnQgYWxsIGNvbmRpdGlvbnMgYXJlIG1ldD8KCmBgYHtyfQppbmZlcmVuY2UgKHVzMjAxMiRyZXNwb25zZSwgZXN0ID0gInByb3BvcnRpb24iLCB0eXBlID0gImNpIiwgbWV0aG9kID0gInRoZW9yZXRpY2FsIiwgIHN1Y2Nlc3MgPSAiYXRoZWlzdCIpCmBgYApUaGUgY29uZGl0aW9ucyB3ZSBuZWVkIGFyZSBub3JtYWxpdHksIGluZGVwZW5kZW5jZSwgYW5kIHJhbmRvbW5lc3MuIEFsbCBvZiB0aGVzZSBhcmUgc2F0aXNmaWVkLiAKCiMjIyBFeGVyY2lzZSA2CgpCYXNlZCBvbiB0aGUgUiBvdXRwdXQsIHdoYXQgaXMgdGhlIG1hcmdpbiBvZiBlcnJvciBmb3IgdGhlIGVzdGltYXRlIG9mIHRoZSBwcm9wb3J0aW9uIG9mIHRoZSBwcm9wb3J0aW9uIG9mIGF0aGVpc3RzIGluIFVTIGluIDIwMTI/CgoxLjk2KiBzdGFuZGFyZCBlcnJvciAoMC4wMDY5ICkgPSAwLjAxMzUyNAoKIyMjIEV4ZXJpY3NlIDcKClVzaW5nIHRoZSBpbmZlcmVuY2UgZnVuY3Rpb24sIGNhbGN1bGF0ZSBjb25maWRlbmNlIGludGVydmFscyBmb3IgdGhlIHByb3BvcnRpb24gb2YgYXRoZWlzdHMgaW4gMjAxMiBpbiB0d28gb3RoZXIgY291bnRyaWVzIG9mIHlvdXIgY2hvaWNlLCBhbmQgcmVwb3J0IHRoZSBhc3NvY2lhdGVkIG1hcmdpbnMgb2YgZXJyb3IuIEJlIHN1cmUgdG8gbm90ZSB3aGV0aGVyIHRoZSBjb25kaXRpb25zIGZvciBpbmZlcmVuY2UgYXJlIG1ldC4gSXQgbWF5IGJlIGhlbHBmdWwgdG8gY3JlYXRlIG5ldyBkYXRhIHNldHMgZm9yIGVhY2ggb2YgdGhlIHR3byBjb3VudHJpZXMgZmlyc3QsIGFuZCB0aGVuIHVzZSB0aGVzZSBkYXRhIHNldHMgaW4gdGhlIGluZmVyZW5jZSBmdW5jdGlvbiB0byBjb25zdHJ1Y3QgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLgoKYGBge3J9CmZpamkyMDEyIDwtIHN1YnNldChhdGhlaXNtLCBuYXRpb25hbGl0eSA9PSAiRmlqaSIgJiB5ZWFyID09ICIyMDEyIikKaW5mZXJlbmNlKGZpamkyMDEyJHJlc3BvbnNlLCBlc3QgPSAicHJvcG9ydGlvbiIsIHR5cGUgPSAiY2kiLCBtZXRob2QgPSAidGhlb3JldGljYWwiLCAKICAgICAgICAgIHN1Y2Nlc3MgPSAiYXRoZWlzdCIpCmBgYAoKYGBge3J9CmNhbWVyb29uMjAxMiA8LSBzdWJzZXQoYXRoZWlzbSwgbmF0aW9uYWxpdHkgPT0gIkNhbWVyb29uIiAmIHllYXIgPT0gIjIwMTIiKQppbmZlcmVuY2UoY2FtZXJvb24yMDEyJHJlc3BvbnNlLCBlc3QgPSAicHJvcG9ydGlvbiIsIHR5cGUgPSAiY2kiLCBtZXRob2QgPSAidGhlb3JldGljYWwiLCAKICAgICAgICAgIHN1Y2Nlc3MgPSAiYXRoZWlzdCIpCmBgYAoKYGBge3J9Cm4gPC0gMTAwMApwIDwtIHNlcSgwLCAxLCAwLjAxKQptZSA8LSAyICogc3FydChwICogKDEgLSBwKS9uKQpwbG90KG1lIH4gcCwgeWxhYiA9ICJNYXJnaW4gb2YgRXJyb3IiLCB4bGFiID0gIlBvcHVsYXRpb24gUHJvcG9ydGlvbiIpCmBgYAoKIyMjIEV4ZXJjaXNlIDgKCkRlc2NyaWJlIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBwIGFuZCBtZS4KClRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBwIGFuZCBtZSBpcyBxdWFkcmF0aWMsIGl0IGluY3JlYXNlcyB1cCB1bnRpbCBhIHAgb2YgYWJvdXQgMC41IHRoZW4gYmVnaW5zIHRvIGRlY3JlYXNlIGFnYWluLiAKCmBgYHtyfQpwIDwtIDAuMQpuIDwtIDEwNDAKcF9oYXRzIDwtIHJlcCgwLCA1MDAwKQoKZm9yKGkgaW4gMTo1MDAwKXsKICBzYW1wIDwtIHNhbXBsZShjKCJhdGhlaXN0IiwgIm5vbl9hdGhlaXN0IiksIG4sIHJlcGxhY2UgPSBUUlVFLCBwcm9iID0gYyhwLCAxLXApKQogIHBfaGF0c1tpXSA8LSBzdW0oc2FtcCA9PSAiYXRoZWlzdCIpL24KfQoKaGlzdChwX2hhdHMsIG1haW4gPSAicCA9IDAuMSwgbiA9IDEwNDAiLCB4bGltID0gYygwLCAwLjE4KSkKYGBgCgojIyMgRXhlcmNpc2UgOQoKRGVzY3JpYmUgdGhlIHNhbXBsaW5nIGRpc3RyaWJ1dGlvbiBvZiBzYW1wbGUgcHJvcG9ydGlvbnMgYXQgbj0xMDQwIGFuZCBwPTAuMS4gQmUgc3VyZSB0byBub3RlIHRoZSBjZW50ZXIsIHNwcmVhZCwgYW5kIHNoYXBlLgpIaW50OiBSZW1lbWJlciB0aGF0IFIgaGFzIGZ1bmN0aW9ucyBzdWNoIGFzIG1lYW4gdG8gY2FsY3VsYXRlIHN1bW1hcnkgc3RhdGlzdGljcy4KClRoaXMgc2FtcGxpbmcgZGlzdHJpYnV0aW9uIGlzIGZhaXJseSBzeW1tZXRyaWNhbCBhbmQgdW5pbW9kYWwsIHdpdGggdGhlIG1lYW4gYXJvdW5kIDAuMTAuIAoKIyMjIEV4ZXJpY3NlIDEwCgpSZXBlYXQgdGhlIGFib3ZlIHNpbXVsYXRpb24gdGhyZWUgbW9yZSB0aW1lcyBidXQgd2l0aCBtb2RpZmllZCBzYW1wbGUgc2l6ZXMgYW5kIHByb3BvcnRpb25zOiBmb3Igbj00MDAgYW5kIHA9MC4xLCBuPTEwNDAgYW5kIHA9MC4wMiwgYW5kIG49NDAwIGFuZCBwPTAuMDIuIFBsb3QgYWxsIGZvdXIgaGlzdG9ncmFtcyB0b2dldGhlciBieSBydW5uaW5nIHRoZSBwYXIobWZyb3cgPSBjKDIsIDIpKSBjb21tYW5kIGJlZm9yZSBjcmVhdGluZyB0aGUgaGlzdG9ncmFtcy4gWW91IG1heSBuZWVkIHRvIGV4cGFuZCB0aGUgcGxvdCB3aW5kb3cgdG8gYWNjb21tb2RhdGUgdGhlIGxhcmdlciB0d28tYnktdHdvIHBsb3QuIERlc2NyaWJlIHRoZSB0aHJlZSBuZXcgc2FtcGxpbmcgZGlzdHJpYnV0aW9ucy4gQmFzZWQgb24gdGhlc2UgbGltaXRlZCBwbG90cywgaG93IGRvZXMgbiBhcHBlYXIgdG8gYWZmZWN0IHRoZSBkaXN0cmlidXRpb24gb2YgcMyCID8gSG93IGRvZXMgcCBhZmZlY3QgdGhlIHNhbXBsaW5nIGRpc3RyaWJ1dGlvbj8KCmBgYHtyfQpwIDwtIDAuMQpuPC0gNDAwCnBoYXRzIDwtIHJlcCgwLDUwMDApCgpmb3IoaSBpbiAxOjUwMDApewogIHNhbXAgPC0gc2FtcGxlKGMoImF0aGVpc3QiLCAibm9uX2F0aGVpc3QiKSwgbiwgcmVwbGFjZSA9IFRSVUUsIHByb2IgPSBjKHAsIDEtcCkpCiAgcGhhdHNbaV0gPC0gc3VtKHNhbXAgPT0gImF0aGVpc3QiKS9ufQoKcCA8LSAwLjAyCm4gPC0gNDAwCnBoYXRzMSA8LSByZXAoMCwgNTAwMCkKCmZvcihpIGluIDE6NTAwMCl7CiAgc2FtcCA8LSBzYW1wbGUoYygiYXRoZWlzdCIsICJub25fYXRoZWlzdCIpLCBuLCByZXBsYWNlID0gVFJVRSwgcHJvYiA9IGMocCwgMS1wKSkKICBwaGF0czFbaV0gPC0gc3VtKHNhbXAgPT0gImF0aGVpc3QiKS9ufQoKCnAgPC0gMC4wMgpuIDwtIDEwNDAKcGhhdHMyIDwtIHJlcCgwLCA1MDAwKQoKZm9yKGkgaW4gMTo1MDAwKXsKICBzYW1wIDwtIHNhbXBsZShjKCJhdGhlaXN0IiwgIm5vbl9hdGhlaXN0IiksIG4sIHJlcGxhY2UgPSBUUlVFLCBwcm9iID0gYyhwLCAxLXApKQogIHBoYXRzMltpXSA8LSBzdW0oc2FtcCA9PSAiYXRoZWlzdCIpL259CgpwYXIobWZyb3cgPSBjKDIsIDIpKQpoaXN0KHBoYXRzMiwgbWFpbiA9ICJwID0gMC4wMiwgbiA9IDEwNDAiLCB4bGltID0gYygwLCAwLjE4KSkKaGlzdChwaGF0cywgbWFpbiA9ICJwID0gMC4xLCBuID0gMTA0MCIsIHhsaW0gPSBjKDAsIDAuMTgpKQpoaXN0KHBoYXRzLCBtYWluID0gInAgPSAwLjEsIG4gPSA0MDAiLCB4bGltID0gYygwLCAwLjE4KSkKaGlzdChwaGF0czEsIG1haW4gPSAicCA9IDAuMDIsIG4gPSA0MDAiLCB4bGltID0gYygwLCAwLjE4KSkKYGBgCgpUaGUgZmlyc3QgdHdvIGNoYXJ0cyB3aXRoIGEgbGFyZ2VyIG4gaGF2ZSBhIHNtYWxsZXIgc3ByZWFkLiBMb29raW5nIGJldHdlZW4gdGhlIHR3byBjaGFydHMgd2l0aCB0aGUgc2FtZSBuLCB0aGUgbGFyZ2VyIHAgZ2l2ZXMgYSBzbWFsbGVyIHNwcmVhZC4gCgpgYGB7cn0KcGFyKG1mcm93ID0gYygxLCAxKSkKYGBgCgojIyMgRXhlcmNpc2UgMTEKCklmIHlvdSByZWZlciB0byBUYWJsZSA2LCB5b3XigJlsbCBmaW5kIHRoYXQgQXVzdHJhbGlhIGhhcyBhIHNhbXBsZSBwcm9wb3J0aW9uIG9mIDAuMSBvbiBhIHNhbXBsZSBzaXplIG9mIDEwNDAsIGFuZCB0aGF0IEVjdWFkb3IgaGFzIGEgc2FtcGxlIHByb3BvcnRpb24gb2YgMC4wMiBvbiA0MDAgc3ViamVjdHMuIExldOKAmXMgc3VwcG9zZSBmb3IgdGhpcyBleGVyY2lzZSB0aGF0IHRoZXNlIHBvaW50IGVzdGltYXRlcyBhcmUgYWN0dWFsbHkgdGhlIHRydXRoLiBUaGVuIGdpdmVuIHRoZSBzaGFwZSBvZiB0aGVpciByZXNwZWN0aXZlIHNhbXBsaW5nIGRpc3RyaWJ1dGlvbnMsIGRvIHlvdSB0aGluayBpdCBpcyBzZW5zaWJsZSB0byBwcm9jZWVkIHdpdGggaW5mZXJlbmNlIGFuZCByZXBvcnQgbWFyZ2luIG9mIGVycm9ycywgYXMgdGhlIHJlcG9ydHMgZG9lcz8KCldlIGNhbiBwcm9jZWVkIHdpdGggdGhlIGluZmVyZW5jZSBhbmQgbWFyZ2luIG9mIGVycm9yIGZvciBBdXN0cmFsaWEgYmVjYXVzZSB0aGUgc2FtcGxlIHNpemUgaXMgbGFyZ2UgZW5vdWdoIGFuZCB3ZSBoYXZlIGEgbGFyZ2VyIG51bWJlciBvZiBhdGhlaXN0cywgaG93ZXZlciB3ZSBjYW5ub3QgZG8gdGhpcyB3aXRoIEVjdWFkb3IuIAoKIyMjIE9uIHlvdXIgb3duIDEKCkFuc3dlciB0aGUgZm9sbG93aW5nIHR3byBxdWVzdGlvbnMgdXNpbmcgdGhlIGluZmVyZW5jZSBmdW5jdGlvbi4gQXMgYWx3YXlzLCB3cml0ZSBvdXQgdGhlIGh5cG90aGVzZXMgZm9yIGFueSB0ZXN0cyB5b3UgY29uZHVjdCBhbmQgb3V0bGluZSB0aGUgc3RhdHVzIG9mIHRoZSBjb25kaXRpb25zIGZvciBpbmZlcmVuY2UuCgphLiBJcyB0aGVyZSBjb252aW5jaW5nIGV2aWRlbmNlIHRoYXQgU3BhaW4gaGFzIHNlZW4gYSBjaGFuZ2UgaW4gaXRzIGF0aGVpc20gaW5kZXggYmV0d2VlbiAyMDA1IGFuZCAyMDEyPwpIaW50OiBDcmVhdGUgYSBuZXcgZGF0YSBzZXQgZm9yIHJlc3BvbmRlbnRzIGZyb20gU3BhaW4uIEZvcm0gY29uZmlkZW5jZSBpbnRlcnZhbHMgZm9yIHRoZSB0cnVlIHByb3BvcnRpb24gb2YgYXRoaWVzdHMgaW4gYm90aCB5ZWFycywgYW5kIGRldGVybWluZSB3aGV0aGVyIHRoZXkgb3ZlcmxhcC4KCmBgYHtyfQpzcGFpbjIwMTIgPC0gc3Vic2V0KGF0aGVpc20sIG5hdGlvbmFsaXR5ID09ICJTcGFpbiIgJiB5ZWFyID09ICIyMDEyIikKaW5mZXJlbmNlKHNwYWluMjAxMiRyZXNwb25zZSwgZXN0ID0gInByb3BvcnRpb24iLCB0eXBlID0gImNpIiwgbWV0aG9kID0gInRoZW9yZXRpY2FsIiwgCiAgICAgICAgICBzdWNjZXNzID0gImF0aGVpc3QiKQpgYGAKCgpgYGB7cn0Kc3BhaW4yMDA1IDwtIHN1YnNldChhdGhlaXNtLCBuYXRpb25hbGl0eSA9PSAiU3BhaW4iICYgeWVhciA9PSAyMDA1KQpucm93KHNwYWluMjAwNSkKbnJvdyhzcGFpbjIwMTIpCnNwYWluMjAwNS5hdGhlaXN0IDwtIHN1YnNldChzcGFpbjIwMDUsIHJlc3BvbnNlID09ICJhdGhlaXN0IikKbnJvdyhzcGFpbjIwMDUuYXRoZWlzdCkKc3BhaW4yMDEyLmF0aGVpc3QgPC0gc3Vic2V0KHNwYWluMjAxMiwgcmVzcG9uc2UgPT0gImF0aGVpc3QiKQpucm93KHNwYWluMjAxMi5hdGhlaXN0KQppbmZlcmVuY2Uoc3BhaW4yMDEyJHJlc3BvbnNlLCBlc3QgPSAicHJvcG9ydGlvbiIsIHR5cGUgPSAiY2kiLCBtZXRob2QgPSAidGhlb3JldGljYWwiLCAKICAgICAgICAgIHN1Y2Nlc3MgPSAiYXRoZWlzdCIpCmluZmVyZW5jZShzcGFpbjIwMDUkcmVzcG9uc2UsIGVzdCA9ICJwcm9wb3J0aW9uIiwgdHlwZSA9ICJjaSIsIG1ldGhvZCA9ICJ0aGVvcmV0aWNhbCIsIAogICAgICAgICAgc3VjY2VzcyA9ICJhdGhlaXN0IikKYGBgClRoZSBjb25maWRlbmNlIGludGVydmFscyBmb3IgdGhlIHR3byB5ZWFycyBhcmUgZmFpcmx5IHNpbWlsYXIgYW5kIG92ZXJsYXAsIHNvIHRoZXJlIGlzIG5vdCBtdWNoIGNoYW5nZS4gCgpiLiBJcyB0aGVyZSBjb252aW5jaW5nIGV2aWRlbmNlIHRoYXQgdGhlIFVuaXRlZCBTdGF0ZXMgaGFzIHNlZW4gYSBjaGFuZ2UgaW4gaXRzIGF0aGVpc20gaW5kZXggYmV0d2VlbiAyMDA1IGFuZCAyMDEyPwoKU2luZ2xlIHByb3BvcnRpb24gLS0gc3VjY2VzczogYXRoZWlzdCAKU3VtbWFyeSBzdGF0aXN0aWNzOiBwX2hhdCA9IDAuMDQ5OSA7ICBuID0gMTAwMiAKQ2hlY2sgY29uZGl0aW9uczogbnVtYmVyIG9mIHN1Y2Nlc3NlcyA9IDUwIDsgbnVtYmVyIG9mIGZhaWx1cmVzID0gOTUyIApTdGFuZGFyZCBlcnJvciA9IDAuMDA2OSAKOTUgJSBDb25maWRlbmNlIGludGVydmFsID0gKCAwLjAzNjQgLCAwLjA2MzQgKQpTaW5nbGUgcHJvcG9ydGlvbiAtLSBzdWNjZXNzOiBhdGhlaXN0IApTdW1tYXJ5IHN0YXRpc3RpY3M6IHBfaGF0ID0gMC4wMSA7ICBuID0gMTAwMiAKQ2hlY2sgY29uZGl0aW9uczogbnVtYmVyIG9mIHN1Y2Nlc3NlcyA9IDEwIDsgbnVtYmVyIG9mIGZhaWx1cmVzID0gOTkyIApTdGFuZGFyZCBlcnJvciA9IDAuMDAzMSAKOTUgJSBDb25maWRlbmNlIGludGVydmFsID0gKCAwLjAwMzggLCAwLjAxNjEgKQoKRm9yIHNvbWUgcmVhc29uIG15IGxhYiB3aWxsIG5vdCBwdWJsaXNoIHdpdGggdGhhdCBjb2RlIGluIHRoZXJlIHNvIEkgaGFkIHRvIGRlbGV0ZSBpdCBhbmQgaGVyZSBpcyB3aGF0IGl0IHByb2R1Y2VkLCBzb3JyeS4gCgpUaGlzIHRpbWUgb3VyIDk1JSBjb25maWRlbmNlIGludGVydmFscyBkbyBub3Qgb3ZlcmxhcCAoIDAuMDM2NCAsIDAuMDYzNCApIGFuZCAoIDAuMDAzOCAsIDAuMDE2MSApIHNvIHdlIGNhbiBzYXkgdGhlcmUgd2FzIGEgY2hhbmdlIGJldHdlZW4gMjAwNSBhbmQgMjAxMiBpbiBhdGhlaXNtIGluIHRoZSBVUy4gCgojIyMgT24geW91ciBvd24gMgoKSWYgaW4gZmFjdCB0aGVyZSBoYXMgYmVlbiBubyBjaGFuZ2UgaW4gdGhlIGF0aGVpc20gaW5kZXggaW4gdGhlIGNvdW50cmllcyBsaXN0ZWQgaW4gVGFibGUgNCwgaW4gaG93IG1hbnkgb2YgdGhvc2UgY291bnRyaWVzIHdvdWxkIHlvdSBleHBlY3QgdG8gZGV0ZWN0IGEgY2hhbmdlIChhdCBhIHNpZ25pZmljYW5jZSBsZXZlbCBvZiAwLjA1KSBzaW1wbHkgYnkgY2hhbmNlPwpIaW50OiBMb29rIGluIHRoZSB0ZXh0Ym9vayBpbmRleCB1bmRlciBUeXBlIDEgZXJyb3IuCgpUaGVyZSBhcmUgMzkgY291bnRyaWVzIGluIHRhYmxlIDQsIHNvIDM5KjAuMDUgPSAxLjk1LCBvciBhYm91dCAyIGNvdW50cmllcyB3ZSB3b3VsZCBleHBlY3QgdG8gc2VlIGEgY2hhbmdlIGluLiAKCiMjIyBPbiB5b3VyIG93biAzCgpTdXBwb3NlIHlvdeKAmXJlIGhpcmVkIGJ5IHRoZSBsb2NhbCBnb3Zlcm5tZW50IHRvIGVzdGltYXRlIHRoZSBwcm9wb3J0aW9uIG9mIHJlc2lkZW50cyB0aGF0IGF0dGVuZCBhIHJlbGlnaW91cyBzZXJ2aWNlIG9uIGEgd2Vla2x5IGJhc2lzLiBBY2NvcmRpbmcgdG8gdGhlIGd1aWRlbGluZXMsIHRoZSBlc3RpbWF0ZSBtdXN0IGhhdmUgYSBtYXJnaW4gb2YgZXJyb3Igbm8gZ3JlYXRlciB0aGFuIDElIHdpdGggOTUlIGNvbmZpZGVuY2UuIFlvdSBoYXZlIG5vIGlkZWEgd2hhdCB0byBleHBlY3QgZm9yIHAuIEhvdyBtYW55IHBlb3BsZSB3b3VsZCB5b3UgaGF2ZSB0byBzYW1wbGUgdG8gZW5zdXJlIHRoYXQgeW91IGFyZSB3aXRoaW4gdGhlIGd1aWRlbGluZXM/CgpgYGB7cn0KenNjb3JlIDwtIDEuOTYKTUUgPC0gLjEKUCA8LSAuNQpOIDwtICgoenNjb3JlXjIpICogLjI1L01FXjIpCk4KYGBgCgpPdXIgc2FtcGxlIHNpemUgd291bGQgaGF2ZSB0byBiZSBhdCBsZWFzdCA5Ni4wNCwgd2hpY2ggaXMgOTcgc2luY2Ugd2UgY2Fubm90IGhhdmUgMC4wNCBvZiBhIHBlcnNvbi4g