library(tidyverse)
library(openintro)

Exercise 1

A bag contains 5 green and 7 red jellybeans. How many ways can 5 jellybeans be withdrawn from the bag so that the number of green ones withdrawn will be less than 2?

# Number of green jellybeans
num_green <- 5

# Number of red jellybeans
num_red <- 7

# Total number of jellybeans to be withdrawn
total_jellybeans <- 5

# Calculating combinations for case 1 (drawing all red jellybeans)
case1_combinations <- choose(num_red, total_jellybeans)

# Calculating combinations for case 2 (drawing 1 green jellybean and the rest red)
case2_combinations <- choose(num_green, 1) * choose(num_red, total_jellybeans - 1)

# Total combinations
total_combinations1 <- case1_combinations + case2_combinations
total_combinations1
## [1] 196

Exercise 2

A certain congressional committee consists of 14 senators and 13 representatives. How many ways can a subcommittee of 5 be formed if at least 4 of the members must be representatives?

choose(14,1) * choose(13,4) + choose(14,0) * choose(13,5)
## [1] 11297

Exercise 3

If a coin is tossed 5 times, and then a standard six-sided die is rolled 2 times, and finally a group of three cards are drawn from a standard deck of 52 cards without replacement, how many different outcomes are possible?

Coins <- 2^5
Deck <- 6^2
Cards <- 52 * 51 * 50
Coins * Deck * Cards
## [1] 152755200

Exercise 4

3 cards are drawn from a standard deck without replacement. What is the probability that at least one of the cards drawn is a 3? Express your answer as a fraction or a decimal number rounded to four decimal places.

Take_3 <- (48/52) * (47/51) * (46/50)
1-Take_3
## [1] 0.2173756
round(1-Take_3, digits = 4)
## [1] 0.2174

Exercise 5

Lorenzo is picking out some movies to rent, and he is primarily interested in documentaries and mysteries. He has narrowed down his selections to 17 documentaries and 14 mysteries.

Step 1. How many different combinations of 5 movies can he rent?

# Number of documentaries
num_documentaries <- 17

# Number of mysteries
num_mysteries <- 14

# Total number of movies
total_movies <- num_documentaries + num_mysteries

# Number of movies to be selected
movies_to_select <- 5

# Calculating combinations
total_combinations <- choose(total_movies, movies_to_select)
total_combinations
## [1] 169911

Step 2. How many different combinations of 5 movies can he rent if he wants at least one mystery?

# Number of documentaries
num_documentaries <- 17

# Number of mysteries
num_mysteries <- 14

# Number of movies to be selected
movies_to_select <- 5

# Calculate combinations for case 1 (all documentaries)
case1_combinations <- choose(num_documentaries, movies_to_select)

# Calculate combinations for case 2 (4 documentaries and 1 mystery)
case2_combinations <- choose(num_documentaries, movies_to_select - 1) * choose(num_mysteries, 1)

# Total combinations
total_combinations <- case1_combinations + case2_combinations
total_combinations
## [1] 39508

Exercise 6

In choosing what music to play at a charity fund raising event, Cory needs to have an equal number of symphonies from Brahms, Haydn, and Mendelssohn. If he is setting up a schedule of the 9 symphonies to be played, and he has 4 Brahms, 104 Haydn, and 17 Mendelssohn symphonies from which to choose, how many different schedules are possible? Express your answer in scientific notation rounding to the hundredths place.

Schedule <- choose(4,3) * choose(104,3) * choose(17,3) * factorial(9)
signif(Schedule, digits = 4)
## [1] 1.797e+14

Exercise 7

An English teacher needs to pick 13 books to put on his reading list for the next school year, and he needs to plan the order in which they should be read. He has narrowed down his choices to 6 novels, 6 plays, 7 poetry books, and 5 nonfiction books.

Step 1. If he wants to include no more than 4 nonfiction books, how many different reading schedules are possible? Express your answer in scientific notation rounding to the hundredths place.

# Function to calculate combinations
nCk <- function(n, k) {
  factorial(n) / (factorial(k) * factorial(n - k))
}

# Total ways to pick 13 books
total_ways <- nCk(6, 0) * nCk(6, 0) * nCk(7, 0) * (nCk(5, 0) + nCk(5, 1) + nCk(5, 2) + nCk(5, 3) + nCk(5, 4))

# Convert to scientific notation
total_ways_sci <- format(total_ways, scientific = TRUE, digits = 2)
total_ways_sci
## [1] "3.1e+01"

Step 2. If he wants to include all 6 plays, how many different reading schedules are possible? Express your answer in scientific notation rounding to the hundredths place.

# Total ways to pick the remaining 7 books
remaining_ways <- nCk(6, 0) * nCk(6, 6) * nCk(7, 0) * (nCk(5, 0) + nCk(5, 1) + nCk(5, 2) + nCk(5, 3) + nCk(5, 4) + nCk(5, 5))

# Convert to scientific notation
remaining_ways_sci <- format(remaining_ways, scientific = TRUE, digits = 2)
remaining_ways_sci
## [1] "3.2e+01"

Exercise 8

Zane is planting trees along his driveway, and he has 5 sycamores and 5 cypress trees to plant in one row. What is the probability that he randomly plants the trees so that all 5 sycamores are next to each other and all 5 cypress trees are next to each other? Express your answer as a fraction or a decimal number rounded to four decimal places.

a <- 2/(factorial(10)/(factorial(5)*factorial(5)))
round(a, digits = 4)
## [1] 0.0079

Exercise 9

If you draw a queen or lower from a standard deck of cards, I will pay you $4. If not, you pay me $16. (Aces are considered the highest card in the deck.)

Step 1. Find the expected value of the proposition. Round your answer to two decimal places. Losses must be expressed as negative values.

Exp_value <- ((20/52) * 4) + ((32/52) * -16)
round(Exp_value, digits = 2)
## [1] -8.31

Step 2. If you played this game 833 times how much would you expect to win or lose? Round your answer to two decimal places. Losses must be expressed as negative values.

total_expected_value <- Exp_value * 833
round(total_expected_value, digits = 2)
## [1] -6920.31

LS0tDQp0aXRsZTogIkRhdGEgNjA1IHdlZWsgNiINCmF1dGhvcjogIkxhdXJhIFB1ZWJsYSINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDogb3BlbmludHJvOjpsYWJfcmVwb3J0DQotLS0NCg0KYGBge3IgbG9hZC1wYWNrYWdlcywgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShvcGVuaW50cm8pDQpgYGANCg0KIyMjIEV4ZXJjaXNlIDENCg0KQSBiYWcgY29udGFpbnMgNSBncmVlbiBhbmQgNyByZWQgamVsbHliZWFucy4gSG93IG1hbnkgd2F5cyBjYW4gNSBqZWxseWJlYW5zIGJlIHdpdGhkcmF3biBmcm9tIHRoZSBiYWcgc28gdGhhdCB0aGUgbnVtYmVyIG9mIGdyZWVuIG9uZXMgd2l0aGRyYXduIHdpbGwgYmUgbGVzcyB0aGFuIDI/DQoNCg0KYGBge3J9DQojIE51bWJlciBvZiBncmVlbiBqZWxseWJlYW5zDQpudW1fZ3JlZW4gPC0gNQ0KDQojIE51bWJlciBvZiByZWQgamVsbHliZWFucw0KbnVtX3JlZCA8LSA3DQoNCiMgVG90YWwgbnVtYmVyIG9mIGplbGx5YmVhbnMgdG8gYmUgd2l0aGRyYXduDQp0b3RhbF9qZWxseWJlYW5zIDwtIDUNCg0KIyBDYWxjdWxhdGluZyBjb21iaW5hdGlvbnMgZm9yIGNhc2UgMSAoZHJhd2luZyBhbGwgcmVkIGplbGx5YmVhbnMpDQpjYXNlMV9jb21iaW5hdGlvbnMgPC0gY2hvb3NlKG51bV9yZWQsIHRvdGFsX2plbGx5YmVhbnMpDQoNCiMgQ2FsY3VsYXRpbmcgY29tYmluYXRpb25zIGZvciBjYXNlIDIgKGRyYXdpbmcgMSBncmVlbiBqZWxseWJlYW4gYW5kIHRoZSByZXN0IHJlZCkNCmNhc2UyX2NvbWJpbmF0aW9ucyA8LSBjaG9vc2UobnVtX2dyZWVuLCAxKSAqIGNob29zZShudW1fcmVkLCB0b3RhbF9qZWxseWJlYW5zIC0gMSkNCg0KIyBUb3RhbCBjb21iaW5hdGlvbnMNCnRvdGFsX2NvbWJpbmF0aW9uczEgPC0gY2FzZTFfY29tYmluYXRpb25zICsgY2FzZTJfY29tYmluYXRpb25zDQp0b3RhbF9jb21iaW5hdGlvbnMxDQoNCmBgYA0KDQojIyMgRXhlcmNpc2UgMg0KDQpBIGNlcnRhaW4gY29uZ3Jlc3Npb25hbCBjb21taXR0ZWUgY29uc2lzdHMgb2YgMTQgc2VuYXRvcnMgYW5kIDEzIHJlcHJlc2VudGF0aXZlcy4gSG93IG1hbnkgd2F5cyBjYW4gYSBzdWJjb21taXR0ZWUgb2YgNSBiZSBmb3JtZWQgaWYgYXQgbGVhc3QgNCBvZiB0aGUgbWVtYmVycyBtdXN0IGJlIHJlcHJlc2VudGF0aXZlcz8NCg0KYGBge3J9DQpjaG9vc2UoMTQsMSkgKiBjaG9vc2UoMTMsNCkgKyBjaG9vc2UoMTQsMCkgKiBjaG9vc2UoMTMsNSkNCmBgYA0KDQoNCiMjIyBFeGVyY2lzZSAzDQoNCklmIGEgY29pbiBpcyB0b3NzZWQgNSB0aW1lcywgYW5kIHRoZW4gYSBzdGFuZGFyZCBzaXgtc2lkZWQgZGllIGlzIHJvbGxlZCAyIHRpbWVzLCBhbmQgZmluYWxseSBhIGdyb3VwIG9mIHRocmVlIGNhcmRzIGFyZSBkcmF3biBmcm9tIGEgc3RhbmRhcmQgZGVjayBvZiA1MiBjYXJkcyB3aXRob3V0IHJlcGxhY2VtZW50LCBob3cgbWFueSBkaWZmZXJlbnQgb3V0Y29tZXMgYXJlIHBvc3NpYmxlPw0KDQpgYGB7cn0NCkNvaW5zIDwtIDJeNQ0KRGVjayA8LSA2XjINCkNhcmRzIDwtIDUyICogNTEgKiA1MA0KQ29pbnMgKiBEZWNrICogQ2FyZHMNCmBgYA0KDQojIyMgRXhlcmNpc2UgNA0KDQozIGNhcmRzIGFyZSBkcmF3biBmcm9tIGEgc3RhbmRhcmQgZGVjayB3aXRob3V0IHJlcGxhY2VtZW50LiBXaGF0IGlzIHRoZSBwcm9iYWJpbGl0eSB0aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGUgY2FyZHMgZHJhd24gaXMgYSAzPyBFeHByZXNzIHlvdXIgYW5zd2VyIGFzIGEgZnJhY3Rpb24gb3IgYSBkZWNpbWFsIG51bWJlciByb3VuZGVkIHRvIGZvdXIgZGVjaW1hbCBwbGFjZXMuDQoNCmBgYHtyfQ0KVGFrZV8zIDwtICg0OC81MikgKiAoNDcvNTEpICogKDQ2LzUwKQ0KMS1UYWtlXzMNCmBgYA0KYGBge3J9DQpyb3VuZCgxLVRha2VfMywgZGlnaXRzID0gNCkNCmBgYA0KDQoNCiMjIyBFeGVyY2lzZSA1DQoNCkxvcmVuem8gaXMgcGlja2luZyBvdXQgc29tZSBtb3ZpZXMgdG8gcmVudCwgYW5kIGhlIGlzIHByaW1hcmlseSBpbnRlcmVzdGVkIGluIGRvY3VtZW50YXJpZXMgYW5kIG15c3Rlcmllcy4gSGUgaGFzIG5hcnJvd2VkIGRvd24gaGlzIHNlbGVjdGlvbnMgdG8gMTcgZG9jdW1lbnRhcmllcyBhbmQgMTQgbXlzdGVyaWVzLg0KDQpTdGVwIDEuIEhvdyBtYW55IGRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2YgNSBtb3ZpZXMgY2FuIGhlIHJlbnQ/DQoNCg0KYGBge3J9DQojIE51bWJlciBvZiBkb2N1bWVudGFyaWVzDQpudW1fZG9jdW1lbnRhcmllcyA8LSAxNw0KDQojIE51bWJlciBvZiBteXN0ZXJpZXMNCm51bV9teXN0ZXJpZXMgPC0gMTQNCg0KIyBUb3RhbCBudW1iZXIgb2YgbW92aWVzDQp0b3RhbF9tb3ZpZXMgPC0gbnVtX2RvY3VtZW50YXJpZXMgKyBudW1fbXlzdGVyaWVzDQoNCiMgTnVtYmVyIG9mIG1vdmllcyB0byBiZSBzZWxlY3RlZA0KbW92aWVzX3RvX3NlbGVjdCA8LSA1DQoNCiMgQ2FsY3VsYXRpbmcgY29tYmluYXRpb25zDQp0b3RhbF9jb21iaW5hdGlvbnMgPC0gY2hvb3NlKHRvdGFsX21vdmllcywgbW92aWVzX3RvX3NlbGVjdCkNCnRvdGFsX2NvbWJpbmF0aW9ucw0KDQpgYGANCg0KDQpTdGVwIDIuIEhvdyBtYW55IGRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2YgNSBtb3ZpZXMgY2FuIGhlIHJlbnQgaWYgaGUgd2FudHMgYXQgbGVhc3Qgb25lIG15c3Rlcnk/DQoNCmBgYHtyfQ0KIyBOdW1iZXIgb2YgZG9jdW1lbnRhcmllcw0KbnVtX2RvY3VtZW50YXJpZXMgPC0gMTcNCg0KIyBOdW1iZXIgb2YgbXlzdGVyaWVzDQpudW1fbXlzdGVyaWVzIDwtIDE0DQoNCiMgTnVtYmVyIG9mIG1vdmllcyB0byBiZSBzZWxlY3RlZA0KbW92aWVzX3RvX3NlbGVjdCA8LSA1DQoNCiMgQ2FsY3VsYXRlIGNvbWJpbmF0aW9ucyBmb3IgY2FzZSAxIChhbGwgZG9jdW1lbnRhcmllcykNCmNhc2UxX2NvbWJpbmF0aW9ucyA8LSBjaG9vc2UobnVtX2RvY3VtZW50YXJpZXMsIG1vdmllc190b19zZWxlY3QpDQoNCiMgQ2FsY3VsYXRlIGNvbWJpbmF0aW9ucyBmb3IgY2FzZSAyICg0IGRvY3VtZW50YXJpZXMgYW5kIDEgbXlzdGVyeSkNCmNhc2UyX2NvbWJpbmF0aW9ucyA8LSBjaG9vc2UobnVtX2RvY3VtZW50YXJpZXMsIG1vdmllc190b19zZWxlY3QgLSAxKSAqIGNob29zZShudW1fbXlzdGVyaWVzLCAxKQ0KDQojIFRvdGFsIGNvbWJpbmF0aW9ucw0KdG90YWxfY29tYmluYXRpb25zIDwtIGNhc2UxX2NvbWJpbmF0aW9ucyArIGNhc2UyX2NvbWJpbmF0aW9ucw0KdG90YWxfY29tYmluYXRpb25zDQoNCmBgYA0KDQojIyMgRXhlcmNpc2UgNg0KDQpJbiBjaG9vc2luZyB3aGF0IG11c2ljIHRvIHBsYXkgYXQgYSBjaGFyaXR5IGZ1bmQgcmFpc2luZyBldmVudCwgQ29yeSBuZWVkcyB0byBoYXZlIGFuIGVxdWFsIG51bWJlciBvZiBzeW1waG9uaWVzIGZyb20gQnJhaG1zLCBIYXlkbiwgYW5kIE1lbmRlbHNzb2huLiBJZiBoZSBpcyBzZXR0aW5nIHVwIGEgc2NoZWR1bGUgb2YgdGhlIDkgc3ltcGhvbmllcyB0byBiZSBwbGF5ZWQsIGFuZCBoZSBoYXMgNCBCcmFobXMsIDEwNCBIYXlkbiwgYW5kIDE3IE1lbmRlbHNzb2huIHN5bXBob25pZXMgZnJvbSB3aGljaCB0byBjaG9vc2UsIGhvdyBtYW55IGRpZmZlcmVudCBzY2hlZHVsZXMgYXJlIHBvc3NpYmxlPyBFeHByZXNzIHlvdXIgYW5zd2VyIGluIHNjaWVudGlmaWMgbm90YXRpb24gcm91bmRpbmcgdG8gdGhlIGh1bmRyZWR0aHMgcGxhY2UuDQoNCmBgYHtyfQ0KU2NoZWR1bGUgPC0gY2hvb3NlKDQsMykgKiBjaG9vc2UoMTA0LDMpICogY2hvb3NlKDE3LDMpICogZmFjdG9yaWFsKDkpDQpzaWduaWYoU2NoZWR1bGUsIGRpZ2l0cyA9IDQpDQpgYGANCg0KDQojIyMgRXhlcmNpc2UgNw0KDQpBbiBFbmdsaXNoIHRlYWNoZXIgbmVlZHMgdG8gcGljayAxMyBib29rcyB0byBwdXQgb24gaGlzIHJlYWRpbmcgbGlzdCBmb3IgdGhlIG5leHQgc2Nob29sIHllYXIsIGFuZCBoZSBuZWVkcyB0byBwbGFuIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IHNob3VsZCBiZSByZWFkLiBIZSBoYXMgbmFycm93ZWQgZG93biBoaXMgY2hvaWNlcyB0byA2IG5vdmVscywgNiBwbGF5cywgNyBwb2V0cnkgYm9va3MsIGFuZCA1IG5vbmZpY3Rpb24gYm9va3MuDQoNClN0ZXAgMS4gSWYgaGUgd2FudHMgdG8gaW5jbHVkZSBubyBtb3JlIHRoYW4gNCBub25maWN0aW9uIGJvb2tzLCBob3cgbWFueSBkaWZmZXJlbnQgcmVhZGluZyBzY2hlZHVsZXMgYXJlIHBvc3NpYmxlPyBFeHByZXNzIHlvdXIgYW5zd2VyIGluIHNjaWVudGlmaWMgbm90YXRpb24gcm91bmRpbmcgdG8gdGhlIGh1bmRyZWR0aHMgcGxhY2UuDQoNCg0KYGBge3J9DQojIEZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBjb21iaW5hdGlvbnMNCm5DayA8LSBmdW5jdGlvbihuLCBrKSB7DQogIGZhY3RvcmlhbChuKSAvIChmYWN0b3JpYWwoaykgKiBmYWN0b3JpYWwobiAtIGspKQ0KfQ0KDQojIFRvdGFsIHdheXMgdG8gcGljayAxMyBib29rcw0KdG90YWxfd2F5cyA8LSBuQ2soNiwgMCkgKiBuQ2soNiwgMCkgKiBuQ2soNywgMCkgKiAobkNrKDUsIDApICsgbkNrKDUsIDEpICsgbkNrKDUsIDIpICsgbkNrKDUsIDMpICsgbkNrKDUsIDQpKQ0KDQojIENvbnZlcnQgdG8gc2NpZW50aWZpYyBub3RhdGlvbg0KdG90YWxfd2F5c19zY2kgPC0gZm9ybWF0KHRvdGFsX3dheXMsIHNjaWVudGlmaWMgPSBUUlVFLCBkaWdpdHMgPSAyKQ0KdG90YWxfd2F5c19zY2kNCg0KYGBgDQoNCg0KU3RlcCAyLiBJZiBoZSB3YW50cyB0byBpbmNsdWRlIGFsbCA2IHBsYXlzLCBob3cgbWFueSBkaWZmZXJlbnQgcmVhZGluZyBzY2hlZHVsZXMgYXJlIHBvc3NpYmxlPyBFeHByZXNzIHlvdXIgYW5zd2VyIGluIHNjaWVudGlmaWMgbm90YXRpb24gcm91bmRpbmcgdG8gdGhlIGh1bmRyZWR0aHMgcGxhY2UuDQoNCg0KYGBge3J9DQojIFRvdGFsIHdheXMgdG8gcGljayB0aGUgcmVtYWluaW5nIDcgYm9va3MNCnJlbWFpbmluZ193YXlzIDwtIG5Dayg2LCAwKSAqIG5Dayg2LCA2KSAqIG5Dayg3LCAwKSAqIChuQ2soNSwgMCkgKyBuQ2soNSwgMSkgKyBuQ2soNSwgMikgKyBuQ2soNSwgMykgKyBuQ2soNSwgNCkgKyBuQ2soNSwgNSkpDQoNCiMgQ29udmVydCB0byBzY2llbnRpZmljIG5vdGF0aW9uDQpyZW1haW5pbmdfd2F5c19zY2kgPC0gZm9ybWF0KHJlbWFpbmluZ193YXlzLCBzY2llbnRpZmljID0gVFJVRSwgZGlnaXRzID0gMikNCnJlbWFpbmluZ193YXlzX3NjaQ0KDQpgYGANCg0KDQojIyMgRXhlcmNpc2UgOA0KDQpaYW5lIGlzIHBsYW50aW5nIHRyZWVzIGFsb25nIGhpcyBkcml2ZXdheSwgYW5kIGhlIGhhcyA1IHN5Y2Ftb3JlcyBhbmQgNSBjeXByZXNzIHRyZWVzIHRvIHBsYW50IGluIG9uZSByb3cuIFdoYXQgaXMgdGhlIHByb2JhYmlsaXR5IHRoYXQgaGUgcmFuZG9tbHkgcGxhbnRzIHRoZSB0cmVlcyBzbyB0aGF0IGFsbCA1IHN5Y2Ftb3JlcyBhcmUgbmV4dCB0byBlYWNoIG90aGVyIGFuZCBhbGwgNSBjeXByZXNzIHRyZWVzIGFyZSBuZXh0IHRvIGVhY2ggb3RoZXI/IEV4cHJlc3MgeW91ciBhbnN3ZXIgYXMgYSBmcmFjdGlvbiBvciBhIGRlY2ltYWwgbnVtYmVyIHJvdW5kZWQgdG8gZm91ciBkZWNpbWFsIHBsYWNlcy4NCg0KYGBge3J9DQphIDwtIDIvKGZhY3RvcmlhbCgxMCkvKGZhY3RvcmlhbCg1KSpmYWN0b3JpYWwoNSkpKQ0Kcm91bmQoYSwgZGlnaXRzID0gNCkNCmBgYA0KDQoNCiMjIyBFeGVyY2lzZSA5DQoNCklmIHlvdSBkcmF3IGEgcXVlZW4gb3IgbG93ZXIgZnJvbSBhIHN0YW5kYXJkIGRlY2sgb2YgY2FyZHMsIEkgd2lsbCBwYXkgeW91ICQ0LiBJZiBub3QsIHlvdSBwYXkgbWUgJDE2LiAoQWNlcyBhcmUgY29uc2lkZXJlZCB0aGUgaGlnaGVzdCBjYXJkIGluIHRoZSBkZWNrLikNCg0KU3RlcCAxLiBGaW5kIHRoZSBleHBlY3RlZCB2YWx1ZSBvZiB0aGUgcHJvcG9zaXRpb24uIFJvdW5kIHlvdXIgYW5zd2VyIHRvIHR3byBkZWNpbWFsIHBsYWNlcy4gTG9zc2VzIG11c3QgYmUgZXhwcmVzc2VkIGFzIG5lZ2F0aXZlIHZhbHVlcy4NCg0KYGBge3J9DQpFeHBfdmFsdWUgPC0gKCgyMC81MikgKiA0KSArICgoMzIvNTIpICogLTE2KQ0Kcm91bmQoRXhwX3ZhbHVlLCBkaWdpdHMgPSAyKQ0KDQpgYGANCg0KU3RlcCAyLiBJZiB5b3UgcGxheWVkIHRoaXMgZ2FtZSA4MzMgdGltZXMgaG93IG11Y2ggd291bGQgeW91IGV4cGVjdCB0byB3aW4gb3IgbG9zZT8gUm91bmQgeW91ciBhbnN3ZXIgdG8gdHdvIGRlY2ltYWwgcGxhY2VzLiBMb3NzZXMgbXVzdCBiZSBleHByZXNzZWQgYXMgbmVnYXRpdmUgdmFsdWVzLg0KDQpgYGB7cn0NCnRvdGFsX2V4cGVjdGVkX3ZhbHVlIDwtIEV4cF92YWx1ZSAqIDgzMw0Kcm91bmQodG90YWxfZXhwZWN0ZWRfdmFsdWUsIGRpZ2l0cyA9IDIpDQoNCmBgYA0KDQoNCg0KLi4uDQoNCg==