#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 uInt;
typedef scalar_t__ length;
typedef unsigned char crc;

/* Variables and functions */
int EOF;
unsigned char *Z_NULL;
unsigned long crc32(unsigned long, unsigned char *, int);
int getchar();
int /*<<< orphan*/ putchar(unsigned char);
int main(void) {
  unsigned int i;
  unsigned char buf[500000];
  unsigned long crc;
  unsigned char c;
  int inchar;
  for (i = 8; i; i--) {
    c = ((unsigned char)(inchar = getchar()));
    if (inchar == EOF)
      break;
    putchar(c);
  }
  if (inchar != EOF)
    for (;;) {
      unsigned long length;
      c = ((unsigned char)(inchar = getchar()));
      if (inchar == EOF)
        break;
      buf[0] = c;
      length = c;
      length <<= 8;
      c = ((unsigned char)(inchar = getchar()));
      if (inchar == EOF)
        break;
      buf[1] = c;
      length += c;
      length <<= 8;
      c = ((unsigned char)(inchar = getchar()));
      if (inchar == EOF)
        break;
      buf[2] = c;
      length += c;
      length <<= 8;
      c = ((unsigned char)(inchar = getchar()));
      if (inchar == EOF)
        break;
      buf[3] = c;
      length += c;
      c = ((unsigned char)(inchar = getchar()));
      if (inchar == EOF)
        break;
      buf[4] = c;
      c = ((unsigned char)(inchar = getchar()));
      if (inchar == EOF)
        break;
      buf[5] = c;
      c = ((unsigned char)(inchar = getchar()));
      if (inchar == EOF)
        break;
      buf[6] = c;
      c = ((unsigned char)(inchar = getchar()));
      if (inchar == EOF)
        break;
      buf[7] = c;
      if (buf[4] == 105 && buf[5] == 84 && buf[6] == 88 && buf[7] == 116) {
        if (length >= 500000 - 12)
          break;
        crc = crc32(0, Z_NULL, 0);
        for (i = 8; i < length + 12; i++) {
          c = ((unsigned char)(inchar = getchar()));
          if (inchar == EOF)
            break;
          buf[i] = c;
        }
        crc = crc32(crc, buf + 4, (uInt)length + 4);
        for (;;) {
          if (((crc >> 24) & 0xff) == buf[length + 8] &&
              ((crc >> 16) & 0xff) == buf[length + 9] &&
              ((crc >> 8) & 0xff) == buf[length + 10] &&
              ((crc)&0xff) == buf[length + 11])
            break;
          length++;
          if (length >= 500000 - 12)
            break;
          c = ((unsigned char)(inchar = getchar()));
          if (inchar == EOF)
            break;
          buf[length + 11] = c;
          crc = crc32(crc, buf + 7 + length, 1);
        }
        buf[0] = (unsigned char)((length << 24) & 0xff);
        buf[1] = (unsigned char)((length << 16) & 0xff);
        buf[2] = (unsigned char)((length << 8) & 0xff);
        buf[3] = (unsigned char)((length)&0xff);
        for (i = 0; i < length + 12; i++)
          putchar(buf[i]);
      } else {
        for (i = 0; i < 8; i++)
          putchar(buf[i]);
        for (i = 8; i < length + 12; i++) {
          c = ((unsigned char)(inchar = getchar()));
          if (inchar == EOF)
            break;
          putchar(c);
        }
        if (inchar == EOF) {
          break;
        }
        if (buf[4] == 73 && buf[5] == 69 && buf[6] == 78 && buf[7] == 68)
          break;
      }
      if (inchar == EOF)
        break;
      if (buf[4] == 73 && buf[5] == 69 && buf[6] == 78 && buf[7] == 68)
        break;
    }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x7a150,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x8,-0x8(%rbp)
cmpl   $0x0,-0x8(%rbp)
je     119a <main+0x6a>
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
mov    0x2e75(%rip),%rcx
cmp    (%rcx),%eax
jne    1180 <main+0x50>
jmp    119a <main+0x6a>
movzbl -0x7a139(%rbp),%edi
call   1030 <putchar@plt>
mov    -0x8(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x8(%rbp)
jmp    1149 <main+0x19>
mov    -0x7a140(%rbp),%eax
mov    0x2e41(%rip),%rcx
cmp    (%rcx),%eax
je     183b <main+0x70b>
jmp    11b4 <main+0x84>
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
mov    0x2e14(%rip),%rcx
cmp    (%rcx),%eax
jne    11e1 <main+0xb1>
jmp    1836 <main+0x706>
mov    -0x7a139(%rbp),%al
mov    %al,-0x7a130(%rbp)
movzbl -0x7a139(%rbp),%eax
mov    %rax,-0x7a148(%rbp)
mov    -0x7a148(%rbp),%rax
shl    $0x8,%rax
mov    %rax,-0x7a148(%rbp)
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
mov    0x2dbb(%rip),%rcx
cmp    (%rcx),%eax
jne    123a <main+0x10a>
jmp    1836 <main+0x706>
mov    -0x7a139(%rbp),%al
mov    %al,-0x7a12f(%rbp)
movzbl -0x7a139(%rbp),%eax
add    -0x7a148(%rbp),%rax
mov    %rax,-0x7a148(%rbp)
mov    -0x7a148(%rbp),%rax
shl    $0x8,%rax
mov    %rax,-0x7a148(%rbp)
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
mov    0x2d5b(%rip),%rcx
cmp    (%rcx),%eax
jne    129a <main+0x16a>
jmp    1836 <main+0x706>
mov    -0x7a139(%rbp),%al
mov    %al,-0x7a12e(%rbp)
movzbl -0x7a139(%rbp),%eax
add    -0x7a148(%rbp),%rax
mov    %rax,-0x7a148(%rbp)
mov    -0x7a148(%rbp),%rax
shl    $0x8,%rax
mov    %rax,-0x7a148(%rbp)
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
mov    0x2cfb(%rip),%rcx
cmp    (%rcx),%eax
jne    12fa <main+0x1ca>
jmp    1836 <main+0x706>
mov    -0x7a139(%rbp),%al
mov    %al,-0x7a12d(%rbp)
movzbl -0x7a139(%rbp),%eax
add    -0x7a148(%rbp),%rax
mov    %rax,-0x7a148(%rbp)
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
mov    0x2cad(%rip),%rcx
cmp    (%rcx),%eax
jne    1348 <main+0x218>
jmp    1836 <main+0x706>
mov    -0x7a139(%rbp),%al
mov    %al,-0x7a12c(%rbp)
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
mov    0x2c74(%rip),%rcx
cmp    (%rcx),%eax
jne    1381 <main+0x251>
jmp    1836 <main+0x706>
mov    -0x7a139(%rbp),%al
mov    %al,-0x7a12b(%rbp)
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
mov    0x2c3b(%rip),%rcx
cmp    (%rcx),%eax
jne    13ba <main+0x28a>
jmp    1836 <main+0x706>
mov    -0x7a139(%rbp),%al
mov    %al,-0x7a12a(%rbp)
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
mov    0x2c02(%rip),%rcx
cmp    (%rcx),%eax
jne    13f3 <main+0x2c3>
jmp    1836 <main+0x706>
mov    -0x7a139(%rbp),%al
mov    %al,-0x7a129(%rbp)
movzbl -0x7a12c(%rbp),%eax
cmp    $0x69,%eax
jne    16da <main+0x5aa>
movzbl -0x7a12b(%rbp),%eax
cmp    $0x54,%eax
jne    16da <main+0x5aa>
movzbl -0x7a12a(%rbp),%eax
cmp    $0x58,%eax
jne    16da <main+0x5aa>
movzbl -0x7a129(%rbp),%eax
cmp    $0x74,%eax
jne    16da <main+0x5aa>
cmpq   $0x7a114,-0x7a148(%rbp)
jb     1455 <main+0x325>
jmp    1836 <main+0x706>
mov    0x2b7c(%rip),%rax
mov    (%rax),%rsi
xor    %eax,%eax
mov    %eax,%edi
xor    %edx,%edx
call   1040 <crc32@plt>
mov    %rax,-0x7a138(%rbp)
movl   $0x8,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    -0x7a148(%rbp),%rcx
add    $0xc,%rcx
cmp    %rcx,%rax
jae    14da <main+0x3aa>
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
mov    0x2b39(%rip),%rcx
cmp    (%rcx),%eax
jne    14bc <main+0x38c>
jmp    14da <main+0x3aa>
mov    -0x7a139(%rbp),%cl
mov    -0x8(%rbp),%eax
mov    %cl,-0x7a130(%rbp,%rax,1)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1478 <main+0x348>
mov    -0x7a138(%rbp),%rdi
lea    -0x7a130(%rbp),%rsi
add    $0x4,%rsi
mov    -0x7a148(%rbp),%rax
mov    %eax,%edx
add    $0x4,%edx
call   1040 <crc32@plt>
mov    %rax,-0x7a138(%rbp)
mov    -0x7a138(%rbp),%rax
shr    $0x18,%rax
and    $0xff,%rax
mov    -0x7a148(%rbp),%rcx
movzbl -0x7a128(%rbp,%rcx,1),%ecx
ff
cmp    %rcx,%rax
jne    15a9 <main+0x479>
mov    -0x7a138(%rbp),%rax
shr    $0x10,%rax
and    $0xff,%rax
mov    -0x7a148(%rbp),%rcx
movzbl -0x7a127(%rbp,%rcx,1),%ecx
ff
cmp    %rcx,%rax
jne    15a9 <main+0x479>
mov    -0x7a138(%rbp),%rax
shr    $0x8,%rax
and    $0xff,%rax
mov    -0x7a148(%rbp),%rcx
movzbl -0x7a126(%rbp,%rcx,1),%ecx
ff
cmp    %rcx,%rax
jne    15a9 <main+0x479>
mov    -0x7a138(%rbp),%rax
and    $0xff,%rax
mov    -0x7a148(%rbp),%rcx
movzbl -0x7a125(%rbp,%rcx,1),%ecx
ff
cmp    %rcx,%rax
jne    15a9 <main+0x479>
jmp    1641 <main+0x511>
mov    -0x7a148(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x7a148(%rbp)
cmpq   $0x7a114,-0x7a148(%rbp)
jb     15d1 <main+0x4a1>
jmp    1641 <main+0x511>
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
mov    0x29f7(%rip),%rcx
cmp    (%rcx),%eax
jne    15fe <main+0x4ce>
jmp    1641 <main+0x511>
mov    -0x7a139(%rbp),%cl
mov    -0x7a148(%rbp),%rax
mov    %cl,-0x7a125(%rbp,%rax,1)
mov    -0x7a138(%rbp),%rdi
lea    -0x7a130(%rbp),%rsi
add    $0x7,%rsi
add    -0x7a148(%rbp),%rsi
mov    $0x1,%edx
call   1040 <crc32@plt>
mov    %rax,-0x7a138(%rbp)
jmp    1504 <main+0x3d4>
mov    -0x7a148(%rbp),%rax
shl    $0x18,%rax
and    $0xff,%rax
mov    %al,-0x7a130(%rbp)
mov    -0x7a148(%rbp),%rax
shl    $0x10,%rax
and    $0xff,%rax
mov    %al,-0x7a12f(%rbp)
mov    -0x7a148(%rbp),%rax
shl    $0x8,%rax
and    $0xff,%rax
mov    %al,-0x7a12e(%rbp)
mov    -0x7a148(%rbp),%rax
and    $0xff,%rax
mov    %al,-0x7a12d(%rbp)
movl   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    -0x7a148(%rbp),%rcx
add    $0xc,%rcx
cmp    %rcx,%rax
jae    16d5 <main+0x5a5>
mov    -0x8(%rbp),%eax
movzbl -0x7a130(%rbp,%rax,1),%edi
ff
call   1030 <putchar@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    16a0 <main+0x570>
jmp    17d2 <main+0x6a2>
movl   $0x0,-0x8(%rbp)
cmpl   $0x8,-0x8(%rbp)
jae    1709 <main+0x5d9>
mov    -0x8(%rbp),%eax
movzbl -0x7a130(%rbp,%rax,1),%edi
ff
call   1030 <putchar@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    16e1 <main+0x5b1>
movl   $0x8,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    -0x7a148(%rbp),%rcx
add    $0xc,%rcx
cmp    %rcx,%rax
jae    176e <main+0x63e>
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
mov    0x28a1(%rip),%rcx
cmp    (%rcx),%eax
jne    1754 <main+0x624>
jmp    176e <main+0x63e>
movzbl -0x7a139(%rbp),%edi
call   1030 <putchar@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1710 <main+0x5e0>
mov    -0x7a140(%rbp),%eax
mov    0x286d(%rip),%rcx
cmp    (%rcx),%eax
jne    1788 <main+0x658>
jmp    1836 <main+0x706>
movzbl -0x7a12c(%rbp),%eax
cmp    $0x49,%eax
jne    17cd <main+0x69d>
movzbl -0x7a12b(%rbp),%eax
cmp    $0x45,%eax
jne    17cd <main+0x69d>
movzbl -0x7a12a(%rbp),%eax
cmp    $0x4e,%eax
jne    17cd <main+0x69d>
movzbl -0x7a129(%rbp),%eax
cmp    $0x44,%eax
jne    17cd <main+0x69d>
jmp    1836 <main+0x706>
jmp    17d2 <main+0x6a2>
mov    -0x7a140(%rbp),%eax
mov    0x2809(%rip),%rcx
cmp    (%rcx),%eax
jne    17ec <main+0x6bc>
jmp    1836 <main+0x706>
movzbl -0x7a12c(%rbp),%eax
cmp    $0x49,%eax
jne    1831 <main+0x701>
movzbl -0x7a12b(%rbp),%eax
cmp    $0x45,%eax
jne    1831 <main+0x701>
movzbl -0x7a12a(%rbp),%eax
cmp    $0x4e,%eax
jne    1831 <main+0x701>
movzbl -0x7a129(%rbp),%eax
cmp    $0x44,%eax
jne    1831 <main+0x701>
jmp    1836 <main+0x706>
jmp    11b4 <main+0x84>
jmp    183b <main+0x70b>
xor    %eax,%eax
add    $0x7a150,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x7a128,%rsp
xor    %eax,%eax
call   1050 <getchar@plt>
mov    0x2e99(%rip),%rbx
cmp    (%rbx),%eax
je     11ef <main+0xbf>
movzbl %al,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    (%rbx),%eax
je     11ef <main+0xbf>
movzbl %al,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    (%rbx),%eax
je     11ef <main+0xbf>
movzbl %al,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    (%rbx),%eax
je     11ef <main+0xbf>
movzbl %al,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    (%rbx),%eax
je     11ef <main+0xbf>
movzbl %al,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    (%rbx),%eax
je     11ef <main+0xbf>
movzbl %al,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    (%rbx),%eax
je     11ef <main+0xbf>
movzbl %al,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    (%rbx),%eax
je     11ef <main+0xbf>
mov    %eax,%ebp
movzbl %bpl,%edi
call   1030 <putchar@plt>
cmp    (%rbx),%ebp
jne    1203 <main+0xd3>
xor    %eax,%eax
add    $0x7a128,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    0x2dce(%rip),%r14
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    (%rbx),%eax
je     11ef <main+0xbf>
mov    %eax,%r13d
mov    %r13b,(%rsp)
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    (%rbx),%eax
je     11ef <main+0xbf>
mov    %eax,%r15d
mov    %r15b,0x1(%rsp)
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    (%rbx),%eax
je     11ef <main+0xbf>
mov    %eax,%ebp
mov    %bpl,0x2(%rsp)
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    (%rbx),%eax
je     11ef <main+0xbf>
mov    %eax,%r12d
mov    %r12b,0x3(%rsp)
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    (%rbx),%eax
je     11ef <main+0xbf>
mov    %al,0x4(%rsp)
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    (%rbx),%eax
je     11ef <main+0xbf>
mov    %al,0x5(%rsp)
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    (%rbx),%eax
je     11ef <main+0xbf>
mov    %al,0x6(%rsp)
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    (%rbx),%eax
je     11ef <main+0xbf>
shl    $0x18,%r13d
movzbl %r15b,%ecx
shl    $0x10,%ecx
or     %r13d,%ecx
shl    $0x8,%ebp
movzwl %bp,%edx
or     %ecx,%edx
movzbl %r12b,%r12d
or     %edx,%r12d
mov    %al,0x7(%rsp)
cmp    $0x74,%al
jne    13b4 <main+0x284>
cmpb   $0x69,0x4(%rsp)
jne    13b4 <main+0x284>
cmpb   $0x54,0x5(%rsp)
jne    13b4 <main+0x284>
cmpb   $0x58,0x6(%rsp)
jne    13b4 <main+0x284>
cmp    $0x7a113,%r12d
ja     11ef <main+0xbf>
mov    (%r14),%rsi
xor    %edi,%edi
xor    %edx,%edx
call   1040 <crc32@plt>
mov    %rax,%r15
lea    0xc(%r12),%rbp
mov    $0x8,%r14d
xor    %eax,%eax
call   1050 <getchar@plt>
mov    %eax,%r13d
cmp    (%rbx),%eax
je     1320 <main+0x1f0>
mov    %r13b,(%rsp,%r14,1)
add    $0x1,%r14d
cmp    %r14,%rbp
ja     1305 <main+0x1d5>
lea    0x4(%r12),%edx
mov    %r15,%rdi
lea    0x4(%rsp),%rsi
call   1040 <crc32@plt>
mov    %rax,%r15
lea    0x8(%rsp),%rbp
mov    0x2c97(%rip),%r14
mov    %r15,%rax
shr    $0x18,%rax
cmp    %al,0x8(%rsp,%r12,1)
jne    1376 <main+0x246>
mov    %r15,%rax
shr    $0x10,%rax
cmp    %al,0x9(%rsp,%r12,1)
jne    1376 <main+0x246>
mov    %r15,%rax
shr    $0x8,%rax
cmp    %al,0xa(%rsp,%r12,1)
jne    1376 <main+0x246>
cmp    %r15b,0xb(%rsp,%r12,1)
je     1463 <main+0x333>
cmp    $0x7a113,%r12
jae    1450 <main+0x320>
xor    %eax,%eax
call   1050 <getchar@plt>
mov    %eax,%r13d
cmp    (%rbx),%eax
je     145f <main+0x32f>
mov    %r13b,0xc(%rsp,%r12,1)
lea    (%r12,%rbp,1),%rsi
mov    %r15,%rdi
mov    $0x1,%edx
call   1040 <crc32@plt>
mov    %rax,%r15
add    $0x1,%r12
jmp    1341 <main+0x211>
movzbl (%rsp),%edi
call   1030 <putchar@plt>
movzbl 0x1(%rsp),%edi
call   1030 <putchar@plt>
movzbl 0x2(%rsp),%edi
call   1030 <putchar@plt>
movzbl 0x3(%rsp),%edi
call   1030 <putchar@plt>
movzbl 0x4(%rsp),%edi
call   1030 <putchar@plt>
movzbl 0x5(%rsp),%edi
call   1030 <putchar@plt>
movzbl 0x6(%rsp),%edi
call   1030 <putchar@plt>
movzbl 0x7(%rsp),%edi
call   1030 <putchar@plt>
add    $0xc,%r12
mov    $0x9,%ebp
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    (%rbx),%eax
je     11ef <main+0xbf>
mov    %eax,%r13d
movzbl %r13b,%edi
call   1030 <putchar@plt>
mov    %ebp,%eax
add    $0x1,%ebp
cmp    %rax,%r12
ja     140c <main+0x2dc>
cmp    (%rbx),%r13d
je     11ef <main+0xbf>
movd   0x4(%rsp),%xmm0
movd   %xmm0,%eax
cmp    $0x444e4549,%eax
jne    14a3 <main+0x373>
jmp    11ef <main+0xbf>
movl   $0x14000000,(%rsp)
mov    $0x7a120,%r12d
jmp    1479 <main+0x349>
add    $0x1,%r12
movw   $0x0,(%rsp)
movb   $0x0,0x2(%rsp)
mov    %r12b,0x3(%rsp)
add    $0xc,%r12
je     14a3 <main+0x373>
xor    %edi,%edi
call   1030 <putchar@plt>
cmp    $0x2,%r12
jb     14a3 <main+0x373>
mov    $0x1,%eax
mov    $0x2,%ebp
movzbl (%rsp,%rax,1),%edi
call   1030 <putchar@plt>
mov    %ebp,%eax
add    $0x1,%ebp
cmp    %rax,%r12
ja     1490 <main+0x360>
cmp    (%rbx),%r13d
je     11ef <main+0xbf>
movd   0x4(%rsp),%xmm0
movd   %xmm0,%eax
cmp    $0x444e4549,%eax
jne    120a <main+0xda>
jmp    11ef <main+0xbf>

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

LLVM IR (-O2):
@EOF = global i32 0
@Z_NULL = global i8* null
define i32 @main() {
%1 = alloca [500000 x i8]
%2 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 0
%3 = tail call i32 (...) @getchar()
%4 = load i32, i32* @EOF
%5 = icmp eq i32 %3, %4
br i1 %5, label %255, label %6
6: ; preds = %0
%7 = trunc i32 %3 to i8
%8 = tail call i32 @putchar(i8 zeroext %7)
%9 = tail call i32 (...) @getchar()
%10 = load i32, i32* @EOF
%11 = icmp eq i32 %9, %10
br i1 %11, label %255, label %12
12: ; preds = %6
%13 = trunc i32 %9 to i8
%14 = tail call i32 @putchar(i8 zeroext %13)
%15 = tail call i32 (...) @getchar()
%16 = load i32, i32* @EOF
%17 = icmp eq i32 %15, %16
br i1 %17, label %255, label %18
18: ; preds = %12
%19 = trunc i32 %15 to i8
%20 = tail call i32 @putchar(i8 zeroext %19)
%21 = tail call i32 (...) @getchar()
%22 = load i32, i32* @EOF
%23 = icmp eq i32 %21, %22
br i1 %23, label %255, label %24
24: ; preds = %18
%25 = trunc i32 %21 to i8
%26 = tail call i32 @putchar(i8 zeroext %25)
%27 = tail call i32 (...) @getchar()
%28 = load i32, i32* @EOF
%29 = icmp eq i32 %27, %28
br i1 %29, label %255, label %30
30: ; preds = %24
%31 = trunc i32 %27 to i8
%32 = tail call i32 @putchar(i8 zeroext %31)
%33 = tail call i32 (...) @getchar()
%34 = load i32, i32* @EOF
%35 = icmp eq i32 %33, %34
br i1 %35, label %255, label %36
36: ; preds = %30
%37 = trunc i32 %33 to i8
%38 = tail call i32 @putchar(i8 zeroext %37)
%39 = tail call i32 (...) @getchar()
%40 = load i32, i32* @EOF
%41 = icmp eq i32 %39, %40
br i1 %41, label %255, label %42
42: ; preds = %36
%43 = trunc i32 %39 to i8
%44 = tail call i32 @putchar(i8 zeroext %43)
%45 = tail call i32 (...) @getchar()
%46 = load i32, i32* @EOF
%47 = icmp eq i32 %45, %46
br i1 %47, label %255, label %48
48: ; preds = %42
%49 = trunc i32 %45 to i8
%50 = tail call i32 @putchar(i8 zeroext %49)
%51 = load i32, i32* @EOF
%52 = icmp eq i32 %45, %51
br i1 %52, label %255, label %53
53: ; preds = %48
%54 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 1
%55 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 2
%56 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 3
%57 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 4
%58 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 5
%59 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 6
%60 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 7
%61 = bitcast i8* %57 to <4 x i8>*
%62 = bitcast i8* %57 to <4 x i8>*
br label %63
63: ; preds = %246, %53
%64 = call i32 (...) @getchar()
%65 = load i32, i32* @EOF
%66 = icmp eq i32 %64, %65
br i1 %66, label %255, label %67
67: ; preds = %63
%68 = trunc i32 %64 to i8
store i8 %68, i8* %2
%69 = call i32 (...) @getchar()
%70 = load i32, i32* @EOF
%71 = icmp eq i32 %69, %70
br i1 %71, label %255, label %72
72: ; preds = %67
%73 = trunc i32 %69 to i8
store i8 %73, i8* %54
%74 = call i32 (...) @getchar()
%75 = load i32, i32* @EOF
%76 = icmp eq i32 %74, %75
br i1 %76, label %255, label %77
77: ; preds = %72
%78 = trunc i32 %74 to i8
store i8 %78, i8* %55
%79 = call i32 (...) @getchar()
%80 = load i32, i32* @EOF
%81 = icmp eq i32 %79, %80
br i1 %81, label %255, label %82
82: ; preds = %77
%83 = trunc i32 %79 to i8
%84 = shl i32 %64, 24
%85 = shl i32 %69, 16
%86 = and i32 %85, 16711680
%87 = or i32 %86, %84
%88 = shl i32 %74, 8
%89 = and i32 %88, 65280
%90 = or i32 %89, %87
store i8 %83, i8* %56
%91 = and i32 %79, 255
%92 = or i32 %91, %90
%93 = zext i32 %92 to i64
%94 = call i32 (...) @getchar()
%95 = load i32, i32* @EOF
%96 = icmp eq i32 %94, %95
br i1 %96, label %255, label %97
97: ; preds = %82
%98 = trunc i32 %94 to i8
store i8 %98, i8* %57
%99 = call i32 (...) @getchar()
%100 = load i32, i32* @EOF
%101 = icmp eq i32 %99, %100
br i1 %101, label %255, label %102
102: ; preds = %97
%103 = trunc i32 %99 to i8
store i8 %103, i8* %58
%104 = call i32 (...) @getchar()
%105 = load i32, i32* @EOF
%106 = icmp eq i32 %104, %105
br i1 %106, label %255, label %107
107: ; preds = %102
%108 = trunc i32 %104 to i8
store i8 %108, i8* %59
%109 = call i32 (...) @getchar()
%110 = load i32, i32* @EOF
%111 = icmp eq i32 %109, %110
br i1 %111, label %255, label %112
112: ; preds = %107
%113 = trunc i32 %109 to i8
store i8 %113, i8* %60
%114 = load i8, i8* %57
%115 = icmp eq i8 %114, 105
%116 = load i8, i8* %58
%117 = icmp eq i8 %116, 84
%118 = select i1 %115, i1 %117, i1 false
%119 = load i8, i8* %59
%120 = icmp eq i8 %119, 88
%121 = select i1 %118, i1 %120, i1 false
%122 = and i32 %109, 255
%123 = icmp eq i32 %122, 116
%124 = and i1 %123, %121
br i1 %124, label %143, label %125
125: ; preds = %112
%126 = load i8, i8* %2
%127 = call i32 @putchar(i8 zeroext %126)
%128 = load i8, i8* %54
%129 = call i32 @putchar(i8 zeroext %128)
%130 = load i8, i8* %55
%131 = call i32 @putchar(i8 zeroext %130)
%132 = load i8, i8* %56
%133 = call i32 @putchar(i8 zeroext %132)
%134 = load i8, i8* %57
%135 = call i32 @putchar(i8 zeroext %134)
%136 = load i8, i8* %58
%137 = call i32 @putchar(i8 zeroext %136)
%138 = load i8, i8* %59
%139 = call i32 @putchar(i8 zeroext %138)
%140 = load i8, i8* %60
%141 = call i32 @putchar(i8 zeroext %140)
%142 = add nuw nsw i64 %93, 12
br label %227
143: ; preds = %112
%144 = icmp ugt i32 %92, 499987
br i1 %144, label %255, label %145
145: ; preds = %143
%146 = load i8*, i8** @Z_NULL
%147 = call i64 @crc32(i64 0, i8* %146, i32 0)
%148 = add nuw nsw i64 %93, 12
br label %149
149: ; preds = %145, %154
%150 = phi i64 [ 8, %145 ], [ %158, %154 ]
%151 = call i32 (...) @getchar()
%152 = load i32, i32* @EOF
%153 = icmp eq i32 %151, %152
br i1 %153, label %160, label %154
154: ; preds = %149
%155 = trunc i32 %151 to i8
%156 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 %150
store i8 %155, i8* %156
%157 = add nuw nsw i64 %150, 1
%158 = and i64 %157, 4294967295
%159 = icmp ugt i64 %148, %158
br i1 %159, label %149, label %160
160: ; preds = %149, %154
%161 = add nsw i32 %92, 4
%162 = call i64 @crc32(i64 %147, i8* %57, i32 %161)
br label %163
163: ; preds = %201, %160
%164 = phi i64 [ %162, %160 ], [ %206, %201 ]
%165 = phi i32 [ %151, %160 ], [ %198, %201 ]
%166 = phi i64 [ %93, %160 ], [ %194, %201 ]
%167 = lshr i64 %164, 24
%168 = add nuw nsw i64 %166, 8
%169 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 %168
%170 = load i8, i8* %169
%171 = trunc i64 %167 to i8
%172 = icmp eq i8 %170, %171
br i1 %172, label %173, label %193
173: ; preds = %163
%174 = lshr i64 %164, 16
%175 = add nuw nsw i64 %166, 9
%176 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 %175
%177 = load i8, i8* %176
%178 = trunc i64 %174 to i8
%179 = icmp eq i8 %177, %178
br i1 %179, label %180, label %193
180: ; preds = %173
%181 = lshr i64 %164, 8
%182 = add nuw nsw i64 %166, 10
%183 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 %182
%184 = load i8, i8* %183
%185 = trunc i64 %181 to i8
%186 = icmp eq i8 %184, %185
br i1 %186, label %187, label %193
187: ; preds = %180
%188 = add nuw nsw i64 %166, 11
%189 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 %188
%190 = load i8, i8* %189
%191 = trunc i64 %164 to i8
%192 = icmp eq i8 %190, %191
br i1 %192, label %207, label %193
193: ; preds = %187, %180, %173, %163
%194 = add nuw nsw i64 %166, 1
%195 = icmp ugt i64 %166, 499986
br i1 %195, label %196, label %197
196: ; preds = %193
store i8 0, i8* %2
store i8 0, i8* %54
store i8 0, i8* %55
store i8 20, i8* %56
br label %213
197: ; preds = %193
%198 = call i32 (...) @getchar()
%199 = load i32, i32* @EOF
%200 = icmp eq i32 %198, %199
br i1 %200, label %207, label %201
201: ; preds = %197
%202 = trunc i32 %198 to i8
%203 = add nuw nsw i64 %166, 12
%204 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 %203
store i8 %202, i8* %204
%205 = getelementptr inbounds i8, i8* %60, i64 %194
%206 = call i64 @crc32(i64 %164, i8* %205, i32 1)
br label %163
207: ; preds = %197, %187
%208 = phi i32 [ %165, %187 ], [ %198, %197 ]
%209 = phi i64 [ %166, %187 ], [ %194, %197 ]
store i8 0, i8* %2
store i8 0, i8* %54
store i8 0, i8* %55
%210 = trunc i64 %209 to i8
store i8 %210, i8* %56
%211 = add i64 %209, 12
%212 = icmp eq i64 %211, 0
br i1 %212, label %246, label %213
213: ; preds = %196, %207
%214 = phi i64 [ 500000, %196 ], [ %211, %207 ]
%215 = phi i32 [ %165, %196 ], [ %208, %207 ]
%216 = call i32 @putchar(i8 zeroext 0)
%217 = icmp ugt i64 %214, 1
br i1 %217, label %218, label %246
218: ; preds = %213, %218
%219 = phi i64 [ %225, %218 ], [ 1, %213 ]
%220 = phi i32 [ %224, %218 ], [ 1, %213 ]
%221 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 %219
%222 = load i8, i8* %221
%223 = call i32 @putchar(i8 zeroext %222)
%224 = add i32 %220, 1
%225 = zext i32 %224 to i64
%226 = icmp ugt i64 %214, %225
br i1 %226, label %218, label %246
227: ; preds = %125, %232
%228 = phi i32 [ 8, %125 ], [ %235, %232 ]
%229 = call i32 (...) @getchar()
%230 = load i32, i32* @EOF
%231 = icmp eq i32 %229, %230
br i1 %231, label %255, label %232
232: ; preds = %227
%233 = trunc i32 %229 to i8
%234 = call i32 @putchar(i8 zeroext %233)
%235 = add i32 %228, 1
%236 = zext i32 %235 to i64
%237 = icmp ugt i64 %142, %236
br i1 %237, label %227, label %238
238: ; preds = %232
%239 = load i32, i32* @EOF
%240 = icmp eq i32 %229, %239
%241 = load <4 x i8>, <4 x i8>* %61
%242 = freeze <4 x i8> %241
%243 = bitcast <4 x i8> %242 to i32
%244 = icmp eq i32 %243, 1145980233
%245 = or i1 %240, %244
br i1 %245, label %255, label %246
246: ; preds = %218, %238, %213, %207
%247 = phi i32 [ %208, %207 ], [ %215, %213 ], [ %229, %238 ], [ %215, %218 ]
%248 = load i32, i32* @EOF
%249 = icmp eq i32 %247, %248
%250 = load <4 x i8>, <4 x i8>* %62
%251 = freeze <4 x i8> %250
%252 = bitcast <4 x i8> %251 to i32
%253 = icmp eq i32 %252, 1145980233
%254 = or i1 %249, %253
br i1 %254, label %255, label %63
255: ; preds = %246, %238, %143, %107, %102, %97, %82, %77, %72, %67, %63, %227, %42, %36, %30, %24, %18, %12, %6, %0, %48
ret i32 0
}