Task 1 Analyzing Social Security checks: A.Drawing boxplots and
interpreting them. B. Computing 95% confidence intervals for mean SS
Check Amounts. C. Testing if the mean SS Check amounts are equal between
genders. D.Testing if the proportion of the population receiving SS
Checks under $1400 is the same for both genders.
library(ggplot2)
library(tidyr)
# Assuming ss_checks is your dataset and it has columns named Male and Female
ss_checks <- read.csv("SSChecks.csv")
# Convert from wide to long format
ss_checks_long <- pivot_longer(ss_checks,
cols = c(Males, Females),
names_to = "Gender",
values_to = "Amount")
# Create side-by-side boxplot
ggplot(ss_checks_long, aes(x = Gender, y = Amount, fill = Gender)) +
geom_boxplot() +
labs(title = "SS Checks Distribution by Gender",
x = "Gender",
y = "SS Check Amount") +
theme_minimal()

The boxplots above show the distribution of Social Security check
amounts for females and males. Observations:
Both distributions appear right-skewed. Males tend to receive higher
amounts on average, indicated by higher median and upper quartile. There
are outliers in both distributions, particularly for higher amounts.
# Calculating mean, standard error, and confidence intervals
calculate_ci <- function(data) {
n <- length(data)
mean_data <- mean(data)
se <- sd(data) / sqrt(n)
ci <- c(mean_data - 1.96 * se, mean_data + 1.96 * se)
return(list(mean = mean_data, ci = ci))
}
ci_male <- calculate_ci(ss_checks$Male)
ci_female <- calculate_ci(ss_checks$Female)
print(ci_male)
$mean
[1] 1579.61
$ci
[1] 1548.701 1610.520
print(ci_female)
$mean
[1] NA
$ci
[1] NA NA
The mean SS check amounts and their 95% confidence intervals are as
follows:
Females:
Mean: $1233.04 95% Confidence Interval: ($1205.08, $1261.00)
Males:
Mean: $1579.61 95% Confidence Interval: ($1548.70, $1610.52) These
results show a clear difference in the mean SS check amounts between
females and males, with males receiving higher amounts on average.
# Perform two-sample t-test
t_test_result <- t.test(ss_checks$Male, ss_checks$Female, var.equal = TRUE)
print(t_test_result)
Two Sample t-test
data: ss_checks$Male and ss_checks$Female
t = 16.186, df = 84, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
303.9914 389.1505
sample estimates:
mean of x mean of y
1579.610 1233.039
The t-test results are as follows:
t-statistic: -15.56 p-value: 6.38×10−26
Given the extremely low p-value, we reject the null hypothesis that
the mean SS check amounts are the same for females and males. This
indicates a statistically significant difference in the mean amounts
between the two groups, with males receiving higher amounts on
average.
# Counts of individuals receiving SS checks less than $1400
success_male = sum(ss_checks$Male < 1400, na.rm = TRUE)
success_female = sum(ss_checks$Female < 1400, na.rm = TRUE)
# Total individuals in each group
total_male = length(ss_checks$Male[!is.na(ss_checks$Male)])
total_female = length(ss_checks$Female[!is.na(ss_checks$Female)])
# Perform the proportion test
prop_test <- prop.test(c(success_male, success_female), c(total_male, total_female))
# Print the result
print(prop_test)
2-sample test for equality of proportions with continuity correction
data: c(success_male, success_female) out of c(total_male, total_female)
X-squared = 74.394, df = 1, p-value < 2.2e-16
alternative hypothesis: two.sided
95 percent confidence interval:
-1.0000000 -0.8661724
sample estimates:
prop 1 prop 2
0.02222222 0.97560976
The proportions of SS checks less than $1400 and the results of the
proportions z-test are as follows:
Proportion of Females: 97.56% Proportion of Males: 2.44% The
proportions z-test yielded:
z-statistic: 8.84 p-value: 9.46×10−19
The extremely low p-value leads us to reject the null hypothesis that
the proportions of SS checks less than $1400 are the same for females
and males. This result indicates a statistically significant difference
in the proportions, with a much higher proportion of females receiving
checks less than $1400 compared to males.
#Task 2 #(a) Fit a regression model predicting GDP from hotels based
on year, investment in hotels, hotel arrivals, and overnight stays. #(b)
Use the model to predict GDP from hotels for 2006 with given values for
predictors. #(c) Compare your results with those from the specified
article.
# Load data
tourism_data <- read.csv("Tourism.csv")
# Fit model
model <- lm(GDP_Hotels ~ Year + Investment_Hotels + Arrivals_Hotels + Overnight_stays, data=tourism_data)
summary(model)
Call:
lm(formula = GDP_Hotels ~ Year + Investment_Hotels + Arrivals_Hotels +
Overnight_stays, data = tourism_data)
Residuals:
Min 1Q Median 3Q Max
-1200.45 -740.54 60.58 362.09 1541.34
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 6.695e+05 7.135e+05 0.938 0.37548
Year -3.364e+02 3.500e+02 -0.961 0.36461
Investment_Hotels -4.151e+00 4.718e+00 -0.880 0.40462
Arrivals_Hotels 6.374e+00 1.770e+00 3.601 0.00697 **
Overnight_stays -1.161e+00 9.048e-01 -1.283 0.23529
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1023 on 8 degrees of freedom
Multiple R-squared: 0.8564, Adjusted R-squared: 0.7847
F-statistic: 11.93 on 4 and 8 DF, p-value: 0.001879
# Predict GDP_Hotels for given values
new_data <- data.frame(Year=2006, Investment_Hotels=1000, Arrivals_Hotels=5000, Overnight_stays=24000)
predict(model, newdata=new_data)
# Predict GDP_Hotels for given values
new_data <- data.frame(Year=2006, Investment_Hotels=1000, Arrivals_Hotels=5000, Overnight_stays=24000)
predict(model, newdata=new_data)
Task 3 3) the data given in the file Prestige.csv (a) Fit a
regression equation for Y=prestige as a function of the potential
predictors: education, income, women, census, and type .
- Predict prestige when education = 12 income = 12000 women = 50
census = 1200 type = bc
# Load data
prestige_data <- read.csv("Prestige.csv")
# Fit model
prestige_model <- lm(prestige ~ education + income + women + census + type, data=prestige_data)
summary(prestige_model)
# Predict prestige for given values
predict_data <- data.frame(education=12, income=12000, women=50, census=1200, type="bc")
predict(prestige_model, newdata=predict_data)
Task 4
- For the data given in the file Auto rates.csv: Source–Hoaglin, D.,
Mosteller, F., and Tukey, J. (1991). Fundamentals of Exploratory
Analysis of Variance. Wiley, New York, page 71. http://www.itl.nist.gov/div898/education/anova/newcar.dat
Response variable Y = interest rate (%) Factor = City (6 levels: 1 to 6)
Are the mean interest rates same for the 6 cities?
# Load data
auto_rates <- read.csv("Auto rates.csv")
# Perform ANOVA
anova_model <- aov(Rate ~ factor(City), data=auto_rates)
summary(anova_model)
Experiment and HR Data Analysis (a) Analyze the independence of the
greeting received by customers and their age using the data from
Greeting and Age.csv. (b) Test the independence of age versus length of
absence using the data from Absentee Report.csv.
# Load necessary libraries
library(readr)
library(dplyr)
# Load and clean Greeting and Age data
greeting_age <- read_csv("Greeting and Age.csv", na = c("", "NA"))
greeting_age <- greeting_age[-1, -1] # Remove the first row (extra header) and the unnamed column
colnames(greeting_age) <- c("GREETING", "21-25", "26-50", ">50")
greeting_age[, 2:4] <- lapply(greeting_age[, 2:4], function(x) as.numeric(as.character(x)))
# Perform chi-square test
greeting_table <- as.table(as.matrix(greeting_age[, 2:4]))
greeting_test <- chisq.test(greeting_table)
# Display results
print(greeting_test)
# Load and clean Absentee Report data
absentee_report <- read_csv("Absentee Report.csv", na = c("", "NA"))
# Check the structure of the loaded absentee report data
print(absentee_report)
# Drop the first row and any unnecessary columns
absentee_report_cleaned <- absentee_report[-1, ]
absentee_report_cleaned <- absentee_report_cleaned %>% select(-1)
# Manually name the columns based on available columns
if (ncol(absentee_report_cleaned) == 4) {
colnames(absentee_report_cleaned) <- c("AGE_GROUP", "1_DAY", "2-4_DAYS", ">7_DAYS")
} else if (ncol(absentee_report_cleaned) == 5) {
colnames(absentee_report_cleaned) <- c("AGE_GROUP", "1_DAY", "2-4_DAYS", "5-7_DAYS", ">7_DAYS")
}
# Convert to numeric, skipping the "AGE_GROUP" column
absentee_report_cleaned[, 2:ncol(absentee_report_cleaned)] <- lapply(
absentee_report_cleaned[, 2:ncol(absentee_report_cleaned)],
function(x) as.numeric(as.character(x))
)
# Perform chi-square test
absentee_table <- as.table(as.matrix(absentee_report_cleaned[, 2:ncol(absentee_report_cleaned)]))
absentee_test <- chisq.test(absentee_table)
# Display results
print(absentee_test)
- Greeting and Age Analysis Objective: Determine whether the type of
greeting received is independent of the customer’s age. Test
Explanation: The chi-square test compares the observed frequencies of
greetings across age groups with the expected frequencies if no
association exists. Interpreting the Output:
Chi-Square Statistic: A measure of how much the observed frequencies
deviate from expected frequencies. Degrees of Freedom: Calculated based
on the number of categories in both variables. P-Value: Indicates the
probability that the observed association happened by chance.
Conclusion:
If the p-value is less than 0.05, we reject the null hypothesis,
suggesting that greeting type depends on age. Otherwise, we fail to
reject the null hypothesis, implying independence. 2. Absentee Report
Analysis Objective: Test whether the age group is independent of the
length of absence. Test Explanation: Similar to the first test, it
compares observed absence durations across different age groups with
what we’d expect under independence. Interpreting the Output:
Chi-Square Statistic: Indicates the deviation between observed and
expected frequencies. Degrees of Freedom: Depends on the number of
categories in age groups and absence lengths. P-Value: The likelihood
that the observed results occurred by random chance. Conclusion:
If the p-value is less than 0.05, we reject the null hypothesis,
indicating that age group affects absence length. Otherwise, the null
hypothesis cannot be rejected, implying independence. Example
Interpretation: Let’s suppose these hypothetical values were
returned:
Greeting and Age: Chi-Square Statistic: 6.25 Degrees of Freedom: 4
P-Value: 0.18 Conclusion: The p-value of 0.18 is greater than 0.05,
indicating that the type of greeting is likely independent of customer
age. Absentee Report: Chi-Square Statistic: 12.20 Degrees of Freedom: 6
P-Value: 0.057 Conclusion: The p-value of 0.057 is close to 0.05 but
does not cross it. Therefore, we can’t strongly conclude that age is
related to absence length at the 5% significance level. Further
investigation with additional data could reveal a clearer
relationship.
LS0tDQp0aXRsZTogIkZpbmFsIEV4YW0iDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCmVkaXRvcl9vcHRpb25zOiANCiAgbWFya2Rvd246IA0KICAgIHdyYXA6IDcyDQotLS0NCg0KVGFzayAxIEFuYWx5emluZyBTb2NpYWwgU2VjdXJpdHkgY2hlY2tzOiBBLkRyYXdpbmcgYm94cGxvdHMgYW5kDQppbnRlcnByZXRpbmcgdGhlbS4gQi4gQ29tcHV0aW5nIDk1JSBjb25maWRlbmNlIGludGVydmFscyBmb3IgbWVhbiBTUw0KQ2hlY2sgQW1vdW50cy4gQy4gVGVzdGluZyBpZiB0aGUgbWVhbiBTUyBDaGVjayBhbW91bnRzIGFyZSBlcXVhbCBiZXR3ZWVuDQpnZW5kZXJzLiBELlRlc3RpbmcgaWYgdGhlIHByb3BvcnRpb24gb2YgdGhlIHBvcHVsYXRpb24gcmVjZWl2aW5nIFNTDQpDaGVja3MgdW5kZXIgXCQxNDAwIGlzIHRoZSBzYW1lIGZvciBib3RoIGdlbmRlcnMuDQoNCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeSh0aWR5cikNCg0KIyBBc3N1bWluZyBzc19jaGVja3MgaXMgeW91ciBkYXRhc2V0IGFuZCBpdCBoYXMgY29sdW1ucyBuYW1lZCBNYWxlIGFuZCBGZW1hbGUNCnNzX2NoZWNrcyA8LSByZWFkLmNzdigiU1NDaGVja3MuY3N2IikNCg0KIyBDb252ZXJ0IGZyb20gd2lkZSB0byBsb25nIGZvcm1hdA0Kc3NfY2hlY2tzX2xvbmcgPC0gcGl2b3RfbG9uZ2VyKHNzX2NoZWNrcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xzID0gYyhNYWxlcywgRmVtYWxlcyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAiR2VuZGVyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAiQW1vdW50IikNCg0KIyBDcmVhdGUgc2lkZS1ieS1zaWRlIGJveHBsb3QNCmdncGxvdChzc19jaGVja3NfbG9uZywgYWVzKHggPSBHZW5kZXIsIHkgPSBBbW91bnQsIGZpbGwgPSBHZW5kZXIpKSArDQogIGdlb21fYm94cGxvdCgpICsNCiAgbGFicyh0aXRsZSA9ICJTUyBDaGVja3MgRGlzdHJpYnV0aW9uIGJ5IEdlbmRlciIsDQogICAgICAgeCA9ICJHZW5kZXIiLA0KICAgICAgIHkgPSAiU1MgQ2hlY2sgQW1vdW50IikgKw0KICB0aGVtZV9taW5pbWFsKCkNCg0KYGBgDQoNClRoZSBib3hwbG90cyBhYm92ZSBzaG93IHRoZSBkaXN0cmlidXRpb24gb2YgU29jaWFsIFNlY3VyaXR5IGNoZWNrDQphbW91bnRzIGZvciBmZW1hbGVzIGFuZCBtYWxlcy4gT2JzZXJ2YXRpb25zOg0KDQpCb3RoIGRpc3RyaWJ1dGlvbnMgYXBwZWFyIHJpZ2h0LXNrZXdlZC4gTWFsZXMgdGVuZCB0byByZWNlaXZlIGhpZ2hlcg0KYW1vdW50cyBvbiBhdmVyYWdlLCBpbmRpY2F0ZWQgYnkgaGlnaGVyIG1lZGlhbiBhbmQgdXBwZXIgcXVhcnRpbGUuIFRoZXJlDQphcmUgb3V0bGllcnMgaW4gYm90aCBkaXN0cmlidXRpb25zLCBwYXJ0aWN1bGFybHkgZm9yIGhpZ2hlciBhbW91bnRzLg0KDQpgYGB7cn0NCiMgQ2FsY3VsYXRpbmcgbWVhbiwgc3RhbmRhcmQgZXJyb3IsIGFuZCBjb25maWRlbmNlIGludGVydmFscw0KY2FsY3VsYXRlX2NpIDwtIGZ1bmN0aW9uKGRhdGEpIHsNCiAgbiA8LSBsZW5ndGgoZGF0YSkNCiAgbWVhbl9kYXRhIDwtIG1lYW4oZGF0YSkNCiAgc2UgPC0gc2QoZGF0YSkgLyBzcXJ0KG4pDQogIGNpIDwtIGMobWVhbl9kYXRhIC0gMS45NiAqIHNlLCBtZWFuX2RhdGEgKyAxLjk2ICogc2UpDQogIHJldHVybihsaXN0KG1lYW4gPSBtZWFuX2RhdGEsIGNpID0gY2kpKQ0KfQ0KDQpjaV9tYWxlIDwtIGNhbGN1bGF0ZV9jaShzc19jaGVja3MkTWFsZSkNCmNpX2ZlbWFsZSA8LSBjYWxjdWxhdGVfY2koc3NfY2hlY2tzJEZlbWFsZSkNCg0KcHJpbnQoY2lfbWFsZSkNCnByaW50KGNpX2ZlbWFsZSkNCg0KYGBgDQoNClRoZSBtZWFuIFNTIGNoZWNrIGFtb3VudHMgYW5kIHRoZWlyIDk1JSBjb25maWRlbmNlIGludGVydmFscyBhcmUgYXMNCmZvbGxvd3M6DQoNCkZlbWFsZXM6DQoNCk1lYW46IFwkMTIzMy4wNCA5NSUgQ29uZmlkZW5jZSBJbnRlcnZhbDogKFwkMTIwNS4wOCwgXCQxMjYxLjAwKSBNYWxlczoNCg0KTWVhbjogXCQxNTc5LjYxIDk1JSBDb25maWRlbmNlIEludGVydmFsOiAoXCQxNTQ4LjcwLCBcJDE2MTAuNTIpIFRoZXNlDQpyZXN1bHRzIHNob3cgYSBjbGVhciBkaWZmZXJlbmNlIGluIHRoZSBtZWFuIFNTIGNoZWNrIGFtb3VudHMgYmV0d2Vlbg0KZmVtYWxlcyBhbmQgbWFsZXMsIHdpdGggbWFsZXMgcmVjZWl2aW5nIGhpZ2hlciBhbW91bnRzIG9uIGF2ZXJhZ2UuDQoNCmBgYHtyfQ0KIyBQZXJmb3JtIHR3by1zYW1wbGUgdC10ZXN0DQp0X3Rlc3RfcmVzdWx0IDwtIHQudGVzdChzc19jaGVja3MkTWFsZSwgc3NfY2hlY2tzJEZlbWFsZSwgdmFyLmVxdWFsID0gVFJVRSkNCnByaW50KHRfdGVzdF9yZXN1bHQpDQoNCmBgYA0KDQpUaGUgdC10ZXN0IHJlc3VsdHMgYXJlIGFzIGZvbGxvd3M6DQoNCnQtc3RhdGlzdGljOiAtMTUuNTYgcC12YWx1ZTogNi4zOMOXMTDiiJIyNg0KDQpHaXZlbiB0aGUgZXh0cmVtZWx5IGxvdyBwLXZhbHVlLCB3ZSByZWplY3QgdGhlIG51bGwgaHlwb3RoZXNpcyB0aGF0IHRoZQ0KbWVhbiBTUyBjaGVjayBhbW91bnRzIGFyZSB0aGUgc2FtZSBmb3IgZmVtYWxlcyBhbmQgbWFsZXMuIFRoaXMgaW5kaWNhdGVzDQphIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBpbiB0aGUgbWVhbiBhbW91bnRzIGJldHdlZW4gdGhlDQp0d28gZ3JvdXBzLCB3aXRoIG1hbGVzIHJlY2VpdmluZyBoaWdoZXIgYW1vdW50cyBvbiBhdmVyYWdlLg0KDQpgYGB7cn0NCiMgQ291bnRzIG9mIGluZGl2aWR1YWxzIHJlY2VpdmluZyBTUyBjaGVja3MgbGVzcyB0aGFuICQxNDAwDQpzdWNjZXNzX21hbGUgPSBzdW0oc3NfY2hlY2tzJE1hbGUgPCAxNDAwLCBuYS5ybSA9IFRSVUUpDQpzdWNjZXNzX2ZlbWFsZSA9IHN1bShzc19jaGVja3MkRmVtYWxlIDwgMTQwMCwgbmEucm0gPSBUUlVFKQ0KDQojIFRvdGFsIGluZGl2aWR1YWxzIGluIGVhY2ggZ3JvdXANCnRvdGFsX21hbGUgPSBsZW5ndGgoc3NfY2hlY2tzJE1hbGVbIWlzLm5hKHNzX2NoZWNrcyRNYWxlKV0pDQp0b3RhbF9mZW1hbGUgPSBsZW5ndGgoc3NfY2hlY2tzJEZlbWFsZVshaXMubmEoc3NfY2hlY2tzJEZlbWFsZSldKQ0KDQojIFBlcmZvcm0gdGhlIHByb3BvcnRpb24gdGVzdA0KcHJvcF90ZXN0IDwtIHByb3AudGVzdChjKHN1Y2Nlc3NfbWFsZSwgc3VjY2Vzc19mZW1hbGUpLCBjKHRvdGFsX21hbGUsIHRvdGFsX2ZlbWFsZSkpDQoNCiMgUHJpbnQgdGhlIHJlc3VsdA0KcHJpbnQocHJvcF90ZXN0KQ0KIA0KDQpgYGANCg0KVGhlIHByb3BvcnRpb25zIG9mIFNTIGNoZWNrcyBsZXNzIHRoYW4gXCQxNDAwIGFuZCB0aGUgcmVzdWx0cyBvZiB0aGUNCnByb3BvcnRpb25zIHotdGVzdCBhcmUgYXMgZm9sbG93czoNCg0KUHJvcG9ydGlvbiBvZiBGZW1hbGVzOiA5Ny41NiUgUHJvcG9ydGlvbiBvZiBNYWxlczogMi40NCUgVGhlIHByb3BvcnRpb25zDQp6LXRlc3QgeWllbGRlZDoNCg0Kei1zdGF0aXN0aWM6IDguODQgcC12YWx1ZTogOS40NsOXMTDiiJIxOQ0KDQpUaGUgZXh0cmVtZWx5IGxvdyBwLXZhbHVlIGxlYWRzIHVzIHRvIHJlamVjdCB0aGUgbnVsbCBoeXBvdGhlc2lzIHRoYXQNCnRoZSBwcm9wb3J0aW9ucyBvZiBTUyBjaGVja3MgbGVzcyB0aGFuIFwkMTQwMCBhcmUgdGhlIHNhbWUgZm9yIGZlbWFsZXMNCmFuZCBtYWxlcy4gVGhpcyByZXN1bHQgaW5kaWNhdGVzIGEgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBkaWZmZXJlbmNlDQppbiB0aGUgcHJvcG9ydGlvbnMsIHdpdGggYSBtdWNoIGhpZ2hlciBwcm9wb3J0aW9uIG9mIGZlbWFsZXMgcmVjZWl2aW5nDQpjaGVja3MgbGVzcyB0aGFuIFwkMTQwMCBjb21wYXJlZCB0byBtYWxlcy4NCg0KI1Rhc2sgMiBcIyhhKSBGaXQgYSByZWdyZXNzaW9uIG1vZGVsIHByZWRpY3RpbmcgR0RQIGZyb20gaG90ZWxzIGJhc2VkIG9uDQp5ZWFyLCBpbnZlc3RtZW50IGluIGhvdGVscywgaG90ZWwgYXJyaXZhbHMsIGFuZCBvdmVybmlnaHQgc3RheXMuIFwjKGIpDQpVc2UgdGhlIG1vZGVsIHRvIHByZWRpY3QgR0RQIGZyb20gaG90ZWxzIGZvciAyMDA2IHdpdGggZ2l2ZW4gdmFsdWVzIGZvcg0KcHJlZGljdG9ycy4gXCMoYykgQ29tcGFyZSB5b3VyIHJlc3VsdHMgd2l0aCB0aG9zZSBmcm9tIHRoZSBzcGVjaWZpZWQNCmFydGljbGUuDQoNCmBgYHtyfQ0KIyBMb2FkIGRhdGENCnRvdXJpc21fZGF0YSA8LSByZWFkLmNzdigiVG91cmlzbS5jc3YiKQ0KDQojIEZpdCBtb2RlbA0KbW9kZWwgPC0gbG0oR0RQX0hvdGVscyB+IFllYXIgKyBJbnZlc3RtZW50X0hvdGVscyArIEFycml2YWxzX0hvdGVscyArIE92ZXJuaWdodF9zdGF5cywgZGF0YT10b3VyaXNtX2RhdGEpDQpzdW1tYXJ5KG1vZGVsKQ0KYGBgDQoNCmBgYHtyfQ0KIyBQcmVkaWN0IEdEUF9Ib3RlbHMgZm9yIGdpdmVuIHZhbHVlcw0KbmV3X2RhdGEgPC0gZGF0YS5mcmFtZShZZWFyPTIwMDYsIEludmVzdG1lbnRfSG90ZWxzPTEwMDAsIEFycml2YWxzX0hvdGVscz01MDAwLCBPdmVybmlnaHRfc3RheXM9MjQwMDApDQpwcmVkaWN0KG1vZGVsLCBuZXdkYXRhPW5ld19kYXRhKQ0KDQpgYGANCg0KYGBge3J9DQojIFByZWRpY3QgR0RQX0hvdGVscyBmb3IgZ2l2ZW4gdmFsdWVzDQpuZXdfZGF0YSA8LSBkYXRhLmZyYW1lKFllYXI9MjAwNiwgSW52ZXN0bWVudF9Ib3RlbHM9MTAwMCwgQXJyaXZhbHNfSG90ZWxzPTUwMDAsIE92ZXJuaWdodF9zdGF5cz0yNDAwMCkNCnByZWRpY3QobW9kZWwsIG5ld2RhdGE9bmV3X2RhdGEpDQoNCmBgYA0KDQpUYXNrIDMgMykgdGhlIGRhdGEgZ2l2ZW4gaW4gdGhlIGZpbGUgUHJlc3RpZ2UuY3N2IChhKSBGaXQgYSByZWdyZXNzaW9uDQplcXVhdGlvbiBmb3IgWT1wcmVzdGlnZSBhcyBhIGZ1bmN0aW9uIG9mIHRoZSBwb3RlbnRpYWwgcHJlZGljdG9yczoNCmVkdWNhdGlvbiwgaW5jb21lLCB3b21lbiwgY2Vuc3VzLCBhbmQgdHlwZSAuDQoNCihiKSBQcmVkaWN0IHByZXN0aWdlIHdoZW4gZWR1Y2F0aW9uID0gMTIgaW5jb21lID0gMTIwMDAgd29tZW4gPSA1MA0KICAgIGNlbnN1cyA9IDEyMDAgdHlwZSA9IGJjDQoNCmBgYHtyfQ0KIyBMb2FkIGRhdGENCnByZXN0aWdlX2RhdGEgPC0gcmVhZC5jc3YoIlByZXN0aWdlLmNzdiIpDQoNCiMgRml0IG1vZGVsDQpwcmVzdGlnZV9tb2RlbCA8LSBsbShwcmVzdGlnZSB+IGVkdWNhdGlvbiArIGluY29tZSArIHdvbWVuICsgY2Vuc3VzICsgdHlwZSwgZGF0YT1wcmVzdGlnZV9kYXRhKQ0Kc3VtbWFyeShwcmVzdGlnZV9tb2RlbCkNCg0KYGBgDQoNCmBgYHtyfQ0KIyBQcmVkaWN0IHByZXN0aWdlIGZvciBnaXZlbiB2YWx1ZXMNCnByZWRpY3RfZGF0YSA8LSBkYXRhLmZyYW1lKGVkdWNhdGlvbj0xMiwgaW5jb21lPTEyMDAwLCB3b21lbj01MCwgY2Vuc3VzPTEyMDAsIHR5cGU9ImJjIikNCnByZWRpY3QocHJlc3RpZ2VfbW9kZWwsIG5ld2RhdGE9cHJlZGljdF9kYXRhKQ0KDQpgYGANCg0KVGFzayA0DQoNCjQpICBGb3IgdGhlIGRhdGEgZ2l2ZW4gaW4gdGhlIGZpbGUgQXV0byByYXRlcy5jc3Y6IFNvdXJjZS0tSG9hZ2xpbiwgRC4sDQogICAgTW9zdGVsbGVyLCBGLiwgYW5kIFR1a2V5LCBKLiAoMTk5MSkuIEZ1bmRhbWVudGFscyBvZiBFeHBsb3JhdG9yeQ0KICAgIEFuYWx5c2lzIG9mIFZhcmlhbmNlLiBXaWxleSwgTmV3IFlvcmssIHBhZ2UgNzEuDQogICAgPGh0dHA6Ly93d3cuaXRsLm5pc3QuZ292L2Rpdjg5OC9lZHVjYXRpb24vYW5vdmEvbmV3Y2FyLmRhdD4gUmVzcG9uc2UNCiAgICB2YXJpYWJsZSBZID0gaW50ZXJlc3QgcmF0ZSAoJSkgRmFjdG9yID0gQ2l0eSAoNiBsZXZlbHM6IDEgdG8gNikgQXJlDQogICAgdGhlIG1lYW4gaW50ZXJlc3QgcmF0ZXMgc2FtZSBmb3IgdGhlIDYgY2l0aWVzPw0KDQpgYGB7cn0NCiMgTG9hZCBkYXRhDQphdXRvX3JhdGVzIDwtIHJlYWQuY3N2KCJBdXRvIHJhdGVzLmNzdiIpDQoNCiMgUGVyZm9ybSBBTk9WQQ0KYW5vdmFfbW9kZWwgPC0gYW92KFJhdGUgfiBmYWN0b3IoQ2l0eSksIGRhdGE9YXV0b19yYXRlcykNCnN1bW1hcnkoYW5vdmFfbW9kZWwpDQoNCmBgYA0KDQpFeHBlcmltZW50IGFuZCBIUiBEYXRhIEFuYWx5c2lzIChhKSBBbmFseXplIHRoZSBpbmRlcGVuZGVuY2Ugb2YgdGhlDQpncmVldGluZyByZWNlaXZlZCBieSBjdXN0b21lcnMgYW5kIHRoZWlyIGFnZSB1c2luZyB0aGUgZGF0YSBmcm9tDQpHcmVldGluZyBhbmQgQWdlLmNzdi4gKGIpIFRlc3QgdGhlIGluZGVwZW5kZW5jZSBvZiBhZ2UgdmVyc3VzIGxlbmd0aCBvZg0KYWJzZW5jZSB1c2luZyB0aGUgZGF0YSBmcm9tIEFic2VudGVlIFJlcG9ydC5jc3bigIvigIsuDQoNCmBgYHtyfQ0KIyBMb2FkIG5lY2Vzc2FyeSBsaWJyYXJpZXMNCmxpYnJhcnkocmVhZHIpDQpsaWJyYXJ5KGRwbHlyKQ0KDQojIExvYWQgYW5kIGNsZWFuIEdyZWV0aW5nIGFuZCBBZ2UgZGF0YQ0KZ3JlZXRpbmdfYWdlIDwtIHJlYWRfY3N2KCJHcmVldGluZyBhbmQgQWdlLmNzdiIsIG5hID0gYygiIiwgIk5BIikpDQpncmVldGluZ19hZ2UgPC0gZ3JlZXRpbmdfYWdlWy0xLCAtMV0gICMgUmVtb3ZlIHRoZSBmaXJzdCByb3cgKGV4dHJhIGhlYWRlcikgYW5kIHRoZSB1bm5hbWVkIGNvbHVtbg0KY29sbmFtZXMoZ3JlZXRpbmdfYWdlKSA8LSBjKCJHUkVFVElORyIsICIyMS0yNSIsICIyNi01MCIsICI+NTAiKQ0KZ3JlZXRpbmdfYWdlWywgMjo0XSA8LSBsYXBwbHkoZ3JlZXRpbmdfYWdlWywgMjo0XSwgZnVuY3Rpb24oeCkgYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeCkpKQ0KDQojIFBlcmZvcm0gY2hpLXNxdWFyZSB0ZXN0DQpncmVldGluZ190YWJsZSA8LSBhcy50YWJsZShhcy5tYXRyaXgoZ3JlZXRpbmdfYWdlWywgMjo0XSkpDQpncmVldGluZ190ZXN0IDwtIGNoaXNxLnRlc3QoZ3JlZXRpbmdfdGFibGUpDQoNCiMgRGlzcGxheSByZXN1bHRzDQpwcmludChncmVldGluZ190ZXN0KQ0KDQojIExvYWQgYW5kIGNsZWFuIEFic2VudGVlIFJlcG9ydCBkYXRhDQphYnNlbnRlZV9yZXBvcnQgPC0gcmVhZF9jc3YoIkFic2VudGVlIFJlcG9ydC5jc3YiLCBuYSA9IGMoIiIsICJOQSIpKQ0KDQojIENoZWNrIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGxvYWRlZCBhYnNlbnRlZSByZXBvcnQgZGF0YQ0KcHJpbnQoYWJzZW50ZWVfcmVwb3J0KQ0KDQojIERyb3AgdGhlIGZpcnN0IHJvdyBhbmQgYW55IHVubmVjZXNzYXJ5IGNvbHVtbnMNCmFic2VudGVlX3JlcG9ydF9jbGVhbmVkIDwtIGFic2VudGVlX3JlcG9ydFstMSwgXQ0KYWJzZW50ZWVfcmVwb3J0X2NsZWFuZWQgPC0gYWJzZW50ZWVfcmVwb3J0X2NsZWFuZWQgJT4lIHNlbGVjdCgtMSkNCg0KIyBNYW51YWxseSBuYW1lIHRoZSBjb2x1bW5zIGJhc2VkIG9uIGF2YWlsYWJsZSBjb2x1bW5zDQppZiAobmNvbChhYnNlbnRlZV9yZXBvcnRfY2xlYW5lZCkgPT0gNCkgew0KICAgIGNvbG5hbWVzKGFic2VudGVlX3JlcG9ydF9jbGVhbmVkKSA8LSBjKCJBR0VfR1JPVVAiLCAiMV9EQVkiLCAiMi00X0RBWVMiLCAiPjdfREFZUyIpDQp9IGVsc2UgaWYgKG5jb2woYWJzZW50ZWVfcmVwb3J0X2NsZWFuZWQpID09IDUpIHsNCiAgICBjb2xuYW1lcyhhYnNlbnRlZV9yZXBvcnRfY2xlYW5lZCkgPC0gYygiQUdFX0dST1VQIiwgIjFfREFZIiwgIjItNF9EQVlTIiwgIjUtN19EQVlTIiwgIj43X0RBWVMiKQ0KfQ0KDQojIENvbnZlcnQgdG8gbnVtZXJpYywgc2tpcHBpbmcgdGhlICJBR0VfR1JPVVAiIGNvbHVtbg0KYWJzZW50ZWVfcmVwb3J0X2NsZWFuZWRbLCAyOm5jb2woYWJzZW50ZWVfcmVwb3J0X2NsZWFuZWQpXSA8LSBsYXBwbHkoDQogICAgYWJzZW50ZWVfcmVwb3J0X2NsZWFuZWRbLCAyOm5jb2woYWJzZW50ZWVfcmVwb3J0X2NsZWFuZWQpXSwgDQogICAgZnVuY3Rpb24oeCkgYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeCkpDQopDQoNCiMgUGVyZm9ybSBjaGktc3F1YXJlIHRlc3QNCmFic2VudGVlX3RhYmxlIDwtIGFzLnRhYmxlKGFzLm1hdHJpeChhYnNlbnRlZV9yZXBvcnRfY2xlYW5lZFssIDI6bmNvbChhYnNlbnRlZV9yZXBvcnRfY2xlYW5lZCldKSkNCmFic2VudGVlX3Rlc3QgPC0gY2hpc3EudGVzdChhYnNlbnRlZV90YWJsZSkNCg0KIyBEaXNwbGF5IHJlc3VsdHMNCnByaW50KGFic2VudGVlX3Rlc3QpDQoNCg0KYGBgDQoNCjEuICBHcmVldGluZyBhbmQgQWdlIEFuYWx5c2lzIE9iamVjdGl2ZTogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHR5cGUgb2YNCiAgICBncmVldGluZyByZWNlaXZlZCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgY3VzdG9tZXIncyBhZ2UuIFRlc3QNCiAgICBFeHBsYW5hdGlvbjogVGhlIGNoaS1zcXVhcmUgdGVzdCBjb21wYXJlcyB0aGUgb2JzZXJ2ZWQgZnJlcXVlbmNpZXMNCiAgICBvZiBncmVldGluZ3MgYWNyb3NzIGFnZSBncm91cHMgd2l0aCB0aGUgZXhwZWN0ZWQgZnJlcXVlbmNpZXMgaWYgbm8NCiAgICBhc3NvY2lhdGlvbiBleGlzdHMuIEludGVycHJldGluZyB0aGUgT3V0cHV0Og0KDQpDaGktU3F1YXJlIFN0YXRpc3RpYzogQSBtZWFzdXJlIG9mIGhvdyBtdWNoIHRoZSBvYnNlcnZlZCBmcmVxdWVuY2llcw0KZGV2aWF0ZSBmcm9tIGV4cGVjdGVkIGZyZXF1ZW5jaWVzLiBEZWdyZWVzIG9mIEZyZWVkb206IENhbGN1bGF0ZWQgYmFzZWQNCm9uIHRoZSBudW1iZXIgb2YgY2F0ZWdvcmllcyBpbiBib3RoIHZhcmlhYmxlcy4gUC1WYWx1ZTogSW5kaWNhdGVzIHRoZQ0KcHJvYmFiaWxpdHkgdGhhdCB0aGUgb2JzZXJ2ZWQgYXNzb2NpYXRpb24gaGFwcGVuZWQgYnkgY2hhbmNlLg0KQ29uY2x1c2lvbjoNCg0KSWYgdGhlIHAtdmFsdWUgaXMgbGVzcyB0aGFuIDAuMDUsIHdlIHJlamVjdCB0aGUgbnVsbCBoeXBvdGhlc2lzLA0Kc3VnZ2VzdGluZyB0aGF0IGdyZWV0aW5nIHR5cGUgZGVwZW5kcyBvbiBhZ2UuIE90aGVyd2lzZSwgd2UgZmFpbCB0bw0KcmVqZWN0IHRoZSBudWxsIGh5cG90aGVzaXMsIGltcGx5aW5nIGluZGVwZW5kZW5jZS4gMi4gQWJzZW50ZWUgUmVwb3J0DQpBbmFseXNpcyBPYmplY3RpdmU6IFRlc3Qgd2hldGhlciB0aGUgYWdlIGdyb3VwIGlzIGluZGVwZW5kZW50IG9mIHRoZQ0KbGVuZ3RoIG9mIGFic2VuY2UuIFRlc3QgRXhwbGFuYXRpb246IFNpbWlsYXIgdG8gdGhlIGZpcnN0IHRlc3QsIGl0DQpjb21wYXJlcyBvYnNlcnZlZCBhYnNlbmNlIGR1cmF0aW9ucyBhY3Jvc3MgZGlmZmVyZW50IGFnZSBncm91cHMgd2l0aA0Kd2hhdCB3ZSdkIGV4cGVjdCB1bmRlciBpbmRlcGVuZGVuY2UuIEludGVycHJldGluZyB0aGUgT3V0cHV0Og0KDQpDaGktU3F1YXJlIFN0YXRpc3RpYzogSW5kaWNhdGVzIHRoZSBkZXZpYXRpb24gYmV0d2VlbiBvYnNlcnZlZCBhbmQNCmV4cGVjdGVkIGZyZXF1ZW5jaWVzLiBEZWdyZWVzIG9mIEZyZWVkb206IERlcGVuZHMgb24gdGhlIG51bWJlciBvZg0KY2F0ZWdvcmllcyBpbiBhZ2UgZ3JvdXBzIGFuZCBhYnNlbmNlIGxlbmd0aHMuIFAtVmFsdWU6IFRoZSBsaWtlbGlob29kDQp0aGF0IHRoZSBvYnNlcnZlZCByZXN1bHRzIG9jY3VycmVkIGJ5IHJhbmRvbSBjaGFuY2UuIENvbmNsdXNpb246DQoNCklmIHRoZSBwLXZhbHVlIGlzIGxlc3MgdGhhbiAwLjA1LCB3ZSByZWplY3QgdGhlIG51bGwgaHlwb3RoZXNpcywNCmluZGljYXRpbmcgdGhhdCBhZ2UgZ3JvdXAgYWZmZWN0cyBhYnNlbmNlIGxlbmd0aC4gT3RoZXJ3aXNlLCB0aGUgbnVsbA0KaHlwb3RoZXNpcyBjYW5ub3QgYmUgcmVqZWN0ZWQsIGltcGx5aW5nIGluZGVwZW5kZW5jZS4gRXhhbXBsZQ0KSW50ZXJwcmV0YXRpb246IExldCdzIHN1cHBvc2UgdGhlc2UgaHlwb3RoZXRpY2FsIHZhbHVlcyB3ZXJlIHJldHVybmVkOg0KDQpHcmVldGluZyBhbmQgQWdlOiBDaGktU3F1YXJlIFN0YXRpc3RpYzogNi4yNSBEZWdyZWVzIG9mIEZyZWVkb206IDQNClAtVmFsdWU6IDAuMTggQ29uY2x1c2lvbjogVGhlIHAtdmFsdWUgb2YgMC4xOCBpcyBncmVhdGVyIHRoYW4gMC4wNSwNCmluZGljYXRpbmcgdGhhdCB0aGUgdHlwZSBvZiBncmVldGluZyBpcyBsaWtlbHkgaW5kZXBlbmRlbnQgb2YgY3VzdG9tZXINCmFnZS4gQWJzZW50ZWUgUmVwb3J0OiBDaGktU3F1YXJlIFN0YXRpc3RpYzogMTIuMjAgRGVncmVlcyBvZiBGcmVlZG9tOiA2DQpQLVZhbHVlOiAwLjA1NyBDb25jbHVzaW9uOiBUaGUgcC12YWx1ZSBvZiAwLjA1NyBpcyBjbG9zZSB0byAwLjA1IGJ1dA0KZG9lcyBub3QgY3Jvc3MgaXQuIFRoZXJlZm9yZSwgd2UgY2FuJ3Qgc3Ryb25nbHkgY29uY2x1ZGUgdGhhdCBhZ2UgaXMNCnJlbGF0ZWQgdG8gYWJzZW5jZSBsZW5ndGggYXQgdGhlIDUlIHNpZ25pZmljYW5jZSBsZXZlbC4gRnVydGhlcg0KaW52ZXN0aWdhdGlvbiB3aXRoIGFkZGl0aW9uYWwgZGF0YSBjb3VsZCByZXZlYWwgYSBjbGVhcmVyIHJlbGF0aW9uc2hpcC4NCg==