Jennifer Ganeles
3/18/19

Probability of Supporting the Legalization of Marijuana Use By Age, Gender, and Race

Using last week’s dataset (2018 Political Survey from the Pew Research Center), this week’s homework explores public opinion on the legality of marijuana use. Data was used to see how variables such as age, gender (Male vs. Female), and race (White vs. Non-White) explain the likelihood of whether a person would support the legalization of marijuana use or not. Both gender and race variables were tested with age as a moderating variable.


Since marijuana use is most prevalent among men and young adults, it was hypothesized that those who are male would have a higher probability of supporting marijuana legalization than those who are female. It was also hypothesized that those who are younger would have a higher probablility of supporting marijuana legalization than those who are older. Due to the racial disparity in marijuana arrests, my final hypothesis was that non-whites would have a higher probability of wanting to legalize marijuana use when compared to whites.

Importing the Data and Removing Haven Labels:

library(haven)
politics<-read_sav("/Users/jenniferganeles/Downloads/Sept18 public.sav")
head(politics)
p<-sjlabelled::remove_all_labels(politics) 
head(p)

Tidying Up the Data:

My dependent variable was recoded as binary (Legal=1, Not Legal=0). Race was also recoded so that “Non-White” included Black, Hispanic/Latino, Asian, Native American, Pacific Islander, and Other.

library(dplyr)
library(magrittr)
marijuana<-
  filter(p, q79!=9, age!=99)%>%
  mutate(marijuana_binary=
           recode(q79, `1`=1,`2`=0),
         race=
           recode(racethn, '1'="White", '2'="Non-White", '3'="Non-White", '4'="Non-White", '5'= "Non-White", '6'="Non-White", '7'="Non-White", '9'="Non-White"),
         gender=
           recode(sex, '1'="Male", '2'="Female"))%>%
  select(gender, age, race, marijuana_binary)
head(marijuana)

Model 1: Gender and Age (No Interaction)

This model determines the log odds of supporting marijuana legalization by looking at the main effect of both age and gender. According to Model 1, an increase in age by one year decreases the log odds of supporting marijuana legalization by .02. Model 1 also shows that compared to females, males have a .27 increase in log odds for supporting marijuana legalization. In other words, males seem to have a higher likelihood of supporting marijuana legalization when compared to females. However, the older people get, the less likely they would support legalizing marijuana. These findings support my first two hypotheses.

model1<-glm(marijuana_binary~age+gender, family="binomial",data=marijuana)
summary(model1)

Call:
glm(formula = marijuana_binary ~ age + gender, family = "binomial", 
    data = marijuana)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.8423  -1.2647   0.7563   0.9929   1.4267  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept)  1.655683   0.182959   9.049  < 2e-16 ***
age         -0.023924   0.002961  -8.079 6.53e-16 ***
genderMale   0.269620   0.105286   2.561   0.0104 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 2172.3  on 1646  degrees of freedom
Residual deviance: 2091.5  on 1644  degrees of freedom
AIC: 2097.5

Number of Fisher Scoring iterations: 4

Model 2: Interaction Between Gender and Age

Model 2 includes an interaction between gender and age. Like the previous model suggested, an increase in age by one year decreases the log odds of supporting marijuana legalization by .017. As compared to females, males have a higher log odds of supporting marijuana legalization (.93). However, the effect of gender on wanting to legalize marijuana is smaller as age increases (-.012).

model2<-glm(marijuana_binary~gender*age, family="binomial",data=marijuana)
summary(model2)

Call:
glm(formula = marijuana_binary ~ gender * age, family = "binomial", 
    data = marijuana)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.9280  -1.2538   0.7484   1.0080   1.3782  

Coefficients:
                Estimate Std. Error z value Pr(>|z|)    
(Intercept)     1.290414   0.252515   5.110 3.22e-07 ***
genderMale      0.928753   0.341081   2.723  0.00647 ** 
age            -0.017386   0.004325  -4.020 5.82e-05 ***
genderMale:age -0.012064   0.005940  -2.031  0.04226 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 2172.3  on 1646  degrees of freedom
Residual deviance: 2087.4  on 1643  degrees of freedom
AIC: 2095.4

Number of Fisher Scoring iterations: 4

Gender and Age Interaction Plot

As shown below, the probability of wanting to legalize marijuana decreases for both genders as age increases and is greater for males than for females when age =0. However, the difference between males and females in supporting marijuana legalization decreases as age increases (probability of males supporting marijuana decreases more with age so females above the age of 75 have a slightly higher probability of supporting marijuana legalization than males).

library(interactions)
interact_plot(model2, pred = age, modx = gender)

Model 3: Adding Race as Another Independent Variable

Model 3 adds another variable, race, into the mix. According to Model 3, those who are white have an increased log odds of supporting marijuana legalization by .5 compared to those who are not white. This finding does not support my second hypothesis, as it suggests that people who are white are more likely to support legalizing marijuana than those who belong to other races. It is also important to note that the effect of gender on supporting marijuana legalization still decreases as age increases. However, with the addition of race, the statistical significance of this interaction has changed from p<.05 to p<.1.

model3<-glm(marijuana_binary~gender*age+race, family="binomial", data=marijuana)
summary(model3)

Call:
glm(formula = marijuana_binary ~ gender * age + race, family = "binomial", 
    data = marijuana)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.0292  -1.2370   0.7401   0.9882   1.4989  

Coefficients:
                Estimate Std. Error z value Pr(>|z|)    
(Intercept)     1.136579   0.256439   4.432 9.33e-06 ***
genderMale      0.861541   0.343365   2.509   0.0121 *  
age            -0.020972   0.004451  -4.712 2.45e-06 ***
raceWhite       0.500697   0.119300   4.197 2.71e-05 ***
genderMale:age -0.011061   0.005978  -1.850   0.0642 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 2172.3  on 1646  degrees of freedom
Residual deviance: 2069.7  on 1642  degrees of freedom
AIC: 2079.7

Number of Fisher Scoring iterations: 4

Model 4: Interaction Between Race and Age

Finally, Model 4 changes my interaction variables from gender and age to race and age. Similar to previous models, males have a higher log odds of supporting marijuana legalization when compared to females (.25), as do whites when compared to non-whites (1.18). Furthermore, an increase in age by one year decreases the log odds of supporting marijuana legalization by .02. However, the effect of race on supporting marijuana legalization decreases as age increases (-.013). All of these findings are statistically significant.

model4<-glm(marijuana_binary~gender+age*race, family="binomial", data=marijuana)
summary(model4)

Call:
glm(formula = marijuana_binary ~ gender + age * race, family = "binomial", 
    data = marijuana)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.0251  -1.2338   0.7176   0.9834   1.4768  

Coefficients:
               Estimate Std. Error z value Pr(>|z|)    
(Intercept)    1.044074   0.278457   3.749 0.000177 ***
genderMale     0.249739   0.106017   2.356 0.018490 *  
age           -0.017928   0.005410  -3.314 0.000921 ***
raceWhite      1.181612   0.353695   3.341 0.000835 ***
age:raceWhite -0.013327   0.006595  -2.021 0.043310 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 2172.3  on 1646  degrees of freedom
Residual deviance: 2069.1  on 1642  degrees of freedom
AIC: 2079.1

Number of Fisher Scoring iterations: 4

Race and Age Interaction Plot

As shown below, the probability of wanting to legalize marijuana decreases for both race categories as age increases and is greater for whites than for non-whites when age =0. However, as age increases, the difference between races in supporting marijuana legalization decreases (So as stated above, the effect of race on marijuana support is weaker as age increases)

library(interactions)
interact_plot(model4, pred = age, modx = race)

Comparing Model Fit

Likelihood Ratio Test:

In order to see which of the above 4 models fit best, a likelihood ratio test (lmtest) was conducted. According to the results below, Model 4 seems to be the best fit model.

lmtest::lrtest(model1, model2, model3, model4)
Likelihood ratio test

Model 1: marijuana_binary ~ age + gender
Model 2: marijuana_binary ~ gender * age
Model 3: marijuana_binary ~ gender * age + race
Model 4: marijuana_binary ~ gender + age * race
  #Df  LogLik Df   Chisq Pr(>Chisq)    
1   3 -1045.7                          
2   4 -1043.7  1  4.1219    0.04233 *  
3   5 -1034.9  1 17.6354  2.676e-05 ***
4   5 -1034.5  0  0.6335  < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Information Criteria

In order to confirm the above results and see which model fits best, both AIC and BIC were considered. With lower values indicating a better fit, Model 4 once again seems to be the best fit model.

library(texreg)
htmlreg(list(model1,model2,model3, model4),doctype=FALSE)
Statistical models
Model 1 Model 2 Model 3 Model 4
(Intercept) 1.66*** 1.29*** 1.14*** 1.04***
(0.18) (0.25) (0.26) (0.28)
age -0.02*** -0.02*** -0.02*** -0.02***
(0.00) (0.00) (0.00) (0.01)
genderMale 0.27* 0.93** 0.86* 0.25*
(0.11) (0.34) (0.34) (0.11)
genderMale:age -0.01* -0.01
(0.01) (0.01)
raceWhite 0.50*** 1.18***
(0.12) (0.35)
age:raceWhite -0.01*
(0.01)
AIC 2097.47 2095.35 2079.72 2079.08
BIC 2113.69 2116.98 2106.75 2106.12
Log Likelihood -1045.74 -1043.68 -1034.86 -1034.54
Deviance 2091.47 2087.35 2069.72 2069.08
Num. obs. 1647 1647 1647 1647
p < 0.001, p < 0.01, p < 0.05

Visreg Plotting

As shown below, those who are white have a higher probability of wanting to legalize marijuana than do those who are not white. As age increases, however, the difference between races in supporting marijuana legalization becomes smaller.

visreg(model4,"race", by = "age", scale="response")

The older people get, the lower the probability that they would support legalizing marijuana. However, this decrease in probability is greater for people who are white than for those who are not white.

visreg(model4,"age", by = "race", scale="response")

Results and Limitations

As Model 4 indicated, the probability of supporting marijuana legalization is higher for males and decreases as people get older. These results support my first two hypotheses. However, the probability of supporting marijuana legalization is higher for those who are white than for those who are not white, which opposes my final hypothesis regarding race. It is important to note, however, that the effect of race on the probability of supporting marijuana legalization decreases as age increases.


The clustering of several different races into one “non-white” category was a major limitation in this analysis. Though racial disparity in marijuana arrests is most pertinent to those who are black or hispanic, this analysis included all non-white races as a reference, including Asians, Native Americans, and Pacific Islanders. It would be interesting to retest these hypotheses without this limitation, focusing specifically on black and hispanic races as compared to whites.

LS0tCnRpdGxlOiAiU29jIDcxMjogSG9tZXdvcmsgNSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoqSmVubmlmZXIgR2FuZWxlcyoKPGJyLz4qMy8xOC8xOSoKCiNQcm9iYWJpbGl0eSBvZiBTdXBwb3J0aW5nIHRoZSBMZWdhbGl6YXRpb24gb2YgTWFyaWp1YW5hIFVzZSBCeSBBZ2UsIEdlbmRlciwgYW5kIFJhY2UgCgpVc2luZyBsYXN0IHdlZWsncyBkYXRhc2V0ICgyMDE4IFBvbGl0aWNhbCBTdXJ2ZXkgZnJvbSB0aGUgUGV3IFJlc2VhcmNoIENlbnRlciksIHRoaXMgd2VlaydzIGhvbWV3b3JrIGV4cGxvcmVzIHB1YmxpYyBvcGluaW9uIG9uIHRoZSBsZWdhbGl0eSBvZiBtYXJpanVhbmEgdXNlLiBEYXRhIHdhcyB1c2VkIHRvIHNlZSBob3cgdmFyaWFibGVzIHN1Y2ggYXMgYWdlLCBnZW5kZXIgKE1hbGUgdnMuIEZlbWFsZSksIGFuZCByYWNlIChXaGl0ZSB2cy4gTm9uLVdoaXRlKSBleHBsYWluIHRoZSBsaWtlbGlob29kIG9mIHdoZXRoZXIgYSBwZXJzb24gd291bGQgc3VwcG9ydCB0aGUgbGVnYWxpemF0aW9uIG9mIG1hcmlqdWFuYSB1c2Ugb3Igbm90LiBCb3RoIGdlbmRlciBhbmQgcmFjZSB2YXJpYWJsZXMgd2VyZSB0ZXN0ZWQgd2l0aCBhZ2UgYXMgYSBtb2RlcmF0aW5nIHZhcmlhYmxlLgoKCjxici8+U2luY2UgbWFyaWp1YW5hIHVzZSBpcyBbbW9zdCBwcmV2YWxlbnQgYW1vbmcgbWVuIGFuZCB5b3VuZyBhZHVsdHNdKGh0dHBzOi8vam91cm5hbHMucGxvcy5vcmcvcGxvc29uZS9hcnRpY2xlP2lkPTEwLjEzNzEvam91cm5hbC5wb25lLjAwNzY2MzUpLCBpdCB3YXMgaHlwb3RoZXNpemVkIHRoYXQgdGhvc2Ugd2hvIGFyZSBtYWxlIHdvdWxkIGhhdmUgYSBoaWdoZXIgcHJvYmFiaWxpdHkgb2Ygc3VwcG9ydGluZyBtYXJpanVhbmEgbGVnYWxpemF0aW9uIHRoYW4gdGhvc2Ugd2hvIGFyZSBmZW1hbGUuIEl0IHdhcyBhbHNvIGh5cG90aGVzaXplZCB0aGF0IHRob3NlIHdobyBhcmUgeW91bmdlciB3b3VsZCBoYXZlIGEgaGlnaGVyIHByb2JhYmxpbGl0eSBvZiBzdXBwb3J0aW5nIG1hcmlqdWFuYSBsZWdhbGl6YXRpb24gdGhhbiB0aG9zZSB3aG8gYXJlIG9sZGVyLiBEdWUgdG8gdGhlIFtyYWNpYWwgZGlzcGFyaXR5IGluIG1hcmlqdWFuYSBhcnJlc3RzXShodHRwczovL3d3dy5ueXRpbWVzLmNvbS8yMDE4LzA1LzEzL2luc2lkZXIvZGF0YS1tYXJpanVhbmEtYXJyZXN0cy1yYWNpYWwtZGlzcGFyaXR5Lmh0bWwpLCBteSBmaW5hbCBoeXBvdGhlc2lzIHdhcyB0aGF0IG5vbi13aGl0ZXMgd291bGQgaGF2ZSBhIGhpZ2hlciBwcm9iYWJpbGl0eSBvZiB3YW50aW5nIHRvIGxlZ2FsaXplIG1hcmlqdWFuYSB1c2Ugd2hlbiBjb21wYXJlZCB0byB3aGl0ZXMuCgoKIyMjSW1wb3J0aW5nIHRoZSBEYXRhIGFuZCBSZW1vdmluZyBIYXZlbiBMYWJlbHM6CmBgYHtyfQpsaWJyYXJ5KGhhdmVuKQpwb2xpdGljczwtcmVhZF9zYXYoIi9Vc2Vycy9qZW5uaWZlcmdhbmVsZXMvRG93bmxvYWRzL1NlcHQxOCBwdWJsaWMuc2F2IikKaGVhZChwb2xpdGljcykKcDwtc2psYWJlbGxlZDo6cmVtb3ZlX2FsbF9sYWJlbHMocG9saXRpY3MpIApoZWFkKHApCmBgYAojIyNUaWR5aW5nIFVwIHRoZSBEYXRhOgpNeSBkZXBlbmRlbnQgdmFyaWFibGUgd2FzIHJlY29kZWQgYXMgYmluYXJ5IChMZWdhbD0xLCBOb3QgTGVnYWw9MCkuIFJhY2Ugd2FzIGFsc28gcmVjb2RlZCBzbyB0aGF0ICJOb24tV2hpdGUiIGluY2x1ZGVkIEJsYWNrLCBIaXNwYW5pYy9MYXRpbm8sIEFzaWFuLCBOYXRpdmUgQW1lcmljYW4sIFBhY2lmaWMgSXNsYW5kZXIsIGFuZCBPdGhlci4KCmBgYHtyfQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KG1hZ3JpdHRyKQptYXJpanVhbmE8LQogIGZpbHRlcihwLCBxNzkhPTksIGFnZSE9OTkpJT4lCiAgbXV0YXRlKG1hcmlqdWFuYV9iaW5hcnk9CiAgICAgICAgICAgcmVjb2RlKHE3OSwgYDFgPTEsYDJgPTApLAogICAgICAgICByYWNlPQogICAgICAgICAgIHJlY29kZShyYWNldGhuLCAnMSc9IldoaXRlIiwgJzInPSJOb24tV2hpdGUiLCAnMyc9Ik5vbi1XaGl0ZSIsICc0Jz0iTm9uLVdoaXRlIiwgJzUnPSAiTm9uLVdoaXRlIiwgJzYnPSJOb24tV2hpdGUiLCAnNyc9Ik5vbi1XaGl0ZSIsICc5Jz0iTm9uLVdoaXRlIiksCiAgICAgICAgIGdlbmRlcj0KICAgICAgICAgICByZWNvZGUoc2V4LCAnMSc9Ik1hbGUiLCAnMic9IkZlbWFsZSIpKSU+JQogIHNlbGVjdChnZW5kZXIsIGFnZSwgcmFjZSwgbWFyaWp1YW5hX2JpbmFyeSkKaGVhZChtYXJpanVhbmEpCmBgYAoKIyNNb2RlbCAxOiBHZW5kZXIgYW5kIEFnZSAoTm8gSW50ZXJhY3Rpb24pIApUaGlzIG1vZGVsIGRldGVybWluZXMgdGhlIGxvZyBvZGRzIG9mIHN1cHBvcnRpbmcgbWFyaWp1YW5hIGxlZ2FsaXphdGlvbiBieSBsb29raW5nIGF0IHRoZSBtYWluIGVmZmVjdCBvZiBib3RoIGFnZSBhbmQgZ2VuZGVyLiBBY2NvcmRpbmcgdG8gTW9kZWwgMSwgYW4gaW5jcmVhc2UgaW4gYWdlIGJ5IG9uZSB5ZWFyIGRlY3JlYXNlcyB0aGUgbG9nIG9kZHMgb2Ygc3VwcG9ydGluZyBtYXJpanVhbmEgbGVnYWxpemF0aW9uIGJ5IC4wMi4gTW9kZWwgMSBhbHNvIHNob3dzIHRoYXQgY29tcGFyZWQgdG8gZmVtYWxlcywgbWFsZXMgaGF2ZSBhIC4yNyBpbmNyZWFzZSBpbiBsb2cgb2RkcyBmb3Igc3VwcG9ydGluZyBtYXJpanVhbmEgbGVnYWxpemF0aW9uLiBJbiBvdGhlciB3b3JkcywgbWFsZXMgc2VlbSB0byBoYXZlIGEgaGlnaGVyIGxpa2VsaWhvb2Qgb2Ygc3VwcG9ydGluZyBtYXJpanVhbmEgbGVnYWxpemF0aW9uIHdoZW4gY29tcGFyZWQgdG8gZmVtYWxlcy4gSG93ZXZlciwgdGhlIG9sZGVyIHBlb3BsZSBnZXQsIHRoZSBsZXNzIGxpa2VseSB0aGV5IHdvdWxkIHN1cHBvcnQgbGVnYWxpemluZyBtYXJpanVhbmEuICpUaGVzZSBmaW5kaW5ncyBzdXBwb3J0IG15IGZpcnN0IHR3byBoeXBvdGhlc2VzLioKYGBge3J9Cm1vZGVsMTwtZ2xtKG1hcmlqdWFuYV9iaW5hcnl+YWdlK2dlbmRlciwgZmFtaWx5PSJiaW5vbWlhbCIsZGF0YT1tYXJpanVhbmEpCnN1bW1hcnkobW9kZWwxKQpgYGAKIyNNb2RlbCAyOiBJbnRlcmFjdGlvbiBCZXR3ZWVuIEdlbmRlciBhbmQgQWdlCgpNb2RlbCAyIGluY2x1ZGVzIGFuIGludGVyYWN0aW9uIGJldHdlZW4gZ2VuZGVyIGFuZCBhZ2UuIExpa2UgdGhlIHByZXZpb3VzIG1vZGVsIHN1Z2dlc3RlZCwgYW4gaW5jcmVhc2UgaW4gYWdlIGJ5IG9uZSB5ZWFyIGRlY3JlYXNlcyB0aGUgbG9nIG9kZHMgb2Ygc3VwcG9ydGluZyBtYXJpanVhbmEgbGVnYWxpemF0aW9uIGJ5IC4wMTcuIEFzIGNvbXBhcmVkIHRvIGZlbWFsZXMsIG1hbGVzIGhhdmUgYSBoaWdoZXIgbG9nIG9kZHMgb2Ygc3VwcG9ydGluZyBtYXJpanVhbmEgbGVnYWxpemF0aW9uICguOTMpLiAgKipIb3dldmVyLCB0aGUgZWZmZWN0IG9mIGdlbmRlciBvbiB3YW50aW5nIHRvIGxlZ2FsaXplIG1hcmlqdWFuYSBpcyBzbWFsbGVyIGFzIGFnZSBpbmNyZWFzZXMgKC0uMDEyKS4qKiAKYGBge3J9Cm1vZGVsMjwtZ2xtKG1hcmlqdWFuYV9iaW5hcnl+Z2VuZGVyKmFnZSwgZmFtaWx5PSJiaW5vbWlhbCIsZGF0YT1tYXJpanVhbmEpCnN1bW1hcnkobW9kZWwyKQpgYGAKIyMjR2VuZGVyIGFuZCBBZ2UgSW50ZXJhY3Rpb24gUGxvdApBcyBzaG93biBiZWxvdywgdGhlIHByb2JhYmlsaXR5IG9mIHdhbnRpbmcgdG8gbGVnYWxpemUgbWFyaWp1YW5hIGRlY3JlYXNlcyBmb3IgYm90aCBnZW5kZXJzIGFzIGFnZSBpbmNyZWFzZXMgYW5kIGlzIGdyZWF0ZXIgZm9yIG1hbGVzIHRoYW4gZm9yIGZlbWFsZXMgd2hlbiBhZ2UgPTAuIEhvd2V2ZXIsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbWFsZXMgYW5kIGZlbWFsZXMgaW4gc3VwcG9ydGluZyBtYXJpanVhbmEgbGVnYWxpemF0aW9uIGRlY3JlYXNlcyBhcyBhZ2UgaW5jcmVhc2VzIChwcm9iYWJpbGl0eSBvZiBtYWxlcyBzdXBwb3J0aW5nIG1hcmlqdWFuYSBkZWNyZWFzZXMgbW9yZSB3aXRoIGFnZSBzbyBmZW1hbGVzIGFib3ZlIHRoZSBhZ2Ugb2YgNzUgaGF2ZSBhIHNsaWdodGx5IGhpZ2hlciBwcm9iYWJpbGl0eSBvZiBzdXBwb3J0aW5nIG1hcmlqdWFuYSBsZWdhbGl6YXRpb24gdGhhbiBtYWxlcykuCmBgYHtyfQpsaWJyYXJ5KGludGVyYWN0aW9ucykKaW50ZXJhY3RfcGxvdChtb2RlbDIsIHByZWQgPSBhZ2UsIG1vZHggPSBnZW5kZXIpCmBgYAoKIyNNb2RlbCAzOiBBZGRpbmcgUmFjZSBhcyBBbm90aGVyIEluZGVwZW5kZW50IFZhcmlhYmxlCk1vZGVsIDMgYWRkcyBhbm90aGVyIHZhcmlhYmxlLCByYWNlLCBpbnRvIHRoZSBtaXguIEFjY29yZGluZyB0byBNb2RlbCAzLCB0aG9zZSB3aG8gYXJlIHdoaXRlIGhhdmUgYW4gaW5jcmVhc2VkIGxvZyBvZGRzIG9mIHN1cHBvcnRpbmcgbWFyaWp1YW5hIGxlZ2FsaXphdGlvbiBieSAuNSBjb21wYXJlZCB0byB0aG9zZSB3aG8gYXJlIG5vdCB3aGl0ZS4gKlRoaXMgZmluZGluZyBkb2VzIG5vdCBzdXBwb3J0IG15IHNlY29uZCBoeXBvdGhlc2lzLCBhcyBpdCBzdWdnZXN0cyB0aGF0IHBlb3BsZSB3aG8gYXJlIHdoaXRlIGFyZSBtb3JlIGxpa2VseSB0byBzdXBwb3J0IGxlZ2FsaXppbmcgbWFyaWp1YW5hIHRoYW4gdGhvc2Ugd2hvIGJlbG9uZyB0byBvdGhlciByYWNlcy4qIEl0IGlzIGFsc28gaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgZWZmZWN0IG9mIGdlbmRlciBvbiBzdXBwb3J0aW5nIG1hcmlqdWFuYSBsZWdhbGl6YXRpb24gc3RpbGwgZGVjcmVhc2VzIGFzIGFnZSBpbmNyZWFzZXMuIEhvd2V2ZXIsIHdpdGggdGhlIGFkZGl0aW9uIG9mIHJhY2UsIHRoZSBzdGF0aXN0aWNhbCBzaWduaWZpY2FuY2Ugb2YgdGhpcyBpbnRlcmFjdGlvbiBoYXMgY2hhbmdlZCBmcm9tIHA8LjA1IHRvIHA8LjEuIApgYGB7cn0KbW9kZWwzPC1nbG0obWFyaWp1YW5hX2JpbmFyeX5nZW5kZXIqYWdlK3JhY2UsIGZhbWlseT0iYmlub21pYWwiLCBkYXRhPW1hcmlqdWFuYSkKc3VtbWFyeShtb2RlbDMpCmBgYAoKIyNNb2RlbCA0OiBJbnRlcmFjdGlvbiBCZXR3ZWVuIFJhY2UgYW5kIEFnZQpGaW5hbGx5LCBNb2RlbCA0IGNoYW5nZXMgbXkgaW50ZXJhY3Rpb24gdmFyaWFibGVzIGZyb20gZ2VuZGVyIGFuZCBhZ2UgdG8gcmFjZSBhbmQgYWdlLiBTaW1pbGFyIHRvIHByZXZpb3VzIG1vZGVscywgbWFsZXMgaGF2ZSBhIGhpZ2hlciBsb2cgb2RkcyBvZiBzdXBwb3J0aW5nIG1hcmlqdWFuYSBsZWdhbGl6YXRpb24gd2hlbiBjb21wYXJlZCB0byBmZW1hbGVzICguMjUpLCBhcyBkbyB3aGl0ZXMgd2hlbiBjb21wYXJlZCB0byBub24td2hpdGVzICgxLjE4KS4gRnVydGhlcm1vcmUsIGFuIGluY3JlYXNlIGluIGFnZSBieSBvbmUgeWVhciBkZWNyZWFzZXMgdGhlIGxvZyBvZGRzIG9mIHN1cHBvcnRpbmcgbWFyaWp1YW5hIGxlZ2FsaXphdGlvbiBieSAuMDIuICoqSG93ZXZlciwgdGhlIGVmZmVjdCBvZiByYWNlIG9uIHN1cHBvcnRpbmcgbWFyaWp1YW5hIGxlZ2FsaXphdGlvbiBkZWNyZWFzZXMgYXMgYWdlIGluY3JlYXNlcyAoLS4wMTMpLioqIEFsbCBvZiB0aGVzZSBmaW5kaW5ncyBhcmUgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudC4KYGBge3J9Cm1vZGVsNDwtZ2xtKG1hcmlqdWFuYV9iaW5hcnl+Z2VuZGVyK2FnZSpyYWNlLCBmYW1pbHk9ImJpbm9taWFsIiwgZGF0YT1tYXJpanVhbmEpCnN1bW1hcnkobW9kZWw0KQpgYGAKIyMjUmFjZSBhbmQgQWdlIEludGVyYWN0aW9uIFBsb3QKQXMgc2hvd24gYmVsb3csIHRoZSBwcm9iYWJpbGl0eSBvZiB3YW50aW5nIHRvIGxlZ2FsaXplIG1hcmlqdWFuYSBkZWNyZWFzZXMgZm9yIGJvdGggcmFjZSBjYXRlZ29yaWVzIGFzIGFnZSBpbmNyZWFzZXMgYW5kIGlzIGdyZWF0ZXIgZm9yIHdoaXRlcyB0aGFuIGZvciBub24td2hpdGVzIHdoZW4gYWdlID0wLiBIb3dldmVyLCBhcyBhZ2UgaW5jcmVhc2VzLCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHJhY2VzIGluIHN1cHBvcnRpbmcgbWFyaWp1YW5hIGxlZ2FsaXphdGlvbiBkZWNyZWFzZXMgKFNvIGFzIHN0YXRlZCBhYm92ZSwgdGhlIGVmZmVjdCBvZiByYWNlIG9uIG1hcmlqdWFuYSBzdXBwb3J0IGlzIHdlYWtlciBhcyBhZ2UgaW5jcmVhc2VzKQpgYGB7cn0KbGlicmFyeShpbnRlcmFjdGlvbnMpCmludGVyYWN0X3Bsb3QobW9kZWw0LCBwcmVkID0gYWdlLCBtb2R4ID0gcmFjZSkKYGBgCgojQ29tcGFyaW5nIE1vZGVsIEZpdAojIyNMaWtlbGlob29kIFJhdGlvIFRlc3Q6CgpJbiBvcmRlciB0byBzZWUgd2hpY2ggb2YgdGhlIGFib3ZlIDQgbW9kZWxzIGZpdCBiZXN0LCBhIGxpa2VsaWhvb2QgcmF0aW8gdGVzdCAobG10ZXN0KSB3YXMgY29uZHVjdGVkLiBBY2NvcmRpbmcgdG8gdGhlIHJlc3VsdHMgYmVsb3csIE1vZGVsIDQgc2VlbXMgdG8gYmUgdGhlIGJlc3QgZml0IG1vZGVsLgoKYGBge3J9CmxtdGVzdDo6bHJ0ZXN0KG1vZGVsMSwgbW9kZWwyLCBtb2RlbDMsIG1vZGVsNCkKYGBgCiMjI0luZm9ybWF0aW9uIENyaXRlcmlhCgpJbiBvcmRlciB0byBjb25maXJtIHRoZSBhYm92ZSByZXN1bHRzIGFuZCBzZWUgd2hpY2ggbW9kZWwgZml0cyBiZXN0LCBib3RoIEFJQyBhbmQgQklDIHdlcmUgY29uc2lkZXJlZC4gV2l0aCBsb3dlciB2YWx1ZXMgaW5kaWNhdGluZyBhIGJldHRlciBmaXQsIE1vZGVsIDQgb25jZSBhZ2FpbiBzZWVtcyB0byBiZSB0aGUgYmVzdCBmaXQgbW9kZWwuCgpgYGB7cixyZXN1bHRzPSdhc2lzJywgbWVzc2FnZT1GQUxTRX0KbGlicmFyeSh0ZXhyZWcpCmh0bWxyZWcobGlzdChtb2RlbDEsbW9kZWwyLG1vZGVsMywgbW9kZWw0KSxkb2N0eXBlPUZBTFNFKQpgYGAKCiMjVmlzcmVnIFBsb3R0aW5nCkFzIHNob3duIGJlbG93LCB0aG9zZSB3aG8gYXJlIHdoaXRlIGhhdmUgYSBoaWdoZXIgcHJvYmFiaWxpdHkgb2Ygd2FudGluZyB0byBsZWdhbGl6ZSBtYXJpanVhbmEgdGhhbiBkbyB0aG9zZSB3aG8gYXJlIG5vdCB3aGl0ZS4gQXMgYWdlIGluY3JlYXNlcywgaG93ZXZlciwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiByYWNlcyBpbiBzdXBwb3J0aW5nIG1hcmlqdWFuYSBsZWdhbGl6YXRpb24gYmVjb21lcyBzbWFsbGVyLgpgYGB7cn0KdmlzcmVnKG1vZGVsNCwicmFjZSIsIGJ5ID0gImFnZSIsIHNjYWxlPSJyZXNwb25zZSIpCmBgYApUaGUgb2xkZXIgcGVvcGxlIGdldCwgdGhlIGxvd2VyIHRoZSBwcm9iYWJpbGl0eSB0aGF0IHRoZXkgd291bGQgc3VwcG9ydCBsZWdhbGl6aW5nIG1hcmlqdWFuYS4gSG93ZXZlciwgdGhpcyBkZWNyZWFzZSBpbiBwcm9iYWJpbGl0eSBpcyBncmVhdGVyIGZvciBwZW9wbGUgd2hvIGFyZSB3aGl0ZSB0aGFuIGZvciB0aG9zZSB3aG8gYXJlIG5vdCB3aGl0ZS4gCmBgYHtyfQp2aXNyZWcobW9kZWw0LCJhZ2UiLCBieSA9ICJyYWNlIiwgc2NhbGU9InJlc3BvbnNlIikKYGBgCgojI1Jlc3VsdHMgYW5kIExpbWl0YXRpb25zCkFzIE1vZGVsIDQgaW5kaWNhdGVkLCB0aGUgcHJvYmFiaWxpdHkgb2Ygc3VwcG9ydGluZyBtYXJpanVhbmEgbGVnYWxpemF0aW9uIGlzIGhpZ2hlciBmb3IgbWFsZXMgYW5kIGRlY3JlYXNlcyBhcyBwZW9wbGUgZ2V0IG9sZGVyLiBUaGVzZSByZXN1bHRzIHN1cHBvcnQgbXkgZmlyc3QgdHdvIGh5cG90aGVzZXMuIEhvd2V2ZXIsIHRoZSBwcm9iYWJpbGl0eSBvZiBzdXBwb3J0aW5nIG1hcmlqdWFuYSBsZWdhbGl6YXRpb24gaXMgaGlnaGVyIGZvciB0aG9zZSB3aG8gYXJlIHdoaXRlIHRoYW4gZm9yIHRob3NlIHdobyBhcmUgbm90IHdoaXRlLCB3aGljaCBvcHBvc2VzIG15IGZpbmFsIGh5cG90aGVzaXMgcmVnYXJkaW5nIHJhY2UuIEl0IGlzIGltcG9ydGFudCB0byBub3RlLCBob3dldmVyLCB0aGF0IHRoZSBlZmZlY3Qgb2YgcmFjZSBvbiB0aGUgcHJvYmFiaWxpdHkgb2Ygc3VwcG9ydGluZyBtYXJpanVhbmEgbGVnYWxpemF0aW9uIGRlY3JlYXNlcyBhcyBhZ2UgaW5jcmVhc2VzLiAKCjxici8+IFRoZSBjbHVzdGVyaW5nIG9mIHNldmVyYWwgZGlmZmVyZW50IHJhY2VzIGludG8gb25lICJub24td2hpdGUiIGNhdGVnb3J5IHdhcyBhIG1ham9yIGxpbWl0YXRpb24gaW4gdGhpcyBhbmFseXNpcy4gVGhvdWdoIHJhY2lhbCBkaXNwYXJpdHkgaW4gbWFyaWp1YW5hIGFycmVzdHMgaXMgbW9zdCBwZXJ0aW5lbnQgdG8gdGhvc2Ugd2hvIGFyZSBibGFjayBvciBoaXNwYW5pYywgdGhpcyBhbmFseXNpcyBpbmNsdWRlZCBhbGwgbm9uLXdoaXRlIHJhY2VzIGFzIGEgcmVmZXJlbmNlLCBpbmNsdWRpbmcgQXNpYW5zLCBOYXRpdmUgQW1lcmljYW5zLCBhbmQgUGFjaWZpYyBJc2xhbmRlcnMuIEl0IHdvdWxkIGJlIGludGVyZXN0aW5nIHRvIHJldGVzdCB0aGVzZSBoeXBvdGhlc2VzIHdpdGhvdXQgdGhpcyBsaW1pdGF0aW9uLCBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gYmxhY2sgYW5kIGhpc3BhbmljIHJhY2VzIGFzIGNvbXBhcmVkIHRvIHdoaXRlcy4gCg==