1. Breath alcohol tests in Ames, Iowa, USA

Ames, Iowa, USA is the home of Iowa State University, a land grant university with over 36,000 students. By comparison, the city of Ames, Iowa, itself only has about 65,000 residents. As with any other college town, Ames has had its fair share of alcohol-related incidents. (For example, Google ‘VEISHEA riots 2014’.) We will take a look at some breath alcohol test data from Ames that is published by the State of Iowa.

# Load the packages 
library(dplyr)

Attaching package: 㤼㸱dplyr㤼㸲

The following objects are masked from 㤼㸱package:stats㤼㸲:

    filter, lag

The following objects are masked from 㤼㸱package:base㤼㸲:

    intersect, setdiff, setequal, union
library(readr)
library(ggplot2)

# Read the data into your workspace
ba_data <- read_csv("breath_alcohol_ames.csv")
Parsed with column specification:
cols(
  year = col_double(),
  month = col_double(),
  day = col_double(),
  hour = col_double(),
  location = col_character(),
  gender = col_character(),
  Res1 = col_double(),
  Res2 = col_double()
)
# Quickly inspect the data
head(ba_data)

# Obtain counts for each year 
# .... YOUR CODE FOR TASK 1 ....
ba_year <- ba_data %>%
  count(year)
ba_year

2. What is the busiest police department in Ames?

There are two police departments in the data set: the Iowa State University Police Department and the Ames Police Department. Which one administers more breathalyzer tests?

# Count the totals for each department
pds <- ba_data %>%
  count(location)
pds

3. Nothing Good Happens after 2am

We all know that “nothing good happens after 2am.” Thus, there are inevitably some times of the day when breath alcohol tests, especially in a college town like Ames, are most and least common. Which hours of the day have the most and least breathalyzer tests?

# Count by hour and arrange by descending frequency
hourly <- ba_data %>%
  count(hour, sort = TRUE)
# Use a geom_ to create the appropriate bar chart
ggplot(hourly, aes(x = hour, weight = n)) + geom_bar()

4. Breathalyzer tests by month

Now that we have discovered which time of day is most common for breath alcohol tests, we will determine which time of the year has the most breathalyzer tests. Which month will have the most recorded tests?

# Count by month and arrange by descending frequency
monthly <- ba_data %>%
  count(month, sort = TRUE)

# Make month a factor
monthly$month <- as.factor(monthly$month)

# Use a geom_ to create the appropriate bar chart
ggplot(monthly, aes(x = month, weight = n)) + geom_bar()

5. COLLEGE

When we think of (binge) drinking in college towns in America, we usually think of something like this image at the left. And so, one might suspect that breath alcohol tests are given to men more often than women and that men drink more than women.

# Count by gender 
ba_data %>% count(gender)

# Create a dataset with no NAs in gender 
clean_gender <- ba_data %>%
  filter(!is.na(gender))

# Create a mean test result variable and save as mean_bas
mean_bas <- clean_gender %>%
  mutate(meanRes = (Res1 + Res2)/2)

# Create side-by-side boxplots to compare the mean blood alcohol levels of men and women
ggplot(mean_bas, aes(x = gender, y = meanRes)) + geom_boxplot()

7. Breathalyzer tests: is there a pattern over time?

We previously saw that 2 a.m. is the most common time of day for breathalyzer tests to be administered, and August is the most common month of the year for breathalyzer tests. Now, we look at the weeks in the year over time. We briefly use the lubridate package for a bit of date-time manipulation.

library(lubridate) 

# Create date variable using paste() and ymd()
ba_data <- ba_data %>% mutate(date = ymd(paste(year, month, day, sep = "-")))

# Create a week variable using week()
ba_data <- ba_data %>% mutate(week = week(date))
head(ba_data)

8. Looking at timelines

How do the weeks differ over time? One of the most common data visualizations is the time series, a line tracking the changes in a variable over time. We will use the new week variable to look at test frequency over time. We end with a time series plot showing frequency of breathalyzer tests by week in year, with one line for each year.

# Create the weekly data set 
weekly <- ba_data %>%
  count(week, year)
# Make year a factor
weekly <- weekly %>% mutate(year = as.factor(year))

# Create the time series plot with one line for each year
ggplot(weekly, aes(x = week, y = n)) + 
  geom_line(aes(color = year)) + 
  geom_point(aes(color = year)) +  
  scale_x_continuous(breaks = seq(0,52,2))

9. The end of VEISHEA

From Wikipedia: “VEISHEA was an annual week-long celebration held each spring on the campus of Iowa State University in Ames, Iowa. The celebration featured an annual parade and many open-house demonstrations of the university facilities and departments. Campus organizations exhibited products, technologies, and held fundraisers for various charity groups. In addition, VEISHEA brought speakers, lecturers, and entertainers to Iowa State. […] VEISHEA was the largest student-run festival in the nation, bringing in tens of thousands of visitors to the campus each year.”

This over 90-year tradition in Ames was terminated permanently after riots in 2014, where drunk celebrators flipped over multiple vehicles and tore light poles down. This was not the first incidence of violence and severe property damage in VEISHEA’s history. Did former President Leath make the right decision?

# Run this code to create the plot 
ggplot() + 
  geom_point(data = weekly, aes(x = week, y = n, color = year)) + 
  geom_line(data = weekly, aes(x = week, y = n, color = year)) +  # included to make the plot more readable 
  geom_segment(data = NULL, arrow = arrow(angle = 20, length = unit(0.1, "inches"),
                                          ends = "last", type = "closed"), 
               aes(x = c(20,20), xend = c(15.5,16), y = c(21, 20), yend = c(21, 12.25))) + 
  geom_text(data = NULL, aes(x = 23, y = 20.5, label = "VEISHEA Weeks"), size = 3) + 
  scale_x_continuous(breaks = seq(0,52,2)) 


# Make a decision about VEISHEA. TRUE or FALSE?  
cancelling_VEISHEA_was_right <- FALSE
LS0tDQp0aXRsZTogIldobyBJcyBEcnVuayBhbmQgV2hlbiBpbiBBbWVzLCBJb3dhPyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQojIDEuIEJyZWF0aCBhbGNvaG9sIHRlc3RzIGluIEFtZXMsIElvd2EsIFVTQQ0KDQpBbWVzLCBJb3dhLCBVU0EgaXMgdGhlIGhvbWUgb2YgSW93YSBTdGF0ZSBVbml2ZXJzaXR5LCBhIGxhbmQgZ3JhbnQgdW5pdmVyc2l0eSB3aXRoIG92ZXIgMzYsMDAwIHN0dWRlbnRzLiBCeSBjb21wYXJpc29uLCB0aGUgY2l0eSBvZiBBbWVzLCBJb3dhLCBpdHNlbGYgb25seSBoYXMgYWJvdXQgNjUsMDAwIHJlc2lkZW50cy4gQXMgd2l0aCBhbnkgb3RoZXIgY29sbGVnZSB0b3duLCBBbWVzIGhhcyBoYWQgaXRzIGZhaXIgc2hhcmUgb2YgYWxjb2hvbC1yZWxhdGVkIGluY2lkZW50cy4gKEZvciBleGFtcGxlLCBHb29nbGUgJ1ZFSVNIRUEgcmlvdHMgMjAxNCcuKSBXZSB3aWxsIHRha2UgYSBsb29rIGF0IHNvbWUgYnJlYXRoIGFsY29ob2wgdGVzdCBkYXRhIGZyb20gQW1lcyB0aGF0IGlzIHB1Ymxpc2hlZCBieSB0aGUgU3RhdGUgb2YgSW93YS4NCg0KIVtdKHVzYV9pb3dhLmpwZykNCmBgYHtyfQ0KIyBMb2FkIHRoZSBwYWNrYWdlcyANCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHJlYWRyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KDQojIFJlYWQgdGhlIGRhdGEgaW50byB5b3VyIHdvcmtzcGFjZQ0KYmFfZGF0YSA8LSByZWFkX2NzdigiYnJlYXRoX2FsY29ob2xfYW1lcy5jc3YiKQ0KDQojIFF1aWNrbHkgaW5zcGVjdCB0aGUgZGF0YQ0KaGVhZChiYV9kYXRhKQ0KDQojIE9idGFpbiBjb3VudHMgZm9yIGVhY2ggeWVhciANCiMgLi4uLiBZT1VSIENPREUgRk9SIFRBU0sgMSAuLi4uDQpiYV95ZWFyIDwtIGJhX2RhdGEgJT4lDQogIGNvdW50KHllYXIpDQpiYV95ZWFyDQpgYGANCiMgMi4gV2hhdCBpcyB0aGUgYnVzaWVzdCBwb2xpY2UgZGVwYXJ0bWVudCBpbiBBbWVzPw0KDQpUaGVyZSBhcmUgdHdvIHBvbGljZSBkZXBhcnRtZW50cyBpbiB0aGUgZGF0YSBzZXQ6IHRoZSBJb3dhIFN0YXRlIFVuaXZlcnNpdHkgUG9saWNlIERlcGFydG1lbnQgYW5kIHRoZSBBbWVzIFBvbGljZSBEZXBhcnRtZW50LiBXaGljaCBvbmUgYWRtaW5pc3RlcnMgbW9yZSBicmVhdGhhbHl6ZXIgdGVzdHM/DQpgYGB7cn0NCiMgQ291bnQgdGhlIHRvdGFscyBmb3IgZWFjaCBkZXBhcnRtZW50DQpwZHMgPC0gYmFfZGF0YSAlPiUNCiAgY291bnQobG9jYXRpb24pDQpwZHMNCmBgYA0KIyAzLiBOb3RoaW5nIEdvb2QgSGFwcGVucyBhZnRlciAyYW0NCg0KV2UgYWxsIGtub3cgdGhhdCAibm90aGluZyBnb29kIGhhcHBlbnMgYWZ0ZXIgMmFtLiIgVGh1cywgdGhlcmUgYXJlIGluZXZpdGFibHkgc29tZSB0aW1lcyBvZiB0aGUgZGF5IHdoZW4gYnJlYXRoIGFsY29ob2wgdGVzdHMsIGVzcGVjaWFsbHkgaW4gYSBjb2xsZWdlIHRvd24gbGlrZSBBbWVzLCBhcmUgbW9zdCBhbmQgbGVhc3QgY29tbW9uLiBXaGljaCBob3VycyBvZiB0aGUgZGF5IGhhdmUgdGhlIG1vc3QgYW5kIGxlYXN0IGJyZWF0aGFseXplciB0ZXN0cz8NCg0KYGBge3J9DQojIENvdW50IGJ5IGhvdXIgYW5kIGFycmFuZ2UgYnkgZGVzY2VuZGluZyBmcmVxdWVuY3kNCmhvdXJseSA8LSBiYV9kYXRhICU+JQ0KICBjb3VudChob3VyLCBzb3J0ID0gVFJVRSkNCiMgVXNlIGEgZ2VvbV8gdG8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBiYXIgY2hhcnQNCmdncGxvdChob3VybHksIGFlcyh4ID0gaG91ciwgd2VpZ2h0ID0gbikpICsgZ2VvbV9iYXIoKQ0KYGBgDQojIDQuIEJyZWF0aGFseXplciB0ZXN0cyBieSBtb250aA0KDQpOb3cgdGhhdCB3ZSBoYXZlIGRpc2NvdmVyZWQgd2hpY2ggdGltZSBvZiBkYXkgaXMgbW9zdCBjb21tb24gZm9yIGJyZWF0aCBhbGNvaG9sIHRlc3RzLCB3ZSB3aWxsIGRldGVybWluZSB3aGljaCB0aW1lIG9mIHRoZSB5ZWFyIGhhcyB0aGUgbW9zdCBicmVhdGhhbHl6ZXIgdGVzdHMuIFdoaWNoIG1vbnRoIHdpbGwgaGF2ZSB0aGUgbW9zdCByZWNvcmRlZCB0ZXN0cz8NCmBgYHtyfQ0KIyBDb3VudCBieSBtb250aCBhbmQgYXJyYW5nZSBieSBkZXNjZW5kaW5nIGZyZXF1ZW5jeQ0KbW9udGhseSA8LSBiYV9kYXRhICU+JQ0KICBjb3VudChtb250aCwgc29ydCA9IFRSVUUpDQoNCiMgTWFrZSBtb250aCBhIGZhY3Rvcg0KbW9udGhseSRtb250aCA8LSBhcy5mYWN0b3IobW9udGhseSRtb250aCkNCg0KIyBVc2UgYSBnZW9tXyB0byBjcmVhdGUgdGhlIGFwcHJvcHJpYXRlIGJhciBjaGFydA0KZ2dwbG90KG1vbnRobHksIGFlcyh4ID0gbW9udGgsIHdlaWdodCA9IG4pKSArIGdlb21fYmFyKCkNCmBgYA0KIyA1LiBDT0xMRUdFDQoNCldoZW4gd2UgdGhpbmsgb2YgKGJpbmdlKSBkcmlua2luZyBpbiBjb2xsZWdlIHRvd25zIGluIEFtZXJpY2EsIHdlIHVzdWFsbHkgdGhpbmsgb2Ygc29tZXRoaW5nIGxpa2UgdGhpcyBpbWFnZSBhdCB0aGUgbGVmdC4gQW5kIHNvLCBvbmUgbWlnaHQgc3VzcGVjdCB0aGF0IGJyZWF0aCBhbGNvaG9sIHRlc3RzIGFyZSBnaXZlbiB0byBtZW4gbW9yZSBvZnRlbiB0aGFuIHdvbWVuIGFuZCB0aGF0IG1lbiBkcmluayBtb3JlIHRoYW4gd29tZW4uDQpgYGB7cn0NCiMgQ291bnQgYnkgZ2VuZGVyIA0KYmFfZGF0YSAlPiUgY291bnQoZ2VuZGVyKQ0KDQojIENyZWF0ZSBhIGRhdGFzZXQgd2l0aCBubyBOQXMgaW4gZ2VuZGVyIA0KY2xlYW5fZ2VuZGVyIDwtIGJhX2RhdGEgJT4lDQogIGZpbHRlcighaXMubmEoZ2VuZGVyKSkNCg0KIyBDcmVhdGUgYSBtZWFuIHRlc3QgcmVzdWx0IHZhcmlhYmxlIGFuZCBzYXZlIGFzIG1lYW5fYmFzDQptZWFuX2JhcyA8LSBjbGVhbl9nZW5kZXIgJT4lDQogIG11dGF0ZShtZWFuUmVzID0gKFJlczEgKyBSZXMyKS8yKQ0KDQojIENyZWF0ZSBzaWRlLWJ5LXNpZGUgYm94cGxvdHMgdG8gY29tcGFyZSB0aGUgbWVhbiBibG9vZCBhbGNvaG9sIGxldmVscyBvZiBtZW4gYW5kIHdvbWVuDQpnZ3Bsb3QobWVhbl9iYXMsIGFlcyh4ID0gZ2VuZGVyLCB5ID0gbWVhblJlcykpICsgZ2VvbV9ib3hwbG90KCkNCmBgYA0KIyA2LiBBYm92ZSB0aGUgbGVnYWwgbGltaXQNCg0KSW4gdGhlIFVTQSwgaXQgaXMgaWxsZWdhbCB0byBkcml2ZSB3aXRoIGEgYmxvb2QgYWxjb2hvbCBjb25jZW50cmF0aW9uIChCQUMpIGFib3ZlIDAuMDglLiBUaGlzIGlzIHRoZSBjYXNlIGZvciBbYWxsIDUwIHN0YXRlc10oaHR0cHM6Ly93d3cuZG12Lm9yZy9hdXRvbW90aXZlLWxhdy9kdWkucGhwKS4gQXNzdW1pbmcgZXZlcnlvbmUgdGVzdGVkIGluIG91ciBkYXRhIHdhcyBkcml2aW5nICh0aG91Z2ggd2UgaGF2ZSBubyB3YXkgb2Yga25vd2luZyB0aGlzIGZyb20gdGhlIGRhdGEpLCBpZiBlaXRoZXIgb2YgdGhlIHJlc3VsdHMgKFJlczEsIFJlczIpIGFyZSBhYm92ZSAwLjA4LCB0aGUgcGVyc29uIHdvdWxkIGJlIGNoYXJnZWQgd2l0aCBEVUkgKGRyaXZpbmcgdW5kZXIgdGhlIGluZmx1ZW5jZSkuDQpgYGB7cn0NCiMgRmlsdGVyIHRoZSBkYXRhDQpkdWlzIDwtIGJhX2RhdGEgJT4lDQogIGZpbHRlcihSZXMxID4gMC4wOCB8IFJlczIgPiAwLjA4KQ0KIyBQcm9wb3J0aW9uIG9mIHRlc3RzIHRoYXQgd291bGQgaGF2ZSByZXN1bHRlZCBpbiBhIERVSQ0KIyAuLi4uIFlPVVIgQ09ERSBGT1IgVEFTSyA2IC4uLi4NCnBfZHVpIDwtIGNvdW50KGR1aXMpIC8gY291bnQoYmFfZGF0YSkNCnBfZHVpDQpgYGANCiMgNy4gQnJlYXRoYWx5emVyIHRlc3RzOiBpcyB0aGVyZSBhIHBhdHRlcm4gb3ZlciB0aW1lPw0KDQpXZSBwcmV2aW91c2x5IHNhdyB0aGF0IDIgYS5tLiBpcyB0aGUgbW9zdCBjb21tb24gdGltZSBvZiBkYXkgZm9yIGJyZWF0aGFseXplciB0ZXN0cyB0byBiZSBhZG1pbmlzdGVyZWQsIGFuZCBBdWd1c3QgaXMgdGhlIG1vc3QgY29tbW9uIG1vbnRoIG9mIHRoZSB5ZWFyIGZvciBicmVhdGhhbHl6ZXIgdGVzdHMuIE5vdywgd2UgbG9vayBhdCB0aGUgd2Vla3MgaW4gdGhlIHllYXIgb3ZlciB0aW1lLiBXZSBicmllZmx5IHVzZSB0aGUgbHVicmlkYXRlIHBhY2thZ2UgZm9yIGEgYml0IG9mIGRhdGUtdGltZSBtYW5pcHVsYXRpb24uDQpgYGB7cn0NCmxpYnJhcnkobHVicmlkYXRlKSANCg0KIyBDcmVhdGUgZGF0ZSB2YXJpYWJsZSB1c2luZyBwYXN0ZSgpIGFuZCB5bWQoKQ0KYmFfZGF0YSA8LSBiYV9kYXRhICU+JSBtdXRhdGUoZGF0ZSA9IHltZChwYXN0ZSh5ZWFyLCBtb250aCwgZGF5LCBzZXAgPSAiLSIpKSkNCg0KIyBDcmVhdGUgYSB3ZWVrIHZhcmlhYmxlIHVzaW5nIHdlZWsoKQ0KYmFfZGF0YSA8LSBiYV9kYXRhICU+JSBtdXRhdGUod2VlayA9IHdlZWsoZGF0ZSkpDQpoZWFkKGJhX2RhdGEpDQpgYGANCiMgOC4gTG9va2luZyBhdCB0aW1lbGluZXMNCg0KSG93IGRvIHRoZSB3ZWVrcyBkaWZmZXIgb3ZlciB0aW1lPyBPbmUgb2YgdGhlIG1vc3QgY29tbW9uIGRhdGEgdmlzdWFsaXphdGlvbnMgaXMgdGhlIHRpbWUgc2VyaWVzLCBhIGxpbmUgdHJhY2tpbmcgdGhlIGNoYW5nZXMgaW4gYSB2YXJpYWJsZSBvdmVyIHRpbWUuIFdlIHdpbGwgdXNlIHRoZSBuZXcgd2VlayB2YXJpYWJsZSB0byBsb29rIGF0IHRlc3QgZnJlcXVlbmN5IG92ZXIgdGltZS4gV2UgZW5kIHdpdGggYSB0aW1lIHNlcmllcyBwbG90IHNob3dpbmcgZnJlcXVlbmN5IG9mIGJyZWF0aGFseXplciB0ZXN0cyBieSB3ZWVrIGluIHllYXIsIHdpdGggb25lIGxpbmUgZm9yIGVhY2ggeWVhci4NCmBgYHtyfQ0KIyBDcmVhdGUgdGhlIHdlZWtseSBkYXRhIHNldCANCndlZWtseSA8LSBiYV9kYXRhICU+JQ0KICBjb3VudCh3ZWVrLCB5ZWFyKQ0KIyBNYWtlIHllYXIgYSBmYWN0b3INCndlZWtseSA8LSB3ZWVrbHkgJT4lIG11dGF0ZSh5ZWFyID0gYXMuZmFjdG9yKHllYXIpKQ0KDQojIENyZWF0ZSB0aGUgdGltZSBzZXJpZXMgcGxvdCB3aXRoIG9uZSBsaW5lIGZvciBlYWNoIHllYXINCmdncGxvdCh3ZWVrbHksIGFlcyh4ID0gd2VlaywgeSA9IG4pKSArIA0KICBnZW9tX2xpbmUoYWVzKGNvbG9yID0geWVhcikpICsgDQogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0geWVhcikpICsgIA0KICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsNTIsMikpDQpgYGANCiMgOS4gVGhlIGVuZCBvZiBWRUlTSEVBDQoNCkZyb20gW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVkVJU0hFQSk6ICJWRUlTSEVBIHdhcyBhbiBhbm51YWwgd2Vlay1sb25nIGNlbGVicmF0aW9uIGhlbGQgZWFjaCBzcHJpbmcgb24gdGhlIGNhbXB1cyBvZiBJb3dhIFN0YXRlIFVuaXZlcnNpdHkgaW4gQW1lcywgSW93YS4gVGhlIGNlbGVicmF0aW9uIGZlYXR1cmVkIGFuIGFubnVhbCBwYXJhZGUgYW5kIG1hbnkgb3Blbi1ob3VzZSBkZW1vbnN0cmF0aW9ucyBvZiB0aGUgdW5pdmVyc2l0eSBmYWNpbGl0aWVzIGFuZCBkZXBhcnRtZW50cy4gQ2FtcHVzIG9yZ2FuaXphdGlvbnMgZXhoaWJpdGVkIHByb2R1Y3RzLCB0ZWNobm9sb2dpZXMsIGFuZCBoZWxkIGZ1bmRyYWlzZXJzIGZvciB2YXJpb3VzIGNoYXJpdHkgZ3JvdXBzLiBJbiBhZGRpdGlvbiwgVkVJU0hFQSBicm91Z2h0IHNwZWFrZXJzLCBsZWN0dXJlcnMsIGFuZCBlbnRlcnRhaW5lcnMgdG8gSW93YSBTdGF0ZS4gW+KApl0gVkVJU0hFQSB3YXMgdGhlIGxhcmdlc3Qgc3R1ZGVudC1ydW4gZmVzdGl2YWwgaW4gdGhlIG5hdGlvbiwgYnJpbmdpbmcgaW4gdGVucyBvZiB0aG91c2FuZHMgb2YgdmlzaXRvcnMgdG8gdGhlIGNhbXB1cyBlYWNoIHllYXIuIg0KDQpUaGlzIG92ZXIgOTAteWVhciB0cmFkaXRpb24gaW4gQW1lcyB3YXMgW3Rlcm1pbmF0ZWQgcGVybWFuZW50bHldKGh0dHBzOi8vd3d3Lm5ld3MuaWFzdGF0ZS5lZHUvbmV3cy8yMDE0LzA4LzA3L3ZlaXNoZWFlbmQpIGFmdGVyIFtyaW90cyBpbiAyMDE0XShodHRwczovL2V1LmRlc21vaW5lc3JlZ2lzdGVyLmNvbS9zdG9yeS9uZXdzL2NyaW1lLWFuZC1jb3VydHMvMjAxNC8wNC8wOS92ZWlzaGVhLWFtZXMtY2FyLXRpcHBpbmcvNzQ5NTkzNS8pLCB3aGVyZSBkcnVuayBjZWxlYnJhdG9ycyBmbGlwcGVkIG92ZXIgbXVsdGlwbGUgdmVoaWNsZXMgYW5kIHRvcmUgbGlnaHQgcG9sZXMgZG93bi4gVGhpcyB3YXMgbm90IHRoZSBmaXJzdCBpbmNpZGVuY2Ugb2YgdmlvbGVuY2UgYW5kIHNldmVyZSBwcm9wZXJ0eSBkYW1hZ2UgaW4gVkVJU0hFQSdzIGhpc3RvcnkuIERpZCBmb3JtZXIgUHJlc2lkZW50IExlYXRoIG1ha2UgdGhlIHJpZ2h0IGRlY2lzaW9uPw0KYGBge3J9DQojIFJ1biB0aGlzIGNvZGUgdG8gY3JlYXRlIHRoZSBwbG90IA0KZ2dwbG90KCkgKyANCiAgZ2VvbV9wb2ludChkYXRhID0gd2Vla2x5LCBhZXMoeCA9IHdlZWssIHkgPSBuLCBjb2xvciA9IHllYXIpKSArIA0KICBnZW9tX2xpbmUoZGF0YSA9IHdlZWtseSwgYWVzKHggPSB3ZWVrLCB5ID0gbiwgY29sb3IgPSB5ZWFyKSkgKyAgIyBpbmNsdWRlZCB0byBtYWtlIHRoZSBwbG90IG1vcmUgcmVhZGFibGUgDQogIGdlb21fc2VnbWVudChkYXRhID0gTlVMTCwgYXJyb3cgPSBhcnJvdyhhbmdsZSA9IDIwLCBsZW5ndGggPSB1bml0KDAuMSwgImluY2hlcyIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcyA9ICJsYXN0IiwgdHlwZSA9ICJjbG9zZWQiKSwgDQogICAgICAgICAgICAgICBhZXMoeCA9IGMoMjAsMjApLCB4ZW5kID0gYygxNS41LDE2KSwgeSA9IGMoMjEsIDIwKSwgeWVuZCA9IGMoMjEsIDEyLjI1KSkpICsgDQogIGdlb21fdGV4dChkYXRhID0gTlVMTCwgYWVzKHggPSAyMywgeSA9IDIwLjUsIGxhYmVsID0gIlZFSVNIRUEgV2Vla3MiKSwgc2l6ZSA9IDMpICsgDQogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCw1MiwyKSkgDQoNCiMgTWFrZSBhIGRlY2lzaW9uIGFib3V0IFZFSVNIRUEuIFRSVUUgb3IgRkFMU0U/ICANCmNhbmNlbGxpbmdfVkVJU0hFQV93YXNfcmlnaHQgPC0gRkFMU0UNCmBgYA0KDQo=