Case Scenario 1
This is the fourth season of outfielder Luis Robert with the Chicago
White Socks. If during the first three seasons he hit 11, 13, and 12
home runs, how many does he need on this season for his overall average
to be at least 20?
Solution
Given that x1=11,x2=13,x3=12
we want to find x4 such that the mean (average) number of home-runs
is x¯>=20
Notice that in this case n=4 .
According to the information above: 20×4=11+13+12+x4
so when x4=61 , the home-runs average will be 20.
# Home-runs so far
hr_before <- c(11,13,12)
# Average number of home-runs per season wanted
wanted_hr <- 20
n_seasons <- 4
# Needed home-runs on season 4
x_4 <- n_seasons * wanted_hr - sum (hr_before)
# Minimum number of home-runs needed by Robert
x_4
[1] 44
According to the calculations above, Robert must hit 44 home-runs or
better on this season to get an average number of home-runs per season
of at least 20.
We could confirm this, by using the function mean() in R.
# Robert's performance
robert_hrs <- c( 11, 13, 12, 44)
# Find mean
mean(robert_hrs)
[1] 20
# Find the standard deviation
sd (robert_hrs)
[1] 16.02082
# Find the maximum number of home-runs during the four seasons period
max (robert_hrs)
[1] 44
# Find the minimum number of home-runs during the four seasons period
min (robert_hrs)
[1] 11
The summary() function can be used to find basic
statistics, including the median.
summary (robert_hrs)
Min. 1st Qu. Median Mean 3rd Qu. Max.
11.00 11.75 12.50 20.00 20.75 44.00
Question 1 Now, you must complete the problem below
which represents a similar case scenario. You may use the steps that we
executed in Case-scenario 1 as a template for your solution.
This is the sixth season of outfielder Juan Soto in the majors. If
during the first five seasons he received 79, 108,41,145, and 135 walks,
how many does he need on this season for his overall number of walks per
season to be at least 100?
# Walks so far
walks_before <- c( 79, 108, 41, 145, 135)
# Average overall number of walks needed (at least)
average_walks_wanted <- 100
# Number of seasons
seasons <- 6
# Needed walks on season 6
walks_season_six = ( seasons * average_walks_wanted ) - sum(walks_before)
# Print minimum walks needed on season 6
walks_season_six
[1] 92
Juan Soto needs at least 92 walks on season six to average an
overall average of 100 across all six seasons
Case Scenario 2
The average salary of 10 baseball players is 72,000 dollars a week
and the average salary of 4 soccer players is 84,000. Find the mean
salary of all 14 professional players.
Solution
mean_weekly_salary_baseball <- 72000
mean_weekly_salary_soccer <- 84000
number_baseball_players <- 10
number_soccer_players <- 4
overall_mean_weekly_salary = ((number_baseball_players * mean_weekly_salary_baseball) +
(number_soccer_players * mean_weekly_salary_soccer) ) / (number_soccer_players + number_baseball_players)
overall_mean_weekly_salary
[1] 75428.57
Question 2 The average salary of 7 basketball
players is 102,000 dollars a week and the average salary of 9 NFL
players is 91,000. Find the mean salary of all 16 professional
players.
mean_weekly_salary_basketball <- 102000
mean_weekly_salary_nfl <- 91000
number_basketball_players <- 7
number_nfl_players <- 9
overall_mean_weekly_salary = ((number_basketball_players * mean_weekly_salary_basketball) + (number_nfl_players * mean_weekly_salary_nfl) ) / (number_nfl_players + number_basketball_players)
overall_mean_weekly_salary
[1] 95812.5
The mean salary of all 16 professional players is
$95,812.50
Case Scenario 3
The frequency distribution below lists the number of active players
in the Barclays Premier League and the time left in their contract.
- Find the mean,the median and the standard
deviation.
contract_lenght <- read.csv('allcontracts.csv', header = TRUE, sep = ",")
contract_years <- contract_lenght$years
contracts_mean <- mean(contract_years)
contracts_mean
[1] 3.46
# Median
contracts_median <- median (contract_years)
contracts_median
[1] 3
# Find the number of observations
contracts_n <- length (contract_years)
# Find the standard deviation
contracts_sd <- sd(contract_years)
- What percentage of the data lies within one standard
deviation of the mean?
contracts_within_1_sd <- sum (((contract_years - contracts_mean) / contracts_sd < 1) / contracts_n)
contracts_within_1_sd
[1] 0.842
# Difference from empirical
contracts_within_1_sd - 0.68
[1] 0.162
The percentage of contracts within 1 standard deviation of
the mean is 0.84
- What percentage of the data lies within two standard
deviations of the mean?
contracts_within_2_sd <- sum (((contract_years - contracts_mean) / contracts_sd < 2) / contracts_n)
contracts_within_2_sd
[1] 1
# Difference from empirical
contracts_within_2_sd - 0.95
[1] 0.05
The percentage of contracts within 2 standard deviation of the
mean is 100%
- What percent of the data lies within three standard
deviations of the mean?
contracts_within_3_sd <- sum (((contract_years - contracts_mean) / contracts_sd < 3) / contracts_n)
contracts_within_3_sd
[1] 1
The percentage of contracts within 3 standard deviation of the
mean is 100%
# Difference from empirical
contracts_within_3_sd - 0.9973
[1] 0.0027
- Draw a histogram to illustrate the data.
hist (contract_years, xlab = "Years Left in Contract", col = "yellow", border = "red", xlim = c(0,8), ylim = c(0,225), breaks = 5)

boxplot(contract_years, main="Years Left in Contract", ylab= "Years", col="lightblue", border="blue3")

Question 3
Use the skills learned in case scenario number 3 on one the following
data sets. You may choose only one dataset. They are both available in
Canvas.
- Find the mean,the median and the standard
deviation.
data <- read.csv("doubles_hit.csv", header = TRUE, sep = ",")
doubles_hit <- data$doubles_hit
doubles_mean <- mean(doubles_hit)
#print mean
doubles_mean
[1] 23.55
doubles_median <- median(doubles_hit)
#print media
doubles_median
[1] 23.5
- Find the Standard Deviation
doubles_sd <- sd(doubles_hit)
#print standard deviation
doubles_sd
[1] 13.37371
- Find the number of observations or length
doubles_length <- length(doubles_hit)
#print length of colum
doubles_length
[1] 100
- What percentage of the data lies within one standard
deviation of the mean?
doubles_within_one_sd <- sum (((doubles_hit - doubles_mean) / doubles_sd < 1) / doubles_length)
#print result
doubles_within_one_sd
[1] 0.79
# Difference from empirical
doubles_within_one_sd - 0.68
[1] 0.11
*The percentage of double hits within 1 standard deviation from the
mean is 0.79.
- What percentage of the data lies within two standard
deviations of the mean?
doubles_within_two_sd <- sum (((doubles_hit - doubles_mean) / doubles_sd < 2) / doubles_length)
#print result
doubles_within_two_sd
[1] 1
# Difference from empirical
doubles_within_two_sd - 0.95
[1] 0.05
The percentage of double hits within 2 standard deviations from
the mean is 1.
- What percent of the data lies within three standard
deviations of the mean?
doubles_within_three_sd <- sum (((doubles_hit - doubles_mean) / doubles_sd < 3) / doubles_length)
#print result
doubles_within_three_sd
The percentage of double hits within 3 standard deviations from
the mean is 1.
# Difference from empirical
doubles_within_three_sd - 0.9973
[1] 0.0027
- Draw a histogram to illustrate the data.
hist (doubles_hit, xlab = "Number of Double Hits", col = "blue", border = "yellow", xlim = c(0,50), ylim = c(0,30), breaks = 10)

boxplot(doubles_hit, main="Boxplot of Doubles Hit by Player", ylab= "Doubles", col="blue", border="lightblue")

The boxplot provides several insights about the distribution of
doubles hit by players:
Median & Spread: The median (bold line inside the box)
appears to be around 25, indicating that half of the players hit more
than 25 doubles, and half hit fewer.
Interquartile Range (IQR): The box spans from approximately 20 to
40 doubles, meaning that the middle 50% of players hit within this
range.
Whiskers: The whiskers extend roughly from 10 to 50, which
suggests that most players hit between these values without extreme
outliers.
No Outliers: There are no individual points outside the whiskers,
suggesting that there are no extreme cases of unusually low or high
double counts.
Overall, this distribution appears relatively symmetrical, with no
significant skewness or extreme variations. The data suggests a fairly
consistent performance among the players in terms of hitting
doubles.
LS0tCnRpdGxlOiAiR2V0dGluZyBTdGFydGVkIHdpdGggUjogQ29uY2VwdHMgaW4gU3BvcnRzIEFuYWx5dGljcyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyMjIENhc2UgU2NlbmFyaW8gMQoKVGhpcyBpcyB0aGUgZm91cnRoIHNlYXNvbiBvZiBvdXRmaWVsZGVyIEx1aXMgUm9iZXJ0IHdpdGggdGhlIENoaWNhZ28gV2hpdGUgU29ja3MuIElmIGR1cmluZyB0aGUgZmlyc3QgdGhyZWUgc2Vhc29ucyBoZSBoaXQgMTEsIDEzLCBhbmQgMTIgaG9tZSBydW5zLCBob3cgbWFueSBkb2VzIGhlIG5lZWQgb24gdGhpcyBzZWFzb24gZm9yIGhpcyBvdmVyYWxsIGF2ZXJhZ2UgdG8gYmUgYXQgbGVhc3QgMjA/CgoqKlNvbHV0aW9uKioKCkdpdmVuIHRoYXQgeDE9MTEseDI9MTMseDM9MTIKCndlIHdhbnQgdG8gZmluZCB4NAogc3VjaCB0aGF0IHRoZSBtZWFuIChhdmVyYWdlKSBudW1iZXIgb2YgaG9tZS1ydW5zIGlzIHjCrz49MjAKCk5vdGljZSB0aGF0IGluIHRoaXMgY2FzZSBuPTQKLgoKQWNjb3JkaW5nIHRvIHRoZSBpbmZvcm1hdGlvbiBhYm92ZTogMjDDlzQ9MTErMTMrMTIreDQKCnNvIHdoZW4geDQ9NjEKLCB0aGUgaG9tZS1ydW5zIGF2ZXJhZ2Ugd2lsbCBiZSAyMC4KCmBgYHtyfQojIEhvbWUtcnVucyBzbyBmYXIKaHJfYmVmb3JlIDwtIGMoMTEsMTMsMTIpCgojIEF2ZXJhZ2UgbnVtYmVyIG9mIGhvbWUtcnVucyBwZXIgc2Vhc29uIHdhbnRlZAp3YW50ZWRfaHIgPC0gMjAKCm5fc2Vhc29ucyA8LSA0CgojIE5lZWRlZCBob21lLXJ1bnMgb24gc2Vhc29uIDQKeF80IDwtIG5fc2Vhc29ucyAqIHdhbnRlZF9ociAtIHN1bSAoaHJfYmVmb3JlKQoKIyBNaW5pbXVtIG51bWJlciBvZiBob21lLXJ1bnMgbmVlZGVkIGJ5IFJvYmVydAp4XzQKYGBgCkFjY29yZGluZyB0byB0aGUgY2FsY3VsYXRpb25zIGFib3ZlLCBSb2JlcnQgbXVzdCBoaXQgNDQgaG9tZS1ydW5zIG9yIGJldHRlciBvbiB0aGlzIHNlYXNvbiB0byBnZXQgYW4gYXZlcmFnZSBudW1iZXIgb2YgaG9tZS1ydW5zIHBlciBzZWFzb24gb2YgYXQgbGVhc3QgMjAuCgpXZSBjb3VsZCBjb25maXJtIHRoaXMsIGJ5IHVzaW5nIHRoZSBmdW5jdGlvbiBtZWFuKCkgaW4gUi4KYGBge3J9CiMgUm9iZXJ0J3MgcGVyZm9ybWFuY2UKcm9iZXJ0X2hycyA8LSBjKCAxMSwgMTMsIDEyLCA0NCkKCiMgRmluZCBtZWFuCm1lYW4ocm9iZXJ0X2hycykKYGBgCmBgYHtyfQojIEZpbmQgdGhlIHN0YW5kYXJkIGRldmlhdGlvbgpzZCAocm9iZXJ0X2hycykKYGBgCmBgYHtyfQojIEZpbmQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGhvbWUtcnVucyBkdXJpbmcgdGhlIGZvdXIgc2Vhc29ucyBwZXJpb2QKbWF4IChyb2JlcnRfaHJzKQpgYGAKYGBge3J9CiMgRmluZCB0aGUgbWluaW11bSBudW1iZXIgb2YgaG9tZS1ydW5zIGR1cmluZyB0aGUgZm91ciBzZWFzb25zIHBlcmlvZAptaW4gKHJvYmVydF9ocnMpCmBgYApUaGUgKipzdW1tYXJ5KCkqKiBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBmaW5kIGJhc2ljIHN0YXRpc3RpY3MsIGluY2x1ZGluZyB0aGUgbWVkaWFuLgpgYGB7cn0Kc3VtbWFyeSAocm9iZXJ0X2hycykKYGBgCgoqKlF1ZXN0aW9uIDEqKiAKTm93LCB5b3UgbXVzdCBjb21wbGV0ZSB0aGUgcHJvYmxlbSBiZWxvdyB3aGljaCByZXByZXNlbnRzIGEgc2ltaWxhciBjYXNlIHNjZW5hcmlvLiBZb3UgbWF5IHVzZSB0aGUgc3RlcHMgdGhhdCB3ZSBleGVjdXRlZCBpbiBDYXNlLXNjZW5hcmlvIDEgYXMgYSB0ZW1wbGF0ZSBmb3IgeW91ciBzb2x1dGlvbi4KClRoaXMgaXMgdGhlIHNpeHRoIHNlYXNvbiBvZiBvdXRmaWVsZGVyIEp1YW4gU290byBpbiB0aGUgbWFqb3JzLiBJZiBkdXJpbmcgdGhlIGZpcnN0IGZpdmUgc2Vhc29ucyBoZSByZWNlaXZlZCA3OSwgMTA4LDQxLDE0NSwgYW5kIDEzNSB3YWxrcywgaG93IG1hbnkgZG9lcyBoZSBuZWVkIG9uIHRoaXMgc2Vhc29uIGZvciBoaXMgb3ZlcmFsbCBudW1iZXIgb2Ygd2Fsa3MgcGVyIHNlYXNvbiB0byBiZSBhdCBsZWFzdCAxMDA/CmBgYHtyfQojIFdhbGtzIHNvIGZhcgp3YWxrc19iZWZvcmUgPC0gYyggNzksIDEwOCwgNDEsIDE0NSwgMTM1KQoKIyBBdmVyYWdlIG92ZXJhbGwgbnVtYmVyIG9mIHdhbGtzIG5lZWRlZCAoYXQgbGVhc3QpCmF2ZXJhZ2Vfd2Fsa3Nfd2FudGVkIDwtIDEwMAoKIyBOdW1iZXIgb2Ygc2Vhc29ucwpzZWFzb25zIDwtIDYKCiMgTmVlZGVkIHdhbGtzIG9uIHNlYXNvbiA2CndhbGtzX3NlYXNvbl9zaXggPSAoIHNlYXNvbnMgKiBhdmVyYWdlX3dhbGtzX3dhbnRlZCApIC0gc3VtKHdhbGtzX2JlZm9yZSkKCiMgUHJpbnQgbWluaW11bSB3YWxrcyBuZWVkZWQgb24gc2Vhc29uIDYKd2Fsa3Nfc2Vhc29uX3NpeApgYGAKKipKdWFuIFNvdG8gbmVlZHMgYXQgbGVhc3QgOTIgd2Fsa3Mgb24gc2Vhc29uIHNpeCB0byBhdmVyYWdlIGFuIG92ZXJhbGwgYXZlcmFnZSBvZiAxMDAgYWNyb3NzIGFsbCBzaXggc2Vhc29ucyoqCgojIyMgQ2FzZSBTY2VuYXJpbyAyCgpUaGUgYXZlcmFnZSBzYWxhcnkgb2YgMTAgYmFzZWJhbGwgcGxheWVycyBpcyA3MiwwMDAgZG9sbGFycyBhIHdlZWsgYW5kIHRoZSBhdmVyYWdlIHNhbGFyeSBvZiA0IHNvY2NlciBwbGF5ZXJzIGlzIDg0LDAwMC4gRmluZCB0aGUgbWVhbiBzYWxhcnkgb2YgYWxsIDE0IHByb2Zlc3Npb25hbCBwbGF5ZXJzLgoKKipTb2x1dGlvbioqCmBgYHtyfQptZWFuX3dlZWtseV9zYWxhcnlfYmFzZWJhbGwgPC0gNzIwMDAKbWVhbl93ZWVrbHlfc2FsYXJ5X3NvY2NlciA8LSA4NDAwMAoKbnVtYmVyX2Jhc2ViYWxsX3BsYXllcnMgPC0gMTAKbnVtYmVyX3NvY2Nlcl9wbGF5ZXJzIDwtIDQKCm92ZXJhbGxfbWVhbl93ZWVrbHlfc2FsYXJ5ID0gKChudW1iZXJfYmFzZWJhbGxfcGxheWVycyAqIG1lYW5fd2Vla2x5X3NhbGFyeV9iYXNlYmFsbCkgKyAobnVtYmVyX3NvY2Nlcl9wbGF5ZXJzICogbWVhbl93ZWVrbHlfc2FsYXJ5X3NvY2NlcikgKSAvIChudW1iZXJfc29jY2VyX3BsYXllcnMgKyAgICBudW1iZXJfYmFzZWJhbGxfcGxheWVycykKCm92ZXJhbGxfbWVhbl93ZWVrbHlfc2FsYXJ5CmBgYAoqKlF1ZXN0aW9uIDIqKgpUaGUgYXZlcmFnZSBzYWxhcnkgb2YgNyBiYXNrZXRiYWxsIHBsYXllcnMgaXMgMTAyLDAwMCBkb2xsYXJzIGEgd2VlayBhbmQgdGhlIGF2ZXJhZ2Ugc2FsYXJ5IG9mIDkgTkZMIHBsYXllcnMgaXMgOTEsMDAwLiBGaW5kIHRoZSBtZWFuIHNhbGFyeSBvZiBhbGwgMTYgcHJvZmVzc2lvbmFsIHBsYXllcnMuCmBgYHtyfQptZWFuX3dlZWtseV9zYWxhcnlfYmFza2V0YmFsbCA8LSAxMDIwMDAKbWVhbl93ZWVrbHlfc2FsYXJ5X25mbCA8LSA5MTAwMAoKbnVtYmVyX2Jhc2tldGJhbGxfcGxheWVycyA8LSA3Cm51bWJlcl9uZmxfcGxheWVycyA8LSA5CgpvdmVyYWxsX21lYW5fd2Vla2x5X3NhbGFyeSA9ICgobnVtYmVyX2Jhc2tldGJhbGxfcGxheWVycyAqIG1lYW5fd2Vla2x5X3NhbGFyeV9iYXNrZXRiYWxsKSArIChudW1iZXJfbmZsX3BsYXllcnMgKiBtZWFuX3dlZWtseV9zYWxhcnlfbmZsKSApIC8gKG51bWJlcl9uZmxfcGxheWVycyArICAgIG51bWJlcl9iYXNrZXRiYWxsX3BsYXllcnMpCgpvdmVyYWxsX21lYW5fd2Vla2x5X3NhbGFyeQpgYGAKKipUaGUgbWVhbiBzYWxhcnkgb2YgYWxsIDE2IHByb2Zlc3Npb25hbCBwbGF5ZXJzIGlzICQ5NSw4MTIuNTAqKgoKIyMjIENhc2UgU2NlbmFyaW8gMwpUaGUgZnJlcXVlbmN5IGRpc3RyaWJ1dGlvbiBiZWxvdyBsaXN0cyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBwbGF5ZXJzIGluIHRoZSBCYXJjbGF5cyBQcmVtaWVyIExlYWd1ZSBhbmQgdGhlIHRpbWUgbGVmdCBpbiB0aGVpciBjb250cmFjdC4KCjEuICoqRmluZCB0aGUgbWVhbix0aGUgbWVkaWFuIGFuZCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uLioqCgoKYGBge3J9CmNvbnRyYWN0X2xlbmdodCA8LSByZWFkLmNzdignYWxsY29udHJhY3RzLmNzdicsIGhlYWRlciA9IFRSVUUsIHNlcCA9ICIsIikKCmNvbnRyYWN0X3llYXJzIDwtIGNvbnRyYWN0X2xlbmdodCR5ZWFycwpgYGAKCmBgYHtyfQojIE1lYW4KY29udHJhY3RzX21lYW4gPC0gbWVhbihjb250cmFjdF95ZWFycykKY29udHJhY3RzX21lYW4gCmBgYApgYGB7cn0KIyBNZWRpYW4KY29udHJhY3RzX21lZGlhbiA8LSBtZWRpYW4gKGNvbnRyYWN0X3llYXJzKQpjb250cmFjdHNfbWVkaWFuIApgYGAKYGBge3J9CiMgRmluZCB0aGUgbnVtYmVyIG9mIG9ic2VydmF0aW9ucwpjb250cmFjdHNfbiA8LSBsZW5ndGggKGNvbnRyYWN0X3llYXJzKQoKIyBGaW5kIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24KY29udHJhY3RzX3NkIDwtIHNkKGNvbnRyYWN0X3llYXJzKQpgYGAKCjIuICoqV2hhdCBwZXJjZW50YWdlIG9mIHRoZSBkYXRhIGxpZXMgd2l0aGluIG9uZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIG1lYW4/KioKYGBge3J9CmNvbnRyYWN0c193aXRoaW5fMV9zZCA8LSBzdW0gKCgoY29udHJhY3RfeWVhcnMgLSBjb250cmFjdHNfbWVhbikgLyBjb250cmFjdHNfc2QgPCAxKSAvIGNvbnRyYWN0c19uKQoKY29udHJhY3RzX3dpdGhpbl8xX3NkCmBgYApgYGB7cn0KIyBEaWZmZXJlbmNlIGZyb20gZW1waXJpY2FsCmNvbnRyYWN0c193aXRoaW5fMV9zZCAtIDAuNjgKYGBgCgoqKlRoZSBwZXJjZW50YWdlIG9mIGNvbnRyYWN0cyB3aXRoaW4gMSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIG1lYW4gaXMgMC44NCAqKgoKMy4gKipXaGF0IHBlcmNlbnRhZ2Ugb2YgdGhlIGRhdGEgbGllcyB3aXRoaW4gdHdvIHN0YW5kYXJkIGRldmlhdGlvbnMgb2YgdGhlIG1lYW4/KioKYGBge3J9CmNvbnRyYWN0c193aXRoaW5fMl9zZCA8LSBzdW0gKCgoY29udHJhY3RfeWVhcnMgLSBjb250cmFjdHNfbWVhbikgLyBjb250cmFjdHNfc2QgPCAyKSAvIGNvbnRyYWN0c19uKQoKY29udHJhY3RzX3dpdGhpbl8yX3NkCmBgYApgYGB7cn0KIyBEaWZmZXJlbmNlIGZyb20gZW1waXJpY2FsCmNvbnRyYWN0c193aXRoaW5fMl9zZCAtIDAuOTUKYGBgCgoqVGhlIHBlcmNlbnRhZ2Ugb2YgY29udHJhY3RzIHdpdGhpbiAyIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgbWVhbiBpcyAxMDAlICoKCjQuICoqV2hhdCBwZXJjZW50IG9mIHRoZSBkYXRhIGxpZXMgd2l0aGluIHRocmVlIHN0YW5kYXJkIGRldmlhdGlvbnMgb2YgdGhlIG1lYW4/KioKCmBgYHtyfQpjb250cmFjdHNfd2l0aGluXzNfc2QgPC0gc3VtICgoKGNvbnRyYWN0X3llYXJzIC0gY29udHJhY3RzX21lYW4pIC8gY29udHJhY3RzX3NkIDwgMykgLyBjb250cmFjdHNfbikKCmNvbnRyYWN0c193aXRoaW5fM19zZApgYGAKKlRoZSBwZXJjZW50YWdlIG9mIGNvbnRyYWN0cyB3aXRoaW4gMyBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIG1lYW4gaXMgMTAwJSoKCmBgYHtyfQojIERpZmZlcmVuY2UgZnJvbSBlbXBpcmljYWwKY29udHJhY3RzX3dpdGhpbl8zX3NkIC0gMC45OTczCmBgYAoKNS4gRHJhdyBhIGhpc3RvZ3JhbSB0byBpbGx1c3RyYXRlIHRoZSBkYXRhLgoKYGBge3J9Cmhpc3QgKGNvbnRyYWN0X3llYXJzLCB4bGFiID0gIlllYXJzIExlZnQgaW4gQ29udHJhY3QiLCBjb2wgPSAieWVsbG93IiwgYm9yZGVyID0gInJlZCIsIHhsaW0gPSBjKDAsOCksIHlsaW0gPSBjKDAsMjI1KSwgYnJlYWtzID0gNSkKYGBgCmBgYHtyfQpib3hwbG90KGNvbnRyYWN0X3llYXJzLCBtYWluPSJZZWFycyBMZWZ0IGluIENvbnRyYWN0IiwgeWxhYj0gIlllYXJzIiwgY29sPSJsaWdodGJsdWUiLCBib3JkZXI9ImJsdWUzIikKYGBgCioqUXVlc3Rpb24gMyoqCgpVc2UgdGhlIHNraWxscyBsZWFybmVkIGluIGNhc2Ugc2NlbmFyaW8gbnVtYmVyIDMgb24gb25lIHRoZSBmb2xsb3dpbmcgZGF0YSBzZXRzLiBZb3UgbWF5IGNob29zZSBvbmx5IG9uZSBkYXRhc2V0LiBUaGV5IGFyZSBib3RoIGF2YWlsYWJsZSBpbiBDYW52YXMuCgoxLiAqKkZpbmQgdGhlIG1lYW4sdGhlIG1lZGlhbiBhbmQgdGhlIHN0YW5kYXJkIGRldmlhdGlvbi4qKgoKYGBge3J9CiMgRGF0YWZyYW1lIHNldHVwCmRhdGEgPC0gcmVhZC5jc3YoImRvdWJsZXNfaGl0LmNzdiIsIGhlYWRlciA9IFRSVUUsIHNlcCA9ICIsIikKCmRvdWJsZXNfaGl0IDwtIGRhdGEkZG91Ymxlc19oaXQKYGBgCgoqICpGaW5kIHRoZSBNRUFOKgpgYGB7cn0KZG91Ymxlc19tZWFuIDwtIG1lYW4oZG91Ymxlc19oaXQpCgojcHJpbnQgbWVhbgpkb3VibGVzX21lYW4KYGBgCiogKkZpbmQgdGhlIE1FRElBTioKYGBge3J9CmRvdWJsZXNfbWVkaWFuIDwtIG1lZGlhbihkb3VibGVzX2hpdCkKCiNwcmludCBtZWRpYQpkb3VibGVzX21lZGlhbgpgYGAKKiAqRmluZCB0aGUgU3RhbmRhcmQgRGV2aWF0aW9uKgpgYGB7cn0KZG91Ymxlc19zZCA8LSBzZChkb3VibGVzX2hpdCkKCiNwcmludCBzdGFuZGFyZCBkZXZpYXRpb24KZG91Ymxlc19zZApgYGAKKiAqRmluZCB0aGUgbnVtYmVyIG9mIG9ic2VydmF0aW9ucyBvciBsZW5ndGgqCmBgYHtyfQpkb3VibGVzX2xlbmd0aCA8LSBsZW5ndGgoZG91Ymxlc19oaXQpCgojcHJpbnQgbGVuZ3RoIG9mIGNvbHVtbgpkb3VibGVzX2xlbmd0aApgYGAKCjIuICoqV2hhdCBwZXJjZW50YWdlIG9mIHRoZSBkYXRhIGxpZXMgd2l0aGluIG9uZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIG1lYW4/KioKYGBge3J9CmRvdWJsZXNfd2l0aGluX29uZV9zZCA8LSBzdW0gKCgoZG91Ymxlc19oaXQgLSBkb3VibGVzX21lYW4pIC8gZG91Ymxlc19zZCA8IDEpIC8gZG91Ymxlc19sZW5ndGgpCgojcHJpbnQgcmVzdWx0CmRvdWJsZXNfd2l0aGluX29uZV9zZApgYGAKYGBge3J9CiMgRGlmZmVyZW5jZSBmcm9tIGVtcGlyaWNhbApkb3VibGVzX3dpdGhpbl9vbmVfc2QgLSAwLjY4CmBgYAoKKlRoZSBwZXJjZW50YWdlIG9mIGRvdWJsZSBoaXRzIHdpdGhpbiAxIHN0YW5kYXJkIGRldmlhdGlvbiBmcm9tIHRoZSBtZWFuIGlzIDAuNzkuCgozLiAqKldoYXQgcGVyY2VudGFnZSBvZiB0aGUgZGF0YSBsaWVzIHdpdGhpbiB0d28gc3RhbmRhcmQgZGV2aWF0aW9ucyBvZiB0aGUgbWVhbj8qKgoKYGBge3J9CmRvdWJsZXNfd2l0aGluX3R3b19zZCA8LSBzdW0gKCgoZG91Ymxlc19oaXQgLSBkb3VibGVzX21lYW4pIC8gZG91Ymxlc19zZCA8IDIpIC8gZG91Ymxlc19sZW5ndGgpCgojcHJpbnQgcmVzdWx0CmRvdWJsZXNfd2l0aGluX3R3b19zZApgYGAKYGBge3J9CiMgRGlmZmVyZW5jZSBmcm9tIGVtcGlyaWNhbApkb3VibGVzX3dpdGhpbl90d29fc2QgLSAwLjk1CmBgYAoKKlRoZSBwZXJjZW50YWdlIG9mIGRvdWJsZSBoaXRzIHdpdGhpbiAyIHN0YW5kYXJkIGRldmlhdGlvbnMgZnJvbSB0aGUgbWVhbiBpcyAxLioKCjQuICoqV2hhdCBwZXJjZW50IG9mIHRoZSBkYXRhIGxpZXMgd2l0aGluIHRocmVlIHN0YW5kYXJkIGRldmlhdGlvbnMgb2YgdGhlIG1lYW4/KioKYGBge3J9CmRvdWJsZXNfd2l0aGluX3RocmVlX3NkIDwtIHN1bSAoKChkb3VibGVzX2hpdCAtIGRvdWJsZXNfbWVhbikgLyBkb3VibGVzX3NkIDwgMykgLyBkb3VibGVzX2xlbmd0aCkKCiNwcmludCByZXN1bHQKZG91Ymxlc193aXRoaW5fdGhyZWVfc2QKYGBgCipUaGUgcGVyY2VudGFnZSBvZiBkb3VibGUgaGl0cyB3aXRoaW4gMyBzdGFuZGFyZCBkZXZpYXRpb25zIGZyb20gdGhlIG1lYW4gaXMgMS4qCgpgYGB7cn0KIyBEaWZmZXJlbmNlIGZyb20gZW1waXJpY2FsCmRvdWJsZXNfd2l0aGluX3RocmVlX3NkIC0gMC45OTczCmBgYAoKNS4gKipEcmF3IGEgaGlzdG9ncmFtIHRvIGlsbHVzdHJhdGUgdGhlIGRhdGEuKioKYGBge3J9Cmhpc3QgKGRvdWJsZXNfaGl0LCB4bGFiID0gIk51bWJlciBvZiBEb3VibGUgSGl0cyIsIGNvbCA9ICJibHVlIiwgYm9yZGVyID0gInllbGxvdyIsIHhsaW0gPSBjKDAsNTApLCB5bGltID0gYygwLDMwKSwgYnJlYWtzID0gMTApCmBgYAoKYGBge3J9CmJveHBsb3QoZG91Ymxlc19oaXQsIG1haW49IkJveHBsb3Qgb2YgRG91YmxlcyBIaXQgYnkgUGxheWVyIiwgeWxhYj0gIkRvdWJsZXMiLCBjb2w9ImJsdWUiLCBib3JkZXI9ImxpZ2h0Ymx1ZSIpCmBgYApUaGUgYm94cGxvdCBwcm92aWRlcyBzZXZlcmFsIGluc2lnaHRzIGFib3V0IHRoZSBkaXN0cmlidXRpb24gb2YgZG91YmxlcyBoaXQgYnkgcGxheWVyczoKCiogTWVkaWFuICYgU3ByZWFkOiBUaGUgbWVkaWFuIChib2xkIGxpbmUgaW5zaWRlIHRoZSBib3gpIGFwcGVhcnMgdG8gYmUgYXJvdW5kIDI1LCBpbmRpY2F0aW5nIHRoYXQgaGFsZiBvZiB0aGUgcGxheWVycyBoaXQgbW9yZSB0aGFuIDI1IGRvdWJsZXMsIGFuZCBoYWxmIGhpdCBmZXdlci4KCiogSW50ZXJxdWFydGlsZSBSYW5nZSAoSVFSKTogVGhlIGJveCBzcGFucyBmcm9tIGFwcHJveGltYXRlbHkgMjAgdG8gNDAgZG91YmxlcywgbWVhbmluZyB0aGF0IHRoZSBtaWRkbGUgNTAlIG9mIHBsYXllcnMgaGl0IHdpdGhpbiB0aGlzIHJhbmdlLgoKKiBXaGlza2VyczogVGhlIHdoaXNrZXJzIGV4dGVuZCByb3VnaGx5IGZyb20gMTAgdG8gNTAsIHdoaWNoIHN1Z2dlc3RzIHRoYXQgbW9zdCBwbGF5ZXJzIGhpdCBiZXR3ZWVuIHRoZXNlIHZhbHVlcyB3aXRob3V0IGV4dHJlbWUgb3V0bGllcnMuCgoqIE5vIE91dGxpZXJzOiBUaGVyZSBhcmUgbm8gaW5kaXZpZHVhbCBwb2ludHMgb3V0c2lkZSB0aGUgd2hpc2tlcnMsIHN1Z2dlc3RpbmcgdGhhdCB0aGVyZSBhcmUgbm8gZXh0cmVtZSBjYXNlcyBvZiB1bnVzdWFsbHkgbG93IG9yIGhpZ2ggZG91YmxlIGNvdW50cy4KCk92ZXJhbGwsIHRoaXMgZGlzdHJpYnV0aW9uIGFwcGVhcnMgcmVsYXRpdmVseSBzeW1tZXRyaWNhbCwgd2l0aCBubyBzaWduaWZpY2FudCBza2V3bmVzcyBvciBleHRyZW1lIHZhcmlhdGlvbnMuIFRoZSBkYXRhIHN1Z2dlc3RzIGEgZmFpcmx5IGNvbnNpc3RlbnQgcGVyZm9ybWFuY2UgYW1vbmcgdGhlIHBsYXllcnMgaW4gdGVybXMgb2YgaGl0dGluZyBkb3VibGVzLgo=