#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 */
scalar_t__ bonus();
scalar_t__ level_five();
scalar_t__ level_four();
scalar_t__ level_one();
scalar_t__ level_three();
scalar_t__ level_two();
int /*<<< orphan*/ puts(char *);
int /*<<< orphan*/ setbuf(int /*<<< orphan*/, int /*<<< orphan*/ *);
int /*<<< orphan*/ stdout;
int main() {
  setbuf(stdout, NULL);
  if (level_one()) {
    puts("GCTF{w3lc0m3_70_r3v3r53_3n61n33r1n6}");
    if (level_two()) {
      puts("GCTF{ch4r_p01n73r5_!=_ch4r_4rr4y}");
      if (level_three()) {
        puts("GCTF{r3v3r51n6_b175_4r3_c00l}");
        if (level_four()) {
          puts("GCTF{b17_7w1ddl1n6_f1x3d_f0r_r34lz_n0w}");
          if (level_five()) {
            puts("GCTF{1nv3r53_r0075_m4d3_1n3ff1c13n7}");
            if (bonus()) {
              puts("GCTF{1rc_15_p0pul4r_4m0n6_c7f_pl4y3r5_700}");
              return 1;
            }
          }
        }
      }
    }
  }
  puts("y0u 4r3n'7 600d 3n0u6h!");
  return 1;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
mov    0x2e4a(%rip),%rax
mov    (%rax),%edi
xor    %eax,%eax
mov    %eax,%esi
call   1050 <setbuf@plt>
mov    $0x0,%al
call   1090 <level_one@plt>
cmp    $0x0,%rax
je     1274 <main+0xf4>
lea    0xe47(%rip),%rdi
call   1030 <puts@plt>
mov    $0x0,%al
call   1040 <level_two@plt>
cmp    $0x0,%rax
je     126f <main+0xef>
lea    0xe4f(%rip),%rdi
call   1030 <puts@plt>
mov    $0x0,%al
call   1060 <level_three@plt>
cmp    $0x0,%rax
je     126a <main+0xea>
lea    0xe54(%rip),%rdi
call   1030 <puts@plt>
mov    $0x0,%al
call   1070 <level_four@plt>
cmp    $0x0,%rax
je     1265 <main+0xe5>
lea    0xe55(%rip),%rdi
call   1030 <puts@plt>
mov    $0x0,%al
call   10a0 <level_five@plt>
cmp    $0x0,%rax
je     1260 <main+0xe0>
lea    0xe60(%rip),%rdi
call   1030 <puts@plt>
mov    $0x0,%al
call   1080 <bonus@plt>
cmp    $0x0,%rax
je     125b <main+0xdb>
lea    0xe68(%rip),%rdi
call   1030 <puts@plt>
movl   $0x1,-0x4(%rbp)
jmp    1287 <main+0x107>
jmp    1260 <main+0xe0>
jmp    1265 <main+0xe5>
jmp    126a <main+0xea>
jmp    126f <main+0xef>
jmp    1274 <main+0xf4>
lea    0xe62(%rip),%rdi
call   1030 <puts@plt>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rax
mov    0x2e58(%rip),%rax
mov    (%rax),%edi
xor    %esi,%esi
call   1050 <setbuf@plt>
xor    %eax,%eax
call   1090 <level_one@plt>
test   %rax,%rax
je     1222 <main+0xa2>
lea    0xe58(%rip),%rdi
call   1030 <puts@plt>
xor    %eax,%eax
call   1040 <level_two@plt>
test   %rax,%rax
je     1222 <main+0xa2>
lea    0xe65(%rip),%rdi
call   1030 <puts@plt>
xor    %eax,%eax
call   1060 <level_three@plt>
test   %rax,%rax
je     1222 <main+0xa2>
lea    0xe6f(%rip),%rdi
call   1030 <puts@plt>
xor    %eax,%eax
call   1070 <level_four@plt>
test   %rax,%rax
je     1222 <main+0xa2>
lea    0xe75(%rip),%rdi
call   1030 <puts@plt>
xor    %eax,%eax
call   10a0 <level_five@plt>
test   %rax,%rax
je     1222 <main+0xa2>
lea    0xe85(%rip),%rdi
call   1030 <puts@plt>
xor    %eax,%eax
call   1080 <bonus@plt>
test   %rax,%rax
je     1222 <main+0xa2>
lea    0xe92(%rip),%rdi
jmp    1229 <main+0xa9>
lea    0xeb4(%rip),%rdi
call   1030 <puts@plt>
mov    $0x1,%eax
pop    %rcx
ret

LLVM IR (-O0):
@stdout = global i32 0
@.str = [37 x i8] c"GCTF{w3lc0m3_70_r3v3r53_3n61n33r1n6}\00"
@.str.1 = [34 x i8] c"GCTF{ch4r_p01n73r5_!=_ch4r_4rr4y}\00"
@.str.2 = [30 x i8] c"GCTF{r3v3r51n6_b175_4r3_c00l}\00"
@.str.3 = [40 x i8] c"GCTF{b17_7w1ddl1n6_f1x3d_f0r_r34lz_n0w}\00"
@.str.4 = [37 x i8] c"GCTF{1nv3r53_r0075_m4d3_1n3ff1c13n7}\00"
@.str.5 = [43 x i8] c"GCTF{1rc_15_p0pul4r_4m0n6_c7f_pl4y3r5_700}\00"
@.str.6 = [24 x i8] c"y0u 4r3n'7 600d 3n0u6h!\00"
define i32 @main() {
%1 = alloca i32
store i32 0, i32* %1
%2 = load i32, i32* @stdout
%3 = call i32 @setbuf(i32 %2, i32* null)
%4 = call i64 (...) @level_one()
%5 = icmp ne i64 %4, 0
br i1 %5, label %6, label %33
6: ; preds = %0
%7 = call i32 @puts(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str, i64 0, i64 0))
%8 = call i64 (...) @level_two()
%9 = icmp ne i64 %8, 0
br i1 %9, label %10, label %32
10: ; preds = %6
%11 = call i32 @puts(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.1, i64 0, i64 0))
%12 = call i64 (...) @level_three()
%13 = icmp ne i64 %12, 0
br i1 %13, label %14, label %31
14: ; preds = %10
%15 = call i32 @puts(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.2, i64 0, i64 0))
%16 = call i64 (...) @level_four()
%17 = icmp ne i64 %16, 0
br i1 %17, label %18, label %30
18: ; preds = %14
%19 = call i32 @puts(i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.3, i64 0, i64 0))
%20 = call i64 (...) @level_five()
%21 = icmp ne i64 %20, 0
br i1 %21, label %22, label %29
22: ; preds = %18
%23 = call i32 @puts(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.4, i64 0, i64 0))
%24 = call i64 (...) @bonus()
%25 = icmp ne i64 %24, 0
br i1 %25, label %26, label %28
26: ; preds = %22
%27 = call i32 @puts(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.5, i64 0, i64 0))
store i32 1, i32* %1
br label %35
28: ; preds = %22
br label %29
29: ; preds = %28, %18
br label %30
30: ; preds = %29, %14
br label %31
31: ; preds = %30, %10
br label %32
32: ; preds = %31, %6
br label %33
33: ; preds = %32, %0
%34 = call i32 @puts(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.6, i64 0, i64 0))
store i32 1, i32* %1
br label %35
35: ; preds = %33, %26
%36 = load i32, i32* %1
ret i32 %36
}

LLVM IR (-O2):
@stdout = global i32 0
@.str = [37 x i8] c"GCTF{w3lc0m3_70_r3v3r53_3n61n33r1n6}\00"
@.str.1 = [34 x i8] c"GCTF{ch4r_p01n73r5_!=_ch4r_4rr4y}\00"
@.str.2 = [30 x i8] c"GCTF{r3v3r51n6_b175_4r3_c00l}\00"
@.str.3 = [40 x i8] c"GCTF{b17_7w1ddl1n6_f1x3d_f0r_r34lz_n0w}\00"
@.str.4 = [37 x i8] c"GCTF{1nv3r53_r0075_m4d3_1n3ff1c13n7}\00"
@.str.5 = [43 x i8] c"GCTF{1rc_15_p0pul4r_4m0n6_c7f_pl4y3r5_700}\00"
@.str.6 = [24 x i8] c"y0u 4r3n'7 600d 3n0u6h!\00"
define i32 @main() {
%1 = load i32, i32* @stdout
%2 = tail call i32 @setbuf(i32 %1, i32* null)
%3 = tail call i64 (...) @level_one()
%4 = icmp eq i64 %3, 0
br i1 %4, label %25, label %5
5: ; preds = %0
%6 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @.str, i64 0, i64 0))
%7 = tail call i64 (...) @level_two()
%8 = icmp eq i64 %7, 0
br i1 %8, label %25, label %9
9: ; preds = %5
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @.str.1, i64 0, i64 0))
%11 = tail call i64 (...) @level_three()
%12 = icmp eq i64 %11, 0
br i1 %12, label %25, label %13
13: ; preds = %9
%14 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([30 x i8], [30 x i8]* @.str.2, i64 0, i64 0))
%15 = tail call i64 (...) @level_four()
%16 = icmp eq i64 %15, 0
br i1 %16, label %25, label %17
17: ; preds = %13
%18 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([40 x i8], [40 x i8]* @.str.3, i64 0, i64 0))
%19 = tail call i64 (...) @level_five()
%20 = icmp eq i64 %19, 0
br i1 %20, label %25, label %21
21: ; preds = %17
%22 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @.str.4, i64 0, i64 0))
%23 = tail call i64 (...) @bonus()
%24 = icmp eq i64 %23, 0
br i1 %24, label %25, label %26
25: ; preds = %5, %13, %21, %17, %9, %0
br label %26
26: ; preds = %21, %25
%27 = phi i8* [ getelementptr inbounds ([24 x i8], [24 x i8]* @.str.6, i64 0, i64 0), %25 ], [ getelementptr inbounds ([43 x i8], [43 x i8]* @.str.5, i64 0, i64 0), %21 ]
%28 = tail call i32 @puts(i8* dereferenceable(1) %27)
ret i32 1
}