1: Introdução
É um fato que a população mundial está envelhecendo, continentes
inteiros como a Europa está sendo impactados por essa mudança
demográfica, decorrente décadas de mudanças estruturais na sociedade que
também geram impacto na conjuntura econômica. O Brasil não diverge do
problema, atualmente a população brasileira sofre com um envelhecimento
acelerado com origens desde de a década de 70. Mas o que pode parecer
apenas uma questão de queda de produção e trabalho, se estende para
diversos impasses fiscais, problemáticas futuras de investimento e
poupança e impacto no Produto Interno Bruto (PIB). Apesar da principal
Reforma da Previdência ter sido aprovada em 2019, justamente para
mitigar os efeitos desse envelhecimento, o amanhã para a economia
brasileira ainda é bastante inconclusivo, com a necessidade de ser bem
analisado e estudado quando se trata das consequências a respeito do
grande aumento da população idosa. Dessa forma, este relatório em
questão tem como objetivo investigar a evolução da transição demográfica
e quais são os seus impactos hoje na economia brasileira atual.
2: Evolução da Demografia Brasileira até os dias de
hoje
Em um primeiro momento é fundamental entender o atual cenário sobre a
demografia nacional, a começar pelo grande número de idosos que temos
hoje no país, pois o comportamento de envelhecimento da população não é
fenômeno recente, mas sim algo que já ocorre há diversos anos dentro do
Brasil. Segundo os dados do último Censo Demográfico realizado em 2022,
em 12 anos o número de pessoas com 65 anos ou mais cresceu 57,4% em
relação à população do país, sendo que atualmente a porcentagem total
dessas pessoas está em torno de 11% de acordo com o censo. Em 1980, a
população com 65 anos ou mais representava apenas 4,0%, um grande
aumento na porcentagem dessa faixa etária na sociedade em um período de
40 anos, uma das transições demográficas mais aceleradas do mundo, algo
que levou mais de um século para ocorrer na Europa.
Por se tratar de uma transição demográfica, o fenômeno observado não
apenas apresenta um maior crescimento da população idosa, mas sim também
uma diminuição da população de crianças de até 14 anos, mudando de 38,2%
em 1980, para 24,1% em 2010 e no último censo de 2022 para apenas 19,8%.
A parcela da população de 15 a 64 anos, também teve um salto em seus
números saindo de 57.7% em 1980 para 69,3% em 2022, mostrando a priori
um aumento da população economicamente ativa.
Os dados abordados foram retirados do último Censo Demográfico
realizado em 2022, dessa forma os dados mais recentes mostram um cenário
ainda mais crítico sobre o fenômeno da transição demográfica. Ao
analisar os dados da PNAD (Pesquisa Nacional por Amostra de Domicílios)
do IBGE, que foi divulgado em Abril desse ano, o número de idosos
alcançou o patamar de 16,6% em 2025, a população de 30 a 59 anos também
aumentou, atingindo 58,6% do total de habitantes, e apesar de abordar um
número menor de pessoas igual ao Censo, na qual a faixa é de 14 a 64
anos, ambas pesquisas mostram que essa faixa etária ocupa a maior parte
da população brasileira. Além do mais, houve também uma redução de
jovens de 0 a 13 anos recuando de 22% para 18,1%, evidenciando a mesma
tendência já observada no Censo de 2022, uma transição demográfica
intensificada a cada ano que se passa.
Gráfico 1
Gráfico 2
Analisando mais a fundo as razões para a transição demográfica
acelerada, fica nítido uma grande mudança tanto nas taxas de natalidade
e fecundidade com também nas taxas de mortalidade, que basicamente se
inverteram ao longo desses 40 anos.
A Taxa de Natalidade apresentou uma queda significativa nesse período
de análise, com o menor número de nascimentos em quase 50 anos em 2023,
sendo a quinta queda anual seguida na natalidade. O menor número havia
sido em 1976 que era 2,467 milhões e agora em 2023 o número de registros
de nascimentos foi em torno de 2,518 milhões. (O)
A Taxa de Fecundidade também caiu, porém isso não é um fenômeno
apenas presente no Brasil, mas sim do mundo inteiro. Em 1950, a taxa era
em torno de seis filhos por mulher, e de cinco filhos no mundo. Sete
décadas depois, esse indicador decaiu para apenas 1,6 por mulher, abaixo
do chamado nível de reposição, um patamar 2,1 filhos necessários para
que a próxima geração substitua a anterior sem ajuda da imigração. A
queda se iniciou durante a década de 70, saindo de 5,6 no final dos anos
60 para 4,2 filhos em 1976, abrangendo todas as regiões do território
brasileiro. (Gráfico 3)
Gráfico 3
Semelhante a taxa de fecundidade, a Taxa de Mortalidade Infantil
também reduziu consideralvemente no período abordado, com de 142 óbitos
para cada mil cada mil habitantes, em 1950 passando para apenas 32 em
2015. (Gráfico 4)
Do outro lado temos um grande aumento da expectativa de vida,
mostrando uma longevidade maior dos idosos. Espera-se que entre 2015 e
2030, a população acima de 85 anos aumentará em um ritmo mais acelerado
que a população entre zero e sessenta anos. Além disso, estima-se que
também em 2030, 78% das mortes no Brasil ocorrerão com pessoas acima de
sessenta anos, sendo que em 1950 a parcela da população que ultrapassava
os sessenta anos era apenas de 18%. De acordo com dados recentes do
IBGE, esse avanço da esperança de vida ainda ocorre, estando agora em
torno de 76,4 para ambos os sexos. (Gráfico 5)
(Gráfico 4)
(Gráfico 5)
Todos os indicadores respondem a diversos fatores que começaram a
ocorrer na metade do século passado e que culminam em reflexos até hoje,
e que resultaram principalmente na transição demográfica analisada nesse
relatório.
Um dos principais sendo a contracepção que impacta diretamente a
fecundidade e a natalidade, com o acesso à metodos contraceptivos a
maternidade se tornou algo planejado entre os casais, e como
consequência o número de filhos por mulher caiu institivamente.
O fator econômico também tem grande peso nessa análise, pois criar um
filho principalmente no Brasil, sendo considerado quase três vezes mais
caro do que há 25 anos, com o custo total atualmente variando entre R$
239 mil e R$ 3,6 milhões de uma criança do nascimento até os 18 anos,
com a conta total subindo cada vez mais.
Além disso, o papel da mulher no mercado de trabalho fez com que as
prioridades fossem redesenhadas, com carreira, formação, autonomia
financeira dentro outros entrando em destaque em um cenário onde à vida
familiar de cuidado os filhos antigamente era a maior prioridade.
Sobre a queda da mortalidade infantil e do aumento da qualidade de
vida, pode-se afirmar que a expansão, do saneamento básico e redes de
atenção primária (programas de vacinação e pré-natal), promoveram à sua
queda e que consequentemente acarretou em um aumento da expectativa da
população mais idosa, devido a esse aumento de políticas públicas
voltadas para a qualidade de vida e saúde.
Observa-se que depois dessa grande análise a transição demográfica
apresenta em sua grande maioria um padrão que se estendeu não apenas no
Brasil mas sim para outros países e continentes, algo que será abordado
ao final do relatório. O artigo “Evolução demográfica recente no Brasil”
do professor José Alberto Magno de Carvalho publicado em 1980, foi o
primeiro a provar essa rápida e dinâmica mudança na demografia
brasileira. Através de seu estudo foi possível estabelecer empiricamente
o padrão específico da transição demográfica brasileira.
Ruptura do Regime Histórico de Equilíbrio Jovem Até 1970, o
Brasil mantinha um padrão demográfico caracterizado por queda na
mortalidade e fecundidade cronicamente elevada, o que gerava alto
crescimento populacional com estrutura etária constante (~51% da
população com menos de 20 anos). A partir de 1970, esse padrão se rompe
com o início de um declínio acelerado da fecundidade.
Queda Generalizada da Fecundidade A Taxa de Fecundidade Total
caiu cerca de 24% entre 1965/70 e 1971/76 em todas as regiões
brasileiras. Por abranger a maioria da população nacional, esse declínio
atingiu obrigatoriamente as classes sociais de menor renda.
Estreitamento Acelerado da Base da Pirâmide A redução no número
de filhos ocorreu a um ritmo mais rápido do que o crescimento do
contingente de mulheres em idade fértil. Isso gerou um efeito imediato
na base da pirâmide etária, fazendo com que o número de nascidos a cada
ano se tornassem proporcionalmente menores do que as gerações
anteriores
Recomposição Etária e Aumento Proporcional de Idosos No modelo de
população estável construído pelo autor, a estrutura populacional sofre
uma mudança profunda: Jovens (0 a 14 anos): A participação cai de ~42%
para ~35% do total de habitantes. Idosos (65 anos ou mais): A
participação salta de ~3% para ~9% da população. Razão de Dependência: A
taxa de dependência total recua ligeiramente de 0,83 para 0,79, mas a
fatia de idosos no total de dependentes cresce de 7% para 20%
Analisando a sucessão de eventos que levam a transição demográfica, é
possível identificar que os indicadores de hoje são uma consequência
direta do que Carvalho observou em seu artigo no início da década de
1980, o passo a passo para a transição demográfica com o fator de que no
caso do Brasil, ocorreu em um espaço de tempo considerado bem curto e de
forma acelerada se comparada com os países europeus.
3: Produtividade como catalisador
Saindo agora da análise demográfica, como todos os indicadores atuais
mostram uma sucessão de eventos de anos de uma transição demográfica
acelerada, a próxima pauta em questão é acerca dos impactos mais diretos
na economia que toda essa dinâmica acarretou.
O impacto mais nítido e evidente se da por conta da Razão de
Dependência, que também passará por um processo de inversão nos próximos
anos segundo as projeções. Atualmente a previsão é de que em 2030 a RD
Jovem ainda será superior do que a RD Idosa, respectivamente com 27%
contra 19.7%, entretanto em 2040 é esperado que essa inversão ocorra com
a RD Idosa em torno 31,5% ultrapassando a jovem no valor de 24,8%
(Gráfico 6)
Na prática a análise dessa razão implica que em um futuro não muito
distante a porcentagem dos idosos mais dependentes economicamente
aumentará em relação a essa nova geração de jovens ativos no mercado de
trabalho. Isso basicamente implica que em 2040 teremos para cada 100
trabalhadores potenciais 31,5 idosos dependentes. Entretanto o cenário
se mostra ainda mais preocupante com passar dos anos, com a projeção de
2060 chegando à 51,5 idosos dependentes para cada 100 trabalhadores
ativos. (Gráfico 6)
(Gráfico 6)
Em um cenário na qual já existe um grande problema de dependência no
longo prazo, a baixa produtividade já se mostra nos dias de hoje com um
potencializador do problema em questão. Conduzindo esse raciocínio é
necessário analisar a PTF (Produtividade Total dos Fatores), um índice
calculado principalmente pela FGV no Brasil que analisa o crescimento da
produção que não é explicado pelo aumento na quantidade de recursos
aplicados, ou seja, captura a eficiência real de todos os fatores.
O histórico recente indica que apesar de um aumento em 2020, ambas as
PTFs apresentaram uma redução considerável até 2022,e posteriormente um
pequeno aumento com a PTF bruta estando atualmente em 101.5 e a de
ajuste de Capital Humano com 84.4, representando que até esse último
aumento a melhoria educacional foi a responsável por melhorar a
produtividade, a PTF Bruta. Ao descontar esse efeito, torna-se evidente
que a eficiência real dos processos produtivos e adoção de novas
tecnologias estão em declínio. (Gráfico 7)
Somando a problemática da produtividade com o aumento da dependência
no longo prazo, enxerga-se um cenário preocupante com os novos
trabalhadores da PEA (População Economicamente Ativa) sendo os
responsáveis por sustentar essa grande nova parcela de idosos, já
operando em um ritmo de eficiência em queda.
(Gráfico 7)
4: Déficit Previdenciário e o impacto no PIB
Como consequência de toda essa sequência, o problema se concretiza na
análise da parte fiscal do país, pois os gastos com a previdência
continuaram subindo acima da inflação mesmo após a Reforma da
Previdência de 2019. De acordo com o IFI (Instituição Fiscal
Independente do Senado), desde a reforma até hoje, apenas em 2021 que
ocorreu uma queda 1,3% na variação real dos gastos com Previdência, com
os todos os demais anos apresentando um aumento com destaque para 2023
em que o aumento real chegou a quase 8%, com a quantidade de benefícios
subindo em 2,6% e o aumento real da despesa com pagamento de benefícios
em 4,79%.
A pesquisa do IFI também calculou e projetou os gastos com a
Previdência para os próximos 10 anos, estimando um crescimento real ano
após ano. No ano passado (2025), o total dos gastos previdenciários já
havia passado trilhão alcançando um patamar de R$ 1,037 trilhão de
reais, e em 2035 o último ano projetado é esperado que o total gasto com
a Previdência Social será em torno R$ 1,587 trilhão, passando a marca de
um trilhão e meio. (Gráfico 8)
De acordo com o último BEPS (Boletim da Previdência Social), o
resultado primário acumulado em 12 meses do RGPS (Regime Geral da
Previdência Social) é de -R$ 349,7 bilhões (BEPS/jun 2026), e os dados a
respeito do último mês calculado (Novembro de 2025), foi registrado um
déficit mensal R$ 21,3 bilhões, mostrando sinais claros de um déficit
estrutural que tende a se tornar cada vez pior.
(Gráfico 8)
O impacto dessa cadeia de eventos já está impactando o fisco do país,
em uma situação na qual já é a das melhores. Com isso, toda essa questão
ainda gera um impacto no PIB, ao analisar a porcentagem de participação
da arrecadação vs benefícios de ambas dentro do mesmo. Em 2024, a
arrecadação foi resposável 5,46% enquanto os benefícios alcançaram 7,99%
de participação, representando um gap estrutural de 2,53 pontos
percentuais evidenciando claramente um desequilíbrio que gera um déficit
previdenciário. (Gráfico 9)
Outro dado relevante que o Boletim de 2024 traz, é acerca da PEA
novamente, na qual 99,5 milhões de pessoas faziam parte dela enquanto
apenas 62,2 milhões são contribuintes de pessoas físicas o que significa
que mais ou menos 37% de ocupados na PEA não contribuem para o RGPS, por
motivos como informalidade, trabalhadores domésticos e dentre
outros.
(Gráfico 9)
5: O problema na raiz do Fiscal
Mediante a todo o cenário em questão e analisando como nos próximos
anos o aumento dos gastos e das despesas relacionadas à previdência
podem corroer o PIB aos poucos, é necessário compreender da onde surgem
esse grande aumento de despesas e gastos e como nos últimos anos eles
vem se intensificando cada vez mais.
Novamente de acordo com o BEPS, pode-se obter a quantidade de
benefícios concedidos e emitidos pelo INSS e identificar dados de
extrema relevância para a análise do fiscal. Primeiro é necessário
destacar a diferença entre concedido e emitido nesse cenário, os
concedidos representam os novos benefícios aprovados no período em
questão, enquanto os emitidos são aqueles ativos que já estão sendo
pagos e estão em “estoque”.
Na série dentro do Boletim que apresenta a quantidade anual de
benefícios concedidos pelo INSS, desde 2006 até metade de 2026, reflete
uma dinâmica de crescimento sobre a variável em questão, principalmente
a partir de 2023, início do 3º Governo Lula que representou a maior
variação anual de toda a série, 14,4%. Nesse ano, as concessões estavam
na casa de 5,2 milhões, o que na época já era o maior valor de toda
série, porém o último valor registrado que é referente a junho de 2026
registrou 8,1 milhões de novos benefícios concedidos com variação anual
de 6,6% apenas na metade do ano. (Gráfico 10)
(Gráfico 10)
Esse grande aumento nos últimos 3 anos coincide com diretamente com
as pessoas nascidas na época do pico do baby boom nacional, entre 1958 e
1963, completando os seus 60-65 anos de idade e atingindo a
aposentadoria, é a parcela do maior corte demográfico da história
brasileira se tornando beneficiária e desequilibrando a balança.
Do outro lado da moeda, ao analisar a evolução da quantidade dos
benefícios emitidos ao longo dos anos o efeito de décadas de concessões
demonstra um número de 42,2 milhões de benefícios destinados por meio do
INSS em 2026. No primeiro ano da série, 2006 o número total era quase de
29,6 milhões, logo houve um aumento de 69% em 19 anos e como já
analisado no último gráfico o fenômeno tende a se tornar cada vez mais
acelerado, ao se considerar o padrão recente dos últimos anos.
A respeito de valores, em 2006 o valor total dos benefícos emitidos
estava em torno de 381 bilhões e passou para 821 bilhões em 2026, um
aumento de 110% em menos de 10 anos. Vale destacar que esses valores se
referem apenas à população urbana, apesar do valor da população rural
também apresentar grandes números, estando hoje na faixa de R$ 183,9
bilhões de reais. Considerando os últimos valores de ambas as séries
referentes a julho de 2026, o total somando o urbano e o rural totaliza
cerca de R$ 1,017 trilhão, valor próximo da projeção feito pelo IFI
abordada mais acima, e que estipulava uma despesa total de R$ 1,091
trilhão de reis para esse ano. (Gráfico 11)
(Gráfico 11)
No fim da análise do Boletim, também entra em evidência outra
problemática em relação a crescente dos gastos elevados com benefícios,
a sua composição por espécie.
Apesar da maioria dos benefícios concedidos se direcionarem para o
“estoque” dos emitidos e ser o grande responsável por esse aumento
detendo um grande peso, a natureza no benefício não pode ser descartada
principalmente se for a respeito do assistencial. Além do RGPS,
financiado por contribuições de empregadores e empregados que inclui
aposentadoria por idade, invalidez, pensão por morte, auxílio-doença e
outros, existe o assistencial que é totalmente sem contribuição e 100%
financiado pelo Tesouro, com apenas dois benefícios BPC ao idoso (+65
anos abaixo da linha da pobreza) e BPC ao deficiente. Não é uma
aposentadoria e sim uma assistência social.
Atualmente o total e beneficiários do RGPS está em torno de 35,67
milhões enquanto os assistenciados estão com 6,4 milhões, porém o
interessante não é apenas analisar a evolução do RGPS ao longo dos anos
de 1%-4%, esperado ao considerar a transição demográfica, mas sim a
evolução do assistencialismo a uma taxa de 2%-7% ao ano, com um grande
aumento recente, principalmente e novamente no ano de 2023 com uma
explosão de 11,3% de um ano pro outro. Tais dados, acendem um novo
alerta, de que além do problema em relação ao envelhecimento daqueles
que envelheceram mas que contribuíram, do outro lado temos um possível
aumento de idosos que necessitam de assistência social, sem nenhum tipo
de contribuição, mais uma variável indicando que a conta do fiscal pode
não fechar logo mais. (Gráfico 12)
(Gráfico 12)
6:Impacto no Investimento e na Poupança
Após destrinchar toda a problemática presente dentro do fiscal
brasileiro, outro impacto da transição demográfica se da por conta da
parte monetária envolvendo poupanças, investimentos e taxas de
juros.
Com o aumento da população idosa, essa parcela da população costuma
consumir e investir menos, algo que pode desacelerar a economia ainda
mais em um longo prazo. A taxa de poupança está 15,5%, resultado do 1º
Trimestre de 2026, enquanto a taxa de investimento se encontra em 16,5%,
o que indica um gap de poupança aberta na qual o brasileiro já depende
da poupança externa para fechar o 1% nessa análise. O envelhecimento da
população pode comprimir ainda mais a poupança privada, enquanto o
déficit previdenciário vindo do RGPS piora ainda mais a poupança
negativa pública. (Gráfico 13)
Além da poupança decair, o lado do investimento também pode
apresentar uma queda porém em uma escala menor, pois juntamente com o
envelhecimento, alguns setores podem se tornar mais demandados e atrair
capital, como saúde e bem-estar, turismo e lazer, infraestrutura para
idosos e dentre outros.
Com ambas em uma possível queda, a situação da estagnação da economia
ou desaceleração do PIB entra em vigência novamente, pois além do PIB
ser impactado pelo lado da produtividade e do fiscal, em outra frente a
queda da atividade econômica pode ocorrer pela falta de investimento e
queda da poupança.
(Gráfico 13)
A medida que o governo necessita de capital e recursos para quitar
dívida bruta, a principal medida para cumprir tal objetivo é a emissão
de títulos públicos, promessas de pagamentos futuros para o investidor
que paga hoje e irá receber o principal mais os juros no futuro.
O problema se encontra quando os títulos vencem, o governo brasileiro
deve honrar o pagamento, porém não tendo superávit, é necessário emitir
novos títulos para pagar os antigos, algo que é o cenário do Brasil na
maior parte do tempo. Tal cenário, é a famosa Rolagem da Dívida, e com
os juros nominais em torno de 9% ao ano, sobre uma dívida de quase 82%
do PIB, faz com que a dívida aumente sem nenhuma despesa nova, pois o
PIB cresce ainda que em um ritmo menor a mais ou menos 2-3%, o que faz
com que a dívida cresça 6-7 pontos percentuais a cada anos. (Gráfico
14)
O déficit público do RGPS se encontra em uma despesa primária
altíssima que o governo não consegue quitar, e como o déficit primário
some no serviço da dívida, no valor mais recente (-10,78%), indicando
que os 349 bilhões vindos do déficit previdenciário viram títulos
públicos novos, que geram juros, que geram mais títulos, que geram
juros.
(Gráfico 14)
No final de análise, é interessante comentar sobre esse mesmo
fenômeno de transição demográfica que ocorre em outro país de forma
muito similar porém com um resultado final que difere da realidade
brasileira. O Japão passou por uma dinâmica de aumento do número de
idosos de uma forma ainda mais severa e impactante, hoje em dia o país é
o líder mundial em envelhecimento populacional totalizando cerca de 36
milhões de pessoas idosas no país.
A população do Japão era de 86,4 milhões de habitantes em 1950, sendo
30,4 milhões de jovens de 0-14 anos (35,2% do total), 13 milhões de
pessoas de 50+ (15% do total), 6,6 milhões de 60+ (7,7% do total) e 389
mil idosos de 80+ (0,5% do total). Estes números mudaram
substancialmente até 2024, ano em que a população total japonesa chegou
a 123,8 milhões de habitantes, sendo 14,2 milhões de jovens de 0-14 anos
(11,4%), 62 milhões de pessoas de 50+ (50%), 44,5% de idosos de 60+
(35,9%) e 13,1 milhões de idosos de 80+ (10,6%). Portanto, as pessoas de
50 anos e mais de idade já representam metade da população japonesa e a
proporção de idosos deve continuar crescendo ao longo do século XXI.
Entretanto, o país asiático não convive com problemas relacionadas a
dívida com grande frequência semelhante ao Brasil. Apesar do Japão ter
envelhecido antes que a população brasileira e acumulou uma enorme
dívida de quase 250% do PIB, foi possível uma sustentação da dívida
devido ao juro real negativo ou praticamente zero e com uma alta
popupança doméstica, o que arrefeceu os títulos, fazendo o custo da
dívida ser mínimo, justamente o caminho inverso do Brasil. (Gráfico
15)
(Gráfico 15)
7: Conclusão
O envelhecimento populacional do Brasil é uma realidade que já se
manifesta em todas as dimensões do país — sociais, econômicas, de saúde,
de segurança e diversas outras. Mais do que um dado estatístico,
trata-se de uma transformação estrutural cujos efeitos abalam as bases
de uma nação da complexidade do Brasil, e que se aprofundará nas
próximas décadas independentemente de qualquer decisão de política
econômica tomada hoje. Nesse sentido, compreender que existe uma cadeia
de eventos que parte do envelhecimento populacional, atravessa a
demografia, a produtividade e o produto, e se concretiza no fiscal — é o
passo essencial para que qualquer caminho de solução seja traçado com
consistência. Ignorar um elo dessa cadeia é tratar o sintoma sem
endereçar a causa. Com esse objetivo, este relatório buscou trazer essa
discussão para além dos gabinetes e das autoridades econômicas. A
transição demográfica acelerada do Brasil não é um tema restrito a
especialistas — ela afeta diretamente o comércio, a poupança, o
investimento, os juros, o salário e tantos outros fatores que compõem a
economia do cotidiano de cada brasileiro. Entendê-la é, portanto, o
primeiro passo para enfrentá-la.
Fontes:
https://educa.ibge.gov.br/jovens/conheca-o-brasil/populacao/18318-piramide-etaria.html
https://www.cnnbrasil.com.br/nacional/brasil/populacao-jovem-cai-e-nume
ro-de-idosos-aumenta-no-brasil-aponta-ibge/#goog_rewarded
https://biblioteca.ibge.gov.br/index.php/biblioteca-catalogo?view=detalhes&id=772
https://strong.com.br/glossario/por-que-o-envelhecimento-populacional-impacta-o-mercado/
https://blogdodesenvolvimento.bndes.gov.br/categoria/economia-e-desenvolvimento/Envelhecimento-e-transicao-demografica/
https://www.worldometers.info/pt/demografia/brasil-demografia/
https://assistants.com.br/a-taxa-de-natalidade-brasileira-vem-caindo/
https://www.cnnbrasil.com.br/nacional/brasil/brasil-registra-menor-numero-de-nascimentos-em-quase-50-anos-diz-ibge/
https://www.congressoemfoco.com.br/noticia/107796/ifi-orcamento-subestimou-gasto-de-bpc-previdencia-e-bolsa-familia
https://www.cnnbrasil.com.br/economia/money/macroeconomia/ifi-orcamento-subestima-despesas-com-previdencia-bpc-e-bolsa-familia/
https://ofator.com.br/informacao/gasto-com-previdencia-continua-subindo-acima-da-inflacao-mostra-ifi/
https://www.gov.br/previdencia/pt-br/assuntos/previdencia-social/Dados-estatisticos-previdencia-social-e-inss/boletins-da-previdencia-social
https://sidra.ibge.gov.br/Tabela/6727
https://sidra.ibge.gov.br/Tabela/6727
https://tradingeconomics.com/japan/interest-rate
https://www.stat-search.boj.or.jp/ssi/mtshtml/fm02_m_1_en.html
https://www.poder360.com.br/poder-internacional/populacao-do-japao-cai-e-numero-de-idosos-atinge-recorde/
LS0tDQp0aXRsZTogIkltcGFjdG9zIGRhIFRyYW5zacOnw6NvIERlbW9ncsOhZmljYSBBY2VsZXJhZGEgZG8gQnJhc2lsIg0KYXV0aG9yOiAiSm/Do28gUGVkcm8gR29kaW5obyINCmRhdGU6ICIyMDI2LTA4LTA2Ig0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6DQogICAgICBjb2xsYXBzZWQ6IGZhbHNlDQogICAgICBzbW9vdGhfc2Nyb2xsOiB0cnVlDQogICAgdG9jX2RlcHRoOiAzDQogICAgbnVtYmVyX3NlY3Rpb25zOiBmYWxzZQ0KICAgIHRoZW1lOiBsdW1lbg0KICAgIGhpZ2hsaWdodDogdGFuZ28NCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSkNCg0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoc2lkcmFyKQ0KbGlicmFyeShpcGVhZGF0YXIpDQpsaWJyYXJ5KHF1YW50bW9kKQ0KbGlicmFyeShzY2FsZXMpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkocmJjYikNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeSh3cml0ZXhsKQ0KbGlicmFyeShodHRyKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KEdldEJDQkRhdGEpDQpgYGANCg0KIyAqMTogSW50cm9kdcOnw6NvKg0KDQrDiSB1bSBmYXRvIHF1ZSBhIHBvcHVsYcOnw6NvIG11bmRpYWwgZXN0w6EgZW52ZWxoZWNlbmRvLCBjb250aW5lbnRlcyBpbnRlaXJvcyBjb21vIGEgRXVyb3BhIGVzdMOhIHNlbmRvIGltcGFjdGFkb3MgcG9yIGVzc2EgbXVkYW7Dp2EgZGVtb2dyw6FmaWNhLCBkZWNvcnJlbnRlIGTDqWNhZGFzIGRlIG11ZGFuw6dhcyBlc3RydXR1cmFpcyBuYSBzb2NpZWRhZGUgcXVlIHRhbWLDqW0gZ2VyYW0gaW1wYWN0byBuYSBjb25qdW50dXJhIGVjb27DtG1pY2EuIE8gQnJhc2lsIG7Do28gZGl2ZXJnZSBkbyBwcm9ibGVtYSwgYXR1YWxtZW50ZSBhIHBvcHVsYcOnw6NvIGJyYXNpbGVpcmEgc29mcmUgY29tIHVtIGVudmVsaGVjaW1lbnRvIGFjZWxlcmFkbyBjb20gb3JpZ2VucyBkZXNkZSBkZSBhIGTDqWNhZGEgZGUgNzAuIE1hcyBvIHF1ZSBwb2RlIHBhcmVjZXIgYXBlbmFzIHVtYSBxdWVzdMOjbyBkZSBxdWVkYSBkZSBwcm9kdcOnw6NvIGUgdHJhYmFsaG8sIHNlIGVzdGVuZGUgcGFyYSBkaXZlcnNvcyBpbXBhc3NlcyBmaXNjYWlzLCBwcm9ibGVtw6F0aWNhcyBmdXR1cmFzIGRlIGludmVzdGltZW50byBlIHBvdXBhbsOnYSBlIGltcGFjdG8gbm8gUHJvZHV0byBJbnRlcm5vIEJydXRvIChQSUIpLiBBcGVzYXIgZGEgcHJpbmNpcGFsIFJlZm9ybWEgZGEgUHJldmlkw6puY2lhIHRlciBzaWRvIGFwcm92YWRhIGVtIDIwMTksIGp1c3RhbWVudGUgcGFyYSBtaXRpZ2FyIG9zIGVmZWl0b3MgZGVzc2UgZW52ZWxoZWNpbWVudG8sIG8gYW1hbmjDoyBwYXJhIGEgZWNvbm9taWEgYnJhc2lsZWlyYSBhaW5kYSDDqSBiYXN0YW50ZSBpbmNvbmNsdXNpdm8sIGNvbSBhIG5lY2Vzc2lkYWRlIGRlIHNlciBiZW0gYW5hbGlzYWRvIGUgZXN0dWRhZG8gcXVhbmRvIHNlIHRyYXRhIGRhcyBjb25zZXF1w6puY2lhcyBhIHJlc3BlaXRvIGRvIGdyYW5kZSBhdW1lbnRvIGRhIHBvcHVsYcOnw6NvIGlkb3NhLiBEZXNzYSBmb3JtYSwgZXN0ZSByZWxhdMOzcmlvIGVtIHF1ZXN0w6NvIHRlbSBjb21vIG9iamV0aXZvIGludmVzdGlnYXIgYSBldm9sdcOnw6NvIGRhIHRyYW5zacOnw6NvIGRlbW9ncsOhZmljYSBlIHF1YWlzIHPDo28gb3Mgc2V1cyBpbXBhY3RvcyBob2plIG5hIGVjb25vbWlhIGJyYXNpbGVpcmEgYXR1YWwuIA0KDQojICoyOiBFdm9sdcOnw6NvIGRhIERlbW9ncmFmaWEgQnJhc2lsZWlyYSBhdMOpIG9zIGRpYXMgZGUgaG9qZSoNCg0KRW0gdW0gcHJpbWVpcm8gbW9tZW50byDDqSBmdW5kYW1lbnRhbCBlbnRlbmRlciBvIGF0dWFsIGNlbsOhcmlvIHNvYnJlIGEgZGVtb2dyYWZpYSBuYWNpb25hbCwgYSBjb21lw6dhciBwZWxvIGdyYW5kZSBuw7ptZXJvIGRlIGlkb3NvcyBxdWUgdGVtb3MgaG9qZSBubyBwYcOtcywgcG9pcyBvIGNvbXBvcnRhbWVudG8gZGUgZW52ZWxoZWNpbWVudG8gZGEgcG9wdWxhw6fDo28gbsOjbyDDqSBmZW7DtG1lbm8gcmVjZW50ZSwgbWFzIHNpbSBhbGdvIHF1ZSBqw6Egb2NvcnJlIGjDoSBkaXZlcnNvcyBhbm9zIGRlbnRybyBkbyBCcmFzaWwuIFNlZ3VuZG8gb3MgZGFkb3MgZG8gw7psdGltbyBDZW5zbyBEZW1vZ3LDoWZpY28gcmVhbGl6YWRvIGVtIDIwMjIsIGVtIDEyIGFub3MgbyBuw7ptZXJvIGRlIHBlc3NvYXMgY29tIDY1IGFub3Mgb3UgbWFpcyBjcmVzY2V1IDU3LDQlIGVtIHJlbGHDp8OjbyDDoCBwb3B1bGHDp8OjbyBkbyBwYcOtcywgc2VuZG8gcXVlIGF0dWFsbWVudGUgYSBwb3JjZW50YWdlbSB0b3RhbCBkZXNzYXMgcGVzc29hcyBlc3TDoSBlbSB0b3JubyBkZSAxMSUgZGUgYWNvcmRvIGNvbSBvIGNlbnNvLiBFbSAxOTgwLCBhIHBvcHVsYcOnw6NvIGNvbSA2NSBhbm9zIG91IG1haXMgcmVwcmVzZW50YXZhIGFwZW5hcyA0LDAlLCB1bSBncmFuZGUgYXVtZW50byBuYSBwb3JjZW50YWdlbSBkZXNzYSBmYWl4YSBldMOhcmlhIG5hIHNvY2llZGFkZSBlbSB1bSBwZXLDrW9kbyBkZSA0MCBhbm9zLCB1bWEgZGFzIHRyYW5zacOnw7VlcyBkZW1vZ3LDoWZpY2FzIG1haXMgYWNlbGVyYWRhcyBkbyBtdW5kbywgYWxnbyBxdWUgbGV2b3UgbWFpcyBkZSB1bSBzw6ljdWxvIHBhcmEgb2NvcnJlciBuYSBFdXJvcGEuIA0KDQpQb3Igc2UgdHJhdGFyIGRlIHVtYSB0cmFuc2nDp8OjbyBkZW1vZ3LDoWZpY2EsIG8gZmVuw7RtZW5vIG9ic2VydmFkbyBuw6NvIGFwZW5hcyBhcHJlc2VudGEgdW0gbWFpb3IgY3Jlc2NpbWVudG8gZGEgcG9wdWxhw6fDo28gaWRvc2EsIG1hcyBzaW0gdGFtYsOpbSB1bWEgZGltaW51acOnw6NvIGRhIHBvcHVsYcOnw6NvIGRlIGNyaWFuw6dhcyBkZSBhdMOpIDE0IGFub3MsIG11ZGFuZG8gZGUgMzgsMiUgZW0gMTk4MCwgcGFyYSAyNCwxJSBlbSAyMDEwIGUgbm8gw7psdGltbyBjZW5zbyBkZSAyMDIyIHBhcmEgYXBlbmFzIDE5LDglLiBBIHBhcmNlbGEgZGEgcG9wdWxhw6fDo28gZGUgMTUgYSA2NCBhbm9zLCB0YW1iw6ltIHRldmUgdW0gc2FsdG8gZW0gc2V1cyBuw7ptZXJvcyBzYWluZG8gZGUgNTcuNyUgZW0gMTk4MCBwYXJhIDY5LDMlIGVtIDIwMjIsIG1vc3RyYW5kbyBhIHByaW9yaSB1bSBhdW1lbnRvIGRhIHBvcHVsYcOnw6NvIGVjb25vbWljYW1lbnRlIGF0aXZhLiANCg0KT3MgZGFkb3MgYWJvcmRhZG9zIGZvcmFtIHJldGlyYWRvcyBkbyDDumx0aW1vIENlbnNvIERlbW9ncsOhZmljbyByZWFsaXphZG8gZW0gMjAyMiwgZGVzc2EgZm9ybWEgb3MgZGFkb3MgbWFpcyByZWNlbnRlcyBtb3N0cmFtIHVtIGNlbsOhcmlvIGFpbmRhIG1haXMgY3LDrXRpY28gc29icmUgbyBmZW7DtG1lbm8gZGEgdHJhbnNpw6fDo28gZGVtb2dyw6FmaWNhLiBBbyBhbmFsaXNhciBvcyBkYWRvcyBkYSBQTkFEIChQZXNxdWlzYSBOYWNpb25hbCBwb3IgQW1vc3RyYSBkZSBEb21pY8OtbGlvcykgZG8gSUJHRSwgcXVlIGZvaSBkaXZ1bGdhZG8gZW0gQWJyaWwgZGVzc2UgYW5vLCBvIG7Dum1lcm8gZGUgaWRvc29zIGFsY2Fuw6dvdSBvIHBhdGFtYXIgZGUgMTYsNiUgZW0gMjAyNSwgYSBwb3B1bGHDp8OjbyBkZSAzMCBhIDU5IGFub3MgdGFtYsOpbSBhdW1lbnRvdSwgYXRpbmdpbmRvIDU4LDYlIGRvIHRvdGFsIGRlIGhhYml0YW50ZXMsIGUgYXBlc2FyIGRlIGFib3JkYXIgdW0gbsO6bWVybyBtZW5vciBkZSBwZXNzb2FzIGlndWFsIGFvIENlbnNvLCBuYSBxdWFsIGEgZmFpeGEgw6kgZGUgMTQgYSA2NCBhbm9zLCBhbWJhcyBwZXNxdWlzYXMgbW9zdHJhbSBxdWUgZXNzYSBmYWl4YSBldMOhcmlhIG9jdXBhIGEgbWFpb3IgcGFydGUgZGEgcG9wdWxhw6fDo28gYnJhc2lsZWlyYS4gQWzDqW0gZG8gbWFpcywgaG91dmUgdGFtYsOpbSB1bWEgcmVkdcOnw6NvIGRlIGpvdmVucyBkZSAwIGEgMTMgYW5vcyByZWN1YW5kbyBkZSAyMiUgcGFyYSAxOCwxJSwgZXZpZGVuY2lhbmRvIGEgbWVzbWEgdGVuZMOqbmNpYSBqw6Egb2JzZXJ2YWRhIG5vIENlbnNvIGRlIDIwMjIsIHVtYSB0cmFuc2nDp8OjbyBkZW1vZ3LDoWZpY2EgaW50ZW5zaWZpY2FkYSBhIGNhZGEgYW5vIHF1ZSBzZSBwYXNzYS4gDQoNCioqR3LDoWZpY28gMSoqDQoNCmBgYHtyfQ0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgR3LDoWZpY286IFBpcsOibWlkZSBFdMOhcmlhIOKAlCBCcmFzaWwgfCBDZW5zbyAxOTgwDQojIElkZW50aWRhZGUgVmlzdWFsIE9maWNpYWw6IFBhZHLDo28gSWJNYWNybyBCSCAoTWFudWFsIGRlIE1hcmNhKQ0KIyBGb250ZTogSUJHRSDigJQgQ2Vuc28gRGVtb2dyw6FmaWNvIDE5ODANCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCiMgUHJldmVuw6fDo28gcGFyYSBjYW1pbmhvcyB0ZW1wb3LDoXJpb3Mgbm8gV2luZG93cyBjb20gYWNlbnR1YcOnw6NvDQpkaXIuY3JlYXRlKCJDOi9SdGVtcCIsIHNob3dXYXJuaW5ncyA9IEZBTFNFKQ0KU3lzLnNldGVudihUTVBESVIgPSAiQzovUnRlbXAiLCBUTVAgPSAiQzovUnRlbXAiLCBURU1QID0gIkM6L1J0ZW1wIikNCg0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KDQojIOKUgOKUgCAxLiBERUZJTknDh8ODTyBEQSBQQUxFVEEgSU5TVElUVUNJT05BTCAoR1VJQSBERSBNQVJDQSkg4pSA4pSA4pSA4pSA4pSA4pSADQpJQl9BTUFSRUxPICAgICAgPC0gIiNGRkI4MUYiICAjIEFtYXJlbG8gSWJNYWNybyAoU8OpcmllIE11bGhlcmVzIC8gRGVzdGFxdWVzKQ0KSUJfQVpVTF9CQVNFICAgIDwtICIjMDIwMjNDIiAgIyBBenVsIEliTWFjcm8gKFPDqXJpZSBIb21lbnMgLyBUw610dWxvcykNCklCX0JSQU5DTyAgICAgICA8LSAiI0ZGRkZGRiIgICMgRnVuZG8gaW5zdGl0dWNpb25hbA0KSUJfQVpVTF9NRURJTyAgIDwtICIjMDAyQzVFIiAgIyBBenVsIE3DqWRpbyBkZSBhcG9pbw0KSUJfQVpVTF9DTEFSTyAgIDwtICIjNkI4QkE0IiAgIyBBenVsIENsYXJvIGNvbXBsZW1lbnRhcg0KSUJfQ0lOWkFfRVNDVVJPIDwtICIjM0EzQTNBIiAgIyBUZXh0b3MsIGVpeG9zIGUgc3VidMOtdHVsb3MNCklCX0NJTlpBX0NMQVJPICA8LSAiI0E2QTZBNiIgICMgTGluaGFzIGRlIGdyYWRlLCBlaXhvcyBlIGNyw6lkaXRvcw0KDQojIOKUgOKUgCAyLiBURU1BIElOU1RJVFVDSU9OQUwgSUJNQUNSTyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCnRlbWFfaWJtYWNybyA8LSBoY190aGVtZV9tZXJnZSgNCiAgaGNfdGhlbWVfc21wbCgpLA0KICBoY190aGVtZSgNCiAgICBjaGFydCA9IGxpc3QoDQogICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBJQl9CUkFOQ08sDQogICAgICBzdHlsZSA9IGxpc3QoZm9udEZhbWlseSA9ICJBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIikNCiAgICApLA0KICAgIHRpdGxlID0gbGlzdCgNCiAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0FaVUxfQkFTRSwgZm9udFdlaWdodCA9ICJib2xkIiwgZm9udFNpemUgPSAiMThweCIpDQogICAgKSwNCiAgICBzdWJ0aXRsZSA9IGxpc3QoDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sIGZvbnRTaXplID0gIjEycHgiKQ0KICAgICksDQogICAgeEF4aXMgPSBsaXN0KA0KICAgICAgZ3JpZExpbmVXaWR0aCA9IDAsDQogICAgICBsaW5lQ29sb3IgPSBJQl9DSU5aQV9DTEFSTywNCiAgICAgIHRpY2tDb2xvciA9IElCX0NJTlpBX0NMQVJPLA0KICAgICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sIGZvbnRTaXplID0gIjExcHgiKSkNCiAgICApLA0KICAgIHlBeGlzID0gbGlzdCgNCiAgICAgIGdyaWRMaW5lQ29sb3IgPSAiI0YwRjBGMCIsDQogICAgICBsaW5lQ29sb3IgPSBJQl9DSU5aQV9DTEFSTywNCiAgICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMXB4IikpDQogICAgKSwNCiAgICBsZWdlbmQgPSBsaXN0KA0KICAgICAgZW5hYmxlZCA9IFRSVUUsDQogICAgICBpdGVtU3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQVpVTF9CQVNFLCBmb250V2VpZ2h0ID0gIm5vcm1hbCIsIGZvbnRTaXplID0gIjEycHgiKQ0KICAgICkNCiAgKQ0KKQ0KDQojIEhlbHBlciBkZSBmb3JtYXRhw6fDo28gZXN0cnV0dXJhbCBwYXJhIFBpcsOibWlkZXMgRXTDoXJpYXMNCmhjX2Zvcm1hdGFyX3BpcmFtaWRlIDwtIGZ1bmN0aW9uKGhjLCB0aXR1bG8sIHN1YnRpdHVsbywgdGV4dG9feSA9ICJQb3B1bGHDp8OjbyIpIHsNCiAgaGMgJT4lDQogICAgaGNfYWRkX3RoZW1lKHRlbWFfaWJtYWNybykgJT4lDQogICAgaGNfdGl0bGUodGV4dCA9IHRpdHVsbywgYWxpZ24gPSAibGVmdCIpICU+JQ0KICAgIGhjX3N1YnRpdGxlKHRleHQgPSBzdWJ0aXR1bG8sIGFsaWduID0gImxlZnQiKSAlPiUNCiAgICBoY195QXhpcygNCiAgICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gdGV4dG9feSwgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPKSksDQogICAgICBsYWJlbHMgPSBsaXN0KA0KICAgICAgICBmb3JtYXR0ZXIgPSBKUygiZnVuY3Rpb24oKSB7IHJldHVybiBIaWdoY2hhcnRzLm51bWJlckZvcm1hdChNYXRoLmFicyh0aGlzLnZhbHVlKSwgMSkgKyAnIE1pJzsgfSIpDQogICAgICApDQogICAgKSAlPiUNCiAgICBoY190b29sdGlwKA0KICAgICAgc2hhcmVkID0gRkFMU0UsDQogICAgICBmb3JtYXR0ZXIgPSBKUygiZnVuY3Rpb24oKSB7DQogICAgICAgIHJldHVybiAnPGI+JyArIHRoaXMuc2VyaWVzLm5hbWUgKyAnPC9iPjxici8+JyArDQogICAgICAgICAgICAgICAnRmFpeGEgZXTDoXJpYTogPGI+JyArIHRoaXMucG9pbnQuY2F0ZWdvcnkgKyAnIGFub3M8L2I+PGJyLz4nICsNCiAgICAgICAgICAgICAgICdQb3B1bGHDp8OjbzogPGI+JyArIEhpZ2hjaGFydHMubnVtYmVyRm9ybWF0KE1hdGguYWJzKHRoaXMueSksIDIpICsgJyBtaWxow7VlczwvYj4nOw0KICAgICAgfSIpDQogICAgKSAlPiUNCiAgICBoY19jcmVkaXRzKA0KICAgICAgZW5hYmxlZCA9IFRSVUUsDQogICAgICB0ZXh0ID0gIkZvbnRlOiBJQkdFIOKAlCBDZW5zbyBEZW1vZ3LDoWZpY28gMTk4MC4gRWxhYm9yYcOnw6NvIHByw7NwcmlhIEliTWFjcm8gQkguIiwNCiAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0NMQVJPLCBmb250U2l6ZSA9ICIxMHB4IikNCiAgICApICU+JQ0KICAgIGhjX2V4cG9ydGluZyhlbmFibGVkID0gVFJVRSkNCn0NCg0KIyDilIDilIAgMy4gREFET1MgREVNT0dSw4FGSUNPUyAoQ0VOU08gMTk4MCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQpuaXZlaXNfZmFpeGFzXzE5ODAgPC0gYygNCiAgIjDigJM0IiwgIjXigJM5IiwgIjEw4oCTMTQiLCAiMTXigJMxOSIsICIyMOKAkzI0IiwgIjI14oCTMjkiLCAiMzDigJMzNCIsICIzNeKAkzM5IiwNCiAgIjQw4oCTNDQiLCAiNDXigJM0OSIsICI1MOKAkzU0IiwgIjU14oCTNTkiLCAiNjDigJM2NCIsICI2NeKAkzY5IiwgIjcw4oCTNzQiLCAiNzXigJM3OSIsICI4MCsiDQopDQoNCmhvbWVuc18xOTgwICAgPC0gYyg4LjE1LCA3LjM1LCA3LjE1LCA2LjUwLCA1LjUwLCA0LjUwLCAzLjcwLCAzLjIwLCAyLjcwLCAyLjIwLCAxLjgwLCAxLjQwLCAxLjEwLCAwLjgwLCAwLjUwLCAwLjMwLCAwLjI1KQ0KbXVsaGVyZXNfMTk4MCA8LSBjKDguMDUsIDcuMzAsIDcuMTAsIDYuNjAsIDUuNjUsIDQuNjUsIDMuODUsIDMuMzAsIDIuODAsIDIuMzAsIDEuOTAsIDEuNTAsIDEuMjAsIDAuOTAsIDAuNjAsIDAuMzUsIDAuMzUpDQoNCmxpbWl0ZV9laXhvIDwtIGNlaWxpbmcobWF4KGMoaG9tZW5zXzE5ODAsIG11bGhlcmVzXzE5ODApKSArIDAuNSkNCg0KIyDilIDilIAgNC4gQ09OU1RSVcOHw4NPIERPIFBMT1Qg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQpncmFmaWNvX3BpcmFtaWRlXzE5ODAgPC0gaGlnaGNoYXJ0KCkgJT4lDQogIGhjX2NoYXJ0KA0KICAgIHR5cGUgPSAiYmFyIiwNCiAgICBhbmltYXRpb24gPSBGQUxTRQ0KICApICU+JQ0KICANCiAgIyBTw6lyaWUgSG9tZW5zIChBenVsIEliTWFjcm8g4oCUIExhZG8gRXNxdWVyZG8gLyBWYWxvcmVzIE5lZ2F0aXZvcykNCiAgaGNfYWRkX3NlcmllcygNCiAgICBuYW1lICAgICAgICA9ICJIb21lbnMiLA0KICAgIGRhdGEgICAgICAgID0gYXMubGlzdCgtaG9tZW5zXzE5ODApLA0KICAgIGNvbG9yICAgICAgID0gSUJfQVpVTF9CQVNFLA0KICAgIGJvcmRlcldpZHRoID0gMA0KICApICU+JQ0KICANCiAgIyBTw6lyaWUgTXVsaGVyZXMgKEFtYXJlbG8gSWJNYWNybyDigJQgTGFkbyBEaXJlaXRvIC8gVmFsb3JlcyBQb3NpdGl2b3MpDQogIGhjX2FkZF9zZXJpZXMoDQogICAgbmFtZSAgICAgICAgPSAiTXVsaGVyZXMiLA0KICAgIGRhdGEgICAgICAgID0gYXMubGlzdChtdWxoZXJlc18xOTgwKSwNCiAgICBjb2xvciAgICAgICA9IElCX0FNQVJFTE8sDQogICAgYm9yZGVyV2lkdGggPSAwDQogICkgJT4lDQogIA0KICBoY194QXhpcygNCiAgICBjYXRlZ29yaWVzID0gbml2ZWlzX2ZhaXhhc18xOTgwLA0KICAgIHJldmVyc2VkICAgPSBGQUxTRSwNCiAgICB0aXRsZSAgICAgID0gbGlzdCh0ZXh0ID0gTlVMTCkNCiAgKSAlPiUNCiAgDQogIGhjX3lBeGlzKA0KICAgIG1pbiA9IC1saW1pdGVfZWl4bywNCiAgICBtYXggPSBsaW1pdGVfZWl4bywNCiAgICBwbG90TGluZXMgPSBsaXN0KA0KICAgICAgbGlzdCh2YWx1ZSA9IDAsIHdpZHRoID0gMS41LCBjb2xvciA9IElCX0NJTlpBX0NMQVJPLCB6SW5kZXggPSA1KQ0KICAgICkNCiAgKSAlPiUNCiAgDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIGJhciA9IGxpc3QoDQogICAgICBncm91cGluZyAgICAgPSBUUlVFLA0KICAgICAgZ3JvdXBQYWRkaW5nID0gMCwNCiAgICAgIHBvaW50UGFkZGluZyA9IDAuMTUsDQogICAgICBzdGFja2luZyAgICAgPSAibm9ybWFsIg0KICAgICkNCiAgKSAlPiUNCiAgDQogIGhjX2Zvcm1hdGFyX3BpcmFtaWRlKA0KICAgIHRpdHVsbyAgICA9ICJQaXLDom1pZGUgRXTDoXJpYSDigJQgQnJhc2lsIChDZW5zbyAxOTgwKSIsDQogICAgc3VidGl0dWxvID0gIlBvcHVsYcOnw6NvIHJlc2lkZW50ZSBwb3Igc2V4byBlIGZhaXhhcyBldMOhcmlhcyBxdWlucXVlbmFpcyAoZW0gbWlsaMO1ZXMgZGUgcGVzc29hcykiLA0KICAgIHRleHRvX3kgICA9ICJQb3B1bGHDp8OjbyAoZW0gbWlsaMO1ZXMpIg0KICApDQoNCmdyYWZpY29fcGlyYW1pZGVfMTk4MA0KYGBgDQoNCioqR3LDoWZpY28gMioqDQoNCmBgYHtyfQ0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgR3LDoWZpY286IFBpcsOibWlkZSBFdMOhcmlhIOKAlCBCcmFzaWwgfCBDZW5zbyAyMDIyDQojIElkZW50aWRhZGUgVmlzdWFsIE9maWNpYWw6IFBhZHLDo28gSWJNYWNybyBCSCAoTWFudWFsIGRlIE1hcmNhKQ0KIyBGb250ZTogSUJHRSDigJQgQ2Vuc28gRGVtb2dyw6FmaWNvIDIwMjIgKFRhYmVsYSBTSURSQSA5NTE0KQ0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KIyBQcmV2ZW7Dp8OjbyBwYXJhIGNhbWluaG9zIHRlbXBvcsOhcmlvcyBubyBXaW5kb3dzIGNvbSBhY2VudHVhw6fDo28NCmRpci5jcmVhdGUoIkM6L1J0ZW1wIiwgc2hvd1dhcm5pbmdzID0gRkFMU0UpDQpTeXMuc2V0ZW52KFRNUERJUiA9ICJDOi9SdGVtcCIsIFRNUCA9ICJDOi9SdGVtcCIsIFRFTVAgPSAiQzovUnRlbXAiKQ0KDQpsaWJyYXJ5KHNpZHJhcikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCg0KIyDilIDilIAgMS4gREVGSU5Jw4fDg08gREEgUEFMRVRBIElOU1RJVFVDSU9OQUwgKEdVSUEgREUgTUFSQ0EpIOKUgOKUgOKUgOKUgOKUgOKUgA0KSUJfQU1BUkVMTyAgICAgIDwtICIjRkZCODFGIiAgIyBBbWFyZWxvIEliTWFjcm8gKFPDqXJpZSBNdWxoZXJlcyAvIERlc3RhcXVlcykNCklCX0FaVUxfQkFTRSAgICA8LSAiIzAyMDIzQyIgICMgQXp1bCBJYk1hY3JvIChTw6lyaWUgSG9tZW5zIC8gVMOtdHVsb3MpDQpJQl9CUkFOQ08gICAgICAgPC0gIiNGRkZGRkYiICAjIEZ1bmRvIGluc3RpdHVjaW9uYWwNCklCX0FaVUxfTUVESU8gICA8LSAiIzAwMkM1RSIgICMgQXp1bCBNw6lkaW8gZGUgYXBvaW8NCklCX0FaVUxfQ0xBUk8gICA8LSAiIzZCOEJBNCIgICMgQXp1bCBDbGFybyBjb21wbGVtZW50YXINCklCX0NJTlpBX0VTQ1VSTyA8LSAiIzNBM0EzQSIgICMgVGV4dG9zLCBlaXhvcyBlIGxlZ2VuZGFzDQpJQl9DSU5aQV9DTEFSTyAgPC0gIiNBNkE2QTYiICAjIExpbmhhcyBkZSBncmFkZSwgZWl4b3MgZSBjcsOpZGl0b3MNCg0KIyDilIDilIAgMi4gVEVNQSBJTlNUSVRVQ0lPTkFMIElCTUFDUk8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQp0ZW1hX2libWFjcm8gPC0gaGNfdGhlbWVfbWVyZ2UoDQogIGhjX3RoZW1lX3NtcGwoKSwNCiAgaGNfdGhlbWUoDQogICAgY2hhcnQgPSBsaXN0KA0KICAgICAgYmFja2dyb3VuZENvbG9yID0gSUJfQlJBTkNPLA0KICAgICAgc3R5bGUgPSBsaXN0KGZvbnRGYW1pbHkgPSAiQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIpDQogICAgKSwNCiAgICB0aXRsZSA9IGxpc3QoDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9BWlVMX0JBU0UsIGZvbnRXZWlnaHQgPSAiYm9sZCIsIGZvbnRTaXplID0gIjE4cHgiKQ0KICAgICksDQogICAgc3VidGl0bGUgPSBsaXN0KA0KICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMnB4IikNCiAgICApLA0KICAgIHhBeGlzID0gbGlzdCgNCiAgICAgIGdyaWRMaW5lV2lkdGggPSAwLA0KICAgICAgbGluZUNvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgICB0aWNrQ29sb3IgPSBJQl9DSU5aQV9DTEFSTywNCiAgICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMXB4IikpDQogICAgKSwNCiAgICB5QXhpcyA9IGxpc3QoDQogICAgICBncmlkTGluZUNvbG9yID0gIiNGMEYwRjAiLA0KICAgICAgbGluZUNvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiMTFweCIpKQ0KICAgICksDQogICAgbGVnZW5kID0gbGlzdCgNCiAgICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgICAgaXRlbVN0eWxlID0gbGlzdChjb2xvciA9IElCX0FaVUxfQkFTRSwgZm9udFdlaWdodCA9ICJub3JtYWwiLCBmb250U2l6ZSA9ICIxMnB4IikNCiAgICApDQogICkNCikNCg0KIyBIZWxwZXIgZGUgZm9ybWF0YcOnw6NvIGVzdHJ1dHVyYWwgcGFyYSBQaXLDom1pZGVzIEV0w6FyaWFzDQpoY19mb3JtYXRhcl9waXJhbWlkZSA8LSBmdW5jdGlvbihoYywgdGl0dWxvLCBzdWJ0aXR1bG8sIHRleHRvX3kgPSAiUG9wdWxhw6fDo28iKSB7DQogIGhjICU+JQ0KICAgIGhjX2FkZF90aGVtZSh0ZW1hX2libWFjcm8pICU+JQ0KICAgIGhjX3RpdGxlKHRleHQgPSB0aXR1bG8sIGFsaWduID0gImxlZnQiKSAlPiUNCiAgICBoY19zdWJ0aXRsZSh0ZXh0ID0gc3VidGl0dWxvLCBhbGlnbiA9ICJsZWZ0IikgJT4lDQogICAgaGNfeUF4aXMoDQogICAgICB0aXRsZSA9IGxpc3QodGV4dCA9IHRleHRvX3ksIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTykpLA0KICAgICAgbGFiZWxzID0gbGlzdCgNCiAgICAgICAgZm9ybWF0dGVyID0gSlMoImZ1bmN0aW9uKCkgeyByZXR1cm4gSGlnaGNoYXJ0cy5udW1iZXJGb3JtYXQoTWF0aC5hYnModGhpcy52YWx1ZSksIDEpICsgJyBNaSc7IH0iKQ0KICAgICAgKQ0KICAgICkgJT4lDQogICAgaGNfdG9vbHRpcCgNCiAgICAgIHNoYXJlZCA9IEZBTFNFLA0KICAgICAgZm9ybWF0dGVyID0gSlMoImZ1bmN0aW9uKCkgew0KICAgICAgICByZXR1cm4gJzxiPicgKyB0aGlzLnNlcmllcy5uYW1lICsgJzwvYj48YnIvPicgKw0KICAgICAgICAgICAgICAgJ0ZhaXhhIGV0w6FyaWE6IDxiPicgKyB0aGlzLnBvaW50LmNhdGVnb3J5ICsgJyBhbm9zPC9iPjxici8+JyArDQogICAgICAgICAgICAgICAnUG9wdWxhw6fDo286IDxiPicgKyBIaWdoY2hhcnRzLm51bWJlckZvcm1hdChNYXRoLmFicyh0aGlzLnkpLCAyKSArICcgbWlsaMO1ZXM8L2I+JzsNCiAgICAgIH0iKQ0KICAgICkgJT4lDQogICAgaGNfY3JlZGl0cygNCiAgICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgICAgdGV4dCA9ICJGb250ZTogSUJHRSDigJQgQ2Vuc28gRGVtb2dyw6FmaWNvIDIwMjIuIEVsYWJvcmHDp8OjbyBwcsOzcHJpYSBJYk1hY3JvIEJILiIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9DTEFSTywgZm9udFNpemUgPSAiMTBweCIpDQogICAgKSAlPiUNCiAgICBoY19leHBvcnRpbmcoZW5hYmxlZCA9IFRSVUUpDQp9DQoNCiMg4pSA4pSAIDMuIEVYVFJBw4fDg08gRSBPUkdBTklaQcOHw4NPIERPUyBEQURPUyBWSUEgU0lEUkEg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQpwb3BfcmF3IDwtIGdldF9zaWRyYSgNCiAgYXBpID0gIi90Lzk1MTQvbjEvYWxsL3YvOTMvcC8yMDIyL2MyLzQsNS9jMjg3L2FsbHh0Ig0KKQ0KDQpmYWl4YXNfc2lkcmEgPC0gYygNCiAgIjAgYSA0IGFub3MiLCAgICI1IGEgOSBhbm9zIiwgICAiMTAgYSAxNCBhbm9zIiwgIjE1IGEgMTkgYW5vcyIsDQogICIyMCBhIDI0IGFub3MiLCAiMjUgYSAyOSBhbm9zIiwgIjMwIGEgMzQgYW5vcyIsICIzNSBhIDM5IGFub3MiLA0KICAiNDAgYSA0NCBhbm9zIiwgIjQ1IGEgNDkgYW5vcyIsICI1MCBhIDU0IGFub3MiLCAiNTUgYSA1OSBhbm9zIiwNCiAgIjYwIGEgNjQgYW5vcyIsICI2NSBhIDY5IGFub3MiLCAiNzAgYSA3NCBhbm9zIiwgIjc1IGEgNzkgYW5vcyIsDQogICI4MCBhIDg0IGFub3MiLCAiODUgYSA4OSBhbm9zIiwgIjkwIGEgOTQgYW5vcyIsICI5NSBhIDk5IGFub3MiLA0KICAiMTAwIGFub3Mgb3UgbWFpcyINCikNCg0Kbml2ZWlzX2ZhaXhhcyA8LSBjKA0KICAiMOKAkzQiLCAiNeKAkzkiLCAiMTDigJMxNCIsICIxNeKAkzE5IiwgIjIw4oCTMjQiLCAiMjXigJMyOSIsICIzMOKAkzM0IiwgIjM14oCTMzkiLA0KICAiNDDigJM0NCIsICI0NeKAkzQ5IiwgIjUw4oCTNTQiLCAiNTXigJM1OSIsICI2MOKAkzY0IiwgIjY14oCTNjkiLCAiNzDigJM3NCIsDQogICI3NeKAkzc5IiwgIjgw4oCTODQiLCAiODXigJM4OSIsICI5MOKAkzk0IiwgIjk14oCTOTkiLCAiMTAwKyINCikNCg0KbWFwYV9mYWl4YXMgPC0gc2V0TmFtZXMobml2ZWlzX2ZhaXhhcywgZmFpeGFzX3NpZHJhKQ0KDQpjb2xfaWRhZGUgPC0gaW50ZXJzZWN0KGMoIkdydXBvIGRlIGlkYWRlIiwgIklkYWRlIiksIG5hbWVzKHBvcF9yYXcpKVsxXQ0KaWYgKGlzLm5hKGNvbF9pZGFkZSkpIHN0b3AoIkNvbHVuYSBkZSBpZGFkZSBuw6NvIGVuY29udHJhZGEuIikNCg0KcGlyYW1pZGUgPC0gcG9wX3JhdyAlPiUNCiAgc2VsZWN0KA0KICAgIHNleG9fY29kICA9IGBTZXhvIChDw7NkaWdvKWAsDQogICAgaWRhZGVfc3RyID0gYWxsX29mKGNvbF9pZGFkZSksDQogICAgcG9wICAgICAgID0gVmFsb3INCiAgKSAlPiUNCiAgZmlsdGVyKGlkYWRlX3N0ciAlaW4lIGZhaXhhc19zaWRyYSkgJT4lDQogIG11dGF0ZSgNCiAgICBwb3AgICAgICAgID0gYXMubnVtZXJpYyhwb3ApLA0KICAgIHNleG9fbGFiZWwgPSBjYXNlX3doZW4oDQogICAgICBhcy5jaGFyYWN0ZXIoc2V4b19jb2QpID09ICI0IiB+ICJIb21lbnMiLA0KICAgICAgYXMuY2hhcmFjdGVyKHNleG9fY29kKSA9PSAiNSIgfiAiTXVsaGVyZXMiLA0KICAgICAgVFJVRSB+IE5BX2NoYXJhY3Rlcl8NCiAgICApLA0KICAgIGZhaXhhID0gZmFjdG9yKG1hcGFfZmFpeGFzW2lkYWRlX3N0cl0sIGxldmVscyA9IG5pdmVpc19mYWl4YXMpDQogICkgJT4lDQogIGZpbHRlcighaXMubmEoc2V4b19sYWJlbCksICFpcy5uYShmYWl4YSksICFpcy5uYShwb3ApKSAlPiUNCiAgZ3JvdXBfYnkoc2V4b19sYWJlbCwgZmFpeGEpICU+JQ0KICBzdW1tYXJpc2UocG9wX21pID0gcm91bmQoc3VtKHBvcCkgLyAxZTYsIDMpLCAuZ3JvdXBzID0gImRyb3AiKQ0KDQpob21lbnMgICA8LSBwaXJhbWlkZSAlPiUgZmlsdGVyKHNleG9fbGFiZWwgPT0gIkhvbWVucyIpICAgJT4lIGFycmFuZ2UoZmFpeGEpICU+JSBwdWxsKHBvcF9taSkNCm11bGhlcmVzIDwtIHBpcmFtaWRlICU+JSBmaWx0ZXIoc2V4b19sYWJlbCA9PSAiTXVsaGVyZXMiKSAlPiUgYXJyYW5nZShmYWl4YSkgJT4lIHB1bGwocG9wX21pKQ0KDQpsaW1pdGVfZWl4byA8LSBjZWlsaW5nKG1heChjKGhvbWVucywgbXVsaGVyZXMpKSArIDAuNSkNCg0KIyDilIDilIAgNC4gQ09OU1RSVcOHw4NPIERPIFBMT1Qg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQpncmFmaWNvX3BpcmFtaWRlXzIwMjIgPC0gaGlnaGNoYXJ0KCkgJT4lDQogIGhjX2NoYXJ0KA0KICAgIHR5cGUgPSAiYmFyIiwNCiAgICBhbmltYXRpb24gPSBGQUxTRQ0KICApICU+JQ0KICANCiAgIyBTw6lyaWUgSG9tZW5zIChBenVsIEliTWFjcm8g4oCUIExhZG8gRXNxdWVyZG8gLyBWYWxvcmVzIE5lZ2F0aXZvcykNCiAgaGNfYWRkX3NlcmllcygNCiAgICBuYW1lICAgICAgICA9ICJIb21lbnMiLA0KICAgIGRhdGEgICAgICAgID0gYXMubGlzdCgtaG9tZW5zKSwNCiAgICBjb2xvciAgICAgICA9IElCX0FaVUxfQkFTRSwNCiAgICBib3JkZXJXaWR0aCA9IDANCiAgKSAlPiUNCiAgDQogICMgU8OpcmllIE11bGhlcmVzIChBbWFyZWxvIEliTWFjcm8g4oCUIExhZG8gRGlyZWl0byAvIFZhbG9yZXMgUG9zaXRpdm9zKQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIG5hbWUgICAgICAgID0gIk11bGhlcmVzIiwNCiAgICBkYXRhICAgICAgICA9IGFzLmxpc3QobXVsaGVyZXMpLA0KICAgIGNvbG9yICAgICAgID0gSUJfQU1BUkVMTywNCiAgICBib3JkZXJXaWR0aCA9IDANCiAgKSAlPiUNCiAgDQogIGhjX3hBeGlzKA0KICAgIGNhdGVnb3JpZXMgPSBuaXZlaXNfZmFpeGFzLA0KICAgIHJldmVyc2VkICAgPSBGQUxTRSwNCiAgICB0aXRsZSAgICAgID0gbGlzdCh0ZXh0ID0gTlVMTCkNCiAgKSAlPiUNCiAgDQogIGhjX3lBeGlzKA0KICAgIG1pbiA9IC1saW1pdGVfZWl4bywNCiAgICBtYXggPSBsaW1pdGVfZWl4bywNCiAgICBwbG90TGluZXMgPSBsaXN0KA0KICAgICAgbGlzdCh2YWx1ZSA9IDAsIHdpZHRoID0gMS41LCBjb2xvciA9IElCX0NJTlpBX0NMQVJPLCB6SW5kZXggPSA1KQ0KICAgICkNCiAgKSAlPiUNCiAgDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIGJhciA9IGxpc3QoDQogICAgICBncm91cGluZyAgICAgPSBUUlVFLA0KICAgICAgZ3JvdXBQYWRkaW5nID0gMCwNCiAgICAgIHBvaW50UGFkZGluZyA9IDAuMTUsDQogICAgICBzdGFja2luZyAgICAgPSAibm9ybWFsIg0KICAgICkNCiAgKSAlPiUNCiAgDQogIGhjX2Zvcm1hdGFyX3BpcmFtaWRlKA0KICAgIHRpdHVsbyAgICA9ICJQaXLDom1pZGUgRXTDoXJpYSDigJQgQnJhc2lsIChDZW5zbyAyMDIyKSIsDQogICAgc3VidGl0dWxvID0gIlBvcHVsYcOnw6NvIHJlc2lkZW50ZSBwb3Igc2V4byBlIGZhaXhhcyBldMOhcmlhcyBxdWlucXVlbmFpcyAoZW0gbWlsaMO1ZXMgZGUgcGVzc29hcykiLA0KICAgIHRleHRvX3kgICA9ICJQb3B1bGHDp8OjbyAoZW0gbWlsaMO1ZXMpIg0KICApDQoNCmdyYWZpY29fcGlyYW1pZGVfMjAyMg0KYGBgDQoNCkFuYWxpc2FuZG8gbWFpcyBhIGZ1bmRvIGFzIHJhesO1ZXMgcGFyYSBhIHRyYW5zacOnw6NvIGRlbW9ncsOhZmljYSBhY2VsZXJhZGEsIGZpY2EgbsOtdGlkbyB1bWEgZ3JhbmRlIG11ZGFuw6dhIHRhbnRvIG5hcyB0YXhhcyBkZSBuYXRhbGlkYWRlIGUgZmVjdW5kaWRhZGUgY29tIHRhbWLDqW0gbmFzIHRheGFzIGRlIG1vcnRhbGlkYWRlLCBxdWUgYmFzaWNhbWVudGUgc2UgaW52ZXJ0ZXJhbSBhbyBsb25nbyBkZXNzZXMgNDAgYW5vcy4NCiANCkEgVGF4YSBkZSBOYXRhbGlkYWRlIGFwcmVzZW50b3UgdW1hIHF1ZWRhIHNpZ25pZmljYXRpdmEgbmVzc2UgcGVyw61vZG8gZGUgYW7DoWxpc2UsIGNvbSBvIG1lbm9yIG7Dum1lcm8gZGUgbmFzY2ltZW50b3MgZW0gcXVhc2UgNTAgYW5vcyBlbSAyMDIzLCBzZW5kbyBhIHF1aW50YSBxdWVkYSBhbnVhbCBzZWd1aWRhIG5hIG5hdGFsaWRhZGUuIE8gbWVub3IgbsO6bWVybyBoYXZpYSBzaWRvIGVtIDE5NzYgcXVlIGVyYSAyLDQ2NyBtaWxow7VlcyBlIGFnb3JhIGVtIDIwMjMgbyBuw7ptZXJvIGRlIHJlZ2lzdHJvcyBkZSBuYXNjaW1lbnRvcyBmb2kgZW0gdG9ybm8gZGUgMiw1MTggbWlsaMO1ZXMuIChPKQ0KIA0KQSBUYXhhIGRlIEZlY3VuZGlkYWRlIHRhbWLDqW0gY2FpdSwgcG9yw6ltIGlzc28gbsOjbyDDqSB1bSBmZW7DtG1lbm8gYXBlbmFzIHByZXNlbnRlIG5vIEJyYXNpbCwgbWFzIHNpbSBkbyBtdW5kbyBpbnRlaXJvLiBFbSAxOTUwLCBhIHRheGEgZXJhIGVtIHRvcm5vIGRlIHNlaXMgZmlsaG9zIHBvciBtdWxoZXIsIGUgZGUgY2luY28gZmlsaG9zIG5vIG11bmRvLiBTZXRlIGTDqWNhZGFzIGRlcG9pcywgZXNzZSBpbmRpY2Fkb3IgZGVjYWl1IHBhcmEgYXBlbmFzIDEsNiBwb3IgbXVsaGVyLCBhYmFpeG8gZG8gY2hhbWFkbyBuw612ZWwgZGUgcmVwb3Npw6fDo28sIHVtIHBhdGFtYXIgMiwxIGZpbGhvcyBuZWNlc3PDoXJpb3MgcGFyYSBxdWUgYSBwcsOzeGltYSBnZXJhw6fDo28gc3Vic3RpdHVhIGEgYW50ZXJpb3Igc2VtIGFqdWRhIGRhIGltaWdyYcOnw6NvLiBBIHF1ZWRhIHNlIGluaWNpb3UgZHVyYW50ZSBhIGTDqWNhZGEgZGUgNzAsIHNhaW5kbyBkZSA1LDYgbm8gZmluYWwgZG9zIGFub3MgNjAgcGFyYSA0LDIgZmlsaG9zIGVtIDE5NzYsIGFicmFuZ2VuZG8gdG9kYXMgYXMgcmVnacO1ZXMgZG8gdGVycml0w7NyaW8gYnJhc2lsZWlyby4gKihHcsOhZmljbyAzKSogDQogDQoqKkdyw6FmaWNvIDMqKg0KIA0KYGBge3J9DQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyBHcsOhZmljbzogVGF4YSBkZSBGZWN1bmRpZGFkZSBUb3RhbCBubyBCcmFzaWwgKDE5NTDigJMyMDI2KQ0KIyBJZGVudGlkYWRlIFZpc3VhbCBPZmljaWFsOiBQYWRyw6NvIEliTWFjcm8gQkggKE1hbnVhbCBkZSBNYXJjYSkNCiMgRm9udGU6IElCR0UgZSBOYcOnw7VlcyBVbmlkYXMgKFVOIFdQUCBSZXYuIDIwMjQpDQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQojIFByZXZlbsOnw6NvIHBhcmEgY2FtaW5ob3MgdGVtcG9yw6FyaW9zIG5vIFdpbmRvd3MgY29tIGFjZW50dWHDp8Ojbw0KZGlyLmNyZWF0ZSgiQzovUnRlbXAiLCBzaG93V2FybmluZ3MgPSBGQUxTRSkNClN5cy5zZXRlbnYoVE1QRElSID0gIkM6L1J0ZW1wIiwgVE1QID0gIkM6L1J0ZW1wIiwgVEVNUCA9ICJDOi9SdGVtcCIpDQoNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCg0KIyDilIDilIAgMS4gREVGSU5Jw4fDg08gREEgUEFMRVRBIElOU1RJVFVDSU9OQUwgKEdVSUEgREUgTUFSQ0EpIOKUgOKUgOKUgOKUgOKUgOKUgA0KSUJfQU1BUkVMTyAgICAgIDwtICIjRkZCODFGIiAgIyBBbWFyZWxvIEliTWFjcm8gKE7DrXZlbCBkZSBSZXBvc2nDp8OjbyAvIERlc3RhcXVlcykNCklCX0FaVUxfQkFTRSAgICA8LSAiIzAyMDIzQyIgICMgQXp1bCBJYk1hY3JvIChTw6lyaWUgUHJpbmNpcGFsIC8gVMOtdHVsb3MpDQpJQl9CUkFOQ08gICAgICAgPC0gIiNGRkZGRkYiICAjIEZ1bmRvIGluc3RpdHVjaW9uYWwNCklCX0FaVUxfTUVESU8gICA8LSAiIzAwMkM1RSIgICMgQXp1bCBNw6lkaW8gZGUgYXBvaW8NCklCX0FaVUxfQ0xBUk8gICA8LSAiIzZCOEJBNCIgICMgQXp1bCBDbGFybyBjb21wbGVtZW50YXINCklCX0NJTlpBX0VTQ1VSTyA8LSAiIzNBM0EzQSIgICMgVGV4dG9zLCBlaXhvcyBlIHN1YnTDrXR1bG9zDQpJQl9DSU5aQV9DTEFSTyAgPC0gIiNBNkE2QTYiICAjIExpbmhhcyBkZSBncmFkZSwgZWl4b3MgZSBjcsOpZGl0b3MNCg0KIyDilIDilIAgMi4gREFET1MgSElTVMOTUklDT1MgRSBQUk9KRVRBRE9TIERBIFRGVCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCmRmX2ZlY3VuZGlkYWRlIDwtIHRpYmJsZSgNCiAgYW5vID0gYygxOTUwLCAxOTU1LCAxOTYwLCAxOTY1LCAxOTcwLCAxOTc1LCAxOTgwLCAxOTg1LCAxOTkwLCAxOTk1LCAyMDAwLCAyMDA1LCAyMDEwLCAyMDE1LCAyMDIwLCAyMDI1LCAyMDI2KSwNCiAgdGZ0ID0gYyg2LjEyLCA2LjEwLCA2LjA2LCA1LjY2LCA0LjkzLCA0LjQxLCA0LjAxLCAzLjQ4LCAyLjkwLCAyLjU4LCAyLjI3LCAxLjk1LCAxLjgxLCAxLjgwLCAxLjY2LCAxLjYyLCAxLjYxKQ0KKQ0KDQojIOKUgOKUgCAzLiBDT05TVFJVw4fDg08gRE8gUExPVCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCmdyYWZpY29fZmVjdW5kaWRhZGUgPC0gaGlnaGNoYXJ0KCkgJT4lDQogIGhjX2NoYXJ0KA0KICAgIHR5cGUgPSAibGluZSIsDQogICAgYmFja2dyb3VuZENvbG9yID0gSUJfQlJBTkNPLA0KICAgIHN0eWxlID0gbGlzdChmb250RmFtaWx5ID0gIkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiKQ0KICApICU+JQ0KICANCiAgIyBTw6lyaWUgUHJpbmNpcGFsOiBUYXhhIGRlIEZlY3VuZGlkYWRlIFRvdGFsDQogIGhjX2FkZF9zZXJpZXMoDQogICAgbmFtZSA9ICJUYXhhIGRlIEZlY3VuZGlkYWRlIFRvdGFsIChURlQpIiwNCiAgICBkYXRhID0gZGZfZmVjdW5kaWRhZGUkdGZ0LA0KICAgIGNvbG9yID0gSUJfQVpVTF9CQVNFLA0KICAgIGxpbmVXaWR0aCA9IDMsDQogICAgbWFya2VyID0gbGlzdCgNCiAgICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgICAgcmFkaXVzID0gNCwNCiAgICAgIHN5bWJvbCA9ICJjaXJjbGUiLA0KICAgICAgZmlsbENvbG9yID0gSUJfQVpVTF9CQVNFDQogICAgKQ0KICApICU+JQ0KICANCiAgaGNfeEF4aXMoDQogICAgY2F0ZWdvcmllcyA9IGFzLmNoYXJhY3RlcihkZl9mZWN1bmRpZGFkZSRhbm8pLA0KICAgIGdyaWRMaW5lV2lkdGggPSAxLA0KICAgIGdyaWRMaW5lQ29sb3IgPSAiI0YwRjBGMCIsDQogICAgbGluZUNvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgdGlja0NvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgbGFiZWxzID0gbGlzdCgNCiAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiMTFweCIpDQogICAgKSwNCiAgICBwbG90TGluZXMgPSBsaXN0KA0KICAgICAgbGlzdCgNCiAgICAgICAgdmFsdWUgPSA2LCAjIEFubyAxOTgwIChNYXJjbyBDYXJ2YWxobykNCiAgICAgICAgY29sb3IgPSBJQl9DSU5aQV9DTEFSTywNCiAgICAgICAgd2lkdGggPSAxLjUsDQogICAgICAgIGRhc2hTdHlsZSA9ICJTaG9ydERhc2giLA0KICAgICAgICB6SW5kZXggPSAzLA0KICAgICAgICBsYWJlbCA9IGxpc3QoDQogICAgICAgICAgdGV4dCA9ICJNYXJjbyBkZSBDYXJ2YWxobyAoMTk4MCkiLA0KICAgICAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiMTBweCIpLA0KICAgICAgICAgIHZlcnRpY2FsQWxpZ24gPSAidG9wIiwNCiAgICAgICAgICB5ID0gMTUNCiAgICAgICAgKQ0KICAgICAgKQ0KICAgICkNCiAgKSAlPiUNCiAgDQogIGhjX3lBeGlzKA0KICAgIHRpdGxlID0gbGlzdCgNCiAgICAgIHRleHQgPSAiZmlsaG9zIHBvciBtdWxoZXIiLA0KICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMXB4IikNCiAgICApLA0KICAgIG1pbiA9IDEuMCwNCiAgICBtYXggPSA2LjUsDQogICAgdGlja0ludGVydmFsID0gMS4wLA0KICAgIGdyaWRMaW5lQ29sb3IgPSAiI0YwRjBGMCIsDQogICAgbGluZUNvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgbGFiZWxzID0gbGlzdCgNCiAgICAgIGZvcm1hdCA9ICJ7dmFsdWU6LjFmfSIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sIGZvbnRTaXplID0gIjExcHgiKQ0KICAgICksDQogICAgDQogICAgIyBMaW5oYSBkZSBOw612ZWwgZGUgUmVwb3Npw6fDo28gUG9wdWxhY2lvbmFsICgyLDEgZmlsaG9zIHBvciBtdWxoZXIpDQogICAgcGxvdExpbmVzID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHZhbHVlID0gMi4xLA0KICAgICAgICBjb2xvciA9IElCX0FNQVJFTE8sDQogICAgICAgIHdpZHRoID0gMiwNCiAgICAgICAgZGFzaFN0eWxlID0gIkRhc2giLA0KICAgICAgICB6SW5kZXggPSA0LA0KICAgICAgICBsYWJlbCA9IGxpc3QoDQogICAgICAgICAgdGV4dCA9ICJOw612ZWwgZGUgcmVwb3Npw6fDo28gcG9wdWxhY2lvbmFsICgyLDEpIiwNCiAgICAgICAgICBhbGlnbiA9ICJyaWdodCIsDQogICAgICAgICAgc3R5bGUgPSBsaXN0KA0KICAgICAgICAgICAgY29sb3IgPSBJQl9BWlVMX0JBU0UsDQogICAgICAgICAgICBmb250U2l6ZSA9ICIxMHB4IiwNCiAgICAgICAgICAgIGZvbnRXZWlnaHQgPSAiYm9sZCINCiAgICAgICAgICApLA0KICAgICAgICAgIHggPSAtMTAsDQogICAgICAgICAgeSA9IC02DQogICAgICAgICkNCiAgICAgICkNCiAgICApDQogICkgJT4lDQogIA0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIlRheGEgZGUgRmVjdW5kaWRhZGUgVG90YWwgbm8gQnJhc2lsICgxOTUw4oCTMjAyNikiLA0KICAgIGFsaWduID0gImxlZnQiLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0FaVUxfQkFTRSwgZm9udFdlaWdodCA9ICJib2xkIiwgZm9udFNpemUgPSAiMThweCIpDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiTsO6bWVybyBtw6lkaW8gZGUgZmlsaG9zIHBvciBtdWxoZXIgfCBMaW5oYSB0cmFjZWphZGEgYW1hcmVsYTogdGF4YSBtw61uaW1hIGRlIHJlcG9zacOnw6NvIGRlbW9ncsOhZmljYSIsDQogICAgYWxpZ24gPSAibGVmdCIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCiAgDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICBjcm9zc2hhaXJzID0gVFJVRSwNCiAgICBoZWFkZXJGb3JtYXQgPSAiPHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMnB4Jz48Yj5Bbm8ge3BvaW50LmtleX08L2I+PC9zcGFuPjxici8+IiwNCiAgICBwb2ludEZvcm1hdCA9ICI8c3BhbiBzdHlsZT0nY29sb3I6e3Nlcmllcy5jb2xvcn0nPuKXjzwvc3Bhbj4gVEZUOiA8Yj57cG9pbnQueTouMmZ9IGZpbGhvcyBwb3IgbXVsaGVyPC9iPjxici8+Ig0KICApICU+JQ0KICANCiAgaGNfbGVnZW5kKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIA0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IElCR0Ug4oCUIENlbnNvcyBEZW1vZ3LDoWZpY29zIGUgTmHDp8O1ZXMgVW5pZGFzIChVTiBXUFAgUmV2LiAyMDI0KS4gRWxhYm9yYcOnw6NvIHByw7NwcmlhIEliTWFjcm8gQkguIiwNCiAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9DTEFSTywgZm9udFNpemUgPSAiMTBweCIpDQogICkgJT4lDQogIGhjX2V4cG9ydGluZyhlbmFibGVkID0gVFJVRSkNCg0KZ3JhZmljb19mZWN1bmRpZGFkZQ0KYGBgDQogDQpTZW1lbGhhbnRlIGEgdGF4YSBkZSBmZWN1bmRpZGFkZSwgYSBUYXhhIGRlIE1vcnRhbGlkYWRlIEluZmFudGlsIHRhbWLDqW0gcmVkdXppdSBjb25zaWRlcmFsdmVtZW50ZSBubyBwZXLDrW9kbyBhYm9yZGFkbywgY29tIGRlIDE0MiDDs2JpdG9zIHBhcmEgY2FkYSBtaWwgY2FkYSBtaWwgaGFiaXRhbnRlcywgZW0gMTk1MCBwYXNzYW5kbyBwYXJhIGFwZW5hcyAzMiBlbSAyMDE1LiAqKEdyw6FmaWNvIDQpKg0KIA0KRG8gb3V0cm8gbGFkbyB0ZW1vcyB1bSBncmFuZGUgYXVtZW50byBkYSBleHBlY3RhdGl2YSBkZSB2aWRhLCBtb3N0cmFuZG8gdW1hIGxvbmdldmlkYWRlIG1haW9yIGRvcyBpZG9zb3MuIEVzcGVyYS1zZSBxdWUgZW50cmUgMjAxNSBlIDIwMzAsIGEgcG9wdWxhw6fDo28gYWNpbWEgZGUgODUgYW5vcyBhdW1lbnRhcsOhIGVtIHVtIHJpdG1vIG1haXMgYWNlbGVyYWRvIHF1ZSBhIHBvcHVsYcOnw6NvIGVudHJlIHplcm8gZSBzZXNzZW50YSBhbm9zLiBBbMOpbSBkaXNzbywgZXN0aW1hLXNlIHF1ZSB0YW1iw6ltIGVtIDIwMzAsIDc4JSBkYXMgbW9ydGVzIG5vIEJyYXNpbCBvY29ycmVyw6NvIGNvbSBwZXNzb2FzIGFjaW1hIGRlIHNlc3NlbnRhIGFub3MsIHNlbmRvIHF1ZSBlbSAxOTUwIGEgcGFyY2VsYSBkYSBwb3B1bGHDp8OjbyBxdWUgdWx0cmFwYXNzYXZhIG9zIHNlc3NlbnRhIGFub3MgZXJhIGFwZW5hcyBkZSAxOCUuIERlIGFjb3JkbyBjb20gZGFkb3MgcmVjZW50ZXMgZG8gSUJHRSwgZXNzZSBhdmFuw6dvIGRhIGVzcGVyYW7Dp2EgZGUgdmlkYSBhaW5kYSBvY29ycmUsIGVzdGFuZG8gYWdvcmEgZW0gdG9ybm8gZGUgNzYsNCBwYXJhIGFtYm9zIG9zIHNleG9zLiAqKEdyw6FmaWNvIDUpKg0KDQoqKihHcsOhZmljbyA0KSoqDQogDQpgYGB7cn0NCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIEdyw6FmaWNvOiBUYXhhIGRlIE1vcnRhbGlkYWRlIEluZmFudGlsICgxOTUw4oCTMjA3MCkNCiMgSWRlbnRpZGFkZSBWaXN1YWwgT2ZpY2lhbDogUGFkcsOjbyBJYk1hY3JvIEJIIChNYW51YWwgZGUgTWFyY2EpDQojIEZvbnRlOiBOYcOnw7VlcyBVbmlkYXMgKFVOIFdQUCkgZSBCTkRFUyBTZXRvcmlhbA0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KIyBQcmV2ZW7Dp8OjbyBwYXJhIGNhbWluaG9zIHRlbXBvcsOhcmlvcyBubyBXaW5kb3dzIGNvbSBhY2VudHVhw6fDo28NCmRpci5jcmVhdGUoIkM6L1J0ZW1wIiwgc2hvd1dhcm5pbmdzID0gRkFMU0UpDQpTeXMuc2V0ZW52KFRNUERJUiA9ICJDOi9SdGVtcCIsIFRNUCA9ICJDOi9SdGVtcCIsIFRFTVAgPSAiQzovUnRlbXAiKQ0KDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpDQoNCiMg4pSA4pSAIDEuIERFRklOScOHw4NPIERBIFBBTEVUQSBJTlNUSVRVQ0lPTkFMIChHVUlBIERFIE1BUkNBKSDilIDilIDilIDilIDilIDilIANCklCX0FNQVJFTE8gICAgICA8LSAiI0ZGQjgxRiIgICMgQW1hcmVsbyBJYk1hY3JvIChEZXN0YXF1ZXMpDQpJQl9BWlVMX0JBU0UgICAgPC0gIiMwMjAyM0MiICAjIEF6dWwgSWJNYWNybyAoU8OpcmllIEJyYXNpbCAvIFTDrXR1bG9zKQ0KSUJfQlJBTkNPICAgICAgIDwtICIjRkZGRkZGIiAgIyBGdW5kbyBpbnN0aXR1Y2lvbmFsDQpJQl9BWlVMX01FRElPICAgPC0gIiMwMDJDNUUiICAjIEF6dWwgTcOpZGlvIGluc3RpdHVjaW9uYWwNCklCX0FaVUxfQ0xBUk8gICA8LSAiIzZCOEJBNCIgICMgU8OpcmllIE11bmRvDQpJQl9DSU5aQV9FU0NVUk8gPC0gIiMzQTNBM0EiICAjIFRleHRvcywgZWl4b3MgZSBzdWJ0w610dWxvcw0KSUJfQ0lOWkFfQ0xBUk8gIDwtICIjQTZBNkE2IiAgIyBTw6lyaWUgUGHDrXNlcyBEZXNlbnZvbHZpZG9zIC8gTGluaGFzIGRlIGdyYWRlDQoNCiMg4pSA4pSAIDIuIERBRE9TIERBIE1PUlRBTElEQURFIElORkFOVElMIChwb3IgMS4wMDAgbmFzY2lkb3Mgdml2b3MpIOKUgOKUgA0KZGZfbW9ydGFsaWRhZGUgPC0gdGliYmxlKA0KICBhbm8gPSBjKDE5NTAsIDE5NjAsIDE5NzAsIDE5ODAsIDE5OTAsIDIwMDAsIDIwMTAsIDIwMjAsIDIwMzAsIDIwNDAsIDIwNTAsIDIwNjAsIDIwNzApLA0KICBtdW5kbyA9IGMoMTQyLCAxMjIsIDk1LCA3OCwgNjUsIDUxLCAzNiwgMjgsIDIzLCAxOCwgMTUsIDEzLCAxMSksDQogIHBhaXNlc19kZXNlbnZvbHZpZG9zID0gYyg2MCwgMzUsIDIzLCAxNSwgMTAsIDcsIDUsIDQsIDMuNSwgMywgMi41LCAyLCAxLjgpLA0KICBicmFzaWwgPSBjKDEzNywgMTE1LCA5NSwgNzMsIDQ4LCAyNywgMTYsIDExLCA5LCA3LjUsIDYsIDUsIDQpDQopDQoNCiMg4pSA4pSAIDMuIENPTlNUUlXDh8ODTyBETyBQTE9UIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KZ3JhZmljb19tb3J0YWxpZGFkZSA8LSBoaWdoY2hhcnQoKSAlPiUNCiAgaGNfY2hhcnQoDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSBJQl9CUkFOQ08sDQogICAgc3R5bGUgPSBsaXN0KGZvbnRGYW1pbHkgPSAiQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIpDQogICkgJT4lDQogIA0KICAjIFPDqXJpZSAxOiBNdW5kbyAoQXp1bCBDbGFybykNCiAgaGNfYWRkX3NlcmllcygNCiAgICBuYW1lID0gIk11bmRvIiwNCiAgICBkYXRhID0gZGZfbW9ydGFsaWRhZGUkbXVuZG8sDQogICAgY29sb3IgPSBJQl9BWlVMX0NMQVJPLA0KICAgIGxpbmVXaWR0aCA9IDIuNSwNCiAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBUUlVFLCByYWRpdXMgPSAzLjUsIHN5bWJvbCA9ICJjaXJjbGUiKQ0KICApICU+JQ0KICANCiAgIyBTw6lyaWUgMjogUGHDrXNlcyBEZXNlbnZvbHZpZG9zIChDaW56YSBDbGFybyAvIFJlZmVyw6puY2lhIEV4dGVybmEpDQogIGhjX2FkZF9zZXJpZXMoDQogICAgbmFtZSA9ICJQYcOtc2VzIGRlc2Vudm9sdmlkb3MiLA0KICAgIGRhdGEgPSBkZl9tb3J0YWxpZGFkZSRwYWlzZXNfZGVzZW52b2x2aWRvcywNCiAgICBjb2xvciA9IElCX0NJTlpBX0NMQVJPLA0KICAgIGxpbmVXaWR0aCA9IDIuNSwNCiAgICBkYXNoU3R5bGUgPSAiU2hvcnREYXNoIiwNCiAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBUUlVFLCByYWRpdXMgPSAzLjUsIHN5bWJvbCA9ICJzcXVhcmUiKQ0KICApICU+JQ0KICANCiAgIyBTw6lyaWUgMzogQnJhc2lsIChBenVsIEliTWFjcm8gUHJpbmNpcGFsIOKAlCBEZXN0YXF1ZSkNCiAgaGNfYWRkX3NlcmllcygNCiAgICBuYW1lID0gIkJyYXNpbCIsDQogICAgZGF0YSA9IGRmX21vcnRhbGlkYWRlJGJyYXNpbCwNCiAgICBjb2xvciA9IElCX0FaVUxfQkFTRSwNCiAgICBsaW5lV2lkdGggPSAzLjUsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gVFJVRSwgcmFkaXVzID0gNC41LCBzeW1ib2wgPSAiZGlhbW9uZCIpDQogICkgJT4lDQogIA0KICBoY194QXhpcygNCiAgICBjYXRlZ29yaWVzID0gYXMuY2hhcmFjdGVyKGRmX21vcnRhbGlkYWRlJGFubyksDQogICAgZ3JpZExpbmVXaWR0aCA9IDEsDQogICAgZ3JpZExpbmVDb2xvciA9ICIjRjBGMEYwIiwNCiAgICBsaW5lQ29sb3IgPSBJQl9DSU5aQV9DTEFSTywNCiAgICB0aWNrQ29sb3IgPSBJQl9DSU5aQV9DTEFSTywNCiAgICBsYWJlbHMgPSBsaXN0KA0KICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMXB4IikNCiAgICApLA0KICAgIHBsb3RMaW5lcyA9IGxpc3QoDQogICAgICBsaXN0KA0KICAgICAgICB2YWx1ZSA9IDcsICMgQW5vIDIwMjAgKERpdmlzw6NvIGhpc3TDs3JpY28gLyBwcm9qZcOnw6NvKQ0KICAgICAgICBjb2xvciA9IElCX0NJTlpBX0NMQVJPLA0KICAgICAgICB3aWR0aCA9IDEuNSwNCiAgICAgICAgZGFzaFN0eWxlID0gIkRvdCIsDQogICAgICAgIHpJbmRleCA9IDMsDQogICAgICAgIGxhYmVsID0gbGlzdCgNCiAgICAgICAgICB0ZXh0ID0gIlByb2plw6fDtWVzIOKGkiIsDQogICAgICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMHB4IiksDQogICAgICAgICAgdmVydGljYWxBbGlnbiA9ICJ0b3AiLA0KICAgICAgICAgIHkgPSAxNQ0KICAgICAgICApDQogICAgICApDQogICAgKQ0KICApICU+JQ0KICANCiAgaGNfeUF4aXMoDQogICAgdGl0bGUgPSBsaXN0KA0KICAgICAgdGV4dCA9ICLDs2JpdG9zIHBvciBtaWwgbmFzY2lkb3Mgdml2b3MiLA0KICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMXB4IikNCiAgICApLA0KICAgIG1pbiA9IDAsDQogICAgbWF4ID0gMTYwLA0KICAgIHRpY2tJbnRlcnZhbCA9IDIwLA0KICAgIGdyaWRMaW5lQ29sb3IgPSAiI0YwRjBGMCIsDQogICAgbGluZUNvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgbGFiZWxzID0gbGlzdCgNCiAgICAgIGZvcm1hdCA9ICJ7dmFsdWU6LC4wZn0iLA0KICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMXB4IikNCiAgICApDQogICkgJT4lDQogIA0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIlRheGEgZGUgTW9ydGFsaWRhZGUgSW5mYW50aWwgbm8gQnJhc2lsIGUgbm8gTXVuZG8gKDE5NTDigJMyMDcwKSIsDQogICAgYWxpZ24gPSAibGVmdCIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQVpVTF9CQVNFLCBmb250V2VpZ2h0ID0gImJvbGQiLCBmb250U2l6ZSA9ICIxOHB4IikNCiAgKSAlPiUNCiAgaGNfc3VidGl0bGUoDQogICAgdGV4dCA9ICLDk2JpdG9zIGRlIG1lbm9yZXMgZGUgMSBhbm8gcG9yIG1pbCBuYXNjaWRvcyB2aXZvcyAoZGFkb3MgaGlzdMOzcmljb3MgZSBwcm9qZcOnw7VlcyBkYSBPTlUpIiwNCiAgICBhbGlnbiA9ICJsZWZ0IiwNCiAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sIGZvbnRTaXplID0gIjEycHgiKQ0KICApICU+JQ0KICANCiAgaGNfdG9vbHRpcCgNCiAgICBzaGFyZWQgPSBUUlVFLA0KICAgIGNyb3NzaGFpcnMgPSBUUlVFLA0KICAgIGhlYWRlckZvcm1hdCA9ICI8c3BhbiBzdHlsZT0nZm9udC1zaXplOjEycHgnPjxiPkFubyB7cG9pbnQua2V5fTwvYj48L3NwYW4+PGJyLz4iLA0KICAgIHBvaW50Rm9ybWF0ID0gIjxzcGFuIHN0eWxlPSdjb2xvcjp7c2VyaWVzLmNvbG9yfSc+4pePPC9zcGFuPiB7c2VyaWVzLm5hbWV9OiA8Yj57cG9pbnQueTouMWZ9IHBvciBtaWw8L2I+PGJyLz4iDQogICkgJT4lDQogIA0KICBoY19sZWdlbmQoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsDQogICAgbGF5b3V0ID0gImhvcml6b250YWwiLA0KICAgIGl0ZW1TdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9BWlVMX0JBU0UsIGZvbnRXZWlnaHQgPSAibm9ybWFsIiwgZm9udFNpemUgPSAiMTJweCIpDQogICkgJT4lDQogIA0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IE5hw6fDtWVzIFVuaWRhcyAoVU4gV1BQKSBlIEJOREVTIFNldG9yaWFsLiBFbGFib3Jhw6fDo28gcHLDs3ByaWEgSWJNYWNybyBCSC4iLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0NMQVJPLCBmb250U2l6ZSA9ICIxMHB4IikNCiAgKSAlPiUNCiAgaGNfZXhwb3J0aW5nKGVuYWJsZWQgPSBUUlVFKQ0KDQpncmFmaWNvX21vcnRhbGlkYWRlDQpgYGANCiANCiAqKihHcsOhZmljbyA1KSoqDQogDQpgYGB7cn0NCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIEdyw6FmaWNvOiBFc3BlcmFuw6dhIGRlIFZpZGEgbm8gQnJhc2lsICgxOTUw4oCTMjAyNikNCiMgSWRlbnRpZGFkZSBWaXN1YWwgT2ZpY2lhbDogUGFkcsOjbyBJYk1hY3JvIEJIIChNYW51YWwgZGUgTWFyY2EpDQojIEZvbnRlOiBXb3JsZG9tZXRlcnMsIE5hw6fDtWVzIFVuaWRhcyAoVU4gV1BQKSBlIElCR0UNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCiMgUHJldmVuw6fDo28gcGFyYSBjYW1pbmhvcyB0ZW1wb3LDoXJpb3Mgbm8gV2luZG93cyBjb20gYWNlbnR1YcOnw6NvDQpkaXIuY3JlYXRlKCJDOi9SdGVtcCIsIHNob3dXYXJuaW5ncyA9IEZBTFNFKQ0KU3lzLnNldGVudihUTVBESVIgPSAiQzovUnRlbXAiLCBUTVAgPSAiQzovUnRlbXAiLCBURU1QID0gIkM6L1J0ZW1wIikNCg0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KDQojIOKUgOKUgCAxLiBERUZJTknDh8ODTyBEQSBQQUxFVEEgSU5TVElUVUNJT05BTCAoR1VJQSBERSBNQVJDQSkg4pSA4pSA4pSA4pSA4pSA4pSADQpJQl9BTUFSRUxPICAgICAgPC0gIiNGRkI4MUYiICAjIE11bGhlcmVzIChEZXN0YXF1ZSkNCklCX0FaVUxfQkFTRSAgICA8LSAiIzAyMDIzQyIgICMgQW1ib3Mgb3Mgc2V4b3MgKFPDqXJpZSBQcmluY2lwYWwgLyBUw610dWxvcykNCklCX0JSQU5DTyAgICAgICA8LSAiI0ZGRkZGRiIgICMgRnVuZG8gaW5zdGl0dWNpb25hbA0KSUJfQVpVTF9NRURJTyAgIDwtICIjMDAyQzVFIiAgIyBBenVsIE3DqWRpbyBpbnN0aXR1Y2lvbmFsDQpJQl9BWlVMX0NMQVJPICAgPC0gIiM2QjhCQTQiICAjIEhvbWVucyAoQXBvaW8gZ3LDoWZpY28pDQpJQl9DSU5aQV9FU0NVUk8gPC0gIiMzQTNBM0EiICAjIFRleHRvcywgZWl4b3MgZSBzdWJ0w610dWxvcw0KSUJfQ0lOWkFfQ0xBUk8gIDwtICIjQTZBNkE2IiAgIyBMaW5oYXMgZGUgZ3JhZGUsIGVpeG9zIGUgY3LDqWRpdG9zDQoNCiMg4pSA4pSAIDIuIERBRE9TIERBIEVTUEVSQU7Dh0EgREUgVklEQSAoZW0gYW5vcykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQpkZl9leHBlY3RhdGl2YSA8LSB0aWJibGUoDQogIGFubyA9IGMoMTk1MCwgMTk1NSwgMTk2MCwgMTk2NSwgMTk3MCwgMTk3NSwgMTk4MCwgMTk4NSwgMTk5MCwgMTk5NSwgMjAwMCwgMjAwNSwgMjAxMCwgMjAxNSwgMjAyMCwgMjAyNSwgMjAyNiksDQogIGhvbWVucyA9IGMoNDYuNiwgNDguNywgNTEuMCwgNTMuMywgNTUuMywgNTcuMiwgNTguOCwgNjAuMywgNjEuOCwgNjMuNCwgNjUuMywgNjcuMiwgNjkuMiwgNzEuMCwgNzAuMiwgNzIuNSwgNzIuOCksDQogIG11bGhlcmVzID0gYyg0OS44LCA1Mi4xLCA1NC42LCA1Ny4wLCA1OS4xLCA2MS4zLCA2My4zLCA2NS4yLCA2Ny4yLCA2OS4zLCA3MS41LCA3My42LCA3NS42LCA3Ny41LCA3Ni43LCA3OC44LCA3OS4xKSwNCiAgYW1ib3MgPSBjKDQ4LjEsIDUwLjQsIDUyLjgsIDU1LjEsIDU3LjIsIDU5LjIsIDYxLjAsIDYyLjcsIDY0LjUsIDY2LjMsIDY4LjQsIDcwLjQsIDcyLjQsIDc0LjIsIDczLjUsIDc1LjYsIDc1LjkpDQopDQoNCiMg4pSA4pSAIDMuIENPTlNUUlXDh8ODTyBETyBQTE9UIENPTUJJTkFETyAoQ09MVU5BICsgTElOSEEpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KZ3JhZmljb19leHBlY3RhdGl2YSA8LSBoaWdoY2hhcnQoKSAlPiUNCiAgaGNfY2hhcnQoDQogICAgYmFja2dyb3VuZENvbG9yID0gSUJfQlJBTkNPLA0KICAgIHN0eWxlID0gbGlzdChmb250RmFtaWx5ID0gIkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiKQ0KICApICU+JQ0KICANCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgY29sdW1uID0gbGlzdCgNCiAgICAgIGdyb3VwUGFkZGluZyA9IDAuMTIsDQogICAgICBwb2ludFBhZGRpbmcgPSAwLjA1LA0KICAgICAgYm9yZGVyV2lkdGggID0gMA0KICAgICkNCiAgKSAlPiUNCiAgDQogICMgU8OpcmllIDE6IEhvbWVucyAoQ29sdW5hIOKAlCBBenVsIENsYXJvKQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIG5hbWUgID0gIkhvbWVucyIsDQogICAgdHlwZSAgPSAiY29sdW1uIiwNCiAgICBkYXRhICA9IGRmX2V4cGVjdGF0aXZhJGhvbWVucywNCiAgICBjb2xvciA9IElCX0FaVUxfQ0xBUk8NCiAgKSAlPiUNCiAgDQogICMgU8OpcmllIDI6IE11bGhlcmVzIChDb2x1bmEg4oCUIEFtYXJlbG8gSWJNYWNybykNCiAgaGNfYWRkX3NlcmllcygNCiAgICBuYW1lICA9ICJNdWxoZXJlcyIsDQogICAgdHlwZSAgPSAiY29sdW1uIiwNCiAgICBkYXRhICA9IGRmX2V4cGVjdGF0aXZhJG11bGhlcmVzLA0KICAgIGNvbG9yID0gSUJfQU1BUkVMTw0KICApICU+JQ0KICANCiAgIyBTw6lyaWUgMzogQW1ib3Mgb3Mgc2V4b3MgKExpbmhhIOKAlCBBenVsIEliTWFjcm8gQmFzZSkNCiAgaGNfYWRkX3NlcmllcygNCiAgICBuYW1lICAgICAgPSAiQW1ib3Mgb3Mgc2V4b3MiLA0KICAgIHR5cGUgICAgICA9ICJsaW5lIiwNCiAgICBkYXRhICAgICAgPSBkZl9leHBlY3RhdGl2YSRhbWJvcywNCiAgICBjb2xvciAgICAgPSBJQl9BWlVMX0JBU0UsDQogICAgbGluZVdpZHRoID0gMywNCiAgICB6SW5kZXggICAgPSAzLA0KICAgIG1hcmtlciAgICA9IGxpc3QoDQogICAgICBlbmFibGVkICAgPSBUUlVFLA0KICAgICAgcmFkaXVzICAgID0gNC41LA0KICAgICAgZmlsbENvbG9yID0gSUJfQlJBTkNPLA0KICAgICAgbGluZVdpZHRoID0gMi41LA0KICAgICAgbGluZUNvbG9yID0gSUJfQVpVTF9CQVNFLA0KICAgICAgc3ltYm9sICAgID0gImNpcmNsZSINCiAgICApDQogICkgJT4lDQogIA0KICBoY194QXhpcygNCiAgICBjYXRlZ29yaWVzICAgID0gYXMuY2hhcmFjdGVyKGRmX2V4cGVjdGF0aXZhJGFubyksDQogICAgZ3JpZExpbmVXaWR0aCA9IDEsDQogICAgZ3JpZExpbmVDb2xvciA9ICIjRjBGMEYwIiwNCiAgICBsaW5lQ29sb3IgICAgID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgdGlja0NvbG9yICAgICA9IElCX0NJTlpBX0NMQVJPLA0KICAgIGxhYmVscyAgICAgICAgPSBsaXN0KA0KICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMXB4IikNCiAgICApDQogICkgJT4lDQogIA0KICBoY195QXhpcygNCiAgICB0aXRsZSA9IGxpc3QoDQogICAgICB0ZXh0ICA9ICJhbm9zIGRlIHZpZGEiLA0KICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMXB4IikNCiAgICApLA0KICAgIG1pbiAgICAgICAgICAgPSA0MCwNCiAgICBtYXggICAgICAgICAgID0gODUsDQogICAgdGlja0ludGVydmFsICA9IDEwLA0KICAgIGdyaWRMaW5lQ29sb3IgPSAiI0YwRjBGMCIsDQogICAgbGluZUNvbG9yICAgICA9IElCX0NJTlpBX0NMQVJPLA0KICAgIGxhYmVscyAgICAgICAgPSBsaXN0KA0KICAgICAgZm9ybWF0ID0gInt2YWx1ZTouMGZ9IiwNCiAgICAgIHN0eWxlICA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sIGZvbnRTaXplID0gIjExcHgiKQ0KICAgICkNCiAgKSAlPiUNCiAgDQogIGhjX3RpdGxlKA0KICAgIHRleHQgID0gIkVzcGVyYW7Dp2EgZGUgVmlkYSBhbyBOYXNjZXIgbm8gQnJhc2lsICgxOTUw4oCTMjAyNikiLA0KICAgIGFsaWduID0gImxlZnQiLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0FaVUxfQkFTRSwgZm9udFdlaWdodCA9ICJib2xkIiwgZm9udFNpemUgPSAiMThweCIpDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgID0gIkV2b2x1w6fDo28gaGlzdMOzcmljYSBlIHByb2plw6fDtWVzIHBvciBzZXhvIGUgbcOpZGlhIGFncmVnYWRhIChlbSBhbm9zKSIsDQogICAgYWxpZ24gPSAibGVmdCIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCiAgDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkICAgICAgPSBUUlVFLA0KICAgIGNyb3NzaGFpcnMgID0gVFJVRSwNCiAgICBoZWFkZXJGb3JtYXQgPSAiPHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMnB4Jz48Yj5Bbm8ge3BvaW50LmtleX08L2I+PC9zcGFuPjxici8+IiwNCiAgICBwb2ludEZvcm1hdCA9ICI8c3BhbiBzdHlsZT0nY29sb3I6e3Nlcmllcy5jb2xvcn0nPuKXjzwvc3Bhbj4ge3Nlcmllcy5uYW1lfTogPGI+e3BvaW50Lnk6LjFmfSBhbm9zPC9iPjxici8+Ig0KICApICU+JQ0KICANCiAgaGNfbGVnZW5kKA0KICAgIGVuYWJsZWQgICAgICAgPSBUUlVFLA0KICAgIGFsaWduICAgICAgICAgPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsDQogICAgbGF5b3V0ICAgICAgICA9ICJob3Jpem9udGFsIiwNCiAgICBpdGVtU3R5bGUgICAgID0gbGlzdChjb2xvciA9IElCX0FaVUxfQkFTRSwgZm9udFdlaWdodCA9ICJub3JtYWwiLCBmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCiAgDQogIGhjX2NyZWRpdHMoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgdGV4dCAgICA9ICJGb250ZTogSUJHRSwgTmHDp8O1ZXMgVW5pZGFzIChVTiBXUFApIGUgV29ybGRvbWV0ZXJzLiBFbGFib3Jhw6fDo28gcHLDs3ByaWEgSWJNYWNybyBCSC4iLA0KICAgIHN0eWxlICAgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sIGZvbnRTaXplID0gIjEwcHgiKQ0KICApICU+JQ0KICBoY19leHBvcnRpbmcoZW5hYmxlZCA9IFRSVUUpDQoNCmdyYWZpY29fZXhwZWN0YXRpdmENCmBgYA0KIA0KVG9kb3Mgb3MgaW5kaWNhZG9yZXMgcmVzcG9uZGVtIGEgZGl2ZXJzb3MgZmF0b3JlcyBxdWUgY29tZcOnYXJhbSBhIG9jb3JyZXIgbmEgbWV0YWRlIGRvIHPDqWN1bG8gcGFzc2FkbyBlIHF1ZSBjdWxtaW5hbSBlbSByZWZsZXhvcyBhdMOpIGhvamUsIGUgcXVlIHJlc3VsdGFyYW0gcHJpbmNpcGFsbWVudGUgbmEgdHJhbnNpw6fDo28gZGVtb2dyw6FmaWNhIGFuYWxpc2FkYSBuZXNzZSByZWxhdMOzcmlvLiANCg0KVW0gZG9zIHByaW5jaXBhaXMgc2VuZG8gYSBjb250cmFjZXDDp8OjbyBxdWUgaW1wYWN0YSBkaXJldGFtZW50ZSBhIGZlY3VuZGlkYWRlIGUgYSBuYXRhbGlkYWRlLCBjb20gbyBhY2Vzc28gw6AgbWV0b2RvcyBjb250cmFjZXB0aXZvcyBhIG1hdGVybmlkYWRlIHNlIHRvcm5vdSBhbGdvIHBsYW5lamFkbyBlbnRyZSBvcyBjYXNhaXMsIGUgY29tbyBjb25zZXF1w6puY2lhIG8gbsO6bWVybyBkZSBmaWxob3MgcG9yIG11bGhlciBjYWl1IGluc3RpdGl2YW1lbnRlLg0KIA0KTyBmYXRvciBlY29uw7RtaWNvIHRhbWLDqW0gdGVtIGdyYW5kZSBwZXNvIG5lc3NhIGFuw6FsaXNlLCBwb2lzIGNyaWFyIHVtIGZpbGhvIHByaW5jaXBhbG1lbnRlIG5vIEJyYXNpbCwgc2VuZG8gY29uc2lkZXJhZG8gcXVhc2UgdHLDqnMgdmV6ZXMgbWFpcyBjYXJvIGRvIHF1ZSBow6EgMjUgYW5vcywgY29tIG8gY3VzdG8gdG90YWwgYXR1YWxtZW50ZSB2YXJpYW5kbyBlbnRyZSBSJCAyMzkgbWlsIGUgUiQgMyw2IG1pbGjDtWVzIGRlIHVtYSBjcmlhbsOnYSBkbyBuYXNjaW1lbnRvIGF0w6kgb3MgMTggYW5vcywgY29tIGEgY29udGEgdG90YWwgc3ViaW5kbyBjYWRhIHZleiBtYWlzLg0KIA0KQWzDqW0gZGlzc28sIG8gcGFwZWwgZGEgbXVsaGVyIG5vIG1lcmNhZG8gZGUgdHJhYmFsaG8gZmV6IGNvbSBxdWUgYXMgcHJpb3JpZGFkZXMgZm9zc2VtIHJlZGVzZW5oYWRhcywgY29tIGNhcnJlaXJhLCBmb3JtYcOnw6NvLCBhdXRvbm9taWEgZmluYW5jZWlyYSBkZW50cm8gb3V0cm9zIGVudHJhbmRvIGVtIGRlc3RhcXVlIGVtIHVtIGNlbsOhcmlvIG9uZGUgw6AgdmlkYSBmYW1pbGlhciBkZSBjdWlkYWRvIG9zIGZpbGhvcyBhbnRpZ2FtZW50ZSBlcmEgYSBtYWlvciBwcmlvcmlkYWRlLg0KDQpTb2JyZSBhIHF1ZWRhIGRhIG1vcnRhbGlkYWRlIGluZmFudGlsIGUgZG8gYXVtZW50byBkYSBxdWFsaWRhZGUgZGUgdmlkYSwgcG9kZS1zZSBhZmlybWFyIHF1ZSBhIGV4cGFuc8OjbywgZG8gc2FuZWFtZW50byBiw6FzaWNvIGUgcmVkZXMgZGUgYXRlbsOnw6NvIHByaW3DoXJpYSAocHJvZ3JhbWFzIGRlIHZhY2luYcOnw6NvIGUgcHLDqS1uYXRhbCksIHByb21vdmVyYW0gw6Agc3VhIHF1ZWRhIGUgcXVlIGNvbnNlcXVlbnRlbWVudGUgYWNhcnJldG91IGVtIHVtIGF1bWVudG8gZGEgZXhwZWN0YXRpdmEgZGEgcG9wdWxhw6fDo28gbWFpcyBpZG9zYSwgZGV2aWRvIGEgZXNzZSBhdW1lbnRvIGRlIHBvbMOtdGljYXMgcMO6YmxpY2FzIHZvbHRhZGFzIHBhcmEgYSBxdWFsaWRhZGUgZGUgdmlkYSBlIHNhw7pkZS4NCg0KT2JzZXJ2YS1zZSBxdWUgZGVwb2lzIGRlc3NhIGdyYW5kZSBhbsOhbGlzZSBhIHRyYW5zacOnw6NvIGRlbW9ncsOhZmljYSBhcHJlc2VudGEgZW0gc3VhIGdyYW5kZSBtYWlvcmlhIHVtIHBhZHLDo28gcXVlIHNlIGVzdGVuZGV1IG7Do28gYXBlbmFzIG5vIEJyYXNpbCBtYXMgc2ltIHBhcmEgb3V0cm9zIHBhw61zZXMgZSBjb250aW5lbnRlcywgYWxnbyBxdWUgc2Vyw6EgYWJvcmRhZG8gYW8gZmluYWwgZG8gcmVsYXTDs3Jpby4gTyBhcnRpZ28gIkV2b2x1w6fDo28gZGVtb2dyw6FmaWNhIHJlY2VudGUgbm8gQnJhc2lsIiBkbyBwcm9mZXNzb3IgSm9zw6kgQWxiZXJ0byBNYWdubyBkZSBDYXJ2YWxobyBwdWJsaWNhZG8gZW0gMTk4MCwgZm9pIG8gcHJpbWVpcm8gYSBwcm92YXIgZXNzYSByw6FwaWRhIGUgZGluw6JtaWNhIG11ZGFuw6dhIG5hIGRlbW9ncmFmaWEgYnJhc2lsZWlyYS4gQXRyYXbDqXMgZGUgc2V1IGVzdHVkbyBmb2kgcG9zc8OtdmVsIGVzdGFiZWxlY2VyIGVtcGlyaWNhbWVudGUgbyBwYWRyw6NvIGVzcGVjw61maWNvIGRhIHRyYW5zacOnw6NvIGRlbW9ncsOhZmljYSBicmFzaWxlaXJhLg0KDQogIDEuIFJ1cHR1cmEgZG8gUmVnaW1lIEhpc3TDs3JpY28gZGUgRXF1aWzDrWJyaW8gSm92ZW0NCkF0w6kgMTk3MCwgbyBCcmFzaWwgbWFudGluaGEgdW0gcGFkcsOjbyBkZW1vZ3LDoWZpY28gY2FyYWN0ZXJpemFkbyBwb3IgcXVlZGEgbmEgbW9ydGFsaWRhZGUgZSBmZWN1bmRpZGFkZSBjcm9uaWNhbWVudGUgZWxldmFkYSwgbyBxdWUgZ2VyYXZhIGFsdG8gY3Jlc2NpbWVudG8gcG9wdWxhY2lvbmFsIGNvbSBlc3RydXR1cmEgZXTDoXJpYSBjb25zdGFudGUgKH41MSUgZGEgcG9wdWxhw6fDo28gY29tIG1lbm9zIGRlIDIwIGFub3MpLiBBIHBhcnRpciBkZSAxOTcwLCBlc3NlIHBhZHLDo28gc2Ugcm9tcGUgY29tIG8gaW7DrWNpbyBkZSB1bSBkZWNsw61uaW8gYWNlbGVyYWRvIGRhIGZlY3VuZGlkYWRlLiAgDQoNCiAgMi4gUXVlZGEgR2VuZXJhbGl6YWRhIGRhIEZlY3VuZGlkYWRlDQpBIFRheGEgZGUgRmVjdW5kaWRhZGUgVG90YWwgY2FpdSBjZXJjYSBkZSAyNCUgZW50cmUgMTk2NS83MCBlIDE5NzEvNzYgZW0gdG9kYXMgYXMgcmVnacO1ZXMgYnJhc2lsZWlyYXMuIFBvciBhYnJhbmdlciBhIG1haW9yaWEgZGEgcG9wdWxhw6fDo28gbmFjaW9uYWwsIGVzc2UgZGVjbMOtbmlvIGF0aW5naXUgb2JyaWdhdG9yaWFtZW50ZSBhcyBjbGFzc2VzIHNvY2lhaXMgZGUgbWVub3IgcmVuZGEuICANCg0KICAzLiBFc3RyZWl0YW1lbnRvIEFjZWxlcmFkbyBkYSBCYXNlIGRhIFBpcsOibWlkZQ0KICBBIHJlZHXDp8OjbyBubyBuw7ptZXJvIGRlIGZpbGhvcyBvY29ycmV1IGEgdW0gcml0bW8gbWFpcyByw6FwaWRvIGRvIHF1ZSBvIGNyZXNjaW1lbnRvIGRvIGNvbnRpbmdlbnRlIGRlIG11bGhlcmVzIGVtIGlkYWRlIGbDqXJ0aWwuIElzc28gZ2Vyb3UgdW0gZWZlaXRvIGltZWRpYXRvIG5hIGJhc2UgZGEgcGlyw6JtaWRlIGV0w6FyaWEsIGZhemVuZG8gY29tIHF1ZSBvIG7Dum1lcm8gZGUgbmFzY2lkb3MgYSBjYWRhIGFubyBzZSB0b3JuYXNzZW0gcHJvcG9yY2lvbmFsbWVudGUgbWVub3JlcyBkbyBxdWUgYXMgZ2VyYcOnw7VlcyBhbnRlcmlvcmVzICANCg0KICA0LiBSZWNvbXBvc2nDp8OjbyBFdMOhcmlhIGUgQXVtZW50byBQcm9wb3JjaW9uYWwgZGUgSWRvc29zDQpObyBtb2RlbG8gZGUgcG9wdWxhw6fDo28gZXN0w6F2ZWwgY29uc3RydcOtZG8gcGVsbyBhdXRvciwgYSBlc3RydXR1cmEgcG9wdWxhY2lvbmFsIHNvZnJlIHVtYSBtdWRhbsOnYSBwcm9mdW5kYTogIEpvdmVucyAoMCBhIDE0IGFub3MpOiBBIHBhcnRpY2lwYcOnw6NvIGNhaSBkZSB+NDIlIHBhcmEgfjM1JSBkbyB0b3RhbCBkZSBoYWJpdGFudGVzLiAgSWRvc29zICg2NSBhbm9zIG91IG1haXMpOiBBIHBhcnRpY2lwYcOnw6NvIHNhbHRhIGRlIH4zJSBwYXJhIH45JSBkYSBwb3B1bGHDp8Ojby4gIFJhesOjbyBkZSBEZXBlbmTDqm5jaWE6IEEgdGF4YSBkZSBkZXBlbmTDqm5jaWEgdG90YWwgcmVjdWEgbGlnZWlyYW1lbnRlIGRlIDAsODMgcGFyYSAwLDc5LCBtYXMgYSBmYXRpYSBkZSBpZG9zb3Mgbm8gdG90YWwgZGUgZGVwZW5kZW50ZXMgY3Jlc2NlIGRlIDclIHBhcmEgMjAlDQoNCkFuYWxpc2FuZG8gYSBzdWNlc3PDo28gZGUgZXZlbnRvcyBxdWUgbGV2YW0gYSB0cmFuc2nDp8OjbyBkZW1vZ3LDoWZpY2EsIMOpIHBvc3PDrXZlbCBpZGVudGlmaWNhciBxdWUgb3MgaW5kaWNhZG9yZXMgZGUgaG9qZSBzw6NvIHVtYSBjb25zZXF1w6puY2lhIGRpcmV0YSBkbyBxdWUgQ2FydmFsaG8gb2JzZXJ2b3UgZW0gc2V1IGFydGlnbyBubyBpbsOtY2lvIGRhIGTDqWNhZGEgZGUgMTk4MCwgbyBwYXNzbyBhIHBhc3NvIHBhcmEgYSB0cmFuc2nDp8OjbyBkZW1vZ3LDoWZpY2EgY29tIG8gZmF0b3IgZGUgcXVlIG5vIGNhc28gZG8gQnJhc2lsLCBvY29ycmV1IGVtIHVtIGVzcGHDp28gZGUgdGVtcG8gY29uc2lkZXJhZG8gYmVtIGN1cnRvIGUgZGUgZm9ybWEgYWNlbGVyYWRhIHNlIGNvbXBhcmFkYSBjb20gb3MgcGHDrXNlcyBldXJvcGV1cy4gDQoNCiMgKjM6IFByb2R1dGl2aWRhZGUgY29tbyBjYXRhbGlzYWRvcioNCg0KU2FpbmRvIGFnb3JhIGRhIGFuw6FsaXNlIGRlbW9ncsOhZmljYSwgY29tbyB0b2RvcyBvcyBpbmRpY2Fkb3JlcyBhdHVhaXMgbW9zdHJhbSB1bWEgc3VjZXNzw6NvIGRlIGV2ZW50b3MgZGUgYW5vcyBkZSB1bWEgdHJhbnNpw6fDo28gZGVtb2dyw6FmaWNhIGFjZWxlcmFkYSwgYSBwcsOzeGltYSBwYXV0YSBlbSBxdWVzdMOjbyDDqSBhY2VyY2EgZG9zIGltcGFjdG9zIG1haXMgZGlyZXRvcyBuYSBlY29ub21pYSBxdWUgdG9kYSBlc3NhIGRpbsOibWljYSBhY2FycmV0b3UuIA0KDQpPIGltcGFjdG8gbWFpcyBuw610aWRvIGUgZXZpZGVudGUgc2UgZGEgcG9yIGNvbnRhIGRhIFJhesOjbyBkZSBEZXBlbmTDqm5jaWEsIHF1ZSB0YW1iw6ltIHBhc3NhcsOhIHBvciB1bSBwcm9jZXNzbyBkZSBpbnZlcnPDo28gbm9zIHByw7N4aW1vcyBhbm9zIHNlZ3VuZG8gYXMgcHJvamXDp8O1ZXMuIEF0dWFsbWVudGUgYSBwcmV2aXPDo28gw6kgZGUgcXVlIGVtIDIwMzAgYSBSRCBKb3ZlbSBhaW5kYSBzZXLDoSBzdXBlcmlvciBkbyBxdWUgYSBSRCBJZG9zYSwgcmVzcGVjdGl2YW1lbnRlIGNvbSAyNyUgY29udHJhIDE5LjclLCBlbnRyZXRhbnRvIGVtIDIwNDAgw6kgZXNwZXJhZG8gcXVlIGVzc2EgaW52ZXJzw6NvIG9jb3JyYSBjb20gYSBSRCBJZG9zYSBlbSB0b3JubyAzMSw1JSB1bHRyYXBhc3NhbmRvIGEgam92ZW0gbm8gdmFsb3IgZGUgMjQsOCUgKihHcsOhZmljbyA2KSoNCg0KTmEgcHLDoXRpY2EgYSBhbsOhbGlzZSBkZXNzYSByYXrDo28gaW1wbGljYSBxdWUgZW0gdW0gZnV0dXJvIG7Do28gbXVpdG8gZGlzdGFudGUgYSBwb3JjZW50YWdlbSBkb3MgaWRvc29zIG1haXMgZGVwZW5kZW50ZXMgZWNvbm9taWNhbWVudGUgYXVtZW50YXLDoSBlbSByZWxhw6fDo28gYSBlc3NhIG5vdmEgZ2VyYcOnw6NvIGRlIGpvdmVucyBhdGl2b3Mgbm8gbWVyY2FkbyBkZSB0cmFiYWxoby4gSXNzbyBiYXNpY2FtZW50ZSBpbXBsaWNhIHF1ZSBlbSAyMDQwIHRlcmVtb3MgcGFyYSBjYWRhIDEwMCB0cmFiYWxoYWRvcmVzIHBvdGVuY2lhaXMgMzEsNSBpZG9zb3MgZGVwZW5kZW50ZXMuIEVudHJldGFudG8gbyBjZW7DoXJpbyBzZSBtb3N0cmEgYWluZGEgbWFpcyBwcmVvY3VwYW50ZSBjb20gcGFzc2FyIGRvcyBhbm9zLCBjb20gYSBwcm9qZcOnw6NvIGRlIDIwNjAgY2hlZ2FuZG8gw6AgNTEsNSBpZG9zb3MgZGVwZW5kZW50ZXMgcGFyYSBjYWRhIDEwMCB0cmFiYWxoYWRvcmVzIGF0aXZvcy4gKihHcsOhZmljbyA2KSogDQoNCioqKEdyw6FmaWNvIDYpKioNCg0KYGBge3J9DQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyBHcsOhZmljbzogUmF6w6NvIGRlIERlcGVuZMOqbmNpYSDigJQgQnJhc2lsICgxOTgw4oCTMjA2MCkNCiMgSWRlbnRpZGFkZSBWaXN1YWwgT2ZpY2lhbDogUGFkcsOjbyBJYk1hY3JvIEJIIChNYW51YWwgZGUgTWFyY2EpDQojIEZvbnRlOiBJQkdFIOKAlCBDZW5zb3MgRGVtb2dyw6FmaWNvcyAoMTk4MOKAkzIwMjIpIGUgUHJvamXDp8O1ZXMgUmV2LiAyMDI0DQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQojIFByZXZlbsOnw6NvIHBhcmEgY2FtaW5ob3MgdGVtcG9yw6FyaW9zIG5vIFdpbmRvd3MgY29tIGFjZW50dWHDp8Ojbw0KZGlyLmNyZWF0ZSgiQzovUnRlbXAiLCBzaG93V2FybmluZ3MgPSBGQUxTRSkNClN5cy5zZXRlbnYoVE1QRElSID0gIkM6L1J0ZW1wIiwgVE1QID0gIkM6L1J0ZW1wIiwgVEVNUCA9ICJDOi9SdGVtcCIpDQoNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCg0KIyDilIDilIAgMS4gREVGSU5Jw4fDg08gREEgUEFMRVRBIElOU1RJVFVDSU9OQUwgKEdVSUEgREUgTUFSQ0EpIOKUgOKUgOKUgOKUgOKUgOKUgA0KSUJfQU1BUkVMTyAgICAgIDwtICIjRkZCODFGIiAgIyBBbWFyZWxvIEliTWFjcm8gKFJEIEpvdmVtIC8gRGVzdGFxdWVzKQ0KSUJfQVpVTF9CQVNFICAgIDwtICIjMDIwMjNDIiAgIyBBenVsIEliTWFjcm8gKFJEIFRvdGFsIC8gVMOtdHVsb3MpDQpJQl9CUkFOQ08gICAgICAgPC0gIiNGRkZGRkYiICAjIEZ1bmRvIGluc3RpdHVjaW9uYWwNCklCX0FaVUxfTUVESU8gICA8LSAiIzAwMkM1RSIgICMgTWFyY28gZGUgQ3J1emFtZW50byBkYXMgQ3VydmFzDQpJQl9BWlVMX0NMQVJPICAgPC0gIiM2QjhCQTQiICAjIFJEIElkb3NhIChBcG9pbyBncsOhZmljbykNCklCX0NJTlpBX0VTQ1VSTyA8LSAiIzNBM0EzQSIgICMgVGV4dG9zLCBlaXhvcywgc3VidMOtdHVsb3MgZSBSZWZvcm1hIDIwMTkNCklCX0NJTlpBX0NMQVJPICA8LSAiI0E2QTZBNiIgICMgTGluaGFzIGRlIGdyYWRlLCBlaXhvcyBlIGNyw6lkaXRvcw0KDQojIOKUgOKUgCAyLiBCQVNFIERFIERBRE9TIEUgRVNUUlVUVVJBw4fDg08gVEVNUE9SQUwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQpyZCA8LSB0aWJibGUoDQogIGFubyAgICAgICAgPSBjKDE5ODAsIDE5OTEsIDIwMDAsIDIwMTAsIDIwMjIsIDIwMzAsIDIwNDAsIDIwNTAsIDIwNjApLA0KICByZF90b3RhbCAgID0gYyg3OS41LCA2Ny4wLCA1NS4zLCA0NS45LCA0My43LCA0Ni43LCA1Ni4zLCA2Ny42LCA3NS45KSwNCiAgcmRfam92ZW0gICA9IGMoNzIuNiwgNTguMiwgNDUuOSwgMzYuMCwgMzEuMCwgMjcuMCwgMjQuOCwgMjQuNSwgMjQuOCksDQogIHJkX2lkb3NhICAgPSBjKCA2LjksICA4LjgsICA5LjQsICA5LjksIDEyLjcsIDE5LjcsIDMxLjUsIDQzLjEsIDUxLjEpLA0KICBwcm9qZXRhZG8gID0gYyhGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIFRSVUUsIFRSVUUsIFRSVUUsIFRSVUUpDQopDQoNCnRzIDwtIGZ1bmN0aW9uKGEpIGFzLm51bWVyaWMoYXMuUE9TSVhjdChwYXN0ZTAoYSwgIi0wMS0wMSIpLCB0eiA9ICJVVEMiKSkgKiAxMDAwDQoNCmhpc3QgPC0gcmQgJT4lIGZpbHRlcighcHJvamV0YWRvKQ0KcHJvaiA8LSByZCAlPiUgZmlsdGVyKGFubyA+PSAyMDIyKQ0KDQp0b19oYyA8LSBmdW5jdGlvbihkZiwgY29sKSB7DQogIG1hcDIodHMoZGYkYW5vKSwgZGZbW2NvbF1dLCB+IGxpc3QoeCA9IC54LCB5ID0gLnkpKQ0KfQ0KDQp0c18yMDIyIDwtIHRzKDIwMjIpDQp0c18yMDYwIDwtIHRzKDIwNjApDQp0c18yMDE5IDwtIHRzKDIwMTkpICAjIE1hcmNvIGRhIFJlZm9ybWEgZGEgUHJldmlkw6puY2lhDQp0c18yMDQwIDwtIHRzKDIwNDApICAjIEludmVyc8OjbyBSRCBJZG9zYSA+IFJEIEpvdmVtDQoNCiMg4pSA4pSAIDMuIENPTlNUUlXDh8ODTyBETyBQTE9UIChISUdIQ0hBUlRTIFNUT0NLKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCmdyYWZpY29fcmF6YW9fZGVwZW5kZW5jaWEgPC0gaGlnaGNoYXJ0KHR5cGUgPSAic3RvY2siKSAlPiUNCiAgaGNfY2hhcnQoDQogICAgYmFja2dyb3VuZENvbG9yID0gSUJfQlJBTkNPLA0KICAgIHN0eWxlID0gbGlzdChmb250RmFtaWx5ID0gIkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiKSwNCiAgICBzcGFjaW5nVG9wID0gMjAsDQogICAgc3BhY2luZ1JpZ2h0ID0gMjAsDQogICAgc3BhY2luZ0JvdHRvbSA9IDIwLA0KICAgIHNwYWNpbmdMZWZ0ID0gMjANCiAgKSAlPiUNCg0KICAjIOKUgOKUgCBSRCBUb3RhbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhICAgICAgPSB0b19oYyhoaXN0LCAicmRfdG90YWwiKSwNCiAgICB0eXBlICAgICAgPSAibGluZSIsDQogICAgbmFtZSAgICAgID0gIlJEIFRvdGFsIiwNCiAgICBjb2xvciAgICAgPSBJQl9BWlVMX0JBU0UsDQogICAgbGluZVdpZHRoID0gMywNCiAgICBtYXJrZXIgICAgPSBsaXN0KGVuYWJsZWQgPSBUUlVFLCByYWRpdXMgPSA1LCBzeW1ib2wgPSAiY2lyY2xlIiksDQogICAgdG9vbHRpcCAgID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMSwgdmFsdWVTdWZmaXggPSAiJSIpDQogICkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSAgICAgICAgID0gdG9faGMocHJvaiwgInJkX3RvdGFsIiksDQogICAgdHlwZSAgICAgICAgID0gImxpbmUiLA0KICAgIG5hbWUgICAgICAgICA9ICJSRCBUb3RhbCAocHJvamV0YWRhKSIsDQogICAgY29sb3IgICAgICAgID0gSUJfQVpVTF9CQVNFLA0KICAgIGxpbmVXaWR0aCAgICA9IDIsDQogICAgZGFzaFN0eWxlICAgID0gIlNob3J0RGFzaCIsDQogICAgbWFya2VyICAgICAgID0gbGlzdChlbmFibGVkID0gVFJVRSwgcmFkaXVzID0gNCwgc3ltYm9sID0gImNpcmNsZSIpLA0KICAgIGxpbmtlZFRvICAgICA9ICI6cHJldmlvdXMiLA0KICAgIHNob3dJbkxlZ2VuZCA9IEZBTFNFLA0KICAgIHRvb2x0aXAgICAgICA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDEsIHZhbHVlU3VmZml4ID0gIiUiKQ0KICApICU+JQ0KDQogICMg4pSA4pSAIFJEIEpvdmVtIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgICAgICA9IHRvX2hjKGhpc3QsICJyZF9qb3ZlbSIpLA0KICAgIHR5cGUgICAgICA9ICJsaW5lIiwNCiAgICBuYW1lICAgICAgPSAiUkQgSm92ZW0gKDDigJMxNCBhbm9zKSIsDQogICAgY29sb3IgICAgID0gSUJfQU1BUkVMTywNCiAgICBsaW5lV2lkdGggPSAzLA0KICAgIG1hcmtlciAgICA9IGxpc3QoZW5hYmxlZCA9IFRSVUUsIHJhZGl1cyA9IDUsIHN5bWJvbCA9ICJkaWFtb25kIiksDQogICAgdG9vbHRpcCAgID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMSwgdmFsdWVTdWZmaXggPSAiJSIpDQogICkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSAgICAgICAgID0gdG9faGMocHJvaiwgInJkX2pvdmVtIiksDQogICAgdHlwZSAgICAgICAgID0gImxpbmUiLA0KICAgIG5hbWUgICAgICAgICA9ICJSRCBKb3ZlbSAocHJvamV0YWRhKSIsDQogICAgY29sb3IgICAgICAgID0gSUJfQU1BUkVMTywNCiAgICBsaW5lV2lkdGggICAgPSAyLA0KICAgIGRhc2hTdHlsZSAgICA9ICJTaG9ydERhc2giLA0KICAgIG1hcmtlciAgICAgICA9IGxpc3QoZW5hYmxlZCA9IFRSVUUsIHJhZGl1cyA9IDQsIHN5bWJvbCA9ICJkaWFtb25kIiksDQogICAgbGlua2VkVG8gICAgID0gIjpwcmV2aW91cyIsDQogICAgc2hvd0luTGVnZW5kID0gRkFMU0UsDQogICAgdG9vbHRpcCAgICAgID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMSwgdmFsdWVTdWZmaXggPSAiJSIpDQogICkgJT4lDQoNCiAgIyDilIDilIAgUkQgSWRvc2Eg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSAgICAgID0gdG9faGMoaGlzdCwgInJkX2lkb3NhIiksDQogICAgdHlwZSAgICAgID0gImxpbmUiLA0KICAgIG5hbWUgICAgICA9ICJSRCBJZG9zYSAoNjUrIGFub3MpIiwNCiAgICBjb2xvciAgICAgPSBJQl9BWlVMX0NMQVJPLA0KICAgIGxpbmVXaWR0aCA9IDMsDQogICAgbWFya2VyICAgID0gbGlzdChlbmFibGVkID0gVFJVRSwgcmFkaXVzID0gNSwgc3ltYm9sID0gInRyaWFuZ2xlIiksDQogICAgdG9vbHRpcCAgID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMSwgdmFsdWVTdWZmaXggPSAiJSIpDQogICkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSAgICAgICAgID0gdG9faGMocHJvaiwgInJkX2lkb3NhIiksDQogICAgdHlwZSAgICAgICAgID0gImxpbmUiLA0KICAgIG5hbWUgICAgICAgICA9ICJSRCBJZG9zYSAocHJvamV0YWRhKSIsDQogICAgY29sb3IgICAgICAgID0gSUJfQVpVTF9DTEFSTywNCiAgICBsaW5lV2lkdGggICAgPSAyLA0KICAgIGRhc2hTdHlsZSAgICA9ICJTaG9ydERhc2giLA0KICAgIG1hcmtlciAgICAgICA9IGxpc3QoZW5hYmxlZCA9IFRSVUUsIHJhZGl1cyA9IDQsIHN5bWJvbCA9ICJ0cmlhbmdsZSIpLA0KICAgIGxpbmtlZFRvICAgICA9ICI6cHJldmlvdXMiLA0KICAgIHNob3dJbkxlZ2VuZCA9IEZBTFNFLA0KICAgIHRvb2x0aXAgICAgICA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDEsIHZhbHVlU3VmZml4ID0gIiUiKQ0KICApICU+JQ0KDQogICMg4pSA4pSAIEVpeG8gWCAoVGVtcG9yYWwgY29tIGZhaXhhcyBlIGxpbmhhcyBkZSBjb3J0ZSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQogIGhjX3hBeGlzKA0KICAgIHR5cGUgICAgICA9ICJkYXRldGltZSIsDQogICAgbGluZUNvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgdGlja0NvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgbGFiZWxzICAgID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sIGZvbnRTaXplID0gIjExcHgiKSksDQogICAgcGxvdEJhbmRzID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIGZyb20gID0gdHNfMjAyMiwNCiAgICAgICAgdG8gICAgPSB0c18yMDYwLA0KICAgICAgICBjb2xvciA9ICJyZ2JhKDIsIDIsIDYwLCAwLjAzKSIsDQogICAgICAgIGxhYmVsID0gbGlzdCgNCiAgICAgICAgICB0ZXh0ICAgICAgICAgID0gIlByb2plw6fDo28gSUJHRSIsDQogICAgICAgICAgc3R5bGUgICAgICAgICA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sIGZvbnRTaXplID0gIjEwcHgiLCBmb250U3R5bGUgPSAiaXRhbGljIiksDQogICAgICAgICAgYWxpZ24gICAgICAgICA9ICJjZW50ZXIiLA0KICAgICAgICAgIHZlcnRpY2FsQWxpZ24gPSAidG9wIiwNCiAgICAgICAgICB5ICAgICAgICAgICAgID0gMTUNCiAgICAgICAgKQ0KICAgICAgKQ0KICAgICksDQogICAgcGxvdExpbmVzID0gbGlzdCgNCiAgICAgICMgTGluaGEgMTogQ2Vuc28gMjAyMg0KICAgICAgbGlzdCgNCiAgICAgICAgdmFsdWUgICAgID0gdHNfMjAyMiwNCiAgICAgICAgd2lkdGggICAgID0gMS41LA0KICAgICAgICBjb2xvciAgICAgPSBJQl9DSU5aQV9DTEFSTywNCiAgICAgICAgZGFzaFN0eWxlID0gIlNob3J0RGFzaCIsDQogICAgICAgIHpJbmRleCAgICA9IDUsDQogICAgICAgIGxhYmVsICAgICA9IGxpc3QoDQogICAgICAgICAgdGV4dCAgPSAiQ2Vuc28gMjAyMiIsDQogICAgICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMHB4IiksDQogICAgICAgICAgYWxpZ24gPSAicmlnaHQiLA0KICAgICAgICAgIHggICAgID0gLTQsDQogICAgICAgICAgeSAgICAgPSAzMA0KICAgICAgICApDQogICAgICApLA0KICAgICAgIyBMaW5oYSAyOiBSZWZvcm1hIGRhIFByZXZpZMOqbmNpYSAoMjAxOSkNCiAgICAgIGxpc3QoDQogICAgICAgIHZhbHVlICAgICA9IHRzXzIwMTksDQogICAgICAgIHdpZHRoICAgICA9IDEuNSwNCiAgICAgICAgY29sb3IgICAgID0gSUJfQ0lOWkFfRVNDVVJPLA0KICAgICAgICBkYXNoU3R5bGUgPSAiRGFzaCIsDQogICAgICAgIHpJbmRleCAgICA9IDUsDQogICAgICAgIGxhYmVsICAgICA9IGxpc3QoDQogICAgICAgICAgdGV4dCAgPSAiUmVmb3JtYSBkYSBQcmV2aWTDqm5jaWEgKDIwMTkpIiwNCiAgICAgICAgICBzdHlsZSA9IGxpc3QoDQogICAgICAgICAgICBjb2xvciAgICAgID0gSUJfQ0lOWkFfRVNDVVJPLA0KICAgICAgICAgICAgZm9udFNpemUgICA9ICIxMHB4IiwNCiAgICAgICAgICAgIGZvbnRXZWlnaHQgPSAiYm9sZCINCiAgICAgICAgICApLA0KICAgICAgICAgIGFsaWduICAgICAgICAgPSAibGVmdCIsDQogICAgICAgICAgdmVydGljYWxBbGlnbiA9ICJ0b3AiLA0KICAgICAgICAgIHggICAgICAgICAgICAgPSA0LA0KICAgICAgICAgIHkgICAgICAgICAgICAgPSAxNQ0KICAgICAgICApDQogICAgICApLA0KICAgICAgIyBMaW5oYSAzOiBJbnZlcnPDo28gUkQgSWRvc2EgPiBSRCBKb3ZlbSAofjIwNDApDQogICAgICBsaXN0KA0KICAgICAgICB2YWx1ZSAgICAgPSB0c18yMDQwLA0KICAgICAgICB3aWR0aCAgICAgPSAxLjUsDQogICAgICAgIGNvbG9yICAgICA9IElCX0FaVUxfTUVESU8sDQogICAgICAgIGRhc2hTdHlsZSA9ICJEb3QiLA0KICAgICAgICB6SW5kZXggICAgPSA1LA0KICAgICAgICBsYWJlbCAgICAgPSBsaXN0KA0KICAgICAgICAgIHRleHQgID0gIlJEIElkb3NhIHN1cGVyYSBSRCBKb3ZlbSAofjIwNDApIiwNCiAgICAgICAgICBzdHlsZSA9IGxpc3QoDQogICAgICAgICAgICBjb2xvciAgICAgID0gSUJfQVpVTF9NRURJTywNCiAgICAgICAgICAgIGZvbnRTaXplICAgPSAiMTBweCIsDQogICAgICAgICAgICBmb250V2VpZ2h0ID0gImJvbGQiDQogICAgICAgICAgKSwNCiAgICAgICAgICBhbGlnbiAgICAgICAgID0gImxlZnQiLA0KICAgICAgICAgIHZlcnRpY2FsQWxpZ24gPSAiYm90dG9tIiwNCiAgICAgICAgICB4ICAgICAgICAgICAgID0gNCwNCiAgICAgICAgICB5ICAgICAgICAgICAgID0gLTgNCiAgICAgICAgKQ0KICAgICAgKQ0KICAgICkNCiAgKSAlPiUNCg0KICAjIOKUgOKUgCBFaXhvIFkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQogIGhjX3lBeGlzKA0KICAgIHRpdGxlID0gbGlzdCgNCiAgICAgIHRleHQgID0gIlJhesOjbyBkZSBEZXBlbmTDqm5jaWEgKCUpIiwNCiAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiMTFweCIsIGZvbnRXZWlnaHQgPSAibm9ybWFsIikNCiAgICApLA0KICAgIGxhYmVscyA9IGxpc3QoDQogICAgICBmb3JtYXQgPSAie3ZhbHVlfSUiLA0KICAgICAgc3R5bGUgID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiMTFweCIpDQogICAgKSwNCiAgICBtaW4gICAgICAgICAgID0gMCwNCiAgICBtYXggICAgICAgICAgID0gOTAsDQogICAgdGlja0ludGVydmFsICA9IDEwLA0KICAgIGdyaWRMaW5lQ29sb3IgPSAiI0YwRjBGMCIsDQogICAgcGxvdExpbmVzICAgICA9IGxpc3QoDQogICAgICBsaXN0KA0KICAgICAgICB2YWx1ZSAgICAgPSByZCRyZF90b3RhbFtyZCRhbm8gPT0gMjAyMl0sDQogICAgICAgIHdpZHRoICAgICA9IDEsDQogICAgICAgIGNvbG9yICAgICA9ICJyZ2JhKDIsIDIsIDYwLCAwLjI1KSIsDQogICAgICAgIGRhc2hTdHlsZSA9ICJEb3QiLA0KICAgICAgICB6SW5kZXggICAgPSAzDQogICAgICApDQogICAgKQ0KICApICU+JQ0KDQogICMg4pSA4pSAIFRvb2x0aXAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkICAgICAgICAgID0gVFJVRSwNCiAgICBjcm9zc2hhaXJzICAgICAgPSBUUlVFLA0KICAgIGJhY2tncm91bmRDb2xvciA9IElCX0JSQU5DTywNCiAgICBib3JkZXJDb2xvciAgICAgPSBJQl9DSU5aQV9DTEFSTywNCiAgICBib3JkZXJSYWRpdXMgICAgPSA2LA0KICAgIHNoYWRvdyAgICAgICAgICA9IEZBTFNFLA0KICAgIHN0eWxlICAgICAgICAgICA9IGxpc3QoZm9udFNpemUgPSAiMTJweCIsIGNvbG9yID0gSUJfQVpVTF9CQVNFKSwNCiAgICBoZWFkZXJGb3JtYXQgICAgPSAiPHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMnB4Jz48Yj57cG9pbnQua2V5fTwvYj48L3NwYW4+PGJyLz4iLA0KICAgIHBvaW50Rm9ybWF0ICAgICA9IHBhc3RlMCgNCiAgICAgICI8c3BhbiBzdHlsZT0nY29sb3I6e3Nlcmllcy5jb2xvcn0nPuKXjzwvc3Bhbj4gIiwNCiAgICAgICJ7c2VyaWVzLm5hbWV9OiA8Yj57cG9pbnQueTouMWZ9JTwvYj48YnIvPiINCiAgICApDQogICkgJT4lDQoNCiAgIyDilIDilIAgVMOtdHVsb3MgZSBMZWdlbmRhcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCiAgaGNfdGl0bGUoDQogICAgdGV4dCAgPSAiUmF6w6NvIGRlIERlcGVuZMOqbmNpYSDigJQgQnJhc2lsICgxOTgw4oCTMjA2MCkiLA0KICAgIGFsaWduID0gImxlZnQiLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxOHB4IiwgZm9udFdlaWdodCA9ICJib2xkIiwgY29sb3IgPSBJQl9BWlVMX0JBU0UpDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgID0gIkRlcGVuZGVudGVzIHBvciAxMDAgcGVzc29hcyBlbSBpZGFkZSBhdGl2YSAoMTXigJM2NCBhbm9zKSB8IExpbmhhIHRyYWNlamFkYTogcHJvamXDp8OjbyBJQkdFIFJldi4gMjAyNCIsDQogICAgYWxpZ24gPSAibGVmdCIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEycHgiLCBjb2xvciA9IElCX0NJTlpBX0VTQ1VSTykNCiAgKSAlPiUNCiAgaGNfbGVnZW5kKA0KICAgIGVuYWJsZWQgICAgICAgPSBUUlVFLA0KICAgIGFsaWduICAgICAgICAgPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsDQogICAgbGF5b3V0ICAgICAgICA9ICJob3Jpem9udGFsIiwNCiAgICBpdGVtU3R5bGUgICAgID0gbGlzdChmb250U2l6ZSA9ICIxMnB4IiwgZm9udFdlaWdodCA9ICJub3JtYWwiLCBjb2xvciA9IElCX0FaVUxfQkFTRSkNCiAgKSAlPiUNCg0KICAjIERlc2F0aXZhw6fDo28gZGUgY29udHJvbGVzIGRlIG5hdmVnYcOnw6NvIGZpbmFuY2VpcmENCiAgaGNfcmFuZ2VTZWxlY3RvcihlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19uYXZpZ2F0b3IoZW5hYmxlZCAgICAgPSBGQUxTRSkgJT4lDQogIGhjX3Njcm9sbGJhcihlbmFibGVkICAgICA9IEZBTFNFKSAlPiUNCiAgaGNfZXhwb3J0aW5nKGVuYWJsZWQgICAgID0gVFJVRSkgJT4lDQoNCiAgIyBDcsOpZGl0b3MNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ICAgID0gIkZvbnRlOiBJQkdFIOKAlCBDZW5zb3MgRGVtb2dyw6FmaWNvcyAoMTk4MOKAkzIwMjIpIGUgUHJvamXDp8O1ZXMgZGEgUG9wdWxhw6fDo28gUmV2LiAyMDI0LiBFbGFib3Jhw6fDo28gcHLDs3ByaWEgSWJNYWNybyBCSC4iLA0KICAgIHN0eWxlICAgPSBsaXN0KGZvbnRTaXplID0gIjEwcHgiLCBjb2xvciA9IElCX0NJTlpBX0NMQVJPKQ0KICApDQoNCmdyYWZpY29fcmF6YW9fZGVwZW5kZW5jaWENCmBgYA0KDQpFbSB1bSBjZW7DoXJpbyBuYSBxdWFsIGrDoSBleGlzdGUgdW0gZ3JhbmRlIHByb2JsZW1hIGRlIGRlcGVuZMOqbmNpYSBubyBsb25nbyBwcmF6bywgYSBiYWl4YSBwcm9kdXRpdmlkYWRlIGrDoSBzZSBtb3N0cmEgbm9zIGRpYXMgZGUgaG9qZSBjb20gdW0gcG90ZW5jaWFsaXphZG9yIGRvIHByb2JsZW1hIGVtIHF1ZXN0w6NvLiBDb25kdXppbmRvIGVzc2UgcmFjaW9jw61uaW8gw6kgbmVjZXNzw6FyaW8gYW5hbGlzYXIgYSBQVEYgKFByb2R1dGl2aWRhZGUgVG90YWwgZG9zIEZhdG9yZXMpLCB1bSDDrW5kaWNlIGNhbGN1bGFkbyBwcmluY2lwYWxtZW50ZSBwZWxhIEZHViBubyBCcmFzaWwgcXVlIGFuYWxpc2EgbyBjcmVzY2ltZW50byBkYSBwcm9kdcOnw6NvIHF1ZSBuw6NvIMOpIGV4cGxpY2FkbyBwZWxvIGF1bWVudG8gbmEgcXVhbnRpZGFkZSBkZSByZWN1cnNvcyBhcGxpY2Fkb3MsIG91IHNlamEsIGNhcHR1cmEgYSBlZmljacOqbmNpYSByZWFsIGRlIHRvZG9zIG9zIGZhdG9yZXMuDQoNCk8gaGlzdMOzcmljbyByZWNlbnRlIGluZGljYSBxdWUgYXBlc2FyIGRlIHVtIGF1bWVudG8gZW0gMjAyMCwgYW1iYXMgYXMgUFRGcyBhcHJlc2VudGFyYW0gdW1hIHJlZHXDp8OjbyBjb25zaWRlcsOhdmVsIGF0w6kgMjAyMixlIHBvc3Rlcmlvcm1lbnRlIHVtIHBlcXVlbm8gYXVtZW50byBjb20gYSBQVEYgYnJ1dGEgZXN0YW5kbyBhdHVhbG1lbnRlIGVtIDEwMS41IGUgYSBkZSBhanVzdGUgZGUgQ2FwaXRhbCBIdW1hbm8gY29tIDg0LjQsIHJlcHJlc2VudGFuZG8gcXVlIGF0w6kgZXNzZSDDumx0aW1vIGF1bWVudG8gYSBtZWxob3JpYSBlZHVjYWNpb25hbCBmb2kgYSByZXNwb25zw6F2ZWwgcG9yIG1lbGhvcmFyIGEgcHJvZHV0aXZpZGFkZSwgYSBQVEYgQnJ1dGEuIEFvIGRlc2NvbnRhciBlc3NlIGVmZWl0bywgdG9ybmEtc2UgZXZpZGVudGUgcXVlIGEgZWZpY2nDqm5jaWEgcmVhbCBkb3MgcHJvY2Vzc29zIHByb2R1dGl2b3MgZSBhZG/Dp8OjbyBkZSBub3ZhcyB0ZWNub2xvZ2lhcyBlc3TDo28gZW0gZGVjbMOtbmlvLiAqKEdyw6FmaWNvIDcpKg0KDQpTb21hbmRvIGEgcHJvYmxlbcOhdGljYSBkYSBwcm9kdXRpdmlkYWRlIGNvbSBvIGF1bWVudG8gZGEgZGVwZW5kw6puY2lhIG5vIGxvbmdvIHByYXpvLCBlbnhlcmdhLXNlIHVtIGNlbsOhcmlvIHByZW9jdXBhbnRlIGNvbSBvcyBub3ZvcyB0cmFiYWxoYWRvcmVzIGRhIFBFQSAoUG9wdWxhw6fDo28gRWNvbm9taWNhbWVudGUgQXRpdmEpIHNlbmRvIG9zIHJlc3BvbnPDoXZlaXMgcG9yIHN1c3RlbnRhciBlc3NhIGdyYW5kZSBub3ZhIHBhcmNlbGEgZGUgaWRvc29zLCBqw6Egb3BlcmFuZG8gZW0gdW0gcml0bW8gZGUgZWZpY2nDqm5jaWEgZW0gcXVlZGEuDQoNCioqKEdyw6FmaWNvIDcpKioNCg0KYGBge3J9DQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyBHcsOhZmljbzogUHJvZHV0aXZpZGFkZSBUb3RhbCBkb3MgRmF0b3JlcyDigJQgQnJhc2lsICgxOTk14oCTMjAyNCkNCiMgSWRlbnRpZGFkZSBWaXN1YWwgT2ZpY2lhbDogUGFkcsOjbyBJYk1hY3JvIEJIIChNYW51YWwgZGUgTWFyY2EpDQojIEZvbnRlOiBGR1YvSUJSRSDigJQgT2JzZXJ2YXTDs3JpbyBkYSBQcm9kdXRpdmlkYWRlIFJlZ2lzIEJvbmVsbGkNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCiMgUHJldmVuw6fDo28gcGFyYSBjYW1pbmhvcyB0ZW1wb3LDoXJpb3Mgbm8gV2luZG93cyBjb20gYWNlbnR1YcOnw6NvDQpkaXIuY3JlYXRlKCJDOi9SdGVtcCIsIHNob3dXYXJuaW5ncyA9IEZBTFNFKQ0KU3lzLnNldGVudihUTVBESVIgPSAiQzovUnRlbXAiLCBUTVAgPSAiQzovUnRlbXAiLCBURU1QID0gIkM6L1J0ZW1wIikNCg0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpDQoNCiMg4pSA4pSAIDEuIERFRklOScOHw4NPIERBIFBBTEVUQSBJTlNUSVRVQ0lPTkFMIChHVUlBIERFIE1BUkNBKSDilIDilIDilIDilIDilIDilIANCklCX0FNQVJFTE8gICAgICA8LSAiI0ZGQjgxRiIgICMgUFRGIGNvbSBjYXBpdGFsIGh1bWFubyAoRGVzdGFxdWUpDQpJQl9BWlVMX0JBU0UgICAgPC0gIiMwMjAyM0MiICAjIFBURiBzZW0gY2FwaXRhbCBodW1hbm8gLyBUw610dWxvcw0KSUJfQlJBTkNPICAgICAgIDwtICIjRkZGRkZGIiAgIyBGdW5kbyBpbnN0aXR1Y2lvbmFsDQpJQl9BWlVMX01FRElPICAgPC0gIiMwMDJDNUUiICAjIEVsZW1lbnRvcyBkZSBhcG9pbyBpbnN0aXR1Y2lvbmFsDQpJQl9BWlVMX0NMQVJPICAgPC0gIiM2QjhCQTQiICAjIEFwb2lvIGdyw6FmaWNvIGNvbXBsZW1lbnRhcg0KSUJfQ0lOWkFfRVNDVVJPIDwtICIjM0EzQTNBIiAgIyBUZXh0b3MsIGVpeG9zIGUgc3VidMOtdHVsb3MNCklCX0NJTlpBX0NMQVJPICA8LSAiI0E2QTZBNiIgICMgTGluaGFzIGRlIGdyYWRlLCBlaXhvcyBlIGNyw6lkaXRvcw0KDQojIOKUgOKUgCAyLiBMRUlUVVJBIEUgVFJBVEFNRU5UTyBET1MgREFET1MgKEZHVi9JQlJFKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCmFycXVpdm9fcHRmIDwtICJDOi9Vc2Vycy9Kb8OjbyBQZWRyby9Eb3dubG9hZHMvaW5kaWNhZG9yX2FudWFsX2RlX3Byb2R1dGl2aWRhZGVfdG90YWxfZG9zX2ZhdG9yZXNfbl8xLnhsc3giDQoNCnB0Zl9jb21fcmF3IDwtIHJlYWRfZXhjZWwoYXJxdWl2b19wdGYsIHNoZWV0ID0gIlBURiBjb20gY2FwaXRhbCBodW1hbm8iLCBza2lwID0gNykgJT4lDQogIHNldF9uYW1lcyhjKCJhbm8iLCAidmFsb3IiKSkgJT4lDQogIGZpbHRlcighaXMubmEoYW5vKSwgIWlzLm5hKHZhbG9yKSkgJT4lDQogIG11dGF0ZShhbm8gPSBhcy5pbnRlZ2VyKGFubyksIHZhbG9yID0gYXMubnVtZXJpYyh2YWxvcikpDQoNCnB0Zl9zZW1fcmF3IDwtIHJlYWRfZXhjZWwoYXJxdWl2b19wdGYsIHNoZWV0ID0gIlBURiBzZW0gY2FwaXRhbCBodW1hbm8iLCBza2lwID0gNykgJT4lDQogIHNldF9uYW1lcyhjKCJhbm8iLCAidmFsb3IiKSkgJT4lDQogIGZpbHRlcighaXMubmEoYW5vKSwgIWlzLm5hKHZhbG9yKSkgJT4lDQogIG11dGF0ZShhbm8gPSBhcy5pbnRlZ2VyKGFubyksIHZhbG9yID0gYXMubnVtZXJpYyh2YWxvcikpDQoNCiMgUmViYXNlOiAyMDA4ID0gMTAwDQpiYXNlX2NvbSA8LSBwdGZfY29tX3JhdyR2YWxvcltwdGZfY29tX3JhdyRhbm8gPT0gMjAwOF0NCmJhc2Vfc2VtIDwtIHB0Zl9zZW1fcmF3JHZhbG9yW3B0Zl9zZW1fcmF3JGFubyA9PSAyMDA4XQ0KDQpwdGZfYXR1YWxpemFkYSA8LSBwdGZfc2VtX3JhdyAlPiUNCiAgcmVuYW1lKHNlbV9jaCA9IHZhbG9yKSAlPiUNCiAgbGVmdF9qb2luKHB0Zl9jb21fcmF3ICU+JSByZW5hbWUoY29tX2NoID0gdmFsb3IpLCBieSA9ICJhbm8iKSAlPiUNCiAgZmlsdGVyKGFubyA+PSAxOTk1KSAlPiUNCiAgbXV0YXRlKA0KICAgIGNvbV9jaF9pZHggPSByb3VuZChjb21fY2ggLyBiYXNlX2NvbSAqIDEwMCwgMiksDQogICAgc2VtX2NoX2lkeCA9IHJvdW5kKHNlbV9jaCAvIGJhc2Vfc2VtICogMTAwLCAyKSwNCiAgICBkYXRhICAgICAgID0gYXMuRGF0ZShwYXN0ZTAoYW5vLCAiLTAxLTAxIikpLA0KICAgIGRhdGFfbXMgICAgPSBhcy5udW1lcmljKGFzLlBPU0lYY3QoZGF0YSwgdHogPSAiVVRDIikpICogMTAwMA0KICApDQoNCmRhZG9zX3NlbSA8LSBwdGZfYXR1YWxpemFkYSAlPiUgc2VsZWN0KHRpbWVzdGFtcCA9IGRhdGFfbXMsIHZhbG9yID0gc2VtX2NoX2lkeCkNCmRhZG9zX2NvbSA8LSBwdGZfYXR1YWxpemFkYSAlPiUgc2VsZWN0KHRpbWVzdGFtcCA9IGRhdGFfbXMsIHZhbG9yID0gY29tX2NoX2lkeCkNCg0KdHNfMjAwOCA8LSBhcy5udW1lcmljKGFzLlBPU0lYY3QoIjIwMDgtMDEtMDEiLCB0eiA9ICJVVEMiKSkgKiAxMDAwDQp0c18yMDE0IDwtIGFzLm51bWVyaWMoYXMuUE9TSVhjdCgiMjAxNC0wMS0wMSIsIHR6ID0gIlVUQyIpKSAqIDEwMDANCg0KIyDilIDilIAgMy4gQ09OU1RSVcOHw4NPIERPIFBMT1QgKEhJR0hDSEFSVFMgU1RPQ0spIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KZ3JhZmljb19wdGYgPC0gaGlnaGNoYXJ0KHR5cGUgPSAic3RvY2siKSAlPiUNCiAgaGNfY2hhcnQoDQogICAgYmFja2dyb3VuZENvbG9yID0gSUJfQlJBTkNPLA0KICAgIHN0eWxlID0gbGlzdChmb250RmFtaWx5ID0gIkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiKSwNCiAgICBzcGFjaW5nVG9wID0gMjAsDQogICAgc3BhY2luZ1JpZ2h0ID0gMjAsDQogICAgc3BhY2luZ0JvdHRvbSA9IDIwLA0KICAgIHNwYWNpbmdMZWZ0ID0gMjANCiAgKSAlPiUNCg0KICAjIFPDqXJpZSAxOiBTZW0gYWp1c3RlIGRlIGNhcGl0YWwgaHVtYW5vIChBenVsIEliTWFjcm8pDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSAgICAgID0gbGlzdF9wYXJzZTIoZGFkb3Nfc2VtKSwNCiAgICB0eXBlICAgICAgPSAibGluZSIsDQogICAgbmFtZSAgICAgID0gIlBURiBzZW0gYWp1c3RlIGRlIGNhcGl0YWwgaHVtYW5vIiwNCiAgICBjb2xvciAgICAgPSBJQl9BWlVMX0JBU0UsDQogICAgbGluZVdpZHRoID0gMywNCiAgICBtYXJrZXIgICAgPSBsaXN0KGVuYWJsZWQgPSBUUlVFLCByYWRpdXMgPSA0LCBzeW1ib2wgPSAiY2lyY2xlIiksDQogICAgdG9vbHRpcCAgID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMSkNCiAgKSAlPiUNCg0KICAjIFPDqXJpZSAyOiBDb20gYWp1c3RlIGRlIGNhcGl0YWwgaHVtYW5vIChBbWFyZWxvIEliTWFjcm8pDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSAgICAgID0gbGlzdF9wYXJzZTIoZGFkb3NfY29tKSwNCiAgICB0eXBlICAgICAgPSAibGluZSIsDQogICAgbmFtZSAgICAgID0gIlBURiBjb20gYWp1c3RlIGRlIGNhcGl0YWwgaHVtYW5vIiwNCiAgICBjb2xvciAgICAgPSBJQl9BTUFSRUxPLA0KICAgIGxpbmVXaWR0aCA9IDMsDQogICAgbWFya2VyICAgID0gbGlzdChlbmFibGVkID0gVFJVRSwgcmFkaXVzID0gNCwgc3ltYm9sID0gImRpYW1vbmQiKSwNCiAgICB0b29sdGlwICAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxKQ0KICApICU+JQ0KDQogICMg4pSA4pSAIEVpeG8gWCAoVGVtcG9yYWwgY29tIGZhaXhhcyBkZSBkZXN0YXF1ZSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQogIGhjX3hBeGlzKA0KICAgIHR5cGUgICAgICA9ICJkYXRldGltZSIsDQogICAgbGluZUNvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgdGlja0NvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgbGFiZWxzICAgID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sIGZvbnRTaXplID0gIjExcHgiKSksDQogICAgcGxvdEJhbmRzID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIGZyb20gID0gdHNfMjAwOCwNCiAgICAgICAgdG8gICAgPSB0c18yMDE0LA0KICAgICAgICBjb2xvciA9ICJyZ2JhKDIsIDIsIDYwLCAwLjAzKSIsDQogICAgICAgIGxhYmVsID0gbGlzdCgNCiAgICAgICAgICB0ZXh0ICAgICAgICAgID0gIkNpY2xvIGRlIEV4cGFuc8OjbyAoMjAwOOKAkzIwMTQpIiwNCiAgICAgICAgICBzdHlsZSAgICAgICAgID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiMTBweCIsIGZvbnRTdHlsZSA9ICJpdGFsaWMiKSwNCiAgICAgICAgICBhbGlnbiAgICAgICAgID0gImNlbnRlciIsDQogICAgICAgICAgdmVydGljYWxBbGlnbiA9ICJ0b3AiLA0KICAgICAgICAgIHkgICAgICAgICAgICAgPSAxNQ0KICAgICAgICApDQogICAgICApDQogICAgKQ0KICApICU+JQ0KDQogICMg4pSA4pSAIEVpeG8gWSBjb20gbGluaGEtYmFzZSAyMDA4ID0gMTAwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KICBoY195QXhpcygNCiAgICB0aXRsZSA9IGxpc3QoDQogICAgICB0ZXh0ICA9ICLDjW5kaWNlICgyMDA4ID0gMTAwKSIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sIGZvbnRTaXplID0gIjExcHgiLCBmb250V2VpZ2h0ID0gIm5vcm1hbCIpDQogICAgKSwNCiAgICBsYWJlbHMgPSBsaXN0KA0KICAgICAgZm9ybWF0ID0gInt2YWx1ZTouMGZ9IiwNCiAgICAgIHN0eWxlICA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sIGZvbnRTaXplID0gIjExcHgiKQ0KICAgICksDQogICAgZ3JpZExpbmVDb2xvciA9ICIjRjBGMEYwIiwNCiAgICBwbG90TGluZXMgICAgID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHZhbHVlICAgICA9IDEwMCwNCiAgICAgICAgd2lkdGggICAgID0gMS41LA0KICAgICAgICBjb2xvciAgICAgPSBJQl9DSU5aQV9DTEFSTywNCiAgICAgICAgZGFzaFN0eWxlID0gIlNob3J0RGFzaCIsDQogICAgICAgIHpJbmRleCAgICA9IDUsDQogICAgICAgIGxhYmVsICAgICA9IGxpc3QoDQogICAgICAgICAgdGV4dCAgPSAiQW5vLUJhc2UgMjAwOCA9IDEwMCIsDQogICAgICAgICAgYWxpZ24gPSAicmlnaHQiLA0KICAgICAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiMTBweCIpLA0KICAgICAgICAgIHggICAgID0gLTEwLA0KICAgICAgICAgIHkgICAgID0gLTUNCiAgICAgICAgKQ0KICAgICAgKQ0KICAgICkNCiAgKSAlPiUNCg0KICAjIOKUgOKUgCBUb29sdGlwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KICBoY190b29sdGlwKA0KICAgIHNoYXJlZCAgICAgICAgICA9IFRSVUUsDQogICAgY3Jvc3NoYWlycyAgICAgID0gVFJVRSwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSBJQl9CUkFOQ08sDQogICAgYm9yZGVyQ29sb3IgICAgID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgYm9yZGVyUmFkaXVzICAgID0gNiwNCiAgICBzaGFkb3cgICAgICAgICAgPSBGQUxTRSwNCiAgICBzdHlsZSAgICAgICAgICAgPSBsaXN0KGZvbnRTaXplID0gIjEycHgiLCBjb2xvciA9IElCX0FaVUxfQkFTRSksDQogICAgaGVhZGVyRm9ybWF0ICAgID0gIjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTJweCc+PGI+QW5vIHtwb2ludC5rZXl9PC9iPjwvc3Bhbj48YnIvPiIsDQogICAgcG9pbnRGb3JtYXQgICAgID0gIjxzcGFuIHN0eWxlPSdjb2xvcjp7c2VyaWVzLmNvbG9yfSc+4pePPC9zcGFuPiB7c2VyaWVzLm5hbWV9OiA8Yj57cG9pbnQueTouMWZ9PC9iPjxici8+Ig0KICApICU+JQ0KDQogICMg4pSA4pSAIFTDrXR1bG9zIGUgTGVnZW5kYXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQogIGhjX3RpdGxlKA0KICAgIHRleHQgID0gIlByb2R1dGl2aWRhZGUgVG90YWwgZG9zIEZhdG9yZXMgKFBURikg4oCUIEJyYXNpbCAoMTk5NeKAkzIwMjQpIiwNCiAgICBhbGlnbiA9ICJsZWZ0IiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMThweCIsIGZvbnRXZWlnaHQgPSAiYm9sZCIsIGNvbG9yID0gSUJfQVpVTF9CQVNFKQ0KICApICU+JQ0KICBoY19zdWJ0aXRsZSgNCiAgICB0ZXh0ICA9ICLDjW5kaWNlIGVuY2FkZWFkbyBjb20gZSBzZW0gYWp1c3RlIHBvciBlc2NvbGFyaWRhZGUgZSBjYXBpdGFsIGh1bWFubyAoUmViYXNlOiAyMDA4ID0gMTAwKSIsDQogICAgYWxpZ24gPSAibGVmdCIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEycHgiLCBjb2xvciA9IElCX0NJTlpBX0VTQ1VSTykNCiAgKSAlPiUNCiAgaGNfbGVnZW5kKA0KICAgIGVuYWJsZWQgICAgICAgPSBUUlVFLA0KICAgIGFsaWduICAgICAgICAgPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsDQogICAgbGF5b3V0ICAgICAgICA9ICJob3Jpem9udGFsIiwNCiAgICBpdGVtU3R5bGUgICAgID0gbGlzdChmb250U2l6ZSA9ICIxMnB4IiwgZm9udFdlaWdodCA9ICJub3JtYWwiLCBjb2xvciA9IElCX0FaVUxfQkFTRSkNCiAgKSAlPiUNCg0KICAjIERlc2F0aXZhw6fDo28gZGUgY29udHJvbGVzIGV4dHJhcyBkZSBuYXZlZ2HDp8OjbyBmaW5hbmNlaXJhDQogIGhjX3JhbmdlU2VsZWN0b3IoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfbmF2aWdhdG9yKGVuYWJsZWQgICAgID0gRkFMU0UpICU+JQ0KICBoY19zY3JvbGxiYXIoZW5hYmxlZCAgICAgPSBGQUxTRSkgJT4lDQogIGhjX2V4cG9ydGluZyhlbmFibGVkICAgICA9IFRSVUUpICU+JQ0KDQogICMgQ3LDqWRpdG9zDQogIGhjX2NyZWRpdHMoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgdGV4dCAgICA9ICJGb250ZTogRkdWL0lCUkUg4oCUIE9ic2VydmF0w7NyaW8gZGEgUHJvZHV0aXZpZGFkZSBSZWdpcyBCb25lbGxpLiBFbGFib3Jhw6fDo28gcHLDs3ByaWEgSWJNYWNybyBCSC4iLA0KICAgIHN0eWxlICAgPSBsaXN0KGZvbnRTaXplID0gIjEwcHgiLCBjb2xvciA9IElCX0NJTlpBX0NMQVJPKQ0KICApDQoNCmdyYWZpY29fcHRmDQpgYGANCg0KIyAqNDogRMOpZmljaXQgUHJldmlkZW5jacOhcmlvIGUgbyBpbXBhY3RvIG5vIFBJQioNCg0KQ29tbyBjb25zZXF1w6puY2lhIGRlIHRvZGEgZXNzYSBzZXF1w6puY2lhLCBvIHByb2JsZW1hIHNlIGNvbmNyZXRpemEgbmEgYW7DoWxpc2UgZGEgcGFydGUgZmlzY2FsIGRvIHBhw61zLCBwb2lzIG9zIGdhc3RvcyBjb20gYSBwcmV2aWTDqm5jaWEgY29udGludWFyYW0gc3ViaW5kbyBhY2ltYSBkYSBpbmZsYcOnw6NvIG1lc21vIGFww7NzIGEgUmVmb3JtYSBkYSBQcmV2aWTDqm5jaWEgZGUgMjAxOS4gRGUgYWNvcmRvIGNvbSBvIElGSSAoSW5zdGl0dWnDp8OjbyBGaXNjYWwgSW5kZXBlbmRlbnRlIGRvIFNlbmFkbyksIGRlc2RlIGEgcmVmb3JtYSBhdMOpIGhvamUsIGFwZW5hcyBlbSAyMDIxIHF1ZSBvY29ycmV1IHVtYSBxdWVkYSAxLDMlIG5hIHZhcmlhw6fDo28gcmVhbCBkb3MgZ2FzdG9zIGNvbSBQcmV2aWTDqm5jaWEsIGNvbSBvcyB0b2RvcyBvcyBkZW1haXMgYW5vcyBhcHJlc2VudGFuZG8gdW0gYXVtZW50byBjb20gZGVzdGFxdWUgcGFyYSAyMDIzIGVtIHF1ZSBvIGF1bWVudG8gcmVhbCBjaGVnb3UgYSBxdWFzZSA4JSwgY29tIGEgcXVhbnRpZGFkZSBkZSBiZW5lZsOtY2lvcyBzdWJpbmRvIGVtIDIsNiUgZSBvIGF1bWVudG8gcmVhbCBkYSBkZXNwZXNhIGNvbSBwYWdhbWVudG8gZGUgYmVuZWbDrWNpb3MgZW0gNCw3OSUuIA0KDQpBIHBlc3F1aXNhIGRvIElGSSB0YW1iw6ltIGNhbGN1bG91IGUgcHJvamV0b3Ugb3MgZ2FzdG9zIGNvbSBhIFByZXZpZMOqbmNpYSBwYXJhIG9zIHByw7N4aW1vcyAxMCBhbm9zLCBlc3RpbWFuZG8gdW0gY3Jlc2NpbWVudG8gcmVhbCBhbm8gYXDDs3MgYW5vLiBObyBhbm8gcGFzc2FkbyAoMjAyNSksIG8gdG90YWwgZG9zIGdhc3RvcyBwcmV2aWRlbmNpw6FyaW9zIGrDoSBoYXZpYSBwYXNzYWRvIHRyaWxow6NvIGFsY2Fuw6dhbmRvIHVtIHBhdGFtYXIgZGUgUiQgMSwwMzcgdHJpbGjDo28gZGUgcmVhaXMsIGUgZW0gMjAzNSBvIMO6bHRpbW8gYW5vIHByb2pldGFkbyDDqSBlc3BlcmFkbyBxdWUgbyB0b3RhbCBnYXN0byBjb20gYSBQcmV2aWTDqm5jaWEgU29jaWFsIHNlcsOhIGVtIHRvcm5vIFIkIDEsNTg3IHRyaWxow6NvLCBwYXNzYW5kbyBhIG1hcmNhIGRlIHVtIHRyaWxow6NvIGUgbWVpby4gKihHcsOhZmljbyA4KSoNCg0KRGUgYWNvcmRvIGNvbSBvIMO6bHRpbW8gQkVQUyAoQm9sZXRpbSBkYSBQcmV2aWTDqm5jaWEgU29jaWFsKSwgbyByZXN1bHRhZG8gcHJpbcOhcmlvIGFjdW11bGFkbyBlbSAxMiBtZXNlcyBkbyBSR1BTIChSZWdpbWUgR2VyYWwgZGEgUHJldmlkw6puY2lhIFNvY2lhbCkgw6kgZGUgLVIkIDM0OSw3IGJpbGjDtWVzIChCRVBTL2p1biAyMDI2KSwgZSBvcyBkYWRvcyBhIHJlc3BlaXRvIGRvIMO6bHRpbW8gbcOqcyBjYWxjdWxhZG8gKE5vdmVtYnJvIGRlIDIwMjUpLCBmb2kgcmVnaXN0cmFkbyB1bSBkw6lmaWNpdCBtZW5zYWwgUiQgMjEsMyBiaWxow7VlcywgbW9zdHJhbmRvIHNpbmFpcyBjbGFyb3MgZGUgdW0gZMOpZmljaXQgZXN0cnV0dXJhbCBxdWUgdGVuZGUgYSBzZSB0b3JuYXIgY2FkYSB2ZXogcGlvci4gDQoNCioqKEdyw6FmaWNvIDgpKioNCg0KYGBge3J9DQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyBHcsOhZmljbzogRGVzcGVzYXMgY29tIG8gUkdQUyDigJQgUHJvamXDp8OjbyBJRkkgKDIwMjTigJMyMDM1KQ0KIyBJZGVudGlkYWRlIFZpc3VhbCBPZmljaWFsOiBQYWRyw6NvIEliTWFjcm8gQkggKE1hbnVhbCBkZSBNYXJjYSkNCiMgRm9udGU6IEluc3RpdHVpw6fDo28gRmlzY2FsIEluZGVwZW5kZW50ZSAoSUZJKSDigJQgUkFGIEp1bmhvLzIwMjUNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCiMgUHJldmVuw6fDo28gcGFyYSBjYW1pbmhvcyB0ZW1wb3LDoXJpb3Mgbm8gV2luZG93cyBjb20gYWNlbnR1YcOnw6NvDQpkaXIuY3JlYXRlKCJDOi9SdGVtcCIsIHNob3dXYXJuaW5ncyA9IEZBTFNFKQ0KU3lzLnNldGVudihUTVBESVIgPSAiQzovUnRlbXAiLCBUTVAgPSAiQzovUnRlbXAiLCBURU1QID0gIkM6L1J0ZW1wIikNCg0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KDQojIOKUgOKUgCAxLiBERUZJTknDh8ODTyBEQSBQQUxFVEEgSU5TVElUVUNJT05BTCAoR1VJQSBERSBNQVJDQSkg4pSA4pSA4pSA4pSA4pSA4pSADQpJQl9BTUFSRUxPICAgICAgPC0gIiNGRkI4MUYiICAjIEFtYXJlbG8gSWJNYWNybyAoRGVzdGFxdWVzIGUgZWxlbWVudG9zIGRlIMOqbmZhc2UpDQpJQl9BWlVMX0JBU0UgICAgPC0gIiMwMjAyM0MiICAjIEF6dWwgSWJNYWNybyAoVMOtdHVsb3MgZSBiYXNlIGluc3RpdHVjaW9uYWwpDQpJQl9CUkFOQ08gICAgICAgPC0gIiNGRkZGRkYiICAjIEZ1bmRvIGluc3RpdHVjaW9uYWwNCklCX0FaVUxfTUVESU8gICA8LSAiIzAwMkM1RSIgICMgU8OpcmllIGRlIGRhZG9zIGVtIGNvbHVuYQ0KSUJfQVpVTF9DTEFSTyAgIDwtICIjNkI4QkE0IiAgIyBBcG9pbyBncsOhZmljbyBjb21wbGVtZW50YXINCklCX0NJTlpBX0VTQ1VSTyA8LSAiIzNBM0EzQSIgICMgVGV4dG9zLCBlaXhvcyBlIHN1YnTDrXR1bG9zDQpJQl9DSU5aQV9DTEFSTyAgPC0gIiNBNkE2QTYiICAjIExpbmhhcyBkZSBncmFkZSwgZWl4b3MgZSBjcsOpZGl0b3MNCg0KIyDilIDilIAgMi4gQkFTRSBERSBEQURPUyAoUFJPSkXDh8ODTyBJRkkgLSBHQVNUT1MgUkVBSVMgUkdQUykg4pSA4pSA4pSA4pSA4pSA4pSADQpkZl9yZ3BzX2lmaSA8LSB0aWJibGUoDQogIGFubyA9IGFzLmNoYXJhY3RlcigyMDI0OjIwMzUpLA0KICBkZXNwZXNhID0gYygNCiAgICA5ODguMSwgMTAzNy4xLCAxMDkxLjksIDExOTAuNiwgMTIzNi45LCAxMjg5LjMsDQogICAgMTMzNi4zLCAxMzg0LjEsIDE0MzMuNCwgMTQ4My43LCAxNTM1LjEsIDE1ODcuNQ0KICApDQopDQoNCiMg4pSA4pSAIDMuIFJFTkRFUklaQcOHw4NPIERPIEdSw4FGSUNPIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KZ3JhZmljb19kZXNwZXNhc19yZ3BzIDwtIGhpZ2hjaGFydCgpICU+JQ0KICBoY19jaGFydCgNCiAgICB0eXBlID0gImNvbHVtbiIsDQogICAgYmFja2dyb3VuZENvbG9yID0gSUJfQlJBTkNPLA0KICAgIHN0eWxlID0gbGlzdChmb250RmFtaWx5ID0gIkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiKQ0KICApICU+JQ0KICBoY19wbG90T3B0aW9ucygNCiAgICBjb2x1bW4gPSBsaXN0KA0KICAgICAgYm9yZGVyV2lkdGggPSAwLA0KICAgICAgcG9pbnRQYWRkaW5nID0gMC4wNSwNCiAgICAgIGdyb3VwUGFkZGluZyA9IDAuMTIsDQogICAgICBkYXRhTGFiZWxzID0gbGlzdCgNCiAgICAgICAgZW5hYmxlZCA9IFRSVUUsDQogICAgICAgIGZvcm1hdCA9ICJ7cG9pbnQueTosLjFmfSIsDQogICAgICAgIHN0eWxlID0gbGlzdCgNCiAgICAgICAgICBjb2xvciA9IElCX0FaVUxfQkFTRSwNCiAgICAgICAgICBmb250U2l6ZSA9ICIxMXB4IiwNCiAgICAgICAgICBmb250V2VpZ2h0ID0gImJvbGQiLA0KICAgICAgICAgIHRleHRPdXRsaW5lID0gIm5vbmUiDQogICAgICAgICksDQogICAgICAgIHkgPSAtNQ0KICAgICAgKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBuYW1lID0gIkRlc3Blc2FzIFJHUFMiLA0KICAgIGRhdGEgPSBkZl9yZ3BzX2lmaSRkZXNwZXNhLA0KICAgIGNvbG9yID0gSUJfQVpVTF9NRURJTw0KICApICU+JQ0KICBoY194QXhpcygNCiAgICBjYXRlZ29yaWVzID0gZGZfcmdwc19pZmkkYW5vLA0KICAgIGdyaWRMaW5lV2lkdGggPSAwLA0KICAgIGxpbmVDb2xvciA9IElCX0NJTlpBX0NMQVJPLA0KICAgIHRpY2tDb2xvciA9IElCX0NJTlpBX0NMQVJPLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMXB4IikpDQogICkgJT4lDQogIGhjX3lBeGlzKA0KICAgIHRpdGxlID0gbGlzdCgNCiAgICAgIHRleHQgPSAiUiQgYmlsaMO1ZXMgZGUgMjAyNSIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sIGZvbnRTaXplID0gIjExcHgiKQ0KICAgICksDQogICAgbWluID0gMCwNCiAgICBtYXggPSAxODAwLA0KICAgIHRpY2tJbnRlcnZhbCA9IDIwMCwNCiAgICBncmlkTGluZUNvbG9yID0gIiNGMEYwRjAiLA0KICAgIGxpbmVDb2xvciA9IElCX0NJTlpBX0NMQVJPLA0KICAgIGxhYmVscyA9IGxpc3QoDQogICAgICBmb3JtYXQgPSAie3ZhbHVlOiwuMGZ9IiwNCiAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiMTFweCIpDQogICAgKQ0KICApICU+JQ0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIkRlc3Blc2FzIGNvbSBvIFJHUFMg4oCUIFJBRiBkZSBqdW5obyBkZSAyMDI1IChSJCBiaWxow7VlcyBkZSAyMDI1KSIsDQogICAgYWxpZ24gPSAibGVmdCIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQVpVTF9CQVNFLCBmb250V2VpZ2h0ID0gImJvbGQiLCBmb250U2l6ZSA9ICIxOHB4IikNCiAgKSAlPiUNCiAgaGNfc3VidGl0bGUoDQogICAgdGV4dCA9ICJDcmVzY2ltZW50byBwcm9qZXRhZG8gZGUgZ2FzdG9zIHJlYWlzIGNvbSBhIFByZXZpZMOqbmNpYSBTb2NpYWwgYXTDqSAyMDM1ICh2YWxvcmVzIGEgcHJlw6dvcyBkZSAyMDI1KSIsDQogICAgYWxpZ24gPSAibGVmdCIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBzaGFyZWQgPSBUUlVFLA0KICAgIGhlYWRlckZvcm1hdCA9ICI8c3BhbiBzdHlsZT0nZm9udC1zaXplOjEycHgnPjxiPkFubyB7cG9pbnQua2V5fTwvYj48L3NwYW4+PGJyLz4iLA0KICAgIHBvaW50Rm9ybWF0ID0gIjxzcGFuIHN0eWxlPSdjb2xvcjp7c2VyaWVzLmNvbG9yfSc+4pePPC9zcGFuPiBEZXNwZXNhIFJlYWw6IDxiPlIkIHtwb2ludC55OiwuMWZ9IGJpPC9iPjxici8+Ig0KICApICU+JQ0KICBoY19sZWdlbmQoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBJbnN0aXR1acOnw6NvIEZpc2NhbCBJbmRlcGVuZGVudGUgKElGSSkg4oCUIFJlbGF0w7NyaW8gZGUgQWNvbXBhbmhhbWVudG8gRmlzY2FsIChSQUYpLiBFbGFib3Jhw6fDo28gcHLDs3ByaWEgSWJNYWNybyBCSC4iLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0NMQVJPLCBmb250U2l6ZSA9ICIxMHB4IikNCiAgKSAlPiUNCiAgaGNfZXhwb3J0aW5nKGVuYWJsZWQgPSBUUlVFKQ0KDQpncmFmaWNvX2Rlc3Blc2FzX3JncHMNCmBgYA0KDQpPIGltcGFjdG8gZGVzc2EgY2FkZWlhIGRlIGV2ZW50b3MgasOhIGVzdMOhIGltcGFjdGFuZG8gbyBmaXNjbyBkbyBwYcOtcywgZW0gdW1hIHNpdHVhw6fDo28gbmEgcXVhbCBqw6Egw6kgYSBkYXMgbWVsaG9yZXMuIENvbSBpc3NvLCB0b2RhIGVzc2EgcXVlc3TDo28gYWluZGEgZ2VyYSB1bSBpbXBhY3RvIG5vIFBJQiwgYW8gYW5hbGlzYXIgYSBwb3JjZW50YWdlbSBkZSBwYXJ0aWNpcGHDp8OjbyBkYSBhcnJlY2FkYcOnw6NvIHZzIGJlbmVmw61jaW9zIGRlIGFtYmFzIGRlbnRybyBkbyBtZXNtby4gRW0gMjAyNCwgYSBhcnJlY2FkYcOnw6NvIGZvaSByZXNwb3PDoXZlbCA1LDQ2JSBlbnF1YW50byBvcyBiZW5lZsOtY2lvcyBhbGNhbsOnYXJhbSA3LDk5JSBkZSBwYXJ0aWNpcGHDp8OjbywgcmVwcmVzZW50YW5kbyB1bSBnYXAgZXN0cnV0dXJhbCBkZSAyLDUzIHBvbnRvcyBwZXJjZW50dWFpcyBldmlkZW5jaWFuZG8gY2xhcmFtZW50ZSB1bSBkZXNlcXVpbMOtYnJpbyBxdWUgZ2VyYSB1bSBkw6lmaWNpdCBwcmV2aWRlbmNpw6FyaW8uICooR3LDoWZpY28gOSkqDQoNCk91dHJvIGRhZG8gcmVsZXZhbnRlIHF1ZSBvIEJvbGV0aW0gZGUgMjAyNCB0cmF6LCDDqSBhY2VyY2EgZGEgUEVBIG5vdmFtZW50ZSwgbmEgcXVhbCA5OSw1IG1pbGjDtWVzIGRlIHBlc3NvYXMgZmF6aWFtIHBhcnRlIGRlbGEgZW5xdWFudG8gYXBlbmFzIDYyLDIgbWlsaMO1ZXMgc8OjbyBjb250cmlidWludGVzIGRlIHBlc3NvYXMgZsOtc2ljYXMgbyBxdWUgc2lnbmlmaWNhIHF1ZSBtYWlzIG91IG1lbm9zIDM3JSBkZSBvY3VwYWRvcyBuYSBQRUEgbsOjbyBjb250cmlidWVtIHBhcmEgbyBSR1BTLCBwb3IgbW90aXZvcyBjb21vIGluZm9ybWFsaWRhZGUsIHRyYWJhbGhhZG9yZXMgZG9tw6lzdGljb3MgZSBkZW50cmUgb3V0cm9zLg0KDQoqKihHcsOhZmljbyA5KSoqDQoNCmBgYHtyfQ0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgR3LDoWZpY286IEltcGFjdG8gRmlzY2FsIGRvIFJHUFMgKCUgZG8gUElCKSDigJQgRGVzcGVzYSB2cy4gQXJyZWNhZGHDp8Ojbw0KIyBJZGVudGlkYWRlIFZpc3VhbCBPZmljaWFsOiBQYWRyw6NvIEliTWFjcm8gQkggKE1hbnVhbCBkZSBNYXJjYSkNCiMgRm9udGVzOiBTVE4gLyBCYWNlbiAoU0dTKSAvIE1pbmlzdMOpcmlvIGRhIFByZXZpZMOqbmNpYSBTb2NpYWwNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCiMgUHJldmVuw6fDo28gcGFyYSBjYW1pbmhvcyB0ZW1wb3LDoXJpb3Mgbm8gV2luZG93cyBjb20gYWNlbnR1YcOnw6NvDQpkaXIuY3JlYXRlKCJDOi9SdGVtcCIsIHNob3dXYXJuaW5ncyA9IEZBTFNFKQ0KU3lzLnNldGVudihUTVBESVIgPSAiQzovUnRlbXAiLCBUTVAgPSAiQzovUnRlbXAiLCBURU1QID0gIkM6L1J0ZW1wIikNCg0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KDQojIOKUgOKUgCAxLiBERUZJTknDh8ODTyBEQSBQQUxFVEEgSU5TVElUVUNJT05BTCAoR1VJQSBERSBNQVJDQSkg4pSA4pSA4pSA4pSA4pSA4pSADQpJQl9BTUFSRUxPICAgICAgPC0gIiNGRkI4MUYiICAjIEFycmVjYWRhw6fDo28gTMOtcXVpZGEgLyBEZXN0YXF1ZXMNCklCX0FaVUxfQkFTRSAgICA8LSAiIzAyMDIzQyIgICMgRGVzcGVzYXMgUkdQUyAvIFTDrXR1bG9zIC8gQmFzZQ0KSUJfQlJBTkNPICAgICAgIDwtICIjRkZGRkZGIiAgIyBGdW5kbyBpbnN0aXR1Y2lvbmFsDQpJQl9BWlVMX01FRElPICAgPC0gIiMwMDJDNUUiICAjIEVsZW1lbnRvcyBkZSBhcG9pbw0KSUJfQVpVTF9DTEFSTyAgIDwtICIjNkI4QkE0IiAgIyBHYXAgRmlzY2FsICjDgXJlYSBTb21icmVhZGEpDQpJQl9DSU5aQV9FU0NVUk8gPC0gIiMzQTNBM0EiICAjIFRleHRvcywgZWl4b3MgZSBzdWJ0w610dWxvcw0KSUJfQ0lOWkFfQ0xBUk8gIDwtICIjQTZBNkE2IiAgIyBMaW5oYXMgZGUgZ3JhZGUsIGVpeG9zIGUgY3LDqWRpdG9zDQoNCiMg4pSA4pSAIDIuIERBRE9TIEhJU1TDk1JJQ09TIENPTlNPTElEQURPUyAoJSBETyBQSUIpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KZGZfZmlzY2FsX3ByZXYgPC0gdGliYmxlKA0KICBhbm8gPSBhcy5jaGFyYWN0ZXIoMjAxMjoyMDI0KSwNCiAgYXJyZWNhZGFjYW8gPSBjKDUuMzIsIDUuNDEsIDUuNDgsIDUuMzksIDUuMzUsIDUuMzEsIDUuMzAsIDUuMzgsIDUuMzAsIDUuMzQsIDUuMzksIDUuNDIsIDUuNDYpLA0KICBkZXNwZXNhcyAgICA9IGMoNi44NSwgNi45NCwgNy4wNSwgNy4zMiwgNy44MiwgOC4wOCwgOC4yMSwgOC4zNSwgOC43OCwgOC4wMSwgNy44NSwgNy45MSwgNy45OSkNCikgJT4lDQogIG11dGF0ZSgNCiAgICBnYXAgPSBkZXNwZXNhcyAtIGFycmVjYWRhY2FvDQogICkNCg0KIyDilIDilIAgMy4gUkVOREVSSVpBw4fDg08gRE8gR1LDgUZJQ08g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQpncmFmaWNvX2Zpc2NhbF9wcmV2IDwtIGhpZ2hjaGFydCgpICU+JQ0KICBoY19jaGFydCgNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIGJhY2tncm91bmRDb2xvciA9IElCX0JSQU5DTywNCiAgICBzdHlsZSA9IGxpc3QoZm9udEZhbWlseSA9ICJBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIikNCiAgKSAlPiUNCg0KICAjIMOBcmVhIGRlIHByZWVuY2hpbWVudG8gZG8gR2FwIEZpc2NhbCAoQXBvcnRlIGRvIFRlc291cm8pDQogIGhjX2FkZF9zZXJpZXMoDQogICAgbmFtZSA9ICJHYXAgRmlzY2FsIChBcG9ydGUgZG8gVGVzb3VybykiLA0KICAgIHR5cGUgPSAiYXJlYXJhbmdlIiwNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoDQogICAgICBkZl9maXNjYWxfcHJldiAlPiUgDQogICAgICAgIHRyYW5zbXV0ZShhbm8sIGFycmVjYWRhY2FvLCBkZXNwZXNhcykNCiAgICApLA0KICAgIGNvbG9yID0gSUJfQVpVTF9DTEFSTywNCiAgICBmaWxsT3BhY2l0eSA9IDAuMjUsDQogICAgbGluZVdpZHRoID0gMCwNCiAgICB6SW5kZXggPSAwLA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IEZBTFNFKQ0KICApICU+JQ0KDQogICMgRGVzcGVzYXMgY29tIEJlbmVmw61jaW9zIGRvIFJHUFMgKEF6dWwgSWJNYWNybykNCiAgaGNfYWRkX3NlcmllcygNCiAgICBuYW1lID0gIkJlbmVmw61jaW9zIEVtaXRpZG9zIFJHUFMgKCUgUElCKSIsDQogICAgZGF0YSA9IGRmX2Zpc2NhbF9wcmV2JGRlc3Blc2FzLA0KICAgIGNvbG9yID0gSUJfQVpVTF9CQVNFLA0KICAgIGxpbmVXaWR0aCA9IDMsDQogICAgekluZGV4ID0gMiwNCiAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBUUlVFLCByYWRpdXMgPSA0LCBzeW1ib2wgPSAiY2lyY2xlIikNCiAgKSAlPiUNCg0KICAjIEFycmVjYWRhw6fDo28gTMOtcXVpZGEgZG8gUkdQUyAoQW1hcmVsbyBJYk1hY3JvKQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIG5hbWUgPSAiQXJyZWNhZGHDp8OjbyBMw61xdWlkYSBSR1BTICglIFBJQikiLA0KICAgIGRhdGEgPSBkZl9maXNjYWxfcHJldiRhcnJlY2FkYWNhbywNCiAgICBjb2xvciA9IElCX0FNQVJFTE8sDQogICAgbGluZVdpZHRoID0gMywNCiAgICB6SW5kZXggPSAyLA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IFRSVUUsIHJhZGl1cyA9IDQsIHN5bWJvbCA9ICJkaWFtb25kIikNCiAgKSAlPiUNCg0KICBoY194QXhpcygNCiAgICBjYXRlZ29yaWVzID0gZGZfZmlzY2FsX3ByZXYkYW5vLA0KICAgIGdyaWRMaW5lV2lkdGggPSAxLA0KICAgIGdyaWRMaW5lQ29sb3IgPSAiI0YwRjBGMCIsDQogICAgbGluZUNvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgdGlja0NvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sIGZvbnRTaXplID0gIjExcHgiKSksDQogICAgcGxvdExpbmVzID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHZhbHVlID0gNywgIyBBbm8gMjAxOQ0KICAgICAgICBjb2xvciA9IElCX0NJTlpBX0NMQVJPLA0KICAgICAgICB3aWR0aCA9IDEuNSwNCiAgICAgICAgZGFzaFN0eWxlID0gIlNob3J0RGFzaCIsDQogICAgICAgIHpJbmRleCA9IDMsDQogICAgICAgIGxhYmVsID0gbGlzdCgNCiAgICAgICAgICB0ZXh0ID0gIlJlZm9ybWEgMjAxOSIsDQogICAgICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMHB4IiksDQogICAgICAgICAgdmVydGljYWxBbGlnbiA9ICJib3R0b20iLA0KICAgICAgICAgIHkgPSAtMTANCiAgICAgICAgKQ0KICAgICAgKQ0KICAgICkNCiAgKSAlPiUNCg0KICBoY195QXhpcygNCiAgICB0aXRsZSA9IGxpc3QoDQogICAgICB0ZXh0ID0gIiUgZG8gUElCIiwNCiAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiMTFweCIpDQogICAgKSwNCiAgICBtaW4gPSA0LA0KICAgIG1heCA9IDEwLA0KICAgIHRpY2tJbnRlcnZhbCA9IDEsDQogICAgZ3JpZExpbmVDb2xvciA9ICIjRjBGMEYwIiwNCiAgICBsaW5lQ29sb3IgPSBJQl9DSU5aQV9DTEFSTywNCiAgICBsYWJlbHMgPSBsaXN0KA0KICAgICAgZm9ybWF0ID0gInt2YWx1ZTouMGZ9JSIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sIGZvbnRTaXplID0gIjExcHgiKQ0KICAgICkNCiAgKSAlPiUNCg0KICAjIEFub3Rhw6fDo28gZGUgZGVzdGFxdWU6IEdhcCBGaXNjYWwgZGUgMjAyNA0KICBoY19hbm5vdGF0aW9ucygNCiAgICBsaXN0KA0KICAgICAgbGFiZWxzID0gbGlzdCgNCiAgICAgICAgbGlzdCgNCiAgICAgICAgICBwb2ludCA9IGxpc3QoeCA9IDEyLCB5ID0gNi43MiwgeEF4aXMgPSAwLCB5QXhpcyA9IDApLA0KICAgICAgICAgIHRleHQgPSAiPGI+MjAyNDogR2FwIGRlIDIsNTMgcC5wLjwvYj48YnI+RGVzcGVzYTogNyw5OSUgfCBSZWNlaXRhOiA1LDQ2JTxicj48aT5GaW5hbmNpYWRvIHZpYSBUZXNvdXJvPC9pPiIsDQogICAgICAgICAgYmFja2dyb3VuZENvbG9yID0gInJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSkiLA0KICAgICAgICAgIGJvcmRlckNvbG9yID0gSUJfQVpVTF9CQVNFLA0KICAgICAgICAgIGJvcmRlclJhZGl1cyA9IDYsDQogICAgICAgICAgYm9yZGVyV2lkdGggPSAxLA0KICAgICAgICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxMHB4IiwgY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8pDQogICAgICAgICkNCiAgICAgICkNCiAgICApDQogICkgJT4lDQoNCiAgaGNfdGl0bGUoDQogICAgdGV4dCA9ICJQcmV2aWTDqm5jaWEgU29jaWFsIChSR1BTKTogRGVzcGVzYSwgQXJyZWNhZGHDp8OjbyBlIEdhcCBGaXNjYWwiLA0KICAgIGFsaWduID0gImxlZnQiLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0FaVUxfQkFTRSwgZm9udFdlaWdodCA9ICJib2xkIiwgZm9udFNpemUgPSAiMThweCIpDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiVmFsb3JlcyBleHByZXNzb3MgZW0gJSBkbyBQSUIgbm9taW5hbCAoMjAxMuKAkzIwMjQpIHwgw4FyZWEgc29tYnJlYWRhOiBpbnN1ZmljacOqbmNpYSBmaW5hbmNlaXJhIGNvYmVydGEgcGVsbyBUZXNvdXJvIiwNCiAgICBhbGlnbiA9ICJsZWZ0IiwNCiAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sIGZvbnRTaXplID0gIjEycHgiKQ0KICApICU+JQ0KDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICBjcm9zc2hhaXJzID0gVFJVRSwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSBJQl9CUkFOQ08sDQogICAgYm9yZGVyQ29sb3IgPSBJQl9DSU5aQV9DTEFSTywNCiAgICBib3JkZXJSYWRpdXMgPSA2LA0KICAgIHZhbHVlRGVjaW1hbHMgPSAyLA0KICAgIHZhbHVlU3VmZml4ID0gIiUgZG8gUElCIg0KICApICU+JQ0KDQogIGhjX2xlZ2VuZCgNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIHZlcnRpY2FsQWxpZ24gPSAiYm90dG9tIiwNCiAgICBsYXlvdXQgPSAiaG9yaXpvbnRhbCIsDQogICAgaXRlbVN0eWxlID0gbGlzdChjb2xvciA9IElCX0FaVUxfQkFTRSwgZm9udFdlaWdodCA9ICJub3JtYWwiLCBmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCg0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IFNlY3JldGFyaWEgZG8gVGVzb3VybyBOYWNpb25hbCAoU1ROKSBlIEJhY2VuIChTR1MpLiBFbGFib3Jhw6fDo28gcHLDs3ByaWEgSWJNYWNybyBCSC4iLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0NMQVJPLCBmb250U2l6ZSA9ICIxMHB4IikNCiAgKSAlPiUNCiAgaGNfZXhwb3J0aW5nKGVuYWJsZWQgPSBUUlVFKQ0KDQpncmFmaWNvX2Zpc2NhbF9wcmV2DQpgYGANCg0KIyAqNTogTyBwcm9ibGVtYSBuYSByYWl6IGRvIEZpc2NhbCoNCg0KTWVkaWFudGUgYSB0b2RvIG8gY2Vuw6FyaW8gZW0gcXVlc3TDo28gZSBhbmFsaXNhbmRvIGNvbW8gbm9zIHByw7N4aW1vcyBhbm9zIG8gYXVtZW50byBkb3MgZ2FzdG9zIGUgZGFzIGRlc3Blc2FzIHJlbGFjaW9uYWRhcyDDoCBwcmV2aWTDqm5jaWEgcG9kZW0gY29ycm9lciBvIFBJQiBhb3MgcG91Y29zLCDDqSBuZWNlc3PDoXJpbyBjb21wcmVlbmRlciBkYSBvbmRlIHN1cmdlbSBlc3NlIGdyYW5kZSBhdW1lbnRvIGRlIGRlc3Blc2FzIGUgZ2FzdG9zIGUgY29tbyBub3Mgw7psdGltb3MgYW5vcyBlbGVzIHZlbSBzZSBpbnRlbnNpZmljYW5kbyBjYWRhIHZleiBtYWlzLiANCg0KTm92YW1lbnRlIGRlIGFjb3JkbyBjb20gbyBCRVBTLCBwb2RlLXNlIG9idGVyIGEgcXVhbnRpZGFkZSBkZSBiZW5lZsOtY2lvcyBjb25jZWRpZG9zIGUgZW1pdGlkb3MgcGVsbyBJTlNTIGUgaWRlbnRpZmljYXIgZGFkb3MgZGUgZXh0cmVtYSByZWxldsOibmNpYSBwYXJhIGEgYW7DoWxpc2UgZG8gZmlzY2FsLiBQcmltZWlybyDDqSBuZWNlc3PDoXJpbyBkZXN0YWNhciBhIGRpZmVyZW7Dp2EgZW50cmUgY29uY2VkaWRvIGUgZW1pdGlkbyBuZXNzZSBjZW7DoXJpbywgb3MgY29uY2VkaWRvcyByZXByZXNlbnRhbSBvcyBub3ZvcyBiZW5lZsOtY2lvcyBhcHJvdmFkb3Mgbm8gcGVyw61vZG8gZW0gcXVlc3TDo28sIGVucXVhbnRvIG9zIGVtaXRpZG9zIHPDo28gYXF1ZWxlcyBhdGl2b3MgcXVlIGrDoSBlc3TDo28gc2VuZG8gcGFnb3MgZSBlc3TDo28gZW0gImVzdG9xdWUiLiANCg0KTmEgc8OpcmllIGRlbnRybyBkbyBCb2xldGltIHF1ZSBhcHJlc2VudGEgYSBxdWFudGlkYWRlIGFudWFsIGRlIGJlbmVmw61jaW9zIGNvbmNlZGlkb3MgcGVsbyBJTlNTLCBkZXNkZSAyMDA2IGF0w6kgbWV0YWRlIGRlIDIwMjYsIHJlZmxldGUgdW1hIGRpbsOibWljYSBkZSBjcmVzY2ltZW50byBzb2JyZSBhIHZhcmnDoXZlbCBlbSBxdWVzdMOjbywgcHJpbmNpcGFsbWVudGUgYSBwYXJ0aXIgZGUgMjAyMywgaW7DrWNpbyBkbyAzwrogR292ZXJubyBMdWxhIHF1ZSByZXByZXNlbnRvdSBhIG1haW9yIHZhcmlhw6fDo28gYW51YWwgZGUgdG9kYSBhIHPDqXJpZSwgMTQsNCUuIE5lc3NlIGFubywgYXMgY29uY2Vzc8O1ZXMgZXN0YXZhbSBuYSBjYXNhIGRlIDUsMiBtaWxow7VlcywgbyBxdWUgbmEgw6lwb2NhIGrDoSBlcmEgbyBtYWlvciB2YWxvciBkZSB0b2RhIHPDqXJpZSwgcG9yw6ltIG8gw7psdGltbyB2YWxvciByZWdpc3RyYWRvIHF1ZSDDqSByZWZlcmVudGUgYSBqdW5obyBkZSAyMDI2IHJlZ2lzdHJvdSA4LDEgbWlsaMO1ZXMgZGUgbm92b3MgYmVuZWbDrWNpb3MgY29uY2VkaWRvcyBjb20gdmFyaWHDp8OjbyBhbnVhbCBkZSA2LDYlIGFwZW5hcyBuYSBtZXRhZGUgZG8gYW5vLiAqKEdyw6FmaWNvIDEwKSoNCg0KKiooR3LDoWZpY28gMTApKioNCg0KYGBge3J9DQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyBHcsOhZmljbzogUXVhbnRpZGFkZSBBbnVhbCBkZSBCZW5lZsOtY2lvcyBDb25jZWRpZG9zIHBlbG8gSU5TUw0KIyBJZGVudGlkYWRlIFZpc3VhbCBPZmljaWFsOiBQYWRyw6NvIEliTWFjcm8gQkggKE1hbnVhbCBkZSBNYXJjYSkNCiMgRm9udGU6IEJvbGV0aW0gRXN0YXTDrXN0aWNvIGRhIFByZXZpZMOqbmNpYSBTb2NpYWwgKEJFUFMgVm9sLiAzMiBOwrogMDYpDQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQpkaXIuY3JlYXRlKCJDOi9SdGVtcCIsIHNob3dXYXJuaW5ncyA9IEZBTFNFKQ0KU3lzLnNldGVudihUTVBESVIgPSAiQzovUnRlbXAiLCBUTVAgPSAiQzovUnRlbXAiLCBURU1QID0gIkM6L1J0ZW1wIikNCg0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KDQojIOKUgOKUgCAxLiBQQUxFVEEgSU5TVElUVUNJT05BTCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCklCX0FNQVJFTE8gICAgICA8LSAiI0ZGQjgxRiINCklCX0FaVUxfQkFTRSAgICA8LSAiIzAyMDIzQyINCklCX0JSQU5DTyAgICAgICA8LSAiI0ZGRkZGRiINCklCX0FaVUxfTUVESU8gICA8LSAiIzAwMkM1RSINCklCX0FaVUxfQ0xBUk8gICA8LSAiIzZCOEJBNCINCklCX0NJTlpBX0VTQ1VSTyA8LSAiIzNBM0EzQSINCklCX0NJTlpBX0NMQVJPICA8LSAiI0E2QTZBNiINCg0KIyDilIDilIAgMi4gQkFTRSBERSBEQURPUyAoQkVQUyBWT0wuIDMyIE7CuiAwNiDigJQgSlVOSE8vMjAyNikg4pSA4pSA4pSA4pSA4pSA4pSADQpkZl9jb25jZXNzb2VzX2F0dWFsaXphZG8gPC0gdGliYmxlKA0KICBhbm8gPSBjKA0KICAgICIyMDA2IiwgIjIwMDciLCAiMjAwOCIsICIyMDA5IiwgIjIwMTAiLCAiMjAxMSIsICIyMDEyIiwgIjIwMTMiLCAiMjAxNCIsDQogICAgIjIwMTUiLCAiMjAxNiIsICIyMDE3IiwgIjIwMTgiLCAiMjAxOSIsICIyMDIwIiwgIjIwMjEiLCAiMjAyMiIsICIyMDIzIiwNCiAgICAiMjAyNCIsICIyMDI1IiwgIkp1bDI1LUp1bjI2Ig0KICApLA0KICBjb25jZXNzb2VzX21pbCA9IGMoDQogICAgNDIzOCwgNDE3MywgNDQ2MSwgNDQ3MywgNDY0MCwgNDc2NywgNDk1NywgNTIwNywgNTIxMSwNCiAgICA0MzQ0LCA1MjQ2LCA1MTAzLCA1MTIzLCA1MTkwLCA0ODY4LCA0NzI5LCA1MjEyLCA1OTY0LA0KICAgIDY5MzgsIDc2NDUsIDgxNDYNCiAgKSwNCiAgdmFyX3BjdCA9IGMoDQogICAgNy4yLCAtMS41LCA2LjksIDAuMywgMy43LCAyLjcsIDQuMCwgNS4wLCAwLjEsDQogICAgLTE2LjYsIDIwLjgsIC0yLjcsIDAuNCwgMS4zLCAtNi4yLCAtMi44LCAxMC4yLCAxNC40LA0KICAgIDE2LjMsIDEwLjIsIDYuNg0KICApDQopICU+JQ0KICBtdXRhdGUoDQogICAgdmFyX2xhYmVsID0gcGFzdGUwKGlmX2Vsc2UodmFyX3BjdCA+IDAsICIrIiwgIiIpLCBmb3JtYXQodmFyX3BjdCwgZGVjaW1hbC5tYXJrID0gIiwiKSwgIiUiKQ0KICApDQoNCmRhZG9zX2NvbmNlc3NvZXNfc2VyaWUgPC0gcHVycnI6OnRyYW5zcG9zZSgNCiAgZGZfY29uY2Vzc29lc19hdHVhbGl6YWRvICU+JQ0KICAgIHRyYW5zbXV0ZSgNCiAgICAgIHkgICAgICAgID0gY29uY2Vzc29lc19taWwsDQogICAgICB2YXJfc3RyICA9IHZhcl9sYWJlbA0KICAgICkNCikNCg0KIyDilIDilIAgMy4gUkVOREVSSVpBw4fDg08gRE8gR1LDgUZJQ08g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQpncmFmaWNvX2NvbmNlc3NvZXNfMjAyNiA8LSBoaWdoY2hhcnQoKSAlPiUNCiAgaGNfY2hhcnQoDQogICAgdHlwZSA9ICJjb2x1bW4iLA0KICAgIGJhY2tncm91bmRDb2xvciA9IElCX0JSQU5DTywNCiAgICBzdHlsZSA9IGxpc3QoZm9udEZhbWlseSA9ICJBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIikNCiAgKSAlPiUNCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgY29sdW1uID0gbGlzdCgNCiAgICAgIGJvcmRlcldpZHRoID0gMCwNCiAgICAgIHBvaW50UGFkZGluZyA9IDAuMDUsDQogICAgICBncm91cFBhZGRpbmcgPSAwLjEyLA0KICAgICAgZGF0YUxhYmVscyA9IGxpc3QoDQogICAgICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgICAgICBmb3JtYXQgPSAie3BvaW50Lnk6LC4wZn0iLA0KICAgICAgICBzdHlsZSA9IGxpc3QoDQogICAgICAgICAgY29sb3IgPSBJQl9BWlVMX0JBU0UsDQogICAgICAgICAgZm9udFNpemUgPSAiMTBweCIsDQogICAgICAgICAgZm9udFdlaWdodCA9ICJib2xkIiwNCiAgICAgICAgICB0ZXh0T3V0bGluZSA9ICJub25lIg0KICAgICAgICApLA0KICAgICAgICB5ID0gLTUNCiAgICAgICkNCiAgICApDQogICkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgbmFtZSA9ICJCZW5lZsOtY2lvcyBDb25jZWRpZG9zIiwNCiAgICBkYXRhID0gZGFkb3NfY29uY2Vzc29lc19zZXJpZSwNCiAgICBjb2xvciA9IElCX0FaVUxfTUVESU8NCiAgKSAlPiUNCiAgaGNfeEF4aXMoDQogICAgY2F0ZWdvcmllcyA9IGRmX2NvbmNlc3NvZXNfYXR1YWxpemFkbyRhbm8sDQogICAgZ3JpZExpbmVXaWR0aCA9IDAsDQogICAgbGluZUNvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgdGlja0NvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgbGFiZWxzID0gbGlzdCgNCiAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiMTBweCIpLA0KICAgICAgcm90YXRpb24gPSAtNDUNCiAgICApDQogICkgJT4lDQogIGhjX3lBeGlzKA0KICAgIHRpdGxlID0gbGlzdCgNCiAgICAgIHRleHQgPSAiUXVhbnRpZGFkZSAoZW0gbWlsaGFyZXMpIiwNCiAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiMTFweCIpDQogICAgKSwNCiAgICBtaW4gPSAwLA0KICAgIG1heCA9IDkwMDAsDQogICAgdGlja0ludGVydmFsID0gMTAwMCwNCiAgICBncmlkTGluZUNvbG9yID0gIiNGMEYwRjAiLA0KICAgIGxpbmVDb2xvciA9IElCX0NJTlpBX0NMQVJPLA0KICAgIGxhYmVscyA9IGxpc3QoDQogICAgICBmb3JtYXQgPSAie3ZhbHVlOiwuMGZ9IiwNCiAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiMTFweCIpDQogICAgKQ0KICApICU+JQ0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIlF1YW50aWRhZGUgQW51YWwgZGUgQmVuZWbDrWNpb3MgQ29uY2VkaWRvcyBwZWxvIElOU1MgKDIwMDbigJMyMDI2KSIsDQogICAgYWxpZ24gPSAibGVmdCIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQVpVTF9CQVNFLCBmb250V2VpZ2h0ID0gImJvbGQiLCBmb250U2l6ZSA9ICIxOHB4IikNCiAgKSAlPiUNCiAgaGNfc3VidGl0bGUoDQogICAgdGV4dCA9ICJFdm9sdcOnw6NvIGRvIGZsdXhvIGRlIGNvbmNlc3PDtWVzIGFudWFpcyAoZW0gbWlsaGFyZXMpIHwgRGVzdGFxdWUgcGFyYSBvIHJlY29yZGUgZGUgOCwxNSBtaWxow7VlcyBhY3VtdWxhZG9zIGVtIDEyIG1lc2VzIChqdWwvMjXigJNqdW4vMjYpIiwNCiAgICBhbGlnbiA9ICJsZWZ0IiwNCiAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sIGZvbnRTaXplID0gIjEycHgiKQ0KICApICU+JQ0KICBoY190b29sdGlwKA0KICAgIHNoYXJlZCA9IEZBTFNFLA0KICAgIGJhY2tncm91bmRDb2xvciA9IElCX0JSQU5DTywNCiAgICBib3JkZXJDb2xvciA9IElCX0NJTlpBX0NMQVJPLA0KICAgIGJvcmRlclJhZGl1cyA9IDYsDQogICAgZm9ybWF0dGVyID0gSlMoImZ1bmN0aW9uKCkgew0KICAgICAgcmV0dXJuICc8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZToxMnB4XCI+PGI+UGVyw61vZG86ICcgKyB0aGlzLmtleSArICc8L2I+PC9zcGFuPjxici8+JyArDQogICAgICAgICAgICAgJzxzcGFuIHN0eWxlPVwiY29sb3I6JyArIHRoaXMuc2VyaWVzLmNvbG9yICsgJ1wiPuKXjzwvc3Bhbj4gQ29uY2Vzc8O1ZXM6IDxiPicgKw0KICAgICAgICAgICAgIEhpZ2hjaGFydHMubnVtYmVyRm9ybWF0KHRoaXMucG9pbnQueSwgMCwgJywnLCAnLicpICsgJyBtaWw8L2I+ICgnICsgdGhpcy5wb2ludC52YXJfc3RyICsgJyknOw0KICAgIH0iKQ0KICApICU+JQ0KICBoY19sZWdlbmQoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBNaW5pc3TDqXJpbyBkYSBQcmV2aWTDqm5jaWEgU29jaWFsIOKAlCBCb2xldGltIEVzdGF0w61zdGljbyBkYSBQcmV2aWTDqm5jaWEgU29jaWFsIChCRVBTIFZvbC4gMzIgTsK6IDA2KS4gRWxhYm9yYcOnw6NvIHByw7NwcmlhIEliTWFjcm8gQkguIiwNCiAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9DTEFSTywgZm9udFNpemUgPSAiMTBweCIpDQogICkgJT4lDQogIGhjX2V4cG9ydGluZyhlbmFibGVkID0gVFJVRSkNCg0KZ3JhZmljb19jb25jZXNzb2VzXzIwMjYNCmBgYA0KDQpFc3NlIGdyYW5kZSBhdW1lbnRvIG5vcyDDumx0aW1vcyAzIGFub3MgY29pbmNpZGUgY29tIGRpcmV0YW1lbnRlIGNvbSBhcyBwZXNzb2FzIG5hc2NpZGFzIG5hIMOpcG9jYSBkbyBwaWNvIGRvIGJhYnkgYm9vbSBuYWNpb25hbCwgZW50cmUgMTk1OCBlIDE5NjMsIGNvbXBsZXRhbmRvIG9zIHNldXMgNjAtNjUgYW5vcyBkZSBpZGFkZSBlIGF0aW5naW5kbyBhIGFwb3NlbnRhZG9yaWEsIMOpIGEgcGFyY2VsYSBkbyBtYWlvciBjb3J0ZSBkZW1vZ3LDoWZpY28gZGEgaGlzdMOzcmlhIGJyYXNpbGVpcmEgc2UgdG9ybmFuZG8gYmVuZWZpY2nDoXJpYSBlIGRlc2VxdWlsaWJyYW5kbyBhIGJhbGFuw6dhLiANCg0KRG8gb3V0cm8gbGFkbyBkYSBtb2VkYSwgYW8gYW5hbGlzYXIgYSBldm9sdcOnw6NvIGRhIHF1YW50aWRhZGUgZG9zICBiZW5lZsOtY2lvcyBlbWl0aWRvcyBhbyBsb25nbyBkb3MgYW5vcyBvIGVmZWl0byBkZSBkw6ljYWRhcyBkZSBjb25jZXNzw7VlcyBkZW1vbnN0cmEgdW0gbsO6bWVybyBkZSA0MiwyIG1pbGjDtWVzIGRlIGJlbmVmw61jaW9zIGRlc3RpbmFkb3MgcG9yIG1laW8gZG8gSU5TUyBlbSAyMDI2LiBObyBwcmltZWlybyBhbm8gZGEgc8OpcmllLCAyMDA2IG8gbsO6bWVybyB0b3RhbCBlcmEgcXVhc2UgZGUgMjksNiBtaWxow7VlcywgbG9nbyBob3V2ZSB1bSBhdW1lbnRvIGRlIDY5JSBlbSAxOSBhbm9zIGUgY29tbyBqw6EgYW5hbGlzYWRvIG5vIMO6bHRpbW8gZ3LDoWZpY28gbyBmZW7DtG1lbm8gdGVuZGUgYSBzZSB0b3JuYXIgY2FkYSB2ZXogbWFpcyBhY2VsZXJhZG8sIGFvIHNlIGNvbnNpZGVyYXIgbyBwYWRyw6NvIHJlY2VudGUgZG9zIMO6bHRpbW9zIGFub3MuIA0KDQpBIHJlc3BlaXRvIGRlIHZhbG9yZXMsIGVtIDIwMDYgbyB2YWxvciB0b3RhbCBkb3MgYmVuZWbDrWNvcyBlbWl0aWRvcyBlc3RhdmEgZW0gdG9ybm8gZGUgMzgxIGJpbGjDtWVzIGUgcGFzc291IHBhcmEgODIxIGJpbGjDtWVzIGVtIDIwMjYsIHVtIGF1bWVudG8gZGUgMTEwJSBlbSBtZW5vcyBkZSAxMCBhbm9zLiBWYWxlIGRlc3RhY2FyIHF1ZSBlc3NlcyB2YWxvcmVzIHNlIHJlZmVyZW0gYXBlbmFzIMOgIHBvcHVsYcOnw6NvIHVyYmFuYSwgYXBlc2FyIGRvIHZhbG9yIGRhIHBvcHVsYcOnw6NvIHJ1cmFsIHRhbWLDqW0gYXByZXNlbnRhciBncmFuZGVzIG7Dum1lcm9zLCBlc3RhbmRvIGhvamUgbmEgZmFpeGEgZGUgUiQgMTgzLDkgYmlsaMO1ZXMgZGUgcmVhaXMuIENvbnNpZGVyYW5kbyBvcyDDumx0aW1vcyB2YWxvcmVzIGRlIGFtYmFzIGFzIHPDqXJpZXMgcmVmZXJlbnRlcyBhIGp1bGhvIGRlIDIwMjYsIG8gdG90YWwgc29tYW5kbyBvIHVyYmFubyBlIG8gcnVyYWwgdG90YWxpemEgY2VyY2EgZGUgUiQgMSwwMTcgdHJpbGjDo28sIHZhbG9yIHByw7N4aW1vIGRhIHByb2plw6fDo28gZmVpdG8gcGVsbyBJRkkgYWJvcmRhZGEgbWFpcyBhY2ltYSwgZSBxdWUgZXN0aXB1bGF2YSB1bWEgZGVzcGVzYSB0b3RhbCBkZSBSJCAxLDA5MSB0cmlsaMOjbyBkZSByZWlzIHBhcmEgZXNzZSBhbm8uICooR3LDoWZpY28gMTEpKg0KDQoqKihHcsOhZmljbyAxMSkqKg0KDQpgYGB7cn0NCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIEdyw6FmaWNvOiBWYWxvciBBY3VtdWxhZG8gZGUgQmVuZWbDrWNpb3MgRW1pdGlkb3MgcGVsbyBJTlNTDQojIElkZW50aWRhZGUgVmlzdWFsIE9maWNpYWw6IFBhZHLDo28gSWJNYWNybyBCSCAoTWFudWFsIGRlIE1hcmNhKQ0KIyBGb250ZTogQm9sZXRpbSBFc3RhdMOtc3RpY28gZGEgUHJldmlkw6puY2lhIFNvY2lhbCAoQkVQUyBWb2wuIDMyIE7CuiAwNikNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCiMg4pSA4pSAIDEuIEJBU0UgREUgREFET1MgKEJFUFMgVk9MLiAzMiBOwrogMDYg4oCUIEpVTkhPLzIwMjYpIOKUgOKUgOKUgOKUgOKUgOKUgA0KZGZfYmVuZWZpY2lvc192YWxvcl8yMDI2IDwtIHRpYmJsZSgNCiAgYW5vID0gYygNCiAgICAiMjAwNiIsICIyMDA3IiwgIjIwMDgiLCAiMjAwOSIsICIyMDEwIiwgIjIwMTEiLCAiMjAxMiIsICIyMDEzIiwgIjIwMTQiLA0KICAgICIyMDE1IiwgIjIwMTYiLCAiMjAxNyIsICIyMDE4IiwgIjIwMTkiLCAiMjAyMCIsICIyMDIxIiwgIjIwMjIiLCAiMjAyMyIsDQogICAgIjIwMjQiLCAiMjAyNSIsICJKdWwyNS1KdW4yNiINCiAgKSwNCiAgdXJiYW5hID0gYygNCiAgICAzODEzNDAsIDM5ODQ2NywgNDExNDk2LCA0NDUxOTQsIDQ3NzY5MywgNDk4MDk0LCA1MzI1ODMsIDU2MDY5NCwgNTgzNzcwLA0KICAgIDU5MTI5OSwgNjI0NDc3LCA2NjcyMzIsIDY3OTU4NywgNjk2Mzc4LCA3MjE3MjksIDcwMDI4MSwgNzA4NDQzLCA3NDE0OTAsDQogICAgNzc5MTQ0LCA4MDI2NjksIDgyMTYxNw0KICApLA0KICBydXJhbCA9IGMoDQogICAgOTI2NTEsIDk4MzQzLCAxMDMxMzAsIDExNDY0OCwgMTIyNDg0LCAxMjQ1MjEsIDEzNzQzMCwgMTQ0Mzc0LCAxNDkyMDksDQogICAgMTUxNzA0LCAxNTc0OTksIDE2NDU4MCwgMTYzMzQ0LCAxNjUxNjYsIDE2ODU2NywgMTYxODQ0LCAxNjM1MDAsIDE3MzAzMywNCiAgICAxODMxNjEsIDE5MTYwMCwgMTk2ODY2DQogICkNCikNCg0KIyDilIDilIAgMi4gUkVOREVSSVpBw4fDg08gRE8gR1LDgUZJQ08g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQpncmFmaWNvX3ZhbG9yX2VtaXRpZG9fMjAyNiA8LSBoaWdoY2hhcnQoKSAlPiUNCiAgaGNfY2hhcnQoDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSBJQl9CUkFOQ08sDQogICAgc3R5bGUgPSBsaXN0KGZvbnRGYW1pbHkgPSAiQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIpDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIGxpbmUgPSBsaXN0KA0KICAgICAgbGluZVdpZHRoID0gMywNCiAgICAgIG1hcmtlciA9IGxpc3QoDQogICAgICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgICAgICByYWRpdXMgPSAzLjUNCiAgICAgICkNCiAgICApDQogICkgJT4lDQogIA0KICAjIFPDqXJpZSAxOiBDbGllbnRlbGEgVXJiYW5hIChBenVsIEliTWFjcm8pDQogIGhjX2FkZF9zZXJpZXMoDQogICAgbmFtZSA9ICJVcmJhbmEiLA0KICAgIGRhdGEgPSBkZl9iZW5lZmljaW9zX3ZhbG9yXzIwMjYkdXJiYW5hLA0KICAgIGNvbG9yID0gSUJfQVpVTF9CQVNFLA0KICAgIG1hcmtlciA9IGxpc3Qoc3ltYm9sID0gImNpcmNsZSIpDQogICkgJT4lDQogIA0KICAjIFPDqXJpZSAyOiBDbGllbnRlbGEgUnVyYWwgKEFtYXJlbG8gSWJNYWNybykNCiAgaGNfYWRkX3NlcmllcygNCiAgICBuYW1lID0gIlJ1cmFsIiwNCiAgICBkYXRhID0gZGZfYmVuZWZpY2lvc192YWxvcl8yMDI2JHJ1cmFsLA0KICAgIGNvbG9yID0gSUJfQU1BUkVMTywNCiAgICBtYXJrZXIgPSBsaXN0KHN5bWJvbCA9ICJkaWFtb25kIikNCiAgKSAlPiUNCiAgDQogIGhjX3hBeGlzKA0KICAgIGNhdGVnb3JpZXMgPSBkZl9iZW5lZmljaW9zX3ZhbG9yXzIwMjYkYW5vLA0KICAgIGdyaWRMaW5lV2lkdGggPSAxLA0KICAgIGdyaWRMaW5lQ29sb3IgPSAiI0YwRjBGMCIsDQogICAgbGluZUNvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgdGlja0NvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgbGFiZWxzID0gbGlzdCgNCiAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiMTBweCIpLA0KICAgICAgcm90YXRpb24gPSAtNDUNCiAgICApDQogICkgJT4lDQogIA0KICBoY195QXhpcygNCiAgICB0aXRsZSA9IGxpc3QoDQogICAgICB0ZXh0ID0gIlIkIG1pbGjDtWVzIGNvbnN0YW50ZXMiLA0KICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMXB4IikNCiAgICApLA0KICAgIG1pbiA9IDAsDQogICAgbWF4ID0gOTAwMDAwLA0KICAgIHRpY2tJbnRlcnZhbCA9IDEwMDAwMCwNCiAgICBncmlkTGluZUNvbG9yID0gIiNGMEYwRjAiLA0KICAgIGxpbmVDb2xvciA9IElCX0NJTlpBX0NMQVJPLA0KICAgIGxhYmVscyA9IGxpc3QoDQogICAgICBmb3JtYXQgPSAie3ZhbHVlOiwuMGZ9IiwNCiAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiMTFweCIpDQogICAgKQ0KICApICU+JQ0KICANCiAgaGNfdGl0bGUoDQogICAgdGV4dCA9ICJFdm9sdcOnw6NvIGRvIFZhbG9yIEFjdW11bGFkbyBkZSBCZW5lZsOtY2lvcyBFbWl0aWRvcyBwZWxvIElOU1MgKDIwMDbigJMyMDI2KSIsDQogICAgYWxpZ24gPSAibGVmdCIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQVpVTF9CQVNFLCBmb250V2VpZ2h0ID0gImJvbGQiLCBmb250U2l6ZSA9ICIxOHB4IikNCiAgKSAlPiUNCiAgaGNfc3VidGl0bGUoDQogICAgdGV4dCA9ICJWYWxvcmVzIGVtIHJlYWlzIGNvbnN0YW50ZXMgcG9yIGNsaWVudGVsYSAoYXR1YWxpemFkb3MgcGVsbyBJTlBDIGEgcHJlw6dvcyBkZSBqdW5obyBkZSAyMDI2KSIsDQogICAgYWxpZ24gPSAibGVmdCIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCiAgDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICBjcm9zc2hhaXJzID0gVFJVRSwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSBJQl9CUkFOQ08sDQogICAgYm9yZGVyQ29sb3IgPSBJQl9DSU5aQV9DTEFSTywNCiAgICBib3JkZXJSYWRpdXMgPSA2LA0KICAgIGhlYWRlckZvcm1hdCA9ICI8c3BhbiBzdHlsZT0nZm9udC1zaXplOjEycHgnPjxiPlBlcsOtb2RvOiB7cG9pbnQua2V5fTwvYj48L3NwYW4+PGJyLz4iLA0KICAgIHBvaW50Rm9ybWF0ID0gIjxzcGFuIHN0eWxlPSdjb2xvcjp7c2VyaWVzLmNvbG9yfSc+4pePPC9zcGFuPiBDbGllbnRlbGEge3Nlcmllcy5uYW1lfTogPGI+UiQge3BvaW50Lnk6LC4wZn0gbWk8L2I+PGJyLz4iDQogICkgJT4lDQogIA0KICBoY19sZWdlbmQoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsDQogICAgbGF5b3V0ID0gImhvcml6b250YWwiLA0KICAgIGl0ZW1TdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9BWlVMX0JBU0UsIGZvbnRXZWlnaHQgPSAibm9ybWFsIiwgZm9udFNpemUgPSAiMTJweCIpDQogICkgJT4lDQogIA0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IE1pbmlzdMOpcmlvIGRhIFByZXZpZMOqbmNpYSBTb2NpYWwg4oCUIEJvbGV0aW0gRXN0YXTDrXN0aWNvIGRhIFByZXZpZMOqbmNpYSBTb2NpYWwgKEJFUFMgVm9sLiAzMiBOwrogMDYpLiBFbGFib3Jhw6fDo28gcHLDs3ByaWEgSWJNYWNybyBCSC4iLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0NMQVJPLCBmb250U2l6ZSA9ICIxMHB4IikNCiAgKSAlPiUNCiAgaGNfZXhwb3J0aW5nKGVuYWJsZWQgPSBUUlVFKQ0KDQpncmFmaWNvX3ZhbG9yX2VtaXRpZG9fMjAyNg0KYGBgDQoNCk5vIGZpbSBkYSBhbsOhbGlzZSBkbyBCb2xldGltLCB0YW1iw6ltIGVudHJhIGVtIGV2aWTDqm5jaWEgb3V0cmEgcHJvYmxlbcOhdGljYSBlbSByZWxhw6fDo28gYSBjcmVzY2VudGUgZG9zIGdhc3RvcyBlbGV2YWRvcyBjb20gYmVuZWbDrWNpb3MsIGEgc3VhIGNvbXBvc2nDp8OjbyBwb3IgZXNww6ljaWUuIA0KDQpBcGVzYXIgZGEgbWFpb3JpYSBkb3MgYmVuZWbDrWNpb3MgY29uY2VkaWRvcyBzZSBkaXJlY2lvbmFyZW0gcGFyYSBvICJlc3RvcXVlIiBkb3MgZW1pdGlkb3MgZSBzZXIgbyBncmFuZGUgcmVzcG9uc8OhdmVsIHBvciBlc3NlIGF1bWVudG8gZGV0ZW5kbyB1bSBncmFuZGUgcGVzbywgYSBuYXR1cmV6YSBubyBiZW5lZsOtY2lvIG7Do28gcG9kZSBzZXIgZGVzY2FydGFkYSBwcmluY2lwYWxtZW50ZSBzZSBmb3IgYSByZXNwZWl0byBkbyBhc3Npc3RlbmNpYWwuIEFsw6ltIGRvIFJHUFMsIGZpbmFuY2lhZG8gcG9yIGNvbnRyaWJ1acOnw7VlcyBkZSBlbXByZWdhZG9yZXMgZSBlbXByZWdhZG9zIHF1ZSBpbmNsdWkgYXBvc2VudGFkb3JpYSBwb3IgaWRhZGUsIGludmFsaWRleiwgcGVuc8OjbyBwb3IgbW9ydGUsIGF1eMOtbGlvLWRvZW7Dp2EgZSBvdXRyb3MsIGV4aXN0ZSBvIGFzc2lzdGVuY2lhbCBxdWUgw6kgdG90YWxtZW50ZSBzZW0gY29udHJpYnVpw6fDo28gZSAxMDAlIGZpbmFuY2lhZG8gcGVsbyBUZXNvdXJvLCBjb20gYXBlbmFzIGRvaXMgYmVuZWbDrWNpb3MgQlBDIGFvIGlkb3NvICgrNjUgYW5vcyBhYmFpeG8gZGEgbGluaGEgZGEgcG9icmV6YSkgZSBCUEMgYW8gZGVmaWNpZW50ZS4gTsOjbyDDqSB1bWEgYXBvc2VudGFkb3JpYSBlIHNpbSB1bWEgYXNzaXN0w6puY2lhIHNvY2lhbC4gDQoNCkF0dWFsbWVudGUgbyB0b3RhbCBlIGJlbmVmaWNpw6FyaW9zIGRvIFJHUFMgZXN0w6EgZW0gdG9ybm8gZGUgMzUsNjcgbWlsaMO1ZXMgZW5xdWFudG8gb3MgYXNzaXN0ZW5jaWFkb3MgZXN0w6NvIGNvbSA2LDQgbWlsaMO1ZXMsIHBvcsOpbSBvIGludGVyZXNzYW50ZSBuw6NvIMOpIGFwZW5hcyBhbmFsaXNhciBhIGV2b2x1w6fDo28gZG8gUkdQUyBhbyBsb25nbyBkb3MgYW5vcyBkZSAxJS00JSwgZXNwZXJhZG8gYW8gY29uc2lkZXJhciBhIHRyYW5zacOnw6NvIGRlbW9ncsOhZmljYSwgbWFzIHNpbSBhIGV2b2x1w6fDo28gZG8gYXNzaXN0ZW5jaWFsaXNtbyBhIHVtYSB0YXhhIGRlIDIlLTclIGFvIGFubywgY29tIHVtIGdyYW5kZSBhdW1lbnRvIHJlY2VudGUsIHByaW5jaXBhbG1lbnRlIGUgbm92YW1lbnRlIG5vIGFubyBkZSAyMDIzIGNvbSB1bWEgZXhwbG9zw6NvIGRlIDExLDMlIGRlIHVtIGFubyBwcm8gb3V0cm8uIFRhaXMgZGFkb3MsIGFjZW5kZW0gdW0gbm92byBhbGVydGEsIGRlIHF1ZSBhbMOpbSBkbyBwcm9ibGVtYSBlbSByZWxhw6fDo28gYW8gZW52ZWxoZWNpbWVudG8gZGFxdWVsZXMgcXVlIGVudmVsaGVjZXJhbSBtYXMgcXVlIGNvbnRyaWJ1w61yYW0sIGRvIG91dHJvIGxhZG8gdGVtb3MgdW0gcG9zc8OtdmVsIGF1bWVudG8gZGUgaWRvc29zIHF1ZSBuZWNlc3NpdGFtIGRlIGFzc2lzdMOqbmNpYSBzb2NpYWwsIHNlbSBuZW5odW0gdGlwbyBkZSBjb250cmlidWnDp8OjbywgbWFpcyB1bWEgdmFyacOhdmVsIGluZGljYW5kbyBxdWUgYSBjb250YSBkbyBmaXNjYWwgcG9kZSBuw6NvIGZlY2hhciBsb2dvIG1haXMuICooR3LDoWZpY28gMTIpKg0KDQoqKihHcsOhZmljbyAxMikqKg0KDQpgYGB7cn0NCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIEdyw6FmaWNvOiBDb21wb3Npw6fDo28gZG9zIEJlbmVmw61jaW9zIEVtaXRpZG9zIOKAlCBSR1BTIHZzLiBCUEMNCiMgSWRlbnRpZGFkZSBWaXN1YWwgT2ZpY2lhbDogUGFkcsOjbyBJYk1hY3JvIEJIIChNYW51YWwgZGUgTWFyY2EpDQojIEZvbnRlOiBCb2xldGltIEVzdGF0w61zdGljbyBkYSBQcmV2aWTDqm5jaWEgU29jaWFsIChCRVBTIFZvbC4gMzIgTsK6IDA2KQ0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KIyDilIDilIAgMS4gQkFTRSBERSBEQURPUyBDT01QTEVUQSAoMjAwNuKAkzIwMjUgREVaRU1CUk8gKyBKVU4vMjAyNikNCmRmX2dydXBvc19hdHVhbGl6YWRvIDwtIHRpYmJsZSgNCiAgYW5vID0gYygNCiAgICAiMjAwNiIsICIyMDA3IiwgIjIwMDgiLCAiMjAwOSIsICIyMDEwIiwgIjIwMTEiLCAiMjAxMiIsICIyMDEzIiwgIjIwMTQiLA0KICAgICIyMDE1IiwgIjIwMTYiLCAiMjAxNyIsICIyMDE4IiwgIjIwMTkiLCAiMjAyMCIsICIyMDIxIiwgIjIwMjIiLCAiMjAyMyIsDQogICAgIjIwMjQiLCAiMjAyNSIsICJKdW4vMjYiDQogICksDQogIHJncHNfZXhhdG8gPSBjKA0KICAgIDIxNjQ0ODg2LCAyMjA2NjI2MywgMjI3NzYyMDUsIDIzNTM0NDk3LCAyNDQyNjg4MiwgMjUxNzYzMjMsIDI2MDMyODU1LA0KICAgIDI3MDA5MDExLCAyNzgxODk3MywgMjgyNzYzNDcsIDI5MTgzMzgzLCAyOTgwNDk2NCwgMzAyNzg2NTUsIDMwODY1NzgzLA0KICAgIDMxMjM5OTA4LCAzMTUyMjY4NywgMzI0MTI5MjcsIDMzNTA0NjI2LCAzNDM5NjA4MywgMzUxNzMwNzEsIDM1NjcwNzUxDQogICksDQogIGFzc2lzdGVuY2lhbF9leGF0byA9IGMoDQogICAgMjkyMzg5NCwgMzA4MDgyMSwgMzI5NjU2NiwgMzQ4OTI0MiwgMzY4OTIyMSwgMzg0OTg5NSwgMzk5OTQ2MiwgNDE2NTk1NiwNCiAgICA0MzEwNDQ4LCA0NDAzMTU0LCA0NTUxNTAxLCA0NjcyODI1LCA0NzYwOTY2LCA0NzUyNDQwLCA0ODY5NDMxLCA0ODE3ODMwLA0KICAgIDUxOTU4MDIsIDU3ODM0ODIsIDYzNTg2NTUsIDY0NTUyMDYsIDY0NDY0NTMNCiAgKQ0KKSAlPiUNCiAgbXV0YXRlKA0KICAgIHRvdGFsX2V4YXRvID0gcmdwc19leGF0byArIGFzc2lzdGVuY2lhbF9leGF0bywNCiAgICByZ3BzX21pICAgICA9IHJvdW5kKHJncHNfZXhhdG8gLyAxZTYsIDIpLA0KICAgIGFzc2lzdF9taSAgID0gcm91bmQoYXNzaXN0ZW5jaWFsX2V4YXRvIC8gMWU2LCAyKSwNCiAgICB0b3RhbF9taSAgICA9IHJvdW5kKHRvdGFsX2V4YXRvIC8gMWU2LCAyKSwNCiAgICANCiAgICAjIEPDoWxjdWxvIGRhcyB2YXJpYcOnw7VlcyBwZXJjZW50dWFpcyBlbSByZWxhw6fDo28gYW8gcGVyw61vZG8gYW50ZXJpb3INCiAgICB2YXJfcmdwcyAgID0gcm91bmQoKHJncHNfZXhhdG8gLSBsYWcocmdwc19leGF0bykpIC8gbGFnKHJncHNfZXhhdG8pICogMTAwLCAxKSwNCiAgICB2YXJfYXNzaXN0ID0gcm91bmQoKGFzc2lzdGVuY2lhbF9leGF0byAtIGxhZyhhc3Npc3RlbmNpYWxfZXhhdG8pKSAvIGxhZyhhc3Npc3RlbmNpYWxfZXhhdG8pICogMTAwLCAxKSwNCiAgICB2YXJfdG90YWwgID0gcm91bmQoKHRvdGFsX2V4YXRvIC0gbGFnKHRvdGFsX2V4YXRvKSkgLyBsYWcodG90YWxfZXhhdG8pICogMTAwLCAxKSwNCiAgICANCiAgICB2YXJfcmdwc19zdHIgICA9IGlmX2Vsc2UoaXMubmEodmFyX3JncHMpLCAiIiwgcGFzdGUwKGlmX2Vsc2UodmFyX3JncHMgPiAwLCAiKyIsICIiKSwgZm9ybWF0KHZhcl9yZ3BzLCBkZWNpbWFsLm1hcmsgPSAiLCIpLCAiJSIpKSwNCiAgICB2YXJfYXNzaXN0X3N0ciA9IGlmX2Vsc2UoaXMubmEodmFyX2Fzc2lzdCksICIiLCBwYXN0ZTAoaWZfZWxzZSh2YXJfYXNzaXN0ID4gMCwgIisiLCAiIiksIGZvcm1hdCh2YXJfYXNzaXN0LCBkZWNpbWFsLm1hcmsgPSAiLCIpLCAiJSIpKSwNCiAgICB2YXJfdG90YWxfc3RyICA9IGlmX2Vsc2UoaXMubmEodmFyX3RvdGFsKSwgIiIsIHBhc3RlMChpZl9lbHNlKHZhcl90b3RhbCA+IDAsICIrIiwgIiIpLCBmb3JtYXQodmFyX3RvdGFsLCBkZWNpbWFsLm1hcmsgPSAiLCIpLCAiJSIpKQ0KICApDQoNCmRhZG9zX3JncHNfc3RhY2sgPC0gcHVycnI6OnRyYW5zcG9zZSgNCiAgZGZfZ3J1cG9zX2F0dWFsaXphZG8gJT4lDQogICAgdHJhbnNtdXRlKA0KICAgICAgeSAgICAgICAgICAgICA9IHJncHNfbWksDQogICAgICB2YXJfc3RyICAgICAgID0gdmFyX3JncHNfc3RyLA0KICAgICAgdG90YWxfZ2VyYWwgICA9IHRvdGFsX21pLA0KICAgICAgdmFyX3RvdGFsX3N0ciA9IHZhcl90b3RhbF9zdHINCiAgICApDQopDQoNCmRhZG9zX2Fzc2lzdF9zdGFjayA8LSBwdXJycjo6dHJhbnNwb3NlKA0KICBkZl9ncnVwb3NfYXR1YWxpemFkbyAlPiUNCiAgICB0cmFuc211dGUoDQogICAgICB5ICAgICAgICAgICAgID0gYXNzaXN0X21pLA0KICAgICAgdmFyX3N0ciAgICAgICA9IHZhcl9hc3Npc3Rfc3RyLA0KICAgICAgdG90YWxfZ2VyYWwgICA9IHRvdGFsX21pLA0KICAgICAgdmFyX3RvdGFsX3N0ciA9IHZhcl90b3RhbF9zdHINCiAgICApDQopDQoNCiMg4pSA4pSAIDIuIFJFTkRFUklaQcOHw4NPIERPIEdSw4FGSUNPIEVNUElMSEFETyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCmdyYWZpY29fZW1waWxoYWRvXzIwMjYgPC0gaGlnaGNoYXJ0KCkgJT4lDQogIGhjX2NoYXJ0KA0KICAgIHR5cGUgPSAiY29sdW1uIiwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSBJQl9CUkFOQ08sDQogICAgc3R5bGUgPSBsaXN0KGZvbnRGYW1pbHkgPSAiQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIpDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIGNvbHVtbiA9IGxpc3QoDQogICAgICBzdGFja2luZyA9ICJub3JtYWwiLA0KICAgICAgYm9yZGVyV2lkdGggPSAwLA0KICAgICAgcG9pbnRQYWRkaW5nID0gMC4wNSwNCiAgICAgIGdyb3VwUGFkZGluZyA9IDAuMTINCiAgICApDQogICkgJT4lDQogIA0KICAjIFPDqXJpZSAxOiBSR1BTIChCYXNlIGRhIENvbHVuYSDigJQgQXp1bCBJYk1hY3JvKQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIG5hbWUgPSAiUHJldmlkZW5jacOhcmlvcyAoUkdQUykiLA0KICAgIGRhdGEgPSBkYWRvc19yZ3BzX3N0YWNrLA0KICAgIGNvbG9yID0gSUJfQVpVTF9CQVNFLA0KICAgIGRhdGFMYWJlbHMgPSBsaXN0KA0KICAgICAgZW5hYmxlZCA9IFRSVUUsDQogICAgICBmb3JtYXQgPSAie3BvaW50Lnk6LjFmfSIsDQogICAgICBzdHlsZSA9IGxpc3QoDQogICAgICAgIGNvbG9yID0gSUJfQlJBTkNPLA0KICAgICAgICBmb250U2l6ZSA9ICI5cHgiLA0KICAgICAgICBmb250V2VpZ2h0ID0gImJvbGQiLA0KICAgICAgICB0ZXh0T3V0bGluZSA9ICJub25lIg0KICAgICAgKSwNCiAgICAgIHkgPSAxMg0KICAgICkNCiAgKSAlPiUNCiAgDQogICMgU8OpcmllIDI6IEFzc2lzdGVuY2lhaXMgKFRvcG8gZGEgQ29sdW5hIOKAlCBBbWFyZWxvIEliTWFjcm8pDQogIGhjX2FkZF9zZXJpZXMoDQogICAgbmFtZSA9ICJBc3Npc3RlbmNpYWlzIChCUEMvTE9BUykiLA0KICAgIGRhdGEgPSBkYWRvc19hc3Npc3Rfc3RhY2ssDQogICAgY29sb3IgPSBJQl9BTUFSRUxPLA0KICAgIGRhdGFMYWJlbHMgPSBsaXN0KA0KICAgICAgZW5hYmxlZCA9IFRSVUUsDQogICAgICBmb3JtYXQgPSAie3BvaW50Lnk6LjFmfSIsDQogICAgICBzdHlsZSA9IGxpc3QoDQogICAgICAgIGNvbG9yID0gSUJfQVpVTF9CQVNFLA0KICAgICAgICBmb250U2l6ZSA9ICI5cHgiLA0KICAgICAgICBmb250V2VpZ2h0ID0gImJvbGQiLA0KICAgICAgICB0ZXh0T3V0bGluZSA9ICJub25lIg0KICAgICAgKSwNCiAgICAgIHkgPSAxMA0KICAgICkNCiAgKSAlPiUNCiAgDQogICMgU8OpcmllIDM6IFRvdGFsaXphZG9yIG5vIHRvcG8gZGUgY2FkYSBjb2x1bmENCiAgaGNfYWRkX3NlcmllcygNCiAgICBuYW1lID0gIlRvdGFsIEdlcmFsIiwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIGRhdGEgPSBkZl9ncnVwb3NfYXR1YWxpemFkbyR0b3RhbF9taSwNCiAgICBjb2xvciA9ICJ0cmFuc3BhcmVudCIsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpLA0KICAgIGVuYWJsZU1vdXNlVHJhY2tpbmcgPSBGQUxTRSwNCiAgICBkYXRhTGFiZWxzID0gbGlzdCgNCiAgICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgICAgeSA9IC02LA0KICAgICAgZm9ybWF0ID0gIjxiPnt5Oi4xZn08L2I+IiwNCiAgICAgIHN0eWxlID0gbGlzdCgNCiAgICAgICAgY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sDQogICAgICAgIGZvbnRTaXplID0gIjEwcHgiLA0KICAgICAgICB0ZXh0T3V0bGluZSA9ICJub25lIg0KICAgICAgKQ0KICAgICkNCiAgKSAlPiUNCiAgDQogIGhjX3hBeGlzKA0KICAgIGNhdGVnb3JpZXMgPSBkZl9ncnVwb3NfYXR1YWxpemFkbyRhbm8sDQogICAgZ3JpZExpbmVXaWR0aCA9IDAsDQogICAgbGluZUNvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgdGlja0NvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgbGFiZWxzID0gbGlzdCgNCiAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiMTBweCIpLA0KICAgICAgcm90YXRpb24gPSAtNDUNCiAgICApDQogICkgJT4lDQogIA0KICBoY195QXhpcygNCiAgICB0aXRsZSA9IGxpc3QoDQogICAgICB0ZXh0ID0gIlF1YW50aWRhZGUgKGVtIG1pbGjDtWVzIGRlIGJlbmVmw61jaW9zKSIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sIGZvbnRTaXplID0gIjExcHgiKQ0KICAgICksDQogICAgbWluID0gMCwNCiAgICBtYXggPSA0OCwNCiAgICB0aWNrSW50ZXJ2YWwgPSA2LA0KICAgIGdyaWRMaW5lQ29sb3IgPSAiI0YwRjBGMCIsDQogICAgbGluZUNvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgbGFiZWxzID0gbGlzdCgNCiAgICAgIGZvcm1hdCA9ICJ7dmFsdWU6LjBmfSBtaSIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sIGZvbnRTaXplID0gIjExcHgiKQ0KICAgICkNCiAgKSAlPiUNCiAgDQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiQ29tcG9zacOnw6NvIGRvIEVzdG9xdWUgZGUgQmVuZWbDrWNpb3MgRW1pdGlkb3M6IFJHUFMgdnMuIEFzc2lzdGVuY2lhaXMiLA0KICAgIGFsaWduID0gImxlZnQiLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0FaVUxfQkFTRSwgZm9udFdlaWdodCA9ICJib2xkIiwgZm9udFNpemUgPSAiMThweCIpDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiRGlzdHJpYnVpw6fDo28gZG8gZXN0b3F1ZSBhdGl2byBlbSBkZXplbWJybyBkZSBjYWRhIGFubyBlIHBvc2nDp8OjbyBlbSBqdW5obyBkZSAyMDI2IChlbSBtaWxow7VlcykiLA0KICAgIGFsaWduID0gImxlZnQiLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiMTJweCIpDQogICkgJT4lDQogIA0KICBoY190b29sdGlwKA0KICAgIHNoYXJlZCA9IFRSVUUsDQogICAgYmFja2dyb3VuZENvbG9yID0gSUJfQlJBTkNPLA0KICAgIGJvcmRlckNvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgYm9yZGVyUmFkaXVzID0gNiwNCiAgICBmb3JtYXR0ZXIgPSBKUygiZnVuY3Rpb24oKSB7DQogICAgICB2YXIgaGVhZGVyID0gJzxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjEycHhcIj48Yj5QZXLDrW9kbzogJyArIHRoaXMueCArICc8L2I+PC9zcGFuPjxici8+JzsNCiAgICAgIHZhciBjb3JwbyA9ICcnOw0KICAgICAgdmFyIHRvdGFsTWkgPSAwOw0KICAgICAgdmFyIHZhclRvdGFsID0gJyc7DQoNCiAgICAgIHRoaXMucG9pbnRzLmZvckVhY2goZnVuY3Rpb24ocCkgew0KICAgICAgICBpZiAocC5zZXJpZXMubmFtZSAhPT0gJ1RvdGFsIEdlcmFsJykgew0KICAgICAgICAgIHZhciB2YXJUZXh0byA9IHAucG9pbnQudmFyX3N0ciAhPT0gJycgPyAnIDxiPignICsgcC5wb2ludC52YXJfc3RyICsgJyk8L2I+JyA6ICcnOw0KICAgICAgICAgIGNvcnBvICs9ICc8c3BhbiBzdHlsZT1cImNvbG9yOicgKyBwLnNlcmllcy5jb2xvciArICdcIj7il488L3NwYW4+ICcgKw0KICAgICAgICAgICAgICAgICAgIHAuc2VyaWVzLm5hbWUgKyAnOiA8Yj4nICsNCiAgICAgICAgICAgICAgICAgICBIaWdoY2hhcnRzLm51bWJlckZvcm1hdChwLnksIDIsICcsJywgJy4nKSArICcgbWk8L2I+JyArIHZhclRleHRvICsgJzxici8+JzsNCiAgICAgICAgfQ0KICAgICAgICBpZiAocC5wb2ludC50b3RhbF9nZXJhbCkgew0KICAgICAgICAgIHRvdGFsTWkgPSBwLnBvaW50LnRvdGFsX2dlcmFsOw0KICAgICAgICAgIHZhclRvdGFsID0gcC5wb2ludC52YXJfdG90YWxfc3RyICE9PSAnJyA/ICcgPGI+KCcgKyBwLnBvaW50LnZhcl90b3RhbF9zdHIgKyAnKTwvYj4nIDogJyc7DQogICAgICAgIH0NCiAgICAgIH0pOw0KDQogICAgICB2YXIgcm9kYXBlID0gJzxociBzdHlsZT1cIm1hcmdpbjo0cHggMDsgYm9yZGVyOjA7IGJvcmRlci10b3A6MXB4IHNvbGlkICNFNUU3RUI7XCIvPicgKw0KICAgICAgICAgICAgICAgICAgICc8c3BhbiBzdHlsZT1cImNvbG9yOiMwMjAyM0NcIj7il488L3NwYW4+IDxiPlRvdGFsIEVtaXRpZG86ICcgKw0KICAgICAgICAgICAgICAgICAgIEhpZ2hjaGFydHMubnVtYmVyRm9ybWF0KHRvdGFsTWksIDIsICcsJywgJy4nKSArICcgbWk8L2I+JyArIHZhclRvdGFsOw0KDQogICAgICByZXR1cm4gaGVhZGVyICsgY29ycG8gKyByb2RhcGU7DQogICAgfSIpDQogICkgJT4lDQogIA0KICBoY19sZWdlbmQoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsDQogICAgbGF5b3V0ID0gImhvcml6b250YWwiLA0KICAgIGl0ZW1TdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9BWlVMX0JBU0UsIGZvbnRXZWlnaHQgPSAibm9ybWFsIiwgZm9udFNpemUgPSAiMTJweCIpDQogICkgJT4lDQogIA0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IE1pbmlzdMOpcmlvIGRhIFByZXZpZMOqbmNpYSBTb2NpYWwg4oCUIEJvbGV0aW0gRXN0YXTDrXN0aWNvIGRhIFByZXZpZMOqbmNpYSBTb2NpYWwgKEJFUFMgVm9sLiAzMiBOwrogMDYpLiBFbGFib3Jhw6fDo28gcHLDs3ByaWEgSWJNYWNybyBCSC4iLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0NMQVJPLCBmb250U2l6ZSA9ICIxMHB4IikNCiAgKSAlPiUNCiAgaGNfZXhwb3J0aW5nKGVuYWJsZWQgPSBUUlVFKQ0KDQpncmFmaWNvX2VtcGlsaGFkb18yMDI2DQpgYGANCg0KIyAqNjpJbXBhY3RvIG5vIEludmVzdGltZW50byBlIG5hIFBvdXBhbsOnYSogDQoNCkFww7NzIGRlc3RyaW5jaGFyIHRvZGEgYSBwcm9ibGVtw6F0aWNhIHByZXNlbnRlIGRlbnRybyBkbyBmaXNjYWwgYnJhc2lsZWlybywgb3V0cm8gaW1wYWN0byBkYSB0cmFuc2nDp8OjbyBkZW1vZ3LDoWZpY2Egc2UgZGEgcG9yIGNvbnRhIGRhIHBhcnRlIG1vbmV0w6FyaWEgZW52b2x2ZW5kbyBwb3VwYW7Dp2FzLCBpbnZlc3RpbWVudG9zIGUgdGF4YXMgZGUganVyb3MuIA0KDQpDb20gbyBhdW1lbnRvIGRhIHBvcHVsYcOnw6NvIGlkb3NhLCBlc3NhIHBhcmNlbGEgZGEgcG9wdWxhw6fDo28gY29zdHVtYSBjb25zdW1pciBlIGludmVzdGlyIG1lbm9zLCBhbGdvIHF1ZSBwb2RlIGRlc2FjZWxlcmFyIGEgZWNvbm9taWEgYWluZGEgbWFpcyBlbSB1bSBsb25nbyBwcmF6by4gQSB0YXhhIGRlIHBvdXBhbsOnYSBlc3TDoSAxNSw1JSwgcmVzdWx0YWRvIGRvIDHCuiBUcmltZXN0cmUgZGUgMjAyNiwgZW5xdWFudG8gYSB0YXhhIGRlIGludmVzdGltZW50byBzZSBlbmNvbnRyYSBlbSAxNiw1JSwgbyBxdWUgaW5kaWNhIHVtIGdhcCBkZSBwb3VwYW7Dp2EgYWJlcnRhIG5hIHF1YWwgbyBicmFzaWxlaXJvIGrDoSBkZXBlbmRlIGRhIHBvdXBhbsOnYSBleHRlcm5hIHBhcmEgZmVjaGFyIG8gMSUgbmVzc2EgYW7DoWxpc2UuIE8gZW52ZWxoZWNpbWVudG8gZGEgcG9wdWxhw6fDo28gcG9kZSBjb21wcmltaXIgYWluZGEgbWFpcyBhIHBvdXBhbsOnYSBwcml2YWRhLCBlbnF1YW50byBvIGTDqWZpY2l0IHByZXZpZGVuY2nDoXJpbyB2aW5kbyBkbyBSR1BTIHBpb3JhIGFpbmRhIG1haXMgYSBwb3VwYW7Dp2EgbmVnYXRpdmEgcMO6YmxpY2EuICooR3LDoWZpY28gMTMpKg0KDQpBbMOpbSBkYSBwb3VwYW7Dp2EgZGVjYWlyLCBvIGxhZG8gZG8gaW52ZXN0aW1lbnRvIHRhbWLDqW0gcG9kZSBhcHJlc2VudGFyIHVtYSBxdWVkYSBwb3LDqW0gZW0gdW1hIGVzY2FsYSBtZW5vciwgcG9pcyBqdW50YW1lbnRlIGNvbSBvIGVudmVsaGVjaW1lbnRvLCBhbGd1bnMgc2V0b3JlcyBwb2RlbSBzZSB0b3JuYXIgbWFpcyBkZW1hbmRhZG9zIGUgYXRyYWlyIGNhcGl0YWwsIGNvbW8gc2HDumRlIGUgYmVtLWVzdGFyLCB0dXJpc21vIGUgbGF6ZXIsIGluZnJhZXN0cnV0dXJhIHBhcmEgaWRvc29zIGUgZGVudHJlIG91dHJvcy4gDQoNCkNvbSBhbWJhcyBlbSB1bWEgcG9zc8OtdmVsIHF1ZWRhLCBhIHNpdHVhw6fDo28gZGEgZXN0YWduYcOnw6NvIGRhIGVjb25vbWlhIG91IGRlc2FjZWxlcmHDp8OjbyBkbyBQSUIgZW50cmEgZW0gdmlnw6puY2lhIG5vdmFtZW50ZSwgcG9pcyBhbMOpbSBkbyBQSUIgc2VyIGltcGFjdGFkbyBwZWxvIGxhZG8gZGEgcHJvZHV0aXZpZGFkZSBlIGRvIGZpc2NhbCwgZW0gb3V0cmEgZnJlbnRlIGEgcXVlZGEgZGEgYXRpdmlkYWRlIGVjb27DtG1pY2EgcG9kZSBvY29ycmVyIHBlbGEgZmFsdGEgZGUgaW52ZXN0aW1lbnRvIGUgcXVlZGEgZGEgcG91cGFuw6dhLiANCg0KKiooR3LDoWZpY28gMTMpKioNCg0KYGBge3J9DQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyBHcsOhZmljbzogVGF4YSBkZSBQb3VwYW7Dp2EgdnMuIFRheGEgZGUgSW52ZXN0aW1lbnRvICglIGRvIFBJQikNCiMgSWRlbnRpZGFkZSBWaXN1YWwgT2ZpY2lhbDogUGFkcsOjbyBJYk1hY3JvIEJIIChNYW51YWwgZGUgTWFyY2EpDQojIEZvbnRlOiBJQkdFIOKAlCBDb250YXMgTmFjaW9uYWlzIFRyaW1lc3RyYWlzIChDTlQpDQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQojIFByZXZlbsOnw6NvIHBhcmEgY2FtaW5ob3MgdGVtcG9yw6FyaW9zIG5vIFdpbmRvd3MgY29tIGFjZW50dWHDp8Ojbw0KZGlyLmNyZWF0ZSgiQzovUnRlbXAiLCBzaG93V2FybmluZ3MgPSBGQUxTRSkNClN5cy5zZXRlbnYoVE1QRElSID0gIkM6L1J0ZW1wIiwgVE1QID0gIkM6L1J0ZW1wIiwgVEVNUCA9ICJDOi9SdGVtcCIpDQoNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCg0KIyDilIDilIAgMS4gREVGSU5Jw4fDg08gREEgUEFMRVRBIElOU1RJVFVDSU9OQUwgKEdVSUEgREUgTUFSQ0EpIOKUgOKUgOKUgOKUgOKUgOKUgA0KSUJfQU1BUkVMTyAgICAgIDwtICIjRkZCODFGIiAgIyBUYXhhIGRlIFBvdXBhbsOnYSAvIERlc3RhcXVlcw0KSUJfQVpVTF9CQVNFICAgIDwtICIjMDIwMjNDIiAgIyBUYXhhIGRlIEludmVzdGltZW50byAvIFTDrXR1bG9zIC8gQmFzZSBpbnN0aXR1Y2lvbmFsDQpJQl9CUkFOQ08gICAgICAgPC0gIiNGRkZGRkYiICAjIEZ1bmRvIGluc3RpdHVjaW9uYWwNCklCX0FaVUxfTUVESU8gICA8LSAiIzAwMkM1RSIgICMgRWxlbWVudG9zIGRlIGFwb2lvIGluc3RpdHVjaW9uYWwNCklCX0FaVUxfQ0xBUk8gICA8LSAiIzZCOEJBNCIgICMgR2FwIEZpc2NhbC9FeHRlcm5vICjDgXJlYSBTb21icmVhZGEpDQpJQl9DSU5aQV9FU0NVUk8gPC0gIiMzQTNBM0EiICAjIFRleHRvcywgZWl4b3MsIHN1YnTDrXR1bG9zIGUgYW5vdGHDp8O1ZXMNCklCX0NJTlpBX0NMQVJPICA8LSAiI0E2QTZBNiIgICMgTGluaGFzIGRlIGdyYWRlLCBkaXZpc29yZXMgZSBjcsOpZGl0b3MNCg0KIyDilIDilIAgMi4gQkFTRSBERSBEQURPUyBFIEPDgUxDVUxPIERBUyDDgVJFQVMgREUgR0FQIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KYW5vcyA8LSAyMDAwOjIwMjYNCg0KdGF4YV9pbnZlc3RpbWVudG8gPC0gYygNCiAgMTguMzUsIDE4LjQ4LCAxNy45MywgMTYuNjMsIDE3LjMzLCAxNy4wOCwgMTcuMjMsIDE4LjAwLCAxOS4zOCwgMTkuMDMsDQogIDIwLjUzLCAyMC42MCwgMjAuNzMsIDIwLjkwLCAxOS45MCwgMTcuODMsIDE1LjUzLCAxNC41NSwgMTUuMDgsIDE1LjQ4LA0KICAxNi41MCwgMTcuOTMsIDE3LjgwLCAxNi40MywgMTYuOTAsIDE2Ljg4LCAxNi41MA0KKQ0KDQp0YXhhX3BvdXBhbmNhIDwtIGMoDQogIDE0LjEwLCAxMy42NSwgMTUuNDUsIDE2LjQwLCAxOC45MCwgMTguMTMsIDE4LjM4LCAxOS4zNSwgMTkuMjMsIDE2LjM1LA0KICAxNy43OCwgMTguNjMsIDE3LjcwLCAxOC4yMCwgMTYuMTUsIDE0LjU1LCAxMy40MywgMTMuNjUsIDEyLjc1LCAxMi4yOCwNCiAgMTQuODUsIDE3LjI4LCAxNS44OCwgMTUuMDMsIDE0LjE1LCAxNC40NSwgMTUuNTANCikNCg0KZGZfbWFjcm9fdGF4YXMgPC0gdGliYmxlKA0KICBhbm8gICAgICAgICAgPSBhcy5jaGFyYWN0ZXIoYW5vcyksDQogIGludmVzdGltZW50byA9IHRheGFfaW52ZXN0aW1lbnRvLA0KICBwb3VwYW5jYSAgICAgPSB0YXhhX3BvdXBhbmNhLA0KICBnYXAgICAgICAgICAgPSByb3VuZChpbnZlc3RpbWVudG8gLSBwb3VwYW5jYSwgMiksDQogIGxvdyAgICAgICAgICA9IHBtaW4oaW52ZXN0aW1lbnRvLCBwb3VwYW5jYSksDQogIGhpZ2ggICAgICAgICA9IHBtYXgoaW52ZXN0aW1lbnRvLCBwb3VwYW5jYSkNCikNCg0KIyDilIDilIAgMy4gUkVOREVSSVpBw4fDg08gRE8gR1LDgUZJQ08g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQpncmFmaWNvX3BvdXBhbmNhX2ludmVzdGltZW50b190YXhhcyA8LSBoaWdoY2hhcnQoKSAlPiUNCiAgaGNfY2hhcnQoDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSBJQl9CUkFOQ08sDQogICAgc3R5bGUgPSBsaXN0KGZvbnRGYW1pbHkgPSAiQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIpDQogICkgJT4lDQogIA0KICAjIMOBcmVhIGRlIEdhcCBlbnRyZSBhcyBjdXJ2YXMgKE5lY2Vzc2lkYWRlIC8gUG91cGFuw6dhIEV4dGVybmEpDQogIGhjX2FkZF9zZXJpZXMoDQogICAgbmFtZSA9ICJHYXAgKFBvdXBhbsOnYSBFeHRlcm5hIC8gRGVzY29tcGFzc28pIiwNCiAgICB0eXBlID0gImFyZWFyYW5nZSIsDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRmX21hY3JvX3RheGFzICU+JSB0cmFuc211dGUoYW5vLCBsb3csIGhpZ2gpKSwNCiAgICBjb2xvciA9IElCX0FaVUxfQ0xBUk8sDQogICAgZmlsbE9wYWNpdHkgPSAwLjIyLA0KICAgIGxpbmVXaWR0aCA9IDAsDQogICAgekluZGV4ID0gMCwNCiAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBGQUxTRSkNCiAgKSAlPiUNCiAgDQogICMgU8OpcmllIDE6IFRheGEgZGUgSW52ZXN0aW1lbnRvIChBenVsIEliTWFjcm8pDQogIGhjX2FkZF9zZXJpZXMoDQogICAgbmFtZSA9ICJUYXhhIGRlIEludmVzdGltZW50byAoRkJDRiAlIFBJQikiLA0KICAgIGRhdGEgPSBkZl9tYWNyb190YXhhcyRpbnZlc3RpbWVudG8sDQogICAgY29sb3IgPSBJQl9BWlVMX0JBU0UsDQogICAgbGluZVdpZHRoID0gMywNCiAgICB6SW5kZXggPSAyLA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IFRSVUUsIHJhZGl1cyA9IDQsIHN5bWJvbCA9ICJjaXJjbGUiKQ0KICApICU+JQ0KICANCiAgIyBTw6lyaWUgMjogVGF4YSBkZSBQb3VwYW7Dp2EgKEFtYXJlbG8gSWJNYWNybykNCiAgaGNfYWRkX3NlcmllcygNCiAgICBuYW1lID0gIlRheGEgZGUgUG91cGFuw6dhICglIFBJQikiLA0KICAgIGRhdGEgPSBkZl9tYWNyb190YXhhcyRwb3VwYW5jYSwNCiAgICBjb2xvciA9IElCX0FNQVJFTE8sDQogICAgbGluZVdpZHRoID0gMywNCiAgICB6SW5kZXggPSAyLA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IFRSVUUsIHJhZGl1cyA9IDQsIHN5bWJvbCA9ICJkaWFtb25kIikNCiAgKSAlPiUNCiAgDQogIGhjX3hBeGlzKA0KICAgIGNhdGVnb3JpZXMgPSBkZl9tYWNyb190YXhhcyRhbm8sDQogICAgZ3JpZExpbmVXaWR0aCA9IDEsDQogICAgZ3JpZExpbmVDb2xvciA9ICIjRjBGMEYwIiwNCiAgICBsaW5lQ29sb3IgPSBJQl9DSU5aQV9DTEFSTywNCiAgICB0aWNrQ29sb3IgPSBJQl9DSU5aQV9DTEFSTywNCiAgICBsYWJlbHMgPSBsaXN0KA0KICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMHB4IiksDQogICAgICByb3RhdGlvbiA9IC00NQ0KICAgICksDQogICAgcGxvdExpbmVzID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHZhbHVlID0gNiwgIyAyMDA2IChCb29tIGRlIENvbW1vZGl0aWVzKQ0KICAgICAgICBjb2xvciA9IElCX0NJTlpBX0NMQVJPLA0KICAgICAgICB3aWR0aCA9IDEuNSwNCiAgICAgICAgZGFzaFN0eWxlID0gIlNob3J0RGFzaCIsDQogICAgICAgIHpJbmRleCA9IDMNCiAgICAgICksDQogICAgICBsaXN0KA0KICAgICAgICB2YWx1ZSA9IDEzLCAjIDIwMTMgKFBpY28gZGUgSW52ZXN0aW1lbnRvKQ0KICAgICAgICBjb2xvciA9IElCX0NJTlpBX0NMQVJPLA0KICAgICAgICB3aWR0aCA9IDEuNSwNCiAgICAgICAgZGFzaFN0eWxlID0gIlNob3J0RGFzaCIsDQogICAgICAgIHpJbmRleCA9IDMNCiAgICAgICksDQogICAgICBsaXN0KA0KICAgICAgICB2YWx1ZSA9IDIwLCAjIDIwMjAgKENob3F1ZSBDT1ZJRCkNCiAgICAgICAgY29sb3IgPSBJQl9DSU5aQV9DTEFSTywNCiAgICAgICAgd2lkdGggPSAxLjUsDQogICAgICAgIGRhc2hTdHlsZSA9ICJEb3QiLA0KICAgICAgICB6SW5kZXggPSAzDQogICAgICApDQogICAgKQ0KICApICU+JQ0KICANCiAgaGNfeUF4aXMoDQogICAgdGl0bGUgPSBsaXN0KA0KICAgICAgdGV4dCA9ICIlIGRvIFBJQiIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sIGZvbnRTaXplID0gIjExcHgiKQ0KICAgICksDQogICAgbWluID0gMTAsDQogICAgbWF4ID0gMjQsDQogICAgdGlja0ludGVydmFsID0gMiwNCiAgICBncmlkTGluZUNvbG9yID0gIiNGMEYwRjAiLA0KICAgIGxpbmVDb2xvciA9IElCX0NJTlpBX0NMQVJPLA0KICAgIGxhYmVscyA9IGxpc3QoDQogICAgICBmb3JtYXQgPSAie3ZhbHVlOi4wZn0lIiwNCiAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiMTFweCIpDQogICAgKQ0KICApICU+JQ0KICANCiAgIyBBbm90YcOnw7VlcyBpbnN0aXR1Y2lvbmFpcyBkZSBjaWNsb3MgbWFjcm9lY29uw7RtaWNvcw0KICBoY19hbm5vdGF0aW9ucygNCiAgICBsaXN0KA0KICAgICAgbGFiZWxzID0gbGlzdCgNCiAgICAgICAgbGlzdCgNCiAgICAgICAgICBwb2ludCA9IGxpc3QoeCA9IDYsIHkgPSAyMC44LCB4QXhpcyA9IDAsIHlBeGlzID0gMCksDQogICAgICAgICAgdGV4dCA9ICI8Yj5Cb29tIGRlIENvbW1vZGl0aWVzPC9iPjxicj5TdXBlcsOhdml0IGRlIHBvdXBhbsOnYSIsDQogICAgICAgICAgYmFja2dyb3VuZENvbG9yID0gInJnYmEoMjU1LCAyNTUsIDI1NSwgMC45MikiLA0KICAgICAgICAgIGJvcmRlckNvbG9yID0gSUJfQU1BUkVMTywNCiAgICAgICAgICBib3JkZXJSYWRpdXMgPSA2LA0KICAgICAgICAgIGJvcmRlcldpZHRoID0gMSwNCiAgICAgICAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTBweCIsIGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPKQ0KICAgICAgICApLA0KICAgICAgICBsaXN0KA0KICAgICAgICAgIHBvaW50ID0gbGlzdCh4ID0gMTMsIHkgPSAyMi4wLCB4QXhpcyA9IDAsIHlBeGlzID0gMCksDQogICAgICAgICAgdGV4dCA9ICI8Yj5QaWNvIGRvIEludmVzdGltZW50bzwvYj48YnI+RkJDRiBhdGluZ2UgMjAsOSUgZG8gUElCIiwNCiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyKSIsDQogICAgICAgICAgYm9yZGVyQ29sb3IgPSBJQl9BWlVMX0JBU0UsDQogICAgICAgICAgYm9yZGVyUmFkaXVzID0gNiwNCiAgICAgICAgICBib3JkZXJXaWR0aCA9IDEsDQogICAgICAgICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEwcHgiLCBjb2xvciA9IElCX0NJTlpBX0VTQ1VSTykNCiAgICAgICAgKSwNCiAgICAgICAgbGlzdCgNCiAgICAgICAgICBwb2ludCA9IGxpc3QoeCA9IDI2LCB5ID0gMTcuNSwgeEF4aXMgPSAwLCB5QXhpcyA9IDApLA0KICAgICAgICAgIHRleHQgPSAiPGI+MjAyNiAoMcK6IFRyaSk8L2I+PGJyPkdhcCBkZSAxLDAgcC5wLiBkbyBQSUIiLA0KICAgICAgICAgIGJhY2tncm91bmRDb2xvciA9ICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTIpIiwNCiAgICAgICAgICBib3JkZXJDb2xvciA9IElCX0FaVUxfTUVESU8sDQogICAgICAgICAgYm9yZGVyUmFkaXVzID0gNiwNCiAgICAgICAgICBib3JkZXJXaWR0aCA9IDEsDQogICAgICAgICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEwcHgiLCBjb2xvciA9IElCX0NJTlpBX0VTQ1VSTykNCiAgICAgICAgKQ0KICAgICAgKQ0KICAgICkNCiAgKSAlPiUNCiAgDQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiVGF4YSBkZSBQb3VwYW7Dp2EgZSBUYXhhIGRlIEludmVzdGltZW50byBubyBCcmFzaWwgKDIwMDDigJMyMDI2KSIsDQogICAgYWxpZ24gPSAibGVmdCIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQVpVTF9CQVNFLCBmb250V2VpZ2h0ID0gImJvbGQiLCBmb250U2l6ZSA9ICIxOHB4IikNCiAgKSAlPiUNCiAgaGNfc3VidGl0bGUoDQogICAgdGV4dCA9ICJNw6lkaWFzIGFudWFpcyBjb21vIHByb3BvcsOnw6NvIGRvIFBJQiBub21pbmFsIHwgKjIwMjYgcmVmZXJlLXNlIGFvIDHCuiB0cmltZXN0cmUgfCDDgXJlYSBzb21icmVhZGE6IGRlc2NvbXBhc3NvIChTIOKIkiBJKSIsDQogICAgYWxpZ24gPSAibGVmdCIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCiAgDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICBjcm9zc2hhaXJzID0gVFJVRSwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSBJQl9CUkFOQ08sDQogICAgYm9yZGVyQ29sb3IgPSBJQl9DSU5aQV9DTEFSTywNCiAgICBib3JkZXJSYWRpdXMgPSA2LA0KICAgIHZhbHVlRGVjaW1hbHMgPSAyLA0KICAgIHZhbHVlU3VmZml4ID0gIiUgZG8gUElCIg0KICApICU+JQ0KICANCiAgaGNfbGVnZW5kKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgdmVydGljYWxBbGlnbiA9ICJib3R0b20iLA0KICAgIGxheW91dCA9ICJob3Jpem9udGFsIiwNCiAgICBpdGVtU3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQVpVTF9CQVNFLCBmb250V2VpZ2h0ID0gIm5vcm1hbCIsIGZvbnRTaXplID0gIjEycHgiKQ0KICApICU+JQ0KICANCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBJQkdFIOKAlCBDb250YXMgTmFjaW9uYWlzIFRyaW1lc3RyYWlzIChUYWJlbGEgMjA3MikuIEVsYWJvcmHDp8OjbyBwcsOzcHJpYSBJYk1hY3JvIEJILiIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sIGZvbnRTaXplID0gIjEwcHgiKQ0KICApICU+JQ0KICBoY19leHBvcnRpbmcoZW5hYmxlZCA9IFRSVUUpDQoNCmdyYWZpY29fcG91cGFuY2FfaW52ZXN0aW1lbnRvX3RheGFzDQpgYGANCg0KQSBtZWRpZGEgcXVlIG8gZ292ZXJubyBuZWNlc3NpdGEgZGUgY2FwaXRhbCBlIHJlY3Vyc29zIHBhcmEgcXVpdGFyIGTDrXZpZGEgYnJ1dGEsIGEgcHJpbmNpcGFsIG1lZGlkYSBwYXJhIGN1bXByaXIgdGFsIG9iamV0aXZvIMOpIGEgZW1pc3PDo28gZGUgdMOtdHVsb3MgcMO6YmxpY29zLCBwcm9tZXNzYXMgZGUgcGFnYW1lbnRvcyBmdXR1cm9zIHBhcmEgbyBpbnZlc3RpZG9yIHF1ZSBwYWdhIGhvamUgZSBpcsOhIHJlY2ViZXIgbyBwcmluY2lwYWwgbWFpcyBvcyBqdXJvcyBubyBmdXR1cm8uIA0KDQpPIHByb2JsZW1hIHNlIGVuY29udHJhIHF1YW5kbyBvcyB0w610dWxvcyB2ZW5jZW0sIG8gZ292ZXJubyBicmFzaWxlaXJvIGRldmUgaG9ucmFyIG8gcGFnYW1lbnRvLCBwb3LDqW0gbsOjbyB0ZW5kbyBzdXBlcsOhdml0LCDDqSBuZWNlc3PDoXJpbyBlbWl0aXIgbm92b3MgdMOtdHVsb3MgcGFyYSBwYWdhciBvcyBhbnRpZ29zLCBhbGdvIHF1ZSDDqSBvIGNlbsOhcmlvIGRvIEJyYXNpbCBuYSBtYWlvciBwYXJ0ZSBkbyB0ZW1wby4gVGFsIGNlbsOhcmlvLCDDqSBhIGZhbW9zYSBSb2xhZ2VtIGRhIETDrXZpZGEsIGUgY29tIG9zIGp1cm9zIG5vbWluYWlzIGVtIHRvcm5vIGRlIDklIGFvIGFubywgc29icmUgdW1hIGTDrXZpZGEgZGUgcXVhc2UgODIlIGRvIFBJQiwgZmF6IGNvbSBxdWUgYSBkw612aWRhIGF1bWVudGUgc2VtIG5lbmh1bWEgZGVzcGVzYSBub3ZhLCBwb2lzIG8gUElCIGNyZXNjZSBhaW5kYSBxdWUgZW0gdW0gcml0bW8gbWVub3IgYSBtYWlzIG91IG1lbm9zIDItMyUsIG8gcXVlIGZheiBjb20gcXVlIGEgZMOtdmlkYSBjcmVzw6dhIDYtNyBwb250b3MgcGVyY2VudHVhaXMgYSBjYWRhIGFub3MuICooR3LDoWZpY28gMTQpKiANCg0KTyBkw6lmaWNpdCBww7pibGljbyBkbyBSR1BTIHNlIGVuY29udHJhIGVtIHVtYSBkZXNwZXNhIHByaW3DoXJpYSBhbHTDrXNzaW1hIHF1ZSBvIGdvdmVybm8gbsOjbyBjb25zZWd1ZSBxdWl0YXIsIGUgY29tbyBvIGTDqWZpY2l0IHByaW3DoXJpbyBzb21lIG5vIHNlcnZpw6dvIGRhIGTDrXZpZGEsIG5vIHZhbG9yIG1haXMgcmVjZW50ZSAoLTEwLDc4JSksIGluZGljYW5kbyBxdWUgb3MgMzQ5IGJpbGjDtWVzIHZpbmRvcyBkbyBkw6lmaWNpdCBwcmV2aWRlbmNpw6FyaW8gdmlyYW0gdMOtdHVsb3MgcMO6YmxpY29zIG5vdm9zLCBxdWUgZ2VyYW0ganVyb3MsIHF1ZSBnZXJhbSBtYWlzIHTDrXR1bG9zLCBxdWUgZ2VyYW0ganVyb3MuIA0KDQoqKihHcsOhZmljbyAxNCkqKg0KDQpgYGB7cn0NCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIEdyw6FmaWNvOiBEaW7Dom1pY2EgRmlzY2FsIOKAlCBQcmltw6FyaW8sIEp1cm9zIE5vbWluYWlzIGUgRMOtdmlkYSBCcnV0YQ0KIyBJZGVudGlkYWRlIFZpc3VhbCBPZmljaWFsOiBQYWRyw6NvIEliTWFjcm8gQkggKE1hbnVhbCBkZSBNYXJjYSkNCiMgRm9udGU6IEJhbmNvIENlbnRyYWwgZG8gQnJhc2lsIChCQ0IvU0dTKSDigJQgU8OpcmllcyA1Nzg0LCA1MzMxIGUgMTM3NjINCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCiMgUHJldmVuw6fDo28gcGFyYSBjYW1pbmhvcyB0ZW1wb3LDoXJpb3Mgbm8gV2luZG93cyBjb20gYWNlbnR1YcOnw6NvDQpkaXIuY3JlYXRlKCJDOi9SdGVtcCIsIHNob3dXYXJuaW5ncyA9IEZBTFNFKQ0KU3lzLnNldGVudihUTVBESVIgPSAiQzovUnRlbXAiLCBUTVAgPSAiQzovUnRlbXAiLCBURU1QID0gIkM6L1J0ZW1wIikNCg0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHJiY2IpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KDQojIOKUgOKUgCAxLiBERUZJTknDh8ODTyBEQSBQQUxFVEEgSU5TVElUVUNJT05BTCAoR1VJQSBERSBNQVJDQSkg4pSA4pSA4pSA4pSA4pSA4pSADQpJQl9BTUFSRUxPICAgICAgPC0gIiNGRkI4MUYiICAjIETDrXZpZGEgQnJ1dGEgKCUgUElCKSAvIERlc3RhcXVlcw0KSUJfQVpVTF9CQVNFICAgIDwtICIjMDIwMjNDIiAgIyBSZXN1bHRhZG8gUHJpbcOhcmlvIC8gVMOtdHVsb3MgLyBCYXNlIGluc3RpdHVjaW9uYWwNCklCX0JSQU5DTyAgICAgICA8LSAiI0ZGRkZGRiIgICMgRnVuZG8gaW5zdGl0dWNpb25hbA0KSUJfQVpVTF9NRURJTyAgIDwtICIjMDAyQzVFIiAgIyBKdXJvcyBOb21pbmFpcyBQYWdvcw0KSUJfQVpVTF9DTEFSTyAgIDwtICIjNkI4QkE0IiAgIyBEw6lmaWNpdCBOb21pbmFsIFRvdGFsIC8gQXBvaW8gZ3LDoWZpY28NCklCX0NJTlpBX0VTQ1VSTyA8LSAiIzNBM0EzQSIgICMgVGV4dG9zLCBlaXhvcyBlIHN1YnTDrXR1bG9zDQpJQl9DSU5aQV9DTEFSTyAgPC0gIiNBNkE2QTYiICAjIExpbmhhcyBkZSBncmFkZSwgZWl4b3MgZSBjcsOpZGl0b3MNCg0KIyDilIDilIAgMi4gRVhUUkHDh8ODTyBFIFRSQVRBTUVOVE8gRE9TIERBRE9TIChCQ0IgLyBTR1MpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KIyBTw6lyaWVzIEJDQiAoYWN1bXVsYWRhcyBlbSAxMiBtZXNlcyBjb21vICUgZG8gUElCKToNCiMg4oCiIDU3ODQgIC0+IFJlc3VsdGFkbyBQcmltw6FyaW8gKCUgZG8gUElCKQ0KIyDigKIgNTMzMSAgLT4gSnVyb3MgTm9taW5haXMgKCUgZG8gUElCKQ0KIyDigKIgMTM3NjIgLT4gRMOtdmlkYSBCcnV0YSBkbyBHb3Zlcm5vIEdlcmFsIC0gREJHRyAoJSBkbyBQSUIpDQoNCnNlcmllX3ByaW1hcmlvIDwtIHJiY2I6OmdldF9zZXJpZXMoNTc4NCwgIHN0YXJ0X2RhdGUgPSAiMjAwMy0wMS0wMSIpICU+JSByZW5hbWUocHJpbWFyaW8gPSAyKQ0Kc2VyaWVfanVyb3MgICAgPC0gcmJjYjo6Z2V0X3Nlcmllcyg1MzMxLCAgc3RhcnRfZGF0ZSA9ICIyMDAzLTAxLTAxIikgJT4lIHJlbmFtZShqdXJvcyAgICA9IDIpDQpzZXJpZV9kaXZpZGEgICA8LSByYmNiOjpnZXRfc2VyaWVzKDEzNzYyLCBzdGFydF9kYXRlID0gIjIwMDMtMDEtMDEiKSAlPiUgcmVuYW1lKGRpdmlkYSAgID0gMikNCg0KIyBDb25zb2xpZGHDp8OjbyBkYXMgc8OpcmllcyBwb3IgZGF0YQ0KZGZfZmlzY2FsIDwtIHNlcmllX3ByaW1hcmlvICU+JQ0KICBpbm5lcl9qb2luKHNlcmllX2p1cm9zLCAgYnkgPSAiZGF0ZSIpICU+JQ0KICBpbm5lcl9qb2luKHNlcmllX2RpdmlkYSwgYnkgPSAiZGF0ZSIpICU+JQ0KICAjIEFtb3N0cmFnZW0gc2VtZXN0cmFsIChqdW5obyBlIGRlemVtYnJvKSBwYXJhIG90aW1pemFyIGEgdmlzdWFsaXphw6fDo28gZGFzIGJhcnJhcw0KICBmaWx0ZXIoZm9ybWF0KGRhdGUsICIlbSIpICVpbiUgYygiMDYiLCAiMTIiKSkgJT4lDQogIG11dGF0ZSgNCiAgICBwZXJpb2RvX2xhYmVsID0gZm9ybWF0KGRhdGUsICIlYi8leSIpLA0KICAgIHJlc19wcmltYXJpbyAgPSByb3VuZChwcmltYXJpbywgMiksDQogICAganVyb3NfcGFnb3MgICA9IHJvdW5kKGp1cm9zLCAyKSwNCiAgICAjIETDqWZpY2l0IE5vbWluYWwgVG90YWwgPSBKdXJvcyAtIFByaW3DoXJpbyAobmVjZXNzaWRhZGUgZGUgZmluYW5jaWFtZW50bykNCiAgICBkZWZfbm9taW5hbCAgID0gcm91bmQoanVyb3NfcGFnb3MgLSByZXNfcHJpbWFyaW8sIDIpLA0KICAgIGRpdmlkYV9waWIgICAgPSByb3VuZChkaXZpZGEsIDEpDQogICkgJT4lDQogIGZpbHRlcighaXMubmEocmVzX3ByaW1hcmlvKSwgIWlzLm5hKGp1cm9zX3BhZ29zKSwgIWlzLm5hKGRpdmlkYV9waWIpKQ0KDQojIOKUgOKUgCAzLiBSRU5ERVJJWkHDh8ODTyBETyBHUsOBRklDTyAoRFVQTE8gRUlYTykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQpncmFmaWNvX2NpY2xvX2RpdmlkYSA8LSBoaWdoY2hhcnQoKSAlPiUNCiAgaGNfY2hhcnQoDQogICAgYmFja2dyb3VuZENvbG9yID0gSUJfQlJBTkNPLA0KICAgIHN0eWxlID0gbGlzdChmb250RmFtaWx5ID0gIkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiKQ0KICApICU+JQ0KICANCiAgIyDilIDilIAgRWl4byBZMSAoRXNxdWVyZG8pOiBGbHV4b3MgRmlzY2FpcyAoJSBkbyBQSUIpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KICBoY195QXhpc19tdWx0aXBsZXMoDQogICAgbGlzdCgNCiAgICAgIHRpdGxlID0gbGlzdCgNCiAgICAgICAgdGV4dCA9ICJGbHV4byBBY3VtdWxhZG8gZW0gMTIgTWVzZXMgKCUgZG8gUElCKSIsDQogICAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiMTFweCIpDQogICAgICApLA0KICAgICAgbWluID0gLTEwLA0KICAgICAgbWF4ID0gMTYsDQogICAgICB0aWNrSW50ZXJ2YWwgPSA0LA0KICAgICAgZ3JpZExpbmVDb2xvciA9ICIjRjBGMEYwIiwNCiAgICAgIGxpbmVDb2xvciA9IElCX0NJTlpBX0NMQVJPLA0KICAgICAgbGFiZWxzID0gbGlzdCgNCiAgICAgICAgZm9ybWF0ID0gInt2YWx1ZTouMGZ9JSIsDQogICAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiMTFweCIpDQogICAgICApLA0KICAgICAgcGxvdExpbmVzID0gbGlzdCgNCiAgICAgICAgbGlzdCh2YWx1ZSA9IDAsIHdpZHRoID0gMS41LCBjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgekluZGV4ID0gNCkNCiAgICAgICkNCiAgICApLA0KICAgICMg4pSA4pSAIEVpeG8gWTIgKERpcmVpdG8pOiBFc3RvcXVlIGRhIETDrXZpZGEgQnJ1dGEgKCUgZG8gUElCKSDilIDilIANCiAgICBsaXN0KA0KICAgICAgdGl0bGUgPSBsaXN0KA0KICAgICAgICB0ZXh0ID0gIkTDrXZpZGEgQnJ1dGEgZG8gR292ZXJubyBHZXJhbCAoJSBkbyBQSUIpIiwNCiAgICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQU1BUkVMTywgZm9udFNpemUgPSAiMTFweCIsIGZvbnRXZWlnaHQgPSAiYm9sZCIpDQogICAgICApLA0KICAgICAgbWluID0gNDAsDQogICAgICBtYXggPSAxMDAsDQogICAgICB0aWNrSW50ZXJ2YWwgPSAxMCwNCiAgICAgIG9wcG9zaXRlID0gVFJVRSwNCiAgICAgIGdyaWRMaW5lV2lkdGggPSAwLA0KICAgICAgbGFiZWxzID0gbGlzdCgNCiAgICAgICAgZm9ybWF0ID0gInt2YWx1ZTouMGZ9JSIsDQogICAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiMTFweCIpDQogICAgICApDQogICAgKQ0KICApICU+JQ0KICANCiAgIyDilIDilIAgU8OpcmllIDE6IFJlc3VsdGFkbyBQcmltw6FyaW8gKCsgU3VwZXLDoXZpdCAvIC0gRMOpZmljaXQpIOKUgOKUgOKUgA0KICBoY19hZGRfc2VyaWVzKA0KICAgIG5hbWUgPSAiUmVzdWx0YWRvIFByaW3DoXJpbyAoKyBTdXBlcsOhdml0IC8gLSBEw6lmaWNpdCkiLA0KICAgIHR5cGUgPSAiY29sdW1uIiwNCiAgICB5QXhpcyA9IDAsDQogICAgZGF0YSA9IGRmX2Zpc2NhbCRyZXNfcHJpbWFyaW8sDQogICAgY29sb3IgPSBJQl9BWlVMX0JBU0UsDQogICAgc3RhY2tpbmcgPSAibm9ybWFsIiwNCiAgICB6SW5kZXggPSAyDQogICkgJT4lDQogIA0KICAjIOKUgOKUgCBTw6lyaWUgMjogSnVyb3MgTm9taW5haXMgUGFnb3MgKEPDs2RpZ28gNTMzMSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQogIGhjX2FkZF9zZXJpZXMoDQogICAgbmFtZSA9ICJKdXJvcyBOb21pbmFpcyBQYWdvcyAoU2VydmnDp28gZGEgRMOtdmlkYSkiLA0KICAgIHR5cGUgPSAiY29sdW1uIiwNCiAgICB5QXhpcyA9IDAsDQogICAgZGF0YSA9IC1kZl9maXNjYWwkanVyb3NfcGFnb3MsDQogICAgY29sb3IgPSBJQl9BWlVMX01FRElPLA0KICAgIHN0YWNraW5nID0gIm5vcm1hbCIsDQogICAgekluZGV4ID0gMg0KICApICU+JQ0KICANCiAgIyDilIDilIAgU8OpcmllIDM6IETDqWZpY2l0IE5vbWluYWwgVG90YWwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQogIGhjX2FkZF9zZXJpZXMoDQogICAgbmFtZSA9ICJEw6lmaWNpdCBOb21pbmFsIFRvdGFsICglIFBJQikiLA0KICAgIHR5cGUgPSAibGluZSIsDQogICAgeUF4aXMgPSAwLA0KICAgIGRhdGEgPSAtZGZfZmlzY2FsJGRlZl9ub21pbmFsLA0KICAgIGNvbG9yID0gSUJfQVpVTF9DTEFSTywNCiAgICBsaW5lV2lkdGggPSAyLjUsDQogICAgZGFzaFN0eWxlID0gIlNob3J0RGFzaCIsDQogICAgekluZGV4ID0gMywNCiAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBUUlVFLCByYWRpdXMgPSAzLCBzeW1ib2wgPSAic3F1YXJlIikNCiAgKSAlPiUNCiAgDQogICMg4pSA4pSAIFPDqXJpZSA0OiBEw612aWRhIEJydXRhIOKAlCBFaXhvIFNlY3VuZMOhcmlvIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KICBoY19hZGRfc2VyaWVzKA0KICAgIG5hbWUgPSAiRMOtdmlkYSBCcnV0YSBEQkdHICglIGRvIFBJQikgW0VpeG8gRGlyLl0iLA0KICAgIHR5cGUgPSAibGluZSIsDQogICAgeUF4aXMgPSAxLA0KICAgIGRhdGEgPSBkZl9maXNjYWwkZGl2aWRhX3BpYiwNCiAgICBjb2xvciA9IElCX0FNQVJFTE8sDQogICAgbGluZVdpZHRoID0gMy41LA0KICAgIHpJbmRleCA9IDQsDQogICAgbWFya2VyID0gbGlzdCgNCiAgICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgICAgcmFkaXVzID0gNCwNCiAgICAgIHN5bWJvbCA9ICJjaXJjbGUiLA0KICAgICAgZmlsbENvbG9yID0gSUJfQU1BUkVMTw0KICAgICkNCiAgKSAlPiUNCiAgDQogICMg4pSA4pSAIENvbmZpZ3VyYcOnw6NvIGRvIEVpeG8gWCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCiAgaGNfeEF4aXMoDQogICAgY2F0ZWdvcmllcyA9IGRmX2Zpc2NhbCRwZXJpb2RvX2xhYmVsLA0KICAgIGdyaWRMaW5lV2lkdGggPSAwLA0KICAgIGxpbmVDb2xvciA9IElCX0NJTlpBX0NMQVJPLA0KICAgIHRpY2tDb2xvciA9IElCX0NJTlpBX0NMQVJPLA0KICAgIGxhYmVscyA9IGxpc3QoDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sIGZvbnRTaXplID0gIjEwcHgiKSwNCiAgICAgIHJvdGF0aW9uID0gLTQ1DQogICAgKSwNCiAgICBwbG90TGluZXMgPSBsaXN0KA0KICAgICAgbGlzdCgNCiAgICAgICAgdmFsdWUgPSB3aGljaChkZl9maXNjYWwkcGVyaW9kb19sYWJlbCA9PSAiZGV6LzE0IiksDQogICAgICAgIGNvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sDQogICAgICAgIHdpZHRoID0gMS41LA0KICAgICAgICBkYXNoU3R5bGUgPSAiU2hvcnREYXNoIiwNCiAgICAgICAgekluZGV4ID0gNSwNCiAgICAgICAgbGFiZWwgPSBsaXN0KA0KICAgICAgICAgIHRleHQgPSAiSW52ZXJzw6NvIEZpc2NhbCAoMjAxNCkiLA0KICAgICAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiOXB4IiksDQogICAgICAgICAgdmVydGljYWxBbGlnbiA9ICJ0b3AiLA0KICAgICAgICAgIHkgPSAxNQ0KICAgICAgICApDQogICAgICApDQogICAgKQ0KICApICU+JQ0KICANCiAgIyDilIDilIAgVMOtdHVsb3MgZSBTdWJ0w610dWxvcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCiAgaGNfdGl0bGUoDQogICAgdGV4dCA9ICJPIENpY2xvIGRhIETDrXZpZGEgUMO6YmxpY2E6IFJlc3VsdGFkbyBQcmltw6FyaW8sIEp1cm9zIGUgRMOtdmlkYSBCcnV0YSAoMjAwM+KAkzIwMjYpIiwNCiAgICBhbGlnbiA9ICJsZWZ0IiwNCiAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9BWlVMX0JBU0UsIGZvbnRXZWlnaHQgPSAiYm9sZCIsIGZvbnRTaXplID0gIjE4cHgiKQ0KICApICU+JQ0KICBoY19zdWJ0aXRsZSgNCiAgICB0ZXh0ID0gIkZsdXhvcyBmaXNjYWlzIGFjdW11bGFkb3MgZW0gMTIgbWVzZXMgKCUgUElCKSB2cy4gREJHRyB8IFPDqXJpZXMgQkNCIDU3ODQsIDUzMzEgZSAxMzc2MiIsDQogICAgYWxpZ24gPSAibGVmdCIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCiAgDQogICMg4pSA4pSAIFRvb2x0aXAgQ29tcGFydGlsaGFkbyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCiAgaGNfdG9vbHRpcCgNCiAgICBzaGFyZWQgPSBUUlVFLA0KICAgIGNyb3NzaGFpcnMgPSBUUlVFLA0KICAgIGJhY2tncm91bmRDb2xvciA9IElCX0JSQU5DTywNCiAgICBib3JkZXJDb2xvciA9IElCX0NJTlpBX0NMQVJPLA0KICAgIGJvcmRlclJhZGl1cyA9IDYsDQogICAgdmFsdWVEZWNpbWFscyA9IDIsDQogICAgdmFsdWVTdWZmaXggPSAiJSBkbyBQSUIiDQogICkgJT4lDQogIA0KICAjIOKUgOKUgCBMZWdlbmRhIGUgQ3LDqWRpdG9zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KICBoY19sZWdlbmQoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsDQogICAgbGF5b3V0ID0gImhvcml6b250YWwiLA0KICAgIGl0ZW1TdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9BWlVMX0JBU0UsIGZvbnRXZWlnaHQgPSAibm9ybWFsIiwgZm9udFNpemUgPSAiMTJweCIpDQogICkgJT4lDQogIGhjX2NyZWRpdHMoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgdGV4dCA9ICJGb250ZTogQmFuY28gQ2VudHJhbCBkbyBCcmFzaWwgKFNHUyBTw6lyaWVzIDU3ODQsIDUzMzEgZSAxMzc2MikuIEVsYWJvcmHDp8OjbyBwcsOzcHJpYSBJYk1hY3JvIEJILiIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfQ0xBUk8sIGZvbnRTaXplID0gIjEwcHgiKQ0KICApICU+JQ0KICBoY19leHBvcnRpbmcoZW5hYmxlZCA9IFRSVUUpDQoNCmdyYWZpY29fY2ljbG9fZGl2aWRhDQpgYGANCg0KTm8gZmluYWwgZGUgYW7DoWxpc2UsIMOpIGludGVyZXNzYW50ZSBjb21lbnRhciBzb2JyZSBlc3NlIG1lc21vIGZlbsO0bWVubyBkZSB0cmFuc2nDp8OjbyBkZW1vZ3LDoWZpY2EgcXVlIG9jb3JyZSBlbSBvdXRybyBwYcOtcyBkZSBmb3JtYSBtdWl0byBzaW1pbGFyIHBvcsOpbSBjb20gdW0gcmVzdWx0YWRvIGZpbmFsIHF1ZSBkaWZlcmUgZGEgcmVhbGlkYWRlIGJyYXNpbGVpcmEuIE8gSmFww6NvIHBhc3NvdSBwb3IgdW1hIGRpbsOibWljYSBkZSBhdW1lbnRvIGRvIG7Dum1lcm8gZGUgaWRvc29zIGRlIHVtYSBmb3JtYSBhaW5kYSBtYWlzIHNldmVyYSBlIGltcGFjdGFudGUsIGhvamUgZW0gZGlhIG8gcGHDrXMgw6kgbyBsw61kZXIgbXVuZGlhbCBlbSBlbnZlbGhlY2ltZW50byBwb3B1bGFjaW9uYWwgdG90YWxpemFuZG8gY2VyY2EgZGUgMzYgbWlsaMO1ZXMgZGUgcGVzc29hcyBpZG9zYXMgbm8gcGHDrXMuIA0KDQpBIHBvcHVsYcOnw6NvIGRvIEphcMOjbyBlcmEgZGUgODYsNCBtaWxow7VlcyBkZSBoYWJpdGFudGVzIGVtIDE5NTAsIHNlbmRvIDMwLDQgbWlsaMO1ZXMgZGUgam92ZW5zIGRlIDAtMTQgYW5vcyAoMzUsMiUgZG8gdG90YWwpLCAxMyBtaWxow7VlcyBkZSBwZXNzb2FzIGRlIDUwKyAoMTUlIGRvIHRvdGFsKSwgNiw2IG1pbGjDtWVzIGRlIDYwKyAoNyw3JSBkbyB0b3RhbCkgZSAzODkgbWlsIGlkb3NvcyBkZSA4MCsgKDAsNSUgZG8gdG90YWwpLiBFc3RlcyBuw7ptZXJvcyBtdWRhcmFtIHN1YnN0YW5jaWFsbWVudGUgYXTDqSAyMDI0LCBhbm8gZW0gcXVlIGEgcG9wdWxhw6fDo28gdG90YWwgamFwb25lc2EgY2hlZ291IGEgMTIzLDggbWlsaMO1ZXMgZGUgaGFiaXRhbnRlcywgc2VuZG8gMTQsMiBtaWxow7VlcyBkZSBqb3ZlbnMgZGUgMC0xNCBhbm9zICgxMSw0JSksIDYyIG1pbGjDtWVzIGRlIHBlc3NvYXMgZGUgNTArICg1MCUpLCA0NCw1JSBkZSBpZG9zb3MgZGUgNjArICgzNSw5JSkgZSAxMywxIG1pbGjDtWVzIGRlIGlkb3NvcyBkZSA4MCsgKDEwLDYlKS4gUG9ydGFudG8sIGFzIHBlc3NvYXMgZGUgNTAgYW5vcyBlIG1haXMgZGUgaWRhZGUgasOhIHJlcHJlc2VudGFtIG1ldGFkZSBkYSBwb3B1bGHDp8OjbyBqYXBvbmVzYSBlIGEgcHJvcG9yw6fDo28gZGUgaWRvc29zIGRldmUgY29udGludWFyIGNyZXNjZW5kbyBhbyBsb25nbyBkbyBzw6ljdWxvIFhYSS4NCg0KRW50cmV0YW50bywgbyBwYcOtcyBhc2nDoXRpY28gbsOjbyBjb252aXZlIGNvbSBwcm9ibGVtYXMgcmVsYWNpb25hZGFzIGEgZMOtdmlkYSBjb20gZ3JhbmRlIGZyZXF1w6puY2lhIHNlbWVsaGFudGUgYW8gQnJhc2lsLiBBcGVzYXIgZG8gSmFww6NvIHRlciBlbnZlbGhlY2lkbyBhbnRlcyBxdWUgYSBwb3B1bGHDp8OjbyBicmFzaWxlaXJhIGUgYWN1bXVsb3UgdW1hIGVub3JtZSBkw612aWRhIGRlIHF1YXNlIDI1MCUgZG8gUElCLCBmb2kgcG9zc8OtdmVsIHVtYSBzdXN0ZW50YcOnw6NvIGRhIGTDrXZpZGEgZGV2aWRvIGFvIGp1cm8gcmVhbCBuZWdhdGl2byBvdSBwcmF0aWNhbWVudGUgemVybyBlIGNvbSB1bWEgYWx0YSBwb3B1cGFuw6dhIGRvbcOpc3RpY2EsIG8gcXVlIGFycmVmZWNldSBvcyB0w610dWxvcywgZmF6ZW5kbyBvIGN1c3RvIGRhIGTDrXZpZGEgc2VyIG3DrW5pbW8sIGp1c3RhbWVudGUgbyBjYW1pbmhvIGludmVyc28gZG8gQnJhc2lsLiAqKEdyw6FmaWNvIDE1KSoNCg0KKiooR3LDoWZpY28gMTUpKioNCg0KYGBge3J9DQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyBHcsOhZmljbzogVGF4YSBkZSBKdXJvcyBSZWFsIOKAlCBCcmFzaWwgdnMuIEphcMOjbyAoMjAwMOKAkzIwMjYpDQojIElkZW50aWRhZGUgVmlzdWFsIE9maWNpYWw6IFBhZHLDo28gSWJNYWNybyBCSCAoTWFudWFsIGRlIE1hcmNhKQ0KIyBGb250ZXM6IEJDQiAoU0dTKSwgQmFuayBvZiBKYXBhbiAoQm9KKSBlIEZSRUQgKFN0LiBMb3VpcyBGZWQpDQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQojIFByZXZlbsOnw6NvIHBhcmEgY2FtaW5ob3MgdGVtcG9yw6FyaW9zIG5vIFdpbmRvd3MgY29tIGFjZW50dWHDp8Ojbw0KZGlyLmNyZWF0ZSgiQzovUnRlbXAiLCBzaG93V2FybmluZ3MgPSBGQUxTRSkNClN5cy5zZXRlbnYoVE1QRElSID0gIkM6L1J0ZW1wIiwgVE1QID0gIkM6L1J0ZW1wIiwgVEVNUCA9ICJDOi9SdGVtcCIpDQoNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KEdldEJDQkRhdGEpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KDQojIOKUgOKUgCAxLiBERUZJTknDh8ODTyBEQSBQQUxFVEEgSU5TVElUVUNJT05BTCAoR1VJQSBERSBNQVJDQSkg4pSA4pSA4pSA4pSA4pSA4pSADQpJQl9BTUFSRUxPICAgICAgPC0gIiNGRkI4MUYiICAjIEphcMOjbyAoSnVyb3MgUmVhaXMpIC8gRGVzdGFxdWVzDQpJQl9BWlVMX0JBU0UgICAgPC0gIiMwMjAyM0MiICAjIEJyYXNpbCAoSnVyb3MgUmVhaXMpIC8gVMOtdHVsb3MgLyBCYXNlDQpJQl9CUkFOQ08gICAgICAgPC0gIiNGRkZGRkYiICAjIEZ1bmRvIGluc3RpdHVjaW9uYWwNCklCX0FaVUxfTUVESU8gICA8LSAiIzAwMkM1RSIgICMgQXBvaW8gZ3LDoWZpY28gaW5zdGl0dWNpb25hbA0KSUJfQVpVTF9DTEFSTyAgIDwtICIjNkI4QkE0IiAgIyBEaWZlcmVuY2lhbCBkZSBKdXJvcyAvIFNwcmVhZCAow4FyZWEgU29tYnJlYWRhKQ0KSUJfQ0lOWkFfRVNDVVJPIDwtICIjM0EzQTNBIiAgIyBUZXh0b3MsIGVpeG9zIGUgc3VidMOtdHVsb3MNCklCX0NJTlpBX0NMQVJPICA8LSAiI0E2QTZBNiIgICMgTGluaGFzIGRlIGdyYWRlLCBlaXhvcyBlIGNyw6lkaXRvcw0KDQojIOKUgOKUgCAyLiBCQVNFIERFIERBRE9TOiBCUkFTSUwgKFNFTElDICYgSVBDQSBWSUEgQkNCKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCnNlbGljX3JhdyA8LSBnYmNiZF9nZXRfc2VyaWVzKGlkID0gNDE4OSwgIGZpcnN0LmRhdGUgPSBhcy5EYXRlKCIyMDAwLTAxLTAxIiksIGxhc3QuZGF0ZSA9IFN5cy5EYXRlKCkpDQppcGNhX3JhdyAgPC0gZ2JjYmRfZ2V0X3NlcmllcyhpZCA9IDEzNTIyLCBmaXJzdC5kYXRlID0gYXMuRGF0ZSgiMjAwMC0wMS0wMSIpLCBsYXN0LmRhdGUgPSBTeXMuRGF0ZSgpKQ0KDQpzZWxpY19tIDwtIHNlbGljX3JhdyAlPiUNCiAgbXV0YXRlKGFub19tZXMgPSBmbG9vcl9kYXRlKHJlZi5kYXRlLCAibW9udGgiKSkgJT4lDQogIGdyb3VwX2J5KGFub19tZXMpICU+JQ0KICBzdW1tYXJpc2Uoc2VsaWMgPSBtZWFuKHZhbHVlLCBuYS5ybSA9IFRSVUUpLCAuZ3JvdXBzID0gImRyb3AiKQ0KDQppcGNhX20gPC0gaXBjYV9yYXcgJT4lDQogIG11dGF0ZShhbm9fbWVzID0gZmxvb3JfZGF0ZShyZWYuZGF0ZSwgIm1vbnRoIikpICU+JQ0KICBzZWxlY3QoYW5vX21lcywgaXBjYSA9IHZhbHVlKQ0KDQpiciA8LSBzZWxpY19tICU+JQ0KICBpbm5lcl9qb2luKGlwY2FfbSwgYnkgPSAiYW5vX21lcyIpICU+JQ0KICBtdXRhdGUoDQogICAgcmVhbF9yYXRlID0gKCgxICsgc2VsaWMgLyAxMDApIC8gKDEgKyBpcGNhIC8gMTAwKSAtIDEpICogMTAwLA0KICAgIHllYXIgICAgICA9IHllYXIoYW5vX21lcykNCiAgKSAlPiUNCiAgZmlsdGVyKHllYXIgPj0gMjAwMCwgeWVhciA8PSAyMDI2KSAlPiUNCiAgZ3JvdXBfYnkoeWVhcikgJT4lDQogIHN1bW1hcmlzZShicmF6aWxfcmVhbCA9IHJvdW5kKG1lYW4ocmVhbF9yYXRlLCBuYS5ybSA9IFRSVUUpLCAyKSwgLmdyb3VwcyA9ICJkcm9wIikNCg0KIyDilIDilIAgMy4gQkFTRSBERSBEQURPUzogSkFQw4NPIChUQVhBIE5PTUlOQUwgQm9KICsgQ1BJIEZSRUQpIOKUgOKUgOKUgOKUgOKUgA0KanBfcmF0ZV9yYXcgPC0gcmVhZC5jc3YoDQogICJDOi9Vc2Vycy9Kb8OjbyBQZWRyby9Eb3dubG9hZHMvZm0wMl9tXzFfZW4uY3N2IiwNCiAgc2tpcCA9IDksIGhlYWRlciA9IEZBTFNFLCBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UNCikNCmNvbG5hbWVzKGpwX3JhdGVfcmF3KSA8LSBjKCJkYXRlX3N0ciIsICJlbmRfb2ZfbW9udGgiLCAiYXZlcmFnZSIpDQoNCmpwX3JhdGUgPC0ganBfcmF0ZV9yYXcgJT4lDQogIG11dGF0ZSgNCiAgICBkYXRlICA9IGFzLkRhdGUocGFzdGUwKGRhdGVfc3RyLCAiLzAxIiksIGZvcm1hdCA9ICIlWS8lbS8lZCIpLA0KICAgIHZhbHVlID0gc3VwcHJlc3NXYXJuaW5ncyhhcy5udW1lcmljKGF2ZXJhZ2UpKQ0KICApICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGRhdGUpLCAhaXMubmEodmFsdWUpKSAlPiUNCiAgc2VsZWN0KGRhdGUsIHZhbHVlKQ0KDQp1bHRpbW9fY3N2IDwtIG1heChqcF9yYXRlJGRhdGUpDQppZiAodWx0aW1vX2NzdiA8IGFzLkRhdGUoIjIwMjYtMDgtMDEiKSkgew0KICBkYXRhc19zdXAgPC0gc2VxKGZsb29yX2RhdGUodWx0aW1vX2NzdiAlbSslIG1vbnRocygxKSwgIm1vbnRoIiksDQogICAgICAgICAgICAgICAgICAgYXMuRGF0ZSgiMjAyNi0xMi0wMSIpLCBieSA9ICJtb250aCIpDQogIHRheGFzX3N1cCA8LSBjYXNlX3doZW4oDQogICAgZGF0YXNfc3VwIDwgYXMuRGF0ZSgiMjAyNC0wMy0wMSIpIH4gMC4wMCwNCiAgICBkYXRhc19zdXAgPCBhcy5EYXRlKCIyMDI0LTA3LTAxIikgfiAwLjEwLA0KICAgIGRhdGFzX3N1cCA8IGFzLkRhdGUoIjIwMjUtMDEtMDEiKSB+IDAuMjUsDQogICAgZGF0YXNfc3VwIDwgYXMuRGF0ZSgiMjAyNi0wMS0wMSIpIH4gMC41MCwNCiAgICBkYXRhc19zdXAgPCBhcy5EYXRlKCIyMDI2LTA3LTAxIikgfiAwLjc1LA0KICAgIFRSVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+IDEuMDANCiAgKQ0KICBqcF9yYXRlIDwtIGJpbmRfcm93cyhqcF9yYXRlLCB0aWJibGUoZGF0ZSA9IGRhdGFzX3N1cCwgdmFsdWUgPSB0YXhhc19zdXApKQ0KfQ0KDQpqcF9jcGlfcmF3IDwtIHJlYWQuY3N2KA0KICAiaHR0cHM6Ly9mcmVkLnN0bG91aXNmZWQub3JnL2dyYXBoL2ZyZWRncmFwaC5jc3Y/aWQ9SlBOQ1BJQUxMTUlOTUVJIiwNCiAgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFDQopDQpjb2xuYW1lcyhqcF9jcGlfcmF3KSA8LSBjKCJkYXRlIiwgInZhbHVlIikNCmpwX2NwaV9yYXckZGF0ZSAgPC0gYXMuRGF0ZShqcF9jcGlfcmF3JGRhdGUpDQpqcF9jcGlfcmF3JHZhbHVlIDwtIHN1cHByZXNzV2FybmluZ3MoYXMubnVtZXJpYyhqcF9jcGlfcmF3JHZhbHVlKSkNCg0KanBfY3BpIDwtIGpwX2NwaV9yYXcgJT4lDQogIGZpbHRlcighaXMubmEodmFsdWUpKSAlPiUNCiAgYXJyYW5nZShkYXRlKSAlPiUNCiAgbXV0YXRlKGNwaV95b3kgPSAodmFsdWUgLyBsYWcodmFsdWUsIDEyKSAtIDEpICogMTAwKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShjcGlfeW95KSkNCg0KY3BpX2FudWFsX3N1cCA8LSB0aWJibGUoDQogIHllYXIgICAgPSBjKDIwMjMsIDIwMjQsIDIwMjUsIDIwMjYpLA0KICBjcGlfeW95ID0gYygzLjI3LCAyLjUwLCAyLjQwLCAyLjIwKQ0KKQ0KDQpqcF9tZW5zYWwgPC0ganBfcmF0ZSAlPiUNCiAgaW5uZXJfam9pbihqcF9jcGkgJT4lIHNlbGVjdChkYXRlLCBjcGlfeW95KSwgYnkgPSAiZGF0ZSIpICU+JQ0KICBtdXRhdGUoDQogICAgcmVhbF9yYXRlID0gKCgxICsgdmFsdWUgLyAxMDApIC8gKDEgKyBjcGlfeW95IC8gMTAwKSAtIDEpICogMTAwLA0KICAgIHllYXIgICAgICA9IHllYXIoZGF0ZSkNCiAgKSAlPiUNCiAgZmlsdGVyKHllYXIgPj0gMjAwMCwgeWVhciA8PSAyMDI2KSAlPiUNCiAgZ3JvdXBfYnkoeWVhcikgJT4lDQogIHN1bW1hcmlzZShqYXBhbl9yZWFsID0gcm91bmQobWVhbihyZWFsX3JhdGUsIG5hLnJtID0gVFJVRSksIDIpLCAuZ3JvdXBzID0gImRyb3AiKQ0KDQphbm9zX2ZhbHRhbnRlcyA8LSBjcGlfYW51YWxfc3VwICU+JQ0KICBmaWx0ZXIoISh5ZWFyICVpbiUganBfbWVuc2FsJHllYXIpKSAlPiUNCiAgbGVmdF9qb2luKA0KICAgIGpwX3JhdGUgJT4lDQogICAgICBtdXRhdGUoeWVhciA9IHllYXIoZGF0ZSkpICU+JQ0KICAgICAgZ3JvdXBfYnkoeWVhcikgJT4lDQogICAgICBzdW1tYXJpc2Uobm9taW5hbCA9IG1lYW4odmFsdWUsIG5hLnJtID0gVFJVRSksIC5ncm91cHMgPSAiZHJvcCIpLA0KICAgIGJ5ID0gInllYXIiDQogICkgJT4lDQogIG11dGF0ZShqYXBhbl9yZWFsID0gcm91bmQoKCgxICsgbm9taW5hbCAvIDEwMCkgLyAoMSArIGNwaV95b3kgLyAxMDApIC0gMSkgKiAxMDAsIDIpKSAlPiUNCiAgc2VsZWN0KHllYXIsIGphcGFuX3JlYWwpDQoNCmpwIDwtIGJpbmRfcm93cyhqcF9tZW5zYWwsIGFub3NfZmFsdGFudGVzKSAlPiUgYXJyYW5nZSh5ZWFyKQ0KDQojIOKUgOKUgCA0LiBDT05TT0xJREHDh8ODTyBETyBEQVRBU0VUIE1BQ1JPRUNPTsOUTUlDTyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCmRmX2p1cm9zX3JlYWwgPC0gYnIgJT4lDQogIGlubmVyX2pvaW4oanAsIGJ5ID0gInllYXIiKSAlPiUNCiAgbXV0YXRlKA0KICAgIGFub19zdHIgICA9IGFzLmNoYXJhY3Rlcih5ZWFyKSwNCiAgICBzcHJlYWRfYnJfanAgPSByb3VuZChicmF6aWxfcmVhbCAtIGphcGFuX3JlYWwsIDIpLA0KICAgIGxvd19iYW5kICA9IHBtaW4oYnJhemlsX3JlYWwsIGphcGFuX3JlYWwpLA0KICAgIGhpZ2hfYmFuZCA9IHBtYXgoYnJhemlsX3JlYWwsIGphcGFuX3JlYWwpDQogICkNCg0KIyDilIDilIAgNS4gUkVOREVSSVpBw4fDg08gRE8gR1LDgUZJQ08gSElHSENIQVJURVIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQpncmFmaWNvX2p1cm9fcmVhbF9icl9qcCA8LSBoaWdoY2hhcnQoKSAlPiUNCiAgaGNfY2hhcnQoDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSBJQl9CUkFOQ08sDQogICAgc3R5bGUgPSBsaXN0KGZvbnRGYW1pbHkgPSAiQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIpDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIGxpbmUgPSBsaXN0KA0KICAgICAgbGluZVdpZHRoID0gMywNCiAgICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IFRSVUUsIHJhZGl1cyA9IDQpDQogICAgKQ0KICApICU+JQ0KICANCiAgIyDilIDilIAgw4FyZWEgU29tYnJlYWRhOiBEaWZlcmVuY2lhbCBkZSBKdXJvcyBSZWFpcyAoU3ByZWFkKSDilIDilIDilIDilIDilIDilIANCiAgaGNfYWRkX3NlcmllcygNCiAgICBuYW1lID0gIkRpZmVyZW5jaWFsIGRlIEp1cm9zIFJlYWlzIChTcHJlYWQgQlIg4oiSIEpQKSIsDQogICAgdHlwZSA9ICJhcmVhcmFuZ2UiLA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkZl9qdXJvc19yZWFsICU+JSB0cmFuc211dGUoYW5vX3N0ciwgbG93X2JhbmQsIGhpZ2hfYmFuZCkpLA0KICAgIGNvbG9yID0gSUJfQVpVTF9DTEFSTywNCiAgICBmaWxsT3BhY2l0eSA9IDAuMjAsDQogICAgbGluZVdpZHRoID0gMCwNCiAgICB6SW5kZXggPSAwLA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IEZBTFNFKSwNCiAgICB0b29sdGlwID0gbGlzdCgNCiAgICAgIHBvaW50Rm9ybWF0ID0gIjxzcGFuIHN0eWxlPSdjb2xvcjojNkI4QkE0Jz7il488L3NwYW4+IFNwcmVhZCBSZWFsOiA8Yj57cG9pbnQuZ2FwOi4yZn0gcC5wLjwvYj48YnIvPiINCiAgICApDQogICkgJT4lDQogIA0KICAjIOKUgOKUgCBTw6lyaWUgMTogVGF4YSBkZSBKdXJvcyBSZWFsIEJyYXNpbCAoQXp1bCBJYk1hY3JvKSDilIDilIDilIDilIDilIDilIDilIDilIANCiAgaGNfYWRkX3NlcmllcygNCiAgICBuYW1lID0gIkJyYXNpbCAoU2VsaWMg4oiSIElQQ0EpIiwNCiAgICBkYXRhID0gZGZfanVyb3NfcmVhbCRicmF6aWxfcmVhbCwNCiAgICBjb2xvciA9IElCX0FaVUxfQkFTRSwNCiAgICB6SW5kZXggPSAyLA0KICAgIG1hcmtlciA9IGxpc3Qoc3ltYm9sID0gImNpcmNsZSIpDQogICkgJT4lDQogIA0KICAjIOKUgOKUgCBTw6lyaWUgMjogVGF4YSBkZSBKdXJvcyBSZWFsIEphcMOjbyAoQW1hcmVsbyBJYk1hY3JvKSDilIDilIDilIDilIDilIDilIDilIANCiAgaGNfYWRkX3NlcmllcygNCiAgICBuYW1lID0gIkphcMOjbyAoT3Zlcm5pZ2h0IENhbGwgUmF0ZSDiiJIgQ1BJKSIsDQogICAgZGF0YSA9IGRmX2p1cm9zX3JlYWwkamFwYW5fcmVhbCwNCiAgICBjb2xvciA9IElCX0FNQVJFTE8sDQogICAgekluZGV4ID0gMiwNCiAgICBtYXJrZXIgPSBsaXN0KHN5bWJvbCA9ICJkaWFtb25kIikNCiAgKSAlPiUNCiAgDQogICMg4pSA4pSAIENvbmZpZ3VyYcOnw6NvIGRvIEVpeG8gWCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCiAgaGNfeEF4aXMoDQogICAgY2F0ZWdvcmllcyA9IGRmX2p1cm9zX3JlYWwkYW5vX3N0ciwNCiAgICBncmlkTGluZVdpZHRoID0gMSwNCiAgICBncmlkTGluZUNvbG9yID0gIiNGMEYwRjAiLA0KICAgIGxpbmVDb2xvciA9IElCX0NJTlpBX0NMQVJPLA0KICAgIHRpY2tDb2xvciA9IElCX0NJTlpBX0NMQVJPLA0KICAgIGxhYmVscyA9IGxpc3QoDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sIGZvbnRTaXplID0gIjEwcHgiKSwNCiAgICAgIHJvdGF0aW9uID0gLTQ1DQogICAgKQ0KICApICU+JQ0KICANCiAgIyDilIDilIAgQ29uZmlndXJhw6fDo28gZG8gRWl4byBZIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KICBoY195QXhpcygNCiAgICB0aXRsZSA9IGxpc3QoDQogICAgICB0ZXh0ID0gIlRheGEgZGUgSnVyb3MgUmVhbCAoJSBhLmEuKSIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBJQl9DSU5aQV9FU0NVUk8sIGZvbnRTaXplID0gIjExcHgiKQ0KICAgICksDQogICAgbWluID0gLTYsDQogICAgbWF4ID0gMTYsDQogICAgdGlja0ludGVydmFsID0gMiwNCiAgICBncmlkTGluZUNvbG9yID0gIiNGMEYwRjAiLA0KICAgIGxpbmVDb2xvciA9IElCX0NJTlpBX0NMQVJPLA0KICAgIGxhYmVscyA9IGxpc3QoDQogICAgICBmb3JtYXQgPSAie3ZhbHVlOi4wZn0lIiwNCiAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiMTFweCIpDQogICAgKSwNCiAgICBwbG90TGluZXMgPSBsaXN0KA0KICAgICAgbGlzdCgNCiAgICAgICAgdmFsdWUgPSAwLA0KICAgICAgICBjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywNCiAgICAgICAgd2lkdGggPSAxLjUsDQogICAgICAgIGRhc2hTdHlsZSA9ICJTaG9ydERhc2giLA0KICAgICAgICB6SW5kZXggPSAzLA0KICAgICAgICBsYWJlbCA9IGxpc3QoDQogICAgICAgICAgdGV4dCA9ICJKdXJvIFJlYWwgTmV1dHJvICgwJSkiLA0KICAgICAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0VTQ1VSTywgZm9udFNpemUgPSAiOXB4IiksDQogICAgICAgICAgYWxpZ24gPSAicmlnaHQiLA0KICAgICAgICAgIHggPSAtMTAsDQogICAgICAgICAgeSA9IC00DQogICAgICAgICkNCiAgICAgICkNCiAgICApDQogICkgJT4lDQogIA0KICAjIOKUgOKUgCBUw610dWxvcyBlIFN1YnTDrXR1bG9zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIlRheGEgZGUgSnVyb3MgUmVhbDogQnJhc2lsIHZzLiBKYXDDo28gKDIwMDDigJMyMDI2KSIsDQogICAgYWxpZ24gPSAibGVmdCIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQVpVTF9CQVNFLCBmb250V2VpZ2h0ID0gImJvbGQiLCBmb250U2l6ZSA9ICIxOHB4IikNCiAgKSAlPiUNCiAgaGNfc3VidGl0bGUoDQogICAgdGV4dCA9ICJNw6lkaWFzIGFudWFpcyB8IEJyYXNpbDogU2VsaWMgZGVzaW5mbGFjaW9uYWRhIHBlbG8gSVBDQSAoQkNCKSB8IEphcMOjbzogVGF4YSBkZSBDYWxsIE92ZXJuaWdodCBkZXNpbmZsYWNpb25hZGEgcGVsbyBDUEkgKEJvSi9GUkVEKSIsDQogICAgYWxpZ24gPSAibGVmdCIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gSUJfQ0lOWkFfRVNDVVJPLCBmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCiAgDQogICMg4pSA4pSAIFRvb2x0aXAgQ29tcGFydGlsaGFkbyBubyBQYWRyw6NvIEliTWFjcm8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICBjcm9zc2hhaXJzID0gVFJVRSwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSBJQl9CUkFOQ08sDQogICAgYm9yZGVyQ29sb3IgPSBJQl9DSU5aQV9DTEFSTywNCiAgICBib3JkZXJSYWRpdXMgPSA2LA0KICAgIGhlYWRlckZvcm1hdCA9ICI8c3BhbiBzdHlsZT0nZm9udC1zaXplOjEycHgnPjxiPkFubyB7cG9pbnQua2V5fTwvYj48L3NwYW4+PGJyLz4iLA0KICAgIHZhbHVlRGVjaW1hbHMgPSAyLA0KICAgIHZhbHVlU3VmZml4ID0gIiUgYS5hLiINCiAgKSAlPiUNCiAgDQogICMg4pSA4pSAIExlZ2VuZGEgZSBDcsOpZGl0b3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQogIGhjX2xlZ2VuZCgNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIHZlcnRpY2FsQWxpZ24gPSAiYm90dG9tIiwNCiAgICBsYXlvdXQgPSAiaG9yaXpvbnRhbCIsDQogICAgaXRlbVN0eWxlID0gbGlzdChjb2xvciA9IElCX0FaVUxfQkFTRSwgZm9udFdlaWdodCA9ICJub3JtYWwiLCBmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBCYW5jbyBDZW50cmFsIGRvIEJyYXNpbCAoQkNCKSwgQmFuayBvZiBKYXBhbiAoQm9KKSBlIEZSRUQgKFN0LiBMb3VpcyBGZWQpLiBFbGFib3Jhw6fDo28gcHLDs3ByaWEgSWJNYWNybyBCSC4iLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IElCX0NJTlpBX0NMQVJPLCBmb250U2l6ZSA9ICIxMHB4IikNCiAgKSAlPiUNCiAgaGNfZXhwb3J0aW5nKGVuYWJsZWQgPSBUUlVFKQ0KDQojIOKUgOKUgCA2LiBFWElCScOHw4NPIERPIEdSw4FGSUNPIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KZ3JhZmljb19qdXJvX3JlYWxfYnJfanANCmBgYA0KIyAqNzogQ29uY2x1c8OjbyoNCg0KTyBlbnZlbGhlY2ltZW50byBwb3B1bGFjaW9uYWwgZG8gQnJhc2lsIMOpIHVtYSByZWFsaWRhZGUgcXVlIGrDoSBzZSBtYW5pZmVzdGEgZW0gdG9kYXMgYXMgZGltZW5zw7VlcyBkbyBwYcOtcyDigJQgc29jaWFpcywgZWNvbsO0bWljYXMsIGRlIHNhw7pkZSwgZGUgc2VndXJhbsOnYSBlIGRpdmVyc2FzIG91dHJhcy4gTWFpcyBkbyBxdWUgdW0gZGFkbyBlc3RhdMOtc3RpY28sIHRyYXRhLXNlIGRlIHVtYSB0cmFuc2Zvcm1hw6fDo28gZXN0cnV0dXJhbCBjdWpvcyBlZmVpdG9zIGFiYWxhbSBhcyBiYXNlcyBkZSB1bWEgbmHDp8OjbyBkYSBjb21wbGV4aWRhZGUgZG8gQnJhc2lsLCBlIHF1ZSBzZSBhcHJvZnVuZGFyw6EgbmFzIHByw7N4aW1hcyBkw6ljYWRhcyBpbmRlcGVuZGVudGVtZW50ZSBkZSBxdWFscXVlciBkZWNpc8OjbyBkZSBwb2zDrXRpY2EgZWNvbsO0bWljYSB0b21hZGEgaG9qZS4gTmVzc2Ugc2VudGlkbywgY29tcHJlZW5kZXIgcXVlIGV4aXN0ZSB1bWEgY2FkZWlhIGRlIGV2ZW50b3MgcXVlIHBhcnRlIGRvIGVudmVsaGVjaW1lbnRvIHBvcHVsYWNpb25hbCwgYXRyYXZlc3NhIGEgZGVtb2dyYWZpYSwgYSBwcm9kdXRpdmlkYWRlIGUgbyBwcm9kdXRvLCBlIHNlIGNvbmNyZXRpemEgbm8gZmlzY2FsIOKAlCDDqSBvIHBhc3NvIGVzc2VuY2lhbCBwYXJhIHF1ZSBxdWFscXVlciBjYW1pbmhvIGRlIHNvbHXDp8OjbyBzZWphIHRyYcOnYWRvIGNvbSBjb25zaXN0w6puY2lhLiBJZ25vcmFyIHVtIGVsbyBkZXNzYSBjYWRlaWEgw6kgdHJhdGFyIG8gc2ludG9tYSBzZW0gZW5kZXJlw6dhciBhIGNhdXNhLiBDb20gZXNzZSBvYmpldGl2bywgZXN0ZSByZWxhdMOzcmlvIGJ1c2NvdSB0cmF6ZXIgZXNzYSBkaXNjdXNzw6NvIHBhcmEgYWzDqW0gZG9zIGdhYmluZXRlcyBlIGRhcyBhdXRvcmlkYWRlcyBlY29uw7RtaWNhcy4gQSB0cmFuc2nDp8OjbyBkZW1vZ3LDoWZpY2EgYWNlbGVyYWRhIGRvIEJyYXNpbCBuw6NvIMOpIHVtIHRlbWEgcmVzdHJpdG8gYSBlc3BlY2lhbGlzdGFzIOKAlCBlbGEgYWZldGEgZGlyZXRhbWVudGUgbyBjb23DqXJjaW8sIGEgcG91cGFuw6dhLCBvIGludmVzdGltZW50bywgb3MganVyb3MsIG8gc2Fsw6FyaW8gZSB0YW50b3Mgb3V0cm9zIGZhdG9yZXMgcXVlIGNvbXDDtWVtIGEgZWNvbm9taWEgZG8gY290aWRpYW5vIGRlIGNhZGEgYnJhc2lsZWlyby4gRW50ZW5kw6otbGEgw6ksIHBvcnRhbnRvLCBvIHByaW1laXJvIHBhc3NvIHBhcmEgZW5mcmVudMOhLWxhLg0KDQpGb250ZXM6IA0KDQpodHRwczovL2VkdWNhLmliZ2UuZ292LmJyL2pvdmVucy9jb25oZWNhLW8tYnJhc2lsL3BvcHVsYWNhby8xODMxOC1waXJhbWlkZS1ldGFyaWEuaHRtbA0KDQpodHRwczovL3d3dy5jbm5icmFzaWwuY29tLmJyL25hY2lvbmFsL2JyYXNpbC9wb3B1bGFjYW8tam92ZW0tY2FpLWUtbnVtZQ0Kcm8tZGUtaWRvc29zLWF1bWVudGEtbm8tYnJhc2lsLWFwb250YS1pYmdlLyNnb29nX3Jld2FyZGVkDQoNCmh0dHBzOi8vYmlibGlvdGVjYS5pYmdlLmdvdi5ici9pbmRleC5waHAvYmlibGlvdGVjYS1jYXRhbG9nbz92aWV3PWRldGFsaGVzJmlkPTc3Mg0KDQpodHRwczovL3N0cm9uZy5jb20uYnIvZ2xvc3NhcmlvL3Bvci1xdWUtby1lbnZlbGhlY2ltZW50by1wb3B1bGFjaW9uYWwtaW1wYWN0YS1vLW1lcmNhZG8vDQoNCmh0dHBzOi8vYmxvZ2RvZGVzZW52b2x2aW1lbnRvLmJuZGVzLmdvdi5ici9jYXRlZ29yaWEvZWNvbm9taWEtZS1kZXNlbnZvbHZpbWVudG8vRW52ZWxoZWNpbWVudG8tZS10cmFuc2ljYW8tZGVtb2dyYWZpY2EvDQoNCmh0dHBzOi8vd3d3Lndvcmxkb21ldGVycy5pbmZvL3B0L2RlbW9ncmFmaWEvYnJhc2lsLWRlbW9ncmFmaWEvDQoNCmh0dHBzOi8vYXNzaXN0YW50cy5jb20uYnIvYS10YXhhLWRlLW5hdGFsaWRhZGUtYnJhc2lsZWlyYS12ZW0tY2FpbmRvLw0KDQpodHRwczovL3d3dy5jbm5icmFzaWwuY29tLmJyL25hY2lvbmFsL2JyYXNpbC9icmFzaWwtcmVnaXN0cmEtbWVub3ItbnVtZXJvLWRlLW5hc2NpbWVudG9zLWVtLXF1YXNlLTUwLWFub3MtZGl6LWliZ2UvDQoNCmh0dHBzOi8vd3d3LmNvbmdyZXNzb2VtZm9jby5jb20uYnIvbm90aWNpYS8xMDc3OTYvaWZpLW9yY2FtZW50by1zdWJlc3RpbW91LWdhc3RvLWRlLWJwYy1wcmV2aWRlbmNpYS1lLWJvbHNhLWZhbWlsaWENCg0KaHR0cHM6Ly93d3cuY25uYnJhc2lsLmNvbS5ici9lY29ub21pYS9tb25leS9tYWNyb2Vjb25vbWlhL2lmaS1vcmNhbWVudG8tc3ViZXN0aW1hLWRlc3Blc2FzLWNvbS1wcmV2aWRlbmNpYS1icGMtZS1ib2xzYS1mYW1pbGlhLw0KDQpodHRwczovL29mYXRvci5jb20uYnIvaW5mb3JtYWNhby9nYXN0by1jb20tcHJldmlkZW5jaWEtY29udGludWEtc3ViaW5kby1hY2ltYS1kYS1pbmZsYWNhby1tb3N0cmEtaWZpLw0KDQpodHRwczovL3d3dy5nb3YuYnIvcHJldmlkZW5jaWEvcHQtYnIvYXNzdW50b3MvcHJldmlkZW5jaWEtc29jaWFsL0RhZG9zLWVzdGF0aXN0aWNvcy1wcmV2aWRlbmNpYS1zb2NpYWwtZS1pbnNzL2JvbGV0aW5zLWRhLXByZXZpZGVuY2lhLXNvY2lhbA0KDQpodHRwczovL3NpZHJhLmliZ2UuZ292LmJyL1RhYmVsYS82NzI3DQoNCmh0dHBzOi8vc2lkcmEuaWJnZS5nb3YuYnIvVGFiZWxhLzY3MjcNCg0KaHR0cHM6Ly90cmFkaW5nZWNvbm9taWNzLmNvbS9qYXBhbi9pbnRlcmVzdC1yYXRlDQoNCmh0dHBzOi8vd3d3LnN0YXQtc2VhcmNoLmJvai5vci5qcC9zc2kvbXRzaHRtbC9mbTAyX21fMV9lbi5odG1sDQoNCmh0dHBzOi8vd3d3LnBvZGVyMzYwLmNvbS5ici9wb2Rlci1pbnRlcm5hY2lvbmFsL3BvcHVsYWNhby1kby1qYXBhby1jYWktZS1udW1lcm8tZGUtaWRvc29zLWF0aW5nZS1yZWNvcmRlLw0K