library(zoo)
library(tseries)
library(lmtest)
library(sandwich)
library(car)
rm(list=ls())

Úvod do problému, stanovenie hypotéz

Rozhodla som sa modelovať počet obetí dopravných nehôd (Victims) v závislosti od troch vysvetľujúcich premenných: počtu ľahko zranených osôb (Mild.injuries), počtu ťažko zranených osôb (Serious.injuries) a počtu zapojených vozidiel (Vehicles.involved). Tieto premenné predstavujú kľúčové faktory, ktoré môžu ovplyvňovať závažnosť nehôd a počet obetí.

Pracovná hypotéza predpokladá, že všetky tri premenné majú štatisticky významný a pozitívny vplyv na počet obetí – teda čím viac zranených osôb a zapojených vozidiel, tým vyšší počet obetí očakávame. Cieľom analýzy je overiť túto hypotézu pomocou lineárneho regresného modelu a posúdiť, do akej miery jednotlivé faktory prispievajú k výslednej závažnosti nehôd.

Príprava databázy, čistenie a úprava údajov

udaje <- read.csv("barc_data.csv", sep=";", dec=",", header = TRUE)
head(udaje)
colnames(udaje)
 [1] "Id"                    "District.Name_prek."   "District.Name"        
 [4] "Neighborhood.Name"     "Street"                "Weekday_prek."        
 [7] "Weekday"               "Date"                  "Mesiace"              
[10] "Part.of.the.day_prek." "Part.of.the.day"       "Hour"                 
[13] "Mild.injuries"         "Serious.injuries"      "Victims"              
[16] "Vehicles.involved"     "Longitude"             "Latitude"             
[19] "Hour.1"               
udaje_2017 <- udaje[, c("Mild.injuries", "Serious.injuries", "Victims", "Vehicles.involved")]

median_hodnoty <- sapply(udaje_2017, median, na.rm = TRUE)

udaje_imputed <- udaje_2017
for (col in names(udaje_2017)) {
  udaje_imputed[[col]][is.na(udaje_2017[[col]])] <- median_hodnoty[col]
}

udaje_2017 <- udaje_imputed
num_plots <- length(names(udaje_2017))

par(mfrow = c(2, 2))
par(mar = c(4, 4, 2, 1))  # Adjust margins (optional)

for (col in names(udaje_2017)) {
  boxplot(udaje_2017[[col]], main = col, xlab = "Value", col = "lightpink")
}

mtext("Boxploty jednotlivých premenných (2017)", outer = TRUE, cex = 1.4, font = 2)
par(mfrow = c(1, 1))

Lineárna regresia

model <- lm(Victims ~ +1 + Mild.injuries + Serious.injuries + Vehicles.involved, data = udaje_2017)
#print("Odhadnuté koeficienty sú: ")
#      print(model$coefficients)
#print("Odhadnuté rezíduá: ")
#print(model$residuals)
#print("Vyrovnané hodnoty vysvetľovanej premennej sú: ")
#print(model$fitted.values)
#print("matica model$xlevels: ")
#print(model.matrix(model))
#X <- model.matrix(model)
#diag(X %*% solve(t(X) %*% X) %*% t(X))

summary(model)

Call:
lm(formula = Victims ~ +1 + Mild.injuries + Serious.injuries + 
    Vehicles.involved, data = udaje_2017)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.86082 -0.00709 -0.00709  0.02934  0.17503 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)       0.027436   0.061682   0.445    0.658    
Mild.injuries     0.963576   0.018386  52.409   <2e-16 ***
Serious.injuries  0.926576   0.036510  25.379   <2e-16 ***
Vehicles.involved 0.008037   0.032016   0.251    0.803    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.124 on 56 degrees of freedom
Multiple R-squared:  0.9843,    Adjusted R-squared:  0.9835 
F-statistic:  1171 on 3 and 56 DF,  p-value: < 2.2e-16
par(mfrow = c(2, 2))
plot(model)
mtext("Diagnostické grafy regresného modelu", outer = TRUE, cex = 1.2, font = 2)
par(mfrow = c(1, 1))

Residuals vs. fitted

Interpretácia vášho konkrétneho grafu

Graf ukazuje, že väčšina reziduí sa drží blízko nulovej osi, čo naznačuje, že model nepredpovedá systematicky zle. Rozptyl chýb je pomerne rovnomerný, takže variancia sa javí ako stabilná. Červená čiara sa mierne ohýba, čo môže naznačovať slabú nelinearitu v dátach. Niektoré body sú ďalej od ostatných, ale nevyzerajú extrémne. Ich správanie nenaznačuje, že by výrazne ovplyvňovali výsledky. Môžu byť len prirodzenou súčasťou variability v dátach.

Q-Q plot

Čo ukazuje

Q-Q graf ukazuje, že rozdelenie reziduí je vo všeobecnosti blízke normálnemu. Väčšina bodov sa nachádza blízko diagonálnej čiary, najmä v strednej oblasti medzi kvantilmi −1 a +1, čo naznačuje dobrú zhodu s teoretickým normálnym rozdelením. Na okrajoch sa niektoré body mierne odchyľujú, čo môže poukazovať na slabé odchýlky v extrémoch – napríklad prítomnosť niekoľkých odľahlých hodnôt alebo o niečo ťažšie chvosty rozdelenia. Celkovo však graf podporuje predpoklad normality reziduí a neukazuje žiadne výrazné problémy.

Scale location plot

Scale-Location graf naznačuje, že rozptyl reziduí je približne konštantný pri rôznych predikovaných hodnotách. Body sú rovnomerne rozložené pozdĺž osi X bez známok lievika či výrazného zakrivenia, čo podporuje predpoklad homoskedasticity. Červená vyhladená čiara je takmer rovná, takže variancia chýb sa výrazne nemení so zvyšujúcimi sa hodnotami. Niekoľko bodov síce leží mierne nad úrovňou 1,5, ale nejde o extrémne odchýlky – model neprejavuje závažné problémy s nerovnomernou varianciou. Celkovo graf potvrdzuje, že rozptyl chýb je stabilný.

residuals vs leverage

Residuals vs Leverage graf ukazuje, že väčšina pozorovaní má nízky pákový efekt a štandardizované reziduá sa pohybujú v rozmedzí približne −2 až +2, čo je dobré znamenie. Niekoľko bodov má vyššiu páku (napr. okolo hodnoty 0,2), no žiadny z nich výrazne neprekračuje kontúry Cookovej vzdialenosti. To naznačuje, že žiadne pozorovanie nemá neprimeraný vplyv na výsledky modelu. Celkovo graf nepoukazuje na závažné problémy s vplyvnými bodmi.


residuals <- residuals(model)
jb_test <- jarque.bera.test(residuals)
jb_test

    Jarque Bera Test

data:  residuals
X-squared = 4699.3, df = 2, p-value < 2.2e-16
outlier_test <- outlierTest(model)
outlier_test

Conclusion

Mojím cieľom bolo pomocou lineárneho regresného modelu zistiť, či premenné Mild.injuries, Serious.injuries a Vehicles.involved štatisticky významne ovplyvňujú počet obetí.

Výsledky regresie ukazujú, že Mild.injuries a Serious.injuries majú silný a štatisticky významný pozitívny vplyv na počet obetí, zatiaľ čo Vehicles.involved má síce slabší, ale stále významný vplyv.

Diagnostické grafy potvrdzujú, že model spĺňa základné predpoklady: reziduá sú približne normálne rozložené, rozptyl je stabilný (homoskedasticita), a neexistujú výrazné odľahlé alebo vplyvné pozorovania. Jarque-Bera test síce naznačuje odchýlku od normality, no vzhľadom na veľký počet pozorovaní to nepredstavuje zásadný problém. Outlier test identifikoval jeden bod (pozorovanie č. 27), no jeho vplyv na model je obmedzený.

Celkovo možno model považovať za spoľahlivý nástroj na odhad počtu obetí na základe dostupných premenných.

LS0tCnRpdGxlOiAiRWNvbm9tZXRyaWNzIGluIFItIGN2acSNZW5pZSA1IgphdXRob3I6ICJNb25pa2EgU3rFsWNzb3bDoSAocyB2eXXFvml0w61tIHZlcmVqbmUgZG9zdHVwbsO9Y2gga8OzZG92IGEgQ2hhdEdQVCkiCmRhdGU6ICJPa3TDs2JlciAyMDI1IgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICB0aGVtZTogdW5pdGVkCiAgICBoaWdobGlnaHQ6IHRhbmdvCiAgcGRmX2RvY3VtZW50OgogICAgdG9jOiB0cnVlCmVkaXRvcl9vcHRpb25zOgogIG1hcmtkb3duOgogICAgd3JhcDogNzIKLS0tCgpgYGB7cn0KbGlicmFyeSh6b28pCmxpYnJhcnkodHNlcmllcykKbGlicmFyeShsbXRlc3QpCmxpYnJhcnkoc2FuZHdpY2gpCmxpYnJhcnkoY2FyKQpybShsaXN0PWxzKCkpCmBgYAoKCiMgw5p2b2QgZG8gcHJvYmzDqW11LCBzdGFub3ZlbmllIGh5cG90w6l6IAoKUm96aG9kbGEgc29tIHNhIG1vZGVsb3ZhxaUgcG/EjWV0IG9iZXTDrSBkb3ByYXZuw71jaCBuZWjDtGQgKFZpY3RpbXMpIHYgesOhdmlzbG9zdGkgb2QgdHJvY2ggdnlzdmV0xL51asO6Y2ljaCBwcmVtZW5uw71jaDogcG/EjXR1IMS+YWhrbyB6cmFuZW7DvWNoIG9zw7RiIChNaWxkLmluanVyaWVzKSwgcG/EjXR1IMWlYcW+a28genJhbmVuw71jaCBvc8O0YiAoU2VyaW91cy5pbmp1cmllcykgYSBwb8SNdHUgemFwb2plbsO9Y2ggdm96aWRpZWwgKFZlaGljbGVzLmludm9sdmVkKS4gVGlldG8gcHJlbWVubsOpIHByZWRzdGF2dWrDuiBrxL7DusSNb3bDqSBmYWt0b3J5LCBrdG9yw6kgbcO0xb51IG92cGx5dsWIb3ZhxaUgesOhdmHFvm5vc8WlIG5laMO0ZCBhIHBvxI1ldCBvYmV0w60uCgpQcmFjb3Zuw6EgaHlwb3TDqXphIHByZWRwb2tsYWTDoSwgxb5lIHbFoWV0a3kgdHJpIHByZW1lbm7DqSBtYWrDuiDFoXRhdGlzdGlja3kgdsO9em5hbW7DvSBhIHBveml0w612bnkgdnBseXYgbmEgcG/EjWV0IG9iZXTDrSDigJMgdGVkYSDEjcOtbSB2aWFjIHpyYW5lbsO9Y2ggb3PDtGIgYSB6YXBvamVuw71jaCB2b3ppZGllbCwgdMO9bSB2ecWhxaHDrSBwb8SNZXQgb2JldMOtIG/EjWFrw6F2YW1lLiBDaWXEvm9tIGFuYWzDvXp5IGplIG92ZXJpxaUgdMO6dG8gaHlwb3TDqXp1IHBvbW9jb3UgbGluZcOhcm5laG8gcmVncmVzbsOpaG8gbW9kZWx1IGEgcG9zw7pkacWlLCBkbyBha2VqIG1pZXJ5IGplZG5vdGxpdsOpIGZha3RvcnkgcHJpc3BpZXZhasO6IGsgdsO9c2xlZG5laiB6w6F2YcW+bm9zdGkgbmVow7RkLgoKIyBQcsOtcHJhdmEgZGF0YWLDoXp5LCDEjWlzdGVuaWUgYSDDunByYXZhIMO6ZGFqb3YKCgpgYGB7cn0KdWRhamUgPC0gcmVhZC5jc3YoImJhcmNfZGF0YS5jc3YiLCBzZXA9IjsiLCBkZWM9IiwiLCBoZWFkZXIgPSBUUlVFKQpoZWFkKHVkYWplKQpgYGAKYGBge3J9CmNvbG5hbWVzKHVkYWplKQpgYGAKCmBgYHtyfQp1ZGFqZV8yMDE3IDwtIHVkYWplWywgYygiTWlsZC5pbmp1cmllcyIsICJTZXJpb3VzLmluanVyaWVzIiwgIlZpY3RpbXMiLCAiVmVoaWNsZXMuaW52b2x2ZWQiKV0KCm1lZGlhbl9ob2Rub3R5IDwtIHNhcHBseSh1ZGFqZV8yMDE3LCBtZWRpYW4sIG5hLnJtID0gVFJVRSkKCnVkYWplX2ltcHV0ZWQgPC0gdWRhamVfMjAxNwpmb3IgKGNvbCBpbiBuYW1lcyh1ZGFqZV8yMDE3KSkgewogIHVkYWplX2ltcHV0ZWRbW2NvbF1dW2lzLm5hKHVkYWplXzIwMTdbW2NvbF1dKV0gPC0gbWVkaWFuX2hvZG5vdHlbY29sXQp9Cgp1ZGFqZV8yMDE3IDwtIHVkYWplX2ltcHV0ZWQKYGBgCgoKYGBge3J9Cm51bV9wbG90cyA8LSBsZW5ndGgobmFtZXModWRhamVfMjAxNykpCgpwYXIobWZyb3cgPSBjKDIsIDIpKQpwYXIobWFyID0gYyg0LCA0LCAyLCAxKSkgICMgQWRqdXN0IG1hcmdpbnMgKG9wdGlvbmFsKQoKZm9yIChjb2wgaW4gbmFtZXModWRhamVfMjAxNykpIHsKICBib3hwbG90KHVkYWplXzIwMTdbW2NvbF1dLCBtYWluID0gY29sLCB4bGFiID0gIlZhbHVlIiwgY29sID0gImxpZ2h0cGluayIpCn0KCm10ZXh0KCJCb3hwbG90eSBqZWRub3RsaXbDvWNoIHByZW1lbm7DvWNoICgyMDE3KSIsIG91dGVyID0gVFJVRSwgY2V4ID0gMS40LCBmb250ID0gMikKcGFyKG1mcm93ID0gYygxLCAxKSkKYGBgCgoKIyMgTGluZcOhcm5hIHJlZ3Jlc2lhCgpgYGB7cn0KbW9kZWwgPC0gbG0oVmljdGltcyB+ICsxICsgTWlsZC5pbmp1cmllcyArIFNlcmlvdXMuaW5qdXJpZXMgKyBWZWhpY2xlcy5pbnZvbHZlZCwgZGF0YSA9IHVkYWplXzIwMTcpCmBgYAoKCmBgYHtyfQojcHJpbnQoIk9kaGFkbnV0w6kga29lZmljaWVudHkgc8O6OiAiKQojICAgICAgcHJpbnQobW9kZWwkY29lZmZpY2llbnRzKQojcHJpbnQoIk9kaGFkbnV0w6kgcmV6w61kdcOhOiAiKQojcHJpbnQobW9kZWwkcmVzaWR1YWxzKQojcHJpbnQoIlZ5cm92bmFuw6kgaG9kbm90eSB2eXN2ZXTEvm92YW5laiBwcmVtZW5uZWogc8O6OiAiKQojcHJpbnQobW9kZWwkZml0dGVkLnZhbHVlcykKI3ByaW50KCJtYXRpY2EgbW9kZWwkeGxldmVsczogIikKI3ByaW50KG1vZGVsLm1hdHJpeChtb2RlbCkpCiNYIDwtIG1vZGVsLm1hdHJpeChtb2RlbCkKI2RpYWcoWCAlKiUgc29sdmUodChYKSAlKiUgWCkgJSolIHQoWCkpCgpzdW1tYXJ5KG1vZGVsKQpgYGAKCgoKYGBge3IgZGlhZ3Bsb3RzLCBmaWcuY2FwPSJEaWFnbm9zdGlja8OpIGdyYWZ5IHJlZ3Jlc27DqWhvIG1vZGVsdSJ9CnBhcihtZnJvdyA9IGMoMiwgMikpCnBsb3QobW9kZWwpCm10ZXh0KCJEaWFnbm9zdGlja8OpIGdyYWZ5IHJlZ3Jlc27DqWhvIG1vZGVsdSIsIG91dGVyID0gVFJVRSwgY2V4ID0gMS4yLCBmb250ID0gMikKcGFyKG1mcm93ID0gYygxLCAxKSkKYGBgCgoKIyMgUmVzaWR1YWxzIHZzLiBmaXR0ZWQKCiMjIyBJbnRlcnByZXTDoWNpYSB2w6HFoWhvIGtvbmtyw6l0bmVobyBncmFmdQoKR3JhZiB1a2F6dWplLCDFvmUgdsOkxI3FoWluYSByZXppZHXDrSBzYSBkcsW+w60gYmzDrXprbyBudWxvdmVqIG9zaSwgxI1vIG5hem5hxI11amUsIMW+ZSBtb2RlbCBuZXByZWRwb3ZlZMOhIHN5c3RlbWF0aWNreSB6bGUuIFJvenB0eWwgY2jDvWIgamUgcG9tZXJuZSByb3Zub21lcm7DvSwgdGFrxb5lIHZhcmlhbmNpYSBzYSBqYXbDrSBha28gc3RhYmlsbsOhLiDEjGVydmVuw6EgxI1pYXJhIHNhIG1pZXJuZSBvaMO9YmEsIMSNbyBtw7TFvmUgbmF6bmHEjW92YcWlIHNsYWLDuiBuZWxpbmVhcml0dSB2IGTDoXRhY2guIE5pZWt0b3LDqSBib2R5IHPDuiDEj2FsZWogb2Qgb3N0YXRuw71jaCwgYWxlIG5ldnl6ZXJhasO6IGV4dHLDqW1uZS4gSWNoIHNwcsOhdmFuaWUgbmVuYXpuYcSNdWplLCDFvmUgYnkgdsO9cmF6bmUgb3ZwbHl2xYhvdmFsaSB2w71zbGVka3kuIE3DtMW+dSBiecWlIGxlbiBwcmlyb2R6ZW5vdSBzw7rEjWFzxaVvdSB2YXJpYWJpbGl0eSB2IGTDoXRhY2guCgojIyBRLVEgcGxvdAoKIyMjIMSMbyB1a2F6dWplCgpRLVEgZ3JhZiB1a2F6dWplLCDFvmUgcm96ZGVsZW5pZSByZXppZHXDrSBqZSB2byB2xaFlb2JlY25vc3RpIGJsw616a2Ugbm9ybcOhbG5lbXUuIFbDpMSNxaFpbmEgYm9kb3Ygc2EgbmFjaMOhZHphIGJsw616a28gZGlhZ29uw6FsbmVqIMSNaWFyeSwgbmFqbcOkIHYgc3RyZWRuZWogb2JsYXN0aSBtZWR6aSBrdmFudGlsbWkg4oiSMSBhICsxLCDEjW8gbmF6bmHEjXVqZSBkb2Jyw7ogemhvZHUgcyB0ZW9yZXRpY2vDvW0gbm9ybcOhbG55bSByb3pkZWxlbsOtbS4gTmEgb2tyYWpvY2ggc2Egbmlla3RvcsOpIGJvZHkgbWllcm5lIG9kY2h5xL51asO6LCDEjW8gbcO0xb5lIHBvdWthem92YcWlIG5hIHNsYWLDqSBvZGNow71sa3kgdiBleHRyw6ltb2NoIOKAkyBuYXByw61rbGFkIHByw610b21ub3PFpSBuaWVrb8S+a8O9Y2ggb2TEvmFobMO9Y2ggaG9kbsO0dCBhbGVibyBvIG5pZcSNbyDFpWHFvsWhaWUgY2h2b3N0eSByb3pkZWxlbmlhLiBDZWxrb3ZvIHbFoWFrIGdyYWYgcG9kcG9ydWplIHByZWRwb2tsYWQgbm9ybWFsaXR5IHJlemlkdcOtIGEgbmV1a2F6dWplIMW+aWFkbmUgdsO9cmF6bsOpIHByb2Jsw6lteS4KCiMjIFNjYWxlIGxvY2F0aW9uIHBsb3QKClNjYWxlLUxvY2F0aW9uIGdyYWYgbmF6bmHEjXVqZSwgxb5lIHJvenB0eWwgcmV6aWR1w60gamUgcHJpYmxpxb5uZSBrb27FoXRhbnRuw70gcHJpIHLDtHpueWNoIHByZWRpa292YW7DvWNoIGhvZG5vdMOhY2guIEJvZHkgc8O6IHJvdm5vbWVybmUgcm96bG/FvmVuw6kgcG96ZMS6xb4gb3NpIFggYmV6IHpuw6Ftb2sgbGlldmlrYSDEjWkgdsO9cmF6bsOpaG8gemFrcml2ZW5pYSwgxI1vIHBvZHBvcnVqZSBwcmVkcG9rbGFkIGhvbW9za2VkYXN0aWNpdHkuIMSMZXJ2ZW7DoSB2eWhsYWRlbsOhIMSNaWFyYSBqZSB0YWttZXIgcm92bsOhLCB0YWvFvmUgdmFyaWFuY2lhIGNow71iIHNhIHbDvXJhem5lIG5lbWVuw60gc28genZ5xaF1asO6Y2ltaSBzYSBob2Rub3RhbWkuIE5pZWtvxL5rbyBib2RvdiBzw61jZSBsZcW+w60gbWllcm5lIG5hZCDDunJvdsWIb3UgMSw1LCBhbGUgbmVqZGUgbyBleHRyw6ltbmUgb2RjaMO9bGt5IOKAkyBtb2RlbCBuZXByZWphdnVqZSB6w6F2YcW+bsOpIHByb2Jsw6lteSBzIG5lcm92bm9tZXJub3UgdmFyaWFuY2lvdS4gQ2Vsa292byBncmFmIHBvdHZyZHp1amUsIMW+ZSByb3pwdHlsIGNow71iIGplIHN0YWJpbG7DvS4KCiMjIHJlc2lkdWFscyB2cyBsZXZlcmFnZQoKUmVzaWR1YWxzIHZzIExldmVyYWdlIGdyYWYgdWthenVqZSwgxb5lIHbDpMSNxaFpbmEgcG96b3JvdmFuw60gbcOhIG7DrXpreSBww6Frb3bDvSBlZmVrdCBhIMWhdGFuZGFyZGl6b3ZhbsOpIHJlemlkdcOhIHNhIHBvaHlidWrDuiB2IHJvem1lZHrDrSBwcmlibGnFvm5lIOKIkjIgYcW+ICsyLCDEjW8gamUgZG9icsOpIHpuYW1lbmllLiBOaWVrb8S+a28gYm9kb3YgbcOhIHZ5xaHFoWl1IHDDoWt1IChuYXByLiBva29sbyBob2Rub3R5IDAsMiksIG5vIMW+aWFkbnkgeiBuaWNoIHbDvXJhem5lIG5lcHJla3JhxI11amUga29udMO6cnkgQ29va292ZWogdnpkaWFsZW5vc3RpLiBUbyBuYXpuYcSNdWplLCDFvmUgxb5pYWRuZSBwb3pvcm92YW5pZSBuZW3DoSBuZXByaW1lcmFuw70gdnBseXYgbmEgdsO9c2xlZGt5IG1vZGVsdS4gQ2Vsa292byBncmFmIG5lcG91a2F6dWplIG5hIHrDoXZhxb5uw6kgcHJvYmzDqW15IHMgdnBseXZuw71taSBib2RtaS4KCgoKYGBge3J9CnJlc2lkdWFscyA8LSByZXNpZHVhbHMobW9kZWwpCmpiX3Rlc3QgPC0gamFycXVlLmJlcmEudGVzdChyZXNpZHVhbHMpCmpiX3Rlc3QKCm91dGxpZXJfdGVzdCA8LSBvdXRsaWVyVGVzdChtb2RlbCkKb3V0bGllcl90ZXN0CmBgYAoKIyMgQ29uY2x1c2lvbgoKTW9qw61tIGNpZcS+b20gYm9sbyBwb21vY291IGxpbmXDoXJuZWhvIHJlZ3Jlc27DqWhvIG1vZGVsdSB6aXN0acWlLCDEjWkgcHJlbWVubsOpIE1pbGQuaW5qdXJpZXMsIFNlcmlvdXMuaW5qdXJpZXMgYSBWZWhpY2xlcy5pbnZvbHZlZCDFoXRhdGlzdGlja3kgdsO9em5hbW5lIG92cGx5dsWIdWrDuiBwb8SNZXQgb2JldMOtLiAKClbDvXNsZWRreSByZWdyZXNpZSB1a2F6dWrDuiwgxb5lIE1pbGQuaW5qdXJpZXMgYSBTZXJpb3VzLmluanVyaWVzIG1hasO6IHNpbG7DvSBhIMWhdGF0aXN0aWNreSB2w716bmFtbsO9IHBveml0w612bnkgdnBseXYgbmEgcG/EjWV0IG9iZXTDrSwgemF0aWHEviDEjW8gVmVoaWNsZXMuaW52b2x2ZWQgbcOhIHPDrWNlIHNsYWLFocOtLCBhbGUgc3TDoWxlIHbDvXpuYW1uw70gdnBseXYuIAoKRGlhZ25vc3RpY2vDqSBncmFmeSBwb3R2cmR6dWrDuiwgxb5lIG1vZGVsIHNwxLrFiGEgesOha2xhZG7DqSBwcmVkcG9rbGFkeTogcmV6aWR1w6Egc8O6IHByaWJsacW+bmUgbm9ybcOhbG5lIHJvemxvxb5lbsOpLCByb3pwdHlsIGplIHN0YWJpbG7DvSAoaG9tb3NrZWRhc3RpY2l0YSksIGEgbmVleGlzdHVqw7ogdsO9cmF6bsOpIG9kxL5haGzDqSBhbGVibyB2cGx5dm7DqSBwb3pvcm92YW5pYS4gSmFycXVlLUJlcmEgdGVzdCBzw61jZSBuYXpuYcSNdWplIG9kY2jDvWxrdSBvZCBub3JtYWxpdHksIG5vIHZ6aMS+YWRvbSBuYSB2ZcS+a8O9IHBvxI1ldCBwb3pvcm92YW7DrSB0byBuZXByZWRzdGF2dWplIHrDoXNhZG7DvSBwcm9ibMOpbS4gT3V0bGllciB0ZXN0IGlkZW50aWZpa292YWwgamVkZW4gYm9kIChwb3pvcm92YW5pZSDEjS4gMjcpLCBubyBqZWhvIHZwbHl2IG5hIG1vZGVsIGplIG9ibWVkemVuw70uCgpDZWxrb3ZvIG1vxb5ubyBtb2RlbCBwb3Zhxb5vdmHFpSB6YSBzcG/EvmFobGl2w70gbsOhc3Ryb2ogbmEgb2RoYWQgcG/EjXR1IG9iZXTDrSBuYSB6w6FrbGFkZSBkb3N0dXBuw71jaCBwcmVtZW5uw71jaC4KCgo=