Este material tem como objetivo introduzir os conceitos sobre Cointegração e Vetor de Correção de Erros (VEC). Vamos entender como avaliar se uma série temporal multivariada é cointegrada e como usar o modelo VEC.

INTRODUÇÃO

Um dos objetivos da Econometria é avaliar empiricamente teorias econômicas que, em geral, pressupõem relações de equilíbrio de longo prazo entre variáveis. Esta averiguação pode ser feita com base em modelagem de séries temporais que, via de regra, apresentam algum tipo de tendência.

Neste sentido, fazer uso de modelos de regressão que envolvem dados de séries temporais apresentando tendência pode gerar resultados inconsistentes. Isso acontece porque as técnicas tradicionais de regressão, tal como Mínimos Quadrados Ordinários (MQO), precisam que as variáveis sejam estacionárias, ou seja, que a média condicional e a variância condicional não oscilem com o tempo.

Como alternativa, surge o Modelo de Correção de Erros (MCE) que utiliza a análise de cointegração para a estimação de modelos quando as variáveis não apresentam estacionariedade. A idéia intuitiva de cointegração é que variáveis não estacionárias podem caminhar juntas, isto é, podem ter trajetórias temporais interligadas, de forma que no longo prazo apresentem relação de equilíbrio.

Para o caso multivariado, estudamos como o Modelo Vetorial Autorregressivo (VAR), opcionalmente estimado por MQO, pode ser usado para modelagem de séries temporais multivariadas. Porém, temos a possibilidade dos componentes da série temporal multivariada serem cointegrados e neste caso o VAR não deveria ser usado e sim o Modelo Vetorial de Correção de Erros (VEC) que é a versão vetorial do MCE.

Resumidamente, no decorrer deste documento entenderemos o que é cointegração, sua relação com estacionariedade e como estes conceitos conduzirão a análise de uma série temporal multivariada da seguinte maneira:

COINTEGRAÇÃO E REGRESSÃO ESPÚRIA

Como sabemos, muitas séries temporais econômicas são estacionárias em primeira diferença. Processos estacionários em primeira diferença são também conhecidos como processos integrados de ordem 1 ou processos \(I(1)\). Em geral, um processo cuja \(d\)-ésima diferença é estacionária é um processo integrado de ordem \(d\), ou \(I(d)\).

Um exemplo clássico de processo estacionário em primeira diferença é o passeio aleatório. Ele é uma variável qualquer (aqui, \(p_t\)) que pode ser escrita como:

\[ p_t=p_{t-1}+a_{t} \] onde \(a_t\) é independentemente e identicamente distribuído (iid) com média zero e variância constante. Embora \(E\left[p_t\right]=0\)1 para todo \(t\), sua variância \(Var(p_t)=T\sigma^{2}\) não é invariante no tempo. Assim, \(p_t\) não é estacionário e em função de \(\Delta p_t=p_t - p_{t-1} = a_t\) e \(a_t\), por definição, ser estacionário, a primeira diferença de \(p_t\) será estacionária.

Agora, suponha que queremos estimar o seguinte modelo de regressão linear simples:

\[ y_t = \alpha + \beta x_t + a_t \] onde \(E[a_t]=0\), \(Var(a_t)=\sigma^{2}\) e \(E\left[a_t, a_{t-l}\right]=0\) para todo \(l >0\). Se \(y_t\) e \(x_t\) são originadas por passeios aleatórios independentes (que por definição não são estacionários), não existe relação entre \(y_t\) e \(x_t\) e os parâmetros estimados por MQO para o modelo de regressão linear simples produzirá uma estimativa para \(\beta\) inconsitente. Este caso é conhecido na literatura como regressão espúria.

Uma alternativa para o problema de regressão espúria seria estimar o seguinte modelo:

\[ \begin{aligned} &&& y_t - y_{t-1} = \alpha - \alpha + \beta x_t - \beta x_{t-1} + a_t - a_{t-1}\\ \\ &&& \Delta y_t = \beta \Delta x_t + \varepsilon_t \\ \end{aligned} \] dado que \(\Delta y_t\) e \(\Delta x_t\) serão estacionários. Porém, isso pode esconder as propriedades de longo prazo da relação entre as duas variáveis.

Pelo gráfico podemos observar que há uma aparecente relação entre as duas variáveis. Sem fazer qualquer tipo de teste para avaliar a estacionariedade delas, uma pessoa poderia estimar um modelo de regressão linear simples e fazer inferência com os resultados ou até mesmo previsões para \(y\). Como já sabemos que ambas as variáveis foram geradas por um passeio aleatório e que este, por definição, não é estacionário, entendemos que os resultados não têm qualquer utilidade. Abaixo, resultado desta regressão.

Como esperado, o resultado mostra que os parâmetros estimados são altamente significativos e há autocorrelação nos resíduos como apresenta o gráfico da Função de Autocorrelação (FAC) abaixo. Este resultado indica regressão espúria, caracterizada por relação forte entre as variáveis, devido a tendência estocástica comum às duas séries (fruto do passeio aleatório neste caso) e erro não estacionário (gráfico dos resíduos do modelo estimado).

MODELO DE CORREÇÃO DE ERROS

Phillips and Durlauf (1986) demonstraram que é possível trabalhar com o nível das séries sem correr o risco de regressões espúrias desde que as séries utilizadas sejam cointegradas de uma particular ordem.

Para o nosso exemplo, quando \(\hat{a}_t = y_t - \hat{\alpha} - \hat{\beta} x_t\) é \(I(0)\), dizemos que \(y_t\) e \(x_t\) são cointegradas, pois cada variável é \(I(1)\) mas a combinação linear delas, \(\hat{a}_t\), é \(I(0)\). Como consequência, assumimos que \(y_t\) e \(x_t\) têm trajetórias temporais interligadas de forma que no longo prazo apresentem relação de equilíbrio. Entretanto, no curto prazo há desvios dessa relação de equilíbrio de modo que \(a_t\) é chamado de erro de equilíbrio, porque expressa os desvios temporais de equilibrio de longo prazo.

O Modelo de Correção de Erros (MCE) corrige esses desequilíbrios e nos mostra a taxa à qual o sistema retorna ao equilíbrio após os desvios. Para entender como ele faz isso suponha que duas variáveis \(y\) e \(x\) são \(I(1)\), mas cointegradas e que queremos estimar o seguinte modelo:

\[ y_t = \beta_0 + \beta_{1}y_{t-1} + \beta_{2}x_t + \beta_{3}x_{t-1} + \varepsilon_{t} \] Tal modelo é conhecido como Modelo Autorregressivo com Defasagens Distribuídas (do inglês, ADL - Autoregressive Distributed Lag). Repare que temos uma combinação entre valores defasados das duas variáveis, além da própria variável \(x_t\)2, e que este modelo é semelhante às equações estimadas no VAR.

Podemos reescrever o modelo como:

\[ \begin{aligned} & y_t - y_{t-1} = \beta_0 + \beta_1y_{t-1} - y_{t-1} + \beta_2x_t + \beta_3x_{t-1} + \varepsilon_t \\ & \Delta y_t = \beta_0 - (1-\beta_1)y_{t-1} + \beta_2x_t + \beta_3x_{t-1} + \varepsilon_t \\ & \Delta y_t = \beta_0 - (1-\beta_1)y_{t-1} + \beta_2x_t + \beta_3x_{t-1} + \beta_2x_{t-1} - \beta_2x_{t-1} + \varepsilon_t \\ & \Delta y_t = \beta_0 - (1-\beta_1)y_{t-1} + \beta_2 \Delta x_t + \beta_3x_{t-1} + \beta_2x_{t-1} + \varepsilon_t \\ & \Delta y_t = \beta_0 - (1-\beta_1)y_{t-1} + \beta_2 \Delta x_t + (\beta_3 + \beta_2)x_{t-1} + \varepsilon_t \\ & \Delta y_t = \gamma \Delta x_t -\lambda(y_{t-1} -\alpha - \beta x_{t-1}) + \varepsilon_t \\ \end{aligned} \] onde \(\gamma = \beta_2\), \(\lambda = 1 -\beta_1\), \(\alpha=\frac{\beta_0}{1-\beta_1}\), \(\beta = \frac{\beta_3+\beta_2}{1-\beta_1}\) e \(y_{t-1} -\alpha - \beta x_{t-1} = a_{t-1}\) que é estimado por \(y_{t} = \alpha + \beta x_{t} + a_t\). Observe que o coeficiente do erro de correção é negativo por construção significando que a correção do erro é feita em cada período. Para facilitar o entendimento, suponha que \(y_t = venda_t\) e que \(x_t=preco_t\). Assim, o Modelo de Correção de Erros (MCE) se torna:

\[ \begin{aligned} & \Delta venda_t = \gamma \Delta preco_t -\lambda(venda_{t-1} -\alpha - \beta preco_{t-1}) + \varepsilon_t \\ & \Delta venda_t = \gamma \Delta preco_t -\lambda(a_{t-1}) + \varepsilon_t \\ \end{aligned} \] que deixa claro que a variação nas vendas é explicada por dois componentes: um termo de curto prazo e outro de longo prazo. As variações nos preços, \(\Delta preco_t\), representam o termo de curto prazo e \(a_{t-1}\) é o componente de longo prazo, pois pode ser entendido como o termo de erro da regressão \(venda_{t} = \alpha + \beta preco_{t} + a_t\) que nada mais é que uma combinação linear estacionária entre as duas variáveis.

A estimação do Modelo de Correção de Erros pode ser feita da seguinte maneira:

  1. Estimar a relação entre \(y_t\) e \(x_t\) por meio de \(y_t = \alpha + \beta x_{t} + a_t\).
  2. Obter \(\hat{a}_t\) que são os resíduos de cointegração.
  3. Estimar \(\Delta y_t = \gamma \Delta x_t +\lambda\hat{a}_{t-1}+ \varepsilon_t\) e obter a estimativa para os termos de curto (\(\gamma\)) e longo prazo (\(\lambda\)).
VETORES DE COINTEGRAÇÃO

O vetor de cointegração é formado pelos coeficientes da relação de cointegração (estacionária) que assegura o equilíbrio de longo prazo entre as séries. Suponto \(\boldsymbol{r}_{t}\) uma série temporal multivariada, os \(k\) elementos do vetor \(\boldsymbol{r}_{t} = \left(r_{1t},...,r_{kt}\right)^{'}\) são ditos cointegrados de ordem \((d,b)\) se:

  1. Todos os elementos de \(\boldsymbol{r}_{t}\) são integrados de ordem \(d\), ou seja, são \(I(d)\);
  2. Existe um vetor não nulo \(\boldsymbol{\beta}\), tal que \(\boldsymbol{a}_{t} = \boldsymbol{\beta}^{'}\boldsymbol{r}_{t}\) é \(I(d-b)\), \(b>0\). A diferença \(d-b\) é a ordem de integração obtida da aplicação do vetor \(\boldsymbol{\beta}\) em \(\boldsymbol{r}_{t}\). Se as variáveis são cointegradas, o resíduo \(\boldsymbol{a}_{t}\) tem ordem de integração menor que a ordem das variáveis que o originaram.

O número de vetores de cointegração depende do número de variáveis envolvidas. Tem-se:

  1. Caso de duas variáveis: Se \(\boldsymbol{r}_{t} = \left(y_t, r_t\right)^{'}\) com \(y_t \sim I(1)\), \(x_t \sim I(1)\) e \(a_t = y_t - \beta x_t \sim I(0)\), então dizemos que \(y_t\) e \(x_t\) \(\sim CI(1,1)\), ou seja, são cointegradas na ordem \((1,1)\) com vetor de cointegração \(\boldsymbol{\beta} = \left(1,-\hat{\beta}\right)^{'}\) e o sistema é cointegrado dado que \(\boldsymbol{\beta}^{'} \boldsymbol{r}_{t} \sim I(0)\). Neste caso, existe somente uma combinação linear estacionária que representa uma relação de equilíbrio de longo prazo entre as variáveis que é representada por:

\[ \boldsymbol{a}_{t} = \boldsymbol{\beta}^{'} \boldsymbol{r}_{t} = \begin{bmatrix} 1 & -\hat{\beta} \end{bmatrix} \begin{bmatrix} y_t \\ x_t \end{bmatrix} = y_t -\hat{\beta} x_t \]

  1. Caso de \(k\) variáveis: Se \(\boldsymbol{r}_{t} = \left(y_{1t}, x_{1t}, x_{2t}, ..., x_{kt}\right)^{'}\) com \(y_t \sim I(1)\), \(x_{1t} \sim I(1)\), \(x_{2t} \sim I(1)\), \(x_{3t} \sim I(1)\), …, \(x_{kt} \sim I(1)\) e \(a_t = y_t - \beta_1x_{1t} - \beta_2x_{2t}, ..., - \beta_kx_{kt} \sim I(0)\), então dizemos que \(y_t\), \(x_{1t}\), …, \(x_{kt}\) \(\sim CI(1,1)\), ou seja, são cointegradas na ordem \((1,1)\) com vetor de cointegração \(\boldsymbol{\beta} = \left[1, -\hat{\beta}_1, -\hat{\beta}_2,...,-\hat{\beta}_k\right]^{'}\) e o sistema é cointegrado dado que \(\boldsymbol{\beta}^{'} \boldsymbol{r}_{t} \sim I(0)\). Neste caso, pode existir até \(k-1\) vetores de cointegração linearmente independentes. Ou seja, podem existir de \(1\) até \(k-1\) vetores de cointegração que representam relações de equilíbrio de longo prazo entre as variáveis.

O rank de cointegração (\(r\)) é o número de vetores de cointegração linearmente independentes. Para \(k\) variáveis de mesma ordem de integração e cointegradas, tem-se que \(1\leq r \leq k-1\). O rank de cointegração é o número de relações de cointegração importantes para manter o equilíbrio de longo prazo entre as variáveis.

TESTES DE COINTEGRAÇÃO

Para testar a existência de cointegração entre variáveis, podemos usar testes de uma equação que se baseiam no ajustamento da relação entre as variáveis e testes com várias equações onde ajustamos um modelo VAR com as variáveis a serem testadas. Em ambos os casos podemos considerar 2 ou mais variáveis.

Para este caso, o teste comumente usado é o de Engle-Granger que consiste em ajustar uma relação entre as variáveis e realizar o teste de raiz unitária de Dickey-Fuller Aumentado (ADF) nos resíduos da equação ajustada. Para o caso de 2 variáveis (\(y\) e \(x\), por exemplo) temos o seguinte processo:

  1. Executar o teste de raiz unitária para \(y\) e \(x\) e certificar que elas são \(I(1)\). Se elas forem \(I(0)\) não há razão para testar cointegração.
  2. Estimar a relação \(y_t = \alpha + \beta x_t + a_t\) e obter \(\hat{a}_t\)
  3. Testar se os resíduos são estacionários, ou seja, se são \(I(0)\) usando o teste de Dickey-Fuller Aumentado3 (a equação do teste não deve ter intercepto nem tendência porque os resíduos de MQO oscilam em torno de zero), conforme abaixo:

\[ \begin{aligned} & \Delta \hat{a}_t = \phi\hat{a}_{t-1}+\sum_{i=1}^{p-1}{\lambda_{i}\Delta \hat{a}_{t-i}}+\xi_t \\ & \\ & H_0: \phi=0~\rightarrow \hat{a}_t~\text{não estacionário}~\rightarrow y~\text{e}~x~\text{não são cointegradas} \\ & H_1: \phi<0~\rightarrow \hat{a}_t~\text{estacionário}~\rightarrow y~\text{e}~x~\text{são cointegradas} \\ \end{aligned} \]

Suponha \(k\) variáveis \(I(1)\) e que a teoria ou qualquer conhecimento a priori, sugere uma relação de equilíbrio de longo prazo entre elas. Em geral, existem \(r\leq k-1\) combinações lineares independentes \(I(0)\) que são chamadas relações de cointegração e o problema é determinar o valor de \(r\). O teste mais usado para este fim é o teste de Johansen que tem como base o modelo VAR. Considere um \(VAR(p)\) com \(k\) variáveis

\[ Y_t = A_1Y_{t-1}+A_2Y_{t-2}+...+A_pY_{t-p}+\epsilon_t \] À semelhança do teste de Dickey-Fuller Aumentado (ADF), o teste de Johansen se baseia em um modelo transformado, denominado de VAR reparametrizado, que permite um processo autorregressivo de ordem \(p\) e não somente de ordem \(1\). A obtenção deste modelo segue procedimento semelhante à derivação da equação de teste do Dickey-Fuller Aumentado (ADF)4. Partindo-se do VAR anterior obtém-se o VAR reparametrizado representado por:

\[ \begin{aligned} & \Delta Y_t = \Pi Y_{t-1} + \sum_{i=1}^{p-1}{\Gamma_i\Delta Y_{t-i}} +\epsilon_t \\ \end{aligned} \] em que \(\Gamma_i = -\sum_{j=i+1}^{p}{A_j}\) e \(\Pi=\sum_{i=1}^{p}{A_i-I}=\left(I_k -\sum_{i=1}^{p}{A_i}\right)\). Perceba a semelhança entre o teste de Johansen e o teste de raiz unitária Dickey-Fuller Aumentado (ADF). Inicialmente, o termo \(\Pi Y_{t-1}\) representa \(k\) combinações lineares das variáveis, isto é:

\[ \begin{aligned} \Pi Y_{t-1} & = \begin{bmatrix} \pi_{11} & \pi_{12} & ... & \pi_{1k} \\ \pi_{21} & \pi_{22} & ... & \pi_{2k} \\ \vdots & \vdots & & \vdots \\ \pi_{k1} & \pi_{k2} & ... & \pi_{kk} \\ \end{bmatrix} \begin{bmatrix} Y_{1,t-1} \\ Y_{2,t-1} \\ \vdots \\ Y_{k,t-1} \\ \end{bmatrix} \\ &&& \\ & = \left\{\begin{matrix} \pi_{11}Y_{1,t-1}+\pi_{12}Y_{2,t-1}+ ... + \pi_{1k}Y_{k,t-1} \\ ... \\ ... \\ \pi_{k1}Y_{1,t-1}+\pi_{k2}Y_{2,t-1}+ ... + \pi_{kk}Y_{k,t-1} \end{matrix}\right. \end{aligned} \]

que são \(k\) combinações lineares. Por definição, todos os termos da equação são estacionários, exceto \(\Pi Y_{t-1}\). Para o sistema ser estacionário, \(\Pi Y_{t-1}\) deve ser estacionário e para isso a matriz \(\Pi\) deve apresentar estrural tal que as combinações lineares sejam estacionárias. Para as variáveis serem cointegradas as linhas de \(\Pi\) não podem ser todas linearmente independentes. Assim, \(\Pi\) deve ser singular, ou seja \(det(\Pi)=0\) e, então, o posto ou rank de \(\Pi\) deve ser menor que \(k\) para que as variáveis sejam cointegradas.

Resumindo, temos \(3\) possibilidades para o teste de Johansen:

  1. \(Posto(\Pi)=0\)5
    • Significa que \(\Pi=0\) que é a analogia ao caso onde \(\phi=0\) no teste ADF e assim, temos \(k\) raízes unitárias
    • Não há relação de cointegração entre as variáveis e não existe mecanismo de correção de erro
    • Decisão: O modelo VAR deve ser especificado em primeiras diferenças
  2. \(Posto(\Pi)=k\)
    • As linhas de \(\Pi\) são linearmnete independentes e o \(\left|\Pi \right| \neq 0\)
    • Existem \(k\) combinações estacionárias das variáveis, mas cointegração não é pertinente dado que as variáveis são estacionárias
    • Decisão: O modelo VAR deve ser estimado em nível
  3. \(0\leq Posto(\Pi)=r \leq k\)
    • Existem \(r\) combinações lineares estacionárias e o \(\left| \Pi \right| = 0\) com pelo menos uma linha ou coluna nula
    • Se as variáveis são \(I(1)\), existem \(r\) relações de cointegração que fornecem \(r\) vetores de cointegração e o termo \(\Pi Y_{t-1}\) fornecem as combinações lineares estacionárias
    • Decisão: O modelo VEC deve ser utilizado

O procedimento de Johansen consiste em testar o número de raízes características diferentes de zero na matriz \(\Pi\) que corresponde ao número de relações e vetores de cointegração entre as variáveis. São utilizados dois testes: Teste do Traço e Teste da Raiz Característica Máxima.

  1. Teste do Traço

Este teste considera como hipótese nula a existência de \(r_0\) raízes características diferentes de zero (\(r_0\) vetores de cointegração) contra a alternativa de \(r>r_0\). Formalmente,

\[ \begin{aligned} & H_0: r=r_0 \\ & H_1: r>r_0 \\ \end{aligned} \] A estatística de teste é dada por:

\[ \lambda_{traço} = -T \sum_{i=r_0+1}^{k}{\ln(1-\hat{\lambda}_i)} \] em que T é o número de observações e \(\hat{\lambda}_i\) são as raízes características obtidas da matriz \(\Pi\) estimada.

  1. Teste da Raiz Característica Máxima

O segundo teste tem como hipótese nula a existência de \(r_0\) raízes características diferentes de zero (\(r_0\) vetores de cointegração) contra a alternativa de \(r=r_0 +1\). Formalmente,

\[ \begin{aligned} & H_0: r=r_0 \\ & H_1: r=r_0 +1\\ \end{aligned} \] e a estatística de teste é:

\[ \lambda_{max} = -T \ln(1-\hat{\lambda}_{r_0+1}) \] Os testes são realizados em sequência, de forma crescente, até que a hipótese nula não seja rejeitada. Para \(H_0: r=0\), rejeitar \(H_0\) significa que há um ou mais vetores de cointegração, pelo teste do traço, e um pelo teste da raiz máxima. Para \(H_0: r=1\), rejeitar \(H_0\) significa que há dois ou mais vetores de cointegração, pelo teste do traço, e mais um pelo teste da raiz máxima.

MODELO VETORIAL DE CORREÇÃO DE ERROS (VEC)

Se o posto de \(\Pi=r<k\), pode-se mostrar que existem matrizes \(\alpha_{k\times r}\) e \(\beta_{k\times r}\) tais que \(\Pi_{k\times k}=\alpha_{k\times r}\beta^{'}_{r\times k}\) tais que:

\[ \Pi_{k\times k} = \alpha_{k \times r} \beta^{'}_{r \times k} \] Substituindo na equação do VAR reparametrizado, obtém-se:

\[ \begin{aligned} & \Delta Y_t = \alpha \beta^{'} Y_{t-1} + \sum_{i=1}^{p-1}{\Gamma_i\Delta Y_{t-i}} +\epsilon_t \\ \end{aligned} \] que é o modelo de correção de erro na forma multivariada denominado Modelo de Correção de Erro Vetorial (VEC). O VEC é um VAR (reparametrizado) com as restrições de cointegração entre as variáveis. Tem-se que:

Como ilustração, considere um exemplo com \(k=3\) variáveis e matriz \(\Pi\) dada por:

\[ \Pi = \begin{bmatrix} -\frac{1}{2} & -\frac{5}{16} & -\frac{1}{16} \\ \frac{1}{8} & -\frac{41}{64} & \frac{5}{32} \\ \frac{1}{4} & -\frac{11}{32} & -\frac{3}{32} \end{bmatrix} \]

com raízes características \(\lambda_{1}=0\), \(\lambda_{2}=-0,4416\) e \(\lambda_{3}=-0,7928\). Assim, com duas raízes características diferentes de zero (posto de \(\Pi=2\)) e existem 2 relações de cointegração. Pode-se mostrar que

\[ \Pi = \begin{bmatrix} -\frac{1}{2} & -\frac{5}{16} & -\frac{1}{16} \\ \frac{1}{8} & -\frac{41}{64} & \frac{5}{32} \\ \frac{1}{4} & -\frac{11}{32} & -\frac{3}{32} \end{bmatrix} = \begin{bmatrix} -\frac{1}{2} & \frac{1}{4} \\ \frac{1}{8} & -\frac{5}{8} \\ \frac{1}{4} & \frac{3}{8} \end{bmatrix} \begin{bmatrix} 1 & -\frac{1}{8} & 0 \\ 0 & 1 & -\frac{1}{4} \end{bmatrix} \] O modelo VEC, desconsiderando os termos de diferença defasados (\({\Gamma_i\Delta Y_{t-i}}\)), será:

\[ \begin{aligned} \begin{bmatrix} \Delta Y_{1t} \\ \Delta Y_{2t} \\ \Delta Y_{3t} \end{bmatrix} &&& = \begin{bmatrix} -\frac{1}{2} & \frac{1}{4} \\ \frac{1}{8} & -\frac{5}{8} \\ \frac{1}{4} & \frac{3}{8} \end{bmatrix} \begin{bmatrix} 1 & -\frac{1}{8} & 0 \\ 0 & 1 & -\frac{1}{4} \end{bmatrix} \begin{bmatrix} Y_{1t-1} \\ Y_{2t-1} \\ Y_{3t-1} \end{bmatrix} \\ && \\ &&& = \begin{bmatrix} -\frac{1}{2} & \frac{1}{4} \\ \frac{1}{8} & -\frac{5}{8} \\ \frac{1}{4} & \frac{3}{8} \end{bmatrix}\begin{bmatrix} Y_{1t-1}-\frac{1}{8}Y_{2t-1}+0Y_{3t-1}\\ 0Y_{1t-1}+Y_{2t-1}-\frac{1}{4}Y_{3t-1} \end{bmatrix} \\ &&& \\ &&& = \left\{\begin{matrix} \Delta Y_{1t} = -\frac{1}{2} \left(Y_{1t-1}-\frac{1}{8}Y_{2t-1}\right) +\frac{1}{4} \left(Y_{2t-1}-\frac{1}{4}Y_{3t-1}\right) \\ \Delta Y_{2t} = \frac{1}{8} \left(Y_{1t-1}-\frac{1}{8}Y_{2t-1}\right) -\frac{5}{8} \left(Y_{2t-1}-\frac{1}{4}Y_{3t-1}\right) \\ \Delta Y_{3t} = \frac{1}{4} \left(Y_{1t-1}-\frac{1}{8}Y_{2t-1}\right) +\frac{3}{8} \left(Y_{2t-1}-\frac{1}{4}Y_{3t-1}\right) \end{matrix}\right. \\ \end{aligned} \]

As expressões \(Y_{1t-1}-\frac{1}{8}Y_{2t-1}\) e \(Y_{2t-1}-\frac{1}{4}Y_{3t-1}\) são as relações de cointegração que entram em cada equação. A maneira mais simples de estimar um modelo VEC é o procedimento em dois estágios. Primeiro, estimamos a relação de cointegração e criamos a série de defasagens dos resíduos. Após isso, estimamos a equação do modelo por meio de Mínimos Quadrados Ordinários (MQO).

PROCESSO DE ESTIMAÇÃO

Abaixo, os passos para estimação e avaliação dos modelos VAR, SVAR e VEC. Perceba que dependendo das decisões nas etapas, seguimos com a estimação do modelo VEC.

  1. Visualizar os dados e identificar observações fora do padrão (outliers, sazonalidade, tendência)
  2. Se necessário, transformar os dados para estabilizar a variância (logaritmo ou retirar sazonalidade, por exemplo)
  3. Avaliar a função de correlação cruzada para confirmar a possibilidade de modelagem multivariada.
  4. Testar se os dados são estacionários ou cointegrados:
    • Caso não tenha raiz unitária (estacionários), estimar VAR com as séries em nível
    • Caso tenha raiz unitária, mas sem cointegração é preciso diferenciar os dados até se tornarem estacionários e estimar VAR com as séries diferenciadas
    • Caso tenha raiz unitária, mas com cointegração devemos estimar o VEC com as séries em nível
  5. Definir a ordem \(p\) para os dados em análise por meio de critérios de informação (escolher modelo com menor AIC, por exemplo)
  6. Estimar o modelo escolhido no passo 4
    • Se VAR (forma reduzida):
      • Verificar significância estatística do modelo estimado e, caso seja necessário, eliminar parâmetros não significantes.
      • Analisar a causalidade de Granger (variáveis que não granger causa as demais podem ser retiradas do modelo)
    • Se SVAR (forma estrutural):
      • Definir a estrutura para as matrizes A e B e o modelo de interesse (A, B ou AB)
      • Verificar significância estatística do modelo estimado e, caso seja necessário, eliminar parâmetros não significantes.
      • Analisar a causalidade de Granger (variáveis que não granger causa as demais podem ser retiradas do modelo)
    • Se VEC (Modelo Vetorial de Correção de Erros)
      • Usar a quantidade de vetores de cointegração obtidos no teste de cointegração para estimar o modelo VEC
  7. Examinar se os resíduos se comportam como ruído branco e condições de estacionariedade do modelo. Caso contrário, retornar ao passo 3 ou 4.
    • Verificar a autocorrelação serial por meio da FAC e FACP dos resíduos de cada equação do modelo estimado. O ideal é não ter defasagens significativas.
    • Verificar correlação cruzada por meio da FCC dos resíduos.
    • Analisar a estabildiade do modelo estimado através dos autovalores associados ao mesmo.
    • Verificar a distribuição de probabilidade (Normal) para os resíduos de cada equação do modelo.
    • Analisar heterocedasticidade condicional (resíduos devem ser homocedasticos, ou seja, variância condicional constante)
  8. Uma vez que os resíduos são ruído branco e o modelo é estável:
    • Analisar funções de resposta ao impulso
    • Analisar a importância das variáveis para explicar a variância do erro de previsão de cada variável
    • Fazer previsões paras as variáveis do modelo
REFERÊNCIAS
Granger, Clive WJ. 1969. “Investigating Causal Relations by Econometric Models and Cross-Spectral Methods,” 424–38.
Lutkepohl, Helmut. 2005. New Introduction to Multiple Time Series Analysis. Springer Science & Business Media.
Phillips, Peter CB, and Steven N Durlauf. 1986. “Multiple Time Series Regression with Integrated Processes” 53: 473–95.
Sims, Christopher A. 1980. “Macroeconomics and Reality,” 1–48.
Tiao, George C, and George EP Box. 1981. “Modeling Multiple Time Series with Applications” 76: 802–16.
Tsay, Ruey S. 2010. Analysis of Financial Time Series. John Wiley & Sons.
———. 2013. Multivariate Time Series Analysis with R and Financial Application. John Wiley & Sons.
———. 2014. An Introduction to Analysis of Financial Data with R. John Wiley & Sons.

  1. Supondo \(p_0=0\), temos que \(p_1=a_1\), \(p_2=p_1+a_2=a_1+a_2\) e \(p_t=a_1+a_2+...+a_t\) e assim, \(E\left[p_t \right]=E\left[a_1 \right]+...+E\left[a_t \right]=0\) e \(Var(p_t)=Var(a_1)+...+Var(a_t)=t\sigma^{2}_{a}\)↩︎

  2. Quando a dinâmica do modelo é ditada pelo comportamento das variáveis independentes defasadas nos referimos a modelos com defasagens distribuídas, sendo as defasagens responsáveis por explicar \(y_t\). Se somente os valores passados de \(y_t\) determinam seu valor em \(t\), a dinâmica de \(y_t\) pode ser descrita segundo Modelos Autorregressivos (AR). É possível, ainda, combinar os dois modelos anteriores em uma única equação, originando os chamados Modelos Autorregressivos com Defasagens Distribuídas (do inglês, ADL - Autoregressive Distributed Lag).↩︎

  3. Aqui, como explicado no texto, vericamos se a série se comporta como um passeio aleatório sem drift e tendência, ou seja, \(p_t= p_{t-1} + a_t\). Relembrando, a equação do teste DF é \(p_t=\phi p_{t-1} + a_t\) e testamos se \(H_0:\phi = 1\) (não estacionária) ou \(H_1: \left|\phi\right|<1\) (estacionária). Outra forma de especificar a equação do teste é fazer \(p_t-p_{t-1}=\phi p_{t-1} - p_{t-1} + a_t \rightarrow \Delta p_t = (\phi -1)p_{t-1}+a_t\) o que permite reescrever o teste como \(\Delta p_t = \pi p_{t-1} + a_t\) e testar se \(\pi = 0\) (não estacionária, pois implica em \(\phi=1\)) e \(\pi<0\) (estacionária, pois implica em \(\phi<1\)). Observe que esta última formulação é a usada no nosso teste, sendo que a diferença é que usamos mais defasagens da variável a ser testada na equação do teste (por isso, chamamos de DF aumentado).↩︎

  4. Para melhor entendimento, vamos considerar a derivação a partir do modelo VAR(1) com \(k\) variáveis, \(Y_{t} = A_1Y_{t-1}+\epsilon_t\). O VAR reparametrizado é dado por \(\Delta Y_t = \Pi Y_{t-1}+\epsilon_t\) em qye \(\Pi = -(I - A_1)\). Esta forma é obtida somando e subtraindo do lado direito da equação o vetor de variáveis defasadas \(Y_{t-1}\), isto é, \(Y_{t-1}= A_1Y_{t-1} + \epsilon_t + Y_{t-1} - Y_{t-1} \Rightarrow \Delta Y_t = (A_1 - I)Y_{t-1} + \epsilon_t \Rightarrow \Delta Y_t = -(I-A_1)Y_{t-1} + \epsilon_t \Rightarrow \Delta Y_t = \Pi Y_{t-1} + \epsilon_t\) em que \(\Pi = -(I-A_1)\) que é o VAR reparametrizado do VAR(1).↩︎

  5. Seja uma matriz A de ordem \(m \times n\). Define-se como posto da matriz A, \(Posto(A)\), como sendo a mais alta ordem de determinante diferente de zero que pode ser calculado a partir das submatrizes de A. Através do posto da matiz podemos identificar se uma matriz quadrada é singular (determinante igual a zero) ou não singular (determinante diferente de zero), isto é, se A é uma matriz quadrada de ordem \(k\), então: i) A é singular, se e somente se, \(Posto(A)<k\), ii) A não é singular, se e somente se, \(Posto(A)=k\). Se uma matriz tem posto nulo, ou seja, \(Posto(A)=0\) dizemos que A é uma matriz nula (de zeros).↩︎

LS0tCnRpdGxlOiA8Y2VudGVyPiA8aDI+IDxiPiBDb2ludGVncmHDp8OjbyBlIFZldG9yIGRlIENvcnJlw6fDo28gZGUgRXJyb3MgKFZFQykgPC9iPiA8L2gyPgogIDwvY2VudGVyPgphdXRob3I6ICI8Y2VudGVyPiBGcmFuayBNYWdhbGjDo2VzIGRlIFBpbmhvIC0gSUJNRUMvTUcgPC9jZW50ZXI+IgpncmFwaGljczogeWVzCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgdGhlbWU6IGNlcnVsZWFuCiAgICBmaWdfY2FwdGlvbjogeWVzCiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9kb2N1bWVudDoKICAgIGRmX3ByaW50OiBwYWdlZApsaW5rY29sb3I6IGJsdWUKcmVmZXJlbmNlczoKLSBpZDogdHNheTIwMTRpbnRyb2R1Y3Rpb24KICB0aXRsZTogQW4gaW50cm9kdWN0aW9uIHRvIGFuYWx5c2lzIG9mIGZpbmFuY2lhbCBkYXRhIHdpdGggUgogIGF1dGhvcjoKICAtIGZhbWlseTogVHNheQogICAgZ2l2ZW46IFJ1ZXkgUwogIHB1Ymxpc2hlcjogSm9obiBXaWxleSBcJiBTb25zCiAgdHlwZTogYm9vawogIGlzc3VlZDoKICAgIHllYXI6IDIwMTQKLSBpZDogdHNheTIwMTBhbmFseXNpcwogIHRpdGxlOiBBbmFseXNpcyBvZiBmaW5hbmNpYWwgdGltZSBzZXJpZXMKICBhdXRob3I6CiAgLSBmYW1pbHk6IFRzYXkKICAgIGdpdmVuOiBSdWV5IFMKICBwdWJsaXNoZXI6IEpvaG4gV2lsZXkgXCYgU29ucwogIHR5cGU6IGJvb2sKICBpc3N1ZWQ6CiAgICB5ZWFyOiAyMDEwCi0gaWQ6IHRzYXkyMDEzbXVsdGl2YXJpYXRlCiAgdGl0bGU6IE11bHRpdmFyaWF0ZSB0aW1lIHNlcmllcyBhbmFseXNpcyB3aXRoIFIgYW5kIGZpbmFuY2lhbCBhcHBsaWNhdGlvbgogIGF1dGhvcjoKICAtIGZhbWlseTogVHNheQogICAgZ2l2ZW46IFJ1ZXkgUwogIHB1Ymxpc2hlcjogSm9obiBXaWxleSBcJiBTb25zCiAgdHlwZTogYm9vawogIGlzc3VlZDoKICAgIHllYXI6IDIwMTMKLSBpZDogdGlhbzE5ODFtb2RlbGluZwogIHRpdGxlOiBNb2RlbGluZyBtdWx0aXBsZSB0aW1lIHNlcmllcyB3aXRoIGFwcGxpY2F0aW9ucwogIGF1dGhvcjoKICAtIGZhbWlseTogVGlhbwogICAgZ2l2ZW46IEdlb3JnZSBDCiAgLSBmYW1pbHk6IEJveAogICAgZ2l2ZW46IEdlb3JnZSBFUAogIHB1Ymxpc2hlcjogSm91cm5hbCBvZiB0aGUgQW1lcmljYW4gU3RhdGlzdGljYWwgQXNzb2NpYXRpb24KICB0eXBlOiBhcnRpY2xlLWpvdXJuYWwKICB2b2x1bWU6IDc2CiAgcGFnZTogODAyLTgxNgogIGlzc3VlZDoKICAgIHllYXI6IDE5ODEKLSBpZDogZ3JhbmdlcjE5NjlpbnZlc3RpZ2F0aW5nCiAgdGl0bGU6IEludmVzdGlnYXRpbmcgY2F1c2FsIHJlbGF0aW9ucyBieSBlY29ub21ldHJpYyBtb2RlbHMgYW5kIGNyb3NzLXNwZWN0cmFsIG1ldGhvZHMKICBhdXRob3I6CiAgLSBmYW1pbHk6IEdyYW5nZXIKICAgIGdpdmVuOiBDbGl2ZSBXSgogIHB1Ymxpc2hlcjogRWNvbm9tZXRyaWNhIEpvdXJuYWwgb2YgdGhlIEVjb25vbWV0cmljIFNvY2lldHkKICB0eXBlOiBhcnRpY2xlLWpvdXJuYWwKICBwYWdlOiA0MjQtNDM4CiAgaXNzdWVkOgogICAgeWVhcjogMTk2OQotIGlkOiBzaW1zMTk4MG1hY3JvZWNvbm9taWNzCiAgdGl0bGU6IE1hY3JvZWNvbm9taWNzIGFuZCByZWFsaXR5CiAgYXV0aG9yOgogIC0gZmFtaWx5OiBTaW1zCiAgICBnaXZlbjogQ2hyaXN0b3BoZXIgQQogIHB1Ymxpc2hlcjogRWNvbm9tZXRyaWNhIEpvdXJuYWwgb2YgdGhlIEVjb25vbWV0cmljIFNvY2lldHkKICB0eXBlOiBhcnRpY2xlLWpvdXJuYWwKICBwYWdlOiAxLTQ4CiAgaXNzdWVkOgogICAgeWVhcjogMTk4MAotIGlkOiBsdXRrZXBvaGwyMDA1bmV3CiAgdGl0bGU6IE5ldyBpbnRyb2R1Y3Rpb24gdG8gbXVsdGlwbGUgdGltZSBzZXJpZXMgYW5hbHlzaXMKICBhdXRob3I6CiAgLSBmYW1pbHk6IEx1dGtlcG9obAogICAgZ2l2ZW46IEhlbG11dAogIHB1Ymxpc2hlcjogU3ByaW5nZXIgU2NpZW5jZSAmIEJ1c2luZXNzIE1lZGlhCiAgdHlwZTogYm9vawogIGlzc3VlZDoKICAgIHllYXI6IDIwMDUKLSBpZDogcGhpbGxpcHMxOTg2bXVsdGlwbGUKICB0aXRsZTogTXVsdGlwbGUgdGltZSBzZXJpZXMgcmVncmVzc2lvbiB3aXRoIGludGVncmF0ZWQgcHJvY2Vzc2VzCiAgYXV0aG9yOgogIC0gZmFtaWx5OiBQaGlsbGlwcwogICAgZ2l2ZW46IFBldGVyIENCCiAgLSBmYW1pbHk6IER1cmxhdWYKICAgIGdpdmVuOiBTdGV2ZW4gTgogIHB1Ymxpc2hlcjogVGhlIFJldmlldyBvZiBFY29ub21pYyBTdHVkaWVzCiAgdHlwZTogYXJ0aWNsZS1qb3VybmFsCiAgdm9sdW1lOiA1MwogIHBhZ2U6IDQ3My00OTUKICBpc3N1ZWQ6CiAgICB5ZWFyOiAxOTg2Cm5vY2l0ZTogfAogIEB0c2F5MjAxNGludHJvZHVjdGlvbiwgQHRzYXkyMDEwYW5hbHlzaXMsIEB0c2F5MjAxM211bHRpdmFyaWF0ZSwgQHRpYW8xOTgxbW9kZWxpbmcsIEBncmFuZ2VyMTk2OWludmVzdGlnYXRpbmcsIEBzaW1zMTk4MG1hY3JvZWNvbm9taWNzLCBAbHV0a2Vwb2hsMjAwNW5ldywgQHBoaWxsaXBzMTk4Nm11bHRpcGxlCi0tLQoKRXN0ZSBtYXRlcmlhbCB0ZW0gY29tbyBvYmpldGl2byBpbnRyb2R1emlyIG9zIGNvbmNlaXRvcyBzb2JyZSAqKkNvaW50ZWdyYcOnw6NvIGUgVmV0b3IgZGUgQ29ycmXDp8OjbyBkZSBFcnJvcyAoVkVDKSoqLiBWYW1vcyBlbnRlbmRlciBjb21vIGF2YWxpYXIgc2UgdW1hIHPDqXJpZSB0ZW1wb3JhbCBtdWx0aXZhcmlhZGEgw6kgY29pbnRlZ3JhZGEgZSBjb21vIHVzYXIgbyBtb2RlbG8gVkVDLgoKIyMjIyMgKipJTlRST0RVw4fDg08qKgoKVW0gZG9zIG9iamV0aXZvcyBkYSBFY29ub21ldHJpYSDDqSBhdmFsaWFyIGVtcGlyaWNhbWVudGUgdGVvcmlhcyBlY29uw7RtaWNhcyBxdWUsIGVtIGdlcmFsLCBwcmVzc3Vww7VlbSByZWxhw6fDtWVzIGRlIGVxdWlsw61icmlvIGRlIGxvbmdvIHByYXpvIGVudHJlIHZhcmnDoXZlaXMuIEVzdGEgYXZlcmlndWHDp8OjbyBwb2RlIHNlciBmZWl0YSBjb20gYmFzZSBlbSBtb2RlbGFnZW0gZGUgc8OpcmllcyB0ZW1wb3JhaXMgcXVlLCB2aWEgZGUgcmVncmEsIGFwcmVzZW50YW0gYWxndW0gdGlwbyBkZSB0ZW5kw6puY2lhLiAKCk5lc3RlIHNlbnRpZG8sIGZhemVyIHVzbyBkZSBtb2RlbG9zIGRlIHJlZ3Jlc3PDo28gcXVlIGVudm9sdmVtIGRhZG9zIGRlIHPDqXJpZXMgdGVtcG9yYWlzIGFwcmVzZW50YW5kbyB0ZW5kw6puY2lhIHBvZGUgZ2VyYXIgcmVzdWx0YWRvcyBpbmNvbnNpc3RlbnRlcy4gSXNzbyBhY29udGVjZSBwb3JxdWUgYXMgdMOpY25pY2FzIHRyYWRpY2lvbmFpcyBkZSByZWdyZXNzw6NvLCB0YWwgY29tbyAqKk3DrW5pbW9zIFF1YWRyYWRvcyBPcmRpbsOhcmlvcyAoTVFPKSoqLCBwcmVjaXNhbSBxdWUgYXMgdmFyacOhdmVpcyBzZWphbSBlc3RhY2lvbsOhcmlhcywgb3Ugc2VqYSwgcXVlIGEgbcOpZGlhIGNvbmRpY2lvbmFsIGUgYSB2YXJpw6JuY2lhIGNvbmRpY2lvbmFsIG7Do28gb3NjaWxlbSBjb20gbyB0ZW1wby4gCgpDb21vIGFsdGVybmF0aXZhLCBzdXJnZSBvICoqTW9kZWxvIGRlIENvcnJlw6fDo28gZGUgRXJyb3MgKE1DRSkqKiBxdWUgdXRpbGl6YSBhIGFuw6FsaXNlIGRlIGNvaW50ZWdyYcOnw6NvIHBhcmEgYSBlc3RpbWHDp8OjbyBkZSBtb2RlbG9zIHF1YW5kbyBhcyB2YXJpw6F2ZWlzIG7Do28gYXByZXNlbnRhbSBlc3RhY2lvbmFyaWVkYWRlLiBBIGlkw6lpYSBpbnR1aXRpdmEgZGUgKipjb2ludGVncmHDp8OjbyoqIMOpIHF1ZSB2YXJpw6F2ZWlzIG7Do28gZXN0YWNpb27DoXJpYXMgcG9kZW0gY2FtaW5oYXIganVudGFzLCBpc3RvIMOpLCBwb2RlbSB0ZXIgdHJhamV0w7NyaWFzIHRlbXBvcmFpcyBpbnRlcmxpZ2FkYXMsIGRlIGZvcm1hIHF1ZSBubyBsb25nbyBwcmF6byBhcHJlc2VudGVtIHJlbGHDp8OjbyBkZSBlcXVpbMOtYnJpby4gCgpQYXJhIG8gY2FzbyBtdWx0aXZhcmlhZG8sIGVzdHVkYW1vcyBjb21vIG8gKipNb2RlbG8gVmV0b3JpYWwgQXV0b3JyZWdyZXNzaXZvIChWQVIpKiosIG9wY2lvbmFsbWVudGUgZXN0aW1hZG8gcG9yIE1RTywgcG9kZSBzZXIgdXNhZG8gcGFyYSBtb2RlbGFnZW0gZGUgc8OpcmllcyB0ZW1wb3JhaXMgbXVsdGl2YXJpYWRhcy4gUG9yw6ltLCB0ZW1vcyBhIHBvc3NpYmlsaWRhZGUgZG9zIGNvbXBvbmVudGVzIGRhIHPDqXJpZSB0ZW1wb3JhbCBtdWx0aXZhcmlhZGEgc2VyZW0gY29pbnRlZ3JhZG9zIGUgbmVzdGUgY2FzbyBvIFZBUiBuw6NvIGRldmVyaWEgc2VyIHVzYWRvIGUgc2ltIG8gKipNb2RlbG8gVmV0b3JpYWwgZGUgQ29ycmXDp8OjbyBkZSBFcnJvcyAoVkVDKSoqIHF1ZSDDqSBhIHZlcnPDo28gdmV0b3JpYWwgZG8gTUNFLiAKClJlc3VtaWRhbWVudGUsIG5vIGRlY29ycmVyIGRlc3RlIGRvY3VtZW50byBlbnRlbmRlcmVtb3MgbyBxdWUgw6kgKipjb2ludGVncmHDp8OjbyoqLCBzdWEgcmVsYcOnw6NvIGNvbSAqKmVzdGFjaW9uYXJpZWRhZGUqKiBlIGNvbW8gZXN0ZXMgY29uY2VpdG9zIGNvbmR1emlyw6NvIGEgYW7DoWxpc2UgZGUgdW1hIHPDqXJpZSB0ZW1wb3JhbCBtdWx0aXZhcmlhZGEgZGEgc2VndWludGUgbWFuZWlyYToKCiogU2UgKip0b2RvcyBvcyBjb21wb25lbnRlcyBkYSBzw6lyaWUgc8OjbyBlc3RhY2lvbsOhcmlvcyoqLCBvIG1vZGVsbyBWQVIgZW0gbsOtdmVsIHNlIGFwbGljYSBzZW0gcHJvYmxlbWFzOwoqIFNlICoqdGVtb3MgY29tcG9uZW50ZXMgbsOjbyBlc3RhY2lvbsOhcmlvcyoqLCBjb250YW1vcyBjb20gZHVhcyBhbHRlcm5hdGl2YXM6CiAgICAqIFNlIGVsZXMgKipzw6NvIG7Do28gZXN0YWNpb27DoXJpb3MgZSBuw6NvIGNvaW50ZWdyYWRvcyoqLCBkZXZlLXNlIGFqdXN0YXIgbyBWQVIgZW0gcHJpbWVpcmFzIGRpZmVyZW7Dp2FzCiAgICAqIFNlIGVsZXMgKipzw6NvIG7Do28gZXN0YWNpb27DoXJpb3MsIG1hcyBjb2ludGVncmFkb3MqKiwgZGV2ZS1zZSBhanVzdGFyIG8gVmV0b3IgZGUgQ29ycmXDp8OjbyBkZSBFcnJvcyAoVkVDKQoKCiMjIyMjICoqQ09JTlRFR1JBw4fDg08gRSBSRUdSRVNTw4NPIEVTUMOaUklBKioKCkNvbW8gc2FiZW1vcywgbXVpdGFzIHPDqXJpZXMgdGVtcG9yYWlzIGVjb27DtG1pY2FzIHPDo28gKiplc3RhY2lvbsOhcmlhcyBlbSBwcmltZWlyYSBkaWZlcmVuw6dhKiouIFByb2Nlc3NvcyBlc3RhY2lvbsOhcmlvcyBlbSBwcmltZWlyYSBkaWZlcmVuw6dhIHPDo28gdGFtYsOpbSBjb25oZWNpZG9zIGNvbW8gKipwcm9jZXNzb3MgaW50ZWdyYWRvcyBkZSBvcmRlbSAxKiogb3UgcHJvY2Vzc29zICRJKDEpJC4gRW0gZ2VyYWwsIHVtIHByb2Nlc3NvIGN1amEgJGQkLcOpc2ltYSBkaWZlcmVuw6dhIMOpIGVzdGFjaW9uw6FyaWEgw6kgdW0gcHJvY2Vzc28gaW50ZWdyYWRvIGRlIG9yZGVtICRkJCwgb3UgJEkoZCkkLgoKVW0gZXhlbXBsbyBjbMOhc3NpY28gZGUgcHJvY2Vzc28gZXN0YWNpb27DoXJpbyBlbSBwcmltZWlyYSBkaWZlcmVuw6dhIMOpIG8gKipwYXNzZWlvIGFsZWF0w7NyaW8qKi4gRWxlIMOpIHVtYSB2YXJpw6F2ZWwgcXVhbHF1ZXIgKGFxdWksICRwX3QkKSBxdWUgcG9kZSBzZXIgZXNjcml0YSBjb21vOgoKJCQKcF90PXBfe3QtMX0rYV97dH0KJCQKb25kZSAkYV90JCDDqSBpbmRlcGVuZGVudGVtZW50ZSBlIGlkZW50aWNhbWVudGUgZGlzdHJpYnXDrWRvIChpaWQpIGNvbSBtw6lkaWEgemVybyBlIHZhcmnDom5jaWEgY29uc3RhbnRlLiBFbWJvcmEgJEVcbGVmdFtwX3RccmlnaHRdPTAkW14xXSBwYXJhIHRvZG8gJHQkLCBzdWEgdmFyacOibmNpYSAkVmFyKHBfdCk9VFxzaWdtYV57Mn0kIG7Do28gw6kgaW52YXJpYW50ZSBubyB0ZW1wby4gQXNzaW0sICRwX3QkIG7Do28gw6kgZXN0YWNpb27DoXJpbyBlIGVtIGZ1bsOnw6NvIGRlICRcRGVsdGEgcF90PXBfdCAtIHBfe3QtMX0gPSBhX3QkIGUgJGFfdCQsIHBvciBkZWZpbmnDp8Ojbywgc2VyIGVzdGFjaW9uw6FyaW8sIGEgcHJpbWVpcmEgZGlmZXJlbsOnYSBkZSAkcF90JCBzZXLDoSBlc3RhY2lvbsOhcmlhLgoKW14xXTogU3Vwb25kbyAkcF8wPTAkLCB0ZW1vcyBxdWUgJHBfMT1hXzEkLCAkcF8yPXBfMSthXzI9YV8xK2FfMiQgZSAkcF90PWFfMSthXzIrLi4uK2FfdCQgZSBhc3NpbSwgJEVcbGVmdFtwX3QgXHJpZ2h0XT1FXGxlZnRbYV8xIFxyaWdodF0rLi4uK0VcbGVmdFthX3QgXHJpZ2h0XT0wJCBlICRWYXIocF90KT1WYXIoYV8xKSsuLi4rVmFyKGFfdCk9dFxzaWdtYV57Mn1fe2F9JAoKQWdvcmEsIHN1cG9uaGEgcXVlIHF1ZXJlbW9zIGVzdGltYXIgbyBzZWd1aW50ZSBtb2RlbG8gZGUgcmVncmVzc8OjbyBsaW5lYXIgc2ltcGxlczoKCiQkCnlfdCA9IFxhbHBoYSArIFxiZXRhIHhfdCArIGFfdAokJApvbmRlICRFW2FfdF09MCQsICRWYXIoYV90KT1cc2lnbWFeezJ9JCBlICRFXGxlZnRbYV90LCBhX3t0LWx9XHJpZ2h0XT0wJCBwYXJhIHRvZG8gJGwgPjAkLiBTZSAkeV90JCBlICR4X3QkIHPDo28gb3JpZ2luYWRhcyBwb3IgcGFzc2Vpb3MgYWxlYXTDs3Jpb3MgaW5kZXBlbmRlbnRlcyAocXVlIHBvciBkZWZpbmnDp8OjbyBuw6NvIHPDo28gZXN0YWNpb27DoXJpb3MpLCBuw6NvIGV4aXN0ZSByZWxhw6fDo28gZW50cmUgJHlfdCQgZSAkeF90JCBlIG9zIHBhcsOibWV0cm9zIGVzdGltYWRvcyBwb3IgTVFPIHBhcmEgbyBtb2RlbG8gZGUgcmVncmVzc8OjbyBsaW5lYXIgc2ltcGxlcyBwcm9kdXppcsOhIHVtYSBlc3RpbWF0aXZhIHBhcmEgJFxiZXRhJCBpbmNvbnNpdGVudGUuIEVzdGUgY2FzbyDDqSBjb25oZWNpZG8gbmEgbGl0ZXJhdHVyYSBjb21vICoqcmVncmVzc8OjbyBlc3DDunJpYSoqLgoKVW1hIGFsdGVybmF0aXZhIHBhcmEgbyAqKnByb2JsZW1hIGRlIHJlZ3Jlc3PDo28gZXNww7pyaWEqKiBzZXJpYSBlc3RpbWFyIG8gc2VndWludGUgbW9kZWxvOgoKJCQKXGJlZ2lue2FsaWduZWR9CiYmJiB5X3QgLSB5X3t0LTF9ID0gXGFscGhhIC0gXGFscGhhICsgXGJldGEgeF90IC0gXGJldGEgeF97dC0xfSArIGFfdCAtIGFfe3QtMX1cXApcXCAKJiYmIFxEZWx0YSB5X3QgPSBcYmV0YSBcRGVsdGEgeF90ICsgXHZhcmVwc2lsb25fdCBcXApcZW5ke2FsaWduZWR9CiQkCmRhZG8gcXVlICRcRGVsdGEgeV90JCBlICRcRGVsdGEgeF90JCBzZXLDo28gZXN0YWNpb27DoXJpb3MuIFBvcsOpbSwgaXNzbyBwb2RlIGVzY29uZGVyIGFzIHByb3ByaWVkYWRlcyBkZSBsb25nbyBwcmF6byBkYSByZWxhw6fDo28gZW50cmUgYXMgZHVhcyB2YXJpw6F2ZWlzLiAKCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcud2lkdGg9OSwgZmlnLmhlaWdodD01fQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjICAgICBQQUNPVEVTICAgICAjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBDYXJyZWdhciBubyBhbWJpZW50ZSBvcyBwYWNvdGVzIG5lY2Vzc8OhcmlvcyBwYXJhIHJlcGxpY2FyIG9zIGPDs2RpZ29zIGFiYWl4bwpzdXBwcmVzc01lc3NhZ2VzKHJlcXVpcmUocXVhbnRtb2QpKQpzdXBwcmVzc01lc3NhZ2VzKHJlcXVpcmUoUXVhbmRsKSkKc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKGZvcmVjYXN0KSkKc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKGRwbHlyKSkKc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKG1hZ3JpdHRyKSkKc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKGhpZ2hjaGFydGVyKSkKc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKGR5Z3JhcGhzKSkKc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKGdncGxvdDIpKQpzdXBwcmVzc01lc3NhZ2VzKHJlcXVpcmUoTVRTKSkKc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKHZhcnMpKQpzdXBwcmVzc01lc3NhZ2VzKHJlcXVpcmUodXJjYSkpCnN1cHByZXNzTWVzc2FnZXMocmVxdWlyZShmVW5pdFJvb3RzKSkKc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKHN0YXJnYXplcikpCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjICAgICAgIERBRE9TICAgICAjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBTZW1lbnRlIHBhcmEgZmF6ZXIgbyBleGVtcGxvIHByb2R1emlyIG9zIG1lc21vcyByZXN1bHRhZG9zIAojIGVtIGNvbXB1dGFkb3JlcyBkaWZlcmVudGVzCnNldC5zZWVkKDEyMykKCiMgUmVwZXRpciB6ZXJvIDEwMDAgdmV6ZXMgcGFyYSBhcm1hemVuYXIgZGFkb3Mgc2ltdWxhZG9zIGRlCiMgeSBlIHgKeSA8LSByZXAoMCwgMTAwMCkKeCA8LSByZXAoMCwgMTAwMCkKCiMgQ3JpYXIgbyBwYXNzZWlvIGFsZWF0w7NyaW8gKFl0ID0gWXQtMSArIEVSUk90KSBvbmRlIG8gZXJybyAKIyDDqSB1bSBydcOtZG8gYnJhbmNvLCBjb25mb3JtZSBlc3R1ZGFkbyBlbSBzYWxhLiBMZW1icmUtc2UKIyBxdWUgbmEgZGVmaW5pw6fDo28gZW0gc2FsYSB0ZW1vcyBxdWUgc3Vwb3IgYSBleGlzdMOqbmNpYSBkZQojIHVtIHZhbG9yIGluaWNpYWwgcGFyYSBvIHBhc3NlaW8gYWxlYXTDs3JpbyBlIGEgcGFydGlyIGRlc3RlCiMgdmFsb3IgaW5pY2lhLXNlIGEgZ2VyYcOnw6NvIGRvcyBkYWRvcyAoYXF1aSwgYXNzdW1pbW9zIHF1ZQojIGVzdGUgdmFsb3Igw6kgMCwgb2JzZXJ2ZSBxdWUgYSBpdGVyYcOnw6NvIGRvIGZvciBpbmljaWEgZW0gMikuCiMgQSBmdW7Dp8OjbyBybm9ybSBnZXJhcsOhIGFsZWF0w7NyaWFtZW50ZSB1bSB2YWxvciBwYXJhIHVtYSBOb3JtYWwKIyBjb20gbcOpZGlhIDAgZSB2YXJpw6JuY2lhIDEuCmZvciAoaSBpbiAyOjEwMDApIHsKICB5W2ldIDwtIHlbaS0xXSArIHJub3JtKDEpCn0KCiMgQ3JpYXIgbyBwYXNzZWlvIGFsZWF0w7NyaW8gKFh0ID0gWHQtMSArRVJST3QpLCBhc3NpbSBjb21vIAojIGZpemVtb3MgcGFyYSB5CmZvciAoaSBpbiAyOjEwMDApIHsKICB4W2ldIDwtIHhbaS0xXSArIHJub3JtKDEpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMgICAgR1LDgUZJQ09TICAgICAjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBTYWx2YXIgb3MgZGFkb3MgZW0gdW1hIHPDqXJpZSB0ZW1wb3JhbCBtdWx0aXZhZGEgdXNhbmRvCiMgYSBmdW7Dp8OjbyBjYmluZCAoanVudGFyIHPDqXJpZXMgZW0gY29sdW5hcykKcGFzc2Vpb3MgPC0gY2JpbmQoeSA9IGFzLnRzKHkpLCB4ID0gYXMudHMoeCkpCgojIEdyw6FmaWNvIGRhcyBkdWFzIHPDqXJpZXMgdGVtcG9yYWlzIHVzYW5kbyBvIHBhY290ZSBkeWdyYXBocwpkeWdyYXBoczo6ZHlncmFwaChwYXNzZWlvcywgbWFpbiA9ICJQYXNzZWlvcyBBbGVhdMOzcmlvcyBTaW11bGFkb3MiKQpgYGAKClBlbG8gZ3LDoWZpY28gcG9kZW1vcyBvYnNlcnZhciBxdWUgaMOhIHVtYSBhcGFyZWNlbnRlIHJlbGHDp8OjbyBlbnRyZSBhcyBkdWFzIHZhcmnDoXZlaXMuIFNlbSBmYXplciBxdWFscXVlciB0aXBvIGRlIHRlc3RlIHBhcmEgYXZhbGlhciBhIGVzdGFjaW9uYXJpZWRhZGUgZGVsYXMsIHVtYSBwZXNzb2EgcG9kZXJpYSBlc3RpbWFyIHVtIG1vZGVsbyBkZSByZWdyZXNzw6NvIGxpbmVhciBzaW1wbGVzIGUgZmF6ZXIgaW5mZXLDqm5jaWEgY29tIG9zIHJlc3VsdGFkb3Mgb3UgYXTDqSBtZXNtbyBwcmV2aXPDtWVzIHBhcmEgJHkkLiBDb21vIGrDoSBzYWJlbW9zIHF1ZSBhbWJhcyBhcyB2YXJpw6F2ZWlzIGZvcmFtIGdlcmFkYXMgcG9yIHVtIHBhc3NlaW8gYWxlYXTDs3JpbyBlIHF1ZSBlc3RlLCBwb3IgZGVmaW5pw6fDo28sIG7Do28gw6kgZXN0YWNpb27DoXJpbywgZW50ZW5kZW1vcyBxdWUgb3MgcmVzdWx0YWRvcyBuw6NvIHTDqm0gcXVhbHF1ZXIgdXRpbGlkYWRlLiBBYmFpeG8sIHJlc3VsdGFkbyBkZXN0YSByZWdyZXNzw6NvLgoKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMgICAgUkVHUkVTU8ODTyAgICAjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBFc3RpbWHDp8OjbyBkYSBSZWdyZXNzw6NvIExpbmVhciBTaW1wbGVzIHZpYSBPTFMuIEFxdWksIHVzYW1vcwojIGEgZnVuw6fDo28gbG0gZG8gcGFjb3RlIHN0YXRzIHF1ZSB0ZW0gYXMgc2VndWludGVzIG9ww6fDtWVzOgojIC0gZm9ybXVsYTogbW9kZWxvIGEgc2VyIGFqdXN0YXRvICh+IGZheiBvIHBhcGVsIGRlICI9IikKIyAtIGRhdGE6IG8gY29qdW50byBkZSBkYWRvcwojIC0gd2VpZ2h0czogb3MgcGVzb3MgcGFyYSByZWdyZXNzw6NvIHBvbmRlcmFkYQojIC0gc3Vic2V0OiBzdWItY29uanVudG8gZG9zIGRhZG9zCiMgLSBuYS5hY3Rpb246IGVzcGVjaWZpY2FyIG8gcXVlIGZhemVyIG5vIGNhZG8gZGUgTkEgbm9zIGRhZG9zLiBDb21vCiMgcGFkcsOjbyB1c2EgYSBmdW7Dp8OjbyBuYS5vbWl0IHF1ZSBleGNsdWkgZGEgYmFzZSBjYXNvcyBkZSBOQQptb2RlbG8gPC0gbG0oZm9ybXVsYSA9IHl+eCwgZGF0YSA9IHBhc3NlaW9zKQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyAgIFJFU1VMVEFET1MgICAgIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgTW9zdHJhciBtb2RlbG8gZXN0aW1hZG8Kc3RhcmdhemVyKG1vZGVsbywgdHlwZSA9ICJ0ZXh0IiwgdGl0bGUgPSAiUmVzdWx0YWRvIFJlZ3Jlc3PDo28gRXNww7pyaWEiKQpgYGAKCkNvbW8gZXNwZXJhZG8sIG8gcmVzdWx0YWRvIG1vc3RyYSBxdWUgb3MgcGFyw6JtZXRyb3MgZXN0aW1hZG9zIHPDo28gYWx0YW1lbnRlIHNpZ25pZmljYXRpdm9zIGUgaMOhIGF1dG9jb3JyZWxhw6fDo28gbm9zIHJlc8OtZHVvcyBjb21vIGFwcmVzZW50YSBvIGdyw6FmaWNvIGRhIEZ1bsOnw6NvIGRlIEF1dG9jb3JyZWxhw6fDo28gKEZBQykgYWJhaXhvLiBFc3RlIHJlc3VsdGFkbyBpbmRpY2EgKipyZWdyZXNzw6NvIGVzcMO6cmlhKiosIGNhcmFjdGVyaXphZGEgcG9yIHJlbGHDp8OjbyBmb3J0ZSBlbnRyZSBhcyB2YXJpw6F2ZWlzLCBkZXZpZG8gYSB0ZW5kw6puY2lhIGVzdG9jw6FzdGljYSBjb211bSDDoHMgZHVhcyBzw6lyaWVzIChmcnV0byBkbyBwYXNzZWlvIGFsZWF0w7NyaW8gbmVzdGUgY2FzbykgZSBlcnJvIG7Do28gZXN0YWNpb27DoXJpbyAoZ3LDoWZpY28gZG9zIHJlc8OtZHVvcyBkbyBtb2RlbG8gZXN0aW1hZG8pLgoKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy53aWR0aD0xMiwgZmlnLmhlaWdodD01fQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMgRkFDIERPUyBSRVPDjURVT1MgICMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgQ2FsY3VsYXIgYSBGQUMgZG9zIHJlc8OtZHVvcyBkbyBtb2RlbG8KYWNmX3Jlc2lkdW9zIDwtIGFjZihtb2RlbG8kcmVzaWR1YWxzLCBwbG90ID0gRkFMU0UsIG5hLmFjdGlvbiA9IG5hLnBhc3MsIG1heC5sYWcgPSAyNSkKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMgICBSRVNVTFRBRE9TICAgICMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpwYXIobWZyb3cgPSBjKDEsIDIpKQojIEdyw6FmaWNvIGRhIEZBQwpwbG90KGFjZl9yZXNpZHVvcywgbWFpbiA9ICIiLCB5bGFiID0gIiIsIHhsYWIgPSAiRGVmYXNhZ2VtIikKdGl0bGUoIkZ1bsOnw6NvIGRlIEF1dG9jb3JyZWxhw6fDo28gKEZBQykgZG9zIFJlc8OtZHVvcyIsIGFkaiA9IDAuNSwgbGluZSA9IDEpCgojIEdyw6FmaWNvIGRvcyBSZXPDrWR1b3MKcGxvdChtb2RlbG8kcmVzaWR1YWxzLCBtYWluID0gIlJlc8OtZHVvcyBkZSBNUU8iLCB0eXBlID0gImwiLCB5bGFiID0gIiIsIHhsYWIgPSAiIikKYGBgCgojIyMjIyAqKk1PREVMTyBERSBDT1JSRcOHw4NPIERFIEVSUk9TKioKCkBwaGlsbGlwczE5ODZtdWx0aXBsZSBkZW1vbnN0cmFyYW0gcXVlIMOpIHBvc3PDrXZlbCB0cmFiYWxoYXIgY29tIG8gbsOtdmVsIGRhcyBzw6lyaWVzIHNlbSBjb3JyZXIgbyByaXNjbyBkZSByZWdyZXNzw7VlcyBlc3DDunJpYXMgZGVzZGUgcXVlIGFzIHPDqXJpZXMgdXRpbGl6YWRhcyBzZWphbSBjb2ludGVncmFkYXMgZGUgdW1hIHBhcnRpY3VsYXIgb3JkZW0uIAoKUGFyYSBvIG5vc3NvIGV4ZW1wbG8sIHF1YW5kbyAkXGhhdHthfV90ID0geV90IC0gXGhhdHtcYWxwaGF9IC0gXGhhdHtcYmV0YX0geF90JCDDqSAkSSgwKSQsIGRpemVtb3MgcXVlICR5X3QkIGUgJHhfdCQgc8OjbyBjb2ludGVncmFkYXMsIHBvaXMgY2FkYSB2YXJpw6F2ZWwgw6kgJEkoMSkkIG1hcyBhIGNvbWJpbmHDp8OjbyBsaW5lYXIgZGVsYXMsICRcaGF0e2F9X3QkLCDDqSAkSSgwKSQuIENvbW8gY29uc2VxdcOqbmNpYSwgYXNzdW1pbW9zIHF1ZSAkeV90JCBlICR4X3QkIHTDqm0gdHJhamV0w7NyaWFzIHRlbXBvcmFpcyBpbnRlcmxpZ2FkYXMgZGUgZm9ybWEgcXVlIG5vIGxvbmdvIHByYXpvIGFwcmVzZW50ZW0gcmVsYcOnw6NvIGRlIGVxdWlsw61icmlvLiBFbnRyZXRhbnRvLCBubyBjdXJ0byBwcmF6byBow6EgZGVzdmlvcyBkZXNzYSByZWxhw6fDo28gZGUgZXF1aWzDrWJyaW8gZGUgbW9kbyBxdWUgJGFfdCQgw6kgY2hhbWFkbyBkZSAqKmVycm8gZGUgZXF1aWzDrWJyaW8qKiwgcG9ycXVlIGV4cHJlc3NhIG9zICoqZGVzdmlvcyB0ZW1wb3JhaXMgZGUgZXF1aWxpYnJpbyBkZSBsb25nbyBwcmF6byoqLiAKCk8gKipNb2RlbG8gZGUgQ29ycmXDp8OjbyBkZSBFcnJvcyAoTUNFKSoqIGNvcnJpZ2UgZXNzZXMgZGVzZXF1aWzDrWJyaW9zIGUgbm9zIG1vc3RyYSBhIHRheGEgw6AgcXVhbCBvIHNpc3RlbWEgcmV0b3JuYSBhbyBlcXVpbMOtYnJpbyBhcMOzcyBvcyBkZXN2aW9zLiBQYXJhIGVudGVuZGVyIGNvbW8gZWxlIGZheiBpc3NvIHN1cG9uaGEgcXVlIGR1YXMgdmFyacOhdmVpcyAkeSQgZSAkeCQgc8OjbyAkSSgxKSQsIG1hcyBjb2ludGVncmFkYXMgZSBxdWUgcXVlcmVtb3MgZXN0aW1hciBvIHNlZ3VpbnRlIG1vZGVsbzogCgokJAp5X3QgPSBcYmV0YV8wICsgXGJldGFfezF9eV97dC0xfSArIFxiZXRhX3syfXhfdCArIFxiZXRhX3szfXhfe3QtMX0gKyBcdmFyZXBzaWxvbl97dH0KJCQKVGFsIG1vZGVsbyDDqSBjb25oZWNpZG8gY29tbyAqKk1vZGVsbyBBdXRvcnJlZ3Jlc3Npdm8gY29tIERlZmFzYWdlbnMgRGlzdHJpYnXDrWRhcyoqIChkbyBpbmdsw6pzLCBBREwgLSAqQXV0b3JlZ3Jlc3NpdmUgRGlzdHJpYnV0ZWQgTGFnKikuIFJlcGFyZSBxdWUgdGVtb3MgdW1hIGNvbWJpbmHDp8OjbyBlbnRyZSB2YWxvcmVzIGRlZmFzYWRvcyBkYXMgZHVhcyB2YXJpw6F2ZWlzLCBhbMOpbSBkYSBwcsOzcHJpYSB2YXJpw6F2ZWwgJHhfdCRbXjJdLCBlIHF1ZSBlc3RlIG1vZGVsbyDDqSBzZW1lbGhhbnRlIMOgcyBlcXVhw6fDtWVzIGVzdGltYWRhcyBubyBWQVIuCgpbXjJdOiBRdWFuZG8gYSBkaW7Dom1pY2EgZG8gbW9kZWxvIMOpIGRpdGFkYSBwZWxvIGNvbXBvcnRhbWVudG8gZGFzIHZhcmnDoXZlaXMgaW5kZXBlbmRlbnRlcyBkZWZhc2FkYXMgbm9zIHJlZmVyaW1vcyBhICoqbW9kZWxvcyBjb20gZGVmYXNhZ2VucyBkaXN0cmlidcOtZGFzKiosIHNlbmRvIGFzIGRlZmFzYWdlbnMgcmVzcG9uc8OhdmVpcyBwb3IgZXhwbGljYXIgJHlfdCQuIFNlIHNvbWVudGUgb3MgdmFsb3JlcyBwYXNzYWRvcyBkZSAkeV90JCBkZXRlcm1pbmFtIHNldSB2YWxvciBlbSAkdCQsIGEgZGluw6JtaWNhIGRlICR5X3QkIHBvZGUgc2VyIGRlc2NyaXRhIHNlZ3VuZG8gKipNb2RlbG9zIEF1dG9ycmVncmVzc2l2b3MqKiAoQVIpLiDDiSBwb3Nzw612ZWwsIGFpbmRhLCBjb21iaW5hciBvcyBkb2lzIG1vZGVsb3MgYW50ZXJpb3JlcyBlbSB1bWEgw7puaWNhIGVxdWHDp8Ojbywgb3JpZ2luYW5kbyBvcyBjaGFtYWRvcyAqKk1vZGVsb3MgQXV0b3JyZWdyZXNzaXZvcyBjb20gRGVmYXNhZ2VucyBEaXN0cmlidcOtZGFzKiogKGRvIGluZ2zDqnMsIEFETCAtICpBdXRvcmVncmVzc2l2ZSBEaXN0cmlidXRlZCBMYWcqKS4KClBvZGVtb3MgcmVlc2NyZXZlciBvIG1vZGVsbyBjb21vOiAKCiQkClxiZWdpbnthbGlnbmVkfQomIHlfdCAtIHlfe3QtMX0gPSBcYmV0YV8wICsgXGJldGFfMXlfe3QtMX0gLSB5X3t0LTF9ICsgXGJldGFfMnhfdCArIFxiZXRhXzN4X3t0LTF9ICsgXHZhcmVwc2lsb25fdCBcXAomIFxEZWx0YSB5X3QgPSBcYmV0YV8wIC0gKDEtXGJldGFfMSl5X3t0LTF9ICsgXGJldGFfMnhfdCArIFxiZXRhXzN4X3t0LTF9ICsgXHZhcmVwc2lsb25fdCBcXAomIFxEZWx0YSB5X3QgPSBcYmV0YV8wIC0gKDEtXGJldGFfMSl5X3t0LTF9ICsgXGJldGFfMnhfdCArIFxiZXRhXzN4X3t0LTF9ICsgXGJldGFfMnhfe3QtMX0gLSBcYmV0YV8yeF97dC0xfSAgKyBcdmFyZXBzaWxvbl90IFxcCiYgXERlbHRhIHlfdCA9IFxiZXRhXzAgLSAoMS1cYmV0YV8xKXlfe3QtMX0gKyBcYmV0YV8yIFxEZWx0YSB4X3QgKyBcYmV0YV8zeF97dC0xfSArIFxiZXRhXzJ4X3t0LTF9ICsgXHZhcmVwc2lsb25fdCBcXAomIFxEZWx0YSB5X3QgPSBcYmV0YV8wIC0gKDEtXGJldGFfMSl5X3t0LTF9ICsgXGJldGFfMiBcRGVsdGEgeF90ICsgKFxiZXRhXzMgKyBcYmV0YV8yKXhfe3QtMX0gKyBcdmFyZXBzaWxvbl90IFxcCiYgXERlbHRhIHlfdCA9IFxnYW1tYSBcRGVsdGEgeF90IC1cbGFtYmRhKHlfe3QtMX0gLVxhbHBoYSAtIFxiZXRhIHhfe3QtMX0pICsgXHZhcmVwc2lsb25fdCBcXApcZW5ke2FsaWduZWR9CiQkCm9uZGUgJFxnYW1tYSA9IFxiZXRhXzIkLCAkXGxhbWJkYSA9IDEgLVxiZXRhXzEkLCAkXGFscGhhPVxmcmFje1xiZXRhXzB9ezEtXGJldGFfMX0kLCAkXGJldGEgPSBcZnJhY3tcYmV0YV8zK1xiZXRhXzJ9ezEtXGJldGFfMX0kIGUgJHlfe3QtMX0gLVxhbHBoYSAtIFxiZXRhIHhfe3QtMX0gPSBhX3t0LTF9JCBxdWUgw6kgZXN0aW1hZG8gcG9yICR5X3t0fSA9IFxhbHBoYSArIFxiZXRhIHhfe3R9ICsgYV90JC4gT2JzZXJ2ZSBxdWUgbyAqKmNvZWZpY2llbnRlIGRvIGVycm8gZGUgY29ycmXDp8OjbyDDqSBuZWdhdGl2byoqIHBvciBjb25zdHJ1w6fDo28gc2lnbmlmaWNhbmRvIHF1ZSBhIGNvcnJlw6fDo28gZG8gZXJybyDDqSBmZWl0YSBlbSBjYWRhIHBlcsOtb2RvLiBQYXJhIGZhY2lsaXRhciBvIGVudGVuZGltZW50bywgc3Vwb25oYSBxdWUgJHlfdCA9IHZlbmRhX3QkIGUgcXVlICR4X3Q9cHJlY29fdCQuIEFzc2ltLCBvIE1vZGVsbyBkZSBDb3JyZcOnw6NvIGRlIEVycm9zIChNQ0UpIHNlIHRvcm5hOgoKJCQKXGJlZ2lue2FsaWduZWR9CiYgXERlbHRhIHZlbmRhX3QgPSBcZ2FtbWEgXERlbHRhIHByZWNvX3QgLVxsYW1iZGEodmVuZGFfe3QtMX0gLVxhbHBoYSAtIFxiZXRhIHByZWNvX3t0LTF9KSArIFx2YXJlcHNpbG9uX3QgXFwKJiBcRGVsdGEgdmVuZGFfdCA9IFxnYW1tYSBcRGVsdGEgcHJlY29fdCAtXGxhbWJkYShhX3t0LTF9KSArIFx2YXJlcHNpbG9uX3QgXFwKXGVuZHthbGlnbmVkfQokJApxdWUgZGVpeGEgY2xhcm8gcXVlIGEgdmFyaWHDp8OjbyBuYXMgdmVuZGFzIMOpIGV4cGxpY2FkYSBwb3IgZG9pcyBjb21wb25lbnRlczogKip1bSB0ZXJtbyBkZSBjdXJ0byBwcmF6byBlIG91dHJvIGRlIGxvbmdvIHByYXpvKiouIEFzIHZhcmlhw6fDtWVzIG5vcyBwcmXDp29zLCAkXERlbHRhIHByZWNvX3QkLCByZXByZXNlbnRhbSBvIHRlcm1vIGRlIGN1cnRvIHByYXpvIGUgJGFfe3QtMX0kIMOpIG8gY29tcG9uZW50ZSBkZSBsb25nbyBwcmF6bywgcG9pcyBwb2RlIHNlciBlbnRlbmRpZG8gY29tbyBvIHRlcm1vIGRlIGVycm8gZGEgcmVncmVzc8OjbyAkdmVuZGFfe3R9ID0gXGFscGhhICsgXGJldGEgcHJlY29fe3R9ICsgYV90JCBxdWUgbmFkYSBtYWlzIMOpIHF1ZSB1bWEgY29tYmluYcOnw6NvIGxpbmVhciBlc3RhY2lvbsOhcmlhIGVudHJlIGFzIGR1YXMgdmFyacOhdmVpcy4KCiogKipFU1RJTUHDh8ODTyBETyBNT0RFTE8gTUNFKioKCkEgZXN0aW1hw6fDo28gZG8gTW9kZWxvIGRlIENvcnJlw6fDo28gZGUgRXJyb3MgcG9kZSBzZXIgZmVpdGEgZGEgc2VndWludGUgbWFuZWlyYTogCgppKSBFc3RpbWFyIGEgcmVsYcOnw6NvIGVudHJlICR5X3QkIGUgJHhfdCQgcG9yIG1laW8gZGUgJHlfdCA9IFxhbHBoYSArIFxiZXRhIHhfe3R9ICsgYV90JC4KaWkpIE9idGVyICRcaGF0e2F9X3QkIHF1ZSBzw6NvIG9zIHJlc8OtZHVvcyBkZSBjb2ludGVncmHDp8Ojby4KaWlpKSBFc3RpbWFyICRcRGVsdGEgeV90ID0gXGdhbW1hIFxEZWx0YSB4X3QgK1xsYW1iZGFcaGF0e2F9X3t0LTF9KyBcdmFyZXBzaWxvbl90JCBlIG9idGVyIGEgZXN0aW1hdGl2YSBwYXJhIG9zIHRlcm1vcyBkZSBjdXJ0byAoJFxnYW1tYSQpIGUgbG9uZ28gcHJhem8gKCRcbGFtYmRhJCkuCgojIyMjIyAqKlZFVE9SRVMgREUgQ09JTlRFR1JBw4fDg08qKgoKTyB2ZXRvciBkZSBjb2ludGVncmHDp8OjbyDDqSBmb3JtYWRvIHBlbG9zIGNvZWZpY2llbnRlcyBkYSByZWxhw6fDo28gZGUgY29pbnRlZ3Jhw6fDo28gKGVzdGFjaW9uw6FyaWEpIHF1ZSBhc3NlZ3VyYSBvIGVxdWlsw61icmlvIGRlIGxvbmdvIHByYXpvIGVudHJlIGFzIHPDqXJpZXMuIFN1cG9udG8gJFxib2xkc3ltYm9se3J9X3t0fSQgdW1hIHPDqXJpZSB0ZW1wb3JhbCBtdWx0aXZhcmlhZGEsIG9zICRrJCBlbGVtZW50b3MgZG8gdmV0b3IgJFxib2xkc3ltYm9se3J9X3t0fSA9IFxsZWZ0KHJfezF0fSwuLi4scl97a3R9XHJpZ2h0KV57J30kIHPDo28gZGl0b3MgY29pbnRlZ3JhZG9zIGRlIG9yZGVtICQoZCxiKSQgc2U6CgppLiBUb2RvcyBvcyBlbGVtZW50b3MgZGUgJFxib2xkc3ltYm9se3J9X3t0fSQgc8OjbyBpbnRlZ3JhZG9zIGRlIG9yZGVtICRkJCwgb3Ugc2VqYSwgc8OjbyAkSShkKSQ7CmlpLiBFeGlzdGUgdW0gdmV0b3IgbsOjbyBudWxvICRcYm9sZHN5bWJvbHtcYmV0YX0kLCB0YWwgcXVlICRcYm9sZHN5bWJvbHthfV97dH0gPSBcYm9sZHN5bWJvbHtcYmV0YX1eeyd9XGJvbGRzeW1ib2x7cn1fe3R9JCDDqSAkSShkLWIpJCwgJGI+MCQuIEEgZGlmZXJlbsOnYSAkZC1iJCDDqSBhIG9yZGVtIGRlIGludGVncmHDp8OjbyBvYnRpZGEgZGEgYXBsaWNhw6fDo28gZG8gdmV0b3IgJFxib2xkc3ltYm9se1xiZXRhfSQgZW0gJFxib2xkc3ltYm9se3J9X3t0fSQuIFNlIGFzIHZhcmnDoXZlaXMgc8OjbyBjb2ludGVncmFkYXMsIG8gcmVzw61kdW8gJFxib2xkc3ltYm9se2F9X3t0fSQgdGVtIG9yZGVtIGRlIGludGVncmHDp8OjbyBtZW5vciBxdWUgYSBvcmRlbSBkYXMgdmFyacOhdmVpcyBxdWUgbyBvcmlnaW5hcmFtLgoKTyBuw7ptZXJvIGRlIHZldG9yZXMgZGUgY29pbnRlZ3Jhw6fDo28gZGVwZW5kZSBkbyBuw7ptZXJvIGRlIHZhcmnDoXZlaXMgZW52b2x2aWRhcy4gVGVtLXNlOgoKYS4gQ2FzbyBkZSBkdWFzIHZhcmnDoXZlaXM6IFNlICRcYm9sZHN5bWJvbHtyfV97dH0gPSBcbGVmdCh5X3QsIHJfdFxyaWdodCleeyd9JCBjb20gJHlfdCBcc2ltIEkoMSkkLCAkeF90IFxzaW0gSSgxKSQgZSAkYV90ID0geV90IC0gXGJldGEgeF90IFxzaW0gSSgwKSQsIGVudMOjbyBkaXplbW9zIHF1ZSAkeV90JCBlICR4X3QkICRcc2ltIENJKDEsMSkkLCBvdSBzZWphLCBzw6NvIGNvaW50ZWdyYWRhcyBuYSBvcmRlbSAkKDEsMSkkIGNvbSB2ZXRvciBkZSBjb2ludGVncmHDp8OjbyAkXGJvbGRzeW1ib2x7XGJldGF9ID0gXGxlZnQoMSwtXGhhdHtcYmV0YX1ccmlnaHQpXnsnfSQgZSBvIHNpc3RlbWEgw6kgY29pbnRlZ3JhZG8gZGFkbyBxdWUgJFxib2xkc3ltYm9se1xiZXRhfV57J30gXGJvbGRzeW1ib2x7cn1fe3R9IFxzaW0gSSgwKSQuIE5lc3RlIGNhc28sIGV4aXN0ZSBzb21lbnRlICoqdW1hKiogY29tYmluYcOnw6NvIGxpbmVhciBlc3RhY2lvbsOhcmlhIHF1ZSByZXByZXNlbnRhICoqdW1hKiogcmVsYcOnw6NvIGRlIGVxdWlsw61icmlvIGRlIGxvbmdvIHByYXpvIGVudHJlIGFzIHZhcmnDoXZlaXMgcXVlIMOpIHJlcHJlc2VudGFkYSBwb3I6CgokJApcYm9sZHN5bWJvbHthfV97dH0gPSBcYm9sZHN5bWJvbHtcYmV0YX1eeyd9IFxib2xkc3ltYm9se3J9X3t0fSA9IFxiZWdpbntibWF0cml4fSAxICYgLVxoYXR7XGJldGF9IFxlbmR7Ym1hdHJpeH0gXGJlZ2lue2JtYXRyaXh9IHlfdCBcXCB4X3QgIFxlbmR7Ym1hdHJpeH0gPSB5X3QgLVxoYXR7XGJldGF9IHhfdAokJAoKYi4gQ2FzbyBkZSAkayQgdmFyacOhdmVpczogU2UgJFxib2xkc3ltYm9se3J9X3t0fSA9IFxsZWZ0KHlfezF0fSwgeF97MXR9LCB4X3sydH0sIC4uLiwgeF97a3R9XHJpZ2h0KV57J30kIGNvbSAkeV90IFxzaW0gSSgxKSQsICR4X3sxdH0gXHNpbSBJKDEpJCwgJHhfezJ0fSBcc2ltIEkoMSkkLCAkeF97M3R9IFxzaW0gSSgxKSQsIC4uLiwgJHhfe2t0fSBcc2ltIEkoMSkkIGUgJGFfdCA9IHlfdCAtIFxiZXRhXzF4X3sxdH0gLSBcYmV0YV8yeF97MnR9LCAuLi4sIC0gXGJldGFfa3hfe2t0fSBcc2ltIEkoMCkkLCBlbnTDo28gZGl6ZW1vcyBxdWUgJHlfdCQsICR4X3sxdH0kLCAuLi4sICR4X3trdH0kICRcc2ltIENJKDEsMSkkLCBvdSBzZWphLCBzw6NvIGNvaW50ZWdyYWRhcyBuYSBvcmRlbSAkKDEsMSkkIGNvbSB2ZXRvciBkZSBjb2ludGVncmHDp8OjbyAkXGJvbGRzeW1ib2x7XGJldGF9ID0gXGxlZnRbMSwgLVxoYXR7XGJldGF9XzEsIC1caGF0e1xiZXRhfV8yLC4uLiwtXGhhdHtcYmV0YX1fa1xyaWdodF1eeyd9JCBlIG8gc2lzdGVtYSDDqSBjb2ludGVncmFkbyBkYWRvIHF1ZSAkXGJvbGRzeW1ib2x7XGJldGF9XnsnfSBcYm9sZHN5bWJvbHtyfV97dH0gXHNpbSBJKDApJC4gTmVzdGUgY2FzbywgcG9kZSBleGlzdGlyIGF0w6kgJGstMSQgdmV0b3JlcyBkZSBjb2ludGVncmHDp8OjbyBsaW5lYXJtZW50ZSBpbmRlcGVuZGVudGVzLiBPdSBzZWphLCBwb2RlbSBleGlzdGlyIGRlICQxJCBhdMOpICRrLTEkIHZldG9yZXMgZGUgY29pbnRlZ3Jhw6fDo28gcXVlIHJlcHJlc2VudGFtIHJlbGHDp8O1ZXMgZGUgZXF1aWzDrWJyaW8gZGUgbG9uZ28gcHJhem8gZW50cmUgYXMgdmFyacOhdmVpcy4KCiogKipSQU5LIERFIENPSU5URUdSQcOHw4NPKioKCk8gcmFuayBkZSBjb2ludGVncmHDp8OjbyAoJHIkKSDDqSBvIG7Dum1lcm8gZGUgdmV0b3JlcyBkZSBjb2ludGVncmHDp8OjbyBsaW5lYXJtZW50ZSBpbmRlcGVuZGVudGVzLiBQYXJhICRrJCB2YXJpw6F2ZWlzIGRlIG1lc21hIG9yZGVtIGRlIGludGVncmHDp8OjbyBlIGNvaW50ZWdyYWRhcywgdGVtLXNlIHF1ZSAkMVxsZXEgciBcbGVxIGstMSQuIE8gcmFuayBkZSBjb2ludGVncmHDp8OjbyDDqSBvIG7Dum1lcm8gZGUgcmVsYcOnw7VlcyBkZSBjb2ludGVncmHDp8OjbyBpbXBvcnRhbnRlcyBwYXJhIG1hbnRlciBvIGVxdWlsw61icmlvIGRlIGxvbmdvIHByYXpvIGVudHJlIGFzIHZhcmnDoXZlaXMuCgojIyMjIyAqKlRFU1RFUyBERSBDT0lOVEVHUkHDh8ODTyoqCgpQYXJhIHRlc3RhciBhIGV4aXN0w6puY2lhIGRlIGNvaW50ZWdyYcOnw6NvIGVudHJlIHZhcmnDoXZlaXMsIHBvZGVtb3MgdXNhciAqKnRlc3RlcyBkZSB1bWEgZXF1YcOnw6NvKiogcXVlIHNlIGJhc2VpYW0gbm8gYWp1c3RhbWVudG8gZGEgcmVsYcOnw6NvIGVudHJlIGFzIHZhcmnDoXZlaXMgZSAqKnRlc3RlcyBjb20gdsOhcmlhcyBlcXVhw6fDtWVzKiogb25kZSBhanVzdGFtb3MgdW0gbW9kZWxvIFZBUiBjb20gYXMgdmFyacOhdmVpcyBhIHNlcmVtIHRlc3RhZGFzLiBFbSBhbWJvcyBvcyBjYXNvcyBwb2RlbW9zIGNvbnNpZGVyYXIgMiBvdSBtYWlzIHZhcmnDoXZlaXMuIAoKKiAqKlRFU1RFIERFIFVNQSBFUVVBw4fDg08qKgoKUGFyYSBlc3RlIGNhc28sIG8gdGVzdGUgY29tdW1lbnRlIHVzYWRvIMOpIG8gZGUgKipFbmdsZS1HcmFuZ2VyKiogcXVlIGNvbnNpc3RlIGVtIGFqdXN0YXIgdW1hIHJlbGHDp8OjbyBlbnRyZSBhcyB2YXJpw6F2ZWlzIGUgcmVhbGl6YXIgbyB0ZXN0ZSBkZSByYWl6IHVuaXTDoXJpYSBkZSBEaWNrZXktRnVsbGVyIEF1bWVudGFkbyAoQURGKSBub3MgcmVzw61kdW9zIGRhIGVxdWHDp8OjbyBhanVzdGFkYS4gUGFyYSBvIGNhc28gZGUgMiB2YXJpw6F2ZWlzICgkeSQgZSAkeCQsIHBvciBleGVtcGxvKSB0ZW1vcyBvIHNlZ3VpbnRlIHByb2Nlc3NvOgoKMS4gRXhlY3V0YXIgbyB0ZXN0ZSBkZSByYWl6IHVuaXTDoXJpYSBwYXJhICR5JCBlICR4JCBlIGNlcnRpZmljYXIgcXVlIGVsYXMgc8OjbyAkSSgxKSQuIFNlIGVsYXMgZm9yZW0gJEkoMCkkIG7Do28gaMOhIHJhesOjbyBwYXJhIHRlc3RhciBjb2ludGVncmHDp8Ojby4KMi4gRXN0aW1hciBhIHJlbGHDp8OjbyAkeV90ID0gXGFscGhhICsgXGJldGEgeF90ICsgYV90JCBlIG9idGVyICRcaGF0e2F9X3QkCjMuIFRlc3RhciBzZSBvcyByZXPDrWR1b3Mgc8OjbyBlc3RhY2lvbsOhcmlvcywgb3Ugc2VqYSwgc2Ugc8OjbyAkSSgwKSQgdXNhbmRvIG8gdGVzdGUgZGUgRGlja2V5LUZ1bGxlciBBdW1lbnRhZG9bXjNdIChhIGVxdWHDp8OjbyBkbyB0ZXN0ZSBuw6NvIGRldmUgdGVyIGludGVyY2VwdG8gbmVtIHRlbmTDqm5jaWEgcG9ycXVlIG9zIHJlc8OtZHVvcyBkZSBNUU8gb3NjaWxhbSBlbSB0b3JubyBkZSB6ZXJvKSwgY29uZm9ybWUgYWJhaXhvOgoKJCQKXGJlZ2lue2FsaWduZWR9CiYgXERlbHRhIFxoYXR7YX1fdCA9IFxwaGlcaGF0e2F9X3t0LTF9K1xzdW1fe2k9MX1ee3AtMX17XGxhbWJkYV97aX1cRGVsdGEgXGhhdHthfV97dC1pfX0rXHhpX3QgXFwKJiBcXAomIEhfMDogXHBoaT0wflxyaWdodGFycm93IFxoYXR7YX1fdH5cdGV4dHtuw6NvIGVzdGFjaW9uw6FyaW99flxyaWdodGFycm93IHl+XHRleHR7ZX1+eH5cdGV4dHtuw6NvIHPDo28gY29pbnRlZ3JhZGFzfSBcXAomIEhfMTogXHBoaTwwflxyaWdodGFycm93IFxoYXR7YX1fdH5cdGV4dHtlc3RhY2lvbsOhcmlvfX5ccmlnaHRhcnJvdyB5flx0ZXh0e2V9fnh+XHRleHR7c8OjbyBjb2ludGVncmFkYXN9IFxcClxlbmR7YWxpZ25lZH0KJCQKClteM106IEFxdWksIGNvbW8gZXhwbGljYWRvIG5vIHRleHRvLCB2ZXJpY2Ftb3Mgc2UgYSBzw6lyaWUgc2UgY29tcG9ydGEgY29tbyB1bSBwYXNzZWlvIGFsZWF0w7NyaW8gc2VtIGRyaWZ0IGUgdGVuZMOqbmNpYSwgb3Ugc2VqYSwgJHBfdD0gcF97dC0xfSArIGFfdCQuIFJlbGVtYnJhbmRvLCBhIGVxdWHDp8OjbyBkbyB0ZXN0ZSBERiDDqSAkcF90PVxwaGkgcF97dC0xfSArIGFfdCQgZSB0ZXN0YW1vcyBzZSAkSF8wOlxwaGkgPSAxJCAobsOjbyBlc3RhY2lvbsOhcmlhKSBvdSAkSF8xOiBcbGVmdHxccGhpXHJpZ2h0fDwxJCAoZXN0YWNpb27DoXJpYSkuIE91dHJhIGZvcm1hIGRlIGVzcGVjaWZpY2FyIGEgZXF1YcOnw6NvIGRvIHRlc3RlIMOpIGZhemVyICRwX3QtcF97dC0xfT1ccGhpIHBfe3QtMX0gLSBwX3t0LTF9ICsgYV90IFxyaWdodGFycm93ICBcRGVsdGEgcF90ID0gKFxwaGkgLTEpcF97dC0xfSthX3QkIG8gcXVlIHBlcm1pdGUgcmVlc2NyZXZlciBvIHRlc3RlIGNvbW8gJFxEZWx0YSBwX3QgPSBccGkgcF97dC0xfSArIGFfdCQgZSB0ZXN0YXIgc2UgJFxwaSA9IDAkIChuw6NvIGVzdGFjaW9uw6FyaWEsIHBvaXMgaW1wbGljYSBlbSAkXHBoaT0xJCkgZSAkXHBpPDAkIChlc3RhY2lvbsOhcmlhLCBwb2lzIGltcGxpY2EgZW0gJFxwaGk8MSQpLiBPYnNlcnZlIHF1ZSBlc3RhIMO6bHRpbWEgZm9ybXVsYcOnw6NvIMOpIGEgdXNhZGEgbm8gbm9zc28gdGVzdGUsIHNlbmRvIHF1ZSBhIGRpZmVyZW7Dp2Egw6kgcXVlIHVzYW1vcyBtYWlzIGRlZmFzYWdlbnMgZGEgdmFyacOhdmVsIGEgc2VyIHRlc3RhZGEgbmEgZXF1YcOnw6NvIGRvIHRlc3RlIChwb3IgaXNzbywgY2hhbWFtb3MgZGUgREYgYXVtZW50YWRvKS4KCiogKipURVNURSBDT00gVsOBUklBUyBFUVVBw4fDlUVTKioKClN1cG9uaGEgJGskIHZhcmnDoXZlaXMgJEkoMSkkIGUgcXVlIGEgdGVvcmlhIG91IHF1YWxxdWVyIGNvbmhlY2ltZW50byAqYSBwcmlvcmkqLCBzdWdlcmUgdW1hIHJlbGHDp8OjbyBkZSBlcXVpbMOtYnJpbyBkZSBsb25nbyBwcmF6byBlbnRyZSBlbGFzLiBFbSBnZXJhbCwgZXhpc3RlbSAkclxsZXEgay0xJCBjb21iaW5hw6fDtWVzIGxpbmVhcmVzIGluZGVwZW5kZW50ZXMgJEkoMCkkIHF1ZSBzw6NvIGNoYW1hZGFzIHJlbGHDp8O1ZXMgZGUgY29pbnRlZ3Jhw6fDo28gZSBvIHByb2JsZW1hIMOpIGRldGVybWluYXIgbyB2YWxvciBkZSAkciQuIE8gdGVzdGUgbWFpcyB1c2FkbyBwYXJhIGVzdGUgZmltIMOpIG8gKip0ZXN0ZSBkZSBKb2hhbnNlbioqIHF1ZSB0ZW0gY29tbyBiYXNlIG8gbW9kZWxvIFZBUi4gQ29uc2lkZXJlIHVtICRWQVIocCkkIGNvbSAkayQgdmFyacOhdmVpcwoKJCQKWV90ID0gQV8xWV97dC0xfStBXzJZX3t0LTJ9Ky4uLitBX3BZX3t0LXB9K1xlcHNpbG9uX3QKJCQKw4Agc2VtZWxoYW7Dp2EgZG8gdGVzdGUgZGUgRGlja2V5LUZ1bGxlciBBdW1lbnRhZG8gKEFERiksIG8gdGVzdGUgZGUgSm9oYW5zZW4gc2UgYmFzZWlhIGVtIHVtIG1vZGVsbyB0cmFuc2Zvcm1hZG8sIGRlbm9taW5hZG8gZGUgVkFSIHJlcGFyYW1ldHJpemFkbywgcXVlIHBlcm1pdGUgdW0gcHJvY2Vzc28gYXV0b3JyZWdyZXNzaXZvIGRlIG9yZGVtICRwJCBlIG7Do28gc29tZW50ZSBkZSBvcmRlbSAkMSQuIEEgb2J0ZW7Dp8OjbyBkZXN0ZSBtb2RlbG8gc2VndWUgcHJvY2VkaW1lbnRvIHNlbWVsaGFudGUgw6AgZGVyaXZhw6fDo28gZGEgZXF1YcOnw6NvIGRlIHRlc3RlIGRvIERpY2tleS1GdWxsZXIgQXVtZW50YWRvIChBREYpW140XS4gUGFydGluZG8tc2UgZG8gVkFSIGFudGVyaW9yIG9idMOpbS1zZSBvIFZBUiByZXBhcmFtZXRyaXphZG8gcmVwcmVzZW50YWRvIHBvcjogCgpbXjRdOiBQYXJhIG1lbGhvciBlbnRlbmRpbWVudG8sIHZhbW9zIGNvbnNpZGVyYXIgYSBkZXJpdmHDp8OjbyBhIHBhcnRpciBkbyBtb2RlbG8gVkFSKDEpIGNvbSAkayQgdmFyacOhdmVpcywgJFlfe3R9ID0gQV8xWV97dC0xfStcZXBzaWxvbl90JC4gTyBWQVIgcmVwYXJhbWV0cml6YWRvIMOpIGRhZG8gcG9yICRcRGVsdGEgWV90ID0gXFBpIFlfe3QtMX0rXGVwc2lsb25fdCQgZW0gcXllICRcUGkgPSAtKEkgLSBBXzEpJC4gRXN0YSBmb3JtYSDDqSBvYnRpZGEgc29tYW5kbyBlIHN1YnRyYWluZG8gZG8gbGFkbyBkaXJlaXRvIGRhIGVxdWHDp8OjbyBvIHZldG9yIGRlIHZhcmnDoXZlaXMgZGVmYXNhZGFzICRZX3t0LTF9JCwgaXN0byDDqSwgJFlfe3QtMX09IEFfMVlfe3QtMX0gKyBcZXBzaWxvbl90ICsgWV97dC0xfSAtIFlfe3QtMX0gXFJpZ2h0YXJyb3cgIFxEZWx0YSBZX3QgPSAoQV8xIC0gSSlZX3t0LTF9ICsgXGVwc2lsb25fdCBcUmlnaHRhcnJvdyBcRGVsdGEgWV90ID0gLShJLUFfMSlZX3t0LTF9ICsgXGVwc2lsb25fdCBcUmlnaHRhcnJvdyBcRGVsdGEgWV90ID0gXFBpIFlfe3QtMX0gKyBcZXBzaWxvbl90JCBlbSBxdWUgJFxQaSA9IC0oSS1BXzEpJCBxdWUgw6kgbyBWQVIgcmVwYXJhbWV0cml6YWRvIGRvIFZBUigxKS4KCiQkClxiZWdpbnthbGlnbmVkfQomIFxEZWx0YSBZX3QgPSBcUGkgWV97dC0xfSArIFxzdW1fe2k9MX1ee3AtMX17XEdhbW1hX2lcRGVsdGEgWV97dC1pfX0gK1xlcHNpbG9uX3QgXFwKXGVuZHthbGlnbmVkfQokJAplbSBxdWUgJFxHYW1tYV9pID0gLVxzdW1fe2o9aSsxfV57cH17QV9qfSQgZSAkXFBpPVxzdW1fe2k9MX1ee3B9e0FfaS1JfT1cbGVmdChJX2sgLVxzdW1fe2k9MX1ee3B9e0FfaX1ccmlnaHQpJC4gUGVyY2ViYSBhIHNlbWVsaGFuw6dhIGVudHJlIG8gdGVzdGUgZGUgSm9oYW5zZW4gZSBvIHRlc3RlIGRlIHJhaXogdW5pdMOhcmlhIERpY2tleS1GdWxsZXIgQXVtZW50YWRvIChBREYpLiBJbmljaWFsbWVudGUsIG8gdGVybW8gJFxQaSBZX3t0LTF9JCByZXByZXNlbnRhICRrJCBjb21iaW5hw6fDtWVzIGxpbmVhcmVzIGRhcyB2YXJpw6F2ZWlzLCBpc3RvIMOpOgoKJCQKXGJlZ2lue2FsaWduZWR9ClxQaSBZX3t0LTF9ICYgPSBcYmVnaW57Ym1hdHJpeH0KXHBpX3sxMX0gJiBccGlfezEyfSAmIC4uLiAmIFxwaV97MWt9IFxcClxwaV97MjF9ICYgXHBpX3syMn0gJiAuLi4gJiBccGlfezJrfSBcXApcdmRvdHMgICAmIFx2ZG90cyAgICYgICAgICYgXHZkb3RzIFxcClxwaV97azF9ICYgXHBpX3trMn0gJiAuLi4gJiBccGlfe2trfSBcXApcZW5ke2JtYXRyaXh9IApcYmVnaW57Ym1hdHJpeH0gIApZX3sxLHQtMX0gXFwKWV97Mix0LTF9IFxcClx2ZG90cyAgIFxcCllfe2ssdC0xfSBcXCBcZW5ke2JtYXRyaXh9IFxcCiYmJiBcXAomID0gXGxlZnRce1xiZWdpbnttYXRyaXh9ClxwaV97MTF9WV97MSx0LTF9K1xwaV97MTJ9WV97Mix0LTF9KyAuLi4gKyBccGlfezFrfVlfe2ssdC0xfSBcXCAKLi4uIFxcIAouLi4gXFwgClxwaV97azF9WV97MSx0LTF9K1xwaV97azJ9WV97Mix0LTF9KyAuLi4gKyBccGlfe2trfVlfe2ssdC0xfQpcZW5ke21hdHJpeH1ccmlnaHQuClxlbmR7YWxpZ25lZH0KJCQKCnF1ZSBzw6NvICRrJCBjb21iaW5hw6fDtWVzIGxpbmVhcmVzLiBQb3IgZGVmaW5pw6fDo28sIHRvZG9zIG9zIHRlcm1vcyBkYSBlcXVhw6fDo28gc8OjbyBlc3RhY2lvbsOhcmlvcywgZXhjZXRvICRcUGkgWV97dC0xfSQuIFBhcmEgbyBzaXN0ZW1hIHNlciBlc3RhY2lvbsOhcmlvLCAkXFBpIFlfe3QtMX0kIGRldmUgc2VyIGVzdGFjaW9uw6FyaW8gZSBwYXJhIGlzc28gYSBtYXRyaXogJFxQaSQgZGV2ZSBhcHJlc2VudGFyIGVzdHJ1cmFsIHRhbCBxdWUgYXMgY29tYmluYcOnw7VlcyBsaW5lYXJlcyBzZWphbSBlc3RhY2lvbsOhcmlhcy4gUGFyYSBhcyB2YXJpw6F2ZWlzIHNlcmVtIGNvaW50ZWdyYWRhcyBhcyBsaW5oYXMgZGUgJFxQaSQgbsOjbyBwb2RlbSBzZXIgdG9kYXMgbGluZWFybWVudGUgaW5kZXBlbmRlbnRlcy4gQXNzaW0sICRcUGkkIGRldmUgc2VyIHNpbmd1bGFyLCBvdSBzZWphICRkZXQoXFBpKT0wJCBlLCBlbnTDo28sIG8gcG9zdG8gb3UgcmFuayBkZSAkXFBpJCBkZXZlIHNlciBtZW5vciBxdWUgJGskIHBhcmEgcXVlIGFzIHZhcmnDoXZlaXMgc2VqYW0gY29pbnRlZ3JhZGFzLiAKClJlc3VtaW5kbywgdGVtb3MgJDMkIHBvc3NpYmlsaWRhZGVzIHBhcmEgbyB0ZXN0ZSBkZSBKb2hhbnNlbjoKCjEuICRQb3N0byhcUGkpPTAkW141XQogICAgKiBTaWduaWZpY2EgcXVlICRcUGk9MCQgcXVlIMOpIGEgYW5hbG9naWEgYW8gY2FzbyBvbmRlICRccGhpPTAkIG5vIHRlc3RlIEFERiBlIGFzc2ltLCB0ZW1vcyAkayQgcmHDrXplcyB1bml0w6FyaWFzCiAgICAqIE7Do28gaMOhIHJlbGHDp8OjbyBkZSBjb2ludGVncmHDp8OjbyBlbnRyZSBhcyB2YXJpw6F2ZWlzIGUgbsOjbyBleGlzdGUgbWVjYW5pc21vIGRlIGNvcnJlw6fDo28gZGUgZXJybwogICAgKiAqKkRlY2lzw6NvKio6IE8gbW9kZWxvIFZBUiBkZXZlIHNlciBlc3BlY2lmaWNhZG8gZW0gcHJpbWVpcmFzIGRpZmVyZW7Dp2FzCjIuICRQb3N0byhcUGkpPWskCiAgICAqIEFzIGxpbmhhcyBkZSAkXFBpJCBzw6NvIGxpbmVhcm1uZXRlIGluZGVwZW5kZW50ZXMgZSBvICRcbGVmdHxcUGkgXHJpZ2h0fCBcbmVxIDAkIAogICAgKiBFeGlzdGVtICRrJCBjb21iaW5hw6fDtWVzIGVzdGFjaW9uw6FyaWFzIGRhcyB2YXJpw6F2ZWlzLCBtYXMgY29pbnRlZ3Jhw6fDo28gbsOjbyDDqSBwZXJ0aW5lbnRlIGRhZG8gcXVlIGFzIHZhcmnDoXZlaXMgc8OjbyBlc3RhY2lvbsOhcmlhcwogICAgKiAqKkRlY2lzw6NvKio6IE8gbW9kZWxvIFZBUiBkZXZlIHNlciBlc3RpbWFkbyBlbSBuw612ZWwKMy4gJDBcbGVxIFBvc3RvKFxQaSk9ciBcbGVxIGskCiAgICAqIEV4aXN0ZW0gJHIkIGNvbWJpbmHDp8O1ZXMgbGluZWFyZXMgZXN0YWNpb27DoXJpYXMgZSBvICRcbGVmdHwgXFBpIFxyaWdodHwgPSAwJCBjb20gcGVsbyBtZW5vcyB1bWEgbGluaGEgb3UgY29sdW5hIG51bGEKICAgICogU2UgYXMgdmFyacOhdmVpcyBzw6NvICRJKDEpJCwgZXhpc3RlbSAkciQgcmVsYcOnw7VlcyBkZSBjb2ludGVncmHDp8OjbyBxdWUgZm9ybmVjZW0gJHIkIHZldG9yZXMgZGUgY29pbnRlZ3Jhw6fDo28gZSBvIHRlcm1vICRcUGkgWV97dC0xfSQgZm9ybmVjZW0gYXMgY29tYmluYcOnw7VlcyBsaW5lYXJlcyBlc3RhY2lvbsOhcmlhcwogICAgKiAqKkRlY2lzw6NvKio6IE8gbW9kZWxvIFZFQyBkZXZlIHNlciB1dGlsaXphZG8KClteNV06IFNlamEgdW1hIG1hdHJpeiBBIGRlIG9yZGVtICRtIFx0aW1lcyBuJC4gRGVmaW5lLXNlIGNvbW8gcG9zdG8gZGEgbWF0cml6IEEsICRQb3N0byhBKSQsIGNvbW8gc2VuZG8gYSBtYWlzIGFsdGEgb3JkZW0gZGUgZGV0ZXJtaW5hbnRlIGRpZmVyZW50ZSBkZSB6ZXJvIHF1ZSBwb2RlIHNlciBjYWxjdWxhZG8gYSBwYXJ0aXIgZGFzIHN1Ym1hdHJpemVzIGRlIEEuIEF0cmF2w6lzIGRvIHBvc3RvIGRhIG1hdGl6IHBvZGVtb3MgaWRlbnRpZmljYXIgc2UgdW1hIG1hdHJpeiBxdWFkcmFkYSDDqSBzaW5ndWxhciAoZGV0ZXJtaW5hbnRlIGlndWFsIGEgemVybykgb3UgbsOjbyBzaW5ndWxhciAoZGV0ZXJtaW5hbnRlIGRpZmVyZW50ZSBkZSB6ZXJvKSwgaXN0byDDqSwgc2UgQSDDqSB1bWEgbWF0cml6IHF1YWRyYWRhIGRlIG9yZGVtICRrJCwgZW50w6NvOiBpKSBBIMOpIHNpbmd1bGFyLCBzZSBlIHNvbWVudGUgc2UsICRQb3N0byhBKTxrJCwgaWkpIEEgbsOjbyDDqSBzaW5ndWxhciwgc2UgZSBzb21lbnRlIHNlLCAkUG9zdG8oQSk9ayQuIFNlIHVtYSBtYXRyaXogdGVtIHBvc3RvIG51bG8sIG91IHNlamEsICRQb3N0byhBKT0wJCBkaXplbW9zIHF1ZSBBIMOpIHVtYSBtYXRyaXogbnVsYSAoZGUgemVyb3MpLgoKKiAqKlRFU1RFIERPIFRSQcOHTyBFIFRFU1RFIERFIFJBSVogQ0FSQUNURVLDjVNUSUNBIE3DgVhJTUEqKgoKTyBwcm9jZWRpbWVudG8gZGUgSm9oYW5zZW4gY29uc2lzdGUgZW0gdGVzdGFyIG8gbsO6bWVybyBkZSByYcOtemVzIGNhcmFjdGVyw61zdGljYXMgZGlmZXJlbnRlcyBkZSB6ZXJvIG5hIG1hdHJpeiAkXFBpJCBxdWUgY29ycmVzcG9uZGUgYW8gbsO6bWVybyBkZSByZWxhw6fDtWVzIGUgdmV0b3JlcyBkZSBjb2ludGVncmHDp8OjbyBlbnRyZSBhcyB2YXJpw6F2ZWlzLiBTw6NvIHV0aWxpemFkb3MgZG9pcyB0ZXN0ZXM6IFRlc3RlIGRvIFRyYcOnbyBlIFRlc3RlIGRhIFJhaXogQ2FyYWN0ZXLDrXN0aWNhIE3DoXhpbWEuIAoKMS4gVGVzdGUgZG8gVHJhw6dvCgpFc3RlIHRlc3RlIGNvbnNpZGVyYSBjb21vIGhpcMOzdGVzZSBudWxhIGEgZXhpc3TDqm5jaWEgZGUgJHJfMCQgcmHDrXplcyBjYXJhY3RlcsOtc3RpY2FzIGRpZmVyZW50ZXMgZGUgemVybyAoJHJfMCQgdmV0b3JlcyBkZSBjb2ludGVncmHDp8OjbykgY29udHJhIGEgYWx0ZXJuYXRpdmEgZGUgJHI+cl8wJC4gRm9ybWFsbWVudGUsCgokJApcYmVnaW57YWxpZ25lZH0KJiBIXzA6IHI9cl8wIFxcCiYgSF8xOiByPnJfMCBcXApcZW5ke2FsaWduZWR9CiQkCkEgZXN0YXTDrXN0aWNhIGRlIHRlc3RlIMOpIGRhZGEgcG9yOgoKJCQKXGxhbWJkYV97dHJhw6dvfSA9IC1UIFxzdW1fe2k9cl8wKzF9XntrfXtcbG4oMS1caGF0e1xsYW1iZGF9X2kpfQokJAplbSBxdWUgVCDDqSBvIG7Dum1lcm8gZGUgb2JzZXJ2YcOnw7VlcyBlICRcaGF0e1xsYW1iZGF9X2kkIHPDo28gYXMgcmHDrXplcyBjYXJhY3RlcsOtc3RpY2FzIG9idGlkYXMgZGEgbWF0cml6ICRcUGkkIGVzdGltYWRhLgoKMi4gVGVzdGUgZGEgUmFpeiBDYXJhY3RlcsOtc3RpY2EgTcOheGltYQoKTyBzZWd1bmRvIHRlc3RlIHRlbSBjb21vIGhpcMOzdGVzZSBudWxhIGEgZXhpc3TDqm5jaWEgZGUgJHJfMCQgcmHDrXplcyBjYXJhY3RlcsOtc3RpY2FzIGRpZmVyZW50ZXMgZGUgemVybyAoJHJfMCQgdmV0b3JlcyBkZSBjb2ludGVncmHDp8OjbykgY29udHJhIGEgYWx0ZXJuYXRpdmEgZGUgJHI9cl8wICsxJC4gRm9ybWFsbWVudGUsIAoKJCQKXGJlZ2lue2FsaWduZWR9CiYgSF8wOiByPXJfMCBcXAomIEhfMTogcj1yXzAgKzFcXApcZW5ke2FsaWduZWR9CiQkCmUgYSBlc3RhdMOtc3RpY2EgZGUgdGVzdGUgw6k6CgokJApcbGFtYmRhX3ttYXh9ID0gLVQgXGxuKDEtXGhhdHtcbGFtYmRhfV97cl8wKzF9KQokJApPcyB0ZXN0ZXMgc8OjbyByZWFsaXphZG9zIGVtIHNlcXXDqm5jaWEsIGRlIGZvcm1hIGNyZXNjZW50ZSwgYXTDqSBxdWUgYSBoaXDDs3Rlc2UgbnVsYSBuw6NvIHNlamEgcmVqZWl0YWRhLiBQYXJhICRIXzA6IHI9MCQsIHJlamVpdGFyICRIXzAkIHNpZ25pZmljYSBxdWUgaMOhIHVtIG91IG1haXMgdmV0b3JlcyBkZSBjb2ludGVncmHDp8OjbywgcGVsbyB0ZXN0ZSBkbyB0cmHDp28sIGUgdW0gcGVsbyB0ZXN0ZSBkYSByYWl6IG3DoXhpbWEuIFBhcmEgJEhfMDogcj0xJCwgcmVqZWl0YXIgJEhfMCQgc2lnbmlmaWNhIHF1ZSBow6EgZG9pcyBvdSBtYWlzIHZldG9yZXMgZGUgY29pbnRlZ3Jhw6fDo28sIHBlbG8gdGVzdGUgZG8gdHJhw6dvLCBlIG1haXMgdW0gcGVsbyB0ZXN0ZSBkYSByYWl6IG3DoXhpbWEuIAoKIyMjIyMgKipNT0RFTE8gVkVUT1JJQUwgREUgQ09SUkXDh8ODTyBERSBFUlJPUyAoVkVDKSoqCgpTZSBvIHBvc3RvIGRlICRcUGk9cjxrJCwgcG9kZS1zZSBtb3N0cmFyIHF1ZSBleGlzdGVtIG1hdHJpemVzICRcYWxwaGFfe2tcdGltZXMgcn0kIGUgJFxiZXRhX3trXHRpbWVzIHJ9JCB0YWlzIHF1ZSAkXFBpX3trXHRpbWVzIGt9PVxhbHBoYV97a1x0aW1lcyByfVxiZXRhXnsnfV97clx0aW1lcyBrfSQgdGFpcyBxdWU6CgokJApcUGlfe2tcdGltZXMga30gPSBcYWxwaGFfe2sgXHRpbWVzIHJ9IFxiZXRhXnsnfV97ciBcdGltZXMga30KJCQKU3Vic3RpdHVpbmRvIG5hIGVxdWHDp8OjbyBkbyBWQVIgcmVwYXJhbWV0cml6YWRvLCBvYnTDqW0tc2U6CgokJApcYmVnaW57YWxpZ25lZH0KJiBcRGVsdGEgWV90ID0gIFxhbHBoYSBcYmV0YV57J30gWV97dC0xfSArIFxzdW1fe2k9MX1ee3AtMX17XEdhbW1hX2lcRGVsdGEgWV97dC1pfX0gK1xlcHNpbG9uX3QgXFwKXGVuZHthbGlnbmVkfQokJApxdWUgw6kgbyBtb2RlbG8gZGUgY29ycmXDp8OjbyBkZSBlcnJvIG5hIGZvcm1hIG11bHRpdmFyaWFkYSBkZW5vbWluYWRvIE1vZGVsbyBkZSBDb3JyZcOnw6NvIGRlIEVycm8gVmV0b3JpYWwgKFZFQykuIE8gVkVDIMOpIHVtIFZBUiAocmVwYXJhbWV0cml6YWRvKSBjb20gYXMgcmVzdHJpw6fDtWVzIGRlIGNvaW50ZWdyYcOnw6NvIGVudHJlIGFzIHZhcmnDoXZlaXMuIFRlbS1zZSBxdWU6CgoqICRcYmV0YV57J31ZX3t0LTF9JDogc8OjbyBhcyAkciQgcmVsYcOnw7VlcyBkZSBjb2ludGVncmHDp8OjbyBxdWUgZGVmaW5lbSBhIHRyYWpldMOzcmlhIGRlIGxvbmdvIHByYXpvIChlcXVpbMOtYnJpbykgZW50cmUgYXMgdmFyacOhdmVpcy4gCiogJFxhbHBoYSQ6IG1hdHJpeiBkZSBjb2VmaWNpZW50ZXMgZGUgYWp1c3RhbWVudG8gcGFyYSBvIGVxdWlsw61icmlvIGRlIGxvbmdvIHByYXpvCiogJFxHYW1tYV9pJDogbWF0cml6ZXMgZGUgY29lZmljaWVudGVzIHF1ZSBkZWZpbmVtIGEgZGluw6JtaWNhIGRlIGN1cnRvIHByYXpvCgpDb21vIGlsdXN0cmHDp8OjbywgY29uc2lkZXJlIHVtIGV4ZW1wbG8gY29tICRrPTMkIHZhcmnDoXZlaXMgZSBtYXRyaXogJFxQaSQgZGFkYSBwb3I6CgokJApcUGkgPSBcYmVnaW57Ym1hdHJpeH0KLVxmcmFjezF9ezJ9ICYgLVxmcmFjezV9ezE2fSAgJiAtXGZyYWN7MX17MTZ9IFxcIApcZnJhY3sxfXs4fSAmIC1cZnJhY3s0MX17NjR9ICAmIFxmcmFjezV9ezMyfSBcXCAKIFxmcmFjezF9ezR9ICYgLVxmcmFjezExfXszMn0gJiAtXGZyYWN7M317MzJ9ClxlbmR7Ym1hdHJpeH0KJCQKCmNvbSByYcOtemVzIGNhcmFjdGVyw61zdGljYXMgJFxsYW1iZGFfezF9PTAkLCAkXGxhbWJkYV97Mn09LTAsNDQxNiQgZSAkXGxhbWJkYV97M309LTAsNzkyOCQuIEFzc2ltLCBjb20gZHVhcyByYcOtemVzIGNhcmFjdGVyw61zdGljYXMgZGlmZXJlbnRlcyBkZSB6ZXJvIChwb3N0byBkZSAkXFBpPTIkKSBlIGV4aXN0ZW0gMiByZWxhw6fDtWVzIGRlIGNvaW50ZWdyYcOnw6NvLiBQb2RlLXNlIG1vc3RyYXIgcXVlCgokJApcUGkgPSBcYmVnaW57Ym1hdHJpeH0KLVxmcmFjezF9ezJ9ICYgLVxmcmFjezV9ezE2fSAgJiAtXGZyYWN7MX17MTZ9IFxcIApcZnJhY3sxfXs4fSAmIC1cZnJhY3s0MX17NjR9ICAmIFxmcmFjezV9ezMyfSBcXCAKIFxmcmFjezF9ezR9ICYgLVxmcmFjezExfXszMn0gJiAtXGZyYWN7M317MzJ9ClxlbmR7Ym1hdHJpeH0gPSBcYmVnaW57Ym1hdHJpeH0KLVxmcmFjezF9ezJ9ICYgXGZyYWN7MX17NH0gXFwgClxmcmFjezF9ezh9ICYgLVxmcmFjezV9ezh9IFxcIAogXGZyYWN7MX17NH0gJiBcZnJhY3szfXs4fSAKXGVuZHtibWF0cml4fSBcYmVnaW57Ym1hdHJpeH0KMSAmIC1cZnJhY3sxfXs4fSAgJiAwIFxcIAowICYgMSAgJiAtXGZyYWN7MX17NH0KXGVuZHtibWF0cml4fQokJApPIG1vZGVsbyBWRUMsIGRlc2NvbnNpZGVyYW5kbyBvcyB0ZXJtb3MgZGUgZGlmZXJlbsOnYSBkZWZhc2Fkb3MgKCR7XEdhbW1hX2lcRGVsdGEgWV97dC1pfX0kKSwgc2Vyw6E6CgokJApcYmVnaW57YWxpZ25lZH0KXGJlZ2lue2JtYXRyaXh9ClxEZWx0YSBZX3sxdH0gXFwgClxEZWx0YSBZX3sydH0gXFwgClxEZWx0YSBZX3szdH0KXGVuZHtibWF0cml4fSAmJiYgPSBcYmVnaW57Ym1hdHJpeH0KLVxmcmFjezF9ezJ9ICYgXGZyYWN7MX17NH0gXFwgClxmcmFjezF9ezh9ICYgLVxmcmFjezV9ezh9IFxcIAogXGZyYWN7MX17NH0gJiBcZnJhY3szfXs4fSAKXGVuZHtibWF0cml4fSBcYmVnaW57Ym1hdHJpeH0KMSAmIC1cZnJhY3sxfXs4fSAgJiAwIFxcIAowICYgMSAgJiAtXGZyYWN7MX17NH0KXGVuZHtibWF0cml4fSBcYmVnaW57Ym1hdHJpeH0KWV97MXQtMX0gXFwgCllfezJ0LTF9IFxcIApZX3szdC0xfQpcZW5ke2JtYXRyaXh9IFxcCiYmIFxcCiYmJiA9IFxiZWdpbntibWF0cml4fQotXGZyYWN7MX17Mn0gJiBcZnJhY3sxfXs0fSBcXCAKXGZyYWN7MX17OH0gJiAtXGZyYWN7NX17OH0gXFwgCiBcZnJhY3sxfXs0fSAmIFxmcmFjezN9ezh9IApcZW5ke2JtYXRyaXh9XGJlZ2lue2JtYXRyaXh9CllfezF0LTF9LVxmcmFjezF9ezh9WV97MnQtMX0rMFlfezN0LTF9XFwgCjBZX3sxdC0xfStZX3sydC0xfS1cZnJhY3sxfXs0fVlfezN0LTF9ClxlbmR7Ym1hdHJpeH0gXFwKJiYmIFxcCiYmJiA9IFxsZWZ0XHtcYmVnaW57bWF0cml4fQpcRGVsdGEgWV97MXR9ID0gLVxmcmFjezF9ezJ9IFxsZWZ0KFlfezF0LTF9LVxmcmFjezF9ezh9WV97MnQtMX1ccmlnaHQpICtcZnJhY3sxfXs0fSBcbGVmdChZX3sydC0xfS1cZnJhY3sxfXs0fVlfezN0LTF9XHJpZ2h0KSBcXCAKXERlbHRhIFlfezJ0fSA9IFxmcmFjezF9ezh9IFxsZWZ0KFlfezF0LTF9LVxmcmFjezF9ezh9WV97MnQtMX1ccmlnaHQpIC1cZnJhY3s1fXs4fSBcbGVmdChZX3sydC0xfS1cZnJhY3sxfXs0fVlfezN0LTF9XHJpZ2h0KSBcXCAKXERlbHRhIFlfezN0fSA9IFxmcmFjezF9ezR9IFxsZWZ0KFlfezF0LTF9LVxmcmFjezF9ezh9WV97MnQtMX1ccmlnaHQpICtcZnJhY3szfXs4fSBcbGVmdChZX3sydC0xfS1cZnJhY3sxfXs0fVlfezN0LTF9XHJpZ2h0KQpcZW5ke21hdHJpeH1ccmlnaHQuIFxcClxlbmR7YWxpZ25lZH0KJCQKCkFzIGV4cHJlc3PDtWVzICRZX3sxdC0xfS1cZnJhY3sxfXs4fVlfezJ0LTF9JCBlICRZX3sydC0xfS1cZnJhY3sxfXs0fVlfezN0LTF9JCBzw6NvIGFzIHJlbGHDp8O1ZXMgZGUgY29pbnRlZ3Jhw6fDo28gcXVlIGVudHJhbSBlbSBjYWRhIGVxdWHDp8Ojby4gQSBtYW5laXJhIG1haXMgc2ltcGxlcyBkZSBlc3RpbWFyIHVtIG1vZGVsbyBWRUMgw6kgbyBwcm9jZWRpbWVudG8gZW0gZG9pcyBlc3TDoWdpb3MuIFByaW1laXJvLCBlc3RpbWFtb3MgYSByZWxhw6fDo28gZGUgY29pbnRlZ3Jhw6fDo28gZSBjcmlhbW9zIGEgc8OpcmllIGRlIGRlZmFzYWdlbnMgZG9zIHJlc8OtZHVvcy4gQXDDs3MgaXNzbywgZXN0aW1hbW9zIGEgZXF1YcOnw6NvIGRvIG1vZGVsbyBwb3IgbWVpbyBkZSBNw61uaW1vcyBRdWFkcmFkb3MgT3JkaW7DoXJpb3MgKE1RTykuCgojIyMjIyAqKlBST0NFU1NPIERFIEVTVElNQcOHw4NPKioKCkFiYWl4bywgb3MgcGFzc29zIHBhcmEgZXN0aW1hw6fDo28gZSBhdmFsaWHDp8OjbyBkb3MgbW9kZWxvcyBWQVIsIFNWQVIgZSBWRUMuIFBlcmNlYmEgcXVlIGRlcGVuZGVuZG8gZGFzIGRlY2lzw7VlcyBuYXMgZXRhcGFzLCBzZWd1aW1vcyBjb20gYSBlc3RpbWHDp8OjbyBkbyBtb2RlbG8gVkVDLiAKCjEuIFZpc3VhbGl6YXIgb3MgZGFkb3MgZSBpZGVudGlmaWNhciBvYnNlcnZhw6fDtWVzIGZvcmEgZG8gcGFkcsOjbyAob3V0bGllcnMsIHNhem9uYWxpZGFkZSwgdGVuZMOqbmNpYSkKMi4gU2UgbmVjZXNzw6FyaW8sIHRyYW5zZm9ybWFyIG9zIGRhZG9zIHBhcmEgZXN0YWJpbGl6YXIgYSB2YXJpw6JuY2lhIChsb2dhcml0bW8gb3UgcmV0aXJhciBzYXpvbmFsaWRhZGUsIHBvciBleGVtcGxvKQozLiBBdmFsaWFyIGEgZnVuw6fDo28gZGUgY29ycmVsYcOnw6NvIGNydXphZGEgcGFyYSBjb25maXJtYXIgYSBwb3NzaWJpbGlkYWRlIGRlIG1vZGVsYWdlbSBtdWx0aXZhcmlhZGEuCjQuIFRlc3RhciBzZSBvcyBkYWRvcyBzw6NvIGVzdGFjaW9uw6FyaW9zIG91IGNvaW50ZWdyYWRvczoKICAgICogQ2FzbyBuw6NvIHRlbmhhIHJhaXogdW5pdMOhcmlhIChlc3RhY2lvbsOhcmlvcyksIGVzdGltYXIgVkFSIGNvbSBhcyBzw6lyaWVzIGVtIG7DrXZlbAogICAgKiBDYXNvIHRlbmhhIHJhaXogdW5pdMOhcmlhLCBtYXMgc2VtIGNvaW50ZWdyYcOnw6NvIMOpIHByZWNpc28gZGlmZXJlbmNpYXIgb3MgZGFkb3MgYXTDqSBzZSB0b3JuYXJlbSBlc3RhY2lvbsOhcmlvcyBlIGVzdGltYXIgVkFSIGNvbSBhcyBzw6lyaWVzIGRpZmVyZW5jaWFkYXMKICAgICogQ2FzbyB0ZW5oYSByYWl6IHVuaXTDoXJpYSwgbWFzIGNvbSBjb2ludGVncmHDp8OjbyBkZXZlbW9zIGVzdGltYXIgbyBWRUMgY29tIGFzIHPDqXJpZXMgZW0gbsOtdmVsCjUuIERlZmluaXIgYSBvcmRlbSAkcCQgcGFyYSBvcyBkYWRvcyBlbSBhbsOhbGlzZSBwb3IgbWVpbyBkZSBjcml0w6lyaW9zIGRlIGluZm9ybWHDp8OjbyAoZXNjb2xoZXIgbW9kZWxvIGNvbSBtZW5vciBBSUMsIHBvciBleGVtcGxvKQo2LiBFc3RpbWFyIG8gbW9kZWxvIGVzY29saGlkbyBubyBwYXNzbyA0CiAgICAqIFNlIFZBUiAoZm9ybWEgcmVkdXppZGEpOgogICAgICAgIC0gVmVyaWZpY2FyIHNpZ25pZmljw6JuY2lhIGVzdGF0w61zdGljYSBkbyBtb2RlbG8gZXN0aW1hZG8gZSwgY2FzbyBzZWphIG5lY2Vzc8OhcmlvLCBlbGltaW5hciBwYXLDom1ldHJvcyBuw6NvIHNpZ25pZmljYW50ZXMuCiAgICAgICAgLSBBbmFsaXNhciBhIGNhdXNhbGlkYWRlIGRlIEdyYW5nZXIgKHZhcmnDoXZlaXMgcXVlIG7Do28gZ3JhbmdlciBjYXVzYSBhcyBkZW1haXMgcG9kZW0gc2VyIHJldGlyYWRhcyBkbyBtb2RlbG8pCiAgICAqIFNlIFNWQVIgKGZvcm1hIGVzdHJ1dHVyYWwpOgogICAgICAgIC0gRGVmaW5pciBhIGVzdHJ1dHVyYSBwYXJhIGFzIG1hdHJpemVzIEEgZSBCIGUgbyBtb2RlbG8gZGUgaW50ZXJlc3NlIChBLCBCIG91IEFCKQogICAgICAgIC0gVmVyaWZpY2FyIHNpZ25pZmljw6JuY2lhIGVzdGF0w61zdGljYSBkbyBtb2RlbG8gZXN0aW1hZG8gZSwgY2FzbyBzZWphIG5lY2Vzc8OhcmlvLCBlbGltaW5hciBwYXLDom1ldHJvcyBuw6NvIHNpZ25pZmljYW50ZXMuCiAgICAgICAgLSBBbmFsaXNhciBhIGNhdXNhbGlkYWRlIGRlIEdyYW5nZXIgKHZhcmnDoXZlaXMgcXVlIG7Do28gZ3JhbmdlciBjYXVzYSBhcyBkZW1haXMgcG9kZW0gc2VyIHJldGlyYWRhcyBkbyBtb2RlbG8pCiAgICAqIFNlIFZFQyAoTW9kZWxvIFZldG9yaWFsIGRlIENvcnJlw6fDo28gZGUgRXJyb3MpCiAgICAgICAgLSBVc2FyIGEgcXVhbnRpZGFkZSBkZSB2ZXRvcmVzIGRlIGNvaW50ZWdyYcOnw6NvIG9idGlkb3Mgbm8gdGVzdGUgZGUgY29pbnRlZ3Jhw6fDo28gcGFyYSBlc3RpbWFyIG8gbW9kZWxvIFZFQwo4LiBFeGFtaW5hciBzZSBvcyByZXPDrWR1b3Mgc2UgY29tcG9ydGFtIGNvbW8gcnXDrWRvIGJyYW5jbyBlIGNvbmRpw6fDtWVzIGRlIGVzdGFjaW9uYXJpZWRhZGUgZG8gbW9kZWxvLiBDYXNvIGNvbnRyw6FyaW8sIHJldG9ybmFyIGFvIHBhc3NvIDMgb3UgNC4KICAgICogVmVyaWZpY2FyIGEgYXV0b2NvcnJlbGHDp8OjbyBzZXJpYWwgcG9yIG1laW8gZGEgRkFDIGUgRkFDUCBkb3MgcmVzw61kdW9zIGRlIGNhZGEgZXF1YcOnw6NvIGRvIG1vZGVsbyBlc3RpbWFkby4gTyBpZGVhbCDDqSBuw6NvIHRlciBkZWZhc2FnZW5zIHNpZ25pZmljYXRpdmFzLgogICAgKiBWZXJpZmljYXIgY29ycmVsYcOnw6NvIGNydXphZGEgcG9yIG1laW8gZGEgRkNDIGRvcyByZXPDrWR1b3MuCiAgICAqIEFuYWxpc2FyIGEgZXN0YWJpbGRpYWRlIGRvIG1vZGVsbyBlc3RpbWFkbyBhdHJhdsOpcyBkb3MgYXV0b3ZhbG9yZXMgYXNzb2NpYWRvcyBhbyBtZXNtby4KICAgICogVmVyaWZpY2FyIGEgZGlzdHJpYnVpw6fDo28gZGUgcHJvYmFiaWxpZGFkZSAoTm9ybWFsKSBwYXJhIG9zIHJlc8OtZHVvcyBkZSBjYWRhIGVxdWHDp8OjbyBkbyBtb2RlbG8uCiAgICAqIEFuYWxpc2FyIGhldGVyb2NlZGFzdGljaWRhZGUgY29uZGljaW9uYWwgKHJlc8OtZHVvcyBkZXZlbSBzZXIgaG9tb2NlZGFzdGljb3MsIG91IHNlamEsIHZhcmnDom5jaWEgY29uZGljaW9uYWwgY29uc3RhbnRlKQo5LiBVbWEgdmV6IHF1ZSBvcyByZXPDrWR1b3Mgc8OjbyBydcOtZG8gYnJhbmNvIGUgbyBtb2RlbG8gw6kgZXN0w6F2ZWw6CiAgICAqIEFuYWxpc2FyIGZ1bsOnw7VlcyBkZSByZXNwb3N0YSBhbyBpbXB1bHNvCiAgICAqIEFuYWxpc2FyIGEgaW1wb3J0w6JuY2lhIGRhcyB2YXJpw6F2ZWlzIHBhcmEgZXhwbGljYXIgYSB2YXJpw6JuY2lhIGRvIGVycm8gZGUgcHJldmlzw6NvIGRlIGNhZGEgdmFyacOhdmVsCiAgICAqIEZhemVyIHByZXZpc8O1ZXMgcGFyYXMgYXMgdmFyacOhdmVpcyBkbyBtb2RlbG8KCiMjIyMjICoqUkVGRVLDik5DSUFTKioKCg==