#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 char wchar_t;

/* Variables and functions */
int COLS;
int LINES;
int /*<<< orphan*/ mvaddstr(int, int, char *);
int /*<<< orphan*/ mvaddwstr(int, int, char const *);
int /*<<< orphan*/ mvprintw(int, int, char *, int);
int /*<<< orphan*/ refresh();
int draw_terminal_ncurses(int virt, int h, int w, int bars, int bw, int bs,
                          int rest, int f[200], int flastd[200]) {
  int i, n, q;
  const wchar_t *bh[] = {L"\u2581", L"\u2582", L"\u2583", L"\u2584",
                         L"\u2585", L"\u2586", L"\u2587", L"\u2588"};
  if (virt != 0) {
    if (LINES != h || COLS != w) {
      return -1;
    }
  }
  h = h - 1;
  for (i = 0; i < bars; i++) {
    if (f[i] > flastd[i]) {
      if (virt == 0)
        for (n = flastd[i] / 8; n < f[i] / 8; n++)
          for (q = 0; q < bw; q++)
            mvprintw((h - n), i * bw + q + i * bs + rest, "%d", 8);
      else
        for (n = flastd[i] / 8; n < f[i] / 8; n++)
          for (q = 0; q < bw; q++)
            mvaddwstr((h - n), i * bw + q + i * bs + rest, bh[7]);
      if (f[i] % 8 != 0) {
        if (virt == 0)
          for (q = 0; q < bw; q++)
            mvprintw((h - n), i * bw + q + i * bs + rest, "%d", (f[i] % 8));
        else
          for (q = 0; q < bw; q++)
            mvaddwstr((h - n), i * bw + q + i * bs + rest, bh[(f[i] % 8) - 1]);
      }
    } else if (f[i] < flastd[i]) {
      for (n = f[i] / 8; n < flastd[i] / 8 + 1; n++)
        for (q = 0; q < bw; q++)
          mvaddstr((h - n), i * bw + q + i * bs + rest, " ");
      if (f[i] % 8 != 0) {
        if (virt == 0)
          for (q = 0; q < bw; q++)
            mvprintw((h - f[i] / 8), i * bw + q + i * bs + rest, "%d",
                     (f[i] % 8));
        else
          for (q = 0; q < bw; q++)
            mvaddwstr((h - f[i] / 8), i * bw + q + i * bs + rest,
                      bh[(f[i] % 8) - 1]);
      }
    }
    flastd[i] = f[i];
  }
  refresh();
  return 0;
}


x86 assembly (clang, -O0):
<draw_terminal_ncurses>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%eax
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8d,-0x18(%rbp)
mov    %r9d,-0x1c(%rbp)
lea    -0x70(%rbp),%rdi
lea    0x2c4b(%rip),%rsi
mov    $0x40,%edx
call   1030 <memcpy@plt>
cmpl   $0x0,-0x8(%rbp)
je     11ce <draw_terminal_ncurses+0x7e>
mov    0x2e48(%rip),%rax
mov    (%rax),%eax
cmp    -0xc(%rbp),%eax
jne    11bd <draw_terminal_ncurses+0x6d>
mov    0x2e2e(%rip),%rax
mov    (%rax),%eax
cmp    -0x10(%rbp),%eax
je     11c9 <draw_terminal_ncurses+0x79>
movl   $0xffffffff,-0x4(%rbp)
jmp    164e <draw_terminal_ncurses+0x4fe>
jmp    11ce <draw_terminal_ncurses+0x7e>
mov    -0xc(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0xc(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1640 <draw_terminal_ncurses+0x4f0>
mov    0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    0x20(%rbp),%rcx
movslq -0x20(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
jle    1444 <draw_terminal_ncurses+0x2f4>
cmpl   $0x0,-0x8(%rbp)
jne    12b2 <draw_terminal_ncurses+0x162>
mov    0x20(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x74(%rbp)
mov    0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x74(%rbp),%eax
cmp    %ecx,%eax
jge    12ad <draw_terminal_ncurses+0x15d>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    129a <draw_terminal_ncurses+0x14a>
mov    -0xc(%rbp),%edi
sub    -0x24(%rbp),%edi
mov    -0x20(%rbp),%esi
imul   -0x18(%rbp),%esi
add    -0x28(%rbp),%esi
mov    -0x20(%rbp),%eax
imul   -0x1c(%rbp),%eax
add    %eax,%esi
add    0x10(%rbp),%esi
lea    0xdbe(%rip),%rdx
mov    $0x8,%ecx
call   1070 <mvprintw@plt>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1253 <draw_terminal_ncurses+0x103>
jmp    129f <draw_terminal_ncurses+0x14f>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1226 <draw_terminal_ncurses+0xd6>
jmp    134c <draw_terminal_ncurses+0x1fc>
mov    0x20(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x78(%rbp)
mov    0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x78(%rbp),%eax
cmp    %ecx,%eax
jge    1347 <draw_terminal_ncurses+0x1f7>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1334 <draw_terminal_ncurses+0x1e4>
mov    -0xc(%rbp),%edi
sub    -0x24(%rbp),%edi
mov    -0x20(%rbp),%esi
imul   -0x18(%rbp),%esi
add    -0x28(%rbp),%esi
mov    -0x20(%rbp),%eax
imul   -0x1c(%rbp),%eax
add    %eax,%esi
add    0x10(%rbp),%esi
mov    -0x38(%rbp),%rdx
call   1040 <mvaddwstr@plt>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    12f5 <draw_terminal_ncurses+0x1a5>
jmp    1339 <draw_terminal_ncurses+0x1e9>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    12c8 <draw_terminal_ncurses+0x178>
jmp    134c <draw_terminal_ncurses+0x1fc>
mov    0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     143f <draw_terminal_ncurses+0x2ef>
cmpl   $0x0,-0x8(%rbp)
jne    13d5 <draw_terminal_ncurses+0x285>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    13d0 <draw_terminal_ncurses+0x280>
mov    -0xc(%rbp),%edi
sub    -0x24(%rbp),%edi
mov    -0x20(%rbp),%esi
imul   -0x18(%rbp),%esi
add    -0x28(%rbp),%esi
mov    -0x20(%rbp),%eax
imul   -0x1c(%rbp),%eax
add    %eax,%esi
add    0x10(%rbp),%esi
mov    0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,%ecx
lea    0xc83(%rip),%rdx
call   1070 <mvprintw@plt>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1379 <draw_terminal_ncurses+0x229>
jmp    143a <draw_terminal_ncurses+0x2ea>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1435 <draw_terminal_ncurses+0x2e5>
mov    -0xc(%rbp),%edi
sub    -0x24(%rbp),%edi
mov    -0x20(%rbp),%esi
imul   -0x18(%rbp),%esi
add    -0x28(%rbp),%esi
mov    -0x20(%rbp),%eax
imul   -0x1c(%rbp),%eax
add    %eax,%esi
add    0x10(%rbp),%esi
mov    0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
sub    $0x1,%edx
movslq %edx,%rax
mov    -0x70(%rbp,%rax,8),%rdx
call   1040 <mvaddwstr@plt>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    13dc <draw_terminal_ncurses+0x28c>
jmp    143a <draw_terminal_ncurses+0x2ea>
jmp    143f <draw_terminal_ncurses+0x2ef>
jmp    161c <draw_terminal_ncurses+0x4cc>
mov    0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    0x20(%rbp),%rcx
movslq -0x20(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
jge    1617 <draw_terminal_ncurses+0x4c7>
mov    0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x7c(%rbp)
mov    0x20(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x7c(%rbp),%eax
add    $0x1,%ecx
cmp    %ecx,%eax
jge    14fb <draw_terminal_ncurses+0x3ab>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    14e8 <draw_terminal_ncurses+0x398>
mov    -0xc(%rbp),%edi
sub    -0x24(%rbp),%edi
mov    -0x20(%rbp),%esi
imul   -0x18(%rbp),%esi
add    -0x28(%rbp),%esi
mov    -0x20(%rbp),%eax
imul   -0x1c(%rbp),%eax
add    %eax,%esi
add    0x10(%rbp),%esi
lea    0xb6e(%rip),%rdx
call   1060 <mvaddstr@plt>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    14a6 <draw_terminal_ncurses+0x356>
jmp    14ed <draw_terminal_ncurses+0x39d>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1476 <draw_terminal_ncurses+0x326>
mov    0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     1612 <draw_terminal_ncurses+0x4c2>
cmpl   $0x0,-0x8(%rbp)
jne    1596 <draw_terminal_ncurses+0x446>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1591 <draw_terminal_ncurses+0x441>
mov    -0xc(%rbp),%edi
mov    0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
sub    %eax,%edi
mov    -0x20(%rbp),%esi
imul   -0x18(%rbp),%esi
add    -0x28(%rbp),%esi
mov    -0x20(%rbp),%eax
imul   -0x1c(%rbp),%eax
add    %eax,%esi
add    0x10(%rbp),%esi
mov    0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,%ecx
lea    0xac2(%rip),%rdx
call   1070 <mvprintw@plt>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1528 <draw_terminal_ncurses+0x3d8>
jmp    160d <draw_terminal_ncurses+0x4bd>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1608 <draw_terminal_ncurses+0x4b8>
mov    -0xc(%rbp),%edi
mov    0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
sub    %eax,%edi
mov    -0x20(%rbp),%esi
imul   -0x18(%rbp),%esi
add    -0x28(%rbp),%esi
mov    -0x20(%rbp),%eax
imul   -0x1c(%rbp),%eax
add    %eax,%esi
add    0x10(%rbp),%esi
mov    0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
sub    $0x1,%edx
movslq %edx,%rax
mov    -0x70(%rbp,%rax,8),%rdx
call   1040 <mvaddwstr@plt>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    159d <draw_terminal_ncurses+0x44d>
jmp    160d <draw_terminal_ncurses+0x4bd>
jmp    1612 <draw_terminal_ncurses+0x4c2>
jmp    1617 <draw_terminal_ncurses+0x4c7>
jmp    161c <draw_terminal_ncurses+0x4cc>
mov    0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    0x20(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    11de <draw_terminal_ncurses+0x8e>
mov    $0x0,%al
call   1050 <refresh@plt>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<draw_terminal_ncurses>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %r9d,0x8(%rsp)
mov    %r8d,%r12d
mov    %esi,%ebp
mov    %edi,0xc(%rsp)
test   %edi,%edi
je     1183 <draw_terminal_ncurses+0x43>
mov    0x2e81(%rip),%rax
mov    $0xffffffff,%ebx
cmp    %ebp,(%rax)
jne    15ba <draw_terminal_ncurses+0x47a>
mov    0x2e65(%rip),%rax
cmp    %edx,(%rax)
jne    15ba <draw_terminal_ncurses+0x47a>
test   %ecx,%ecx
jle    15b1 <draw_terminal_ncurses+0x471>
mov    0x70(%rsp),%rdx
mov    0x68(%rsp),%rsi
mov    0x60(%rsp),%eax
add    $0xffffffff,%ebp
add    %r12d,0x8(%rsp)
mov    %ecx,%ecx
mov    %rcx,0x18(%rsp)
lea    -0x1(%r12),%ecx
mov    %ecx,0x14(%rsp)
xor    %edi,%edi
mov    %eax,%r13d
mov    %ebp,0x10(%rsp)
jmp    11e4 <draw_terminal_ncurses+0xa4>
nopl   0x0(%rax)
mov    0x68(%rsp),%rsi
mov    (%rsi,%rdi,4),%eax
mov    0x70(%rsp),%rdx
mov    %eax,(%rdx,%rdi,4)
add    $0x1,%rdi
add    0x8(%rsp),%r13d
cmp    0x18(%rsp),%rdi
je     15b1 <draw_terminal_ncurses+0x471>
mov    (%rsi,%rdi,4),%ecx
mov    (%rdx,%rdi,4),%eax
cmp    %eax,%ecx
mov    %rdi,(%rsp)
jle    1290 <draw_terminal_ncurses+0x150>
lea    0x7(%rax),%r15d
test   %eax,%eax
cmovns %eax,%r15d
sar    $0x3,%r15d
lea    0x7(%rcx),%eax
test   %ecx,%ecx
cmovns %ecx,%eax
sar    $0x3,%eax
cmpl   $0x0,0xc(%rsp)
je     132c <draw_terminal_ncurses+0x1ec>
cmp    %eax,%r15d
jl     1248 <draw_terminal_ncurses+0x108>
test   $0x7,%cl
jne    13b4 <draw_terminal_ncurses+0x274>
jmp    11c0 <draw_terminal_ncurses+0x80>
nopw   0x0(%rax,%rax,1)
add    $0x1,%r15d
lea    0x7(%rcx),%eax
test   %ecx,%ecx
cmovns %ecx,%eax
sar    $0x3,%eax
cmp    %eax,%r15d
jge    13a0 <draw_terminal_ncurses+0x260>
test   %r12d,%r12d
jle    1230 <draw_terminal_ncurses+0xf0>
sub    %r15d,%ebp
xor    %ebx,%ebx
lea    0xddf(%rip),%r14
nopl   0x0(%rax)
lea    (%rbx,%r13,1),%esi
mov    %ebp,%edi
mov    %r14,%rdx
call   1030 <mvaddwstr@plt>
add    $0x1,%ebx
cmp    %ebx,%r12d
jne    1260 <draw_terminal_ncurses+0x120>
mov    0x68(%rsp),%rax
mov    (%rsp),%rdi
mov    (%rax,%rdi,4),%ecx
mov    0x10(%rsp),%ebp
jmp    1230 <draw_terminal_ncurses+0xf0>
nopl   0x0(%rax,%rax,1)
jge    11c0 <draw_terminal_ncurses+0x80>
lea    0x7(%rcx),%esi
test   %ecx,%ecx
cmovns %ecx,%esi
sar    $0x3,%esi
lea    0x7(%rax),%edx
test   %eax,%eax
cmovns %eax,%edx
sar    $0x3,%edx
cmp    %edx,%esi
jle    12d8 <draw_terminal_ncurses+0x198>
test   $0x7,%cl
jne    1461 <draw_terminal_ncurses+0x321>
jmp    11c0 <draw_terminal_ncurses+0x80>
xchg   %ax,%ax
lea    0x1(%rsi),%ecx
lea    0x7(%rax),%edx
test   %eax,%eax
cmovns %eax,%edx
sar    $0x3,%edx
cmp    %edx,%esi
mov    %ecx,%esi
jge    1450 <draw_terminal_ncurses+0x310>
test   %r12d,%r12d
jle    12c0 <draw_terminal_ncurses+0x180>
mov    %rsi,0x20(%rsp)
sub    %esi,%ebp
mov    %r13d,%ebx
mov    %r12d,%r14d
lea    0xd52(%rip),%r15
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %ebp,%edi
mov    %ebx,%esi
mov    %r15,%rdx
call   1050 <mvaddstr@plt>
add    $0x1,%ebx
add    $0xffffffff,%r14d
jne    1300 <draw_terminal_ncurses+0x1c0>
mov    0x70(%rsp),%rax
mov    (%rsp),%rdi
mov    (%rax,%rdi,4),%eax
mov    0x10(%rsp),%ebp
mov    0x20(%rsp),%rsi
jmp    12c0 <draw_terminal_ncurses+0x180>
cmp    %eax,%r15d
jl     1354 <draw_terminal_ncurses+0x214>
test   $0x7,%cl
jne    14c9 <draw_terminal_ncurses+0x389>
jmp    11c0 <draw_terminal_ncurses+0x80>
nop
add    $0x1,%r15d
lea    0x7(%rcx),%eax
test   %ecx,%ecx
cmovns %ecx,%eax
sar    $0x3,%eax
cmp    %eax,%r15d
jge    13a0 <draw_terminal_ncurses+0x260>
test   %r12d,%r12d
jle    1340 <draw_terminal_ncurses+0x200>
sub    %r15d,%ebp
xor    %ebx,%ebx
lea    0xcdb(%rip),%r14
cs nopw 0x0(%rax,%rax,1)
nop
lea    (%rbx,%r13,1),%esi
mov    %ebp,%edi
mov    %r14,%rdx
mov    $0x8,%ecx
call   1060 <mvprintw@plt>
add    $0x1,%ebx
cmp    %ebx,%r12d
jne    1370 <draw_terminal_ncurses+0x230>
mov    0x68(%rsp),%rax
mov    (%rsp),%rdi
mov    (%rax,%rdi,4),%ecx
mov    0x10(%rsp),%ebp
jmp    1340 <draw_terminal_ncurses+0x200>
nopl   (%rax)
test   $0x7,%cl
je     11c0 <draw_terminal_ncurses+0x80>
cmpl   $0x0,0xc(%rsp)
je     14c9 <draw_terminal_ncurses+0x389>
test   %r12d,%r12d
jle    11c0 <draw_terminal_ncurses+0x80>
mov    %ebp,%r14d
sub    %r15d,%r14d
mov    0x8(%rsp),%esi
imul   %edi,%esi
add    0x60(%rsp),%esi
lea    0x7(%rcx),%eax
test   %ecx,%ecx
cmovns %ecx,%eax
and    $0xfffffff8,%eax
sub    %eax,%ecx
movslq %ecx,%rax
lea    0x29eb(%rip),%rcx
mov    -0x8(%rcx,%rax,8),%rdx
mov    %r14d,%edi
call   1030 <mvaddwstr@plt>
mov    (%rsp),%rdi
cmp    $0x1,%r12d
je     11c0 <draw_terminal_ncurses+0x80>
mov    $0x1,%ebx
cs nopw 0x0(%rax,%rax,1)
nop
mov    0x68(%rsp),%rax
mov    (%rax,%rdi,4),%eax
lea    (%rbx,%r13,1),%esi
lea    0x7(%rax),%ecx
test   %eax,%eax
cmovns %eax,%ecx
and    $0xfffffff8,%ecx
sub    %ecx,%eax
cltq
lea    0x299e(%rip),%rcx
mov    -0x8(%rcx,%rax,8),%rdx
mov    %r14d,%edi
call   1030 <mvaddwstr@plt>
mov    (%rsp),%rdi
add    $0x1,%ebx
cmp    %ebx,%r12d
jne    1410 <draw_terminal_ncurses+0x2d0>
jmp    11c0 <draw_terminal_ncurses+0x80>
mov    0x68(%rsp),%rax
mov    (%rax,%rdi,4),%ecx
test   $0x7,%cl
je     11c0 <draw_terminal_ncurses+0x80>
cmpl   $0x0,0xc(%rsp)
je     1559 <draw_terminal_ncurses+0x419>
test   %r12d,%r12d
jle    11c0 <draw_terminal_ncurses+0x80>
xor    %ebx,%ebx
nopw   0x0(%rax,%rax,1)
lea    0x7(%rcx),%eax
test   %ecx,%ecx
cmovns %ecx,%eax
mov    %eax,%edx
sar    $0x3,%edx
mov    %ebp,%edi
sub    %edx,%edi
lea    (%rbx,%r13,1),%esi
and    $0xfffffff8,%eax
sub    %eax,%ecx
movslq %ecx,%rax
lea    0x292c(%rip),%rcx
mov    -0x8(%rcx,%rax,8),%rdx
call   1030 <mvaddwstr@plt>
cmp    %ebx,0x14(%rsp)
mov    (%rsp),%rdi
je     11c0 <draw_terminal_ncurses+0x80>
mov    0x68(%rsp),%rax
mov    (%rax,%rdi,4),%ecx
add    $0x1,%ebx
jmp    1480 <draw_terminal_ncurses+0x340>
test   %r12d,%r12d
jle    11c0 <draw_terminal_ncurses+0x80>
mov    %ebp,%r14d
sub    %r15d,%r14d
mov    0x8(%rsp),%esi
imul   %edi,%esi
add    0x60(%rsp),%esi
lea    0x7(%rcx),%eax
test   %ecx,%ecx
cmovns %ecx,%eax
and    $0xfffffff8,%eax
sub    %eax,%ecx
mov    %r14d,%edi
lea    0xb46(%rip),%rdx
call   1060 <mvprintw@plt>
mov    (%rsp),%rdi
cmp    $0x1,%r12d
je     11c0 <draw_terminal_ncurses+0x80>
mov    $0x1,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    0x68(%rsp),%rax
mov    (%rax,%rdi,4),%ecx
lea    (%rbx,%r13,1),%esi
lea    0x7(%rcx),%eax
test   %ecx,%ecx
cmovns %ecx,%eax
and    $0xfffffff8,%eax
sub    %eax,%ecx
mov    %r14d,%edi
lea    0xafd(%rip),%rdx
call   1060 <mvprintw@plt>
mov    (%rsp),%rdi
add    $0x1,%ebx
cmp    %ebx,%r12d
jne    1520 <draw_terminal_ncurses+0x3e0>
jmp    11c0 <draw_terminal_ncurses+0x80>
test   %r12d,%r12d
jle    11c0 <draw_terminal_ncurses+0x80>
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
lea    0x7(%rcx),%eax
test   %ecx,%ecx
cmovns %ecx,%eax
mov    %eax,%edx
sar    $0x3,%edx
mov    %ebp,%edi
sub    %edx,%edi
lea    (%rbx,%r13,1),%esi
and    $0xfffffff8,%eax
sub    %eax,%ecx
lea    0xaaf(%rip),%rdx
call   1060 <mvprintw@plt>
cmp    %ebx,0x14(%rsp)
mov    (%rsp),%rdi
je     11c0 <draw_terminal_ncurses+0x80>
mov    0x68(%rsp),%rax
mov    (%rax,%rdi,4),%ecx
add    $0x1,%ebx
jmp    1570 <draw_terminal_ncurses+0x430>
xor    %ebx,%ebx
xor    %eax,%eax
call   1040 <refresh@plt>
mov    %ebx,%eax
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@.str = [2 x i32] [i32 9601, i32 0]
@.str.1 = [2 x i32] [i32 9602, i32 0]
@.str.2 = [2 x i32] [i32 9603, i32 0]
@.str.3 = [2 x i32] [i32 9604, i32 0]
@.str.4 = [2 x i32] [i32 9605, i32 0]
@.str.5 = [2 x i32] [i32 9606, i32 0]
@.str.6 = [2 x i32] [i32 9607, i32 0]
@.str.7 = [2 x i32] [i32 9608, i32 0]
@__const.draw_terminal_ncurses.bh = [8 x i8*] [i8* bitcast ([2 x i32]* @.str to i8*), i8* bitcast ([2 x i32]* @.str.1 to i8*), i8* bitcast ([2 x i32]* @.str.2 to i8*), i8* bitcast ([2 x i32]* @.str.3 to i8*), i8* bitcast ([2 x i32]* @.str.4 to i8*), i8* bitcast ([2 x i32]* @.str.5 to i8*), i8* bitcast ([2 x i32]* @.str.6 to i8*), i8* bitcast ([2 x i32]* @.str.7 to i8*)]
@LINES = global i32 0
@COLS = global i32 0
@.str.8 = [3 x i8] c"%d\00"
@.str.9 = [2 x i8] c" \00"
define i32 @draw_terminal_ncurses(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32* nocapture %7, i32* nocapture %8) {
%10 = icmp eq i32 %0, 0
br i1 %10, label %17, label %11
11: ; preds = %9
%12 = load i32, i32* @LINES
%13 = icmp eq i32 %12, %1
%14 = load i32, i32* @COLS
%15 = icmp eq i32 %14, %2
%16 = select i1 %13, i1 %15, i1 false
br i1 %16, label %17, label %218
17: ; preds = %11, %9
%18 = add nsw i32 %1, -1
%19 = icmp sgt i32 %3, 0
br i1 %19, label %20, label %216
20: ; preds = %17
%21 = icmp sgt i32 %4, 0
%22 = add i32 %5, %4
%23 = zext i32 %3 to i64
%24 = icmp eq i32 %4, 1
%25 = icmp eq i32 %4, 1
br label %26
26: ; preds = %20, %212
%27 = phi i64 [ 0, %20 ], [ %214, %212 ]
%28 = getelementptr inbounds i32, i32* %7, i64 %27
%29 = load i32, i32* %28
%30 = getelementptr inbounds i32, i32* %8, i64 %27
%31 = load i32, i32* %30
%32 = icmp sgt i32 %29, %31
br i1 %32, label %33, label %139
33: ; preds = %26
%34 = sdiv i32 %31, 8
%35 = sdiv i32 %29, 8
%36 = icmp slt i32 %34, %35
br i1 %10, label %37, label %60
37: ; preds = %33
br i1 %36, label %38, label %88
38: ; preds = %37
%39 = trunc i64 %27 to i32
%40 = mul i32 %22, %39
%41 = add i32 %40, %6
br label %42
42: ; preds = %38, %55
%43 = phi i32 [ %29, %38 ], [ %56, %55 ]
%44 = phi i32 [ %34, %38 ], [ %57, %55 ]
br i1 %21, label %45, label %55
45: ; preds = %42
%46 = sub nsw i32 %18, %44
br label %47
47: ; preds = %45, %47
%48 = phi i32 [ 0, %45 ], [ %51, %47 ]
%49 = add i32 %41, %48
%50 = tail call i32 @mvprintw(i32 %46, i32 %49, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.8, i64 0, i64 0), i32 8)
%51 = add nuw nsw i32 %48, 1
%52 = icmp eq i32 %51, %4
br i1 %52, label %53, label %47
53: ; preds = %47
%54 = load i32, i32* %28
br label %55
55: ; preds = %53, %42
%56 = phi i32 [ %54, %53 ], [ %43, %42 ]
%57 = add nsw i32 %44, 1
%58 = sdiv i32 %56, 8
%59 = icmp slt i32 %57, %58
br i1 %59, label %42, label %83
60: ; preds = %33
br i1 %36, label %61, label %91
61: ; preds = %60
%62 = trunc i64 %27 to i32
%63 = mul i32 %22, %62
%64 = add i32 %63, %6
br label %65
65: ; preds = %61, %78
%66 = phi i32 [ %29, %61 ], [ %79, %78 ]
%67 = phi i32 [ %34, %61 ], [ %80, %78 ]
br i1 %21, label %68, label %78
68: ; preds = %65
%69 = sub nsw i32 %18, %67
br label %70
70: ; preds = %68, %70
%71 = phi i32 [ 0, %68 ], [ %74, %70 ]
%72 = add i32 %64, %71
%73 = tail call i32 @mvaddwstr(i32 %69, i32 %72, i8* bitcast ([2 x i32]* @.str.7 to i8*))
%74 = add nuw nsw i32 %71, 1
%75 = icmp eq i32 %74, %4
br i1 %75, label %76, label %70
76: ; preds = %70
%77 = load i32, i32* %28
br label %78
78: ; preds = %76, %65
%79 = phi i32 [ %77, %76 ], [ %66, %65 ]
%80 = add nsw i32 %67, 1
%81 = sdiv i32 %79, 8
%82 = icmp slt i32 %80, %81
br i1 %82, label %65, label %83
83: ; preds = %78, %55
%84 = phi i32 [ %56, %55 ], [ %79, %78 ]
%85 = phi i32 [ %57, %55 ], [ %80, %78 ]
%86 = and i32 %84, 7
%87 = icmp eq i32 %86, 0
br i1 %87, label %212, label %94
88: ; preds = %37
%89 = and i32 %29, 7
%90 = icmp eq i32 %89, 0
br i1 %90, label %212, label %109
91: ; preds = %60
%92 = and i32 %29, 7
%93 = icmp eq i32 %92, 0
br i1 %93, label %212, label %95
94: ; preds = %83
br i1 %10, label %109, label %95
95: ; preds = %91, %94
%96 = phi i32 [ %84, %94 ], [ %29, %91 ]
%97 = phi i32 [ %85, %94 ], [ %34, %91 ]
br i1 %21, label %98, label %212
98: ; preds = %95
%99 = sub nsw i32 %18, %97
%100 = trunc i64 %27 to i32
%101 = mul i32 %22, %100
%102 = add i32 %101, %6
%103 = srem i32 %96, 8
%104 = add nsw i32 %103, -1
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds [8 x i8*], [8 x i8*]* @__const.draw_terminal_ncurses.bh, i64 0, i64 %105
%107 = load i8*, i8** %106
%108 = tail call i32 @mvaddwstr(i32 %99, i32 %102, i8* %107)
br i1 %24, label %212, label %127
109: ; preds = %88, %94
%110 = phi i32 [ %84, %94 ], [ %29, %88 ]
%111 = phi i32 [ %85, %94 ], [ %34, %88 ]
br i1 %21, label %112, label %212
112: ; preds = %109
%113 = sub nsw i32 %18, %111
%114 = trunc i64 %27 to i32
%115 = mul i32 %22, %114
%116 = add i32 %115, %6
%117 = srem i32 %110, 8
%118 = tail call i32 @mvprintw(i32 %113, i32 %116, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.8, i64 0, i64 0), i32 %117)
br i1 %25, label %212, label %119
119: ; preds = %112, %119
%120 = phi i32 [ %125, %119 ], [ 1, %112 ]
%121 = load i32, i32* %28
%122 = add i32 %116, %120
%123 = srem i32 %121, 8
%124 = tail call i32 @mvprintw(i32 %113, i32 %122, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.8, i64 0, i64 0), i32 %123)
%125 = add nuw nsw i32 %120, 1
%126 = icmp eq i32 %125, %4
br i1 %126, label %212, label %119
127: ; preds = %98, %127
%128 = phi i32 [ %137, %127 ], [ 1, %98 ]
%129 = load i32, i32* %28
%130 = add i32 %102, %128
%131 = srem i32 %129, 8
%132 = add nsw i32 %131, -1
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds [8 x i8*], [8 x i8*]* @__const.draw_terminal_ncurses.bh, i64 0, i64 %133
%135 = load i8*, i8** %134
%136 = tail call i32 @mvaddwstr(i32 %99, i32 %130, i8* %135)
%137 = add nuw nsw i32 %128, 1
%138 = icmp eq i32 %137, %4
br i1 %138, label %212, label %127
139: ; preds = %26
%140 = icmp slt i32 %29, %31
br i1 %140, label %141, label %212
141: ; preds = %139
%142 = sdiv i32 %29, 8
%143 = sdiv i32 %31, 8
%144 = icmp sgt i32 %142, %143
br i1 %144, label %169, label %145
145: ; preds = %141
%146 = trunc i64 %27 to i32
%147 = mul i32 %22, %146
%148 = add i32 %147, %6
br label %149
149: ; preds = %145, %162
%150 = phi i32 [ %31, %145 ], [ %163, %162 ]
%151 = phi i32 [ %142, %145 ], [ %164, %162 ]
br i1 %21, label %152, label %162
152: ; preds = %149
%153 = sub nsw i32 %18, %151
br label %154
154: ; preds = %152, %154
%155 = phi i32 [ 0, %152 ], [ %158, %154 ]
%156 = add i32 %148, %155
%157 = tail call i32 @mvaddstr(i32 %153, i32 %156, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.9, i64 0, i64 0))
%158 = add nuw nsw i32 %155, 1
%159 = icmp eq i32 %158, %4
br i1 %159, label %160, label %154
160: ; preds = %154
%161 = load i32, i32* %30
br label %162
162: ; preds = %160, %149
%163 = phi i32 [ %161, %160 ], [ %150, %149 ]
%164 = add nsw i32 %151, 1
%165 = sdiv i32 %163, 8
%166 = icmp slt i32 %151, %165
br i1 %166, label %149, label %167
167: ; preds = %162
%168 = load i32, i32* %28
br label %169
169: ; preds = %167, %141
%170 = phi i32 [ %168, %167 ], [ %29, %141 ]
%171 = and i32 %170, 7
%172 = icmp eq i32 %171, 0
br i1 %172, label %212, label %173
173: ; preds = %169
br i1 %10, label %179, label %174
174: ; preds = %173
br i1 %21, label %175, label %212
175: ; preds = %174
%176 = trunc i64 %27 to i32
%177 = mul i32 %22, %176
%178 = add i32 %177, %6
br label %196
179: ; preds = %173
br i1 %21, label %180, label %212
180: ; preds = %179
%181 = trunc i64 %27 to i32
%182 = mul i32 %22, %181
%183 = add i32 %182, %6
br label %184
184: ; preds = %194, %180
%185 = phi i32 [ %170, %180 ], [ %195, %194 ]
%186 = phi i32 [ 0, %180 ], [ %192, %194 ]
%187 = sdiv i32 %185, -8
%188 = add i32 %187, %18
%189 = add i32 %183, %186
%190 = srem i32 %185, 8
%191 = tail call i32 @mvprintw(i32 %188, i32 %189, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.8, i64 0, i64 0), i32 %190)
%192 = add nuw nsw i32 %186, 1
%193 = icmp eq i32 %192, %4
br i1 %193, label %212, label %194
194: ; preds = %184
%195 = load i32, i32* %28
br label %184
196: ; preds = %210, %175
%197 = phi i32 [ %170, %175 ], [ %211, %210 ]
%198 = phi i32 [ 0, %175 ], [ %208, %210 ]
%199 = sdiv i32 %197, -8
%200 = add i32 %199, %18
%201 = add i32 %178, %198
%202 = srem i32 %197, 8
%203 = add nsw i32 %202, -1
%204 = sext i32 %203 to i64
%205 = getelementptr inbounds [8 x i8*], [8 x i8*]* @__const.draw_terminal_ncurses.bh, i64 0, i64 %204
%206 = load i8*, i8** %205
%207 = tail call i32 @mvaddwstr(i32 %200, i32 %201, i8* %206)
%208 = add nuw nsw i32 %198, 1
%209 = icmp eq i32 %208, %4
br i1 %209, label %212, label %210
210: ; preds = %196
%211 = load i32, i32* %28
br label %196
212: ; preds = %196, %184, %127, %119, %98, %112, %88, %91, %174, %179, %95, %109, %139, %169, %83
%213 = load i32, i32* %28
store i32 %213, i32* %30
%214 = add nuw nsw i64 %27, 1
%215 = icmp eq i64 %214, %23
br i1 %215, label %216, label %26
216: ; preds = %212, %17
%217 = tail call i32 (...) @refresh()
br label %218
218: ; preds = %11, %216
%219 = phi i32 [ 0, %216 ], [ -1, %11 ]
ret i32 %219
}