1 Metanálise

1.1 Introdução

A pesquisa é algo recorrente em todas as áreas e, hoje em dia, com a facilidade dos meios de comunicação, é possível encontrar inúmeros estudos sobre a mesma questão de pesquisa. Na área da saúde, onde se preconiza a medicina baseada em evidências, a idéia é sempre utilizar a melhor evidência disponível. Uma questão relevante é a determinação de qual é a melhor evidência disponível quando inúmeros estudos sobre a mesma questão de pesquisa estão disponíveis. Parece consenso que uma revisão sistemática e a combinação dos resultados dos estudos resultantes devem fazer parte do processo.

Uma maneira simplista de combinar resultados de vários estudos é juntar os dados dos estudos e analisar como se fossem informações retiradas de apenas um amplo estudo. Porém, esta maneira desconsidera completamente a variabilidade, o tamanho de cada estudo e, no caso de ensaios clínicos, o princípio da aleatorização. Estas características são de extrema importância visto suas influências nos resultados. Desta forma, a maneira mais apropriada é utilizar técnicas estatísticas adequadas. Estas técnicas serão detalhadas neste guia prático e englobam o que é conhecido na literatura como metanálise (Rodrigues, Ziegelmann, 2010).

A primeira metanálise da história é atribuída ao estatístico Karl Pearson. Em 1904, Pearson combinou, através de correlações, os dados de cinco estudos para examinar o efeito preventivo de inoculações contra febre entérica (Pearson, 19004). Os motivos relatados por Pearson para a combinação de estudos são, ainda hoje, as principais razões para o uso da metanálise. O principal argumento é que muitos dos estudos são pequenos para permitir uma conclusão confiável, fazendo com que o tamanho do erro seja grande e o poder do estudo seja baixo.

Em 1931 e 1932, Tippet e Fisher, apresentaram métodos para a combinação de valores p (Whitehead, 2002). Em 1938, Yates e Cochran consideraram a combinação de estimativas a partir de diferentes experimentos agrícolas (Yates; Cochran, 1938). A primeira metanálise para avaliar o efeito de uma intervenção terapêutica foi publicada em 1955 (Whitehead, 2002). Na década de 1970, a metanálise passou a ser usada nas ciências sociais, principalmente em pesquisas de educação. Porém, o termo “metanálise” ainda não era utilizado.

Foi em 1977, que o termo “metanálise” foi utilizado pela primeira vez em um artigo intitulado “Primary, secondary and metaanalysis of research” pelo psicólogo Gene Glass (Glass, 1976).

Embora o conceito de Meta-Análise seja oriundo de uma escola de metodologia desenvolvida por Glass em 1976, estudos genéticos sobre genótipos e fenótipos já abrangiam esse conceito, conforme descrito por Sokal e Rohlf (1969), a combinação de várias amostras com informações sobre o mesmo assunto, para obter estimativas mais precisas das proporções paramétricas.

Na área médica, a metanálise passou a ser utilizada com mais frequência na década de 1980. Questões chave da medicina como, por exemplo, o tratamento de doenças do coração e de câncer, foram respondidas com auxílio da metanálise (WHITEHEAD, 2002).

Em 1993, uma rede composta de clínicos, epidemiologistas e outros profissionais de saúde fundaram o Cochrane Collaboration. Esta organização tem por objetivo elaborar, manter e divulgar revisões sistemáticas da área da saúde.

Desde sua fundação em Oxford, o Centro Cochrane tem crescido rapidamente e diversos centros foram fundados na Europa, América do Norte e Latina, África e Austrália com centenas de pessoas colaborando em grupos de revisão.

No Brasil, o Centro Cochrane foi inaugurado em 1996, em São Paulo. Para conhecer mais sobre o Centro Cochrane e utilizar seus materiais de pesquisa, é possível acessar a página na internet http://www.centrocochranedobrasil.org.br/. Nesta página são encontrados links para os outros centros e suas bibliotecas virtuais.

1.2 Definição

Metanálise é uma técnica estatística adequada para combinar resultados provenientes de diferentes estudos produzindo, assim, estimativas que resumem o todo, chamadas de estimativas metanalíticas.

Para que o resultado de uma metanálise tenha significado aplicado, os estudos que compõem os dados da metanálise devem ser o resultado de uma revisão sistemática.

Uma revisão sistemática consiste de um conjunto de regras para identificar estudos sobre uma determinada questão e, em seguida, selecionar quais deles serão incluídos ou não na metanálise. Para que uma revisão sistemática seja válida algumas regras devem ser seguidas (Fletcher, Fletcher, 2006). Não são recentes as tentativas de unir os resultados de diferentes estudos.

2 Etapa da Metanálise

Não existe um roteiro consensual sobre como realizar uma meta-análise. Entretanto, existe alguma uniformidade a respeito de etapas que devem ser seguidas (IRWIG et al, 1994; DINNES et al., 2005; SOUSA, RIBEIRO, 2009) sugerem algumas etapas necessárias, representadas por:

2.1 Definir o Objetivo

Para definir a questão problema ou o objetivo do trabalho, o pesquisador deve se preocupar em definir que é a variável chave objeto da análise sistemática das diferentes pesquisas. Assim, o problema deve demonstrar se o estudo meta-analítico proposto ira tratar de verificar os efeitos antecedentes, dos consequentes ou de ambos sobre a variável-chave.

O problema de pesquisa é o objetivo principal do trabalho, geralmente proposto de forma interrogativa, aquilo que se pretende realizar. Ainda na etapa de definição do objetivo, o pesquisador também pode a partir de revisão da teoria, elaborar hipóteses sobre o efeito positivo ou negativo da variável-chave.

A elaboração de um ou mais hipóteses é opcional para cada trabalho meta-analítico. Todavia, se for elaborada, é importante que o autor apresente os argumentos teóricos que justifiquem ou não uma associação entre variáveis e o sentido dessa agregação.

2.2 Buscar as Publicações nas Bases de Dados

Após a explicação da definição do objetivo, o próximo passo é pesquisar as bases, uma das tarefas críticas da meta-análise. Uma boa base de dados deve disponibilizar pesquisas que passaram por um crivo mais profundo em termos de avaliação para a publicação, tal como o sistema double blind review (dupla revisão cega).

Publicações em periódicos e congressos que possuam menor reconhecimento cientifico podem ser adicionadas para elaboração de amostras maiores, mas devem ser codificadas para controle. Para Berwanger et al (2007), uma meta-análise deve tentar a máxima evidencia existente sobre um assunto. Por isso, deve-se utilizar as bases de dados mais reconhecidas no seu campo de conhecimento, como a PROQUEST e a EBSCO são para o marketing.

A estratégia de busca e seleção deve ser definida antes da consulta as diferentes bases de dados, a mantida ao longo da pesquisa, pois uma busca ampla e sistemática é um dos critérios de que auxiliam na garantia da qualidade das pesquisas obtidas.

2.3 Definir os Critérios de Buscar

Esta é uma tarefa que também varia em cada pesquisa, pois o pesquisador devera criar critérios de busca, de seleção e de inclusão dos artigos a serem investigados.

A clareza da exposição dos critérios tem dois objetivos principais: permitir que o revisor avalie a qualidade da busca e consentir que futuros pesquisadores adotem critérios semelhantes para novas pesquisas. Os critérios de exclusão devem ser descritos e rigorosamente seguidos pelo analista (BERWANGER et al, 2007). Desta forma, o leitor pode decidir se os resultados possuem relevância e aplicabilidade.

2.4 Selecionar as Pesquisas

Após uma ampla busca das publicações em diversos bases de dados com base em critérios clara e precisamente definidos, o pesquisador deve se preocupar em selecionar apenas aquelas pesquisas que possuam as informações buscadas. Nem todos os trabalhos obtidos possuem informações uteis que possam ser convertidas em uma estatística.

A meta-análise pode ser entendida como uma forma de pesquisa na qual cada pesquisa individual é considerada como um respondente. De cada uma delas são extraídas as informações que integrarão um banco de dados especialmente construídos para cada meta-análise.

Nesse banco de dados, cada estudo entra como uma linha, enquanto as informações extraídas de cada estudo são as colunas. Em seguida, esse banco de dados é analisado tendo como objetivo principal o cálculo do tamanho do efeito.

2.5 Avaliar a Heterogeneidade

é muito raro que pesquisas estudem e mensurem as mesmas variáveis de forma semelhante. Ou seja, é muito comum que haja heterogeneidade no banco de dados. Para garantir a qualidade das analises, o pesquisador deve avaliar os motivos da variância entre os estudos, se esta variação foi imprevista e se foi causada por aspectos metodológicos, tais como o uso métodos experimentais ou suveys, escalas de medidas diferentes, etc. (DINNES et al., 2005).

Calcular os resultados de cada estudo, combinando os efeitos: Em estatística, um tamanho de efeitos (effect-sizes) é uma medida da força do relacionamento entre duas variáveis em uma população. Ou seja, é a magnitude do efeito que uma variável exerce sobre a outra em termos de associação. Um effect-size calculado a partir dos dados é uma estatística descritiva que veicula a magnitude estimada de um relacionamento, sem que se faça qualquer declaração sobre a existência de uma relação estatisticamente significante entre as variáveis (BREI et al., 2011).

O objetivo do pesquisador numa meta-análise é verificar qual é o tamanho do efeito entre duas variáveis. Esse tamanho do efeito é determinado pelo effect-size, podendo ser identificados diferentes tipos na literatura, fornecidos pelos autores. Em outras palavras, os effect-sizes são obtidos através da conversão dos efeitos das associações, sento t de student, F da análise de variância, F da ANCOVA, diferença de médias antes e depois do tratamento, Qui-quadrado, correlação de Pearson, r e outros (LIPSEY; WILSON, 2011).

2.6 Avaliar o Efeito da Variação

Uma das melhores opções para avaliar o efeito da variação é usar o gráfico chamado FOREST PLOT. O gráfico serve para ilustrar a força relativa dos efeitos de tratamento em múltiplos estudos e a quantidade de variabilidade dos efeitos, mostrando desde de resultados extremamente negativos a fortemente positivos.

Assim, eles permitem uma análise visual tanto de effect-size quanto dos intervalos de confiança facilitando a comparação visual dos achados de diferentes estudos (BERWANGER et al, 2007).

Os resultados dos efeitos já transformados em r ou d por uma meta-análise podem ser avaliados por meio de intervalos de confiança, ou seja, a estimativa de um parâmetro de interesse na população. O objetivo de um intervalo de confiança é mostrar qual a variação da média dos estudos abordados. Além disso, ele permite estabelecer uma referência, com a qual podem ser comparados os resultados de estudos futuros. Ou seja, ao invés de estimar o parâmetro por meio de um único valor, o intervalo de confiança serve para mostrar um intervalo onde aquele parâmetro provavelmente se encontra (a partir de um nível de significância escolhido pelo pesquisador).

2.7 Interpretar os Resultados

A última etapa da realização de uma meta-análise é a interpretação dos resultados de um modelo global. Recomendamos que uma tabela final de meta-análise apresente, pelo menos, os seguintes dados:

  • Número de Estudos;
  • Número de observações;
  • Tamanho da Amostra (N);
  • Valor de r simples;
  • Valor de Z;
  • Valor de r corrigidos pela confiabilidade;
  • Valor de r corrigidos pela amostra;
  • Erro padrão do effect-size;
  • Valor de d de Cohen, calculado a partir do effect-size;
  • Intervalo de confiança;
  • Teste de homogeneidade (Q);
  • *Teste I².

Dentre todos os dados propostos, individualmente, o effect-size é a medida mais importância para interpretação dos resultados, principalmente a versão do effect-size que está ponderada pela amostra e pela confiabilidade, pois ela permite ao pesquisador avaliar a força da relação entre as variáveis principais do estudo, ou seja, avaliar se há u m efeito fraco, médio ou forte, e tirar as conclusões a respeito da força da relação entre as variáveis.

Nesse contexto, os principais passos para realização de uma meta-análise são vários, detalhados, e requerem por parte do pesquisador conhecimento substancial de estatística descritiva e inferencial, além de domínio de um bom software.

A principal desvantagem da meta-análise é que esta não pode compensar as limitações inerentes aos estudos em que se baseia, uma vez, que eles próprios têm erros, sistemáticos e aleatórios, que não são corrigidos pela sua análise conjunta, sendo pelo contrário, aditivos (Ressing, 2009).

3 Visualização Gráfica

3.1 Aspetos Gerais

A maneira mais usual de apresentar os resultados de uma Meta-Análise é o gráfico chamado Forest Plot (gráfico em floresta). Este gráfico mostra informações individuais dos estudos e os resultados da interação.

Para cada estudo o gráfico apresenta a medida de efeito e seu intervalo de confiança(IC), sendo que a medida de efeito é representada por um símbolo que pode, por exemplo, ser um quadrado, um círculo, um losango, ou outra figura dependendo do software.

O tamanho deste símbolo é proporcional ao peso do estudo na Meta-Análise, quanto maior o peso, maior o tamanho do símbolo da medida de efeito. Também é exibido em torno da estimativa da medida de efeito uma linha horizontal que é o respectivo intervalo de confiança (IC), sendo que quanto maior esta linha, maior é a variabilidade dentro do estudo.

Nesse contexto, os resultados representados à esquerda da linha vertical evidenciam que o evento é mais propenso a ocorrer no grupo de Controle; contrariamente os resultados representados à direita desta linha evidenciam que o evento tem maior propensão a ocorrer no grupo Experimental ou Tratamento (Ramalho, 2005; Martinez, 2007).

3.2 Forest Plot

o gráfico em floresta tradicional é composto por 6 colunas que sumarizam os resultados das diversas abordagens.

A primeira coluna do gráfico corresponde à identificação do estudo (neste caso representado pelo Autor e pela referência correspondente), subdividos de acordo com a abordagem utilizada nos ensaios clínicos: métodos pragmáticos, comportamentais ou cognitivo-comportamentais.

Na segunda e na terceira colunas estão representadas as proporções de eventos de interesse (recaída) em cada estudo para os grupos intervenção e controle respectivamente.

O valor apresentado na quinta coluna corresponde ao peso de cada publicação para o resultado agregado da metanálise.

A quarta e a sexta colunas correspondem ao tamanho do efeito de cada estudo, aqui representado pelo RR e por seus respectivos intervalos de confiança (IC) de 95%, estando apresentado de forma gráfica na quarta coluna e de forma numérica na última.

3.2.1 Componentes do Forest Plot

  • Quadrado : é o Peso de Cada Estudo (amostra);
  • IC: Intervalo de Confiança para cada estudo;
  • Linha de Nulidade:
  • Losango: Estimativa do Efeito do Resultado Composto.

3.3 Funnil Plot

Os dados selecionados para compor a meta-análise podem estar influenciados pelo Viés de Publicação. Entende-se por viés de publicação a tendência de os resultados publicados estarem sistematicamente diferentes da realidade.

Análise de ensaios clínicos com protocolo registrado na base de registros ClinicalTrial.gov revelou que menos de 70% dos estudos são publicados (ROSS et al., 2012).

A não publicação de resultados pode ser devida à decisão do autor ou do financiador do estudo, que não submetem para publicação os achados desfavoráveis, ou dos editores de periódicos científicos, que podem não ter interesse em divulgar resultados negativos (sem significância estatística).

Nas revisões sistemáticas, a presença desse viés pode ser identificada por meio de Gráfico de Funil (Funnil Plot) e de testes estatísticos (Higgins; Green, 2011).

A utilização dessas técnicas é recomendada para meta-análises com dez estudos ou mais e baseia-se em questões de estimativa e de precisão. Os estudos pouco precisos, em geral realizados com amostras de tamanho pequeno, poderão encontrar resultados positivos ou negativos (estatisticamente significativos ou não) por influência do acaso.

Estudos de maior precisão, em geral em menor número, estariam mais próximos do valor real e situados na parte mais estreita do gráfico de funil. Também é possível estimar a presença desse viés em bases de registros de estudos, pela busca daqueles que não vieram a ser publicados.

Caso haja evidências de viés de publicação sugerimos:

  • Revisar planilha de coleta de dados, buscando por erros na extração dos dados dos estudos;
  • Avaliar que medida de efeito está adequada (ex: uso de diferença de médias em vez de diferença padronizada de médias em metanálises de dados contínuos);
  • Realizar analise de sensibilidade considerando a exclusão de estudos com pequeno tamanho amostral e potenciais outliers identificados na análise visual;
  • Realizar ajustamento para viés de publicação utilizando análise de trim and fill.

4 Medidas de Risco/Efeito

4.1 Contextualização

Metanálise é o uso de métodos estatísticos para sumarizar resultados de estudos independentes. Combinando informações de todos os estudos relevantes, a metanálise pode estimar os efeitos de uma determinada intervenção de forma mais precisa do que cada estudo individualmente. Para a elaboração de uma revisão sistemática, é possível trabalhar com dados de diversas naturezas, contudo, para proceder com a abordagem meta-analítica, o resultado final de cada estudo deve ser expresso em uma medida padronizada, denominada tamanho do efeito.

Metanálises que consideram desfechos binários(variável dicotômica) são as mais comuns. Para cada estudo individual é calculada uma mesma medida de associação, sendo mais freqüente o uso do Risco Relativo (RR) ou da Razão de Chances (odds ratio – OR), que expressarão o tamanho do efeito. Após, procede-se com a agregação das medidas a partir da ponderação dos resultados dos estudos individuais. Uma vez obtidos esses dados, é possível calcular medidas de impacto e benefício, como o Número Necessário para Tratar (NNT), assim como em qualquer ensaio clínico individual.

Para Dados Contínuos, utiliza-se a diferença ponderada das médias (weighted mean difference, ou simplesmente, mean difference – MD) entre os dois grupos de comparação quando possuímos as medidas em uma mesma escala. Quando as mensurações são realizadas em escalas distintas, sem a possibilidade de conversão à uma mesma unidade (por exemplo, testes psicométricos diferentes para avaliar um mesmo estado de saúde), utiliza-se a diferença padronizada das médias (standarized mean difference – SMD), que consiste na divisão da diferença das médias dos dois grupos pelo desvio padrão comum a eles, gerando assim um valor correspondente a diferença em desvios padrões entre as duas intervenções avaliadas.

4.2 Odds ou Chance

As medidas de efeito mais utilizadas para grupos são o odds ratio e a incidência.

Por definição odds é a razão entre a probabilidade de o evento ocorrer e a probabilidade do evento não ocorrer que, matematicamente, é equivalente a7 razão entre o número de eventos e o número de não eventos.

\[ ln(Odds)_{j}= ln \left( \frac{a_{i}}{b_{j}}\right) \] onde \(a_{i}\) é o número de indivíduos que sofreu o evento no estudo \(j\) e \(b_{j}\) é o número de indivíduos que não sofreu o evento no estudo j, com \(j=1,2,\ldots,J\).

4.3 Incidência

A incidência mede o número de novos casos surgidos numa determinada população e num determinado intervalo de tempo. Ela também, é usualmente calculada em escala logarítmica.

\[ ln(Incid)_{j}= ln \left( \frac{d_{i}}{q_{j}}\right) \]

onde \(d_{i}\) são os eventos observados no estudo \(j\) e \(q_{j}\) unidades de tempo.

5 Vantagens da Metanálise

  • Aumenta o Poder Estatístico ao Combinar Estudos;
  • Melhora a Estimativa do Tamanho do Efeito;
  • Resolve Incertezas quando há Resultados Conflitantes;
  • Aumenta Generabilidade dos Estudos;

6 Modelo Estatístico

Em metanálise existem basicamente dois tipos de modelos que podem ser adotados, o modelo de efeitos fixos e o modelo de efeitos aleatórios (Sousa & Ribeiro, 2009).

6.1 Modelos de Efeitos Fixos

Referindo-nos ao modelo de efeito fixo é essencial compreender que este pressupõe que o efeito de interesse é o mesmo em todos os estudos e que as diferenças observadas entre eles são devidas apenas a erros amostrais (este erro também é referido na literatura como variabilidade dentro dos estudos).

De forma simplificada, é como se os métodos com efeitos fixos considerassem que a variabilidade entre os estudos ocorreu apenas pelo acaso e ignorassem a heterogeneidade entre eles (Moayyedi, 2004, apud Sousa; Ribeiro, 2009; Rodrigues; Ziegelmann, 2010).

Assim e se considerarmos J o número de estudos da meta-análise e \(Y_{j}\) o efeito observado no estudo j (com j = 1,2,…,J). O modelo de efeito fixo é dado por:

\[ Y_{j} = \theta_{M} + \epsilon_{j} \]

Onde, \(\epsilon_{j}\) é o erro aleatório do estudo j e \(\theta_{M}\) é o efeito comum a todos os estudos, denominado de medida meta-analítica.

De acordo com este modelo pressupõe-se que os erros aleatórios têm distribuição normal com média 0 e variância \(\sigma^{2}_{j}\) conhecida (esta variância é o quadrado do erro padrão estimado no estudo j) e é por este motivo que as medidas de efeito dos OR e RR são calculadas em escala logarítmica.

6.2 Modelos de Efeitos Aleatórios ou Randômicos

Para além dos modelos de efeitos fixos, como já foi referido anteriormente, existem ainda os modelos de efeitos aleatórios que pressupõem que o efeito de interesse não é o mesmo em todos os estudos. Neste sentido, consideram que os estudos que fazem parte da meta-análise formam uma amostra aleatória de uma população hipotética de estudos.

Contudo, apesar dos efeitos dos estudos não serem considerados iguais eles são conectados através de uma distribuição de probabilidade, geralmente suposta normal (Rodrigues, 2010; Rodrigues & Ziegelmann, 2010).

Por este fundamento criam resultados combinados com maior intervalo de confiança daí serem os mais recomendados. Todavia e apesar de terem essa vantagem, os métodos com efeitos aleatórios são criticados por atribuírem maior peso a estudos menores (Moayyedi, 2004, apud Sousa & Ribeiro, 2009).

O modelo de efeitos aleatórios é dado por:

\[ Y_{j} = \theta_{M} + \zeta_{j} + \epsilon_{j} \]

Onde, \(\epsilon_{j}\) é o erro aleatório do estudo j, \(\zeta_{j}\) é o efeito aleatório de cada estudo j e é a medida meta-analítica.

No modelo de efeitos aleatórios pressupõe-se que os erros aleatórios têm distribuição normal com média 0 e variância conhecida \(\sigma^{2}_{j}\) (mesma suposição do modelo de efeito fixo) e os efeitos aleatórios têm distribuição normal com média 0 e variância desconhecida \(\tau{2}\).

Neste modelo, a estimativa pontual para \(\theta_{M}\), similarmente consiste na média ponderada entre as medidas de efeito de cada estudo com a diferença da estimativa de \(\tau{2}\) influenciar na ponderação (Rodrigues, 2010; Rodrigues & Ziegelmann, 2010).

6.3 Teste de Heterogeneidade

A heterogeneidade em revisões sistemáticas com meta-análise consiste na variabilidade ou diferença entre estudos em relação à estimativa de efeitos e por isso o seu cálculo é fundamental para avaliar o grau de confiança dos resultados em situações de decisões incertas ou suposições sobre os dados e resultados usados (Clarke, 2001, apud Ramalho, 2005).

Em metanálise, quando a variabilidade entre os estudos não é apenas aleatória, dizemos que os estudos são heterogêneos. A avaliação sobre heterogeneidade tem papel importante na escolha dos modelos de metanálise e, portanto, deve ser realizada anates da escolha do modelo.

Em termos globais alguns autores dividem as heterogeneidades em três tipos (Craig & Smyth, 2004; Pocinho, 2008; Higgins & Green, 2011):

  • Heterogeneidade Estatística (diferenças nos resultados) – é a variação entre os resultados dos estudos, o que pode ser causado por: heterogeneidade clínica ou metodológica, escolha errada das medidas de efeito do tratamento ou pelo acaso;

  • Heterogeneidade Metodológica (diferenças nos desenhos dos estudos incluídos) – consiste nas variações relacionadas com a aleatorização, sigilo da alocação, cegamento, perdas/exclusões;

  • Heterogeneidade clínica (diferenças entre as características dos estudos, por exemplo: os participantes, intervenções ou resultados) – é a diferença real entre os estudos devido às suas características: participantes (critérios de inclusão e exclusão, diagnóstico, etc.), intervenções (tipo, dose, duração, etc.), desfechos clínicos (tipo, escala, ponto de coorte, duração do follow up, etc.).

É neste sentido que os testes estatísticos de heterogeneidade se revestem de uma desmedida importância na realização da meta-análise pois permitem inferir se a variabilidade observada nos resultados de um estudo (tamanho de efeito) é maior que o esperado devido ao acaso.

Na realização da meta-análise pode-se, recorrer a dois testes para determinar a existência de heterogeneidade, o Teste Q proposto por Cochran (1954) e/ou qualificada pela Estatística \(I^{2}\) definida por Higgins e Thompson (2002).

6.3.1 Teste Q de Cochram

O teste Q de Cochran traduz o método mais utilizado para avaliar a heterogeneidade e parte do pressuposto que os achados dos estudos primários são iguais (hipótese nula) e verifica se os dados encontrados refutam esta hipótese (Lau, Ioannidis & Schmid, 1998). Se a hipótese nula for confirmada, os estudos são considerados homogêneos (p-valor > 0,05).

As Hipóteses do Teste Q de Cochran

\(H_{0}\): os estudos são homogêneos \(H_{1}\): os estudos são heterogêneos

O teste Q de Cochran é, então, dado por:

\[ Q = \sum_{j=1}^{j} W_{j}(Y_{j}-\theta_{M})^{2} \]

Onde \(W_{j}\) é o peso do estudo j, \(Y_{j}\) é a medida de efeito do estudo j e \(\theta_{M}\) é a estimativa para a medida meta-analítica.

Como já foi supramencionado, o valor p calculado indica se a heterogeneidade é significativamente, ou não, diferente de zero. Um problema é que o valor de Q varia entre 0 e infinito, o que acarreta várias desvantagens (Rodrigues & Ziegelmann, 2010).

Segundo Higgins et al. (2003) apontam que em meta-análises que envolvem um número pequeno de estudos, o poder do teste pode ser baixo. Assim, ainda que tenhamos uma grande variação entre os estudos, o teste de Cochran pode não conseguir detectar a heterogeneidade devido ao número reduzido de estudos (o p-valor será erroneamente elevado).

Por outro lado, quando a meta-análise envolve um número elevado de estudos, o poder do teste será alto e o teste de Cochran pode evidenciar uma heterogeneidade entre os estudos “estatisticamente significante”, porém, clinicamente não importante.

6.3.2 Estatística \(I^{2}\)

Contudo, alguns autores argumentam que a heterogeneidade por menor que seja encontra-se sempre presente, pelo que não tem sentido testar apenas a sua presença, mas quantificá-la (Mulrow et al., 1997; Berwanger et al., 2007). E foi nesse sentido que foi desenvolvido o Teste de Inconsistência I² proposta por Higgins & Thompson (2002).

A estatística \(I^{2}\) é obtida a partir da estatística Q do teste de Cochran e do número j de estudos envolvidos na meta-análise e dada por:

\[ I^{2} = \frac{Q - (j-1)}{Q}\times 100\% \]

A estatística \(I^{2}\) pode variar de valores negativos até \(100\%\). Quando o valor for negativo ele é igualado a 0. O valor p de \(I^{2}\) é equivalente ao valor p de Q. A estatística \(I^{2}\) descreve a porcentagem de variabilidade do efeito que é devida à heterogeneidade e não por acaso (Dinnes et al., 2005).

Interpretativamente, uma escala com um valor de \(I^{2}\) próximo a \(0\%\) indica não heterogeneidade entre os estudos, próximo a \(25\%\) indica Baixa Heterogeneidade, próximo a \(50\%\) indica Heterogeneidade Moderada e próximo a \(75\%\) indica Alta heterogeneidade entre os estudos (Higgins et al. 2003; Rodrigues & Ziegelmann, 2010).

7 Exemplo Prático

7.1 Variáveis pra Metanálise

    1. author : autores
    1. year : ano
    1. Ne: número de pacientes do grupo esperimental(tratamento)
    1. Me: média
    1. Se: desvio-padrão
    1. Nc: número de pacientes do grupo controle
    1. Mc: média
    1. Sc: desvio-padrão

7.2 Base de Dados

# Pacotes Utilizados
library(meta)
library(metafor)
library(rmeta)
library(metacor) 
library(readxl)

# Definir Diretório de Trabalho
setwd("C:/Users/mario Dhiego/Documents/META_ANALISE_R")

# Leitura de Base de Dados
Meta1 <- read_excel("dataset1.xls")

7.3 Modelo de Metanálise

# Modelo de Metanálise

Meta_Analise1 <- metacont(Ne, Me, Se, Nc, Mc, Sc,studlab=paste(author, year),data=Meta1)

# Resultados
summary(Meta_Analise1)
##                          MD               95%-CI %W(common) %W(random)
## Boner 1988          -7.2300 [-21.1141;   6.6541]        2.8        3.1
## Boner 1989          -7.0000 [-16.2230;   2.2230]        6.4        6.6
## Chudry 1987        -18.4000 [-28.8023;  -7.9977]        5.0        5.3
## Comis 1993         -16.8000 [-27.7835;  -5.8165]        4.5        4.8
## DeBenedictis 1994a -13.0000 [-22.7710;  -3.2290]        5.7        5.9
## DeBenedictis 1994b -16.6000 [-35.8326;   2.6326]        1.5        1.6
## DeBenedictis 1995  -13.9000 [-27.6461;  -0.1539]        2.9        3.1
## Debelic 1986       -18.2500 [-30.6692;  -5.8308]        3.5        3.8
## Henriksen 1988     -29.7000 [-41.6068; -17.7932]        3.8        4.1
## konig 1987         -14.2000 [-25.0013;  -3.3987]        4.7        4.9
## Morton 1992        -22.5300 [-33.5382; -11.5218]        4.5        4.8
## Novembre 1994f     -13.0400 [-19.5067;  -6.5733]       13.0       12.1
## Novembre 1994s     -15.1000 [-23.8163;  -6.3837]        7.1        7.3
## Oseid 1995         -14.8000 [-23.7200;  -5.8800]        6.8        7.0
## Roberts 1985       -20.0000 [-36.9171;  -3.0829]        1.9        2.1
## Shaw 1985          -24.1600 [-33.1791; -15.1409]        6.7        6.9
## Todaro 1993        -13.4000 [-18.7042;  -8.0958]       19.3       16.5
## 
## Number of studies: k = 17
## Number of observations: o = 480
## 
##                            MD               95%-CI      z  p-value
## Common effect model  -15.5140 [-17.8435; -13.1845] -13.05 < 0.0001
## Random effects model -15.6470 [-18.1452; -13.1488] -12.28 < 0.0001
## 
## Quantifying heterogeneity:
##  tau^2 = 2.5162 [0.0000; 42.5899]; tau = 1.5862 [0.0000; 6.5261]
##  I^2 = 8.9% [0.0%; 45.3%]; H = 1.05 [1.00; 1.35]
## 
## Test of heterogeneity:
##      Q d.f. p-value
##  17.57   16  0.3496
## 
## Details on meta-analytical method:
## - Inverse variance method
## - Restricted maximum-likelihood estimator for tau^2
## - Q-Profile method for confidence interval of tau^2 and tau

7.4 Forest Plot Clássico

7.5 Forest Plot Outro layout

7.6 Funnil Plot Clássico

8 Referências Bibliográficas

AYRES, M.; AYRES JÚNIOR, M.; AYRES, D.L; SANTOS, A.S. BioEstat 5.0: aplicações estatísticas nas áreas das ciências biológicas e médicas. Belém: MCT; IDSM; CNPq, 2015.

BERWANGER, O.; SUZUMURA E. A.; BUEHLER, A.M.; OLIVEIRA, J.B. (2007). Como Avaliar Criticamente Revisões Sistemáticas e Metanálise? Revista Brasileira de Terapia Intensiva, 19(4): 475-480.

BREI, V.A; D’AVILA, L; CAMARGO, L.F; ENGELS, J. The influence of adptation and standardization of the marketing mixo on performance: a meta-anlysis. Brazilian Administration Review, 8, 266-287, 2011.

COCHRAME, W.G. The combination of estimates from different experiments. Biometrics 1954; 10: 101-129.

DERSIMONIAN, R; LAIRD, N. Meta-analysis in clinical trials. Controlled Clinical Trials. 1986; 7:177-88.

DINNES, J.; DEEKS J.; KIRBY, J; RODERICK, P. A methodological review of how heterogeneity has been examined in systematic reviews of diagnostic test accuracy. Health Technol Assess. 2005; 9 (12): 1-113.

Fletcher RH, Fletcher SW. Epidemiologia clínica: elementos essenciais; tradução Roberta Marchiori Martins. Porto Alegre, Artmed, 2006.

Glass GV. Primary, secondary, and meta-analysis of research. Educational Researcher. V. 5, p. 3-8, 1976.

HIGGINS, J.P.T.; THOMPSON, S.G. (2002). Quantifying heterogeneity in a metaanalysis. Stat Med., 21: 1539-58.

HIGGINS, J.P; THOMPSON, S.G; DEEKS, J.J; ALTMAN, D.G. Measuring inconsistency in meta-analyses. BMJ. 2003; 327: 557-60.

HIGGINS, J; GREEN, S, editors. Cochrane handbook for systematic reviews of interventions [Internet]. Version 5.1.0. Oxford: Cochrane Collaboration; c2011 [cited 2014 Aug 8]. Available from: www.cochrane-handbook.org.

LAU, J.; IOANNIDIS, J. P.; SCHMID, C. H. (1998). Summing up evidence: one answer is not always enough. Lancet; 351: 123-127. LIPSEY, M.W; WILSON, D.B. (2001). Practical Meta-Analysis. Beverly Hills, CA: SAGE.

MARTINEZ, E. Z. (2007). Metanálise de ensaios clínicos controlados aleatorizados: aspectos quantitativos. Medicina; 40 (2): 223-35. Ribeirão Preto.

MULROW, C.; LANGHORNE, P.; GRIMSHAW, J. (1997). Integrating heterogeneous pieces of evidence in systematic reviews. Ann Intern Med., 127: 989-995.

Pearson K. Report on certain enteric fever inoculation statistics. BMJ. 1904;3:1243-6. 3.

RAMALHO, A. (2005). Manual para redação de estudos e projetos de revisão sistemática com e sem metanálise. Coimbra: FORMASAU. ISBN 972-8485-54-9.

RODRIGUES, C.; ZIEGELMANN, P. (2010). Metanálise: um guia prático. Revista HCPA. 30(4): 435-446. ISSN: 1983-5485.

ROSS, J.S; TSE, T; ZARIN, DA; XU, H; ZHOU, L; KRUMHOLZ, H.M. Publication of NIH funded trials registered in ClinicalTrials.gov: cross sectional analysis. BMJ. 2012 Jan;344(d7292):1-10.

SOKAL, R.R; ROHLF, F.J. (1995). Biometry, 3 rd. Ed, W.H. Freeman and Company, New York.

VIECHBAUES, W. Meta-Analysis Package for R, 2009.

Whitehead A. Meta-analysis of controlled clinical trials. John Wiley & Sons. 2002.

Yates F, Cochran WG. The analysis of groups of experiments. The Journal of Agricultural Science. 1938;28(4):556-80.

LS0tDQp0aXRsZTogIioqTUVUQU7DgUxJU0U6IHVtIEd1aWEgUHLDoXRpY28qKiINCmF1dGhvcjoNCi0gbmFtZTogTcOhcmlvIERpZWdvIFZhbGVudGUNCi0gbmFtZTogQ2FybG9zIFBhaXjDo28NCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWScpYCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDogDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgaGlnaGxpZ2h0OiB0ZXh0bWF0ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdGhlbWU6IGNlcnVsZWFuDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDYNCiAgICB0b2NfZmxvYXQ6DQogICAgICBjb2xsYXBzZWQ6IHllcw0KICAgICAgc21vb3RoX3Njcm9sbDogeWVzDQogICAga2VlcF9tZDogeWVzDQogIHBkZl9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogJzYnDQppbnN0aXR1dGU6DQphYnN0cmFjdDogIkEgbWV0YW7DoWxpc2Ugw6kgdW1hIHTDqWNuaWNhIGVzdGF0w61zdGljYSB1dGlsaXphZGEgcGFyYSBjb21iaW5hciByZXN1bHRhZG9zIHByb3ZlbmllbnRlcyBkZSBkaWZlcmVudGVzIGVzdHVkb3MuIFBhcmEgaXN0bywgc8OjbyBkZXNjcml0b3MgYXMgbWVkaWRhcyBkZSBlZmVpdG8gdXRpbGl6YWRhcyBlbSBtZXRhbsOhbGlzZSBuYSDDoXJlYSBkYSBzYcO6ZGUsIGJlbSBjb21vIG9zIG1vZGVsb3MgZGUgZWZlaXRvcyBmaXhvIGUgZGUgZWZlaXRvcyBhbGVhdMOzcmlvcy4gTyBvYmpldGl2byBkZXN0ZSBndWlhIMOpIGFwcmVzZW50YXIgZGUgZm9ybWEgbWV0b2RvbMOzZ2ljYSBjb21vIHJlYWxpemFyIGUgaW50ZXJwcmV0YXIgdW1hIG1ldGFuw6FsaXNlIG5hcyBwZXNxdWlzYXMgY2zDrW5pY2FzLiINCi0tLQ0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCg0KDQoNCmBgYHs9aHRtbH0NCjxzdHlsZT4NCmJvZHl7dGV4dC1hbGlnbjoganVzdGlmeX0NCjwvc3R5bGU+DQpgYGANCg0KDQo6OjogcHJvZ3Jlc3MNCjo6OiB7LnByb2dyZXNzLWJhciBzdHlsZT0id2lkdGg6IDEwMCU7In0NCjo6Og0KOjo6DQoNCg0KIyAqKk1ldGFuw6FsaXNlKioNCiMjICoqSW50cm9kdcOnw6NvKioNCg0KQSBwZXNxdWlzYSDDqSBhbGdvIHJlY29ycmVudGUgZW0gdG9kYXMgYXMgw6FyZWFzIGUsIGhvamUgZW0gZGlhLCBjb20gYSBmYWNpbGlkYWRlIGRvcyBtZWlvcyBkZSBjb211bmljYcOnw6NvLCDDqSBwb3Nzw612ZWwgZW5jb250cmFyIGluw7ptZXJvcyBlc3R1ZG9zIHNvYnJlIGEgbWVzbWEgcXVlc3TDo28gZGUgcGVzcXVpc2EuIE5hIMOhcmVhIGRhIHNhw7pkZSwgb25kZSBzZSBwcmVjb25pemEgYSBtZWRpY2luYSBiYXNlYWRhIGVtIGV2aWTDqm5jaWFzLCBhIGlkw6lpYSDDqSBzZW1wcmUgdXRpbGl6YXIgYSBtZWxob3IgZXZpZMOqbmNpYSBkaXNwb27DrXZlbC4gVW1hIHF1ZXN0w6NvIHJlbGV2YW50ZSDDqSBhIGRldGVybWluYcOnw6NvIGRlIHF1YWwgw6kgYSBtZWxob3IgZXZpZMOqbmNpYSBkaXNwb27DrXZlbCBxdWFuZG8gaW7Dum1lcm9zIGVzdHVkb3Mgc29icmUgYSBtZXNtYSBxdWVzdMOjbyBkZSBwZXNxdWlzYSBlc3TDo28gZGlzcG9uw612ZWlzLiBQYXJlY2UgY29uc2Vuc28gcXVlIHVtYSByZXZpc8OjbyBzaXN0ZW3DoXRpY2EgZSBhIGNvbWJpbmHDp8OjbyBkb3MgcmVzdWx0YWRvcyBkb3MgZXN0dWRvcyByZXN1bHRhbnRlcyBkZXZlbSBmYXplciBwYXJ0ZSBkbyBwcm9jZXNzby4NCg0KVW1hIG1hbmVpcmEgc2ltcGxpc3RhIGRlIGNvbWJpbmFyIHJlc3VsdGFkb3MgZGUgdsOhcmlvcyBlc3R1ZG9zIMOpIGp1bnRhciBvcyBkYWRvcyBkb3MgZXN0dWRvcyBlIGFuYWxpc2FyIGNvbW8gc2UgZm9zc2VtIGluZm9ybWHDp8O1ZXMgcmV0aXJhZGFzIGRlIGFwZW5hcyB1bSBhbXBsbyBlc3R1ZG8uIFBvcsOpbSwgZXN0YSBtYW5laXJhIGRlc2NvbnNpZGVyYSBjb21wbGV0YW1lbnRlIGEgdmFyaWFiaWxpZGFkZSwgbyB0YW1hbmhvIGRlIGNhZGEgZXN0dWRvIGUsIG5vIGNhc28gZGUgZW5zYWlvcyBjbMOtbmljb3MsIG8gcHJpbmPDrXBpbyBkYSBhbGVhdG9yaXphw6fDo28uIEVzdGFzIGNhcmFjdGVyw61zdGljYXMgc8OjbyBkZSBleHRyZW1hIGltcG9ydMOibmNpYSB2aXN0byBzdWFzIGluZmx1w6puY2lhcyBub3MgcmVzdWx0YWRvcy4gRGVzdGEgZm9ybWEsIGEgbWFuZWlyYSBtYWlzIGFwcm9wcmlhZGEgw6kgdXRpbGl6YXIgdMOpY25pY2FzIGVzdGF0w61zdGljYXMgYWRlcXVhZGFzLiBFc3RhcyB0w6ljbmljYXMgc2Vyw6NvIGRldGFsaGFkYXMgbmVzdGUgZ3VpYSBwcsOhdGljbyBlIGVuZ2xvYmFtIG8gcXVlIMOpIGNvbmhlY2lkbyBuYSBsaXRlcmF0dXJhIGNvbW8gbWV0YW7DoWxpc2UgKFJvZHJpZ3VlcywgWmllZ2VsbWFubiwgMjAxMCkuDQoNCkEgcHJpbWVpcmEgbWV0YW7DoWxpc2UgZGEgaGlzdMOzcmlhIMOpIGF0cmlidcOtZGEgYW8gZXN0YXTDrXN0aWNvICoqS2FybCBQZWFyc29uKiouIEVtIDE5MDQsIFBlYXJzb24gY29tYmlub3UsIGF0cmF2w6lzIGRlIGNvcnJlbGHDp8O1ZXMsIG9zIGRhZG9zIGRlIGNpbmNvIGVzdHVkb3MgcGFyYSBleGFtaW5hciBvIGVmZWl0byBwcmV2ZW50aXZvIGRlIGlub2N1bGHDp8O1ZXMgY29udHJhIGZlYnJlIGVudMOpcmljYSAoUGVhcnNvbiwgMTkwMDQpLiBPcyBtb3Rpdm9zIHJlbGF0YWRvcyBwb3IgUGVhcnNvbiBwYXJhIGEgY29tYmluYcOnw6NvIGRlIGVzdHVkb3Mgc8OjbywgYWluZGEgaG9qZSwgYXMgcHJpbmNpcGFpcyByYXrDtWVzIHBhcmEgbyB1c28gZGEgbWV0YW7DoWxpc2UuIE8gcHJpbmNpcGFsIGFyZ3VtZW50byDDqSBxdWUgbXVpdG9zIGRvcyBlc3R1ZG9zIHPDo28gcGVxdWVub3MgcGFyYSBwZXJtaXRpciB1bWEgY29uY2x1c8OjbyBjb25macOhdmVsLCBmYXplbmRvIGNvbSBxdWUgbyB0YW1hbmhvIGRvIGVycm8gc2VqYSBncmFuZGUgZSBvIHBvZGVyIGRvIGVzdHVkbyBzZWphIGJhaXhvLg0KDQpFbSAxOTMxIGUgMTkzMiwgVGlwcGV0IGUgRmlzaGVyLCBhcHJlc2VudGFyYW0gbcOpdG9kb3MgcGFyYSBhIGNvbWJpbmHDp8OjbyBkZSB2YWxvcmVzIHAgKFdoaXRlaGVhZCwgMjAwMikuIEVtIDE5MzgsIFlhdGVzIGUgQ29jaHJhbiBjb25zaWRlcmFyYW0gYSBjb21iaW5hw6fDo28gZGUgZXN0aW1hdGl2YXMgYSBwYXJ0aXIgZGUgZGlmZXJlbnRlcyBleHBlcmltZW50b3MgYWdyw61jb2xhcyAoWWF0ZXM7IENvY2hyYW4sIDE5MzgpLiBBIHByaW1laXJhIG1ldGFuw6FsaXNlIHBhcmEgYXZhbGlhciBvIGVmZWl0byBkZSB1bWEgaW50ZXJ2ZW7Dp8OjbyB0ZXJhcMOqdXRpY2EgZm9pIHB1YmxpY2FkYSBlbSAxOTU1IChXaGl0ZWhlYWQsIDIwMDIpLiBOYSBkw6ljYWRhIGRlIDE5NzAsIGEgbWV0YW7DoWxpc2UgcGFzc291IGEgc2VyIHVzYWRhIG5hcyBjacOqbmNpYXMgc29jaWFpcywgcHJpbmNpcGFsbWVudGUgZW0gcGVzcXVpc2FzIGRlIGVkdWNhw6fDo28uIFBvcsOpbSwgbyB0ZXJtbyAibWV0YW7DoWxpc2UiIGFpbmRhIG7Do28gZXJhIHV0aWxpemFkby4NCg0KRm9pIGVtIDE5NzcsIHF1ZSBvIHRlcm1vICJtZXRhbsOhbGlzZSIgZm9pIHV0aWxpemFkbyBwZWxhIHByaW1laXJhIHZleiBlbSB1bSBhcnRpZ28gaW50aXR1bGFkbyAiUHJpbWFyeSwgc2Vjb25kYXJ5IGFuZCBtZXRhYW5hbHlzaXMgb2YgcmVzZWFyY2giIHBlbG8gcHNpY8OzbG9nbyBHZW5lIEdsYXNzIChHbGFzcywgMTk3NikuDQoNCkVtYm9yYSBvIGNvbmNlaXRvIGRlIE1ldGEtQW7DoWxpc2Ugc2VqYSBvcml1bmRvIGRlIHVtYSBlc2NvbGEgZGUgbWV0b2RvbG9naWEgZGVzZW52b2x2aWRhIHBvciBHbGFzcyBlbSAxOTc2LCBlc3R1ZG9zIGdlbsOpdGljb3Mgc29icmUgZ2Vuw7N0aXBvcyBlIGZlbsOzdGlwb3MgasOhIGFicmFuZ2lhbSBlc3NlIGNvbmNlaXRvLCBjb25mb3JtZSBkZXNjcml0byBwb3IgU29rYWwgZSBSb2hsZiAoMTk2OSksIGEgY29tYmluYcOnw6NvIGRlIHbDoXJpYXMgYW1vc3RyYXMgY29tIGluZm9ybWHDp8O1ZXMgc29icmUgbyBtZXNtbyBhc3N1bnRvLCBwYXJhIG9idGVyIGVzdGltYXRpdmFzIG1haXMgcHJlY2lzYXMgZGFzIHByb3BvcsOnw7VlcyBwYXJhbcOpdHJpY2FzLg0KDQpOYSDDoXJlYSBtw6lkaWNhLCBhIG1ldGFuw6FsaXNlIHBhc3NvdSBhIHNlciB1dGlsaXphZGEgY29tIG1haXMgZnJlcXXDqm5jaWEgbmEgZMOpY2FkYSBkZSAxOTgwLiBRdWVzdMO1ZXMgY2hhdmUgZGEgbWVkaWNpbmEgY29tbywgcG9yIGV4ZW1wbG8sIG8gdHJhdGFtZW50byBkZSBkb2Vuw6dhcyBkbyBjb3Jhw6fDo28gZSBkZSBjw6JuY2VyLCBmb3JhbSByZXNwb25kaWRhcyBjb20gYXV4w61saW8gZGEgbWV0YW7DoWxpc2UgKFdISVRFSEVBRCwgMjAwMikuDQoNCkVtIDE5OTMsIHVtYSByZWRlIGNvbXBvc3RhIGRlIGNsw61uaWNvcywgZXBpZGVtaW9sb2dpc3RhcyBlIG91dHJvcyBwcm9maXNzaW9uYWlzIGRlIHNhw7pkZSBmdW5kYXJhbSBvIENvY2hyYW5lIENvbGxhYm9yYXRpb24uIEVzdGEgb3JnYW5pemHDp8OjbyB0ZW0gcG9yIG9iamV0aXZvIGVsYWJvcmFyLCBtYW50ZXIgZSBkaXZ1bGdhciByZXZpc8O1ZXMgc2lzdGVtw6F0aWNhcyBkYSDDoXJlYSBkYSBzYcO6ZGUuDQoNCkRlc2RlIHN1YSBmdW5kYcOnw6NvIGVtIE94Zm9yZCwgbyBDZW50cm8gQ29jaHJhbmUgdGVtIGNyZXNjaWRvIHJhcGlkYW1lbnRlIGUgZGl2ZXJzb3MgY2VudHJvcyBmb3JhbSBmdW5kYWRvcyBuYSBFdXJvcGEsIEFtw6lyaWNhIGRvIE5vcnRlIGUgTGF0aW5hLCDDgWZyaWNhIGUgQXVzdHLDoWxpYSBjb20gY2VudGVuYXMgZGUgcGVzc29hcyBjb2xhYm9yYW5kbyBlbSBncnVwb3MgZGUgcmV2aXPDo28uDQoNCk5vIEJyYXNpbCwgbyBDZW50cm8gQ29jaHJhbmUgZm9pIGluYXVndXJhZG8gZW0gMTk5NiwgZW0gU8OjbyBQYXVsby4gUGFyYSBjb25oZWNlciBtYWlzIHNvYnJlIG8gQ2VudHJvIENvY2hyYW5lIGUgdXRpbGl6YXIgc2V1cyBtYXRlcmlhaXMgZGUgcGVzcXVpc2EsIMOpIHBvc3PDrXZlbCBhY2Vzc2FyIGEgcMOhZ2luYSBuYSBpbnRlcm5ldCA8aHR0cDovL3d3dy5jZW50cm9jb2NocmFuZWRvYnJhc2lsLm9yZy5ici8+LiBOZXN0YSBww6FnaW5hIHPDo28gZW5jb250cmFkb3MgbGlua3MgcGFyYSBvcyBvdXRyb3MgY2VudHJvcyBlIHN1YXMgYmlibGlvdGVjYXMgdmlydHVhaXMuDQoNCg0KOjo6IHByb2dyZXNzDQo6Ojogey5wcm9ncmVzcy1iYXIgc3R5bGU9IndpZHRoOiAxMDAlOyJ9DQo6OjoNCjo6Og0KDQojIyAqKkRlZmluacOnw6NvKioNCg0KTWV0YW7DoWxpc2Ugw6kgdW1hIHTDqWNuaWNhIGVzdGF0w61zdGljYSBhZGVxdWFkYSBwYXJhIGNvbWJpbmFyIHJlc3VsdGFkb3MgcHJvdmVuaWVudGVzIGRlIGRpZmVyZW50ZXMgZXN0dWRvcyBwcm9kdXppbmRvLCBhc3NpbSwgZXN0aW1hdGl2YXMgcXVlIHJlc3VtZW0gbyB0b2RvLCBjaGFtYWRhcyBkZSBlc3RpbWF0aXZhcyBtZXRhbmFsw610aWNhcy4NCg0KUGFyYSBxdWUgbyByZXN1bHRhZG8gZGUgdW1hIG1ldGFuw6FsaXNlIHRlbmhhIHNpZ25pZmljYWRvIGFwbGljYWRvLCBvcyBlc3R1ZG9zIHF1ZSBjb21ww7VlbSBvcyBkYWRvcyBkYSBtZXRhbsOhbGlzZSBkZXZlbSBzZXIgbyByZXN1bHRhZG8gZGUgdW1hIHJldmlzw6NvIHNpc3RlbcOhdGljYS4NCg0KVW1hIHJldmlzw6NvIHNpc3RlbcOhdGljYSBjb25zaXN0ZSBkZSB1bSBjb25qdW50byBkZSByZWdyYXMgcGFyYSBpZGVudGlmaWNhciBlc3R1ZG9zIHNvYnJlIHVtYSBkZXRlcm1pbmFkYSBxdWVzdMOjbyBlLCBlbSBzZWd1aWRhLCBzZWxlY2lvbmFyIHF1YWlzIGRlbGVzIHNlcsOjbyBpbmNsdcOtZG9zIG91IG7Do28gbmEgbWV0YW7DoWxpc2UuIFBhcmEgcXVlIHVtYSByZXZpc8OjbyBzaXN0ZW3DoXRpY2Egc2VqYSB2w6FsaWRhIGFsZ3VtYXMgcmVncmFzIGRldmVtIHNlciBzZWd1aWRhcyAoRmxldGNoZXIsIEZsZXRjaGVyLCAyMDA2KS4gTsOjbyBzw6NvIHJlY2VudGVzIGFzIHRlbnRhdGl2YXMgZGUgdW5pciBvcyByZXN1bHRhZG9zIGRlIGRpZmVyZW50ZXMgZXN0dWRvcy4NCg0KDQo6OjogcHJvZ3Jlc3MNCjo6OiB7LnByb2dyZXNzLWJhciBzdHlsZT0id2lkdGg6IDEwMCU7In0NCjo6Og0KOjo6DQoNCg0KDQoNCiMgKipFdGFwYSBkYSBNZXRhbsOhbGlzZSoqDQoNCk7Do28gZXhpc3RlIHVtIHJvdGVpcm8gY29uc2Vuc3VhbCBzb2JyZSBjb21vIHJlYWxpemFyIHVtYSBtZXRhLWFuw6FsaXNlLiBFbnRyZXRhbnRvLCBleGlzdGUgYWxndW1hIHVuaWZvcm1pZGFkZSBhIHJlc3BlaXRvIGRlIGV0YXBhcyBxdWUgZGV2ZW0gc2VyIHNlZ3VpZGFzIChJUldJRyBldCBhbCwgMTk5NDsgRElOTkVTIGV0IGFsLiwgMjAwNTsgU09VU0EsIFJJQkVJUk8sIDIwMDkpIHN1Z2VyZW0gYWxndW1hcyBldGFwYXMgbmVjZXNzw6FyaWFzLCByZXByZXNlbnRhZGFzIHBvcjoNCg0KDQo6OjogcHJvZ3Jlc3MNCjo6OiB7LnByb2dyZXNzLWJhciBzdHlsZT0id2lkdGg6IDEwMCU7In0NCjo6Og0KOjo6DQoNCiMjICoqRGVmaW5pciBvIE9iamV0aXZvKioNCg0KUGFyYSBkZWZpbmlyIGEgcXVlc3TDo28gcHJvYmxlbWEgb3UgbyBvYmpldGl2byBkbyB0cmFiYWxobywgbyBwZXNxdWlzYWRvciBkZXZlIHNlIHByZW9jdXBhciBlbSBkZWZpbmlyIHF1ZSDDqSBhIHZhcmnDoXZlbCBjaGF2ZSBvYmpldG8gZGEgYW7DoWxpc2Ugc2lzdGVtw6F0aWNhIGRhcyBkaWZlcmVudGVzIHBlc3F1aXNhcy4gQXNzaW0sIG8gcHJvYmxlbWEgZGV2ZSBkZW1vbnN0cmFyIHNlIG8gZXN0dWRvIG1ldGEtYW5hbMOtdGljbyBwcm9wb3N0byBpcmEgdHJhdGFyIGRlIHZlcmlmaWNhciBvcyBlZmVpdG9zIGFudGVjZWRlbnRlcywgZG9zIGNvbnNlcXVlbnRlcyBvdSBkZSBhbWJvcyBzb2JyZSBhIHZhcmnDoXZlbC1jaGF2ZS4gDQoNCg0KTyBwcm9ibGVtYSBkZSBwZXNxdWlzYSDDqSBvIG9iamV0aXZvIHByaW5jaXBhbCBkbyB0cmFiYWxobywgZ2VyYWxtZW50ZSBwcm9wb3N0byBkZSBmb3JtYSBpbnRlcnJvZ2F0aXZhLCBhcXVpbG8gcXVlIHNlIHByZXRlbmRlIHJlYWxpemFyLiBBaW5kYSBuYSBldGFwYSBkZSBkZWZpbmnDp8OjbyBkbyBvYmpldGl2bywgbyBwZXNxdWlzYWRvciB0YW1iw6ltIHBvZGUgYSBwYXJ0aXIgZGUgcmV2aXPDo28gZGEgdGVvcmlhLCBlbGFib3JhciBoaXDDs3Rlc2VzIHNvYnJlIG8gZWZlaXRvIHBvc2l0aXZvIG91IG5lZ2F0aXZvIGRhIHZhcmnDoXZlbC1jaGF2ZS4gDQoNCkEgZWxhYm9yYcOnw6NvIGRlIHVtIG91IG1haXMgaGlww7N0ZXNlcyDDqSBvcGNpb25hbCBwYXJhIGNhZGEgdHJhYmFsaG8gbWV0YS1hbmFsw610aWNvLiBUb2RhdmlhLCBzZSBmb3IgZWxhYm9yYWRhLCDDqSBpbXBvcnRhbnRlIHF1ZSBvIGF1dG9yIGFwcmVzZW50ZSBvcyBhcmd1bWVudG9zIHRlw7NyaWNvcyBxdWUganVzdGlmaXF1ZW0gb3UgbsOjbyB1bWEgYXNzb2NpYcOnw6NvIGVudHJlIHZhcmnDoXZlaXMgZSBvIHNlbnRpZG8gZGVzc2EgYWdyZWdhw6fDo28uICAgICAgICAgICANCg0KOjo6IHByb2dyZXNzDQo6Ojogey5wcm9ncmVzcy1iYXIgc3R5bGU9IndpZHRoOiAxMDAlOyJ9DQo6OjoNCjo6Og0KDQoNCiMjICoqQnVzY2FyIGFzIFB1YmxpY2HDp8O1ZXMgbmFzIEJhc2VzIGRlIERhZG9zKioNCg0KQXDDs3MgYSBleHBsaWNhw6fDo28gZGEgZGVmaW5pw6fDo28gZG8gb2JqZXRpdm8sIG8gcHLDs3hpbW8gcGFzc28gw6kgcGVzcXVpc2FyIGFzIGJhc2VzLCB1bWEgZGFzIHRhcmVmYXMgY3LDrXRpY2FzIGRhIG1ldGEtYW7DoWxpc2UuIFVtYSBib2EgYmFzZSBkZSBkYWRvcyBkZXZlIGRpc3BvbmliaWxpemFyIHBlc3F1aXNhcyBxdWUgcGFzc2FyYW0gcG9yIHVtIGNyaXZvIG1haXMgcHJvZnVuZG8gZW0gdGVybW9zIGRlIGF2YWxpYcOnw6NvIHBhcmEgYSBwdWJsaWNhw6fDo28sIHRhbCBjb21vIG8gc2lzdGVtYSBkb3VibGUgYmxpbmQgcmV2aWV3IChkdXBsYSByZXZpc8OjbyBjZWdhKS4gDQoNClB1YmxpY2HDp8O1ZXMgZW0gcGVyacOzZGljb3MgZSBjb25ncmVzc29zIHF1ZSBwb3NzdWFtIG1lbm9yIHJlY29uaGVjaW1lbnRvIGNpZW50aWZpY28gcG9kZW0gc2VyIGFkaWNpb25hZGFzIHBhcmEgZWxhYm9yYcOnw6NvIGRlIGFtb3N0cmFzIG1haW9yZXMsIG1hcyBkZXZlbSBzZXIgY29kaWZpY2FkYXMgcGFyYSBjb250cm9sZS4gUGFyYSBCZXJ3YW5nZXIgZXQgYWwgKDIwMDcpLCB1bWEgbWV0YS1hbsOhbGlzZSBkZXZlIHRlbnRhciBhIG3DoXhpbWEgZXZpZGVuY2lhIGV4aXN0ZW50ZSBzb2JyZSB1bSBhc3N1bnRvLiBQb3IgaXNzbywgZGV2ZS1zZSB1dGlsaXphciBhcyBiYXNlcyBkZSBkYWRvcyBtYWlzIHJlY29uaGVjaWRhcyBubyBzZXUgY2FtcG8gZGUgY29uaGVjaW1lbnRvLCBjb21vIGEgUFJPUVVFU1QgZSBhIEVCU0NPIHPDo28gcGFyYSBvIG1hcmtldGluZy4gDQoNCkEgZXN0cmF0w6lnaWEgZGUgYnVzY2EgZSBzZWxlw6fDo28gZGV2ZSBzZXIgZGVmaW5pZGEgYW50ZXMgZGEgY29uc3VsdGEgYXMgZGlmZXJlbnRlcyBiYXNlcyBkZSBkYWRvcywgYSBtYW50aWRhIGFvIGxvbmdvIGRhIHBlc3F1aXNhLCBwb2lzIHVtYSBidXNjYSBhbXBsYSBlIHNpc3RlbcOhdGljYSDDqSB1bSBkb3MgY3JpdMOpcmlvcyBkZSBxdWUgYXV4aWxpYW0gbmEgZ2FyYW50aWEgZGEgcXVhbGlkYWRlIGRhcyBwZXNxdWlzYXMgb2J0aWRhcy4gDQogICAgIA0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KICAgICANCiMjICoqRGVmaW5pciBvcyBDcml0w6lyaW9zIGRlIEJ1c2NhcioqDQoNCkVzdGEgw6kgdW1hIHRhcmVmYSBxdWUgdGFtYsOpbSB2YXJpYSBlbSBjYWRhIHBlc3F1aXNhLCBwb2lzIG8gcGVzcXVpc2Fkb3IgZGV2ZXJhIGNyaWFyIGNyaXTDqXJpb3MgZGUgYnVzY2EsIGRlIHNlbGXDp8OjbyBlIGRlIGluY2x1c8OjbyBkb3MgYXJ0aWdvcyBhIHNlcmVtIGludmVzdGlnYWRvcy4gDQoNCkEgY2xhcmV6YSBkYSBleHBvc2nDp8OjbyBkb3MgY3JpdMOpcmlvcyB0ZW0gZG9pcyBvYmpldGl2b3MgcHJpbmNpcGFpczogcGVybWl0aXIgcXVlIG8gcmV2aXNvciBhdmFsaWUgYSBxdWFsaWRhZGUgZGEgYnVzY2EgZSBjb25zZW50aXIgcXVlIGZ1dHVyb3MgcGVzcXVpc2Fkb3JlcyBhZG90ZW0gY3JpdMOpcmlvcyBzZW1lbGhhbnRlcyBwYXJhIG5vdmFzIHBlc3F1aXNhcy4gT3MgY3JpdMOpcmlvcyBkZSBleGNsdXPDo28gZGV2ZW0gc2VyIGRlc2NyaXRvcyBlIHJpZ29yb3NhbWVudGUgc2VndWlkb3MgcGVsbyBhbmFsaXN0YSAoQkVSV0FOR0VSIGV0IGFsLCAyMDA3KS4gRGVzdGEgZm9ybWEsIG8gbGVpdG9yIHBvZGUgZGVjaWRpciBzZSBvcyByZXN1bHRhZG9zIHBvc3N1ZW0gcmVsZXbDom5jaWEgZSBhcGxpY2FiaWxpZGFkZS4gDQoNCg0KOjo6IHByb2dyZXNzDQo6Ojogey5wcm9ncmVzcy1iYXIgc3R5bGU9IndpZHRoOiAxMDAlOyJ9DQo6OjoNCjo6Og0KDQojIyAqKlNlbGVjaW9uYXIgYXMgUGVzcXVpc2FzKioNCg0KQXDDs3MgdW1hIGFtcGxhIGJ1c2NhIGRhcyBwdWJsaWNhw6fDtWVzIGVtIGRpdmVyc29zIGJhc2VzIGRlIGRhZG9zIGNvbSBiYXNlIGVtIGNyaXTDqXJpb3MgY2xhcmEgZSBwcmVjaXNhbWVudGUgZGVmaW5pZG9zLCBvIHBlc3F1aXNhZG9yIGRldmUgc2UgcHJlb2N1cGFyIGVtIHNlbGVjaW9uYXIgYXBlbmFzIGFxdWVsYXMgcGVzcXVpc2FzIHF1ZSBwb3NzdWFtIGFzIGluZm9ybWHDp8O1ZXMgYnVzY2FkYXMuIE5lbSB0b2RvcyBvcyB0cmFiYWxob3Mgb2J0aWRvcyBwb3NzdWVtIGluZm9ybWHDp8O1ZXMgdXRlaXMgcXVlIHBvc3NhbSBzZXIgY29udmVydGlkYXMgZW0gdW1hIGVzdGF0w61zdGljYS4gDQoNCkEgbWV0YS1hbsOhbGlzZSBwb2RlIHNlciBlbnRlbmRpZGEgY29tbyB1bWEgZm9ybWEgZGUgcGVzcXVpc2EgbmEgcXVhbCBjYWRhIHBlc3F1aXNhIGluZGl2aWR1YWwgw6kgY29uc2lkZXJhZGEgY29tbyB1bSByZXNwb25kZW50ZS4gRGUgY2FkYSB1bWEgZGVsYXMgc8OjbyBleHRyYcOtZGFzIGFzIGluZm9ybWHDp8O1ZXMgcXVlIGludGVncmFyw6NvIHVtIGJhbmNvIGRlIGRhZG9zIGVzcGVjaWFsbWVudGUgY29uc3RydcOtZG9zIHBhcmEgY2FkYSBtZXRhLWFuw6FsaXNlLiANCg0KTmVzc2UgYmFuY28gZGUgZGFkb3MsIGNhZGEgZXN0dWRvIGVudHJhIGNvbW8gdW1hIGxpbmhhLCBlbnF1YW50byBhcyBpbmZvcm1hw6fDtWVzIGV4dHJhw61kYXMgZGUgY2FkYSBlc3R1ZG8gc8OjbyBhcyBjb2x1bmFzLiBFbSBzZWd1aWRhLCBlc3NlIGJhbmNvIGRlIGRhZG9zIMOpIGFuYWxpc2FkbyB0ZW5kbyBjb21vIG9iamV0aXZvIHByaW5jaXBhbCBvIGPDoWxjdWxvIGRvIHRhbWFuaG8gZG8gZWZlaXRvLiANCg0KDQo6OjogcHJvZ3Jlc3MNCjo6OiB7LnByb2dyZXNzLWJhciBzdHlsZT0id2lkdGg6IDEwMCU7In0NCjo6Og0KOjo6DQoNCg0KIyMgKipBdmFsaWFyIGEgSGV0ZXJvZ2VuZWlkYWRlKioNCg0Kw6kgbXVpdG8gcmFybyBxdWUgcGVzcXVpc2FzIGVzdHVkZW0gZSBtZW5zdXJlbSBhcyBtZXNtYXMgdmFyacOhdmVpcyBkZSBmb3JtYSBzZW1lbGhhbnRlLiBPdSBzZWphLCDDqSBtdWl0byBjb211bSBxdWUgaGFqYSBoZXRlcm9nZW5laWRhZGUgbm8gYmFuY28gZGUgZGFkb3MuIFBhcmEgZ2FyYW50aXIgYSBxdWFsaWRhZGUgZGFzIGFuYWxpc2VzLCBvIHBlc3F1aXNhZG9yIGRldmUgYXZhbGlhciBvcyBtb3Rpdm9zIGRhIHZhcmnDom5jaWEgZW50cmUgb3MgZXN0dWRvcywgc2UgZXN0YSB2YXJpYcOnw6NvIGZvaSBpbXByZXZpc3RhIGUgc2UgZm9pIGNhdXNhZGEgcG9yIGFzcGVjdG9zIG1ldG9kb2zDs2dpY29zLCB0YWlzIGNvbW8gbyB1c28gbcOpdG9kb3MgZXhwZXJpbWVudGFpcyBvdSBzdXZleXMsIGVzY2FsYXMgZGUgbWVkaWRhcyBkaWZlcmVudGVzLCBldGMuIChESU5ORVMgZXQgYWwuLCAyMDA1KS4gIA0KDQpDYWxjdWxhciBvcyByZXN1bHRhZG9zIGRlIGNhZGEgZXN0dWRvLCBjb21iaW5hbmRvIG9zIGVmZWl0b3M6IEVtIGVzdGF0w61zdGljYSwgdW0gdGFtYW5obyBkZSBlZmVpdG9zIChlZmZlY3Qtc2l6ZXMpIMOpIHVtYSBtZWRpZGEgZGEgZm9yw6dhIGRvIHJlbGFjaW9uYW1lbnRvIGVudHJlIGR1YXMgdmFyacOhdmVpcyBlbSB1bWEgcG9wdWxhw6fDo28uIE91IHNlamEsIMOpIGEgbWFnbml0dWRlIGRvIGVmZWl0byBxdWUgdW1hIHZhcmnDoXZlbCBleGVyY2Ugc29icmUgYSBvdXRyYSBlbSB0ZXJtb3MgZGUgYXNzb2NpYcOnw6NvLiBVbSBlZmZlY3Qtc2l6ZSBjYWxjdWxhZG8gYSBwYXJ0aXIgZG9zIGRhZG9zIMOpIHVtYSBlc3RhdMOtc3RpY2EgZGVzY3JpdGl2YSBxdWUgdmVpY3VsYSBhIG1hZ25pdHVkZSBlc3RpbWFkYSBkZSB1bSByZWxhY2lvbmFtZW50bywgc2VtIHF1ZSBzZSBmYcOnYSBxdWFscXVlciBkZWNsYXJhw6fDo28gc29icmUgYSBleGlzdMOqbmNpYSBkZSB1bWEgcmVsYcOnw6NvIGVzdGF0aXN0aWNhbWVudGUgc2lnbmlmaWNhbnRlIGVudHJlIGFzIHZhcmnDoXZlaXMgKEJSRUkgZXQgYWwuLCAyMDExKS4gDQoNCk8gb2JqZXRpdm8gZG8gcGVzcXVpc2Fkb3IgbnVtYSBtZXRhLWFuw6FsaXNlIMOpIHZlcmlmaWNhciBxdWFsIMOpIG8gdGFtYW5obyBkbyBlZmVpdG8gZW50cmUgZHVhcyB2YXJpw6F2ZWlzLiBFc3NlIHRhbWFuaG8gZG8gZWZlaXRvIMOpIGRldGVybWluYWRvIHBlbG8gZWZmZWN0LXNpemUsIHBvZGVuZG8gc2VyIGlkZW50aWZpY2Fkb3MgZGlmZXJlbnRlcyB0aXBvcyBuYSBsaXRlcmF0dXJhLCBmb3JuZWNpZG9zIHBlbG9zIGF1dG9yZXMuIEVtIG91dHJhcyBwYWxhdnJhcywgb3MgZWZmZWN0LXNpemVzIHPDo28gb2J0aWRvcyBhdHJhdsOpcyBkYSBjb252ZXJzw6NvIGRvcyBlZmVpdG9zIGRhcyBhc3NvY2lhw6fDtWVzLCBzZW50byB0IGRlIHN0dWRlbnQsIEYgZGEgYW7DoWxpc2UgZGUgdmFyacOibmNpYSwgRiBkYSBBTkNPVkEsIGRpZmVyZW7Dp2EgZGUgbcOpZGlhcyBhbnRlcyBlIGRlcG9pcyBkbyB0cmF0YW1lbnRvLCBRdWktcXVhZHJhZG8sIGNvcnJlbGHDp8OjbyBkZSBQZWFyc29uLCByIGUgb3V0cm9zIChMSVBTRVk7IFdJTFNPTiwgMjAxMSkuDQoNCg0KOjo6IHByb2dyZXNzDQo6Ojogey5wcm9ncmVzcy1iYXIgc3R5bGU9IndpZHRoOiAxMDAlOyJ9DQo6OjoNCjo6Og0KDQoNCiMjICoqQXZhbGlhciBvIEVmZWl0byBkYSBWYXJpYcOnw6NvKiogDQoNClVtYSBkYXMgbWVsaG9yZXMgb3DDp8O1ZXMgcGFyYSBhdmFsaWFyIG8gZWZlaXRvIGRhIHZhcmlhw6fDo28gw6kgdXNhciBvIGdyw6FmaWNvIGNoYW1hZG8gRk9SRVNUIFBMT1QuIE8gZ3LDoWZpY28gc2VydmUgcGFyYSBpbHVzdHJhciBhIGZvcsOnYSByZWxhdGl2YSBkb3MgZWZlaXRvcyBkZSB0cmF0YW1lbnRvIGVtIG3Dumx0aXBsb3MgZXN0dWRvcyBlIGEgcXVhbnRpZGFkZSBkZSB2YXJpYWJpbGlkYWRlIGRvcyBlZmVpdG9zLCBtb3N0cmFuZG8gZGVzZGUgZGUgcmVzdWx0YWRvcyBleHRyZW1hbWVudGUgbmVnYXRpdm9zIGEgZm9ydGVtZW50ZSBwb3NpdGl2b3MuIA0KDQpBc3NpbSwgZWxlcyBwZXJtaXRlbSB1bWEgYW7DoWxpc2UgdmlzdWFsIHRhbnRvIGRlIGVmZmVjdC1zaXplIHF1YW50byBkb3MgaW50ZXJ2YWxvcyBkZSBjb25maWFuw6dhIGZhY2lsaXRhbmRvIGEgY29tcGFyYcOnw6NvIHZpc3VhbCBkb3MgYWNoYWRvcyBkZSBkaWZlcmVudGVzIGVzdHVkb3MgKEJFUldBTkdFUiBldCBhbCwgMjAwNykuIA0KDQoNCk9zIHJlc3VsdGFkb3MgZG9zIGVmZWl0b3MgasOhIHRyYW5zZm9ybWFkb3MgZW0gciBvdSBkIHBvciB1bWEgbWV0YS1hbsOhbGlzZSBwb2RlbSBzZXIgYXZhbGlhZG9zIHBvciBtZWlvIGRlIGludGVydmFsb3MgZGUgY29uZmlhbsOnYSwgb3Ugc2VqYSwgYSBlc3RpbWF0aXZhIGRlIHVtIHBhcsOibWV0cm8gZGUgaW50ZXJlc3NlIG5hIHBvcHVsYcOnw6NvLiBPIG9iamV0aXZvIGRlIHVtIGludGVydmFsbyBkZSBjb25maWFuw6dhIMOpIG1vc3RyYXIgcXVhbCBhIHZhcmlhw6fDo28gZGEgbcOpZGlhIGRvcyBlc3R1ZG9zIGFib3JkYWRvcy4gQWzDqW0gZGlzc28sIGVsZSBwZXJtaXRlIGVzdGFiZWxlY2VyIHVtYSByZWZlcsOqbmNpYSwgY29tIGEgcXVhbCBwb2RlbSBzZXIgY29tcGFyYWRvcyBvcyByZXN1bHRhZG9zIGRlIGVzdHVkb3MgZnV0dXJvcy4gT3Ugc2VqYSwgYW8gaW52w6lzIGRlIGVzdGltYXIgbyBwYXLDom1ldHJvIHBvciBtZWlvIGRlIHVtIMO6bmljbyB2YWxvciwgbyBpbnRlcnZhbG8gZGUgY29uZmlhbsOnYSBzZXJ2ZSBwYXJhIG1vc3RyYXIgdW0gaW50ZXJ2YWxvIG9uZGUgYXF1ZWxlIHBhcsOibWV0cm8gcHJvdmF2ZWxtZW50ZSBzZSBlbmNvbnRyYSAoYSBwYXJ0aXIgZGUgdW0gbsOtdmVsIGRlIHNpZ25pZmljw6JuY2lhIGVzY29saGlkbyBwZWxvIHBlc3F1aXNhZG9yKS4gIA0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KDQojIyAqKkludGVycHJldGFyIG9zIFJlc3VsdGFkb3MqKiANCg0KQSDDumx0aW1hIGV0YXBhIGRhIHJlYWxpemHDp8OjbyBkZSB1bWEgbWV0YS1hbsOhbGlzZSDDqSBhIGludGVycHJldGHDp8OjbyBkb3MgcmVzdWx0YWRvcyBkZSB1bSBtb2RlbG8gZ2xvYmFsLiBSZWNvbWVuZGFtb3MgcXVlIHVtYSB0YWJlbGEgZmluYWwgZGUgbWV0YS1hbsOhbGlzZSBhcHJlc2VudGUsIHBlbG8gbWVub3MsIG9zIHNlZ3VpbnRlcyBkYWRvczoNCg0KDQotICAgKipOw7ptZXJvIGRlIEVzdHVkb3MqKjsgDQotICAgKipOw7ptZXJvIGRlIG9ic2VydmHDp8O1ZXMqKjsNCi0gICAqKlRhbWFuaG8gZGEgQW1vc3RyYSAoTikqKjsNCi0gICAqKlZhbG9yIGRlIHIgc2ltcGxlcyoqOyANCi0gICAqKlZhbG9yIGRlIFoqKjsNCi0gICAqKlZhbG9yIGRlIHIgY29ycmlnaWRvcyBwZWxhIGNvbmZpYWJpbGlkYWRlKio7DQotICAgKipWYWxvciBkZSByIGNvcnJpZ2lkb3MgcGVsYSBhbW9zdHJhKio7DQotICAgKipFcnJvIHBhZHLDo28gZG8gZWZmZWN0LXNpemUqKjsNCi0gIAkqKlZhbG9yIGRlIGQgZGUgQ29oZW4sIGNhbGN1bGFkbyBhIHBhcnRpciBkbyBlZmZlY3Qtc2l6ZSoqOw0KLSAgICoqSW50ZXJ2YWxvIGRlIGNvbmZpYW7Dp2EqKjsNCi0gICAqKlRlc3RlIGRlIGhvbW9nZW5laWRhZGUgKFEpKio7DQotICAgKioqVGVzdGUgScKyKiouICAgDQoNCg0KRGVudHJlIHRvZG9zIG9zIGRhZG9zIHByb3Bvc3RvcywgaW5kaXZpZHVhbG1lbnRlLCBvICoqZWZmZWN0LXNpemUqKiDDqSBhIG1lZGlkYSBtYWlzIGltcG9ydMOibmNpYSBwYXJhIGludGVycHJldGHDp8OjbyBkb3MgcmVzdWx0YWRvcywgcHJpbmNpcGFsbWVudGUgYSB2ZXJzw6NvIGRvIGVmZmVjdC1zaXplIHF1ZSBlc3TDoSBwb25kZXJhZGEgcGVsYSBhbW9zdHJhIGUgcGVsYSBjb25maWFiaWxpZGFkZSwgcG9pcyBlbGEgcGVybWl0ZSBhbyBwZXNxdWlzYWRvciBhdmFsaWFyIGEgZm9yw6dhIGRhIHJlbGHDp8OjbyBlbnRyZSBhcyB2YXJpw6F2ZWlzIHByaW5jaXBhaXMgZG8gZXN0dWRvLCBvdSBzZWphLCBhdmFsaWFyIHNlIGjDoSB1IG0gZWZlaXRvIGZyYWNvLCBtw6lkaW8gb3UgZm9ydGUsIGUgdGlyYXIgYXMgY29uY2x1c8O1ZXMgYSByZXNwZWl0byBkYSBmb3LDp2EgZGEgcmVsYcOnw6NvIGVudHJlIGFzIHZhcmnDoXZlaXMuDQoNCk5lc3NlIGNvbnRleHRvLCBvcyBwcmluY2lwYWlzIHBhc3NvcyBwYXJhIHJlYWxpemHDp8OjbyBkZSB1bWEgbWV0YS1hbsOhbGlzZSBzw6NvIHbDoXJpb3MsIGRldGFsaGFkb3MsIGUgcmVxdWVyZW0gcG9yIHBhcnRlIGRvIHBlc3F1aXNhZG9yIGNvbmhlY2ltZW50byBzdWJzdGFuY2lhbCBkZSBlc3RhdMOtc3RpY2EgZGVzY3JpdGl2YSBlIGluZmVyZW5jaWFsLCBhbMOpbSBkZSBkb23DrW5pbyBkZSB1bSBib20gc29mdHdhcmUuIA0KDQpBIHByaW5jaXBhbCBkZXN2YW50YWdlbSBkYSBtZXRhLWFuw6FsaXNlIMOpIHF1ZSBlc3RhIG7Do28gcG9kZSBjb21wZW5zYXIgYXMgbGltaXRhw6fDtWVzIGluZXJlbnRlcyBhb3MgZXN0dWRvcyBlbSBxdWUgc2UgYmFzZWlhLCB1bWEgdmV6LCBxdWUgZWxlcyBwcsOzcHJpb3MgdMOqbSBlcnJvcywgc2lzdGVtw6F0aWNvcyBlIGFsZWF0w7NyaW9zLCBxdWUgbsOjbyBzw6NvIGNvcnJpZ2lkb3MgcGVsYSBzdWEgYW7DoWxpc2UgY29uanVudGEsIHNlbmRvIHBlbG8gY29udHLDoXJpbywgYWRpdGl2b3MgKFJlc3NpbmcsIDIwMDkpLg0KDQoNCg0KOjo6IHByb2dyZXNzDQo6Ojogey5wcm9ncmVzcy1iYXIgc3R5bGU9IndpZHRoOiAxMDAlOyJ9DQo6OjoNCjo6Og0KDQoNCg0KIyAqKlZpc3VhbGl6YcOnw6NvIEdyw6FmaWNhKioNCiMjICoqQXNwZXRvcyBHZXJhaXMqKg0KDQpBIG1hbmVpcmEgbWFpcyB1c3VhbCBkZSBhcHJlc2VudGFyIG9zIHJlc3VsdGFkb3MgZGUgdW1hIE1ldGEtQW7DoWxpc2Ugw6kgbyBncsOhZmljbyBjaGFtYWRvICoqRm9yZXN0IFBsb3QgKGdyw6FmaWNvIGVtIGZsb3Jlc3RhKSoqLiBFc3RlIGdyw6FmaWNvIG1vc3RyYSBpbmZvcm1hw6fDtWVzIGluZGl2aWR1YWlzIGRvcyBlc3R1ZG9zIGUgb3MgcmVzdWx0YWRvcyBkYSBpbnRlcmHDp8Ojby4gIA0KDQpQYXJhIGNhZGEgZXN0dWRvIG8gZ3LDoWZpY28gYXByZXNlbnRhIGEgbWVkaWRhIGRlIGVmZWl0byBlIHNldSBpbnRlcnZhbG8gZGUgY29uZmlhbsOnYShJQyksIHNlbmRvIHF1ZSBhIG1lZGlkYSBkZSBlZmVpdG8gw6kgcmVwcmVzZW50YWRhIHBvciB1bSBzw61tYm9sbyBxdWUgcG9kZSwgcG9yIGV4ZW1wbG8sIHNlciB1bSAqKnF1YWRyYWRvKiosIHVtICoqY8OtcmN1bG8qKiwgdW0gKipsb3NhbmdvKiosIG91IG91dHJhIGZpZ3VyYSBkZXBlbmRlbmRvIGRvIHNvZnR3YXJlLiANCg0KTyB0YW1hbmhvIGRlc3RlIHPDrW1ib2xvIMOpIHByb3BvcmNpb25hbCBhbyBwZXNvIGRvIGVzdHVkbyBuYSBNZXRhLUFuw6FsaXNlLCBxdWFudG8gbWFpb3IgbyBwZXNvLCBtYWlvciBvIHRhbWFuaG8gZG8gc8OtbWJvbG8gZGEgbWVkaWRhIGRlIGVmZWl0by4gVGFtYsOpbSDDqSBleGliaWRvIGVtIHRvcm5vIGRhIGVzdGltYXRpdmEgZGEgbWVkaWRhIGRlIGVmZWl0byB1bWEgbGluaGEgaG9yaXpvbnRhbCBxdWUgw6kgbyByZXNwZWN0aXZvIGludGVydmFsbyBkZSBjb25maWFuw6dhIChJQyksIHNlbmRvIHF1ZSBxdWFudG8gbWFpb3IgZXN0YSBsaW5oYSwgbWFpb3Igw6kgYSB2YXJpYWJpbGlkYWRlIGRlbnRybyBkbyBlc3R1ZG8uDQoNCk5lc3NlIGNvbnRleHRvLCBvcyByZXN1bHRhZG9zIHJlcHJlc2VudGFkb3Mgw6AgZXNxdWVyZGEgZGEgbGluaGEgdmVydGljYWwgZXZpZGVuY2lhbSBxdWUgbyBldmVudG8gw6kgbWFpcyBwcm9wZW5zbyBhIG9jb3JyZXIgbm8gZ3J1cG8gZGUgQ29udHJvbGU7IGNvbnRyYXJpYW1lbnRlIG9zIHJlc3VsdGFkb3MgcmVwcmVzZW50YWRvcyDDoCBkaXJlaXRhIGRlc3RhIGxpbmhhIGV2aWRlbmNpYW0gcXVlIG8gZXZlbnRvIHRlbSBtYWlvciBwcm9wZW5zw6NvIGEgb2NvcnJlciBubyBncnVwbyBFeHBlcmltZW50YWwgb3UgVHJhdGFtZW50byAoUmFtYWxobywgMjAwNTsgTWFydGluZXosIDIwMDcpLg0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KDQojIyAqKkZvcmVzdCBQbG90KioNCg0KbyBncsOhZmljbyBlbSBmbG9yZXN0YSB0cmFkaWNpb25hbCDDqSBjb21wb3N0byBwb3IgNiBjb2x1bmFzIHF1ZSBzdW1hcml6YW0gb3MgcmVzdWx0YWRvcyBkYXMgZGl2ZXJzYXMgYWJvcmRhZ2Vucy4NCg0KQSBwcmltZWlyYSBjb2x1bmEgZG8gZ3LDoWZpY28gY29ycmVzcG9uZGUgw6AgaWRlbnRpZmljYcOnw6NvIGRvIGVzdHVkbyAobmVzdGUgY2FzbyByZXByZXNlbnRhZG8gcGVsbyBBdXRvciBlIHBlbGEgcmVmZXLDqm5jaWEgY29ycmVzcG9uZGVudGUpLCBzdWJkaXZpZG9zIGRlIGFjb3JkbyBjb20gYSBhYm9yZGFnZW0gdXRpbGl6YWRhIG5vcyBlbnNhaW9zIGNsw61uaWNvczogbcOpdG9kb3MgcHJhZ23DoXRpY29zLCBjb21wb3J0YW1lbnRhaXMgb3UgY29nbml0aXZvLWNvbXBvcnRhbWVudGFpcy4gDQoNCk5hIHNlZ3VuZGEgZSBuYSB0ZXJjZWlyYSBjb2x1bmFzIGVzdMOjbyByZXByZXNlbnRhZGFzIGFzIHByb3BvcsOnw7VlcyBkZSBldmVudG9zIGRlIGludGVyZXNzZSAocmVjYcOtZGEpIGVtIGNhZGEgZXN0dWRvIHBhcmEgb3MgZ3J1cG9zIGludGVydmVuw6fDo28gZSBjb250cm9sZSByZXNwZWN0aXZhbWVudGUuDQoNCk8gdmFsb3IgYXByZXNlbnRhZG8gbmEgcXVpbnRhIGNvbHVuYSBjb3JyZXNwb25kZSBhbyBwZXNvIGRlIGNhZGEgcHVibGljYcOnw6NvIHBhcmEgbyByZXN1bHRhZG8gYWdyZWdhZG8gZGEgbWV0YW7DoWxpc2UuIA0KDQpBIHF1YXJ0YSBlIGEgc2V4dGEgY29sdW5hcyBjb3JyZXNwb25kZW0gYW8gdGFtYW5obyBkbyBlZmVpdG8gZGUgY2FkYSBlc3R1ZG8sIGFxdWkgcmVwcmVzZW50YWRvIHBlbG8gUlIgZSBwb3Igc2V1cyByZXNwZWN0aXZvcyBpbnRlcnZhbG9zIGRlIGNvbmZpYW7Dp2EgKElDKSBkZSA5NSUsIGVzdGFuZG8gYXByZXNlbnRhZG8gZGUgZm9ybWEgZ3LDoWZpY2EgbmEgcXVhcnRhIGNvbHVuYSBlIGRlIGZvcm1hIG51bcOpcmljYSBuYSDDumx0aW1hLg0KDQoNCiMjIyAqKkNvbXBvbmVudGVzIGRvIEZvcmVzdCBQbG90KioNCg0KLSAgICoqUXVhZHJhZG8qKiA6IMOpIG8gUGVzbyBkZSBDYWRhIEVzdHVkbyAoYW1vc3RyYSk7DQotICAgKipJQyoqOiBJbnRlcnZhbG8gZGUgQ29uZmlhbsOnYSBwYXJhIGNhZGEgZXN0dWRvOw0KLSAgICoqTGluaGEgZGUgTnVsaWRhZGUqKjoNCi0gICAqKkxvc2FuZ28qKjogRXN0aW1hdGl2YSBkbyBFZmVpdG8gZG8gUmVzdWx0YWRvIENvbXBvc3RvLg0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KDQojIyAqKkZ1bm5pbCBQbG90KioNCg0KT3MgZGFkb3Mgc2VsZWNpb25hZG9zIHBhcmEgY29tcG9yIGEgbWV0YS1hbsOhbGlzZSBwb2RlbSBlc3RhciBpbmZsdWVuY2lhZG9zIHBlbG8gKipWacOpcyBkZSBQdWJsaWNhw6fDo28qKi4gRW50ZW5kZS1zZSBwb3IgdmnDqXMgZGUgcHVibGljYcOnw6NvIGEgdGVuZMOqbmNpYSBkZSBvcyByZXN1bHRhZG9zIHB1YmxpY2Fkb3MgZXN0YXJlbSBzaXN0ZW1hdGljYW1lbnRlIGRpZmVyZW50ZXMgZGEgcmVhbGlkYWRlLiANCg0KDQpBbsOhbGlzZSBkZSBlbnNhaW9zIGNsw61uaWNvcyBjb20gcHJvdG9jb2xvIHJlZ2lzdHJhZG8gbmEgYmFzZSBkZSByZWdpc3Ryb3MgKipDbGluaWNhbFRyaWFsLmdvdioqIHJldmVsb3UgcXVlIG1lbm9zIGRlIDcwJSBkb3MgZXN0dWRvcyBzw6NvIHB1YmxpY2Fkb3MgKFJPU1MgZXQgYWwuLCAyMDEyKS4gDQoNCg0KQSBuw6NvIHB1YmxpY2HDp8OjbyBkZSByZXN1bHRhZG9zIHBvZGUgc2VyIGRldmlkYSDDoCBkZWNpc8OjbyBkbyBhdXRvciBvdSBkbyBmaW5hbmNpYWRvciBkbyBlc3R1ZG8sIHF1ZSBuw6NvIHN1Ym1ldGVtIHBhcmEgcHVibGljYcOnw6NvIG9zIGFjaGFkb3MgZGVzZmF2b3LDoXZlaXMsIG91IGRvcyBlZGl0b3JlcyBkZSBwZXJpw7NkaWNvcyBjaWVudMOtZmljb3MsIHF1ZSBwb2RlbSBuw6NvIHRlciBpbnRlcmVzc2UgZW0gZGl2dWxnYXIgcmVzdWx0YWRvcyBuZWdhdGl2b3MgKHNlbSBzaWduaWZpY8OibmNpYSBlc3RhdMOtc3RpY2EpLiANCg0KTmFzIHJldmlzw7VlcyBzaXN0ZW3DoXRpY2FzLCBhIHByZXNlbsOnYSBkZXNzZSB2acOpcyBwb2RlIHNlciBpZGVudGlmaWNhZGEgcG9yIG1laW8gZGUgKipHcsOhZmljbyBkZSBGdW5pbCAoRnVubmlsIFBsb3QpKiogZSBkZSB0ZXN0ZXMgZXN0YXTDrXN0aWNvcyAoSGlnZ2luczsgR3JlZW4sIDIwMTEpLg0KDQpBIHV0aWxpemHDp8OjbyBkZXNzYXMgdMOpY25pY2FzIMOpIHJlY29tZW5kYWRhIHBhcmEgbWV0YS1hbsOhbGlzZXMgY29tIGRleiBlc3R1ZG9zIG91IG1haXMgZSBiYXNlaWEtc2UgZW0gcXVlc3TDtWVzIGRlIGVzdGltYXRpdmEgZSBkZSBwcmVjaXPDo28uIE9zIGVzdHVkb3MgcG91Y28gcHJlY2lzb3MsIGVtIGdlcmFsIHJlYWxpemFkb3MgY29tIGFtb3N0cmFzIGRlIHRhbWFuaG8gcGVxdWVubywgcG9kZXLDo28gZW5jb250cmFyIHJlc3VsdGFkb3MgcG9zaXRpdm9zIG91IG5lZ2F0aXZvcyAoZXN0YXRpc3RpY2FtZW50ZSBzaWduaWZpY2F0aXZvcyBvdSBuw6NvKSBwb3IgaW5mbHXDqm5jaWEgZG8gYWNhc28uDQoNCkVzdHVkb3MgZGUgbWFpb3IgcHJlY2lzw6NvLCBlbSBnZXJhbCBlbSBtZW5vciBuw7ptZXJvLCBlc3RhcmlhbSBtYWlzIHByw7N4aW1vcyBkbyB2YWxvciByZWFsIGUgc2l0dWFkb3MgbmEgcGFydGUgbWFpcyBlc3RyZWl0YSBkbyBncsOhZmljbyBkZSBmdW5pbC4gVGFtYsOpbSDDqSBwb3Nzw612ZWwgZXN0aW1hciBhIHByZXNlbsOnYSBkZXNzZSB2acOpcyBlbSBiYXNlcyBkZSByZWdpc3Ryb3MgZGUgZXN0dWRvcywgcGVsYSBidXNjYSBkYXF1ZWxlcyBxdWUgbsOjbyB2aWVyYW0gYSBzZXIgcHVibGljYWRvcy4NCg0KQ2FzbyBoYWphIGV2aWTDqm5jaWFzIGRlIHZpw6lzIGRlIHB1YmxpY2HDp8OjbyBzdWdlcmltb3M6DQoNCi0gICBSZXZpc2FyIHBsYW5pbGhhIGRlIGNvbGV0YSBkZSBkYWRvcywgYnVzY2FuZG8gcG9yIGVycm9zIG5hIGV4dHJhw6fDo28gZG9zIGRhZG9zIGRvcyBlc3R1ZG9zOw0KLSAgIEF2YWxpYXIgcXVlIG1lZGlkYSBkZSBlZmVpdG8gZXN0w6EgYWRlcXVhZGEgKGV4OiB1c28gZGUgZGlmZXJlbsOnYSBkZSBtw6lkaWFzIGVtIHZleiBkZSBkaWZlcmVuw6dhIHBhZHJvbml6YWRhIGRlIG3DqWRpYXMgZW0gbWV0YW7DoWxpc2VzIGRlIGRhZG9zIGNvbnTDrW51b3MpOw0KLSAgIFJlYWxpemFyIGFuYWxpc2UgZGUgc2Vuc2liaWxpZGFkZSBjb25zaWRlcmFuZG8gYSBleGNsdXPDo28gZGUgZXN0dWRvcyBjb20gcGVxdWVubyB0YW1hbmhvIGFtb3N0cmFsIGUgcG90ZW5jaWFpcyBvdXRsaWVycyBpZGVudGlmaWNhZG9zIG5hIGFuw6FsaXNlIHZpc3VhbDsNCi0gICBSZWFsaXphciBhanVzdGFtZW50byBwYXJhIHZpw6lzIGRlIHB1YmxpY2HDp8OjbyB1dGlsaXphbmRvIGFuw6FsaXNlIGRlIHRyaW0gYW5kIGZpbGwuDQoNCg0KDQo6OjogcHJvZ3Jlc3MNCjo6OiB7LnByb2dyZXNzLWJhciBzdHlsZT0id2lkdGg6IDEwMCU7In0NCjo6Og0KOjo6DQoNCiMgKipNZWRpZGFzIGRlIFJpc2NvL0VmZWl0byoqDQojIyAqKkNvbnRleHR1YWxpemHDp8OjbyoqDQoNCk1ldGFuw6FsaXNlIMOpIG8gdXNvIGRlIG3DqXRvZG9zIGVzdGF0w61zdGljb3MgcGFyYSBzdW1hcml6YXIgcmVzdWx0YWRvcyBkZSBlc3R1ZG9zIGluZGVwZW5kZW50ZXMuIENvbWJpbmFuZG8gaW5mb3JtYcOnw7VlcyBkZSB0b2RvcyBvcyBlc3R1ZG9zIHJlbGV2YW50ZXMsIGEgbWV0YW7DoWxpc2UgcG9kZSBlc3RpbWFyIG9zIGVmZWl0b3MgZGUgdW1hIGRldGVybWluYWRhIGludGVydmVuw6fDo28gZGUgZm9ybWEgbWFpcyBwcmVjaXNhIGRvIHF1ZSBjYWRhIGVzdHVkbyBpbmRpdmlkdWFsbWVudGUuICBQYXJhIGEgZWxhYm9yYcOnw6NvIGRlIHVtYSByZXZpc8OjbyBzaXN0ZW3DoXRpY2EsIMOpIHBvc3PDrXZlbCB0cmFiYWxoYXIgY29tIGRhZG9zIGRlIGRpdmVyc2FzIG5hdHVyZXphcywgY29udHVkbywgcGFyYSBwcm9jZWRlciBjb20gYSBhYm9yZGFnZW0gbWV0YS1hbmFsw610aWNhLCBvIHJlc3VsdGFkbyBmaW5hbCBkZSBjYWRhIGVzdHVkbyBkZXZlIHNlciBleHByZXNzbyBlbSB1bWEgbWVkaWRhIHBhZHJvbml6YWRhLCBkZW5vbWluYWRhICoqdGFtYW5obyBkbyBlZmVpdG8qKi4NCg0KTWV0YW7DoWxpc2VzIHF1ZSBjb25zaWRlcmFtICoqZGVzZmVjaG9zIGJpbsOhcmlvcyh2YXJpw6F2ZWwgZGljb3TDtG1pY2EpKiogc8OjbyBhcyBtYWlzIGNvbXVucy4gUGFyYSBjYWRhIGVzdHVkbyBpbmRpdmlkdWFsIMOpIGNhbGN1bGFkYSB1bWEgbWVzbWEgbWVkaWRhIGRlIGFzc29jaWHDp8Ojbywgc2VuZG8gbWFpcyBmcmVxw7xlbnRlIG8gdXNvIGRvICoqUmlzY28gUmVsYXRpdm8gKFJSKSoqIG91IGRhICoqUmF6w6NvIGRlIENoYW5jZXMgKG9kZHMgcmF0aW8g4oCTIE9SKSoqLCBxdWUgZXhwcmVzc2Fyw6NvIG8gdGFtYW5obyBkbyBlZmVpdG8uIEFww7NzLCBwcm9jZWRlLXNlIGNvbSBhIGFncmVnYcOnw6NvIGRhcyBtZWRpZGFzIGEgcGFydGlyIGRhIHBvbmRlcmHDp8OjbyBkb3MgcmVzdWx0YWRvcyBkb3MgZXN0dWRvcyBpbmRpdmlkdWFpcy4gVW1hIHZleiBvYnRpZG9zIGVzc2VzIGRhZG9zLCDDqSBwb3Nzw612ZWwgY2FsY3VsYXIgbWVkaWRhcyBkZSBpbXBhY3RvIGUgYmVuZWbDrWNpbywgY29tbyBvICoqTsO6bWVybyBOZWNlc3PDoXJpbyBwYXJhIFRyYXRhciAoTk5UKSoqLCBhc3NpbSBjb21vIGVtIHF1YWxxdWVyIGVuc2FpbyBjbMOtbmljbyBpbmRpdmlkdWFsLg0KDQpQYXJhICoqRGFkb3MgQ29udMOtbnVvcyoqLCB1dGlsaXphLXNlIGEgZGlmZXJlbsOnYSBwb25kZXJhZGEgZGFzIG3DqWRpYXMgKCoqd2VpZ2h0ZWQgbWVhbiBkaWZmZXJlbmNlKiosIG91IHNpbXBsZXNtZW50ZSwgKiptZWFuIGRpZmZlcmVuY2Ug4oCTIE1EKiopIGVudHJlIG9zIGRvaXMgZ3J1cG9zIGRlIGNvbXBhcmHDp8OjbyBxdWFuZG8gcG9zc3XDrW1vcyBhcyBtZWRpZGFzIGVtIHVtYSBtZXNtYSBlc2NhbGEuIFF1YW5kbyBhcyBtZW5zdXJhw6fDtWVzIHPDo28gcmVhbGl6YWRhcyBlbSBlc2NhbGFzIGRpc3RpbnRhcywgc2VtIGEgcG9zc2liaWxpZGFkZSBkZSBjb252ZXJzw6NvIMOgIHVtYSBtZXNtYSB1bmlkYWRlIChwb3IgZXhlbXBsbywgdGVzdGVzIHBzaWNvbcOpdHJpY29zIGRpZmVyZW50ZXMgcGFyYSBhdmFsaWFyIHVtIG1lc21vIGVzdGFkbyBkZSBzYcO6ZGUpLCB1dGlsaXphLXNlIGEgZGlmZXJlbsOnYSBwYWRyb25pemFkYSBkYXMgbcOpZGlhcyAoc3RhbmRhcml6ZWQgbWVhbiBkaWZmZXJlbmNlIOKAkyBTTUQpLCBxdWUgY29uc2lzdGUgbmEgZGl2aXPDo28gZGEgZGlmZXJlbsOnYSBkYXMgbcOpZGlhcyBkb3MgZG9pcyBncnVwb3MgcGVsbyBkZXN2aW8gcGFkcsOjbyBjb211bSBhIGVsZXMsIGdlcmFuZG8gYXNzaW0gdW0gdmFsb3IgY29ycmVzcG9uZGVudGUgYSBkaWZlcmVuw6dhIGVtIGRlc3Zpb3MgcGFkcsO1ZXMgZW50cmUgYXMgZHVhcyBpbnRlcnZlbsOnw7VlcyBhdmFsaWFkYXMuDQoNCg0KOjo6IHByb2dyZXNzDQo6Ojogey5wcm9ncmVzcy1iYXIgc3R5bGU9IndpZHRoOiAxMDAlOyJ9DQo6OjoNCjo6Og0KDQoNCiMjICoqT2RkcyBvdSBDaGFuY2UqKg0KDQpBcyBtZWRpZGFzIGRlIGVmZWl0byBtYWlzIHV0aWxpemFkYXMgcGFyYSBncnVwb3Mgc8OjbyBvICoqb2RkcyByYXRpbyoqIGUgYSAqKmluY2lkw6puY2lhKiouDQoNClBvciBkZWZpbmnDp8OjbyBvZGRzIMOpIGEgcmF6w6NvIGVudHJlIGEgcHJvYmFiaWxpZGFkZSBkZSBvIGV2ZW50byBvY29ycmVyIGUgYSBwcm9iYWJpbGlkYWRlIGRvIGV2ZW50byBuw6NvIG9jb3JyZXIgcXVlLCBtYXRlbWF0aWNhbWVudGUsIMOpIGVxdWl2YWxlbnRlIGE3IHJhesOjbyBlbnRyZSBvIG7Dum1lcm8gZGUgZXZlbnRvcyBlIG8gbsO6bWVybyBkZSBuw6NvIGV2ZW50b3MuDQoNCiQkIGxuKE9kZHMpX3tqfT0gbG4gXGxlZnQoIFxmcmFje2Ffe2l9fXtiX3tqfX1ccmlnaHQpICAkJA0Kb25kZSAkYV97aX0kIMOpIG8gbsO6bWVybyBkZSBpbmRpdsOtZHVvcyBxdWUgc29mcmV1IG8gZXZlbnRvIG5vIGVzdHVkbyAkaiQgZSAkYl97an0kIMOpIG8gbsO6bWVybyBkZSBpbmRpdsOtZHVvcyBxdWUgbsOjbyBzb2ZyZXUgbyBldmVudG8gbm8gZXN0dWRvIGosIGNvbSAkaj0xLDIsXGxkb3RzLEokLiANCg0KDQo6OjogcHJvZ3Jlc3MNCjo6OiB7LnByb2dyZXNzLWJhciBzdHlsZT0id2lkdGg6IDEwMCU7In0NCjo6Og0KOjo6DQoNCg0KIyMgKipJbmNpZMOqbmNpYSoqDQoNCkEgaW5jaWTDqm5jaWEgbWVkZSBvIG7Dum1lcm8gZGUgbm92b3MgY2Fzb3Mgc3VyZ2lkb3MgbnVtYSBkZXRlcm1pbmFkYSBwb3B1bGHDp8OjbyBlIG51bSBkZXRlcm1pbmFkbyBpbnRlcnZhbG8gZGUgdGVtcG8uIEVsYSB0YW1iw6ltLCDDqSB1c3VhbG1lbnRlIGNhbGN1bGFkYSBlbSBlc2NhbGEgbG9nYXLDrXRtaWNhLg0KDQokJCBsbihJbmNpZClfe2p9PSBsbiBcbGVmdCggXGZyYWN7ZF97aX19e3Ffe2p9fVxyaWdodCkgICQkDQoNCm9uZGUgJGRfe2l9JCBzw6NvIG9zIGV2ZW50b3Mgb2JzZXJ2YWRvcyBubyBlc3R1ZG8gJGokIGUgJHFfe2p9JCB1bmlkYWRlcyBkZSB0ZW1wby4NCg0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KDQojICoqVmFudGFnZW5zIGRhIE1ldGFuw6FsaXNlKioNCg0KLSAgIEF1bWVudGEgbyBQb2RlciBFc3RhdMOtc3RpY28gYW8gQ29tYmluYXIgRXN0dWRvczsNCi0gICBNZWxob3JhIGEgRXN0aW1hdGl2YSBkbyBUYW1hbmhvIGRvIEVmZWl0bzsNCi0gICBSZXNvbHZlIEluY2VydGV6YXMgcXVhbmRvIGjDoSBSZXN1bHRhZG9zIENvbmZsaXRhbnRlczsNCi0gICBBdW1lbnRhIEdlbmVyYWJpbGlkYWRlIGRvcyBFc3R1ZG9zOw0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KDQojICoqTW9kZWxvIEVzdGF0w61zdGljbyoqDQoNCkVtIG1ldGFuw6FsaXNlIGV4aXN0ZW0gYmFzaWNhbWVudGUgZG9pcyB0aXBvcyBkZSBtb2RlbG9zIHF1ZSBwb2RlbSBzZXIgYWRvdGFkb3MsIG8gbW9kZWxvIGRlIGVmZWl0b3MgZml4b3MgZSBvIG1vZGVsbyBkZSBlZmVpdG9zIGFsZWF0w7NyaW9zIChTb3VzYSAmIFJpYmVpcm8sIDIwMDkpLg0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KDQoNCiMjICoqTW9kZWxvcyBkZSBFZmVpdG9zIEZpeG9zKioNCg0KUmVmZXJpbmRvLW5vcyBhbyBtb2RlbG8gZGUgZWZlaXRvIGZpeG8gw6kgZXNzZW5jaWFsIGNvbXByZWVuZGVyIHF1ZSBlc3RlIHByZXNzdXDDtWUgcXVlIG8gZWZlaXRvIGRlIGludGVyZXNzZSDDqSBvIG1lc21vIGVtIHRvZG9zIG9zIGVzdHVkb3MgZSBxdWUgYXMgZGlmZXJlbsOnYXMgb2JzZXJ2YWRhcyBlbnRyZSBlbGVzIHPDo28gZGV2aWRhcyBhcGVuYXMgYSBlcnJvcyBhbW9zdHJhaXMgKGVzdGUgZXJybyB0YW1iw6ltIMOpIHJlZmVyaWRvIG5hIGxpdGVyYXR1cmEgY29tbyB2YXJpYWJpbGlkYWRlIGRlbnRybyBkb3MgZXN0dWRvcykuIA0KDQpEZSBmb3JtYSBzaW1wbGlmaWNhZGEsIMOpIGNvbW8gc2Ugb3MgbcOpdG9kb3MgY29tIGVmZWl0b3MgZml4b3MgY29uc2lkZXJhc3NlbSBxdWUgYSB2YXJpYWJpbGlkYWRlIGVudHJlIG9zIGVzdHVkb3Mgb2NvcnJldSBhcGVuYXMgcGVsbyBhY2FzbyBlIGlnbm9yYXNzZW0gYSBoZXRlcm9nZW5laWRhZGUgZW50cmUgZWxlcyAoTW9heXllZGksIDIwMDQsIGFwdWQgU291c2E7IFJpYmVpcm8sIDIwMDk7IFJvZHJpZ3VlczsgWmllZ2VsbWFubiwgMjAxMCkuDQoNCkFzc2ltIGUgc2UgY29uc2lkZXJhcm1vcyBKIG8gbsO6bWVybyBkZSBlc3R1ZG9zIGRhIG1ldGEtYW7DoWxpc2UgZSAkWV97an0kIG8gZWZlaXRvIG9ic2VydmFkbyBubyBlc3R1ZG8gaiAoY29tIGogPSAxLDIsLi4uLEopLiBPIG1vZGVsbyBkZSBlZmVpdG8gZml4byDDqSBkYWRvIHBvcjogIA0KDQoNCg0KJCQgWV97an0gPSBcdGhldGFfe019ICsgXGVwc2lsb25fe2p9ICQkDQoNCk9uZGUsICRcZXBzaWxvbl97an0kIMOpIG8gZXJybyBhbGVhdMOzcmlvIGRvIGVzdHVkbyBqIGUgJFx0aGV0YV97TX0kIMOpIG8gZWZlaXRvIGNvbXVtIGEgdG9kb3Mgb3MgZXN0dWRvcywgZGVub21pbmFkbyBkZSBtZWRpZGEgbWV0YS1hbmFsw610aWNhLiANCg0KRGUgYWNvcmRvIGNvbSBlc3RlIG1vZGVsbyBwcmVzc3Vww7VlLXNlIHF1ZSBvcyBlcnJvcyBhbGVhdMOzcmlvcyB0w6ptIGRpc3RyaWJ1acOnw6NvIG5vcm1hbCBjb20gbcOpZGlhIDAgZSB2YXJpw6JuY2lhICRcc2lnbWFeezJ9X3tqfSQgY29uaGVjaWRhIChlc3RhIHZhcmnDom5jaWEgw6kgbyBxdWFkcmFkbyBkbyBlcnJvIHBhZHLDo28gZXN0aW1hZG8gbm8gZXN0dWRvIGopIGUgw6kgcG9yIGVzdGUgbW90aXZvIHF1ZSBhcyBtZWRpZGFzIGRlIGVmZWl0byBkb3MgT1IgZSBSUiBzw6NvIGNhbGN1bGFkYXMgZW0gZXNjYWxhIGxvZ2Fyw610bWljYS4gDQoNCg0KOjo6IHByb2dyZXNzDQo6Ojogey5wcm9ncmVzcy1iYXIgc3R5bGU9IndpZHRoOiAxMDAlOyJ9DQo6OjoNCjo6Og0KDQoNCiMjICoqTW9kZWxvcyBkZSBFZmVpdG9zIEFsZWF0w7NyaW9zIG91IFJhbmTDtG1pY29zKioNCg0KDQpQYXJhIGFsw6ltIGRvcyBtb2RlbG9zIGRlIGVmZWl0b3MgZml4b3MsIGNvbW8gasOhIGZvaSByZWZlcmlkbyBhbnRlcmlvcm1lbnRlLCBleGlzdGVtIGFpbmRhIG9zIG1vZGVsb3MgZGUgZWZlaXRvcyBhbGVhdMOzcmlvcyBxdWUgcHJlc3N1cMO1ZW0gcXVlIG8gZWZlaXRvIGRlIGludGVyZXNzZSBuw6NvIMOpIG8gbWVzbW8gZW0gdG9kb3Mgb3MgZXN0dWRvcy4gTmVzdGUgc2VudGlkbywgY29uc2lkZXJhbSBxdWUgb3MgZXN0dWRvcyBxdWUgZmF6ZW0gcGFydGUgZGEgbWV0YS1hbsOhbGlzZSBmb3JtYW0gdW1hIGFtb3N0cmEgYWxlYXTDs3JpYSBkZSB1bWEgcG9wdWxhw6fDo28gaGlwb3TDqXRpY2EgZGUgZXN0dWRvcy4gDQoNCkNvbnR1ZG8sIGFwZXNhciBkb3MgZWZlaXRvcyBkb3MgZXN0dWRvcyBuw6NvIHNlcmVtIGNvbnNpZGVyYWRvcyBpZ3VhaXMgZWxlcyBzw6NvIGNvbmVjdGFkb3MgYXRyYXbDqXMgZGUgdW1hIGRpc3RyaWJ1acOnw6NvIGRlIHByb2JhYmlsaWRhZGUsIGdlcmFsbWVudGUgc3Vwb3N0YSBub3JtYWwgKFJvZHJpZ3VlcywgMjAxMDsgUm9kcmlndWVzIFwmIFppZWdlbG1hbm4sIDIwMTApLg0KDQpQb3IgZXN0ZSBmdW5kYW1lbnRvIGNyaWFtIHJlc3VsdGFkb3MgY29tYmluYWRvcyBjb20gbWFpb3IgaW50ZXJ2YWxvIGRlIGNvbmZpYW7Dp2EgZGHDrSBzZXJlbSBvcyBtYWlzIHJlY29tZW5kYWRvcy4gVG9kYXZpYSBlIGFwZXNhciBkZSB0ZXJlbSBlc3NhIHZhbnRhZ2VtLCBvcyBtw6l0b2RvcyBjb20gZWZlaXRvcyBhbGVhdMOzcmlvcyBzw6NvIGNyaXRpY2Fkb3MgcG9yIGF0cmlidcOtcmVtIG1haW9yIHBlc28gYSBlc3R1ZG9zIG1lbm9yZXMgKE1vYXl5ZWRpLCAyMDA0LCBhcHVkIFNvdXNhIFwmIFJpYmVpcm8sIDIwMDkpLiAgDQoNCk8gbW9kZWxvIGRlIGVmZWl0b3MgYWxlYXTDs3Jpb3Mgw6kgZGFkbyBwb3I6DQoNCg0KJCQgWV97an0gPSBcdGhldGFfe019ICsgIFx6ZXRhX3tqfSArIFxlcHNpbG9uX3tqfSAkJA0KDQoNCk9uZGUsICRcZXBzaWxvbl97an0kIMOpIG8gZXJybyBhbGVhdMOzcmlvIGRvIGVzdHVkbyBqLCAkXHpldGFfe2p9JCDDqSBvIGVmZWl0byBhbGVhdMOzcmlvIGRlIGNhZGEgZXN0dWRvIGogZSAgw6kgYSBtZWRpZGEgbWV0YS1hbmFsw610aWNhLiANCg0KTm8gbW9kZWxvIGRlIGVmZWl0b3MgYWxlYXTDs3Jpb3MgcHJlc3N1cMO1ZS1zZSBxdWUgb3MgZXJyb3MgYWxlYXTDs3Jpb3MgdMOqbSBkaXN0cmlidWnDp8OjbyBub3JtYWwgY29tIG3DqWRpYSAwIGUgdmFyacOibmNpYSBjb25oZWNpZGEgJFxzaWdtYV57Mn1fe2p9JCAobWVzbWEgc3Vwb3Npw6fDo28gZG8gbW9kZWxvIGRlIGVmZWl0byBmaXhvKSBlIG9zIGVmZWl0b3MgYWxlYXTDs3Jpb3MgdMOqbSBkaXN0cmlidWnDp8OjbyBub3JtYWwgY29tIG3DqWRpYSAwIGUgdmFyacOibmNpYSBkZXNjb25oZWNpZGEgJFx0YXV7Mn0kLiANCg0KDQpOZXN0ZSBtb2RlbG8sIGEgZXN0aW1hdGl2YSBwb250dWFsIHBhcmEgJFx0aGV0YV97TX0kLCBzaW1pbGFybWVudGUgY29uc2lzdGUgbmEgbcOpZGlhIHBvbmRlcmFkYSBlbnRyZSBhcyBtZWRpZGFzIGRlIGVmZWl0byBkZSBjYWRhIGVzdHVkbyBjb20gYSBkaWZlcmVuw6dhIGRhIGVzdGltYXRpdmEgZGUgJFx0YXV7Mn0kIGluZmx1ZW5jaWFyIG5hIHBvbmRlcmHDp8OjbyAoUm9kcmlndWVzLCAyMDEwOyBSb2RyaWd1ZXMgJiBaaWVnZWxtYW5uLCAyMDEwKS4NCg0KDQo6OjogcHJvZ3Jlc3MNCjo6OiB7LnByb2dyZXNzLWJhciBzdHlsZT0id2lkdGg6IDEwMCU7In0NCjo6Og0KOjo6DQoNCg0KIyMgKipUZXN0ZSBkZSBIZXRlcm9nZW5laWRhZGUqKg0KDQpBIGhldGVyb2dlbmVpZGFkZSBlbSByZXZpc8O1ZXMgc2lzdGVtw6F0aWNhcyBjb20gbWV0YS1hbsOhbGlzZSBjb25zaXN0ZSBuYSB2YXJpYWJpbGlkYWRlIG91IGRpZmVyZW7Dp2EgZW50cmUgZXN0dWRvcyBlbSByZWxhw6fDo28gw6AgZXN0aW1hdGl2YSBkZSBlZmVpdG9zIGUgcG9yIGlzc28gbyBzZXUgY8OhbGN1bG8gw6kgZnVuZGFtZW50YWwgcGFyYSBhdmFsaWFyIG8gZ3JhdSBkZSBjb25maWFuw6dhIGRvcyByZXN1bHRhZG9zIGVtIHNpdHVhw6fDtWVzIGRlIGRlY2lzw7VlcyBpbmNlcnRhcyBvdSBzdXBvc2nDp8O1ZXMgc29icmUgb3MgZGFkb3MgZSByZXN1bHRhZG9zIHVzYWRvcyAoQ2xhcmtlLCAyMDAxLCBhcHVkIFJhbWFsaG8sIDIwMDUpLiAgDQoNCkVtIG1ldGFuw6FsaXNlLCBxdWFuZG8gYSB2YXJpYWJpbGlkYWRlIGVudHJlIG9zIGVzdHVkb3MgbsOjbyDDqSBhcGVuYXMgYWxlYXTDs3JpYSwgZGl6ZW1vcyBxdWUgb3MgZXN0dWRvcyBzw6NvIGhldGVyb2fDqm5lb3MuIEEgYXZhbGlhw6fDo28gc29icmUgaGV0ZXJvZ2VuZWlkYWRlIHRlbSBwYXBlbCBpbXBvcnRhbnRlIG5hIGVzY29saGEgZG9zIG1vZGVsb3MgZGUgbWV0YW7DoWxpc2UgZSwgcG9ydGFudG8sIGRldmUgc2VyIHJlYWxpemFkYSBhbmF0ZXMgZGEgZXNjb2xoYSBkbyBtb2RlbG8uICAgICANCg0KRW0gdGVybW9zIGdsb2JhaXMgYWxndW5zIGF1dG9yZXMgZGl2aWRlbSBhcyBoZXRlcm9nZW5laWRhZGVzIGVtIHRyw6pzIHRpcG9zIChDcmFpZyAmIFNteXRoLCAyMDA0OyBQb2NpbmhvLCAyMDA4OyBIaWdnaW5zIFwmIEdyZWVuLCAyMDExKToNCg0KLSAgICoqSGV0ZXJvZ2VuZWlkYWRlIEVzdGF0w61zdGljYSoqIChkaWZlcmVuw6dhcyBub3MgcmVzdWx0YWRvcykg4oCTIMOpIGEgdmFyaWHDp8OjbyBlbnRyZSBvcyByZXN1bHRhZG9zIGRvcyBlc3R1ZG9zLCBvIHF1ZSBwb2RlIHNlciBjYXVzYWRvIHBvcjogaGV0ZXJvZ2VuZWlkYWRlIGNsw61uaWNhIG91IG1ldG9kb2zDs2dpY2EsIGVzY29saGEgZXJyYWRhIGRhcyBtZWRpZGFzIGRlIGVmZWl0byBkbyB0cmF0YW1lbnRvIG91IHBlbG8gYWNhc287DQoNCi0gICAqKkhldGVyb2dlbmVpZGFkZSBNZXRvZG9sw7NnaWNhKiogKGRpZmVyZW7Dp2FzIG5vcyBkZXNlbmhvcyBkb3MgZXN0dWRvcyBpbmNsdcOtZG9zKSDigJMgY29uc2lzdGUgbmFzIHZhcmlhw6fDtWVzIHJlbGFjaW9uYWRhcyBjb20gYSBhbGVhdG9yaXphw6fDo28sIHNpZ2lsbyBkYSBhbG9jYcOnw6NvLCBjZWdhbWVudG8sIHBlcmRhcy9leGNsdXPDtWVzOw0KDQotICAgKipIZXRlcm9nZW5laWRhZGUgY2zDrW5pY2EqKiAoZGlmZXJlbsOnYXMgZW50cmUgYXMgY2FyYWN0ZXLDrXN0aWNhcyBkb3MgZXN0dWRvcywgcG9yIGV4ZW1wbG86IG9zIHBhcnRpY2lwYW50ZXMsIGludGVydmVuw6fDtWVzIG91IHJlc3VsdGFkb3MpIOKAkyDDqSBhIGRpZmVyZW7Dp2EgcmVhbCBlbnRyZSBvcyBlc3R1ZG9zIGRldmlkbyDDoHMgc3VhcyBjYXJhY3RlcsOtc3RpY2FzOiBwYXJ0aWNpcGFudGVzIChjcml0w6lyaW9zIGRlIGluY2x1c8OjbyBlIGV4Y2x1c8OjbywgZGlhZ27Ds3N0aWNvLCBldGMuKSwgaW50ZXJ2ZW7Dp8O1ZXMgKHRpcG8sIGRvc2UsIGR1cmHDp8OjbywgZXRjLiksIGRlc2ZlY2hvcyBjbMOtbmljb3MgKHRpcG8sIGVzY2FsYSwgcG9udG8gZGUgY29vcnRlLCBkdXJhw6fDo28gZG8gZm9sbG93IHVwLCBldGMuKS4NCg0KDQrDiSBuZXN0ZSBzZW50aWRvIHF1ZSBvcyB0ZXN0ZXMgZXN0YXTDrXN0aWNvcyBkZSBoZXRlcm9nZW5laWRhZGUgc2UgcmV2ZXN0ZW0gZGUgdW1hIGRlc21lZGlkYSBpbXBvcnTDom5jaWEgbmEgcmVhbGl6YcOnw6NvIGRhIG1ldGEtYW7DoWxpc2UgcG9pcyBwZXJtaXRlbSBpbmZlcmlyIHNlIGEgdmFyaWFiaWxpZGFkZSBvYnNlcnZhZGEgbm9zIHJlc3VsdGFkb3MgZGUgdW0gZXN0dWRvICh0YW1hbmhvIGRlIGVmZWl0bykgw6kgbWFpb3IgcXVlIG8gZXNwZXJhZG8gZGV2aWRvIGFvIGFjYXNvLg0KDQpOYSByZWFsaXphw6fDo28gZGEgbWV0YS1hbsOhbGlzZSBwb2RlLXNlLCByZWNvcnJlciBhIGRvaXMgdGVzdGVzIHBhcmEgZGV0ZXJtaW5hciBhIGV4aXN0w6puY2lhIGRlIGhldGVyb2dlbmVpZGFkZSwgKipvIFRlc3RlIFEqKiBwcm9wb3N0byBwb3IgQ29jaHJhbiAoMTk1NCkgZS9vdSBxdWFsaWZpY2FkYSBwZWxhICoqRXN0YXTDrXN0aWNhICRJXnsyfSQqKiBkZWZpbmlkYSBwb3IgSGlnZ2lucyBlIFRob21wc29uICgyMDAyKS4NCg0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KDQoNCiMjIyAqKlRlc3RlIFEgZGUgQ29jaHJhbSoqDQoNCk8gdGVzdGUgUSBkZSBDb2NocmFuIHRyYWR1eiBvIG3DqXRvZG8gbWFpcyB1dGlsaXphZG8gcGFyYSBhdmFsaWFyIGEgaGV0ZXJvZ2VuZWlkYWRlIGUgcGFydGUgZG8gcHJlc3N1cG9zdG8gcXVlIG9zIGFjaGFkb3MgZG9zIGVzdHVkb3MgcHJpbcOhcmlvcyBzw6NvIGlndWFpcyAoaGlww7N0ZXNlIG51bGEpIGUgdmVyaWZpY2Egc2Ugb3MgZGFkb3MgZW5jb250cmFkb3MgcmVmdXRhbSBlc3RhIGhpcMOzdGVzZSAoTGF1LCBJb2FubmlkaXMgXCYgU2NobWlkLCAxOTk4KS4gU2UgYSBoaXDDs3Rlc2UgbnVsYSBmb3IgY29uZmlybWFkYSwgb3MgZXN0dWRvcyBzw6NvIGNvbnNpZGVyYWRvcyBob21vZ8OqbmVvcyAocC12YWxvciA+IDAsMDUpLg0KDQoNCkFzIEhpcMOzdGVzZXMgZG8gVGVzdGUgUSBkZSBDb2NocmFuIA0KDQokSF97MH0kOiBvcyBlc3R1ZG9zIHPDo28gaG9tb2fDqm5lb3MNCiRIX3sxfSQ6IG9zIGVzdHVkb3Mgc8OjbyBoZXRlcm9nw6puZW9zDQoNCg0KTyB0ZXN0ZSBRIGRlIENvY2hyYW4gw6ksIGVudMOjbywgZGFkbyBwb3I6DQoNCiQkIFEgPSBcc3VtX3tqPTF9XntqfSBXX3tqfShZX3tqfS1cdGhldGFfe019KV57Mn0gICQkDQoNCk9uZGUgJFdfe2p9JCDDqSBvIHBlc28gZG8gZXN0dWRvIGosICRZX3tqfSQgw6kgYSBtZWRpZGEgZGUgZWZlaXRvIGRvIGVzdHVkbyBqIGUgJFx0aGV0YV97TX0kIMOpIGEgZXN0aW1hdGl2YSBwYXJhIGEgbWVkaWRhIG1ldGEtYW5hbMOtdGljYS4NCg0KDQpDb21vIGrDoSBmb2kgc3VwcmFtZW5jaW9uYWRvLCBvIHZhbG9yIHAgY2FsY3VsYWRvIGluZGljYSBzZSBhIGhldGVyb2dlbmVpZGFkZSDDqSBzaWduaWZpY2F0aXZhbWVudGUsIG91IG7Do28sIGRpZmVyZW50ZSBkZSB6ZXJvLiBVbSBwcm9ibGVtYSDDqSBxdWUgbyB2YWxvciBkZSBRIHZhcmlhIGVudHJlIDAgZSBpbmZpbml0bywgbyBxdWUgYWNhcnJldGEgdsOhcmlhcyBkZXN2YW50YWdlbnMgKFJvZHJpZ3VlcyAmIFppZWdlbG1hbm4sIDIwMTApLiANCg0KDQpTZWd1bmRvIEhpZ2dpbnMgZXQgYWwuICgyMDAzKSBhcG9udGFtIHF1ZSBlbSBtZXRhLWFuw6FsaXNlcyBxdWUgZW52b2x2ZW0gdW0gbsO6bWVybyBwZXF1ZW5vIGRlIGVzdHVkb3MsIG8gcG9kZXIgZG8gdGVzdGUgcG9kZSBzZXIgYmFpeG8uIEFzc2ltLCBhaW5kYSBxdWUgdGVuaGFtb3MgdW1hIGdyYW5kZSB2YXJpYcOnw6NvIGVudHJlIG9zIGVzdHVkb3MsIG8gdGVzdGUgZGUgQ29jaHJhbiBwb2RlIG7Do28gY29uc2VndWlyIGRldGVjdGFyIGEgaGV0ZXJvZ2VuZWlkYWRlIGRldmlkbyBhbyBuw7ptZXJvIHJlZHV6aWRvIGRlIGVzdHVkb3MgKG8gcC12YWxvciBzZXLDoSBlcnJvbmVhbWVudGUgZWxldmFkbykuIA0KDQpQb3Igb3V0cm8gbGFkbywgcXVhbmRvIGEgbWV0YS1hbsOhbGlzZSBlbnZvbHZlIHVtIG7Dum1lcm8gZWxldmFkbyBkZSBlc3R1ZG9zLCBvIHBvZGVyIGRvIHRlc3RlIHNlcsOhIGFsdG8gZSBvIHRlc3RlIGRlIENvY2hyYW4gcG9kZSBldmlkZW5jaWFyIHVtYSBoZXRlcm9nZW5laWRhZGUgZW50cmUgb3MgZXN0dWRvcyDigJxlc3RhdGlzdGljYW1lbnRlIHNpZ25pZmljYW50ZeKAnSwgcG9yw6ltLCBjbGluaWNhbWVudGUgbsOjbyBpbXBvcnRhbnRlLg0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KDQoNCiMjIyAqKkVzdGF0w61zdGljYSAkSV57Mn0kKioNCg0KQ29udHVkbywgYWxndW5zIGF1dG9yZXMgYXJndW1lbnRhbSBxdWUgYSBoZXRlcm9nZW5laWRhZGUgcG9yIG1lbm9yIHF1ZSBzZWphIGVuY29udHJhLXNlIHNlbXByZSBwcmVzZW50ZSwgcGVsbyBxdWUgbsOjbyB0ZW0gc2VudGlkbyB0ZXN0YXIgYXBlbmFzIGEgc3VhIHByZXNlbsOnYSwgbWFzIHF1YW50aWZpY8OhLWxhIChNdWxyb3cgZXQgYWwuLCAxOTk3OyBCZXJ3YW5nZXIgZXQgYWwuLCAyMDA3KS4gRSBmb2kgbmVzc2Ugc2VudGlkbyBxdWUgZm9pIGRlc2Vudm9sdmlkbyBvIFRlc3RlIGRlIEluY29uc2lzdMOqbmNpYSBJwrIgcHJvcG9zdGEgcG9yIEhpZ2dpbnMgXCYgVGhvbXBzb24gKDIwMDIpLg0KDQpBIGVzdGF0w61zdGljYSAkSV57Mn0kIMOpIG9idGlkYSBhIHBhcnRpciBkYSBlc3RhdMOtc3RpY2EgUSBkbyB0ZXN0ZSBkZSBDb2NocmFuIGUgZG8gbsO6bWVybyBqIGRlIGVzdHVkb3MgZW52b2x2aWRvcyBuYSBtZXRhLWFuw6FsaXNlIGUgZGFkYSBwb3I6DQoNCg0KJCQgSV57Mn0gPSBcZnJhY3tRIC0gKGotMSl9e1F9XHRpbWVzIDEwMFwlICQkDQoNCg0KQSBlc3RhdMOtc3RpY2EgJEleezJ9JCBwb2RlIHZhcmlhciBkZSB2YWxvcmVzIG5lZ2F0aXZvcyBhdMOpICQxMDBcJSQuIFF1YW5kbyBvIHZhbG9yIGZvciBuZWdhdGl2byBlbGUgw6kgaWd1YWxhZG8gYSAwLiBPIHZhbG9yIHAgZGUgJEleezJ9JCDDqSBlcXVpdmFsZW50ZSBhbyB2YWxvciBwIGRlIFEuIEEgZXN0YXTDrXN0aWNhICRJXnsyfSQgZGVzY3JldmUgYSBwb3JjZW50YWdlbSBkZSB2YXJpYWJpbGlkYWRlIGRvIGVmZWl0byBxdWUgw6kgZGV2aWRhIMOgIGhldGVyb2dlbmVpZGFkZSBlIG7Do28gcG9yIGFjYXNvIChEaW5uZXMgZXQgYWwuLCAyMDA1KS4NCg0KDQpJbnRlcnByZXRhdGl2YW1lbnRlLCB1bWEgZXNjYWxhIGNvbSB1bSB2YWxvciBkZSAkSV57Mn0kIHByw7N4aW1vIGEgJDBcJSQgaW5kaWNhIG7Do28gaGV0ZXJvZ2VuZWlkYWRlIGVudHJlIG9zIGVzdHVkb3MsIHByw7N4aW1vIGEgJDI1XCUkIGluZGljYSAqKkJhaXhhKiogSGV0ZXJvZ2VuZWlkYWRlLCBwcsOzeGltbyBhICQ1MFwlJCBpbmRpY2EgSGV0ZXJvZ2VuZWlkYWRlICoqTW9kZXJhZGEqKiBlIHByw7N4aW1vIGEgJDc1XCUkIGluZGljYSAqKkFsdGEqKiBoZXRlcm9nZW5laWRhZGUgZW50cmUgb3MgZXN0dWRvcyAoSGlnZ2lucyBldCBhbC4gMjAwMzsgUm9kcmlndWVzIFwmIFppZWdlbG1hbm4sIDIwMTApLg0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KDQoNCg0KIyAqKkV4ZW1wbG8gUHLDoXRpY28qKg0KDQojIyAqKlZhcmnDoXZlaXMgcHJhIE1ldGFuw6FsaXNlICoqDQoNCi0gICAxKSAqKmF1dGhvcioqIDogYXV0b3Jlcw0KLSAgIDIpICoqeWVhcioqIDogYW5vDQotICAgMykgKipOZSoqOiBuw7ptZXJvIGRlIHBhY2llbnRlcyBkbyBncnVwbyBlc3BlcmltZW50YWwodHJhdGFtZW50bykNCi0gICA0KSAqKk1lKio6IG3DqWRpYSANCi0gICA1KSAqKlNlKio6IGRlc3Zpby1wYWRyw6NvDQotICAgNikgKipOYyoqOiBuw7ptZXJvIGRlIHBhY2llbnRlcyBkbyBncnVwbyBjb250cm9sZQ0KLSAgIDcpICoqTWMqKjogbcOpZGlhDQotICAgOCkgKipTYyoqOiBkZXN2aW8tcGFkcsOjbw0KDQoNCg0KIyMgKipCYXNlIGRlIERhZG9zKioNCg0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0NCg0KIyBQYWNvdGVzIFV0aWxpemFkb3MNCmxpYnJhcnkobWV0YSkNCmxpYnJhcnkobWV0YWZvcikNCmxpYnJhcnkocm1ldGEpDQpsaWJyYXJ5KG1ldGFjb3IpIA0KbGlicmFyeShyZWFkeGwpDQoNCiMgRGVmaW5pciBEaXJldMOzcmlvIGRlIFRyYWJhbGhvDQpzZXR3ZCgiQzovVXNlcnMvbWFyaW8gRGhpZWdvL0RvY3VtZW50cy9NRVRBX0FOQUxJU0VfUiIpDQoNCiMgTGVpdHVyYSBkZSBCYXNlIGRlIERhZG9zDQpNZXRhMSA8LSByZWFkX2V4Y2VsKCJkYXRhc2V0MS54bHMiKQ0KYGBgDQoNCg0KOjo6IHByb2dyZXNzDQo6Ojogey5wcm9ncmVzcy1iYXIgc3R5bGU9IndpZHRoOiAxMDAlOyJ9DQo6OjoNCjo6Og0KDQoNCg0KIyMgKipNb2RlbG8gZGUgTWV0YW7DoWxpc2UqKg0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNb2RlbG8gZGUgTWV0YW7DoWxpc2UNCg0KTWV0YV9BbmFsaXNlMSA8LSBtZXRhY29udChOZSwgTWUsIFNlLCBOYywgTWMsIFNjLHN0dWRsYWI9cGFzdGUoYXV0aG9yLCB5ZWFyKSxkYXRhPU1ldGExKQ0KDQojIFJlc3VsdGFkb3MNCnN1bW1hcnkoTWV0YV9BbmFsaXNlMSkNCg0KDQpgYGANCg0KDQo6OjogcHJvZ3Jlc3MNCjo6OiB7LnByb2dyZXNzLWJhciBzdHlsZT0id2lkdGg6IDEwMCU7In0NCjo6Og0KOjo6DQoNCg0KDQojIyAqKkZvcmVzdCBQbG90IENsw6Fzc2ljbyoqDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG91dC53aWR0aCA9ICc2NSUnfQ0KZm9yZXN0Lm1ldGEoTWV0YV9BbmFsaXNlMSwgDQogICAgICAgc29ydHZhciA9IFRFLA0KICAgICAgIHhsYWI9IlVzbyBkZSBNZWRpY2FtZW50b3MiLA0KICAgICAgIGNvbC5lcXVpID0gImJsdWUiKQ0KYGBgDQoNCg0KOjo6IHByb2dyZXNzDQo6Ojogey5wcm9ncmVzcy1iYXIgc3R5bGU9IndpZHRoOiAxMDAlOyJ9DQo6OjoNCjo6Og0KDQoNCg0KDQojIyAqKkZvcmVzdCBQbG90IE91dHJvIGxheW91dCoqDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG91dC53aWR0aCA9ICc2NSUnfQ0KZm9yZXN0Lm1ldGEoTWV0YV9BbmFsaXNlMSwgeGxhYj0iVXNvIGRlIE1lZGljYW1lbnRvcyIsDQogICAgICAgbGF5b3V0ID0gIlJldk1hbjUiKQ0KYGBgDQoNCg0KOjo6IHByb2dyZXNzDQo6Ojogey5wcm9ncmVzcy1iYXIgc3R5bGU9IndpZHRoOiAxMDAlOyJ9DQo6OjoNCjo6Og0KDQoNCg0KIyMgKipGdW5uaWwgUGxvdCBDbMOhc3NpY28qKg0KDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG91dC53aWR0aCA9ICc4NSUnfQ0KZnVubmVsKE1ldGFfQW5hbGlzZTEsIA0KICAgICAgIHhsYWIgPSAiRGllcmVuY2EgZGUgTWVkaWFzIiwNCiAgICAgICB5bGFiID0gIkVycm8gUGFkcmFvIikNCmBgYA0KDQoNCg0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KDQoNCg0KDQojICoqUmVmZXLDqm5jaWFzIEJpYmxpb2dyw6FmaWNhcyoqDQoNCg0KQVlSRVMsIE0uOyBBWVJFUyBKw5pOSU9SLCBNLjsgQVlSRVMsIEQuTDsgU0FOVE9TLCBBLlMuIEJpb0VzdGF0IDUuMDogYXBsaWNhw6fDtWVzIGVzdGF0w61zdGljYXMgbmFzIMOhcmVhcyBkYXMgY2nDqm5jaWFzIGJpb2zDs2dpY2FzIGUgbcOpZGljYXMuIEJlbMOpbTogTUNUOyBJRFNNOyBDTlBxLCAyMDE1Lg0KDQpCRVJXQU5HRVIsIE8uOyBTVVpVTVVSQSBFLiBBLjsgQlVFSExFUiwgQS5NLjsgT0xJVkVJUkEsIEouQi4gKDIwMDcpLiBDb21vIEF2YWxpYXIgQ3JpdGljYW1lbnRlIFJldmlzw7VlcyBTaXN0ZW3DoXRpY2FzIGUgTWV0YW7DoWxpc2U/IFJldmlzdGEgQnJhc2lsZWlyYSBkZSBUZXJhcGlhIEludGVuc2l2YSwgMTkoNCk6IDQ3NS00ODAuIA0KDQoNCkJSRUksIFYuQTsgROKAmUFWSUxBLCBMOyBDQU1BUkdPLCBMLkY7IEVOR0VMUywgSi4gVGhlIGluZmx1ZW5jZSBvZiBhZHB0YXRpb24gYW5kIHN0YW5kYXJkaXphdGlvbiBvZiB0aGUgbWFya2V0aW5nIG1peG8gb24gcGVyZm9ybWFuY2U6IGEgbWV0YS1hbmx5c2lzLiBCcmF6aWxpYW4gQWRtaW5pc3RyYXRpb24gUmV2aWV3LCA4LCAyNjYtMjg3LCAyMDExLiAgDQoNCkNPQ0hSQU1FLCBXLkcuIFRoZSBjb21iaW5hdGlvbiBvZiBlc3RpbWF0ZXMgZnJvbSBkaWZmZXJlbnQgZXhwZXJpbWVudHMuIEJpb21ldHJpY3MgMTk1NDsgMTA6IDEwMS0xMjkuDQoNCkRFUlNJTU9OSUFOLCBSOyBMQUlSRCwgTi4gTWV0YS1hbmFseXNpcyBpbiBjbGluaWNhbCB0cmlhbHMuIENvbnRyb2xsZWQgQ2xpbmljYWwgVHJpYWxzLiAxOTg2OyA3OjE3Ny04OC4NCg0KRElOTkVTLCBKLjsgREVFS1MgSi47IEtJUkJZLCBKOyBST0RFUklDSywgUC4gQSBtZXRob2RvbG9naWNhbCByZXZpZXcgb2YgaG93IGhldGVyb2dlbmVpdHkgaGFzIGJlZW4gZXhhbWluZWQgaW4gc3lzdGVtYXRpYyByZXZpZXdzIG9mIGRpYWdub3N0aWMgdGVzdCBhY2N1cmFjeS4gSGVhbHRoIFRlY2hub2wgQXNzZXNzLiAyMDA1OyA5ICgxMik6IDEtMTEzLg0KDQpGbGV0Y2hlciBSSCwgRmxldGNoZXIgU1cuIEVwaWRlbWlvbG9naWEgY2zDrW5pY2E6IGVsZW1lbnRvcyBlc3NlbmNpYWlzOyB0cmFkdcOnw6NvIFJvYmVydGEgTWFyY2hpb3JpIE1hcnRpbnMuIFBvcnRvIEFsZWdyZSwgQXJ0bWVkLCAyMDA2Lg0KDQpHbGFzcyBHVi4gUHJpbWFyeSwgc2Vjb25kYXJ5LCBhbmQgbWV0YS1hbmFseXNpcyBvZiByZXNlYXJjaC4gRWR1Y2F0aW9uYWwgUmVzZWFyY2hlci4gVi4gNSwgcC4gMy04LCAxOTc2Lg0KDQpISUdHSU5TLCBKLlAuVC47IFRIT01QU09OLCBTLkcuICgyMDAyKS4gUXVhbnRpZnlpbmcgaGV0ZXJvZ2VuZWl0eSBpbiBhIG1ldGFhbmFseXNpcy4gU3RhdCBNZWQuLCAyMTogMTUzOS01OC4gDQoNCkhJR0dJTlMsIEouUDsgVEhPTVBTT04sIFMuRzsgREVFS1MsIEouSjsgQUxUTUFOLCBELkcuIE1lYXN1cmluZyBpbmNvbnNpc3RlbmN5IGluIG1ldGEtYW5hbHlzZXMuIEJNSi4gMjAwMzsgMzI3OiA1NTctNjAuDQoNCkhJR0dJTlMsIEo7IEdSRUVOLCBTLCBlZGl0b3JzLiBDb2NocmFuZSBoYW5kYm9vayBmb3Igc3lzdGVtYXRpYyByZXZpZXdzIG9mIGludGVydmVudGlvbnMgW0ludGVybmV0XS4gVmVyc2lvbiA1LjEuMC4gT3hmb3JkOiBDb2NocmFuZSBDb2xsYWJvcmF0aW9uOyBjMjAxMSBbY2l0ZWQgMjAxNCBBdWcgOF0uIEF2YWlsYWJsZSBmcm9tOiB3d3cuY29jaHJhbmUtaGFuZGJvb2sub3JnLg0KDQpMQVUsIEouOyBJT0FOTklESVMsIEouIFAuOyBTQ0hNSUQsIEMuIEguICgxOTk4KS4gU3VtbWluZyB1cCBldmlkZW5jZTogb25lIGFuc3dlciBpcyBub3QgYWx3YXlzIGVub3VnaC4gTGFuY2V0OyAzNTE6IDEyMy0xMjcuIA0KTElQU0VZLCBNLlc7IFdJTFNPTiwgRC5CLiAoMjAwMSkuIFByYWN0aWNhbCBNZXRhLUFuYWx5c2lzLiBCZXZlcmx5IEhpbGxzLCBDQTogU0FHRS4gDQoNCk1BUlRJTkVaLCBFLiBaLiAoMjAwNykuIE1ldGFuw6FsaXNlIGRlIGVuc2Fpb3MgY2zDrW5pY29zIGNvbnRyb2xhZG9zIGFsZWF0b3JpemFkb3M6IGFzcGVjdG9zIHF1YW50aXRhdGl2b3MuIE1lZGljaW5hOyA0MCAoMik6IDIyMy0zNS4gUmliZWlyw6NvIFByZXRvLg0KDQpNVUxST1csIEMuOyBMQU5HSE9STkUsIFAuOyBHUklNU0hBVywgSi4gKDE5OTcpLiBJbnRlZ3JhdGluZyBoZXRlcm9nZW5lb3VzIHBpZWNlcyBvZiBldmlkZW5jZSBpbiBzeXN0ZW1hdGljIHJldmlld3MuIEFubiBJbnRlcm4gTWVkLiwgMTI3OiA5ODktOTk1Lg0KDQpQZWFyc29uIEsuIFJlcG9ydCBvbiBjZXJ0YWluIGVudGVyaWMgZmV2ZXIgaW5vY3VsYXRpb24gc3RhdGlzdGljcy4gQk1KLiAxOTA0OzM6MTI0My02LiAzLiANCg0KUkFNQUxITywgQS4gKDIwMDUpLiBNYW51YWwgcGFyYSByZWRhw6fDo28gZGUgZXN0dWRvcyBlIHByb2pldG9zIGRlIHJldmlzw6NvIHNpc3RlbcOhdGljYSBjb20gZSBzZW0gbWV0YW7DoWxpc2UuIENvaW1icmE6IEZPUk1BU0FVLiBJU0JOIDk3Mi04NDg1LTU0LTkuIA0KDQpST0RSSUdVRVMsIEMuOyBaSUVHRUxNQU5OLCBQLiAoMjAxMCkuIE1ldGFuw6FsaXNlOiB1bSBndWlhIHByw6F0aWNvLiBSZXZpc3RhIEhDUEEuIDMwKDQpOiA0MzUtNDQ2LiBJU1NOOiAxOTgzLTU0ODUuICANCg0KUk9TUywgSi5TOyBUU0UsIFQ7IFpBUklOLCBEQTsgWFUsIEg7IFpIT1UsIEw7IEtSVU1IT0xaLCBILk0uIFB1YmxpY2F0aW9uIG9mIE5JSCBmdW5kZWQgdHJpYWxzIHJlZ2lzdGVyZWQgaW4gQ2xpbmljYWxUcmlhbHMuZ292OiBjcm9zcyBzZWN0aW9uYWwgYW5hbHlzaXMuIEJNSi4gMjAxMiBKYW47MzQ0KGQ3MjkyKToxLTEwLg0KDQpTT0tBTCwgUi5SOyBST0hMRiwgRi5KLiAoMTk5NSkuIEJpb21ldHJ5LCAzIHJkLiBFZCwgVy5ILiBGcmVlbWFuIGFuZCBDb21wYW55LCBOZXcgWW9yay4gDQoNClZJRUNIQkFVRVMsIFcuIE1ldGEtQW5hbHlzaXMgUGFja2FnZSBmb3IgUiwgMjAwOS4NCg0KV2hpdGVoZWFkIEEuIE1ldGEtYW5hbHlzaXMgb2YgY29udHJvbGxlZCBjbGluaWNhbCB0cmlhbHMuIEpvaG4gV2lsZXkgJiBTb25zLiAyMDAyLg0KDQpZYXRlcyBGLCBDb2NocmFuIFdHLiBUaGUgYW5hbHlzaXMgb2YgZ3JvdXBzIG9mIGV4cGVyaW1lbnRzLiBUaGUgSm91cm5hbCBvZiBBZ3JpY3VsdHVyYWwgU2NpZW5jZS4gMTkzODsyOCg0KTo1NTYtODAuIA0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg==