#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*/ time_t;
struct tm {
  int dummy;
};
typedef int /*<<< orphan*/ gzFile;

/* Variables and functions */
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *, ...);
int /*<<< orphan*/ gzclose(int /*<<< orphan*/);
scalar_t__ gzgets(int /*<<< orphan*/, char *, int);
int /*<<< orphan*/ gzopen(char const *, char *);
int /*<<< orphan*/ localtime_r(int /*<<< orphan*/ *, struct tm *);
int /*<<< orphan*/ memset(void *, int /*<<< orphan*/, int);
int /*<<< orphan*/ printf(char *, char *, ...);
int /*<<< orphan*/ sprintf(char *, char *, char *, char *);
int /*<<< orphan*/ stderr;
scalar_t__ strcmp(char *, char const *);
int /*<<< orphan*/ strftime(char *, int, char *, struct tm *);
int /*<<< orphan*/ strncmp(char *, char *, int);
int /*<<< orphan*/ strptime(char *, char *, struct tm *);
char *strrchr(char const *, char);
char *strtok(char *, char *);
int /*<<< orphan*/ time(int /*<<< orphan*/ *);
int /*<<< orphan*/ trim(char *);
int /*<<< orphan*/ tzset();
char *urldecode(char *, char *);
void convert_log_file(const char *path, const char *host) {
  gzFile f;
  char buf[1024];
  char d[100];
  char u[1024];
  char *col;
  struct tm t;
  time_t tt;
  int pos[13] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
  char *cols[100];
  int c;
  int lcount = 0, rcount = 0;
  char *bname = strrchr(path, '/');
  if (bname == NULL)
    bname = (char *)path;
  else
    bname++;
  char nl = '\0';
  time(&tt);
  localtime_r(&tt, &t);
  tzset();
  if ((f = gzopen(path, "rb"))) {
    while (gzgets(f, buf, 1024)) {
      rcount++;
      if (time(NULL) > tt) {
        time(&tt);
        fprintf(stderr, "     \r%s: %d rows read (%d rows per second)", bname,
                rcount, rcount - lcount);
        lcount = rcount;
        nl = '\n';
      }
      trim(buf);
      if (buf[0] == '\0')
        continue;
      if (!strncmp(buf, "#Fields:", 8)) {
        col = strtok(buf, " ");
        c = 0;
        while ((col = strtok(NULL, " "))) {
          c++;
          if (!strcmp(col, "date"))
            pos[0] = c - 1;
          else if (!strcmp(col, "time"))
            pos[1] = c - 1;
          else if (!strcmp(col, "cs-method"))
            pos[2] = c - 1;
          else if (!strcmp(col, "cs-uri-stem"))
            pos[3] = c - 1;
          else if (!strcmp(col, "cs-uri-query"))
            pos[4] = c - 1;
          else if (!strcmp(col, "cs-username"))
            pos[5] = c - 1;
          else if (!strcmp(col, "c-ip"))
            pos[6] = c - 1;
          else if (!strcmp(col, "cs-version"))
            pos[7] = c - 1;
          else if (!strcmp(col, "cs(User-Agent)"))
            pos[8] = c - 1;
          else if (!strcmp(col, "cs(Referer)"))
            pos[9] = c - 1;
          else if (!strcmp(col, "sc-status"))
            pos[10] = c - 1;
          else if (!strcmp(col, "sc-bytes"))
            pos[11] = c - 1;
          else if (!strcmp(col, "cs-host"))
            pos[12] = c - 1;
        }
        for (c = 0; c < 13; c++) {
          if (pos[c] == -1) {
            if (c == 12 && !host)
              continue;
            gzclose(f);
            fprintf(stderr, "Fields missing in '%s' (%d)\n", path, c);
            return;
          }
        }
      } else if (buf[0] != '#') {
        if (pos[0] == -1) {
          printf("%s\n", buf);
          continue;
        }
        c = 0;
        cols[c++] = strtok(buf, " ");
        while ((cols[c++] = strtok(NULL, " ")) != NULL) {
          if (c > 99)
            break;
        }
        if (c < 12)
          continue;
        if (c > 12 && host && cols[pos[12]] && strcmp(cols[pos[12]], host))
          continue;
        sprintf(d, "%s %s", cols[pos[0]], cols[pos[1]]);
        strptime(d, "%Y-%m-%d %T", &t);
        strftime(d, 40, "%d/%b/%Y:%T %z", &t);
        printf("%s - %s [%s] \"%s %s", cols[pos[6]], cols[pos[5]], d,
               cols[pos[2]], cols[pos[3]]);
        if (strcmp(cols[pos[4]], "-"))
          printf("?%s", cols[pos[4]]);
        memset((void *)u, 0, 1024);
        printf(" %s\" %s %s \"%s\" \"%s\"\n", cols[pos[7]], cols[pos[10]],
               cols[pos[11]], cols[pos[9]], urldecode(cols[pos[8]], u));
      }
    }
    gzclose(f);
    if (nl)
      fprintf(stderr, "\n");
  }
}


x86 assembly (clang, -O0):
<convert_log_file>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc40,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
lea    -0x8e0(%rbp),%rdi
mov    $0xff,%esi
mov    $0x34,%edx
call   10a0 <memset@plt>
movl   $0x0,-0xc08(%rbp)
movl   $0x0,-0xc0c(%rbp)
mov    -0x8(%rbp),%rdi
mov    $0x2f,%esi
call   1080 <strrchr@plt>
mov    %rax,-0xc18(%rbp)
cmpq   $0x0,-0xc18(%rbp)
jne    1290 <convert_log_file+0x70>
mov    -0x8(%rbp),%rax
mov    %rax,-0xc18(%rbp)
jmp    12a2 <convert_log_file+0x82>
mov    -0xc18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0xc18(%rbp)
movb   $0x0,-0xc19(%rbp)
lea    -0x8a4(%rbp),%rdi
call   10e0 <time@plt>
lea    -0x8a4(%rbp),%rdi
lea    -0x8a0(%rbp),%rsi
call   1050 <localtime_r@plt>
mov    $0x0,%al
call   10d0 <tzset@plt>
mov    -0x8(%rbp),%rdi
lea    0xd26(%rip),%rsi
call   1100 <gzopen@plt>
mov    %eax,-0x14(%rbp)
cmp    $0x0,%eax
je     1a78 <convert_log_file+0x858>
jmp    12f0 <convert_log_file+0xd0>
mov    -0x14(%rbp),%edi
lea    -0x420(%rbp),%rsi
mov    $0x400,%edx
call   1060 <gzgets@plt>
cmp    $0x0,%rax
je     1a47 <convert_log_file+0x827>
mov    -0xc0c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc0c(%rbp)
xor    %eax,%eax
mov    %eax,%edi
call   10e0 <time@plt>
cmp    -0x8a4(%rbp),%eax
jle    1383 <convert_log_file+0x163>
lea    -0x8a4(%rbp),%rdi
call   10e0 <time@plt>
mov    0x2c9b(%rip),%rax
mov    (%rax),%edi
mov    -0xc18(%rbp),%rdx
mov    -0xc0c(%rbp),%ecx
mov    -0xc0c(%rbp),%r8d
sub    -0xc08(%rbp),%r8d
lea    0xc9a(%rip),%rsi
mov    $0x0,%al
call   10c0 <fprintf@plt>
mov    -0xc0c(%rbp),%eax
mov    %eax,-0xc08(%rbp)
movb   $0xa,-0xc19(%rbp)
lea    -0x420(%rbp),%rdi
call   1090 <trim@plt>
movsbl -0x420(%rbp),%eax
cmp    $0x0,%eax
jne    13a4 <convert_log_file+0x184>
jmp    12f0 <convert_log_file+0xd0>
lea    -0x420(%rbp),%rdi
lea    0xc7d(%rip),%rsi
mov    $0x8,%edx
call   1040 <strncmp@plt>
cmp    $0x0,%eax
jne    1767 <convert_log_file+0x547>
lea    -0x420(%rbp),%rdi
lea    0xc65(%rip),%rsi
call   1120 <strtok@plt>
mov    %rax,-0x898(%rbp)
movl   $0x0,-0xc04(%rbp)
xor    %eax,%eax
mov    %eax,%edi
lea    0xc44(%rip),%rsi
call   1120 <strtok@plt>
mov    %rax,-0x898(%rbp)
cmp    $0x0,%rax
je     16d2 <convert_log_file+0x4b2>
mov    -0xc04(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc04(%rbp)
mov    -0x898(%rbp),%rdi
lea    0xc13(%rip),%rsi
call   10b0 <strcmp@plt>
cmp    $0x0,%rax
jne    144a <convert_log_file+0x22a>
mov    -0xc04(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x8e0(%rbp)
jmp    16cd <convert_log_file+0x4ad>
mov    -0x898(%rbp),%rdi
lea    0xbe7(%rip),%rsi
call   10b0 <strcmp@plt>
cmp    $0x0,%rax
jne    147b <convert_log_file+0x25b>
mov    -0xc04(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x8dc(%rbp)
jmp    16c8 <convert_log_file+0x4a8>
mov    -0x898(%rbp),%rdi
lea    0xbbb(%rip),%rsi
call   10b0 <strcmp@plt>
cmp    $0x0,%rax
jne    14ac <convert_log_file+0x28c>
mov    -0xc04(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x8d8(%rbp)
jmp    16c3 <convert_log_file+0x4a3>
mov    -0x898(%rbp),%rdi
lea    0xb94(%rip),%rsi
call   10b0 <strcmp@plt>
cmp    $0x0,%rax
jne    14dd <convert_log_file+0x2bd>
mov    -0xc04(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x8d4(%rbp)
jmp    16be <convert_log_file+0x49e>
mov    -0x898(%rbp),%rdi
lea    0xb6f(%rip),%rsi
call   10b0 <strcmp@plt>
cmp    $0x0,%rax
jne    150e <convert_log_file+0x2ee>
mov    -0xc04(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x8d0(%rbp)
jmp    16b9 <convert_log_file+0x499>
mov    -0x898(%rbp),%rdi
lea    0xb4b(%rip),%rsi
call   10b0 <strcmp@plt>
cmp    $0x0,%rax
jne    153f <convert_log_file+0x31f>
mov    -0xc04(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x8cc(%rbp)
jmp    16b4 <convert_log_file+0x494>
mov    -0x898(%rbp),%rdi
lea    0xb26(%rip),%rsi
call   10b0 <strcmp@plt>
cmp    $0x0,%rax
jne    1570 <convert_log_file+0x350>
mov    -0xc04(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x8c8(%rbp)
jmp    16af <convert_log_file+0x48f>
mov    -0x898(%rbp),%rdi
lea    0xafa(%rip),%rsi
call   10b0 <strcmp@plt>
cmp    $0x0,%rax
jne    15a1 <convert_log_file+0x381>
mov    -0xc04(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x8c4(%rbp)
jmp    16aa <convert_log_file+0x48a>
mov    -0x898(%rbp),%rdi
lea    0xad4(%rip),%rsi
call   10b0 <strcmp@plt>
cmp    $0x0,%rax
jne    15d2 <convert_log_file+0x3b2>
mov    -0xc04(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x8c0(%rbp)
jmp    16a5 <convert_log_file+0x485>
mov    -0x898(%rbp),%rdi
lea    0xab2(%rip),%rsi
call   10b0 <strcmp@plt>
cmp    $0x0,%rax
jne    1603 <convert_log_file+0x3e3>
mov    -0xc04(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x8bc(%rbp)
jmp    16a0 <convert_log_file+0x480>
mov    -0x898(%rbp),%rdi
lea    0xa8d(%rip),%rsi
call   10b0 <strcmp@plt>
cmp    $0x0,%rax
jne    1634 <convert_log_file+0x414>
mov    -0xc04(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x8b8(%rbp)
jmp    169b <convert_log_file+0x47b>
mov    -0x898(%rbp),%rdi
lea    0xa66(%rip),%rsi
call   10b0 <strcmp@plt>
cmp    $0x0,%rax
jne    1665 <convert_log_file+0x445>
mov    -0xc04(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x8b4(%rbp)
jmp    1696 <convert_log_file+0x476>
mov    -0x898(%rbp),%rdi
lea    0xa3e(%rip),%rsi
call   10b0 <strcmp@plt>
cmp    $0x0,%rax
jne    1691 <convert_log_file+0x471>
mov    -0xc04(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x8b0(%rbp)
jmp    1696 <convert_log_file+0x476>
jmp    169b <convert_log_file+0x47b>
jmp    16a0 <convert_log_file+0x480>
jmp    16a5 <convert_log_file+0x485>
jmp    16aa <convert_log_file+0x48a>
jmp    16af <convert_log_file+0x48f>
jmp    16b4 <convert_log_file+0x494>
jmp    16b9 <convert_log_file+0x499>
jmp    16be <convert_log_file+0x49e>
jmp    16c3 <convert_log_file+0x4a3>
jmp    16c8 <convert_log_file+0x4a8>
jmp    16cd <convert_log_file+0x4ad>
jmp    13e9 <convert_log_file+0x1c9>
movl   $0x0,-0xc04(%rbp)
cmpl   $0xd,-0xc04(%rbp)
jge    1762 <convert_log_file+0x542>
movslq -0xc04(%rbp),%rax
cmpl   $0xffffffff,-0x8e0(%rbp,%rax,4)
ff
jne    1749 <convert_log_file+0x529>
cmpl   $0xc,-0xc04(%rbp)
jne    171b <convert_log_file+0x4fb>
cmpq   $0x0,-0x10(%rbp)
jne    171b <convert_log_file+0x4fb>
jmp    174e <convert_log_file+0x52e>
mov    -0x14(%rbp),%edi
call   1030 <gzclose@plt>
mov    0x28b6(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%rdx
mov    -0xc04(%rbp),%ecx
lea    0x97c(%rip),%rsi
mov    $0x0,%al
call   10c0 <fprintf@plt>
jmp    1a78 <convert_log_file+0x858>
jmp    174e <convert_log_file+0x52e>
mov    -0xc04(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc04(%rbp)
jmp    16dc <convert_log_file+0x4bc>
jmp    1a42 <convert_log_file+0x822>
movsbl -0x420(%rbp),%eax
cmp    $0x23,%eax
je     1a3d <convert_log_file+0x81d>
cmpl   $0xffffffff,-0x8e0(%rbp)
jne    179e <convert_log_file+0x57e>
lea    -0x420(%rbp),%rsi
lea    0x944(%rip),%rdi
mov    $0x0,%al
call   1070 <printf@plt>
jmp    12f0 <convert_log_file+0xd0>
movl   $0x0,-0xc04(%rbp)
lea    -0x420(%rbp),%rdi
lea    0x882(%rip),%rsi
call   1120 <strtok@plt>
mov    %rax,%rcx
mov    -0xc04(%rbp),%eax
mov    %eax,%edx
add    $0x1,%edx
mov    %edx,-0xc04(%rbp)
cltq
mov    %rcx,-0xc00(%rbp,%rax,8)
ff
xor    %eax,%eax
mov    %eax,%edi
lea    0x854(%rip),%rsi
call   1120 <strtok@plt>
mov    -0xc04(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0xc04(%rbp)
movslq %ecx,%rcx
mov    %rax,-0xc00(%rbp,%rcx,8)
ff
cmp    $0x0,%rax
je     1826 <convert_log_file+0x606>
cmpl   $0x63,-0xc04(%rbp)
jle    1821 <convert_log_file+0x601>
jmp    1826 <convert_log_file+0x606>
jmp    17d9 <convert_log_file+0x5b9>
cmpl   $0xc,-0xc04(%rbp)
jge    1838 <convert_log_file+0x618>
jmp    12f0 <convert_log_file+0xd0>
cmpl   $0xc,-0xc04(%rbp)
jle    188d <convert_log_file+0x66d>
cmpq   $0x0,-0x10(%rbp)
je     188d <convert_log_file+0x66d>
movslq -0x8b0(%rbp),%rax
cmpq   $0x0,-0xc00(%rbp,%rax,8)
je     188d <convert_log_file+0x66d>
movslq -0x8b0(%rbp),%rax
mov    -0xc00(%rbp,%rax,8),%rdi
ff
mov    -0x10(%rbp),%rsi
call   10b0 <strcmp@plt>
cmp    $0x0,%rax
je     188d <convert_log_file+0x66d>
jmp    12f0 <convert_log_file+0xd0>
lea    -0x490(%rbp),%rdi
movslq -0x8e0(%rbp),%rax
mov    -0xc00(%rbp,%rax,8),%rdx
ff
movslq -0x8dc(%rbp),%rax
mov    -0xc00(%rbp,%rax,8),%rcx
ff
lea    0x84a(%rip),%rsi
call   1130 <sprintf@plt>
lea    -0x490(%rbp),%rdi
lea    0x80e(%rip),%rsi
lea    -0x8a0(%rbp),%rdx
call   1140 <strptime@plt>
lea    -0x490(%rbp),%rdi
mov    $0x28,%esi
lea    0x7fb(%rip),%rdx
lea    -0x8a0(%rbp),%rcx
call   10f0 <strftime@plt>
movslq -0x8c8(%rbp),%rax
mov    -0xc00(%rbp,%rax,8),%rsi
ff
movslq -0x8cc(%rbp),%rax
mov    -0xc00(%rbp,%rax,8),%rdx
ff
lea    -0x490(%rbp),%rcx
movslq -0x8d8(%rbp),%rax
mov    -0xc00(%rbp,%rax,8),%r8
ff
movslq -0x8d4(%rbp),%rax
mov    -0xc00(%rbp,%rax,8),%r9
ff
lea    0x7b4(%rip),%rdi
mov    $0x0,%al
call   1070 <printf@plt>
movslq -0x8d0(%rbp),%rax
mov    -0xc00(%rbp,%rax,8),%rdi
ff
lea    0x7ab(%rip),%rsi
call   10b0 <strcmp@plt>
cmp    $0x0,%rax
je     198a <convert_log_file+0x76a>
movslq -0x8d0(%rbp),%rax
mov    -0xc00(%rbp,%rax,8),%rsi
ff
lea    0x788(%rip),%rdi
mov    $0x0,%al
call   1070 <printf@plt>
lea    -0x890(%rbp),%rdi
xor    %esi,%esi
mov    $0x400,%edx
call   10a0 <memset@plt>
movslq -0x8c4(%rbp),%rax
mov    -0xc00(%rbp,%rax,8),%rax
ff
mov    %rax,-0xc40(%rbp)
movslq -0x8b8(%rbp),%rax
mov    -0xc00(%rbp,%rax,8),%rax
ff
mov    %rax,-0xc38(%rbp)
movslq -0x8b4(%rbp),%rax
mov    -0xc00(%rbp,%rax,8),%rax
ff
mov    %rax,-0xc30(%rbp)
movslq -0x8bc(%rbp),%rax
mov    -0xc00(%rbp,%rax,8),%rax
ff
mov    %rax,-0xc28(%rbp)
movslq -0x8c0(%rbp),%rax
mov    -0xc00(%rbp,%rax,8),%rdi
ff
lea    -0x890(%rbp),%rsi
call   1110 <urldecode@plt>
mov    -0xc40(%rbp),%rsi
mov    -0xc38(%rbp),%rdx
mov    -0xc30(%rbp),%rcx
mov    -0xc28(%rbp),%r8
mov    %rax,%r9
lea    0x6d9(%rip),%rdi
mov    $0x0,%al
call   1070 <printf@plt>
jmp    1a42 <convert_log_file+0x822>
jmp    12f0 <convert_log_file+0xd0>
mov    -0x14(%rbp),%edi
call   1030 <gzclose@plt>
cmpb   $0x0,-0xc19(%rbp)
je     1a73 <convert_log_file+0x853>
mov    0x257d(%rip),%rax
mov    (%rax),%edi
lea    0x6b7(%rip),%rsi
mov    $0x0,%al
call   10c0 <fprintf@plt>
jmp    1a78 <convert_log_file+0x858>
add    $0xc40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<convert_log_file>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xc18,%rsp
mov    %rsi,%r14
mov    %rdi,%rbp
mov    $0x2f,%esi
call   1080 <strrchr@plt>
lea    0x1(%rax),%rcx
test   %rax,%rax
cmove  %rbp,%rcx
mov    %rcx,0x78(%rsp)
lea    0x4c(%rsp),%rbx
mov    %rbx,%rdi
call   10e0 <time@plt>
lea    0x58(%rsp),%rsi
mov    %rbx,%rdi
call   1050 <localtime_r@plt>
xor    %eax,%eax
call   10d0 <tzset@plt>
lea    0xd87(%rip),%rsi
mov    %rbp,%rdi
call   1100 <gzopen@plt>
test   %eax,%eax
je     198c <convert_log_file+0x76c>
mov    %eax,%ebx
lea    0x410(%rsp),%rsi
mov    %eax,%edi
mov    $0x400,%edx
call   1060 <gzgets@plt>
test   %rax,%rax
je     1349 <convert_log_file+0x129>
mov    %r14,0x50(%rsp)
mov    %rbp,0x8(%rsp)
mov    $0xffffffff,%r12d
mov    0x2d21(%rip),%r15
lea    0x410(%rsp),%rbp
lea    0xd6a(%rip),%r13
movl   $0xffffffff,0x44(%rsp)
ff
movl   $0xffffffff,0x40(%rsp)
ff
movl   $0xffffffff,0x3c(%rsp)
ff
movl   $0xffffffff,0x38(%rsp)
ff
movl   $0xffffffff,0x34(%rsp)
ff
movl   $0xffffffff,0x30(%rsp)
ff
movl   $0xffffffff,0x2c(%rsp)
ff
movl   $0xffffffff,0x24(%rsp)
ff
movl   $0xffffffff,0x20(%rsp)
ff
movl   $0xffffffff,0x1c(%rsp)
ff
movl   $0xffffffff,0x18(%rsp)
ff
movl   $0xffffffff,0x14(%rsp)
ff
xor    %eax,%eax
mov    %rax,0x60(%rsp)
xor    %r14d,%r14d
movl   $0x0,0x48(%rsp)
mov    %ebx,0x28(%rsp)
jmp    140b <convert_log_file+0x1eb>
mov    %ebx,%edi
call   1030 <gzclose@plt>
jmp    198c <convert_log_file+0x76c>
lea    0x810(%rsp),%rbx
mov    %rbx,%rdi
xor    %esi,%esi
mov    $0x400,%edx
call   10a0 <memset@plt>
movslq 0x2c(%rsp),%rax
mov    0x80(%rsp,%rax,8),%rax
mov    %rax,0x70(%rsp)
movslq 0x1c(%rsp),%rax
mov    0x80(%rsp,%rax,8),%rax
mov    %rax,0x68(%rsp)
movslq 0x18(%rsp),%rax
mov    0x80(%rsp,%rax,8),%rbp
movslq 0x20(%rsp),%rax
mov    0x80(%rsp,%rax,8),%r15
movslq 0x24(%rsp),%rax
mov    0x80(%rsp,%rax,8),%rdi
mov    %rbx,%rsi
call   1110 <urldecode@plt>
lea    0xd49(%rip),%rdi
mov    0x70(%rsp),%rsi
mov    0x68(%rsp),%rdx
mov    %rbp,%rcx
mov    %r15,%r8
mov    %rax,%r9
xor    %eax,%eax
call   1070 <printf@plt>
mov    0x28(%rsp),%ebx
mov    0x2bf5(%rip),%r15
lea    0x410(%rsp),%rbp
mov    %ebx,%edi
mov    %rbp,%rsi
mov    $0x400,%edx
call   1060 <gzgets@plt>
test   %rax,%rax
je     18ce <convert_log_file+0x6ae>
add    $0x1,%r14d
xor    %edi,%edi
call   10e0 <time@plt>
cmp    0x4c(%rsp),%eax
jle    1453 <convert_log_file+0x233>
lea    0x4c(%rsp),%rdi
call   10e0 <time@plt>
mov    (%r15),%edi
mov    %r14d,%r8d
sub    0x48(%rsp),%r8d
lea    0xbcb(%rip),%rsi
mov    0x78(%rsp),%rdx
mov    %r14d,%ecx
xor    %eax,%eax
call   10c0 <fprintf@plt>
mov    $0xa,%al
mov    %rax,0x60(%rsp)
mov    %r14d,0x48(%rsp)
mov    %rbp,%rdi
call   1090 <trim@plt>
cmpb   $0x0,0x410(%rsp)
je     13f3 <convert_log_file+0x1d3>
mov    %rbp,%rdi
lea    0xbc0(%rip),%rsi
mov    $0x8,%edx
call   1040 <strncmp@plt>
test   %eax,%eax
je     1600 <convert_log_file+0x3e0>
cmpb   $0x23,0x410(%rsp)
23
je     13f3 <convert_log_file+0x1d3>
cmp    $0xffffffff,%r12d
je     18b2 <convert_log_file+0x692>
mov    %rbp,%rdi
mov    %r13,%rsi
call   1120 <strtok@plt>
mov    %rax,0x80(%rsp)
mov    $0x1,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xor    %edi,%edi
mov    %r13,%rsi
call   1120 <strtok@plt>
lea    0x1(%rbp),%rcx
mov    %rax,0x80(%rsp,%rbp,8)
test   %rax,%rax
je     14e4 <convert_log_file+0x2c4>
cmp    $0x63,%rbp
mov    %rcx,%rbp
jb     14c0 <convert_log_file+0x2a0>
lea    -0x1(%rcx),%eax
cmp    $0xb,%eax
jb     13eb <convert_log_file+0x1cb>
cmpq   $0x0,0x50(%rsp)
je     1522 <convert_log_file+0x302>
cmp    $0xc,%ecx
je     1522 <convert_log_file+0x302>
movslq 0x14(%rsp),%rax
mov    0x80(%rsp,%rax,8),%rdi
test   %rdi,%rdi
je     1522 <convert_log_file+0x302>
mov    0x50(%rsp),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
jne    13eb <convert_log_file+0x1cb>
movslq %r12d,%rax
mov    0x80(%rsp,%rax,8),%rdx
movslq 0x44(%rsp),%rax
mov    0x80(%rsp,%rax,8),%rcx
lea    0x3a0(%rsp),%rbx
mov    %rbx,%rdi
lea    0xbb7(%rip),%rsi
call   1130 <sprintf@plt>
mov    %rbx,%rdi
lea    0xb7f(%rip),%rsi
lea    0x58(%rsp),%rbp
mov    %rbp,%rdx
call   1140 <strptime@plt>
mov    %rbx,%rdi
mov    $0x28,%esi
lea    0xb6f(%rip),%rdx
mov    %rbp,%rcx
call   10f0 <strftime@plt>
movslq 0x30(%rsp),%rax
mov    0x80(%rsp,%rax,8),%rsi
movslq 0x34(%rsp),%rax
mov    0x80(%rsp,%rax,8),%rdx
movslq 0x40(%rsp),%rax
mov    0x80(%rsp,%rax,8),%r8
movslq 0x3c(%rsp),%rax
mov    0x80(%rsp,%rax,8),%r9
lea    0xb3b(%rip),%rdi
mov    %rbx,%rcx
xor    %eax,%eax
call   1070 <printf@plt>
movslq 0x38(%rsp),%rax
mov    0x80(%rsp,%rax,8),%rbp
mov    %rbp,%rdi
lea    0xb2e(%rip),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     1355 <convert_log_file+0x135>
lea    0xb1b(%rip),%rdi
mov    %rbp,%rsi
xor    %eax,%eax
call   1070 <printf@plt>
jmp    1355 <convert_log_file+0x135>
nop
mov    %rbp,%rdi
mov    %r13,%rsi
call   1120 <strtok@plt>
xor    %edi,%edi
mov    %r13,%rsi
call   1120 <strtok@plt>
test   %rax,%rax
je     1800 <convert_log_file+0x5e0>
mov    %rax,%r15
xor    %ebp,%ebp
lea    0xa10(%rip),%rbx
jmp    164c <convert_log_file+0x42c>
nopl   0x0(%rax)
mov    %ebp,%r12d
xor    %edi,%edi
mov    %r13,%rsi
call   1120 <strtok@plt>
mov    %rax,%r15
add    $0x1,%ebp
test   %rax,%rax
je     1800 <convert_log_file+0x5e0>
mov    %r15,%rdi
mov    %rbx,%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     1630 <convert_log_file+0x410>
mov    %r15,%rdi
lea    0x9d9(%rip),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     1790 <convert_log_file+0x570>
mov    %r15,%rdi
lea    0x9c6(%rip),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     1799 <convert_log_file+0x579>
mov    %r15,%rdi
lea    0x9b8(%rip),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     17a2 <convert_log_file+0x582>
mov    %r15,%rdi
lea    0x9ac(%rip),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     17ab <convert_log_file+0x58b>
mov    %r15,%rdi
lea    0x9a1(%rip),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     17b4 <convert_log_file+0x594>
mov    %r15,%rdi
lea    0x995(%rip),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     17bd <convert_log_file+0x59d>
mov    %r15,%rdi
lea    0x982(%rip),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     17c6 <convert_log_file+0x5a6>
mov    %r15,%rdi
lea    0x975(%rip),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     17cf <convert_log_file+0x5af>
mov    %r15,%rdi
lea    0x96c(%rip),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     17d8 <convert_log_file+0x5b8>
mov    %r15,%rdi
lea    0x960(%rip),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     17e1 <convert_log_file+0x5c1>
mov    %r15,%rdi
lea    0x952(%rip),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
je     17ea <convert_log_file+0x5ca>
mov    %r15,%rdi
lea    0x943(%rip),%rsi
call   10b0 <strcmp@plt>
test   %rax,%rax
mov    0x14(%rsp),%eax
cmove  %ebp,%eax
mov    %eax,0x14(%rsp)
jmp    1633 <convert_log_file+0x413>
cs nopw 0x0(%rax,%rax,1)
mov    %ebp,0x44(%rsp)
jmp    1633 <convert_log_file+0x413>
mov    %ebp,0x40(%rsp)
jmp    1633 <convert_log_file+0x413>
mov    %ebp,0x3c(%rsp)
jmp    1633 <convert_log_file+0x413>
mov    %ebp,0x38(%rsp)
jmp    1633 <convert_log_file+0x413>
mov    %ebp,0x34(%rsp)
jmp    1633 <convert_log_file+0x413>
mov    %ebp,0x30(%rsp)
jmp    1633 <convert_log_file+0x413>
mov    %ebp,0x2c(%rsp)
jmp    1633 <convert_log_file+0x413>
mov    %ebp,0x24(%rsp)
jmp    1633 <convert_log_file+0x413>
mov    %ebp,0x20(%rsp)
jmp    1633 <convert_log_file+0x413>
mov    %ebp,0x1c(%rsp)
jmp    1633 <convert_log_file+0x413>
mov    %ebp,0x18(%rsp)
jmp    1633 <convert_log_file+0x413>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmp    $0xffffffff,%r12d
je     18f6 <convert_log_file+0x6d6>
cmpl   $0xffffffff,0x44(%rsp)
mov    0x28(%rsp),%ebx
mov    0x27c6(%rip),%r15
je     190b <convert_log_file+0x6eb>
cmpl   $0xffffffff,0x40(%rsp)
je     1913 <convert_log_file+0x6f3>
cmpl   $0xffffffff,0x3c(%rsp)
je     191b <convert_log_file+0x6fb>
cmpl   $0xffffffff,0x38(%rsp)
je     1923 <convert_log_file+0x703>
cmpl   $0xffffffff,0x34(%rsp)
je     192b <convert_log_file+0x70b>
cmpl   $0xffffffff,0x30(%rsp)
je     1933 <convert_log_file+0x713>
cmpl   $0xffffffff,0x2c(%rsp)
je     193b <convert_log_file+0x71b>
cmpl   $0xffffffff,0x24(%rsp)
je     1943 <convert_log_file+0x723>
cmpl   $0xffffffff,0x20(%rsp)
je     194b <convert_log_file+0x72b>
cmpl   $0xffffffff,0x1c(%rsp)
je     1953 <convert_log_file+0x733>
cmpl   $0xffffffff,0x18(%rsp)
je     195b <convert_log_file+0x73b>
cmpl   $0xffffffff,0x14(%rsp)
jne    13eb <convert_log_file+0x1cb>
cmpq   $0x0,0x50(%rsp)
lea    0x410(%rsp),%rbp
je     13f3 <convert_log_file+0x1d3>
jmp    1963 <convert_log_file+0x743>
lea    0x81d(%rip),%rdi
mov    %rbp,%rsi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0xffffffff,%r12d
jmp    13f3 <convert_log_file+0x1d3>
mov    %ebx,%edi
call   1030 <gzclose@plt>
cmpb   $0x0,0x60(%rsp)
je     198c <convert_log_file+0x76c>
mov    (%r15),%edi
lea    0x839(%rip),%rsi
xor    %eax,%eax
call   10c0 <fprintf@plt>
jmp    198c <convert_log_file+0x76c>
xor    %r14d,%r14d
mov    0x8(%rsp),%rbp
mov    0x28(%rsp),%ebx
mov    0x26d7(%rip),%r15
jmp    196e <convert_log_file+0x74e>
mov    $0x1,%r14d
jmp    1969 <convert_log_file+0x749>
mov    $0x2,%r14d
jmp    1969 <convert_log_file+0x749>
mov    $0x3,%r14d
jmp    1969 <convert_log_file+0x749>
mov    $0x4,%r14d
jmp    1969 <convert_log_file+0x749>
mov    $0x5,%r14d
jmp    1969 <convert_log_file+0x749>
mov    $0x6,%r14d
jmp    1969 <convert_log_file+0x749>
mov    $0x7,%r14d
jmp    1969 <convert_log_file+0x749>
mov    $0x8,%r14d
jmp    1969 <convert_log_file+0x749>
mov    $0x9,%r14d
jmp    1969 <convert_log_file+0x749>
mov    $0xa,%r14d
jmp    1969 <convert_log_file+0x749>
mov    $0xb,%r14d
jmp    1969 <convert_log_file+0x749>
mov    $0xc,%r14d
mov    0x8(%rsp),%rbp
mov    %ebx,%edi
call   1030 <gzclose@plt>
mov    (%r15),%edi
lea    0x73a(%rip),%rsi
mov    %rbp,%rdx
mov    %r14d,%ecx
xor    %eax,%eax
call   10c0 <fprintf@plt>
add    $0xc18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
%struct.tm = type { i32 }
@.str = [3 x i8] c"rb\00"
@stderr = global i32 0
@.str.1 = [44 x i8] c" \0D%s: %d rows read (%d rows per second)\00"
@.str.2 = [9 x i8] c"#Fields:\00"
@.str.3 = [2 x i8] c" \00"
@.str.4 = [5 x i8] c"date\00"
@.str.5 = [5 x i8] c"time\00"
@.str.6 = [10 x i8] c"cs-method\00"
@.str.7 = [12 x i8] c"cs-uri-stem\00"
@.str.8 = [13 x i8] c"cs-uri-query\00"
@.str.9 = [12 x i8] c"cs-username\00"
@.str.10 = [5 x i8] c"c-ip\00"
@.str.11 = [11 x i8] c"cs-version\00"
@.str.12 = [15 x i8] c"cs(User-Agent)\00"
@.str.13 = [12 x i8] c"cs(Referer)\00"
@.str.14 = [10 x i8] c"sc-status\00"
@.str.15 = [9 x i8] c"sc-bytes\00"
@.str.16 = [8 x i8] c"cs-host\00"
@.str.17 = [29 x i8] c"Fields missing in '%s' (%d)\0A\00"
@.str.18 = [4 x i8] c"%s\0A\00"
@.str.19 = [6 x i8] c"%s %s\00"
@.str.20 = [12 x i8] c"%Y-%m-%d %T\00"
@.str.21 = [15 x i8] c"%d/%b/%Y:%T %z\00"
@.str.22 = [20 x i8] c"%s - %s [%s] \22%s %s\00"
@.str.23 = [2 x i8] c"-\00"
@.str.24 = [4 x i8] c"?%s\00"
@.str.25 = [22 x i8] c" %s\22 %s %s \22%s\22 \22%s\22\0A\00"
@.str.26 = [2 x i8] c"\0A\00"
define void @convert_log_file(i8* %0, i8* %1) {
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca i32
%6 = alloca [1024 x i8]
%7 = alloca [100 x i8]
%8 = alloca [1024 x i8]
%9 = alloca i8*
%10 = alloca %struct.tm
%11 = alloca i32
%12 = alloca [13 x i32]
%13 = alloca [100 x i8*]
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i8*
%18 = alloca i8
store i8* %0, i8** %3
store i8* %1, i8** %4
%19 = bitcast [13 x i32]* %12 to i8*
store i32 0, i32* %15
store i32 0, i32* %16
%20 = load i8*, i8** %3
%21 = call i8* @strrchr(i8* %20, i8 signext 47)
store i8* %21, i8** %17
%22 = load i8*, i8** %17
%23 = icmp eq i8* %22, null
br i1 %23, label %24, label %26
24: ; preds = %2
%25 = load i8*, i8** %3
store i8* %25, i8** %17
br label %29
26: ; preds = %2
%27 = load i8*, i8** %17
%28 = getelementptr inbounds i8, i8* %27, i32 1
store i8* %28, i8** %17
br label %29
29: ; preds = %26, %24
store i8 0, i8* %18
%30 = call i32 @time(i32* %11)
%31 = call i32 @localtime_r(i32* %11, %struct.tm* %10)
%32 = call i32 (...) @tzset()
%33 = load i8*, i8** %3
%34 = call i32 @gzopen(i8* %33, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0))
store i32 %34, i32* %5
%35 = icmp ne i32 %34, 0
br i1 %35, label %36, label %377
36: ; preds = %29
br label %37
37: ; preds = %367, %281, %258, %233, %65, %36
%38 = load i32, i32* %5
%39 = getelementptr inbounds [1024 x i8], [1024 x i8]* %6, i64 0, i64 0
%40 = call i64 @gzgets(i32 %38, i8* %39, i32 1024)
%41 = icmp ne i64 %40, 0
br i1 %41, label %42, label %368
42: ; preds = %37
%43 = load i32, i32* %16
%44 = add nsw i32 %43, 1
store i32 %44, i32* %16
%45 = call i32 @time(i32* null)
%46 = load i32, i32* %11
%47 = icmp sgt i32 %45, %46
br i1 %47, label %48, label %58
48: ; preds = %42
%49 = call i32 @time(i32* %11)
%50 = load i32, i32* @stderr
%51 = load i8*, i8** %17
%52 = load i32, i32* %16
%53 = load i32, i32* %16
%54 = load i32, i32* %15
%55 = sub nsw i32 %53, %54
%56 = call i32 (i32, i8*, ...) @fprintf(i32 %50, i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.1, i64 0, i64 0), i8* %51, i32 %52, i32 %55)
%57 = load i32, i32* %16
store i32 %57, i32* %15
store i8 10, i8* %18
br label %58
58: ; preds = %48, %42
%59 = getelementptr inbounds [1024 x i8], [1024 x i8]* %6, i64 0, i64 0
%60 = call i32 @trim(i8* %59)
%61 = getelementptr inbounds [1024 x i8], [1024 x i8]* %6, i64 0, i64 0
%62 = load i8, i8* %61
%63 = sext i8 %62 to i32
%64 = icmp eq i32 %63, 0
br i1 %64, label %65, label %66
65: ; preds = %58
br label %37
66: ; preds = %58
%67 = getelementptr inbounds [1024 x i8], [1024 x i8]* %6, i64 0, i64 0
%68 = call i32 @strncmp(i8* %67, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32 8)
%69 = icmp ne i32 %68, 0
br i1 %69, label %224, label %70
70: ; preds = %66
%71 = getelementptr inbounds [1024 x i8], [1024 x i8]* %6, i64 0, i64 0
%72 = call i8* @strtok(i8* %71, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
store i8* %72, i8** %9
store i32 0, i32* %14
br label %73
73: ; preds = %194, %70
%74 = call i8* @strtok(i8* null, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
store i8* %74, i8** %9
%75 = icmp ne i8* %74, null
br i1 %75, label %76, label %195
76: ; preds = %73
%77 = load i32, i32* %14
%78 = add nsw i32 %77, 1
store i32 %78, i32* %14
%79 = load i8*, i8** %9
%80 = call i64 @strcmp(i8* %79, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0))
%81 = icmp ne i64 %80, 0
br i1 %81, label %86, label %82
82: ; preds = %76
%83 = load i32, i32* %14
%84 = sub nsw i32 %83, 1
%85 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 0
store i32 %84, i32* %85
br label %194
86: ; preds = %76
%87 = load i8*, i8** %9
%88 = call i64 @strcmp(i8* %87, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0))
%89 = icmp ne i64 %88, 0
br i1 %89, label %94, label %90
90: ; preds = %86
%91 = load i32, i32* %14
%92 = sub nsw i32 %91, 1
%93 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 1
store i32 %92, i32* %93
br label %193
94: ; preds = %86
%95 = load i8*, i8** %9
%96 = call i64 @strcmp(i8* %95, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.6, i64 0, i64 0))
%97 = icmp ne i64 %96, 0
br i1 %97, label %102, label %98
98: ; preds = %94
%99 = load i32, i32* %14
%100 = sub nsw i32 %99, 1
%101 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 2
store i32 %100, i32* %101
br label %192
102: ; preds = %94
%103 = load i8*, i8** %9
%104 = call i64 @strcmp(i8* %103, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.7, i64 0, i64 0))
%105 = icmp ne i64 %104, 0
br i1 %105, label %110, label %106
106: ; preds = %102
%107 = load i32, i32* %14
%108 = sub nsw i32 %107, 1
%109 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 3
store i32 %108, i32* %109
br label %191
110: ; preds = %102
%111 = load i8*, i8** %9
%112 = call i64 @strcmp(i8* %111, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.8, i64 0, i64 0))
%113 = icmp ne i64 %112, 0
br i1 %113, label %118, label %114
114: ; preds = %110
%115 = load i32, i32* %14
%116 = sub nsw i32 %115, 1
%117 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 4
store i32 %116, i32* %117
br label %190
118: ; preds = %110
%119 = load i8*, i8** %9
%120 = call i64 @strcmp(i8* %119, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.9, i64 0, i64 0))
%121 = icmp ne i64 %120, 0
br i1 %121, label %126, label %122
122: ; preds = %118
%123 = load i32, i32* %14
%124 = sub nsw i32 %123, 1
%125 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 5
store i32 %124, i32* %125
br label %189
126: ; preds = %118
%127 = load i8*, i8** %9
%128 = call i64 @strcmp(i8* %127, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0))
%129 = icmp ne i64 %128, 0
br i1 %129, label %134, label %130
130: ; preds = %126
%131 = load i32, i32* %14
%132 = sub nsw i32 %131, 1
%133 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 6
store i32 %132, i32* %133
br label %188
134: ; preds = %126
%135 = load i8*, i8** %9
%136 = call i64 @strcmp(i8* %135, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.11, i64 0, i64 0))
%137 = icmp ne i64 %136, 0
br i1 %137, label %142, label %138
138: ; preds = %134
%139 = load i32, i32* %14
%140 = sub nsw i32 %139, 1
%141 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 7
store i32 %140, i32* %141
br label %187
142: ; preds = %134
%143 = load i8*, i8** %9
%144 = call i64 @strcmp(i8* %143, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.12, i64 0, i64 0))
%145 = icmp ne i64 %144, 0
br i1 %145, label %150, label %146
146: ; preds = %142
%147 = load i32, i32* %14
%148 = sub nsw i32 %147, 1
%149 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 8
store i32 %148, i32* %149
br label %186
150: ; preds = %142
%151 = load i8*, i8** %9
%152 = call i64 @strcmp(i8* %151, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i64 0, i64 0))
%153 = icmp ne i64 %152, 0
br i1 %153, label %158, label %154
154: ; preds = %150
%155 = load i32, i32* %14
%156 = sub nsw i32 %155, 1
%157 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 9
store i32 %156, i32* %157
br label %185
158: ; preds = %150
%159 = load i8*, i8** %9
%160 = call i64 @strcmp(i8* %159, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.14, i64 0, i64 0))
%161 = icmp ne i64 %160, 0
br i1 %161, label %166, label %162
162: ; preds = %158
%163 = load i32, i32* %14
%164 = sub nsw i32 %163, 1
%165 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 10
store i32 %164, i32* %165
br label %184
166: ; preds = %158
%167 = load i8*, i8** %9
%168 = call i64 @strcmp(i8* %167, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.15, i64 0, i64 0))
%169 = icmp ne i64 %168, 0
br i1 %169, label %174, label %170
170: ; preds = %166
%171 = load i32, i32* %14
%172 = sub nsw i32 %171, 1
%173 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 11
store i32 %172, i32* %173
br label %183
174: ; preds = %166
%175 = load i8*, i8** %9
%176 = call i64 @strcmp(i8* %175, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.16, i64 0, i64 0))
%177 = icmp ne i64 %176, 0
br i1 %177, label %182, label %178
178: ; preds = %174
%179 = load i32, i32* %14
%180 = sub nsw i32 %179, 1
%181 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 12
store i32 %180, i32* %181
br label %182
182: ; preds = %178, %174
br label %183
183: ; preds = %182, %170
br label %184
184: ; preds = %183, %162
br label %185
185: ; preds = %184, %154
br label %186
186: ; preds = %185, %146
br label %187
187: ; preds = %186, %138
br label %188
188: ; preds = %187, %130
br label %189
189: ; preds = %188, %122
br label %190
190: ; preds = %189, %114
br label %191
191: ; preds = %190, %106
br label %192
192: ; preds = %191, %98
br label %193
193: ; preds = %192, %90
br label %194
194: ; preds = %193, %82
br label %73
195: ; preds = %73
store i32 0, i32* %14
br label %196
196: ; preds = %220, %195
%197 = load i32, i32* %14
%198 = icmp slt i32 %197, 13
br i1 %198, label %199, label %223
199: ; preds = %196
%200 = load i32, i32* %14
%201 = sext i32 %200 to i64
%202 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 %201
%203 = load i32, i32* %202
%204 = icmp eq i32 %203, -1
br i1 %204, label %205, label %219
205: ; preds = %199
%206 = load i32, i32* %14
%207 = icmp eq i32 %206, 12
br i1 %207, label %208, label %212
208: ; preds = %205
%209 = load i8*, i8** %4
%210 = icmp ne i8* %209, null
br i1 %210, label %212, label %211
211: ; preds = %208
br label %220
212: ; preds = %208, %205
%213 = load i32, i32* %5
%214 = call i32 @gzclose(i32 %213)
%215 = load i32, i32* @stderr
%216 = load i8*, i8** %3
%217 = load i32, i32* %14
%218 = call i32 (i32, i8*, ...) @fprintf(i32 %215, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.17, i64 0, i64 0), i8* %216, i32 %217)
br label %377
219: ; preds = %199
br label %220
220: ; preds = %219, %211
%221 = load i32, i32* %14
%222 = add nsw i32 %221, 1
store i32 %222, i32* %14
br label %196
223: ; preds = %196
br label %367
224: ; preds = %66
%225 = getelementptr inbounds [1024 x i8], [1024 x i8]* %6, i64 0, i64 0
%226 = load i8, i8* %225
%227 = sext i8 %226 to i32
%228 = icmp ne i32 %227, 35
br i1 %228, label %229, label %366
229: ; preds = %224
%230 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 0
%231 = load i32, i32* %230
%232 = icmp eq i32 %231, -1
br i1 %232, label %233, label %236
233: ; preds = %229
%234 = getelementptr inbounds [1024 x i8], [1024 x i8]* %6, i64 0, i64 0
%235 = call i32 (i8*, i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.18, i64 0, i64 0), i8* %234)
br label %37
236: ; preds = %229
store i32 0, i32* %14
%237 = getelementptr inbounds [1024 x i8], [1024 x i8]* %6, i64 0, i64 0
%238 = call i8* @strtok(i8* %237, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
%239 = load i32, i32* %14
%240 = add nsw i32 %239, 1
store i32 %240, i32* %14
%241 = sext i32 %239 to i64
%242 = getelementptr inbounds [100 x i8*], [100 x i8*]* %13, i64 0, i64 %241
store i8* %238, i8** %242
br label %243
243: ; preds = %254, %236
%244 = call i8* @strtok(i8* null, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
%245 = load i32, i32* %14
%246 = add nsw i32 %245, 1
store i32 %246, i32* %14
%247 = sext i32 %245 to i64
%248 = getelementptr inbounds [100 x i8*], [100 x i8*]* %13, i64 0, i64 %247
store i8* %244, i8** %248
%249 = icmp ne i8* %244, null
br i1 %249, label %250, label %255
250: ; preds = %243
%251 = load i32, i32* %14
%252 = icmp sgt i32 %251, 99
br i1 %252, label %253, label %254
253: ; preds = %250
br label %255
254: ; preds = %250
br label %243
255: ; preds = %253, %243
%256 = load i32, i32* %14
%257 = icmp slt i32 %256, 12
br i1 %257, label %258, label %259
258: ; preds = %255
br label %37
259: ; preds = %255
%260 = load i32, i32* %14
%261 = icmp sgt i32 %260, 12
br i1 %261, label %262, label %282
262: ; preds = %259
%263 = load i8*, i8** %4
%264 = icmp ne i8* %263, null
br i1 %264, label %265, label %282
265: ; preds = %262
%266 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 12
%267 = load i32, i32* %266
%268 = sext i32 %267 to i64
%269 = getelementptr inbounds [100 x i8*], [100 x i8*]* %13, i64 0, i64 %268
%270 = load i8*, i8** %269
%271 = icmp ne i8* %270, null
br i1 %271, label %272, label %282
272: ; preds = %265
%273 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 12
%274 = load i32, i32* %273
%275 = sext i32 %274 to i64
%276 = getelementptr inbounds [100 x i8*], [100 x i8*]* %13, i64 0, i64 %275
%277 = load i8*, i8** %276
%278 = load i8*, i8** %4
%279 = call i64 @strcmp(i8* %277, i8* %278)
%280 = icmp ne i64 %279, 0
br i1 %280, label %281, label %282
281: ; preds = %272
br label %37
282: ; preds = %272, %265, %262, %259
%283 = getelementptr inbounds [100 x i8], [100 x i8]* %7, i64 0, i64 0
%284 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 0
%285 = load i32, i32* %284
%286 = sext i32 %285 to i64
%287 = getelementptr inbounds [100 x i8*], [100 x i8*]* %13, i64 0, i64 %286
%288 = load i8*, i8** %287
%289 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 1
%290 = load i32, i32* %289
%291 = sext i32 %290 to i64
%292 = getelementptr inbounds [100 x i8*], [100 x i8*]* %13, i64 0, i64 %291
%293 = load i8*, i8** %292
%294 = call i32 @sprintf(i8* %283, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.19, i64 0, i64 0), i8* %288, i8* %293)
%295 = getelementptr inbounds [100 x i8], [100 x i8]* %7, i64 0, i64 0
%296 = call i32 @strptime(i8* %295, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.20, i64 0, i64 0), %struct.tm* %10)
%297 = getelementptr inbounds [100 x i8], [100 x i8]* %7, i64 0, i64 0
%298 = call i32 @strftime(i8* %297, i32 40, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.21, i64 0, i64 0), %struct.tm* %10)
%299 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 6
%300 = load i32, i32* %299
%301 = sext i32 %300 to i64
%302 = getelementptr inbounds [100 x i8*], [100 x i8*]* %13, i64 0, i64 %301
%303 = load i8*, i8** %302
%304 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 5
%305 = load i32, i32* %304
%306 = sext i32 %305 to i64
%307 = getelementptr inbounds [100 x i8*], [100 x i8*]* %13, i64 0, i64 %306
%308 = load i8*, i8** %307
%309 = getelementptr inbounds [100 x i8], [100 x i8]* %7, i64 0, i64 0
%310 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 2
%311 = load i32, i32* %310
%312 = sext i32 %311 to i64
%313 = getelementptr inbounds [100 x i8*], [100 x i8*]* %13, i64 0, i64 %312
%314 = load i8*, i8** %313
%315 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 3
%316 = load i32, i32* %315
%317 = sext i32 %316 to i64
%318 = getelementptr inbounds [100 x i8*], [100 x i8*]* %13, i64 0, i64 %317
%319 = load i8*, i8** %318
%320 = call i32 (i8*, i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.22, i64 0, i64 0), i8* %303, i8* %308, i8* %309, i8* %314, i8* %319)
%321 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 4
%322 = load i32, i32* %321
%323 = sext i32 %322 to i64
%324 = getelementptr inbounds [100 x i8*], [100 x i8*]* %13, i64 0, i64 %323
%325 = load i8*, i8** %324
%326 = call i64 @strcmp(i8* %325, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.23, i64 0, i64 0))
%327 = icmp ne i64 %326, 0
br i1 %327, label %328, label %335
328: ; preds = %282
%329 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 4
%330 = load i32, i32* %329
%331 = sext i32 %330 to i64
%332 = getelementptr inbounds [100 x i8*], [100 x i8*]* %13, i64 0, i64 %331
%333 = load i8*, i8** %332
%334 = call i32 (i8*, i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.24, i64 0, i64 0), i8* %333)
br label %335
335: ; preds = %328, %282
%336 = getelementptr inbounds [1024 x i8], [1024 x i8]* %8, i64 0, i64 0
%337 = call i32 @memset(i8* %336, i32 0, i32 1024)
%338 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 7
%339 = load i32, i32* %338
%340 = sext i32 %339 to i64
%341 = getelementptr inbounds [100 x i8*], [100 x i8*]* %13, i64 0, i64 %340
%342 = load i8*, i8** %341
%343 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 10
%344 = load i32, i32* %343
%345 = sext i32 %344 to i64
%346 = getelementptr inbounds [100 x i8*], [100 x i8*]* %13, i64 0, i64 %345
%347 = load i8*, i8** %346
%348 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 11
%349 = load i32, i32* %348
%350 = sext i32 %349 to i64
%351 = getelementptr inbounds [100 x i8*], [100 x i8*]* %13, i64 0, i64 %350
%352 = load i8*, i8** %351
%353 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 9
%354 = load i32, i32* %353
%355 = sext i32 %354 to i64
%356 = getelementptr inbounds [100 x i8*], [100 x i8*]* %13, i64 0, i64 %355
%357 = load i8*, i8** %356
%358 = getelementptr inbounds [13 x i32], [13 x i32]* %12, i64 0, i64 8
%359 = load i32, i32* %358
%360 = sext i32 %359 to i64
%361 = getelementptr inbounds [100 x i8*], [100 x i8*]* %13, i64 0, i64 %360
%362 = load i8*, i8** %361
%363 = getelementptr inbounds [1024 x i8], [1024 x i8]* %8, i64 0, i64 0
%364 = call i8* @urldecode(i8* %362, i8* %363)
%365 = call i32 (i8*, i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.25, i64 0, i64 0), i8* %342, i8* %347, i8* %352, i8* %357, i8* %364)
br label %366
366: ; preds = %335, %224
br label %367
367: ; preds = %366, %223
br label %37
368: ; preds = %37
%369 = load i32, i32* %5
%370 = call i32 @gzclose(i32 %369)
%371 = load i8, i8* %18
%372 = icmp ne i8 %371, 0
br i1 %372, label %373, label %376
373: ; preds = %368
%374 = load i32, i32* @stderr
%375 = call i32 (i32, i8*, ...) @fprintf(i32 %374, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.26, i64 0, i64 0))
br label %376
376: ; preds = %373, %368
br label %377
377: ; preds = %212, %376, %29
ret void
}

LLVM IR (-O2):
%struct.tm = type { i32 }
@.str = [3 x i8] c"rb\00"
@stderr = global i32 0
@.str.1 = [44 x i8] c" \0D%s: %d rows read (%d rows per second)\00"
@.str.2 = [9 x i8] c"#Fields:\00"
@.str.3 = [2 x i8] c" \00"
@.str.4 = [5 x i8] c"date\00"
@.str.5 = [5 x i8] c"time\00"
@.str.6 = [10 x i8] c"cs-method\00"
@.str.7 = [12 x i8] c"cs-uri-stem\00"
@.str.8 = [13 x i8] c"cs-uri-query\00"
@.str.9 = [12 x i8] c"cs-username\00"
@.str.10 = [5 x i8] c"c-ip\00"
@.str.11 = [11 x i8] c"cs-version\00"
@.str.12 = [15 x i8] c"cs(User-Agent)\00"
@.str.13 = [12 x i8] c"cs(Referer)\00"
@.str.14 = [10 x i8] c"sc-status\00"
@.str.15 = [9 x i8] c"sc-bytes\00"
@.str.16 = [8 x i8] c"cs-host\00"
@.str.17 = [29 x i8] c"Fields missing in '%s' (%d)\0A\00"
@.str.18 = [4 x i8] c"%s\0A\00"
@.str.19 = [6 x i8] c"%s %s\00"
@.str.20 = [12 x i8] c"%Y-%m-%d %T\00"
@.str.21 = [15 x i8] c"%d/%b/%Y:%T %z\00"
@.str.22 = [20 x i8] c"%s - %s [%s] \22%s %s\00"
@.str.23 = [2 x i8] c"-\00"
@.str.24 = [4 x i8] c"?%s\00"
@.str.25 = [22 x i8] c" %s\22 %s %s \22%s\22 \22%s\22\0A\00"
@.str.26 = [2 x i8] c"\0A\00"
define void @convert_log_file(i8* %0, i8* %1) {
%3 = alloca [1024 x i8]
%4 = alloca [100 x i8]
%5 = alloca [1024 x i8]
%6 = alloca %struct.tm
%7 = alloca i32
%8 = alloca [100 x i8*]
%9 = getelementptr inbounds [1024 x i8], [1024 x i8]* %3, i64 0, i64 0
%10 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 0
%11 = getelementptr inbounds [1024 x i8], [1024 x i8]* %5, i64 0, i64 0
%12 = bitcast %struct.tm* %6 to i8*
%13 = bitcast i32* %7 to i8*
%14 = bitcast [100 x i8*]* %8 to i8*
%15 = tail call i8* @strrchr(i8* dereferenceable(1) %0, i8 signext 47)
%16 = icmp eq i8* %15, null
%17 = getelementptr inbounds i8, i8* %15, i64 1
%18 = select i1 %16, i8* %0, i8* %17
%19 = call i32 @time(i32* %7)
%20 = call i32 @localtime_r(i32* %7, %struct.tm* %6)
%21 = call i32 (...) @tzset()
%22 = call i32 @gzopen(i8* %0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0))
%23 = icmp eq i32 %22, 0
br i1 %23, label %290, label %24
24: ; preds = %2
%25 = call i64 @gzgets(i32 %22, i8* %9, i32 1024)
%26 = icmp eq i64 %25, 0
br i1 %26, label %27, label %29
27: ; preds = %24
%28 = call i32 @gzclose(i32 %22)
br label %290
29: ; preds = %24
%30 = getelementptr inbounds [100 x i8*], [100 x i8*]* %8, i64 0, i64 0
%31 = icmp ne i8* %1, null
br label %32
32: ; preds = %29, %195
%33 = phi i32 [ -1, %29 ], [ %196, %195 ]
%34 = phi i32 [ -1, %29 ], [ %197, %195 ]
%35 = phi i32 [ -1, %29 ], [ %198, %195 ]
%36 = phi i32 [ -1, %29 ], [ %199, %195 ]
%37 = phi i32 [ -1, %29 ], [ %200, %195 ]
%38 = phi i32 [ -1, %29 ], [ %201, %195 ]
%39 = phi i32 [ -1, %29 ], [ %202, %195 ]
%40 = phi i32 [ -1, %29 ], [ %203, %195 ]
%41 = phi i32 [ -1, %29 ], [ %204, %195 ]
%42 = phi i32 [ -1, %29 ], [ %205, %195 ]
%43 = phi i32 [ -1, %29 ], [ %206, %195 ]
%44 = phi i32 [ -1, %29 ], [ %207, %195 ]
%45 = phi i32 [ -1, %29 ], [ %208, %195 ]
%46 = phi i8 [ 0, %29 ], [ %60, %195 ]
%47 = phi i32 [ 0, %29 ], [ %49, %195 ]
%48 = phi i32 [ 0, %29 ], [ %59, %195 ]
%49 = add nuw nsw i32 %47, 1
%50 = call i32 @time(i32* null)
%51 = load i32, i32* %7
%52 = icmp sgt i32 %50, %51
br i1 %52, label %53, label %58
53: ; preds = %32
%54 = call i32 @time(i32* %7)
%55 = load i32, i32* @stderr
%56 = sub nsw i32 %49, %48
%57 = call i32 (i32, i8*, ...) @fprintf(i32 %55, i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.1, i64 0, i64 0), i8* %18, i32 %49, i32 %56)
br label %58
58: ; preds = %53, %32
%59 = phi i32 [ %49, %53 ], [ %48, %32 ]
%60 = phi i8 [ 10, %53 ], [ %46, %32 ]
%61 = call i32 @trim(i8* %9)
%62 = load i8, i8* %9
%63 = icmp eq i8 %62, 0
br i1 %63, label %195, label %64
64: ; preds = %58
%65 = call i32 @strncmp(i8* %9, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32 8)
%66 = icmp eq i32 %65, 0
br i1 %66, label %67, label %188
67: ; preds = %64
%68 = call i8* @strtok(i8* %9, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
%69 = call i8* @strtok(i8* null, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
%70 = icmp eq i8* %69, null
br i1 %70, label %71, label %86
71: ; preds = %142, %67
%72 = phi i32 [ %33, %67 ], [ %143, %142 ]
%73 = phi i32 [ %34, %67 ], [ %144, %142 ]
%74 = phi i32 [ %35, %67 ], [ %145, %142 ]
%75 = phi i32 [ %36, %67 ], [ %146, %142 ]
%76 = phi i32 [ %37, %67 ], [ %147, %142 ]
%77 = phi i32 [ %38, %67 ], [ %148, %142 ]
%78 = phi i32 [ %39, %67 ], [ %149, %142 ]
%79 = phi i32 [ %40, %67 ], [ %150, %142 ]
%80 = phi i32 [ %41, %67 ], [ %151, %142 ]
%81 = phi i32 [ %42, %67 ], [ %152, %142 ]
%82 = phi i32 [ %43, %67 ], [ %153, %142 ]
%83 = phi i32 [ %44, %67 ], [ %154, %142 ]
%84 = phi i32 [ %45, %67 ], [ %155, %142 ]
%85 = icmp eq i32 %72, -1
br i1 %85, label %158, label %163
86: ; preds = %67, %142
%87 = phi i32 [ %143, %142 ], [ %33, %67 ]
%88 = phi i32 [ %144, %142 ], [ %34, %67 ]
%89 = phi i32 [ %145, %142 ], [ %35, %67 ]
%90 = phi i32 [ %146, %142 ], [ %36, %67 ]
%91 = phi i32 [ %147, %142 ], [ %37, %67 ]
%92 = phi i32 [ %148, %142 ], [ %38, %67 ]
%93 = phi i32 [ %149, %142 ], [ %39, %67 ]
%94 = phi i32 [ %150, %142 ], [ %40, %67 ]
%95 = phi i32 [ %151, %142 ], [ %41, %67 ]
%96 = phi i32 [ %152, %142 ], [ %42, %67 ]
%97 = phi i32 [ %153, %142 ], [ %43, %67 ]
%98 = phi i32 [ %154, %142 ], [ %44, %67 ]
%99 = phi i32 [ %155, %142 ], [ %45, %67 ]
%100 = phi i8* [ %156, %142 ], [ %69, %67 ]
%101 = phi i32 [ %102, %142 ], [ 0, %67 ]
%102 = add nuw nsw i32 %101, 1
%103 = call i64 @strcmp(i8* %100, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0))
%104 = icmp eq i64 %103, 0
br i1 %104, label %142, label %105
105: ; preds = %86
%106 = call i64 @strcmp(i8* %100, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0))
%107 = icmp eq i64 %106, 0
br i1 %107, label %142, label %108
108: ; preds = %105
%109 = call i64 @strcmp(i8* %100, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.6, i64 0, i64 0))
%110 = icmp eq i64 %109, 0
br i1 %110, label %142, label %111
111: ; preds = %108
%112 = call i64 @strcmp(i8* %100, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.7, i64 0, i64 0))
%113 = icmp eq i64 %112, 0
br i1 %113, label %142, label %114
114: ; preds = %111
%115 = call i64 @strcmp(i8* %100, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.8, i64 0, i64 0))
%116 = icmp eq i64 %115, 0
br i1 %116, label %142, label %117
117: ; preds = %114
%118 = call i64 @strcmp(i8* %100, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.9, i64 0, i64 0))
%119 = icmp eq i64 %118, 0
br i1 %119, label %142, label %120
120: ; preds = %117
%121 = call i64 @strcmp(i8* %100, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0))
%122 = icmp eq i64 %121, 0
br i1 %122, label %142, label %123
123: ; preds = %120
%124 = call i64 @strcmp(i8* %100, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.11, i64 0, i64 0))
%125 = icmp eq i64 %124, 0
br i1 %125, label %142, label %126
126: ; preds = %123
%127 = call i64 @strcmp(i8* %100, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.12, i64 0, i64 0))
%128 = icmp eq i64 %127, 0
br i1 %128, label %142, label %129
129: ; preds = %126
%130 = call i64 @strcmp(i8* %100, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i64 0, i64 0))
%131 = icmp eq i64 %130, 0
br i1 %131, label %142, label %132
132: ; preds = %129
%133 = call i64 @strcmp(i8* %100, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.14, i64 0, i64 0))
%134 = icmp eq i64 %133, 0
br i1 %134, label %142, label %135
135: ; preds = %132
%136 = call i64 @strcmp(i8* %100, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.15, i64 0, i64 0))
%137 = icmp eq i64 %136, 0
br i1 %137, label %142, label %138
138: ; preds = %135
%139 = call i64 @strcmp(i8* %100, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.16, i64 0, i64 0))
%140 = icmp eq i64 %139, 0
%141 = select i1 %140, i32 %101, i32 %99
br label %142
142: ; preds = %138, %135, %132, %129, %126, %123, %120, %117, %114, %111, %108, %105, %86
%143 = phi i32 [ %101, %86 ], [ %87, %105 ], [ %87, %108 ], [ %87, %111 ], [ %87, %114 ], [ %87, %117 ], [ %87, %120 ], [ %87, %123 ], [ %87, %126 ], [ %87, %129 ], [ %87, %132 ], [ %87, %135 ], [ %87, %138 ]
%144 = phi i32 [ %88, %86 ], [ %101, %105 ], [ %88, %108 ], [ %88, %111 ], [ %88, %114 ], [ %88, %117 ], [ %88, %120 ], [ %88, %123 ], [ %88, %126 ], [ %88, %129 ], [ %88, %132 ], [ %88, %135 ], [ %88, %138 ]
%145 = phi i32 [ %89, %86 ], [ %89, %105 ], [ %101, %108 ], [ %89, %111 ], [ %89, %114 ], [ %89, %117 ], [ %89, %120 ], [ %89, %123 ], [ %89, %126 ], [ %89, %129 ], [ %89, %132 ], [ %89, %135 ], [ %89, %138 ]
%146 = phi i32 [ %90, %86 ], [ %90, %105 ], [ %90, %108 ], [ %101, %111 ], [ %90, %114 ], [ %90, %117 ], [ %90, %120 ], [ %90, %123 ], [ %90, %126 ], [ %90, %129 ], [ %90, %132 ], [ %90, %135 ], [ %90, %138 ]
%147 = phi i32 [ %91, %86 ], [ %91, %105 ], [ %91, %108 ], [ %91, %111 ], [ %101, %114 ], [ %91, %117 ], [ %91, %120 ], [ %91, %123 ], [ %91, %126 ], [ %91, %129 ], [ %91, %132 ], [ %91, %135 ], [ %91, %138 ]
%148 = phi i32 [ %92, %86 ], [ %92, %105 ], [ %92, %108 ], [ %92, %111 ], [ %92, %114 ], [ %101, %117 ], [ %92, %120 ], [ %92, %123 ], [ %92, %126 ], [ %92, %129 ], [ %92, %132 ], [ %92, %135 ], [ %92, %138 ]
%149 = phi i32 [ %93, %86 ], [ %93, %105 ], [ %93, %108 ], [ %93, %111 ], [ %93, %114 ], [ %93, %117 ], [ %101, %120 ], [ %93, %123 ], [ %93, %126 ], [ %93, %129 ], [ %93, %132 ], [ %93, %135 ], [ %93, %138 ]
%150 = phi i32 [ %94, %86 ], [ %94, %105 ], [ %94, %108 ], [ %94, %111 ], [ %94, %114 ], [ %94, %117 ], [ %94, %120 ], [ %101, %123 ], [ %94, %126 ], [ %94, %129 ], [ %94, %132 ], [ %94, %135 ], [ %94, %138 ]
%151 = phi i32 [ %95, %86 ], [ %95, %105 ], [ %95, %108 ], [ %95, %111 ], [ %95, %114 ], [ %95, %117 ], [ %95, %120 ], [ %95, %123 ], [ %101, %126 ], [ %95, %129 ], [ %95, %132 ], [ %95, %135 ], [ %95, %138 ]
%152 = phi i32 [ %96, %86 ], [ %96, %105 ], [ %96, %108 ], [ %96, %111 ], [ %96, %114 ], [ %96, %117 ], [ %96, %120 ], [ %96, %123 ], [ %96, %126 ], [ %101, %129 ], [ %96, %132 ], [ %96, %135 ], [ %96, %138 ]
%153 = phi i32 [ %97, %86 ], [ %97, %105 ], [ %97, %108 ], [ %97, %111 ], [ %97, %114 ], [ %97, %117 ], [ %97, %120 ], [ %97, %123 ], [ %97, %126 ], [ %97, %129 ], [ %101, %132 ], [ %97, %135 ], [ %97, %138 ]
%154 = phi i32 [ %98, %86 ], [ %98, %105 ], [ %98, %108 ], [ %98, %111 ], [ %98, %114 ], [ %98, %117 ], [ %98, %120 ], [ %98, %123 ], [ %98, %126 ], [ %98, %129 ], [ %98, %132 ], [ %101, %135 ], [ %98, %138 ]
%155 = phi i32 [ %99, %86 ], [ %99, %105 ], [ %99, %108 ], [ %99, %111 ], [ %99, %114 ], [ %99, %117 ], [ %99, %120 ], [ %99, %123 ], [ %99, %126 ], [ %99, %129 ], [ %99, %132 ], [ %99, %135 ], [ %141, %138 ]
%156 = call i8* @strtok(i8* null, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
%157 = icmp eq i8* %156, null
br i1 %157, label %71, label %86
158: ; preds = %185, %183, %181, %179, %177, %175, %173, %171, %169, %167, %165, %163, %71
%159 = phi i32 [ 0, %71 ], [ 1, %163 ], [ 2, %165 ], [ 3, %167 ], [ 4, %169 ], [ 5, %171 ], [ 6, %173 ], [ 7, %175 ], [ 8, %177 ], [ 9, %179 ], [ 10, %181 ], [ 11, %183 ], [ 12, %185 ]
%160 = call i32 @gzclose(i32 %22)
%161 = load i32, i32* @stderr
%162 = call i32 (i32, i8*, ...) @fprintf(i32 %161, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.17, i64 0, i64 0), i8* %0, i32 %159)
br label %290
163: ; preds = %71
%164 = icmp eq i32 %73, -1
br i1 %164, label %158, label %165
165: ; preds = %163
%166 = icmp eq i32 %74, -1
br i1 %166, label %158, label %167
167: ; preds = %165
%168 = icmp eq i32 %75, -1
br i1 %168, label %158, label %169
169: ; preds = %167
%170 = icmp eq i32 %76, -1
br i1 %170, label %158, label %171
171: ; preds = %169
%172 = icmp eq i32 %77, -1
br i1 %172, label %158, label %173
173: ; preds = %171
%174 = icmp eq i32 %78, -1
br i1 %174, label %158, label %175
175: ; preds = %173
%176 = icmp eq i32 %79, -1
br i1 %176, label %158, label %177
177: ; preds = %175
%178 = icmp eq i32 %80, -1
br i1 %178, label %158, label %179
179: ; preds = %177
%180 = icmp eq i32 %81, -1
br i1 %180, label %158, label %181
181: ; preds = %179
%182 = icmp eq i32 %82, -1
br i1 %182, label %158, label %183
183: ; preds = %181
%184 = icmp eq i32 %83, -1
br i1 %184, label %158, label %185
185: ; preds = %183
%186 = icmp eq i32 %84, -1
%187 = and i1 %186, %31
br i1 %187, label %158, label %195
188: ; preds = %64
%189 = load i8, i8* %9
%190 = icmp eq i8 %189, 35
br i1 %190, label %195, label %191
191: ; preds = %188
%192 = icmp eq i32 %33, -1
br i1 %192, label %193, label %211
193: ; preds = %191
%194 = call i32 (i8*, i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.18, i64 0, i64 0), i8* %9)
br label %195
195: ; preds = %185, %265, %188, %193, %58, %221, %232
%196 = phi i32 [ %33, %58 ], [ %33, %188 ], [ -1, %193 ], [ %33, %221 ], [ %33, %265 ], [ %33, %232 ], [ %72, %185 ]
%197 = phi i32 [ %34, %58 ], [ %34, %188 ], [ %34, %193 ], [ %34, %221 ], [ %34, %265 ], [ %34, %232 ], [ %73, %185 ]
%198 = phi i32 [ %35, %58 ], [ %35, %188 ], [ %35, %193 ], [ %35, %221 ], [ %35, %265 ], [ %35, %232 ], [ %74, %185 ]
%199 = phi i32 [ %36, %58 ], [ %36, %188 ], [ %36, %193 ], [ %36, %221 ], [ %36, %265 ], [ %36, %232 ], [ %75, %185 ]
%200 = phi i32 [ %37, %58 ], [ %37, %188 ], [ %37, %193 ], [ %37, %221 ], [ %37, %265 ], [ %37, %232 ], [ %76, %185 ]
%201 = phi i32 [ %38, %58 ], [ %38, %188 ], [ %38, %193 ], [ %38, %221 ], [ %38, %265 ], [ %38, %232 ], [ %77, %185 ]
%202 = phi i32 [ %39, %58 ], [ %39, %188 ], [ %39, %193 ], [ %39, %221 ], [ %39, %265 ], [ %39, %232 ], [ %78, %185 ]
%203 = phi i32 [ %40, %58 ], [ %40, %188 ], [ %40, %193 ], [ %40, %221 ], [ %40, %265 ], [ %40, %232 ], [ %79, %185 ]
%204 = phi i32 [ %41, %58 ], [ %41, %188 ], [ %41, %193 ], [ %41, %221 ], [ %41, %265 ], [ %41, %232 ], [ %80, %185 ]
%205 = phi i32 [ %42, %58 ], [ %42, %188 ], [ %42, %193 ], [ %42, %221 ], [ %42, %265 ], [ %42, %232 ], [ %81, %185 ]
%206 = phi i32 [ %43, %58 ], [ %43, %188 ], [ %43, %193 ], [ %43, %221 ], [ %43, %265 ], [ %43, %232 ], [ %82, %185 ]
%207 = phi i32 [ %44, %58 ], [ %44, %188 ], [ %44, %193 ], [ %44, %221 ], [ %44, %265 ], [ %44, %232 ], [ %83, %185 ]
%208 = phi i32 [ %45, %58 ], [ %45, %188 ], [ %45, %193 ], [ %45, %221 ], [ %45, %265 ], [ %45, %232 ], [ %84, %185 ]
%209 = call i64 @gzgets(i32 %22, i8* %9, i32 1024)
%210 = icmp eq i64 %209, 0
br i1 %210, label %284, label %32
211: ; preds = %191
%212 = call i8* @strtok(i8* %9, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
store i8* %212, i8** %30
br label %213
213: ; preds = %213, %211
%214 = phi i64 [ %216, %213 ], [ 1, %211 ]
%215 = call i8* @strtok(i8* null, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
%216 = add nuw nsw i64 %214, 1
%217 = getelementptr inbounds [100 x i8*], [100 x i8*]* %8, i64 0, i64 %214
store i8* %215, i8** %217
%218 = icmp eq i8* %215, null
%219 = icmp ugt i64 %214, 98
%220 = select i1 %218, i1 true, i1 %219
br i1 %220, label %221, label %213
221: ; preds = %213
%222 = trunc i64 %214 to i32
%223 = icmp ult i32 %222, 11
br i1 %223, label %195, label %224
224: ; preds = %221
%225 = icmp ne i32 %222, 11
%226 = and i1 %31, %225
br i1 %226, label %227, label %235
227: ; preds = %224
%228 = sext i32 %45 to i64
%229 = getelementptr inbounds [100 x i8*], [100 x i8*]* %8, i64 0, i64 %228
%230 = load i8*, i8** %229
%231 = icmp eq i8* %230, null
br i1 %231, label %235, label %232
232: ; preds = %227
%233 = call i64 @strcmp(i8* %230, i8* %1)
%234 = icmp eq i64 %233, 0
br i1 %234, label %235, label %195
235: ; preds = %232, %227, %224
%236 = sext i32 %33 to i64
%237 = getelementptr inbounds [100 x i8*], [100 x i8*]* %8, i64 0, i64 %236
%238 = load i8*, i8** %237
%239 = sext i32 %34 to i64
%240 = getelementptr inbounds [100 x i8*], [100 x i8*]* %8, i64 0, i64 %239
%241 = load i8*, i8** %240
%242 = call i32 @sprintf(i8* %10, i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.19, i64 0, i64 0), i8* %238, i8* %241)
%243 = call i32 @strptime(i8* %10, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.20, i64 0, i64 0), %struct.tm* %6)
%244 = call i32 @strftime(i8* %10, i32 40, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.21, i64 0, i64 0), %struct.tm* %6)
%245 = sext i32 %39 to i64
%246 = getelementptr inbounds [100 x i8*], [100 x i8*]* %8, i64 0, i64 %245
%247 = load i8*, i8** %246
%248 = sext i32 %38 to i64
%249 = getelementptr inbounds [100 x i8*], [100 x i8*]* %8, i64 0, i64 %248
%250 = load i8*, i8** %249
%251 = sext i32 %35 to i64
%252 = getelementptr inbounds [100 x i8*], [100 x i8*]* %8, i64 0, i64 %251
%253 = load i8*, i8** %252
%254 = sext i32 %36 to i64
%255 = getelementptr inbounds [100 x i8*], [100 x i8*]* %8, i64 0, i64 %254
%256 = load i8*, i8** %255
%257 = call i32 (i8*, i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.22, i64 0, i64 0), i8* %247, i8* %250, i8* %10, i8* %253, i8* %256)
%258 = sext i32 %37 to i64
%259 = getelementptr inbounds [100 x i8*], [100 x i8*]* %8, i64 0, i64 %258
%260 = load i8*, i8** %259
%261 = call i64 @strcmp(i8* %260, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.23, i64 0, i64 0))
%262 = icmp eq i64 %261, 0
br i1 %262, label %265, label %263
263: ; preds = %235
%264 = call i32 (i8*, i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.24, i64 0, i64 0), i8* %260)
br label %265
265: ; preds = %263, %235
%266 = call i32 @memset(i8* %11, i32 0, i32 1024)
%267 = sext i32 %40 to i64
%268 = getelementptr inbounds [100 x i8*], [100 x i8*]* %8, i64 0, i64 %267
%269 = load i8*, i8** %268
%270 = sext i32 %43 to i64
%271 = getelementptr inbounds [100 x i8*], [100 x i8*]* %8, i64 0, i64 %270
%272 = load i8*, i8** %271
%273 = sext i32 %44 to i64
%274 = getelementptr inbounds [100 x i8*], [100 x i8*]* %8, i64 0, i64 %273
%275 = load i8*, i8** %274
%276 = sext i32 %42 to i64
%277 = getelementptr inbounds [100 x i8*], [100 x i8*]* %8, i64 0, i64 %276
%278 = load i8*, i8** %277
%279 = sext i32 %41 to i64
%280 = getelementptr inbounds [100 x i8*], [100 x i8*]* %8, i64 0, i64 %279
%281 = load i8*, i8** %280
%282 = call i8* @urldecode(i8* %281, i8* %11)
%283 = call i32 (i8*, i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.25, i64 0, i64 0), i8* %269, i8* %272, i8* %275, i8* %278, i8* %282)
br label %195
284: ; preds = %195
%285 = call i32 @gzclose(i32 %22)
%286 = icmp eq i8 %60, 0
br i1 %286, label %290, label %287
287: ; preds = %284
%288 = load i32, i32* @stderr
%289 = call i32 (i32, i8*, ...) @fprintf(i32 %288, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.26, i64 0, i64 0))
br label %290
290: ; preds = %27, %2, %287, %284, %158
ret void
}