knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE, cache = FALSE)
 install.packages(c("tidyverse","lubridate","scales","corrplot","GGally","kableExtra","broom","rmarkdown","knitr"))
 
 library(tidyverse)
 library(lubridate)
 library(scales)
 library(corrplot)
 library(GGally)
 library(kableExtra)
 library(broom)

Import udajov

df <- read_csv("economic_indicators_dataset_2010_2023.csv")
glimpse(df)
knitr::kable(head(df, 10)) %>% kable_styling(full_width = FALSE)
kable_styling(full_width = FALSE)

Dataset obsahuje makroekonomické premenné: infláciu, rast HDP, nezamestnanosť, úrokové sadzby a hodnotu akciového indexu. Premenná Date predstavuje časovú os.

Prevod dátumu

df <- df %>%
 mutate(Date = parse_date_time(Date, orders = c("Ymd","Y-m-d","Y")),
        Year = year(Date))

Filtrovanie rokov 2010–2023

df <- df %>% filter(Year >= 2010 & Year <= 2023)

Vyčistenie číselných stĺpcov

num_cols <- c("Inflation Rate (%)", "GDP Growth Rate (%)",
             "Unemployment Rate (%)", "Interest Rate (%)", "Stock Index Value")
clean_num <- function(x) {
 if(is.character(x)) x <- gsub("%|,", ".", x)
 as.numeric(x)
}
for(col in num_cols) {
 if(col %in% names(df)) df[[col]] <- clean_num(df[[col]])
}

Počet chýbajúcich hodnôt

missing_tbl <- df %>%
 summarise(across(all_of(num_cols), ~sum(is.na(.)))) %>%
 pivot_longer(everything(), names_to = "Premenná", values_to = "Počet chýbajúcich")
kable(missing_tbl, caption = "Chýbajúce hodnoty podľa premenných") %>%
 kable_styling(full_width = FALSE)

Dátum bol prevedený na formát YYYY, číselné údaje boli vyčistené od znakov „%“.Tabuľka ukazuje, či dataset obsahuje prázdne hodnoty, ktoré môžu ovplyvniť analýzu.

Popisna statistica

Popisná štatistika (2010–2023)
Premenná n mean sd min q25 median q75 max
Inflation Rate (%) 500 5.085 2.956 0.00 2.525 5.205 7.710 9.99
GDP Growth Rate (%) 500 2.415 4.075 -5.00 -1.170 2.580 5.445 9.93
Unemployment Rate (%) 500 6.907 2.982 2.00 4.258 6.865 9.502 11.97
Interest Rate (%) 500 4.698 3.153 -0.98 2.027 4.975 7.352 10.00
Stock Index Value 500 20926.227 11066.259 1017.27 11587.863 20996.210 30824.847 39982.21

Priemerná inflácia, rast HDP a nezamestnanosť poskytujú prehľad o ekonomickej stabilite. Ak je mean oveľa vyšší než median, znamená to prítomnosť extrémnych hodnôt. Vysoké sd indikuje volatilitu danej premennej.

Casove trendy

Grafy zobrazujú, ako sa menila inflácia, úrokové sadzby, nezamestnanosť či rast HDP. Možno si všimnúť napríklad rast inflácie po roku 2020.

Vztahy medzi premennymi

Vidno, že rast HDP má často pozitívny vzťah k výkonnosti akciového trhu — ekonomický rast podporuje investície.

Korelačná matica (heatmap)

Korelačná matica
Inflation Rate (%) GDP Growth Rate (%) Unemployment Rate (%) Interest Rate (%) Stock Index Value
Inflation Rate (%) 1.000 0.005 0.013 0.014 -0.011
GDP Growth Rate (%) 0.005 1.000 0.030 0.040 -0.013
Unemployment Rate (%) 0.013 0.030 1.000 0.020 -0.043
Interest Rate (%) 0.014 0.040 0.020 1.000 -0.051
Stock Index Value -0.011 -0.013 -0.043 -0.051 1.000
corr_mat <- cor(df %>% select(all_of(num_cols)), use = "pairwise.complete.obs")
kable(round(corr_mat, 3), caption = "Korelačná matica") %>%
 kable_styling(full_width = FALSE)

corrplot(corr_mat, method = "color", type = "upper", addCoef.col = "black",
        tl.col = "black", tl.srt = 45, number.cex = 0.7)

Hodnoty blízke +1 ukazujú silnú pozitívnu väzbu (napr. inflácia a úroková sadzba).Hodnoty blízke –1 znamenajú negatívnu koreláciu (napr. nezamestnanosť a akciový index).Ak sú niektoré prediktory vysoko korelované, treba dávať pozor na multikolinearitu v regresii.

Test hypotézy (t-test)

x2010 <- df %>% filter(Year == 2010) %>% pull(`Inflation Rate (%)`)
x2020 <- df %>% filter(Year == 2020) %>% pull(`Inflation Rate (%)`)
t_res <- t.test(x2010, x2020, var.equal = FALSE)
t_res

    Welch Two Sample t-test

data:  x2010 and x2020
t = 1.5598, df = 67.535, p-value = 0.1235
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.3038695  2.4786652
sample estimates:
mean of x mean of y 
 6.138485  5.051087 

Ak p-hodnota < 0.05 → rozdiel medzi infláciou v rokoch 2010 a 2020 je štatisticky významný.To môže naznačovať vplyv hospodárskej krízy alebo pandemického obdobia.

Jednoduchá lineárna regresia

model <- lm(`Stock Index Value` ~ `GDP Growth Rate (%)` + `Interest Rate (%)`, data = df)
summary(model)

Call:
lm(formula = `Stock Index Value` ~ `GDP Growth Rate (%)` + `Interest Rate (%)`, 
    data = df)

Residuals:
     Min       1Q   Median       3Q      Max 
-20775.4  -9394.0    173.8   9852.3  19765.5 

Coefficients:
                      Estimate Std. Error t value Pr(>|t|)    
(Intercept)           21837.54     927.78  23.537   <2e-16 ***
`GDP Growth Rate (%)`   -29.81     121.75  -0.245    0.807    
`Interest Rate (%)`    -178.65     157.35  -1.135    0.257    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 11070 on 497 degrees of freedom
Multiple R-squared:  0.002756,  Adjusted R-squared:  -0.001257 
F-statistic: 0.6867 on 2 and 497 DF,  p-value: 0.5037
tidy(model, conf.int = TRUE) %>%
 kable(digits = 4, caption = "Koeficienty regresie") %>%
 kable_styling(full_width = FALSE)
Koeficienty regresie
term estimate std.error statistic p.value conf.low conf.high
(Intercept) 21837.5404 927.7771 23.5375 0.0000 20014.6916 23660.3893
`GDP Growth Rate (%)` -29.8139 121.7501 -0.2449 0.8067 -269.0221 209.3944
`Interest Rate (%)` -178.6479 157.3491 -1.1354 0.2568 -487.7994 130.5036
glance(model) %>%
 select(r.squared, adj.r.squared, AIC, BIC, nobs) %>%
 kable(digits = 3, caption = "Kvalita modelu") %>%
 kable_styling(full_width = FALSE)
Kvalita modelu
r.squared adj.r.squared AIC BIC nobs
0.003 -0.001 10736.21 10753.07 500

Ak je koeficient pri GDP Growth pozitívny a významný → rast HDP zvyšuje hodnotu akciového indexu.Ak je Interest Rate negatívny → vyššie úrokové sadzby znižujú trhové ceny akcií.R² ukazuje, koľko variability akciového indexu model vysvetľuje.

Zhrnutie a odporúčania

Najvyššia korelácia bola medzi Inflation Rate a Interest Rate – očakávaný vzťah menovej politiky.

• Rast HDP má kladný vplyv na akciové trhy.

• Inflácia v roku 2020 sa štatisticky líšila od roku 2010.

• Pre lepšie predikcie možno odporučiť rozšírenie modelu o časové oneskorenia (ARIMA, VAR).

LS0tCnRpdGxlOiAiUHLDoWNhIHMgZGF0YWLDoXpvdSAtIGltcG9ydCDDumRham92LCBncmFmeSwgxaF0YXRpc3Rpa3kiCmF1dGhvcjogIll1bGlpYSBMeXN5dHNpYSAgPGJyPgoocyB2eXXFvml0w61tIHZlcmVqbmUgZG9zdHVwbsO9Y2gga8OzZG92IGEgQ2hhdEdQVCkiCmRhdGU6ICJTZXB0ZW1iZXIgMjAyNSIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIHRoZW1lOiB1bml0ZWQKICAgIGhpZ2hsaWdodDogdGFuZ28KZWRpdG9yX29wdGlvbnM6IAogIG1hcmtkb3duOiAKICAgIHdyYXA6IDcyCi0tLQpgYGB7cn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgY2FjaGUgPSBGQUxTRSkKIGluc3RhbGwucGFja2FnZXMoYygidGlkeXZlcnNlIiwibHVicmlkYXRlIiwic2NhbGVzIiwiY29ycnBsb3QiLCJHR2FsbHkiLCJrYWJsZUV4dHJhIiwiYnJvb20iLCJybWFya2Rvd24iLCJrbml0ciIpKQogCiBsaWJyYXJ5KHRpZHl2ZXJzZSkKIGxpYnJhcnkobHVicmlkYXRlKQogbGlicmFyeShzY2FsZXMpCiBsaWJyYXJ5KGNvcnJwbG90KQogbGlicmFyeShHR2FsbHkpCiBsaWJyYXJ5KGthYmxlRXh0cmEpCiBsaWJyYXJ5KGJyb29tKQpgYGAKIAojIyBJbXBvcnQgdWRham92CmBgYHtyfQpkZiA8LSByZWFkX2NzdigiZWNvbm9taWNfaW5kaWNhdG9yc19kYXRhc2V0XzIwMTBfMjAyMy5jc3YiKQpnbGltcHNlKGRmKQprbml0cjo6a2FibGUoaGVhZChkZiwgMTApKSAlPiUga2FibGVfc3R5bGluZyhmdWxsX3dpZHRoID0gRkFMU0UpCmthYmxlX3N0eWxpbmcoZnVsbF93aWR0aCA9IEZBTFNFKQoKYGBgCiMjIyMgRGF0YXNldCBvYnNhaHVqZSBtYWtyb2Vrb25vbWlja8OpIHByZW1lbm7DqTogaW5mbMOhY2l1LCByYXN0IEhEUCwgbmV6YW1lc3RuYW5vc8WlLCDDunJva292w6kgc2FkemJ5IGEgaG9kbm90dSBha2Npb3bDqWhvIGluZGV4dS4gUHJlbWVubsOhIERhdGUgcHJlZHN0YXZ1amUgxI1hc292w7ogb3MuCgojIyBQcmV2b2QgZMOhdHVtdQpgYGB7cn0KZGYgPC0gZGYgJT4lCiBtdXRhdGUoRGF0ZSA9IHBhcnNlX2RhdGVfdGltZShEYXRlLCBvcmRlcnMgPSBjKCJZbWQiLCJZLW0tZCIsIlkiKSksCiAgICAgICAgWWVhciA9IHllYXIoRGF0ZSkpCmBgYAoKIyMgRmlsdHJvdmFuaWUgcm9rb3YgMjAxMOKAkzIwMjMKYGBge3J9CmRmIDwtIGRmICU+JSBmaWx0ZXIoWWVhciA+PSAyMDEwICYgWWVhciA8PSAyMDIzKQpgYGAKCiMjIFZ5xI1pc3RlbmllIMSNw61zZWxuw71jaCBzdMS6cGNvdgpgYGB7cn0KbnVtX2NvbHMgPC0gYygiSW5mbGF0aW9uIFJhdGUgKCUpIiwgIkdEUCBHcm93dGggUmF0ZSAoJSkiLAogICAgICAgICAgICAgIlVuZW1wbG95bWVudCBSYXRlICglKSIsICJJbnRlcmVzdCBSYXRlICglKSIsICJTdG9jayBJbmRleCBWYWx1ZSIpCmNsZWFuX251bSA8LSBmdW5jdGlvbih4KSB7CiBpZihpcy5jaGFyYWN0ZXIoeCkpIHggPC0gZ3N1YigiJXwsIiwgIi4iLCB4KQogYXMubnVtZXJpYyh4KQp9CmZvcihjb2wgaW4gbnVtX2NvbHMpIHsKIGlmKGNvbCAlaW4lIG5hbWVzKGRmKSkgZGZbW2NvbF1dIDwtIGNsZWFuX251bShkZltbY29sXV0pCn0KYGBgCgojIyBQb8SNZXQgY2jDvWJhasO6Y2ljaCBob2Ruw7R0CgpgYGB7cn0KbWlzc2luZ190YmwgPC0gZGYgJT4lCiBzdW1tYXJpc2UoYWNyb3NzKGFsbF9vZihudW1fY29scyksIH5zdW0oaXMubmEoLikpKSkgJT4lCiBwaXZvdF9sb25nZXIoZXZlcnl0aGluZygpLCBuYW1lc190byA9ICJQcmVtZW5uw6EiLCB2YWx1ZXNfdG8gPSAiUG/EjWV0IGNow71iYWrDumNpY2giKQprYWJsZShtaXNzaW5nX3RibCwgY2FwdGlvbiA9ICJDaMO9YmFqw7pjZSBob2Rub3R5IHBvZMS+YSBwcmVtZW5uw71jaCIpICU+JQoga2FibGVfc3R5bGluZyhmdWxsX3dpZHRoID0gRkFMU0UpCmBgYAogCiMjIyMgRMOhdHVtIGJvbCBwcmV2ZWRlbsO9IG5hIGZvcm3DoXQgWVlZWSwgxI3DrXNlbG7DqSDDumRhamUgYm9saSB2ecSNaXN0ZW7DqSBvZCB6bmFrb3Yg4oCeJeKAnC5UYWJ1xL5rYSB1a2F6dWplLCDEjWkgZGF0YXNldCBvYnNhaHVqZSBwcsOhemRuZSBob2Rub3R5LCBrdG9yw6kgbcO0xb51IG92cGx5dm5pxaUgYW5hbMO9enUuCgojIFBvcGlzbmEgc3RhdGlzdGljYSAKYGBge3J9CmRlc2MgPC0gZGYgJT4lCiBzdW1tYXJpc2UoYWNyb3NzKGFsbF9vZihudW1fY29scyksCiAgICAgICAgICAgICAgICAgIGxpc3QobiA9IH5zdW0oIWlzLm5hKC4pKSwKICAgICAgICAgICAgICAgICAgICAgICBtZWFuID0gfm1lYW4oLiwgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgICAgICAgICAgICBzZCA9IH5zZCguLCBuYS5ybSA9IFRSVUUpLAogICAgICAgICAgICAgICAgICAgICAgIG1pbiA9IH5taW4oLiwgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgICAgICAgICAgICBxMjUgPSB+cXVhbnRpbGUoLiwgMC4yNSwgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgICAgICAgICAgICBtZWRpYW4gPSB+bWVkaWFuKC4sIG5hLnJtID0gVFJVRSksCiAgICAgICAgICAgICAgICAgICAgICAgcTc1ID0gfnF1YW50aWxlKC4sIDAuNzUsIG5hLnJtID0gVFJVRSksCiAgICAgICAgICAgICAgICAgICAgICAgbWF4ID0gfm1heCguLCBuYS5ybSA9IFRSVUUpKSwKICAgICAgICAgICAgICAgICAgLm5hbWVzID0gInsuY29sfV97LmZufSIpKSAlPiUKIHBpdm90X2xvbmdlcihldmVyeXRoaW5nKCksIG5hbWVzX3RvID0gYygiUHJlbWVubsOhIiwixaB0YXRpc3Rpa2EiKSwgbmFtZXNfc2VwID0gIl8iKSAlPiUKIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSAixaB0YXRpc3Rpa2EiLCB2YWx1ZXNfZnJvbSA9ICJ2YWx1ZSIpCmthYmxlKGRlc2MsIGRpZ2l0cyA9IDMsIGNhcHRpb24gPSAiUG9waXNuw6EgxaF0YXRpc3Rpa2EgKDIwMTDigJMyMDIzKSIpICU+JQoga2FibGVfc3R5bGluZyhmdWxsX3dpZHRoID0gRkFMU0UpCmBgYAojIyMjIFByaWVtZXJuw6EgaW5mbMOhY2lhLCByYXN0IEhEUCBhIG5lemFtZXN0bmFub3PFpSBwb3NreXR1asO6IHByZWjEvmFkIG8gZWtvbm9taWNrZWogc3RhYmlsaXRlLiBBayBqZSBtZWFuIG92ZcS+YSB2ecWhxaHDrSBuZcW+IG1lZGlhbiwgem5hbWVuw6EgdG8gcHLDrXRvbW5vc8WlIGV4dHLDqW1ueWNoIGhvZG7DtHQuIFZ5c29rw6kgc2QgaW5kaWt1amUgdm9sYXRpbGl0dSBkYW5laiBwcmVtZW5uZWouCgojIENhc292ZSB0cmVuZHkKYGBge3J9CnRzX2xvbmcgPC0gZGYgJT4lCiBwaXZvdF9sb25nZXIoY29scyA9IGFsbF9vZihudW1fY29scyksIG5hbWVzX3RvID0gIlByZW1lbm7DoSIsIHZhbHVlc190byA9ICJIb2Rub3RhIikKZ2dwbG90KHRzX2xvbmcsIGFlcyh4ID0gRGF0ZSwgeSA9IEhvZG5vdGEpKSArCiBnZW9tX2xpbmUoKSArCiBmYWNldF93cmFwKH5QcmVtZW5uw6EsIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMSkgKwogbGFicyh0aXRsZSA9ICJWw712b2ogZWtvbm9taWNrw71jaCB1a2F6b3ZhdGXEvm92ICgyMDEw4oCTMjAyMykiLAogICAgICB4ID0gIlJvayIsIHkgPSAiIikgKwogdGhlbWVfbWluaW1hbCgpCmBgYAojIyMjIEdyYWZ5IHpvYnJhenVqw7osIGFrbyBzYSBtZW5pbGEgaW5mbMOhY2lhLCDDunJva292w6kgc2FkemJ5LCBuZXphbWVzdG5hbm9zxaUgxI1pIHJhc3QgSERQLiBNb8W+bm8gc2kgdsWhaW1uw7rFpSBuYXByw61rbGFkIHJhc3QgaW5mbMOhY2llIHBvIHJva3UgMjAyMC4KCiMgVnp0YWh5IG1lZHppIHByZW1lbm55bWkgCmBgYHtyfQpnZ3Bsb3QoZGYsIGFlcyh4ID0gYEdEUCBHcm93dGggUmF0ZSAoJSlgLCB5ID0gYFN0b2NrIEluZGV4IFZhbHVlYCkpICsKIGdlb21fcG9pbnQoYWxwaGEgPSAwLjYpICsKIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gVFJVRSkgKwogbGFicyh0aXRsZSA9ICJWesWlYWg6IFJhc3QgSERQIGEgYWtjaW92w70gaW5kZXgiLAogICAgICB4ID0gIlJhc3QgSERQICglKSIsIHkgPSAiSG9kbm90YSBha2Npb3bDqWhvIGluZGV4dSIpICsKIHRoZW1lX21pbmltYWwoKQpgYGAKCiMjIyMgVmlkbm8sIMW+ZSByYXN0IEhEUCBtw6EgxI1hc3RvIHBveml0w612bnkgdnrFpWFoIGsgdsO9a29ubm9zdGkgYWtjaW92w6lobyB0cmh1IOKAlCBla29ub21pY2vDvSByYXN0IHBvZHBvcnVqZSBpbnZlc3TDrWNpZS4KCiMgS29yZWxhxI1uw6EgbWF0aWNhIChoZWF0bWFwKQpgYGB7cn0KY29ycl9tYXQgPC0gY29yKGRmICU+JSBzZWxlY3QoYWxsX29mKG51bV9jb2xzKSksIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKQprYWJsZShyb3VuZChjb3JyX21hdCwgMyksIGNhcHRpb24gPSAiS29yZWxhxI1uw6EgbWF0aWNhIikgJT4lCiBrYWJsZV9zdHlsaW5nKGZ1bGxfd2lkdGggPSBGQUxTRSkKY29ycnBsb3QoY29ycl9tYXQsIG1ldGhvZCA9ICJjb2xvciIsIHR5cGUgPSAidXBwZXIiLCBhZGRDb2VmLmNvbCA9ICJibGFjayIsCiAgICAgICAgdGwuY29sID0gImJsYWNrIiwgdGwuc3J0ID0gNDUsIG51bWJlci5jZXggPSAwLjcpCmBgYAojIyMjIEhvZG5vdHkgYmzDrXprZSArMSB1a2F6dWrDuiBzaWxuw7ogcG96aXTDrXZudSB2w6R6YnUgKG5hcHIuIGluZmzDoWNpYSBhIMO6cm9rb3bDoSBzYWR6YmEpLkhvZG5vdHkgYmzDrXprZSDigJMxIHpuYW1lbmFqw7ogbmVnYXTDrXZudSBrb3JlbMOhY2l1IChuYXByLiBuZXphbWVzdG5hbm9zxaUgYSBha2Npb3bDvSBpbmRleCkuQWsgc8O6IG5pZWt0b3LDqSBwcmVkaWt0b3J5IHZ5c29rbyBrb3JlbG92YW7DqSwgdHJlYmEgZMOhdmHFpSBwb3pvciBuYSBtdWx0aWtvbGluZWFyaXR1IHYgcmVncmVzaWkuCgojIFRlc3QgaHlwb3TDqXp5ICh0LXRlc3QpCmBgYHtyfQp4MjAxMCA8LSBkZiAlPiUgZmlsdGVyKFllYXIgPT0gMjAxMCkgJT4lIHB1bGwoYEluZmxhdGlvbiBSYXRlICglKWApCngyMDIwIDwtIGRmICU+JSBmaWx0ZXIoWWVhciA9PSAyMDIwKSAlPiUgcHVsbChgSW5mbGF0aW9uIFJhdGUgKCUpYCkKdF9yZXMgPC0gdC50ZXN0KHgyMDEwLCB4MjAyMCwgdmFyLmVxdWFsID0gRkFMU0UpCnRfcmVzCmBgYAojIyMjIEFrIHAtaG9kbm90YSA8IDAuMDUg4oaSIHJvemRpZWwgbWVkemkgaW5mbMOhY2lvdSB2IHJva29jaCAyMDEwIGEgMjAyMCBqZSDFoXRhdGlzdGlja3kgdsO9em5hbW7DvS5UbyBtw7TFvmUgbmF6bmHEjW92YcWlIHZwbHl2IGhvc3BvZMOhcnNrZWoga3LDrXp5IGFsZWJvIHBhbmRlbWlja8OpaG8gb2Jkb2JpYS4KCiMgSmVkbm9kdWNow6EgbGluZcOhcm5hIHJlZ3Jlc2lhCmBgYHtyfQptb2RlbCA8LSBsbShgU3RvY2sgSW5kZXggVmFsdWVgIH4gYEdEUCBHcm93dGggUmF0ZSAoJSlgICsgYEludGVyZXN0IFJhdGUgKCUpYCwgZGF0YSA9IGRmKQpzdW1tYXJ5KG1vZGVsKQp0aWR5KG1vZGVsLCBjb25mLmludCA9IFRSVUUpICU+JQoga2FibGUoZGlnaXRzID0gNCwgY2FwdGlvbiA9ICJLb2VmaWNpZW50eSByZWdyZXNpZSIpICU+JQoga2FibGVfc3R5bGluZyhmdWxsX3dpZHRoID0gRkFMU0UpCmdsYW5jZShtb2RlbCkgJT4lCiBzZWxlY3Qoci5zcXVhcmVkLCBhZGouci5zcXVhcmVkLCBBSUMsIEJJQywgbm9icykgJT4lCiBrYWJsZShkaWdpdHMgPSAzLCBjYXB0aW9uID0gIkt2YWxpdGEgbW9kZWx1IikgJT4lCiBrYWJsZV9zdHlsaW5nKGZ1bGxfd2lkdGggPSBGQUxTRSkKYGBgCgojIyMjIEFrIGplIGtvZWZpY2llbnQgcHJpIEdEUCBHcm93dGggcG96aXTDrXZueSBhIHbDvXpuYW1uw70g4oaSIHJhc3QgSERQIHp2ecWhdWplIGhvZG5vdHUgYWtjaW92w6lobyBpbmRleHUuQWsgamUgSW50ZXJlc3QgUmF0ZSBuZWdhdMOtdm55IOKGkiB2ecWhxaFpZSDDunJva292w6kgc2FkemJ5IHpuacW+dWrDuiB0cmhvdsOpIGNlbnkgYWtjacOtLlLCsiB1a2F6dWplLCBrb8S+a28gdmFyaWFiaWxpdHkgYWtjaW92w6lobyBpbmRleHUgbW9kZWwgdnlzdmV0xL51amUuCgojIFpocm51dGllIGEgb2Rwb3LDusSNYW5pYQojIyMjIE5hanZ5xaHFoWlhIGtvcmVsw6FjaWEgYm9sYSBtZWR6aSBJbmZsYXRpb24gUmF0ZSBhIEludGVyZXN0IFJhdGUg4oCTIG/EjWFrw6F2YW7DvSB2esWlYWggbWVub3ZlaiBwb2xpdGlreS4KIyMjIyDigKIgUmFzdCBIRFAgbcOhIGtsYWRuw70gdnBseXYgbmEgYWtjaW92w6kgdHJoeS4KIyMjIyDigKIgSW5mbMOhY2lhIHYgcm9rdSAyMDIwIHNhIMWhdGF0aXN0aWNreSBsw63FoWlsYSBvZCByb2t1IDIwMTAuCiMjIyMg4oCiIFByZSBsZXDFoWllIHByZWRpa2NpZSBtb8W+bm8gb2Rwb3J1xI1pxaUgcm96xaHDrXJlbmllIG1vZGVsdSBvIMSNYXNvdsOpIG9uZXNrb3JlbmlhIChBUklNQSwgVkFSKS4=