#include <stdio.h>
#include <string.h> //Biblioteca que incluí para manipular strings com o uso de 'strcpy' e 'strcmp'
int main( ) {
//Declaração de variáveis para cadastro dos Países:
char pais1[ 20 ] , pais2[ 20 ] ;
int populacao1, populacao2;
float area1, area2;
float pib1, pib2;
int numerodePontosTuristicos1, numerodePontosTuristicos2;
//Declaração de variáveis para cáculo de Densidade Demográfica
float densidadeDemografica1, densidadeDemografica2;
//Cadastro da Carta 1 do País 1:
printf ( "Digite o nome do País da Carta 1:\n " ) ; fgets ( pais1
, sizeof ( pais1
) , stdin
) ;
printf ( "Digite a População do País da Carta 1 (ex: 123456789 sem casas decimais):\n " ) ;
printf ( "Digite a Área do País da Carta 1 (ex: 9999.99 com duas casas decimais):\n " ) ;
printf ( "Digite o PIB do País da Carta 1 (ex: 99.99 com duas casas decimais):\n " ) ;
printf ( "Digite o número de pontos turistícos do País da Carta 1:\n " ) ; scanf ( "%d" ,& numerodePontosTuristicos1
) ;
//Cálculo da densidade demográfica do País da Carta 1:
densidadeDemografica1 = populacao1 / area1;
//Cadastro da Carta 2 do País 2:
printf ( "Digite o nome do País da Carta 2:\n " ) ; fgets ( pais2
, sizeof ( pais2
) , stdin
) ;
printf ( "Digite a População do País da Carta 2 (ex: 123456789 sem casas decimais):\n " ) ;
printf ( "Digite a Área do País da Carta 2 (ex: 9999.99 com duas casas decimais):\n " ) ;
printf ( "Digite o PIB do País da Carta 2 (ex: 99.99 com duas casas decimais):\n " ) ;
printf ( "Digite o número de pontos turistícos do País da Carta 2:\n " ) ; scanf ( "%d" ,& numerodePontosTuristicos2
) ;
//Cálculo da densidade demográfica do País da Carta 2:
densidadeDemografica2 = populacao2 / area2;
//variáveis para a impelmentação do Mênu:
char atributoString1[ 40 ] , atributoString2[ 40 ] ;
int atributoEscolhido1, atributoEscolhido2;
char atributoTexto1[ 40 ] = "1.População" ;
char atributoTexto2[ 40 ] = "2.Área" ;
char atributoTexto3[ 40 ] = "3.PIB" ;
char atributoTexto4[ 40 ] = "4.Número de Pontos Turísticos" ;
char atributoTexto5[ 40 ] = "5.Densidade Demográfica" ;
//variáveis para continuar a usar a string "atributoTextoX" mesmo depois que o valor dela for apagado:
char atributoTexto1Vers2[ 40 ] ;
char atributoTexto2Vers2[ 40 ] ;
char atributoTexto3Vers2[ 40 ] ;
char atributoTexto4Vers2[ 40 ] ;
char atributoTexto5Vers2[ 40 ] ;
//variáveis para soma dos atributos escolhidos:
int somaPopArea1, somaPopArea2;
int somaPopPib1, somaPopPib2;
int somaPopNPT1, somaPopNPT2;
int somaPopDens1, somaPopDens2;
int somaAreaPib1, somaAreaPib2;
int somaAreaNPT1, somaAreaNPT2;
int somaAreaDens1, somaAreaDens2;
int somaPibNPT1, somaPibNPT2;
int somaPibDens1, somaPibDens2;
int somaNPTDens1, somaNPTDens2;
somaPopArea1 = ( populacao1 + area1) ;
somaPopArea2 = ( populacao2 + area2) ;
somaPopPib1 = ( populacao1 + pib1) ;
somaPopPib2 = ( populacao2 + pib2) ;
somaPopNPT1 = ( populacao1 + numerodePontosTuristicos1) ;
somaPopNPT2 = ( populacao2 + numerodePontosTuristicos2) ;
somaPopDens1 = ( populacao1 + densidadeDemografica1) ;
somaPopDens2 = ( populacao2 + densidadeDemografica2) ;
somaAreaPib1 = ( area1 + pib1) ;
somaAreaPib2 = ( area2 + pib2) ;
somaAreaNPT1 = ( area1 + numerodePontosTuristicos1) ;
somaAreaNPT2 = ( area2 + numerodePontosTuristicos2) ;
somaAreaDens1 = ( area1 + densidadeDemografica1) ;
somaAreaDens2 = ( area2 + densidadeDemografica2) ;
somaPibNPT1 = ( pib1 + numerodePontosTuristicos1) ;
somaPibNPT2 = ( pib2 + numerodePontosTuristicos2) ;
somaPibDens1 = ( pib1 + densidadeDemografica1) ;
somaPibDens2 = ( pib2 + densidadeDemografica2) ;
somaNPTDens1 = ( numerodePontosTuristicos1 + densidadeDemografica1) ;
somaNPTDens2 = ( numerodePontosTuristicos2 + densidadeDemografica2) ;
//Mênu do Jogo:
//(1º Menu)
printf ( "*** Jogo do Super Trunfo Países ***\n " ) ; printf ( "Escolha o 1º atributo:\n " ) ; printf ( "%s\n " , atributoTexto1
) ; printf ( "%s\n " , atributoTexto2
) ; printf ( "%s\n " , atributoTexto3
) ; printf ( "%s\n " , atributoTexto4
) ; printf ( "%s\n " , atributoTexto5
) ; scanf ( "%d" ,& atributoEscolhido1
) ;
/*
Aqui eu pesquisei e utilizei algumas funções em C além do que é ensinado
pelo professor neste nível de aprendizado.
Aqui a função strcpy() é usada para substituir ou copiar o texto ou valor
da string que é a opção escolhida por uma string vazia (""),
removendo a string caso a opção seja escolhida pelo jogador.
Ou seja a função strcpy() é uma função da linguagem em C que
serve para copiar o conteúdo de uma string para outra.(nesse caso para uma
string vazia ("")). Mas antes eu também utilizo strcpy() para salvar o valor de
"atributoTextoX" em "atributoString1"(uma variável que criei para exibir mais
á frente qual opção o jogador escolheu), faço isso pra garantir que o valor
da opção de texto apagada seja salva em outra variável antes de ser apagada:
*/
/*
Switch para remover a opção escolhida e com lógica implementada para decidir o páis vencedor em cada
um dos atributos. Aqui foi usada a estrutura de ternário para implementar a lógica.
*/
switch ( atributoEscolhido1) {
case 1 :
strcpy ( atributoTexto1Vers2
, atributoTexto1
) ; strcpy ( atributoString1
, atributoTexto1
) ; printf ( "%s VS %s" , pais1
, pais2
) ; printf ( "Você escolheu o atributo: %s\n " , atributoString1
) ; printf ( "%s : %d / %s : %d\n " , pais1
, populacao1
, pais2
, populacao2
) ; populacao1
> populacao2
? printf ( "O País %s da Carta 1 venceu no atributo 1.População!\n " , pais1
) : printf ( "O País %s da Carta 2 venceu no atributo 1.População!\n " , pais2
) ; break ;
case 2 :
strcpy ( atributoTexto2Vers2
, atributoTexto2
) ; strcpy ( atributoString1
, atributoTexto2
) ; printf ( "%s VS %s" , pais1
, pais2
) ; printf ( "Você escolheu o atributo: %s\n " , atributoString1
) ; printf ( "%s : %.2f km² / %s : %.2f km²\n " , pais1
, area1
, pais2
, area2
) ; area1
> area2
? printf ( "O Pís %s da Carta 1 venceu no atributo 2.Área!\n " , pais1
) : printf ( "O País%s da Carta 2 venceu no atributo 2.Área!\n " , pais2
) ; break ;
case 3 :
strcpy ( atributoTexto3Vers2
, atributoTexto3
) ; strcpy ( atributoString1
, atributoTexto3
) ; printf ( "%s VS %s" , pais1
, pais2
) ; printf ( "Você escolheu o atributo: %s\n " , atributoString1
) ; printf ( "%s : US$ %.2f trilhões / %s : US$ %.2f trilhões\n " , pais1
, pib1
, pais2
, pib2
) ; pib1
> pib2
? printf ( "O País %s da Carta 1 venceu no atributo 3.PIB!\n " , pais1
) : printf ( "O País %s da Carta 2 venceu no atributo 3.PIB!\n " , pais2
) ; break ;
case 4 :
strcpy ( atributoTexto4Vers2
, atributoTexto4
) ; strcpy ( atributoString1
, atributoTexto4
) ; printf ( "%s VS %s" , pais1
, pais2
) ; printf ( "Você escolheu o atributo: %s\n " , atributoString1
) ; printf ( "%s : %d / %s : %d\n " , pais1
, numerodePontosTuristicos1
, pais2
, numerodePontosTuristicos2
) ; numerodePontosTuristicos1 > numerodePontosTuristicos2 ?
printf ( "O País %s da Carta 1 venceu no atributo 4.Número de Pontos Turísticos!\n " , pais1
) : printf ( "O País %s da Carta 2 venceu no atributo 4.Número de Pontos Turísticos!\n " , pais2
) ; break ;
case 5 :
strcpy ( atributoTexto5Vers2
, atributoTexto5
) ; strcpy ( atributoString1
, atributoTexto5
) ; printf ( "%s VS %s" , pais1
, pais2
) ; printf ( "Você escolheu o atributo: %s\n " , atributoString1
) ; printf ( "%s : %.2f hab/km² / %s : %.2f hab/km²\n " , pais1
, densidadeDemografica1
, pais2
, densidadeDemografica2
) ; densidadeDemografica1 < densidadeDemografica2 ?
printf ( "O País %s da Carta 1 venceu no atributo 5.Densidade Demográfica!\n " , pais1
) : printf ( "O País %s da Carta 2 venceu no atributo 5.Densidade DEmográfica!\n " , pais2
) ; break ;
default :
break ;
}
//Menu 2º após a escolha. Aqui o jogador irá escolher o 2º atributo:
printf ( "Escolha o 2º atributo: \n " ) ;
/*
Aqui vemos mais uma função em C fora a parte que eu pesquisei. A função "strcmp()"
Essa função serve para comparar duas strings.
Aqui ela verifica se a string está vazia antes de imprimir
Se a string vazia tiver ou seja retornar valor diferente de zero (!= 0),
ela será impressa pois significa que ela não está vazia e poderá aparecer
impressa no 2º Menu. Isso garante que a oopção que já foi escolhida pelo
jogador no 1º Menu e que foi removida, não apareça no 2º Menu:
*/
if ( strcmp ( atributoTexto1
, "" ) != 0 ) { printf ( "%s\n " , atributoTexto1
) ; }
if ( strcmp ( atributoTexto2
, "" ) != 0 ) { printf ( "%s\n " , atributoTexto2
) ; }
if ( strcmp ( atributoTexto3
, "" ) != 0 ) { printf ( "%s\n " , atributoTexto3
) ; }
if ( strcmp ( atributoTexto4
, "" ) != 0 ) { printf ( "%s\n " , atributoTexto4
) ; }
if ( strcmp ( atributoTexto5
, "" ) != 0 ) { printf ( "%s\n " , atributoTexto5
) ; }
scanf ( "%d" ,& atributoEscolhido2
) ;
switch ( atributoEscolhido2)
{
case 1 :
if ( atributoEscolhido1 == atributoEscolhido2) {
printf ( "Opção Inválida! Você escolheu o mesmo atributo!\n " ) ; } else {
strcpy ( atributoString2
, atributoTexto1
) ; printf ( "%s VS %s\n " , pais1
, pais2
) ; printf ( "Você escolheu o atributo: %s\n " , atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, populacao1
, pais2
, populacao2
) ; populacao1
< populacao2
? printf ( "O País %s da Carta 2 venceu no atributo 1.População!\n " , pais2
) : printf ( "O País %s da Carta 1 venceu no atributo 1.População!\n " , pais1
) ; }
break ;
case 2 :
if ( atributoEscolhido1 == atributoEscolhido2) {
printf ( "Opção Inválida! Você escolheu o mesmo atributo!\n " ) ; } else {
strcpy ( atributoString2
, atributoTexto2
) ; printf ( "%s VS %s" , pais1
, pais2
) ; printf ( "Você escolheu o atributo: %s\n " , atributoString2
) ; printf ( "%s : %.2f km² / %s : %.2f km²\n " , pais1
, area1
, pais2
, area2
) ; area1
< area2
? printf ( "O País %s da Carta 2 venceu no atributo 2.Área!\n " , pais2
) : printf ( "O País %s da Carta 1 venceu no atributo 2.Área!\n " , pais1
) ; }
break ;
case 3 :
if ( atributoEscolhido1 == atributoEscolhido2) {
printf ( "Opção Inválida! Você escolheu o mesmo atributo!\n " ) ; } else {
strcpy ( atributoString2
, atributoTexto3
) ; printf ( "%s VS %s" , pais1
, pais2
) ; printf ( "Você escolheu o atributo: %s\n " , atributoString2
) ; printf ( "%s : US$ %.2f trilhões / %s : US$ %.2f trilhões\n " , pais1
, pib1
, pais2
, pib2
) ; pib1
< pib2
? printf ( "O País %s da Carta 2 venceu no atributo 3.PIB!\n " , pais2
) : printf ( "O País %s da Carta 1 venceu no atributo 3.PIB!\n " , pais1
) ; }
break ;
case 4 :
if ( atributoEscolhido1 == atributoEscolhido2) {
printf ( "Opção Inválida! Você escolheu o mesmo atributo!\n " ) ; } else {
strcpy ( atributoString2
, atributoTexto4
) ; printf ( "%s VS %s" , pais1
, pais2
) ; printf ( "Você escolheu o atributo: %s\n " , atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, numerodePontosTuristicos1
, pais2
, numerodePontosTuristicos2
) ; numerodePontosTuristicos1 > numerodePontosTuristicos2 ?
printf ( "O País %s da Carta 2 venceu no atributo 4.Número de Pontos Turísticos!\n " , pais2
) : printf ( "O País %s da Carta 1 venceu no atributo 4.Número de Pontos Turísticos!\n " , pais1
) ; }
break ;
case 5 :
if ( atributoEscolhido1 == atributoEscolhido2) {
printf ( "Opção Inválida! Você escolheu o mesmo atributo!\n " ) ; } else {
strcpy ( atributoString2
, atributoTexto5
) ; printf ( "%s VS %s" , pais1
, pais2
) ; printf ( "Você escolheu o atributo: %s\n " , atributoString2
) ; printf ( "%s : %.2f hab/km² / %s : %.2f hab/km²\n " , pais1
, populacao1
, pais2
, populacao2
) ; densidadeDemografica1 > densidadeDemografica2 ?
printf ( "O País %s da Carta 2 venceu no atributo 5.Densidade Demográfica!\n " , pais2
) : printf ( " País %s da Carta 1 venceu no atributo 5.Densidade Demográfica!\n " , pais1
) ; }
default :
}
if ( strcmp ( atributoString1
, atributoTexto1Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto2
) == 0 || strcmp ( atributoString1
, atributoTexto2Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto1
) == 0 ) { if ( somaPopArea1 > somaPopArea2) {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaPopArea1
, pais2
, somaPopArea2
) ; printf ( "A Carta 1 do País %s Venceu!\n " , pais1
) ; printf ( "### FIM DE JOGO! ###" ) ; } else {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaPopArea1
, pais2
, somaPopArea2
) ; printf ( "A Carta 2 do País %s Venceu!\n " , pais2
) ; printf ( "### FIM DE JOGO! ###" ) ; }
} else if ( strcmp ( atributoString1
, atributoTexto2Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto3
) == 0 || strcmp ( atributoString1
, atributoTexto3Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto2
) == 0 ) { if ( somaAreaPib1 > somaAreaPib2) {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaAreaPib1
, pais2
, somaAreaPib2
) ; printf ( "A Carta 1 do País %s Venceu!\n " , pais1
) ; printf ( "### FIM DE JOGO! ###" ) ; } else {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaAreaPib1
, pais2
, somaAreaPib2
) ; printf ( "A Carta 2 do País %s Venceu!\n " , pais2
) ; printf ( "### FIM DE JOGO! ###" ) ; }
} else if ( strcmp ( atributoString1
, atributoTexto3Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto4
) == 0 || strcmp ( atributoString1
, atributoTexto4Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto3
) == 0 ) { if ( somaPibNPT1 > somaPibNPT2) {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaPibNPT1
, pais2
, somaPibNPT2
) ; printf ( "A Carta 1 do País %s Venceu!\n " , pais1
) ; printf ( "### FIM DE JOGO! ###" ) ; } else {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaPibNPT1
, pais2
, somaPibNPT2
) ; printf ( "A Carta 2 do País %s Venceu!\n " , pais2
) ; printf ( "### FIM DE JOGO! ###" ) ; }
} else if ( strcmp ( atributoString1
, atributoTexto4Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto5
) == 0 || strcmp ( atributoString1
, atributoTexto5Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto4
) == 0 ) { if ( somaNPTDens1 > somaNPTDens2) {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaNPTDens1
, pais2
, somaNPTDens2
) ; printf ( "A Carta 1 do País %s Venceu!\n " , pais1
) ; printf ( "### FIM DE JOGO! ###" ) ; } else {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaNPTDens1
, pais2
, somaNPTDens2
) ; printf ( "A Carta 2 do País %s Venceu!\n " , pais2
) ; printf ( "### FIM DE JOGO! ###" ) ; }
} else if ( strcmp ( atributoString1
, atributoTexto1Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto3
) == 0 || strcmp ( atributoString1
, atributoTexto3Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto1
) == 0 ) { if ( somaPopPib1 > somaPopPib2) {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaPopPib1
, pais2
, somaPopPib2
) ; printf ( "A Carta 1 do País %s Venceu!\n " , pais1
) ; printf ( "### FIM DE JOGO! ###" ) ; } else {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaPopPib1
, pais2
, somaPopPib2
) ; printf ( "A Carta 2 do País %s Venceu!\n " , pais2
) ; printf ( "### FIM DE JOGO! ###" ) ; }
} else if ( strcmp ( atributoString1
, atributoTexto1Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto4
) == 0 || strcmp ( atributoString1
, atributoTexto4Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto1
) == 0 ) { if ( somaPopNPT1 > somaPopNPT2) {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaPopNPT1
, pais2
, somaPopNPT2
) ; printf ( "A Carta 1 do País %s Venceu!\n " , pais1
) ; printf ( "### FIM DE JOGO! ###" ) ; } else {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaPopNPT1
, pais2
, somaPopNPT2
) ; printf ( "A Carta 2 do País %s Venceu!\n " , pais2
) ; printf ( "### FIM DE JOGO! ###" ) ; }
} else if ( strcmp ( atributoString1
, atributoTexto1Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto5
) == 0 || strcmp ( atributoString1
, atributoTexto5Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto1
) == 0 ) { if ( somaPopDens1 > somaPopDens2) {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaPopDens1
, pais2
, somaPopDens2
) ; printf ( "A Carta 1 do País %s Venceu!\n " , pais1
) ; printf ( "### FIM DE JOGO! ###" ) ; } else {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaPopDens1
, pais2
, somaPopDens2
) ; printf ( "A Carta 2 do País %s Venceu!\n " , pais2
) ; printf ( "### FIM DE JOGO! ###" ) ; }
} else if ( strcmp ( atributoString1
, atributoTexto2Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto4
) == 0 || strcmp ( atributoString1
, atributoTexto4Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto2
) == 0 ) { if ( somaAreaNPT1 > somaAreaNPT2) {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaAreaNPT1
, pais2
, somaAreaNPT2
) ; printf ( "A Carta 1 do País %s Venceu!\n " , pais1
) ; printf ( "### FIM DE JOGO! ###" ) ; } else {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaAreaNPT1
, pais2
, somaAreaNPT2
) ; printf ( "A Carta 2 do País %s Venceu!\n " , pais2
) ; printf ( "### FIM DE JOGO! ###" ) ; }
} else if ( strcmp ( atributoString1
, atributoTexto2Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto5
) == 0 || strcmp ( atributoString1
, atributoTexto5Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto2
) == 0 ) { if ( somaAreaDens1 > somaAreaDens2) {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaAreaDens1
, pais2
, somaAreaDens2
) ; printf ( "A Carta 1 do País %s Venceu!\n " , pais1
) ; printf ( "### FIM DE JOGO! ###" ) ; } else {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaAreaDens1
, pais2
, somaAreaDens2
) ; printf ( "A Carta 2 do País %s Venceu!\n " , pais2
) ; printf ( "### FIM DE JOGO! ###" ) ; }
} else if ( strcmp ( atributoString1
, atributoTexto3Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto5
) == 0 || strcmp ( atributoString1
, atributoTexto5Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto3
) == 0 ) { if ( somaPibDens1 > somaPibDens2) {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaPibDens1
, pais2
, somaPibDens2
) ; printf ( "A Carta 1 do País %s Venceu!\n " , pais1
) ; printf ( "### FIM DE JOGO! ###" ) ; } else {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaPibDens1
, pais2
, somaPibDens2
) ; printf ( "A Carta 2 do País %s Venceu!\n " , pais2
) ; printf ( "### FIM DE JOGO! ###" ) ; }
} else if ( strcmp ( atributoString1
, atributoTexto4Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto5
) == 0 || strcmp ( atributoString1
, atributoTexto5Vers2
) == 0 && strcmp ( atributoString2
, atributoTexto4
) == 0 ) { if ( somaNPTDens1 > somaNPTDens2) {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaNPTDens1
, pais2
, somaNPTDens2
) ; printf ( "A Carta 1 do País %s Venceu!\n " , pais1
) ; printf ( "### FIM DE JOGO! ###" ) ; } else {
printf ( "*** Soma dos Atributos escolhidos de cada carta ***\n \n " ) ; printf ( "Carta 1 / %s: %s + %s\n " , pais1
, atributoString1
, atributoString2
) ; printf ( "Carta 2 / %s: %s + %s\n " , pais2
, atributoString1
, atributoString2
) ; printf ( "%s : %d / %s : %d\n " , pais1
, somaNPTDens1
, pais2
, somaNPTDens2
) ; printf ( "A Carta 2 do País %s Venceu!\n " , pais2
) ; printf ( "### FIM DE JOGO! ###" ) ; }
}
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4gLy9CaWJsaW90ZWNhIHF1ZSBpbmNsdcOtIHBhcmEgbWFuaXB1bGFyIHN0cmluZ3MgY29tIG8gdXNvIGRlICdzdHJjcHknIGUgJ3N0cmNtcCcKCmludCBtYWluKCkgewogICAgCiAgICAvL0RlY2xhcmHDp8OjbyBkZSB2YXJpw6F2ZWlzIHBhcmEgY2FkYXN0cm8gZG9zIFBhw61zZXM6CiAgICBjaGFyICBwYWlzMVsyMF0sIHBhaXMyWzIwXTsKICAgIGludCAgIHBvcHVsYWNhbzEsIHBvcHVsYWNhbzI7CiAgICBmbG9hdCBhcmVhMSwgYXJlYTI7CiAgICBmbG9hdCBwaWIxLCBwaWIyOwogICAgaW50ICAgbnVtZXJvZGVQb250b3NUdXJpc3RpY29zMSwgbnVtZXJvZGVQb250b3NUdXJpc3RpY29zMjsKICAgIAogICAgLy9EZWNsYXJhw6fDo28gZGUgdmFyacOhdmVpcyBwYXJhIGPDoWN1bG8gZGUgRGVuc2lkYWRlIERlbW9ncsOhZmljYQogICAgZmxvYXQgZGVuc2lkYWRlRGVtb2dyYWZpY2ExLCBkZW5zaWRhZGVEZW1vZ3JhZmljYTI7CgogICAgLy9DYWRhc3RybyBkYSBDYXJ0YSAxIGRvIFBhw61zIDE6CiAgICBwcmludGYoIkRpZ2l0ZSBvIG5vbWUgZG8gUGHDrXMgZGEgQ2FydGEgMTpcbiIpOwogICAgZmdldHMocGFpczEsIHNpemVvZihwYWlzMSksIHN0ZGluKTsKCiAgICBwcmludGYoIkRpZ2l0ZSBhIFBvcHVsYcOnw6NvIGRvIFBhw61zIGRhIENhcnRhIDEgKGV4OiAxMjM0NTY3ODkgc2VtIGNhc2FzIGRlY2ltYWlzKTpcbiIpOwogICAgc2NhbmYoIiVkIiwmcG9wdWxhY2FvMSk7CgogICAgcHJpbnRmKCJEaWdpdGUgYSDDgXJlYSBkbyBQYcOtcyBkYSBDYXJ0YSAxIChleDogOTk5OS45OSBjb20gZHVhcyBjYXNhcyBkZWNpbWFpcyk6XG4iKTsKICAgIHNjYW5mKCIlZiIsJmFyZWExKTsKCiAgICBwcmludGYoIkRpZ2l0ZSBvIFBJQiBkbyBQYcOtcyBkYSBDYXJ0YSAxIChleDogOTkuOTkgY29tIGR1YXMgY2FzYXMgZGVjaW1haXMpOlxuIik7CiAgICBzY2FuZigiJWYiLCZwaWIxKTsKCiAgICBwcmludGYoIkRpZ2l0ZSBvIG7Dum1lcm8gZGUgcG9udG9zIHR1cmlzdMOtY29zIGRvIFBhw61zIGRhIENhcnRhIDE6XG4iKTsKICAgIHNjYW5mKCIlZCIsJm51bWVyb2RlUG9udG9zVHVyaXN0aWNvczEpOwoKICAgIC8vQ8OhbGN1bG8gZGEgZGVuc2lkYWRlIGRlbW9ncsOhZmljYSBkbyBQYcOtcyBkYSBDYXJ0YSAxOgogICAgZGVuc2lkYWRlRGVtb2dyYWZpY2ExID0gcG9wdWxhY2FvMSAvIGFyZWExOwogICAgCiAgICBnZXRjaGFyICgpOwogICAgCiAgICAvL0NhZGFzdHJvIGRhIENhcnRhIDIgZG8gUGHDrXMgMjoKICAgIHByaW50ZigiRGlnaXRlIG8gbm9tZSBkbyBQYcOtcyBkYSBDYXJ0YSAyOlxuIik7CiAgICBmZ2V0cyhwYWlzMiwgc2l6ZW9mKHBhaXMyKSwgc3RkaW4pOwogICAgCiAgICBwcmludGYoIkRpZ2l0ZSBhIFBvcHVsYcOnw6NvIGRvIFBhw61zIGRhIENhcnRhIDIgKGV4OiAxMjM0NTY3ODkgc2VtIGNhc2FzIGRlY2ltYWlzKTpcbiIpOwogICAgc2NhbmYoIiVkIiwmcG9wdWxhY2FvMik7CgogICAgcHJpbnRmKCJEaWdpdGUgYSDDgXJlYSBkbyBQYcOtcyBkYSBDYXJ0YSAyIChleDogOTk5OS45OSBjb20gZHVhcyBjYXNhcyBkZWNpbWFpcyk6XG4iKTsKICAgIHNjYW5mKCIlZiIsJmFyZWEyKTsKCiAgICBwcmludGYoIkRpZ2l0ZSBvIFBJQiBkbyBQYcOtcyBkYSBDYXJ0YSAyIChleDogOTkuOTkgY29tIGR1YXMgY2FzYXMgZGVjaW1haXMpOlxuIik7CiAgICBzY2FuZigiJWYiLCZwaWIyKTsKCiAgICBwcmludGYoIkRpZ2l0ZSBvIG7Dum1lcm8gZGUgcG9udG9zIHR1cmlzdMOtY29zIGRvIFBhw61zIGRhIENhcnRhIDI6XG4iKTsKICAgIHNjYW5mKCIlZCIsJm51bWVyb2RlUG9udG9zVHVyaXN0aWNvczIpOwoKICAgIHByaW50ZigiXG4iKTsKCiAgICAvL0PDoWxjdWxvIGRhIGRlbnNpZGFkZSBkZW1vZ3LDoWZpY2EgZG8gUGHDrXMgZGEgQ2FydGEgMjoKICAgIGRlbnNpZGFkZURlbW9ncmFmaWNhMiA9IHBvcHVsYWNhbzIgLyBhcmVhMjsKCiAgICAvL3ZhcmnDoXZlaXMgcGFyYSBhIGltcGVsbWVudGHDp8OjbyBkbyBNw6pudToKICAgIGNoYXIgYXRyaWJ1dG9TdHJpbmcxWzQwXSwgYXRyaWJ1dG9TdHJpbmcyWzQwXTsKICAgIGludCBhdHJpYnV0b0VzY29saGlkbzEsIGF0cmlidXRvRXNjb2xoaWRvMjsKICAgIGNoYXIgYXRyaWJ1dG9UZXh0bzFbNDBdID0gIjEuUG9wdWxhw6fDo28iOyAKICAgIGNoYXIgYXRyaWJ1dG9UZXh0bzJbNDBdID0gIjIuw4FyZWEiOyAKICAgIGNoYXIgYXRyaWJ1dG9UZXh0bzNbNDBdID0gIjMuUElCIjsKICAgIGNoYXIgYXRyaWJ1dG9UZXh0bzRbNDBdID0gIjQuTsO6bWVybyBkZSBQb250b3MgVHVyw61zdGljb3MiOwogICAgY2hhciBhdHJpYnV0b1RleHRvNVs0MF0gPSAiNS5EZW5zaWRhZGUgRGVtb2dyw6FmaWNhIjsKCiAgICAvL3ZhcmnDoXZlaXMgcGFyYSBjb250aW51YXIgYSB1c2FyIGEgc3RyaW5nICJhdHJpYnV0b1RleHRvWCIgbWVzbW8gZGVwb2lzIHF1ZSBvIHZhbG9yIGRlbGEgZm9yIGFwYWdhZG86CgogICAgY2hhciBhdHJpYnV0b1RleHRvMVZlcnMyWzQwXTsKICAgIGNoYXIgYXRyaWJ1dG9UZXh0bzJWZXJzMls0MF07CiAgICBjaGFyIGF0cmlidXRvVGV4dG8zVmVyczJbNDBdOwogICAgY2hhciBhdHJpYnV0b1RleHRvNFZlcnMyWzQwXTsKICAgIGNoYXIgYXRyaWJ1dG9UZXh0bzVWZXJzMls0MF07CgogICAgLy92YXJpw6F2ZWlzIHBhcmEgc29tYSBkb3MgYXRyaWJ1dG9zIGVzY29saGlkb3M6CiAgICBpbnQgc29tYVBvcEFyZWExLCBzb21hUG9wQXJlYTI7CiAgICBpbnQgc29tYVBvcFBpYjEsIHNvbWFQb3BQaWIyOyAgCiAgICBpbnQgc29tYVBvcE5QVDEsIHNvbWFQb3BOUFQyOyAKICAgIGludCBzb21hUG9wRGVuczEsIHNvbWFQb3BEZW5zMjsKICAgIGludCBzb21hQXJlYVBpYjEsIHNvbWFBcmVhUGliMjsgCiAgICBpbnQgc29tYUFyZWFOUFQxLCBzb21hQXJlYU5QVDI7CiAgICBpbnQgc29tYUFyZWFEZW5zMSwgc29tYUFyZWFEZW5zMjsgCiAgICBpbnQgc29tYVBpYk5QVDEsIHNvbWFQaWJOUFQyOwogICAgaW50IHNvbWFQaWJEZW5zMSwgc29tYVBpYkRlbnMyOyAKICAgIGludCBzb21hTlBURGVuczEsIHNvbWFOUFREZW5zMjsKCiAgICBzb21hUG9wQXJlYTEgPSAocG9wdWxhY2FvMSArIGFyZWExKTsKICAgIHNvbWFQb3BBcmVhMiA9IChwb3B1bGFjYW8yICsgYXJlYTIpOwogICAgc29tYVBvcFBpYjEgPSAocG9wdWxhY2FvMSArIHBpYjEpOwogICAgc29tYVBvcFBpYjIgPSAocG9wdWxhY2FvMiArIHBpYjIpOwogICAgc29tYVBvcE5QVDEgPSAocG9wdWxhY2FvMSArIG51bWVyb2RlUG9udG9zVHVyaXN0aWNvczEpOwogICAgc29tYVBvcE5QVDIgPSAocG9wdWxhY2FvMiArIG51bWVyb2RlUG9udG9zVHVyaXN0aWNvczIpOwogICAgc29tYVBvcERlbnMxID0gKHBvcHVsYWNhbzEgKyBkZW5zaWRhZGVEZW1vZ3JhZmljYTEpOwogICAgc29tYVBvcERlbnMyID0gKHBvcHVsYWNhbzIgKyBkZW5zaWRhZGVEZW1vZ3JhZmljYTIpOwogICAgc29tYUFyZWFQaWIxID0gKGFyZWExICsgcGliMSk7CiAgICBzb21hQXJlYVBpYjIgPSAoYXJlYTIgKyBwaWIyKTsKICAgIHNvbWFBcmVhTlBUMSA9IChhcmVhMSArIG51bWVyb2RlUG9udG9zVHVyaXN0aWNvczEpOwogICAgc29tYUFyZWFOUFQyID0gKGFyZWEyICsgbnVtZXJvZGVQb250b3NUdXJpc3RpY29zMik7CiAgICBzb21hQXJlYURlbnMxID0gKGFyZWExICsgZGVuc2lkYWRlRGVtb2dyYWZpY2ExKTsKICAgIHNvbWFBcmVhRGVuczIgPSAoYXJlYTIgKyBkZW5zaWRhZGVEZW1vZ3JhZmljYTIpOwogICAgc29tYVBpYk5QVDEgPSAocGliMSArIG51bWVyb2RlUG9udG9zVHVyaXN0aWNvczEpOwogICAgc29tYVBpYk5QVDIgPSAocGliMiArIG51bWVyb2RlUG9udG9zVHVyaXN0aWNvczIpOwogICAgc29tYVBpYkRlbnMxID0gKHBpYjEgKyBkZW5zaWRhZGVEZW1vZ3JhZmljYTEpOwogICAgc29tYVBpYkRlbnMyID0gKHBpYjIgKyBkZW5zaWRhZGVEZW1vZ3JhZmljYTIpOwogICAgc29tYU5QVERlbnMxID0gKG51bWVyb2RlUG9udG9zVHVyaXN0aWNvczEgKyBkZW5zaWRhZGVEZW1vZ3JhZmljYTEpOwogICAgc29tYU5QVERlbnMyID0gKG51bWVyb2RlUG9udG9zVHVyaXN0aWNvczIgKyBkZW5zaWRhZGVEZW1vZ3JhZmljYTIpOwogICAgCiAgICAvL03Dqm51IGRvIEpvZ286CiAgICAvLygxwrogTWVudSkKICAgIHByaW50ZigiKioqIEpvZ28gZG8gU3VwZXIgVHJ1bmZvIFBhw61zZXMgKioqXG4iKTsKICAgIHByaW50ZigiRXNjb2xoYSBvIDHCuiBhdHJpYnV0bzpcbiIpOwogICAgcHJpbnRmKCIlc1xuIixhdHJpYnV0b1RleHRvMSk7CiAgICBwcmludGYoIiVzXG4iLGF0cmlidXRvVGV4dG8yKTsKICAgIHByaW50ZigiJXNcbiIsYXRyaWJ1dG9UZXh0bzMpOwogICAgcHJpbnRmKCIlc1xuIixhdHJpYnV0b1RleHRvNCk7CiAgICBwcmludGYoIiVzXG4iLGF0cmlidXRvVGV4dG81KTsKICAgIHByaW50ZigiRXNjb2xoYTogIik7CiAgICBzY2FuZigiJWQiLCZhdHJpYnV0b0VzY29saGlkbzEpOwoKICAgIC8qCiAgICBBcXVpIGV1IHBlc3F1aXNlaSBlIHV0aWxpemVpIGFsZ3VtYXMgZnVuw6fDtWVzIGVtIEMgYWzDqW0gZG8gcXVlIMOpIGVuc2luYWRvIAogICAgcGVsbyBwcm9mZXNzb3IgbmVzdGUgbsOtdmVsIGRlIGFwcmVuZGl6YWRvLiAKICAgIEFxdWkgYSBmdW7Dp8OjbyBzdHJjcHkoKSDDqSB1c2FkYSBwYXJhIHN1YnN0aXR1aXIgb3UgY29waWFyIG8gdGV4dG8gb3UgdmFsb3IKICAgIGRhIHN0cmluZyBxdWUgw6kgYSBvcMOnw6NvIGVzY29saGlkYSBwb3IgdW1hIHN0cmluZyB2YXppYSAoIiIpLAogICAgcmVtb3ZlbmRvIGEgc3RyaW5nIGNhc28gYSBvcMOnw6NvIHNlamEgZXNjb2xoaWRhIHBlbG8gam9nYWRvci4gCiAgICBPdSBzZWphIGEgZnVuw6fDo28gc3RyY3B5KCkgw6kgdW1hIGZ1bsOnw6NvIGRhIGxpbmd1YWdlbSBlbSBDIHF1ZSAKICAgIHNlcnZlIHBhcmEgY29waWFyIG8gY29udGXDumRvIGRlIHVtYSBzdHJpbmcgcGFyYSBvdXRyYS4obmVzc2UgY2FzbyBwYXJhIHVtYQogICAgc3RyaW5nIHZhemlhICgiIikpLiBNYXMgYW50ZXMgZXUgdGFtYsOpbSB1dGlsaXpvIHN0cmNweSgpIHBhcmEgc2FsdmFyIG8gdmFsb3IgZGUgCiAgICAiYXRyaWJ1dG9UZXh0b1giIGVtICJhdHJpYnV0b1N0cmluZzEiKHVtYSB2YXJpw6F2ZWwgcXVlIGNyaWVpIHBhcmEgZXhpYmlyIG1haXMKICAgIMOhIGZyZW50ZSBxdWFsIG9ww6fDo28gbyBqb2dhZG9yIGVzY29saGV1KSwgZmHDp28gaXNzbyBwcmEgZ2FyYW50aXIgcXVlIG8gdmFsb3IKICAgIGRhIG9ww6fDo28gZGUgdGV4dG8gYXBhZ2FkYSBzZWphIHNhbHZhIGVtIG91dHJhIHZhcmnDoXZlbCBhbnRlcyBkZSBzZXIgYXBhZ2FkYTogCiAgICAqLwogICAgCiAgICAvKgogICAgU3dpdGNoIHBhcmEgcmVtb3ZlciBhIG9ww6fDo28gZXNjb2xoaWRhIGUgY29tIGzDs2dpY2EgaW1wbGVtZW50YWRhIHBhcmEgZGVjaWRpciBvIHDDoWlzIHZlbmNlZG9yIGVtIGNhZGEKICAgIHVtIGRvcyBhdHJpYnV0b3MuIEFxdWkgZm9pIHVzYWRhIGEgZXN0cnV0dXJhIGRlIHRlcm7DoXJpbyBwYXJhIGltcGxlbWVudGFyIGEgbMOzZ2ljYS4KICAgICovCgogICAgc3dpdGNoIChhdHJpYnV0b0VzY29saGlkbzEpIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIHN0cmNweShhdHJpYnV0b1RleHRvMVZlcnMyLGF0cmlidXRvVGV4dG8xKTsKICAgICAgICAgICAgc3RyY3B5KGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1RleHRvMSk7CiAgICAgICAgICAgIHByaW50ZigiJXMgVlMgJXMiLCBwYWlzMSwgcGFpczIpOwogICAgICAgICAgICBwcmludGYoIlZvY8OqIGVzY29saGV1IG8gYXRyaWJ1dG86ICVzXG4iLCBhdHJpYnV0b1N0cmluZzEpOwogICAgICAgICAgICBwcmludGYoIiVzIDogJWQgLyAlcyA6ICVkXG4iLHBhaXMxLCBwb3B1bGFjYW8xLCBwYWlzMiwgcG9wdWxhY2FvMik7CiAgICAgICAgICAgIHBvcHVsYWNhbzEgPiBwb3B1bGFjYW8yID8gcHJpbnRmKCJPIFBhw61zICVzIGRhIENhcnRhIDEgdmVuY2V1IG5vIGF0cmlidXRvIDEuUG9wdWxhw6fDo28hXG4iLCBwYWlzMSkgCiAgICAgICAgICAgIDogcHJpbnRmKCJPIFBhw61zICVzIGRhIENhcnRhIDIgdmVuY2V1IG5vIGF0cmlidXRvIDEuUG9wdWxhw6fDo28hXG4iLCBwYWlzMik7CiAgICAgICAgICAgIHN0cmNweShhdHJpYnV0b1RleHRvMSwgIiIpOwogICAgICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgc3RyY3B5KGF0cmlidXRvVGV4dG8yVmVyczIsYXRyaWJ1dG9UZXh0bzIpOwogICAgICAgICAgICBzdHJjcHkoYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvVGV4dG8yKTsKICAgICAgICAgICAgcHJpbnRmKCIlcyBWUyAlcyIsIHBhaXMxLCBwYWlzMik7CiAgICAgICAgICAgIHByaW50ZigiVm9jw6ogZXNjb2xoZXUgbyBhdHJpYnV0bzogJXNcbiIsIGF0cmlidXRvU3RyaW5nMSk7CiAgICAgICAgICAgIHByaW50ZigiJXMgOiAlLjJmIGttwrIgLyAlcyA6ICUuMmYga23CslxuIixwYWlzMSwgYXJlYTEsIHBhaXMyLCBhcmVhMik7CiAgICAgICAgICAgIGFyZWExID4gYXJlYTIgPyBwcmludGYoIk8gUMOtcyAlcyBkYSBDYXJ0YSAxIHZlbmNldSBubyBhdHJpYnV0byAyLsOBcmVhIVxuIiwgcGFpczEpIAogICAgICAgICAgICA6IHByaW50ZigiTyBQYcOtcyVzIGRhIENhcnRhIDIgdmVuY2V1IG5vIGF0cmlidXRvIDIuw4FyZWEhXG4iLCBwYWlzMik7CiAgICAgICAgICAgIHN0cmNweShhdHJpYnV0b1RleHRvMiwgIiIpOwogICAgICAgICAgICBwcmludGYoIlxuIik7ICAKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAzOgogICAgICAgICAgICBzdHJjcHkoYXRyaWJ1dG9UZXh0bzNWZXJzMixhdHJpYnV0b1RleHRvMyk7CiAgICAgICAgICAgIHN0cmNweShhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9UZXh0bzMpOwogICAgICAgICAgICBwcmludGYoIiVzIFZTICVzIiwgcGFpczEsIHBhaXMyKTsKICAgICAgICAgICAgcHJpbnRmKCJWb2PDqiBlc2NvbGhldSBvIGF0cmlidXRvOiAlc1xuIiwgYXRyaWJ1dG9TdHJpbmcxKTsKICAgICAgICAgICAgcHJpbnRmKCIlcyA6IFVTJCAlLjJmIHRyaWxow7VlcyAvICVzIDogVVMkICUuMmYgdHJpbGjDtWVzXG4iLHBhaXMxLCBwaWIxLCBwYWlzMiwgcGliMik7CiAgICAgICAgICAgIHBpYjEgPiBwaWIyID8gcHJpbnRmKCJPIFBhw61zICVzIGRhIENhcnRhIDEgdmVuY2V1IG5vIGF0cmlidXRvIDMuUElCIVxuIiwgcGFpczEpIAogICAgICAgICAgICA6IHByaW50ZigiTyBQYcOtcyAlcyBkYSBDYXJ0YSAyIHZlbmNldSBubyBhdHJpYnV0byAzLlBJQiFcbiIsIHBhaXMyKTsKICAgICAgICAgICAgc3RyY3B5KGF0cmlidXRvVGV4dG8zLCAiIik7CiAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA0OgogICAgICAgICAgICBzdHJjcHkoYXRyaWJ1dG9UZXh0bzRWZXJzMixhdHJpYnV0b1RleHRvNCk7CiAgICAgICAgICAgIHN0cmNweShhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9UZXh0bzQpOwogICAgICAgICAgICBwcmludGYoIiVzIFZTICVzIiwgcGFpczEsIHBhaXMyKTsKICAgICAgICAgICAgcHJpbnRmKCJWb2PDqiBlc2NvbGhldSBvIGF0cmlidXRvOiAlc1xuIiwgYXRyaWJ1dG9TdHJpbmcxKTsKICAgICAgICAgICAgcHJpbnRmKCIlcyA6ICVkIC8gJXMgOiAlZFxuIixwYWlzMSwgbnVtZXJvZGVQb250b3NUdXJpc3RpY29zMSwgcGFpczIsIG51bWVyb2RlUG9udG9zVHVyaXN0aWNvczIpOwogICAgICAgICAgICBudW1lcm9kZVBvbnRvc1R1cmlzdGljb3MxID4gbnVtZXJvZGVQb250b3NUdXJpc3RpY29zMiA/IAogICAgICAgICAgICBwcmludGYoIk8gUGHDrXMgJXMgZGEgQ2FydGEgMSB2ZW5jZXUgbm8gYXRyaWJ1dG8gNC5Ow7ptZXJvIGRlIFBvbnRvcyBUdXLDrXN0aWNvcyFcbiIsIHBhaXMxKSAKICAgICAgICAgICAgOiBwcmludGYoIk8gUGHDrXMgJXMgZGEgQ2FydGEgMiB2ZW5jZXUgbm8gYXRyaWJ1dG8gNC5Ow7ptZXJvIGRlIFBvbnRvcyBUdXLDrXN0aWNvcyFcbiIsIHBhaXMyKTsKICAgICAgICAgICAgc3RyY3B5KGF0cmlidXRvVGV4dG80LCAiIik7CiAgICAgICAgICAgIHByaW50ZigiXG4iKTsgCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNToKICAgICAgICAgICAgc3RyY3B5KGF0cmlidXRvVGV4dG81VmVyczIsYXRyaWJ1dG9UZXh0bzUpOwogICAgICAgICAgICBzdHJjcHkoYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvVGV4dG81KTsKICAgICAgICAgICAgcHJpbnRmKCIlcyBWUyAlcyIsIHBhaXMxLCBwYWlzMik7CiAgICAgICAgICAgIHByaW50ZigiVm9jw6ogZXNjb2xoZXUgbyBhdHJpYnV0bzogJXNcbiIsIGF0cmlidXRvU3RyaW5nMSk7CiAgICAgICAgICAgIHByaW50ZigiJXMgOiAlLjJmIGhhYi9rbcKyIC8gJXMgOiAlLjJmIGhhYi9rbcKyXG4iLHBhaXMxLCBkZW5zaWRhZGVEZW1vZ3JhZmljYTEsIHBhaXMyLCBkZW5zaWRhZGVEZW1vZ3JhZmljYTIpOwogICAgICAgICAgICBkZW5zaWRhZGVEZW1vZ3JhZmljYTEgPCBkZW5zaWRhZGVEZW1vZ3JhZmljYTIgPyAKICAgICAgICAgICAgcHJpbnRmKCJPIFBhw61zICVzIGRhIENhcnRhIDEgdmVuY2V1IG5vIGF0cmlidXRvIDUuRGVuc2lkYWRlIERlbW9ncsOhZmljYSFcbiIsIHBhaXMxKSAKICAgICAgICAgICAgOiBwcmludGYoIk8gUGHDrXMgJXMgZGEgQ2FydGEgMiB2ZW5jZXUgbm8gYXRyaWJ1dG8gNS5EZW5zaWRhZGUgREVtb2dyw6FmaWNhIVxuIiwgcGFpczIpOwogICAgICAgICAgICBzdHJjcHkoYXRyaWJ1dG9UZXh0bzUsICIiKTsKICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBwcmludGYoIk9ww6fDo28gaW52w6FsaWRhIVxuIik7CiAgICAgICAgICAgIGJyZWFrOwogICAgfQoKICAgIC8vTWVudSAywrogYXDDs3MgYSBlc2NvbGhhLiBBcXVpIG8gam9nYWRvciBpcsOhIGVzY29saGVyIG8gMsK6IGF0cmlidXRvOgogICAgcHJpbnRmKCJFc2NvbGhhIG8gMsK6IGF0cmlidXRvOiBcbiIpOwogICAgCiAgICAvKgogICAgQXF1aSB2ZW1vcyBtYWlzIHVtYSBmdW7Dp8OjbyBlbSBDIGZvcmEgYSBwYXJ0ZSBxdWUgZXUgcGVzcXVpc2VpLiBBIGZ1bsOnw6NvICJzdHJjbXAoKSIKICAgIEVzc2EgZnVuw6fDo28gc2VydmUgcGFyYSBjb21wYXJhciBkdWFzIHN0cmluZ3MuCiAgICBBcXVpIGVsYSB2ZXJpZmljYSBzZSBhIHN0cmluZyBlc3TDoSB2YXppYSBhbnRlcyBkZSBpbXByaW1pcgogICAgU2UgYSBzdHJpbmcgdmF6aWEgdGl2ZXIgb3Ugc2VqYSByZXRvcm5hciB2YWxvciBkaWZlcmVudGUgZGUgemVybyAoIT0gMCksCiAgICBlbGEgc2Vyw6EgaW1wcmVzc2EgcG9pcyBzaWduaWZpY2EgcXVlIGVsYSBuw6NvIGVzdMOhIHZhemlhIGUgcG9kZXLDoSBhcGFyZWNlciAKICAgIGltcHJlc3NhIG5vIDLCuiBNZW51LiBJc3NvIGdhcmFudGUgcXVlIGEgb29ww6fDo28gcXVlIGrDoSBmb2kgZXNjb2xoaWRhIHBlbG8KICAgIGpvZ2Fkb3Igbm8gMcK6IE1lbnUgZSBxdWUgZm9pIHJlbW92aWRhLCBuw6NvIGFwYXJlw6dhIG5vIDLCuiBNZW51OgogICAgKi8KCiAgICBpZiAoc3RyY21wKGF0cmlidXRvVGV4dG8xLCAiIikgIT0gMCkgewogICAgICAgICAgICBwcmludGYoIiVzXG4iLCBhdHJpYnV0b1RleHRvMSk7CiAgICB9IAogICAgaWYgKHN0cmNtcChhdHJpYnV0b1RleHRvMiwgIiIpICE9IDApIHsKICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgYXRyaWJ1dG9UZXh0bzIpOwogICAgfQogICAgaWYgKHN0cmNtcChhdHJpYnV0b1RleHRvMywgIiIpICE9IDApIHsKICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgYXRyaWJ1dG9UZXh0bzMpOwogICAgfSAgCiAgICBpZiAoc3RyY21wKGF0cmlidXRvVGV4dG80LCAiIikgIT0gMCkgewogICAgICAgICAgICBwcmludGYoIiVzXG4iLCBhdHJpYnV0b1RleHRvNCk7CiAgICB9IAogICAgaWYgKHN0cmNtcChhdHJpYnV0b1RleHRvNSwgIiIpICE9IDApIHsKICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgYXRyaWJ1dG9UZXh0bzUpOwogICAgfQogICAgCiAgICBwcmludGYoIkVzY29saGE6ICIpOwogICAgc2NhbmYoIiVkIiwmYXRyaWJ1dG9Fc2NvbGhpZG8yKTsKICAgIHByaW50ZigiXG4iKTsKICAgIAogICAgc3dpdGNoIChhdHJpYnV0b0VzY29saGlkbzIpCiAgICB7CiAgICBjYXNlIDE6CiAgICBpZiAoYXRyaWJ1dG9Fc2NvbGhpZG8xID09IGF0cmlidXRvRXNjb2xoaWRvMikgewogICAgICAgIHByaW50ZigiT3DDp8OjbyBJbnbDoWxpZGEhIFZvY8OqIGVzY29saGV1IG8gbWVzbW8gYXRyaWJ1dG8hXG4iKTsKICAgIH0gZWxzZSB7CiAgICAgICAgc3RyY3B5KGF0cmlidXRvU3RyaW5nMiwgYXRyaWJ1dG9UZXh0bzEpOwogICAgICAgIHByaW50ZigiJXMgVlMgJXNcbiIsIHBhaXMxLCBwYWlzMik7CiAgICAgICAgcHJpbnRmKCJWb2PDqiBlc2NvbGhldSBvIGF0cmlidXRvOiAlc1xuIiwgYXRyaWJ1dG9TdHJpbmcyKTsKICAgICAgICBwcmludGYoIiVzIDogJWQgLyAlcyA6ICVkXG4iLHBhaXMxLCBwb3B1bGFjYW8xLCBwYWlzMiwgcG9wdWxhY2FvMik7CiAgICAgICAgcG9wdWxhY2FvMSA8IHBvcHVsYWNhbzIgPyBwcmludGYoIk8gUGHDrXMgJXMgZGEgQ2FydGEgMiB2ZW5jZXUgbm8gYXRyaWJ1dG8gMS5Qb3B1bGHDp8OjbyFcbiIsIHBhaXMyKSAKICAgICAgICA6IHByaW50ZigiTyBQYcOtcyAlcyBkYSBDYXJ0YSAxIHZlbmNldSBubyBhdHJpYnV0byAxLlBvcHVsYcOnw6NvIVxuIiwgcGFpczEpOwogICAgICAgIHByaW50ZigiXG4iKTsKICAgIH0KICAgICAgICBicmVhazsKICAgIGNhc2UgMjoKICAgIGlmIChhdHJpYnV0b0VzY29saGlkbzEgPT0gYXRyaWJ1dG9Fc2NvbGhpZG8yKSB7CiAgICAgICAgcHJpbnRmKCJPcMOnw6NvIEludsOhbGlkYSEgVm9jw6ogZXNjb2xoZXUgbyBtZXNtbyBhdHJpYnV0byFcbiIpOwogICAgfSBlbHNlIHsKICAgICAgICBzdHJjcHkoYXRyaWJ1dG9TdHJpbmcyLCBhdHJpYnV0b1RleHRvMik7CiAgICAgICAgcHJpbnRmKCIlcyBWUyAlcyIsIHBhaXMxLCBwYWlzMik7CiAgICAgICAgcHJpbnRmKCJWb2PDqiBlc2NvbGhldSBvIGF0cmlidXRvOiAlc1xuIiwgYXRyaWJ1dG9TdHJpbmcyKTsKICAgICAgICBwcmludGYoIiVzIDogJS4yZiBrbcKyIC8gJXMgOiAlLjJmIGttwrJcbiIscGFpczEsIGFyZWExLCBwYWlzMiwgYXJlYTIpOwogICAgICAgIGFyZWExIDwgYXJlYTIgPyBwcmludGYoIk8gUGHDrXMgJXMgZGEgQ2FydGEgMiB2ZW5jZXUgbm8gYXRyaWJ1dG8gMi7DgXJlYSFcbiIsIHBhaXMyKSAKICAgICAgICA6IHByaW50ZigiTyBQYcOtcyAlcyBkYSBDYXJ0YSAxIHZlbmNldSBubyBhdHJpYnV0byAyLsOBcmVhIVxuIiwgcGFpczEpOwogICAgICAgIHByaW50ZigiXG4iKTsKICAgIH0KICAgICAgICBicmVhazsKICAgIGNhc2UgMzoKICAgIGlmIChhdHJpYnV0b0VzY29saGlkbzEgPT0gYXRyaWJ1dG9Fc2NvbGhpZG8yKSB7CiAgICAgICAgcHJpbnRmKCJPcMOnw6NvIEludsOhbGlkYSEgVm9jw6ogZXNjb2xoZXUgbyBtZXNtbyBhdHJpYnV0byFcbiIpOwogICAgfSBlbHNlIHsKICAgICAgICBzdHJjcHkoYXRyaWJ1dG9TdHJpbmcyLCBhdHJpYnV0b1RleHRvMyk7CiAgICAgICAgcHJpbnRmKCIlcyBWUyAlcyIsIHBhaXMxLCBwYWlzMik7CiAgICAgICAgcHJpbnRmKCJWb2PDqiBlc2NvbGhldSBvIGF0cmlidXRvOiAlc1xuIiwgYXRyaWJ1dG9TdHJpbmcyKTsKICAgICAgICBwcmludGYoIiVzIDogVVMkICUuMmYgdHJpbGjDtWVzIC8gJXMgOiBVUyQgJS4yZiB0cmlsaMO1ZXNcbiIscGFpczEsIHBpYjEsIHBhaXMyLCBwaWIyKTsKICAgICAgICBwaWIxIDwgcGliMiA/IHByaW50ZigiTyBQYcOtcyAlcyBkYSBDYXJ0YSAyIHZlbmNldSBubyBhdHJpYnV0byAzLlBJQiFcbiIsIHBhaXMyKSAKICAgICAgICA6IHByaW50ZigiTyBQYcOtcyAlcyBkYSBDYXJ0YSAxIHZlbmNldSBubyBhdHJpYnV0byAzLlBJQiFcbiIsIHBhaXMxKTsKICAgICAgICBwcmludGYoIlxuIik7CiAgICB9CiAgICAgICAgYnJlYWs7CiAgICBjYXNlIDQ6CiAgICBpZiAoYXRyaWJ1dG9Fc2NvbGhpZG8xID09IGF0cmlidXRvRXNjb2xoaWRvMikgewogICAgICAgIHByaW50ZigiT3DDp8OjbyBJbnbDoWxpZGEhIFZvY8OqIGVzY29saGV1IG8gbWVzbW8gYXRyaWJ1dG8hXG4iKTsKICAgIH0gZWxzZSB7CiAgICAgICAgc3RyY3B5KGF0cmlidXRvU3RyaW5nMiwgYXRyaWJ1dG9UZXh0bzQpOwogICAgICAgIHByaW50ZigiJXMgVlMgJXMiLCBwYWlzMSwgcGFpczIpOwogICAgICAgIHByaW50ZigiVm9jw6ogZXNjb2xoZXUgbyBhdHJpYnV0bzogJXNcbiIsIGF0cmlidXRvU3RyaW5nMik7CiAgICAgICAgcHJpbnRmKCIlcyA6ICVkIC8gJXMgOiAlZFxuIixwYWlzMSwgbnVtZXJvZGVQb250b3NUdXJpc3RpY29zMSwgcGFpczIsIG51bWVyb2RlUG9udG9zVHVyaXN0aWNvczIpOwogICAgICAgIG51bWVyb2RlUG9udG9zVHVyaXN0aWNvczEgPiBudW1lcm9kZVBvbnRvc1R1cmlzdGljb3MyID8gCiAgICAgICAgcHJpbnRmKCJPIFBhw61zICVzIGRhIENhcnRhIDIgdmVuY2V1IG5vIGF0cmlidXRvIDQuTsO6bWVybyBkZSBQb250b3MgVHVyw61zdGljb3MhXG4iLCBwYWlzMikgCiAgICAgICAgOiBwcmludGYoIk8gUGHDrXMgJXMgZGEgQ2FydGEgMSB2ZW5jZXUgbm8gYXRyaWJ1dG8gNC5Ow7ptZXJvIGRlIFBvbnRvcyBUdXLDrXN0aWNvcyFcbiIsIHBhaXMxKTsKICAgICAgICBwcmludGYoIlxuIik7CiAgICB9CiAgICAgICAgYnJlYWs7CiAgICBjYXNlIDU6CiAgICBpZiAoYXRyaWJ1dG9Fc2NvbGhpZG8xID09IGF0cmlidXRvRXNjb2xoaWRvMikgewogICAgICAgIHByaW50ZigiT3DDp8OjbyBJbnbDoWxpZGEhIFZvY8OqIGVzY29saGV1IG8gbWVzbW8gYXRyaWJ1dG8hXG4iKTsKICAgIH0gZWxzZSB7CiAgICAgICAgc3RyY3B5KGF0cmlidXRvU3RyaW5nMiwgYXRyaWJ1dG9UZXh0bzUpOwogICAgICAgIHByaW50ZigiJXMgVlMgJXMiLCBwYWlzMSwgcGFpczIpOwogICAgICAgIHByaW50ZigiVm9jw6ogZXNjb2xoZXUgbyBhdHJpYnV0bzogJXNcbiIsIGF0cmlidXRvU3RyaW5nMik7CiAgICAgICAgcHJpbnRmKCIlcyA6ICUuMmYgaGFiL2ttwrIgLyAlcyA6ICUuMmYgaGFiL2ttwrJcbiIscGFpczEsIHBvcHVsYWNhbzEsIHBhaXMyLCBwb3B1bGFjYW8yKTsKICAgICAgICBkZW5zaWRhZGVEZW1vZ3JhZmljYTEgPiBkZW5zaWRhZGVEZW1vZ3JhZmljYTIgPyAKICAgICAgICBwcmludGYoIk8gUGHDrXMgJXMgZGEgQ2FydGEgMiB2ZW5jZXUgbm8gYXRyaWJ1dG8gNS5EZW5zaWRhZGUgRGVtb2dyw6FmaWNhIVxuIiwgcGFpczIpIAogICAgICAgIDogcHJpbnRmKCIgUGHDrXMgJXMgZGEgQ2FydGEgMSB2ZW5jZXUgbm8gYXRyaWJ1dG8gNS5EZW5zaWRhZGUgRGVtb2dyw6FmaWNhIVxuIiwgcGFpczEpOwogICAgICAgIHByaW50ZigiXG4iKTsKICAgIH0KICAgIGRlZmF1bHQ6CiAgICAgICAgcHJpbnRmKCJPcMOnw6NvIEludsOhbGlkYSEiKTsKICAgIH0KCiAgICBpZihzdHJjbXAoYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvVGV4dG8xVmVyczIpID09IDAgJiYgc3RyY21wKGF0cmlidXRvU3RyaW5nMixhdHJpYnV0b1RleHRvMikgPT0gMCAKICAgIHx8IHN0cmNtcChhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9UZXh0bzJWZXJzMikgPT0gMCAmJiBzdHJjbXAoYXRyaWJ1dG9TdHJpbmcyLGF0cmlidXRvVGV4dG8xKSA9PSAwKSB7CiAgICAgICAgaWYoc29tYVBvcEFyZWExID4gc29tYVBvcEFyZWEyKSB7CiAgICAgICAgICAgIHByaW50ZigiKioqIFNvbWEgZG9zIEF0cmlidXRvcyBlc2NvbGhpZG9zIGRlIGNhZGEgY2FydGEgKioqXG5cbiIpOwogICAgICAgICAgICBwcmludGYoIkNhcnRhIDEgLyAlczogJXMgKyAlc1xuIixwYWlzMSxhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9TdHJpbmcyKTsKICAgICAgICAgICAgcHJpbnRmKCJDYXJ0YSAyIC8gJXM6ICVzICsgJXNcbiIscGFpczIsYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvU3RyaW5nMik7CiAgICAgICAgICAgIHByaW50ZigiJXMgOiAlZCAvICVzIDogJWRcbiIscGFpczEsIHNvbWFQb3BBcmVhMSwgcGFpczIsIHNvbWFQb3BBcmVhMik7CiAgICAgICAgICAgIHByaW50ZigiQSBDYXJ0YSAxIGRvIFBhw61zICVzIFZlbmNldSFcbiIscGFpczEpOwogICAgICAgICAgICBwcmludGYoIiMjIyBGSU0gREUgSk9HTyEgIyMjIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcHJpbnRmKCIqKiogU29tYSBkb3MgQXRyaWJ1dG9zIGVzY29saGlkb3MgZGUgY2FkYSBjYXJ0YSAqKipcblxuIik7CiAgICAgICAgICAgIHByaW50ZigiQ2FydGEgMSAvICVzOiAlcyArICVzXG4iLHBhaXMxLGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1N0cmluZzIpOwogICAgICAgICAgICBwcmludGYoIkNhcnRhIDIgLyAlczogJXMgKyAlc1xuIixwYWlzMixhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9TdHJpbmcyKTsKICAgICAgICAgICAgcHJpbnRmKCIlcyA6ICVkIC8gJXMgOiAlZFxuIixwYWlzMSwgc29tYVBvcEFyZWExLCBwYWlzMiwgc29tYVBvcEFyZWEyKTsKICAgICAgICAgICAgcHJpbnRmKCJBIENhcnRhIDIgZG8gUGHDrXMgJXMgVmVuY2V1IVxuIixwYWlzMik7CiAgICAgICAgICAgIHByaW50ZigiIyMjIEZJTSBERSBKT0dPISAjIyMiKTsKICAgICAgICB9CiAgICB9IGVsc2UgaWYoc3RyY21wKGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1RleHRvMlZlcnMyKSA9PSAwICYmIHN0cmNtcChhdHJpYnV0b1N0cmluZzIsYXRyaWJ1dG9UZXh0bzMpID09IDAgCiAgICB8fCBzdHJjbXAoYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvVGV4dG8zVmVyczIpID09IDAgJiYgc3RyY21wKGF0cmlidXRvU3RyaW5nMixhdHJpYnV0b1RleHRvMikgPT0gMCkgewogICAgICAgICAgICBpZihzb21hQXJlYVBpYjEgPiBzb21hQXJlYVBpYjIpIHsKICAgICAgICAgICAgcHJpbnRmKCIqKiogU29tYSBkb3MgQXRyaWJ1dG9zIGVzY29saGlkb3MgZGUgY2FkYSBjYXJ0YSAqKipcblxuIik7CiAgICAgICAgICAgIHByaW50ZigiQ2FydGEgMSAvICVzOiAlcyArICVzXG4iLHBhaXMxLGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1N0cmluZzIpOwogICAgICAgICAgICBwcmludGYoIkNhcnRhIDIgLyAlczogJXMgKyAlc1xuIixwYWlzMixhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9TdHJpbmcyKTsKICAgICAgICAgICAgcHJpbnRmKCIlcyA6ICVkIC8gJXMgOiAlZFxuIixwYWlzMSwgc29tYUFyZWFQaWIxLCBwYWlzMiwgc29tYUFyZWFQaWIyKTsKICAgICAgICAgICAgcHJpbnRmKCJBIENhcnRhIDEgZG8gUGHDrXMgJXMgVmVuY2V1IVxuIixwYWlzMSk7CiAgICAgICAgICAgIHByaW50ZigiIyMjIEZJTSBERSBKT0dPISAjIyMiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwcmludGYoIioqKiBTb21hIGRvcyBBdHJpYnV0b3MgZXNjb2xoaWRvcyBkZSBjYWRhIGNhcnRhICoqKlxuXG4iKTsKICAgICAgICAgICAgcHJpbnRmKCJDYXJ0YSAxIC8gJXM6ICVzICsgJXNcbiIscGFpczEsYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvU3RyaW5nMik7CiAgICAgICAgICAgIHByaW50ZigiQ2FydGEgMiAvICVzOiAlcyArICVzXG4iLHBhaXMyLGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1N0cmluZzIpOwogICAgICAgICAgICBwcmludGYoIiVzIDogJWQgLyAlcyA6ICVkXG4iLHBhaXMxLCBzb21hQXJlYVBpYjEsIHBhaXMyLCBzb21hQXJlYVBpYjIpOwogICAgICAgICAgICBwcmludGYoIkEgQ2FydGEgMiBkbyBQYcOtcyAlcyBWZW5jZXUhXG4iLHBhaXMyKTsKICAgICAgICAgICAgcHJpbnRmKCIjIyMgRklNIERFIEpPR08hICMjIyIpOwogICAgICAgIH0KICAgIH0gZWxzZSBpZihzdHJjbXAoYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvVGV4dG8zVmVyczIpID09IDAgJiYgc3RyY21wKGF0cmlidXRvU3RyaW5nMixhdHJpYnV0b1RleHRvNCkgPT0gMCAKICAgIHx8IHN0cmNtcChhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9UZXh0bzRWZXJzMikgPT0gMCAmJiBzdHJjbXAoYXRyaWJ1dG9TdHJpbmcyLGF0cmlidXRvVGV4dG8zKSA9PSAwKSB7CiAgICAgICAgaWYoc29tYVBpYk5QVDEgPiBzb21hUGliTlBUMikgewogICAgICAgICAgICBwcmludGYoIioqKiBTb21hIGRvcyBBdHJpYnV0b3MgZXNjb2xoaWRvcyBkZSBjYWRhIGNhcnRhICoqKlxuXG4iKTsKICAgICAgICAgICAgcHJpbnRmKCJDYXJ0YSAxIC8gJXM6ICVzICsgJXNcbiIscGFpczEsYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvU3RyaW5nMik7CiAgICAgICAgICAgIHByaW50ZigiQ2FydGEgMiAvICVzOiAlcyArICVzXG4iLHBhaXMyLGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1N0cmluZzIpOwogICAgICAgICAgICBwcmludGYoIiVzIDogJWQgLyAlcyA6ICVkXG4iLHBhaXMxLCBzb21hUGliTlBUMSwgcGFpczIsIHNvbWFQaWJOUFQyKTsKICAgICAgICAgICAgcHJpbnRmKCJBIENhcnRhIDEgZG8gUGHDrXMgJXMgVmVuY2V1IVxuIixwYWlzMSk7CiAgICAgICAgICAgIHByaW50ZigiIyMjIEZJTSBERSBKT0dPISAjIyMiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwcmludGYoIioqKiBTb21hIGRvcyBBdHJpYnV0b3MgZXNjb2xoaWRvcyBkZSBjYWRhIGNhcnRhICoqKlxuXG4iKTsKICAgICAgICAgICAgcHJpbnRmKCJDYXJ0YSAxIC8gJXM6ICVzICsgJXNcbiIscGFpczEsYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvU3RyaW5nMik7CiAgICAgICAgICAgIHByaW50ZigiQ2FydGEgMiAvICVzOiAlcyArICVzXG4iLHBhaXMyLGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1N0cmluZzIpOwogICAgICAgICAgICBwcmludGYoIiVzIDogJWQgLyAlcyA6ICVkXG4iLHBhaXMxLCBzb21hUGliTlBUMSwgcGFpczIsIHNvbWFQaWJOUFQyKTsKICAgICAgICAgICAgcHJpbnRmKCJBIENhcnRhIDIgZG8gUGHDrXMgJXMgVmVuY2V1IVxuIixwYWlzMik7CiAgICAgICAgICAgIHByaW50ZigiIyMjIEZJTSBERSBKT0dPISAjIyMiKTsKICAgICAgICB9IAogICAgfSBlbHNlIGlmKHN0cmNtcChhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9UZXh0bzRWZXJzMikgPT0gMCAmJiBzdHJjbXAoYXRyaWJ1dG9TdHJpbmcyLGF0cmlidXRvVGV4dG81KSA9PSAwIAogICAgfHwgc3RyY21wKGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1RleHRvNVZlcnMyKSA9PSAwICYmIHN0cmNtcChhdHJpYnV0b1N0cmluZzIsYXRyaWJ1dG9UZXh0bzQpID09IDAgKSB7CiAgICAgICAgaWYoc29tYU5QVERlbnMxID4gc29tYU5QVERlbnMyKSB7CiAgICAgICAgICAgIHByaW50ZigiKioqIFNvbWEgZG9zIEF0cmlidXRvcyBlc2NvbGhpZG9zIGRlIGNhZGEgY2FydGEgKioqXG5cbiIpOwogICAgICAgICAgICBwcmludGYoIkNhcnRhIDEgLyAlczogJXMgKyAlc1xuIixwYWlzMSxhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9TdHJpbmcyKTsKICAgICAgICAgICAgcHJpbnRmKCJDYXJ0YSAyIC8gJXM6ICVzICsgJXNcbiIscGFpczIsYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvU3RyaW5nMik7CiAgICAgICAgICAgIHByaW50ZigiJXMgOiAlZCAvICVzIDogJWRcbiIscGFpczEsIHNvbWFOUFREZW5zMSwgcGFpczIsIHNvbWFOUFREZW5zMik7CiAgICAgICAgICAgIHByaW50ZigiQSBDYXJ0YSAxIGRvIFBhw61zICVzIFZlbmNldSFcbiIscGFpczEpOwogICAgICAgICAgICBwcmludGYoIiMjIyBGSU0gREUgSk9HTyEgIyMjIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcHJpbnRmKCIqKiogU29tYSBkb3MgQXRyaWJ1dG9zIGVzY29saGlkb3MgZGUgY2FkYSBjYXJ0YSAqKipcblxuIik7CiAgICAgICAgICAgIHByaW50ZigiQ2FydGEgMSAvICVzOiAlcyArICVzXG4iLHBhaXMxLGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1N0cmluZzIpOwogICAgICAgICAgICBwcmludGYoIkNhcnRhIDIgLyAlczogJXMgKyAlc1xuIixwYWlzMixhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9TdHJpbmcyKTsKICAgICAgICAgICAgcHJpbnRmKCIlcyA6ICVkIC8gJXMgOiAlZFxuIixwYWlzMSwgc29tYU5QVERlbnMxLCBwYWlzMiwgc29tYU5QVERlbnMyKTsKICAgICAgICAgICAgcHJpbnRmKCJBIENhcnRhIDIgZG8gUGHDrXMgJXMgVmVuY2V1IVxuIixwYWlzMik7CiAgICAgICAgICAgIHByaW50ZigiIyMjIEZJTSBERSBKT0dPISAjIyMiKTsKICAgICAgICB9IAogICAgfSBlbHNlIGlmKHN0cmNtcChhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9UZXh0bzFWZXJzMikgPT0gMCAmJiBzdHJjbXAoYXRyaWJ1dG9TdHJpbmcyLGF0cmlidXRvVGV4dG8zKSA9PSAwIAogICAgfHwgc3RyY21wKGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1RleHRvM1ZlcnMyKSA9PSAwICYmIHN0cmNtcChhdHJpYnV0b1N0cmluZzIsYXRyaWJ1dG9UZXh0bzEpID09IDAgKSB7CiAgICAgICAgaWYoc29tYVBvcFBpYjEgPiBzb21hUG9wUGliMikgewogICAgICAgICAgICBwcmludGYoIioqKiBTb21hIGRvcyBBdHJpYnV0b3MgZXNjb2xoaWRvcyBkZSBjYWRhIGNhcnRhICoqKlxuXG4iKTsKICAgICAgICAgICAgcHJpbnRmKCJDYXJ0YSAxIC8gJXM6ICVzICsgJXNcbiIscGFpczEsYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvU3RyaW5nMik7CiAgICAgICAgICAgIHByaW50ZigiQ2FydGEgMiAvICVzOiAlcyArICVzXG4iLHBhaXMyLGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1N0cmluZzIpOwogICAgICAgICAgICBwcmludGYoIiVzIDogJWQgLyAlcyA6ICVkXG4iLHBhaXMxLCBzb21hUG9wUGliMSwgcGFpczIsIHNvbWFQb3BQaWIyKTsKICAgICAgICAgICAgcHJpbnRmKCJBIENhcnRhIDEgZG8gUGHDrXMgJXMgVmVuY2V1IVxuIixwYWlzMSk7CiAgICAgICAgICAgIHByaW50ZigiIyMjIEZJTSBERSBKT0dPISAjIyMiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwcmludGYoIioqKiBTb21hIGRvcyBBdHJpYnV0b3MgZXNjb2xoaWRvcyBkZSBjYWRhIGNhcnRhICoqKlxuXG4iKTsKICAgICAgICAgICAgcHJpbnRmKCJDYXJ0YSAxIC8gJXM6ICVzICsgJXNcbiIscGFpczEsYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvU3RyaW5nMik7CiAgICAgICAgICAgIHByaW50ZigiQ2FydGEgMiAvICVzOiAlcyArICVzXG4iLHBhaXMyLGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1N0cmluZzIpOwogICAgICAgICAgICBwcmludGYoIiVzIDogJWQgLyAlcyA6ICVkXG4iLHBhaXMxLCBzb21hUG9wUGliMSwgcGFpczIsIHNvbWFQb3BQaWIyKTsKICAgICAgICAgICAgcHJpbnRmKCJBIENhcnRhIDIgZG8gUGHDrXMgJXMgVmVuY2V1IVxuIixwYWlzMik7CiAgICAgICAgICAgIHByaW50ZigiIyMjIEZJTSBERSBKT0dPISAjIyMiKTsKICAgICAgICB9CiAgICB9IGVsc2UgaWYoc3RyY21wKGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1RleHRvMVZlcnMyKSA9PSAwICYmIHN0cmNtcChhdHJpYnV0b1N0cmluZzIsYXRyaWJ1dG9UZXh0bzQpID09IDAgCiAgICB8fCBzdHJjbXAoYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvVGV4dG80VmVyczIpID09IDAgJiYgc3RyY21wKGF0cmlidXRvU3RyaW5nMixhdHJpYnV0b1RleHRvMSkgPT0gMCApIHsKICAgICAgICBpZihzb21hUG9wTlBUMSA+IHNvbWFQb3BOUFQyKSB7CiAgICAgICAgICAgIHByaW50ZigiKioqIFNvbWEgZG9zIEF0cmlidXRvcyBlc2NvbGhpZG9zIGRlIGNhZGEgY2FydGEgKioqXG5cbiIpOwogICAgICAgICAgICBwcmludGYoIkNhcnRhIDEgLyAlczogJXMgKyAlc1xuIixwYWlzMSxhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9TdHJpbmcyKTsKICAgICAgICAgICAgcHJpbnRmKCJDYXJ0YSAyIC8gJXM6ICVzICsgJXNcbiIscGFpczIsYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvU3RyaW5nMik7CiAgICAgICAgICAgIHByaW50ZigiJXMgOiAlZCAvICVzIDogJWRcbiIscGFpczEsIHNvbWFQb3BOUFQxLCBwYWlzMiwgc29tYVBvcE5QVDIpOwogICAgICAgICAgICBwcmludGYoIkEgQ2FydGEgMSBkbyBQYcOtcyAlcyBWZW5jZXUhXG4iLHBhaXMxKTsKICAgICAgICAgICAgcHJpbnRmKCIjIyMgRklNIERFIEpPR08hICMjIyIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHByaW50ZigiKioqIFNvbWEgZG9zIEF0cmlidXRvcyBlc2NvbGhpZG9zIGRlIGNhZGEgY2FydGEgKioqXG5cbiIpOwogICAgICAgICAgICBwcmludGYoIkNhcnRhIDEgLyAlczogJXMgKyAlc1xuIixwYWlzMSxhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9TdHJpbmcyKTsKICAgICAgICAgICAgcHJpbnRmKCJDYXJ0YSAyIC8gJXM6ICVzICsgJXNcbiIscGFpczIsYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvU3RyaW5nMik7CiAgICAgICAgICAgIHByaW50ZigiJXMgOiAlZCAvICVzIDogJWRcbiIscGFpczEsIHNvbWFQb3BOUFQxLCBwYWlzMiwgc29tYVBvcE5QVDIpOwogICAgICAgICAgICBwcmludGYoIkEgQ2FydGEgMiBkbyBQYcOtcyAlcyBWZW5jZXUhXG4iLHBhaXMyKTsKICAgICAgICAgICAgcHJpbnRmKCIjIyMgRklNIERFIEpPR08hICMjIyIpOwogICAgICAgIH0KICAgIH0gZWxzZSBpZihzdHJjbXAoYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvVGV4dG8xVmVyczIpID09IDAgJiYgc3RyY21wKGF0cmlidXRvU3RyaW5nMixhdHJpYnV0b1RleHRvNSkgPT0gMCAKICAgIHx8IHN0cmNtcChhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9UZXh0bzVWZXJzMikgPT0gMCAmJiBzdHJjbXAoYXRyaWJ1dG9TdHJpbmcyLGF0cmlidXRvVGV4dG8xKSA9PSAwICkgewogICAgICAgIGlmKHNvbWFQb3BEZW5zMSA+IHNvbWFQb3BEZW5zMikgewogICAgICAgICAgICBwcmludGYoIioqKiBTb21hIGRvcyBBdHJpYnV0b3MgZXNjb2xoaWRvcyBkZSBjYWRhIGNhcnRhICoqKlxuXG4iKTsKICAgICAgICAgICAgcHJpbnRmKCJDYXJ0YSAxIC8gJXM6ICVzICsgJXNcbiIscGFpczEsYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvU3RyaW5nMik7CiAgICAgICAgICAgIHByaW50ZigiQ2FydGEgMiAvICVzOiAlcyArICVzXG4iLHBhaXMyLGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1N0cmluZzIpOwogICAgICAgICAgICBwcmludGYoIiVzIDogJWQgLyAlcyA6ICVkXG4iLHBhaXMxLCBzb21hUG9wRGVuczEsIHBhaXMyLCBzb21hUG9wRGVuczIpOwogICAgICAgICAgICBwcmludGYoIkEgQ2FydGEgMSBkbyBQYcOtcyAlcyBWZW5jZXUhXG4iLHBhaXMxKTsKICAgICAgICAgICAgcHJpbnRmKCIjIyMgRklNIERFIEpPR08hICMjIyIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHByaW50ZigiKioqIFNvbWEgZG9zIEF0cmlidXRvcyBlc2NvbGhpZG9zIGRlIGNhZGEgY2FydGEgKioqXG5cbiIpOwogICAgICAgICAgICBwcmludGYoIkNhcnRhIDEgLyAlczogJXMgKyAlc1xuIixwYWlzMSxhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9TdHJpbmcyKTsKICAgICAgICAgICAgcHJpbnRmKCJDYXJ0YSAyIC8gJXM6ICVzICsgJXNcbiIscGFpczIsYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvU3RyaW5nMik7CiAgICAgICAgICAgIHByaW50ZigiJXMgOiAlZCAvICVzIDogJWRcbiIscGFpczEsIHNvbWFQb3BEZW5zMSwgcGFpczIsIHNvbWFQb3BEZW5zMik7CiAgICAgICAgICAgIHByaW50ZigiQSBDYXJ0YSAyIGRvIFBhw61zICVzIFZlbmNldSFcbiIscGFpczIpOwogICAgICAgICAgICBwcmludGYoIiMjIyBGSU0gREUgSk9HTyEgIyMjIik7CiAgICAgICAgfQogICAgfSBlbHNlIGlmKHN0cmNtcChhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9UZXh0bzJWZXJzMikgPT0gMCAmJiBzdHJjbXAoYXRyaWJ1dG9TdHJpbmcyLGF0cmlidXRvVGV4dG80KSA9PSAwIAogICAgfHwgc3RyY21wKGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1RleHRvNFZlcnMyKSA9PSAwICYmIHN0cmNtcChhdHJpYnV0b1N0cmluZzIsYXRyaWJ1dG9UZXh0bzIpID09IDAgKSB7CiAgICAgICAgaWYoc29tYUFyZWFOUFQxID4gc29tYUFyZWFOUFQyKSB7CiAgICAgICAgICAgIHByaW50ZigiKioqIFNvbWEgZG9zIEF0cmlidXRvcyBlc2NvbGhpZG9zIGRlIGNhZGEgY2FydGEgKioqXG5cbiIpOwogICAgICAgICAgICBwcmludGYoIkNhcnRhIDEgLyAlczogJXMgKyAlc1xuIixwYWlzMSxhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9TdHJpbmcyKTsKICAgICAgICAgICAgcHJpbnRmKCJDYXJ0YSAyIC8gJXM6ICVzICsgJXNcbiIscGFpczIsYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvU3RyaW5nMik7CiAgICAgICAgICAgIHByaW50ZigiJXMgOiAlZCAvICVzIDogJWRcbiIscGFpczEsIHNvbWFBcmVhTlBUMSwgcGFpczIsIHNvbWFBcmVhTlBUMik7CiAgICAgICAgICAgIHByaW50ZigiQSBDYXJ0YSAxIGRvIFBhw61zICVzIFZlbmNldSFcbiIscGFpczEpOwogICAgICAgICAgICBwcmludGYoIiMjIyBGSU0gREUgSk9HTyEgIyMjIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcHJpbnRmKCIqKiogU29tYSBkb3MgQXRyaWJ1dG9zIGVzY29saGlkb3MgZGUgY2FkYSBjYXJ0YSAqKipcblxuIik7CiAgICAgICAgICAgIHByaW50ZigiQ2FydGEgMSAvICVzOiAlcyArICVzXG4iLHBhaXMxLGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1N0cmluZzIpOwogICAgICAgICAgICBwcmludGYoIkNhcnRhIDIgLyAlczogJXMgKyAlc1xuIixwYWlzMixhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9TdHJpbmcyKTsKICAgICAgICAgICAgcHJpbnRmKCIlcyA6ICVkIC8gJXMgOiAlZFxuIixwYWlzMSwgc29tYUFyZWFOUFQxLCBwYWlzMiwgc29tYUFyZWFOUFQyKTsKICAgICAgICAgICAgcHJpbnRmKCJBIENhcnRhIDIgZG8gUGHDrXMgJXMgVmVuY2V1IVxuIixwYWlzMik7CiAgICAgICAgICAgIHByaW50ZigiIyMjIEZJTSBERSBKT0dPISAjIyMiKTsKICAgICAgICB9CiAgICB9IGVsc2UgaWYoc3RyY21wKGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1RleHRvMlZlcnMyKSA9PSAwICYmIHN0cmNtcChhdHJpYnV0b1N0cmluZzIsYXRyaWJ1dG9UZXh0bzUpID09IDAgCiAgICB8fCBzdHJjbXAoYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvVGV4dG81VmVyczIpID09IDAgJiYgc3RyY21wKGF0cmlidXRvU3RyaW5nMixhdHJpYnV0b1RleHRvMikgPT0gMCApIHsKICAgICAgICBpZihzb21hQXJlYURlbnMxID4gc29tYUFyZWFEZW5zMikgewogICAgICAgICAgICBwcmludGYoIioqKiBTb21hIGRvcyBBdHJpYnV0b3MgZXNjb2xoaWRvcyBkZSBjYWRhIGNhcnRhICoqKlxuXG4iKTsKICAgICAgICAgICAgcHJpbnRmKCJDYXJ0YSAxIC8gJXM6ICVzICsgJXNcbiIscGFpczEsYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvU3RyaW5nMik7CiAgICAgICAgICAgIHByaW50ZigiQ2FydGEgMiAvICVzOiAlcyArICVzXG4iLHBhaXMyLGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1N0cmluZzIpOwogICAgICAgICAgICBwcmludGYoIiVzIDogJWQgLyAlcyA6ICVkXG4iLHBhaXMxLCBzb21hQXJlYURlbnMxLCBwYWlzMiwgc29tYUFyZWFEZW5zMik7CiAgICAgICAgICAgIHByaW50ZigiQSBDYXJ0YSAxIGRvIFBhw61zICVzIFZlbmNldSFcbiIscGFpczEpOwogICAgICAgICAgICBwcmludGYoIiMjIyBGSU0gREUgSk9HTyEgIyMjIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcHJpbnRmKCIqKiogU29tYSBkb3MgQXRyaWJ1dG9zIGVzY29saGlkb3MgZGUgY2FkYSBjYXJ0YSAqKipcblxuIik7CiAgICAgICAgICAgIHByaW50ZigiQ2FydGEgMSAvICVzOiAlcyArICVzXG4iLHBhaXMxLGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1N0cmluZzIpOwogICAgICAgICAgICBwcmludGYoIkNhcnRhIDIgLyAlczogJXMgKyAlc1xuIixwYWlzMixhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9TdHJpbmcyKTsKICAgICAgICAgICAgcHJpbnRmKCIlcyA6ICVkIC8gJXMgOiAlZFxuIixwYWlzMSwgc29tYUFyZWFEZW5zMSwgcGFpczIsIHNvbWFBcmVhRGVuczIpOwogICAgICAgICAgICBwcmludGYoIkEgQ2FydGEgMiBkbyBQYcOtcyAlcyBWZW5jZXUhXG4iLHBhaXMyKTsKICAgICAgICAgICAgcHJpbnRmKCIjIyMgRklNIERFIEpPR08hICMjIyIpOwogICAgICAgIH0KICAgIH0gZWxzZSBpZihzdHJjbXAoYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvVGV4dG8zVmVyczIpID09IDAgJiYgc3RyY21wKGF0cmlidXRvU3RyaW5nMixhdHJpYnV0b1RleHRvNSkgPT0gMCAKICAgIHx8IHN0cmNtcChhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9UZXh0bzVWZXJzMikgPT0gMCAmJiBzdHJjbXAoYXRyaWJ1dG9TdHJpbmcyLGF0cmlidXRvVGV4dG8zKSA9PSAwICkgewogICAgICAgIGlmKHNvbWFQaWJEZW5zMSA+IHNvbWFQaWJEZW5zMikgewogICAgICAgICAgICBwcmludGYoIioqKiBTb21hIGRvcyBBdHJpYnV0b3MgZXNjb2xoaWRvcyBkZSBjYWRhIGNhcnRhICoqKlxuXG4iKTsKICAgICAgICAgICAgcHJpbnRmKCJDYXJ0YSAxIC8gJXM6ICVzICsgJXNcbiIscGFpczEsYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvU3RyaW5nMik7CiAgICAgICAgICAgIHByaW50ZigiQ2FydGEgMiAvICVzOiAlcyArICVzXG4iLHBhaXMyLGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1N0cmluZzIpOwogICAgICAgICAgICBwcmludGYoIiVzIDogJWQgLyAlcyA6ICVkXG4iLHBhaXMxLCBzb21hUGliRGVuczEsIHBhaXMyLCBzb21hUGliRGVuczIpOwogICAgICAgICAgICBwcmludGYoIkEgQ2FydGEgMSBkbyBQYcOtcyAlcyBWZW5jZXUhXG4iLHBhaXMxKTsKICAgICAgICAgICAgcHJpbnRmKCIjIyMgRklNIERFIEpPR08hICMjIyIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHByaW50ZigiKioqIFNvbWEgZG9zIEF0cmlidXRvcyBlc2NvbGhpZG9zIGRlIGNhZGEgY2FydGEgKioqXG5cbiIpOwogICAgICAgICAgICBwcmludGYoIkNhcnRhIDEgLyAlczogJXMgKyAlc1xuIixwYWlzMSxhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9TdHJpbmcyKTsKICAgICAgICAgICAgcHJpbnRmKCJDYXJ0YSAyIC8gJXM6ICVzICsgJXNcbiIscGFpczIsYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvU3RyaW5nMik7CiAgICAgICAgICAgIHByaW50ZigiJXMgOiAlZCAvICVzIDogJWRcbiIscGFpczEsIHNvbWFQaWJEZW5zMSwgcGFpczIsIHNvbWFQaWJEZW5zMik7CiAgICAgICAgICAgIHByaW50ZigiQSBDYXJ0YSAyIGRvIFBhw61zICVzIFZlbmNldSFcbiIscGFpczIpOwogICAgICAgICAgICBwcmludGYoIiMjIyBGSU0gREUgSk9HTyEgIyMjIik7CiAgICAgICAgfQogICAgfSBlbHNlIGlmKHN0cmNtcChhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9UZXh0bzRWZXJzMikgPT0gMCAmJiBzdHJjbXAoYXRyaWJ1dG9TdHJpbmcyLGF0cmlidXRvVGV4dG81KSA9PSAwIAogICAgfHwgc3RyY21wKGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1RleHRvNVZlcnMyKSA9PSAwICYmIHN0cmNtcChhdHJpYnV0b1N0cmluZzIsYXRyaWJ1dG9UZXh0bzQpID09IDAgKSB7CiAgICAgICAgaWYoc29tYU5QVERlbnMxID4gc29tYU5QVERlbnMyKSB7CiAgICAgICAgICAgIHByaW50ZigiKioqIFNvbWEgZG9zIEF0cmlidXRvcyBlc2NvbGhpZG9zIGRlIGNhZGEgY2FydGEgKioqXG5cbiIpOwogICAgICAgICAgICBwcmludGYoIkNhcnRhIDEgLyAlczogJXMgKyAlc1xuIixwYWlzMSxhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9TdHJpbmcyKTsKICAgICAgICAgICAgcHJpbnRmKCJDYXJ0YSAyIC8gJXM6ICVzICsgJXNcbiIscGFpczIsYXRyaWJ1dG9TdHJpbmcxLGF0cmlidXRvU3RyaW5nMik7CiAgICAgICAgICAgIHByaW50ZigiJXMgOiAlZCAvICVzIDogJWRcbiIscGFpczEsIHNvbWFOUFREZW5zMSwgcGFpczIsIHNvbWFOUFREZW5zMik7CiAgICAgICAgICAgIHByaW50ZigiQSBDYXJ0YSAxIGRvIFBhw61zICVzIFZlbmNldSFcbiIscGFpczEpOwogICAgICAgICAgICBwcmludGYoIiMjIyBGSU0gREUgSk9HTyEgIyMjIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcHJpbnRmKCIqKiogU29tYSBkb3MgQXRyaWJ1dG9zIGVzY29saGlkb3MgZGUgY2FkYSBjYXJ0YSAqKipcblxuIik7CiAgICAgICAgICAgIHByaW50ZigiQ2FydGEgMSAvICVzOiAlcyArICVzXG4iLHBhaXMxLGF0cmlidXRvU3RyaW5nMSxhdHJpYnV0b1N0cmluZzIpOwogICAgICAgICAgICBwcmludGYoIkNhcnRhIDIgLyAlczogJXMgKyAlc1xuIixwYWlzMixhdHJpYnV0b1N0cmluZzEsYXRyaWJ1dG9TdHJpbmcyKTsKICAgICAgICAgICAgcHJpbnRmKCIlcyA6ICVkIC8gJXMgOiAlZFxuIixwYWlzMSwgc29tYU5QVERlbnMxLCBwYWlzMiwgc29tYU5QVERlbnMyKTsKICAgICAgICAgICAgcHJpbnRmKCJBIENhcnRhIDIgZG8gUGHDrXMgJXMgVmVuY2V1IVxuIixwYWlzMik7CiAgICAgICAgICAgIHByaW50ZigiIyMjIEZJTSBERSBKT0dPISAjIyMiKTsKICAgICAgICB9CiAgICB9IAoKICAgIHJldHVybiAwOwoKfQo=