Introduction

Average arrests rates will always be in question as politics sometimes lie to the public about certain statistics in order to be elected for a certain position. This analysis is concerned with the question around whether the percentage of white people in a state affect the average arrests rate in that state. A multilevel method will be utilized to further analyze the relationship between race and arrests rates and possible variations amongst all 50 states, who have a large population of white race or other race. The analysis will begin with an ecological analysis, complete pooling model, a no pool modeling, and conclude with multilevel modeling to ultimately determine the best fit.

Method

To conduct this analysis, the primary data on crime average arrests rate and the 2014 race disparity in each state was extracted from Social Explorer. The two datasets were merged to create a dataset called Crimedatabyrace. The variables used in analysis are statename, county, Arrestsrate_per100k, white, black, native, asian, pacifisland, and mixed race.

library(nlme)
library(dplyr)
library(magrittr)
library(tidyr)
library(haven)
library(lmerTest)
library(ggplot2)
library(texreg)
library(stringr)

Merging the Datasets

Populationbyrace <- read.csv("/Users/robertperez/Documents/Rstudio DataSets /population_race_2014.csv")
Crimedata <- read.csv("/Users/robertperez/Documents/Rstudio DataSets /crimedata.csv")
crimedatabyrace <- merge(Populationbyrace, Crimedata, 
                         by.x = "Geo_NAME",
                         by.y = "Geo_Name")
#Isolate the State Name from teh Geo_QName variable
X<-data.frame(str_locate(crimedatabyrace$Geo_QName,"County,"))
X2<-X%>%select(end)
crimedatabyrace$loc <- X2$end
crimedatabyrace1<-crimedatabyrace%>%
  mutate(statename = substr(Geo_QName, loc+1,length(Geo_QName)))
head(crimedatabyrace1)

Manipulating The Data

crimedatabyrace1 <- rename(crimedatabyrace1, county = Geo_NAME, Arrestsrate_per100k = SE_T011_001,
           white = SE_T020_002,
           black = SE_T020_003,
           native = SE_T020_004,
           asian = SE_T020_005,
           pacifisland= SE_T020_006,
           mixed = SE_T020_007)%>%
  select(statename, county, Arrestsrate_per100k, white, black, native, asian, pacifisland, mixed)
  head(crimedatabyrace1)
print(crimedatabyrace1)
crimedatabyrace1<-na.omit(crimedatabyrace1)
head(crimedatabyrace1)

Looking at the Means

###Means, color = red
####Looking at aaverages for each state and race
crimedatabyrace1%>%
  group_by(statename)%>%
  summarize(Arrestsrate_per100k = mean(Arrestsrate_per100k), white = mean(white), black = mean(black))

State Level Analysis Ecological Model

statenames <- crimedatabyrace1 %>% 
  group_by(statename) %>% 
  summarise(Arrestsrate_per100k = mean(Arrestsrate_per100k, na.rm = TRUE), white = mean(log(white), na.rm = TRUE))
head(statenames)

The ecological Analysis

ecoreg <- lm(Arrestsrate_per100k ~ white, data = crimedatabyrace1)
summary(ecoreg)

Call:
lm(formula = Arrestsrate_per100k ~ white, data = crimedatabyrace1)

Residuals:
    Min      1Q  Median      3Q     Max 
-3198.4 -1177.1  -262.8   947.7 16228.0 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 3.163e+03  1.634e+01 193.656   <2e-16 ***
white       4.538e-05  8.838e-05   0.513    0.608    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1744 on 13251 degrees of freedom
Multiple R-squared:  1.99e-05,  Adjusted R-squared:  -5.557e-05 
F-statistic: 0.2637 on 1 and 13251 DF,  p-value: 0.6076
ggplot(data=crimedatabyrace1, aes(x=statename, y=Arrestsrate_per100k))+
  geom_col(color ="red", fill = "black")+coord_flip()

Regression Model Complete Pooling

cpooling1<- lm(Arrestsrate_per100k ~ white, data = crimedatabyrace1)
summary(cpooling1)

Call:
lm(formula = Arrestsrate_per100k ~ white, data = crimedatabyrace1)

Residuals:
    Min      1Q  Median      3Q     Max 
-3198.4 -1177.1  -262.8   947.7 16228.0 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 3.163e+03  1.634e+01 193.656   <2e-16 ***
white       4.538e-05  8.838e-05   0.513    0.608    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1744 on 13251 degrees of freedom
Multiple R-squared:  1.99e-05,  Adjusted R-squared:  -5.557e-05 
F-statistic: 0.2637 on 1 and 13251 DF,  p-value: 0.6076
ARwhite<- lm(Arrestsrate_per100k ~ white + black, data = crimedatabyrace1)
summary(ARwhite)

Call:
lm(formula = Arrestsrate_per100k ~ white + black, data = crimedatabyrace1)

Residuals:
    Min      1Q  Median      3Q     Max 
-3196.6 -1177.2  -263.1   947.8 16228.3 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  3.163e+03  1.638e+01 193.170   <2e-16 ***
white        5.673e-05  1.242e-04   0.457    0.648    
black       -5.484e-05  4.216e-04  -0.130    0.897    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1744 on 13250 degrees of freedom
Multiple R-squared:  2.117e-05, Adjusted R-squared:  -0.0001298 
F-statistic: 0.1403 on 2 and 13250 DF,  p-value: 0.8691

Intercept

When considering the intercept model, which was an indication of whites affect on average arrests rate we see that most intercepts range between 1000 and 3500 where there is less white people there seems to be higher average arrests rates.

dcoef <- crimedatabyrace1 %>% 
    group_by(statename) %>% 
    do(mod = lm(Arrestsrate_per100k ~ white, data = .))
coef <- dcoef %>% do(data.frame(intc = coef(.$mod)[1]))
ggplot(coef, aes(x = intc)) + geom_histogram()

Slope

Our slope models show a consistent positive impact, suggesting that with more white people in a state the average arrests rate continues to decrease.

dcoef <- crimedatabyrace1 %>% 
    group_by(statename) %>% 
    do(mod = lm(Arrestsrate_per100k ~ white, data = .))
coef <- dcoef %>% do(data.frame(Arrestsrate_per100k = coef(.$mod)[2]))
ggplot(coef, aes(x = Arrestsrate_per100k)) + geom_histogram()

Race and Average arrests rate by state - A Random Intercept Model

m1_lme <- lme(Arrestsrate_per100k ~ white, data = crimedatabyrace1, random = ~1|statename, method = "ML")
summary(m1_lme)
Linear mixed-effects model fit by maximum likelihood
 Data: crimedatabyrace1 
       AIC      BIC    logLik
  231552.4 231582.3 -115772.2

Random effects:
 Formula: ~1 | statename
        (Intercept) Residual
StdDev:    908.1807  1494.13

Fixed effects: Arrestsrate_per100k ~ white 
               Value Std.Error    DF   t-value p-value
(Intercept) 3245.785 136.54066 13206 23.771565  0.0000
white          0.000   0.00008 13206 -0.279782  0.7796
 Correlation: 
      (Intr)
white -0.052

Standardized Within-Group Residuals:
       Min         Q1        Med         Q3        Max 
-3.2451978 -0.6331617 -0.1160736  0.5145651 10.6186223 

Number of Observations: 13253
Number of Groups: 46 

Race and Average Arrests Rates by State - A Random Slope Model

m2_lme <- lme(Arrestsrate_per100k ~ white, data = crimedatabyrace1, random = ~ white|statename, method = "ML")
summary(m2_lme)
Linear mixed-effects model fit by maximum likelihood
 Data: crimedatabyrace1 
     AIC      BIC  logLik
  231548 231592.9 -115768

Random effects:
 Formula: ~white | statename
 Structure: General positive-definite, Log-Cholesky parametrization
            StdDev       Corr  
(Intercept) 9.101732e+02 (Intr)
white       4.278992e-04 0.016 
Residual    1.492528e+03       

Fixed effects: Arrestsrate_per100k ~ white 
               Value Std.Error    DF   t-value p-value
(Intercept) 3244.624 136.91245 13206 23.698533  0.0000
white          0.000   0.00011 13206  0.398053  0.6906
 Correlation: 
      (Intr)
white -0.04 

Standardized Within-Group Residuals:
       Min         Q1        Med         Q3        Max 
-3.2501799 -0.6329070 -0.1188938  0.5100618 10.6371287 

Number of Observations: 13253
Number of Groups: 46 

Models Summary

When account for the variation between states we continue to see that there is no statistically significant relationship between the race in a state and the average arrests rate in a state.

Introducing Covariate - The Effect of Another Race

The model maintains its significance in regards to whether race in a state has an affect on average arrests rates. We do however see an increase in average arrests rate when considering the amount of blacks in a state.

m3_lme <- lme(Arrestsrate_per100k ~ white + black, data = crimedatabyrace1, random = ~ white|statename, method = "ML")
summary(m3_lme)
Linear mixed-effects model fit by maximum likelihood
 Data: crimedatabyrace1 
       AIC      BIC    logLik
  231549.7 231602.1 -115767.8

Random effects:
 Formula: ~white | statename
 Structure: General positive-definite, Log-Cholesky parametrization
            StdDev       Corr  
(Intercept) 9.105658e+02 (Intr)
white       4.388536e-04 0.007 
Residual    1.492466e+03       

Fixed effects: Arrestsrate_per100k ~ white + black 
               Value Std.Error    DF   t-value p-value
(Intercept) 3243.489 136.99458 13205 23.676037  0.0000
white          0.000   0.00014 13205  0.664813  0.5062
black          0.000   0.00038 13205 -0.589313  0.5557
 Correlation: 
      (Intr) white 
white -0.045       
black  0.015 -0.581

Standardized Within-Group Residuals:
       Min         Q1        Med         Q3        Max 
-3.2500378 -0.6334179 -0.1185085  0.5120136 10.6384636 

Number of Observations: 13253
Number of Groups: 46 
htmlreg(list(AR, m1_lme, m2_lme, m3_lme))
Statistical models
Model 1 Model 2 Model 3 Model 4
(Intercept) 3163.41*** 3245.79*** 3244.62*** 3243.49***
(16.34) (136.54) (136.91) (136.99)
white 0.00 -0.00 0.00 0.00
(0.00) (0.00) (0.00) (0.00)
black -0.00
(0.00)
R2 0.00
Adj. R2 -0.00
Num. obs. 13253 13253 13253 13253
RMSE 1744.39
AIC 231552.35 231548.00 231549.66
BIC 231582.32 231592.95 231602.10
Log Likelihood -115772.18 -115768.00 -115767.83
Num. groups 46 46 46
p < 0.001, p < 0.01, p < 0.05

Conclusion: As we can see the lowest AIC means best fit and in this report that is the random intercept model 3. In this report we see that race within states has very little effect on the average arrests rates per 100k population. However in the final model when we now took a look at the amount of blacks in a state we did see an increase in average arrests rates in that state. Through further analysis one will be able to measure average arrests rate by sex and other races.

LS0tCnRpdGxlOiAnKlNPQyA3MTIgSE9NRVdPUksgOC5CIFN0YXRlcyBBdmVyYWdlIEFycmVzdHMgUmF0ZXMqJwphdXRob3I6ICJSb2JlcnQgUGVyZXoiCmRhdGU6ICJBcHJpbCAybmQsIDIwMTgiCm91dHB1dDoKICBodG1sX25vdGVib29rOiBkZWZhdWx0CiAgaHRtbF9kb2N1bWVudDogZGVmYXVsdAotLS0KIyMjSW50cm9kdWN0aW9uIApBdmVyYWdlIGFycmVzdHMgcmF0ZXMgd2lsbCBhbHdheXMgYmUgaW4gcXVlc3Rpb24gYXMgcG9saXRpY3Mgc29tZXRpbWVzIGxpZSB0byB0aGUgcHVibGljIGFib3V0IGNlcnRhaW4gc3RhdGlzdGljcyBpbiBvcmRlciB0byBiZSBlbGVjdGVkIGZvciBhIGNlcnRhaW4gcG9zaXRpb24uIFRoaXMgYW5hbHlzaXMgaXMgY29uY2VybmVkIHdpdGggdGhlIHF1ZXN0aW9uIGFyb3VuZCB3aGV0aGVyIHRoZSBwZXJjZW50YWdlIG9mIHdoaXRlIHBlb3BsZSBpbiBhIHN0YXRlIGFmZmVjdCB0aGUgYXZlcmFnZSBhcnJlc3RzIHJhdGUgaW4gdGhhdCBzdGF0ZS4gQSBtdWx0aWxldmVsIG1ldGhvZCB3aWxsIGJlIHV0aWxpemVkIHRvIGZ1cnRoZXIgYW5hbHl6ZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcmFjZSBhbmQgYXJyZXN0cyByYXRlcyBhbmQgcG9zc2libGUgdmFyaWF0aW9ucyBhbW9uZ3N0IGFsbCA1MCBzdGF0ZXMsIHdobyBoYXZlIGEgbGFyZ2UgcG9wdWxhdGlvbiBvZiB3aGl0ZSByYWNlIG9yIG90aGVyIHJhY2UuIFRoZSBhbmFseXNpcyB3aWxsIGJlZ2luIHdpdGggYW4gZWNvbG9naWNhbCBhbmFseXNpcywgY29tcGxldGUgcG9vbGluZyBtb2RlbCwgYSBubyBwb29sIG1vZGVsaW5nLCBhbmQgY29uY2x1ZGUgd2l0aCBtdWx0aWxldmVsIG1vZGVsaW5nIHRvIHVsdGltYXRlbHkgZGV0ZXJtaW5lIHRoZSBiZXN0IGZpdC4KCiMjI01ldGhvZCAKClRvIGNvbmR1Y3QgdGhpcyBhbmFseXNpcywgdGhlIHByaW1hcnkgZGF0YSBvbiBjcmltZSBhdmVyYWdlIGFycmVzdHMgcmF0ZSBhbmQgdGhlIDIwMTQgcmFjZSBkaXNwYXJpdHkgaW4gZWFjaCBzdGF0ZSB3YXMgZXh0cmFjdGVkIGZyb20gU29jaWFsIEV4cGxvcmVyLiBUaGUgdHdvIGRhdGFzZXRzIHdlcmUgbWVyZ2VkIHRvIGNyZWF0ZSBhIGRhdGFzZXQgY2FsbGVkIENyaW1lZGF0YWJ5cmFjZS4gVGhlIHZhcmlhYmxlcyB1c2VkIGluIGFuYWx5c2lzIGFyZSBzdGF0ZW5hbWUsIGNvdW50eSwgQXJyZXN0c3JhdGVfcGVyMTAwaywgd2hpdGUsIGJsYWNrLCBuYXRpdmUsIGFzaWFuLCBwYWNpZmlzbGFuZCwgYW5kIG1peGVkIHJhY2UuIAoKYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmxpYnJhcnkobmxtZSkKbGlicmFyeShkcGx5cikKbGlicmFyeShtYWdyaXR0cikKbGlicmFyeSh0aWR5cikKbGlicmFyeShoYXZlbikKbGlicmFyeShsbWVyVGVzdCkKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KHRleHJlZykKbGlicmFyeShzdHJpbmdyKQpgYGAKIyNNZXJnaW5nIHRoZSBEYXRhc2V0cyAKYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9ClBvcHVsYXRpb25ieXJhY2UgPC0gcmVhZC5jc3YoIi9Vc2Vycy9yb2JlcnRwZXJlei9Eb2N1bWVudHMvUnN0dWRpbyBEYXRhU2V0cyAvcG9wdWxhdGlvbl9yYWNlXzIwMTQuY3N2IikKQ3JpbWVkYXRhIDwtIHJlYWQuY3N2KCIvVXNlcnMvcm9iZXJ0cGVyZXovRG9jdW1lbnRzL1JzdHVkaW8gRGF0YVNldHMgL2NyaW1lZGF0YS5jc3YiKQpjcmltZWRhdGFieXJhY2UgPC0gbWVyZ2UoUG9wdWxhdGlvbmJ5cmFjZSwgQ3JpbWVkYXRhLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGJ5LnggPSAiR2VvX05BTUUiLAogICAgICAgICAgICAgICAgICAgICAgICAgYnkueSA9ICJHZW9fTmFtZSIpCgojSXNvbGF0ZSB0aGUgU3RhdGUgTmFtZSBmcm9tIHRlaCBHZW9fUU5hbWUgdmFyaWFibGUKWDwtZGF0YS5mcmFtZShzdHJfbG9jYXRlKGNyaW1lZGF0YWJ5cmFjZSRHZW9fUU5hbWUsIkNvdW50eSwiKSkKWDI8LVglPiVzZWxlY3QoZW5kKQpjcmltZWRhdGFieXJhY2UkbG9jIDwtIFgyJGVuZApjcmltZWRhdGFieXJhY2UxPC1jcmltZWRhdGFieXJhY2UlPiUKICBtdXRhdGUoc3RhdGVuYW1lID0gc3Vic3RyKEdlb19RTmFtZSwgbG9jKzEsbGVuZ3RoKEdlb19RTmFtZSkpKQoKaGVhZChjcmltZWRhdGFieXJhY2UxKQpgYGAKIyMjTWFuaXB1bGF0aW5nIFRoZSBEYXRhCmBgYHtyfQpjcmltZWRhdGFieXJhY2UxIDwtIHJlbmFtZShjcmltZWRhdGFieXJhY2UxLCBjb3VudHkgPSBHZW9fTkFNRSwgQXJyZXN0c3JhdGVfcGVyMTAwayA9IFNFX1QwMTFfMDAxLAogICAgICAgICAgIHdoaXRlID0gU0VfVDAyMF8wMDIsCiAgICAgICAgICAgYmxhY2sgPSBTRV9UMDIwXzAwMywKICAgICAgICAgICBuYXRpdmUgPSBTRV9UMDIwXzAwNCwKICAgICAgICAgICBhc2lhbiA9IFNFX1QwMjBfMDA1LAogICAgICAgICAgIHBhY2lmaXNsYW5kPSBTRV9UMDIwXzAwNiwKICAgICAgICAgICBtaXhlZCA9IFNFX1QwMjBfMDA3KSU+JQogIHNlbGVjdChzdGF0ZW5hbWUsIGNvdW50eSwgQXJyZXN0c3JhdGVfcGVyMTAwaywgd2hpdGUsIGJsYWNrLCBuYXRpdmUsIGFzaWFuLCBwYWNpZmlzbGFuZCwgbWl4ZWQpCiAgaGVhZChjcmltZWRhdGFieXJhY2UxKQpwcmludChjcmltZWRhdGFieXJhY2UxKQoKY3JpbWVkYXRhYnlyYWNlMTwtbmEub21pdChjcmltZWRhdGFieXJhY2UxKQpoZWFkKGNyaW1lZGF0YWJ5cmFjZTEpCmBgYApMb29raW5nIGF0IHRoZSBNZWFucyAKYGBge3J9CiMjI01lYW5zLCBjb2xvciA9IHJlZAojIyMjTG9va2luZyBhdCBhYXZlcmFnZXMgZm9yIGVhY2ggc3RhdGUgYW5kIHJhY2UKY3JpbWVkYXRhYnlyYWNlMSU+JQogIGdyb3VwX2J5KHN0YXRlbmFtZSklPiUKICBzdW1tYXJpemUoQXJyZXN0c3JhdGVfcGVyMTAwayA9IG1lYW4oQXJyZXN0c3JhdGVfcGVyMTAwayksIHdoaXRlID0gbWVhbih3aGl0ZSksIGJsYWNrID0gbWVhbihibGFjaykpCmBgYAoKIyMjU3RhdGUgTGV2ZWwgQW5hbHlzaXMgRWNvbG9naWNhbCBNb2RlbAoKYGBge3J9CnN0YXRlbmFtZXMgPC0gY3JpbWVkYXRhYnlyYWNlMSAlPiUgCiAgZ3JvdXBfYnkoc3RhdGVuYW1lKSAlPiUgCiAgc3VtbWFyaXNlKEFycmVzdHNyYXRlX3BlcjEwMGsgPSBtZWFuKEFycmVzdHNyYXRlX3BlcjEwMGssIG5hLnJtID0gVFJVRSksIHdoaXRlID0gbWVhbihsb2cod2hpdGUpLCBuYS5ybSA9IFRSVUUpKQpoZWFkKHN0YXRlbmFtZXMpCmBgYAojIyNUaGUgZWNvbG9naWNhbCBBbmFseXNpcwpgYGB7cn0KZWNvcmVnIDwtIGxtKEFycmVzdHNyYXRlX3BlcjEwMGsgfiB3aGl0ZSwgZGF0YSA9IGNyaW1lZGF0YWJ5cmFjZTEpCnN1bW1hcnkoZWNvcmVnKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0YT1jcmltZWRhdGFieXJhY2UxLCBhZXMoeD1zdGF0ZW5hbWUsIHk9QXJyZXN0c3JhdGVfcGVyMTAwaykpKwogIGdlb21fY29sKGNvbG9yID0icmVkIiwgZmlsbCA9ICJibGFjayIpK2Nvb3JkX2ZsaXAoKQpgYGAKIyNSZWdyZXNzaW9uIE1vZGVsIENvbXBsZXRlIFBvb2xpbmcgCmBgYHtyfQpjcG9vbGluZzE8LSBsbShBcnJlc3RzcmF0ZV9wZXIxMDBrIH4gd2hpdGUsIGRhdGEgPSBjcmltZWRhdGFieXJhY2UxKQpzdW1tYXJ5KGNwb29saW5nMSkKYGBgCgpgYGB7cn0KQVJ3aGl0ZTwtIGxtKEFycmVzdHNyYXRlX3BlcjEwMGsgfiB3aGl0ZSArIGJsYWNrLCBkYXRhID0gY3JpbWVkYXRhYnlyYWNlMSkKc3VtbWFyeShBUndoaXRlKQpgYGAKIyMjSW50ZXJjZXB0IApXaGVuIGNvbnNpZGVyaW5nIHRoZSBpbnRlcmNlcHQgbW9kZWwsIHdoaWNoIHdhcyBhbiBpbmRpY2F0aW9uIG9mIHdoaXRlcyBhZmZlY3Qgb24gYXZlcmFnZSBhcnJlc3RzIHJhdGUgd2Ugc2VlIHRoYXQgbW9zdCBpbnRlcmNlcHRzIHJhbmdlIGJldHdlZW4gMTAwMCBhbmQgMzUwMCB3aGVyZSB0aGVyZSBpcyBsZXNzIHdoaXRlIHBlb3BsZSB0aGVyZSBzZWVtcyB0byBiZSBoaWdoZXIgYXZlcmFnZSBhcnJlc3RzIHJhdGVzLiAKYGBge3J9CmRjb2VmIDwtIGNyaW1lZGF0YWJ5cmFjZTEgJT4lIAogICAgZ3JvdXBfYnkoc3RhdGVuYW1lKSAlPiUgCiAgICBkbyhtb2QgPSBsbShBcnJlc3RzcmF0ZV9wZXIxMDBrIH4gd2hpdGUsIGRhdGEgPSAuKSkKY29lZiA8LSBkY29lZiAlPiUgZG8oZGF0YS5mcmFtZShpbnRjID0gY29lZiguJG1vZClbMV0pKQpnZ3Bsb3QoY29lZiwgYWVzKHggPSBpbnRjKSkgKyBnZW9tX2hpc3RvZ3JhbSgpCmBgYAoKIyMjU2xvcGUKT3VyIHNsb3BlIG1vZGVscyBzaG93IGEgY29uc2lzdGVudCBwb3NpdGl2ZSBpbXBhY3QsIHN1Z2dlc3RpbmcgdGhhdCB3aXRoIG1vcmUgd2hpdGUgcGVvcGxlIGluIGEgc3RhdGUgdGhlIGF2ZXJhZ2UgYXJyZXN0cyByYXRlIGNvbnRpbnVlcyB0byBkZWNyZWFzZS4gCmBgYHtyfQpkY29lZiA8LSBjcmltZWRhdGFieXJhY2UxICU+JSAKICAgIGdyb3VwX2J5KHN0YXRlbmFtZSkgJT4lIAogICAgZG8obW9kID0gbG0oQXJyZXN0c3JhdGVfcGVyMTAwayB+IHdoaXRlLCBkYXRhID0gLikpCmNvZWYgPC0gZGNvZWYgJT4lIGRvKGRhdGEuZnJhbWUoQXJyZXN0c3JhdGVfcGVyMTAwayA9IGNvZWYoLiRtb2QpWzJdKSkKZ2dwbG90KGNvZWYsIGFlcyh4ID0gQXJyZXN0c3JhdGVfcGVyMTAwaykpICsgZ2VvbV9oaXN0b2dyYW0oKQpgYGAKCiMjI1JhY2UgYW5kIEF2ZXJhZ2UgYXJyZXN0cyByYXRlIGJ5IHN0YXRlIC0gQSBSYW5kb20gSW50ZXJjZXB0IE1vZGVsCgpgYGB7cn0KbTFfbG1lIDwtIGxtZShBcnJlc3RzcmF0ZV9wZXIxMDBrIH4gd2hpdGUsIGRhdGEgPSBjcmltZWRhdGFieXJhY2UxLCByYW5kb20gPSB+MXxzdGF0ZW5hbWUsIG1ldGhvZCA9ICJNTCIpCnN1bW1hcnkobTFfbG1lKQpgYGAKIyMjI1JhY2UgYW5kIEF2ZXJhZ2UgQXJyZXN0cyBSYXRlcyBieSBTdGF0ZSAtIEEgUmFuZG9tIFNsb3BlIE1vZGVsIApgYGB7cn0KbTJfbG1lIDwtIGxtZShBcnJlc3RzcmF0ZV9wZXIxMDBrIH4gd2hpdGUsIGRhdGEgPSBjcmltZWRhdGFieXJhY2UxLCByYW5kb20gPSB+IHdoaXRlfHN0YXRlbmFtZSwgbWV0aG9kID0gIk1MIikKc3VtbWFyeShtMl9sbWUpCmBgYAojIyMjTW9kZWxzIFN1bW1hcnkgCldoZW4gYWNjb3VudCBmb3IgdGhlIHZhcmlhdGlvbiBiZXR3ZWVuIHN0YXRlcyB3ZSBjb250aW51ZSB0byBzZWUgdGhhdCB0aGVyZSBpcyBubyBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSByYWNlIGluIGEgc3RhdGUgYW5kIHRoZSBhdmVyYWdlIGFycmVzdHMgcmF0ZSBpbiBhIHN0YXRlLiAKCiMjI0ludHJvZHVjaW5nIENvdmFyaWF0ZSAtIFRoZSBFZmZlY3Qgb2YgQW5vdGhlciBSYWNlCgpUaGUgbW9kZWwgbWFpbnRhaW5zIGl0cyBzaWduaWZpY2FuY2UgaW4gcmVnYXJkcyB0byB3aGV0aGVyIHJhY2UgaW4gYSBzdGF0ZSBoYXMgYW4gYWZmZWN0IG9uIGF2ZXJhZ2UgYXJyZXN0cyByYXRlcy4gV2UgZG8gaG93ZXZlciBzZWUgYW4gaW5jcmVhc2UgaW4gYXZlcmFnZSBhcnJlc3RzIHJhdGUgd2hlbiBjb25zaWRlcmluZyB0aGUgYW1vdW50IG9mIGJsYWNrcyBpbiBhIHN0YXRlLgpgYGB7cn0KbTNfbG1lIDwtIGxtZShBcnJlc3RzcmF0ZV9wZXIxMDBrIH4gd2hpdGUgKyBibGFjaywgZGF0YSA9IGNyaW1lZGF0YWJ5cmFjZTEsIHJhbmRvbSA9IH4gd2hpdGV8c3RhdGVuYW1lLCBtZXRob2QgPSAiTUwiKQpzdW1tYXJ5KG0zX2xtZSkKYGBgCgpgYGB7ciwgcmVzdWx0cz0nYXNpcycsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9Cmh0bWxyZWcobGlzdChBUiwgbTFfbG1lLCBtMl9sbWUsIG0zX2xtZSkpCmBgYAoKQ29uY2x1c2lvbjogQXMgd2UgY2FuIHNlZSB0aGUgbG93ZXN0IEFJQyBtZWFucyBiZXN0IGZpdCBhbmQgaW4gdGhpcyByZXBvcnQgdGhhdCBpcyB0aGUgcmFuZG9tIGludGVyY2VwdCBtb2RlbCAzLiBJbiB0aGlzIHJlcG9ydCB3ZSBzZWUgdGhhdCByYWNlIHdpdGhpbiBzdGF0ZXMgaGFzIHZlcnkgbGl0dGxlIGVmZmVjdCBvbiB0aGUgYXZlcmFnZSBhcnJlc3RzIHJhdGVzIHBlciAxMDBrIHBvcHVsYXRpb24uIEhvd2V2ZXIgaW4gdGhlIGZpbmFsIG1vZGVsIHdoZW4gd2Ugbm93IHRvb2sgYSBsb29rIGF0IHRoZSBhbW91bnQgb2YgYmxhY2tzIGluIGEgc3RhdGUgd2UgZGlkIHNlZSBhbiBpbmNyZWFzZSBpbiBhdmVyYWdlIGFycmVzdHMgcmF0ZXMgaW4gdGhhdCBzdGF0ZS4gVGhyb3VnaCBmdXJ0aGVyIGFuYWx5c2lzIG9uZSB3aWxsIGJlIGFibGUgdG8gbWVhc3VyZSBhdmVyYWdlIGFycmVzdHMgcmF0ZSBieSBzZXggYW5kIG90aGVyIHJhY2VzLiAKCg==