#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
scalar_t__ number_lat(int *, size_t const, size_t const);
int /*<<< orphan*/ printf(char *, int, int, int, int, int, int);
int seek_forward(int gbdata[], const size_t length, const size_t position,
                 int current_mode) {
  int number_count, byte_count, mixed_count, upper_count, lower_count,
      chinese_count;
  int best_mode;
  size_t sp;
  int best_count, last = -1;
  int debug = 0;
  if (gbdata[position] > 0xff) {
    return 7;
  }
  switch (current_mode) {
  case 7:
    number_count = 13;
    byte_count = 13;
    mixed_count = 13;
    upper_count = 13;
    lower_count = 13;
    chinese_count = 0;
    break;
  case 1:
    number_count = 0;
    byte_count = 10;
    mixed_count = 10;
    upper_count = 10;
    lower_count = 10;
    chinese_count = 10;
    break;
  case 2:
    number_count = 5;
    byte_count = 7;
    mixed_count = 7;
    upper_count = 5;
    lower_count = 0;
    chinese_count = 5;
    break;
  case 3:
    number_count = 5;
    byte_count = 7;
    mixed_count = 7;
    upper_count = 0;
    lower_count = 5;
    chinese_count = 5;
    break;
  case 4:
    number_count = 10;
    byte_count = 10;
    mixed_count = 0;
    upper_count = 10;
    lower_count = 10;
    chinese_count = 10;
    break;
  case 6:
    number_count = 4;
    byte_count = 0;
    mixed_count = 4;
    upper_count = 4;
    lower_count = 4;
    chinese_count = 4;
    break;
  default:
    number_count = 4;
    byte_count = 4;
    mixed_count = 4;
    upper_count = 4;
    lower_count = 4;
    chinese_count = 4;
  }
  for (sp = position; (sp < length) && (sp <= (position + 8)); sp++) {
    int done = 0;
    if (gbdata[sp] >= 0xff) {
      byte_count += 17;
      mixed_count += 23;
      upper_count += 18;
      lower_count += 18;
      chinese_count += 13;
      done = 1;
    }
    if ((gbdata[sp] >= 'a') && (gbdata[sp] <= 'z')) {
      byte_count += 8;
      mixed_count += 6;
      upper_count += 10;
      lower_count += 5;
      chinese_count += 13;
      done = 1;
    }
    if ((gbdata[sp] >= 'A') && (gbdata[sp] <= 'Z')) {
      byte_count += 8;
      mixed_count += 6;
      upper_count += 5;
      lower_count += 10;
      chinese_count += 13;
      done = 1;
    }
    if ((gbdata[sp] >= '0') && (gbdata[sp] <= '9')) {
      byte_count += 8;
      mixed_count += 6;
      upper_count += 8;
      lower_count += 8;
      chinese_count += 13;
      done = 1;
    }
    if (gbdata[sp] == ' ') {
      byte_count += 8;
      mixed_count += 6;
      upper_count += 5;
      lower_count += 5;
      chinese_count += 13;
      done = 1;
    }
    if (done == 0) {
      byte_count += 8;
      mixed_count += 16;
      upper_count += 13;
      lower_count += 13;
      chinese_count += 13;
    }
    if (gbdata[sp] >= 0x7f) {
      mixed_count += 20;
      upper_count += 20;
      lower_count += 20;
    }
  }
  for (sp = position; (sp < (length - 1)) && (sp <= (position + 7)); sp++) {
    if ((gbdata[sp] == 0x13) && (gbdata[sp + 1] == 0x10)) {
      chinese_count -= 13;
    }
  }
  for (sp = position; (sp < (length - 1)) && (sp <= (position + 7)); sp++) {
    if (sp != last) {
      if (((gbdata[sp] >= '0') && (gbdata[sp] <= '9')) &&
          ((gbdata[sp + 1] >= '0') && (gbdata[sp + 1] <= '9'))) {
        chinese_count -= 13;
        last = (int)(sp + 1);
      }
    }
  }
  number_count += number_lat(gbdata, length, position);
  if (debug) {
    printf("C %d / B %d / M %d / U %d / L %d / N %d\n", chinese_count,
           byte_count, mixed_count, upper_count, lower_count, number_count);
  }
  best_count = chinese_count;
  best_mode = 7;
  if (byte_count <= best_count) {
    best_count = byte_count;
    best_mode = 6;
  }
  if (mixed_count <= best_count) {
    best_count = mixed_count;
    best_mode = 4;
  }
  if (upper_count <= best_count) {
    best_count = upper_count;
    best_mode = 3;
  }
  if (lower_count <= best_count) {
    best_count = lower_count;
    best_mode = 2;
  }
  if (number_count <= best_count) {
    best_count = number_count;
    best_mode = 1;
  }
  return best_mode;
}


x86 assembly (clang, -O0):
<seek_forward>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
movl   $0xffffffff,-0x50(%rbp)
movl   $0x0,-0x54(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
cmpl   $0xff,(%rax,%rcx,4)
jle    1166 <seek_forward+0x46>
movl   $0x7,-0x4(%rbp)
jmp    1762 <seek_forward+0x642>
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x60(%rbp)
sub    $0x6,%eax
ja     12a9 <seek_forward+0x189>
mov    -0x60(%rbp),%rax
lea    0xe7a(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movl   $0xd,-0x28(%rbp)
movl   $0xd,-0x2c(%rbp)
movl   $0xd,-0x30(%rbp)
movl   $0xd,-0x34(%rbp)
movl   $0xd,-0x38(%rbp)
movl   $0x0,-0x3c(%rbp)
jmp    12d3 <seek_forward+0x1b3>
movl   $0x0,-0x28(%rbp)
movl   $0xa,-0x2c(%rbp)
movl   $0xa,-0x30(%rbp)
movl   $0xa,-0x34(%rbp)
movl   $0xa,-0x38(%rbp)
movl   $0xa,-0x3c(%rbp)
jmp    12d3 <seek_forward+0x1b3>
movl   $0x5,-0x28(%rbp)
movl   $0x7,-0x2c(%rbp)
movl   $0x7,-0x30(%rbp)
movl   $0x5,-0x34(%rbp)
movl   $0x0,-0x38(%rbp)
movl   $0x5,-0x3c(%rbp)
jmp    12d3 <seek_forward+0x1b3>
movl   $0x5,-0x28(%rbp)
movl   $0x7,-0x2c(%rbp)
movl   $0x7,-0x30(%rbp)
movl   $0x0,-0x34(%rbp)
movl   $0x5,-0x38(%rbp)
movl   $0x5,-0x3c(%rbp)
jmp    12d3 <seek_forward+0x1b3>
movl   $0xa,-0x28(%rbp)
movl   $0xa,-0x2c(%rbp)
movl   $0x0,-0x30(%rbp)
movl   $0xa,-0x34(%rbp)
movl   $0xa,-0x38(%rbp)
movl   $0xa,-0x3c(%rbp)
jmp    12d3 <seek_forward+0x1b3>
movl   $0x4,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x4,-0x30(%rbp)
movl   $0x4,-0x34(%rbp)
movl   $0x4,-0x38(%rbp)
movl   $0x4,-0x3c(%rbp)
jmp    12d3 <seek_forward+0x1b3>
movl   $0x4,-0x28(%rbp)
movl   $0x4,-0x2c(%rbp)
movl   $0x4,-0x30(%rbp)
movl   $0x4,-0x34(%rbp)
movl   $0x4,-0x38(%rbp)
movl   $0x4,-0x3c(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0x61(%rbp)
jae    1303 <seek_forward+0x1e3>
mov    -0x48(%rbp),%rax
mov    -0x20(%rbp),%rcx
add    $0x8,%rcx
cmp    %rcx,%rax
setbe  %al
mov    %al,-0x61(%rbp)
mov    -0x61(%rbp),%al
test   $0x1,%al
jne    1313 <seek_forward+0x1f3>
jmp    152b <seek_forward+0x40b>
movl   $0x0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%rcx
cmpl   $0xff,(%rax,%rcx,4)
jl     1363 <seek_forward+0x243>
mov    -0x2c(%rbp),%eax
add    $0x11,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
add    $0x17,%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
add    $0x12,%eax
mov    %eax,-0x34(%rbp)
mov    -0x38(%rbp),%eax
add    $0x12,%eax
mov    %eax,-0x38(%rbp)
mov    -0x3c(%rbp),%eax
add    $0xd,%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,-0x58(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%rcx
cmpl   $0x61,(%rax,%rcx,4)
jl     13bb <seek_forward+0x29b>
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%rcx
cmpl   $0x7a,(%rax,%rcx,4)
jg     13bb <seek_forward+0x29b>
mov    -0x2c(%rbp),%eax
add    $0x8,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
add    $0xa,%eax
mov    %eax,-0x34(%rbp)
mov    -0x38(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0x38(%rbp)
mov    -0x3c(%rbp),%eax
add    $0xd,%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,-0x58(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%rcx
cmpl   $0x41,(%rax,%rcx,4)
jl     1413 <seek_forward+0x2f3>
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%rcx
cmpl   $0x5a,(%rax,%rcx,4)
jg     1413 <seek_forward+0x2f3>
mov    -0x2c(%rbp),%eax
add    $0x8,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0x34(%rbp)
mov    -0x38(%rbp),%eax
add    $0xa,%eax
mov    %eax,-0x38(%rbp)
mov    -0x3c(%rbp),%eax
add    $0xd,%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,-0x58(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%rcx
cmpl   $0x30,(%rax,%rcx,4)
jl     146b <seek_forward+0x34b>
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%rcx
cmpl   $0x39,(%rax,%rcx,4)
jg     146b <seek_forward+0x34b>
mov    -0x2c(%rbp),%eax
add    $0x8,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
add    $0x8,%eax
mov    %eax,-0x34(%rbp)
mov    -0x38(%rbp),%eax
add    $0x8,%eax
mov    %eax,-0x38(%rbp)
mov    -0x3c(%rbp),%eax
add    $0xd,%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,-0x58(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%rcx
cmpl   $0x20,(%rax,%rcx,4)
jne    14b1 <seek_forward+0x391>
mov    -0x2c(%rbp),%eax
add    $0x8,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0x34(%rbp)
mov    -0x38(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0x38(%rbp)
mov    -0x3c(%rbp),%eax
add    $0xd,%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,-0x58(%rbp)
cmpl   $0x0,-0x58(%rbp)
jne    14e8 <seek_forward+0x3c8>
mov    -0x2c(%rbp),%eax
add    $0x8,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
add    $0x10,%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
add    $0xd,%eax
mov    %eax,-0x34(%rbp)
mov    -0x38(%rbp),%eax
add    $0xd,%eax
mov    %eax,-0x38(%rbp)
mov    -0x3c(%rbp),%eax
add    $0xd,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%rcx
cmpl   $0x7f,(%rax,%rcx,4)
jl     1515 <seek_forward+0x3f5>
mov    -0x30(%rbp),%eax
add    $0x14,%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
add    $0x14,%eax
mov    %eax,-0x34(%rbp)
mov    -0x38(%rbp),%eax
add    $0x14,%eax
mov    %eax,-0x38(%rbp)
jmp    151a <seek_forward+0x3fa>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    12db <seek_forward+0x1bb>
mov    -0x20(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rcx
mov    -0x18(%rbp),%rdx
sub    $0x1,%rdx
xor    %eax,%eax
cmp    %rdx,%rcx
mov    %al,-0x62(%rbp)
jae    1562 <seek_forward+0x442>
mov    -0x48(%rbp),%rax
mov    -0x20(%rbp),%rcx
add    $0x7,%rcx
cmp    %rcx,%rax
setbe  %al
mov    %al,-0x62(%rbp)
mov    -0x62(%rbp),%al
test   $0x1,%al
jne    1572 <seek_forward+0x452>
jmp    15b6 <seek_forward+0x496>
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%rcx
cmpl   $0x13,(%rax,%rcx,4)
jne    15a0 <seek_forward+0x480>
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%rcx
cmpl   $0x10,0x4(%rax,%rcx,4)
jne    15a0 <seek_forward+0x480>
mov    -0x3c(%rbp),%eax
sub    $0xd,%eax
mov    %eax,-0x3c(%rbp)
jmp    15a5 <seek_forward+0x485>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    1533 <seek_forward+0x413>
mov    -0x20(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rcx
mov    -0x18(%rbp),%rdx
sub    $0x1,%rdx
xor    %eax,%eax
cmp    %rdx,%rcx
mov    %al,-0x63(%rbp)
jae    15ed <seek_forward+0x4cd>
mov    -0x48(%rbp),%rax
mov    -0x20(%rbp),%rcx
add    $0x7,%rcx
cmp    %rcx,%rax
setbe  %al
mov    %al,-0x63(%rbp)
mov    -0x63(%rbp),%al
test   $0x1,%al
jne    15fd <seek_forward+0x4dd>
jmp    1687 <seek_forward+0x567>
mov    -0x48(%rbp),%rax
movslq -0x50(%rbp),%rcx
cmp    %rcx,%rax
je     1671 <seek_forward+0x551>
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%rcx
cmpl   $0x30,(%rax,%rcx,4)
jl     166c <seek_forward+0x54c>
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%rcx
cmpl   $0x39,(%rax,%rcx,4)
jg     166c <seek_forward+0x54c>
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%rcx
cmpl   $0x30,0x4(%rax,%rcx,4)
jl     166c <seek_forward+0x54c>
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%rcx
cmpl   $0x39,0x4(%rax,%rcx,4)
jg     166c <seek_forward+0x54c>
mov    -0x3c(%rbp),%eax
sub    $0xd,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %eax,-0x50(%rbp)
jmp    1671 <seek_forward+0x551>
jmp    1676 <seek_forward+0x556>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    15be <seek_forward+0x49e>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
call   1040 <number_lat@plt>
mov    %rax,%rcx
movslq -0x28(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x28(%rbp)
cmpl   $0x0,-0x54(%rbp)
je     16d2 <seek_forward+0x5b2>
mov    -0x3c(%rbp),%esi
mov    -0x2c(%rbp),%edx
mov    -0x30(%rbp),%ecx
mov    -0x34(%rbp),%r8d
mov    -0x38(%rbp),%r9d
mov    -0x28(%rbp),%eax
lea    0x952(%rip),%rdi
mov    %eax,(%rsp)
call   1030 <printf@plt>
mov    -0x3c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
movl   $0x7,-0x40(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jg     16f8 <seek_forward+0x5d8>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
movl   $0x6,-0x40(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jg     1711 <seek_forward+0x5f1>
mov    -0x30(%rbp),%eax
mov    %eax,-0x4c(%rbp)
movl   $0x4,-0x40(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jg     172a <seek_forward+0x60a>
mov    -0x34(%rbp),%eax
mov    %eax,-0x4c(%rbp)
movl   $0x3,-0x40(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jg     1743 <seek_forward+0x623>
mov    -0x38(%rbp),%eax
mov    %eax,-0x4c(%rbp)
movl   $0x2,-0x40(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jg     175c <seek_forward+0x63c>
mov    -0x28(%rbp),%eax
mov    %eax,-0x4c(%rbp)
movl   $0x1,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<seek_forward>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    (%rdi,%rdx,4),%ebx
mov    $0x7,%eax
cmp    $0xff,%ebx
jg     1676 <seek_forward+0x566>
mov    %rdx,%rbp
add    $0xffffffff,%ecx
cmp    $0x6,%ecx
ja     1188 <seek_forward+0x78>
movslq %ecx,%rax
lea    0xeb9(%rip),%rcx
mov    (%rcx,%rax,8),%rcx
mov    %rcx,0x10(%rsp)
lea    0xee1(%rip),%rcx
mov    (%rcx,%rax,4),%edx
lea    0xef3(%rip),%rcx
mov    (%rcx,%rax,4),%r13d
lea    0xf04(%rip),%rcx
mov    (%rcx,%rax,4),%r14d
lea    0xf15(%rip),%rcx
mov    (%rcx,%rax,4),%r12d
lea    0xf26(%rip),%rcx
mov    (%rcx,%rax,4),%r15d
jmp    11af <seek_forward+0x9f>
mov    $0x4,%edx
mov    $0x4,%eax
mov    %rax,0x10(%rsp)
mov    $0x4,%r13d
mov    $0x4,%r14d
mov    $0x4,%r12d
mov    $0x4,%r15d
cmp    %rsi,%rbp
mov    %ebx,0x4(%rsp)
jae    12f9 <seek_forward+0x1e9>
cmp    $0xfffffffffffffff7,%rbp
ja     12f9 <seek_forward+0x1e9>
lea    0x8(%rbp),%r10
add    $0xd,%r15d
mov    %ebx,%eax
mov    %rbp,0x8(%rsp)
mov    %rbp,%r11
cmp    $0xff,%eax
jge    1290 <seek_forward+0x180>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
lea    -0x61(%rax),%ecx
cmp    $0x19,%ecx
ja     1220 <seek_forward+0x110>
add    $0x8,%edx
mov    %edx,(%rsp)
mov    $0x5,%ebp
mov    $0xa,%ecx
mov    $0x6,%ebx
jmp    12a5 <seek_forward+0x195>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
lea    -0x41(%rax),%ecx
cmp    $0x19,%ecx
ja     1240 <seek_forward+0x130>
add    $0x8,%edx
mov    %edx,(%rsp)
mov    $0xa,%ebp
mov    $0x5,%ecx
mov    $0x6,%ebx
jmp    12a5 <seek_forward+0x195>
nop
lea    -0x30(%rax),%ecx
add    $0x8,%edx
cmp    $0x9,%ecx
ja     125f <seek_forward+0x14f>
mov    %edx,(%rsp)
mov    $0x8,%ecx
mov    $0x6,%ebx
mov    $0x8,%ebp
jmp    12a5 <seek_forward+0x195>
mov    %edx,(%rsp)
xor    %ecx,%ecx
cmp    $0x20,%eax
setne  %cl
mov    $0x10,%ebx
mov    $0x6,%edx
cmove  %edx,%ebx
lea    0x5(,%rcx,8),%ecx
mov    %ecx,%ebp
jmp    12a5 <seek_forward+0x195>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x11,%edx
mov    %edx,(%rsp)
mov    $0x12,%ecx
mov    $0x17,%ebx
mov    $0x12,%ebp
lea    (%rbx,%r13,1),%r9d
lea    (%r14,%rcx,1),%r8d
lea    (%r12,%rbp,1),%edx
cmp    $0x7f,%eax
lea    0x14(%r13,%rbx,1),%r13d
lea    0x14(%r14,%rcx,1),%r14d
lea    0x14(%r12,%rbp,1),%r12d
cmovl  %r9d,%r13d
cmovl  %r8d,%r14d
cmovl  %edx,%r12d
lea    0x1(%r11),%rcx
cmp    %rsi,%rcx
jae    12fe <seek_forward+0x1ee>
cmp    %r10,%r11
jae    12fe <seek_forward+0x1ee>
mov    0x4(%rdi,%r11,4),%eax
add    $0xd,%r15d
mov    %rcx,%r11
mov    (%rsp),%edx
cmp    $0xff,%eax
jl     11f0 <seek_forward+0xe0>
jmp    1290 <seek_forward+0x180>
mov    %edx,(%rsp)
jmp    1303 <seek_forward+0x1f3>
mov    0x8(%rsp),%rbp
lea    -0x1(%rsi),%r11
cmp    %rbp,%r11
seta   %bl
cmp    $0xfffffffffffffff9,%rbp
setb   %cl
and    %bl,%cl
je     161e <seek_forward+0x50e>
lea    0x1(%rbp),%r10
cmpl   $0x13,0x4(%rsp)
jne    1337 <seek_forward+0x227>
lea    -0xd(%r15),%edx
cmpl   $0x10,0x4(%rdi,%rbp,4)
cmovne %r15d,%edx
mov    %edx,%r15d
lea    0x7(%rbp),%r8
cmp    %r11,%r10
jae    1457 <seek_forward+0x347>
cmp    $0xfffffffffffffff8,%rbp
ja     1457 <seek_forward+0x347>
lea    0x2(%rbp),%rbx
cmpl   $0x13,0x4(%rdi,%rbp,4)
jne    1369 <seek_forward+0x259>
lea    -0xd(%r15),%edx
cmpl   $0x10,0x8(%rdi,%rbp,4)
cmovne %r15d,%edx
mov    %edx,%r15d
cmp    %r11,%rbx
jae    1457 <seek_forward+0x347>
cmp    %r8,%r10
jae    1457 <seek_forward+0x347>
lea    0x3(%rbp),%r9
cmpl   $0x13,0x8(%rdi,%rbp,4)
jne    1396 <seek_forward+0x286>
lea    -0xd(%r15),%edx
cmpl   $0x10,0xc(%rdi,%rbp,4)
cmovne %r15d,%edx
mov    %edx,%r15d
cmp    %r11,%r9
jae    1457 <seek_forward+0x347>
cmp    %r8,%rbx
jae    1457 <seek_forward+0x347>
lea    0x4(%rbp),%rbx
cmpl   $0x13,0xc(%rdi,%rbp,4)
jne    13c3 <seek_forward+0x2b3>
lea    -0xd(%r15),%edx
cmpl   $0x10,0x10(%rdi,%rbp,4)
cmovne %r15d,%edx
mov    %edx,%r15d
cmp    %r11,%rbx
jae    1457 <seek_forward+0x347>
cmp    %r8,%r9
jae    1457 <seek_forward+0x347>
lea    0x5(%rbp),%r9
cmpl   $0x13,0x10(%rdi,%rbp,4)
jne    13f0 <seek_forward+0x2e0>
lea    -0xd(%r15),%edx
cmpl   $0x10,0x14(%rdi,%rbp,4)
cmovne %r15d,%edx
mov    %edx,%r15d
cmp    %r11,%r9
jae    1457 <seek_forward+0x347>
cmp    %r8,%rbx
jae    1457 <seek_forward+0x347>
lea    0x6(%rbp),%rbx
cmpl   $0x13,0x14(%rdi,%rbp,4)
jne    1415 <seek_forward+0x305>
lea    -0xd(%r15),%edx
cmpl   $0x10,0x18(%rdi,%rbp,4)
cmovne %r15d,%edx
mov    %edx,%r15d
cmp    %r11,%rbx
jae    1457 <seek_forward+0x347>
cmp    %r8,%r9
jae    1457 <seek_forward+0x347>
cmpl   $0x13,0x18(%rdi,%rbp,4)
jne    1436 <seek_forward+0x326>
lea    -0xd(%r15),%edx
cmpl   $0x10,0x1c(%rdi,%rbp,4)
cmovne %r15d,%edx
mov    %edx,%r15d
cmp    %r11,%r8
jae    1457 <seek_forward+0x347>
cmp    %r8,%rbx
jae    1457 <seek_forward+0x347>
cmpl   $0x13,0x1c(%rdi,%rbp,4)
jne    1457 <seek_forward+0x347>
lea    -0xd(%r15),%edx
cmpl   $0x10,0x20(%rdi,%rbp,4)
cmovne %r15d,%edx
mov    %edx,%r15d
test   %cl,%cl
je     161e <seek_forward+0x50e>
mov    (%rdi,%rbp,4),%ecx
add    $0xffffffd0,%ecx
mov    $0xffffffff,%r9d
cmp    $0x9,%ecx
ja     1483 <seek_forward+0x373>
mov    0x4(%rdi,%rbp,4),%ecx
add    $0xffffffd0,%ecx
cmp    $0x9,%ecx
ja     1483 <seek_forward+0x373>
add    $0xfffffff3,%r15d
mov    %r10d,%r9d
cmp    %r11,%r10
jae    161e <seek_forward+0x50e>
cmp    $0xfffffffffffffff8,%rbp
ja     161e <seek_forward+0x50e>
movslq %r9d,%rcx
cmp    %rcx,%r10
je     14be <seek_forward+0x3ae>
mov    0x4(%rdi,%rbp,4),%ecx
add    $0xffffffd0,%ecx
cmp    $0x9,%ecx
ja     14be <seek_forward+0x3ae>
mov    0x8(%rdi,%rbp,4),%ecx
add    $0xffffffd0,%ecx
cmp    $0x9,%ecx
ja     14be <seek_forward+0x3ae>
lea    0x2(%rbp),%r9
add    $0xfffffff3,%r15d
lea    0x2(%rbp),%rcx
cmp    %r11,%rcx
jae    161e <seek_forward+0x50e>
cmp    %r8,%r10
jae    161e <seek_forward+0x50e>
movslq %r9d,%rdx
cmp    %rdx,%rcx
je     14fc <seek_forward+0x3ec>
mov    0x8(%rdi,%rbp,4),%edx
add    $0xffffffd0,%edx
cmp    $0x9,%edx
ja     14fc <seek_forward+0x3ec>
mov    0xc(%rdi,%rbp,4),%edx
add    $0xffffffd0,%edx
cmp    $0x9,%edx
ja     14fc <seek_forward+0x3ec>
lea    0x3(%rbp),%r9
add    $0xfffffff3,%r15d
lea    0x3(%rbp),%rdx
cmp    %r11,%rdx
jae    161e <seek_forward+0x50e>
cmp    %r8,%rcx
jae    161e <seek_forward+0x50e>
movslq %r9d,%rcx
cmp    %rcx,%rdx
je     153a <seek_forward+0x42a>
mov    0xc(%rdi,%rbp,4),%ecx
add    $0xffffffd0,%ecx
cmp    $0x9,%ecx
ja     153a <seek_forward+0x42a>
mov    0x10(%rdi,%rbp,4),%ecx
add    $0xffffffd0,%ecx
cmp    $0x9,%ecx
ja     153a <seek_forward+0x42a>
lea    0x4(%rbp),%r9
add    $0xfffffff3,%r15d
lea    0x4(%rbp),%rcx
cmp    %r11,%rcx
jae    161e <seek_forward+0x50e>
cmp    %r8,%rdx
jae    161e <seek_forward+0x50e>
movslq %r9d,%rdx
cmp    %rdx,%rcx
je     1578 <seek_forward+0x468>
mov    0x10(%rdi,%rbp,4),%edx
add    $0xffffffd0,%edx
cmp    $0x9,%edx
ja     1578 <seek_forward+0x468>
mov    0x14(%rdi,%rbp,4),%edx
add    $0xffffffd0,%edx
cmp    $0x9,%edx
ja     1578 <seek_forward+0x468>
lea    0x5(%rbp),%r9
add    $0xfffffff3,%r15d
lea    0x5(%rbp),%rdx
cmp    %r11,%rdx
jae    161e <seek_forward+0x50e>
cmp    %r8,%rcx
jae    161e <seek_forward+0x50e>
movslq %r9d,%rcx
cmp    %rcx,%rdx
je     15b6 <seek_forward+0x4a6>
mov    0x14(%rdi,%rbp,4),%ecx
add    $0xffffffd0,%ecx
cmp    $0x9,%ecx
ja     15b6 <seek_forward+0x4a6>
mov    0x18(%rdi,%rbp,4),%ecx
add    $0xffffffd0,%ecx
cmp    $0x9,%ecx
ja     15b6 <seek_forward+0x4a6>
lea    0x6(%rbp),%r9
add    $0xfffffff3,%r15d
lea    0x6(%rbp),%rcx
cmp    %r11,%rcx
jae    161e <seek_forward+0x50e>
cmp    %r8,%rdx
jae    161e <seek_forward+0x50e>
movslq %r9d,%rdx
cmp    %rdx,%rcx
je     15eb <seek_forward+0x4db>
mov    0x18(%rdi,%rbp,4),%edx
add    $0xffffffd0,%edx
cmp    $0x9,%edx
ja     15eb <seek_forward+0x4db>
mov    0x1c(%rdi,%rbp,4),%edx
add    $0xffffffd0,%edx
cmp    $0x9,%edx
ja     15eb <seek_forward+0x4db>
add    $0xfffffff3,%r15d
mov    %r8d,%r9d
cmp    %r11,%r8
jae    161e <seek_forward+0x50e>
cmp    %r8,%rcx
jae    161e <seek_forward+0x50e>
movslq %r9d,%rax
cmp    %rax,%r8
je     161e <seek_forward+0x50e>
mov    0x1c(%rdi,%rbp,4),%eax
add    $0xffffffd0,%eax
cmp    $0x9,%eax
ja     161e <seek_forward+0x50e>
mov    0x20(%rdi,%rbp,4),%eax
add    $0xffffffd0,%eax
lea    -0xd(%r15),%ecx
cmp    $0xa,%eax
cmovae %r15d,%ecx
mov    %ecx,%r15d
mov    %rbp,%rdx
call   1030 <number_lat@plt>
mov    0x10(%rsp),%rdx
add    %eax,%edx
xor    %eax,%eax
mov    (%rsp),%esi
cmp    %r15d,%esi
cmovg  %r15d,%esi
setg   %al
or     $0x6,%eax
cmp    %esi,%r13d
mov    $0x4,%ecx
cmovg  %eax,%ecx
cmovle %r13d,%esi
cmp    %esi,%r14d
mov    $0x3,%eax
cmovg  %ecx,%eax
cmovle %r14d,%esi
cmp    %esi,%r12d
mov    $0x2,%ecx
cmovg  %eax,%ecx
cmovle %r12d,%esi
cmp    %edx,%esi
mov    $0x1,%eax
cmovl  %ecx,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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