Jennifer Ganeles
2/10/19

Violent and Property Crime Rates Across U.S. Regions (2014)

This week’s homework explores reported crime rates for all 50 U.S. states (plus District of Columbia) using the 2014 UCR Crime Dataset from Social Explorer. Data was used to see how states, categorized by region, compare in terms of both violent and property crime rates. Violent crimes include reported murders, rapes, robberies, and aggravated assaults. Property crimes include reported burglaries, larcenies, and motor vehicle thefts. Regions were divided geographically into five groups: (1) West, (2) Midwest, (3) Northeast, (4) Southwest, and (5) Southeast.

Importing the Data

library(readr)
crimedata<-read_csv("/Users/Jennifer/Downloads/R12018303_SL040.csv")

Data Preview

head(crimedata)

Renaming Variables

library(dplyr)
crimedata1<-rename(crimedata, State=Geo_Name, 
                   Total_Pop=SE_T001_001,
                   Total_VP_Crimes=SE_T002_001,
                   Total_V_Crimes=SE_T002_002,
                   Total_P_Crimes=SE_T002_003)
names(crimedata1)
 [1] "Geo_FIPS"        "State"           "Geo_QName"       "Total_Pop"       "Total_VP_Crimes"
 [6] "Total_V_Crimes"  "Total_P_Crimes"  "SE_T003_001"     "SE_T003_002"     "SE_T003_003"    
[11] "SE_T004_001"     "SE_T004_002"     "SE_T004_003"     "SE_T004_004"     "SE_T004_005"    
[16] "SE_T006_001"     "SE_T006_002"     "SE_T006_003"     "SE_T006_004"    

Recoding Existing Variables

State was recoded into five categories under new variable Region:


1.West: Washington, Utah, Oregon, Nevada, Montana, Idaho, Colorado, California
2.Midwest: Wisconsin, South Dakota, Ohio, North Dakota, Nebraska, Missouri, Minnesota, Michigan, Kansas, Iowa, Indiana, Illinois
3.Northeast: Vermont, Rhode Island, Pennsylvania, New York, New Jersey, New Hampshire, Massachussets, Maine, Connecticut
4.Southwest: Texas, Oklahoma, New Mexico, Arizona
5.Southeast: West Virginia, Virginia, Tennessee, South Carolina, Mississippi, Maryland, North Carolina, Lousiana, Kentucky, Georgia, Florida, Delaware, D.C., Arkansas, Alabama

crimedata2<-mutate(crimedata1, Region=State)
crimedata2$Region<-recode(crimedata2$Region, 'Washington'=1,'Montana'=1,'Oregon'=1,'Idaho'=1,'California'=1,
         'Nevada'=1,'Utah'=1,'Colorado'=1,'Wyoming'=1, 'Alaska'=1, 'Hawaii'=1,
         'North Dakota'=2, 'South Dakota'=2,'Nebraska'=2,'Kansas'=2, 'Missouri'=2, 'Iowa'=2, 'Minnesota'=2, 'Wisconsin'=2, 'Michigan'=2, 'Illinois'=2, 'Ohio'=2, 'Indiana'=2, 'Maine'=3, 'New Hampshire'=3, 'Massachusetts'=3,  'Vermont'=3, 'New York'=3, 'New Jersey'=3, 'Pennsylvania'=3, 'Rhode Island'=3, 'Connecticut'=3, 'Arizona'=4, 'New Mexico'=4, 'Texas'=4, 'Oklahoma'=4, 'Arkansas'=5, 'Louisiana'=5, 'Mississippi'=5, 'Alabama'=5, 'Georgia'=5,'South Carolina'=5, 'North Carolina'=5, 'Virginia'=5, 'Maryland'=5, 'West Virginia'=5, 'Florida'=5, 'Tennessee'=5, 'Kentucky'=5, 'Delaware'=5, 'District of Columbia'=5)
table(crimedata2$Region)

 1  2  3  4  5 
11 12  9  4 15 

Keeping Variables

I selected six pertinent variables, decreasing the total number of variables from 20 to 6.

crimedata3<-select(crimedata2, Region, State, Total_Pop, Total_VP_Crimes, Total_P_Crimes, Total_V_Crimes)
dim(crimedata2)
[1] 51 20
dim(crimedata3)
[1] 51  6

Generating Summary Variables

by_region<-group_by(crimedata3, Region)
crimedata4<-summarize(by_region, Region_Pop=sum(Total_Pop),
                      Region_VP_Crimes=sum(Total_VP_Crimes),
                      Region_V_Crimes=sum(Total_V_Crimes),
                      Region_P_Crimes=sum(Total_P_Crimes))
print(crimedata4)

Generating More Variables

I created three new variables, Region_VP_Rate, Region_V_Rate, and Region_P_Rate which indicate violent and property crime rates for each region.

Region_VP_Rate: Percent of Combined Violent and Property Crimes Across Regions
Region_V_Rate: Percent of Violent Crime Rate Across Regions
Region_P_Rate: Percent of Crime Rate Across Regions

crimedata5<-mutate(crimedata4, Region_VP_Rate=Region_VP_Crimes/Region_Pop*100,
Region_V_Rate=Region_V_Crimes/Region_Pop*100,
Region_P_Rate=Region_P_Crimes/Region_Pop*100)
print(crimedata5[,6:8])

Chaining All Operations Together Using Magrittr

library(magrittr)
crime_data<-crimedata%>%
  rename(State=Geo_Name,
         Total_Pop=SE_T001_001,
         Total_VP_Crimes= SE_T002_001,
         Total_V_Crimes=SE_T002_002,
         Total_P_Crimes=SE_T002_003)%>%
  select(State, Total_Pop, Total_VP_Crimes, Total_P_Crimes,
         Total_V_Crimes)%>%
  mutate(Region=
  recode(State,'Washington'=1,'Montana'=1,'Oregon'=1,'Idaho'=1,'California'=1,
         'Nevada'=1,'Utah'=1,'Colorado'=1,'Wyoming'=1, 'Alaska'=1, 'Hawaii'=1,
         'North Dakota'=2, 'South Dakota'=2,'Nebraska'=2,'Kansas'=2, 'Missouri'=2, 'Iowa'=2, 'Minnesota'=2, 'Wisconsin'=2, 'Michigan'=2, 'Illinois'=2, 'Ohio'=2, 'Indiana'=2, 'Maine'=3, 'New Hampshire'=3, 'Massachusetts'=3,  'Vermont'=3, 'New York'=3, 'New Jersey'=3, 'Pennsylvania'=3, 'Rhode Island'=3, 'Connecticut'=3, 'Arizona'=4, 'New Mexico'=4, 'Texas'=4, 'Oklahoma'=4, 'Arkansas'=5, 'Louisiana'=5, 'Mississippi'=5, 'Alabama'=5, 'Georgia'=5,'South Carolina'=5, 'North Carolina'=5, 'Virginia'=5, 'Maryland'=5, 'West Virginia'=5, 'Florida'=5, 'Tennessee'=5, 'Kentucky'=5, 'Delaware'=5, 'District of Columbia'=5))%>%
  group_by(Region)%>%
  summarize( 
            Region_Pop=sum(Total_Pop),
            Region_VP_Crimes=sum(Total_VP_Crimes),
            Region_V_Crimes=sum(Total_V_Crimes),
            Region_P_Crimes=sum(Total_P_Crimes)
            )%>%
    mutate(Region_VP_Rate=Region_VP_Crimes/Region_Pop*100, Region_V_Rate=Region_V_Crimes/Region_Pop*100, Region_P_Rate=Region_P_Crimes/Region_Pop*100)
print(crime_data)

Reshaping from Wide to Long Format

library(tidyr)
RegionData<-crime_data%>%
  rename(Combined=Region_VP_Rate, Property=Region_P_Rate, Violent=Region_V_Rate)%>%
  select(Region, Combined, Property, Violent)
RegionData_LongFormat <- gather(CrimeData, "CrimeType","CrimeRate",-Region)
head(RegionData_LongFormat) 

Visualizations

The data shows that the percentage of reported crimes per population is highest in the southwest region(3.47%), followed by southeast(3.25%), west(2.99%), midwest(2.62%), and northeast(2.13%). This order holds true for both violent and property crimes.

library(ggplot2)
ggplot(data=RegionData_LongFormat)+
geom_col(aes(x=Region, y=CrimeRate, fill=CrimeType), position="dodge")+labs(title="Percent of Violent and Property Crimes Across U.S. Regions (2014)",y="Percentage of Reported Crimes")

LS0tCnRpdGxlOiAiU09DIDcxMjogSG9tZXdvcmsgMiIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoqSmVubmlmZXIgR2FuZWxlcyoKPGJyLz4qMi8xMC8xOSoKCiMjKipWaW9sZW50IGFuZCBQcm9wZXJ0eSBDcmltZSBSYXRlcyBBY3Jvc3MgVS5TLiBSZWdpb25zICgyMDE0KSoqCgpUaGlzIHdlZWsncyBob21ld29yayBleHBsb3JlcyByZXBvcnRlZCBjcmltZSByYXRlcyBmb3IgYWxsIDUwIFUuUy4gc3RhdGVzIChwbHVzIERpc3RyaWN0IG9mIENvbHVtYmlhKSB1c2luZyB0aGUgMjAxNCBVQ1IgQ3JpbWUgRGF0YXNldCBmcm9tIFNvY2lhbCBFeHBsb3Jlci4gRGF0YSB3YXMgdXNlZCB0byBzZWUgaG93IHN0YXRlcywgY2F0ZWdvcml6ZWQgYnkgcmVnaW9uLCBjb21wYXJlIGluIHRlcm1zIG9mIGJvdGggdmlvbGVudCBhbmQgcHJvcGVydHkgY3JpbWUgcmF0ZXMuIFZpb2xlbnQgY3JpbWVzIGluY2x1ZGUgcmVwb3J0ZWQgbXVyZGVycywgcmFwZXMsIHJvYmJlcmllcywgYW5kIGFnZ3JhdmF0ZWQgYXNzYXVsdHMuIFByb3BlcnR5IGNyaW1lcyBpbmNsdWRlIHJlcG9ydGVkIGJ1cmdsYXJpZXMsIGxhcmNlbmllcywgYW5kIG1vdG9yIHZlaGljbGUgdGhlZnRzLiBSZWdpb25zIHdlcmUgZGl2aWRlZCBnZW9ncmFwaGljYWxseSBpbnRvIGZpdmUgZ3JvdXBzOiAoMSkgV2VzdCwgKDIpIE1pZHdlc3QsICgzKSBOb3J0aGVhc3QsICg0KSBTb3V0aHdlc3QsIGFuZCAoNSkgU291dGhlYXN0LgoKIyMjSW1wb3J0aW5nIHRoZSBEYXRhCmBgYHtyfQpsaWJyYXJ5KHJlYWRyKQpjcmltZWRhdGE8LXJlYWRfY3N2KCIvVXNlcnMvSmVubmlmZXIvRG93bmxvYWRzL1IxMjAxODMwM19TTDA0MC5jc3YiKQpgYGAKCiMjI0RhdGEgUHJldmlldwpgYGB7cn0KaGVhZChjcmltZWRhdGEpCmBgYAoKIyMjUmVuYW1pbmcgVmFyaWFibGVzCmBgYHtyfQpsaWJyYXJ5KGRwbHlyKQpjcmltZWRhdGExPC1yZW5hbWUoY3JpbWVkYXRhLCBTdGF0ZT1HZW9fTmFtZSwgCiAgICAgICAgICAgICAgICAgICBUb3RhbF9Qb3A9U0VfVDAwMV8wMDEsCiAgICAgICAgICAgICAgICAgICBUb3RhbF9WUF9DcmltZXM9U0VfVDAwMl8wMDEsCiAgICAgICAgICAgICAgICAgICBUb3RhbF9WX0NyaW1lcz1TRV9UMDAyXzAwMiwKICAgICAgICAgICAgICAgICAgIFRvdGFsX1BfQ3JpbWVzPVNFX1QwMDJfMDAzKQpuYW1lcyhjcmltZWRhdGExKQpgYGAKCgojIyNSZWNvZGluZyBFeGlzdGluZyBWYXJpYWJsZXMKKipTdGF0ZSoqIHdhcyByZWNvZGVkIGludG8gZml2ZSBjYXRlZ29yaWVzIHVuZGVyIG5ldyB2YXJpYWJsZSAqKlJlZ2lvbioqOgoKPGJyLz4xLioqV2VzdCoqOiBXYXNoaW5ndG9uLCBVdGFoLCBPcmVnb24sIE5ldmFkYSwgTW9udGFuYSwgSWRhaG8sIENvbG9yYWRvLCBDYWxpZm9ybmlhIAo8YnIvPjIuKipNaWR3ZXN0Kio6IFdpc2NvbnNpbiwgU291dGggRGFrb3RhLCBPaGlvLCBOb3J0aCBEYWtvdGEsIE5lYnJhc2thLCBNaXNzb3VyaSwgTWlubmVzb3RhLCBNaWNoaWdhbiwgS2Fuc2FzLCBJb3dhLCAgSW5kaWFuYSwgSWxsaW5vaXMKPGJyLz4zLioqTm9ydGhlYXN0Kio6IFZlcm1vbnQsIFJob2RlIElzbGFuZCwgUGVubnN5bHZhbmlhLCBOZXcgWW9yaywgTmV3IEplcnNleSwgTmV3IEhhbXBzaGlyZSwgTWFzc2FjaHVzc2V0cywgTWFpbmUsIENvbm5lY3RpY3V0Cjxici8+NC4qKlNvdXRod2VzdCoqOiBUZXhhcywgT2tsYWhvbWEsIE5ldyBNZXhpY28sIEFyaXpvbmEKPGJyLz41LioqU291dGhlYXN0Kio6IFdlc3QgVmlyZ2luaWEsIFZpcmdpbmlhLCBUZW5uZXNzZWUsIFNvdXRoIENhcm9saW5hLCBNaXNzaXNzaXBwaSwgTWFyeWxhbmQsIE5vcnRoIENhcm9saW5hLCBMb3VzaWFuYSwgS2VudHVja3ksIEdlb3JnaWEsIEZsb3JpZGEsIERlbGF3YXJlLCBELkMuLCBBcmthbnNhcywgQWxhYmFtYQoKCmBgYHtyfQpjcmltZWRhdGEyPC1tdXRhdGUoY3JpbWVkYXRhMSwgUmVnaW9uPVN0YXRlKQpjcmltZWRhdGEyJFJlZ2lvbjwtcmVjb2RlKGNyaW1lZGF0YTIkUmVnaW9uLCAnV2FzaGluZ3Rvbic9MSwnTW9udGFuYSc9MSwnT3JlZ29uJz0xLCdJZGFobyc9MSwnQ2FsaWZvcm5pYSc9MSwKICAgICAgICAgJ05ldmFkYSc9MSwnVXRhaCc9MSwnQ29sb3JhZG8nPTEsJ1d5b21pbmcnPTEsICdBbGFza2EnPTEsICdIYXdhaWknPTEsCiAgICAgICAgICdOb3J0aCBEYWtvdGEnPTIsICdTb3V0aCBEYWtvdGEnPTIsJ05lYnJhc2thJz0yLCdLYW5zYXMnPTIsICdNaXNzb3VyaSc9MiwgJ0lvd2EnPTIsICdNaW5uZXNvdGEnPTIsICdXaXNjb25zaW4nPTIsICdNaWNoaWdhbic9MiwgJ0lsbGlub2lzJz0yLCAnT2hpbyc9MiwgJ0luZGlhbmEnPTIsICdNYWluZSc9MywgJ05ldyBIYW1wc2hpcmUnPTMsICdNYXNzYWNodXNldHRzJz0zLCAgJ1Zlcm1vbnQnPTMsICdOZXcgWW9yayc9MywgJ05ldyBKZXJzZXknPTMsICdQZW5uc3lsdmFuaWEnPTMsICdSaG9kZSBJc2xhbmQnPTMsICdDb25uZWN0aWN1dCc9MywgJ0FyaXpvbmEnPTQsICdOZXcgTWV4aWNvJz00LCAnVGV4YXMnPTQsICdPa2xhaG9tYSc9NCwgJ0Fya2Fuc2FzJz01LCAnTG91aXNpYW5hJz01LCAnTWlzc2lzc2lwcGknPTUsICdBbGFiYW1hJz01LCAnR2VvcmdpYSc9NSwnU291dGggQ2Fyb2xpbmEnPTUsICdOb3J0aCBDYXJvbGluYSc9NSwgJ1ZpcmdpbmlhJz01LCAnTWFyeWxhbmQnPTUsICdXZXN0IFZpcmdpbmlhJz01LCAnRmxvcmlkYSc9NSwgJ1Rlbm5lc3NlZSc9NSwgJ0tlbnR1Y2t5Jz01LCAnRGVsYXdhcmUnPTUsICdEaXN0cmljdCBvZiBDb2x1bWJpYSc9NSkKCnRhYmxlKGNyaW1lZGF0YTIkUmVnaW9uKQpgYGAKIyMjS2VlcGluZyBWYXJpYWJsZXMgCkkgc2VsZWN0ZWQgc2l4IHBlcnRpbmVudCB2YXJpYWJsZXMsIGRlY3JlYXNpbmcgdGhlIHRvdGFsIG51bWJlciBvZiB2YXJpYWJsZXMgZnJvbSAyMCB0byA2LgpgYGB7cn0KY3JpbWVkYXRhMzwtc2VsZWN0KGNyaW1lZGF0YTIsIFJlZ2lvbiwgU3RhdGUsIFRvdGFsX1BvcCwgVG90YWxfVlBfQ3JpbWVzLCBUb3RhbF9QX0NyaW1lcywgVG90YWxfVl9DcmltZXMpCmRpbShjcmltZWRhdGEyKQpkaW0oY3JpbWVkYXRhMykKYGBgCgoKIyMjR2VuZXJhdGluZyBTdW1tYXJ5IFZhcmlhYmxlcwpgYGB7cn0KYnlfcmVnaW9uPC1ncm91cF9ieShjcmltZWRhdGEzLCBSZWdpb24pCmNyaW1lZGF0YTQ8LXN1bW1hcml6ZShieV9yZWdpb24sIFJlZ2lvbl9Qb3A9c3VtKFRvdGFsX1BvcCksCiAgICAgICAgICAgICAgICAgICAgICBSZWdpb25fVlBfQ3JpbWVzPXN1bShUb3RhbF9WUF9DcmltZXMpLAogICAgICAgICAgICAgICAgICAgICAgUmVnaW9uX1ZfQ3JpbWVzPXN1bShUb3RhbF9WX0NyaW1lcyksCiAgICAgICAgICAgICAgICAgICAgICBSZWdpb25fUF9DcmltZXM9c3VtKFRvdGFsX1BfQ3JpbWVzKSkKCnByaW50KGNyaW1lZGF0YTQpCmBgYAojIyNHZW5lcmF0aW5nIE1vcmUgVmFyaWFibGVzCkkgY3JlYXRlZCB0aHJlZSBuZXcgdmFyaWFibGVzLCAqKlJlZ2lvbl9WUF9SYXRlKiosICoqUmVnaW9uX1ZfUmF0ZSoqLCBhbmQgKipSZWdpb25fUF9SYXRlKiogd2hpY2ggaW5kaWNhdGUgdmlvbGVudCBhbmQgcHJvcGVydHkgY3JpbWUgcmF0ZXMgZm9yIGVhY2ggcmVnaW9uLgoKKipSZWdpb25fVlBfUmF0ZSoqOiBQZXJjZW50IG9mIENvbWJpbmVkIFZpb2xlbnQgYW5kIFByb3BlcnR5IENyaW1lcyBBY3Jvc3MgUmVnaW9ucwo8YnIvPgoqKlJlZ2lvbl9WX1JhdGUqKjogUGVyY2VudCBvZiBWaW9sZW50IENyaW1lIFJhdGUgQWNyb3NzIFJlZ2lvbnMKPGJyIC8+CioqUmVnaW9uX1BfUmF0ZSoqOiBQZXJjZW50IG9mIENyaW1lIFJhdGUgQWNyb3NzIFJlZ2lvbnMKCmBgYHtyfQpjcmltZWRhdGE1PC1tdXRhdGUoY3JpbWVkYXRhNCwgUmVnaW9uX1ZQX1JhdGU9UmVnaW9uX1ZQX0NyaW1lcy9SZWdpb25fUG9wKjEwMCwKUmVnaW9uX1ZfUmF0ZT1SZWdpb25fVl9DcmltZXMvUmVnaW9uX1BvcCoxMDAsClJlZ2lvbl9QX1JhdGU9UmVnaW9uX1BfQ3JpbWVzL1JlZ2lvbl9Qb3AqMTAwKQpwcmludChjcmltZWRhdGE1Wyw2OjhdKQpgYGAKCiMjI0NoYWluaW5nIEFsbCBPcGVyYXRpb25zIFRvZ2V0aGVyIFVzaW5nIE1hZ3JpdHRyCmBgYHtyfQpsaWJyYXJ5KG1hZ3JpdHRyKQpjcmltZV9kYXRhPC1jcmltZWRhdGElPiUKICByZW5hbWUoU3RhdGU9R2VvX05hbWUsCiAgICAgICAgIFRvdGFsX1BvcD1TRV9UMDAxXzAwMSwKICAgICAgICAgVG90YWxfVlBfQ3JpbWVzPSBTRV9UMDAyXzAwMSwKICAgICAgICAgVG90YWxfVl9DcmltZXM9U0VfVDAwMl8wMDIsCiAgICAgICAgIFRvdGFsX1BfQ3JpbWVzPVNFX1QwMDJfMDAzKSU+JQogIHNlbGVjdChTdGF0ZSwgVG90YWxfUG9wLCBUb3RhbF9WUF9DcmltZXMsIFRvdGFsX1BfQ3JpbWVzLAogICAgICAgICBUb3RhbF9WX0NyaW1lcyklPiUKICBtdXRhdGUoUmVnaW9uPQogIHJlY29kZShTdGF0ZSwnV2FzaGluZ3Rvbic9MSwnTW9udGFuYSc9MSwnT3JlZ29uJz0xLCdJZGFobyc9MSwnQ2FsaWZvcm5pYSc9MSwKICAgICAgICAgJ05ldmFkYSc9MSwnVXRhaCc9MSwnQ29sb3JhZG8nPTEsJ1d5b21pbmcnPTEsICdBbGFza2EnPTEsICdIYXdhaWknPTEsCiAgICAgICAgICdOb3J0aCBEYWtvdGEnPTIsICdTb3V0aCBEYWtvdGEnPTIsJ05lYnJhc2thJz0yLCdLYW5zYXMnPTIsICdNaXNzb3VyaSc9MiwgJ0lvd2EnPTIsICdNaW5uZXNvdGEnPTIsICdXaXNjb25zaW4nPTIsICdNaWNoaWdhbic9MiwgJ0lsbGlub2lzJz0yLCAnT2hpbyc9MiwgJ0luZGlhbmEnPTIsICdNYWluZSc9MywgJ05ldyBIYW1wc2hpcmUnPTMsICdNYXNzYWNodXNldHRzJz0zLCAgJ1Zlcm1vbnQnPTMsICdOZXcgWW9yayc9MywgJ05ldyBKZXJzZXknPTMsICdQZW5uc3lsdmFuaWEnPTMsICdSaG9kZSBJc2xhbmQnPTMsICdDb25uZWN0aWN1dCc9MywgJ0FyaXpvbmEnPTQsICdOZXcgTWV4aWNvJz00LCAnVGV4YXMnPTQsICdPa2xhaG9tYSc9NCwgJ0Fya2Fuc2FzJz01LCAnTG91aXNpYW5hJz01LCAnTWlzc2lzc2lwcGknPTUsICdBbGFiYW1hJz01LCAnR2VvcmdpYSc9NSwnU291dGggQ2Fyb2xpbmEnPTUsICdOb3J0aCBDYXJvbGluYSc9NSwgJ1ZpcmdpbmlhJz01LCAnTWFyeWxhbmQnPTUsICdXZXN0IFZpcmdpbmlhJz01LCAnRmxvcmlkYSc9NSwgJ1Rlbm5lc3NlZSc9NSwgJ0tlbnR1Y2t5Jz01LCAnRGVsYXdhcmUnPTUsICdEaXN0cmljdCBvZiBDb2x1bWJpYSc9NSkpJT4lCiAgZ3JvdXBfYnkoUmVnaW9uKSU+JQogIHN1bW1hcml6ZSggCiAgICAgICAgICAgIFJlZ2lvbl9Qb3A9c3VtKFRvdGFsX1BvcCksCiAgICAgICAgICAgIFJlZ2lvbl9WUF9DcmltZXM9c3VtKFRvdGFsX1ZQX0NyaW1lcyksCiAgICAgICAgICAgIFJlZ2lvbl9WX0NyaW1lcz1zdW0oVG90YWxfVl9DcmltZXMpLAogICAgICAgICAgICBSZWdpb25fUF9DcmltZXM9c3VtKFRvdGFsX1BfQ3JpbWVzKQogICAgICAgICAgICApJT4lCiAgICBtdXRhdGUoUmVnaW9uX1ZQX1JhdGU9UmVnaW9uX1ZQX0NyaW1lcy9SZWdpb25fUG9wKjEwMCwgUmVnaW9uX1ZfUmF0ZT1SZWdpb25fVl9DcmltZXMvUmVnaW9uX1BvcCoxMDAsIFJlZ2lvbl9QX1JhdGU9UmVnaW9uX1BfQ3JpbWVzL1JlZ2lvbl9Qb3AqMTAwKQoKcHJpbnQoY3JpbWVfZGF0YSkKCmBgYAoKCiMjI1Jlc2hhcGluZyBmcm9tIFdpZGUgdG8gTG9uZyBGb3JtYXQKYGBge3IgZWNobz1UUlVFfQpsaWJyYXJ5KHRpZHlyKQpSZWdpb25EYXRhPC1jcmltZV9kYXRhJT4lCiAgcmVuYW1lKENvbWJpbmVkPVJlZ2lvbl9WUF9SYXRlLCBQcm9wZXJ0eT1SZWdpb25fUF9SYXRlLCBWaW9sZW50PVJlZ2lvbl9WX1JhdGUpJT4lCiAgc2VsZWN0KFJlZ2lvbiwgQ29tYmluZWQsIFByb3BlcnR5LCBWaW9sZW50KQpSZWdpb25EYXRhX0xvbmdGb3JtYXQgPC0gZ2F0aGVyKENyaW1lRGF0YSwgIkNyaW1lVHlwZSIsIkNyaW1lUmF0ZSIsLVJlZ2lvbikKCmhlYWQoUmVnaW9uRGF0YV9Mb25nRm9ybWF0KSAKCgpgYGAKCiMjI1Zpc3VhbGl6YXRpb25zClRoZSBkYXRhIHNob3dzIHRoYXQgdGhlIHBlcmNlbnRhZ2Ugb2YgcmVwb3J0ZWQgY3JpbWVzIHBlciBwb3B1bGF0aW9uIGlzIGhpZ2hlc3QgaW4gdGhlIHNvdXRod2VzdCByZWdpb24oMy40NyUpLCBmb2xsb3dlZCBieSBzb3V0aGVhc3QoMy4yNSUpLCB3ZXN0KDIuOTklKSwgbWlkd2VzdCgyLjYyJSksIGFuZCBub3J0aGVhc3QoMi4xMyUpLiBUaGlzIG9yZGVyIGhvbGRzIHRydWUgZm9yIGJvdGggdmlvbGVudCBhbmQgcHJvcGVydHkgY3JpbWVzLgpgYGB7ciBlY2hvPVRSVUV9CmxpYnJhcnkoZ2dwbG90MikKZ2dwbG90KGRhdGE9UmVnaW9uRGF0YV9Mb25nRm9ybWF0KSsKZ2VvbV9jb2woYWVzKHg9UmVnaW9uLCB5PUNyaW1lUmF0ZSwgZmlsbD1DcmltZVR5cGUpLCBwb3NpdGlvbj0iZG9kZ2UiKStsYWJzKHRpdGxlPSJQZXJjZW50IG9mIFZpb2xlbnQgYW5kIFByb3BlcnR5IENyaW1lcyBBY3Jvc3MgVS5TLiBSZWdpb25zICgyMDE0KSIseT0iUGVyY2VudGFnZSBvZiBSZXBvcnRlZCBDcmltZXMiKQpgYGAK