#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 */
typedef int /*<<< orphan*/ FILE;

/* Variables and functions */
int abs(long);
int /*<<< orphan*/ fclose(int /*<<< orphan*/ *);
int /*<<< orphan*/ *fgets(char *, int, int /*<<< orphan*/ *);
int /*<<< orphan*/ *fopen(char *, char *);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/ *, char *, char *, char *, char *,
                           char *, char *, char *, ...);
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ sprintf(char *, char *, ...);
int /*<<< orphan*/ strcpy(char *, char *);
char *strtok_r(char *, char *, char **);
long strtol(char *, int /*<<< orphan*/ *, int /*<<< orphan*/);
int /*<<< orphan*/ system(char *);
int get_annotation(char *input_filename, char *gtf) {
  char system_command[1000];
  sprintf(system_command,
          "awk -F \"\\t\" '$3 == \"gene\" { print $1 \"\\t\" $4 \"\\t\" $5 "
          "\"\\t\" $9 }' %s > tmp.gtf",
          gtf);
  system(system_command);
  sprintf(system_command, "sed -i 's/^chr//g' tmp.gtf");
  system(system_command);
  printf("we have a gtf file with the name of %s\n", gtf);
  char varstr[50000];
  char vcfstr[50000];
  char varstr1[50000];
  char vcfstr1[50000];
  char tempstring[50000];
  char col1[100];
  char col2[100];
  char col3[100];
  char col4[100];
  char col5[100];
  char *pvarcol1;
  char *pvarcol2;
  char *pvarcol3;
  char *pvarcol4;
  char *pvarcol5;
  char *pvarcol6;
  char *pvcfcol1_1;
  char *pvcfcol2_2;
  char *pvcfcol3_3;
  char *pvcfcol4_4;
  char *pvcfcol5_5;
  char *pvcfcol1;
  char *pvcfcol2;
  char *pvcfcol3;
  char *pvcfcol4;
  char *pvcfcol5;
  char *end_str;
  char *end_str2;
  char *commentptr;
  FILE *vcffp;
  FILE *varfp;
  FILE *outfp;
  long i;
  long j;
  long j_1;
  long k;
  long l;
  long l_1;
  long m;
  long n;
  long n_1;
  long v1;
  long v2;
  long v3;
  long v4;
  int zero_count;
  int pflag;
  int wflag;
  wflag = 1;
  zero_count = 0;
  pflag = 0;
  sprintf(system_command, "sed -i 's/^chr//g' %s.tmp2", input_filename);
  system(system_command);
  sprintf(system_command, "sed -i 's/^X/23/g' %s.tmp2", input_filename);
  system(system_command);
  sprintf(system_command, "sed -i 's/^Y/24/g' %s.tmp2", input_filename);
  system(system_command);
  sprintf(system_command, "sed -i 's/^M/25/g' %s.tmp2", input_filename);
  system(system_command);
  sprintf(system_command, "sed -i 's/^MT/25/g' %s.tmp2", input_filename);
  system(system_command);
  sprintf(system_command, "sort -k1,1n -k2,2n %s.tmp2 > tmp.tmp2",
          input_filename);
  system(system_command);
  sprintf(system_command, "mv tmp.tmp2 %s.tmp2", input_filename);
  system(system_command);
  sprintf(tempstring, "%s.tmp2", input_filename);
  varfp = fopen(tempstring, "r");
  if (varfp == NULL) {
    printf("Problem opening variant file\n");
    return 1;
  }
  vcffp = fopen("tmp.gtf", "r");
  if (vcffp == NULL) {
    printf("Problem opening vcf file\n");
    return 1;
  }
  sprintf(tempstring, "%s.tmp3", input_filename);
  outfp = fopen(tempstring, "w");
  if (outfp == NULL) {
    printf("Problem opening output file\n");
  }
  fgets(varstr, 50000, varfp);
  strcpy(varstr1, varstr);
  pvarcol1 = strtok_r(varstr, "\t\n", &end_str);
  k = strtol(pvarcol1, NULL, 0);
  pvarcol2 = strtok_r(NULL, "\t\n", &end_str);
  i = strtol(pvarcol2, NULL, 0);
  pvarcol3 = strtok_r(NULL, "\t\n", &end_str);
  m = strtol(pvarcol3, NULL, 0);
  pvarcol4 = strtok_r(NULL, "\t\n", &end_str);
  pvarcol5 = strtok_r(NULL, "\t\n", &end_str);
  pvarcol6 = strtok_r(NULL, "\t\n", &end_str);
  fgets(vcfstr, 10000, vcffp);
  strcpy(vcfstr1, vcfstr);
  pvcfcol1 = strtok_r(vcfstr, "\t", &end_str2);
  n = strtol(pvarcol1, NULL, 0);
  pvcfcol2 = strtok_r(NULL, "\t", &end_str2);
  j = strtol(pvcfcol2, NULL, 0);
  pvcfcol3 = strtok_r(NULL, "\t", &end_str2);
  l = strtol(pvcfcol3, NULL, 0);
  pvcfcol4 = strtok_r(NULL, "\t", &end_str2);
  pvcfcol5 = strtok_r(NULL, "\t\n", &end_str2);
  pvcfcol1_1 = pvcfcol1;
  pvcfcol2_2 = pvcfcol2;
  pvcfcol3_3 = pvcfcol3;
  pvcfcol4_4 = pvcfcol4;
  pvcfcol5_5 = pvcfcol5;
  strcpy(col1, pvcfcol4);
  n_1 = n;
  j_1 = j;
  l_1 = l;
  v1 = i - j;
  v2 = i - l;
  v3 = m - j;
  v4 = m - l;
  while (wflag > 0) {
    if (k < n) {
      fprintf(outfp, "%s\t%s\t%s\t%s\t%s\t%s\t%d\t%d\t%d\t%s\t%d\n", pvarcol1,
              pvarcol2, pvarcol3, pvarcol4, pvarcol5, pvarcol6, n_1, j_1, l_1,
              col1, abs((i - l_1)) + 1);
      pflag = 1;
    } else if (k > n) {
      pflag = 2;
    } else {
      if ((v1 > 0) && (v2 > 0) && (v3 > 0) && (v4 > 0)) {
        pvcfcol1_1 = pvcfcol1;
        pvcfcol2_2 = pvcfcol2;
        pvcfcol3_3 = pvcfcol3;
        pvcfcol4_4 = pvcfcol4;
        strcpy(col1, pvcfcol4);
        n_1 = n;
        j_1 = j;
        l_1 = l;
        pflag = 2;
      } else if ((v1 < 0) && (v2 < 0) && (v3 < 0) && (v4 < 0)) {
        if ((j - m) < (i - l_1)) {
          fprintf(outfp, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%d\n",
                  pvarcol1, pvarcol2, pvarcol3, pvarcol4, pvarcol5, pvarcol6,
                  pvcfcol1, pvcfcol2, pvcfcol3, pvcfcol4, abs((j - m)) + 1);
        } else {
          if (n_1 == n) {
            fprintf(outfp, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%d\t%d\t%s\t%d\n",
                    pvarcol1, pvarcol2, pvarcol3, pvarcol4, pvarcol5, pvarcol6,
                    pvcfcol1, j_1, l_1, col1, abs((i - l_1)) + 1);
          } else {
            fprintf(outfp, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%d\n",
                    pvarcol1, pvarcol2, pvarcol3, pvarcol4, pvarcol5, pvarcol6,
                    pvcfcol1, pvcfcol2, pvcfcol3, pvcfcol4, abs((j - m)) + 1);
          }
        }
        pflag = 1;
      } else {
        zero_count = zero_count + 1;
        fprintf(outfp, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t0\n", pvarcol1,
                pvarcol2, pvarcol3, pvarcol4, pvarcol5, pvarcol6, pvcfcol1,
                pvcfcol2, pvcfcol3, pvcfcol4);
        pflag = 1;
      }
    }
    switch (pflag) {
    case 1:
      if (fgets(varstr, 50000, varfp) != NULL) {
        strcpy(varstr1, varstr);
        pvarcol1 = strtok_r(varstr, "\t\n", &end_str);
        k = strtol(pvarcol1, NULL, 0);
        pvarcol2 = strtok_r(NULL, "\t\n", &end_str);
        i = strtol(pvarcol2, NULL, 0);
        pvarcol3 = strtok_r(NULL, "\t\n", &end_str);
        m = strtol(pvarcol3, NULL, 0);
        pvarcol4 = strtok_r(NULL, "\t\n", &end_str);
        pvarcol5 = strtok_r(NULL, "\t\n", &end_str);
        pvarcol6 = strtok_r(NULL, "\t\n", &end_str);
      } else {
        wflag = 0;
      };
      break;
    case 2:
      if (fgets(vcfstr, 10000, vcffp) != NULL) {
        strcpy(vcfstr1, vcfstr);
        pvcfcol1 = strtok_r(vcfstr, "\t", &end_str2);
        n = strtol(pvcfcol1, NULL, 0);
        pvcfcol2 = strtok_r(NULL, "\t", &end_str2);
        j = strtol(pvcfcol2, NULL, 0);
        pvcfcol3 = strtok_r(NULL, "\t", &end_str2);
        l = strtol(pvcfcol3, NULL, 0);
        pvcfcol4 = strtok_r(NULL, "\t\n", &end_str2);
        pvcfcol5 = strtok_r(NULL, "\t\n", &end_str2);
      } else {
        wflag = 0;
      }
      break;
    }
    v1 = i - j;
    v2 = i - l;
    v3 = m - j;
    v4 = m - l;
  }
  fclose(varfp);
  fclose(vcffp);
  return 0;
}


x86 assembly (clang, -O0):
<get_annotation>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x3d910,%rsp
mov    %rdi,-0x30(%rbp)
mov    %rsi,-0x38(%rbp)
lea    -0x420(%rbp),%rdi
mov    -0x38(%rbp),%rdx
lea    0x1e24(%rip),%rsi
mov    $0x0,%al
call   10d0 <sprintf@plt>
lea    -0x420(%rbp),%rdi
call   1060 <system@plt>
lea    -0x420(%rbp),%rdi
lea    0x1e50(%rip),%rsi
mov    $0x0,%al
call   10d0 <sprintf@plt>
lea    -0x420(%rbp),%rdi
call   1060 <system@plt>
mov    -0x38(%rbp),%rsi
lea    0x1e4d(%rip),%rdi
mov    $0x0,%al
call   1070 <printf@plt>
movl   $0x1,-0x3d804(%rbp)
movl   $0x0,-0x3d7fc(%rbp)
movl   $0x0,-0x3d800(%rbp)
lea    -0x420(%rbp),%rdi
mov    -0x30(%rbp),%rdx
lea    0x1e3e(%rip),%rsi
mov    $0x0,%al
call   10d0 <sprintf@plt>
lea    -0x420(%rbp),%rdi
call   1060 <system@plt>
lea    -0x420(%rbp),%rdi
mov    -0x30(%rbp),%rdx
lea    0x1e34(%rip),%rsi
mov    $0x0,%al
call   10d0 <sprintf@plt>
lea    -0x420(%rbp),%rdi
call   1060 <system@plt>
lea    -0x420(%rbp),%rdi
mov    -0x30(%rbp),%rdx
lea    0x1e2a(%rip),%rsi
mov    $0x0,%al
call   10d0 <sprintf@plt>
lea    -0x420(%rbp),%rdi
call   1060 <system@plt>
lea    -0x420(%rbp),%rdi
mov    -0x30(%rbp),%rdx
lea    0x1e20(%rip),%rsi
mov    $0x0,%al
call   10d0 <sprintf@plt>
lea    -0x420(%rbp),%rdi
call   1060 <system@plt>
lea    -0x420(%rbp),%rdi
mov    -0x30(%rbp),%rdx
lea    0x1e16(%rip),%rsi
mov    $0x0,%al
call   10d0 <sprintf@plt>
lea    -0x420(%rbp),%rdi
call   1060 <system@plt>
lea    -0x420(%rbp),%rdi
mov    -0x30(%rbp),%rdx
lea    0x1e0d(%rip),%rsi
mov    $0x0,%al
call   10d0 <sprintf@plt>
lea    -0x420(%rbp),%rdi
call   1060 <system@plt>
lea    -0x420(%rbp),%rdi
mov    -0x30(%rbp),%rdx
lea    0x1e0e(%rip),%rsi
mov    $0x0,%al
call   10d0 <sprintf@plt>
lea    -0x420(%rbp),%rdi
call   1060 <system@plt>
lea    -0x3d4b0(%rbp),%rdi
mov    -0x30(%rbp),%rdx
lea    0x1d4e(%rip),%rsi
mov    $0x0,%al
call   10d0 <sprintf@plt>
lea    -0x3d4b0(%rbp),%rdi
lea    0x1de8(%rip),%rsi
call   10c0 <fopen@plt>
mov    %rax,-0x3d788(%rbp)
cmpq   $0x0,-0x3d788(%rbp)
jne    139e <get_annotation+0x1ee>
lea    0x1dc9(%rip),%rdi
mov    $0x0,%al
call   1070 <printf@plt>
movl   $0x1,-0x24(%rbp)
jmp    206e <get_annotation+0xebe>
lea    0x1cbb(%rip),%rdi
lea    0x1da6(%rip),%rsi
call   10c0 <fopen@plt>
mov    %rax,-0x3d780(%rbp)
cmpq   $0x0,-0x3d780(%rbp)
jne    13e0 <get_annotation+0x230>
lea    0x1da5(%rip),%rdi
mov    $0x0,%al
call   1070 <printf@plt>
movl   $0x1,-0x24(%rbp)
jmp    206e <get_annotation+0xebe>
lea    -0x3d4b0(%rbp),%rdi
mov    -0x30(%rbp),%rdx
lea    0x1d9a(%rip),%rsi
mov    $0x0,%al
call   10d0 <sprintf@plt>
lea    -0x3d4b0(%rbp),%rdi
lea    0x1d8d(%rip),%rsi
call   10c0 <fopen@plt>
mov    %rax,-0x3d790(%rbp)
cmpq   $0x0,-0x3d790(%rbp)
jne    142f <get_annotation+0x27f>
lea    0x1d6e(%rip),%rdi
mov    $0x0,%al
call   1070 <printf@plt>
lea    -0xc770(%rbp),%rdi
mov    -0x3d788(%rbp),%rdx
mov    $0xc350,%esi
call   1090 <fgets@plt>
lea    -0x24e10(%rbp),%rdi
lea    -0xc770(%rbp),%rsi
call   1030 <strcpy@plt>
lea    -0xc770(%rbp),%rdi
lea    0x1d4b(%rip),%rsi
lea    -0x3d768(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d6e8(%rbp)
mov    -0x3d6e8(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
xor    %edx,%edx
call   10b0 <strtol@plt>
mov    %rax,-0x3d7b0(%rbp)
xor    %eax,%eax
mov    %eax,%edi
lea    0x1d14(%rip),%rsi
lea    -0x3d768(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d6f0(%rbp)
mov    -0x3d6f0(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
xor    %edx,%edx
call   10b0 <strtol@plt>
mov    %rax,-0x3d798(%rbp)
xor    %eax,%eax
mov    %eax,%edi
lea    0x1cdd(%rip),%rsi
lea    -0x3d768(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d6f8(%rbp)
mov    -0x3d6f8(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
xor    %edx,%edx
call   10b0 <strtol@plt>
mov    %rax,-0x3d7c8(%rbp)
xor    %eax,%eax
mov    %eax,%edi
lea    0x1ca6(%rip),%rsi
lea    -0x3d768(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d700(%rbp)
xor    %eax,%eax
mov    %eax,%edi
lea    0x1c88(%rip),%rsi
lea    -0x3d768(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d708(%rbp)
xor    %eax,%eax
mov    %eax,%edi
lea    0x1c6a(%rip),%rsi
lea    -0x3d768(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d710(%rbp)
lea    -0x18ac0(%rbp),%rdi
mov    -0x3d780(%rbp),%rdx
mov    $0x2710,%esi
call   1090 <fgets@plt>
lea    -0x31160(%rbp),%rdi
lea    -0x18ac0(%rbp),%rsi
call   1030 <strcpy@plt>
lea    -0x18ac0(%rbp),%rdi
lea    0x1c21(%rip),%rsi
lea    -0x3d770(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d740(%rbp)
mov    -0x3d6e8(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
xor    %edx,%edx
call   10b0 <strtol@plt>
mov    %rax,-0x3d7d0(%rbp)
xor    %eax,%eax
mov    %eax,%edi
lea    0x1bea(%rip),%rsi
lea    -0x3d770(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d748(%rbp)
mov    -0x3d748(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
xor    %edx,%edx
call   10b0 <strtol@plt>
mov    %rax,-0x3d7a0(%rbp)
xor    %eax,%eax
mov    %eax,%edi
lea    0x1bb3(%rip),%rsi
lea    -0x3d770(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d750(%rbp)
mov    -0x3d750(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
xor    %edx,%edx
call   10b0 <strtol@plt>
mov    %rax,-0x3d7b8(%rbp)
xor    %eax,%eax
mov    %eax,%edi
lea    0x1b7c(%rip),%rsi
lea    -0x3d770(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d758(%rbp)
xor    %eax,%eax
mov    %eax,%edi
lea    0x1b5b(%rip),%rsi
lea    -0x3d770(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d760(%rbp)
mov    -0x3d740(%rbp),%rax
mov    %rax,-0x3d718(%rbp)
mov    -0x3d748(%rbp),%rax
mov    %rax,-0x3d720(%rbp)
mov    -0x3d750(%rbp),%rax
mov    %rax,-0x3d728(%rbp)
mov    -0x3d758(%rbp),%rax
mov    %rax,-0x3d730(%rbp)
mov    -0x3d760(%rbp),%rax
mov    %rax,-0x3d738(%rbp)
lea    -0x3d520(%rbp),%rdi
mov    -0x3d758(%rbp),%rsi
call   1030 <strcpy@plt>
mov    -0x3d7d0(%rbp),%rax
mov    %rax,-0x3d7d8(%rbp)
mov    -0x3d7a0(%rbp),%rax
mov    %rax,-0x3d7a8(%rbp)
mov    -0x3d7b8(%rbp),%rax
mov    %rax,-0x3d7c0(%rbp)
mov    -0x3d798(%rbp),%rax
sub    -0x3d7a0(%rbp),%rax
mov    %rax,-0x3d7e0(%rbp)
mov    -0x3d798(%rbp),%rax
sub    -0x3d7b8(%rbp),%rax
mov    %rax,-0x3d7e8(%rbp)
mov    -0x3d7c8(%rbp),%rax
sub    -0x3d7a0(%rbp),%rax
mov    %rax,-0x3d7f0(%rbp)
mov    -0x3d7c8(%rbp),%rax
sub    -0x3d7b8(%rbp),%rax
mov    %rax,-0x3d7f8(%rbp)
cmpl   $0x0,-0x3d804(%rbp)
jle    204f <get_annotation+0xe9f>
mov    -0x3d7b0(%rbp),%rax
cmp    -0x3d7d0(%rbp),%rax
jge    1866 <get_annotation+0x6b6>
mov    -0x3d790(%rbp),%rax
mov    %rax,-0x3d840(%rbp)
mov    -0x3d6e8(%rbp),%rax
mov    %rax,-0x3d838(%rbp)
mov    -0x3d6f0(%rbp),%rax
mov    %rax,-0x3d830(%rbp)
mov    -0x3d6f8(%rbp),%rax
mov    %rax,-0x3d828(%rbp)
mov    -0x3d700(%rbp),%rax
mov    %rax,-0x3d820(%rbp)
mov    -0x3d708(%rbp),%r12
mov    -0x3d710(%rbp),%r15
mov    -0x3d7d8(%rbp),%r14
mov    -0x3d7a8(%rbp),%rbx
mov    -0x3d7c0(%rbp),%rax
mov    %rax,-0x3d818(%rbp)
lea    -0x3d520(%rbp),%rax
mov    %rax,-0x3d810(%rbp)
mov    -0x3d798(%rbp),%rdi
sub    -0x3d7c0(%rbp),%rdi
call   1040 <abs@plt>
mov    -0x3d840(%rbp),%rdi
mov    -0x3d838(%rbp),%rdx
mov    -0x3d830(%rbp),%rcx
mov    -0x3d828(%rbp),%r8
mov    -0x3d820(%rbp),%r9
mov    -0x3d818(%rbp),%r11
mov    -0x3d810(%rbp),%r10
add    $0x1,%eax
lea    0x1989(%rip),%rsi
mov    %r12,(%rsp)
mov    %r15,0x8(%rsp)
mov    %r14,0x10(%rsp)
mov    %rbx,0x18(%rsp)
mov    %r11,0x20(%rsp)
mov    %r10,0x28(%rsp)
mov    %eax,0x30(%rsp)
mov    $0x0,%al
call   10a0 <fprintf@plt>
movl   $0x1,-0x3d800(%rbp)
jmp    1d50 <get_annotation+0xba0>
mov    -0x3d7b0(%rbp),%rax
cmp    -0x3d7d0(%rbp),%rax
jle    1889 <get_annotation+0x6d9>
movl   $0x2,-0x3d800(%rbp)
jmp    1d4b <get_annotation+0xb9b>
cmpq   $0x0,-0x3d7e0(%rbp)
jle    1945 <get_annotation+0x795>
cmpq   $0x0,-0x3d7e8(%rbp)
jle    1945 <get_annotation+0x795>
cmpq   $0x0,-0x3d7f0(%rbp)
jle    1945 <get_annotation+0x795>
cmpq   $0x0,-0x3d7f8(%rbp)
jle    1945 <get_annotation+0x795>
mov    -0x3d740(%rbp),%rax
mov    %rax,-0x3d718(%rbp)
mov    -0x3d748(%rbp),%rax
mov    %rax,-0x3d720(%rbp)
mov    -0x3d750(%rbp),%rax
mov    %rax,-0x3d728(%rbp)
mov    -0x3d758(%rbp),%rax
mov    %rax,-0x3d730(%rbp)
lea    -0x3d520(%rbp),%rdi
mov    -0x3d758(%rbp),%rsi
call   1030 <strcpy@plt>
mov    -0x3d7d0(%rbp),%rax
mov    %rax,-0x3d7d8(%rbp)
mov    -0x3d7a0(%rbp),%rax
mov    %rax,-0x3d7a8(%rbp)
mov    -0x3d7b8(%rbp),%rax
mov    %rax,-0x3d7c0(%rbp)
movl   $0x2,-0x3d800(%rbp)
jmp    1d46 <get_annotation+0xb96>
cmpq   $0x0,-0x3d7e0(%rbp)
jge    1cb0 <get_annotation+0xb00>
cmpq   $0x0,-0x3d7e8(%rbp)
jge    1cb0 <get_annotation+0xb00>
cmpq   $0x0,-0x3d7f0(%rbp)
jge    1cb0 <get_annotation+0xb00>
cmpq   $0x0,-0x3d7f8(%rbp)
jge    1cb0 <get_annotation+0xb00>
mov    -0x3d7a0(%rbp),%rax
sub    -0x3d7c8(%rbp),%rax
mov    -0x3d798(%rbp),%rcx
sub    -0x3d7c0(%rbp),%rcx
cmp    %rcx,%rax
jge    1a9b <get_annotation+0x8eb>
mov    -0x3d790(%rbp),%rax
mov    %rax,-0x3d878(%rbp)
mov    -0x3d6e8(%rbp),%rax
mov    %rax,-0x3d870(%rbp)
mov    -0x3d6f0(%rbp),%rax
mov    %rax,-0x3d868(%rbp)
mov    -0x3d6f8(%rbp),%rax
mov    %rax,-0x3d860(%rbp)
mov    -0x3d700(%rbp),%rax
mov    %rax,-0x3d858(%rbp)
mov    -0x3d708(%rbp),%r12
mov    -0x3d710(%rbp),%r15
mov    -0x3d740(%rbp),%r14
mov    -0x3d748(%rbp),%rbx
mov    -0x3d750(%rbp),%rax
mov    %rax,-0x3d850(%rbp)
mov    -0x3d758(%rbp),%rax
mov    %rax,-0x3d848(%rbp)
mov    -0x3d7a0(%rbp),%rdi
sub    -0x3d7c8(%rbp),%rdi
call   1040 <abs@plt>
mov    -0x3d878(%rbp),%rdi
mov    -0x3d870(%rbp),%rdx
mov    -0x3d868(%rbp),%rcx
mov    -0x3d860(%rbp),%r8
mov    -0x3d858(%rbp),%r9
mov    -0x3d850(%rbp),%r11
mov    -0x3d848(%rbp),%r10
add    $0x1,%eax
lea    0x176c(%rip),%rsi
mov    %r12,(%rsp)
mov    %r15,0x8(%rsp)
mov    %r14,0x10(%rsp)
mov    %rbx,0x18(%rsp)
mov    %r11,0x20(%rsp)
mov    %r10,0x28(%rsp)
mov    %eax,0x30(%rsp)
mov    $0x0,%al
call   10a0 <fprintf@plt>
jmp    1ca1 <get_annotation+0xaf1>
mov    -0x3d7d8(%rbp),%rax
cmp    -0x3d7d0(%rbp),%rax
jne    1ba8 <get_annotation+0x9f8>
mov    -0x3d790(%rbp),%rax
mov    %rax,-0x3d8b0(%rbp)
mov    -0x3d6e8(%rbp),%rax
mov    %rax,-0x3d8a8(%rbp)
mov    -0x3d6f0(%rbp),%rax
mov    %rax,-0x3d8a0(%rbp)
mov    -0x3d6f8(%rbp),%rax
mov    %rax,-0x3d898(%rbp)
mov    -0x3d700(%rbp),%rax
mov    %rax,-0x3d890(%rbp)
mov    -0x3d708(%rbp),%r12
mov    -0x3d710(%rbp),%r15
mov    -0x3d740(%rbp),%r14
mov    -0x3d7a8(%rbp),%rbx
mov    -0x3d7c0(%rbp),%rax
mov    %rax,-0x3d888(%rbp)
lea    -0x3d520(%rbp),%rax
mov    %rax,-0x3d880(%rbp)
mov    -0x3d798(%rbp),%rdi
sub    -0x3d7c0(%rbp),%rdi
call   1040 <abs@plt>
mov    -0x3d8b0(%rbp),%rdi
mov    -0x3d8a8(%rbp),%rdx
mov    -0x3d8a0(%rbp),%rcx
mov    -0x3d898(%rbp),%r8
mov    -0x3d890(%rbp),%r9
mov    -0x3d888(%rbp),%r11
mov    -0x3d880(%rbp),%r10
add    $0x1,%eax
lea    0x1681(%rip),%rsi
mov    %r12,(%rsp)
mov    %r15,0x8(%rsp)
mov    %r14,0x10(%rsp)
mov    %rbx,0x18(%rsp)
mov    %r11,0x20(%rsp)
mov    %r10,0x28(%rsp)
mov    %eax,0x30(%rsp)
mov    $0x0,%al
call   10a0 <fprintf@plt>
jmp    1c9c <get_annotation+0xaec>
mov    -0x3d790(%rbp),%rax
mov    %rax,-0x3d8e8(%rbp)
mov    -0x3d6e8(%rbp),%rax
mov    %rax,-0x3d8e0(%rbp)
mov    -0x3d6f0(%rbp),%rax
mov    %rax,-0x3d8d8(%rbp)
mov    -0x3d6f8(%rbp),%rax
mov    %rax,-0x3d8d0(%rbp)
mov    -0x3d700(%rbp),%rax
mov    %rax,-0x3d8c8(%rbp)
mov    -0x3d708(%rbp),%r12
mov    -0x3d710(%rbp),%r15
mov    -0x3d740(%rbp),%r14
mov    -0x3d748(%rbp),%rbx
mov    -0x3d750(%rbp),%rax
mov    %rax,-0x3d8c0(%rbp)
mov    -0x3d758(%rbp),%rax
mov    %rax,-0x3d8b8(%rbp)
mov    -0x3d7a0(%rbp),%rdi
sub    -0x3d7c8(%rbp),%rdi
call   1040 <abs@plt>
mov    -0x3d8e8(%rbp),%rdi
mov    -0x3d8e0(%rbp),%rdx
mov    -0x3d8d8(%rbp),%rcx
mov    -0x3d8d0(%rbp),%r8
mov    -0x3d8c8(%rbp),%r9
mov    -0x3d8c0(%rbp),%r11
mov    -0x3d8b8(%rbp),%r10
add    $0x1,%eax
lea    0x1566(%rip),%rsi
mov    %r12,(%rsp)
mov    %r15,0x8(%rsp)
mov    %r14,0x10(%rsp)
mov    %rbx,0x18(%rsp)
mov    %r11,0x20(%rsp)
mov    %r10,0x28(%rsp)
mov    %eax,0x30(%rsp)
mov    $0x0,%al
call   10a0 <fprintf@plt>
jmp    1ca1 <get_annotation+0xaf1>
movl   $0x1,-0x3d800(%rbp)
jmp    1d41 <get_annotation+0xb91>
mov    -0x3d7fc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3d7fc(%rbp)
mov    -0x3d790(%rbp),%rdi
mov    -0x3d6e8(%rbp),%rdx
mov    -0x3d6f0(%rbp),%rcx
mov    -0x3d6f8(%rbp),%r8
mov    -0x3d700(%rbp),%r9
mov    -0x3d708(%rbp),%r15
mov    -0x3d710(%rbp),%r14
mov    -0x3d740(%rbp),%rbx
mov    -0x3d748(%rbp),%r11
mov    -0x3d750(%rbp),%r10
mov    -0x3d758(%rbp),%rax
lea    0x150b(%rip),%rsi
mov    %r15,(%rsp)
mov    %r14,0x8(%rsp)
mov    %rbx,0x10(%rsp)
mov    %r11,0x18(%rsp)
mov    %r10,0x20(%rsp)
mov    %rax,0x28(%rsp)
mov    $0x0,%al
call   10a0 <fprintf@plt>
movl   $0x1,-0x3d800(%rbp)
jmp    1d46 <get_annotation+0xb96>
jmp    1d4b <get_annotation+0xb9b>
jmp    1d50 <get_annotation+0xba0>
mov    -0x3d800(%rbp),%eax
mov    %eax,-0x3d8ec(%rbp)
sub    $0x1,%eax
je     1d7e <get_annotation+0xbce>
jmp    1d6a <get_annotation+0xbba>
mov    -0x3d8ec(%rbp),%eax
sub    $0x2,%eax
je     1ec9 <get_annotation+0xd19>
jmp    1ff6 <get_annotation+0xe46>
lea    -0xc770(%rbp),%rdi
mov    -0x3d788(%rbp),%rdx
mov    $0xc350,%esi
call   1090 <fgets@plt>
cmp    $0x0,%rax
je     1eba <get_annotation+0xd0a>
lea    -0x24e10(%rbp),%rdi
lea    -0xc770(%rbp),%rsi
call   1030 <strcpy@plt>
lea    -0xc770(%rbp),%rdi
lea    0x13f2(%rip),%rsi
lea    -0x3d768(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d6e8(%rbp)
mov    -0x3d6e8(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
xor    %edx,%edx
call   10b0 <strtol@plt>
mov    %rax,-0x3d7b0(%rbp)
xor    %eax,%eax
mov    %eax,%edi
lea    0x13bb(%rip),%rsi
lea    -0x3d768(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d6f0(%rbp)
mov    -0x3d6f0(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
xor    %edx,%edx
call   10b0 <strtol@plt>
mov    %rax,-0x3d798(%rbp)
xor    %eax,%eax
mov    %eax,%edi
lea    0x1384(%rip),%rsi
lea    -0x3d768(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d6f8(%rbp)
mov    -0x3d6f8(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
xor    %edx,%edx
call   10b0 <strtol@plt>
mov    %rax,-0x3d7c8(%rbp)
xor    %eax,%eax
mov    %eax,%edi
lea    0x134d(%rip),%rsi
lea    -0x3d768(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d700(%rbp)
xor    %eax,%eax
mov    %eax,%edi
lea    0x132f(%rip),%rsi
lea    -0x3d768(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d708(%rbp)
xor    %eax,%eax
mov    %eax,%edi
lea    0x1311(%rip),%rsi
lea    -0x3d768(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d710(%rbp)
jmp    1ec4 <get_annotation+0xd14>
movl   $0x0,-0x3d804(%rbp)
jmp    1ff6 <get_annotation+0xe46>
lea    -0x18ac0(%rbp),%rdi
mov    -0x3d780(%rbp),%rdx
mov    $0x2710,%esi
call   1090 <fgets@plt>
cmp    $0x0,%rax
je     1fe7 <get_annotation+0xe37>
lea    -0x31160(%rbp),%rdi
lea    -0x18ac0(%rbp),%rsi
call   1030 <strcpy@plt>
lea    -0x18ac0(%rbp),%rdi
lea    0x12aa(%rip),%rsi
lea    -0x3d770(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d740(%rbp)
mov    -0x3d740(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
xor    %edx,%edx
call   10b0 <strtol@plt>
mov    %rax,-0x3d7d0(%rbp)
xor    %eax,%eax
mov    %eax,%edi
lea    0x1273(%rip),%rsi
lea    -0x3d770(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d748(%rbp)
mov    -0x3d748(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
xor    %edx,%edx
call   10b0 <strtol@plt>
mov    %rax,-0x3d7a0(%rbp)
xor    %eax,%eax
mov    %eax,%edi
lea    0x123c(%rip),%rsi
lea    -0x3d770(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d750(%rbp)
mov    -0x3d750(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
xor    %edx,%edx
call   10b0 <strtol@plt>
mov    %rax,-0x3d7b8(%rbp)
xor    %eax,%eax
mov    %eax,%edi
lea    0x1202(%rip),%rsi
lea    -0x3d770(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d758(%rbp)
xor    %eax,%eax
mov    %eax,%edi
lea    0x11e4(%rip),%rsi
lea    -0x3d770(%rbp),%rdx
call   1080 <strtok_r@plt>
mov    %rax,-0x3d760(%rbp)
jmp    1ff1 <get_annotation+0xe41>
movl   $0x0,-0x3d804(%rbp)
jmp    1ff6 <get_annotation+0xe46>
mov    -0x3d798(%rbp),%rax
sub    -0x3d7a0(%rbp),%rax
mov    %rax,-0x3d7e0(%rbp)
mov    -0x3d798(%rbp),%rax
sub    -0x3d7b8(%rbp),%rax
mov    %rax,-0x3d7e8(%rbp)
mov    -0x3d7c8(%rbp),%rax
sub    -0x3d7a0(%rbp),%rax
mov    %rax,-0x3d7f0(%rbp)
mov    -0x3d7c8(%rbp),%rax
sub    -0x3d7b8(%rbp),%rax
mov    %rax,-0x3d7f8(%rbp)
jmp    1742 <get_annotation+0x592>
mov    -0x3d788(%rbp),%rdi
call   1050 <fclose@plt>
mov    -0x3d780(%rbp),%rdi
call   1050 <fclose@plt>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
add    $0x3d910,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<get_annotation>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x3d5a8,%rsp
mov    %rsi,%rbx
mov    %rdi,%r14
lea    0xe22(%rip),%rsi
lea    0x120(%rsp),%rbp
mov    %rbp,%rdi
mov    %rbx,%rdx
xor    %eax,%eax
call   10e0 <sprintf@plt>
mov    %rbp,%rdi
call   1070 <system@plt>
movups 0xe4b(%rip),%xmm0
movaps %xmm0,0x120(%rsp)
movups 0xe47(%rip),%xmm0
movups %xmm0,0x12b(%rsp)
mov    %rbp,%rdi
call   1070 <system@plt>
lea    0xe40(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xe57(%rip),%rsi
mov    %rbp,%rdi
mov    %r14,%rdx
xor    %eax,%eax
call   10e0 <sprintf@plt>
mov    %rbp,%rdi
call   1070 <system@plt>
lea    0xe56(%rip),%rsi
mov    %rbp,%rdi
mov    %r14,%rdx
xor    %eax,%eax
call   10e0 <sprintf@plt>
mov    %rbp,%rdi
call   1070 <system@plt>
lea    0xe55(%rip),%rsi
mov    %rbp,%rdi
mov    %r14,%rdx
xor    %eax,%eax
call   10e0 <sprintf@plt>
mov    %rbp,%rdi
call   1070 <system@plt>
lea    0xe54(%rip),%rsi
mov    %rbp,%rdi
mov    %r14,%rdx
xor    %eax,%eax
call   10e0 <sprintf@plt>
mov    %rbp,%rdi
call   1070 <system@plt>
lea    0xe53(%rip),%rsi
mov    %rbp,%rdi
mov    %r14,%rdx
xor    %eax,%eax
call   10e0 <sprintf@plt>
mov    %rbp,%rdi
call   1070 <system@plt>
lea    0xe53(%rip),%rsi
mov    %rbp,%rdi
mov    %r14,%rdx
xor    %eax,%eax
call   10e0 <sprintf@plt>
mov    %rbp,%rdi
call   1070 <system@plt>
lea    0xe5d(%rip),%rsi
mov    %rbp,%rdi
mov    %r14,%rdx
xor    %eax,%eax
call   10e0 <sprintf@plt>
mov    %rbp,%rdi
call   1070 <system@plt>
lea    0xda6(%rip),%rsi
lea    0x18bb0(%rsp),%rbx
mov    %rbx,%rdi
mov    %r14,%rdx
xor    %eax,%eax
call   10e0 <sprintf@plt>
lea    0xe39(%rip),%rsi
mov    %rbx,%rdi
call   10d0 <fopen@plt>
mov    %rax,0x80(%rsp)
test   %rax,%rax
je     199a <get_annotation+0x7da>
lea    0xd27(%rip),%rdi
lea    0xe12(%rip),%rsi
call   10d0 <fopen@plt>
mov    %rax,0x78(%rsp)
test   %rax,%rax
je     19a3 <get_annotation+0x7e3>
lea    0xdfa(%rip),%rsi
lea    0x18bb0(%rsp),%rbx
mov    %rbx,%rdi
mov    %r14,%rdx
xor    %eax,%eax
call   10e0 <sprintf@plt>
lea    0xde6(%rip),%rsi
mov    %rbx,%rdi
call   10d0 <fopen@plt>
mov    %rax,0x48(%rsp)
test   %rax,%rax
jne    1394 <get_annotation+0x1d4>
lea    0xe5b(%rip),%rdi
call   1040 <puts@plt>
lea    0xc860(%rsp),%rbp
mov    %rbp,%rdi
mov    $0xc350,%esi
mov    0x80(%rsp),%rdx
call   10a0 <fgets@plt>
lea    0x31250(%rsp),%rdi
mov    %rbp,%rsi
call   1030 <strcpy@plt>
lea    0xd96(%rip),%rsi
lea    0xa8(%rsp),%rbx
mov    %rbp,%rdi
mov    %rsi,%rbp
mov    %rbx,%rdx
call   1090 <strtok_r@plt>
mov    %rax,%r15
mov    %rax,%rdi
xor    %esi,%esi
xor    %edx,%edx
call   10c0 <strtol@plt>
mov    %rax,0x88(%rsp)
xor    %edi,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
call   1090 <strtok_r@plt>
mov    %rax,0x18(%rsp)
mov    %rax,%rdi
xor    %esi,%esi
xor    %edx,%edx
call   10c0 <strtol@plt>
mov    %rax,0x30(%rsp)
xor    %edi,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
call   1090 <strtok_r@plt>
mov    %rax,0x8(%rsp)
mov    %rax,%rdi
xor    %esi,%esi
xor    %edx,%edx
call   10c0 <strtol@plt>
mov    %rax,%r13
xor    %edi,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
call   1090 <strtok_r@plt>
mov    %rax,(%rsp)
xor    %edi,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
call   1090 <strtok_r@plt>
mov    %rax,0x20(%rsp)
xor    %edi,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
call   1090 <strtok_r@plt>
mov    %rax,0x10(%rsp)
lea    0x510(%rsp),%rbx
mov    %rbx,%rdi
mov    $0x2710,%esi
mov    0x78(%rsp),%rdx
call   10a0 <fgets@plt>
lea    0x24f00(%rsp),%rdi
mov    %rbx,%rsi
call   1030 <strcpy@plt>
lea    0xcc2(%rip),%r14
lea    0xa0(%rsp),%r12
mov    %rbx,%rdi
mov    %r14,%rsi
mov    %r12,%rdx
call   1090 <strtok_r@plt>
mov    %rax,0x38(%rsp)
mov    %r15,0x28(%rsp)
mov    %r15,%rdi
xor    %esi,%esi
xor    %edx,%edx
call   10c0 <strtol@plt>
mov    %rax,0x50(%rsp)
xor    %edi,%edi
mov    %r14,%rsi
mov    %r12,%rdx
call   1090 <strtok_r@plt>
mov    %rax,0x60(%rsp)
mov    %rax,%rdi
xor    %esi,%esi
xor    %edx,%edx
call   10c0 <strtol@plt>
mov    %rax,%rbx
xor    %edi,%edi
mov    %r14,%rsi
mov    %r12,%rdx
call   1090 <strtok_r@plt>
mov    %rax,0x58(%rsp)
mov    %rax,%rdi
xor    %esi,%esi
xor    %edx,%edx
call   10c0 <strtol@plt>
mov    %rax,%r15
xor    %edi,%edi
mov    %r14,%rsi
mov    %r12,%rdx
call   1090 <strtok_r@plt>
mov    %rax,%rbp
xor    %edi,%edi
lea    0xc33(%rip),%rsi
mov    %r12,%rdx
call   1090 <strtok_r@plt>
lea    0xb0(%rsp),%rdi
mov    %rbp,0x40(%rsp)
mov    %rbp,%rsi
mov    0x30(%rsp),%rbp
call   1030 <strcpy@plt>
mov    %rbp,%rsi
sub    %rbx,%rsi
mov    %rbp,%rdx
sub    %r15,%rdx
mov    %r13,%rcx
sub    %rbx,%rcx
mov    %r13,%rax
sub    %r15,%rax
mov    0x50(%rsp),%r12
mov    %r15,0x70(%rsp)
mov    %rbx,0x68(%rsp)
mov    %rbx,%r14
jmp    16c8 <get_annotation+0x508>
mov    0x48(%rsp),%rdi
lea    0xc41(%rip),%rsi
mov    0x28(%rsp),%rdx
mov    0x18(%rsp),%rcx
mov    0x8(%rsp),%r8
mov    (%rsp),%r9
xor    %eax,%eax
push   0x40(%rsp)
push   0x60(%rsp)
push   0x70(%rsp)
push   0x50(%rsp)
push   0x30(%rsp)
push   0x48(%rsp)
call   10b0 <fprintf@plt>
add    $0x30,%rsp
xchg   %ax,%ax
lea    0xc860(%rsp),%rdi
mov    $0xc350,%esi
mov    0x80(%rsp),%rdx
call   10a0 <fgets@plt>
test   %rax,%rax
je     197f <get_annotation+0x7bf>
lea    0x31250(%rsp),%rdi
lea    0xc860(%rsp),%rbx
mov    %rbx,%rsi
call   1030 <strcpy@plt>
mov    %rbx,%rdi
lea    0xb59(%rip),%rbp
mov    %rbp,%rsi
lea    0xa8(%rsp),%rbx
mov    %rbx,%rdx
call   1090 <strtok_r@plt>
mov    %rax,0x28(%rsp)
mov    %rax,%rdi
xor    %esi,%esi
xor    %edx,%edx
call   10c0 <strtol@plt>
mov    %rax,0x88(%rsp)
xor    %edi,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
call   1090 <strtok_r@plt>
mov    %rax,0x18(%rsp)
mov    %rax,%rdi
xor    %esi,%esi
xor    %edx,%edx
call   10c0 <strtol@plt>
mov    %rax,%r12
xor    %edi,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
call   1090 <strtok_r@plt>
mov    %rax,0x8(%rsp)
mov    %rax,%rdi
xor    %esi,%esi
xor    %edx,%edx
call   10c0 <strtol@plt>
mov    %rax,%r13
xor    %edi,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
call   1090 <strtok_r@plt>
mov    %rax,(%rsp)
xor    %edi,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
call   1090 <strtok_r@plt>
mov    %rax,0x20(%rsp)
xor    %edi,%edi
mov    %rbp,%rsi
mov    %r12,%rbp
mov    %rbx,%rdx
call   1090 <strtok_r@plt>
mov    %rax,0x10(%rsp)
mov    0x30(%rsp),%r12
mov    %rbp,%rsi
sub    %r14,%rsi
mov    %rbp,%rdx
sub    %r15,%rdx
mov    %r13,%rcx
sub    %r14,%rcx
mov    %r13,%rax
sub    %r15,%rax
cmp    %r12,0x88(%rsp)
jge    1740 <get_annotation+0x580>
mov    %r12,0x30(%rsp)
mov    0x70(%rsp),%rbx
sub    %rbx,%rbp
mov    %rbp,%rdi
call   1050 <abs@plt>
mov    %eax,%ebp
add    $0x1,%ebp
sub    $0x8,%rsp
mov    0x50(%rsp),%rdi
lea    0xa67(%rip),%rsi
mov    0x30(%rsp),%rdx
mov    0x20(%rsp),%rcx
mov    0x10(%rsp),%r8
mov    0x8(%rsp),%r9
xor    %eax,%eax
push   %rbp
lea    0xc0(%rsp),%rbp
push   %rbp
push   %rbx
push   0x88(%rsp)
push   0x78(%rsp)
push   0x40(%rsp)
push   0x58(%rsp)
call   10b0 <fprintf@plt>
add    $0x40,%rsp
jmp    15c0 <get_annotation+0x400>
xchg   %ax,%ax
jle    1760 <get_annotation+0x5a0>
mov    0x68(%rsp),%r14
mov    0x50(%rsp),%rax
mov    %rax,0x30(%rsp)
jmp    17a0 <get_annotation+0x5e0>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
test   %rsi,%rsi
mov    %r12,0x30(%rsp)
jle    18ae <get_annotation+0x6ee>
test   %rdx,%rdx
jle    18ae <get_annotation+0x6ee>
test   %rcx,%rcx
jle    18ae <get_annotation+0x6ee>
test   %rax,%rax
jle    18ae <get_annotation+0x6ee>
mov    %r15,0x70(%rsp)
lea    0xb0(%rsp),%rdi
mov    0x40(%rsp),%rsi
call   1030 <strcpy@plt>
lea    0x510(%rsp),%rdi
mov    $0x2710,%esi
mov    0x78(%rsp),%rdx
call   10a0 <fgets@plt>
test   %rax,%rax
je     197f <get_annotation+0x7bf>
lea    0x24f00(%rsp),%rdi
lea    0x510(%rsp),%rbx
mov    %rbx,%rsi
call   1030 <strcpy@plt>
mov    %rbx,%rdi
lea    0x97f(%rip),%rbx
mov    %rbx,%rsi
mov    %r13,0x98(%rsp)
lea    0xa0(%rsp),%r13
mov    %r13,%rdx
call   1090 <strtok_r@plt>
mov    %rax,0x38(%rsp)
mov    %rax,%rdi
xor    %esi,%esi
xor    %edx,%edx
call   10c0 <strtol@plt>
mov    %rax,0x90(%rsp)
xor    %edi,%edi
mov    %rbx,%rsi
mov    %r13,%rdx
call   1090 <strtok_r@plt>
mov    %rax,0x60(%rsp)
mov    %rax,%rdi
xor    %esi,%esi
xor    %edx,%edx
call   10c0 <strtol@plt>
mov    %rax,%r15
xor    %edi,%edi
mov    %rbx,%rsi
mov    %r13,%rdx
call   1090 <strtok_r@plt>
mov    %rax,0x58(%rsp)
mov    %rax,%rdi
xor    %esi,%esi
xor    %edx,%edx
call   10c0 <strtol@plt>
mov    %rax,%rbx
xor    %edi,%edi
mov    %rbp,%r12
lea    0x8fa(%rip),%rbp
mov    %rbp,%rsi
mov    %r13,%rdx
call   1090 <strtok_r@plt>
mov    %rax,0x40(%rsp)
xor    %edi,%edi
mov    %rbp,%rsi
mov    %r12,%rbp
mov    %r13,%rdx
mov    0x98(%rsp),%r13
call   1090 <strtok_r@plt>
mov    0x30(%rsp),%rax
mov    %rax,0x50(%rsp)
mov    %r14,0x68(%rsp)
mov    %r15,%r14
mov    %rbx,%r15
mov    0x90(%rsp),%r12
jmp    16b0 <get_annotation+0x4f0>
test   %rsi,%rsi
jns    157c <get_annotation+0x3bc>
test   %rdx,%rdx
jns    157c <get_annotation+0x3bc>
test   %rcx,%rcx
jns    157c <get_annotation+0x3bc>
test   %rax,%rax
jns    157c <get_annotation+0x3bc>
mov    %r14,%rdi
sub    %r13,%rdi
sub    0x70(%rsp),%rbp
cmp    %rbp,%rdi
jl     1936 <get_annotation+0x776>
cmp    %r12,0x50(%rsp)
jne    1936 <get_annotation+0x776>
mov    %rbp,%rdi
call   1050 <abs@plt>
mov    %eax,%ebp
add    $0x1,%ebp
sub    $0x8,%rsp
mov    0x50(%rsp),%rdi
lea    0x8a1(%rip),%rsi
mov    0x30(%rsp),%rdx
mov    0x20(%rsp),%rcx
mov    0x10(%rsp),%r8
mov    0x8(%rsp),%r9
xor    %eax,%eax
push   %rbp
lea    0xc0(%rsp),%rbp
push   %rbp
push   0x88(%rsp)
push   0x88(%rsp)
jmp    1976 <get_annotation+0x7b6>
call   1050 <abs@plt>
mov    %eax,%ebp
add    $0x1,%ebp
sub    $0x8,%rsp
mov    0x50(%rsp),%rdi
lea    0x835(%rip),%rsi
mov    0x30(%rsp),%rdx
mov    0x20(%rsp),%rcx
mov    0x10(%rsp),%r8
mov    0x8(%rsp),%r9
xor    %eax,%eax
push   %rbp
push   0x50(%rsp)
push   0x70(%rsp)
push   0x80(%rsp)
push   0x60(%rsp)
jmp    1728 <get_annotation+0x568>
mov    0x80(%rsp),%rdi
call   1060 <fclose@plt>
mov    0x78(%rsp),%rdi
call   1060 <fclose@plt>
xor    %eax,%eax
jmp    19b4 <get_annotation+0x7f4>
lea    0x87e(%rip),%rdi
jmp    19aa <get_annotation+0x7ea>
lea    0x85c(%rip),%rdi
call   1040 <puts@plt>
mov    $0x1,%eax
add    $0x3d5a8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [77 x i8] c"awk -F \22\\t\22 '$3 == \22gene\22 { print $1 \22\\t\22 $4 \22\\t\22 $5 \22\\t\22 $9 }' %s > tmp.gtf\00"
@.str.1 = [27 x i8] c"sed -i 's/^chr//g' tmp.gtf\00"
@.str.2 = [40 x i8] c"we have a gtf file with the name of %s\0A\00"
@.str.3 = [27 x i8] c"sed -i 's/^chr//g' %s.tmp2\00"
@.str.4 = [27 x i8] c"sed -i 's/^X/23/g' %s.tmp2\00"
@.str.5 = [27 x i8] c"sed -i 's/^Y/24/g' %s.tmp2\00"
@.str.6 = [27 x i8] c"sed -i 's/^M/25/g' %s.tmp2\00"
@.str.7 = [28 x i8] c"sed -i 's/^MT/25/g' %s.tmp2\00"
@.str.8 = [38 x i8] c"sort -k1,1n -k2,2n %s.tmp2 > tmp.tmp2\00"
@.str.9 = [20 x i8] c"mv tmp.tmp2 %s.tmp2\00"
@.str.10 = [8 x i8] c"%s.tmp2\00"
@.str.11 = [2 x i8] c"r\00"
@.str.12 = [30 x i8] c"Problem opening variant file\0A\00"
@.str.13 = [8 x i8] c"tmp.gtf\00"
@.str.14 = [26 x i8] c"Problem opening vcf file\0A\00"
@.str.15 = [8 x i8] c"%s.tmp3\00"
@.str.16 = [2 x i8] c"w\00"
@.str.17 = [29 x i8] c"Problem opening output file\0A\00"
@.str.18 = [3 x i8] c"\09\0A\00"
@.str.19 = [2 x i8] c"\09\00"
@.str.20 = [34 x i8] c"%s\09%s\09%s\09%s\09%s\09%s\09%d\09%d\09%d\09%s\09%d\0A\00"
@.str.21 = [34 x i8] c"%s\09%s\09%s\09%s\09%s\09%s\09%s\09%s\09%s\09%s\09%d\0A\00"
@.str.22 = [34 x i8] c"%s\09%s\09%s\09%s\09%s\09%s\09%s\09%d\09%d\09%s\09%d\0A\00"
@.str.23 = [33 x i8] c"%s\09%s\09%s\09%s\09%s\09%s\09%s\09%s\09%s\09%s\090\0A\00"
define i32 @get_annotation(i8* %0, i8* %1) {
%3 = alloca i32
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca [1000 x i8]
%7 = alloca [50000 x i8]
%8 = alloca [50000 x i8]
%9 = alloca [50000 x i8]
%10 = alloca [50000 x i8]
%11 = alloca [50000 x i8]
%12 = alloca [100 x i8]
%13 = alloca [100 x i8]
%14 = alloca [100 x i8]
%15 = alloca [100 x i8]
%16 = alloca [100 x i8]
%17 = alloca i8*
%18 = alloca i8*
%19 = alloca i8*
%20 = alloca i8*
%21 = alloca i8*
%22 = alloca i8*
%23 = alloca i8*
%24 = alloca i8*
%25 = alloca i8*
%26 = alloca i8*
%27 = alloca i8*
%28 = alloca i8*
%29 = alloca i8*
%30 = alloca i8*
%31 = alloca i8*
%32 = alloca i8*
%33 = alloca i8*
%34 = alloca i8*
%35 = alloca i8*
%36 = alloca i32*
%37 = alloca i32*
%38 = alloca i32*
%39 = alloca i64
%40 = alloca i64
%41 = alloca i64
%42 = alloca i64
%43 = alloca i64
%44 = alloca i64
%45 = alloca i64
%46 = alloca i64
%47 = alloca i64
%48 = alloca i64
%49 = alloca i64
%50 = alloca i64
%51 = alloca i64
%52 = alloca i32
%53 = alloca i32
%54 = alloca i32
store i8* %0, i8** %4
store i8* %1, i8** %5
%55 = getelementptr inbounds [1000 x i8], [1000 x i8]* %6, i64 0, i64 0
%56 = load i8*, i8** %5
%57 = call i32 (i8*, i8*, ...) @sprintf(i8* %55, i8* getelementptr inbounds ([77 x i8], [77 x i8]* @.str, i64 0, i64 0), i8* %56)
%58 = getelementptr inbounds [1000 x i8], [1000 x i8]* %6, i64 0, i64 0
%59 = call i32 @system(i8* %58)
%60 = getelementptr inbounds [1000 x i8], [1000 x i8]* %6, i64 0, i64 0
%61 = call i32 (i8*, i8*, ...) @sprintf(i8* %60, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.1, i64 0, i64 0))
%62 = getelementptr inbounds [1000 x i8], [1000 x i8]* %6, i64 0, i64 0
%63 = call i32 @system(i8* %62)
%64 = load i8*, i8** %5
%65 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.2, i64 0, i64 0), i8* %64)
store i32 1, i32* %54
store i32 0, i32* %52
store i32 0, i32* %53
%66 = getelementptr inbounds [1000 x i8], [1000 x i8]* %6, i64 0, i64 0
%67 = load i8*, i8** %4
%68 = call i32 (i8*, i8*, ...) @sprintf(i8* %66, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.3, i64 0, i64 0), i8* %67)
%69 = getelementptr inbounds [1000 x i8], [1000 x i8]* %6, i64 0, i64 0
%70 = call i32 @system(i8* %69)
%71 = getelementptr inbounds [1000 x i8], [1000 x i8]* %6, i64 0, i64 0
%72 = load i8*, i8** %4
%73 = call i32 (i8*, i8*, ...) @sprintf(i8* %71, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.4, i64 0, i64 0), i8* %72)
%74 = getelementptr inbounds [1000 x i8], [1000 x i8]* %6, i64 0, i64 0
%75 = call i32 @system(i8* %74)
%76 = getelementptr inbounds [1000 x i8], [1000 x i8]* %6, i64 0, i64 0
%77 = load i8*, i8** %4
%78 = call i32 (i8*, i8*, ...) @sprintf(i8* %76, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.5, i64 0, i64 0), i8* %77)
%79 = getelementptr inbounds [1000 x i8], [1000 x i8]* %6, i64 0, i64 0
%80 = call i32 @system(i8* %79)
%81 = getelementptr inbounds [1000 x i8], [1000 x i8]* %6, i64 0, i64 0
%82 = load i8*, i8** %4
%83 = call i32 (i8*, i8*, ...) @sprintf(i8* %81, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.6, i64 0, i64 0), i8* %82)
%84 = getelementptr inbounds [1000 x i8], [1000 x i8]* %6, i64 0, i64 0
%85 = call i32 @system(i8* %84)
%86 = getelementptr inbounds [1000 x i8], [1000 x i8]* %6, i64 0, i64 0
%87 = load i8*, i8** %4
%88 = call i32 (i8*, i8*, ...) @sprintf(i8* %86, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.7, i64 0, i64 0), i8* %87)
%89 = getelementptr inbounds [1000 x i8], [1000 x i8]* %6, i64 0, i64 0
%90 = call i32 @system(i8* %89)
%91 = getelementptr inbounds [1000 x i8], [1000 x i8]* %6, i64 0, i64 0
%92 = load i8*, i8** %4
%93 = call i32 (i8*, i8*, ...) @sprintf(i8* %91, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.8, i64 0, i64 0), i8* %92)
%94 = getelementptr inbounds [1000 x i8], [1000 x i8]* %6, i64 0, i64 0
%95 = call i32 @system(i8* %94)
%96 = getelementptr inbounds [1000 x i8], [1000 x i8]* %6, i64 0, i64 0
%97 = load i8*, i8** %4
%98 = call i32 (i8*, i8*, ...) @sprintf(i8* %96, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.9, i64 0, i64 0), i8* %97)
%99 = getelementptr inbounds [1000 x i8], [1000 x i8]* %6, i64 0, i64 0
%100 = call i32 @system(i8* %99)
%101 = getelementptr inbounds [50000 x i8], [50000 x i8]* %11, i64 0, i64 0
%102 = load i8*, i8** %4
%103 = call i32 (i8*, i8*, ...) @sprintf(i8* %101, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.10, i64 0, i64 0), i8* %102)
%104 = getelementptr inbounds [50000 x i8], [50000 x i8]* %11, i64 0, i64 0
%105 = call i32* @fopen(i8* %104, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.11, i64 0, i64 0))
store i32* %105, i32** %37
%106 = load i32*, i32** %37
%107 = icmp eq i32* %106, null
br i1 %107, label %108, label %110
108: ; preds = %2
%109 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.12, i64 0, i64 0))
store i32 1, i32* %3
br label %405
110: ; preds = %2
%111 = call i32* @fopen(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.13, i64 0, i64 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.11, i64 0, i64 0))
store i32* %111, i32** %36
%112 = load i32*, i32** %36
%113 = icmp eq i32* %112, null
br i1 %113, label %114, label %116
114: ; preds = %110
%115 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.14, i64 0, i64 0))
store i32 1, i32* %3
br label %405
116: ; preds = %110
%117 = getelementptr inbounds [50000 x i8], [50000 x i8]* %11, i64 0, i64 0
%118 = load i8*, i8** %4
%119 = call i32 (i8*, i8*, ...) @sprintf(i8* %117, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.15, i64 0, i64 0), i8* %118)
%120 = getelementptr inbounds [50000 x i8], [50000 x i8]* %11, i64 0, i64 0
%121 = call i32* @fopen(i8* %120, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.16, i64 0, i64 0))
store i32* %121, i32** %38
%122 = load i32*, i32** %38
%123 = icmp eq i32* %122, null
br i1 %123, label %124, label %126
124: ; preds = %116
%125 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.17, i64 0, i64 0))
br label %126
126: ; preds = %124, %116
%127 = getelementptr inbounds [50000 x i8], [50000 x i8]* %7, i64 0, i64 0
%128 = load i32*, i32** %37
%129 = call i32* @fgets(i8* %127, i32 50000, i32* %128)
%130 = getelementptr inbounds [50000 x i8], [50000 x i8]* %9, i64 0, i64 0
%131 = getelementptr inbounds [50000 x i8], [50000 x i8]* %7, i64 0, i64 0
%132 = call i32 @strcpy(i8* %130, i8* %131)
%133 = getelementptr inbounds [50000 x i8], [50000 x i8]* %7, i64 0, i64 0
%134 = call i8* @strtok_r(i8* %133, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %33)
store i8* %134, i8** %17
%135 = load i8*, i8** %17
%136 = call i64 @strtol(i8* %135, i32* null, i32 0)
store i64 %136, i64* %42
%137 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %33)
store i8* %137, i8** %18
%138 = load i8*, i8** %18
%139 = call i64 @strtol(i8* %138, i32* null, i32 0)
store i64 %139, i64* %39
%140 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %33)
store i8* %140, i8** %19
%141 = load i8*, i8** %19
%142 = call i64 @strtol(i8* %141, i32* null, i32 0)
store i64 %142, i64* %45
%143 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %33)
store i8* %143, i8** %20
%144 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %33)
store i8* %144, i8** %21
%145 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %33)
store i8* %145, i8** %22
%146 = getelementptr inbounds [50000 x i8], [50000 x i8]* %8, i64 0, i64 0
%147 = load i32*, i32** %36
%148 = call i32* @fgets(i8* %146, i32 10000, i32* %147)
%149 = getelementptr inbounds [50000 x i8], [50000 x i8]* %10, i64 0, i64 0
%150 = getelementptr inbounds [50000 x i8], [50000 x i8]* %8, i64 0, i64 0
%151 = call i32 @strcpy(i8* %149, i8* %150)
%152 = getelementptr inbounds [50000 x i8], [50000 x i8]* %8, i64 0, i64 0
%153 = call i8* @strtok_r(i8* %152, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.19, i64 0, i64 0), i8** %34)
store i8* %153, i8** %28
%154 = load i8*, i8** %17
%155 = call i64 @strtol(i8* %154, i32* null, i32 0)
store i64 %155, i64* %46
%156 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.19, i64 0, i64 0), i8** %34)
store i8* %156, i8** %29
%157 = load i8*, i8** %29
%158 = call i64 @strtol(i8* %157, i32* null, i32 0)
store i64 %158, i64* %40
%159 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.19, i64 0, i64 0), i8** %34)
store i8* %159, i8** %30
%160 = load i8*, i8** %30
%161 = call i64 @strtol(i8* %160, i32* null, i32 0)
store i64 %161, i64* %43
%162 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.19, i64 0, i64 0), i8** %34)
store i8* %162, i8** %31
%163 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %34)
store i8* %163, i8** %32
%164 = load i8*, i8** %28
store i8* %164, i8** %23
%165 = load i8*, i8** %29
store i8* %165, i8** %24
%166 = load i8*, i8** %30
store i8* %166, i8** %25
%167 = load i8*, i8** %31
store i8* %167, i8** %26
%168 = load i8*, i8** %32
store i8* %168, i8** %27
%169 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%170 = load i8*, i8** %31
%171 = call i32 @strcpy(i8* %169, i8* %170)
%172 = load i64, i64* %46
store i64 %172, i64* %47
%173 = load i64, i64* %40
store i64 %173, i64* %41
%174 = load i64, i64* %43
store i64 %174, i64* %44
%175 = load i64, i64* %39
%176 = load i64, i64* %40
%177 = sub nsw i64 %175, %176
store i64 %177, i64* %48
%178 = load i64, i64* %39
%179 = load i64, i64* %43
%180 = sub nsw i64 %178, %179
store i64 %180, i64* %49
%181 = load i64, i64* %45
%182 = load i64, i64* %40
%183 = sub nsw i64 %181, %182
store i64 %183, i64* %50
%184 = load i64, i64* %45
%185 = load i64, i64* %43
%186 = sub nsw i64 %184, %185
store i64 %186, i64* %51
br label %187
187: ; preds = %387, %126
%188 = load i32, i32* %54
%189 = icmp sgt i32 %188, 0
br i1 %189, label %190, label %400
190: ; preds = %187
%191 = load i64, i64* %42
%192 = load i64, i64* %46
%193 = icmp slt i64 %191, %192
br i1 %193, label %194, label %212
194: ; preds = %190
%195 = load i32*, i32** %38
%196 = load i8*, i8** %17
%197 = load i8*, i8** %18
%198 = load i8*, i8** %19
%199 = load i8*, i8** %20
%200 = load i8*, i8** %21
%201 = load i8*, i8** %22
%202 = load i64, i64* %47
%203 = load i64, i64* %41
%204 = load i64, i64* %44
%205 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%206 = load i64, i64* %39
%207 = load i64, i64* %44
%208 = sub nsw i64 %206, %207
%209 = call i32 @abs(i64 %208)
%210 = add nsw i32 %209, 1
%211 = call i32 (i32*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, ...) @fprintf(i32* %195, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.20, i64 0, i64 0), i8* %196, i8* %197, i8* %198, i8* %199, i8* %200, i8* %201, i64 %202, i64 %203, i64 %204, i8* %205, i32 %210)
store i32 1, i32* %53
br label %338
212: ; preds = %190
%213 = load i64, i64* %42
%214 = load i64, i64* %46
%215 = icmp sgt i64 %213, %214
br i1 %215, label %216, label %217
216: ; preds = %212
store i32 2, i32* %53
br label %337
217: ; preds = %212
%218 = load i64, i64* %48
%219 = icmp sgt i64 %218, 0
br i1 %219, label %220, label %240
220: ; preds = %217
%221 = load i64, i64* %49
%222 = icmp sgt i64 %221, 0
br i1 %222, label %223, label %240
223: ; preds = %220
%224 = load i64, i64* %50
%225 = icmp sgt i64 %224, 0
br i1 %225, label %226, label %240
226: ; preds = %223
%227 = load i64, i64* %51
%228 = icmp sgt i64 %227, 0
br i1 %228, label %229, label %240
229: ; preds = %226
%230 = load i8*, i8** %28
store i8* %230, i8** %23
%231 = load i8*, i8** %29
store i8* %231, i8** %24
%232 = load i8*, i8** %30
store i8* %232, i8** %25
%233 = load i8*, i8** %31
store i8* %233, i8** %26
%234 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%235 = load i8*, i8** %31
%236 = call i32 @strcpy(i8* %234, i8* %235)
%237 = load i64, i64* %46
store i64 %237, i64* %47
%238 = load i64, i64* %40
store i64 %238, i64* %41
%239 = load i64, i64* %43
store i64 %239, i64* %44
store i32 2, i32* %53
br label %336
240: ; preds = %226, %223, %220, %217
%241 = load i64, i64* %48
%242 = icmp slt i64 %241, 0
br i1 %242, label %243, label %320
243: ; preds = %240
%244 = load i64, i64* %49
%245 = icmp slt i64 %244, 0
br i1 %245, label %246, label %320
246: ; preds = %243
%247 = load i64, i64* %50
%248 = icmp slt i64 %247, 0
br i1 %248, label %249, label %320
249: ; preds = %246
%250 = load i64, i64* %51
%251 = icmp slt i64 %250, 0
br i1 %251, label %252, label %320
252: ; preds = %249
%253 = load i64, i64* %40
%254 = load i64, i64* %45
%255 = sub nsw i64 %253, %254
%256 = load i64, i64* %39
%257 = load i64, i64* %44
%258 = sub nsw i64 %256, %257
%259 = icmp slt i64 %255, %258
br i1 %259, label %260, label %278
260: ; preds = %252
%261 = load i32*, i32** %38
%262 = load i8*, i8** %17
%263 = load i8*, i8** %18
%264 = load i8*, i8** %19
%265 = load i8*, i8** %20
%266 = load i8*, i8** %21
%267 = load i8*, i8** %22
%268 = load i8*, i8** %28
%269 = load i8*, i8** %29
%270 = load i8*, i8** %30
%271 = load i8*, i8** %31
%272 = load i64, i64* %40
%273 = load i64, i64* %45
%274 = sub nsw i64 %272, %273
%275 = call i32 @abs(i64 %274)
%276 = add nsw i32 %275, 1
%277 = call i32 (i32*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, ...) @fprintf(i32* %261, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.21, i64 0, i64 0), i8* %262, i8* %263, i8* %264, i8* %265, i8* %266, i8* %267, i8* %268, i8* %269, i8* %270, i8* %271, i32 %276)
br label %319
278: ; preds = %252
%279 = load i64, i64* %47
%280 = load i64, i64* %46
%281 = icmp eq i64 %279, %280
br i1 %281, label %282, label %300
282: ; preds = %278
%283 = load i32*, i32** %38
%284 = load i8*, i8** %17
%285 = load i8*, i8** %18
%286 = load i8*, i8** %19
%287 = load i8*, i8** %20
%288 = load i8*, i8** %21
%289 = load i8*, i8** %22
%290 = load i8*, i8** %28
%291 = load i64, i64* %41
%292 = load i64, i64* %44
%293 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%294 = load i64, i64* %39
%295 = load i64, i64* %44
%296 = sub nsw i64 %294, %295
%297 = call i32 @abs(i64 %296)
%298 = add nsw i32 %297, 1
%299 = call i32 (i32*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, ...) @fprintf(i32* %283, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.22, i64 0, i64 0), i8* %284, i8* %285, i8* %286, i8* %287, i8* %288, i8* %289, i8* %290, i64 %291, i64 %292, i8* %293, i32 %298)
br label %318
300: ; preds = %278
%301 = load i32*, i32** %38
%302 = load i8*, i8** %17
%303 = load i8*, i8** %18
%304 = load i8*, i8** %19
%305 = load i8*, i8** %20
%306 = load i8*, i8** %21
%307 = load i8*, i8** %22
%308 = load i8*, i8** %28
%309 = load i8*, i8** %29
%310 = load i8*, i8** %30
%311 = load i8*, i8** %31
%312 = load i64, i64* %40
%313 = load i64, i64* %45
%314 = sub nsw i64 %312, %313
%315 = call i32 @abs(i64 %314)
%316 = add nsw i32 %315, 1
%317 = call i32 (i32*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, ...) @fprintf(i32* %301, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.21, i64 0, i64 0), i8* %302, i8* %303, i8* %304, i8* %305, i8* %306, i8* %307, i8* %308, i8* %309, i8* %310, i8* %311, i32 %316)
br label %318
318: ; preds = %300, %282
br label %319
319: ; preds = %318, %260
store i32 1, i32* %53
br label %335
320: ; preds = %249, %246, %243, %240
%321 = load i32, i32* %52
%322 = add nsw i32 %321, 1
store i32 %322, i32* %52
%323 = load i32*, i32** %38
%324 = load i8*, i8** %17
%325 = load i8*, i8** %18
%326 = load i8*, i8** %19
%327 = load i8*, i8** %20
%328 = load i8*, i8** %21
%329 = load i8*, i8** %22
%330 = load i8*, i8** %28
%331 = load i8*, i8** %29
%332 = load i8*, i8** %30
%333 = load i8*, i8** %31
%334 = call i32 (i32*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, ...) @fprintf(i32* %323, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.23, i64 0, i64 0), i8* %324, i8* %325, i8* %326, i8* %327, i8* %328, i8* %329, i8* %330, i8* %331, i8* %332, i8* %333)
store i32 1, i32* %53
br label %335
335: ; preds = %320, %319
br label %336
336: ; preds = %335, %229
br label %337
337: ; preds = %336, %216
br label %338
338: ; preds = %337, %194
%339 = load i32, i32* %53
switch i32 %339, label %387 [
i32 1, label %340
i32 2, label %364
]
340: ; preds = %338
%341 = getelementptr inbounds [50000 x i8], [50000 x i8]* %7, i64 0, i64 0
%342 = load i32*, i32** %37
%343 = call i32* @fgets(i8* %341, i32 50000, i32* %342)
%344 = icmp ne i32* %343, null
br i1 %344, label %345, label %362
345: ; preds = %340
%346 = getelementptr inbounds [50000 x i8], [50000 x i8]* %9, i64 0, i64 0
%347 = getelementptr inbounds [50000 x i8], [50000 x i8]* %7, i64 0, i64 0
%348 = call i32 @strcpy(i8* %346, i8* %347)
%349 = getelementptr inbounds [50000 x i8], [50000 x i8]* %7, i64 0, i64 0
%350 = call i8* @strtok_r(i8* %349, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %33)
store i8* %350, i8** %17
%351 = load i8*, i8** %17
%352 = call i64 @strtol(i8* %351, i32* null, i32 0)
store i64 %352, i64* %42
%353 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %33)
store i8* %353, i8** %18
%354 = load i8*, i8** %18
%355 = call i64 @strtol(i8* %354, i32* null, i32 0)
store i64 %355, i64* %39
%356 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %33)
store i8* %356, i8** %19
%357 = load i8*, i8** %19
%358 = call i64 @strtol(i8* %357, i32* null, i32 0)
store i64 %358, i64* %45
%359 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %33)
store i8* %359, i8** %20
%360 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %33)
store i8* %360, i8** %21
%361 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %33)
store i8* %361, i8** %22
br label %363
362: ; preds = %340
store i32 0, i32* %54
br label %363
363: ; preds = %362, %345
br label %387
364: ; preds = %338
%365 = getelementptr inbounds [50000 x i8], [50000 x i8]* %8, i64 0, i64 0
%366 = load i32*, i32** %36
%367 = call i32* @fgets(i8* %365, i32 10000, i32* %366)
%368 = icmp ne i32* %367, null
br i1 %368, label %369, label %385
369: ; preds = %364
%370 = getelementptr inbounds [50000 x i8], [50000 x i8]* %10, i64 0, i64 0
%371 = getelementptr inbounds [50000 x i8], [50000 x i8]* %8, i64 0, i64 0
%372 = call i32 @strcpy(i8* %370, i8* %371)
%373 = getelementptr inbounds [50000 x i8], [50000 x i8]* %8, i64 0, i64 0
%374 = call i8* @strtok_r(i8* %373, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.19, i64 0, i64 0), i8** %34)
store i8* %374, i8** %28
%375 = load i8*, i8** %28
%376 = call i64 @strtol(i8* %375, i32* null, i32 0)
store i64 %376, i64* %46
%377 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.19, i64 0, i64 0), i8** %34)
store i8* %377, i8** %29
%378 = load i8*, i8** %29
%379 = call i64 @strtol(i8* %378, i32* null, i32 0)
store i64 %379, i64* %40
%380 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.19, i64 0, i64 0), i8** %34)
store i8* %380, i8** %30
%381 = load i8*, i8** %30
%382 = call i64 @strtol(i8* %381, i32* null, i32 0)
store i64 %382, i64* %43
%383 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %34)
store i8* %383, i8** %31
%384 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %34)
store i8* %384, i8** %32
br label %386
385: ; preds = %364
store i32 0, i32* %54
br label %386
386: ; preds = %385, %369
br label %387
387: ; preds = %338, %386, %363
%388 = load i64, i64* %39
%389 = load i64, i64* %40
%390 = sub nsw i64 %388, %389
store i64 %390, i64* %48
%391 = load i64, i64* %39
%392 = load i64, i64* %43
%393 = sub nsw i64 %391, %392
store i64 %393, i64* %49
%394 = load i64, i64* %45
%395 = load i64, i64* %40
%396 = sub nsw i64 %394, %395
store i64 %396, i64* %50
%397 = load i64, i64* %45
%398 = load i64, i64* %43
%399 = sub nsw i64 %397, %398
store i64 %399, i64* %51
br label %187
400: ; preds = %187
%401 = load i32*, i32** %37
%402 = call i32 @fclose(i32* %401)
%403 = load i32*, i32** %36
%404 = call i32 @fclose(i32* %403)
store i32 0, i32* %3
br label %405
405: ; preds = %400, %114, %108
%406 = load i32, i32* %3
ret i32 %406
}

LLVM IR (-O2):
@.str = [77 x i8] c"awk -F \22\\t\22 '$3 == \22gene\22 { print $1 \22\\t\22 $4 \22\\t\22 $5 \22\\t\22 $9 }' %s > tmp.gtf\00"
@.str.1 = [27 x i8] c"sed -i 's/^chr//g' tmp.gtf\00"
@.str.2 = [40 x i8] c"we have a gtf file with the name of %s\0A\00"
@.str.3 = [27 x i8] c"sed -i 's/^chr//g' %s.tmp2\00"
@.str.4 = [27 x i8] c"sed -i 's/^X/23/g' %s.tmp2\00"
@.str.5 = [27 x i8] c"sed -i 's/^Y/24/g' %s.tmp2\00"
@.str.6 = [27 x i8] c"sed -i 's/^M/25/g' %s.tmp2\00"
@.str.7 = [28 x i8] c"sed -i 's/^MT/25/g' %s.tmp2\00"
@.str.8 = [38 x i8] c"sort -k1,1n -k2,2n %s.tmp2 > tmp.tmp2\00"
@.str.9 = [20 x i8] c"mv tmp.tmp2 %s.tmp2\00"
@.str.10 = [8 x i8] c"%s.tmp2\00"
@.str.11 = [2 x i8] c"r\00"
@.str.13 = [8 x i8] c"tmp.gtf\00"
@.str.15 = [8 x i8] c"%s.tmp3\00"
@.str.16 = [2 x i8] c"w\00"
@.str.18 = [3 x i8] c"\09\0A\00"
@.str.19 = [2 x i8] c"\09\00"
@.str.20 = [34 x i8] c"%s\09%s\09%s\09%s\09%s\09%s\09%d\09%d\09%d\09%s\09%d\0A\00"
@.str.21 = [34 x i8] c"%s\09%s\09%s\09%s\09%s\09%s\09%s\09%s\09%s\09%s\09%d\0A\00"
@.str.22 = [34 x i8] c"%s\09%s\09%s\09%s\09%s\09%s\09%s\09%d\09%d\09%s\09%d\0A\00"
@.str.23 = [33 x i8] c"%s\09%s\09%s\09%s\09%s\09%s\09%s\09%s\09%s\09%s\090\0A\00"
@str = [28 x i8] c"Problem opening output file\00"
@str.24 = [25 x i8] c"Problem opening vcf file\00"
@str.25 = [29 x i8] c"Problem opening variant file\00"
define i32 @get_annotation(i8* %0, i8* %1) {
%3 = alloca [1000 x i8]
%4 = alloca [50000 x i8]
%5 = alloca [50000 x i8]
%6 = alloca [50000 x i8]
%7 = alloca [50000 x i8]
%8 = alloca [50000 x i8]
%9 = alloca [100 x i8]
%10 = alloca i8*
%11 = alloca i8*
%12 = getelementptr inbounds [1000 x i8], [1000 x i8]* %3, i64 0, i64 0
%13 = call i32 (i8*, i8*, ...) @sprintf(i8* %12, i8* dereferenceable(1) getelementptr inbounds ([77 x i8], [77 x i8]* @.str, i64 0, i64 0), i8* %1)
%14 = call i32 @system(i8* %12)
%15 = call i32 @system(i8* %12)
%16 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([40 x i8], [40 x i8]* @.str.2, i64 0, i64 0), i8* %1)
%17 = getelementptr inbounds [50000 x i8], [50000 x i8]* %4, i64 0, i64 0
%18 = getelementptr inbounds [50000 x i8], [50000 x i8]* %5, i64 0, i64 0
%19 = getelementptr inbounds [50000 x i8], [50000 x i8]* %6, i64 0, i64 0
%20 = getelementptr inbounds [50000 x i8], [50000 x i8]* %7, i64 0, i64 0
%21 = getelementptr inbounds [50000 x i8], [50000 x i8]* %8, i64 0, i64 0
%22 = getelementptr inbounds [100 x i8], [100 x i8]* %9, i64 0, i64 0
%23 = bitcast i8** %10 to i8*
%24 = bitcast i8** %11 to i8*
%25 = call i32 (i8*, i8*, ...) @sprintf(i8* %12, i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @.str.3, i64 0, i64 0), i8* %0)
%26 = call i32 @system(i8* %12)
%27 = call i32 (i8*, i8*, ...) @sprintf(i8* %12, i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @.str.4, i64 0, i64 0), i8* %0)
%28 = call i32 @system(i8* %12)
%29 = call i32 (i8*, i8*, ...) @sprintf(i8* %12, i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @.str.5, i64 0, i64 0), i8* %0)
%30 = call i32 @system(i8* %12)
%31 = call i32 (i8*, i8*, ...) @sprintf(i8* %12, i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @.str.6, i64 0, i64 0), i8* %0)
%32 = call i32 @system(i8* %12)
%33 = call i32 (i8*, i8*, ...) @sprintf(i8* %12, i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @.str.7, i64 0, i64 0), i8* %0)
%34 = call i32 @system(i8* %12)
%35 = call i32 (i8*, i8*, ...) @sprintf(i8* %12, i8* dereferenceable(1) getelementptr inbounds ([38 x i8], [38 x i8]* @.str.8, i64 0, i64 0), i8* %0)
%36 = call i32 @system(i8* %12)
%37 = call i32 (i8*, i8*, ...) @sprintf(i8* %12, i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @.str.9, i64 0, i64 0), i8* %0)
%38 = call i32 @system(i8* %12)
%39 = call i32 (i8*, i8*, ...) @sprintf(i8* %21, i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.10, i64 0, i64 0), i8* %0)
%40 = call i32* @fopen(i8* %21, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.11, i64 0, i64 0))
%41 = icmp eq i32* %40, null
br i1 %41, label %42, label %44
42: ; preds = %2
%43 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @str.25, i64 0, i64 0))
br label %209
44: ; preds = %2
%45 = tail call i32* @fopen(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.13, i64 0, i64 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.11, i64 0, i64 0))
%46 = icmp eq i32* %45, null
br i1 %46, label %47, label %49
47: ; preds = %44
%48 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @str.24, i64 0, i64 0))
br label %209
49: ; preds = %44
%50 = call i32 (i8*, i8*, ...) @sprintf(i8* %21, i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.15, i64 0, i64 0), i8* %0)
%51 = call i32* @fopen(i8* %21, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.16, i64 0, i64 0))
%52 = icmp eq i32* %51, null
br i1 %52, label %53, label %55
53: ; preds = %49
%54 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str, i64 0, i64 0))
br label %55
55: ; preds = %53, %49
%56 = call i32* @fgets(i8* %17, i32 50000, i32* %40)
%57 = call i32 @strcpy(i8* %19, i8* %17)
%58 = call i8* @strtok_r(i8* %17, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %10)
%59 = call i64 @strtol(i8* nocapture %58, i32* null, i32 0)
%60 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %10)
%61 = call i64 @strtol(i8* nocapture %60, i32* null, i32 0)
%62 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %10)
%63 = call i64 @strtol(i8* nocapture %62, i32* null, i32 0)
%64 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %10)
%65 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %10)
%66 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %10)
%67 = call i32* @fgets(i8* %18, i32 10000, i32* %45)
%68 = call i32 @strcpy(i8* %20, i8* %18)
%69 = call i8* @strtok_r(i8* %18, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.19, i64 0, i64 0), i8** %11)
%70 = call i64 @strtol(i8* nocapture %58, i32* null, i32 0)
%71 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.19, i64 0, i64 0), i8** %11)
%72 = call i64 @strtol(i8* nocapture %71, i32* null, i32 0)
%73 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.19, i64 0, i64 0), i8** %11)
%74 = call i64 @strtol(i8* nocapture %73, i32* null, i32 0)
%75 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.19, i64 0, i64 0), i8** %11)
%76 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %11)
%77 = call i32 @strcpy(i8* %22, i8* %75)
%78 = sub nsw i64 %61, %72
%79 = sub nsw i64 %61, %74
%80 = sub nsw i64 %63, %72
%81 = sub nsw i64 %63, %74
br label %82
82: ; preds = %182, %55
%83 = phi i64 [ %81, %55 ], [ %205, %182 ]
%84 = phi i64 [ %80, %55 ], [ %204, %182 ]
%85 = phi i64 [ %79, %55 ], [ %203, %182 ]
%86 = phi i64 [ %78, %55 ], [ %202, %182 ]
%87 = phi i64 [ %70, %55 ], [ %183, %182 ]
%88 = phi i64 [ %70, %55 ], [ %201, %182 ]
%89 = phi i64 [ %63, %55 ], [ %200, %182 ]
%90 = phi i64 [ %74, %55 ], [ %184, %182 ]
%91 = phi i64 [ %74, %55 ], [ %199, %182 ]
%92 = phi i64 [ %59, %55 ], [ %198, %182 ]
%93 = phi i64 [ %72, %55 ], [ %185, %182 ]
%94 = phi i64 [ %72, %55 ], [ %197, %182 ]
%95 = phi i64 [ %61, %55 ], [ %196, %182 ]
%96 = phi i8* [ %58, %55 ], [ %195, %182 ]
%97 = phi i8* [ %60, %55 ], [ %194, %182 ]
%98 = phi i8* [ %62, %55 ], [ %193, %182 ]
%99 = phi i8* [ %75, %55 ], [ %192, %182 ]
%100 = phi i8* [ %73, %55 ], [ %191, %182 ]
%101 = phi i8* [ %71, %55 ], [ %190, %182 ]
%102 = phi i8* [ %69, %55 ], [ %189, %182 ]
%103 = phi i8* [ %64, %55 ], [ %188, %182 ]
%104 = phi i8* [ %66, %55 ], [ %187, %182 ]
%105 = phi i8* [ %65, %55 ], [ %186, %182 ]
%106 = icmp slt i64 %92, %88
br i1 %106, label %107, label %112
107: ; preds = %82
%108 = sub nsw i64 %95, %90
%109 = call i32 @abs(i64 %108)
%110 = add nsw i32 %109, 1
%111 = call i32 (i32*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, ...) @fprintf(i32* %51, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.20, i64 0, i64 0), i8* %96, i8* %97, i8* %98, i8* %103, i8* %105, i8* %104, i64 %87, i64 %93, i64 %90, i8* %22, i32 %110)
br label %152
112: ; preds = %82
%113 = icmp sgt i64 %92, %88
br i1 %113, label %166, label %114
114: ; preds = %112
%115 = icmp sgt i64 %86, 0
%116 = icmp sgt i64 %85, 0
%117 = select i1 %115, i1 %116, i1 false
%118 = icmp sgt i64 %84, 0
%119 = select i1 %117, i1 %118, i1 false
%120 = icmp sgt i64 %83, 0
%121 = select i1 %119, i1 %120, i1 false
br i1 %121, label %122, label %124
122: ; preds = %114
%123 = call i32 @strcpy(i8* %22, i8* %99)
br label %166
124: ; preds = %114
%125 = icmp slt i64 %86, 0
%126 = icmp slt i64 %85, 0
%127 = select i1 %125, i1 %126, i1 false
%128 = icmp slt i64 %84, 0
%129 = select i1 %127, i1 %128, i1 false
%130 = icmp slt i64 %83, 0
%131 = select i1 %129, i1 %130, i1 false
br i1 %131, label %132, label %150
132: ; preds = %124
%133 = sub nsw i64 %94, %89
%134 = sub nsw i64 %95, %90
%135 = icmp slt i64 %133, %134
br i1 %135, label %136, label %140
136: ; preds = %132
%137 = call i32 @abs(i64 %133)
%138 = add nsw i32 %137, 1
%139 = call i32 (i32*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, ...) @fprintf(i32* %51, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.21, i64 0, i64 0), i8* %96, i8* %97, i8* %98, i8* %103, i8* %105, i8* %104, i8* %102, i8* %101, i8* %100, i8* %99, i32 %138)
br label %152
140: ; preds = %132
%141 = icmp eq i64 %87, %88
br i1 %141, label %142, label %146
142: ; preds = %140
%143 = call i32 @abs(i64 %134)
%144 = add nsw i32 %143, 1
%145 = call i32 (i32*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, ...) @fprintf(i32* %51, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.22, i64 0, i64 0), i8* %96, i8* %97, i8* %98, i8* %103, i8* %105, i8* %104, i8* %102, i64 %93, i64 %90, i8* %22, i32 %144)
br label %152
146: ; preds = %140
%147 = call i32 @abs(i64 %133)
%148 = add nsw i32 %147, 1
%149 = call i32 (i32*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, ...) @fprintf(i32* %51, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.21, i64 0, i64 0), i8* %96, i8* %97, i8* %98, i8* %103, i8* %105, i8* %104, i8* %102, i8* %101, i8* %100, i8* %99, i32 %148)
br label %152
150: ; preds = %124
%151 = call i32 (i32*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, ...) @fprintf(i32* %51, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.23, i64 0, i64 0), i8* %96, i8* %97, i8* %98, i8* %103, i8* %105, i8* %104, i8* %102, i8* %101, i8* %100, i8* %99)
br label %152
152: ; preds = %107, %150, %142, %146, %136
%153 = call i32* @fgets(i8* %17, i32 50000, i32* %40)
%154 = icmp eq i32* %153, null
br i1 %154, label %206, label %155
155: ; preds = %152
%156 = call i32 @strcpy(i8* %19, i8* %17)
%157 = call i8* @strtok_r(i8* %17, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %10)
%158 = call i64 @strtol(i8* nocapture %157, i32* null, i32 0)
%159 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %10)
%160 = call i64 @strtol(i8* nocapture %159, i32* null, i32 0)
%161 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %10)
%162 = call i64 @strtol(i8* nocapture %161, i32* null, i32 0)
%163 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %10)
%164 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %10)
%165 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %10)
br label %182
166: ; preds = %122, %112
%167 = phi i64 [ %94, %122 ], [ %93, %112 ]
%168 = phi i64 [ %91, %122 ], [ %90, %112 ]
%169 = phi i64 [ %88, %122 ], [ %87, %112 ]
%170 = call i32* @fgets(i8* %18, i32 10000, i32* %45)
%171 = icmp eq i32* %170, null
br i1 %171, label %206, label %172
172: ; preds = %166
%173 = call i32 @strcpy(i8* %20, i8* %18)
%174 = call i8* @strtok_r(i8* %18, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.19, i64 0, i64 0), i8** %11)
%175 = call i64 @strtol(i8* nocapture %174, i32* null, i32 0)
%176 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.19, i64 0, i64 0), i8** %11)
%177 = call i64 @strtol(i8* nocapture %176, i32* null, i32 0)
%178 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.19, i64 0, i64 0), i8** %11)
%179 = call i64 @strtol(i8* nocapture %178, i32* null, i32 0)
%180 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %11)
%181 = call i8* @strtok_r(i8* null, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.18, i64 0, i64 0), i8** %11)
br label %182
182: ; preds = %172, %155
%183 = phi i64 [ %169, %172 ], [ %87, %155 ]
%184 = phi i64 [ %168, %172 ], [ %90, %155 ]
%185 = phi i64 [ %167, %172 ], [ %93, %155 ]
%186 = phi i8* [ %105, %172 ], [ %164, %155 ]
%187 = phi i8* [ %104, %172 ], [ %165, %155 ]
%188 = phi i8* [ %103, %172 ], [ %163, %155 ]
%189 = phi i8* [ %174, %172 ], [ %102, %155 ]
%190 = phi i8* [ %176, %172 ], [ %101, %155 ]
%191 = phi i8* [ %178, %172 ], [ %100, %155 ]
%192 = phi i8* [ %180, %172 ], [ %99, %155 ]
%193 = phi i8* [ %98, %172 ], [ %161, %155 ]
%194 = phi i8* [ %97, %172 ], [ %159, %155 ]
%195 = phi i8* [ %96, %172 ], [ %157, %155 ]
%196 = phi i64 [ %95, %172 ], [ %160, %155 ]
%197 = phi i64 [ %177, %172 ], [ %94, %155 ]
%198 = phi i64 [ %92, %172 ], [ %158, %155 ]
%199 = phi i64 [ %179, %172 ], [ %91, %155 ]
%200 = phi i64 [ %89, %172 ], [ %162, %155 ]
%201 = phi i64 [ %175, %172 ], [ %88, %155 ]
%202 = sub nsw i64 %196, %197
%203 = sub nsw i64 %196, %199
%204 = sub nsw i64 %200, %197
%205 = sub nsw i64 %200, %199
br label %82
206: ; preds = %152, %166
%207 = call i32 @fclose(i32* %40)
%208 = call i32 @fclose(i32* %45)
br label %209
209: ; preds = %206, %47, %42
%210 = phi i32 [ 1, %42 ], [ 1, %47 ], [ 0, %206 ]
ret i32 %210
}