Alberto Dorantes, Ph.D. Sep 7, 2021

Abstract

In this workshop we will continue practicing with calibration of seasonal ARIMA model (SARIMA) for time series.

Forecasting the Mexican Economy in the COVID crisis

You have to calibrate an ARIMA/SARIMA model for the IGAE Index, and do a forecast for the next 2 years of the Mexican Economy.

IGAE stands for “Índice General de Actividad Económica”. Since 1993 INEGI calculates this index based on the Mexican general economy and different industry sectors.

Data download

Go to INEGI and download the IGAE series. Go to the following link:

https://www.inegi.org.mx/temas/igae/#Herramientas

Click in “Bando de Información Económica (BIE)” and then select:

Indicador glogal de la actividad económica, base 2013 Expand the option: “Series originales” and, then expand the option “Índice de volumen físico”.

Check-mark the option “Total (Índice base 2013=100)”

Click the button “Consulta”. You will see tabulated data for the IGAE.

Select oldest year (1993 in “Periodo desde”). Finally click the download button and select the Excel format. The file be downloaded to your computer.

Open the Excel file and drop the first columns and last rows so that you only leave the period column and the IGAE Total index. RENAME the first data column as IGAE. Review the Period column, and edit if there are some dates with notes.

Save the Excel file as igae.xls in the same folder of your Workshop 5.

Visualize the data

library(readxl)
library(xts)
library(zoo)
library(tseries)
library(forecast)
library(astsa)
library(lmtest)
library(readxl)
igae <- read_excel("igae.xls", 
    col_types = c("text", "numeric"))
igae.ts = ts (data= igae$igae, start=c(1993,1), frequency=(12))
igae.ts
           Jan       Feb       Mar       Apr       May
1993  60.40769  61.02252  63.94325  61.86598  63.61290
1994  63.02927  62.73316  65.79027  65.89172  66.85880
1995  65.10234  60.29419  62.92987  59.23909  61.17677
1996  64.59736  63.25033  65.00435  63.82202  66.56896
1997  67.92226  66.01572  67.08871  70.18939  71.25363
1998  72.28125  71.26764  75.30751  72.95238  75.13802
1999  74.28381  72.70940  76.99211  74.32923  76.92304
2000  77.93003  77.36732  80.35795  77.00756  82.34331
2001  79.42346  76.41926  80.76787  77.53115  81.78409
2002  77.38629  75.10932  77.12227  80.83024  82.06994
2003  79.27239  77.17550  80.33976  79.95093  82.28842
2004  80.93007  79.19382  84.92785  82.93623  85.23905
2005  82.25837  80.89942  83.62640  86.59373  87.88889
2006  87.04556  84.08297  89.54008  87.10250  93.13935
2007  88.77729  85.76828  91.42205  89.32063  94.32237
2008  90.95435  88.98933  89.05326  94.71533  94.86436
2009  84.89588  81.84098  86.87355  84.31067  86.08159
2010  86.86702  85.22716  92.29228  90.58182  92.30005
2011  90.20546  88.56874  95.82899  91.60005  95.94631
2012  94.67462  94.07903  99.09222  95.47931 100.31525
2013  97.96859  94.67102  97.06080  99.91624 102.27530
2014  98.75510  96.95650 101.49479 100.31850 104.86078
2015 102.31985  99.87068 104.96629 103.68808 106.19812
2016 104.41862 104.57957 105.90781 107.29170 109.06134
2017 108.42131 105.28634 111.90757 106.20653 112.30782
2018 111.00626 107.80050 111.18167 111.58334 115.80867
2019 112.55599 108.89011 112.35810 109.89227 115.32796
2020 111.89993 108.31734 109.83424  87.88903  89.30962
2021 105.70444 102.80345 110.74997 107.51926 111.75380
           Jun       Jul       Aug       Sep       Oct
1993  62.88259  62.79795  62.02789  62.01834  62.83480
1994  66.63579  64.70206  65.79634  65.76477  66.73068
1995  61.08234  59.77917  61.06820  60.84772  60.21824
1996  65.57817  65.91223  65.36457  65.03774  67.82464
1997  70.71757  70.48390  70.02845  70.75158  73.23728
1998  74.64519  74.61446  73.47925  73.76732  74.46418
1999  76.55675  76.31262  75.67001  76.24775  76.45465
2000  81.54154  79.62973  81.19074  80.16487  80.80958
2001  80.60701  79.32531  80.58703  78.26957  79.97355
2002  79.72127  79.92718  80.30576  78.38018  81.60774
2003  81.44337  80.93570  79.41995  79.18878  81.87911
2004  85.62087  82.94023  83.13244  82.19751  84.36268
2005  86.35209  83.78420  86.43120  84.64256  86.85310
2006  91.36864  88.35889  90.24619  87.86910  91.59749
2007  93.53460  91.41102  92.21733  89.47518  95.27999
2008  94.45588  94.15931  91.49309  90.57651  95.50683
2009  88.18426  88.73169  86.55360  86.50378  91.12057
2010  93.23105  92.32869  91.56219  90.55653  93.84530
2011  96.48831  95.21792  96.53903  94.10211  97.43771
2012  99.68684  99.31091  99.09917  95.18925 101.85991
2013  99.51755 100.80983 100.27357  96.80674 103.66718
2014 102.89399 104.13867 101.73624 100.01551 106.81112
2015 107.31724 107.46014 105.48272 105.02279 109.29448
2016 109.96061 107.52430 108.94816 106.06104 110.56514
2017 112.80077 108.95686 111.77075 106.32055 112.84477
2018 114.42889 112.79411 114.32351 108.77451 115.98004
2019 112.90360 113.43670 113.28344 108.87545 115.38661
2020  97.81722 101.95972 102.65073 102.91647 109.17307
2021 110.84770                                        
           Nov       Dec
1993  63.62177  66.12119
1994  67.84687  68.06744
1995  63.06020  65.41346
1996  68.55904  69.26845
1997  72.75789  73.78044
1998  74.44344  75.67735
1999  77.67013  78.05347
2000  80.91619  79.49830
2001  80.09390  79.09247
2002  80.09518  80.49051
2003  80.63451  83.33037
2004  85.94154  86.23057
2005  88.65732  89.15110
2006  91.14520  90.86138
2007  93.80926  92.45720
2008  92.04270  91.89505
2009  91.24910  91.85630
2010  95.96933  95.59593
2011 101.08275  98.81574
2012 104.38649 100.52818
2013 104.23165 102.80154
2014 106.47993 106.88153
2015 109.09888 109.26239
2016 114.14719 112.51271
2017 116.17160 113.98775
2018 117.75914 113.14577
2019 116.24633 113.33105
2020 111.15608 110.06413
2021                    

Plot the IGAE index to see how it has grew over time

plot(igae.ts)

Generate a column for the simple annual growth of the index month by month and plot it.

lnigae.ts <- log(igae.ts)
plot(diff(log(igae.ts), lag =12))

What do you observe? Compared to previous crisis in Mexico during 1994-1995 and 2009-2009, how does this crisis look like?

MEXICO DEFINITLEY HAS SEEN CONTRACTIONS IN THEIR ECONOMY THROUGHOUT THE YEARS, BUT WHAT WE EXPERIENCED WAS WITHOUT PRESCEDENTS. NOW, SOMETHING WORTH STATING IS THAT THIS CONTRACTION WAS SHORT LIVED IN COMPARISON TO THE PAST EXPERIENCES.

adf.test(diff(log(igae.ts), lag=12), k=0)
Warning in adf.test(diff(log(igae.ts), lag = 12), k = 0) :
  p-value smaller than printed p-value

    Augmented Dickey-Fuller Test

data:  diff(log(igae.ts), lag = 12)
Dickey-Fuller = -5.9009, Lag order = 0, p-value = 0.01
alternative hypothesis: stationary
sarima.for(igae.ts, n.ahead=24, p=1, d=0, q=0)
$pred
              Jan          Feb          Mar          Apr
2021                                                    
2022 5.805228e-05 5.805228e-05 5.805228e-05 5.805228e-05
2023 5.805228e-05 5.805228e-05 5.805228e-05 5.805228e-05
              May          Jun          Jul          Aug
2021                           2.356091e-04 5.753200e-05
2022 5.805228e-05 5.805228e-05 5.805228e-05 5.805228e-05
2023 5.805228e-05 5.805228e-05                          
              Sep          Oct          Nov          Dec
2021 5.805380e-05 5.805228e-05 5.805228e-05 5.805228e-05
2022 5.805228e-05 5.805228e-05 5.805228e-05 5.805228e-05
2023                                                    

$se
            Jan        Feb        Mar        Apr        May
2021                                                       
2022 0.02740515 0.02740515 0.02740515 0.02740515 0.02740515
2023 0.02740515 0.02740515 0.02740515 0.02740515 0.02740515
            Jun        Jul        Aug        Sep        Oct
2021            0.02740504 0.02740515 0.02740515 0.02740515
2022 0.02740515 0.02740515 0.02740515 0.02740515 0.02740515
2023 0.02740515                                            
            Nov        Dec
2021 0.02740515 0.02740515
2022 0.02740515 0.02740515
2023                      

Q Challenge - Calibrate an ARIMA-SARIMA model for the IGAE and do a forecast

Your challenge is to design/calibrate an ARIMA/SARIMA model for the IGAE series. You have to follow the calibration method we learned last workshop, and also the Dr. Nau recommendations.

If you come up with more than 1 competing model, select the best with the AIC criteria. You have to DOCUMENT your process while calibrating your model.

You also have to INTERPRET your final model, and finally, you have to do a forecast for the next 4 years. When the Mexican Economy will recover to the highest levels before the crisis?

acf2(diff(log(igae.ts), lag = 12), max.lag = 24)
     [,1] [,2] [,3]  [,4] [,5]  [,6]  [,7] [,8]  [,9] [,10]
ACF  0.79 0.64 0.53  0.42 0.37  0.30  0.19 0.13  0.06 -0.04
PACF 0.79 0.04 0.04 -0.05 0.09 -0.05 -0.13 0.02 -0.07 -0.15
     [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19]
ACF  -0.12 -0.22 -0.17  -0.1 -0.08 -0.06 -0.05 -0.07 -0.07
PACF -0.08 -0.12  0.30   0.1  0.00 -0.03  0.05 -0.10 -0.08
     [,20] [,21] [,22] [,23] [,24]
ACF  -0.03 -0.05 -0.05 -0.03 -0.09
PACF  0.07 -0.10 -0.11  0.04 -0.20

ARIMA-SARIMA model calibration test

m1 <- Arima(igae.ts, order = c(2,0,0), 
            seasonal = list(order=c(0,1,0),period=12),
            include.constant = TRUE,
            lambda = 0) 
coeftest(m1)

z test of coefficients:

        Estimate Std. Error z value Pr(>|z|)    
ar1   0.72909305 0.05509981 13.2322  < 2e-16 ***
ar2   0.09057559 0.05681823  1.5941  0.11091    
drift 0.00179275 0.00070255  2.5518  0.01072 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residuals

igae.ts <- m1$residuals

I get the ACF and PACF plots of these residuals to check for white noise or if the residuals still have significant autocorrelations with certain lags:

acf2(igae.ts,max.lag = 12)
     [,1]  [,2] [,3]  [,4] [,5] [,6]  [,7] [,8] [,9] [,10]
ACF     0 -0.04  0.1 -0.06 0.07 0.09 -0.08 0.04 0.07 -0.04
PACF    0 -0.04  0.1 -0.06 0.08 0.08 -0.06 0.03 0.06 -0.02
     [,11] [,12]
ACF  -0.02 -0.36
PACF -0.04 -0.38

AIC and BIC

sarima(igae.ts, p=1, d=0, q=0)
initial  value -3.595592 
iter   2 value -3.595596
iter   2 value -3.595596
iter   2 value -3.595596
final  value -3.595596 
converged
initial  value -3.597028 
iter   1 value -3.597028
final  value -3.597028 
converged
$fit

Call:
arima(x = xdata, order = c(p, d, q), seasonal = list(order = c(P, D, Q), period = S), 
    xreg = xmean, include.mean = FALSE, transform.pars = trans, fixed = fixed, 
    optim.control = list(trace = trc, REPORT = 1, reltol = tol))

Coefficients:
          ar1   xmean
      -0.0029  0.0001
s.e.   0.0544  0.0015

sigma^2 estimated as 0.000751:  log likelihood = 744.91,  aic = -1483.81

$degrees_of_freedom
[1] 340

$ttable
      Estimate     SE t.value p.value
ar1    -0.0029 0.0544 -0.0539  0.9571
xmean   0.0001 0.0015  0.0393  0.9687

$AIC
[1] -4.338636

$AICc
[1] -4.338532

$BIC
[1] -4.304997

sarima(igae.ts, p=0, d=0, q=2)
initial  value -3.597024 
iter   2 value -3.597722
iter   3 value -3.597778
iter   4 value -3.597779
iter   4 value -3.597779
iter   4 value -3.597779
final  value -3.597779 
converged
initial  value -3.597773 
iter   1 value -3.597773
final  value -3.597773 
converged
$fit

Call:
arima(x = xdata, order = c(p, d, q), seasonal = list(order = c(P, D, Q), period = S), 
    xreg = xmean, include.mean = FALSE, transform.pars = trans, fixed = fixed, 
    optim.control = list(trace = trc, REPORT = 1, reltol = tol))

Coefficients:
         ma1      ma2   xmean
      0.0071  -0.0427  0.0001
s.e.  0.0560   0.0593  0.0014

sigma^2 estimated as 0.0007499:  log likelihood = 745.16,  aic = -1482.32

$degrees_of_freedom
[1] 339

$ttable
      Estimate     SE t.value p.value
ma1     0.0071 0.0560  0.1261  0.8997
ma2    -0.0427 0.0593 -0.7201  0.4720
xmean   0.0001 0.0014  0.0417  0.9667

$AIC
[1] -4.334278

$AICc
[1] -4.33407

$BIC
[1] -4.289426

AFTER ANALYSING THE RESIDUALS, WE CAN TELL THAT BIC PREFFERS THE MODEL AR(1).

The basic goal of residual analysis is the same as in regression, that is we want to make sure the residuals are white Gaussian noise. If not, we haven’t found the best model yet.

“There are 4 plots. 1. The plot of the standardized residuals should be inspected for patterns. It’s difficult to tell if the noise is white from this plot, but it’s easy to tell if it’s not white noise, for example, are there obvious patterns in the residuals. 2. The ACF of the residuals can be used to assess whiteness. 95% of the ACF values should be between the blue dashed lines. 3. The Q-Q plot assesses normality. If the residuals are normal, the points will line up with the line. There are often extreme values on the ends as there are here. As long as there are no huge departures from the line, then the normal assumption is reasonable. 4. Finally there is a Q-statistic that tests for whiteness in the residuals. As long as most points are above the blue dashed line, then you can safely assume the noise is white.”

“If, however, many of the points are below the line, then there is still some correlation left in the residuals and you should try to fit another model or add a parameter.”

sarima(igae.ts, p=1, d=0, q=0)
initial  value -3.595592 
iter   2 value -3.595596
iter   2 value -3.595596
iter   2 value -3.595596
final  value -3.595596 
converged
initial  value -3.597028 
iter   1 value -3.597028
final  value -3.597028 
converged
$fit

Call:
arima(x = xdata, order = c(p, d, q), seasonal = list(order = c(P, D, Q), period = S), 
    xreg = xmean, include.mean = FALSE, transform.pars = trans, fixed = fixed, 
    optim.control = list(trace = trc, REPORT = 1, reltol = tol))

Coefficients:
          ar1   xmean
      -0.0029  0.0001
s.e.   0.0544  0.0015

sigma^2 estimated as 0.000751:  log likelihood = 744.91,  aic = -1483.81

$degrees_of_freedom
[1] 340

$ttable
      Estimate     SE t.value p.value
ar1    -0.0029 0.0544 -0.0539  0.9571
xmean   0.0001 0.0015  0.0393  0.9687

$AIC
[1] -4.338636

$AICc
[1] -4.338532

$BIC
[1] -4.304997

MOST P VALUES ARE ABOVE THE BLUE LINE. CAN’T SEEM TO CORRECT THE AMOUNT OF CORRELATION PRESENT IN THE GRAPH.

sarima(igae.ts, p=1, d=0, q=0)
initial  value -3.595592 
iter   2 value -3.595596
iter   2 value -3.595596
iter   2 value -3.595596
final  value -3.595596 
converged
initial  value -3.597028 
iter   1 value -3.597028
final  value -3.597028 
converged
$fit

Call:
arima(x = xdata, order = c(p, d, q), seasonal = list(order = c(P, D, Q), period = S), 
    xreg = xmean, include.mean = FALSE, transform.pars = trans, fixed = fixed, 
    optim.control = list(trace = trc, REPORT = 1, reltol = tol))

Coefficients:
          ar1   xmean
      -0.0029  0.0001
s.e.   0.0544  0.0015

sigma^2 estimated as 0.000751:  log likelihood = 744.91,  aic = -1483.81

$degrees_of_freedom
[1] 340

$ttable
      Estimate     SE t.value p.value
ar1    -0.0029 0.0544 -0.0539  0.9571
xmean   0.0001 0.0015  0.0393  0.9687

$AIC
[1] -4.338636

$AICc
[1] -4.338532

$BIC
[1] -4.304997

INTERPRETATION OF THE FINAL MODEL:

WE WILL IDENTIFY THE DEPENDENT VARIABLE WHICH IN THIS CASE IS THE IGAE OR GLOBAL ECONOMIC ACTIVITY INDEX. MORE SPECIFICALLY, WE ARE MODELING THE MONTHLY DIFFERENCES THROUGHOUT THE YEARS OF THE GROWTH OF ECONOMIC ACTIVITY.

THE AR(1) TERM HAS A COEFFICIENT (PHI1) EQUAL TO 0.72909305, AND IT IS SIGNIFICANTLY GREATER THAN 0. IT’S P-VALUE<0.05. THEN I CAN SAY THAT THE ANNUAL % GROWTH OF PRODUCT 1 SALES IS POSITIVELY AND SIGNIFICANTLY RELATED WITH ITS OWN ANNUAL % GROWTH OF THE PREVIOUS MONTH. IN OTHER WORDS, FOR EACH 1% INCREASE IN ANNUAL % GROWTH OF THE PREVIOUS MONTH, THE CURRENT ANNUAL % GROWTH OF ECONOMIC ACTIVITY IS EXPECTED TO GROW IN ABOUT 0.72909305%.

THE AR(2) TERM HAS A COEFFICIENT (PHI2) EQUAL TO 0.09057559, AND IT IS SOMEWHAT SIGNIFICANTLY GREATER THAN ZERO SINCE ITS P-VALUE<0.05. THEN I CAN SAY THA THE ANNUAL % GROWTH OF PRODUCT 1 SALES IS POSITIVELY AND SIGNIFICANTLY RELATED WITH ITS OWN ANNUAL % GROWTH OF 2 MONTHS AGO AFTER CONSIDERING THE AUTOCORRELATION OF LAG1 WITH THE CURRENT ANNUAL % GROWTH. FOR 1% INCREASE IN ANNUAL % GROWTH OF 2 MONTHS AGO, THE CURRENT ANNUAL % GROWTH OF ECONOMIC ACTIVITY WILL GROW IN ABOUT 0.09057559% AFTER CONSIDERING THE ANNUAL % GROWTH OF THE PREVIOUS MONTH (LAG1).

THE CONSTANT PHI0 (OF DRIFT) IS POSITIVE AND SIGNIFICANT. THIS MEANS THAT THE ANNUAL % GROWTH OF ECONOMIC ACTIVITY IS SYSTEMATICALLY GROWING OVER TIME WITH AN AVERAGE ANNUAL GROWTH OF 0.00179275% (IT HAS A GROWING TENDENCY). INTERPRETATION OF THE SEASONAL MA TERM:

THE ANNUAL % GROWTH OF ECONOMIC ACTIVITY IS NEGATIVELY RELATED TO THE SHOCK (ERROR) OF 12 MONTHS AGO. WHEN THE SHOCK IS NEGATIVE 12 MONTHS AGO, IT IS EXPECTED THAT THE ANNUAL % GROWTH OF THE CURRENT MONTH WILL BE POSITIVE.

Forecast Model

acf2(diff(igae.ts))
      [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9]
ACF  -0.47 -0.07  0.13 -0.15  0.05  0.10 -0.14  0.04  0.08
PACF -0.47 -0.38 -0.14 -0.24 -0.20 -0.03 -0.13 -0.14 -0.03
     [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18]
ACF  -0.07  0.18 -0.32  0.08  0.10 -0.05 -0.03  0.11 -0.06
PACF -0.02  0.26 -0.15 -0.17 -0.13 -0.07 -0.19 -0.06  0.06
     [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26] [,27]
ACF  -0.08  0.14 -0.05 -0.11  0.26 -0.23  0.01  0.14 -0.08
PACF -0.14 -0.08  0.06 -0.12  0.29 -0.07 -0.14 -0.06  0.04
     [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36]
ACF  -0.03  0.06 -0.06  0.02  0.04 -0.06  0.08 -0.14  0.14
PACF -0.11 -0.04  0.08 -0.10 -0.07  0.10  0.02  0.05  0.06
     [,37] [,38] [,39] [,40] [,41] [,42] [,43] [,44] [,45]
ACF  -0.02 -0.02 -0.06  0.11 -0.05 -0.08  0.13 -0.06 -0.09
PACF -0.09  0.01 -0.03 -0.03  0.03  0.00 -0.07  0.00  0.02
     [,46] [,47] [,48]
ACF   0.12  0.08 -0.30
PACF -0.05  0.28 -0.17

sarima(igae.ts, p=1, d=0, q=0)
initial  value -3.595592 
iter   2 value -3.595596
iter   2 value -3.595596
iter   2 value -3.595596
final  value -3.595596 
converged
initial  value -3.597028 
iter   1 value -3.597028
final  value -3.597028 
converged
$fit

Call:
arima(x = xdata, order = c(p, d, q), seasonal = list(order = c(P, D, Q), period = S), 
    xreg = xmean, include.mean = FALSE, transform.pars = trans, fixed = fixed, 
    optim.control = list(trace = trc, REPORT = 1, reltol = tol))

Coefficients:
          ar1   xmean
      -0.0029  0.0001
s.e.   0.0544  0.0015

sigma^2 estimated as 0.000751:  log likelihood = 744.91,  aic = -1483.81

$degrees_of_freedom
[1] 340

$ttable
      Estimate     SE t.value p.value
ar1    -0.0029 0.0544 -0.0539  0.9571
xmean   0.0001 0.0015  0.0393  0.9687

$AIC
[1] -4.338636

$AICc
[1] -4.338532

$BIC
[1] -4.304997

sarima.for(igae.ts, n.ahead=48, p=1, d=0, q=0)
$pred
              Jan          Feb          Mar          Apr
2021                                                    
2022 5.805228e-05 5.805228e-05 5.805228e-05 5.805228e-05
2023 5.805228e-05 5.805228e-05 5.805228e-05 5.805228e-05
2024 5.805228e-05 5.805228e-05 5.805228e-05 5.805228e-05
2025 5.805228e-05 5.805228e-05 5.805228e-05 5.805228e-05
              May          Jun          Jul          Aug
2021                           2.356091e-04 5.753200e-05
2022 5.805228e-05 5.805228e-05 5.805228e-05 5.805228e-05
2023 5.805228e-05 5.805228e-05 5.805228e-05 5.805228e-05
2024 5.805228e-05 5.805228e-05 5.805228e-05 5.805228e-05
2025 5.805228e-05 5.805228e-05                          
              Sep          Oct          Nov          Dec
2021 5.805380e-05 5.805228e-05 5.805228e-05 5.805228e-05
2022 5.805228e-05 5.805228e-05 5.805228e-05 5.805228e-05
2023 5.805228e-05 5.805228e-05 5.805228e-05 5.805228e-05
2024 5.805228e-05 5.805228e-05 5.805228e-05 5.805228e-05
2025                                                    

$se
            Jan        Feb        Mar        Apr        May
2021                                                       
2022 0.02740515 0.02740515 0.02740515 0.02740515 0.02740515
2023 0.02740515 0.02740515 0.02740515 0.02740515 0.02740515
2024 0.02740515 0.02740515 0.02740515 0.02740515 0.02740515
2025 0.02740515 0.02740515 0.02740515 0.02740515 0.02740515
            Jun        Jul        Aug        Sep        Oct
2021            0.02740504 0.02740515 0.02740515 0.02740515
2022 0.02740515 0.02740515 0.02740515 0.02740515 0.02740515
2023 0.02740515 0.02740515 0.02740515 0.02740515 0.02740515
2024 0.02740515 0.02740515 0.02740515 0.02740515 0.02740515
2025 0.02740515                                            
            Nov        Dec
2021 0.02740515 0.02740515
2022 0.02740515 0.02740515
2023 0.02740515 0.02740515
2024 0.02740515 0.02740515
2025                      

PREDICTION

AFTER MANY HOURS OF SELF STUDY AND FINISHING THE DATACAMP COURSE I STILL FEEL LIKE I MISSED SOMETHING IN THIS MODEL. I DON’T KNOW IF THE MODEL WASN’T PROPPERLY ADJUSTED OR I MADE A MISTAKE (SOMEWHERE ALONG THE WORKSHOP EVERYTHING CRASHED). BASED OFF THIS PREDICTION MODEL I CAN SAY THAT THE MEXICAN ECONOMY IS EXPECTED TO STAY SLIGHTLY ABOVE THE 0 MARK, WHICH ISN’T REALLY SHY FROM THE TRUTH CONSIDERING NULL GROWTH SEEN THESE LAST YEARS.

LS0tCnRpdGxlOiAiV29ya3Nob3AgNSwgRmluYW5jaWFsIEVjb25vbWV0cmljcyBJSSIKYXV0aG9yOiBTdGVmYW4gU2Nod2VpdHplciBBMDEyMDk3NTUKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKQWxiZXJ0byBEb3JhbnRlcywgUGguRC4gU2VwIDcsIDIwMjEKCiMgQWJzdHJhY3QKCkluIHRoaXMgd29ya3Nob3Agd2Ugd2lsbCBjb250aW51ZSBwcmFjdGljaW5nIHdpdGggY2FsaWJyYXRpb24gb2Ygc2Vhc29uYWwgQVJJTUEgbW9kZWwgKFNBUklNQSkgZm9yIHRpbWUgc2VyaWVzLgoKIyMgRm9yZWNhc3RpbmcgdGhlIE1leGljYW4gRWNvbm9teSBpbiB0aGUgQ09WSUQgY3Jpc2lzCgpZb3UgaGF2ZSB0byBjYWxpYnJhdGUgYW4gQVJJTUEvU0FSSU1BIG1vZGVsIGZvciB0aGUgSUdBRSBJbmRleCwgYW5kIGRvIGEgZm9yZWNhc3QgZm9yIHRoZSBuZXh0IDIgeWVhcnMgb2YgdGhlIE1leGljYW4gRWNvbm9teS4KCklHQUUgc3RhbmRzIGZvciAiw41uZGljZSBHZW5lcmFsIGRlIEFjdGl2aWRhZCBFY29uw7NtaWNhIi4gU2luY2UgMTk5MyBJTkVHSSBjYWxjdWxhdGVzIHRoaXMgaW5kZXggYmFzZWQgb24gdGhlIE1leGljYW4gZ2VuZXJhbCBlY29ub215IGFuZCBkaWZmZXJlbnQgaW5kdXN0cnkgc2VjdG9ycy4KCiMgRGF0YSBkb3dubG9hZAoKR28gdG8gSU5FR0kgYW5kIGRvd25sb2FkIHRoZSBJR0FFIHNlcmllcy4gR28gdG8gdGhlIGZvbGxvd2luZyBsaW5rOgoKPGh0dHBzOi8vd3d3LmluZWdpLm9yZy5teC90ZW1hcy9pZ2FlLyNIZXJyYW1pZW50YXM+CgpDbGljayBpbiAiQmFuZG8gZGUgSW5mb3JtYWNpw7NuIEVjb27Ds21pY2EgKEJJRSkiIGFuZCB0aGVuIHNlbGVjdDoKCkluZGljYWRvciBnbG9nYWwgZGUgbGEgYWN0aXZpZGFkIGVjb27Ds21pY2EsIGJhc2UgMjAxMyBFeHBhbmQgdGhlIG9wdGlvbjogIlNlcmllcyBvcmlnaW5hbGVzIiBhbmQsIHRoZW4gZXhwYW5kIHRoZSBvcHRpb24gIsONbmRpY2UgZGUgdm9sdW1lbiBmw61zaWNvIi4KCkNoZWNrLW1hcmsgdGhlIG9wdGlvbiAiVG90YWwgKMONbmRpY2UgYmFzZSAyMDEzPTEwMCkiCgpDbGljayB0aGUgYnV0dG9uICJDb25zdWx0YSIuIFlvdSB3aWxsIHNlZSB0YWJ1bGF0ZWQgZGF0YSBmb3IgdGhlIElHQUUuCgpTZWxlY3Qgb2xkZXN0IHllYXIgKDE5OTMgaW4gIlBlcmlvZG8gZGVzZGUiKS4gRmluYWxseSBjbGljayB0aGUgZG93bmxvYWQgYnV0dG9uIGFuZCBzZWxlY3QgdGhlIEV4Y2VsIGZvcm1hdC4gVGhlIGZpbGUgYmUgZG93bmxvYWRlZCB0byB5b3VyIGNvbXB1dGVyLgoKT3BlbiB0aGUgRXhjZWwgZmlsZSBhbmQgZHJvcCB0aGUgZmlyc3QgY29sdW1ucyBhbmQgbGFzdCByb3dzIHNvIHRoYXQgeW91IG9ubHkgbGVhdmUgdGhlIHBlcmlvZCBjb2x1bW4gYW5kIHRoZSBJR0FFIFRvdGFsIGluZGV4LiBSRU5BTUUgdGhlIGZpcnN0IGRhdGEgY29sdW1uIGFzIElHQUUuIFJldmlldyB0aGUgUGVyaW9kIGNvbHVtbiwgYW5kIGVkaXQgaWYgdGhlcmUgYXJlIHNvbWUgZGF0ZXMgd2l0aCBub3Rlcy4KClNhdmUgdGhlIEV4Y2VsIGZpbGUgYXMgaWdhZS54bHMgaW4gdGhlIHNhbWUgZm9sZGVyIG9mIHlvdXIgV29ya3Nob3AgNS4KCiMgVmlzdWFsaXplIHRoZSBkYXRhCmBgYHtyfQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeSh4dHMpCmxpYnJhcnkoem9vKQpsaWJyYXJ5KHRzZXJpZXMpCmxpYnJhcnkoZm9yZWNhc3QpCmxpYnJhcnkoYXN0c2EpCmxpYnJhcnkobG10ZXN0KQpgYGAKCmBgYHtyfQpsaWJyYXJ5KHJlYWR4bCkKaWdhZSA8LSByZWFkX2V4Y2VsKCJpZ2FlLnhscyIsIAogICAgY29sX3R5cGVzID0gYygidGV4dCIsICJudW1lcmljIikpCmBgYAoKYGBge3J9CmlnYWUudHMgPSB0cyAoZGF0YT0gaWdhZSRpZ2FlLCBzdGFydD1jKDE5OTMsMSksIGZyZXF1ZW5jeT0oMTIpKQppZ2FlLnRzCmBgYApQbG90IHRoZSBJR0FFIGluZGV4IHRvIHNlZSBob3cgaXQgaGFzIGdyZXcgb3ZlciB0aW1lCmBgYHtyfQpwbG90KGlnYWUudHMpCmBgYAoKR2VuZXJhdGUgYSBjb2x1bW4gZm9yIHRoZSBzaW1wbGUgYW5udWFsIGdyb3d0aCBvZiB0aGUgaW5kZXggbW9udGggYnkgbW9udGggYW5kIHBsb3QgaXQuCmBgYHtyfQpsbmlnYWUudHMgPC0gbG9nKGlnYWUudHMpCnBsb3QoZGlmZihsb2coaWdhZS50cyksIGxhZyA9MTIpKQpgYGAKCldoYXQgZG8geW91IG9ic2VydmU/IENvbXBhcmVkIHRvIHByZXZpb3VzIGNyaXNpcyBpbiBNZXhpY28gZHVyaW5nIDE5OTQtMTk5NSBhbmQgMjAwOS0yMDA5LCBob3cgZG9lcyB0aGlzIGNyaXNpcyBsb29rIGxpa2U/CgpNRVhJQ08gREVGSU5JVExFWSBIQVMgU0VFTiBDT05UUkFDVElPTlMgSU4gVEhFSVIgRUNPTk9NWSBUSFJPVUdIT1VUIFRIRSBZRUFSUywgQlVUIFdIQVQgV0UgRVhQRVJJRU5DRUQgV0FTIFdJVEhPVVQgUFJFU0NFREVOVFMuIE5PVywgU09NRVRISU5HIFdPUlRIIFNUQVRJTkcgSVMgVEhBVCBUSElTIENPTlRSQUNUSU9OIFdBUyBTSE9SVCBMSVZFRCBJTiBDT01QQVJJU09OIFRPIFRIRSBQQVNUIEVYUEVSSUVOQ0VTLgoKYGBge3J9CmFkZi50ZXN0KGRpZmYobG9nKGlnYWUudHMpLCBsYWc9MTIpLCBrPTApCmBgYApgYGB7cn0Kc2FyaW1hLmZvcihpZ2FlLnRzLCBuLmFoZWFkPTI0LCBwPTEsIGQ9MCwgcT0wKQpgYGAKCiMjIFEgQ2hhbGxlbmdlIC0gQ2FsaWJyYXRlIGFuIEFSSU1BLVNBUklNQSBtb2RlbCBmb3IgdGhlIElHQUUgYW5kIGRvIGEgZm9yZWNhc3QKCllvdXIgY2hhbGxlbmdlIGlzIHRvIGRlc2lnbi9jYWxpYnJhdGUgYW4gQVJJTUEvU0FSSU1BIG1vZGVsIGZvciB0aGUgSUdBRSBzZXJpZXMuIFlvdSBoYXZlIHRvIGZvbGxvdyB0aGUgY2FsaWJyYXRpb24gbWV0aG9kIHdlIGxlYXJuZWQgbGFzdCB3b3Jrc2hvcCwgYW5kIGFsc28gdGhlIERyLiBOYXUgcmVjb21tZW5kYXRpb25zLgoKSWYgeW91IGNvbWUgdXAgd2l0aCBtb3JlIHRoYW4gMSBjb21wZXRpbmcgbW9kZWwsIHNlbGVjdCB0aGUgYmVzdCB3aXRoIHRoZSBBSUMgY3JpdGVyaWEuIFlvdSBoYXZlIHRvIERPQ1VNRU5UIHlvdXIgcHJvY2VzcyB3aGlsZSBjYWxpYnJhdGluZyB5b3VyIG1vZGVsLgoKWW91IGFsc28gaGF2ZSB0byBJTlRFUlBSRVQgeW91ciBmaW5hbCBtb2RlbCwgYW5kIGZpbmFsbHksIHlvdSBoYXZlIHRvIGRvIGEgZm9yZWNhc3QgZm9yIHRoZSBuZXh0IDQgeWVhcnMuIFdoZW4gdGhlIE1leGljYW4gRWNvbm9teSB3aWxsIHJlY292ZXIgdG8gdGhlIGhpZ2hlc3QgbGV2ZWxzIGJlZm9yZSB0aGUgY3Jpc2lzPwoKYGBge3J9CmFjZjIoZGlmZihsb2coaWdhZS50cyksIGxhZyA9IDEyKSwgbWF4LmxhZyA9IDI0KQpgYGAKCiMgQVJJTUEtU0FSSU1BIG1vZGVsIGNhbGlicmF0aW9uIHRlc3QKCmBgYHtyfQptMSA8LSBBcmltYShpZ2FlLnRzLCBvcmRlciA9IGMoMiwwLDApLCAKICAgICAgICAgICAgc2Vhc29uYWwgPSBsaXN0KG9yZGVyPWMoMCwxLDApLHBlcmlvZD0xMiksCiAgICAgICAgICAgIGluY2x1ZGUuY29uc3RhbnQgPSBUUlVFLAogICAgICAgICAgICBsYW1iZGEgPSAwKSAKY29lZnRlc3QobTEpCmBgYAoKIyBSZXNpZHVhbHMKCmBgYHtyfQppZ2FlLnRzIDwtIG0xJHJlc2lkdWFscwpgYGAKCkkgZ2V0IHRoZSBBQ0YgYW5kIFBBQ0YgcGxvdHMgb2YgdGhlc2UgcmVzaWR1YWxzIHRvIGNoZWNrIGZvciB3aGl0ZSBub2lzZSBvciBpZiB0aGUgcmVzaWR1YWxzIHN0aWxsIGhhdmUgc2lnbmlmaWNhbnQgYXV0b2NvcnJlbGF0aW9ucyB3aXRoIGNlcnRhaW4gbGFnczoKCmBgYHtyfQphY2YyKGlnYWUudHMsbWF4LmxhZyA9IDEyKQpgYGAKCiMgQUlDIGFuZCBCSUMKCmBgYHtyfQpzYXJpbWEoaWdhZS50cywgcD0xLCBkPTAsIHE9MCkKYGBgCgpgYGB7cn0Kc2FyaW1hKGlnYWUudHMsIHA9MCwgZD0wLCBxPTIpCmBgYAoKQUZURVIgQU5BTFlTSU5HIFRIRSBSRVNJRFVBTFMsIFdFIENBTiBURUxMIFRIQVQgQklDIFBSRUZGRVJTIFRIRSBNT0RFTCBBUigxKS4KClRoZSBiYXNpYyBnb2FsIG9mIHJlc2lkdWFsIGFuYWx5c2lzIGlzIHRoZSBzYW1lIGFzIGluIHJlZ3Jlc3Npb24sIHRoYXQgaXMgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIHJlc2lkdWFscyBhcmUgd2hpdGUgR2F1c3NpYW4gbm9pc2UuIElmIG5vdCwgd2UgaGF2ZW4ndCBmb3VuZCB0aGUgYmVzdCBtb2RlbCB5ZXQuCgoiVGhlcmUgYXJlIDQgcGxvdHMuIDEuIFRoZSBwbG90IG9mIHRoZSBzdGFuZGFyZGl6ZWQgcmVzaWR1YWxzIHNob3VsZCBiZSBpbnNwZWN0ZWQgZm9yIHBhdHRlcm5zLiBJdCdzIGRpZmZpY3VsdCB0byB0ZWxsIGlmIHRoZSBub2lzZSBpcyB3aGl0ZSBmcm9tIHRoaXMgcGxvdCwgYnV0IGl0J3MgZWFzeSB0byB0ZWxsIGlmIGl0J3Mgbm90IHdoaXRlIG5vaXNlLCBmb3IgZXhhbXBsZSwgYXJlIHRoZXJlIG9idmlvdXMgcGF0dGVybnMgaW4gdGhlIHJlc2lkdWFscy4gMi4gVGhlIEFDRiBvZiB0aGUgcmVzaWR1YWxzIGNhbiBiZSB1c2VkIHRvIGFzc2VzcyB3aGl0ZW5lc3MuIDk1JSBvZiB0aGUgQUNGIHZhbHVlcyBzaG91bGQgYmUgYmV0d2VlbiB0aGUgYmx1ZSBkYXNoZWQgbGluZXMuIDMuIFRoZSBRLVEgcGxvdCBhc3Nlc3NlcyBub3JtYWxpdHkuIElmIHRoZSByZXNpZHVhbHMgYXJlIG5vcm1hbCwgdGhlIHBvaW50cyB3aWxsIGxpbmUgdXAgd2l0aCB0aGUgbGluZS4gVGhlcmUgYXJlIG9mdGVuIGV4dHJlbWUgdmFsdWVzIG9uIHRoZSBlbmRzIGFzIHRoZXJlIGFyZSBoZXJlLiBBcyBsb25nIGFzIHRoZXJlIGFyZSBubyBodWdlIGRlcGFydHVyZXMgZnJvbSB0aGUgbGluZSwgdGhlbiB0aGUgbm9ybWFsIGFzc3VtcHRpb24gaXMgcmVhc29uYWJsZS4gNC4gRmluYWxseSB0aGVyZSBpcyBhIFEtc3RhdGlzdGljIHRoYXQgdGVzdHMgZm9yIHdoaXRlbmVzcyBpbiB0aGUgcmVzaWR1YWxzLiBBcyBsb25nIGFzIG1vc3QgcG9pbnRzIGFyZSBhYm92ZSB0aGUgYmx1ZSBkYXNoZWQgbGluZSwgdGhlbiB5b3UgY2FuIHNhZmVseSBhc3N1bWUgdGhlIG5vaXNlIGlzIHdoaXRlLiIKCiJJZiwgaG93ZXZlciwgbWFueSBvZiB0aGUgcG9pbnRzIGFyZSBiZWxvdyB0aGUgbGluZSwgdGhlbiB0aGVyZSBpcyBzdGlsbCBzb21lIGNvcnJlbGF0aW9uIGxlZnQgaW4gdGhlIHJlc2lkdWFscyBhbmQgeW91IHNob3VsZCB0cnkgdG8gZml0IGFub3RoZXIgbW9kZWwgb3IgYWRkIGEgcGFyYW1ldGVyLiIKCmBgYHtyfQpzYXJpbWEoaWdhZS50cywgcD0xLCBkPTAsIHE9MCkKYGBgCk1PU1QgUCBWQUxVRVMgQVJFIEFCT1ZFIFRIRSBCTFVFIExJTkUuIENBTidUIFNFRU0gVE8gQ09SUkVDVCBUSEUgQU1PVU5UIE9GIENPUlJFTEFUSU9OIFBSRVNFTlQgSU4gVEhFIEdSQVBILgoKYGBge3J9CnNhcmltYShpZ2FlLnRzLCBwPTEsIGQ9MCwgcT0wKQpgYGAKIyMgSU5URVJQUkVUQVRJT04gT0YgVEhFIEZJTkFMIE1PREVMOgoKV0UgV0lMTCBJREVOVElGWSBUSEUgREVQRU5ERU5UIFZBUklBQkxFIFdISUNIIElOIFRISVMgQ0FTRSBJUyBUSEUgSUdBRSBPUiBHTE9CQUwgRUNPTk9NSUMgQUNUSVZJVFkgSU5ERVguIE1PUkUgU1BFQ0lGSUNBTExZLCBXRSBBUkUgTU9ERUxJTkcgVEhFIE1PTlRITFkgRElGRkVSRU5DRVMgVEhST1VHSE9VVCBUSEUgWUVBUlMgT0YgVEhFIEdST1dUSCBPRiBFQ09OT01JQyBBQ1RJVklUWS4KClRIRSBBUigxKSBURVJNIEhBUyBBIENPRUZGSUNJRU5UIChQSEkxKSBFUVVBTCBUTyAwLjcyOTA5MzA1LCBBTkQgSVQgSVMgU0lHTklGSUNBTlRMWSBHUkVBVEVSIFRIQU4gMC4gSVQnUyBQLVZBTFVFPDAuMDUuIFRIRU4gSSBDQU4gU0FZIFRIQVQgVEhFIEFOTlVBTCAlIEdST1dUSCBPRiBQUk9EVUNUIDEgU0FMRVMgSVMgUE9TSVRJVkVMWSBBTkQgU0lHTklGSUNBTlRMWSBSRUxBVEVEIFdJVEggSVRTIE9XTiBBTk5VQUwgJSBHUk9XVEggT0YgVEhFIFBSRVZJT1VTIE1PTlRILiBJTiBPVEhFUiBXT1JEUywgRk9SIEVBQ0ggMSUgSU5DUkVBU0UgSU4gQU5OVUFMICUgR1JPV1RIIE9GIFRIRSBQUkVWSU9VUyBNT05USCwgVEhFIENVUlJFTlQgQU5OVUFMICUgR1JPV1RIIE9GIEVDT05PTUlDIEFDVElWSVRZIElTIEVYUEVDVEVEIFRPIEdST1cgSU4gQUJPVVQgMC43MjkwOTMwNSUuCgpUSEUgQVIoMikgVEVSTSBIQVMgQSBDT0VGRklDSUVOVCAoUEhJMikgRVFVQUwgVE8gMC4wOTA1NzU1OSwgQU5EIElUIElTIFNPTUVXSEFUIFNJR05JRklDQU5UTFkgR1JFQVRFUiBUSEFOIFpFUk8gU0lOQ0UgSVRTIFAtVkFMVUU8MC4wNS4gVEhFTiBJIENBTiBTQVkgVEhBIFRIRSBBTk5VQUwgJSBHUk9XVEggT0YgUFJPRFVDVCAxIFNBTEVTIElTIFBPU0lUSVZFTFkgQU5EIFNJR05JRklDQU5UTFkgUkVMQVRFRCBXSVRIIElUUyBPV04gQU5OVUFMICUgR1JPV1RIIE9GIDIgTU9OVEhTIEFHTyBBRlRFUiBDT05TSURFUklORyBUSEUgQVVUT0NPUlJFTEFUSU9OIE9GIExBRzEgV0lUSCBUSEUgQ1VSUkVOVCBBTk5VQUwgJSBHUk9XVEguIEZPUiAxJSBJTkNSRUFTRSBJTiBBTk5VQUwgJSBHUk9XVEggT0YgMiBNT05USFMgQUdPLCBUSEUgQ1VSUkVOVCBBTk5VQUwgJSBHUk9XVEggT0YgRUNPTk9NSUMgQUNUSVZJVFkgV0lMTCBHUk9XIElOIEFCT1VUIDAuMDkwNTc1NTklIEFGVEVSIENPTlNJREVSSU5HIFRIRSBBTk5VQUwgJSBHUk9XVEggT0YgVEhFIFBSRVZJT1VTIE1PTlRIIChMQUcxKS4KClRIRSBDT05TVEFOVCBQSEkwIChPRiBEUklGVCkgSVMgUE9TSVRJVkUgQU5EIFNJR05JRklDQU5ULiBUSElTIE1FQU5TIFRIQVQgVEhFIEFOTlVBTCAlIEdST1dUSCBPRiBFQ09OT01JQyBBQ1RJVklUWSBJUyBTWVNURU1BVElDQUxMWSBHUk9XSU5HIE9WRVIgVElNRSBXSVRIIEFOIEFWRVJBR0UgQU5OVUFMIEdST1dUSCBPRiAwLjAwMTc5Mjc1JSAoSVQgSEFTIEEgR1JPV0lORyBURU5ERU5DWSkuIElOVEVSUFJFVEFUSU9OIE9GIFRIRSBTRUFTT05BTCBNQSBURVJNOgoKVEhFIEFOTlVBTCAlIEdST1dUSCBPRiBFQ09OT01JQyBBQ1RJVklUWSBJUyBORUdBVElWRUxZIFJFTEFURUQgVE8gVEhFIFNIT0NLIChFUlJPUikgT0YgMTIgTU9OVEhTIEFHTy4gV0hFTiBUSEUgU0hPQ0sgSVMgTkVHQVRJVkUgMTIgTU9OVEhTIEFHTywgSVQgSVMgRVhQRUNURUQgVEhBVCBUSEUgQU5OVUFMICUgR1JPV1RIIE9GIFRIRSBDVVJSRU5UIE1PTlRIIFdJTEwgQkUgUE9TSVRJVkUuCgojIyBGb3JlY2FzdCBNb2RlbAoKYGBge3J9CmFjZjIoZGlmZihpZ2FlLnRzKSkKc2FyaW1hKGlnYWUudHMsIHA9MSwgZD0wLCBxPTApCnNhcmltYS5mb3IoaWdhZS50cywgbi5haGVhZD00OCwgcD0xLCBkPTAsIHE9MCkKYGBgCgojIFBSRURJQ1RJT04KQUZURVIgTUFOWSBIT1VSUyBPRiBTRUxGIFNUVURZIEFORCBGSU5JU0hJTkcgVEhFIERBVEFDQU1QIENPVVJTRSBJIFNUSUxMIEZFRUwgTElLRSBJIE1JU1NFRCBTT01FVEhJTkcgSU4gVEhJUyBNT0RFTC4gSSBET04nVCBLTk9XIElGIFRIRSBNT0RFTCBXQVNOJ1QgUFJPUFBFUkxZIEFESlVTVEVEIE9SIEkgTUFERSBBIE1JU1RBS0UgKFNPTUVXSEVSRSBBTE9ORyBUSEUgV09SS1NIT1AgRVZFUllUSElORyBDUkFTSEVEKS4gQkFTRUQgT0ZGIFRISVMgUFJFRElDVElPTiBNT0RFTCBJIENBTiBTQVkgVEhBVCBUSEUgTUVYSUNBTiBFQ09OT01ZIElTIEVYUEVDVEVEIFRPIFNUQVkgU0xJR0hUTFkgQUJPVkUgVEhFIDAgTUFSSywgV0hJQ0ggSVNOJ1QgUkVBTExZIFNIWSBGUk9NIFRIRSBUUlVUSCBDT05TSURFUklORyBOVUxMIEdST1dUSCBTRUVOIFRIRVNFIExBU1QgWUVBUlMu