#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ getchar();
int /*<<< orphan*/ nome_decorado();
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ system(char *);
void instrucao() {
  system("clear");
  nome_decorado();
  printf("Instru%c%ces:\n\n1. Selecione o modo de preenchimento do tabuleiro "
         "(manual ou autom%ctico).\n\n",
         135, 228, 160);
  printf("2. Selecione um dos quatro tamanhos de tabuleiro dispon%cveis. ",
         161);
  printf("Caso tenha\nescolhido o modo manual,  preencha o tabuleiro do seu "
         "jeito. N%co esque%ca dos\ncaraceteres especiais de b%cnus '$' e "
         "'@'!\n\n",
         198, 135, 147);
  printf("3. As jogadas ser%co alternadas entre os jogadores. Caso encontre o "
         "b%cnus, voc%c\npoder%c jogar mais uma rodada. ",
         198, 147, 136, 160);
  printf("Voc%c s%c ganhar%c uma nova jogada se n%co tiver\nganhado um b%cnus "
         "na jogada anterior.\n\n",
         136, 162, 160, 198, 147);
  printf("4. Cada tabuleiro gerado automaticamente tem 25%% dos pares com "
         "cartas b%cnus.\n\n",
         147);
  printf(
      "5. Se a primeira carta de um par for um b%cnus, e a segunda n%co for, o "
      "jogador\nperder%c os pontos correspondentes ao b%cnus encontrado.\n\n",
      147, 198, 160, 147);
  printf("\nPressione qualquer tecla para voltar ao menu principal... ");
  getchar();
}


x86 assembly (clang, -O0):
<instrucao>:
push   %rbp
mov    %rsp,%rbp
lea    0xeb5(%rip),%rdi
call   1040 <system@plt>
mov    $0x0,%al
call   1030 <nome_decorado@plt>
lea    0xea8(%rip),%rdi
mov    $0x87,%esi
mov    $0xe4,%edx
mov    $0xa0,%ecx
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xee7(%rip),%rdi
mov    $0xa1,%esi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xf14(%rip),%rdi
mov    $0xc6,%esi
mov    $0x87,%edx
mov    $0x93,%ecx
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xf7e(%rip),%rdi
mov    $0xc6,%esi
mov    $0x93,%edx
mov    $0x88,%ecx
mov    $0xa0,%r8d
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xfcd(%rip),%rdi
mov    $0x88,%esi
mov    $0xa2,%edx
mov    $0xa0,%ecx
mov    $0xc6,%r8d
mov    $0x93,%r9d
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xffd(%rip),%rdi
mov    $0x93,%esi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x103b(%rip),%rdi
mov    $0x93,%r8d
mov    $0xc6,%edx
mov    $0xa0,%ecx
mov    %r8d,%esi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x10a5(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    $0x0,%al
call   1060 <getchar@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<instrucao>:
push   %rax
lea    0xeb8(%rip),%rdi
call   1040 <system@plt>
xor    %eax,%eax
call   1030 <nome_decorado@plt>
lea    0xeab(%rip),%rdi
mov    $0x87,%esi
mov    $0xe4,%edx
mov    $0xa0,%ecx
xor    %eax,%eax
call   1050 <printf@plt>
lea    0xeea(%rip),%rdi
mov    $0xa1,%esi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0xf17(%rip),%rdi
mov    $0xc6,%esi
mov    $0x87,%edx
mov    $0x93,%ecx
xor    %eax,%eax
call   1050 <printf@plt>
lea    0xf81(%rip),%rdi
mov    $0xc6,%esi
mov    $0x93,%edx
mov    $0x88,%ecx
mov    $0xa0,%r8d
xor    %eax,%eax
call   1050 <printf@plt>
lea    0xfd0(%rip),%rdi
mov    $0x88,%esi
mov    $0xa2,%edx
mov    $0xa0,%ecx
mov    $0xc6,%r8d
mov    $0x93,%r9d
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x1000(%rip),%rdi
mov    $0x93,%esi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x103e(%rip),%rdi
mov    $0x93,%esi
mov    $0xc6,%edx
mov    $0xa0,%ecx
mov    $0x93,%r8d
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x10a6(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
xor    %eax,%eax
pop    %rcx
jmp    1060 <getchar@plt>

LLVM IR (-O0):
@.str = [6 x i8] c"clear\00"
@.str.1 = [92 x i8] c"Instru%c%ces:\0A\0A1. Selecione o modo de preenchimento do tabuleiro (manual ou autom%ctico).\0A\0A\00"
@.str.2 = [64 x i8] c"2. Selecione um dos quatro tamanhos de tabuleiro dispon%cveis. \00"
@.str.3 = [135 x i8] c"Caso tenha\0Aescolhido o modo manual, preencha o tabuleiro do seu jeito. N%co esque%ca dos\0Acaraceteres especiais de b%cnus '$' e '@'!\0A\0A\00"
@.str.4 = [114 x i8] c"3. As jogadas ser%co alternadas entre os jogadores. Caso encontre o b%cnus, voc%c\0Apoder%c jogar mais uma rodada. \00"
@.str.5 = [89 x i8] c"Voc%c s%c ganhar%c uma nova jogada se n%co tiver\0Aganhado um b%cnus na jogada anterior.\0A\0A\00"
@.str.6 = [81 x i8] c"4. Cada tabuleiro gerado automaticamente tem 25%% dos pares com cartas b%cnus.\0A\0A\00"
@.str.7 = [139 x i8] c"5. Se a primeira carta de um par for um b%cnus, e a segunda n%co for, o jogador\0Aperder%c os pontos correspondentes ao b%cnus encontrado.\0A\0A\00"
@.str.8 = [60 x i8] c"\0APressione qualquer tecla para voltar ao menu principal... \00"
define void @instrucao() {
%1 = call i32 @system(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str, i64 0, i64 0))
%2 = call i32 (...) @nome_decorado()
%3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([92 x i8], [92 x i8]* @.str.1, i64 0, i64 0), i32 135, i32 228, i32 160)
%4 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.2, i64 0, i64 0), i32 161)
%5 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([135 x i8], [135 x i8]* @.str.3, i64 0, i64 0), i32 198, i32 135, i32 147)
%6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([114 x i8], [114 x i8]* @.str.4, i64 0, i64 0), i32 198, i32 147, i32 136, i32 160)
%7 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([89 x i8], [89 x i8]* @.str.5, i64 0, i64 0), i32 136, i32 162, i32 160, i32 198, i32 147)
%8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([81 x i8], [81 x i8]* @.str.6, i64 0, i64 0), i32 147)
%9 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([139 x i8], [139 x i8]* @.str.7, i64 0, i64 0), i32 147, i32 198, i32 160, i32 147)
%10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.8, i64 0, i64 0))
%11 = call i32 (...) @getchar()
ret void
}

LLVM IR (-O2):
@.str = [6 x i8] c"clear\00"
@.str.1 = [92 x i8] c"Instru%c%ces:\0A\0A1. Selecione o modo de preenchimento do tabuleiro (manual ou autom%ctico).\0A\0A\00"
@.str.2 = [64 x i8] c"2. Selecione um dos quatro tamanhos de tabuleiro dispon%cveis. \00"
@.str.3 = [135 x i8] c"Caso tenha\0Aescolhido o modo manual, preencha o tabuleiro do seu jeito. N%co esque%ca dos\0Acaraceteres especiais de b%cnus '$' e '@'!\0A\0A\00"
@.str.4 = [114 x i8] c"3. As jogadas ser%co alternadas entre os jogadores. Caso encontre o b%cnus, voc%c\0Apoder%c jogar mais uma rodada. \00"
@.str.5 = [89 x i8] c"Voc%c s%c ganhar%c uma nova jogada se n%co tiver\0Aganhado um b%cnus na jogada anterior.\0A\0A\00"
@.str.6 = [81 x i8] c"4. Cada tabuleiro gerado automaticamente tem 25%% dos pares com cartas b%cnus.\0A\0A\00"
@.str.7 = [139 x i8] c"5. Se a primeira carta de um par for um b%cnus, e a segunda n%co for, o jogador\0Aperder%c os pontos correspondentes ao b%cnus encontrado.\0A\0A\00"
@.str.8 = [60 x i8] c"\0APressione qualquer tecla para voltar ao menu principal... \00"
define void @instrucao() {
%1 = tail call i32 @system(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str, i64 0, i64 0))
%2 = tail call i32 (...) @nome_decorado()
%3 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([92 x i8], [92 x i8]* @.str.1, i64 0, i64 0), i32 135, i32 228, i32 160)
%4 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([64 x i8], [64 x i8]* @.str.2, i64 0, i64 0), i32 161)
%5 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([135 x i8], [135 x i8]* @.str.3, i64 0, i64 0), i32 198, i32 135, i32 147)
%6 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([114 x i8], [114 x i8]* @.str.4, i64 0, i64 0), i32 198, i32 147, i32 136, i32 160)
%7 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([89 x i8], [89 x i8]* @.str.5, i64 0, i64 0), i32 136, i32 162, i32 160, i32 198, i32 147)
%8 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([81 x i8], [81 x i8]* @.str.6, i64 0, i64 0), i32 147)
%9 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([139 x i8], [139 x i8]* @.str.7, i64 0, i64 0), i32 147, i32 198, i32 160, i32 147)
%10 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([60 x i8], [60 x i8]* @.str.8, i64 0, i64 0))
%11 = tail call i32 (...) @getchar()
ret void
}