Relatório como parte da disciplina AGM5710 Meteorologia da Poluição do Ar
Prof.a Maria de Fátima Andrade


Alejandro Herman Delgado Peralta \(^{(a)}\), Leandro Alex Moreira Viscardi \(^{(b)}\)

\(^{(a)}\) IAG-USP, Nº USP: 11340504,
\(^{(b)}\) IF-USP, Nº USP: 8624459,


Introdução

A estação de São José do Rio Preto (SJRP) da Companhia Ambiental do Estado de São Paulo (CETESB) coleta dados de poluentes atmosféricos e disponíbilizam em seu endereço eletrônico. Para o presente trabalho foram baixados os dados de 2018 (janeiro até dezembro) do ozônio (O3), dióxido de nitrogênio (NO2) e material particulado menor que 2,5 \(\mu\)m (PM2,5) como diâmetro aerodinâmico. Os gráficos foram feitos para cada poluente com a finalidade de fazer comparações com o limite da Organização Mundial da Saude (OMS) e os padrões de qualidade do ar da CETESB. Os objetivos deste projeto são baseados nas seguintes atividades:

  1. Faça o gráfico da série temporal de todos os poluentes baixados.
  2. Calcule as médias e compare com os Padrões Estaduais/Nacionais e as recomendações da Organização Mundial de Saúde (que é o padrão final do decreto e da resolução CONAMA)
  3. Calcule o número de ultrapassagens dos padrões/recomendações.
  4. Calcule as médias horárias do PM2,5, O3 e NO2 e esboce os gráficos do ciclo diário médio (24 horas) para cada um dos meses.
  5. Discuta o comportamento diário dos poluentes (tente relacionar com as variáveis de radiação, temperatura, chuva/umidade).
  6. Prepare uma pequena apresentação contendo os resultados para discutirmos na próxima aula.
  7. Fazer um relatório.

Desenvolvimento do trabalho

A estação SJRP está localizada nas coordenadas 7700854 m de latitude e 666719 m de longitude, fuso 22k (CETESB, 2019). A Figura 1 mostra a estação de qualidade do ar SJRP.

Figura 1  Estação SJRP. Fonte: CETESB (2019).


A Figura 2 mostra a localização da estação SJRP que está no entorno urbano.


Figura 2  Localização da estação SJRP. Fonte: CETESB (2019).


1. Faça o gráfico da série temporal de todos os poluentes baixados.

Os dados são da CETESB e estão disponíveis em seu endereço eletrônico. Os programas usados para o processamento dos dados foram o Python e R Studio. O programa R Studio foi usado para obter o gráfico da série temporal de todos os poluentes considerados. Para isso, foi utilizado o pacote openair com a função timePlot.

Como mostra a Figura 3, as concentrações de O\(_3\) foram altas principalmente entre os meses de setembro e novembro. Similarmente, nestes meses as concentrações de NO\(_2\) e PM\(_{2,5}\) também foram altas. No entanto, as concentrações de PM\(_{2,5}\) aumentou ainda mais durante o inverno.

2. Calcule as médias e compare com os Padrões Estaduais/Nacionais e as recomendações da Organização Mundial de Saúde (que é o padrão final do decreto e da resolução CONAMA).

As médias foram calculadas para cada poluente de acordo com as médias dos padrões de qualidade do ar nacional e da Organização Mundial de Saúde (OMS). A Tabela 1 mostra os padrões de qualidade do ar. Estes padrões são usados na comparação com as médias calculadas para a estação SJRP. Segundo a CETESB, as Metas Intermediárias (MI) são padrões temporários a serem alcançados com o objetivo de melhorar a qualidade do ar no Estado de São Paulo. Os Padrões Finais (PF) são aqueles que oferecem menor risco a saúde da população e correspondem aos padrões da OMS de acordo com seu endereço eletrônico.

Tabela 1 Padrões de qualidade do ar (CETESB Decreto Estadual nº 59113 de 23/04/2013)
Poluente Tempo de Amostragem MI\(_1\) MI\(_2\) MI\(_3\) PF
PM\(_{2,5}\) 24 horas (média) 60 50 37 25
NO\(_2\) 1 hora (média) 260 240 220 200
O\(_3\) 8 horas (média móvel máxima diaria) 140 130 120 100

Para o cálculo da média de cada poluente, usamos o programa Python e também o R Studio. Neste ultimo programa, as opções timePlot, rollingMean e aggregate foram usados. A opção timePlot permite fazer médias diárias; importante para obter médias de 24 horas para o PM\(_{2,5}\). O rollingMean é uma função do openair que permite calcular as médias móveis para cada 8 horas que tenham ao menos 75% de dados (6 horas) (Carslaw D., 2015). Esta opção foi usada para processar as concentrações horárias de O\(_3\). Finalmente, as médias móveis máxima diaria foram analisadas. Os calculos também foram feitos usando o programa Python como mostra a figura abaixo.


A Figura 4 mostra a média diária do PM\(_{2,5}\) comparado com os padrões de qualidade do ar (Tabela 1). No inverno e início da primavera (setembro) acontecem ultrapassagens dos padrões. No setembro o aumento das concentrações de PM2,5 está relacionado à formação de partículas devido a reações associadas ao O3 (Jacobs D., 1999).


A Figura 5 mostra a concentração média horária de NO\(_2\) em 2018. Não ocorrem ultrapassagens dos padrões de acordo com a Tabela 1.


A Figura 6 mostra as concentrações médias móveis máxima diária para o O\(_3\) troposférico comparados com os padrões da OMS (PF) e demais (Tabela 1). Durante o verão a nebulosidade atenua a irradiância solar que é um fator determinante nas reações químicas de formação do O\(_3\); na primavera, em ausência de nuvens, aumenta o tempo de irradiância solar (Carvalho V., Freitas E., Martins L., Mazzoli C. e Andrade M., 2015).

3. Calcule o número de ultrapassagens dos padrões/recomendações.

A Tabela 2 mostra o número de ultrapassagens dos padrões de qualidade do ar para os poluentes. As opção timeAverage do pacote openair foi usado para calcular a média diária do PM2,5; outras opções do programa R foram usadas (subset, length, Reduce).

Tabela 2 Número de ultrapassagens dos padrões de qualidade do ar (CETESB, 2019)
Poluente MI\(_1\) MI\(_2\) MI\(_3\) PF
PM\(_{2,5}\) 1 2 8 48
NO\(_2\) 0 0 0 0
O\(_3\) 0 2 3 22

Para analisar os resultados foram gravadas as datas com ultrapassagens para cada poluente usando o programa R. Além disso, a função calendarPlot do pacote openair foi utilizada para visualizar os dias com ultrapassagens dos padrões de qualidade do ar (Tabela 1) para o PM\(_{2,5}\) (Figura 7) e o O\(_3\) (Figura 8). A *Figura 7 mostra as concentrações médias de 24 horas e a Figura 8** mostra as concentrações máximas diárias das médias móveis do O3.

Julho apresenta mais dias com ultrapassagens dos padrões de qualidade do ar (Tabela 1). De acordo com a CETESB (2019), as condições meteorológicas foram desfavoráveis à dispersão de poluentes primários, como o PM2,5, devido estabilidade atmosférica, a baixa ventilação, ausência de precipitação, ocorrência de focos de queimadas em regiões do interior do estado e alta porcentagem de calmaria.

O segundo mês com mais dias de ultrapassagens foi setembro. Neste mês tambem houve as maiores concentrações de O\(_3\) diaria.

Neste sentido, a Figura 8 mostra claramente que os meses de agosto e setembro apresentam os dias com mais ultrapasagens dos padrões de qualidade do ar para o O\(_3\).

4. Calcule as médias horárias do PM2,5, O3 e NO2 e esboce os gráficos do ciclo diário médio (24 horas) para cada um dos meses.

As médias horárias foram calculadas para cada poluente. A Figura 9 mostra a variação das concentrações do PM2,5. Julho é o mês que tem as máximas concentrações durante o ciclo diário médio de 24 horas.

A Figura 10 mostra as concentrações médias durante o ciclo diario de cada mês para o poluente NO2. As altas concentrações ocorrem no inverno e as baixas durante o verão. Além disso, também há concentrações altas durante a manhã (07:00 h - 09:00 h) e a noite (19:00 h - 22:00 h). Por outro lado, entre as 14:00 horas e as 17:00 horas as concentrações de NO2 diminuem e são aproximadamente constantes ao longo do ano.

A Figura 11 mostra as concentrações médias durante o ciclo diario de cada mês para O3. As concentrações máxima de O3 acontece próximo das 12:00 horas, próximo do horário que a intensidade de irradiância solar é máxima. Durante a noite ocorre um pequeno aumento da concentração em que possivelmente está relacionado com o transporte urbano (Carvalho et al., 2015).

5. Discuta o comportamento diário dos poluentes (tente relacionar com as variáveis de radiação, temperatura, chuva/umidade).

Partículas inaláveis finas o PM2,5

De acordo com a CETESB (2019), a porcentagem majoritária do PM2,5 em São Paulo é de origem veicular. Existem uma porcentagem baixa devida a ressuspensão de poeira de rua, mas não é significativa (CETESB, 2019). Além disso, no mês de julho (Figura 4) as condições meteorológicas não permitiram uma boa dispersão dos poluentes devido ao estagnamento, baixa ventilação e alta porcentagem de calmaria (CETESB, 2019). No setembro aconteceu o aumento das concentrações de PM2,5 devido aos processos de formação de partículas pela reações químicas para a formação do ozônio (Brasseur et al., 1999).

Durante o verão, as concentrações são baixas devido ao aumento da camada de mistura pelos processos de convecção devido ao aumento de temperatura e também pela deposição úmida devido aos efeitos das chuvas que retêm as partículas (Lazaridis, 2011).

Dióxido de nitrogênio (NO2)

O NO2 sofre reações químicas na atmosfera e atua como precursor na formação do ozônio (Brasseur et al., 1999). Deste modo, na Figura 10 a diminuição das concentrações de NO2 são devidas ao aumento das concentrações de O3 (Figura 11). Além disso, durante o inverno as concentrações são altas devida a redução da camada de mistura e estabilidade atmosférica (Lazaridis, 2011).

Ozônio troposférico (O3)

O O3 troposférico é um poluente secundário formado da oxidação fotoquímica do CO (monóxido de carbono), metano (CH4) e compostos orgânicos voláteis (COV) na presença de NOx (óxidos de nitrogênio) e radiação solar (Brasseur et al., 1999). Durante o dia poderia acontecer uma maior emissão de COV; os isoprenos são produzidos durante o dia pelas florestas (Lazaridis, 2011).

Assim, durante a primavera (Figura 11), as maiores concentrações de O3 foram registradas devido ao maior número de horas de radiação solar (CETESB, 2019). Durante o verão, apesar das maiores temperaturas e intensidade da radiação solar, as nuvens foram um fator de redução do número de horas de radiação solar (Carvalho et al., 2015). Contudo, em dezembro devido à alta incidência de radiação solar e altas temperaturas a formação de O3 aumentou pela formação de HNO3 (CETESB, 2019).

Durante a noite, como não há formação do O3 então é muito possível que o aumento seja pelo transporte de outras lugares, como sugerem alguns estudos (Carvalho et al., 2015).

Referência

LS0tCnRpdGxlOiBBbsOhbGlzZSBkb3MgcG9sdWVudGVzIGRlIHF1YWxpZGFkZSBkbyBhciBwYXJhIGEgZXN0YcOnw6NvIFPDo28gSm9zw6kgZG8gUmlvIFByZXRvCiAgbG9jYWxpemFkYSBuYSBjaWRhZGUgZGUgU8OjbyBQYXVsbwpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIGh0bWxfZG9jdW1lbnQ6CiAgICBkZl9wcmludDogcGFnZWQKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKICB3b3JkX2RvY3VtZW50OiBkZWZhdWx0Ci0tLQojIyMjIyBSZWxhdMOzcmlvIGNvbW8gcGFydGUgZGEgZGlzY2lwbGluYSBBR001NzEwIE1ldGVvcm9sb2dpYSBkYSBQb2x1aWPMp2HMg28gZG8gQXIKCiMjIyMjIFByb2YuXmFeIE1hcmlhIGRlIEZhzIF0aW1hIEFuZHJhZGUKXAoKIyMjIyMgQWxlamFuZHJvIEhlcm1hbiBEZWxnYWRvIFBlcmFsdGEgJF57KGEpfSQsIExlYW5kcm8gQWxleCBNb3JlaXJhIFZpc2NhcmRpICReeyhiKX0kCgokXnsoYSl9JCBJQUctVVNQLCBOwrogVVNQOiAqKjExMzQwNTA0KiosIGFkZWxnYWRvQGlhZy51c3AuYnIgXAokXnsoYil9JCBJRi1VU1AsIE7CuiBVU1A6ICoqODYyNDQ1OSoqLCBsZWFuZHJvLnZpc2NhcmRpQHVzcC5icgpcCgoqKioKCgojIyMgSW50cm9kdcOnw6NvCkEgZXN0YcOnw6NvIGRlIFPDo28gSm9zw6kgZG8gUmlvIFByZXRvIChTSlJQKSBkYSBDb21wYW5oaWEgQW1iaWVudGFsIGRvIEVzdGFkbyBkZSBTw6NvIFBhdWxvIChDRVRFU0IpIGNvbGV0YSBkYWRvcyBkZSBwb2x1ZW50ZXMgYXRtb3Nmw6lyaWNvcyBlIGRpc3BvbsOtYmlsaXphbSAgZW0gc2V1IGVuZGVyZcOnbyBbZWxldHLDtG5pY29dKGh0dHBzOi8vY2V0ZXNiLnNwLmdvdi5ici9hci9xdWFsYXIvKS4gUGFyYSBvIHByZXNlbnRlIHRyYWJhbGhvIGZvcmFtIGJhaXhhZG9zIG9zIGRhZG9zIGRlIDIwMTggKGphbmVpcm8gYXTDqSBkZXplbWJybykgZG8gb3rDtG5pbyAoT34zfiksIGRpw7N4aWRvIGRlIG5pdHJvZ8OqbmlvIChOT34yfikgZSBtYXRlcmlhbCBwYXJ0aWN1bGFkbyBtZW5vciBxdWUgMiw1ICRcbXUkbSAoUE1+Miw1fikgY29tbyBkacOibWV0cm8gYWVyb2RpbsOibWljby4gT3MgZ3LDoWZpY29zIGZvcmFtIGZlaXRvcyBwYXJhIGNhZGEgcG9sdWVudGUgY29tIGEgZmluYWxpZGFkZSBkZSBmYXplciBjb21wYXJhw6fDtWVzIGNvbSBvIGxpbWl0ZSBkYSBPcmdhbml6YcOnw6NvIE11bmRpYWwgZGEgU2F1ZGUgKE9NUykgZSBvcyBwYWRyw7VlcyBkZSBxdWFsaWRhZGUgZG8gYXIgZGEgQ0VURVNCLiBPcyBvYmpldGl2b3MgZGVzdGUgcHJvamV0byBzw6NvIGJhc2VhZG9zIG5hcyBzZWd1aW50ZXMgYXRpdmlkYWRlczoKCjEpIEZhw6dhIG8gZ3LDoWZpY28gZGEgc8OpcmllIHRlbXBvcmFsIGRlIHRvZG9zIG9zIHBvbHVlbnRlcyBiYWl4YWRvcy4KMikgQ2FsY3VsZSBhcyBtw6lkaWFzIGUgY29tcGFyZSBjb20gb3MgUGFkcsO1ZXMgRXN0YWR1YWlzL05hY2lvbmFpcyBlIGFzIHJlY29tZW5kYcOnw7VlcyBkYSBPcmdhbml6YcOnw6NvIE11bmRpYWwgZGUgU2HDumRlIChxdWUgw6kgbyBwYWRyw6NvIGZpbmFsIGRvIGRlY3JldG8gZSBkYSByZXNvbHXDp8OjbyBDT05BTUEpCjMpIENhbGN1bGUgbyBuw7ptZXJvIGRlIHVsdHJhcGFzc2FnZW5zIGRvcyBwYWRyw7Vlcy9yZWNvbWVuZGHDp8O1ZXMuCjQpIENhbGN1bGUgYXMgbcOpZGlhcyBob3LDoXJpYXMgZG8gUE1+Miw1fiwgT34zfiBlIE5PfjJ+IGUgZXNib2NlIG9zIGdyw6FmaWNvcyBkbyBjaWNsbyBkacOhcmlvIG3DqWRpbyAoMjQgaG9yYXMpIHBhcmEgY2FkYSB1bSBkb3MgbWVzZXMuCjUpIERpc2N1dGEgbyBjb21wb3J0YW1lbnRvIGRpw6FyaW8gZG9zIHBvbHVlbnRlcyAodGVudGUgcmVsYWNpb25hciBjb20gYXMgdmFyacOhdmVpcyBkZSByYWRpYcOnw6NvLCB0ZW1wZXJhdHVyYSwgY2h1dmEvdW1pZGFkZSkuCjYpIFByZXBhcmUgdW1hIHBlcXVlbmEgYXByZXNlbnRhw6fDo28gY29udGVuZG8gb3MgcmVzdWx0YWRvcyBwYXJhIGRpc2N1dGlybW9zIG5hIHByw7N4aW1hIGF1bGEuCjcpIEZhemVyIHVtIHJlbGF0w7NyaW8uIAoKIyMjIERlc2Vudm9sdmltZW50byBkbyB0cmFiYWxobwpBIGVzdGHDp8OjbyBTSlJQIGVzdMOhIGxvY2FsaXphZGEgbmFzIGNvb3JkZW5hZGFzIDc3MDA4NTQgbSBkZSBsYXRpdHVkZSBlIDY2NjcxOSBtIGRlIGxvbmdpdHVkZSwgZnVzbyAyMmsgKENFVEVTQiwgMjAxOSkuIEEgKipGaWd1cmEgMSoqIG1vc3RyYSBhIGVzdGHDp8OjbyBkZSBxdWFsaWRhZGUgZG8gYXIgU0pSUC4KCjxjZW50ZXI+CiFbXShlc3QucG5nKSAKCioqRmlndXJhIDEqKiBcIEVzdGHDp8OjbyBTSlJQLiBGb250ZTogQ0VURVNCICgyMDE5KS4KPC9jZW50ZXI+CgpcCgpBICoqRmlndXJhIDIqKiBtb3N0cmEgYSBsb2NhbGl6YcOnw6NvIGRhIGVzdGHDp8OjbyBTSlJQIHF1ZSBlc3TDoSBubyBlbnRvcm5vIHVyYmFuby4KClwKCjxjZW50ZXI+CiFbXShsb2NhbC5wbmcpIAoKKipGaWd1cmEgMioqIFwgTG9jYWxpemHDp8OjbyBkYSBlc3Rhw6fDo28gU0pSUC4gRm9udGU6IENFVEVTQiAoMjAxOSkuCgo8L2NlbnRlcj4KXAoKKioxLiBGYcOnYSBvIGdyw6FmaWNvIGRhIHPDqXJpZSB0ZW1wb3JhbCBkZSB0b2RvcyBvcyBwb2x1ZW50ZXMgYmFpeGFkb3MuKioKCk9zIGRhZG9zIHPDo28gZGEgQ0VURVNCIGUgZXN0w6NvIGRpc3BvbsOtdmVpcyBlbSBzZXUgZW5kZXJlw6dvIFtlbGV0csO0bmljb10oaHR0cHM6Ly9xdWFsYXIuY2V0ZXNiLnNwLmdvdi5icikuIE9zIHByb2dyYW1hcyB1c2Fkb3MgcGFyYSBvIHByb2Nlc3NhbWVudG8gZG9zIGRhZG9zIGZvcmFtIG8gYFB5dGhvbmAgZSBgUiBTdHVkaW9gLiBPIHByb2dyYW1hIGBSIFN0dWRpb2AgZm9pIHVzYWRvIHBhcmEgb2J0ZXIgbyBncsOhZmljbyBkYSBzw6lyaWUgdGVtcG9yYWwgZGUgdG9kb3Mgb3MgcG9sdWVudGVzIGNvbnNpZGVyYWRvcy4gUGFyYSBpc3NvLCBmb2kgdXRpbGl6YWRvIG8gcGFjb3RlIGBvcGVuYWlyYCBjb20gYSBmdW7Dp8OjbyBgdGltZVBsb3RgLgoKYGBge3IgRjMsIGVjaG89LCBmaWcuYWxpZ249J2NlbnRlcicsIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTgsIHBhZ2VkLnByaW50PVRSVUV9CmxpYnJhcnkob3BlbmFpcikgIyB0byBwcm9jZXNzIGFpciBxdWFsaXR5IGRhdGEgaW4gb3JkZXIgdG8gZ2V0IGdyYXBocwpsaWJyYXJ5KGx1YnJpZGF0ZSkgIyB0byBleHRyYWN0IG1vbnRoIGFuZCB5ZWFyIGVhc2lseSBmcm9tIGNvbHVtbiBjYWxsZWQgImRhdGUiCmxpYnJhcnkobGF0dGljZSk7IGxpYnJhcnkoUkNvbG9yQnJld2VyKSA7bGlicmFyeShsYXR0aWNlRXh0cmEpCiMgSW1wb3J0IGRhdGEgZnJvbSBwYXRoCnJtKGxpc3Q9bHMoKSkgIyByZW1vdmUgZGF0YSBpbiBHbG9iYWwgRW52aXJvbm1lbnQKc2pyX25vMiA8LSByZWFkLmNzdigiL2Nsb3VkL3Byb2plY3Qvc2pyX25vMi5jc3YiLCBzZXA9IjsiKQpzanJfbzMgPC0gcmVhZC5jc3YoIi9jbG91ZC9wcm9qZWN0L3Nqcl9vMy5jc3YiLCBzZXA9IjsiKQpzanJfcG0yNSA8LSByZWFkLmNzdigiL2Nsb3VkL3Byb2plY3Qvc2pyX3BtMjUuY3N2Iiwgc2VwPSI7IikKCiMgQ3JlYXRlIGEgZGF0YWZyYW1lCnN0YXJ0IDwtIGFzLlBPU0lYY3QoJzIwMTgtMDEtMDEgMDA6MDAnLCB0eiA9ICJHTVQiKQplbmQgIDwtIGFzLlBPU0lYY3QoJzIwMTgtMTItMzEgMjM6MDAnLCB0eiA9ICJHTVQiKQpkYXRlcyA8LSBkYXRhLmZyYW1lKGRhdGUgPSBzZXEoc3RhcnQsIGVuZCwgYnkgPSAnaG91cnMnKSkKCnNqcl9ubzIkZGF0ZSA8LSBwYXN0ZShzanJfbm8yJGRhdGUyLCBzanJfbm8yJGhvdXIpCnNqcl9ubzIkZGF0ZSA8LSBhcy5QT1NJWGN0KHN0cnB0aW1lKHNqcl9ubzIkZGF0ZSwgZm9ybWF0ID0gJyVkLyVtLyVZICVIOiVNJyksIHR6ID0gIkdNVCIpCm5vMiA8LSBtZXJnZShkYXRlcywgc2pyX25vMiwgYWxsID0gVCkKbm8yIDwtIG5vMlstODc2MSxdICMgcmV0aXJhbW9zIDIwMTkKbm8yIDwtIHN1YnNldChubzIsIHNlbGVjdCA9IGMoZGF0ZSwgbm8yKSkKCnNqcl9vMyRkYXRlIDwtIHBhc3RlKHNqcl9vMyRkYXRlMiwgc2pyX28zJGhvdXIpCnNqcl9vMyRkYXRlIDwtIGFzLlBPU0lYY3Qoc3RycHRpbWUoc2pyX28zJGRhdGUsIGZvcm1hdCA9ICclZC8lbS8lWSAlSDolTScpLCB0eiA9ICJHTVQiKQpvMyA8LSBtZXJnZShkYXRlcywgc2pyX28zLCBhbGwgPSBUKQpvMyA8LSBvM1stODc2MSxdICMgcmV0aXJhbW9zIDIwMTkKbzMgPC0gc3Vic2V0KG8zLCBzZWxlY3QgPSBjKGRhdGUsIG8zKSkKCnNqcl9wbTI1JGRhdGUgPC0gcGFzdGUoc2pyX3BtMjUkZGF0ZTIsIHNqcl9wbTI1JGhvdXIpCnNqcl9wbTI1JGRhdGUgPC0gYXMuUE9TSVhjdChzdHJwdGltZShzanJfcG0yNSRkYXRlLCBmb3JtYXQgPSAnJWQvJW0vJVkgJUg6JU0nKSwgdHogPSAiR01UIikKcG0yNSA8LSBtZXJnZShkYXRlcywgc2pyX3BtMjUsIGFsbCA9IFQpCnBtMjUgPC0gcG0yNVstODc2MSxdICMgcmV0aXJhbW9zIDIwMTkKcG0yNSA8LSBzdWJzZXQocG0yNSwgc2VsZWN0ID0gYyhkYXRlLCBwbTI1KSkKCnNqciA8LSBkYXRhLmZyYW1lKGRhdGVzLCBwbTI1JHBtMjUsIG5vMiRubzIsIG8zJG8zKQpuYW1lcyhzanIpIDwtIGMoImRhdGUiLCJwbTI1Iiwibm8yIiwibzMiKQpzanIkbW9udGggPC0gbW9udGgoc2pyJGRhdGUpIApzanIgPC0gc2pyWy1ucm93KHNqciksXQpybShkYXRlcywgbm8yLCBvMywgcG0yNSwgc2pyX25vMiwgc2pyX28zLCBzanJfcG0yNSwgZW5kLCBzdGFydCkKCnNqciRtb250aCA8LSBhcy5mYWN0b3IoZm9ybWF0KHNqciRkYXRlLCAiJW0iKSkgIyBnZW5lcmF0ZSBhbm90aGVyIGNvbHVtbgptb250aCA9IGMoIkphbiIsICJGZWIiLCAiTWFyIiwgIkFiciIsICJNYXkiLCAiSnVuIiwgIkp1bCIsICJBZ28iLCAiU2V0IiwgIk91dCIsICJOb3YiLCAiRGV6IikKCnRpbWVQbG90KHNqciwgcG9sbHV0YW50ID0gYygibzMiLCAibm8yIiwicG0yNSIpLCBtYWluID0gIiBGaWd1cmEgMyBcIAogICAgICAgICBSZXN1bW8gZGUgZGFkb3MgZGEgZXN0YcOnw6NvIFPDo28gSm9zw6kgZG8gUmlvIFByZXRvIC0gQW5vIDIwMTgiLAogICAgICAgICB4bGFiID0gIk3DqnMiLCBkYXRlLmJyZWFrcyA9IDEyLCBrZXkgPSBGLCB4LmF4aXMgPSBtb250aCwgZGF0ZS5mb3JtYXQgPQogICAgICAgICAgICIlbSIsIHlsYWIgPSBleHByZXNzaW9uKCIgIiptdSoiZy8iKm1eezN9KiIgIiksIGF1dG8udGV4dCA9IFQpCgpgYGAKQ29tbyBtb3N0cmEgYSAqKkZpZ3VyYSAzKiosIGFzIGNvbmNlbnRyYcOnw7VlcyBkZSBPJF8zJCBmb3JhbSBhbHRhcyBwcmluY2lwYWxtZW50ZSBlbnRyZSBvcyBtZXNlcyBkZSBzZXRlbWJybyBlIG5vdmVtYnJvLiBTaW1pbGFybWVudGUsIG5lc3RlcyBtZXNlcyBhcyBjb25jZW50cmHDp8O1ZXMgZGUgTk8kXzIkIGUgUE0kX3syLDV9JCB0YW1iw6ltIGZvcmFtIGFsdGFzLiBObyBlbnRhbnRvLCBhcyBjb25jZW50cmHDp8O1ZXMgZGUgUE0kX3syLDV9JCBhdW1lbnRvdSBhaW5kYSBtYWlzIGR1cmFudGUgbyBpbnZlcm5vLgoKKioyLiBDYWxjdWxlIGFzIG3DqWRpYXMgZSBjb21wYXJlIGNvbSBvcyBQYWRyw7VlcyBFc3RhZHVhaXMvTmFjaW9uYWlzIGUgYXMgcmVjb21lbmRhw6fDtWVzIGRhIE9yZ2FuaXphw6fDo28gTXVuZGlhbCBkZSBTYcO6ZGUgKHF1ZSDDqSBvIHBhZHLDo28gZmluYWwgZG8gZGVjcmV0byBlIGRhIHJlc29sdcOnw6NvIENPTkFNQSkuKioKCkFzIG3DqWRpYXMgZm9yYW0gY2FsY3VsYWRhcyBwYXJhIGNhZGEgcG9sdWVudGUgZGUgYWNvcmRvIGNvbSBhcyBtw6lkaWFzIGRvcyBwYWRyw7VlcyBkZSBxdWFsaWRhZGUgZG8gYXIgbmFjaW9uYWwgZSBkYSBPcmdhbml6YcOnw6NvIE11bmRpYWwgZGUgU2HDumRlIChPTVMpLiBBICoqVGFiZWxhIDEqKiBtb3N0cmEgb3MgcGFkcsO1ZXMgZGUgcXVhbGlkYWRlIGRvIGFyLiBFc3RlcyBwYWRyw7VlcyBzw6NvIHVzYWRvcyBuYSBjb21wYXJhw6fDo28gY29tIGFzIG3DqWRpYXMgY2FsY3VsYWRhcyBwYXJhIGEgZXN0YcOnw6NvIFNKUlAuIFNlZ3VuZG8gYSBDRVRFU0IsIGFzIE1ldGFzIEludGVybWVkacOhcmlhcyAoTUkpIHPDo28gcGFkcsO1ZXMgdGVtcG9yw6FyaW9zIGEgc2VyZW0gYWxjYW7Dp2Fkb3MgY29tIG8gb2JqZXRpdm8gZGUgbWVsaG9yYXIgYSBxdWFsaWRhZGUgZG8gYXIgbm8gRXN0YWRvIGRlIFPDo28gUGF1bG8uIE9zIFBhZHLDtWVzIEZpbmFpcyAoUEYpIHPDo28gYXF1ZWxlcyBxdWUgb2ZlcmVjZW0gbWVub3IgcmlzY28gYSBzYcO6ZGUgZGEgcG9wdWxhw6fDo28gZSBjb3JyZXNwb25kZW0gYW9zIHBhZHLDtWVzIGRhIE9NUyBkZSBhY29yZG8gY29tIHNldSBlbmRlcmXDp28gW2VsZXRyw7RuaWNvXShodHRwczovL3d3dy53aG8uaW50L25ld3Mtcm9vbS9mYWN0LXNoZWV0cy9kZXRhaWwvYW1iaWVudC0ob3V0ZG9vciktYWlyLXF1YWxpdHktYW5kLWhlYWx0aCkuCgotLS0Kb3V0cHV0OiBwZGZfZG9jdW1lbnQKLS0tCgpUYWJsZTogVGFiZWxhIDEgUGFkcsO1ZXMgZGUgcXVhbGlkYWRlIGRvIGFyIChDRVRFU0IgRGVjcmV0byBFc3RhZHVhbCBuwrogNTkxMTMgZGUgMjMvMDQvMjAxMykKClBvbHVlbnRlIHwgVGVtcG8gZGUgQW1vc3RyYWdlbSB8IE1JJF8xJCB8IE1JJF8yJCB8IE1JJF8zJCB8IFBGIAotLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0KUE0kX3syLDV9JCB8IDI0IGhvcmFzIChtw6lkaWEpIHwgNjAgfCA1MCB8IDM3IHwgMjUKTk8kXzIkfCAxIGhvcmEgKG3DqWRpYSkgfCAyNjAgfCAyNDAgfCAyMjAgfCAyMDAKTyRfMyQgfCA4IGhvcmFzIChtw6lkaWEgbcOzdmVsIG3DoXhpbWEgZGlhcmlhKSB8IDE0MCB8IDEzMCB8IDEyMCB8IDEwMAoKClBhcmEgbyBjw6FsY3VsbyBkYSBtw6lkaWEgZGUgY2FkYSBwb2x1ZW50ZSwgdXNhbW9zIG8gcHJvZ3JhbWEgYFB5dGhvbmAgZSB0YW1iw6ltIG8gYFIgU3R1ZGlvYC4gTmVzdGUgdWx0aW1vIHByb2dyYW1hLCBhcyBvcMOnw7VlcyBgdGltZVBsb3RgLCBgcm9sbGluZ01lYW5gIGUgYGFnZ3JlZ2F0ZWAgZm9yYW0gdXNhZG9zLiBBIG9ww6fDo28gYHRpbWVQbG90YCBwZXJtaXRlIGZhemVyIG3DqWRpYXMgZGnDoXJpYXM7IGltcG9ydGFudGUgcGFyYSBvYnRlciBtw6lkaWFzIGRlIDI0IGhvcmFzIHBhcmEgbyBQTSRfezIsNX0kLiBPIGByb2xsaW5nTWVhbmAgw6kgdW1hIGZ1bsOnw6NvIGRvIGBvcGVuYWlyYCBxdWUgcGVybWl0ZSBjYWxjdWxhciBhcyBtw6lkaWFzIG3Ds3ZlaXMgcGFyYSBjYWRhIDggaG9yYXMgcXVlIHRlbmhhbSBhbyBtZW5vcyA3NSUgZGUgZGFkb3MgKDYgaG9yYXMpIChDYXJzbGF3IEQuLCAyMDE1KS4gRXN0YSBvcMOnw6NvIGZvaSB1c2FkYSBwYXJhIHByb2Nlc3NhciBhcyBjb25jZW50cmHDp8O1ZXMgaG9yw6FyaWFzIGRlIE8kXzMkLiBGaW5hbG1lbnRlLCBhcyBtw6lkaWFzIG3Ds3ZlaXMgbcOheGltYSBkaWFyaWEgZm9yYW0gYW5hbGlzYWRhcy4gT3MgY2FsY3Vsb3MgdGFtYsOpbSBmb3JhbSBmZWl0b3MgdXNhbmRvIG8gcHJvZ3JhbWEgYFB5dGhvbmAgY29tbyBtb3N0cmEgYSBmaWd1cmEgYWJhaXhvLgoKYGBge3IgaW5jbHVkZT1GQUxTRX0KIyBPYnRhaW4gcm9sbGluZyBtZWFucyBvZiA4IGhvdXJzIGZvciBvem9uZQpvM184aCA8LSByb2xsaW5nTWVhbihzanIsIHBvbGx1dGFudCA9ICJvMyIsIGhvdXJzID0gOCwgbmV3Lm5hbWUgPSAicm9sbGluZ28zIiwgZGF0YS50aHJlc2ggPSA3NSwgbmEucm0gPSBUKQptYXhfbzNfZGF5IDwtIGFnZ3JlZ2F0ZShvM184aFsncm9sbGluZ28zJ10sIGZvcm1hdChvM184aFsnZGF0ZSddLCAnJVktJW0tJWQnKSwgbWF4LCBuYS5ybSA9IEYpCm1heF9vM19kYXkkZGF0ZSA8LSBzZXEobWluKG8zXzhoJGRhdGUpLCBtYXgobzNfOGgkZGF0ZSksIGJ5ID0gJ2RheScsIHR6ID0gIkdNVCIpCm1heF9vM19kYXkgPC0gbWF4X28zX2RheVstMzY2LF0KbmFtZXMobWF4X28zX2RheSlbMl0gPSAibzMiCgojIFBhZHLDtWVzIGRlIHF1YWxpZGFkZSBkbyBhciBkYSBDRVRFU0IKcGFfcG0yNSA9IGMoMjUsMzcsNTAsNjApOyBwYV9ubzIgPSBjKDIwMCwyMjAsMjQwLDI3MCk7IHBhX28zID0gYygxMDAsMTIwLDEzMCwxNDApCmBgYAoKPGNlbnRlcj4KIVtdKFBNMjVfZGFpbHkucG5nKQoKPC9jZW50ZXI+CgpcCgpBICoqRmlndXJhIDQqKiBtb3N0cmEgYSBtw6lkaWEgZGnDoXJpYSBkbyBQTSRfezIsNX0kIGNvbXBhcmFkbyBjb20gb3MgcGFkcsO1ZXMgZGUgcXVhbGlkYWRlIGRvIGFyICgqKlRhYmVsYSAxKiopLiBObyBpbnZlcm5vIGUgaW7DrWNpbyBkYSBwcmltYXZlcmEgKHNldGVtYnJvKSBhY29udGVjZW0gdWx0cmFwYXNzYWdlbnMgZG9zIHBhZHLDtWVzLiBObyBzZXRlbWJybyBvIGF1bWVudG8gZGFzIGNvbmNlbnRyYcOnw7VlcyBkZSBQTX4yLDV+IGVzdMOhIHJlbGFjaW9uYWRvIMOgIGZvcm1hw6fDo28gZGUgcGFydMOtY3VsYXMgZGV2aWRvIGEgcmVhw6fDtWVzIGFzc29jaWFkYXMgYW8gT34zfiAoSmFjb2JzIEQuLCAxOTk5KS4KCmBgYHtyIGluY2x1ZGUgPSBGQUxTRX0KIyBGaWd1cmVzCnRpbWVQbG90KHNqciwgcG9sbHV0YW50ID0gInBtMjUiLCBhdmcudGltZSA9ICJkYXkiLCB5bGFiID0gZXhwcmVzc2lvbihQTVsiMiw1Il1+IlsiKm11KiJnLyIqbV57M30qIl0iKSwgZGF0ZS5icmVha3MgPSAxMiwgbWFpbiA9ICJGaWd1cmEgMiBcIE3DqWRpYSBkacOhcmlhIGRvIFBNMiw1Iiwgc21vb3RoID0gRiwgcmVmLnkgPSBsaXN0KGggPSBwYV9wbTI1LCBsdHkgPSBjKDIsMiwyLDIpKSkKYGBgCmBgYHtyIGluY2x1ZGU9RkFMU0V9CnRyZWxsaXMubGFzdC5vYmplY3QoKSArIAogIGxheWVyKGx0ZXh0KHggPSBhcy5QT1NJWGN0KCIyMDE4LTAxLTE1IiksIHkgPSBwYV9wbTI1KzMsIAogICAgICAgICAgICAgIGxhYmVscyA9IGMoIlBGIiwgZXhwcmVzc2lvbigiTUkiWzNdKSwgZXhwcmVzc2lvbigiTUkiWzJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24oIk1JIlsxXSkpLCBjZXggPSAwLjc1KSwgcm93cyA9IDEpCmBgYAoKPGNlbnRlcj4KIVtdKE5PMl9ob3VyX2luX2hvdXIucG5nKQoKPC9jZW50ZXI+CgpcCgpBICoqRmlndXJhIDUqKiBtb3N0cmEgYSBjb25jZW50cmHDp8OjbyBtw6lkaWEgaG9yw6FyaWEgZGUgTk8kXzIkIGVtIDIwMTguIE7Do28gb2NvcnJlbSB1bHRyYXBhc3NhZ2VucyBkb3MgcGFkcsO1ZXMgZGUgYWNvcmRvIGNvbSBhICoqVGFiZWxhIDEqKi4KCmBgYHtyIGluY2x1ZGUgPSBGQUxTRX0KdGltZVBsb3Qoc2pyLCBwb2xsdXRhbnQgPSAibm8yIiwgZGF0ZS5icmVha3MgPSAxMiwgbWFpbiA9ICJGaWd1cmEgMyBcIE3DqWRpYSBob3LDoXJpYSBkbyBOTzIiLCBjb2xzID0gImJsdWUiLCB5bGFiID0gZXhwcmVzc2lvbihOT1syXX4iWyIqbXUqImcvIiptXnszfSoiXSIpLCB5bGltPSAwOjI4MCwgIHJlZi55ID0gbGlzdChoID0gcGFfbm8yLCBsdHkgPSBjKDIsMiwyLDIpKSkKYGBgCmBgYHtyIEY1LCBpbmNsdWRlPUZBTFNFfQp0cmVsbGlzLmxhc3Qub2JqZWN0KCkgKyAKICBsYXllcihsdGV4dCh4ID0gYXMuUE9TSVhjdCgiMjAxOC0wMS0xNSIpLCB5ID0gcGFfbm8yKzUsIAogICAgICAgICAgICAgIGxhYmVscyA9IGMoIlBGIiwgZXhwcmVzc2lvbigiTUkiWzNdKSwgZXhwcmVzc2lvbigiTUkiWzJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24oIk1JIlsxXSkpLCBjZXggPSAwLjUpLCByb3dzID0gMSkKYGBgCgpgYGB7ciBpbmNsdWRlPUZBTFNFfQp0aW1lUGxvdChtYXhfbzNfZGF5LCBwb2xsdXRhbnQgPSAibzMiLCBkYXRlLmJyZWFrcyA9IDEyLCBtYWluID0gIkZpZ3VyYSA2CiAgICAgICAgIFwgTcOpZGlhIG3Ds3ZlbCBkZSA4IGhvcmFzIG3DoXhpbWEgZGlhcmlhIChhbm8gMjAxOCkiLCBjb2xzID0gInJlZCIsIHlsYWIgPSBleHByZXNzaW9uKE9bM11+IlsiKm11KiJnLyIqbV57M30qIl0iKSwgcGxvdC50eXBlID0gImgiLCB5bGltPSAwOjE2MCwgcmVmLnkgPSBsaXN0KGggPSBwYV9vMywgbHR5ID0gYygyLDIsMiwyKSkpCmBgYApgYGB7ciBGNiwgZWNobz1GQUxTRSwgZmlnLmhlaWdodD03LCBmaWcud2lkdGg9OH0KdHJlbGxpcy5sYXN0Lm9iamVjdCgpICsgCiAgbGF5ZXIobHRleHQoeCA9IGFzLlBPU0lYY3QoIjIwMTgtMDEtMTUiKSwgeSA9IHBhX28zKzIsIAogICAgICAgICAgICAgIGxhYmVscyA9IGMoIlBGIiwgZXhwcmVzc2lvbigiTUkiWzNdKSwgZXhwcmVzc2lvbigiTUkiWzJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24oIk1JIlsxXSkpLCBjZXggPSAwLjUpLCByb3dzID0gMSkKYGBgClwKQSAqKkZpZ3VyYSA2KiogbW9zdHJhIGFzIGNvbmNlbnRyYcOnw7VlcyBtw6lkaWFzIG3Ds3ZlaXMgbcOheGltYSBkacOhcmlhIHBhcmEgbyBPJF8zJCB0cm9wb3Nmw6lyaWNvIGNvbXBhcmFkb3MgY29tIG9zIHBhZHLDtWVzIGRhIE9NUyAoUEYpIGUgZGVtYWlzICgqKlRhYmVsYSAxKiopLiBEdXJhbnRlIG8gdmVyw6NvIGEgbmVidWxvc2lkYWRlIGF0ZW51YSBhIGlycmFkacOibmNpYSBzb2xhciBxdWUgw6kgdW0gZmF0b3IgZGV0ZXJtaW5hbnRlIG5hcyByZWHDp8O1ZXMgcXXDrW1pY2FzIGRlIGZvcm1hw6fDo28gZG8gTyRfMyQ7IG5hIHByaW1hdmVyYSwgZW0gYXVzw6puY2lhIGRlIG51dmVucywgYXVtZW50YSBvIHRlbXBvIGRlIGlycmFkacOibmNpYSBzb2xhciAoQ2FydmFsaG8gVi4sIEZyZWl0YXMgRS4sIE1hcnRpbnMgTC4sIE1henpvbGkgQy4gZSBBbmRyYWRlIE0uLCAyMDE1KS4KCioqMy4gQ2FsY3VsZSBvIG7Dum1lcm8gZGUgdWx0cmFwYXNzYWdlbnMgZG9zIHBhZHLDtWVzL3JlY29tZW5kYcOnw7Vlcy4qKgoKQSAqKlRhYmVsYSAyKiogbW9zdHJhIG8gbsO6bWVybyBkZSB1bHRyYXBhc3NhZ2VucyBkb3MgcGFkcsO1ZXMgZGUgcXVhbGlkYWRlIGRvIGFyIHBhcmEgb3MgcG9sdWVudGVzLiBBcyBvcMOnw6NvIGB0aW1lQXZlcmFnZWAgZG8gcGFjb3RlIGBvcGVuYWlyYCBmb2kgdXNhZG8gcGFyYSBjYWxjdWxhciBhIG3DqWRpYSBkacOhcmlhIGRvIFBNfjIsNX47IG91dHJhcyBvcMOnw7VlcyBkbyBwcm9ncmFtYSBgUmAgZm9yYW0gdXNhZGFzIChgc3Vic2V0YCwgYGxlbmd0aGAsIGBSZWR1Y2VgKS4KYGBge3IgaW5jbHVkZT1GQUxTRX0KcG0yNV9kYXkgPSB0aW1lQXZlcmFnZShzdWJzZXQoc2pyLCBzZWxlY3QgPSBjKGRhdGUsIG1vbnRoLCBwbTI1KSksCiAgICAgICAgICAgICAgICAgICAgICAgYXZnLnRpbWUgPSAiZGF5Iiwgc3RhdGlzdGljID0gIm1lYW4iKQoKdWx0cl9wbTI1IDwtIHN1YnNldChwbTI1X2RheSwgcG0yNSA+PSAyNSwgc2VsZWN0ID0gYyhkYXRlLCBwbTI1KSkKY291bnRfcG0yNSA8LSBkYXRhLmZyYW1lKFBvbHVlbnRlID0gIlBNMjUiLAogICAgICAgICAgICAgICAgICAgICAgICAgTUkxID0gbGVuZ3RoKHdoaWNoKHBtMjVfZGF5WzJdID49IDYwKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBNSTIgPSBsZW5ndGgod2hpY2gocG0yNV9kYXlbMl0gPj0gNTApKSwKICAgICAgICAgICAgICAgICAgICAgICAgIE1JMyA9IGxlbmd0aCh3aGljaChwbTI1X2RheVsyXSA+PSAzNykpLAogICAgICAgICAgICAgICAgICAgICAgICAgUEYgPSBsZW5ndGgod2hpY2gocG0yNV9kYXlbMl0gPj0gMjUpKSkKCnVsdHJfbm8yIDwtIHN1YnNldChzanIsIG5vMiA+PSAyMDAsIHNlbGVjdCA9IGMoZGF0ZSwgbm8yKSkKY291bnRfbm8yIDwtIGRhdGEuZnJhbWUoUG9sdWVudGUgPSAiTk8yIiwKICAgICAgICAgICAgICAgICAgICAgICAgTUkxID0gbGVuZ3RoKHdoaWNoKHNqclszXSA+PSAyNjApKSwKICAgICAgICAgICAgICAgICAgICAgICAgTUkyID0gbGVuZ3RoKHdoaWNoKHNqclszXSA+PSAyNDApKSwKICAgICAgICAgICAgICAgICAgICAgICAgTUkzID0gbGVuZ3RoKHdoaWNoKHNqclszXSA+PSAyMjApKSwKICAgICAgICAgICAgICAgICAgICAgICAgUEYgPSBsZW5ndGgod2hpY2goc2pyWzNdID49IDIwMCkpKQoKdWx0cl9vMyA8LSBzdWJzZXQobWF4X28zX2RheSwgbzMgPj0gMTAwLCBzZWxlY3QgPSBjKGRhdGUsIG8zKSkKCmNvdW50X28zIDwtIGRhdGEuZnJhbWUoUG9sdWVudGUgPSAiTzMiLAogICAgICAgICAgICAgICAgICAgICAgIE1JMSA9IGxlbmd0aCh3aGljaChtYXhfbzNfZGF5WzJdID49IDE0MCkpLAogICAgICAgICAgICAgICAgICAgICAgIE1JMiA9IGxlbmd0aCh3aGljaChtYXhfbzNfZGF5WzJdID49IDEzMCkpLAogICAgICAgICAgICAgICAgICAgICAgIE1JMyA9IGxlbmd0aCh3aGljaChtYXhfbzNfZGF5WzJdID49IDEyMCkpLAogICAgICAgICAgICAgICAgICAgICAgIFBGID0gbGVuZ3RoKHdoaWNoKG1heF9vM19kYXlbMl0gID49IDEwMCkpKQoKdWx0ciA8LSBSZWR1Y2UoZnVuY3Rpb24oeCwgeSkgbWVyZ2UoeCwgeSwgYWxsPVRSVUUpLCBsaXN0KHVsdHJfcG0yNSwgdWx0cl9ubzIsIHVsdHJfbzMpKQp1bHRyIDwtIGRhdGEuZnJhbWUodWx0clsxXSwgcm91bmQodWx0clsyOjRdLCBkaWdpdHMgPSAyKSkKCmNvdW50IDwtIFJlZHVjZShmdW5jdGlvbih4LCB5KSBtZXJnZSh4LCB5LCBhbGw9VFJVRSksIGxpc3QoY291bnRfcG0yNSwgY291bnRfbm8yLCBjb3VudF9vMykpIAoKcm0oY291bnRfbm8yLCBjb3VudF9vMywgY291bnRfcG0yNSwgdWx0cl9ubzIsIHVsdHJfbzMsIHVsdHJfcG0yNSkKYGBgCgotLS0Kb3V0cHV0OiBwZGZfZG9jdW1lbnQKLS0tCgpUYWJsZTogVGFiZWxhIDIgTsO6bWVybyBkZSB1bHRyYXBhc3NhZ2VucyBkb3MgcGFkcsO1ZXMgZGUgcXVhbGlkYWRlIGRvIGFyIChDRVRFU0IsIDIwMTkpCgpQb2x1ZW50ZSAgICAgIHwgTUkkXzEkICAgICAgICAgfCBNSSRfMiQgICAgICAgIHwgTUkkXzMkICAgICAgICB8IFBGIAotLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLSAKUE0kX3syLDV9JCAgICB8IDEgICAgICAgICAgICAgfCAyICAgICAgICAgICAgIHwgOCAgICAgICAgICAgICB8IDQ4Ck5PJF8yJCAgICAgICAgfCAwICAgICAgICAgICAgIHwgMCAgICAgICAgICAgICB8IDAgICAgICAgICAgICAgfCAwCk8kXzMkICAgICAgICAgfCAwICAgICAgICAgICAgIHwgMiAgICAgICAgICAgICB8IDMgICAgICAgICAgICAgfCAyMgoKYGBge3IgaW5jbHVkZT1GQUxTRX0KbGlicmFyeShrbml0cik7IGxpYnJhcnkoa2FibGVFeHRyYSkgIyB0byBtYWtlIHRhYmxlcwoKY291bnQgJT4lCiAga2FibGUoY2FwdGlvbiA9ICJUYWJlbGEgMiAgXCAgTsO6bWVybyBkZSB1bHRyYXBhc3NhZ2VucyBkb3MgcGFkcsO1ZXMgZGUgcXVhbGlkYWRlIGRvIGFyIikgJT4lCiAga2FibGVfc3R5bGluZyhmb250X3NpemUgPSAxMikgJT4lCiAgZm9vdG5vdGUoZ2VuZXJhbF90aXRsZSA9ICJOb3RhOiIsIGdlbmVyYWwgPSAiQmFzZWFkbyBub3MgZGFkb3MgZGEgQ0VURVNCICgyMDE5KS4iKQpgYGAKUGFyYSBhbmFsaXNhciBvcyByZXN1bHRhZG9zIGZvcmFtIGdyYXZhZGFzIGFzIGRhdGFzIGNvbSB1bHRyYXBhc3NhZ2VucyBwYXJhIGNhZGEgcG9sdWVudGUgdXNhbmRvIG8gcHJvZ3JhbWEgYFJgLiBBbMOpbSBkaXNzbywgYSBmdW7Dp8OjbyBgY2FsZW5kYXJQbG90YCBkbyBwYWNvdGUgYG9wZW5haXJgIGZvaSB1dGlsaXphZGEgcGFyYSB2aXN1YWxpemFyIG9zIGRpYXMgY29tIHVsdHJhcGFzc2FnZW5zIGRvcyBwYWRyw7VlcyBkZSBxdWFsaWRhZGUgZG8gYXIgKCoqVGFiZWxhIDEqKikgcGFyYSBvIFBNJF97Miw1fSQgKCoqRmlndXJhIDcqKikgZSBvIE8kXzMkICgqKkZpZ3VyYSA4KiopLiBBICpGaWd1cmEgNyoqIG1vc3RyYSBhcyBjb25jZW50cmHDp8O1ZXMgbcOpZGlhcyBkZSAyNCBob3JhcyBlIGEgKipGaWd1cmEgOCoqIG1vc3RyYSBhcyBjb25jZW50cmHDp8O1ZXMgbcOheGltYXMgZGnDoXJpYXMgZGFzIG3DqWRpYXMgbcOzdmVpcyBkbyBPfjN+LgoKSnVsaG8gYXByZXNlbnRhIG1haXMgZGlhcyBjb20gdWx0cmFwYXNzYWdlbnMgZG9zIHBhZHLDtWVzIGRlIHF1YWxpZGFkZSBkbyBhciAoKipUYWJlbGEgMSoqKS4gRGUgYWNvcmRvIGNvbSBhIENFVEVTQiAoMjAxOSksIGFzIGNvbmRpw6fDtWVzIG1ldGVvcm9sw7NnaWNhcyBmb3JhbSBkZXNmYXZvcsOhdmVpcyDDoCBkaXNwZXJzw6NvIGRlIHBvbHVlbnRlcyBwcmltw6FyaW9zLCBjb21vIG8gUE1+Miw1fiwgZGV2aWRvIGVzdGFiaWxpZGFkZSBhdG1vc2bDqXJpY2EsIGEgYmFpeGEgdmVudGlsYcOnw6NvLCBhdXPDqm5jaWEgZGUgcHJlY2lwaXRhw6fDo28sIG9jb3Jyw6puY2lhIGRlIGZvY29zIGRlIHF1ZWltYWRhcyBlbSByZWdpw7VlcyBkbyBpbnRlcmlvciBkbyBlc3RhZG8gZSBhbHRhIHBvcmNlbnRhZ2VtIGRlIGNhbG1hcmlhLgoKTyBzZWd1bmRvIG3DqnMgY29tIG1haXMgZGlhcyBkZSB1bHRyYXBhc3NhZ2VucyBmb2kgc2V0ZW1icm8uIE5lc3RlIG3DqnMgdGFtYmVtIGhvdXZlIGFzIG1haW9yZXMgY29uY2VudHJhw6fDtWVzIGRlIE8kXzMkIGRpYXJpYS4KCmBgYHtyIEY3LCBlY2hvPSwgZmlnLmFsaWduPSdjZW50ZXInLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD04LCBwYWdlZC5wcmludD1UUlVFfQpjYWxlbmRhclBsb3QodWx0cixwb2xsdXRhbnQgPSAicG0yNSIsIG1haW4gPSBleHByZXNzaW9uKCJGaWd1cmEgNyBcIERpYXMgY29tIHVsdHJhcGFzc2FnZW5zIHBhcmEgbyBQTSJbIjIsNSJdKSwga2V5LmhlYWRlciA9ICJ1Zy9tMyIsIGF1dG8udGV4dCA9IFQpCmBgYApOZXN0ZSBzZW50aWRvLCBhICoqRmlndXJhIDgqKiBtb3N0cmEgY2xhcmFtZW50ZSBxdWUgb3MgbWVzZXMgZGUgYWdvc3RvIGUgc2V0ZW1icm8gYXByZXNlbnRhbSBvcyBkaWFzIGNvbSBtYWlzIHVsdHJhcGFzYWdlbnMgZG9zIHBhZHLDtWVzIGRlIHF1YWxpZGFkZSBkbyBhciBwYXJhIG8gTyRfMyQuCmBgYHtyIEY4LCBlY2hvPSwgZmlnLmFsaWduPSdjZW50ZXInLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD04LCBwYWdlZC5wcmludD1UUlVFfQpjYWxlbmRhclBsb3QodWx0cixwb2xsdXRhbnQgPSAibzMiLCBtYWluID0gZXhwcmVzc2lvbigiRmlndXJhIDggXCBEaWFzIGNvbSB1bHRyYXBhc3NhZ2VucyBwYXJhIG8gTyJbM10pLCBrZXkuaGVhZGVyID0gInVnL20zIiwgYXV0by50ZXh0ID0gVCkKYGBgCgoqKjQuIENhbGN1bGUgYXMgbcOpZGlhcyBob3LDoXJpYXMgZG8gUE1+Miw1fiwgT34zfiBlIE5PfjJ+IGUgZXNib2NlIG9zIGdyw6FmaWNvcyBkbyBjaWNsbyBkacOhcmlvIG3DqWRpbyAoMjQgaG9yYXMpIHBhcmEgY2FkYSB1bSBkb3MgbWVzZXMuKioKCkFzIG3DqWRpYXMgaG9yw6FyaWFzIGZvcmFtIGNhbGN1bGFkYXMgcGFyYSBjYWRhIHBvbHVlbnRlLiBBICoqRmlndXJhIDkqKiBtb3N0cmEgYSB2YXJpYcOnw6NvIGRhcyBjb25jZW50cmHDp8O1ZXMgZG8gUE1+Miw1fi4gSnVsaG8gw6kgbyBtw6pzIHF1ZSB0ZW0gYXMgbcOheGltYXMgY29uY2VudHJhw6fDtWVzIGR1cmFudGUgbyBjaWNsbyBkacOhcmlvIG3DqWRpbyBkZSAyNCBob3Jhcy4KCmBgYHtyIEY5LCBlY2hvPSwgZmlnLmFsaWduPSdjZW50ZXInLCBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD02LCBwYWdlZC5wcmludD1UUlVFfQpzanIkaG91ciA8LSBob3VyKHNqciRkYXRlKQptZWFucyA8LSBhZ2dyZWdhdGUoc2pyWyJwbTI1Il0sIGZvcm1hdChzanJbImRhdGUiXSwiJW0tJUgiKSwgbWVhbiwgbmEucm0gPSBUUlVFKQogICAgICAgICAgICAgICAgICAgICAgCnBsb3QobWVhbnMkcG0yNSwgeGF4dCA9ICJuIiwgdHlwZSA9ICJuIiwgeGxhYiA9ICJIb3JhIiwgY2V4LmF4aXMgPSAwLjc1LCB5bGFiID0gZXhwcmVzc2lvbihQTVsiMiw1Il1+IlsiKm11KiJnLyIqbV57M30qIl0iKSApCmF4aXMoMSwgYXQgPSBzZXEoMSwgMjg4LCAyNCksIGxhYmVscyA9IEZBTFNFKSAjIGFkZCBzb21lIHRpY2sgbWFya3MgYXQgMjQgaHIgaW50ZXJ2YWxzCm1vbnRocyA9IGMoIkphbiIsICJGZWIiLCAiTWFyIiwgIkFiciIsICJNYXkiLCAiSnVuIiwgIkp1bCIsICJBZ28iLCAiU2V0IiwgIk91dCIsICJOb3YiLCAiRGV6IikgIyBhZGQgc29tZSBsYWJlbHMgdG8geC1heGlzCmxvYy5tb250aHMgPSBzZXEoMTIsIDI3NiwgMjQpICMgbG9jYXRpb24gb2YgbGFiZWxzIG9uIHgtYXhpcwptdGV4dChtb250aHMsIHNpZGUgPSAxLCBsaW5lID0gMiwgYXQgPSBsb2MubW9udGhzKSAjIHdyaXRlIHRleHQgaW4gbWFyZ2luCmxpbmVzKG1lYW5zJHBtMjUsIGNvbCA9ICJvcmFuZ2UiLCBsd2QgPSAyKSAjIGFkZCB0aGUgbGluZQpheGlzKDEsIGF0ID0gc2VxKDEsIDI4OCwgMTIpLCBsYWJlbHMgPSBGQUxTRSkKaG91ciA9IHJlcGxpY2F0ZSgxMiwgIjEyOjAwIiwgc2ltcGxpZnkgPSBGQUxTRSkgIyBhZGQgc29tZSBsYWJlbHMgdG8geC1heGlzCm10ZXh0KGhvdXIsIHNpZGUgPSAxLCBsaW5lID0gMSwgYXQgPSBsb2MubW9udGhzLCBjZXggPSAwLjc1KSAjIHdyaXRlIHRleHQgaW4gbWFyZ2luCmFibGluZSh2ID0gc2VxKDEsIDI4OCwgMTIpLCBjb2wgPSAiZ3JleTgwIiwgbHR5ID0gNCkKYWJsaW5lKHYgPSBzZXEoMSwgMjg4LCAyNCksIGNvbCA9ICJncmV5NzAiKSAjIGFkZCBzb21lIGdyaWQgbGluZXMKdGl0bGUoZXhwcmVzc2lvbigiRmlndXJhIDkgXCBWYXJpYcOnw6NvIG3DqWRpYSBob3LDoXJpYSBwb3IgbcOqcyBkbyBQTSJbIjIsNSJdKSwgc3ViID0gIk3DqnMiLAogICAgICBjZXgubWFpbiA9IDEuMjUsICAgZm9udC5tYWluPSA0LCBjb2wubWFpbj0gImJsYWNrIiwKICAgICAgY2V4LnN1YiA9IDAuNzUsIGZvbnQuc3ViID0gMywgY29sLnN1YiA9ICJibGFjayIpCgpgYGAKQSAqKkZpZ3VyYSAxMCoqIG1vc3RyYSBhcyBjb25jZW50cmHDp8O1ZXMgbcOpZGlhcyBkdXJhbnRlIG8gY2ljbG8gZGlhcmlvIGRlIGNhZGEgbcOqcyBwYXJhIG8gcG9sdWVudGUgTk9+Mn4uIEFzIGFsdGFzIGNvbmNlbnRyYcOnw7VlcyBvY29ycmVtIG5vIGludmVybm8gZSBhcyBiYWl4YXMgZHVyYW50ZSBvIHZlcsOjby4gQWzDqW0gZGlzc28sIHRhbWLDqW0gaMOhIGNvbmNlbnRyYcOnw7VlcyBhbHRhcyBkdXJhbnRlIGEgbWFuaMOjICgwNzowMCBoIC0gMDk6MDAgaCkgZSBhIG5vaXRlICgxOTowMCBoIC0gMjI6MDAgaCkuIFBvciBvdXRybyBsYWRvLCBlbnRyZSBhcyAxNDowMCBob3JhcyBlIGFzIDE3OjAwIGhvcmFzIGFzIGNvbmNlbnRyYcOnw7VlcyBkZSBOT34yfiBkaW1pbnVlbSBlIHPDo28gYXByb3hpbWFkYW1lbnRlIGNvbnN0YW50ZXMgYW8gbG9uZ28gZG8gYW5vLgoKYGBge3IgRjEwLCBlY2hvPSwgZmlnLmFsaWduPSdjZW50ZXInLCBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD02LCBwYWdlZC5wcmludD1UUlVFfQptZWFucyA8LSBhZ2dyZWdhdGUoc2pyWyJubzIiXSwgZm9ybWF0KHNqclsiZGF0ZSJdLCIlbS0lSCIpLCBtZWFuLCBuYS5ybSA9IFRSVUUpCiAgICAgICAgICAgICAgICAgICAgICAKcGxvdChtZWFucyRubzIsIHhheHQgPSAibiIsIHR5cGUgPSAibiIsIHhsYWIgPSAiSG9yYSIsIHlsYWIgPSBleHByZXNzaW9uKE5PWzJdfiJbIiptdSoiZy8iKm1eezN9KiJdIikgKQpheGlzKDEsIGF0ID0gc2VxKDEsIDI4OCwgMjQpLCBsYWJlbHMgPSBGQUxTRSkgIyBhZGQgc29tZSB0aWNrIG1hcmtzIGF0IDI0IGhyIGludGVydmFscwptb250aHMgPSBjKCJKYW4iLCAiRmViIiwgIk1hciIsICJBYnIiLCAiTWF5IiwgIkp1biIsICJKdWwiLCAiQWdvIiwgIlNldCIsICJPdXQiLCAiTm92IiwgIkRleiIpICMgYWRkIHNvbWUgbGFiZWxzIHRvIHgtYXhpcwpsb2MubW9udGhzID0gc2VxKDEyLCAyNzYsIDI0KSAjIGxvY2F0aW9uIG9mIGxhYmVscyBvbiB4LWF4aXMKbXRleHQobW9udGhzLCBzaWRlID0gMSwgbGluZSA9IDIsIGF0ID0gbG9jLm1vbnRocykgIyB3cml0ZSB0ZXh0IGluIG1hcmdpbgpsaW5lcyhtZWFucyRubzIsIGNvbCA9ICJyZWQiLCBsd2QgPSAyKSAjIGFkZCB0aGUgbGluZQpheGlzKDEsIGF0ID0gc2VxKDEsIDI4OCwgMTIpLCBsYWJlbHMgPSBGQUxTRSkKaG91ciA9IHJlcGxpY2F0ZSgxMiwgIjEyOjAwIiwgc2ltcGxpZnkgPSBGQUxTRSkgIyBhZGQgc29tZSBsYWJlbHMgdG8geC1heGlzCm10ZXh0KGhvdXIsIHNpZGUgPSAxLCBsaW5lID0gMSwgYXQgPSBsb2MubW9udGhzLCBjZXggPSAwLjc1KSAjIHdyaXRlIHRleHQgaW4gbWFyZ2luCmFibGluZSh2ID0gc2VxKDEsIDI4OCwgMTIpLCBjb2wgPSAiZ3JleTgwIiwgbHR5ID0gNCkKYWJsaW5lKHYgPSBzZXEoMSwgMjg4LCAyNCksIGNvbCA9ICJncmV5NzAiKSAjIGFkZCBzb21lIGdyaWQgbGluZXMKdGl0bGUoZXhwcmVzc2lvbigiRmlndXJhIDEwIFwgVmFyaWHDp8OjbyBtw6lkaWEgaG9yw6FyaWEgcG9yIG3DqnMgZG8gTk8iWzJdKSwgc3ViID0gIk3DqnMiLAogICAgICBjZXgubWFpbiA9IDEuMjUsICAgZm9udC5tYWluPSA0LCBjb2wubWFpbj0gImJsYWNrIiwKICAgICAgY2V4LnN1YiA9IDAuNzUsIGZvbnQuc3ViID0gMywgY29sLnN1YiA9ICJibGFjayIpCmBgYApBICoqRmlndXJhIDExKiogbW9zdHJhIGFzIGNvbmNlbnRyYcOnw7VlcyBtw6lkaWFzIGR1cmFudGUgbyBjaWNsbyBkaWFyaW8gZGUgY2FkYSBtw6pzIHBhcmEgT34zfi4gQXMgY29uY2VudHJhw6fDtWVzIG3DoXhpbWEgZGUgT34zfiBhY29udGVjZSBwcsOzeGltbyBkYXMgMTI6MDAgaG9yYXMsIHByw7N4aW1vIGRvIGhvcsOhcmlvIHF1ZSBhIGludGVuc2lkYWRlIGRlIGlycmFkacOibmNpYSBzb2xhciDDqSBtw6F4aW1hLiBEdXJhbnRlIGEgbm9pdGUgb2NvcnJlIHVtIHBlcXVlbm8gYXVtZW50byBkYSBjb25jZW50cmHDp8OjbyBlbSBxdWUgcG9zc2l2ZWxtZW50ZSBlc3TDoSByZWxhY2lvbmFkbyBjb20gbyB0cmFuc3BvcnRlIHVyYmFubyAoKipDYXJ2YWxobyBldCBhbC4sIDIwMTUqKikuCmBgYHtyIEYxMSwgZWNobz0sIGZpZy5hbGlnbj0nY2VudGVyJywgZmlnLmhlaWdodD00LCBmaWcud2lkdGg9NiwgcGFnZWQucHJpbnQ9VFJVRX0KbWVhbnMgPC0gYWdncmVnYXRlKHNqclsibzMiXSwgZm9ybWF0KHNqclsiZGF0ZSJdLCIlbS0lSCIpLCBtZWFuLCBuYS5ybSA9IFRSVUUpCiAgICAgICAgICAgICAgICAgICAgICAKcGxvdChtZWFucyRvMywgeGF4dCA9ICJuIiwgdHlwZSA9ICJuIiwgeGxhYiA9ICJIb3JhIiwgeWxhYiA9IGV4cHJlc3Npb24oT1szXX4iWyIqbXUqImcvIiptXnszfSoiXSIpICkKYXhpcygxLCBhdCA9IHNlcSgxLCAyODgsIDEyKSwgY29sID0gImJsYWNrIiAsbGFiZWxzID0gRkFMU0UpCmF4aXMoMSwgYXQgPSBzZXEoMSwgMjg4LCAyNCksIGNvbCA9ICJibGFjayIsbGFiZWxzID0gRkFMU0UpICMgYWRkIHNvbWUgdGljayBtYXJrcyBhdCAyNCBociBpbnRlcnZhbHMKbW9udGhzID0gYygiSmFuIiwgIkZlYiIsICJNYXIiLCAiQWJyIiwgIk1heSIsICJKdW4iLCAiSnVsIiwgIkFnbyIsICJTZXQiLCAiT3V0IiwgIk5vdiIsICJEZXoiKSAjIGFkZCBzb21lIGxhYmVscyB0byB4LWF4aXMKbG9jLm1vbnRocyA9IHNlcSgxMiwgMjc2LCAyNCkgIyBsb2NhdGlvbiBvZiBsYWJlbHMgb24geC1heGlzCm10ZXh0KG1vbnRocywgc2lkZSA9IDEsIGxpbmUgPSAyLCBhdCA9IGxvYy5tb250aHMpICMgd3JpdGUgdGV4dCBpbiBtYXJnaW4KbGluZXMobWVhbnMkbzMsIGNvbCA9ICJibHVlIiwgbHdkID0gMikgIyBhZGQgdGhlIGxpbmUKaG91ciA9IHJlcGxpY2F0ZSgxMiwgIjEyOjAwIiwgc2ltcGxpZnkgPSBGQUxTRSkgIyBhZGQgc29tZSBsYWJlbHMgdG8geC1heGlzCm10ZXh0KGhvdXIsIHNpZGUgPSAxLCBsaW5lID0gMSwgYXQgPSBsb2MubW9udGhzLCBjZXggPSAwLjc1KSAjIHdyaXRlIHRleHQgaW4gbWFyZ2luCmFibGluZSh2ID0gc2VxKDEsIDI4OCwgMTIpLCBjb2wgPSAiZ3JleTgwIiwgbHR5ID0gNCkKYWJsaW5lKHYgPSBzZXEoMSwgMjg4LCAyNCksIGNvbCA9ICJncmV5NzAiKSAjIGFkZCBzb21lIGdyaWQgbGluZXMKdGl0bGUoZXhwcmVzc2lvbigiRmlndXJhIDExIFwgVmFyaWHDp8OjbyBtw6lkaWEgaG9yw6FyaWEgcG9yIG3DqnMgZG8gTyJbM10pLCBzdWIgPSAiTcOqcyIsCiAgICAgIGNleC5tYWluID0gMS4yNSwgICBmb250Lm1haW49IDQsIGNvbC5tYWluPSAiYmxhY2siLAogICAgICBjZXguc3ViID0gMC43NSwgZm9udC5zdWIgPSAzLCBjb2wuc3ViID0gImJsYWNrIikKCmBgYAoqKjUuIERpc2N1dGEgbyBjb21wb3J0YW1lbnRvIGRpw6FyaW8gZG9zIHBvbHVlbnRlcyAodGVudGUgcmVsYWNpb25hciBjb20gYXMgdmFyacOhdmVpcyBkZSByYWRpYcOnw6NvLCB0ZW1wZXJhdHVyYSwgY2h1dmEvdW1pZGFkZSkuKioKCiMjIyMgUGFydMOtY3VsYXMgaW5hbMOhdmVpcyBmaW5hcyBvIFBNfjIsNX4gCkRlIGFjb3JkbyBjb20gYSBDRVRFU0IgKDIwMTkpLCBhIHBvcmNlbnRhZ2VtIG1ham9yaXTDoXJpYSBkbyBQTX4yLDV+IGVtIFPDo28gUGF1bG8gw6kgZGUgb3JpZ2VtIHZlaWN1bGFyLiBFeGlzdGVtIHVtYSBwb3JjZW50YWdlbSBiYWl4YSBkZXZpZGEgYSByZXNzdXNwZW5zw6NvIGRlIHBvZWlyYSBkZSBydWEsIG1hcyBuw6NvIMOpIHNpZ25pZmljYXRpdmEgKENFVEVTQiwgMjAxOSkuIEFsw6ltIGRpc3NvLCBubyBtw6pzIGRlIGp1bGhvICgqKkZpZ3VyYSA0KiopIGFzIGNvbmRpw6fDtWVzIG1ldGVvcm9sw7NnaWNhcyBuw6NvIHBlcm1pdGlyYW0gdW1hIGJvYSBkaXNwZXJzw6NvIGRvcyBwb2x1ZW50ZXMgZGV2aWRvIGFvIGVzdGFnbmFtZW50bywgYmFpeGEgdmVudGlsYcOnw6NvIGUgYWx0YSBwb3JjZW50YWdlbSBkZSBjYWxtYXJpYSAoQ0VURVNCLCAyMDE5KS4gTm8gc2V0ZW1icm8gYWNvbnRlY2V1IG8gYXVtZW50byBkYXMgY29uY2VudHJhw6fDtWVzIGRlIFBNfjIsNX4gZGV2aWRvIGFvcyBwcm9jZXNzb3MgZGUgZm9ybWHDp8OjbyBkZSBwYXJ0w61jdWxhcyBwZWxhIHJlYcOnw7VlcyBxdcOtbWljYXMgcGFyYSBhIGZvcm1hw6fDo28gZG8gb3rDtG5pbyAoQnJhc3NldXIgZXQgYWwuLCAxOTk5KS4KCkR1cmFudGUgbyB2ZXLDo28sIGFzIGNvbmNlbnRyYcOnw7VlcyBzw6NvIGJhaXhhcyBkZXZpZG8gYW8gYXVtZW50byBkYSBjYW1hZGEgZGUgbWlzdHVyYSBwZWxvcyBwcm9jZXNzb3MgZGUgY29udmVjw6fDo28gZGV2aWRvIGFvIGF1bWVudG8gZGUgdGVtcGVyYXR1cmEgZSB0YW1iw6ltIHBlbGEgZGVwb3Npw6fDo28gw7ptaWRhIGRldmlkbyBhb3MgZWZlaXRvcyBkYXMgY2h1dmFzIHF1ZSByZXTDqm0gYXMgcGFydMOtY3VsYXMgKExhemFyaWRpcywgMjAxMSkuCgojIyMjIERpw7N4aWRvIGRlIG5pdHJvZ8OqbmlvIChOT34yfikKTyBOT34yfiBzb2ZyZSByZWHDp8O1ZXMgcXXDrW1pY2FzIG5hIGF0bW9zZmVyYSBlIGF0dWEgY29tbyBwcmVjdXJzb3IgbmEgZm9ybWHDp8OjbyBkbyBvesO0bmlvIChCcmFzc2V1ciBldCBhbC4sIDE5OTkpLiBEZXN0ZSBtb2RvLCBuYSAqKkZpZ3VyYSAxMCoqIGEgZGltaW51acOnw6NvIGRhcyBjb25jZW50cmHDp8O1ZXMgZGUgTk9+Mn4gc8OjbyBkZXZpZGFzIGFvIGF1bWVudG8gZGFzIGNvbmNlbnRyYcOnw7VlcyBkZSBPfjN+ICgqKkZpZ3VyYSAxMSoqKS4gQWzDqW0gZGlzc28sIGR1cmFudGUgbyBpbnZlcm5vIGFzIGNvbmNlbnRyYcOnw7VlcyBzw6NvIGFsdGFzIGRldmlkYSBhIHJlZHXDp8OjbyBkYSBjYW1hZGEgZGUgbWlzdHVyYSBlIGVzdGFiaWxpZGFkZSBhdG1vc2bDqXJpY2EgKExhemFyaWRpcywgMjAxMSkuCgojIyMjIE96w7RuaW8gdHJvcG9zZsOpcmljbyAoT34zfikKTyBPfjN+IHRyb3Bvc2bDqXJpY28gw6kgdW0gcG9sdWVudGUgc2VjdW5kw6FyaW8gZm9ybWFkbyBkYSBveGlkYcOnw6NvIGZvdG9xdcOtbWljYSBkbyBDTyAobW9uw7N4aWRvIGRlIGNhcmJvbm8pLCBtZXRhbm8gKENIfjR+KSBlIGNvbXBvc3RvcyBvcmfDom5pY29zIHZvbMOhdGVpcyAoQ09WKSBuYSBwcmVzZW7Dp2EgZGUgTk9+eH4gKMOzeGlkb3MgZGUgbml0cm9nw6puaW8pIGUgcmFkaWHDp8OjbyBzb2xhciAoQnJhc3NldXIgZXQgYWwuLCAxOTk5KS4gRHVyYW50ZSBvIGRpYSBwb2RlcmlhIGFjb250ZWNlciB1bWEgbWFpb3IgZW1pc3PDo28gZGUgQ09WOyBvcyBpc29wcmVub3Mgc8OjbyBwcm9kdXppZG9zIGR1cmFudGUgbyBkaWEgcGVsYXMgZmxvcmVzdGFzIChMYXphcmlkaXMsIDIwMTEpLgoKQXNzaW0sIGR1cmFudGUgYSBwcmltYXZlcmEgKCoqRmlndXJhIDExKiopLCBhcyBtYWlvcmVzIGNvbmNlbnRyYcOnw7VlcyBkZSBPfjN+IGZvcmFtIHJlZ2lzdHJhZGFzIGRldmlkbyBhbyBtYWlvciBuw7ptZXJvIGRlIGhvcmFzIGRlIHJhZGlhw6fDo28gc29sYXIgKENFVEVTQiwgMjAxOSkuIER1cmFudGUgbyB2ZXLDo28sIGFwZXNhciBkYXMgbWFpb3JlcyB0ZW1wZXJhdHVyYXMgZSBpbnRlbnNpZGFkZSBkYSByYWRpYcOnw6NvIHNvbGFyLCBhcyBudXZlbnMgZm9yYW0gdW0gZmF0b3IgZGUgcmVkdcOnw6NvIGRvIG7Dum1lcm8gZGUgaG9yYXMgZGUgcmFkaWHDp8OjbyBzb2xhciAoQ2FydmFsaG8gZXQgYWwuLCAyMDE1KS4gQ29udHVkbywgZW0gZGV6ZW1icm8gZGV2aWRvIMOgIGFsdGEgaW5jaWTDqm5jaWEgZGUgcmFkaWHDp8OjbyBzb2xhciBlIGFsdGFzIHRlbXBlcmF0dXJhcyBhIGZvcm1hw6fDo28gZGUgT34zfiBhdW1lbnRvdSBwZWxhIGZvcm1hw6fDo28gZGUgSE5PfjN+IChDRVRFU0IsIDIwMTkpLgoKRHVyYW50ZSBhIG5vaXRlLCBjb21vIG7Do28gaMOhIGZvcm1hw6fDo28gZG8gT34zfiBlbnTDo28gw6kgbXVpdG8gcG9zc8OtdmVsIHF1ZSBvIGF1bWVudG8gc2VqYSBwZWxvIHRyYW5zcG9ydGUgZGUgb3V0cmFzIGx1Z2FyZXMsIGNvbW8gc3VnZXJlbSBhbGd1bnMgZXN0dWRvcyAoQ2FydmFsaG8gZXQgYWwuLCAyMDE1KS4KCiMjIyBSZWZlcsOqbmNpYQoqIEJyYXNzZXVyLCBHLiBQLiwgT3JsYW5kbywgSi4gSi4sICYgVHluZGFsbCwgRy4gUy4gKDE5OTkpLiBBdG1vc3BoZXJpYyBDaGVtaXN0cnkgYW5kIEdsb2JhbCBDaGFuZ2UuIE5ldyBZb3JrOiBPeGZvcmQgVW5pdmVyc2l0eSBQcmVzcy4KKiBDYXJzbGF3LCBELiAoMjAxNSkuIFRoZSBvcGVuYWlyIG1hbnVhbCBvcGVuLXNvdXJjZSB0b29scyBmb3IgYW5hbHlzaW5nIGFpciBwb2xsdXRpb24gZGF0YS4gSW4gS2luZ+KAmXMgQ29sbGVnZSBMb25kb24uIExvbmRvbiwgRW5nbGFuZDogS2luZ+KAmXMgQ29sbGVnZSBMb25kb24uCiogQ2FydmFsaG8sIFYuIFMuIEIuLCBGcmVpdGFzLCBFLiBELiwgTWFydGlucywgTC4gRC4sIE1hcnRpbnMsIEouIEEuLCBNYXp6b2xpLCBDLiBSLiwgJiBBbmRyYWRlLCBNLiBkZSBGLiAoMjAxNSkuIEFpciBxdWFsaXR5IHN0YXR1cyBhbmQgdHJlbmRzIG92ZXIgdGhlIE1ldHJvcG9saXRhbiBBcmVhIG9mIFPDo28gUGF1bG8sIEJyYXppbCBhcyBhIHJlc3VsdCBvZiBlbWlzc2lvbiBjb250cm9sIHBvbGljaWVzLiBFbnZpcm9ubWVudGFsIFNjaWVuY2UgJiBQb2xpY3ksIDQ3LCA2OOKAkzc5LiBodHRwczovL2RvaS5vcmcvMTAuMTAxNi9qLmVudnNjaS4yMDE0LjExLjAwMQoqIENFVEVTQi4gKDIwMTkpLiBRdWFsaWRhZGUgZG8gYXIgbm8gZXN0YWRvIGRlIFPDo28gUGF1bG8gMjAxOC4gaHR0cHM6Ly9kb2kub3JnLzEwLjExOTIvYmpwLjExMi40ODMuMjExLWEKKiBMYXphcmlkaXMsIE0uICgyMDExKS4gRmlyc3QgUHJpbmNpcGxlcyBvZiBNZXRlb3JvbG9neSBhbmQgQWlyIFBvbGx1dGlvbiAoU3ByaW5nZXI7IEIuIEouIEFsbG93YXkgJiBKLiBULiBUcmV2b3JzLCBlZHMuKS4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMDcvOTc4LTk0LTAwNy0wMTYyLTUKCgo=