library(tidyverse)
library(openintro)
Rolling Dice.
If you roll a pair of fair dice. What is the probability of getting a sum of:
- 1= The probability is 0. As the lowest possible sum is 2.
- 5= 4/36 as there are 4 possible combinations that will add up to 5.
- 12= 1/36 as there is only 1 possible combination that will add up to 12.
Poverty and Language
Poverty and language. (3.8, p. 93) The American Community Survey is an ongoing survey that provides data every year to give communities the current information they need to plan investments and services. The 2010 American Community Survey estimates that 14.6% of Americans live below the poverty line, 20.7% speak a language other than English (foreign language) at home, and 4.2% fall into both categories.
Are living below the poverty line and speaking a foreign language at home disjoint? No, we can see 4.2% of Americans do fall into both categories
Draw a Venn diagram summarizing the variables and their associated probabilities.
## Loading required package: grid
## Loading required package: futile.logger
# A simple two-set diagram
venn.plot <- draw.pairwise.venn(14.6, 20.7, 4.2, c("Foreign Lang", "Below Pov. Line"), scaled=FALSE)
grid.draw(venn.plot)

- What percent of Americans live below the poverty line and only speak English at home? 10.4
- What percent of Americans live below the poverty line or speak a foreign language at home?
## [1] 31.1
- What percent of Americans live above the poverty line and only speak English at home?
## [1] 68.9
- Is the event that someone lives below the poverty line independent of the event that the person speaks a foreign language at home? Probability of English Speaker to be bpl = 10.4/79.3 = 0.1311 Probability of Non-English = 4.2/20.7 = 0.2029
## [1] 0.1311475
## [1] 0.2028986
Since there is a higher probability for a foreign language speaker to be below the poverty line, we can determine that these events are not independent.
Associative Mating
Assortative mating is a nonrandom mating pattern where individuals with similar genotypes and/or phenotypes mate with one another more frequently than what would be expected under a random mating pattern. Researchers studying this topic collected data on eye colors of 204 Scandinavian men and their female partners. The table below summarizes the results. For simplicity, we only include heterosexual relationships in this exercise.
- What is the probability that a randomly chosen male respondent or his partner has blue eyes?
FemaleBlue <- 108/204
MaleBlue <- 114/204
bothBlue <- 78/204
ForMBlue <- FemaleBlue + MaleBlue - bothBlue
ForMBlue*100
## [1] 70.58824
- What is the probability that a randomly chosen male respondent with blue eyes has a partner with blue eyes?
## [1] 68.42105
- What is the probability that a randomly chosen male respondent with brown eyes has a partner with blue eyes?
MaleBrown <- 54/204
femBlueMBrown <- 19/204
(femBlueMBrown/MaleBrown) * 100
## [1] 35.18519
What about the probability of a randomly chosen male respondent with green eyes having a partner with blue eyes?
MaleGreen <- 36/204
femBlueMGreen <- 11/204
(femBlueMGreen/MaleGreen) * 100
## [1] 30.55556
- Does it appear that the eye colors of male respondents and their partners are independent? Explain your reasoning. Since there is a higher probability of matching eye colors, we can determine these events are dependent.
Books on a bookshelf.
(3.26, p. 114) The table below shows the distribution of books on a bookcase based on whether they are nonfiction or fiction and hardcover or paperback.
total <- 95
HcFiction <- 13
HcNon <- 15
PbFiction <- 59
PbNon <- 8
fiction <- 72
nonfic <- 23
HardCov <- 28
Paperb <- 67
- Find the probability of drawing a hardcover book first then a paperback fiction book second when drawing without replacement.
(HardCov/total)*(PbFiction/(total-1)) * 100
## [1] 18.49944
- Determine the probability of drawing a fiction book first and then a hardcover book second, when drawing without replacement.
(fiction/total)*(HardCov/(total-1))*100
## [1] 22.57559
- Calculate the probability of the scenario in part (b), except this time complete the calculations under the scenario where the first book is placed back on the bookcase before randomly drawing the second book.
(fiction/total)*(HardCov/total)*100
## [1] 22.33795
- The final answers to parts (b) and (c) are very similar. Explain why this is the case. The probability is not significantly changed by removing one book because the total of books 95 is too large
Baggage fees.
An airline charges the following baggage fees: $25 for the first bag and $35 for the second. Suppose 54% of passengers have no checked luggage, 34% have one piece of checked luggage and 12% have two pieces. We suppose a negligible portion of people check more than two bags.
- Build a probability model, compute the average revenue per passenger, and compute the corresponding standard deviation.
baggageFees <- c(0, 25, 60)
passengers <- c(0.54, 0.34, 0.12)
probModel <- baggageFees * passengers
result <- data.frame("Avg"=mean(probModel), "SD"=sd(probModel))
result
## Avg SD
## 1 5.233333 4.578573
- About how much revenue should the airline expect for a flight of 120 passengers? With what standard deviation? Note any assumptions you make and if you think they are justified.
data.frame( "Expected"=(120*sum(probModel)), "With_SD"=(120*result$SD))
## Expected With_SD
## 1 1884 549.4288
Income and gender.
The relative frequency table below displays the distribution of annual total personal income (in 2009 inflation-adjusted dollars) for a representative sample of 96,420,486 Americans. These data come from the American Community Survey for 2005-2009. This sample is comprised of 59% males and 41% females.
- Describe the distribution of total personal income.
income <- c("$1 to $9,999 or loss","$10,000 to $14,999","$15,000 to $24,999","$25,000 to $34,999","$35,000 to $49,999","$50,000 to $64,999","$65,000 to $74,999","$75,000 to $99,999","$100,000 or more")
total <- c(2.2,4.7,15.8,18.3,21.2,13.9,5.8,8.4,9.7)
incomeGender <- data.frame("Income"=income, "Total"=total)
incomeGender
## Income Total
## 1 $1 to $9,999 or loss 2.2
## 2 $10,000 to $14,999 4.7
## 3 $15,000 to $24,999 15.8
## 4 $25,000 to $34,999 18.3
## 5 $35,000 to $49,999 21.2
## 6 $50,000 to $64,999 13.9
## 7 $65,000 to $74,999 5.8
## 8 $75,000 to $99,999 8.4
## 9 $100,000 or more 9.7
barplot(incomeGender$Total, names.arg = incomeGender$Income, xlab = "Income", ylab = "Total", cex.names=.7)

- What is the probability that a randomly chosen US resident makes less than $50,000 per year?
below50k <- sum(2.2,4.7,15.8,18.3,21.2)
(below50k/100)*100
## [1] 62.2
- What is the probability that a randomly chosen US resident makes less than $50,000 per year and is female? Note any assumptions you make.
## [1] 25.502
Assuming that salaries are evenly distributed among the population
- The same data source indicates that 71.8% of females make less than $50,000 per year. Use this value to determine whether or not the assumption you made in part (c) is valid. My Assumption was invalid and it appears salaries are not independent of gender
LS0tDQp0aXRsZTogIkRTNjA2LUhXMyINCmF1dGhvcjogIkdlb3JnZSBDcnV6Ig0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0OiBvcGVuaW50cm86OmxhYl9yZXBvcnQNCi0tLQ0KDQpgYGB7ciBsb2FkLXBhY2thZ2VzLCBtZXNzYWdlPUZBTFNFfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KG9wZW5pbnRybykNCmBgYA0KDQojIyMgUm9sbGluZyBEaWNlLg0KKipJZiB5b3Ugcm9sbCBhIHBhaXIgb2YgZmFpciBkaWNlKiouICBXaGF0IGlzIHRoZSBwcm9iYWJpbGl0eSBvZiBnZXR0aW5nIGEgc3VtIG9mOiANCg0KYS4gMT0gVGhlIHByb2JhYmlsaXR5IGlzIDAuIEFzIHRoZSBsb3dlc3QgcG9zc2libGUgc3VtIGlzIDIuDQpiLiA1PSA0LzM2IGFzIHRoZXJlIGFyZSA0IHBvc3NpYmxlIGNvbWJpbmF0aW9ucyB0aGF0IHdpbGwgYWRkIHVwIHRvIDUuDQpjLiAxMj0gMS8zNiBhcyB0aGVyZSBpcyBvbmx5IDEgcG9zc2libGUgY29tYmluYXRpb24gdGhhdCB3aWxsIGFkZCB1cCB0byAxMi4NCg0KDQojIyMgUG92ZXJ0eSBhbmQgTGFuZ3VhZ2UNCioqUG92ZXJ0eSBhbmQgbGFuZ3VhZ2UqKi4gKDMuOCwgcC4gOTMpIFRoZSBBbWVyaWNhbiBDb21tdW5pdHkgU3VydmV5IGlzIGFuIG9uZ29pbmcgc3VydmV5IHRoYXQgcHJvdmlkZXMgZGF0YSBldmVyeSB5ZWFyIHRvIGdpdmUgY29tbXVuaXRpZXMgdGhlIGN1cnJlbnQgaW5mb3JtYXRpb24gdGhleSBuZWVkIHRvIHBsYW4gaW52ZXN0bWVudHMgYW5kIHNlcnZpY2VzLiBUaGUgMjAxMCBBbWVyaWNhbiBDb21tdW5pdHkgU3VydmV5IGVzdGltYXRlcyB0aGF0IDE0LjYlIG9mIEFtZXJpY2FucyBsaXZlIGJlbG93IHRoZSBwb3ZlcnR5IGxpbmUsIDIwLjclIHNwZWFrIGEgbGFuZ3VhZ2Ugb3RoZXIgdGhhbiBFbmdsaXNoIChmb3JlaWduIGxhbmd1YWdlKSBhdCBob21lLCBhbmQgNC4yJSBmYWxsIGludG8gYm90aCBjYXRlZ29yaWVzLg0KDQooYSkgQXJlIGxpdmluZyBiZWxvdyB0aGUgcG92ZXJ0eSBsaW5lIGFuZCBzcGVha2luZyBhIGZvcmVpZ24gbGFuZ3VhZ2UgYXQgaG9tZSBkaXNqb2ludD8NCipObywgd2UgY2FuIHNlZSA0LjIlIG9mIEFtZXJpY2FucyBkbyBmYWxsIGludG8gYm90aCBjYXRlZ29yaWVzKg0KDQooYikgRHJhdyBhIFZlbm4gZGlhZ3JhbSBzdW1tYXJpemluZyB0aGUgdmFyaWFibGVzIGFuZCB0aGVpciBhc3NvY2lhdGVkIHByb2JhYmlsaXRpZXMuDQpgYGB7cn0NCmxpYnJhcnkoVmVubkRpYWdyYW0pDQoNCiMgQSBzaW1wbGUgdHdvLXNldCBkaWFncmFtDQp2ZW5uLnBsb3QgPC0gZHJhdy5wYWlyd2lzZS52ZW5uKDE0LjYsIDIwLjcsIDQuMiwgYygiRm9yZWlnbiBMYW5nIiwgIkJlbG93IFBvdi4gTGluZSIpLCBzY2FsZWQ9RkFMU0UpDQpncmlkLmRyYXcodmVubi5wbG90KQ0KZ3JpZC5uZXdwYWdlKCkNCg0KYGBgDQoNCihjKSBXaGF0IHBlcmNlbnQgb2YgQW1lcmljYW5zIGxpdmUgYmVsb3cgdGhlIHBvdmVydHkgbGluZSBhbmQgb25seSBzcGVhayBFbmdsaXNoIGF0IGhvbWU/DQoxMC40DQooZCkgV2hhdCBwZXJjZW50IG9mIEFtZXJpY2FucyBsaXZlIGJlbG93IHRoZSBwb3ZlcnR5IGxpbmUgb3Igc3BlYWsgYSBmb3JlaWduIGxhbmd1YWdlIGF0IGhvbWU/DQpgYGB7cn0NCnJlcyA8LSAyMC43ICsgMTAuNA0KcmVzDQpgYGANCg0KKGUpIFdoYXQgcGVyY2VudCBvZiBBbWVyaWNhbnMgbGl2ZSBhYm92ZSB0aGUgcG92ZXJ0eSBsaW5lIGFuZCBvbmx5IHNwZWFrIEVuZ2xpc2ggYXQgaG9tZT8NCmBgYHtyfQ0KMTAwIC0gMzEuMQ0KYGBgDQoNCihmKSBJcyB0aGUgZXZlbnQgdGhhdCBzb21lb25lIGxpdmVzIGJlbG93IHRoZSBwb3ZlcnR5IGxpbmUgaW5kZXBlbmRlbnQgb2YgdGhlIGV2ZW50IHRoYXQgdGhlIHBlcnNvbiBzcGVha3MgYSBmb3JlaWduIGxhbmd1YWdlIGF0IGhvbWU/DQpQcm9iYWJpbGl0eSBvZiBFbmdsaXNoIFNwZWFrZXIgdG8gYmUgYnBsID0gMTAuNC83OS4zID0gMC4xMzExDQpQcm9iYWJpbGl0eSBvZiBOb24tRW5nbGlzaCA9ICA0LjIvMjAuNyA9IDAuMjAyOQ0KYGBge3J9DQoxMC40Lzc5LjMNCjQuMi8yMC43DQpgYGANClNpbmNlIHRoZXJlIGlzIGEgaGlnaGVyIHByb2JhYmlsaXR5IGZvciBhIGZvcmVpZ24gbGFuZ3VhZ2Ugc3BlYWtlciB0byBiZSBiZWxvdyB0aGUgcG92ZXJ0eSBsaW5lLCB3ZSBjYW4gZGV0ZXJtaW5lIHRoYXQgdGhlc2UgZXZlbnRzIGFyZSBub3QgaW5kZXBlbmRlbnQuDQoNCg0KIyMjIEFzc29jaWF0aXZlIE1hdGluZw0KQXNzb3J0YXRpdmUgbWF0aW5nIGlzIGEgbm9ucmFuZG9tIG1hdGluZyBwYXR0ZXJuIHdoZXJlIGluZGl2aWR1YWxzIHdpdGggc2ltaWxhciBnZW5vdHlwZXMgYW5kL29yIHBoZW5vdHlwZXMgbWF0ZSB3aXRoIG9uZSBhbm90aGVyIG1vcmUgZnJlcXVlbnRseSB0aGFuIHdoYXQgd291bGQgYmUgZXhwZWN0ZWQgdW5kZXIgYSByYW5kb20gbWF0aW5nIHBhdHRlcm4uIFJlc2VhcmNoZXJzIHN0dWR5aW5nIHRoaXMgdG9waWMgY29sbGVjdGVkIGRhdGEgb24gZXllIGNvbG9ycyBvZiAyMDQgU2NhbmRpbmF2aWFuIG1lbiBhbmQgdGhlaXIgZmVtYWxlIHBhcnRuZXJzLiBUaGUgdGFibGUgYmVsb3cgc3VtbWFyaXplcyB0aGUgcmVzdWx0cy4gRm9yIHNpbXBsaWNpdHksIHdlIG9ubHkgaW5jbHVkZSBoZXRlcm9zZXh1YWwgcmVsYXRpb25zaGlwcyBpbiB0aGlzIGV4ZXJjaXNlLg0KDQphLiBXaGF0IGlzIHRoZSBwcm9iYWJpbGl0eSB0aGF0IGEgcmFuZG9tbHkgY2hvc2VuIG1hbGUgcmVzcG9uZGVudCBvciBoaXMgcGFydG5lciBoYXMgYmx1ZSBleWVzPyANCmBgYHtyfQ0KRmVtYWxlQmx1ZSA8LSAxMDgvMjA0DQpNYWxlQmx1ZSA8LSAxMTQvMjA0DQpib3RoQmx1ZSA8LSA3OC8yMDQNCg0KRm9yTUJsdWUgPC0gRmVtYWxlQmx1ZSArIE1hbGVCbHVlIC0gYm90aEJsdWUNCkZvck1CbHVlKjEwMA0KYGBgDQpiLiBXaGF0IGlzIHRoZSBwcm9iYWJpbGl0eSB0aGF0IGEgcmFuZG9tbHkgY2hvc2VuIG1hbGUgcmVzcG9uZGVudCB3aXRoIGJsdWUgZXllcyBoYXMgYSBwYXJ0bmVyIHdpdGggYmx1ZSBleWVzPw0KYGBge3J9DQooYm90aEJsdWUvTWFsZUJsdWUgKSoxMDANCmBgYA0KYy4gV2hhdCBpcyB0aGUgcHJvYmFiaWxpdHkgdGhhdCBhIHJhbmRvbWx5IGNob3NlbiBtYWxlIHJlc3BvbmRlbnQgd2l0aCBicm93biBleWVzIGhhcyBhIHBhcnRuZXIgd2l0aCBibHVlIGV5ZXM/DQpgYGB7cn0NCk1hbGVCcm93biA8LSA1NC8yMDQNCmZlbUJsdWVNQnJvd24gPC0gMTkvMjA0DQooZmVtQmx1ZU1Ccm93bi9NYWxlQnJvd24pICogMTAwDQpgYGANCldoYXQgYWJvdXQgdGhlIHByb2JhYmlsaXR5IG9mIGEgcmFuZG9tbHkgY2hvc2VuIG1hbGUgcmVzcG9uZGVudCB3aXRoIGdyZWVuIGV5ZXMgaGF2aW5nIGEgcGFydG5lciB3aXRoIGJsdWUgZXllcz8NCmBgYHtyfQ0KTWFsZUdyZWVuIDwtIDM2LzIwNA0KZmVtQmx1ZU1HcmVlbiA8LSAxMS8yMDQNCihmZW1CbHVlTUdyZWVuL01hbGVHcmVlbikgKiAxMDAgDQpgYGANCmQuIERvZXMgaXQgYXBwZWFyIHRoYXQgdGhlIGV5ZSBjb2xvcnMgb2YgbWFsZSByZXNwb25kZW50cyBhbmQgdGhlaXIgcGFydG5lcnMgYXJlIGluZGVwZW5kZW50PyBFeHBsYWluIHlvdXIgcmVhc29uaW5nLg0KKlNpbmNlIHRoZXJlIGlzIGEgaGlnaGVyIHByb2JhYmlsaXR5IG9mIG1hdGNoaW5nIGV5ZSBjb2xvcnMsIHdlIGNhbiBkZXRlcm1pbmUgdGhlc2UgZXZlbnRzIGFyZSBkZXBlbmRlbnQuKg0KDQojIyMgQm9va3Mgb24gYSBib29rc2hlbGYuIA0KKDMuMjYsIHAuIDExNCkgVGhlIHRhYmxlIGJlbG93IHNob3dzIHRoZSBkaXN0cmlidXRpb24gb2YgYm9va3Mgb24gYSBib29rY2FzZSBiYXNlZCBvbiB3aGV0aGVyIHRoZXkgYXJlIG5vbmZpY3Rpb24gb3IgZmljdGlvbiBhbmQgaGFyZGNvdmVyIG9yIHBhcGVyYmFjay4NCmBgYHtyfQ0KdG90YWwgPC0gOTUNCkhjRmljdGlvbiA8LSAxMw0KSGNOb24gPC0gMTUNClBiRmljdGlvbiA8LSA1OQ0KUGJOb24gPC0gOA0KZmljdGlvbiA8LSA3Mg0Kbm9uZmljIDwtIDIzDQpIYXJkQ292IDwtIDI4DQpQYXBlcmIgPC0gNjcNCmBgYA0KDQooYSkgRmluZCB0aGUgcHJvYmFiaWxpdHkgb2YgZHJhd2luZyBhIGhhcmRjb3ZlciBib29rIGZpcnN0IHRoZW4gYSBwYXBlcmJhY2sgZmljdGlvbiBib29rIHNlY29uZCB3aGVuIGRyYXdpbmcgd2l0aG91dCByZXBsYWNlbWVudC4NCmBgYHtyfQ0KKEhhcmRDb3YvdG90YWwpKihQYkZpY3Rpb24vKHRvdGFsLTEpKSAqIDEwMCANCmBgYA0KKGIpIERldGVybWluZSB0aGUgcHJvYmFiaWxpdHkgb2YgZHJhd2luZyBhIGZpY3Rpb24gYm9vayBmaXJzdCBhbmQgdGhlbiBhIGhhcmRjb3ZlciBib29rIHNlY29uZCwgd2hlbiBkcmF3aW5nIHdpdGhvdXQgcmVwbGFjZW1lbnQuDQpgYGB7cn0NCihmaWN0aW9uL3RvdGFsKSooSGFyZENvdi8odG90YWwtMSkpKjEwMA0KYGBgDQoNCihjKSBDYWxjdWxhdGUgdGhlIHByb2JhYmlsaXR5IG9mIHRoZSBzY2VuYXJpbyBpbiBwYXJ0IChiKSwgZXhjZXB0IHRoaXMgdGltZSBjb21wbGV0ZSB0aGUgY2FsY3VsYXRpb25zIHVuZGVyIHRoZSBzY2VuYXJpbyB3aGVyZSB0aGUgZmlyc3QgYm9vayBpcyBwbGFjZWQgYmFjayBvbiB0aGUgYm9va2Nhc2UgYmVmb3JlIHJhbmRvbWx5IGRyYXdpbmcgdGhlIHNlY29uZCBib29rLg0KYGBge3J9DQooZmljdGlvbi90b3RhbCkqKEhhcmRDb3YvdG90YWwpKjEwMA0KYGBgDQooZCkgVGhlIGZpbmFsIGFuc3dlcnMgdG8gcGFydHMgKGIpIGFuZCAoYykgYXJlIHZlcnkgc2ltaWxhci4gRXhwbGFpbiB3aHkgdGhpcyBpcyB0aGUgY2FzZS4NCipUaGUgcHJvYmFiaWxpdHkgaXMgbm90IHNpZ25pZmljYW50bHkgY2hhbmdlZCBieSByZW1vdmluZyBvbmUgYm9vayBiZWNhdXNlIHRoZSB0b3RhbCBvZiBib29rcyA5NSBpcyB0b28gbGFyZ2UqDQoNCiMjIyBCYWdnYWdlIGZlZXMuDQpBbiBhaXJsaW5lIGNoYXJnZXMgdGhlIGZvbGxvd2luZyBiYWdnYWdlIGZlZXM6ICQyNSBmb3IgdGhlIGZpcnN0IGJhZyBhbmQgJDM1IGZvciB0aGUgc2Vjb25kLiBTdXBwb3NlIDU0JSBvZiBwYXNzZW5nZXJzIGhhdmUgbm8gY2hlY2tlZCBsdWdnYWdlLCAzNCUgaGF2ZSBvbmUgcGllY2Ugb2YgY2hlY2tlZCBsdWdnYWdlIGFuZCAxMiUgaGF2ZSB0d28gcGllY2VzLiBXZSBzdXBwb3NlIGEgbmVnbGlnaWJsZSBwb3J0aW9uIG9mIHBlb3BsZSBjaGVjayBtb3JlIHRoYW4gdHdvIGJhZ3MuDQoNCihhKSBCdWlsZCBhIHByb2JhYmlsaXR5IG1vZGVsLCBjb21wdXRlIHRoZSBhdmVyYWdlIHJldmVudWUgcGVyIHBhc3NlbmdlciwgYW5kIGNvbXB1dGUgdGhlIGNvcnJlc3BvbmRpbmcgc3RhbmRhcmQgZGV2aWF0aW9uLg0KYGBge3J9DQpiYWdnYWdlRmVlcyA8LSBjKDAsIDI1LCA2MCkNCnBhc3NlbmdlcnMgPC0gYygwLjU0LCAwLjM0LCAwLjEyKQ0KcHJvYk1vZGVsIDwtIGJhZ2dhZ2VGZWVzICogcGFzc2VuZ2Vycw0KDQpyZXN1bHQgPC0gZGF0YS5mcmFtZSgiQXZnIj1tZWFuKHByb2JNb2RlbCksICJTRCI9c2QocHJvYk1vZGVsKSkNCnJlc3VsdA0KYGBgDQooYikgQWJvdXQgaG93IG11Y2ggcmV2ZW51ZSBzaG91bGQgdGhlIGFpcmxpbmUgZXhwZWN0IGZvciBhIGZsaWdodCBvZiAxMjAgcGFzc2VuZ2Vycz8gV2l0aCB3aGF0IHN0YW5kYXJkIGRldmlhdGlvbj8gTm90ZSBhbnkgYXNzdW1wdGlvbnMgeW91IG1ha2UgYW5kIGlmIHlvdSB0aGluayB0aGV5IGFyZSBqdXN0aWZpZWQuDQpgYGB7cn0NCmRhdGEuZnJhbWUoICJFeHBlY3RlZCI9KDEyMCpzdW0ocHJvYk1vZGVsKSksICJXaXRoX1NEIj0oMTIwKnJlc3VsdCRTRCkpDQpgYGANCg0KIyMjIEluY29tZSBhbmQgZ2VuZGVyLiANClRoZSByZWxhdGl2ZSBmcmVxdWVuY3kgdGFibGUgYmVsb3cgZGlzcGxheXMgdGhlIGRpc3RyaWJ1dGlvbiBvZiBhbm51YWwgdG90YWwgcGVyc29uYWwgaW5jb21lIChpbiAyMDA5IGluZmxhdGlvbi1hZGp1c3RlZCBkb2xsYXJzKSBmb3IgYSByZXByZXNlbnRhdGl2ZSBzYW1wbGUgb2YgOTYsNDIwLDQ4NiBBbWVyaWNhbnMuIFRoZXNlIGRhdGEgY29tZSBmcm9tIHRoZSBBbWVyaWNhbiBDb21tdW5pdHkgU3VydmV5IGZvciAyMDA1LTIwMDkuIFRoaXMgc2FtcGxlIGlzIGNvbXByaXNlZCBvZiA1OSUgbWFsZXMgYW5kIDQxJSBmZW1hbGVzLg0KDQooYSkgRGVzY3JpYmUgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0b3RhbCBwZXJzb25hbCBpbmNvbWUuDQoNCmBgYHtyfQ0KaW5jb21lIDwtIGMoIiQxIHRvICQ5LDk5OSBvciBsb3NzIiwiJDEwLDAwMCB0byAkMTQsOTk5IiwiJDE1LDAwMCB0byAkMjQsOTk5IiwiJDI1LDAwMCB0byAkMzQsOTk5IiwiJDM1LDAwMCB0byAkNDksOTk5IiwiJDUwLDAwMCB0byAkNjQsOTk5IiwiJDY1LDAwMCB0byAkNzQsOTk5IiwiJDc1LDAwMCB0byAkOTksOTk5IiwiJDEwMCwwMDAgb3IgbW9yZSIpDQp0b3RhbCA8LSBjKDIuMiw0LjcsMTUuOCwxOC4zLDIxLjIsMTMuOSw1LjgsOC40LDkuNykNCmluY29tZUdlbmRlciA8LSBkYXRhLmZyYW1lKCJJbmNvbWUiPWluY29tZSwgIlRvdGFsIj10b3RhbCkNCmluY29tZUdlbmRlcg0KYGBgDQpgYGB7cn0NCmJhcnBsb3QoaW5jb21lR2VuZGVyJFRvdGFsLCBuYW1lcy5hcmcgPSBpbmNvbWVHZW5kZXIkSW5jb21lLCB4bGFiID0gIkluY29tZSIsIHlsYWIgPSAiVG90YWwiLCBjZXgubmFtZXM9LjcpDQpgYGANCg0KKGIpIFdoYXQgaXMgdGhlIHByb2JhYmlsaXR5IHRoYXQgYSByYW5kb21seSBjaG9zZW4gVVMgcmVzaWRlbnQgbWFrZXMgbGVzcyB0aGFuICQ1MCwwMDAgcGVyIHllYXI/DQpgYGB7cn0NCmJlbG93NTBrIDwtIHN1bSgyLjIsNC43LDE1LjgsMTguMywyMS4yKQ0KKGJlbG93NTBrLzEwMCkqMTAwDQpgYGANCihjKSBXaGF0IGlzIHRoZSBwcm9iYWJpbGl0eSB0aGF0IGEgcmFuZG9tbHkgY2hvc2VuIFVTIHJlc2lkZW50IG1ha2VzIGxlc3MgdGhhbiAkNTAsMDAwIHBlciB5ZWFyIGFuZCBpcyBmZW1hbGU/IE5vdGUgYW55IGFzc3VtcHRpb25zIHlvdSBtYWtlLg0KYGBge3J9DQooYmVsb3c1MGsvMTAwKSoxMDAqMC40MQ0KYGBgDQoqQXNzdW1pbmcgdGhhdCBzYWxhcmllcyBhcmUgZXZlbmx5IGRpc3RyaWJ1dGVkIGFtb25nIHRoZSBwb3B1bGF0aW9uKg0KDQooZCkgVGhlIHNhbWUgZGF0YSBzb3VyY2UgaW5kaWNhdGVzIHRoYXQgNzEuOCUgb2YgZmVtYWxlcyBtYWtlIGxlc3MgdGhhbiAkNTAsMDAwIHBlciB5ZWFyLiBVc2UgdGhpcyB2YWx1ZSB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlIGFzc3VtcHRpb24geW91IG1hZGUgaW4gcGFydCAoYykgaXMgdmFsaWQuDQoqTXkgQXNzdW1wdGlvbiB3YXMgaW52YWxpZCBhbmQgaXQgYXBwZWFycyBzYWxhcmllcyBhcmUgbm90IGluZGVwZW5kZW50IG9mIGdlbmRlcioNCg0K