#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*/ printUsage();
int /*<<< orphan*/ printf(char *, ...);
scalar_t__ strcmp(char *, char *);
void printExtendedUsage() {
  printUsage();
  printf("    Options:\n");
  printf("\t\033[1m"
         "-e"
         "%s"
         ""
         " "
         "<source> <dest_dir>"
         "\033[m\n\t\t"
         "Extracts the file from <source> (in the GCM) to <dest_dir> (local "
         "filesystem)"
         "\n\n",
         strcmp("", "") == 0 ? "" : ", ");
  ;
  printf("\t\033[1m"
         "-v"
         "%s"
         "--verbose"
         " "
         ""
         "\033[m\n\t\t"
         "Verbose output"
         "\n\n",
         strcmp("", "--verbose") == 0 ? "" : ", ");
  ;
  printf("\t\033[1m"
         "-i"
         "%s"
         "--info"
         " "
         ""
         "\033[m\n\t\t"
         "Display additional info about the GCM (useful for auditing)"
         "\n\n",
         strcmp("", "--info") == 0 ? "" : ", ");
  ;
  printf("\t\033[1m"
         "-l"
         "%s"
         "--list"
         " "
         "[ "
         "+i"
         " "
         "+p"
         " ]"
         "\033[m\n\t\t"
         "Lists the filesystem of the GCM. If "
         "+i"
         " is included, it will show the filesizes or filecount (for "
         "directories). If "
         "+p"
         " is included, it will print the full paths of each file (for easy "
         "grepping)."
         "\n\n",
         strcmp("", "--list") == 0 ? "" : ", ");
  ;
  printf("\t\033[1m"
         "-?"
         "%s"
         "--help"
         " "
         ""
         "\033[m\n\t\t"
         "Displays this help."
         "\n\n",
         strcmp("", "--help") == 0 ? "" : ", ");
  ;
  printf("\t\033[1m"
         "-h"
         "%s"
         "--hex"
         " "
         ""
         "\033[m\n\t\t"
         "Display file offsets in hexadecimal notation"
         "\n\n",
         strcmp("", "--hex") == 0 ? "" : ", ");
  ;
  printf("\t\033[1m"
         "-rfs"
         "%s"
         "--replace-file-system"
         " "
         "<fs_root>"
         "\033[m\n\t\t"
         "Replaces the filesystem from fs_root"
         "\n\n",
         strcmp("", "--replace-file-system") == 0 ? "" : ", ");
  ;
  printf(
      "\t\033[1m"
      "-rf"
      "%s"
      "--replace-file"
      " "
      "<gcm_path> <local_path>"
      "\033[m\n\t\t"
      "Replace a file at <gcm_path> with <local_path> (Files MUST be same size)"
      "\n\n",
      strcmp("", "--replace-file") == 0 ? "" : ", ");
  ;
  printf("\n");
  printf("  You can add -f <filename> to specify a filename for the following "
         "options...\n");
  printf("\t\033[1m"
         "-edh"
         "%s"
         "--extract-disk-header"
         " "
         "[ "
         "+f"
         " "
         "<filename>"
         " ]"
         "\033[m\n\t\t"
         "Extract the disk header ("
         "boot.bin"
         ")"
         "\n\n",
         strcmp("", "--extract-disk-header") == 0 ? "" : ", ");
  ;
  printf("\t\033[1m"
         "-edhi"
         "%s"
         "--extract-disk-header-info"
         " "
         "[ "
         "+f"
         " "
         "<filename>"
         " ]"
         "\033[m\n\t\t"
         "Extract the disk header info ("
         "bi2.bin"
         ")"
         "\n\n",
         strcmp("", "--extract-disk-header-info") == 0 ? "" : ", ");
  ;
  printf("\t\033[1m"
         "-eal"
         "%s"
         "--extract-apploader"
         " "
         "[ "
         "+f"
         " "
         "<filename>"
         " ]"
         "\033[m\n\t\t"
         "Extract the apploader ("
         "appldr.bin"
         ")"
         "\n\n",
         strcmp("", "--extract-apploader") == 0 ? "" : ", ");
  ;
  printf("\t\033[1m"
         "-ed"
         "%s"
         "--extract-boot-dol"
         " "
         "[ "
         "+f"
         " "
         "<filename>"
         " ]"
         "\033[m\n\t\t"
         "Extract the main executable DOL ("
         "boot.dol"
         ")"
         "\n\n",
         strcmp("", "--extract-boot-dol") == 0 ? "" : ", ");
  ;
  printf("\t\033[1m"
         "-idh"
         "%s"
         "--inject-disk-header"
         " "
         "[ "
         "+f"
         " "
         "<filename>"
         " ]"
         "\033[m\n\t\t"
         "Inject the disk header"
         "\n\n",
         strcmp("", "--inject-disk-header") == 0 ? "" : ", ");
  ;
  printf("\t\033[1m"
         "-idhi"
         "%s"
         "--inject-disk-header-info"
         " "
         "[ "
         "+f"
         " "
         "<filename>"
         " ]"
         "\033[m\n\t\t"
         "Inject the disk header info"
         "\n\n",
         strcmp("", "--inject-disk-header-info") == 0 ? "" : ", ");
  ;
  printf("\t\033[1m"
         "-ial"
         "%s"
         "--inject-apploader"
         " "
         "[ "
         "+f"
         " "
         "<filename>"
         " ]"
         "\033[m\n\t\t"
         "Inject the apploader"
         "\n\n",
         strcmp("", "--inject-apploader") == 0 ? "" : ", ");
  ;
  printf("\t\033[1m"
         "-id"
         "%s"
         "--inject-boot-dol"
         " "
         "[ "
         "+f"
         " "
         "<filename>"
         " ]"
         "\033[m\n\t\t"
         "Inject the main executable DOL"
         "\n\n",
         strcmp("", "--inject-boot-dol") == 0 ? "" : ", ");
  ;
}


x86 assembly (clang, -O0):
<printExtendedUsage>:
push   %rbp
mov    %rsp,%rbp
mov    $0x0,%al
call   1050 <printUsage@plt>
lea    0xebe(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1216(%rip),%rsi
mov    %rsi,%rdi
call   1040 <strcmp@plt>
mov    %rax,%rcx
lea    0xf1f(%rip),%rsi
lea    0x11fd(%rip),%rax
cmp    $0x0,%rcx
cmove  %rax,%rsi
lea    0xe96(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x11e0(%rip),%rdi
lea    0xf21(%rip),%rsi
call   1040 <strcmp@plt>
mov    %rax,%rcx
lea    0xee5(%rip),%rsi
lea    0x11c3(%rip),%rax
cmp    $0x0,%rcx
cmove  %rax,%rsi
lea    0xed2(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x11a6(%rip),%rdi
lea    0xf45(%rip),%rsi
call   1040 <strcmp@plt>
mov    %rax,%rcx
lea    0xeab(%rip),%rsi
lea    0x1189(%rip),%rax
cmp    $0x0,%rcx
cmove  %rax,%rsi
lea    0xecc(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x116c(%rip),%rdi
lea    0xff4(%rip),%rsi
call   1040 <strcmp@plt>
mov    %rax,%rcx
lea    0xe71(%rip),%rsi
lea    0x114f(%rip),%rax
cmp    $0x0,%rcx
cmove  %rax,%rsi
lea    0xeed(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1132(%rip),%rdi
lea    0xfed(%rip),%rsi
call   1040 <strcmp@plt>
mov    %rax,%rcx
lea    0xe37(%rip),%rsi
lea    0x1115(%rip),%rax
cmp    $0x0,%rcx
cmove  %rax,%rsi
lea    0xf9c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x10f8(%rip),%rdi
lea    0xffe(%rip),%rsi
call   1040 <strcmp@plt>
mov    %rax,%rcx
lea    0xdfd(%rip),%rsi
lea    0x10db(%rip),%rax
cmp    $0x0,%rcx
cmove  %rax,%rsi
lea    0xf95(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x10be(%rip),%rdi
lea    0x1021(%rip),%rsi
call   1040 <strcmp@plt>
mov    %rax,%rcx
lea    0xdc3(%rip),%rsi
lea    0x10a1(%rip),%rax
cmp    $0x0,%rcx
cmove  %rax,%rsi
lea    0xfa5(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1084(%rip),%rdi
lea    0x107e(%rip),%rsi
call   1040 <strcmp@plt>
mov    %rax,%rcx
lea    0xd89(%rip),%rsi
lea    0x1067(%rip),%rax
cmp    $0x0,%rcx
cmove  %rax,%rsi
lea    0xfd8(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1049(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x104c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x102e(%rip),%rdi
lea    0x10e4(%rip),%rsi
call   1040 <strcmp@plt>
mov    %rax,%rcx
lea    0xd33(%rip),%rsi
lea    0x1011(%rip),%rax
cmp    $0x0,%rcx
cmove  %rax,%rsi
lea    0x1062(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xff4(%rip),%rdi
lea    0x1127(%rip),%rsi
call   1040 <strcmp@plt>
mov    %rax,%rcx
lea    0xcf9(%rip),%rsi
lea    0xfd7(%rip),%rax
cmp    $0x0,%rcx
cmove  %rax,%rsi
lea    0x109b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xfba(%rip),%rdi
lea    0x1163(%rip),%rsi
call   1040 <strcmp@plt>
mov    %rax,%rcx
lea    0xcbf(%rip),%rsi
lea    0xf9d(%rip),%rax
cmp    $0x0,%rcx
cmove  %rax,%rsi
lea    0x10e3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf80(%rip),%rdi
lea    0x119e(%rip),%rsi
call   1040 <strcmp@plt>
mov    %rax,%rcx
lea    0xc85(%rip),%rsi
lea    0xf63(%rip),%rax
cmp    $0x0,%rcx
cmove  %rax,%rsi
lea    0x1118(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf46(%rip),%rdi
lea    0x11c7(%rip),%rsi
call   1040 <strcmp@plt>
mov    %rax,%rcx
lea    0xc4b(%rip),%rsi
lea    0xf29(%rip),%rax
cmp    $0x0,%rcx
cmove  %rax,%rsi
lea    0x1152(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf0c(%rip),%rdi
lea    0x11fd(%rip),%rsi
call   1040 <strcmp@plt>
mov    %rax,%rcx
lea    0xc11(%rip),%rsi
lea    0xeef(%rip),%rax
cmp    $0x0,%rcx
cmove  %rax,%rsi
lea    0x117d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xed2(%rip),%rdi
lea    0x1229(%rip),%rsi
call   1040 <strcmp@plt>
mov    %rax,%rcx
lea    0xbd7(%rip),%rsi
lea    0xeb5(%rip),%rax
cmp    $0x0,%rcx
cmove  %rax,%rsi
lea    0x11b8(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe98(%rip),%rdi
lea    0x1256(%rip),%rsi
call   1040 <strcmp@plt>
mov    %rax,%rcx
lea    0xb9d(%rip),%rsi
lea    0xe7b(%rip),%rax
cmp    $0x0,%rcx
cmove  %rax,%rsi
lea    0x11dd(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<printExtendedUsage>:
push   %r14
push   %rbx
push   %rax
xor    %eax,%eax
call   1070 <printUsage@plt>
lea    0x157d(%rip),%rdi
call   1040 <puts@plt>
lea    0x11ea(%rip),%r14
mov    %r14,%rdi
mov    %r14,%rsi
call   1060 <strcmp@plt>
test   %rax,%rax
lea    0xef0(%rip),%rbx
mov    %rbx,%rsi
cmove  %r14,%rsi
lea    0xe6f(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0xf01(%rip),%rsi
mov    %r14,%rdi
call   1060 <strcmp@plt>
test   %rax,%rax
mov    %rbx,%rsi
cmove  %r14,%rsi
lea    0xebe(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0xf38(%rip),%rsi
mov    %r14,%rdi
call   1060 <strcmp@plt>
test   %rax,%rax
mov    %rbx,%rsi
cmove  %r14,%rsi
lea    0xecb(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0xffa(%rip),%rsi
mov    %r14,%rdi
call   1060 <strcmp@plt>
test   %rax,%rax
mov    %rbx,%rsi
cmove  %r14,%rsi
lea    0xeff(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x1006(%rip),%rsi
mov    %r14,%rdi
call   1060 <strcmp@plt>
test   %rax,%rax
mov    %rbx,%rsi
cmove  %r14,%rsi
lea    0xfc1(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x102a(%rip),%rsi
mov    %r14,%rdi
call   1060 <strcmp@plt>
test   %rax,%rax
mov    %rbx,%rsi
cmove  %r14,%rsi
lea    0xfcd(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x1060(%rip),%rsi
mov    %r14,%rdi
call   1060 <strcmp@plt>
test   %rax,%rax
mov    %rbx,%rsi
cmove  %r14,%rsi
lea    0xff0(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x10d0(%rip),%rsi
mov    %r14,%rdi
call   1060 <strcmp@plt>
test   %rax,%rax
mov    %rbx,%rsi
cmove  %r14,%rsi
lea    0x1036(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x1432(%rip),%rdi
call   1040 <puts@plt>
lea    0x10ff(%rip),%rsi
mov    %r14,%rdi
call   1060 <strcmp@plt>
test   %rax,%rax
mov    %rbx,%rsi
cmove  %r14,%rsi
lea    0x1089(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x1155(%rip),%rsi
mov    %r14,%rdi
call   1060 <strcmp@plt>
test   %rax,%rax
mov    %rbx,%rsi
cmove  %r14,%rsi
lea    0x10d5(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x11a4(%rip),%rsi
mov    %r14,%rdi
call   1060 <strcmp@plt>
test   %rax,%rax
mov    %rbx,%rsi
cmove  %r14,%rsi
lea    0x1130(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x11f2(%rip),%rsi
mov    %r14,%rdi
call   1060 <strcmp@plt>
test   %rax,%rax
mov    %rbx,%rsi
cmove  %r14,%rsi
lea    0x1178(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x122e(%rip),%rsi
mov    %r14,%rdi
call   1060 <strcmp@plt>
test   %rax,%rax
mov    %rbx,%rsi
cmove  %r14,%rsi
lea    0x11c5(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x1277(%rip),%rsi
mov    %r14,%rdi
call   1060 <strcmp@plt>
test   %rax,%rax
mov    %rbx,%rsi
cmove  %r14,%rsi
lea    0x1203(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x12b6(%rip),%rsi
mov    %r14,%rdi
call   1060 <strcmp@plt>
test   %rax,%rax
mov    %rbx,%rsi
cmove  %r14,%rsi
lea    0x1251(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x12f6(%rip),%rsi
mov    %r14,%rdi
call   1060 <strcmp@plt>
test   %rax,%rax
cmove  %r14,%rbx
lea    0x128c(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r14
jmp    1050 <printf@plt>

LLVM IR (-O0):
@.str = [14 x i8] c" Options:\0A\00"
@.str.1 = [115 x i8] c"\09\1B[1m-e%s <source> <dest_dir>\1B[m\0A\09\09Extracts the file from <source> (in the GCM) to <dest_dir> (local filesystem)\0A\0A\00"
@.str.2 = [1 x i8] zeroinitializer
@.str.3 = [3 x i8] c", \00"
@.str.4 = [42 x i8] c"\09\1B[1m-v%s--verbose \1B[m\0A\09\09Verbose output\0A\0A\00"
@.str.5 = [10 x i8] c"--verbose\00"
@.str.6 = [84 x i8] c"\09\1B[1m-i%s--info \1B[m\0A\09\09Display additional info about the GCM (useful for auditing)\0A\0A\00"
@.str.7 = [7 x i8] c"--info\00"
@.str.8 = [226 x i8] c"\09\1B[1m-l%s--list [ +i +p ]\1B[m\0A\09\09Lists the filesystem of the GCM. If +i is included, it will show the filesizes or filecount (for directories). If +p is included, it will print the full paths of each file (for easy grepping).\0A\0A\00"
@.str.9 = [7 x i8] c"--list\00"
@.str.10 = [44 x i8] c"\09\1B[1m-?%s--help \1B[m\0A\09\09Displays this help.\0A\0A\00"
@.str.11 = [7 x i8] c"--help\00"
@.str.12 = [68 x i8] c"\09\1B[1m-h%s--hex \1B[m\0A\09\09Display file offsets in hexadecimal notation\0A\0A\00"
@.str.13 = [6 x i8] c"--hex\00"
@.str.14 = [87 x i8] c"\09\1B[1m-rfs%s--replace-file-system <fs_root>\1B[m\0A\09\09Replaces the filesystem from fs_root\0A\0A\00"
@.str.15 = [22 x i8] c"--replace-file-system\00"
@.str.16 = [129 x i8] c"\09\1B[1m-rf%s--replace-file <gcm_path> <local_path>\1B[m\0A\09\09Replace a file at <gcm_path> with <local_path> (Files MUST be same size)\0A\0A\00"
@.str.17 = [15 x i8] c"--replace-file\00"
@.str.18 = [2 x i8] c"\0A\00"
@.str.19 = [80 x i8] c" You can add -f <filename> to specify a filename for the following options...\0A\00"
@.str.20 = [93 x i8] c"\09\1B[1m-edh%s--extract-disk-header [ +f <filename> ]\1B[m\0A\09\09Extract the disk header (boot.bin)\0A\0A\00"
@.str.21 = [22 x i8] c"--extract-disk-header\00"
@.str.22 = [103 x i8] c"\09\1B[1m-edhi%s--extract-disk-header-info [ +f <filename> ]\1B[m\0A\09\09Extract the disk header info (bi2.bin)\0A\0A\00"
@.str.23 = [27 x i8] c"--extract-disk-header-info\00"
@.str.24 = [91 x i8] c"\09\1B[1m-eal%s--extract-apploader [ +f <filename> ]\1B[m\0A\09\09Extract the apploader (appldr.bin)\0A\0A\00"
@.str.25 = [20 x i8] c"--extract-apploader\00"
@.str.26 = [97 x i8] c"\09\1B[1m-ed%s--extract-boot-dol [ +f <filename> ]\1B[m\0A\09\09Extract the main executable DOL (boot.dol)\0A\0A\00"
@.str.27 = [19 x i8] c"--extract-boot-dol\00"
@.str.28 = [80 x i8] c"\09\1B[1m-idh%s--inject-disk-header [ +f <filename> ]\1B[m\0A\09\09Inject the disk header\0A\0A\00"
@.str.29 = [21 x i8] c"--inject-disk-header\00"
@.str.30 = [91 x i8] c"\09\1B[1m-idhi%s--inject-disk-header-info [ +f <filename> ]\1B[m\0A\09\09Inject the disk header info\0A\0A\00"
@.str.31 = [26 x i8] c"--inject-disk-header-info\00"
@.str.32 = [76 x i8] c"\09\1B[1m-ial%s--inject-apploader [ +f <filename> ]\1B[m\0A\09\09Inject the apploader\0A\0A\00"
@.str.33 = [19 x i8] c"--inject-apploader\00"
@.str.34 = [84 x i8] c"\09\1B[1m-id%s--inject-boot-dol [ +f <filename> ]\1B[m\0A\09\09Inject the main executable DOL\0A\0A\00"
@.str.35 = [18 x i8] c"--inject-boot-dol\00"
define void @printExtendedUsage() {
%1 = call i32 (...) @printUsage()
%2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str, i64 0, i64 0))
%3 = call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0))
%4 = icmp eq i64 %3, 0
%5 = zext i1 %4 to i64
%6 = select i1 %4, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%7 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([115 x i8], [115 x i8]* @.str.1, i64 0, i64 0), i8* %6)
%8 = call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.5, i64 0, i64 0))
%9 = icmp eq i64 %8, 0
%10 = zext i1 %9 to i64
%11 = select i1 %9, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%12 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.4, i64 0, i64 0), i8* %11)
%13 = call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.7, i64 0, i64 0))
%14 = icmp eq i64 %13, 0
%15 = zext i1 %14 to i64
%16 = select i1 %14, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%17 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([84 x i8], [84 x i8]* @.str.6, i64 0, i64 0), i8* %16)
%18 = call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.9, i64 0, i64 0))
%19 = icmp eq i64 %18, 0
%20 = zext i1 %19 to i64
%21 = select i1 %19, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%22 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([226 x i8], [226 x i8]* @.str.8, i64 0, i64 0), i8* %21)
%23 = call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.11, i64 0, i64 0))
%24 = icmp eq i64 %23, 0
%25 = zext i1 %24 to i64
%26 = select i1 %24, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%27 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.10, i64 0, i64 0), i8* %26)
%28 = call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0))
%29 = icmp eq i64 %28, 0
%30 = zext i1 %29 to i64
%31 = select i1 %29, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%32 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([68 x i8], [68 x i8]* @.str.12, i64 0, i64 0), i8* %31)
%33 = call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.15, i64 0, i64 0))
%34 = icmp eq i64 %33, 0
%35 = zext i1 %34 to i64
%36 = select i1 %34, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%37 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([87 x i8], [87 x i8]* @.str.14, i64 0, i64 0), i8* %36)
%38 = call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.17, i64 0, i64 0))
%39 = icmp eq i64 %38, 0
%40 = zext i1 %39 to i64
%41 = select i1 %39, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%42 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([129 x i8], [129 x i8]* @.str.16, i64 0, i64 0), i8* %41)
%43 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i64 0, i64 0))
%44 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([80 x i8], [80 x i8]* @.str.19, i64 0, i64 0))
%45 = call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.21, i64 0, i64 0))
%46 = icmp eq i64 %45, 0
%47 = zext i1 %46 to i64
%48 = select i1 %46, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%49 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([93 x i8], [93 x i8]* @.str.20, i64 0, i64 0), i8* %48)
%50 = call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.23, i64 0, i64 0))
%51 = icmp eq i64 %50, 0
%52 = zext i1 %51 to i64
%53 = select i1 %51, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%54 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([103 x i8], [103 x i8]* @.str.22, i64 0, i64 0), i8* %53)
%55 = call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.25, i64 0, i64 0))
%56 = icmp eq i64 %55, 0
%57 = zext i1 %56 to i64
%58 = select i1 %56, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%59 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([91 x i8], [91 x i8]* @.str.24, i64 0, i64 0), i8* %58)
%60 = call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.27, i64 0, i64 0))
%61 = icmp eq i64 %60, 0
%62 = zext i1 %61 to i64
%63 = select i1 %61, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%64 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([97 x i8], [97 x i8]* @.str.26, i64 0, i64 0), i8* %63)
%65 = call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.29, i64 0, i64 0))
%66 = icmp eq i64 %65, 0
%67 = zext i1 %66 to i64
%68 = select i1 %66, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%69 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([80 x i8], [80 x i8]* @.str.28, i64 0, i64 0), i8* %68)
%70 = call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.31, i64 0, i64 0))
%71 = icmp eq i64 %70, 0
%72 = zext i1 %71 to i64
%73 = select i1 %71, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%74 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([91 x i8], [91 x i8]* @.str.30, i64 0, i64 0), i8* %73)
%75 = call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.33, i64 0, i64 0))
%76 = icmp eq i64 %75, 0
%77 = zext i1 %76 to i64
%78 = select i1 %76, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%79 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([76 x i8], [76 x i8]* @.str.32, i64 0, i64 0), i8* %78)
%80 = call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.35, i64 0, i64 0))
%81 = icmp eq i64 %80, 0
%82 = zext i1 %81 to i64
%83 = select i1 %81, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%84 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([84 x i8], [84 x i8]* @.str.34, i64 0, i64 0), i8* %83)
ret void
}

LLVM IR (-O2):
@.str.1 = [115 x i8] c"\09\1B[1m-e%s <source> <dest_dir>\1B[m\0A\09\09Extracts the file from <source> (in the GCM) to <dest_dir> (local filesystem)\0A\0A\00"
@.str.2 = [1 x i8] zeroinitializer
@.str.3 = [3 x i8] c", \00"
@.str.4 = [42 x i8] c"\09\1B[1m-v%s--verbose \1B[m\0A\09\09Verbose output\0A\0A\00"
@.str.5 = [10 x i8] c"--verbose\00"
@.str.6 = [84 x i8] c"\09\1B[1m-i%s--info \1B[m\0A\09\09Display additional info about the GCM (useful for auditing)\0A\0A\00"
@.str.7 = [7 x i8] c"--info\00"
@.str.8 = [226 x i8] c"\09\1B[1m-l%s--list [ +i +p ]\1B[m\0A\09\09Lists the filesystem of the GCM. If +i is included, it will show the filesizes or filecount (for directories). If +p is included, it will print the full paths of each file (for easy grepping).\0A\0A\00"
@.str.9 = [7 x i8] c"--list\00"
@.str.10 = [44 x i8] c"\09\1B[1m-?%s--help \1B[m\0A\09\09Displays this help.\0A\0A\00"
@.str.11 = [7 x i8] c"--help\00"
@.str.12 = [68 x i8] c"\09\1B[1m-h%s--hex \1B[m\0A\09\09Display file offsets in hexadecimal notation\0A\0A\00"
@.str.13 = [6 x i8] c"--hex\00"
@.str.14 = [87 x i8] c"\09\1B[1m-rfs%s--replace-file-system <fs_root>\1B[m\0A\09\09Replaces the filesystem from fs_root\0A\0A\00"
@.str.15 = [22 x i8] c"--replace-file-system\00"
@.str.16 = [129 x i8] c"\09\1B[1m-rf%s--replace-file <gcm_path> <local_path>\1B[m\0A\09\09Replace a file at <gcm_path> with <local_path> (Files MUST be same size)\0A\0A\00"
@.str.17 = [15 x i8] c"--replace-file\00"
@.str.20 = [93 x i8] c"\09\1B[1m-edh%s--extract-disk-header [ +f <filename> ]\1B[m\0A\09\09Extract the disk header (boot.bin)\0A\0A\00"
@.str.21 = [22 x i8] c"--extract-disk-header\00"
@.str.22 = [103 x i8] c"\09\1B[1m-edhi%s--extract-disk-header-info [ +f <filename> ]\1B[m\0A\09\09Extract the disk header info (bi2.bin)\0A\0A\00"
@.str.23 = [27 x i8] c"--extract-disk-header-info\00"
@.str.24 = [91 x i8] c"\09\1B[1m-eal%s--extract-apploader [ +f <filename> ]\1B[m\0A\09\09Extract the apploader (appldr.bin)\0A\0A\00"
@.str.25 = [20 x i8] c"--extract-apploader\00"
@.str.26 = [97 x i8] c"\09\1B[1m-ed%s--extract-boot-dol [ +f <filename> ]\1B[m\0A\09\09Extract the main executable DOL (boot.dol)\0A\0A\00"
@.str.27 = [19 x i8] c"--extract-boot-dol\00"
@.str.28 = [80 x i8] c"\09\1B[1m-idh%s--inject-disk-header [ +f <filename> ]\1B[m\0A\09\09Inject the disk header\0A\0A\00"
@.str.29 = [21 x i8] c"--inject-disk-header\00"
@.str.30 = [91 x i8] c"\09\1B[1m-idhi%s--inject-disk-header-info [ +f <filename> ]\1B[m\0A\09\09Inject the disk header info\0A\0A\00"
@.str.31 = [26 x i8] c"--inject-disk-header-info\00"
@.str.32 = [76 x i8] c"\09\1B[1m-ial%s--inject-apploader [ +f <filename> ]\1B[m\0A\09\09Inject the apploader\0A\0A\00"
@.str.33 = [19 x i8] c"--inject-apploader\00"
@.str.34 = [84 x i8] c"\09\1B[1m-id%s--inject-boot-dol [ +f <filename> ]\1B[m\0A\09\09Inject the main executable DOL\0A\0A\00"
@.str.35 = [18 x i8] c"--inject-boot-dol\00"
@str = [13 x i8] c" Options:\00"
@str.36 = [79 x i8] c" You can add -f <filename> to specify a filename for the following options...\00"
define void @printExtendedUsage() {
%1 = tail call i32 (...) @printUsage()
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @str, i64 0, i64 0))
%3 = tail call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0))
%4 = icmp eq i64 %3, 0
%5 = select i1 %4, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%6 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([115 x i8], [115 x i8]* @.str.1, i64 0, i64 0), i8* %5)
%7 = tail call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.5, i64 0, i64 0))
%8 = icmp eq i64 %7, 0
%9 = select i1 %8, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%10 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([42 x i8], [42 x i8]* @.str.4, i64 0, i64 0), i8* %9)
%11 = tail call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.7, i64 0, i64 0))
%12 = icmp eq i64 %11, 0
%13 = select i1 %12, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%14 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([84 x i8], [84 x i8]* @.str.6, i64 0, i64 0), i8* %13)
%15 = tail call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.9, i64 0, i64 0))
%16 = icmp eq i64 %15, 0
%17 = select i1 %16, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%18 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([226 x i8], [226 x i8]* @.str.8, i64 0, i64 0), i8* %17)
%19 = tail call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.11, i64 0, i64 0))
%20 = icmp eq i64 %19, 0
%21 = select i1 %20, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%22 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([44 x i8], [44 x i8]* @.str.10, i64 0, i64 0), i8* %21)
%23 = tail call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0))
%24 = icmp eq i64 %23, 0
%25 = select i1 %24, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%26 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([68 x i8], [68 x i8]* @.str.12, i64 0, i64 0), i8* %25)
%27 = tail call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.15, i64 0, i64 0))
%28 = icmp eq i64 %27, 0
%29 = select i1 %28, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%30 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([87 x i8], [87 x i8]* @.str.14, i64 0, i64 0), i8* %29)
%31 = tail call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.17, i64 0, i64 0))
%32 = icmp eq i64 %31, 0
%33 = select i1 %32, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%34 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([129 x i8], [129 x i8]* @.str.16, i64 0, i64 0), i8* %33)
%35 = tail call i32 @putchar(i32 10)
%36 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([79 x i8], [79 x i8]* @str.36, i64 0, i64 0))
%37 = tail call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.21, i64 0, i64 0))
%38 = icmp eq i64 %37, 0
%39 = select i1 %38, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%40 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([93 x i8], [93 x i8]* @.str.20, i64 0, i64 0), i8* %39)
%41 = tail call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.23, i64 0, i64 0))
%42 = icmp eq i64 %41, 0
%43 = select i1 %42, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%44 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([103 x i8], [103 x i8]* @.str.22, i64 0, i64 0), i8* %43)
%45 = tail call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.25, i64 0, i64 0))
%46 = icmp eq i64 %45, 0
%47 = select i1 %46, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%48 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([91 x i8], [91 x i8]* @.str.24, i64 0, i64 0), i8* %47)
%49 = tail call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.27, i64 0, i64 0))
%50 = icmp eq i64 %49, 0
%51 = select i1 %50, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%52 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([97 x i8], [97 x i8]* @.str.26, i64 0, i64 0), i8* %51)
%53 = tail call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.29, i64 0, i64 0))
%54 = icmp eq i64 %53, 0
%55 = select i1 %54, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%56 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([80 x i8], [80 x i8]* @.str.28, i64 0, i64 0), i8* %55)
%57 = tail call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.31, i64 0, i64 0))
%58 = icmp eq i64 %57, 0
%59 = select i1 %58, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%60 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([91 x i8], [91 x i8]* @.str.30, i64 0, i64 0), i8* %59)
%61 = tail call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.33, i64 0, i64 0))
%62 = icmp eq i64 %61, 0
%63 = select i1 %62, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%64 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([76 x i8], [76 x i8]* @.str.32, i64 0, i64 0), i8* %63)
%65 = tail call i64 @strcmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.35, i64 0, i64 0))
%66 = icmp eq i64 %65, 0
%67 = select i1 %66, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0)
%68 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([84 x i8], [84 x i8]* @.str.34, i64 0, i64 0), i8* %67)
ret void
}