Licença

This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.

License: CC BY-SA 4.0

License: CC BY-SA 4.0

Citação

Sugestão de citação: FIGUEIREDO, Adriano Marcos Rodrigues. Econometria: exercício Efeitos da Isenção de Impostos nas Taxas de Fertilidade. Campo Grande-MS,Brasil: RStudio/Rpubs, 2019. Disponível em http://www.rpubs.com/amrofi/ex_wooldridge_10_8_update.

1 Introdução - Primeiros passos

Os primeiros passos são criar ou abrir um diretório de trabalho. Se optar por criar um novo projeto, haverá a possibilidade de criar em uma pasta vazia. Os dados básicos estão no pacote wooldridge, dataset fertil3.

Example 10.4 Effects of Personal exemption on fertility rates. The general fertility rate (gfr) is the number of children born to every 1,000 women of childbearing age. For the years 1913 through 1984, the equation, \[ gfr_t= \beta _0 + \beta _1 pe_t +\beta _2 ww2_t + \beta _3 pill_t + \mu _t ,\] explains gfr in terms of the average real dollar value of the personal tax exemption (pe) and two binary variables. The variable ww2 takes on the value unity during the years 1941 through 1945, when the United States was involved in World War II. The variable pill is unity from 1963 onward, when the birth control pill was made available for contraception. Using the data in FERTIL3, which were taken from the article by Whittington, Alm, and Peters (1990).

library(dynlm)
library(stargazer)
data(fertil3, package = "wooldridge")

# exemplo 10.8 do livro do Wooldridge, Introdução a Econometria dados
# basicos de: Wooldridge Source: L.A. Whittington, J. Alm, and H.E. Peters
# (1990), “Fertility and the Personal Exemption: Implicit Pronatalist Policy
# in the United States,” American Economic Review 80, 545-556.

# data.frame with 72 observations on 24 variables:

# gfr: births per 1000 women 15-44 [tgf = taxa geral de fertilidade] pe:
# real value pers. exemption, $ [ip = valor real da taxa de isenção de
# impostos] year: 1913 to 1984 [ano] t: time trend, t=1,...,72 [tendencia]
# tsq: t^2 [tendencia ao quadrado] pill: =1 if year >= 1963 [pilula
# anticoncepcional] ww2: =1, 1941 to 1945 [world war dummy] tcu: t^3
# [tendencia cubica] cgfr: change in gfr: gfr - gfr_1 [mudanca na tx de
# fertilidade]

# Definir time series anual iniciando em 1913
attach(fertil3)
tsdata <- ts(fertil3, start = 1913)

O gráfico da variável dependente gfr (tgr - taxa geral de fertilidade) é:

require(fpp2)
autoplot(as.ts(gfr))

2 Resultados

2.1 Estimação

Vamos estimar o modelo linear múltipla fazendo a regressão inicial conforme o exemplo 10.4.

# Regressao Linear :
reg1 <- dynlm(gfr ~ pe + ww2 + pill, data = tsdata)
reg1$AIC <- AIC(reg1)  # Akaike
reg1$BIC <- BIC(reg1)  # Schwarz
stargazer(reg1, title = "Título: Resultado da Regressão OLS", align = TRUE, 
    type = "text", style = "all", keep.stat = c("AIC", "BIC", "rsq", "adj.rsq", 
        "n"))

Título: Resultado da Regressão OLS
===============================================
                        Dependent variable:    
                    ---------------------------
                                gfr            
-----------------------------------------------
pe                           0.083***          
                              (0.030)          
                             t = 2.784         
                             p = 0.007         
ww2                         -24.238***         
                              (7.458)          
                            t = -3.250         
                             p = 0.002         
pill                        -31.594***         
                              (4.081)          
                            t = -7.742         
                             p = 0.000         
Constant                     98.682***         
                              (3.208)          
                            t = 30.760         
                             p = 0.000         
-----------------------------------------------
Observations                    72             
R2                             0.473           
Adjusted R2                    0.450           
Akaike Inf. Crit.             597.115          
Bayesian Inf. Crit.           608.499          
===============================================
Note:               *p<0.1; **p<0.05; ***p<0.01

2.2 Regressão com tendência

São realizados dois procedimentos, um com a função trend(tsdata) e outro com a variável \(t\) construída previamente, de modo que o leitor verá que ambos resultam no mesmo resultado.

# Regressao exemplo 10.8 - incluindo tendencia
reg2 <- dynlm(gfr ~ pe + ww2 + pill + trend(tsdata), data = tsdata)
reg2.a <- dynlm(gfr ~ pe + ww2 + pill + t, data = tsdata)
reg2$AIC <- AIC(reg2)  # com tendencia 
reg2$BIC <- BIC(reg2)  # com tendencia 
reg2.a$AIC <- AIC(reg2.a)  # com tendencia 
reg2.a$BIC <- BIC(reg2.a)  # com tendencia 
stargazer(reg2, reg2.a, title = "Título: Resultados das Regressões OLS
          com tendência", 
    align = TRUE, type = "text", style = "all", keep.stat = c("AIC", "BIC", 
        "rsq", "adj.rsq", "n"))

Título: Resultados das Regressões OL
================================================
                        Dependent variable:     
                    ----------------------------
                                gfr             
                         (1)            (2)     
------------------------------------------------
pe                     0.279***      0.279***   
                       (0.040)        (0.040)   
                      t = 6.968      t = 6.968  
                      p = 0.000      p = 0.000  
ww2                   -35.592***    -35.592***  
                       (6.297)        (6.297)   
                      t = -5.652    t = -5.652  
                     p = 0.00000    p = 0.00000 
pill                    0.997          0.997    
                       (6.262)        (6.262)   
                      t = 0.159      t = 0.159  
                      p = 0.874      p = 0.874  
trend(tsdata)         -1.150***                 
                       (0.188)                  
                      t = -6.119                
                     p = 0.00000                
t                                    -1.150***  
                                      (0.188)   
                                    t = -6.119  
                                    p = 0.00000 
Constant              111.769***    111.769***  
                       (3.358)        (3.358)   
                      t = 33.287    t = 33.287  
                      p = 0.000      p = 0.000  
------------------------------------------------
Observations              72            72      
R2                      0.662          0.662    
Adjusted R2             0.642          0.642    
Akaike Inf. Crit.      567.148        567.148   
Bayesian Inf. Crit.    580.808        580.808   
================================================
Note:                *p<0.1; **p<0.05; ***p<0.01

2.3 Regressão com a tendência quadrática

reg3 <- dynlm(gfr ~ pe + ww2 + pill + t + I(t^2), data = tsdata)
reg3$AIC <- AIC(reg3)  # com tendencia quadratica
reg3$BIC <- BIC(reg3)  # com tendencia quadratica

2.4 Regressão com a tendência Cúbica

reg4 <- dynlm(gfr ~ pe + ww2 + pill + t + I(t^2) + tcu, data = tsdata)
reg4$AIC <- AIC(reg4)  # com tendencia cubica
reg4$BIC <- BIC(reg4)  # com tendencia cubica

Para a tabela, a função com tendência será a número (1 - reg2.a), a quadrática a (2 - reg3) e a cúbica a (3 - reg4).

# library(stargazer)
star.1 <- stargazer(reg2.a, reg3, reg4, title = "Título: Resultados das Regressões", 
    align = TRUE, type = "text", keep.stat = c("aic", "bic", "rsq", "adj.rsq", 
        "n"))

Título: Resultados das Regressões
====================================================
                          Dependent variable:       
                    --------------------------------
                                  gfr               
                       (1)        (2)        (3)    
----------------------------------------------------
pe                   0.279***   0.348***   0.162*** 
                     (0.040)    (0.040)    (0.041)  
                                                    
ww2                 -35.592*** -35.880*** -19.047***
                     (6.297)    (5.708)    (5.042)  
                                                    
pill                  0.997     -10.120   -25.010***
                     (6.262)    (6.336)    (5.346)  
                                                    
t                   -1.150***  -2.531***  -5.612*** 
                     (0.188)    (0.389)    (0.543)  
                                                    
I(t2)                           0.020***   0.155*** 
                                (0.005)    (0.020)  
                                                    
tcu                                       -0.001*** 
                                           (0.0002) 
                                                    
Constant            111.769*** 124.092*** 142.795***
                     (3.358)    (4.361)    (4.338)  
                                                    
----------------------------------------------------
Observations            72         72         72    
R2                    0.662      0.727      0.840   
Adjusted R2           0.642      0.706      0.826   
Akaike Inf. Crit.    567.148    553.901    517.138  
Bayesian Inf. Crit.  580.808    569.838    535.351  
====================================================
Note:                    *p<0.1; **p<0.05; ***p<0.01

É possível observar que a expressão cúbica, (3), foi a de maiores valores de \(R^2\), \(R^2\) ajustado, e menores valores de Akaike (AIC) e Schwarz (Bayesian - BIC). Desta forma, a princípio, esta é a melhor expressão.

3 Testes de violação de pressupostos clássicos da regressão

Faremos a investigação apenas para o melhor modelo, que conforme a última tabela, é o da função cúbica, (3), que na modelagem é o objeto reg4.

3.1 Especificação do modelo: RESET

library(lmtest)
resettest(reg4, power = 2:3, type = "fitted")

    RESET test

data:  reg4
RESET = 21.721, df1 = 2, df2 = 63, p-value = 6.687e-08

O teste RESET conclui pela rejeição de que as variáveis dependentes estimadas ao quadrado e ao cubo tenham coeficientes nulos, com probabilidade do teste de 6.687e-08. Desta forma, acusa que ainda existe algum problema de especificação.

3.1.1 Investigação de outliers

O teste para outliers foi o Bonferonni do pacote car. Conforme resultado abaixo, não foi identificado outlier da regressão.

library(car)
outlierTest(reg4)
No Studentized residuals with Bonferroni p < 0.05
Largest |rstudent|:
     rstudent unadjusted p-value Bonferroni p
1963 2.403918           0.019127           NA

3.2 Média zero e normalidade dos resíduos

# obtendo residuos do modelo da tendencia cúbica
u.hat <- resid(reg4)

# teste de media zero dos residuos
t.test(u.hat)

    One Sample t-test

data:  u.hat
t = -4.0193e-16, df = 71, p-value = 1
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
 -1.858849  1.858849
sample estimates:
    mean of x 
-3.747003e-16 
hist.reg4 <- hist(u.hat, freq = FALSE)
curve(dnorm, add = TRUE, col = "red")

split.screen(c(2, 2))
[1] 1 2 3 4
screen(1)
reg4.plot1 <- plot(reg4, which = 1)

screen(2)
reg4.plot2 <- plot(reg4, which = 2)

screen(3)
reg4.plot3 <- plot(reg4, which = 3)

screen(4)
reg4.plot4 <- plot(reg4, which = 4)

close.screen(all = TRUE)  # exit split-screen mode

# testes dos residuos da regressao cubica
library(car)
residualPlots(reg4)

## normalidade dos residuos no R
qqPlot(reg4)  #car

1963 1964 
  51   52 
# teste de jarque-bera para normalidade

JB.reg4 <- tseries::jarque.bera.test(u.hat)
JB.reg4

    Jarque Bera Test

data:  u.hat
X-squared = 1.6922, df = 2, p-value = 0.4291

É possível concluir pela inexistência de outliers (o teste Bonferonni feito acima), a média dos resíduos é zero, e os eventuais outliers apontados no Q-Q plot anterior evidencia que os valores estão dentro dos limites tracejados, podendo concluir pela normalidade dos resíduos no gráfico e também no teste Jarque-Bera, cuja probabilidade do teste foi de 0.42, portanto, não podendo rejeitar H0 de que os resíduos têm distribuição normal.

3.2.1 Outros testes de normalidade

# outros testes de normalidade
library(nortest)
# Testes
t1.2 <- ks.test(u.hat, "pnorm", mean(u.hat), summary(reg4)$sigma)  # KS
t2.2 <- lillie.test(u.hat)  # Lilliefors
t3.2 <- cvm.test(u.hat)  # Cramér-von Mises
t4.2 <- shapiro.test(u.hat)  # Shapiro-Wilk
t5.2 <- sf.test(u.hat)  # Shapiro-Francia
t6.2 <- ad.test(u.hat)  # Anderson-Darling
# Tabela de resultados
testes <- c(t1.2$method, t2.2$method, t3.2$method, t4.2$method, t5.2$method, 
    t6.2$method)
estt <- as.numeric(c(t1.2$statistic, t2.2$statistic, t3.2$statistic, t4.2$statistic, 
    t5.2$statistic, t6.2$statistic))
valorp <- c(t1.2$p.value, t2.2$p.value, t3.2$p.value, t4.2$p.value, t5.2$p.value, 
    t6.2$p.value)
resultados <- cbind(estt, valorp)
rownames(resultados) <- testes
colnames(resultados) <- c("Estatística", "valor-prob")
# print(resultados, digits = 4)
knitr::kable(resultados, digits = 4)
Estatística valor-prob
One-sample Kolmogorov-Smirnov test 0.0565 0.9656
Lilliefors (Kolmogorov-Smirnov) normality test 0.0671 0.5862
Cramer-von Mises normality test 0.0552 0.4320
Shapiro-Wilk normality test 0.9762 0.1900
Shapiro-Francia normality test 0.9818 0.3252
Anderson-Darling normality test 0.4327 0.2958
LS0tDQp0aXRsZTogIkVjb25vbWV0cmlhOiBleGVyY8OtY2lvIEVmZWl0b3MgZGEgSXNlbsOnw6NvIGRlIEltcG9zdG9zIG5hcyBUYXhhcyBkZSBGZXJ0aWxpZGFkZSINCmF1dGhvcjogIkFkcmlhbm8gTWFyY29zIFJvZHJpZ3VlcyBGaWd1ZWlyZWRvIg0KZS1tYWlsOiAiYWRyaWFuby5maWd1ZWlyZWRvQHVmbXMuYnIiDQphYnN0cmFjdDogDQogIFdlIGFuYWx5c2Ugc3BlY2lmaWNhdGlvbnMgb2YgZHVtbXkgYW5kIHRyZW5kIHZhcmlhYmxlcyB0byB0aGUgV29vbGRyaWRnZSdzIGV4YW1wbGVzIDEwLjQgYW5kIDEwLjguIFRoaXMgaXMgYW4gZXhlcmNpc2UgdXNpbmcgYSBsaW5lYXIgbXVsdGlwbGUgcmVncmVzc2lvbi4gDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclZCAlQiAlWScpYCINCmJpYmxpb2dyYXBoeTogbXliaWJmaWxlLmJpYg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICB0aGVtZTogZGVmYXVsdA0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0OiB5ZXMNCiAgICBkZl9wcmludDogcGFnZWQNCiAgICBmaWdfY2FwdGlvbjogdHJ1ZQ0KICBwZGZfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCi0tLQ0KYGBge3Iga25pdHJfaW5pdCwgZWNobz1GQUxTRSwgY2FjaGU9RkFMU0V9DQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShybWFya2Rvd24pDQpsaWJyYXJ5KHJtZGZvcm1hdHMpDQoNCiMjIEdsb2JhbCBvcHRpb25zDQpvcHRpb25zKG1heC5wcmludD0iMTAwIikNCm9wdHNfY2h1bmskc2V0KGVjaG89VFJVRSwNCgkgICAgICAgICAgICAgY2FjaGU9VFJVRSwNCiAgICAgICAgICAgICAgIHByb21wdD1GQUxTRSwNCiAgICAgICAgICAgICAgIHRpZHk9VFJVRSwNCiAgICAgICAgICAgICAgIGNvbW1lbnQ9TkEsDQogICAgICAgICAgICAgICBtZXNzYWdlPUZBTFNFLA0KICAgICAgICAgICAgICAgd2FybmluZz1GQUxTRSkNCm9wdHNfa25pdCRzZXQod2lkdGg9MTAwKQ0KYGBgDQoNCg0KTGljZW7Dp2Egey0jTGljZW7Dp2F9DQo9PT09PT09PT09PT09PT09PT09DQoNClRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2UuIFRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgbGljZW5zZSwgdmlzaXQgPGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC8+IG9yIHNlbmQgYSBsZXR0ZXIgdG8gQ3JlYXRpdmUgQ29tbW9ucywgUE8gQm94IDE4NjYsIE1vdW50YWluIFZpZXcsIENBIDk0MDQyLCBVU0EuDQoNCiFbTGljZW5zZTogQ0MgQlktU0EgNC4wXShodHRwczovL21pcnJvcnMuY3JlYXRpdmVjb21tb25zLm9yZy9wcmVzc2tpdC9idXR0b25zLzg4eDMxL3BuZy9ieS1zYS5wbmcpeyB3aWR0aD0yNSUgfQ0KDQpDaXRhw6fDo28gey0jQ2l0YcOnw6NvfQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KU3VnZXN0w6NvIGRlIGNpdGHDp8OjbzoNCkZJR1VFSVJFRE8sIEFkcmlhbm8gTWFyY29zIFJvZHJpZ3Vlcy4gRWNvbm9tZXRyaWE6IGV4ZXJjw61jaW8gRWZlaXRvcyBkYSBJc2Vuw6fDo28gZGUgSW1wb3N0b3MgbmFzIFRheGFzIGRlIEZlcnRpbGlkYWRlLiBDYW1wbyBHcmFuZGUtTVMsQnJhc2lsOiBSU3R1ZGlvL1JwdWJzLCAyMDE5LiBEaXNwb27DrXZlbCBlbSA8aHR0cDovL3d3dy5ycHVicy5jb20vYW1yb2ZpL2V4X3dvb2xkcmlkZ2VfMTBfOF91cGRhdGU+LiANCg0KDQpJbnRyb2R1w6fDo28gLSBQcmltZWlyb3MgcGFzc29zDQo9PT09PT09PT09PT09PT09PT09DQoNCg0KT3MgcHJpbWVpcm9zIHBhc3NvcyBzw6NvIGNyaWFyIG91IGFicmlyIHVtIGRpcmV0w7NyaW8gZGUgdHJhYmFsaG8uIFNlIG9wdGFyIHBvciBjcmlhciB1bSBub3ZvIHByb2pldG8sIGhhdmVyw6EgYSBwb3NzaWJpbGlkYWRlIGRlIGNyaWFyIGVtIHVtYSBwYXN0YSB2YXppYS4gT3MgZGFkb3MgYsOhc2ljb3MgZXN0w6NvIG5vIHBhY290ZSBgd29vbGRyaWRnZWAsIGRhdGFzZXQgYGZlcnRpbDNgLg0KDQo+IEV4YW1wbGUgMTAuNCAgRWZmZWN0cyBvZiBQZXJzb25hbCBleGVtcHRpb24gb24gZmVydGlsaXR5IHJhdGVzLiBUaGUgZ2VuZXJhbCBmZXJ0aWxpdHkgcmF0ZSAoZ2ZyKSBpcyB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGJvcm4gdG8gZXZlcnkgMSwwMDAgd29tZW4gb2YgY2hpbGRiZWFyaW5nIGFnZS4gRm9yIHRoZSB5ZWFycyAxOTEzIHRocm91Z2ggMTk4NCwgdGhlIGVxdWF0aW9uLA0KJCQgZ2ZyX3Q9IFxiZXRhIF8wICsgXGJldGEgXzEgcGVfdCArXGJldGEgXzIgd3cyX3QgKyBcYmV0YSBfMyBwaWxsX3QgKyBcbXUgX3QgLCQkDQpleHBsYWlucyBnZnIgaW4gdGVybXMgb2YgdGhlIGF2ZXJhZ2UgcmVhbCBkb2xsYXIgdmFsdWUgb2YgdGhlIHBlcnNvbmFsIHRheCBleGVtcHRpb24gKHBlKSBhbmQgdHdvIGJpbmFyeSB2YXJpYWJsZXMuIFRoZSB2YXJpYWJsZSB3dzIgdGFrZXMgb24gdGhlIHZhbHVlIHVuaXR5IGR1cmluZyB0aGUgeWVhcnMgMTk0MSB0aHJvdWdoIDE5NDUsIHdoZW4gdGhlIFVuaXRlZCBTdGF0ZXMgd2FzIGludm9sdmVkIGluIFdvcmxkIFdhciBJSS4gVGhlIHZhcmlhYmxlIHBpbGwgaXMgdW5pdHkgZnJvbSAxOTYzIG9ud2FyZCwgd2hlbiB0aGUgYmlydGggY29udHJvbCBwaWxsIHdhcyBtYWRlIGF2YWlsYWJsZSBmb3IgY29udHJhY2VwdGlvbi4gVXNpbmcgdGhlIGRhdGEgaW4gRkVSVElMMywgd2hpY2ggd2VyZSB0YWtlbiBmcm9tIHRoZSBhcnRpY2xlIGJ5IFdoaXR0aW5ndG9uLCBBbG0sIGFuZCBQZXRlcnMgKDE5OTApLg0KDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KIyBpbmNsdWRlIHRoaXMgY29kZSBjaHVuayBhcy1pcyB0byBzZXQgb3B0aW9ucw0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGNvbW1lbnQ9TkEsIHByb21wdD1UUlVFLCBvdXQud2lkdGg9NzUwLCBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD04KQ0KYGBgDQoNCmBgYHtyLCBldmFsPVRSVUUsIG1lc3NhZ2U9Riwgd2FybmluZz1GfQ0KbGlicmFyeShkeW5sbSk7bGlicmFyeShzdGFyZ2F6ZXIpDQpkYXRhKGZlcnRpbDMsIHBhY2thZ2U9J3dvb2xkcmlkZ2UnKQ0KDQojIGV4ZW1wbG8gMTAuOCBkbyBsaXZybyBkbyBXb29sZHJpZGdlLCBJbnRyb2R1w6fDo28gYSBFY29ub21ldHJpYQ0KIyBkYWRvcyBiYXNpY29zIGRlOiANCiMgV29vbGRyaWRnZSBTb3VyY2U6IEwuQS4gV2hpdHRpbmd0b24sIEouIEFsbSwgYW5kIEguRS4gUGV0ZXJzICgxOTkwKSwgDQojIOKAnEZlcnRpbGl0eSBhbmQgdGhlIFBlcnNvbmFsIEV4ZW1wdGlvbjogSW1wbGljaXQgUHJvbmF0YWxpc3QgUG9saWN5IGluDQojIHRoZSBVbml0ZWQgU3RhdGVzLOKAnSBBbWVyaWNhbiBFY29ub21pYyBSZXZpZXcgODAsIDU0NS01NTYuDQoNCiMgZGF0YS5mcmFtZSB3aXRoIDcyIG9ic2VydmF0aW9ucyBvbiAyNCB2YXJpYWJsZXM6DQogIA0KIyBnZnI6IGJpcnRocyBwZXIgMTAwMCB3b21lbiAxNS00NCANCiMgICAgICBbdGdmID0gdGF4YSBnZXJhbCBkZSBmZXJ0aWxpZGFkZV0NCiMgcGU6IHJlYWwgdmFsdWUgcGVycy4gZXhlbXB0aW9uLCAkIA0KIyAgICAgIFtpcCA9IHZhbG9yIHJlYWwgZGEgdGF4YSBkZSBpc2Vuw6fDo28gZGUgaW1wb3N0b3NdDQojIHllYXI6IDE5MTMgdG8gMTk4NCAgIFthbm9dDQojIHQ6IHRpbWUgdHJlbmQsIHQ9MSwuLi4sNzIgICBbdGVuZGVuY2lhXQ0KIyB0c3E6IHReMiAgICBbdGVuZGVuY2lhIGFvIHF1YWRyYWRvXQ0KIyBwaWxsOiA9MSBpZiB5ZWFyID49IDE5NjMgICAgDQojICAgICAgW3BpbHVsYSBhbnRpY29uY2VwY2lvbmFsXQ0KIyB3dzI6ID0xLCAxOTQxIHRvIDE5NDUgIFt3b3JsZCB3YXIgZHVtbXldDQojIHRjdTogdF4zICAgIFt0ZW5kZW5jaWEgY3ViaWNhXQ0KIyBjZ2ZyOiBjaGFuZ2UgaW4gZ2ZyOiBnZnIgLSBnZnJfMSAgICANCiMgICAgICBbbXVkYW5jYSBuYSB0eCBkZSBmZXJ0aWxpZGFkZV0NCg0KIyBEZWZpbmlyIHRpbWUgc2VyaWVzIGFudWFsIGluaWNpYW5kbyBlbSAxOTEzDQphdHRhY2goZmVydGlsMykNCnRzZGF0YSA8LSB0cyhmZXJ0aWwzLCBzdGFydD0xOTEzKQ0KYGBgDQoNCk8gZ3LDoWZpY28gZGEgdmFyacOhdmVsIGRlcGVuZGVudGUgZ2ZyICh0Z3IgLSB0YXhhIGdlcmFsIGRlIGZlcnRpbGlkYWRlKSDDqToNCg0KYGBge3IsIG1lc3NhZ2U9Riwgd2FybmluZz1GfQ0KcmVxdWlyZShmcHAyKQ0KYXV0b3Bsb3QoYXMudHMoZ2ZyKSkNCmBgYA0KDQojIFJlc3VsdGFkb3MgDQoNCiMjIEVzdGltYcOnw6NvDQoNClZhbW9zIGVzdGltYXIgbyBtb2RlbG8gbGluZWFyIG3Dumx0aXBsYSBmYXplbmRvIGEgcmVncmVzc8OjbyBpbmljaWFsIGNvbmZvcm1lIG8gZXhlbXBsbyAxMC40Lg0KDQpgYGB7ciB9DQojIFJlZ3Jlc3NhbyBMaW5lYXIgOg0KcmVnMSA8LSBkeW5sbShnZnIgfiBwZSt3dzIrcGlsbCwgZGF0YT10c2RhdGEpDQpyZWcxJEFJQyA8LSBBSUMocmVnMSkgICMgQWthaWtlDQpyZWcxJEJJQyA8LSBCSUMocmVnMSkgICMgU2Nod2Fyeg0Kc3RhcmdhemVyKHJlZzEsDQogICAgICAgICAgdGl0bGUgPSAiVMOtdHVsbzogUmVzdWx0YWRvIGRhIFJlZ3Jlc3PDo28gT0xTIiwgDQogICAgICAgICAgYWxpZ24gPSBUUlVFLCB0eXBlID0gInRleHQiLCANCiAgICAgICAgICBzdHlsZSA9ICJhbGwiLCANCiAgICAgICAgICBrZWVwLnN0YXQgPSBjKCJBSUMiLCAiQklDIiwgInJzcSIsICJhZGoucnNxIiwgIm4iKSkNCmBgYA0KDQojIyBSZWdyZXNzw6NvIGNvbSB0ZW5kw6puY2lhDQoNClPDo28gcmVhbGl6YWRvcyBkb2lzIHByb2NlZGltZW50b3MsIHVtIGNvbSBhIGZ1bsOnw6NvIGB0cmVuZCh0c2RhdGEpYCBlIG91dHJvIGNvbSBhIHZhcmnDoXZlbCAkdCQgY29uc3RydcOtZGEgcHJldmlhbWVudGUsIGRlIG1vZG8gcXVlIG8gbGVpdG9yIHZlcsOhIHF1ZSBhbWJvcyByZXN1bHRhbSBubyBtZXNtbyByZXN1bHRhZG8uICAgIA0KDQpgYGB7cn0NCiMgUmVncmVzc2FvIGV4ZW1wbG8gMTAuOCAtIGluY2x1aW5kbyB0ZW5kZW5jaWENCnJlZzIgPC0gZHlubG0oZ2ZyIH4gcGUgKyB3dzIgKyBwaWxsICsgdHJlbmQodHNkYXRhKSwgZGF0YT10c2RhdGEpDQpyZWcyLmE8LWR5bmxtKGdmciB+IHBlICsgd3cyICsgcGlsbCArIHQsIGRhdGE9dHNkYXRhKQ0KcmVnMiRBSUMgPC0gQUlDKHJlZzIpICAjIGNvbSB0ZW5kZW5jaWEgDQpyZWcyJEJJQyA8LSBCSUMocmVnMikgICMgY29tIHRlbmRlbmNpYSANCnJlZzIuYSRBSUMgPC0gQUlDKHJlZzIuYSkgICMgY29tIHRlbmRlbmNpYSANCnJlZzIuYSRCSUMgPC0gQklDKHJlZzIuYSkgICMgY29tIHRlbmRlbmNpYSANCnN0YXJnYXplcihyZWcyLHJlZzIuYSwNCiAgICAgICAgICB0aXRsZSA9ICJUw610dWxvOiBSZXN1bHRhZG9zIGRhcyBSZWdyZXNzw7VlcyBPTFMNCiAgICAgICAgICBjb20gdGVuZMOqbmNpYSIsIA0KICAgICAgICAgIGFsaWduID0gVFJVRSwgdHlwZSA9ICJ0ZXh0IiwgDQogICAgICAgICAgc3R5bGUgPSAiYWxsIiwgDQogICAgICAgICAga2VlcC5zdGF0ID0gYygiQUlDIiwgIkJJQyIsICJyc3EiLCAiYWRqLnJzcSIsICJuIikpDQpgYGANCg0KDQojIyBSZWdyZXNzw6NvIGNvbSBhIHRlbmTDqm5jaWEgcXVhZHLDoXRpY2EgDQoNCmBgYHtyfQ0KcmVnMzwtIGR5bmxtKGdmciB+IHBlICsgd3cyICsgcGlsbCArIA0KICAgICAgICAgICAgICAgICAgICAgIHQrSSh0XjIpLCBkYXRhPXRzZGF0YSkNCnJlZzMkQUlDIDwtIEFJQyhyZWczKSAgICAjIGNvbSB0ZW5kZW5jaWEgcXVhZHJhdGljYQ0KcmVnMyRCSUMgPC0gQklDKHJlZzMpICAgICMgY29tIHRlbmRlbmNpYSBxdWFkcmF0aWNhDQpgYGANCg0KIyMgUmVncmVzc8OjbyBjb20gYSB0ZW5kw6puY2lhIEPDumJpY2EgDQoNCmBgYHtyfQ0KcmVnNDwtIGR5bmxtKGdmciB+IHBlICsgd3cyICsgcGlsbCArIA0KICAgICAgICAgICAgICAgdCtJKHReMikrdGN1LCBkYXRhPXRzZGF0YSkNCnJlZzQkQUlDIDwtIEFJQyhyZWc0KSAgICAjIGNvbSB0ZW5kZW5jaWEgY3ViaWNhDQpyZWc0JEJJQyA8LSBCSUMocmVnNCkgICAgIyBjb20gdGVuZGVuY2lhIGN1YmljYQ0KYGBgDQoNClBhcmEgYSB0YWJlbGEsIGEgZnVuw6fDo28gY29tIHRlbmTDqm5jaWEgc2Vyw6EgYSBuw7ptZXJvICgxIC0gcmVnMi5hKSwgYSBxdWFkcsOhdGljYSBhICgyIC0gcmVnMykgZSBhIGPDumJpY2EgYSAoMyAtIHJlZzQpLg0KDQpgYGB7cn0NCiNsaWJyYXJ5KHN0YXJnYXplcikNCnN0YXIuMSA8LSBzdGFyZ2F6ZXIocmVnMi5hLHJlZzMscmVnNCwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGU9IlTDrXR1bG86IFJlc3VsdGFkb3MgZGFzIFJlZ3Jlc3PDtWVzIiwNCiAgICAgICAgICAgICAgICAgICAgYWxpZ249VFJVRSwNCiAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJ0ZXh0IiwNCiAgICAgICAgICAgICAgICAgICAga2VlcC5zdGF0PWMoImFpYyIsImJpYyIsInJzcSIsICJhZGoucnNxIiwibiIpDQopDQpgYGANCg0Kw4kgcG9zc8OtdmVsIG9ic2VydmFyIHF1ZSBhIGV4cHJlc3PDo28gY8O6YmljYSwgKDMpLCBmb2kgYSBkZSBtYWlvcmVzIHZhbG9yZXMgZGUgJFJeMiQsICRSXjIkIGFqdXN0YWRvLCBlIG1lbm9yZXMgdmFsb3JlcyBkZSBBa2Fpa2UgKEFJQykgZSBTY2h3YXJ6IChCYXllc2lhbiAtIEJJQykuIERlc3RhIGZvcm1hLCBhIHByaW5jw61waW8sIGVzdGEgw6kgYSBtZWxob3IgZXhwcmVzc8Ojby4NCg0KIyBUZXN0ZXMgZGUgdmlvbGHDp8OjbyBkZSBwcmVzc3Vwb3N0b3MgY2zDoXNzaWNvcyBkYSByZWdyZXNzw6NvDQoNCkZhcmVtb3MgYSBpbnZlc3RpZ2HDp8OjbyBhcGVuYXMgcGFyYSBvIG1lbGhvciBtb2RlbG8sIHF1ZSBjb25mb3JtZSBhIMO6bHRpbWEgdGFiZWxhLCDDqSBvIGRhIGZ1bsOnw6NvIGPDumJpY2EsICgzKSwgcXVlIG5hIG1vZGVsYWdlbSDDqSBvIG9iamV0byBgcmVnNGAuDQoNCiMjIEVzcGVjaWZpY2HDp8OjbyBkbyBtb2RlbG86IFJFU0VUDQoNCg0KYGBge3J9DQpsaWJyYXJ5KGxtdGVzdCkNCnJlc2V0dGVzdChyZWc0LHBvd2VyID0gMjozLHR5cGUgPSAiZml0dGVkIikNCmBgYA0KDQpPIHRlc3RlIFJFU0VUIGNvbmNsdWkgcGVsYSByZWplacOnw6NvIGRlIHF1ZSBhcyB2YXJpw6F2ZWlzIGRlcGVuZGVudGVzIGVzdGltYWRhcyBhbyBxdWFkcmFkbyBlIGFvIGN1Ym8gdGVuaGFtIGNvZWZpY2llbnRlcyBudWxvcywgY29tIHByb2JhYmlsaWRhZGUgZG8gdGVzdGUgZGUgNi42ODdlLTA4LiBEZXN0YSBmb3JtYSwgYWN1c2EgcXVlIGFpbmRhIGV4aXN0ZSBhbGd1bSBwcm9ibGVtYSBkZSBlc3BlY2lmaWNhw6fDo28uIA0KDQoNCiMjIyBJbnZlc3RpZ2HDp8OjbyBkZSBvdXRsaWVycw0KDQpPIHRlc3RlIHBhcmEgb3V0bGllcnMgZm9pIG8gQm9uZmVyb25uaSBkbyBwYWNvdGUgYGNhcmAuIENvbmZvcm1lIHJlc3VsdGFkbyBhYmFpeG8sIG7Do28gZm9pIGlkZW50aWZpY2FkbyBvdXRsaWVyIGRhIHJlZ3Jlc3PDo28uDQoNCmBgYHtyfQ0KbGlicmFyeShjYXIpDQpvdXRsaWVyVGVzdChyZWc0KQ0KYGBgDQoNCiMjIE3DqWRpYSB6ZXJvIGUgbm9ybWFsaWRhZGUgZG9zIHJlc8OtZHVvcw0KDQpgYGB7cn0NCiNvYnRlbmRvIHJlc2lkdW9zIGRvIG1vZGVsbyBkYSB0ZW5kZW5jaWEgY8O6YmljYQ0KdS5oYXQ8LXJlc2lkKHJlZzQpDQoNCiMgdGVzdGUgZGUgbWVkaWEgemVybyBkb3MgcmVzaWR1b3MNCnQudGVzdCh1LmhhdCkNCmhpc3QucmVnNDwtIGhpc3QodS5oYXQsIGZyZXEgPSBGQUxTRSkNCmN1cnZlKGRub3JtLCBhZGQgPSBUUlVFLGNvbD0icmVkIikNCg0Kc3BsaXQuc2NyZWVuKGMoMiwyKSkNCnNjcmVlbigxKQ0KcmVnNC5wbG90MTwtcGxvdChyZWc0LCB3aGljaCA9IDEpDQoNCnNjcmVlbigyKQ0KcmVnNC5wbG90MjwtcGxvdChyZWc0LCB3aGljaCA9IDIpDQoNCnNjcmVlbigzKQ0KcmVnNC5wbG90MzwtcGxvdChyZWc0LCB3aGljaCA9IDMpIA0KDQpzY3JlZW4oNCkNCnJlZzQucGxvdDQ8LXBsb3QocmVnNCwgd2hpY2ggPSA0KQ0KY2xvc2Uuc2NyZWVuKGFsbCA9IFRSVUUpICAgICMgZXhpdCBzcGxpdC1zY3JlZW4gbW9kZQ0KDQojdGVzdGVzIGRvcyByZXNpZHVvcyBkYSByZWdyZXNzYW8gY3ViaWNhDQpsaWJyYXJ5KGNhcikNCnJlc2lkdWFsUGxvdHMocmVnNCkNCg0KIyMgbm9ybWFsaWRhZGUgZG9zIHJlc2lkdW9zIG5vIFINCnFxUGxvdChyZWc0KSAgI2Nhcg0KI3Rlc3RlIGRlIGphcnF1ZS1iZXJhIHBhcmEgbm9ybWFsaWRhZGUNCg0KSkIucmVnNDwtdHNlcmllczo6amFycXVlLmJlcmEudGVzdCh1LmhhdCkNCkpCLnJlZzQNCmBgYA0Kw4kgcG9zc8OtdmVsIGNvbmNsdWlyIHBlbGEgaW5leGlzdMOqbmNpYSBkZSBvdXRsaWVycyAobyB0ZXN0ZSBCb25mZXJvbm5pIGZlaXRvIGFjaW1hKSwgYSBtw6lkaWEgZG9zIHJlc8OtZHVvcyDDqSB6ZXJvLCBlIG9zIGV2ZW50dWFpcyBvdXRsaWVycyBhcG9udGFkb3Mgbm8gUS1RIHBsb3QgYW50ZXJpb3IgZXZpZGVuY2lhIHF1ZSBvcyB2YWxvcmVzIGVzdMOjbyBkZW50cm8gZG9zIGxpbWl0ZXMgdHJhY2VqYWRvcywgcG9kZW5kbyBjb25jbHVpciBwZWxhIG5vcm1hbGlkYWRlIGRvcyByZXPDrWR1b3Mgbm8gZ3LDoWZpY28gZSB0YW1iw6ltIG5vIHRlc3RlIEphcnF1ZS1CZXJhLCBjdWphIHByb2JhYmlsaWRhZGUgZG8gdGVzdGUgZm9pIGRlIDAuNDIsIHBvcnRhbnRvLCBuw6NvIHBvZGVuZG8gcmVqZWl0YXIgSDAgZGUgcXVlIG9zIHJlc8OtZHVvcyB0w6ptIGRpc3RyaWJ1acOnw6NvIG5vcm1hbC4NCg0KIyMjIE91dHJvcyB0ZXN0ZXMgZGUgbm9ybWFsaWRhZGUNCg0KYGBge3J9DQojIG91dHJvcyB0ZXN0ZXMgZGUgbm9ybWFsaWRhZGUNCmxpYnJhcnkobm9ydGVzdCkNCiMgVGVzdGVzDQp0MS4yIDwtIGtzLnRlc3QodS5oYXQsICJwbm9ybSIsbWVhbih1LmhhdCksc3VtbWFyeShyZWc0KSRzaWdtYSkgIyBLUw0KdDIuMiA8LSBsaWxsaWUudGVzdCh1LmhhdCkgIyBMaWxsaWVmb3JzDQp0My4yIDwtIGN2bS50ZXN0KHUuaGF0KSAjIENyYW3DqXItdm9uIE1pc2VzDQp0NC4yIDwtIHNoYXBpcm8udGVzdCh1LmhhdCkgIyBTaGFwaXJvLVdpbGsNCnQ1LjIgPC0gc2YudGVzdCh1LmhhdCkgIyBTaGFwaXJvLUZyYW5jaWENCnQ2LjIgPC0gYWQudGVzdCh1LmhhdCkgIyBBbmRlcnNvbi1EYXJsaW5nDQojIFRhYmVsYSBkZSByZXN1bHRhZG9zDQp0ZXN0ZXMgPC0gYyh0MS4yJG1ldGhvZCwgdDIuMiRtZXRob2QsIHQzLjIkbWV0aG9kLCB0NC4yJG1ldGhvZCwgdDUuMiRtZXRob2QsDQogICAgICAgICAgICB0Ni4yJG1ldGhvZCkNCmVzdHQgPC0gYXMubnVtZXJpYyhjKHQxLjIkc3RhdGlzdGljLCB0Mi4yJHN0YXRpc3RpYywgdDMuMiRzdGF0aXN0aWMsIA0KICAgICAgICAgICAgICAgICAgICAgdDQuMiRzdGF0aXN0aWMsIHQ1LjIkc3RhdGlzdGljLCB0Ni4yJHN0YXRpc3RpYykpDQp2YWxvcnAgPC0gYyh0MS4yJHAudmFsdWUsIHQyLjIkcC52YWx1ZSwgdDMuMiRwLnZhbHVlLCB0NC4yJHAudmFsdWUsIHQ1LjIkcC52YWx1ZSwNCiAgICAgICAgICAgIHQ2LjIkcC52YWx1ZSkNCnJlc3VsdGFkb3MgPC0gY2JpbmQoZXN0dCwgdmFsb3JwKQ0Kcm93bmFtZXMocmVzdWx0YWRvcykgPC0gdGVzdGVzDQpjb2xuYW1lcyhyZXN1bHRhZG9zKSA8LSBjKCJFc3RhdMOtc3RpY2EiLCAidmFsb3ItcHJvYiIpDQojIHByaW50KHJlc3VsdGFkb3MsIGRpZ2l0cyA9IDQpDQprbml0cjo6a2FibGUocmVzdWx0YWRvcywgZGlnaXRzID0gNCkNCmBgYA0KDQo=