This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.

Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter.

Name: Oscar Alexnader Tobar

Course: CAP-4936-2253-4282

```r
plot(cars)

<!-- rnb-source-end -->

<!-- rnb-chunk-end -->


<!-- rnb-text-begin -->


Add a new chunk by clicking the *Insert Chunk* button on the toolbar or by pressing *Ctrl+Alt+I*.

When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the *Preview* button or press *Ctrl+Shift+K* to preview the HTML file).

The preview shows you a rendered HTML copy of the contents of the editor. Consequently, unlike *Knit*, *Preview* does not run any R code chunks. Instead, the output of the chunk when it was last run in the editor is displayed.

#
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?



<!-- rnb-text-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuIyBIb21lLXJ1bnMgc28gZmFyXG5IUl9iZWZvcmUgPC0gYygxMSwgMTMsIDEyKVxuIyBBdmVyYWdlIE51bWJlciBvZiBIb21lLXJ1bnMgcGVyIHNlYXNvbiB3YW50ZWRcbndhbnRlZF9IUiA8LSAyMFxuIyBOdW1iZXIgb2Ygc2Vhc29uc1xubl9zZWFzb25zIDwtIDRcbiMgTmVlZGVkIEhvbWUtcnVucyBvbiBzZWFzb24gNFxueF80IDwtIG5fc2Vhc29ucyp3YW50ZWRfSFIgLSBzdW0oSFJfYmVmb3JlKVxuIyBNaW5pbXVtIG51bWJlciBvZiBIb21lLXJ1bnMgbmVlZGVkIGJ5IFJvYmVydFxueF80XG5gYGAifQ== -->

```r
# Home-runs so far
HR_before <- c(11, 13, 12)
# Average Number of Home-runs per season wanted
wanted_HR <- 20
# Number of seasons
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
#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.
Robert_HRs<-c(11,13,12,44)
mean(Robert_HRs)
[1] 20
sd(Robert_HRs)
[1] 16.02082

Continuing with the assignment on March 8th 2025 at 9:10 am

# 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
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?

soto_walks <-c(79, 108, 41, 145, 135)
wanted_walks <-100
number_seasons <-6
#Needed Walks on season 6
walks_6 <- number_seasons*wanted_walks-sum(soto_walks)
walks_6
[1] 92

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

We can easily find the joined mean by adding both mean and dividing by the total number of people.

Let n1=10 denote the number of baseball players, and y1=72000 their mean salary. Let n2=4 the number of soccer players and y2=84000 their mean salary. Then the mean salary of all 16 individuals is: n1x1+n2x2/n1+n2

We can compute this in R as follows:

n_1 <- 10
n_2 <- 4
y_1 <- 72000
y_2 <- 84000
# Mean salary overall
salary_ave <-  (n_1*y_1 + n_2*y_2)/(n_1+n_2)
salary_ave
[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.

bp_1<-7
fp_1<-9
w_1<-102000
w_2<-91000
#Mean salary overall
salary_average<-(bp_1*w_1+fp_1*w_2)/(bp_1+fp_1) #Note this for the exam
salary_average
[1] 95812.5

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. Years Number of players 6 28 5 72 4 201 3 109 2 56 1 34

Find the mean,the median and the standard deviation.

What percentage of the data lies within one standard deviation of the mean?

What percentage of the data lies within two standard deviations of the mean?

What percent of the data lies within three standard deviations of the mean?

Draw a histogram to illustrate the data.

Solution

The allcontracts.csv file contains all the players’ contracts length. We can read this file in R using the read.csv() function.

#get the CSV file
getwd()
[1] "C:/Users/OAT meal/Documents/In class Activity 5 for Sports analytics"
contract_length<-read.csv("allcontracts.csv",header = TRUE, sep = ",")

contract_years<-contract_length$years
contract_mean<-mean(contract_years)
contract_mean<-round(contract_mean,digits=2)
contract_mean
[1] 3.46
# Median
contracts_median <- median(contract_years)
contracts_median
[1] 3
# Find number of observations
contracts_n <- length(contract_years)
# Find standard deviation
contracts_sd <- sd(contract_years)

What percentage of the data lies within one standard deviation of the mean?

contracts_w1sd <- sum((contract_years - contract_mean)/contracts_sd < 1)/ contracts_n
# Percentage of observation within one standard deviation of the mean
contracts_w1sd
[1] 0.8416834
## Difference from empirical 
contracts_w1sd - 0.68
[1] 0.1616834

What percentage of the data lies within two standard deviations of the mean?

## Within 2 sd
contracts_w2sd <- sum((contract_years - contract_mean)/ contracts_sd < 2)/contracts_n
contracts_w2sd
[1] 1
## Difference from empirical 
contracts_w2sd - 0.95
[1] 0.05

What percent of the data lies within three standard deviations of the mean?

## Within 3 sd 
contracts_w3sd <- sum((contract_years - contract_mean)/ contracts_sd < 3)/contracts_n
contracts_w3sd
[1] 1
## Difference from empirical 
contracts_w3sd - 0.9973
[1] 0.0027

create a histogram

# Create histogram
hist(contract_years,xlab = "Years Left in Contract",col = "green",border = "red", xlim = c(0,8), ylim = c(0,225),
   breaks = 5)

hist(contract_years,xlab = "Years Left in Contract",col = "green",border = "red", xlim = c(0,8), ylim = c(0,250),
   breaks = 3)

boxplot(contract_years,main="Years Left in Control", ylab="Years", col = "lightblue", border="blue", horizontal = FALSE)

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. (double-hit.csv) and (triples_hit.csv)

doubles<-read.table("doubles_hit.csv",header = TRUE,sep = ",")
doubles_hit <- doubles$doubles_hit
doubles_hit_mean<-mean(doubles_hit)
doubles_hit_mean
[1] 23.55
doubles_hit_median<-median(doubles_hit)
doubles_hit_median
[1] 23.5
# Find number of observations
doubles_hit_n <- length(doubles_hit)
# Find standard deviation
doubles_hit_sd <- sd(doubles_hit)
doubles_hit_w1sd <- sum((doubles_hit - doubles_hit_mean)/doubles_hit_sd < 1)/ doubles_hit_n
# Percentage of observation within one standard deviation of the mean
doubles_hit_w1sd
[1] 0.79
doubles_hit_w1sd-0.68
[1] 0.11
## Within 2 sd
doubles_hit_w2sd <- sum((doubles_hit - doubles_hit_mean)/ doubles_hit_sd < 2)/doubles_hit_n
doubles_hit_w2sd
[1] 1

doubles_hit_w2sd - 0.95
[1] 0.05
## Within 3 sd 
doubles_hit_w3sd <- sum((doubles_hit - doubles_hit_mean)/ doubles_hit_sd < 3)/doubles_hit_n
doubles_hit_w3sd
[1] 1
doubles_hit_w3sd - 0.9973
[1] 0.0027

Create a Box-plot

boxplot(doubles_hit, main="Years Left in Control", ylab="Years", col = "lightblue", border="blue", horizontal = FALSE)

It was better to use a box plot then a histogram I hope you understand

hist(doubles_hit,xlab = "Years Left in Contract",col = "green",border = "red", xlim = c(0,8), ylim = c(0,250),
   breaks = 3)

^This is why^

LS0tDQp0aXRsZTogIkdldHRpbmcgU3RhcnRlZCB3aXRoIFIsUGFydCAyIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQpOYW1lOiBPc2NhciBBbGV4bmFkZXIgVG9iYXINCkNvdXJzZTogQ0FQLTQ5MzYtMjI1My00MjgyDQotLS0NCg0KVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gDQoNClRyeSBleGVjdXRpbmcgdGhpcyBjaHVuayBieSBjbGlja2luZyB0aGUgKlJ1biogYnV0dG9uIHdpdGhpbiB0aGUgY2h1bmsgb3IgYnkgcGxhY2luZyB5b3VyIGN1cnNvciBpbnNpZGUgaXQgYW5kIHByZXNzaW5nICpDdHJsK1NoaWZ0K0VudGVyKi4gDQoNCioqTmFtZTogT3NjYXIgQWxleG5hZGVyIFRvYmFyKioNCg0KKipDb3Vyc2U6IENBUC00OTM2LTIyNTMtNDI4MioqDQpgYGB7cn0NCnBsb3QoY2FycykNCmBgYA0KDQpBZGQgYSBuZXcgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpJbnNlcnQgQ2h1bmsqIGJ1dHRvbiBvbiB0aGUgdG9vbGJhciBvciBieSBwcmVzc2luZyAqQ3RybCtBbHQrSSouDQoNCldoZW4geW91IHNhdmUgdGhlIG5vdGVib29rLCBhbiBIVE1MIGZpbGUgY29udGFpbmluZyB0aGUgY29kZSBhbmQgb3V0cHV0IHdpbGwgYmUgc2F2ZWQgYWxvbmdzaWRlIGl0IChjbGljayB0aGUgKlByZXZpZXcqIGJ1dHRvbiBvciBwcmVzcyAqQ3RybCtTaGlmdCtLKiB0byBwcmV2aWV3IHRoZSBIVE1MIGZpbGUpLg0KDQpUaGUgcHJldmlldyBzaG93cyB5b3UgYSByZW5kZXJlZCBIVE1MIGNvcHkgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBlZGl0b3IuIENvbnNlcXVlbnRseSwgdW5saWtlICpLbml0KiwgKlByZXZpZXcqIGRvZXMgbm90IHJ1biBhbnkgUiBjb2RlIGNodW5rcy4gSW5zdGVhZCwgdGhlIG91dHB1dCBvZiB0aGUgY2h1bmsgd2hlbiBpdCB3YXMgbGFzdCBydW4gaW4gdGhlIGVkaXRvciBpcyBkaXNwbGF5ZWQuDQoNCiMNCkNhc2Utc2NlbmFyaW8gMQ0KDQpUaGlzIGlzIHRoZSBmb3VydGggc2Vhc29uIG9mIG91dGZpZWxkZXIgTHVpcyBSb2JlcnQgd2l0aCB0aGUgQ2hpY2FnbyBXaGl0ZSBTb2Nrcy4gSWYgZHVyaW5nIHRoZSBmaXJzdCB0aHJlZSBzZWFzb25zIGhlIGhpdCAxMSwgMTMsIGFuZCAxMiBob21lIHJ1bnMsIGhvdyBtYW55IGRvZXMgaGUgbmVlZCBvbiB0aGlzIHNlYXNvbiBmb3IgaGlzIG92ZXJhbGwgYXZlcmFnZSB0byBiZSBhdCBsZWFzdCAyMD8NCg0KDQpgYGB7cn0NCiMgSG9tZS1ydW5zIHNvIGZhcg0KSFJfYmVmb3JlIDwtIGMoMTEsIDEzLCAxMikNCiMgQXZlcmFnZSBOdW1iZXIgb2YgSG9tZS1ydW5zIHBlciBzZWFzb24gd2FudGVkDQp3YW50ZWRfSFIgPC0gMjANCiMgTnVtYmVyIG9mIHNlYXNvbnMNCm5fc2Vhc29ucyA8LSA0DQojIE5lZWRlZCBIb21lLXJ1bnMgb24gc2Vhc29uIDQNCnhfNCA8LSBuX3NlYXNvbnMqd2FudGVkX0hSIC0gc3VtKEhSX2JlZm9yZSkNCiMgTWluaW11bSBudW1iZXIgb2YgSG9tZS1ydW5zIG5lZWRlZCBieSBSb2JlcnQNCnhfNA0KDQojU29sdXRpb24NCg0KI0dpdmVuIHRoYXQgeDE9MTEseDI9MTMseDM9MTINCg0KI3dlIHdhbnQgdG8gZmluZCB4NA0KI3N1Y2ggdGhhdCB0aGUgbWVhbiAoYXZlcmFnZSkgbnVtYmVyIG9mIGhvbWUtcnVucyBpcyB4wq8+PTIwDQoNCiNOb3RpY2UgdGhhdCBpbiB0aGlzIGNhc2Ugbj00DQoNCiNBY2NvcmRpbmcgdG8gdGhlIGluZm9ybWF0aW9uIGFib3ZlOiAyMMOXND0xMSsxMysxMit4NA0KDQojc28gd2hlbiB4ND02MQ0KIywgdGhlIGhvbWUtcnVucyBhdmVyYWdlIHdpbGwgYmUgMjAuDQpgYGANCmBgYHtyfQ0KUm9iZXJ0X0hSczwtYygxMSwxMywxMiw0NCkNCm1lYW4oUm9iZXJ0X0hScykNCmBgYA0KYGBge3J9DQpzZChSb2JlcnRfSFJzKQ0KYGBgDQpDb250aW51aW5nIHdpdGggdGhlIGFzc2lnbm1lbnQgb24gTWFyY2ggOHRoIDIwMjUgYXQgOToxMCBhbSANCmBgYHtyfQ0KIyBGaW5kIHRoZSBtYXhpbXVtIG51bWJlciBvZiBob21lLXJ1bnMgZHVyaW5nIHRoZSBmb3VyIHNlYXNvbnMgcGVyaW9kDQptYXgoUm9iZXJ0X0hScykNCmBgYA0KYGBge3J9DQojIEZpbmQgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGhvbWUtcnVucyBkdXJpbmcgdGhlIGZvdXIgc2Vhc29ucyBwZXJpb2QNCm1pbihSb2JlcnRfSFJzKQ0KYGBgDQpgYGB7cn0NCnN1bW1hcnkoUm9iZXJ0X0hScykNCmBgYA0KDQoNCiNRdWVzdGlvbiAxDQoNCk5vdywgeW91IG11c3QgY29tcGxldGUgdGhlIHByb2JsZW0gYmVsb3cgd2hpY2ggcmVwcmVzZW50cyBhIHNpbWlsYXIgY2FzZSBzY2VuYXJpby4gWW91IG1heSB1c2UgdGhlIHN0ZXBzIHRoYXQgd2UgZXhlY3V0ZWQgaW4gQ2FzZS1zY2VuYXJpbyAxIGFzIGEgdGVtcGxhdGUgZm9yIHlvdXIgc29sdXRpb24uDQoNClRoaXMgaXMgdGhlIHNpeHRoIHNlYXNvbiBvZiBvdXRmaWVsZGVyIEp1YW4gU290byBpbiB0aGUgbWFqb3JzLiBJZiBkdXJpbmcgdGhlIGZpcnN0IGZpdmUgc2Vhc29ucyBoZSByZWNlaXZlZCA3OSwgMTA4LDQxLDE0NSwgYW5kIDEzNSB3YWxrcywgaG93IG1hbnkgZG9lcyBoZSBuZWVkIG9uIHRoaXMgc2Vhc29uIGZvciBoaXMgb3ZlcmFsbCBudW1iZXIgb2Ygd2Fsa3MgcGVyIHNlYXNvbiB0byBiZSBhdCBsZWFzdCAxMDA/DQoNCmBgYHtyfQ0Kc290b193YWxrcyA8LWMoNzksIDEwOCwgNDEsIDE0NSwgMTM1KQ0Kd2FudGVkX3dhbGtzIDwtMTAwDQpudW1iZXJfc2Vhc29ucyA8LTYNCiNOZWVkZWQgV2Fsa3Mgb24gc2Vhc29uIDYNCndhbGtzXzYgPC0gbnVtYmVyX3NlYXNvbnMqd2FudGVkX3dhbGtzLXN1bShzb3RvX3dhbGtzKQ0Kd2Fsa3NfNg0KYGBgDQoqKkNhc2Utc2NlbmFyaW8gMioqDQoNClRoZSBhdmVyYWdlIHNhbGFyeSBvZiAxMCBiYXNlYmFsbCBwbGF5ZXJzIGlzIDcyLDAwMCBkb2xsYXJzIGEgd2VlayBhbmQgdGhlIGF2ZXJhZ2Ugc2FsYXJ5IG9mIDQgc29jY2VyIHBsYXllcnMgaXMgODQsMDAwLiBGaW5kIHRoZSBtZWFuIHNhbGFyeSBvZiBhbGwgMTQgcHJvZmVzc2lvbmFsIHBsYXllcnMuDQpTb2x1dGlvbg0KDQpXZSBjYW4gZWFzaWx5IGZpbmQgdGhlIGpvaW5lZCBtZWFuIGJ5IGFkZGluZyBib3RoIG1lYW4gYW5kIGRpdmlkaW5nIGJ5IHRoZSB0b3RhbCBudW1iZXIgb2YgcGVvcGxlLg0KDQpMZXQgbjE9MTANCmRlbm90ZSB0aGUgbnVtYmVyIG9mIGJhc2ViYWxsIHBsYXllcnMsIGFuZCB5MT03MjAwMCB0aGVpciBtZWFuIHNhbGFyeS4gTGV0IG4yPTQgdGhlIG51bWJlciBvZiBzb2NjZXIgcGxheWVycyBhbmQgeTI9ODQwMDAgdGhlaXIgbWVhbiBzYWxhcnkuIFRoZW4gdGhlIG1lYW4gc2FsYXJ5IG9mIGFsbCAxNiBpbmRpdmlkdWFscyBpczogbjF4MStuMngyL24xK24yDQoNCldlIGNhbiBjb21wdXRlIHRoaXMgaW4gUiBhcyBmb2xsb3dzOg0KYGBge3J9DQpuXzEgPC0gMTANCm5fMiA8LSA0DQp5XzEgPC0gNzIwMDANCnlfMiA8LSA4NDAwMA0KIyBNZWFuIHNhbGFyeSBvdmVyYWxsDQpzYWxhcnlfYXZlIDwtICAobl8xKnlfMSArIG5fMip5XzIpLyhuXzErbl8yKQ0Kc2FsYXJ5X2F2ZQ0KYGBgDQoqKlF1ZXN0aW9uIDI6KioNClRoZSBhdmVyYWdlIHNhbGFyeSBvZiA3IGJhc2tldGJhbGwgcGxheWVycyBpcyAxMDIsMDAwIGRvbGxhcnMgYSB3ZWVrIGFuZCB0aGUgYXZlcmFnZSBzYWxhcnkgb2YgOSBORkwgcGxheWVycyBpcyA5MSwwMDAuIEZpbmQgdGhlIG1lYW4gc2FsYXJ5IG9mIGFsbCAxNiBwcm9mZXNzaW9uYWwgcGxheWVycy4NCg0KYGBge3J9DQpicF8xPC03DQpmcF8xPC05DQp3XzE8LTEwMjAwMA0Kd18yPC05MTAwMA0KI01lYW4gc2FsYXJ5IG92ZXJhbGwNCnNhbGFyeV9hdmVyYWdlPC0oYnBfMSp3XzErZnBfMSp3XzIpLyhicF8xK2ZwXzEpICNOb3RlIHRoaXMgZm9yIHRoZSBleGFtDQpzYWxhcnlfYXZlcmFnZQ0KYGBgDQpDYXNlLXNjZW5hcmlvIDMNCg0KVGhlIGZyZXF1ZW5jeSBkaXN0cmlidXRpb24gYmVsb3cgbGlzdHMgdGhlIG51bWJlciBvZiBhY3RpdmUgcGxheWVycyBpbiB0aGUgQmFyY2xheXMgUHJlbWllciBMZWFndWUgYW5kIHRoZSB0aW1lIGxlZnQgaW4gdGhlaXIgY29udHJhY3QuDQpZZWFycyAJTnVtYmVyIG9mIHBsYXllcnMNCjYgCTI4DQo1IAk3Mg0KNCAJMjAxDQozIAkxMDkNCjIgCTU2DQoxIAkzNA0KDQogICAgRmluZCB0aGUgbWVhbix0aGUgbWVkaWFuIGFuZCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uLg0KDQogICAgV2hhdCBwZXJjZW50YWdlIG9mIHRoZSBkYXRhIGxpZXMgd2l0aGluIG9uZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIG1lYW4/DQoNCiAgICBXaGF0IHBlcmNlbnRhZ2Ugb2YgdGhlIGRhdGEgbGllcyB3aXRoaW4gdHdvIHN0YW5kYXJkIGRldmlhdGlvbnMgb2YgdGhlIG1lYW4/DQoNCiAgICBXaGF0IHBlcmNlbnQgb2YgdGhlIGRhdGEgbGllcyB3aXRoaW4gdGhyZWUgc3RhbmRhcmQgZGV2aWF0aW9ucyBvZiB0aGUgbWVhbj8NCg0KICAgIERyYXcgYSBoaXN0b2dyYW0gdG8gaWxsdXN0cmF0ZSB0aGUgZGF0YS4NCg0KU29sdXRpb24NCg0KVGhlIGFsbGNvbnRyYWN0cy5jc3YgZmlsZSBjb250YWlucyBhbGwgdGhlIHBsYXllcnPigJkgY29udHJhY3RzIGxlbmd0aC4gV2UgY2FuIHJlYWQgdGhpcyBmaWxlIGluIFIgdXNpbmcgdGhlIHJlYWQuY3N2KCkgZnVuY3Rpb24uDQpgYGB7cn0NCiNnZXQgdGhlIGZpbGUgZGlyZWN0b3J5DQpnZXR3ZCgpDQoNCmBgYA0KYGBge3J9DQpjb250cmFjdF9sZW5ndGg8LXJlYWQuY3N2KCJhbGxjb250cmFjdHMuY3N2IixoZWFkZXIgPSBUUlVFLCBzZXAgPSAiLCIpDQoNCmNvbnRyYWN0X3llYXJzPC1jb250cmFjdF9sZW5ndGgkeWVhcnMNCmBgYA0KDQpgYGB7cn0NCmNvbnRyYWN0X21lYW48LW1lYW4oY29udHJhY3RfeWVhcnMpDQpjb250cmFjdF9tZWFuPC1yb3VuZChjb250cmFjdF9tZWFuLGRpZ2l0cz0yKQ0KY29udHJhY3RfbWVhbg0KYGBgDQpgYGB7cn0NCiMgTWVkaWFuDQpjb250cmFjdHNfbWVkaWFuIDwtIG1lZGlhbihjb250cmFjdF95ZWFycykNCmNvbnRyYWN0c19tZWRpYW4NCmBgYA0KYGBge3J9DQojIEZpbmQgbnVtYmVyIG9mIG9ic2VydmF0aW9ucw0KY29udHJhY3RzX24gPC0gbGVuZ3RoKGNvbnRyYWN0X3llYXJzKQ0KIyBGaW5kIHN0YW5kYXJkIGRldmlhdGlvbg0KY29udHJhY3RzX3NkIDwtIHNkKGNvbnRyYWN0X3llYXJzKQ0KYGBgDQoNCldoYXQgcGVyY2VudGFnZSBvZiB0aGUgZGF0YSBsaWVzIHdpdGhpbiBvbmUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBtZWFuPw0KYGBge3J9DQpjb250cmFjdHNfdzFzZCA8LSBzdW0oKGNvbnRyYWN0X3llYXJzIC0gY29udHJhY3RfbWVhbikvY29udHJhY3RzX3NkIDwgMSkvIGNvbnRyYWN0c19uDQojIFBlcmNlbnRhZ2Ugb2Ygb2JzZXJ2YXRpb24gd2l0aGluIG9uZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIG1lYW4NCmNvbnRyYWN0c193MXNkDQpgYGANCg0KYGBge3J9DQojIyBEaWZmZXJlbmNlIGZyb20gZW1waXJpY2FsIA0KY29udHJhY3RzX3cxc2QgLSAwLjY4DQpgYGANCioqV2hhdCBwZXJjZW50YWdlIG9mIHRoZSBkYXRhIGxpZXMgd2l0aGluIHR3byBzdGFuZGFyZCBkZXZpYXRpb25zIG9mIHRoZSBtZWFuPyoqDQpgYGB7cn0NCiMjIFdpdGhpbiAyIHNkDQpjb250cmFjdHNfdzJzZCA8LSBzdW0oKGNvbnRyYWN0X3llYXJzIC0gY29udHJhY3RfbWVhbikvIGNvbnRyYWN0c19zZCA8IDIpL2NvbnRyYWN0c19uDQpjb250cmFjdHNfdzJzZA0KYGBgDQpgYGB7cn0NCiMjIERpZmZlcmVuY2UgZnJvbSBlbXBpcmljYWwgDQpjb250cmFjdHNfdzJzZCAtIDAuOTUNCmBgYA0KKipXaGF0IHBlcmNlbnQgb2YgdGhlIGRhdGEgbGllcyB3aXRoaW4gdGhyZWUgc3RhbmRhcmQgZGV2aWF0aW9ucyBvZiB0aGUgbWVhbj8qKg0KYGBge3J9DQojIyBXaXRoaW4gMyBzZCANCmNvbnRyYWN0c193M3NkIDwtIHN1bSgoY29udHJhY3RfeWVhcnMgLSBjb250cmFjdF9tZWFuKS8gY29udHJhY3RzX3NkIDwgMykvY29udHJhY3RzX24NCmNvbnRyYWN0c193M3NkDQpgYGANCmBgYHtyfQ0KIyMgRGlmZmVyZW5jZSBmcm9tIGVtcGlyaWNhbCANCmNvbnRyYWN0c193M3NkIC0gMC45OTczDQpgYGANCg0KKipjcmVhdGUgYSBoaXN0b2dyYW0qKg0KDQpgYGB7cn0NCiMgQ3JlYXRlIGhpc3RvZ3JhbQ0KaGlzdChjb250cmFjdF95ZWFycyx4bGFiID0gIlllYXJzIExlZnQgaW4gQ29udHJhY3QiLGNvbCA9ICJncmVlbiIsYm9yZGVyID0gInJlZCIsIHhsaW0gPSBjKDAsOCksIHlsaW0gPSBjKDAsMjI1KSwNCiAgIGJyZWFrcyA9IDUpDQpgYGANCmBgYHtyfQ0KaGlzdChjb250cmFjdF95ZWFycyx4bGFiID0gIlllYXJzIExlZnQgaW4gQ29udHJhY3QiLGNvbCA9ICJncmVlbiIsYm9yZGVyID0gInJlZCIsIHhsaW0gPSBjKDAsOCksIHlsaW0gPSBjKDAsMjUwKSwNCiAgIGJyZWFrcyA9IDMpDQpgYGANCg0KDQoNCmBgYHtyfQ0KYm94cGxvdChjb250cmFjdF95ZWFycyxtYWluPSJZZWFycyBMZWZ0IGluIENvbnRyb2wiLCB5bGFiPSJZZWFycyIsIGNvbCA9ICJsaWdodGJsdWUiLCBib3JkZXI9ImJsdWUiLCBob3Jpem9udGFsID0gRkFMU0UpDQpgYGANCg0KUXVlc3Rpb24gMzoNCg0KVXNlIHRoZSBza2lsbHMgbGVhcm5lZCBpbiBjYXNlIHNjZW5hcmlvIG51bWJlciAzIG9uIG9uZSB0aGUgZm9sbG93aW5nIGRhdGEgc2V0cy4gWW91IG1heSBjaG9vc2Ugb25seSBvbmUgZGF0YXNldC4gVGhleSBhcmUgYm90aCBhdmFpbGFibGUgaW4gQ2FudmFzLiAoZG91YmxlLWhpdC5jc3YpIGFuZCAodHJpcGxlc19oaXQuY3N2KQ0KDQpgYGB7cn0NCmRvdWJsZXM8LXJlYWQudGFibGUoImRvdWJsZXNfaGl0LmNzdiIsaGVhZGVyID0gVFJVRSxzZXAgPSAiLCIpDQpkb3VibGVzX2hpdCA8LSBkb3VibGVzJGRvdWJsZXNfaGl0DQpgYGANCg0KYGBge3J9DQpkb3VibGVzX2hpdF9tZWFuPC1tZWFuKGRvdWJsZXNfaGl0KQ0KZG91Ymxlc19oaXRfbWVhbg0KZG91Ymxlc19oaXRfbWVkaWFuPC1tZWRpYW4oZG91Ymxlc19oaXQpDQpkb3VibGVzX2hpdF9tZWRpYW4NCmBgYA0KYGBge3J9DQojIEZpbmQgbnVtYmVyIG9mIG9ic2VydmF0aW9ucw0KZG91Ymxlc19oaXRfbiA8LSBsZW5ndGgoZG91Ymxlc19oaXQpDQojIEZpbmQgc3RhbmRhcmQgZGV2aWF0aW9uDQpkb3VibGVzX2hpdF9zZCA8LSBzZChkb3VibGVzX2hpdCkNCmBgYA0KDQoNCmBgYHtyfQ0KZG91Ymxlc19oaXRfdzFzZCA8LSBzdW0oKGRvdWJsZXNfaGl0IC0gZG91Ymxlc19oaXRfbWVhbikvZG91Ymxlc19oaXRfc2QgPCAxKS8gZG91Ymxlc19oaXRfbg0KIyBQZXJjZW50YWdlIG9mIG9ic2VydmF0aW9uIHdpdGhpbiBvbmUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBtZWFuDQpkb3VibGVzX2hpdF93MXNkDQpgYGANCmBgYHtyfQ0KZG91Ymxlc19oaXRfdzFzZC0wLjY4DQpgYGANCg0KYGBge3J9DQojIyBXaXRoaW4gMiBzZA0KZG91Ymxlc19oaXRfdzJzZCA8LSBzdW0oKGRvdWJsZXNfaGl0IC0gZG91Ymxlc19oaXRfbWVhbikvIGRvdWJsZXNfaGl0X3NkIDwgMikvZG91Ymxlc19oaXRfbg0KZG91Ymxlc19oaXRfdzJzZA0KYGBgDQpgYGB7cn0NCg0KZG91Ymxlc19oaXRfdzJzZCAtIDAuOTUNCmBgYA0KYGBge3J9DQojIyBXaXRoaW4gMyBzZCANCmRvdWJsZXNfaGl0X3czc2QgPC0gc3VtKChkb3VibGVzX2hpdCAtIGRvdWJsZXNfaGl0X21lYW4pLyBkb3VibGVzX2hpdF9zZCA8IDMpL2RvdWJsZXNfaGl0X24NCmRvdWJsZXNfaGl0X3czc2QNCmBgYA0KYGBge3J9DQpkb3VibGVzX2hpdF93M3NkIC0gMC45OTczDQpgYGANCioqQ3JlYXRlIGEgQm94LXBsb3QqKg0KDQpgYGB7cn0NCmJveHBsb3QoZG91Ymxlc19oaXQsIG1haW49IlllYXJzIExlZnQgaW4gQ29udHJvbCIsIHlsYWI9IlllYXJzIiwgY29sID0gImxpZ2h0Ymx1ZSIsIGJvcmRlcj0iYmx1ZSIsIGhvcml6b250YWwgPSBGQUxTRSkNCmBgYA0KKipJdCB3YXMgYmV0dGVyIHRvIHVzZSBhIGJveCBwbG90IHRoZW4gYSBoaXN0b2dyYW0gSSBob3BlIHlvdSB1bmRlcnN0YW5kKioNCmBgYHtyfQ0KaGlzdChkb3VibGVzX2hpdCx4bGFiID0gIlllYXJzIExlZnQgaW4gQ29udHJhY3QiLGNvbCA9ICJncmVlbiIsYm9yZGVyID0gInJlZCIsIHhsaW0gPSBjKDAsOCksIHlsaW0gPSBjKDAsMjUwKSwNCiAgIGJyZWFrcyA9IDMpDQpgYGANCioqXlRoaXMgaXMgd2h5XioqDQo=