The survey

Exercise 1

Answer: These statistics are based on sample statistics because they were collected from a poll. In this case, knowing the exact population parameters would be impossible.

Exercise 2

Answer: We must assume that the sampling method was random and representative. This does seem to be a reasonable assumption as the pollsters are selected from almost all continents.

The data

download.file("http://www.openintro.org/stat/data/atheism.RData", destfile = "atheism.RData")
load("atheism.RData")

Exercice 3

Answer: Per country, % of religious, not religious, atheist and did not respond for the sample size. Indiviual response of a person in a given country and the year the poll was taken.

Exercice 4

us12 <- subset(atheism, nationality == "United States" & year == "2012")
us12ath <- subset(atheism, nationality == "United States" & year == "2012" & response == "atheist")
nrow(us12ath)/nrow(us12)
## [1] 0.0499002
table(us12$response)
## 
##     atheist non-atheist 
##          50         952
prop.table(table(us12), 1)
## , , year = 2012
## 
##                                               response
## nationality                                      atheist non-atheist
##   Afghanistan                                                       
##   Argentina                                                         
##   Armenia                                                           
##   Australia                                                         
##   Austria                                                           
##   Azerbaijan                                                        
##   Belgium                                                           
##   Bosnia and Herzegovina                                            
##   Brazil                                                            
##   Bulgaria                                                          
##   Cameroon                                                          
##   Canada                                                            
##   China                                                             
##   Colombia                                                          
##   Czech Republic                                                    
##   Ecuador                                                           
##   Fiji                                                              
##   Finland                                                           
##   France                                                            
##   Georgia                                                           
##   Germany                                                           
##   Ghana                                                             
##   Hong Kong                                                         
##   Iceland                                                           
##   India                                                             
##   Iraq                                                              
##   Ireland                                                           
##   Italy                                                             
##   Japan                                                             
##   Kenya                                                             
##   Korea, Rep (South)                                                
##   Lebanon                                                           
##   Lithuania                                                         
##   Macedonia                                                         
##   Malaysia                                                          
##   Moldova                                                           
##   Netherlands                                                       
##   Nigeria                                                           
##   Pakistan                                                          
##   Palestinian territories (West Bank and Gaza)                      
##   Peru                                                              
##   Poland                                                            
##   Romania                                                           
##   Russian Federation                                                
##   Saudi Arabia                                                      
##   Serbia                                                            
##   South Africa                                                      
##   South Sudan                                                       
##   Spain                                                             
##   Sweden                                                            
##   Switzerland                                                       
##   Tunisia                                                           
##   Turkey                                                            
##   Ukraine                                                           
##   United States                                0.0499002   0.9500998
##   Uzbekistan                                                        
##   Vietnam

Answer: The computed value from the atheism responses is 4.99%, so around 5% and it agrees with the Table 6 value which is also 5%.

Inference on proportions

Exercice 5

Answer: Independence condition: The poll is based on a simple random sample of fewer than 10% of the US population, which verifies independence. Success-failure condition: The sample size of 1002 is large enough, as a success rate of 5% (atheism rate) is greater than 10. 5% of 1,002 around 50.

inference(us12$response, est = "proportion", type = "ci", method = "theoretical", 
          success = "atheist")
## Warning: package 'BHH2' was built under R version 4.0.4
## 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 )

Exercice 6

SE = 0.0069
Z_score = 1.96
ME = SE * Z_score
ME
## [1] 0.013524

Answer:The margin or error for the Us estimate is 0.013524.

Exercice 7

fr12 <- subset(atheism, nationality == "France" & year == "2012")
de12 <- subset(atheism, nationality == "Germany" & year == "2012")
table(fr12$response)
## 
##     atheist non-atheist 
##         485        1203
table(de12$response)
## 
##     atheist non-atheist 
##          75         427
inference(fr12$response, est = "proportion", type = "ci", method = "theoretical", 
          success = "atheist")
## Single proportion -- success: atheist 
## Summary statistics:

## p_hat = 0.2873 ;  n = 1688 
## Check conditions: number of successes = 485 ; number of failures = 1203 
## Standard error = 0.011 
## 95 % Confidence interval = ( 0.2657 , 0.3089 )
inference(de12$response, est = "proportion", type = "ci", method = "theoretical", 
          success = "atheist")
## Single proportion -- success: atheist 
## Summary statistics:

## p_hat = 0.1494 ;  n = 502 
## Check conditions: number of successes = 75 ; number of failures = 427 
## Standard error = 0.0159 
## 95 % Confidence interval = ( 0.1182 , 0.1806 )
# For France
SE = 0.011 
Z_score = 1.96
ME = SE * Z_score
ME
## [1] 0.02156
# For Germany
SE =  0.0159 
Z_score = 1.96
ME = SE * Z_score
ME
## [1] 0.031164

Answer: The margin or error for the France estimate is 0.02156. The margin or error for the Germany estimate is 0.031164.

How does the proportion affect the margin of error?

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

Exercice 8

Answer: Holding the sample size constant, the ME reaches its maximum value when p=.50 (50%). ME decreases symmetrically as p increases to 1 (100%). It is a parabolic distribution (non linear), which n increase as p increases until p=.5 and then margin of error drops.

Success-failure condition

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

Exercice 9

summary(p_hats)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.07019 0.09327 0.09904 0.09969 0.10577 0.12981
sd(p_hats)
## [1] 0.009287382
IQR(p_hats)
## [1] 0.0125
mean.p_hats <- mean(p_hats)
median.p_hats <- median(p_hats)
boxplot(p_hats,y_lab="p_hats",x_lab="proportions")
abline(h = median.p_hats, col = "blue")
abline(h = mean.p_hats, col = "red")
abline(h= quantile(p_hats,0.25), col = "orange")
abline(h = quantile(p_hats,0.75), col = "green")

Answer: The sampling distribution has a near normal distribution with the mean close to the population mean of 0.1. There are a few outliers on both upper and lower tails but these are small compared to the total sample size.

Exercice 10

p <- 0.1
n <- 400
p_hats2 <- rep(0, 5000)

for(i in 1:5000){
  samp <- sample(c("atheist", "non_atheist"), n, replace = TRUE, prob = c(p, 1-p))
  p_hats2[i] <- sum(samp == "atheist")/n
}
p <- 0.2
n <- 1040
p_hats3 <- rep(0, 5000)

for(i in 1:5000){
  samp <- sample(c("atheist", "non_atheist"), n, replace = TRUE, prob = c(p, 1-p))
  p_hats3[i] <- sum(samp == "atheist")/n
}
p <- 0.2
n <- 400
p_hats4 <- rep(0, 5000)

for(i in 1:5000){
  samp <- sample(c("atheist", "non_atheist"), n, replace = TRUE, prob = c(p, 1-p))
  p_hats4[i] <- sum(samp == "atheist")/n
}
par(mfrow = c(2, 2))
hist(p_hats, main = "p = 0.1, n = 1040", xlim = c(0, 0.30))
hist(p_hats2, main = "p = 0.1, n = 400", xlim = c(0, 0.30))
hist(p_hats3, main = "p = 0.2, n = 1040", xlim = c(0, 0.30))
hist(p_hats4, main = "p = 0.2, n = 400", xlim = c(0, 0.30))

Answer: The larger the sample size n, the smaller the spread. The smaller the spread, the smaller the margin of error. For p, it is the opposite. The large the p, the smaller the spread. Thus the margin of error increases with increasing p (until it reaches 0.5 then the opposite is true).

Exercice 11

table( subset(atheism, nationality == "Australia" & year == "2012")$response)
## 
##     atheist non-atheist 
##         104         935
table( subset(atheism, nationality == "Ecuador" & year == "2012")$response)
## 
##     atheist non-atheist 
##           8         396

Answer: No, the margin of error is affected to the sample size.

On your own

Exercice 12

Part A

Answer: H0: In Spain, there is no difference between the proportion of atheists in 2005 and 2012. HA: In Spain, there is a difference between the proportion of atheists in 2005 and 2012. Conditions Observations are independent (in each sample and across samples). Assumed yes. success/failure condition met for both samples: at least 10 of each success and fail the inference function checks this for us, its output is below, and yes, the conditions are met (all groups > 10 observations)

spain05  <- subset(atheism, nationality == "Spain" & year == "2005")
   inference( spain05$response,est = "proportion", type = "ci", method = "theoretical", success = "atheist", conf = 0.95)
## 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 )
spain12  <- subset(atheism, nationality == "Spain" & year == "2012")
   inference( spain12$response,est = "proportion", type = "ci", method = "theoretical", success = "atheist", conf = 0.95)
## 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 )
p_spain05 = 0.1003
n_spain05 = 1146 
p_spain12 = 0.09
n_spain12 = 1145 

PE_spain = p_spain12 - p_spain05

SE_spn = sqrt((p_spain05*(1-p_spain05)/n_spain05)+(p_spain12*(1-p_spain12)/n_spain12))
SE_spn
## [1] 0.01225854
PE_spain + (1.96*SE_spn)
## [1] 0.01372674
PE_spain - (1.96*SE_spn)
## [1] -0.03432674

Answer: There is no convincing evidence that there is a change in the atheism index in Spain from 2005 to 2012 since the confidence interval (95%) overlap. In addition, the control interval showing the difference in their proportion include zero. This means that there is evidence that the true atheism index between this two years are the same.

Part B

usa05 <- subset(atheism, nationality == "United States" & year == "2005")
usa12 <- subset(atheism, nationality == "United States" & year == "2012")
inference(usa05$response, est = "proportion", type = "ci", method = "theoretical", 
          success = "atheist")
## 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 )
inference(usa12$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 )
p_usa05 = 0.01
n_usa05 = 1002 
p_usa12 = 0.05
n_usa12 = 1002 

PE_usa = p_usa12 - p_usa05

SE_usa = sqrt(((p_usa05*(1-p_usa05))/n_usa05)+((p_usa12*(1-p_usa12))/n_usa12))
SE_usa
## [1] 0.007568714
PE_usa + (1.96*SE_usa)
## [1] 0.05483468
PE_usa - (1.96*SE_usa)
## [1] 0.02516532

Answer: There is evidence that there is a change in the atheism index in the USA from 2005 to 2012. The control interval does NOT include 0 so we reject the null hypothesis that p_2012 - p_2005 is zero.

Exercice 13

0.05*57
## [1] 2.85

Answer: 3 countries due to chance.

Execrice 14

ME = 0.01
z = 1.96 
n <- (z^2 * .25)/ ME^2

Answer: The sample size should be at least 9604.

LS0tDQp0aXRsZTogIkxhYiA2OiBJbmZlcmVuY2UgZm9yIGNhdGVnb3JpY2FsIGRhdGEiDQphdXRob3I6ICJBdXJpYW5lIEdyaXBwaSINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDogb3BlbmludHJvOjpsYWJfcmVwb3J0DQotLS0NCiMjIFRoZSBzdXJ2ZXkNCg0KIyMjIEV4ZXJjaXNlIDENCg0KQW5zd2VyOiBUaGVzZSBzdGF0aXN0aWNzIGFyZSBiYXNlZCBvbiBzYW1wbGUgc3RhdGlzdGljcyBiZWNhdXNlIHRoZXkgd2VyZSBjb2xsZWN0ZWQgZnJvbSBhIHBvbGwuIEluIHRoaXMgY2FzZSwga25vd2luZyB0aGUgZXhhY3QgcG9wdWxhdGlvbiBwYXJhbWV0ZXJzIHdvdWxkIGJlIGltcG9zc2libGUuDQoNCiMjIyBFeGVyY2lzZSAyDQoNCkFuc3dlcjogV2UgbXVzdCBhc3N1bWUgdGhhdCB0aGUgc2FtcGxpbmcgbWV0aG9kIHdhcyByYW5kb20gYW5kIHJlcHJlc2VudGF0aXZlLiBUaGlzIGRvZXMgc2VlbSB0byBiZSBhIHJlYXNvbmFibGUgYXNzdW1wdGlvbiBhcyB0aGUgcG9sbHN0ZXJzIGFyZSBzZWxlY3RlZCBmcm9tIGFsbW9zdCBhbGwgY29udGluZW50cy4NCg0KDQojIyBUaGUgZGF0YQ0KDQpgYGB7cn0NCmRvd25sb2FkLmZpbGUoImh0dHA6Ly93d3cub3BlbmludHJvLm9yZy9zdGF0L2RhdGEvYXRoZWlzbS5SRGF0YSIsIGRlc3RmaWxlID0gImF0aGVpc20uUkRhdGEiKQ0KbG9hZCgiYXRoZWlzbS5SRGF0YSIpDQpgYGANCg0KIyMjIEV4ZXJjaWNlIDMNCg0KQW5zd2VyOiBQZXIgY291bnRyeSwgJSBvZiByZWxpZ2lvdXMsIG5vdCByZWxpZ2lvdXMsIGF0aGVpc3QgYW5kIGRpZCBub3QgcmVzcG9uZCBmb3IgdGhlIHNhbXBsZSBzaXplLiBJbmRpdml1YWwgcmVzcG9uc2Ugb2YgYSBwZXJzb24gaW4gYSBnaXZlbiBjb3VudHJ5IGFuZCB0aGUgeWVhciB0aGUgcG9sbCB3YXMgdGFrZW4uDQoNCiMjIyBFeGVyY2ljZSA0DQoNCmBgYHtyfQ0KdXMxMiA8LSBzdWJzZXQoYXRoZWlzbSwgbmF0aW9uYWxpdHkgPT0gIlVuaXRlZCBTdGF0ZXMiICYgeWVhciA9PSAiMjAxMiIpDQp1czEyYXRoIDwtIHN1YnNldChhdGhlaXNtLCBuYXRpb25hbGl0eSA9PSAiVW5pdGVkIFN0YXRlcyIgJiB5ZWFyID09ICIyMDEyIiAmIHJlc3BvbnNlID09ICJhdGhlaXN0IikNCm5yb3codXMxMmF0aCkvbnJvdyh1czEyKQ0KYGBgDQoNCmBgYHtyfQ0KdGFibGUodXMxMiRyZXNwb25zZSkNCnByb3AudGFibGUodGFibGUodXMxMiksIDEpDQpgYGANCg0KDQpBbnN3ZXI6IFRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZSBhdGhlaXNtIHJlc3BvbnNlcyBpcyA0Ljk5JSwgc28gYXJvdW5kIDUlIGFuZCBpdCBhZ3JlZXMgd2l0aCB0aGUgVGFibGUgNiB2YWx1ZSB3aGljaCBpcyBhbHNvIDUlLg0KDQojIyBJbmZlcmVuY2Ugb24gcHJvcG9ydGlvbnMNCg0KIyMjIEV4ZXJjaWNlIDUNCg0KQW5zd2VyOiANCkluZGVwZW5kZW5jZSBjb25kaXRpb246IFRoZSBwb2xsIGlzIGJhc2VkIG9uIGEgc2ltcGxlIHJhbmRvbSBzYW1wbGUgb2YgZmV3ZXIgdGhhbiAxMCUgb2YgdGhlIFVTIHBvcHVsYXRpb24sIHdoaWNoIHZlcmlmaWVzIGluZGVwZW5kZW5jZS4NClN1Y2Nlc3MtZmFpbHVyZSBjb25kaXRpb246IFRoZSBzYW1wbGUgc2l6ZSBvZiAxMDAyIGlzIGxhcmdlIGVub3VnaCwgYXMgYSBzdWNjZXNzIHJhdGUgb2YgNSUgKGF0aGVpc20gcmF0ZSkgaXMgZ3JlYXRlciB0aGFuIDEwLiA1JSBvZiAxLDAwMiBhcm91bmQgNTAuDQoNCg0KYGBge3J9DQppbmZlcmVuY2UodXMxMiRyZXNwb25zZSwgZXN0ID0gInByb3BvcnRpb24iLCB0eXBlID0gImNpIiwgbWV0aG9kID0gInRoZW9yZXRpY2FsIiwgDQogICAgICAgICAgc3VjY2VzcyA9ICJhdGhlaXN0IikNCmBgYA0KDQojIyMgRXhlcmNpY2UgNg0KDQpgYGB7cn0NClNFID0gMC4wMDY5DQpaX3Njb3JlID0gMS45Ng0KTUUgPSBTRSAqIFpfc2NvcmUNCk1FDQpgYGANCg0KQW5zd2VyOlRoZSBtYXJnaW4gb3IgZXJyb3IgZm9yIHRoZSBVcyBlc3RpbWF0ZSBpcyAwLjAxMzUyNC4NCg0KIyMjIEV4ZXJjaWNlIDcNCg0KYGBge3J9DQpmcjEyIDwtIHN1YnNldChhdGhlaXNtLCBuYXRpb25hbGl0eSA9PSAiRnJhbmNlIiAmIHllYXIgPT0gIjIwMTIiKQ0KZGUxMiA8LSBzdWJzZXQoYXRoZWlzbSwgbmF0aW9uYWxpdHkgPT0gIkdlcm1hbnkiICYgeWVhciA9PSAiMjAxMiIpDQpgYGANCg0KYGBge3J9DQp0YWJsZShmcjEyJHJlc3BvbnNlKQ0KdGFibGUoZGUxMiRyZXNwb25zZSkNCmBgYA0KDQpgYGB7cn0NCmluZmVyZW5jZShmcjEyJHJlc3BvbnNlLCBlc3QgPSAicHJvcG9ydGlvbiIsIHR5cGUgPSAiY2kiLCBtZXRob2QgPSAidGhlb3JldGljYWwiLCANCiAgICAgICAgICBzdWNjZXNzID0gImF0aGVpc3QiKQ0KYGBgDQoNCmBgYHtyfQ0KaW5mZXJlbmNlKGRlMTIkcmVzcG9uc2UsIGVzdCA9ICJwcm9wb3J0aW9uIiwgdHlwZSA9ICJjaSIsIG1ldGhvZCA9ICJ0aGVvcmV0aWNhbCIsIA0KICAgICAgICAgIHN1Y2Nlc3MgPSAiYXRoZWlzdCIpDQpgYGANCg0KYGBge3J9DQojIEZvciBGcmFuY2UNClNFID0gMC4wMTEgDQpaX3Njb3JlID0gMS45Ng0KTUUgPSBTRSAqIFpfc2NvcmUNCk1FDQpgYGANCg0KYGBge3J9DQojIEZvciBHZXJtYW55DQpTRSA9ICAwLjAxNTkgDQpaX3Njb3JlID0gMS45Ng0KTUUgPSBTRSAqIFpfc2NvcmUNCk1FDQpgYGANCg0KQW5zd2VyOiANClRoZSBtYXJnaW4gb3IgZXJyb3IgZm9yIHRoZSBGcmFuY2UgZXN0aW1hdGUgaXMgMC4wMjE1Ni4NClRoZSBtYXJnaW4gb3IgZXJyb3IgZm9yIHRoZSBHZXJtYW55IGVzdGltYXRlIGlzIDAuMDMxMTY0Lg0KDQoNCiMjIEhvdyBkb2VzIHRoZSBwcm9wb3J0aW9uIGFmZmVjdCB0aGUgbWFyZ2luIG9mIGVycm9yPw0KDQpgYGB7cn0NCm4gPC0gMTAwMA0KcCA8LSBzZXEoMCwgMSwgMC4wMSkNCm1lIDwtIDIgKiBzcXJ0KHAgKiAoMSAtIHApL24pDQpwbG90KG1lIH4gcCwgeWxhYiA9ICJNYXJnaW4gb2YgRXJyb3IiLCB4bGFiID0gIlBvcHVsYXRpb24gUHJvcG9ydGlvbiIpDQpgYGANCg0KIyMjIEV4ZXJjaWNlIDgNCg0KQW5zd2VyOiBIb2xkaW5nIHRoZSBzYW1wbGUgc2l6ZSBjb25zdGFudCwgdGhlIE1FIHJlYWNoZXMgaXRzIG1heGltdW0gdmFsdWUgd2hlbiBwPS41MCAoNTAlKS4gTUUgZGVjcmVhc2VzIHN5bW1ldHJpY2FsbHkgYXMgcCBpbmNyZWFzZXMgdG8gMSAoMTAwJSkuIEl0IGlzIGEgcGFyYWJvbGljIGRpc3RyaWJ1dGlvbiAobm9uIGxpbmVhciksIHdoaWNoIG4gaW5jcmVhc2UgYXMgcCBpbmNyZWFzZXMgdW50aWwgcD0uNSBhbmQgdGhlbiBtYXJnaW4gb2YgZXJyb3IgZHJvcHMuDQoNCiMjIFN1Y2Nlc3MtZmFpbHVyZSBjb25kaXRpb24NCg0KYGBge3J9DQpwIDwtIDAuMQ0KbiA8LSAxMDQwDQpwX2hhdHMgPC0gcmVwKDAsIDUwMDApDQoNCmZvcihpIGluIDE6NTAwMCl7DQogIHNhbXAgPC0gc2FtcGxlKGMoImF0aGVpc3QiLCAibm9uX2F0aGVpc3QiKSwgbiwgcmVwbGFjZSA9IFRSVUUsIHByb2IgPSBjKHAsIDEtcCkpDQogIHBfaGF0c1tpXSA8LSBzdW0oc2FtcCA9PSAiYXRoZWlzdCIpL24NCn0NCg0KaGlzdChwX2hhdHMsIG1haW4gPSAicCA9IDAuMSwgbiA9IDEwNDAiLCB4bGltID0gYygwLCAwLjE4KSkNCmBgYA0KDQojIyMgRXhlcmNpY2UgOQ0KDQpgYGB7cn0NCnN1bW1hcnkocF9oYXRzKQ0Kc2QocF9oYXRzKQ0KSVFSKHBfaGF0cykNCm1lYW4ucF9oYXRzIDwtIG1lYW4ocF9oYXRzKQ0KbWVkaWFuLnBfaGF0cyA8LSBtZWRpYW4ocF9oYXRzKQ0KYGBgDQoNCmBgYHtyfQ0KYm94cGxvdChwX2hhdHMseV9sYWI9InBfaGF0cyIseF9sYWI9InByb3BvcnRpb25zIikNCmFibGluZShoID0gbWVkaWFuLnBfaGF0cywgY29sID0gImJsdWUiKQ0KYWJsaW5lKGggPSBtZWFuLnBfaGF0cywgY29sID0gInJlZCIpDQphYmxpbmUoaD0gcXVhbnRpbGUocF9oYXRzLDAuMjUpLCBjb2wgPSAib3JhbmdlIikNCmFibGluZShoID0gcXVhbnRpbGUocF9oYXRzLDAuNzUpLCBjb2wgPSAiZ3JlZW4iKQ0KYGBgDQoNCkFuc3dlcjogVGhlIHNhbXBsaW5nIGRpc3RyaWJ1dGlvbiBoYXMgYSBuZWFyIG5vcm1hbCBkaXN0cmlidXRpb24gd2l0aCB0aGUgbWVhbiBjbG9zZSB0byB0aGUgcG9wdWxhdGlvbiBtZWFuIG9mIDAuMS4gVGhlcmUgYXJlIGEgZmV3IG91dGxpZXJzIG9uIGJvdGggdXBwZXIgYW5kIGxvd2VyIHRhaWxzIGJ1dCB0aGVzZSBhcmUgc21hbGwgY29tcGFyZWQgdG8gdGhlIHRvdGFsIHNhbXBsZSBzaXplLg0KDQojIyMgRXhlcmNpY2UgMTANCg0KYGBge3J9DQpwIDwtIDAuMQ0KbiA8LSA0MDANCnBfaGF0czIgPC0gcmVwKDAsIDUwMDApDQoNCmZvcihpIGluIDE6NTAwMCl7DQogIHNhbXAgPC0gc2FtcGxlKGMoImF0aGVpc3QiLCAibm9uX2F0aGVpc3QiKSwgbiwgcmVwbGFjZSA9IFRSVUUsIHByb2IgPSBjKHAsIDEtcCkpDQogIHBfaGF0czJbaV0gPC0gc3VtKHNhbXAgPT0gImF0aGVpc3QiKS9uDQp9DQpgYGANCg0KYGBge3J9DQpwIDwtIDAuMg0KbiA8LSAxMDQwDQpwX2hhdHMzIDwtIHJlcCgwLCA1MDAwKQ0KDQpmb3IoaSBpbiAxOjUwMDApew0KICBzYW1wIDwtIHNhbXBsZShjKCJhdGhlaXN0IiwgIm5vbl9hdGhlaXN0IiksIG4sIHJlcGxhY2UgPSBUUlVFLCBwcm9iID0gYyhwLCAxLXApKQ0KICBwX2hhdHMzW2ldIDwtIHN1bShzYW1wID09ICJhdGhlaXN0Iikvbg0KfQ0KYGBgDQoNCmBgYHtyfQ0KcCA8LSAwLjINCm4gPC0gNDAwDQpwX2hhdHM0IDwtIHJlcCgwLCA1MDAwKQ0KDQpmb3IoaSBpbiAxOjUwMDApew0KICBzYW1wIDwtIHNhbXBsZShjKCJhdGhlaXN0IiwgIm5vbl9hdGhlaXN0IiksIG4sIHJlcGxhY2UgPSBUUlVFLCBwcm9iID0gYyhwLCAxLXApKQ0KICBwX2hhdHM0W2ldIDwtIHN1bShzYW1wID09ICJhdGhlaXN0Iikvbg0KfQ0KYGBgDQoNCmBgYHtyfQ0KcGFyKG1mcm93ID0gYygyLCAyKSkNCmhpc3QocF9oYXRzLCBtYWluID0gInAgPSAwLjEsIG4gPSAxMDQwIiwgeGxpbSA9IGMoMCwgMC4zMCkpDQpoaXN0KHBfaGF0czIsIG1haW4gPSAicCA9IDAuMSwgbiA9IDQwMCIsIHhsaW0gPSBjKDAsIDAuMzApKQ0KaGlzdChwX2hhdHMzLCBtYWluID0gInAgPSAwLjIsIG4gPSAxMDQwIiwgeGxpbSA9IGMoMCwgMC4zMCkpDQpoaXN0KHBfaGF0czQsIG1haW4gPSAicCA9IDAuMiwgbiA9IDQwMCIsIHhsaW0gPSBjKDAsIDAuMzApKQ0KYGBgDQoNCkFuc3dlcjogVGhlIGxhcmdlciB0aGUgc2FtcGxlIHNpemUgbiwgdGhlIHNtYWxsZXIgdGhlIHNwcmVhZC4gVGhlIHNtYWxsZXIgdGhlIHNwcmVhZCwgdGhlIHNtYWxsZXIgdGhlIG1hcmdpbiBvZiBlcnJvci4gRm9yIHAsIGl0IGlzIHRoZSBvcHBvc2l0ZS4gVGhlIGxhcmdlIHRoZSBwLCB0aGUgc21hbGxlciB0aGUgc3ByZWFkLiBUaHVzIHRoZSBtYXJnaW4gb2YgZXJyb3IgaW5jcmVhc2VzIHdpdGggaW5jcmVhc2luZyBwICh1bnRpbCBpdCByZWFjaGVzIDAuNSB0aGVuIHRoZSBvcHBvc2l0ZSBpcyB0cnVlKS4NCg0KIyMjIEV4ZXJjaWNlIDExDQoNCmBgYHtyfQ0KdGFibGUoIHN1YnNldChhdGhlaXNtLCBuYXRpb25hbGl0eSA9PSAiQXVzdHJhbGlhIiAmIHllYXIgPT0gIjIwMTIiKSRyZXNwb25zZSkNCmBgYA0KDQpgYGB7cn0NCnRhYmxlKCBzdWJzZXQoYXRoZWlzbSwgbmF0aW9uYWxpdHkgPT0gIkVjdWFkb3IiICYgeWVhciA9PSAiMjAxMiIpJHJlc3BvbnNlKQ0KYGBgDQoNCkFuc3dlcjogTm8sIHRoZSBtYXJnaW4gb2YgZXJyb3IgaXMgYWZmZWN0ZWQgdG8gdGhlIHNhbXBsZSBzaXplLg0KDQoNCiMgT24geW91ciBvd24NCg0KIyMjIEV4ZXJjaWNlIDEyDQoNCiMjIyMgUGFydCBBDQoNCkFuc3dlcjogDQpIMDogSW4gU3BhaW4sIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcHJvcG9ydGlvbiBvZiBhdGhlaXN0cyBpbiAyMDA1IGFuZCAyMDEyLg0KSEE6IEluIFNwYWluLCB0aGVyZSBpcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcHJvcG9ydGlvbiBvZiBhdGhlaXN0cyBpbiAyMDA1IGFuZCAyMDEyLiBDb25kaXRpb25zIE9ic2VydmF0aW9ucyBhcmUgaW5kZXBlbmRlbnQgKGluIGVhY2ggc2FtcGxlIGFuZCBhY3Jvc3Mgc2FtcGxlcykuIEFzc3VtZWQgeWVzLiBzdWNjZXNzL2ZhaWx1cmUgY29uZGl0aW9uIG1ldCBmb3IgYm90aCBzYW1wbGVzOiBhdCBsZWFzdCAxMCBvZiBlYWNoIHN1Y2Nlc3MgYW5kIGZhaWwgdGhlIGluZmVyZW5jZSBmdW5jdGlvbiBjaGVja3MgdGhpcyBmb3IgdXMsIGl0cyBvdXRwdXQgaXMgYmVsb3csIGFuZCB5ZXMsIHRoZSBjb25kaXRpb25zIGFyZSBtZXQgKGFsbCBncm91cHMgPiAxMCBvYnNlcnZhdGlvbnMpDQoNCmBgYHtyfQ0Kc3BhaW4wNSAgPC0gc3Vic2V0KGF0aGVpc20sIG5hdGlvbmFsaXR5ID09ICJTcGFpbiIgJiB5ZWFyID09ICIyMDA1IikNCiAgIGluZmVyZW5jZSggc3BhaW4wNSRyZXNwb25zZSxlc3QgPSAicHJvcG9ydGlvbiIsIHR5cGUgPSAiY2kiLCBtZXRob2QgPSAidGhlb3JldGljYWwiLCBzdWNjZXNzID0gImF0aGVpc3QiLCBjb25mID0gMC45NSkNCmBgYA0KDQpgYGB7cn0NCnNwYWluMTIgIDwtIHN1YnNldChhdGhlaXNtLCBuYXRpb25hbGl0eSA9PSAiU3BhaW4iICYgeWVhciA9PSAiMjAxMiIpDQogICBpbmZlcmVuY2UoIHNwYWluMTIkcmVzcG9uc2UsZXN0ID0gInByb3BvcnRpb24iLCB0eXBlID0gImNpIiwgbWV0aG9kID0gInRoZW9yZXRpY2FsIiwgc3VjY2VzcyA9ICJhdGhlaXN0IiwgY29uZiA9IDAuOTUpDQpgYGANCg0KYGBge3J9DQpwX3NwYWluMDUgPSAwLjEwMDMNCm5fc3BhaW4wNSA9IDExNDYgDQpwX3NwYWluMTIgPSAwLjA5DQpuX3NwYWluMTIgPSAxMTQ1IA0KDQpQRV9zcGFpbiA9IHBfc3BhaW4xMiAtIHBfc3BhaW4wNQ0KDQpTRV9zcG4gPSBzcXJ0KChwX3NwYWluMDUqKDEtcF9zcGFpbjA1KS9uX3NwYWluMDUpKyhwX3NwYWluMTIqKDEtcF9zcGFpbjEyKS9uX3NwYWluMTIpKQ0KU0Vfc3BuDQpgYGANCg0KYGBge3J9DQpQRV9zcGFpbiArICgxLjk2KlNFX3NwbikNClBFX3NwYWluIC0gKDEuOTYqU0Vfc3BuKQ0KYGBgDQoNCkFuc3dlcjogVGhlcmUgaXMgbm8gY29udmluY2luZyBldmlkZW5jZSB0aGF0IHRoZXJlIGlzIGEgY2hhbmdlIGluIHRoZSBhdGhlaXNtIGluZGV4IGluIFNwYWluIGZyb20gMjAwNSB0byAyMDEyIHNpbmNlIHRoZSBjb25maWRlbmNlIGludGVydmFsICg5NSUpIG92ZXJsYXAuIEluIGFkZGl0aW9uLCB0aGUgY29udHJvbCBpbnRlcnZhbCBzaG93aW5nIHRoZSBkaWZmZXJlbmNlIGluIHRoZWlyIHByb3BvcnRpb24gaW5jbHVkZSB6ZXJvLiBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgaXMgZXZpZGVuY2UgdGhhdCB0aGUgdHJ1ZSBhdGhlaXNtIGluZGV4IGJldHdlZW4gdGhpcyB0d28geWVhcnMgYXJlIHRoZSBzYW1lLg0KDQojIyMjIFBhcnQgQg0KDQpgYGB7cn0NCnVzYTA1IDwtIHN1YnNldChhdGhlaXNtLCBuYXRpb25hbGl0eSA9PSAiVW5pdGVkIFN0YXRlcyIgJiB5ZWFyID09ICIyMDA1IikNCnVzYTEyIDwtIHN1YnNldChhdGhlaXNtLCBuYXRpb25hbGl0eSA9PSAiVW5pdGVkIFN0YXRlcyIgJiB5ZWFyID09ICIyMDEyIikNCmBgYA0KDQpgYGB7cn0NCmluZmVyZW5jZSh1c2EwNSRyZXNwb25zZSwgZXN0ID0gInByb3BvcnRpb24iLCB0eXBlID0gImNpIiwgbWV0aG9kID0gInRoZW9yZXRpY2FsIiwgDQogICAgICAgICAgc3VjY2VzcyA9ICJhdGhlaXN0IikNCmBgYA0KDQpgYGB7cn0NCmluZmVyZW5jZSh1c2ExMiRyZXNwb25zZSwgZXN0ID0gInByb3BvcnRpb24iLCB0eXBlID0gImNpIiwgbWV0aG9kID0gInRoZW9yZXRpY2FsIiwgDQogICAgICAgICAgc3VjY2VzcyA9ICJhdGhlaXN0IikNCmBgYA0KDQpgYGB7cn0NCnBfdXNhMDUgPSAwLjAxDQpuX3VzYTA1ID0gMTAwMiANCnBfdXNhMTIgPSAwLjA1DQpuX3VzYTEyID0gMTAwMiANCg0KUEVfdXNhID0gcF91c2ExMiAtIHBfdXNhMDUNCg0KU0VfdXNhID0gc3FydCgoKHBfdXNhMDUqKDEtcF91c2EwNSkpL25fdXNhMDUpKygocF91c2ExMiooMS1wX3VzYTEyKSkvbl91c2ExMikpDQpTRV91c2ENCmBgYA0KDQpgYGB7cn0NClBFX3VzYSArICgxLjk2KlNFX3VzYSkNClBFX3VzYSAtICgxLjk2KlNFX3VzYSkNCmBgYA0KDQpBbnN3ZXI6IFRoZXJlIGlzIGV2aWRlbmNlIHRoYXQgdGhlcmUgaXMgYSBjaGFuZ2UgaW4gdGhlIGF0aGVpc20gaW5kZXggaW4gdGhlIFVTQSBmcm9tIDIwMDUgdG8gMjAxMi4gVGhlIGNvbnRyb2wgaW50ZXJ2YWwgZG9lcyBOT1QgaW5jbHVkZSAwIHNvIHdlIHJlamVjdCB0aGUgbnVsbCBoeXBvdGhlc2lzIHRoYXQgcF8yMDEyIC0gcF8yMDA1IGlzIHplcm8uDQoNCiMjIyBFeGVyY2ljZSAxMw0KDQpgYGB7cn0NCjAuMDUqNTcNCmBgYA0KDQpBbnN3ZXI6IDMgY291bnRyaWVzIGR1ZSB0byBjaGFuY2UuDQoNCiMjIyBFeGVjcmljZSAxNA0KDQpgYGB7cn0NCk1FID0gMC4wMQ0KeiA9IDEuOTYgDQpuIDwtICh6XjIgKiAuMjUpLyBNRV4yDQpgYGANCg0KQW5zd2VyOiBUaGUgc2FtcGxlIHNpemUgc2hvdWxkIGJlIGF0IGxlYXN0IDk2MDQuDQoNCg==