knitr:: opts_chunk$set(
  echo = TRUE,
  messange = FALSE,
  warning = FALSE
)

1.Načítanie údajov a viacnásobný lineárny model

firma <- read.csv("firmadata.csv", stringsAsFactors = TRUE)

mod_full <- lm(
  netIncome ~ operatingCashflow +
    capitalExpenditures +
    cashflowFromFinancing +
    depreciationDepletionAndAmortization +
    changeInInventory,
  data = firma
)

summary(mod_full)

Call:
lm(formula = netIncome ~ operatingCashflow + capitalExpenditures + 
    cashflowFromFinancing + depreciationDepletionAndAmortization + 
    changeInInventory, data = firma)

Residuals:
       Min         1Q     Median         3Q        Max 
-457714609  -32869436    9128641   40255393  346995528 

Coefficients:
                                       Estimate Std. Error t value Pr(>|t|)
(Intercept)                          -1.153e+08  1.842e+08  -0.626    0.537
operatingCashflow                     1.575e-01  2.730e-01   0.577    0.569
capitalExpenditures                   1.052e+00  1.319e+00   0.798    0.433
cashflowFromFinancing                -1.271e-01  1.248e-01  -1.018    0.319
depreciationDepletionAndAmortization  3.486e+00  2.726e+00   1.279    0.213
changeInInventory                     5.009e-01  1.032e+00   0.486    0.632

Residual standard error: 1.43e+08 on 24 degrees of freedom
Multiple R-squared:  0.1993,    Adjusted R-squared:  0.03244 
F-statistic: 1.194 on 5 and 24 DF,  p-value: 0.3415

Interpretácia výsledkov plného modelu

Z výstupu summary(mod_full) pre tvoje dáta vyplýva:
• R² = 0.199, upravené R² = 0.032
→ model vysvetľuje iba približne 20 % variability čistého zisku.
• F-test modelu má p-hodnotu ≈ 0.341
→ model ako celok nie je štatisticky významný.

žiadna premenná nie je štatisticky významná. Koeficienty majú veľmi široké intervaly spoľahlivosti.

Toto je typický prejav multikolinearity.

2. Korelačná matica vysvetľujúcich premenných

X <- firma[, c("operatingCashflow",
               "capitalExpenditures",
               "cashflowFromFinancing",
               "depreciationDepletionAndAmortization",
               "changeInInventory")]

cor(X)
                                     operatingCashflow capitalExpenditures
operatingCashflow                         1.0000000000         0.497560158
capitalExpenditures                       0.4975601575         1.000000000
cashflowFromFinancing                    -0.0002956725        -0.196093010
depreciationDepletionAndAmortization      0.1005721979         0.004061048
changeInInventory                         0.3396981706         0.121719419
                                     cashflowFromFinancing
operatingCashflow                            -0.0002956725
capitalExpenditures                          -0.1960930100
cashflowFromFinancing                         1.0000000000
depreciationDepletionAndAmortization          0.0071901841
changeInInventory                             0.0579546831
                                     depreciationDepletionAndAmortization
operatingCashflow                                             0.100572198
capitalExpenditures                                           0.004061048
cashflowFromFinancing                                         0.007190184
depreciationDepletionAndAmortization                          1.000000000
changeInInventory                                            -0.405209741
                                     changeInInventory
operatingCashflow                           0.33969817
capitalExpenditures                         0.12171942
cashflowFromFinancing                       0.05795468
depreciationDepletionAndAmortization       -0.40520974
changeInInventory                           1.00000000

Interpretácia korelácií

Najdôležitejšie hodnoty:
• operatingCashflow – capitalExpenditures: 0.4976
• operatingCashflow – changeInInventory: 0.3397
• depreciation – changeInInventory: –0.4052

Korelácie sú stredne vysoké, nie extrémne, ale najmä pri operatingCashflow a depreciation sú jasné prepojenia, ktoré môžu spôsobovať problémy pri odhadoch.

3.VIF – diagnostika multikolinearity

library(car)
vif(mod_full)
                   operatingCashflow                  capitalExpenditures 
                            1.627607                             1.413418 
               cashflowFromFinancing depreciationDepletionAndAmortization 
                            1.056896                             1.307417 
                   changeInInventory 
                            1.467418 

Interpretácia VIF výsledkov

Výsledky diagnostiky multikolinearity pomocou VIF ukazujú, že všetky vysvetľujúce premenné v mojom modeli majú hodnoty VIF medzi približne 1.05 a 1.63. Takéto hodnoty sú veľmi nízke a nachádzajú sa hlboko pod akoukoľvek hraničnou úrovňou, ktorá by naznačovala problém multikolinearity. To znamená, že premenné medzi sebou nevykazujú silné lineárne vzťahy a jednotlivé koeficienty nie sú „nafúknuté“ vplyvom prebytočnej redundancie v modeli.

Na základe týchto výsledkov môžem konštatovať, že v mojich údajoch nie je prítomná multikolinearita, ktorá by narúšala stabilitu odhadov alebo znižovala interpretovateľnosť regresných koeficientov. Model je z hľadiska multikolinearity dobre špecifikovaný a nie je potrebná žiadna úprava ani redukcia premenných.

4. Redukovaný model (po odstránení najkolineárnej premennej)

Odstránila som z modelu premennú operatingCashflow, ktorá má najvyššie VIF.

mod_red <- lm(
  netIncome ~ capitalExpenditures +
    cashflowFromFinancing +
    depreciationDepletionAndAmortization +
    changeInInventory,
  data = firma
)

summary(mod_red)

Call:
lm(formula = netIncome ~ capitalExpenditures + cashflowFromFinancing + 
    depreciationDepletionAndAmortization + changeInInventory, 
    data = firma)

Residuals:
       Min         1Q     Median         3Q        Max 
-466961334  -36161981    6038193   39857210  339717643 

Coefficients:
                                       Estimate Std. Error t value Pr(>|t|)
(Intercept)                          -1.096e+08  1.815e+08  -0.604    0.551
capitalExpenditures                   1.430e+00  1.129e+00   1.267    0.217
cashflowFromFinancing                -1.212e-01  1.227e-01  -0.987    0.333
depreciationDepletionAndAmortization  3.929e+00  2.580e+00   1.523    0.140
changeInInventory                     7.403e-01  9.317e-01   0.795    0.434

Residual standard error: 141100000 on 25 degrees of freedom
Multiple R-squared:  0.1882,    Adjusted R-squared:  0.05826 
F-statistic: 1.449 on 4 and 25 DF,  p-value: 0.2476
# porovnanie plného a redukovaného modelu pomocou AIC a BIC
AIC(mod_full, mod_red)
BIC(mod_full, mod_red)

Interpretácia redukovaného modelu

V redukovanom modeli som ponechala štyri vysvetľujúce premenné: capitalExpenditures, cashflowFromFinancing, depreciationDepletionAndAmortization a changeInInventory. Výsledky ukazujú, že žiadna z premenných nie je štatisticky významná (všetky p-hodnoty sú nad 0.14), čo znamená, že model nedokáže preukázateľne vysvetliť variabilitu čistého zisku. Koeficienty síce naznačujú určité ekonomické vzťahy (napr. pozitívny efekt kapitálových výdavkov alebo odpisov), no veľké štandardné chyby a nízke t-hodnoty naznačujú ich níznu spoľahlivosť. Hodnota R² = 0.1882 znamená, že model vysvetľuje približne 19 % variability čistého zisku, čo je relatívne málo.

F-štatistika má hodnotu 1.449 a p-hodnotu 0.2476, čo potvrdzuje, že model ako celok nie je štatisticky významný. Odstránenie premennej operatingCashflow mierne znížilo vysvetľovaciu schopnosť modelu (v porovnaní s plným modelom), ale nezlepšilo jeho štatistickú významnosť. Tento výsledok ukazuje, že v mojich údajoch multikolinearita nebola zásadným problémom – po odstránení premennej nedošlo k výraznému zlepšeniu modelu, čo naznačuje, že slabá výkonnosť modelu vyplýva skôr z povahy dát než zo štrukturálnych problémov multikolinearity.

Hodnota AIC a BIC sa výrazne nezlepšila → redukovaný model nie je lepší.

5.Škálovanie premenných

X <- firma[, c("operatingCashflow",
               "capitalExpenditures",
               "cashflowFromFinancing",
               "depreciationDepletionAndAmortization",
               "changeInInventory")]

X_scaled <- scale(X)
summary(X_scaled)
 operatingCashflow capitalExpenditures cashflowFromFinancing
 Min.   :-3.1809   Min.   :-1.41044    Min.   :-1.80193     
 1st Qu.:-0.5933   1st Qu.:-0.91964    1st Qu.:-0.57407     
 Median :-0.1258   Median :-0.05291    Median :-0.07561     
 Mean   : 0.0000   Mean   : 0.00000    Mean   : 0.00000     
 3rd Qu.: 0.8295   3rd Qu.: 0.87648    3rd Qu.: 0.39770     
 Max.   : 1.8250   Max.   : 1.84763    Max.   : 3.16439     
 depreciationDepletionAndAmortization changeInInventory
 Min.   :-1.6342                      Min.   :-2.0699  
 1st Qu.:-0.9608                      1st Qu.:-0.5624  
 Median : 0.2514                      Median : 0.1272  
 Mean   : 0.0000                      Mean   : 0.0000  
 3rd Qu.: 0.7677                      3rd Qu.: 0.7928  
 Max.   : 1.4187                      Max.   : 2.1960  

Interpretácia:

V mojich dátach majú vysvetľujúce premenné výrazne rozdielne rozsahy (napr. operatívny cashflow je v stovkách miliónov, zmena zásob len v miliónoch). Takéto rozdiely môžu spôsobovať numerickú nestabilitu pri odhade modelu. Škálovaním som všetky premenné transformovala na porovnateľnú úroveň s priemerom 0 a smerodajnou odchýlkou 1.

Škálovanie nemení korelácie medzi premennými ani neodstraňuje multikolinearitu, ale výrazne zlepšuje numerickú stabilitu výpočtov. Je to preto vhodný krok pred hodnotením kondičného čísla a ďalšej diagnostiky.

6.Condition Number (Kondičné číslo)

kondicne_cislo_full   <- kappa(as.matrix(X))
kondicne_cislo_scaled <- kappa(as.matrix(X_scaled))

kondicne_cislo_full
[1] 24.85822
kondicne_cislo_scaled
[1] 2.855849

Výsledky:

•   pred škálovaním: 24.86  
•   po škálovaní: 2.85

Interpretácia:

Kondičné číslo 24.86 ukazuje, že pôvodné premenné majú mierne až stredne silné problémy s multikolinearitou a numerickou podmienkou. Takáto hodnota znamená, že pre niektoré kombinácie premenných môže byť odhad koeficientov nestabilný alebo citlivý na malé zmeny v dátach.

Po štandardizácii kleslo kondičné číslo na 2.85, čo predstavuje veľmi dobre podmienený systém. To znamená, že numerická stabilita sa po škálovaní výrazne zlepšila. Multikolinearita však ako jav zostáva prítomná (keďže tú určujú korelácie medzi premennými), len je výpočet modelu robustnejší.

Záver

V dnešnej úlohe som odhadla viacnásobný regresný model čistého zisku a vykonala diagnostiku multikolinearity pomocou korelačnej matice, VIF a škálovania premenných. VIF hodnoty všetkých vysvetľujúcich premenných sa pohybovali len medzi 1.05 a 1.63, čo znamená, že multikolinearita v mojich dátach nie je problémom. Po škálovaní som vypočítala kondičné číslo, ktoré kleslo z približne 24.86 na 2.85, čo potvrdilo veľmi dobrú numerickú stabilitu modelu.

Na záver som vytvorila aj redukovaný model odstránením premennej s najvyšším VIF, no jeho kvalita sa nezlepšila – R² ostalo nízke a model ako celok nebol štatisticky významný. Výsledky tak ukazujú, že slabá vysvetľovacia schopnosť modelu súvisí s povahou dát, nie s multikolinearitou, a preto sú ďalšie úpravy štruktúry modelu z tohto hľadiska nepotrebné

LS0tCnRpdGxlOiAiRWtvbm9tZXRyaWEgLSB6YWRhbmllIMSNLiAxMCIKYXV0aG9yOiAnQW5hc3Rhc2l5YSBaeWxldmljaCAgPGJyPiAnCmRhdGU6ICJOb3ZlbWJlciAyMDI1IgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICB0aGVtZTogdW5pdGVkCiAgICBoaWdobGlnaHQ6IHRhbmdvCiAgcGRmX2RvY3VtZW50OgogICAgdG9jOiB0cnVlCmVkaXRvcl9vcHRpb25zOgogIG1hcmtkb3duOgogICAgd3JhcDogNzIKLS0tCgpgYGB7cn0Ka25pdHI6OiBvcHRzX2NodW5rJHNldCgKICBlY2hvID0gVFJVRSwKICBtZXNzYW5nZSA9IEZBTFNFLAogIHdhcm5pbmcgPSBGQUxTRQopCmBgYAojIDEuTmHEjcOtdGFuaWUgw7pkYWpvdiBhIHZpYWNuw6Fzb2Juw70gbGluZcOhcm55IG1vZGVsCmBgYHtyfQpmaXJtYSA8LSByZWFkLmNzdigiZmlybWFkYXRhLmNzdiIsIHN0cmluZ3NBc0ZhY3RvcnMgPSBUUlVFKQoKbW9kX2Z1bGwgPC0gbG0oCiAgbmV0SW5jb21lIH4gb3BlcmF0aW5nQ2FzaGZsb3cgKwogICAgY2FwaXRhbEV4cGVuZGl0dXJlcyArCiAgICBjYXNoZmxvd0Zyb21GaW5hbmNpbmcgKwogICAgZGVwcmVjaWF0aW9uRGVwbGV0aW9uQW5kQW1vcnRpemF0aW9uICsKICAgIGNoYW5nZUluSW52ZW50b3J5LAogIGRhdGEgPSBmaXJtYQopCgpzdW1tYXJ5KG1vZF9mdWxsKQpgYGAKIyMgSW50ZXJwcmV0w6FjaWEgdsO9c2xlZGtvdiBwbG7DqWhvIG1vZGVsdQoKWiB2w71zdHVwdSBzdW1tYXJ5KG1vZF9mdWxsKSBwcmUgdHZvamUgZMOhdGEgdnlwbMO9dmE6ICAKCeKAoglSwrIgPSAwLjE5OSwgdXByYXZlbsOpIFLCsiA9IDAuMDMyICAK4oaSIG1vZGVsIHZ5c3ZldMS+dWplIGliYSBwcmlibGnFvm5lIDIwICUgdmFyaWFiaWxpdHkgxI1pc3TDqWhvIHppc2t1LiAgCgnigKIJRi10ZXN0IG1vZGVsdSBtw6EgcC1ob2Rub3R1IOKJiCAwLjM0MSAgCuKGkiBtb2RlbCBha28gY2Vsb2sgbmllIGplIMWhdGF0aXN0aWNreSB2w716bmFtbsO9LgoKxb5pYWRuYSBwcmVtZW5uw6EgbmllIGplIMWhdGF0aXN0aWNreSB2w716bmFtbsOhLgpLb2VmaWNpZW50eSBtYWrDuiB2ZcS+bWkgxaFpcm9rw6kgaW50ZXJ2YWx5IHNwb8S+YWhsaXZvc3RpLgoKVG90byBqZSB0eXBpY2vDvSBwcmVqYXYgbXVsdGlrb2xpbmVhcml0eS4KCiMgMi4gS29yZWxhxI1uw6EgbWF0aWNhIHZ5c3ZldMS+dWrDumNpY2ggcHJlbWVubsO9Y2gKYGBge3J9ClggPC0gZmlybWFbLCBjKCJvcGVyYXRpbmdDYXNoZmxvdyIsCiAgICAgICAgICAgICAgICJjYXBpdGFsRXhwZW5kaXR1cmVzIiwKICAgICAgICAgICAgICAgImNhc2hmbG93RnJvbUZpbmFuY2luZyIsCiAgICAgICAgICAgICAgICJkZXByZWNpYXRpb25EZXBsZXRpb25BbmRBbW9ydGl6YXRpb24iLAogICAgICAgICAgICAgICAiY2hhbmdlSW5JbnZlbnRvcnkiKV0KCmNvcihYKQpgYGAKIyMgSW50ZXJwcmV0w6FjaWEga29yZWzDoWNpw60KCk5hamTDtGxlxb5pdGVqxaFpZSBob2Rub3R5OiAgCgnigKIJb3BlcmF0aW5nQ2FzaGZsb3cg4oCTIGNhcGl0YWxFeHBlbmRpdHVyZXM6IDAuNDk3NiAgCgnigKIJb3BlcmF0aW5nQ2FzaGZsb3cg4oCTIGNoYW5nZUluSW52ZW50b3J5OiAwLjMzOTcgIAoJ4oCiCWRlcHJlY2lhdGlvbiDigJMgY2hhbmdlSW5JbnZlbnRvcnk6IOKAkzAuNDA1MgoKS29yZWzDoWNpZSBzw7ogc3RyZWRuZSB2eXNva8OpLCBuaWUgZXh0csOpbW5lLCBhbGUgbmFqbcOkIHByaSBvcGVyYXRpbmdDYXNoZmxvdyBhIGRlcHJlY2lhdGlvbiBzw7ogamFzbsOpIHByZXBvamVuaWEsIGt0b3LDqSBtw7TFvnUgc3DDtHNvYm92YcWlIHByb2Jsw6lteSBwcmkgb2RoYWRvY2guCgoKIyAzLlZJRiDigJMgZGlhZ25vc3Rpa2EgbXVsdGlrb2xpbmVhcml0eQpgYGB7cn0KbGlicmFyeShjYXIpCnZpZihtb2RfZnVsbCkKYGBgCiMjIEludGVycHJldMOhY2lhIFZJRiB2w71zbGVka292CgpWw71zbGVka3kgZGlhZ25vc3Rpa3kgbXVsdGlrb2xpbmVhcml0eSBwb21vY291IFZJRiB1a2F6dWrDuiwgxb5lIHbFoWV0a3kgdnlzdmV0xL51asO6Y2UgcHJlbWVubsOpIHYgbW9qb20gbW9kZWxpIG1hasO6IGhvZG5vdHkgVklGIG1lZHppIHByaWJsacW+bmUgMS4wNSBhIDEuNjMuIFRha8OpdG8gaG9kbm90eSBzw7ogdmXEvm1pIG7DrXprZSBhIG5hY2jDoWR6YWrDuiBzYSBobGJva28gcG9kIGFrb3Vrb8S+dmVrIGhyYW5pxI1ub3Ugw7pyb3bFiG91LCBrdG9yw6EgYnkgbmF6bmHEjW92YWxhIHByb2Jsw6ltIG11bHRpa29saW5lYXJpdHkuIFRvIHpuYW1lbsOhLCDFvmUgcHJlbWVubsOpIG1lZHppIHNlYm91IG5ldnlrYXp1asO6IHNpbG7DqSBsaW5lw6FybmUgdnrFpWFoeSBhIGplZG5vdGxpdsOpIGtvZWZpY2llbnR5IG5pZSBzw7og4oCebmFmw7prbnV0w6nigJwgdnBseXZvbSBwcmVieXRvxI1uZWogcmVkdW5kYW5jaWUgdiBtb2RlbGkuCgpOYSB6w6FrbGFkZSB0w71jaHRvIHbDvXNsZWRrb3YgbcO0xb5lbSBrb27FoXRhdG92YcWlLCDFvmUgdiBtb2ppY2ggw7pkYWpvY2ggbmllIGplIHByw610b21uw6EgbXVsdGlrb2xpbmVhcml0YSwga3RvcsOhIGJ5IG5hcsO6xaFhbGEgc3RhYmlsaXR1IG9kaGFkb3YgYWxlYm8gem5pxb5vdmFsYSBpbnRlcnByZXRvdmF0ZcS+bm9zxaUgcmVncmVzbsO9Y2gga29lZmljaWVudG92LiBNb2RlbCBqZSB6IGjEvmFkaXNrYSBtdWx0aWtvbGluZWFyaXR5IGRvYnJlIMWhcGVjaWZpa292YW7DvSBhIG5pZSBqZSBwb3RyZWJuw6Egxb5pYWRuYSDDunByYXZhIGFuaSByZWR1a2NpYSBwcmVtZW5uw71jaC4KCiMgNC4gUmVkdWtvdmFuw70gbW9kZWwgKHBvIG9kc3Ryw6FuZW7DrSBuYWprb2xpbmXDoXJuZWogcHJlbWVubmVqKSAgCk9kc3Ryw6FuaWxhIHNvbSB6IG1vZGVsdSBwcmVtZW5uw7ogb3BlcmF0aW5nQ2FzaGZsb3csIGt0b3LDoSBtw6EgbmFqdnnFocWhaWUgVklGLgpgYGB7cn0KbW9kX3JlZCA8LSBsbSgKICBuZXRJbmNvbWUgfiBjYXBpdGFsRXhwZW5kaXR1cmVzICsKICAgIGNhc2hmbG93RnJvbUZpbmFuY2luZyArCiAgICBkZXByZWNpYXRpb25EZXBsZXRpb25BbmRBbW9ydGl6YXRpb24gKwogICAgY2hhbmdlSW5JbnZlbnRvcnksCiAgZGF0YSA9IGZpcm1hCikKCnN1bW1hcnkobW9kX3JlZCkKIyBwb3Jvdm5hbmllIHBsbsOpaG8gYSByZWR1a292YW7DqWhvIG1vZGVsdSBwb21vY291IEFJQyBhIEJJQwpBSUMobW9kX2Z1bGwsIG1vZF9yZWQpCkJJQyhtb2RfZnVsbCwgbW9kX3JlZCkKYGBgCiMjIEludGVycHJldMOhY2lhIHJlZHVrb3ZhbsOpaG8gbW9kZWx1CgpWIHJlZHVrb3Zhbm9tIG1vZGVsaSBzb20gcG9uZWNoYWxhIMWhdHlyaSB2eXN2ZXTEvnVqw7pjZSBwcmVtZW5uw6k6IGNhcGl0YWxFeHBlbmRpdHVyZXMsIGNhc2hmbG93RnJvbUZpbmFuY2luZywgZGVwcmVjaWF0aW9uRGVwbGV0aW9uQW5kQW1vcnRpemF0aW9uIGEgY2hhbmdlSW5JbnZlbnRvcnkuIFbDvXNsZWRreSB1a2F6dWrDuiwgxb5lIMW+aWFkbmEgeiBwcmVtZW5uw71jaCBuaWUgamUgxaF0YXRpc3RpY2t5IHbDvXpuYW1uw6EgKHbFoWV0a3kgcC1ob2Rub3R5IHPDuiBuYWQgMC4xNCksIMSNbyB6bmFtZW7DoSwgxb5lIG1vZGVsIG5lZG9rw6HFvmUgcHJldWvDoXphdGXEvm5lIHZ5c3ZldGxpxaUgdmFyaWFiaWxpdHUgxI1pc3TDqWhvIHppc2t1LiBLb2VmaWNpZW50eSBzw61jZSBuYXpuYcSNdWrDuiB1csSNaXTDqSBla29ub21pY2vDqSB2esWlYWh5IChuYXByLiBwb3ppdMOtdm55IGVmZWt0IGthcGl0w6Fsb3bDvWNoIHbDvWRhdmtvdiBhbGVibyBvZHBpc292KSwgbm8gdmXEvmvDqSDFoXRhbmRhcmRuw6kgY2h5YnkgYSBuw616a2UgdC1ob2Rub3R5IG5hem5hxI11asO6IGljaCBuw616bnUgc3BvxL5haGxpdm9zxaUuIEhvZG5vdGEgUsKyID0gMC4xODgyIHpuYW1lbsOhLCDFvmUgbW9kZWwgdnlzdmV0xL51amUgcHJpYmxpxb5uZSAxOSAlIHZhcmlhYmlsaXR5IMSNaXN0w6lobyB6aXNrdSwgxI1vIGplIHJlbGF0w612bmUgbcOhbG8uCgpGLcWhdGF0aXN0aWthIG3DoSBob2Rub3R1IDEuNDQ5IGEgcC1ob2Rub3R1IDAuMjQ3NiwgxI1vIHBvdHZyZHp1amUsIMW+ZSBtb2RlbCBha28gY2Vsb2sgbmllIGplIMWhdGF0aXN0aWNreSB2w716bmFtbsO9LiBPZHN0csOhbmVuaWUgcHJlbWVubmVqIG9wZXJhdGluZ0Nhc2hmbG93IG1pZXJuZSB6bsOtxb5pbG8gdnlzdmV0xL5vdmFjaXUgc2Nob3Bub3PFpSBtb2RlbHUgKHYgcG9yb3ZuYW7DrSBzIHBsbsO9bSBtb2RlbG9tKSwgYWxlIG5lemxlcMWhaWxvIGplaG8gxaF0YXRpc3RpY2vDuiB2w716bmFtbm9zxaUuIFRlbnRvIHbDvXNsZWRvayB1a2F6dWplLCDFvmUgdiBtb2ppY2ggw7pkYWpvY2ggbXVsdGlrb2xpbmVhcml0YSBuZWJvbGEgesOhc2FkbsO9bSBwcm9ibMOpbW9tIOKAkyBwbyBvZHN0csOhbmVuw60gcHJlbWVubmVqIG5lZG/FoWxvIGsgdsO9cmF6bsOpbXUgemxlcMWhZW5pdSBtb2RlbHUsIMSNbyBuYXpuYcSNdWplLCDFvmUgc2xhYsOhIHbDvWtvbm5vc8WlIG1vZGVsdSB2eXBsw712YSBza8O0ciB6IHBvdmFoeSBkw6F0IG5lxb4gem8gxaF0cnVrdHVyw6FsbnljaCBwcm9ibMOpbW92IG11bHRpa29saW5lYXJpdHkuCgpIb2Rub3RhIEFJQyBhIEJJQyBzYSB2w71yYXpuZSBuZXpsZXDFoWlsYSDihpIgcmVkdWtvdmFuw70gbW9kZWwgbmllIGplIGxlcMWhw60uCgojIDUuxaBrw6Fsb3ZhbmllIHByZW1lbm7DvWNoCgpgYGB7cn0KWCA8LSBmaXJtYVssIGMoIm9wZXJhdGluZ0Nhc2hmbG93IiwKICAgICAgICAgICAgICAgImNhcGl0YWxFeHBlbmRpdHVyZXMiLAogICAgICAgICAgICAgICAiY2FzaGZsb3dGcm9tRmluYW5jaW5nIiwKICAgICAgICAgICAgICAgImRlcHJlY2lhdGlvbkRlcGxldGlvbkFuZEFtb3J0aXphdGlvbiIsCiAgICAgICAgICAgICAgICJjaGFuZ2VJbkludmVudG9yeSIpXQoKWF9zY2FsZWQgPC0gc2NhbGUoWCkKc3VtbWFyeShYX3NjYWxlZCkKYGBgCiMjIEludGVycHJldMOhY2lhOgoKViBtb2ppY2ggZMOhdGFjaCBtYWrDuiB2eXN2ZXTEvnVqw7pjZSBwcmVtZW5uw6kgdsO9cmF6bmUgcm96ZGllbG5lIHJvenNhaHkgKG5hcHIuIG9wZXJhdMOtdm55IGNhc2hmbG93IGplIHYgc3RvdmvDoWNoIG1pbGnDs25vdiwgem1lbmEgesOhc29iIGxlbiB2IG1pbGnDs25vY2gpLiBUYWvDqXRvIHJvemRpZWx5IG3DtMW+dSBzcMO0c29ib3ZhxaUgbnVtZXJpY2vDuiBuZXN0YWJpbGl0dSBwcmkgb2RoYWRlIG1vZGVsdS4gxaBrw6Fsb3ZhbsOtbSBzb20gdsWhZXRreSBwcmVtZW5uw6kgdHJhbnNmb3Jtb3ZhbGEgbmEgcG9yb3ZuYXRlxL5uw7ogw7pyb3ZlxYggcyBwcmllbWVyb20gMCBhIHNtZXJvZGFqbm91IG9kY2jDvWxrb3UgMS4KCsWga8OhbG92YW5pZSBuZW1lbsOtIGtvcmVsw6FjaWUgbWVkemkgcHJlbWVubsO9bWkgYW5pIG5lb2RzdHJhxYh1amUgbXVsdGlrb2xpbmVhcml0dSwgYWxlIHbDvXJhem5lIHpsZXDFoXVqZSBudW1lcmlja8O6IHN0YWJpbGl0dSB2w71wb8SNdG92LiBKZSB0byBwcmV0byB2aG9kbsO9IGtyb2sgcHJlZCBob2Rub3RlbsOtbSBrb25kacSNbsOpaG8gxI3DrXNsYSBhIMSPYWzFoWVqIGRpYWdub3N0aWt5LgoKIyA2LkNvbmRpdGlvbiBOdW1iZXIgKEtvbmRpxI1uw6kgxI3DrXNsbykKYGBge3J9CmtvbmRpY25lX2Npc2xvX2Z1bGwgICA8LSBrYXBwYShhcy5tYXRyaXgoWCkpCmtvbmRpY25lX2Npc2xvX3NjYWxlZCA8LSBrYXBwYShhcy5tYXRyaXgoWF9zY2FsZWQpKQoKa29uZGljbmVfY2lzbG9fZnVsbAprb25kaWNuZV9jaXNsb19zY2FsZWQKYGBgCiMjIFbDvXNsZWRreToKCeKAoglwcmVkIMWha8OhbG92YW7DrW06IDI0Ljg2ICAKCeKAoglwbyDFoWvDoWxvdmFuw606IDIuODUKCkludGVycHJldMOhY2lhOgoKS29uZGnEjW7DqSDEjcOtc2xvIDI0Ljg2IHVrYXp1amUsIMW+ZSBww7R2b2Ruw6kgcHJlbWVubsOpIG1hasO6IG1pZXJuZSBhxb4gc3RyZWRuZSBzaWxuw6kgcHJvYmzDqW15IHMgbXVsdGlrb2xpbmVhcml0b3UgYSBudW1lcmlja291IHBvZG1pZW5rb3UuIFRha8OhdG8gaG9kbm90YSB6bmFtZW7DoSwgxb5lIHByZSBuaWVrdG9yw6kga29tYmluw6FjaWUgcHJlbWVubsO9Y2ggbcO0xb5lIGJ5xaUgb2RoYWQga29lZmljaWVudG92IG5lc3RhYmlsbsO9IGFsZWJvIGNpdGxpdsO9IG5hIG1hbMOpIHptZW55IHYgZMOhdGFjaC4KClBvIMWhdGFuZGFyZGl6w6FjaWkga2xlc2xvIGtvbmRpxI1uw6kgxI3DrXNsbyBuYSAyLjg1LCDEjW8gcHJlZHN0YXZ1amUgdmXEvm1pIGRvYnJlIHBvZG1pZW5lbsO9IHN5c3TDqW0uIFRvIHpuYW1lbsOhLCDFvmUgbnVtZXJpY2vDoSBzdGFiaWxpdGEgc2EgcG8gxaFrw6Fsb3ZhbsOtIHbDvXJhem5lIHpsZXDFoWlsYS4gTXVsdGlrb2xpbmVhcml0YSB2xaFhayBha28gamF2IHpvc3TDoXZhIHByw610b21uw6EgKGtlxI/FvmUgdMO6IHVyxI11asO6IGtvcmVsw6FjaWUgbWVkemkgcHJlbWVubsO9bWkpLCBsZW4gamUgdsO9cG/EjWV0IG1vZGVsdSByb2J1c3RuZWrFocOtLgoKIyBaw6F2ZXIKClYgZG5lxaFuZWogw7psb2hlIHNvbSBvZGhhZGxhIHZpYWNuw6Fzb2Juw70gcmVncmVzbsO9IG1vZGVsIMSNaXN0w6lobyB6aXNrdSBhIHZ5a29uYWxhIGRpYWdub3N0aWt1IG11bHRpa29saW5lYXJpdHkgcG9tb2NvdSBrb3JlbGHEjW5laiBtYXRpY2UsIFZJRiBhIMWha8OhbG92YW5pYSBwcmVtZW5uw71jaC4gVklGIGhvZG5vdHkgdsWhZXRrw71jaCB2eXN2ZXTEvnVqw7pjaWNoIHByZW1lbm7DvWNoIHNhIHBvaHlib3ZhbGkgbGVuIG1lZHppIDEuMDUgYSAxLjYzLCDEjW8gem5hbWVuw6EsIMW+ZSBtdWx0aWtvbGluZWFyaXRhIHYgbW9qaWNoIGTDoXRhY2ggbmllIGplIHByb2Jsw6ltb20uIFBvIMWha8OhbG92YW7DrSBzb20gdnlwb8SNw610YWxhIGtvbmRpxI1uw6kgxI3DrXNsbywga3RvcsOpIGtsZXNsbyB6IHByaWJsacW+bmUgMjQuODYgbmEgMi44NSwgxI1vIHBvdHZyZGlsbyB2ZcS+bWkgZG9icsO6IG51bWVyaWNrw7ogc3RhYmlsaXR1IG1vZGVsdS4KCk5hIHrDoXZlciBzb20gdnl0dm9yaWxhIGFqIHJlZHVrb3ZhbsO9IG1vZGVsIG9kc3Ryw6FuZW7DrW0gcHJlbWVubmVqIHMgbmFqdnnFocWhw61tIFZJRiwgbm8gamVobyBrdmFsaXRhIHNhIG5lemxlcMWhaWxhIOKAkyBSwrIgb3N0YWxvIG7DrXprZSBhIG1vZGVsIGFrbyBjZWxvayBuZWJvbCDFoXRhdGlzdGlja3kgdsO9em5hbW7DvS4gVsO9c2xlZGt5IHRhayB1a2F6dWrDuiwgxb5lIHNsYWLDoSB2eXN2ZXTEvm92YWNpYSBzY2hvcG5vc8WlIG1vZGVsdSBzw7p2aXPDrSBzIHBvdmFob3UgZMOhdCwgbmllIHMgbXVsdGlrb2xpbmVhcml0b3UsIGEgcHJldG8gc8O6IMSPYWzFoWllIMO6cHJhdnkgxaF0cnVrdMO6cnkgbW9kZWx1IHogdG9odG8gaMS+YWRpc2thIG5lcG90cmVibsOpCg==