void wspr(char *call, char *l, char *dbm, unsigned char *symbols) {
  char *c, buf[16];
  strncpy(buf, call, 16);
  c = buf;
  strupr(c);
  unsigned long ng, nadd = 0;
  if (strchr(c, '/')) {
    nadd = 2;
    int i = strchr(c, '/') - c;
    int n = strlen(c) - i - 1;
    c[i] = '\0';
    if (n == 1)
      ng = 60000 - 32768 +
           (c[i + 1] >= '0' && c[i + 1] <= '9' ? c[i + 1] - '0'
            : c[i + 1] == ' '                  ? 38
                                               : c[i + 1] - 'A' + 10);
    if (n == 2)
      ng = 60000 + 26 + 10 * (c[i + 1] - '0') + (c[i + 2] - '0');
    if (n > 2) {
      ng = (i < 3                                ? 36
            : c[i - 3] >= '0' && c[i - 3] <= '9' ? c[i - 3] - '0'
                                                 : c[i - 3] - 'A' + 10);
      ng = 37 * ng + (i < 2 ? 36
                      : c[i - 2] >= '0' && c[i - 2] <= '9'
                          ? c[i - 2] - '0'
                          : c[i - 2] - 'A' + 10);
      ng = 37 * ng + (i < 1 ? 36
                      : c[i - 1] >= '0' && c[i - 1] <= '9'
                          ? c[i - 1] - '0'
                          : c[i - 1] - 'A' + 10);
      if (ng < 32768)
        nadd = 1;
      else
        ng = ng - 32768;
      c = c + i + 1;
    }
  }
  int i = (isdigit(c[2]) ? 2 : isdigit(c[1]) ? 1 : 0);
  int n = strlen(c) - i - 1;
  unsigned long n1;
  n1 = (i < 2                                ? 36
        : c[i - 2] >= '0' && c[i - 2] <= '9' ? c[i - 2] - '0'
                                             : c[i - 2] - 'A' + 10);
  n1 = 36 * n1 + (i < 1                                ? 36
                  : c[i - 1] >= '0' && c[i - 1] <= '9' ? c[i - 1] - '0'
                                                       : c[i - 1] - 'A' + 10);
  n1 = 10 * n1 + c[i] - '0';
  n1 = 27 * n1 + (n < 1 ? 26 : c[i + 1] - 'A');
  n1 = 27 * n1 + (n < 2 ? 26 : c[i + 2] - 'A');
  n1 = 27 * n1 + (n < 3 ? 26 : c[i + 3] - 'A');
  if (!nadd) {
    strupr(l);
    ng = 180 * (179 - 10 * (l[0] - 'A') - (l[2] - '0')) + 10 * (l[1] - 'A') +
         (l[3] - '0');
  }
  int p = atoi(dbm);
  int corr[] = {0, -1, 1, 0, -1, 2, 1, 0, -1, 1};
  p = p > 60 ? 60 : p < 0 ? 0 : p + corr[p % 10];
  unsigned long n2 = (ng << 7) | (p + 64 + nadd);
  char packed[11] = {n1 >> 20,
                     n1 >> 12,
                     n1 >> 4,
                     ((n1 & 0x0f) << 4) | ((n2 >> 18) & 0x0f),
                     n2 >> 10,
                     n2 >> 2,
                     (n2 & 0x03) << 6,
                     0,
                     0,
                     0,
                     0};
  int k = 0;
  int j, s;
  int nstate = 0;
  unsigned char symbol[176];
  for (j = 0; j != sizeof(packed); j++) {
    for (i = 7; i >= 0; i--) {
      unsigned long poly[2] = {0xf2d05351L, 0xe4613c47L};
      nstate = (nstate << 1) | ((packed[j] >> i) & 1);
      for (s = 0; s != 2; s++) {
        unsigned long n = nstate & poly[s];
        int even = 0;
        while (n) {
          even = 1 - even;
          n = n & (n - 1);
        }
        symbol[k] = even;
        k++;
      }
    }
  }
  const unsigned char npr3[162] = {
      1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1,
      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0,
      1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0,
      1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0,
      0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1,
      0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0,
      0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0};
  for (i = 0; i != 162; i++) {
    unsigned char j0;
    p = -1;
    for (k = 0; p != i; k++) {
      for (j = 0; j != 8; j++)
        j0 = ((k >> j) & 1) | (j0 << 1);
      if (j0 < 162)
        p++;
    }
    symbols[j0] = npr3[j0] | symbol[i] << 1;
  }
}


x86 assembly (clang, -O0):
<wspr>:
push   %rbp
mov    %rsp,%rbp
sub    $0x2d0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
lea    -0x40(%rbp),%rdi
mov    -0x8(%rbp),%rsi
mov    $0x10,%edx
call   1030 <strncpy@plt>
lea    -0x40(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rdi
mov    $0x0,%al
call   1080 <strupr@plt>
movq   $0x0,-0x50(%rbp)
mov    -0x28(%rbp),%rdi
mov    $0x2f,%esi
call   1060 <strchr@plt>
cmp    $0x0,%rax
je     1575 <wspr+0x405>
movq   $0x2,-0x50(%rbp)
mov    -0x28(%rbp),%rdi
mov    $0x2f,%esi
call   1060 <strchr@plt>
mov    -0x28(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x54(%rbp)
mov    -0x28(%rbp),%rdi
call   1050 <strlen@plt>
movslq -0x54(%rbp),%rcx
sub    %rcx,%rax
sub    $0x1,%rax
mov    %eax,-0x58(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
cmpl   $0x1,-0x58(%rbp)
jne    12d4 <wspr+0x164>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     1270 <wspr+0x100>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     1270 <wspr+0x100>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x248(%rbp)
jmp    12c3 <wspr+0x153>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    129a <wspr+0x12a>
mov    $0x26,%eax
mov    %eax,-0x24c(%rbp)
jmp    12b7 <wspr+0x147>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x24c(%rbp)
mov    -0x24c(%rbp),%eax
mov    %eax,-0x248(%rbp)
mov    -0x248(%rbp),%eax
add    $0x6a60,%eax
cltq
mov    %rax,-0x48(%rbp)
cmpl   $0x2,-0x58(%rbp)
jne    1316 <wspr+0x1a6>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
imul   $0xa,%eax,%eax
add    $0xea7a,%eax
mov    -0x28(%rbp),%rcx
mov    -0x54(%rbp),%edx
add    $0x2,%edx
movslq %edx,%rdx
movsbl (%rcx,%rdx,1),%ecx
sub    $0x30,%ecx
add    %ecx,%eax
cltq
mov    %rax,-0x48(%rbp)
cmpl   $0x2,-0x58(%rbp)
jle    1570 <wspr+0x400>
cmpl   $0x3,-0x54(%rbp)
jge    133a <wspr+0x1ca>
mov    $0x24,%eax
mov    %eax,-0x250(%rbp)
jmp    13b6 <wspr+0x246>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     138d <wspr+0x21d>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     138d <wspr+0x21d>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x254(%rbp)
jmp    13aa <wspr+0x23a>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x254(%rbp)
mov    -0x254(%rbp),%eax
mov    %eax,-0x250(%rbp)
mov    -0x250(%rbp),%eax
cltq
mov    %rax,-0x48(%rbp)
imul   $0x25,-0x48(%rbp),%rax
mov    %rax,-0x260(%rbp)
cmpl   $0x2,-0x54(%rbp)
jge    13e8 <wspr+0x278>
mov    $0x24,%eax
mov    %eax,-0x264(%rbp)
jmp    1464 <wspr+0x2f4>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     143b <wspr+0x2cb>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     143b <wspr+0x2cb>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x268(%rbp)
jmp    1458 <wspr+0x2e8>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x268(%rbp)
mov    -0x268(%rbp),%eax
mov    %eax,-0x264(%rbp)
mov    -0x260(%rbp),%rax
mov    -0x264(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x48(%rbp)
imul   $0x25,-0x48(%rbp),%rax
mov    %rax,-0x270(%rbp)
cmpl   $0x1,-0x54(%rbp)
jge    14a1 <wspr+0x331>
mov    $0x24,%eax
mov    %eax,-0x274(%rbp)
jmp    151d <wspr+0x3ad>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     14f4 <wspr+0x384>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     14f4 <wspr+0x384>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x278(%rbp)
jmp    1511 <wspr+0x3a1>
mov    -0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x278(%rbp)
mov    -0x278(%rbp),%eax
mov    %eax,-0x274(%rbp)
mov    -0x270(%rbp),%rax
mov    -0x274(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x48(%rbp)
cmpq   $0x8000,-0x48(%rbp)
jae    154f <wspr+0x3df>
movq   $0x1,-0x50(%rbp)
jmp    155d <wspr+0x3ed>
mov    -0x48(%rbp),%rax
sub    $0x8000,%rax
mov    %rax,-0x48(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
add    %rcx,%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1575 <wspr+0x405>
mov    -0x28(%rbp),%rax
movsbl 0x2(%rax),%edi
call   1040 <isdigit@plt>
cmp    $0x0,%eax
je     159b <wspr+0x42b>
mov    $0x2,%eax
mov    %eax,-0x27c(%rbp)
jmp    15bd <wspr+0x44d>
mov    -0x28(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1040 <isdigit@plt>
mov    %eax,%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %eax,-0x27c(%rbp)
mov    -0x27c(%rbp),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x28(%rbp),%rdi
call   1050 <strlen@plt>
movslq -0x5c(%rbp),%rcx
sub    %rcx,%rax
sub    $0x1,%rax
mov    %eax,-0x60(%rbp)
cmpl   $0x2,-0x5c(%rbp)
jge    15f7 <wspr+0x487>
mov    $0x24,%eax
mov    %eax,-0x280(%rbp)
jmp    1673 <wspr+0x503>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     164a <wspr+0x4da>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     164a <wspr+0x4da>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x284(%rbp)
jmp    1667 <wspr+0x4f7>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x284(%rbp)
mov    -0x284(%rbp),%eax
mov    %eax,-0x280(%rbp)
mov    -0x280(%rbp),%eax
cltq
mov    %rax,-0x68(%rbp)
imul   $0x24,-0x68(%rbp),%rax
mov    %rax,-0x290(%rbp)
cmpl   $0x1,-0x5c(%rbp)
jge    16a5 <wspr+0x535>
mov    $0x24,%eax
mov    %eax,-0x294(%rbp)
jmp    1721 <wspr+0x5b1>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     16f8 <wspr+0x588>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     16f8 <wspr+0x588>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x298(%rbp)
jmp    1715 <wspr+0x5a5>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x298(%rbp)
mov    -0x298(%rbp),%eax
mov    %eax,-0x294(%rbp)
mov    -0x290(%rbp),%rax
mov    -0x294(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x68(%rbp)
imul   $0xa,-0x68(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq -0x5c(%rbp),%rdx
movsbq (%rcx,%rdx,1),%rcx
add    %rcx,%rax
sub    $0x30,%rax
mov    %rax,-0x68(%rbp)
imul   $0x1b,-0x68(%rbp),%rax
mov    %rax,-0x2a0(%rbp)
cmpl   $0x1,-0x60(%rbp)
jge    177b <wspr+0x60b>
mov    $0x1a,%eax
mov    %eax,-0x2a4(%rbp)
jmp    1795 <wspr+0x625>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
mov    %eax,-0x2a4(%rbp)
mov    -0x2a0(%rbp),%rax
mov    -0x2a4(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x68(%rbp)
imul   $0x1b,-0x68(%rbp),%rax
mov    %rax,-0x2b0(%rbp)
cmpl   $0x2,-0x60(%rbp)
jge    17d2 <wspr+0x662>
mov    $0x1a,%eax
mov    %eax,-0x2b4(%rbp)
jmp    17ec <wspr+0x67c>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
mov    %eax,-0x2b4(%rbp)
mov    -0x2b0(%rbp),%rax
mov    -0x2b4(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x68(%rbp)
imul   $0x1b,-0x68(%rbp),%rax
mov    %rax,-0x2c0(%rbp)
cmpl   $0x3,-0x60(%rbp)
jge    1829 <wspr+0x6b9>
mov    $0x1a,%eax
mov    %eax,-0x2c4(%rbp)
jmp    1843 <wspr+0x6d3>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
mov    %eax,-0x2c4(%rbp)
mov    -0x2c0(%rbp),%rax
mov    -0x2c4(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x68(%rbp)
cmpq   $0x0,-0x50(%rbp)
jne    18ba <wspr+0x74a>
mov    -0x10(%rbp),%rdi
mov    $0x0,%al
call   1080 <strupr@plt>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
sub    $0x41,%eax
imul   $0xa,%eax,%ecx
mov    $0xb3,%eax
sub    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x2(%rcx),%ecx
sub    $0x30,%ecx
sub    %ecx,%eax
imul   $0xb4,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rcx),%ecx
sub    $0x41,%ecx
imul   $0xa,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x3(%rcx),%ecx
sub    $0x30,%ecx
add    %ecx,%eax
cltq
mov    %rax,-0x48(%rbp)
mov    -0x18(%rbp),%rdi
mov    $0x0,%al
call   1090 <atoi@plt>
mov    %eax,-0x6c(%rbp)
lea    -0xa0(%rbp),%rdi
lea    0x72a(%rip),%rsi
mov    $0x28,%edx
call   1070 <memcpy@plt>
cmpl   $0x3c,-0x6c(%rbp)
jle    18fa <wspr+0x78a>
mov    $0x3c,%eax
mov    %eax,-0x2c8(%rbp)
jmp    1947 <wspr+0x7d7>
cmpl   $0x0,-0x6c(%rbp)
jge    1911 <wspr+0x7a1>
xor    %eax,%eax
mov    %eax,-0x2cc(%rbp)
jmp    193b <wspr+0x7cb>
mov    -0x6c(%rbp),%eax
mov    %eax,-0x2d0(%rbp)
mov    -0x6c(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    -0x2d0(%rbp),%eax
movslq %edx,%rcx
add    -0xa0(%rbp,%rcx,4),%eax
mov    %eax,-0x2cc(%rbp)
mov    -0x2cc(%rbp),%eax
mov    %eax,-0x2c8(%rbp)
mov    -0x2c8(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x48(%rbp),%rax
shl    $0x7,%rax
mov    -0x6c(%rbp),%ecx
add    $0x40,%ecx
movslq %ecx,%rcx
add    -0x50(%rbp),%rcx
or     %rcx,%rax
mov    %rax,-0xa8(%rbp)
mov    -0x68(%rbp),%rax
shr    $0x14,%rax
mov    %al,-0xb3(%rbp)
mov    -0x68(%rbp),%rax
shr    $0xc,%rax
mov    %al,-0xb2(%rbp)
mov    -0x68(%rbp),%rax
shr    $0x4,%rax
mov    %al,-0xb1(%rbp)
mov    -0x68(%rbp),%rax
and    $0xf,%rax
shl    $0x4,%rax
mov    -0xa8(%rbp),%rcx
shr    $0x12,%rcx
and    $0xf,%rcx
or     %rcx,%rax
mov    %al,-0xb0(%rbp)
mov    -0xa8(%rbp),%rax
shr    $0xa,%rax
mov    %al,-0xaf(%rbp)
mov    -0xa8(%rbp),%rax
shr    $0x2,%rax
mov    %al,-0xae(%rbp)
mov    -0xa8(%rbp),%rax
and    $0x3,%rax
shl    $0x6,%rax
mov    %al,-0xad(%rbp)
movb   $0x0,-0xac(%rbp)
movb   $0x0,-0xab(%rbp)
movb   $0x0,-0xaa(%rbp)
movb   $0x0,-0xa9(%rbp)
movl   $0x0,-0xb8(%rbp)
movl   $0x0,-0xc4(%rbp)
movl   $0x0,-0xbc(%rbp)
movslq -0xbc(%rbp),%rax
cmp    $0xb,%rax
je     1b79 <wspr+0xa09>
movl   $0x7,-0x5c(%rbp)
cmpl   $0x0,-0x5c(%rbp)
jl     1b60 <wspr+0x9f0>
mov    0x689(%rip),%rax
mov    %rax,-0x190(%rbp)
mov    0x683(%rip),%rax
mov    %rax,-0x188(%rbp)
mov    -0xc4(%rbp),%eax
shl    $0x1,%eax
movslq -0xbc(%rbp),%rcx
movsbl -0xb3(%rbp,%rcx,1),%edx
ff
mov    -0x5c(%rbp),%ecx
sar    %cl,%edx
mov    %edx,%ecx
and    $0x1,%ecx
or     %ecx,%eax
mov    %eax,-0xc4(%rbp)
movl   $0x0,-0xc0(%rbp)
cmpl   $0x2,-0xc0(%rbp)
je     1b4d <wspr+0x9dd>
movslq -0xc4(%rbp),%rax
movslq -0xc0(%rbp),%rcx
and    -0x190(%rbp,%rcx,8),%rax
ff
mov    %rax,-0x198(%rbp)
movl   $0x0,-0x19c(%rbp)
cmpq   $0x0,-0x198(%rbp)
je     1b14 <wspr+0x9a4>
mov    $0x1,%eax
sub    -0x19c(%rbp),%eax
mov    %eax,-0x19c(%rbp)
mov    -0x198(%rbp),%rax
mov    -0x198(%rbp),%rcx
sub    $0x1,%rcx
and    %rcx,%rax
mov    %rax,-0x198(%rbp)
jmp    1ad4 <wspr+0x964>
mov    -0x19c(%rbp),%eax
mov    %al,%cl
movslq -0xb8(%rbp),%rax
mov    %cl,-0x180(%rbp,%rax,1)
mov    -0xb8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xb8(%rbp)
mov    -0xc0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc0(%rbp)
jmp    1aa0 <wspr+0x930>
jmp    1b52 <wspr+0x9e2>
mov    -0x5c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x5c(%rbp)
jmp    1a46 <wspr+0x8d6>
jmp    1b65 <wspr+0x9f5>
mov    -0xbc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xbc(%rbp)
jmp    1a2e <wspr+0x8be>
lea    -0x240(%rbp),%rdi
lea    0x4a9(%rip),%rsi
mov    $0xa2,%edx
call   1070 <memcpy@plt>
movl   $0x0,-0x5c(%rbp)
cmpl   $0xa2,-0x5c(%rbp)
je     1c82 <wspr+0xb12>
movl   $0xffffffff,-0x6c(%rbp)
movl   $0x0,-0xb8(%rbp)
mov    -0x6c(%rbp),%eax
cmp    -0x5c(%rbp),%eax
je     1c44 <wspr+0xad4>
movl   $0x0,-0xbc(%rbp)
cmpl   $0x8,-0xbc(%rbp)
je     1c10 <wspr+0xaa0>
mov    -0xb8(%rbp),%eax
mov    -0xbc(%rbp),%ecx
sar    %cl,%eax
and    $0x1,%eax
movzbl -0x241(%rbp),%ecx
shl    $0x1,%ecx
or     %ecx,%eax
mov    %al,-0x241(%rbp)
mov    -0xbc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xbc(%rbp)
jmp    1bcc <wspr+0xa5c>
movzbl -0x241(%rbp),%eax
cmp    $0xa2,%eax
jge    1c2b <wspr+0xabb>
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    1c30 <wspr+0xac0>
mov    -0xb8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xb8(%rbp)
jmp    1bb6 <wspr+0xa46>
movzbl -0x241(%rbp),%eax
movzbl -0x240(%rbp,%rax,1),%eax
ff
movslq -0x5c(%rbp),%rcx
movzbl -0x180(%rbp,%rcx,1),%ecx
ff
shl    $0x1,%ecx
or     %ecx,%eax
mov    %al,%dl
mov    -0x20(%rbp),%rax
movzbl -0x241(%rbp),%ecx
mov    %dl,(%rax,%rcx,1)
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    1b98 <wspr+0xa28>
add    $0x2d0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<wspr>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xf8,%rsp
mov    %rcx,%r15
mov    %rdx,%rbx
mov    %rsi,0x30(%rsp)
mov    %rdi,%rsi
lea    0x20(%rsp),%r12
mov    $0x10,%edx
mov    %r12,%rdi
call   1030 <strncpy@plt>
mov    %r12,%rdi
xor    %eax,%eax
call   1060 <strupr@plt>
mov    %r12,%rdi
mov    $0x2f,%esi
call   1050 <strchr@plt>
test   %rax,%rax
mov    %rbx,0x38(%rsp)
je     1214 <wspr+0xc4>
mov    %rax,%r13
lea    0x20(%rsp),%r12
sub    %r12,%r13
mov    %r12,%rdi
call   1040 <strlen@plt>
mov    %r13,%rcx
shl    $0x20,%rcx
movslq %r13d,%rdx
mov    %edx,%esi
not    %esi
add    %esi,%eax
movb   $0x0,0x20(%rsp,%rdx,1)
cmp    $0x2,%eax
je     121b <wspr+0xcb>
cmp    $0x1,%eax
jne    1264 <wspr+0x114>
movabs $0x100000000,%rax
add    %rax,%rcx
sar    $0x20,%rcx
movsbl 0x20(%rsp,%rcx,1),%eax
lea    -0x30(%rax),%ecx
lea    -0x30(%rax),%edx
lea    -0x37(%rax),%esi
cmp    $0x20,%eax
mov    $0x26,%r13d
cmovne %esi,%r13d
cmp    $0xa,%cl
cmovb  %edx,%r13d
add    $0x6a60,%r13d
jmp    1258 <wspr+0x108>
xor    %eax,%eax
jmp    12b0 <wspr+0x160>
movabs $0x100000000,%rax
add    %rcx,%rax
sar    $0x20,%rax
movsbq 0x20(%rsp,%rax,1),%rax
lea    (%rax,%rax,4),%rax
movabs $0x200000000,%rdx
add    %rcx,%rdx
sar    $0x20,%rdx
movsbq 0x20(%rsp,%rdx,1),%rcx
lea    (%rcx,%rax,2),%r13
add    $0xe86a,%r13
mov    $0x2,%eax
mov    %rax,0x8(%rsp)
jmp    12b5 <wspr+0x165>
cmp    $0x3,%eax
jl     12ab <wspr+0x15b>
lea    (%rsp,%rdx,1),%r12
add    $0x20,%r12
movabs $0x100000000,%rax
cmp    $0x3,%edx
jge    1629 <wspr+0x4d9>
mov    $0x534,%ecx
cmp    $0x2,%r13d
je     164a <wspr+0x4fa>
mov    $0xc5b8,%ecx
test   %r13d,%r13d
jg     166e <wspr+0x51e>
mov    $0x24,%eax
jmp    1689 <wspr+0x539>
mov    $0x2,%eax
mov    %rax,0x8(%rsp)
movsbl 0x2(%r12),%eax
add    $0xffffffd0,%eax
mov    $0x2,%ebx
cmp    $0xa,%eax
jb     12d9 <wspr+0x189>
movsbl 0x1(%r12),%eax
add    $0xffffffd0,%eax
xor    %ebx,%ebx
cmp    $0xa,%eax
setb   %bl
mov    %r12,%rdi
call   1040 <strlen@plt>
mov    %ebx,%ecx
mov    %ebx,%edx
not    %edx
add    %edx,%eax
cmp    $0x2,%ebx
jae    1304 <wspr+0x1b4>
mov    $0x510,%edx
test   %rcx,%rcx
jne    1324 <wspr+0x1d4>
mov    $0x24,%esi
mov    0x8(%rsp),%rbx
jmp    1344 <wspr+0x1f4>
movsbq (%r12),%rdx
lea    -0x30(%rdx),%esi
lea    -0x37(%rdx),%rdi
add    $0xffffffffffffffd0,%rdx
cmp    $0xa,%sil
cmovae %rdi,%rdx
shl    $0x2,%rdx
lea    (%rdx,%rdx,8),%rdx
mov    0x8(%rsp),%rbx
lea    -0x1(%rcx),%esi
movsbq (%r12,%rsi,1),%rsi
lea    -0x30(%rsi),%edi
cmp    $0x9,%dil
ja     1340 <wspr+0x1f0>
add    $0xffffffffffffffd0,%rsi
jmp    1344 <wspr+0x1f4>
add    $0xffffffffffffffc9,%rsi
add    %rsi,%rdx
lea    (%rdx,%rdx,4),%rdx
movsbq (%r12,%rcx,1),%rsi
lea    (%rsi,%rdx,2),%rdx
test   %eax,%eax
jle    1383 <wspr+0x233>
lea    (%rdx,%rdx,8),%rdx
lea    (%rdx,%rdx,2),%rdx
movsbq 0x1(%rcx,%r12,1),%rsi
add    %rdx,%rsi
lea    (%rsi,%rsi,8),%rdx
cmp    $0x1,%eax
jne    1433 <wspr+0x2e3>
lea    (%rdx,%rdx,2),%rdx
add    $0xffffffffffff7075,%rdx
jmp    1391 <wspr+0x241>
imul   $0x2d9,%rdx,%rdx
add    $0xffffffffffff7a0e,%rdx
add    $0x1a,%rdx
mov    $0x1a,%r14d
lea    (%rdx,%rdx,8),%rax
lea    (%rax,%rax,2),%rbp
test   %rbx,%rbx
jne    13ea <wspr+0x29a>
mov    0x30(%rsp),%rbx
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <strupr@plt>
movsbl (%rbx),%eax
add    %eax,%eax
lea    (%rax,%rax,4),%eax
movsbl 0x2(%rbx),%ecx
add    %eax,%ecx
neg    %ecx
imul   $0xb4,%ecx,%eax
movsbl 0x1(%rbx),%ecx
lea    (%rcx,%rcx,4),%ecx
lea    (%rax,%rcx,2),%eax
movsbl 0x3(%rbx),%ecx
mov    0x8(%rsp),%rbx
add    %ecx,%eax
add    $0x265ea,%eax
movslq %eax,%r13
add    %r14,%rbp
xor    %r12d,%r12d
mov    0x38(%rsp),%rdi
xor    %eax,%eax
call   1070 <atoi@plt>
mov    $0x7c,%edx
cmp    $0x3c,%eax
jg     146a <wspr+0x31a>
test   %eax,%eax
js     1465 <wspr+0x315>
movzbl %al,%ecx
imul   $0xcd,%ecx,%edx
shr    $0xa,%edx
and    $0xfffffffe,%edx
lea    (%rdx,%rdx,4),%edx
sub    %dl,%cl
movzbl %cl,%ecx
lea    0xbd8(%rip),%rdx
mov    (%rdx,%rcx,4),%ecx
lea    (%rax,%rcx,1),%edx
add    $0x40,%edx
jmp    146a <wspr+0x31a>
lea    (%rdx,%rdx,2),%rdx
movsbq 0x2(%rcx,%r12,1),%rsi
add    %rsi,%rdx
add    $0xffffffffffff7034,%rdx
mov    $0x1a,%r14d
cmp    $0x3,%eax
jb     139b <wspr+0x24b>
movsbq 0x3(%rcx,%r12,1),%r14
add    $0xffffffffffffffbf,%r14
jmp    139b <wspr+0x24b>
mov    $0x40,%edx
shl    $0x7,%r13
add    %rbx,%rdx
or     %rdx,%r13
mov    %rbp,%rcx
shr    $0x14,%rcx
mov    %cl,0x15(%rsp)
mov    %rbp,%rax
shr    $0xc,%rax
mov    %al,0x16(%rsp)
mov    %rbp,%rax
shr    $0x4,%rax
mov    %al,0x17(%rsp)
shl    $0x4,%ebp
mov    %r13d,%eax
shr    $0x12,%eax
and    $0xf,%eax
or     %ebp,%eax
mov    %al,0x18(%rsp)
mov    %r13,%rax
shr    $0xa,%rax
mov    %al,0x19(%rsp)
shr    $0x2,%r13
mov    %r13b,0x1a(%rsp)
shl    $0x6,%dl
mov    %dl,0x1b(%rsp)
movl   $0x0,0x1c(%rsp)
mov    $0xf2d05351,%r9d
mov    $0xe4613c47,%r10d
xor    %r8d,%r8d
xor    %edi,%edi
nopl   0x0(%rax,%rax,1)
movsbl %cl,%r11d
mov    $0x7,%ecx
jmp    14fe <wspr+0x3ae>
nopl   0x0(%rax,%rax,1)
mov    %sil,0x41(%rsp,%rdi,1)
add    $0x2,%rdi
sub    $0x1,%ecx
jb     1570 <wspr+0x420>
mov    %r11d,%edx
shr    %cl,%edx
and    $0x1,%edx
lea    (%rdx,%r12,2),%r12d
xor    %esi,%esi
mov    %r12,%rbp
mov    $0x0,%ebx
and    %r9,%rbp
je     1532 <wspr+0x3e2>
xor    %edx,%edx
nopl   0x0(%rax,%rax,1)
mov    $0x1,%ebx
sub    %edx,%ebx
lea    -0x1(%rbp),%rax
mov    %ebx,%edx
and    %rax,%rbp
jne    1520 <wspr+0x3d0>
movslq %edi,%rdi
mov    %bl,0x40(%rsp,%rdi,1)
mov    %r12,%rbx
and    %r10,%rbx
je     14f0 <wspr+0x3a0>
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    $0x1,%esi
sub    %edx,%esi
lea    -0x1(%rbx),%rax
mov    %esi,%edx
and    %rax,%rbx
jne    1550 <wspr+0x400>
jmp    14f0 <wspr+0x3a0>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%r8
cmp    $0xb,%r8
je     1584 <wspr+0x434>
mov    0x15(%rsp,%r8,1),%cl
jmp    14e0 <wspr+0x390>
xor    %eax,%eax
lea    0xaa3(%rip),%rdi
nopl   (%rax)
mov    $0xffffffff,%esi
xor    %edx,%edx
nopw   0x0(%rax,%rax,1)
mov    %edx,%ebx
rol    $0x4,%bl
mov    %ebx,%ecx
and    $0x33,%cl
shl    $0x2,%cl
shr    $0x2,%bl
and    $0x33,%bl
or     %cl,%bl
mov    %ebx,%ecx
and    $0x55,%cl
add    %cl,%cl
shr    %bl
and    $0x54,%bl
or     %cl,%bl
shr    %bl
cmp    $0x51,%bl
adc    $0x0,%esi
add    $0x1,%edx
cmp    %rsi,%rax
jne    15a0 <wspr+0x450>
add    $0xff,%dl
rol    $0x4,%dl
mov    %edx,%ecx
and    $0x33,%cl
shl    $0x2,%cl
shr    $0x2,%dl
and    $0x33,%dl
or     %cl,%dl
mov    %edx,%ecx
and    $0x55,%cl
add    %cl,%cl
shr    %dl
and    $0x55,%dl
or     %cl,%dl
movzbl %dl,%ecx
mov    0x40(%rsp,%rax,1),%dl
add    %dl,%dl
or     (%rcx,%rdi,1),%dl
mov    %dl,(%r15,%rcx,1)
add    $0x1,%rax
cmp    $0xa2,%rax
jne    1590 <wspr+0x440>
add    $0xf8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
lea    (%rax,%r13,1),%ecx
add    $0xfffffffd,%ecx
movsbl 0x20(%rsp,%rcx,1),%ecx
lea    -0x30(%rcx),%edx
lea    -0x37(%rcx),%esi
add    $0xffffffd0,%ecx
cmp    $0xa,%dl
cmovae %esi,%ecx
lea    (%rcx,%rcx,8),%edx
lea    (%rcx,%rdx,4),%ecx
lea    (%rax,%r13,1),%edx
add    $0xfffffffe,%edx
movsbl 0x20(%rsp,%rdx,1),%edx
lea    -0x30(%rdx),%esi
cmp    $0xa,%sil
lea    -0x30(%rcx,%rdx,1),%esi
lea    -0x37(%rcx,%rdx,1),%ecx
cmovb  %esi,%ecx
lea    (%rcx,%rcx,8),%edx
lea    (%rcx,%rdx,4),%ecx
add    %r13d,%eax
add    $0xffffffff,%eax
movsbl 0x20(%rsp,%rax,1),%eax
lea    -0x30(%rax),%edx
cmp    $0x9,%dl
ja     1686 <wspr+0x536>
add    $0xffffffd0,%eax
jmp    1689 <wspr+0x539>
add    $0xffffffc9,%eax
add    %eax,%ecx
movslq %ecx,%rax
lea    -0x8000(%rax),%r13
cmp    $0x8000,%eax
mov    $0x2,%ecx
sbb    $0x0,%rcx
mov    %rcx,0x8(%rsp)
cmp    $0x8000,%eax
cmovb  %rax,%r13
add    $0x1,%r12
jmp    12b5 <wspr+0x165>

LLVM IR (-O0):
@__const.wspr.corr = [10 x i32] [i32 0, i32 -1, i32 1, i32 0, i32 -1, i32 2, i32 1, i32 0, i32 -1, i32 1]
@__const.wspr.poly = [2 x i64] [i64 4073739089, i64 3831577671]
@__const.wspr.npr3 = [162 x i8] c"\01\01\00\00\00\00\00\00\01\00\00\00\01\01\01\00\00\00\01\00\00\01\00\01\01\01\01\00\00\00\00\00\00\00\01\00\00\01\00\01\00\00\00\00\00\00\01\00\01\01\00\00\01\01\00\01\00\00\00\01\01\00\01\00\00\00\00\01\01\00\01\00\01\00\01\00\01\00\00\01\00\00\01\00\01\01\00\00\00\01\01\00\01\00\01\00\00\00\01\00\00\00\00\00\01\00\00\01\00\00\01\01\01\00\01\01\00\00\01\01\00\01\00\00\00\01\01\01\00\00\00\00\00\01\00\01\00\00\01\01\00\00\00\00\00\00\00\01\01\00\01\00\01\01\00\00\00\01\01\00\00\00"
define void @wspr(i8* %0, i8* %1, i8* %2, i8* %3) {
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i8*
%8 = alloca i8*
%9 = alloca i8*
%10 = alloca [16 x i8]
%11 = alloca i64
%12 = alloca i64
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i64
%18 = alloca i32
%19 = alloca [10 x i32]
%20 = alloca i64
%21 = alloca [11 x i8]
%22 = alloca i32
%23 = alloca i32
%24 = alloca i32
%25 = alloca i32
%26 = alloca [176 x i8]
%27 = alloca [2 x i64]
%28 = alloca i64
%29 = alloca i32
%30 = alloca [162 x i8]
%31 = alloca i8
store i8* %0, i8** %5
store i8* %1, i8** %6
store i8* %2, i8** %7
store i8* %3, i8** %8
%32 = getelementptr inbounds [16 x i8], [16 x i8]* %10, i64 0, i64 0
%33 = load i8*, i8** %5
%34 = call i8* @strncpy(i8* %32, i8* %33, i64 16)
%35 = getelementptr inbounds [16 x i8], [16 x i8]* %10, i64 0, i64 0
store i8* %35, i8** %9
%36 = load i8*, i8** %9
%37 = call i32 (i8*, ...) bitcast (i32 (...)* @strupr to i32 (i8*, ...)*)(i8* %36)
store i64 0, i64* %12
%38 = load i8*, i8** %9
%39 = call i8* @strchr(i8* %38, i32 47)
%40 = icmp ne i8* %39, null
br i1 %40, label %41, label %297
41: ; preds = %4
store i64 2, i64* %12
%42 = load i8*, i8** %9
%43 = call i8* @strchr(i8* %42, i32 47)
%44 = load i8*, i8** %9
%45 = ptrtoint i8* %43 to i64
%46 = ptrtoint i8* %44 to i64
%47 = sub i64 %45, %46
%48 = trunc i64 %47 to i32
store i32 %48, i32* %13
%49 = load i8*, i8** %9
%50 = call i64 @strlen(i8* %49)
%51 = load i32, i32* %13
%52 = sext i32 %51 to i64
%53 = sub i64 %50, %52
%54 = sub i64 %53, 1
%55 = trunc i64 %54 to i32
store i32 %55, i32* %14
%56 = load i8*, i8** %9
%57 = load i32, i32* %13
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds i8, i8* %56, i64 %58
store i8 0, i8* %59
%60 = load i32, i32* %14
%61 = icmp eq i32 %60, 1
br i1 %61, label %62, label %115
62: ; preds = %41
%63 = load i8*, i8** %9
%64 = load i32, i32* %13
%65 = add nsw i32 %64, 1
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds i8, i8* %63, i64 %66
%68 = load i8, i8* %67
%69 = sext i8 %68 to i32
%70 = icmp sge i32 %69, 48
br i1 %70, label %71, label %89
71: ; preds = %62
%72 = load i8*, i8** %9
%73 = load i32, i32* %13
%74 = add nsw i32 %73, 1
%75 = sext i32 %74 to i64
%76 = getelementptr inbounds i8, i8* %72, i64 %75
%77 = load i8, i8* %76
%78 = sext i8 %77 to i32
%79 = icmp sle i32 %78, 57
br i1 %79, label %80, label %89
80: ; preds = %71
%81 = load i8*, i8** %9
%82 = load i32, i32* %13
%83 = add nsw i32 %82, 1
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds i8, i8* %81, i64 %84
%86 = load i8, i8* %85
%87 = sext i8 %86 to i32
%88 = sub nsw i32 %87, 48
br label %111
89: ; preds = %71, %62
%90 = load i8*, i8** %9
%91 = load i32, i32* %13
%92 = add nsw i32 %91, 1
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds i8, i8* %90, i64 %93
%95 = load i8, i8* %94
%96 = sext i8 %95 to i32
%97 = icmp eq i32 %96, 32
br i1 %97, label %98, label %99
98: ; preds = %89
br label %109
99: ; preds = %89
%100 = load i8*, i8** %9
%101 = load i32, i32* %13
%102 = add nsw i32 %101, 1
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds i8, i8* %100, i64 %103
%105 = load i8, i8* %104
%106 = sext i8 %105 to i32
%107 = sub nsw i32 %106, 65
%108 = add nsw i32 %107, 10
br label %109
109: ; preds = %99, %98
%110 = phi i32 [ 38, %98 ], [ %108, %99 ]
br label %111
111: ; preds = %109, %80
%112 = phi i32 [ %88, %80 ], [ %110, %109 ]
%113 = add nsw i32 27232, %112
%114 = sext i32 %113 to i64
store i64 %114, i64* %11
br label %115
115: ; preds = %111, %41
%116 = load i32, i32* %14
%117 = icmp eq i32 %116, 2
br i1 %117, label %118, label %139
118: ; preds = %115
%119 = load i8*, i8** %9
%120 = load i32, i32* %13
%121 = add nsw i32 %120, 1
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds i8, i8* %119, i64 %122
%124 = load i8, i8* %123
%125 = sext i8 %124 to i32
%126 = sub nsw i32 %125, 48
%127 = mul nsw i32 10, %126
%128 = add nsw i32 60026, %127
%129 = load i8*, i8** %9
%130 = load i32, i32* %13
%131 = add nsw i32 %130, 2
%132 = sext i32 %131 to i64
%133 = getelementptr inbounds i8, i8* %129, i64 %132
%134 = load i8, i8* %133
%135 = sext i8 %134 to i32
%136 = sub nsw i32 %135, 48
%137 = add nsw i32 %128, %136
%138 = sext i32 %137 to i64
store i64 %138, i64* %11
br label %139
139: ; preds = %118, %115
%140 = load i32, i32* %14
%141 = icmp sgt i32 %140, 2
br i1 %141, label %142, label %296
142: ; preds = %139
%143 = load i32, i32* %13
%144 = icmp slt i32 %143, 3
br i1 %144, label %145, label %146
145: ; preds = %142
br label %185
146: ; preds = %142
%147 = load i8*, i8** %9
%148 = load i32, i32* %13
%149 = sub nsw i32 %148, 3
%150 = sext i32 %149 to i64
%151 = getelementptr inbounds i8, i8* %147, i64 %150
%152 = load i8, i8* %151
%153 = sext i8 %152 to i32
%154 = icmp sge i32 %153, 48
br i1 %154, label %155, label %173
155: ; preds = %146
%156 = load i8*, i8** %9
%157 = load i32, i32* %13
%158 = sub nsw i32 %157, 3
%159 = sext i32 %158 to i64
%160 = getelementptr inbounds i8, i8* %156, i64 %159
%161 = load i8, i8* %160
%162 = sext i8 %161 to i32
%163 = icmp sle i32 %162, 57
br i1 %163, label %164, label %173
164: ; preds = %155
%165 = load i8*, i8** %9
%166 = load i32, i32* %13
%167 = sub nsw i32 %166, 3
%168 = sext i32 %167 to i64
%169 = getelementptr inbounds i8, i8* %165, i64 %168
%170 = load i8, i8* %169
%171 = sext i8 %170 to i32
%172 = sub nsw i32 %171, 48
br label %183
173: ; preds = %155, %146
%174 = load i8*, i8** %9
%175 = load i32, i32* %13
%176 = sub nsw i32 %175, 3
%177 = sext i32 %176 to i64
%178 = getelementptr inbounds i8, i8* %174, i64 %177
%179 = load i8, i8* %178
%180 = sext i8 %179 to i32
%181 = sub nsw i32 %180, 65
%182 = add nsw i32 %181, 10
br label %183
183: ; preds = %173, %164
%184 = phi i32 [ %172, %164 ], [ %182, %173 ]
br label %185
185: ; preds = %183, %145
%186 = phi i32 [ 36, %145 ], [ %184, %183 ]
%187 = sext i32 %186 to i64
store i64 %187, i64* %11
%188 = load i64, i64* %11
%189 = mul i64 37, %188
%190 = load i32, i32* %13
%191 = icmp slt i32 %190, 2
br i1 %191, label %192, label %193
192: ; preds = %185
br label %232
193: ; preds = %185
%194 = load i8*, i8** %9
%195 = load i32, i32* %13
%196 = sub nsw i32 %195, 2
%197 = sext i32 %196 to i64
%198 = getelementptr inbounds i8, i8* %194, i64 %197
%199 = load i8, i8* %198
%200 = sext i8 %199 to i32
%201 = icmp sge i32 %200, 48
br i1 %201, label %202, label %220
202: ; preds = %193
%203 = load i8*, i8** %9
%204 = load i32, i32* %13
%205 = sub nsw i32 %204, 2
%206 = sext i32 %205 to i64
%207 = getelementptr inbounds i8, i8* %203, i64 %206
%208 = load i8, i8* %207
%209 = sext i8 %208 to i32
%210 = icmp sle i32 %209, 57
br i1 %210, label %211, label %220
211: ; preds = %202
%212 = load i8*, i8** %9
%213 = load i32, i32* %13
%214 = sub nsw i32 %213, 2
%215 = sext i32 %214 to i64
%216 = getelementptr inbounds i8, i8* %212, i64 %215
%217 = load i8, i8* %216
%218 = sext i8 %217 to i32
%219 = sub nsw i32 %218, 48
br label %230
220: ; preds = %202, %193
%221 = load i8*, i8** %9
%222 = load i32, i32* %13
%223 = sub nsw i32 %222, 2
%224 = sext i32 %223 to i64
%225 = getelementptr inbounds i8, i8* %221, i64 %224
%226 = load i8, i8* %225
%227 = sext i8 %226 to i32
%228 = sub nsw i32 %227, 65
%229 = add nsw i32 %228, 10
br label %230
230: ; preds = %220, %211
%231 = phi i32 [ %219, %211 ], [ %229, %220 ]
br label %232
232: ; preds = %230, %192
%233 = phi i32 [ 36, %192 ], [ %231, %230 ]
%234 = sext i32 %233 to i64
%235 = add i64 %189, %234
store i64 %235, i64* %11
%236 = load i64, i64* %11
%237 = mul i64 37, %236
%238 = load i32, i32* %13
%239 = icmp slt i32 %238, 1
br i1 %239, label %240, label %241
240: ; preds = %232
br label %280
241: ; preds = %232
%242 = load i8*, i8** %9
%243 = load i32, i32* %13
%244 = sub nsw i32 %243, 1
%245 = sext i32 %244 to i64
%246 = getelementptr inbounds i8, i8* %242, i64 %245
%247 = load i8, i8* %246
%248 = sext i8 %247 to i32
%249 = icmp sge i32 %248, 48
br i1 %249, label %250, label %268
250: ; preds = %241
%251 = load i8*, i8** %9
%252 = load i32, i32* %13
%253 = sub nsw i32 %252, 1
%254 = sext i32 %253 to i64
%255 = getelementptr inbounds i8, i8* %251, i64 %254
%256 = load i8, i8* %255
%257 = sext i8 %256 to i32
%258 = icmp sle i32 %257, 57
br i1 %258, label %259, label %268
259: ; preds = %250
%260 = load i8*, i8** %9
%261 = load i32, i32* %13
%262 = sub nsw i32 %261, 1
%263 = sext i32 %262 to i64
%264 = getelementptr inbounds i8, i8* %260, i64 %263
%265 = load i8, i8* %264
%266 = sext i8 %265 to i32
%267 = sub nsw i32 %266, 48
br label %278
268: ; preds = %250, %241
%269 = load i8*, i8** %9
%270 = load i32, i32* %13
%271 = sub nsw i32 %270, 1
%272 = sext i32 %271 to i64
%273 = getelementptr inbounds i8, i8* %269, i64 %272
%274 = load i8, i8* %273
%275 = sext i8 %274 to i32
%276 = sub nsw i32 %275, 65
%277 = add nsw i32 %276, 10
br label %278
278: ; preds = %268, %259
%279 = phi i32 [ %267, %259 ], [ %277, %268 ]
br label %280
280: ; preds = %278, %240
%281 = phi i32 [ 36, %240 ], [ %279, %278 ]
%282 = sext i32 %281 to i64
%283 = add i64 %237, %282
store i64 %283, i64* %11
%284 = load i64, i64* %11
%285 = icmp ult i64 %284, 32768
br i1 %285, label %286, label %287
286: ; preds = %280
store i64 1, i64* %12
br label %290
287: ; preds = %280
%288 = load i64, i64* %11
%289 = sub i64 %288, 32768
store i64 %289, i64* %11
br label %290
290: ; preds = %287, %286
%291 = load i8*, i8** %9
%292 = load i32, i32* %13
%293 = sext i32 %292 to i64
%294 = getelementptr inbounds i8, i8* %291, i64 %293
%295 = getelementptr inbounds i8, i8* %294, i64 1
store i8* %295, i8** %9
br label %296
296: ; preds = %290, %139
br label %297
297: ; preds = %296, %4
%298 = load i8*, i8** %9
%299 = getelementptr inbounds i8, i8* %298, i64 2
%300 = load i8, i8* %299
%301 = sext i8 %300 to i32
%302 = call i32 @isdigit(i32 %301)
%303 = icmp ne i32 %302, 0
br i1 %303, label %304, label %305
304: ; preds = %297
br label %314
305: ; preds = %297
%306 = load i8*, i8** %9
%307 = getelementptr inbounds i8, i8* %306, i64 1
%308 = load i8, i8* %307
%309 = sext i8 %308 to i32
%310 = call i32 @isdigit(i32 %309)
%311 = icmp ne i32 %310, 0
%312 = zext i1 %311 to i64
%313 = select i1 %311, i32 1, i32 0
br label %314
314: ; preds = %305, %304
%315 = phi i32 [ 2, %304 ], [ %313, %305 ]
store i32 %315, i32* %15
%316 = load i8*, i8** %9
%317 = call i64 @strlen(i8* %316)
%318 = load i32, i32* %15
%319 = sext i32 %318 to i64
%320 = sub i64 %317, %319
%321 = sub i64 %320, 1
%322 = trunc i64 %321 to i32
store i32 %322, i32* %16
%323 = load i32, i32* %15
%324 = icmp slt i32 %323, 2
br i1 %324, label %325, label %326
325: ; preds = %314
br label %365
326: ; preds = %314
%327 = load i8*, i8** %9
%328 = load i32, i32* %15
%329 = sub nsw i32 %328, 2
%330 = sext i32 %329 to i64
%331 = getelementptr inbounds i8, i8* %327, i64 %330
%332 = load i8, i8* %331
%333 = sext i8 %332 to i32
%334 = icmp sge i32 %333, 48
br i1 %334, label %335, label %353
335: ; preds = %326
%336 = load i8*, i8** %9
%337 = load i32, i32* %15
%338 = sub nsw i32 %337, 2
%339 = sext i32 %338 to i64
%340 = getelementptr inbounds i8, i8* %336, i64 %339
%341 = load i8, i8* %340
%342 = sext i8 %341 to i32
%343 = icmp sle i32 %342, 57
br i1 %343, label %344, label %353
344: ; preds = %335
%345 = load i8*, i8** %9
%346 = load i32, i32* %15
%347 = sub nsw i32 %346, 2
%348 = sext i32 %347 to i64
%349 = getelementptr inbounds i8, i8* %345, i64 %348
%350 = load i8, i8* %349
%351 = sext i8 %350 to i32
%352 = sub nsw i32 %351, 48
br label %363
353: ; preds = %335, %326
%354 = load i8*, i8** %9
%355 = load i32, i32* %15
%356 = sub nsw i32 %355, 2
%357 = sext i32 %356 to i64
%358 = getelementptr inbounds i8, i8* %354, i64 %357
%359 = load i8, i8* %358
%360 = sext i8 %359 to i32
%361 = sub nsw i32 %360, 65
%362 = add nsw i32 %361, 10
br label %363
363: ; preds = %353, %344
%364 = phi i32 [ %352, %344 ], [ %362, %353 ]
br label %365
365: ; preds = %363, %325
%366 = phi i32 [ 36, %325 ], [ %364, %363 ]
%367 = sext i32 %366 to i64
store i64 %367, i64* %17
%368 = load i64, i64* %17
%369 = mul i64 36, %368
%370 = load i32, i32* %15
%371 = icmp slt i32 %370, 1
br i1 %371, label %372, label %373
372: ; preds = %365
br label %412
373: ; preds = %365
%374 = load i8*, i8** %9
%375 = load i32, i32* %15
%376 = sub nsw i32 %375, 1
%377 = sext i32 %376 to i64
%378 = getelementptr inbounds i8, i8* %374, i64 %377
%379 = load i8, i8* %378
%380 = sext i8 %379 to i32
%381 = icmp sge i32 %380, 48
br i1 %381, label %382, label %400
382: ; preds = %373
%383 = load i8*, i8** %9
%384 = load i32, i32* %15
%385 = sub nsw i32 %384, 1
%386 = sext i32 %385 to i64
%387 = getelementptr inbounds i8, i8* %383, i64 %386
%388 = load i8, i8* %387
%389 = sext i8 %388 to i32
%390 = icmp sle i32 %389, 57
br i1 %390, label %391, label %400
391: ; preds = %382
%392 = load i8*, i8** %9
%393 = load i32, i32* %15
%394 = sub nsw i32 %393, 1
%395 = sext i32 %394 to i64
%396 = getelementptr inbounds i8, i8* %392, i64 %395
%397 = load i8, i8* %396
%398 = sext i8 %397 to i32
%399 = sub nsw i32 %398, 48
br label %410
400: ; preds = %382, %373
%401 = load i8*, i8** %9
%402 = load i32, i32* %15
%403 = sub nsw i32 %402, 1
%404 = sext i32 %403 to i64
%405 = getelementptr inbounds i8, i8* %401, i64 %404
%406 = load i8, i8* %405
%407 = sext i8 %406 to i32
%408 = sub nsw i32 %407, 65
%409 = add nsw i32 %408, 10
br label %410
410: ; preds = %400, %391
%411 = phi i32 [ %399, %391 ], [ %409, %400 ]
br label %412
412: ; preds = %410, %372
%413 = phi i32 [ 36, %372 ], [ %411, %410 ]
%414 = sext i32 %413 to i64
%415 = add i64 %369, %414
store i64 %415, i64* %17
%416 = load i64, i64* %17
%417 = mul i64 10, %416
%418 = load i8*, i8** %9
%419 = load i32, i32* %15
%420 = sext i32 %419 to i64
%421 = getelementptr inbounds i8, i8* %418, i64 %420
%422 = load i8, i8* %421
%423 = sext i8 %422 to i64
%424 = add i64 %417, %423
%425 = sub i64 %424, 48
store i64 %425, i64* %17
%426 = load i64, i64* %17
%427 = mul i64 27, %426
%428 = load i32, i32* %16
%429 = icmp slt i32 %428, 1
br i1 %429, label %430, label %431
430: ; preds = %412
br label %440
431: ; preds = %412
%432 = load i8*, i8** %9
%433 = load i32, i32* %15
%434 = add nsw i32 %433, 1
%435 = sext i32 %434 to i64
%436 = getelementptr inbounds i8, i8* %432, i64 %435
%437 = load i8, i8* %436
%438 = sext i8 %437 to i32
%439 = sub nsw i32 %438, 65
br label %440
440: ; preds = %431, %430
%441 = phi i32 [ 26, %430 ], [ %439, %431 ]
%442 = sext i32 %441 to i64
%443 = add i64 %427, %442
store i64 %443, i64* %17
%444 = load i64, i64* %17
%445 = mul i64 27, %444
%446 = load i32, i32* %16
%447 = icmp slt i32 %446, 2
br i1 %447, label %448, label %449
448: ; preds = %440
br label %458
449: ; preds = %440
%450 = load i8*, i8** %9
%451 = load i32, i32* %15
%452 = add nsw i32 %451, 2
%453 = sext i32 %452 to i64
%454 = getelementptr inbounds i8, i8* %450, i64 %453
%455 = load i8, i8* %454
%456 = sext i8 %455 to i32
%457 = sub nsw i32 %456, 65
br label %458
458: ; preds = %449, %448
%459 = phi i32 [ 26, %448 ], [ %457, %449 ]
%460 = sext i32 %459 to i64
%461 = add i64 %445, %460
store i64 %461, i64* %17
%462 = load i64, i64* %17
%463 = mul i64 27, %462
%464 = load i32, i32* %16
%465 = icmp slt i32 %464, 3
br i1 %465, label %466, label %467
466: ; preds = %458
br label %476
467: ; preds = %458
%468 = load i8*, i8** %9
%469 = load i32, i32* %15
%470 = add nsw i32 %469, 3
%471 = sext i32 %470 to i64
%472 = getelementptr inbounds i8, i8* %468, i64 %471
%473 = load i8, i8* %472
%474 = sext i8 %473 to i32
%475 = sub nsw i32 %474, 65
br label %476
476: ; preds = %467, %466
%477 = phi i32 [ 26, %466 ], [ %475, %467 ]
%478 = sext i32 %477 to i64
%479 = add i64 %463, %478
store i64 %479, i64* %17
%480 = load i64, i64* %12
%481 = icmp ne i64 %480, 0
br i1 %481, label %513, label %482
482: ; preds = %476
%483 = load i8*, i8** %6
%484 = call i32 (i8*, ...) bitcast (i32 (...)* @strupr to i32 (i8*, ...)*)(i8* %483)
%485 = load i8*, i8** %6
%486 = getelementptr inbounds i8, i8* %485, i64 0
%487 = load i8, i8* %486
%488 = sext i8 %487 to i32
%489 = sub nsw i32 %488, 65
%490 = mul nsw i32 10, %489
%491 = sub nsw i32 179, %490
%492 = load i8*, i8** %6
%493 = getelementptr inbounds i8, i8* %492, i64 2
%494 = load i8, i8* %493
%495 = sext i8 %494 to i32
%496 = sub nsw i32 %495, 48
%497 = sub nsw i32 %491, %496
%498 = mul nsw i32 180, %497
%499 = load i8*, i8** %6
%500 = getelementptr inbounds i8, i8* %499, i64 1
%501 = load i8, i8* %500
%502 = sext i8 %501 to i32
%503 = sub nsw i32 %502, 65
%504 = mul nsw i32 10, %503
%505 = add nsw i32 %498, %504
%506 = load i8*, i8** %6
%507 = getelementptr inbounds i8, i8* %506, i64 3
%508 = load i8, i8* %507
%509 = sext i8 %508 to i32
%510 = sub nsw i32 %509, 48
%511 = add nsw i32 %505, %510
%512 = sext i32 %511 to i64
store i64 %512, i64* %11
br label %513
513: ; preds = %482, %476
%514 = load i8*, i8** %7
%515 = call i32 (i8*, ...) bitcast (i32 (...)* @atoi to i32 (i8*, ...)*)(i8* %514)
store i32 %515, i32* %18
%516 = bitcast [10 x i32]* %19 to i8*
%517 = load i32, i32* %18
%518 = icmp sgt i32 %517, 60
br i1 %518, label %519, label %520
519: ; preds = %513
br label %534
520: ; preds = %513
%521 = load i32, i32* %18
%522 = icmp slt i32 %521, 0
br i1 %522, label %523, label %524
523: ; preds = %520
br label %532
524: ; preds = %520
%525 = load i32, i32* %18
%526 = load i32, i32* %18
%527 = srem i32 %526, 10
%528 = sext i32 %527 to i64
%529 = getelementptr inbounds [10 x i32], [10 x i32]* %19, i64 0, i64 %528
%530 = load i32, i32* %529
%531 = add nsw i32 %525, %530
br label %532
532: ; preds = %524, %523
%533 = phi i32 [ 0, %523 ], [ %531, %524 ]
br label %534
534: ; preds = %532, %519
%535 = phi i32 [ 60, %519 ], [ %533, %532 ]
store i32 %535, i32* %18
%536 = load i64, i64* %11
%537 = shl i64 %536, 7
%538 = load i32, i32* %18
%539 = add nsw i32 %538, 64
%540 = sext i32 %539 to i64
%541 = load i64, i64* %12
%542 = add i64 %540, %541
%543 = or i64 %537, %542
store i64 %543, i64* %20
%544 = getelementptr inbounds [11 x i8], [11 x i8]* %21, i64 0, i64 0
%545 = load i64, i64* %17
%546 = lshr i64 %545, 20
%547 = trunc i64 %546 to i8
store i8 %547, i8* %544
%548 = getelementptr inbounds i8, i8* %544, i64 1
%549 = load i64, i64* %17
%550 = lshr i64 %549, 12
%551 = trunc i64 %550 to i8
store i8 %551, i8* %548
%552 = getelementptr inbounds i8, i8* %548, i64 1
%553 = load i64, i64* %17
%554 = lshr i64 %553, 4
%555 = trunc i64 %554 to i8
store i8 %555, i8* %552
%556 = getelementptr inbounds i8, i8* %552, i64 1
%557 = load i64, i64* %17
%558 = and i64 %557, 15
%559 = shl i64 %558, 4
%560 = load i64, i64* %20
%561 = lshr i64 %560, 18
%562 = and i64 %561, 15
%563 = or i64 %559, %562
%564 = trunc i64 %563 to i8
store i8 %564, i8* %556
%565 = getelementptr inbounds i8, i8* %556, i64 1
%566 = load i64, i64* %20
%567 = lshr i64 %566, 10
%568 = trunc i64 %567 to i8
store i8 %568, i8* %565
%569 = getelementptr inbounds i8, i8* %565, i64 1
%570 = load i64, i64* %20
%571 = lshr i64 %570, 2
%572 = trunc i64 %571 to i8
store i8 %572, i8* %569
%573 = getelementptr inbounds i8, i8* %569, i64 1
%574 = load i64, i64* %20
%575 = and i64 %574, 3
%576 = shl i64 %575, 6
%577 = trunc i64 %576 to i8
store i8 %577, i8* %573
%578 = getelementptr inbounds i8, i8* %573, i64 1
store i8 0, i8* %578
%579 = getelementptr inbounds i8, i8* %578, i64 1
store i8 0, i8* %579
%580 = getelementptr inbounds i8, i8* %579, i64 1
store i8 0, i8* %580
%581 = getelementptr inbounds i8, i8* %580, i64 1
store i8 0, i8* %581
store i32 0, i32* %22
store i32 0, i32* %25
store i32 0, i32* %23
br label %582
582: ; preds = %640, %534
%583 = load i32, i32* %23
%584 = sext i32 %583 to i64
%585 = icmp ne i64 %584, 11
br i1 %585, label %586, label %643
586: ; preds = %582
store i32 7, i32* %15
br label %587
587: ; preds = %636, %586
%588 = load i32, i32* %15
%589 = icmp sge i32 %588, 0
br i1 %589, label %590, label %639
590: ; preds = %587
%591 = bitcast [2 x i64]* %27 to i8*
%592 = load i32, i32* %25
%593 = shl i32 %592, 1
%594 = load i32, i32* %23
%595 = sext i32 %594 to i64
%596 = getelementptr inbounds [11 x i8], [11 x i8]* %21, i64 0, i64 %595
%597 = load i8, i8* %596
%598 = sext i8 %597 to i32
%599 = load i32, i32* %15
%600 = ashr i32 %598, %599
%601 = and i32 %600, 1
%602 = or i32 %593, %601
store i32 %602, i32* %25
store i32 0, i32* %24
br label %603
603: ; preds = %632, %590
%604 = load i32, i32* %24
%605 = icmp ne i32 %604, 2
br i1 %605, label %606, label %635
606: ; preds = %603
%607 = load i32, i32* %25
%608 = sext i32 %607 to i64
%609 = load i32, i32* %24
%610 = sext i32 %609 to i64
%611 = getelementptr inbounds [2 x i64], [2 x i64]* %27, i64 0, i64 %610
%612 = load i64, i64* %611
%613 = and i64 %608, %612
store i64 %613, i64* %28
store i32 0, i32* %29
br label %614
614: ; preds = %617, %606
%615 = load i64, i64* %28
%616 = icmp ne i64 %615, 0
br i1 %616, label %617, label %624
617: ; preds = %614
%618 = load i32, i32* %29
%619 = sub nsw i32 1, %618
store i32 %619, i32* %29
%620 = load i64, i64* %28
%621 = load i64, i64* %28
%622 = sub i64 %621, 1
%623 = and i64 %620, %622
store i64 %623, i64* %28
br label %614
624: ; preds = %614
%625 = load i32, i32* %29
%626 = trunc i32 %625 to i8
%627 = load i32, i32* %22
%628 = sext i32 %627 to i64
%629 = getelementptr inbounds [176 x i8], [176 x i8]* %26, i64 0, i64 %628
store i8 %626, i8* %629
%630 = load i32, i32* %22
%631 = add nsw i32 %630, 1
store i32 %631, i32* %22
br label %632
632: ; preds = %624
%633 = load i32, i32* %24
%634 = add nsw i32 %633, 1
store i32 %634, i32* %24
br label %603
635: ; preds = %603
br label %636
636: ; preds = %635
%637 = load i32, i32* %15
%638 = add nsw i32 %637, -1
store i32 %638, i32* %15
br label %587
639: ; preds = %587
br label %640
640: ; preds = %639
%641 = load i32, i32* %23
%642 = add nsw i32 %641, 1
store i32 %642, i32* %23
br label %582
643: ; preds = %582
%644 = bitcast [162 x i8]* %30 to i8*
store i32 0, i32* %15
br label %645
645: ; preds = %699, %643
%646 = load i32, i32* %15
%647 = icmp ne i32 %646, 162
br i1 %647, label %648, label %702
648: ; preds = %645
store i32 -1, i32* %18
store i32 0, i32* %22
br label %649
649: ; preds = %678, %648
%650 = load i32, i32* %18
%651 = load i32, i32* %15
%652 = icmp ne i32 %650, %651
br i1 %652, label %653, label %681
653: ; preds = %649
store i32 0, i32* %23
br label %654
654: ; preds = %667, %653
%655 = load i32, i32* %23
%656 = icmp ne i32 %655, 8
br i1 %656, label %657, label %670
657: ; preds = %654
%658 = load i32, i32* %22
%659 = load i32, i32* %23
%660 = ashr i32 %658, %659
%661 = and i32 %660, 1
%662 = load i8, i8* %31
%663 = zext i8 %662 to i32
%664 = shl i32 %663, 1
%665 = or i32 %661, %664
%666 = trunc i32 %665 to i8
store i8 %666, i8* %31
br label %667
667: ; preds = %657
%668 = load i32, i32* %23
%669 = add nsw i32 %668, 1
store i32 %669, i32* %23
br label %654
670: ; preds = %654
%671 = load i8, i8* %31
%672 = zext i8 %671 to i32
%673 = icmp slt i32 %672, 162
br i1 %673, label %674, label %677
674: ; preds = %670
%675 = load i32, i32* %18
%676 = add nsw i32 %675, 1
store i32 %676, i32* %18
br label %677
677: ; preds = %674, %670
br label %678
678: ; preds = %677
%679 = load i32, i32* %22
%680 = add nsw i32 %679, 1
store i32 %680, i32* %22
br label %649
681: ; preds = %649
%682 = load i8, i8* %31
%683 = zext i8 %682 to i64
%684 = getelementptr inbounds [162 x i8], [162 x i8]* %30, i64 0, i64 %683
%685 = load i8, i8* %684
%686 = zext i8 %685 to i32
%687 = load i32, i32* %15
%688 = sext i32 %687 to i64
%689 = getelementptr inbounds [176 x i8], [176 x i8]* %26, i64 0, i64 %688
%690 = load i8, i8* %689
%691 = zext i8 %690 to i32
%692 = shl i32 %691, 1
%693 = or i32 %686, %692
%694 = trunc i32 %693 to i8
%695 = load i8*, i8** %8
%696 = load i8, i8* %31
%697 = zext i8 %696 to i64
%698 = getelementptr inbounds i8, i8* %695, i64 %697
store i8 %694, i8* %698
br label %699
699: ; preds = %681
%700 = load i32, i32* %15
%701 = add nsw i32 %700, 1
store i32 %701, i32* %15
br label %645
702: ; preds = %645
ret void
}

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