Anjalika Rahayu - M0722015

devtools::install_github("Yu-Group/vthemes")

Pendahuluan


Analisis regresi berganda adalah pengembangan dari analisis regresi sederhana dimana terdapat lebih dari satu variabel independen x. Analisis ini digunakan untuk melihat sejumlah variabel independen sejumlah k terhadap variabel dependen y berdasarkan nilai variabel-variabel independen sejumlah k.

Perbedaaan antara regresi sederhana dengan regresi berganda terletak pada jumlah variabel bebasnya. Jika dalam regresi sederhana jumlah variabel bebas yang digunakan untuk memprediksi variabel tergantung hanya satu, maka regresi berganda jumlah variabel bebas yang digunakan untuk memprediksi variabel tergantung lebih dari satu.

Menurut Mentgomery and Peck (2006), persamaan umum model regresi linear berganda dapat ditulis dalam persamaan berikut : \[Y = \beta_0 + \beta_1X_1 + \beta_2X_2 +...+\beta_pX_p + \epsilon_i\]

Analisis regresi linier berganda melibatkan beberapa asumsi, antara lain:

  • Asumsi normalitas : Mengetahui normal atau tidaknya suatu distribusi data.
  • Asumsi Non Multikolinearitas :
    Salah satu cara untuk mengetahui terdapat atau tidak terdapat multikolinearitas pada data.
  • Asumsi Non heteroskedastisitas : untuk melihat bahwa pada model, variansi variabel independennya tidak sama. Metode yang digunakan untuk melakukan pengujian heteroskedastisitas adalah uji Breusch Pagan.
  • Asumsi Non Autokorelasi : menguji apakah dalam suatu model regresi linear ada korelasi antara kesalahan pengganggu pada periode t dengan kesalahan pada periode t-1 (sebelumnya).

Dalam analisis regresi linier berganda, dilakukan juga pengujian terhadap asumsi-asumsi klasik tersebut menggunakan berbagai metode seperti uji normalitas residual, uji Non multikolinearitas, uji Non Heteroskedastisitas, dan uji Non autokorelasi. Jika asumsi-asumsi tersebut tidak terpenuhi, mungkin diperlukan transformasi variabel atau penggunaan metode regresi lainnya yang lebih sesuai.



Metode Penelitian

Library

Pada kesempatan ini, akan dilakukan uji regresi linear berganda pada data life expectancy dan health di Asia pada tahun 2009. Sebelum melanjutkan kelangkah berikutnya, terlebih dahulu kita siapkan library yang akan digunakan.

# Memuat paket yang diperlukan
library(readxl)
library(dplyr)
library(lmtest)
library(car)
library(vthemes)
library(ggplot2)

Pengambilan Data

Setelah menginstal library yang diperlukan langkah selanjutnya yaitu memilih variabel independent, dalam analisis regresi berganda minimal variabel nya independennya sebanyak 3, dalam hal ini disini kita ambil 3 variabel independen yaitu :

  1. Alcohol_Consumption : Konsumsi alkohol murni (dalam liter) per kapita pada usia 15+ tahun
  2. Adult_Mortality : Kematian orang dewasa per 1000 populasi
  3. GDP_Per_Kapita : PDB Per Kapita dalam USD pada tahun 2010 Variabel dependen yang akan digunakan adalah Life_Expectancy yang merupakan angka harapan hidup laki-laki dan perempuan di Asia pada tahun 2010

Dengan Variabel Independent sebagai berikut :

Y : Life_Expectancy

X1 : Alcohol_Consumption

X2 : Adult_Mortality

X3 : GDP_Per_Kapita

# Membaca Data dari File Excel
library(readxl)
data <- read_excel("C:/Users/anjalika rahayu/OneDrive/Dokumen/dataSIMCM2.xlsx")

# Menampilkan Data
data
## # A tibble: 27 × 4
##        Y    X1    X2    X3
##    <dbl> <dbl> <dbl> <dbl>
##  1  74.7  0.25  91.9 33437
##  2  68.4  0.23 227.   2235
##  3  68.7  0.68 144.    783
##  4  66.7  2.73 192.   1244
##  5  64.3  6.1  217.   1586
##  6  74.4  5.75  92.9  5647
##  7  69.7  1.74 158.   2131
##  8  67.4  7.73 230.   2630
##  9  74.2  6.19 160.   5164
## 10  74.5  0.52 127.   8248
## # ℹ 17 more rows


Hasil dan Pembahasan

Analisis Statistik Deskriptif

# Statistik Deskriptif untuk Semua Variabel
summary(data)
##        Y               X1              X2               X3       
##  Min.   :61.00   Min.   :0.000   Min.   : 58.75   Min.   :  526  
##  1st Qu.:67.05   1st Qu.:0.385   1st Qu.:129.28   1st Qu.: 1106  
##  Median :69.30   Median :1.840   Median :169.17   Median : 2433  
##  Mean   :70.43   Mean   :2.603   Mean   :162.69   Mean   : 6968  
##  3rd Qu.:74.45   3rd Qu.:4.335   3rd Qu.:203.64   3rd Qu.: 5431  
##  Max.   :82.80   Max.   :8.280   Max.   :250.13   Max.   :48753

Melalui statistik deskriptif diatas, didapatkan nilai minimum, kuartil bawah, median, mean, kuartil atas, dan nilai maksimum dari keempat variabel. Pada variabel Life_Expectancy, didapatkan nilai minimum 60.50 tahun, kuartil bawah 66.65 tahun, median 69.10 tahun, kuartil atas 74.20 tahun, dan nilai maksimum 82.90 tahun. Dan hingga variabel independent.

Nilai Korelasi Masing-masing Variabel

Selanjutnya, untuk melihat hubungan dari masing-masing variabel, maka dicari nilai korelasinya.

# Menghitung matriks korelasi
cor_matrix <- cor(data)
cor_matrix <- round(cor_matrix, 3)
cor_matrix
##         Y    X1     X2     X3
## Y   1.000 0.245 -0.874  0.722
## X1  0.245 1.000  0.018  0.109
## X2 -0.874 0.018  1.000 -0.649
## X3  0.722 0.109 -0.649  1.000

Melalui output diatas, terlihat bahwa variabel:

  • Alcohol_Consumption dan Life_Expectancy memiliki nilai korelasi 0.245. Artinya kedua variabel memiliki hubungan yang berkebalikan dan cukup kuat.
  • Adult_Mortality dan Life_Expectancy memiliki nilai korelasi -0.874. Artinya kedua variabel memiliki hubungan yang berkebalikan dan sangat kuat.
  • GDP_Per_Kapita dan Life_Expectancy memiliki nilai korelasi 0.722. Artinya kedua variabel memiliki hubungan yang berkebalikan dan sangat kuat.

Uji Asumsi Klasik

Sebelum melakukan tahapan uji asumsi klasik maka kita membuat terlebih dahulu model regresi dari data yang sudah kita pilih yaitu Data Angka Harapan Hidup di Asia pada tahun 2010 dengan penjelasan variabel sebagai berikut :

Y : Life_Expectancy

X1 : Alcohol_Consumption

X2 : Adult_Mortality

X3 : GDP_Per_Kapita

# Membangun model regresi
model.mkt <- lm(Y~ X1+ X2 + X3, data = data)
model.mkt
## 
## Call:
## lm(formula = Y ~ X1 + X2 + X3, data = data)
## 
## Coefficients:
## (Intercept)           X1           X2           X3  
##   7.980e+01    4.703e-01   -6.916e-02    9.512e-05

1. Uji Asumsi Normalitas

# Histogram dari residual
ggplot(data.frame(Residual=resid(model.mkt)), aes(x=Residual)) +
  geom_histogram(binwidth=0.5, fill="lightgreen", color="black") +
  labs(x = "Residual", y = "Count", title = "Histogram of Residuals")

# Grafik QQ Plot untuk normalitas residual
qqnorm(resid(model.mkt))
qqline(resid(model.mkt))

# Uji Normalitas residual model
shapiro.test(resid(model.mkt))
## 
##  Shapiro-Wilk normality test
## 
## data:  resid(model.mkt)
## W = 0.96684, p-value = 0.5208
  • melalui histogram, terlihat bahwa bentuknya sesuai dengan kurva distribusi normal.
  • melalui plot normal Q-Q, terlihat bahwa plot menunjukkan pola normal. Hal ini terlihat dari titik yang menyebar di sekitar grafik normal dan penyebarannya mengikuti garis diagonal.
  • melalui Uji Shapiro-Wilk, diperoleh nilai p-value = 0.5208 > 0.05 maka tidak terbukti adanya pelanggaran pada asumsi normalitas dapat disumpulkan bahwa ho yang berarti asumsi residual berdistribusi normal terpenuhi.

2. Uji Non-Heteroskedastisitas

# Grafik Residual Plot untuk non-heteroskedastisitas
plot(model.mkt, which = 1)

# Uji non-Heteroskedastisitas
bptest(model.mkt)
## 
##  studentized Breusch-Pagan test
## 
## data:  model.mkt
## BP = 2.175, df = 3, p-value = 0.5369
  • melalui plot residu untuk non-heteroskedastisitas, terlihat bahwa titik-titik data tersebar dan tidak membentuk pola tertentu, sehingga tidak terjadi perbedaan variansi residual yang artinya model regresi memenuhi uji asumsi non-heteroskedastisitas.
  • melalui Uji Breusch-Pagan, diperoleh p-value = 0.5369 > 0.05 yang berarti uji asumsi non-heteroskedastisitas terpenuhi.

3. Uji Non-Multikolinearitas

# Uji Multikolinearitas
vif(model.mkt)
##       X1       X2       X3 
## 1.026229 1.751185 1.771860
vif_values <- vif(model.mkt)

# Membuat plot VIF
plot(vif_values, type = "bar", main = "VIF Plot")

Diperoleh nilai VIF ketiga variabel independen < 10 sehingga tidak terjadi multikolinearitas yang berarti asumsi non-multikolinearitas terpenuhi.

4. Uji Autokorelasi Residual

# Uji autokorelasi residual
dwtest(model.mkt)
## 
##  Durbin-Watson test
## 
## data:  model.mkt
## DW = 1.7376, p-value = 0.227
## alternative hypothesis: true autocorrelation is greater than 0

Berdasarkan uji autokorelasi diatas, diperoleh p-value = 0.227 > 0.05 yang berarti bahwa asumsi tidak terjadinya autokorelasi terpenuhi.

Model Regresi Linier Berganda

# Ringkasan model 
summary(model.mkt)
## 
## Call:
## lm(formula = Y ~ X1 + X2 + X3, data = data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.5085 -1.4018 -0.2005  1.8311  4.0038 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  7.980e+01  1.850e+00  43.139  < 2e-16 ***
## X1           4.703e-01  1.599e-01   2.941  0.00733 ** 
## X2          -6.916e-02  9.772e-03  -7.077 3.29e-07 ***
## X3           9.512e-05  4.547e-05   2.092  0.04769 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.063 on 23 degrees of freedom
## Multiple R-squared:  0.858,  Adjusted R-squared:  0.8395 
## F-statistic: 46.34 on 3 and 23 DF,  p-value: 6.552e-10

Melalui output diatas, diperoleh:

Model regresi linear berganda yaitu: \[Y = 4.703e-01X_1 - 6.916e-02X_2 + 9.512e-05X_3 + \epsilon\]

Artinya, jika variabel Life_Expectancy naik sebanyak 1 tahun, maka akan menaikkan Alcohol_consumption sebesar 4.703e-01, menurunkan Adult_mortality sebesar 6.916e-02, dan menaikkan GDP_Per_Kapita sebesar 9.512e-05

  • Uji Simultan: nilai p-value = 6.552e-10 < 0.05, sehingga dapat disimpulkan bahwa terdapat pengaruh yang signifikan antara variabel independen terhadap variabel dependen secara simultan.
  • Uji Parsial: Variabel Alcohol_consumption, Adult_mortality dan GDP_Per_Kapita memiliki p- value secara berturut-turut 0.00733, 3.29e-07 dan 0.04769 < 0.05 yang berarti bahwa ketiga variabel ini secara parsial berpengaruh signifikan terhadap variabel dependen.
  • Nilai Koefisien Determinasi (diperoleh dari Adjusted R-Square) memiliki nilai 0.83955 atau 83.95%. Artinya, variabel independen dalam model regresi ini mampu menjelaskan variasi dari variabel dependen sebesar 83.95%. Sedangkan 16.05% lainnya dapat dijelaskan oleh variabel lain yang tidak termasuk dalam model ini.


LS0tDQp0aXRsZTogICJBbmFsaXNpcyBSZWdyZXNpIExpbmllciBCZXJnYW5kYSBBbmdrYSBIYXJhcGFuIEhpZHVwIGRpIEFzaWEgUGFkYSBUYWh1biAyMDEwIg0Kb3V0aG9yIDogIkFuamFsaWthIFJhaGF5dSBNMDcyMjAxNSINCm91dHB1dDogDQogIHZ0aGVtZXM6OnZtb2Rlcm4NCi0tLQ0KDQoNCjxjZW50ZXI+PGg0PjxzbWFsbD5BbmphbGlrYSBSYWhheXUgLSBNMDcyMjAxNTwvaDQ+PC9jZW50ZXI+PC9zbWFsbD4NCg0KDQo8c3R5bGU+DQpwIHsNCiAgdGV4dC1hbGlnbjoganVzdGlmeTsNCn0NCjwvc3R5bGU+DQoNCg0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgIGZpZy53aWR0aCA9IDgsDQogICAgICAgICAgICAgICAgICAgICAgZmlnLmhlaWdodCA9IDYsDQogICAgICAgICAgICAgICAgICAgICAgZmlnLmFsaWduID0gImNlbnRlciIsDQogICAgICAgICAgICAgICAgICAgICAgZmlnLnBhdGggPSAiaW1hZ2VzLyIsDQogICAgICAgICAgICAgICAgICAgICAgY2FjaGUgPSBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UpDQpgYGANCg0KDQpgYGB7ciB0aGVtZX0NCmRldnRvb2xzOjppbnN0YWxsX2dpdGh1YigiWXUtR3JvdXAvdnRoZW1lcyIpDQoNCmBgYA0KDQoNCiMjICoqUGVuZGFodWx1YW4qKg0KDQoqKioNCiBBbmFsaXNpcyByZWdyZXNpIGJlcmdhbmRhIGFkYWxhaCBwZW5nZW1iYW5nYW4gZGFyaSBhbmFsaXNpcyByZWdyZXNpIHNlZGVyaGFuYSBkaW1hbmEgdGVyZGFwYXQgbGViaWggZGFyaSBzYXR1IHZhcmlhYmVsIGluZGVwZW5kZW4geC4gQW5hbGlzaXMgaW5pIGRpZ3VuYWthbiB1bnR1ayBtZWxpaGF0IHNlanVtbGFoIHZhcmlhYmVsIGluZGVwZW5kZW4gc2VqdW1sYWggKl9rXyogdGVyaGFkYXAgdmFyaWFiZWwgZGVwZW5kZW4geSBiZXJkYXNhcmthbiBuaWxhaSB2YXJpYWJlbC12YXJpYWJlbCBpbmRlcGVuZGVuIHNlanVtbGFoICpfa18qLiANCg0KIFBlcmJlZGFhYW4gYW50YXJhIHJlZ3Jlc2kgc2VkZXJoYW5hIGRlbmdhbiByZWdyZXNpIGJlcmdhbmRhIHRlcmxldGFrIHBhZGEganVtbGFoIA0KdmFyaWFiZWwgYmViYXNueWEuIEppa2EgZGFsYW0gcmVncmVzaSBzZWRlcmhhbmEganVtbGFoIHZhcmlhYmVsIGJlYmFzIHlhbmcgDQpkaWd1bmFrYW4gdW50dWsgbWVtcHJlZGlrc2kgdmFyaWFiZWwgdGVyZ2FudHVuZyBoYW55YSBzYXR1LCBtYWthIHJlZ3Jlc2kgDQpiZXJnYW5kYSBqdW1sYWggdmFyaWFiZWwgYmViYXMgeWFuZyBkaWd1bmFrYW4gdW50dWsgbWVtcHJlZGlrc2kgdmFyaWFiZWwgDQp0ZXJnYW50dW5nIGxlYmloIGRhcmkgc2F0dS4gDQoNCiBNZW51cnV0IE1lbnRnb21lcnkgYW5kIFBlY2sgKDIwMDYpLCBwZXJzYW1hYW4gdW11bSBtb2RlbCByZWdyZXNpIGxpbmVhciBiZXJnYW5kYSBkYXBhdCBkaXR1bGlzIGRhbGFtIHBlcnNhbWFhbiBiZXJpa3V0IDoNCiAgJCRZID0gXGJldGFfMCArIFxiZXRhXzFYXzEgKyBcYmV0YV8yWF8yICsuLi4rXGJldGFfcFhfcCArIFxlcHNpbG9uX2kkJA0KDQoNCiAgQW5hbGlzaXMgcmVncmVzaSBsaW5pZXIgYmVyZ2FuZGEgbWVsaWJhdGthbiBiZWJlcmFwYSBhc3Vtc2ksIGFudGFyYSBsYWluOg0KICANCi0gX19Bc3Vtc2kgbm9ybWFsaXRhc19fIDogDQogIE1lbmdldGFodWkgbm9ybWFsIGF0YXUgdGlkYWtueWEgc3VhdHUgZGlzdHJpYnVzaSBkYXRhLg0KLSBfX0FzdW1zaSBOb24gTXVsdGlrb2xpbmVhcml0YXNfXyA6ICANCiAgU2FsYWggc2F0dSBjYXJhIHVudHVrIG1lbmdldGFodWkgdGVyZGFwYXQgYXRhdSB0aWRhayB0ZXJkYXBhdCBtdWx0aWtvbGluZWFyaXRhcyBwYWRhIGRhdGEuICAgDQotIF9fQXN1bXNpIE5vbiBoZXRlcm9za2VkYXN0aXNpdGFzX18gOiANCiAgdW50dWsgbWVsaWhhdCBiYWh3YSBwYWRhIG1vZGVsLCB2YXJpYW5zaSB2YXJpYWJlbCANCmluZGVwZW5kZW5ueWEgdGlkYWsgc2FtYS4gTWV0b2RlIHlhbmcgZGlndW5ha2FuIHVudHVrIG1lbGFrdWthbiBwZW5ndWppYW4gaGV0ZXJvc2tlZGFzdGlzaXRhcyBhZGFsYWggdWppIEJyZXVzY2ggUGFnYW4uDQotIF9fQXN1bXNpIE5vbiBBdXRva29yZWxhc2lfXyA6IA0KbWVuZ3VqaSBhcGFrYWggZGFsYW0gc3VhdHUgbW9kZWwgcmVncmVzaSBsaW5lYXIgYWRhIGtvcmVsYXNpIGFudGFyYSBrZXNhbGFoYW4gcGVuZ2dhbmdndSBwYWRhIHBlcmlvZGUgdCBkZW5nYW4ga2VzYWxhaGFuIHBhZGEgcGVyaW9kZSB0LTEgKHNlYmVsdW1ueWEpLg0KDQpEYWxhbSBhbmFsaXNpcyByZWdyZXNpIGxpbmllciBiZXJnYW5kYSwgZGlsYWt1a2FuIGp1Z2EgcGVuZ3VqaWFuIHRlcmhhZGFwIGFzdW1zaS1hc3Vtc2kga2xhc2lrIHRlcnNlYnV0IG1lbmdndW5ha2FuIGJlcmJhZ2FpIG1ldG9kZSBzZXBlcnRpIHVqaSBub3JtYWxpdGFzIHJlc2lkdWFsLCB1amkgTm9uIG11bHRpa29saW5lYXJpdGFzLCB1amkgTm9uIEhldGVyb3NrZWRhc3Rpc2l0YXMsIGRhbiB1amkgTm9uIGF1dG9rb3JlbGFzaS4gSmlrYSBhc3Vtc2ktYXN1bXNpIHRlcnNlYnV0IHRpZGFrIHRlcnBlbnVoaSwgbXVuZ2tpbiBkaXBlcmx1a2FuIHRyYW5zZm9ybWFzaSB2YXJpYWJlbCBhdGF1IHBlbmdndW5hYW4gbWV0b2RlIHJlZ3Jlc2kgbGFpbm55YSB5YW5nIGxlYmloIHNlc3VhaS4NCg0KKioqDQoNCioqKg0KIyMgKipNZXRvZGUgUGVuZWxpdGlhbioqDQoNCg0KIyMjIExpYnJhcnkNClBhZGEga2VzZW1wYXRhbiBpbmksIGFrYW4gZGlsYWt1a2FuIHVqaSByZWdyZXNpIGxpbmVhciBiZXJnYW5kYSBwYWRhIGRhdGEgX2xpZmUgZXhwZWN0YW5jeV8gZGFuIF9oZWFsdGhfIGRpIEFzaWEgcGFkYSB0YWh1biAyMDA5LiBTZWJlbHVtIG1lbGFuanV0a2FuIGtlbGFuZ2thaCBiZXJpa3V0bnlhLCB0ZXJsZWJpaCBkYWh1bHUga2l0YSBzaWFwa2FuIF9saWJyYXJ5XyB5YW5nIGFrYW4gZGlndW5ha2FuLg0KYGBge3IgbGFiZWwgMX0NCiMgTWVtdWF0IHBha2V0IHlhbmcgZGlwZXJsdWthbg0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShsbXRlc3QpDQpsaWJyYXJ5KGNhcikNCmxpYnJhcnkodnRoZW1lcykNCmxpYnJhcnkoZ2dwbG90MikNCmBgYA0KDQojIyMgUGVuZ2FtYmlsYW4gRGF0YQ0KU2V0ZWxhaCBtZW5naW5zdGFsIGxpYnJhcnkgeWFuZyBkaXBlcmx1a2FuIGxhbmdrYWggc2VsYW5qdXRueWEgeWFpdHUgbWVtaWxpaCB2YXJpYWJlbCBpbmRlcGVuZGVudCwgZGFsYW0gYW5hbGlzaXMgcmVncmVzaSBiZXJnYW5kYSBtaW5pbWFsIHZhcmlhYmVsIG55YSBpbmRlcGVuZGVubnlhIHNlYmFueWFrIDMsIGRhbGFtIGhhbCBpbmkgZGlzaW5pIGtpdGEgYW1iaWwgMyB2YXJpYWJlbCBpbmRlcGVuZGVuIHlhaXR1IDoNCg0KDQoxLiBBbGNvaG9sX0NvbnN1bXB0aW9uIDogS29uc3Vtc2kgYWxrb2hvbCBtdXJuaSAoZGFsYW0gbGl0ZXIpIHBlciBrYXBpdGEgcGFkYSB1c2lhIDE1KyB0YWh1biANCjIuIEFkdWx0X01vcnRhbGl0eSA6IEtlbWF0aWFuIG9yYW5nIGRld2FzYSBwZXIgMTAwMCBwb3B1bGFzaQ0KMy4gR0RQX1Blcl9LYXBpdGEgOiBQREIgUGVyIEthcGl0YSBkYWxhbSBVU0QgcGFkYSB0YWh1biAyMDEwDQpWYXJpYWJlbCBkZXBlbmRlbiB5YW5nIGFrYW4gZGlndW5ha2FuIGFkYWxhaCBMaWZlX0V4cGVjdGFuY3kgeWFuZyBtZXJ1cGFrYW4gYW5na2EgaGFyYXBhbiBoaWR1cCBsYWtpLWxha2kgZGFuIHBlcmVtcHVhbiBkaSBBc2lhIHBhZGEgdGFodW4gMjAxMA0KDQpEZW5nYW4gVmFyaWFiZWwgSW5kZXBlbmRlbnQgc2ViYWdhaSBiZXJpa3V0IDoNCg0KWSA6IExpZmVfRXhwZWN0YW5jeQ0KDQpYMSA6IEFsY29ob2xfQ29uc3VtcHRpb24NCg0KWDIgOiBBZHVsdF9Nb3J0YWxpdHkNCg0KWDMgOiBHRFBfUGVyX0thcGl0YQ0KDQpgYGB7ciBsYWJlbCAyfQ0KIyBNZW1iYWNhIERhdGEgZGFyaSBGaWxlIEV4Y2VsDQpsaWJyYXJ5KHJlYWR4bCkNCmRhdGEgPC0gcmVhZF9leGNlbCgiQzovVXNlcnMvYW5qYWxpa2EgcmFoYXl1L09uZURyaXZlL0Rva3VtZW4vZGF0YVNJTUNNMi54bHN4IikNCg0KIyBNZW5hbXBpbGthbiBEYXRhDQpkYXRhDQpgYGANCg0KKioqDQoNCioqKg0KIyMgKipIYXNpbCBkYW4gUGVtYmFoYXNhbioqDQoNCiMjIyBBbmFsaXNpcyBTdGF0aXN0aWsgRGVza3JpcHRpZg0KYGBge3IgbGFiZWwgM30NCiMgU3RhdGlzdGlrIERlc2tyaXB0aWYgdW50dWsgU2VtdWEgVmFyaWFiZWwNCnN1bW1hcnkoZGF0YSkNCmBgYA0KTWVsYWx1aSBzdGF0aXN0aWsgZGVza3JpcHRpZiBkaWF0YXMsIGRpZGFwYXRrYW4gbmlsYWkgbWluaW11bSwga3VhcnRpbCBiYXdhaCwgbWVkaWFuLCBtZWFuLCBrdWFydGlsIGF0YXMsIGRhbiBuaWxhaSBtYWtzaW11bSBkYXJpIGtlZW1wYXQgdmFyaWFiZWwuDQpQYWRhIHZhcmlhYmVsIExpZmVfRXhwZWN0YW5jeSwgZGlkYXBhdGthbiBuaWxhaSAgbWluaW11bSA2MC41MCB0YWh1biwga3VhcnRpbCBiYXdhaCA2Ni42NSB0YWh1biwgbWVkaWFuIDY5LjEwIHRhaHVuLCBrdWFydGlsIGF0YXMgNzQuMjAgdGFodW4sIGRhbiBuaWxhaSBtYWtzaW11bSA4Mi45MCB0YWh1bi4gRGFuIGhpbmdnYSB2YXJpYWJlbCBpbmRlcGVuZGVudC4NCg0KDQoNCiMjIyBOaWxhaSBLb3JlbGFzaSBNYXNpbmctbWFzaW5nIFZhcmlhYmVsDQpTZWxhbmp1dG55YSwgdW50dWsgbWVsaWhhdCBodWJ1bmdhbiBkYXJpIG1hc2luZy1tYXNpbmcgdmFyaWFiZWwsIG1ha2EgZGljYXJpIG5pbGFpIGtvcmVsYXNpbnlhLg0KYGBge3IgbGFiZWwgNH0NCiMgTWVuZ2hpdHVuZyBtYXRyaWtzIGtvcmVsYXNpDQpjb3JfbWF0cml4IDwtIGNvcihkYXRhKQ0KY29yX21hdHJpeCA8LSByb3VuZChjb3JfbWF0cml4LCAzKQ0KY29yX21hdHJpeA0KYGBgDQpNZWxhbHVpIG91dHB1dCBkaWF0YXMsIHRlcmxpaGF0IGJhaHdhIHZhcmlhYmVsOg0KDQorIEFsY29ob2xfQ29uc3VtcHRpb24gZGFuIExpZmVfRXhwZWN0YW5jeQ0KbWVtaWxpa2kgbmlsYWkga29yZWxhc2kgMC4yNDUuIEFydGlueWEga2VkdWEgdmFyaWFiZWwgbWVtaWxpa2kgaHVidW5nYW4geWFuZyBiZXJrZWJhbGlrYW4gZGFuIGN1a3VwIGt1YXQuDQorIEFkdWx0X01vcnRhbGl0eSBkYW4gTGlmZV9FeHBlY3RhbmN5DQptZW1pbGlraSBuaWxhaSBrb3JlbGFzaSAtMC44NzQuIEFydGlueWEga2VkdWEgdmFyaWFiZWwgbWVtaWxpa2kgaHVidW5nYW4geWFuZyBiZXJrZWJhbGlrYW4gZGFuIHNhbmdhdCBrdWF0Lg0KKyBHRFBfUGVyX0thcGl0YSBkYW4gTGlmZV9FeHBlY3RhbmN5DQptZW1pbGlraSBuaWxhaSBrb3JlbGFzaSAwLjcyMi4gQXJ0aW55YSBrZWR1YSB2YXJpYWJlbCBtZW1pbGlraSBodWJ1bmdhbiB5YW5nIGJlcmtlYmFsaWthbiBkYW4gc2FuZ2F0IGt1YXQuDQoNCg0KIyMjIFVqaSBBc3Vtc2kgS2xhc2lrDQpTZWJlbHVtIG1lbGFrdWthbiB0YWhhcGFuIHVqaSBhc3Vtc2kga2xhc2lrIG1ha2Ega2l0YSBtZW1idWF0IHRlcmxlYmloIGRhaHVsdSBtb2RlbCByZWdyZXNpIGRhcmkgZGF0YSB5YW5nIHN1ZGFoIGtpdGEgcGlsaWggeWFpdHUgRGF0YSBBbmdrYSBIYXJhcGFuIEhpZHVwIGRpIEFzaWEgcGFkYSB0YWh1biAyMDEwIGRlbmdhbiBwZW5qZWxhc2FuIHZhcmlhYmVsIHNlYmFnYWkgYmVyaWt1dCA6DQoNClkgOiBMaWZlX0V4cGVjdGFuY3kNCg0KWDEgOiBBbGNvaG9sX0NvbnN1bXB0aW9uDQoNClgyIDogQWR1bHRfTW9ydGFsaXR5DQoNClgzIDogR0RQX1Blcl9LYXBpdGENCg0KDQpgYGB7ciBsYWJlbDV9DQojIE1lbWJhbmd1biBtb2RlbCByZWdyZXNpDQptb2RlbC5ta3QgPC0gbG0oWX4gWDErIFgyICsgWDMsIGRhdGEgPSBkYXRhKQ0KbW9kZWwubWt0DQpgYGANCg0KIyMjIyAxLiBVamkgQXN1bXNpIE5vcm1hbGl0YXMNCmBgYHtyIGxhYmVsNn0NCiMgSGlzdG9ncmFtIGRhcmkgcmVzaWR1YWwNCmdncGxvdChkYXRhLmZyYW1lKFJlc2lkdWFsPXJlc2lkKG1vZGVsLm1rdCkpLCBhZXMoeD1SZXNpZHVhbCkpICsNCiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGg9MC41LCBmaWxsPSJsaWdodGdyZWVuIiwgY29sb3I9ImJsYWNrIikgKw0KICBsYWJzKHggPSAiUmVzaWR1YWwiLCB5ID0gIkNvdW50IiwgdGl0bGUgPSAiSGlzdG9ncmFtIG9mIFJlc2lkdWFscyIpDQoNCiMgR3JhZmlrIFFRIFBsb3QgdW50dWsgbm9ybWFsaXRhcyByZXNpZHVhbA0KcXFub3JtKHJlc2lkKG1vZGVsLm1rdCkpDQpxcWxpbmUocmVzaWQobW9kZWwubWt0KSkNCg0KIyBVamkgTm9ybWFsaXRhcyByZXNpZHVhbCBtb2RlbA0Kc2hhcGlyby50ZXN0KHJlc2lkKG1vZGVsLm1rdCkpDQpgYGANCisgbWVsYWx1aSBoaXN0b2dyYW0sIHRlcmxpaGF0IGJhaHdhIGJlbnR1a255YSBzZXN1YWkgZGVuZ2FuIGt1cnZhIGRpc3RyaWJ1c2kgbm9ybWFsLg0KKyBtZWxhbHVpIHBsb3Qgbm9ybWFsIFEtUSwgdGVybGloYXQgYmFod2EgcGxvdCBtZW51bmp1a2thbiBwb2xhIG5vcm1hbC4gSGFsIGluaSB0ZXJsaWhhdCBkYXJpIHRpdGlrIHlhbmcgbWVueWViYXIgZGkgc2VraXRhciBncmFmaWsgbm9ybWFsIGRhbiBwZW55ZWJhcmFubnlhIG1lbmdpa3V0aSBnYXJpcyBkaWFnb25hbC4NCisgbWVsYWx1aSBVamkgU2hhcGlyby1XaWxrLCBkaXBlcm9sZWggbmlsYWkgcC12YWx1ZSA9IDAuNTIwOCA+IDAuMDUgbWFrYSB0aWRhayB0ZXJidWt0aSBhZGFueWEgcGVsYW5nZ2FyYW4gcGFkYSBhc3Vtc2kgbm9ybWFsaXRhcyBkYXBhdCBkaXN1bXB1bGthbiBiYWh3YSBobyB5YW5nIGJlcmFydGkgYXN1bXNpIHJlc2lkdWFsIGJlcmRpc3RyaWJ1c2kgbm9ybWFsIHRlcnBlbnVoaS4NCg0KDQoNCiMjIyMgMi4gVWppIE5vbi1IZXRlcm9za2VkYXN0aXNpdGFzDQpgYGB7ciBsYWJlbDl9DQojIEdyYWZpayBSZXNpZHVhbCBQbG90IHVudHVrIG5vbi1oZXRlcm9za2VkYXN0aXNpdGFzDQpwbG90KG1vZGVsLm1rdCwgd2hpY2ggPSAxKQ0KDQojIFVqaSBub24tSGV0ZXJvc2tlZGFzdGlzaXRhcw0KYnB0ZXN0KG1vZGVsLm1rdCkNCmBgYA0KKyBtZWxhbHVpIHBsb3QgcmVzaWR1IHVudHVrIG5vbi1oZXRlcm9za2VkYXN0aXNpdGFzLCB0ZXJsaWhhdCBiYWh3YSB0aXRpay10aXRpayBkYXRhIHRlcnNlYmFyIGRhbiB0aWRhayBtZW1iZW50dWsgcG9sYSB0ZXJ0ZW50dSwgc2VoaW5nZ2EgdGlkYWsgdGVyamFkaSBwZXJiZWRhYW4gdmFyaWFuc2kgcmVzaWR1YWwgeWFuZyBhcnRpbnlhIG1vZGVsIHJlZ3Jlc2kgbWVtZW51aGkgdWppIGFzdW1zaSBub24taGV0ZXJvc2tlZGFzdGlzaXRhcy4NCisgbWVsYWx1aSBVamkgQnJldXNjaC1QYWdhbiwgZGlwZXJvbGVoIHAtdmFsdWUgPSAwLjUzNjkgPiAwLjA1IHlhbmcgYmVyYXJ0aSB1amkgYXN1bXNpIG5vbi1oZXRlcm9za2VkYXN0aXNpdGFzIHRlcnBlbnVoaS4NCg0KDQoNCg0KIyMjIyAzLiBVamkgTm9uLU11bHRpa29saW5lYXJpdGFzDQpgYGB7ciBsYWJlbDEwfQ0KIyBVamkgTXVsdGlrb2xpbmVhcml0YXMNCnZpZihtb2RlbC5ta3QpDQp2aWZfdmFsdWVzIDwtIHZpZihtb2RlbC5ta3QpDQoNCiMgTWVtYnVhdCBwbG90IFZJRg0KcGxvdCh2aWZfdmFsdWVzLCB0eXBlID0gImJhciIsIG1haW4gPSAiVklGIFBsb3QiKQ0KYGBgDQpEaXBlcm9sZWggbmlsYWkgVklGIGtldGlnYSB2YXJpYWJlbCBpbmRlcGVuZGVuIDwgMTAgc2VoaW5nZ2EgdGlkYWsgdGVyamFkaSBtdWx0aWtvbGluZWFyaXRhcyB5YW5nIGJlcmFydGkgYXN1bXNpIG5vbi1tdWx0aWtvbGluZWFyaXRhcyB0ZXJwZW51aGkuDQoNCg0KIyMjIyA0LiBVamkgQXV0b2tvcmVsYXNpIFJlc2lkdWFsDQpgYGB7ciBsYWJlbDExfQ0KIyBVamkgYXV0b2tvcmVsYXNpIHJlc2lkdWFsDQpkd3Rlc3QobW9kZWwubWt0KQ0KYGBgDQpCZXJkYXNhcmthbiB1amkgYXV0b2tvcmVsYXNpIGRpYXRhcywgZGlwZXJvbGVoIHAtdmFsdWUgPSAwLjIyNyA+IDAuMDUgeWFuZyBiZXJhcnRpIGJhaHdhIGFzdW1zaSB0aWRhayB0ZXJqYWRpbnlhIGF1dG9rb3JlbGFzaSB0ZXJwZW51aGkuDQoNCg0KIyMjIE1vZGVsIFJlZ3Jlc2kgTGluaWVyIEJlcmdhbmRhDQpgYGB7ciBsYWJlbDEyfQ0KIyBSaW5na2FzYW4gbW9kZWwgDQpzdW1tYXJ5KG1vZGVsLm1rdCkNCmBgYA0KTWVsYWx1aSBvdXRwdXQgZGlhdGFzLCBkaXBlcm9sZWg6IA0KDQoNCk1vZGVsIHJlZ3Jlc2kgbGluZWFyIGJlcmdhbmRhIHlhaXR1OiANCiQkWSA9IDQuNzAzZS0wMVhfMSAtIDYuOTE2ZS0wMlhfMiArIDkuNTEyZS0wNVhfMyArIFxlcHNpbG9uJCQNCg0KQXJ0aW55YSwgamlrYSB2YXJpYWJlbCBMaWZlX0V4cGVjdGFuY3kgbmFpayBzZWJhbnlhayAxIHRhaHVuLCBtYWthIGFrYW4gbWVuYWlra2FuIEFsY29ob2xfY29uc3VtcHRpb24gc2ViZXNhciA0LjcwM2UtMDEsIG1lbnVydW5rYW4gQWR1bHRfbW9ydGFsaXR5IHNlYmVzYXIgNi45MTZlLTAyLCBkYW4gbWVuYWlra2FuIEdEUF9QZXJfS2FwaXRhIHNlYmVzYXIgOS41MTJlLTA1DQoNCisgVWppIFNpbXVsdGFuOiBuaWxhaSBwLXZhbHVlID0gNi41NTJlLTEwIDwgMC4wNSwgc2VoaW5nZ2EgZGFwYXQgZGlzaW1wdWxrYW4gYmFod2EgdGVyZGFwYXQgcGVuZ2FydWggeWFuZyBzaWduaWZpa2FuIGFudGFyYSB2YXJpYWJlbCBpbmRlcGVuZGVuIHRlcmhhZGFwIHZhcmlhYmVsIGRlcGVuZGVuIHNlY2FyYSBzaW11bHRhbi4NCisgVWppIFBhcnNpYWw6IFZhcmlhYmVsIEFsY29ob2xfY29uc3VtcHRpb24sIEFkdWx0X21vcnRhbGl0eSBkYW4gR0RQX1Blcl9LYXBpdGEgbWVtaWxpa2kgcC0gdmFsdWUgc2VjYXJhIGJlcnR1cnV0LXR1cnV0IDAuMDA3MzMsIDMuMjllLTA3IGRhbiAwLjA0NzY5IDwgMC4wNSB5YW5nIGJlcmFydGkgYmFod2Ega2V0aWdhIHZhcmlhYmVsIGluaSBzZWNhcmEgcGFyc2lhbCBiZXJwZW5nYXJ1aCBzaWduaWZpa2FuIHRlcmhhZGFwIHZhcmlhYmVsIGRlcGVuZGVuLg0KKyBOaWxhaSBLb2VmaXNpZW4gRGV0ZXJtaW5hc2kgKGRpcGVyb2xlaCBkYXJpIEFkanVzdGVkIFItU3F1YXJlKSBtZW1pbGlraSBuaWxhaSAwLjgzOTU1IGF0YXUgODMuOTUlLiBBcnRpbnlhLCB2YXJpYWJlbCBpbmRlcGVuZGVuIGRhbGFtIG1vZGVsIHJlZ3Jlc2kgaW5pIG1hbXB1IG1lbmplbGFza2FuIHZhcmlhc2kgZGFyaSB2YXJpYWJlbCBkZXBlbmRlbiBzZWJlc2FyIDgzLjk1JS4gU2VkYW5na2FuIDE2LjA1JSBsYWlubnlhIGRhcGF0IGRpamVsYXNrYW4gb2xlaCB2YXJpYWJlbCBsYWluIHlhbmcgdGlkYWsgdGVybWFzdWsgZGFsYW0gbW9kZWwgaW5pLiANCg0KKioqDQoNCioqKg0KDQojIyAqKlJlZmVyZW5zaSoqDQotIGh0dHBzOi8vd3d3LnNlbWFudGljc2Nob2xhci5vcmcvcGFwZXIvQW5hbGlzaXMtUGVuZ2FydWgtTW9iaWxpdGFzLVBlbmR1ZHVrLXRlcmhhZGFwLUthc3VzLVJpeWFuaS1TaW5nZ2loL2JjZTA5ZDU5ZWMzMzdlOTY2NWI2ZWRjOTY4MjA5MjVlNjg0NTRjYzcNCi0gaHR0cHM6Ly9qYWdvc3RhdC5jb20vYW5hbGlzaXMtcmVncmVzaS9hc3Vtc2ktZGFsYW0tbW9kZWwtcmVncmVzaS1saW5lYXItYmVyZ2FuZGENCi0gaHR0cHM6Ly9tZWRpYS5uZWxpdGkuY29tL21lZGlhL3B1YmxpY2F0aW9ucy8zNzcxMzktcGVudGluZ255YS11amktYXN1bXNpLWtsYXNpay1wYWRhLWFuYWxpcy01YjQ5MjJkOC5wZGYNCi0gaHR0cHM6Ly93d3cuYmluZy5jb20vc2VhcmNoP3E9cnB1YnMrdGVtYSZxcz1uJmZvcm09UUJSRSZzcD0tMSZnaGM9MSZscT0xJnNtPWNzcm1haW4mcHE9cnB1YnMrdGVtYSZzYz0yLTEwJnNrPSZjdmlkPTNDMTU1MTNBNEZCMjRENTA4NkU0ODA4MzMzNkFFMzQwJmdoc2g9MCZnaGFjYz0wJmdocGw9DQoNCioqKg0KDQo=