#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 */
int /*<<< orphan*/ free(char *);
char *malloc(size_t);
char *strdup(char const *);
size_t strlen(char const *);
int /*<<< orphan*/ strncmp(char *, char *, int);
char toupper(char);
char *nysiis(const char *str) {
  size_t len = strlen(str);
  char c1, c2, c3;
  char *copy, *code;
  char *p, *cp;
  copy = strdup(str);
  if (!copy) {
    return NULL;
  }
  if (!*copy) {
    return copy;
  }
  code = malloc(len + 1 * sizeof(char));
  if (!code) {
    free(copy);
    return NULL;
  }
  if (!strncmp(copy, "MAC", 3)) {
    copy[1] = 'C';
  } else if (!strncmp(copy, "KN", 3)) {
    copy[0] = 'N';
  } else if (copy[0] == 'K') {
    copy[0] = 'C';
  } else if (!strncmp(copy, "PH", 2)) {
    copy[0] = 'F';
    copy[1] = 'F';
  } else if (!strncmp(copy, "SCH", 3)) {
    copy[1] = 'S';
    copy[2] = 'S';
  }
  c1 = copy[len - 1];
  if (c1 == 'E') {
    c2 = copy[len - 2];
    if (c2 == 'E' || c2 == 'I') {
      copy[len - 1] = ' ';
      copy[len - 2] = 'Y';
    }
  } else if (c1 == 'T') {
    c2 = copy[len - 2];
    if (c2 == 'D' || c2 == 'R' || c2 == 'N') {
      copy[len - 1] = ' ';
      copy[len - 2] = 'D';
    }
  } else if (c1 == 'D') {
    c2 = copy[len - 2];
    if (c2 == 'R' || c2 == 'N') {
      copy[len - 1] = ' ';
      copy[len - 2] = 'D';
    }
  }
  cp = code;
  p = copy;
  *(cp++) = toupper(*(p++));
  while ((c1 = toupper(*p))) {
    if (c1 == ' ') {
      break;
    }
    switch (c1) {
    case 'E':
      if (toupper(*(p + 1)) == 'V') {
        *cp = 'A';
        *(++cp) = 'F';
        break;
      }
    case 'A':
    case 'I':
    case 'O':
    case 'U':
      *cp = 'A';
      break;
    case 'Q':
      *cp = 'G';
      break;
    case 'Z':
      *cp = 'S';
      break;
    case 'M':
      *cp = 'N';
      break;
    case 'K':
      if (toupper(*(p + 1)) == 'N') {
        *cp = 'N';
      } else {
        *cp = 'C';
      }
      break;
    case 'S':
      if (toupper(*(p + 1)) == 'C' && toupper(*(p + 2)) == 'H') {
        *(cp++) = 'S';
        *(cp++) = 'S';
        *cp = 'S';
      } else {
        *cp = 'S';
      }
      break;
    case 'P':
      if (toupper(*(p + 1)) == 'H') {
        *cp = 'F';
        *(++cp) = 'F';
      } else {
        *cp = 'P';
      }
      break;
    case 'H':
      c2 = toupper(*(p + 1));
      c3 = toupper(*(p - 1));
      if (!((c2) == 'A' || (c2) == 'E' || (c2) == 'I' || (c2) == 'O' ||
            (c2) == 'U') ||
          !((c3) == 'A' || (c3) == 'E' || (c3) == 'I' || (c3) == 'O' ||
            (c3) == 'U')) {
        *cp = c3;
      } else {
        *cp = 'H';
      }
      break;
    case 'W':
      c2 = toupper(*(p - 1));
      if (((c2) == 'A' || (c2) == 'E' || (c2) == 'I' || (c2) == 'O' ||
           (c2) == 'U')) {
        *cp = c2;
      } else {
        *cp = 'W';
      }
      break;
    default:
      *cp = toupper(c1);
    }
    if (*cp != *(cp - 1) || cp == code + 1) {
      cp++;
    }
    p++;
  }
  *cp = '\0';
  c1 = *(cp - 1);
  if (c1 == 'S') {
    *(--cp) = '\0';
  } else if (c1 == 'Y') {
    if (*(cp - 2) == 'A') {
      *(--cp) = '\0';
      *(--cp) = 'Y';
    }
  }
  if (*(cp - 1) == 'A') {
    *(cp - 1) = '\0';
  }
  free(copy);
  return code;
}


x86 assembly (clang, -O0):
<nysiis>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rdi
call   1060 <strlen@plt>
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rdi
call   1080 <strdup@plt>
mov    %rax,-0x28(%rbp)
cmpq   $0x0,-0x28(%rbp)
jne    119e <nysiis+0x3e>
movq   $0x0,-0x8(%rbp)
jmp    181e <nysiis+0x6be>
mov    -0x28(%rbp),%rax
cmpb   $0x0,(%rax)
jne    11b8 <nysiis+0x58>
mov    -0x28(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    181e <nysiis+0x6be>
mov    -0x18(%rbp),%rdi
add    $0x1,%rdi
call   1070 <malloc@plt>
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x30(%rbp)
jne    11ea <nysiis+0x8a>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
movq   $0x0,-0x8(%rbp)
jmp    181e <nysiis+0x6be>
mov    -0x28(%rbp),%rdi
lea    0xe73(%rip),%rsi
mov    $0x3,%edx
call   1040 <strncmp@plt>
cmp    $0x0,%eax
jne    1215 <nysiis+0xb5>
mov    -0x28(%rbp),%rax
movb   $0x43,0x1(%rax)
jmp    12cf <nysiis+0x16f>
mov    -0x28(%rbp),%rdi
lea    0xe4c(%rip),%rsi
mov    $0x3,%edx
call   1040 <strncmp@plt>
cmp    $0x0,%eax
jne    123f <nysiis+0xdf>
mov    -0x28(%rbp),%rax
movb   $0x4e,(%rax)
jmp    12ca <nysiis+0x16a>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x4b,%eax
jne    125b <nysiis+0xfb>
mov    -0x28(%rbp),%rax
movb   $0x43,(%rax)
jmp    12c5 <nysiis+0x165>
mov    -0x28(%rbp),%rdi
lea    0xe09(%rip),%rsi
mov    $0x2,%edx
call   1040 <strncmp@plt>
cmp    $0x0,%eax
jne    128d <nysiis+0x12d>
mov    -0x28(%rbp),%rax
movb   $0x46,(%rax)
mov    -0x28(%rbp),%rax
movb   $0x46,0x1(%rax)
jmp    12c0 <nysiis+0x160>
mov    -0x28(%rbp),%rdi
lea    0xdda(%rip),%rsi
mov    $0x3,%edx
call   1040 <strncmp@plt>
cmp    $0x0,%eax
jne    12bb <nysiis+0x15b>
mov    -0x28(%rbp),%rax
movb   $0x53,0x1(%rax)
mov    -0x28(%rbp),%rax
movb   $0x53,0x2(%rax)
jmp    12c0 <nysiis+0x160>
jmp    12c5 <nysiis+0x165>
jmp    12ca <nysiis+0x16a>
jmp    12cf <nysiis+0x16f>
mov    -0x28(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x19(%rbp)
movsbl -0x19(%rbp),%eax
cmp    $0x45,%eax
jne    133f <nysiis+0x1df>
mov    -0x28(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x2,%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a(%rbp)
movsbl -0x1a(%rbp),%eax
cmp    $0x45,%eax
je     131a <nysiis+0x1ba>
movsbl -0x1a(%rbp),%eax
cmp    $0x49,%eax
jne    133a <nysiis+0x1da>
mov    -0x28(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x2,%rcx
movb   $0x59,(%rax,%rcx,1)
jmp    1412 <nysiis+0x2b2>
movsbl -0x19(%rbp),%eax
cmp    $0x54,%eax
jne    13aa <nysiis+0x24a>
mov    -0x28(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x2,%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a(%rbp)
movsbl -0x1a(%rbp),%eax
cmp    $0x44,%eax
je     1385 <nysiis+0x225>
movsbl -0x1a(%rbp),%eax
cmp    $0x52,%eax
je     1385 <nysiis+0x225>
movsbl -0x1a(%rbp),%eax
cmp    $0x4e,%eax
jne    13a5 <nysiis+0x245>
mov    -0x28(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x2,%rcx
movb   $0x44,(%rax,%rcx,1)
jmp    140d <nysiis+0x2ad>
movsbl -0x19(%rbp),%eax
cmp    $0x44,%eax
jne    1408 <nysiis+0x2a8>
mov    -0x28(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x2,%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a(%rbp)
movsbl -0x1a(%rbp),%eax
cmp    $0x52,%eax
je     13e3 <nysiis+0x283>
movsbl -0x1a(%rbp),%eax
cmp    $0x4e,%eax
jne    1403 <nysiis+0x2a3>
mov    -0x28(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x2,%rcx
movb   $0x44,(%rax,%rcx,1)
jmp    1408 <nysiis+0x2a8>
jmp    140d <nysiis+0x2ad>
jmp    1412 <nysiis+0x2b2>
mov    -0x30(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x38(%rbp)
movsbl (%rax),%edi
call   1050 <toupper@plt>
mov    %al,%cl
mov    -0x40(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x40(%rbp)
mov    %cl,(%rax)
mov    -0x38(%rbp),%rax
movsbl (%rax),%edi
call   1050 <toupper@plt>
mov    %al,-0x19(%rbp)
cmp    $0x0,%al
je     1770 <nysiis+0x610>
movsbl -0x19(%rbp),%eax
cmp    $0x20,%eax
jne    1475 <nysiis+0x315>
jmp    1770 <nysiis+0x610>
movsbl -0x19(%rbp),%eax
add    $0xffffffbf,%eax
mov    %eax,%ecx
mov    %rcx,-0x48(%rbp)
sub    $0x19,%eax
ja     1716 <nysiis+0x5b6>
mov    -0x48(%rbp),%rax
lea    0xb6a(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x38(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1050 <toupper@plt>
movsbl %al,%eax
cmp    $0x56,%eax
jne    14d7 <nysiis+0x377>
mov    -0x40(%rbp),%rax
movb   $0x41,(%rax)
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x40(%rbp)
movb   $0x46,0x1(%rax)
jmp    1727 <nysiis+0x5c7>
jmp    14dc <nysiis+0x37c>
mov    -0x40(%rbp),%rax
movb   $0x41,(%rax)
jmp    1727 <nysiis+0x5c7>
mov    -0x40(%rbp),%rax
movb   $0x47,(%rax)
jmp    1727 <nysiis+0x5c7>
mov    -0x40(%rbp),%rax
movb   $0x53,(%rax)
jmp    1727 <nysiis+0x5c7>
mov    -0x40(%rbp),%rax
movb   $0x4e,(%rax)
jmp    1727 <nysiis+0x5c7>
mov    -0x38(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1050 <toupper@plt>
movsbl %al,%eax
cmp    $0x4e,%eax
jne    1531 <nysiis+0x3d1>
mov    -0x40(%rbp),%rax
movb   $0x4e,(%rax)
jmp    1538 <nysiis+0x3d8>
mov    -0x40(%rbp),%rax
movb   $0x43,(%rax)
jmp    1727 <nysiis+0x5c7>
mov    -0x38(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1050 <toupper@plt>
movsbl %al,%eax
cmp    $0x43,%eax
jne    159f <nysiis+0x43f>
mov    -0x38(%rbp),%rax
movsbl 0x2(%rax),%edi
call   1050 <toupper@plt>
movsbl %al,%eax
cmp    $0x48,%eax
jne    159f <nysiis+0x43f>
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x40(%rbp)
movb   $0x53,(%rax)
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x40(%rbp)
movb   $0x53,(%rax)
mov    -0x40(%rbp),%rax
movb   $0x53,(%rax)
jmp    15a6 <nysiis+0x446>
mov    -0x40(%rbp),%rax
movb   $0x53,(%rax)
jmp    1727 <nysiis+0x5c7>
mov    -0x38(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1050 <toupper@plt>
movsbl %al,%eax
cmp    $0x48,%eax
jne    15e3 <nysiis+0x483>
mov    -0x40(%rbp),%rax
movb   $0x46,(%rax)
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x40(%rbp)
movb   $0x46,0x1(%rax)
jmp    15ea <nysiis+0x48a>
mov    -0x40(%rbp),%rax
movb   $0x50,(%rax)
jmp    1727 <nysiis+0x5c7>
mov    -0x38(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1050 <toupper@plt>
mov    %al,-0x1a(%rbp)
mov    -0x38(%rbp),%rax
movsbl -0x1(%rax),%edi
call   1050 <toupper@plt>
mov    %al,-0x1b(%rbp)
movsbl -0x1a(%rbp),%eax
cmp    $0x41,%eax
je     1650 <nysiis+0x4f0>
movsbl -0x1a(%rbp),%eax
cmp    $0x45,%eax
je     1650 <nysiis+0x4f0>
movsbl -0x1a(%rbp),%eax
cmp    $0x49,%eax
je     1650 <nysiis+0x4f0>
movsbl -0x1a(%rbp),%eax
cmp    $0x4f,%eax
je     1650 <nysiis+0x4f0>
movsbl -0x1a(%rbp),%eax
cmp    $0x55,%eax
jne    1691 <nysiis+0x531>
movsbl -0x1b(%rbp),%eax
cmp    $0x41,%eax
je     169f <nysiis+0x53f>
movsbl -0x1b(%rbp),%eax
cmp    $0x45,%eax
je     169f <nysiis+0x53f>
movsbl -0x1b(%rbp),%eax
cmp    $0x49,%eax
je     169f <nysiis+0x53f>
movsbl -0x1b(%rbp),%eax
cmp    $0x4f,%eax
je     169f <nysiis+0x53f>
movsbl -0x1b(%rbp),%eax
cmp    $0x55,%eax
je     169f <nysiis+0x53f>
mov    -0x1b(%rbp),%cl
mov    -0x40(%rbp),%rax
mov    %cl,(%rax)
jmp    16a6 <nysiis+0x546>
mov    -0x40(%rbp),%rax
movb   $0x48,(%rax)
jmp    1727 <nysiis+0x5c7>
mov    -0x38(%rbp),%rax
movsbl -0x1(%rax),%edi
call   1050 <toupper@plt>
mov    %al,-0x1a(%rbp)
movsbl -0x1a(%rbp),%eax
cmp    $0x41,%eax
je     16fc <nysiis+0x59c>
movsbl -0x1a(%rbp),%eax
cmp    $0x45,%eax
je     16fc <nysiis+0x59c>
movsbl -0x1a(%rbp),%eax
cmp    $0x49,%eax
je     16fc <nysiis+0x59c>
movsbl -0x1a(%rbp),%eax
cmp    $0x4f,%eax
je     16fc <nysiis+0x59c>
movsbl -0x1a(%rbp),%eax
cmp    $0x55,%eax
jne    170a <nysiis+0x5aa>
mov    -0x1a(%rbp),%cl
mov    -0x40(%rbp),%rax
mov    %cl,(%rax)
jmp    1711 <nysiis+0x5b1>
mov    -0x40(%rbp),%rax
movb   $0x57,(%rax)
jmp    1727 <nysiis+0x5c7>
movsbl -0x19(%rbp),%edi
call   1050 <toupper@plt>
mov    %al,%cl
mov    -0x40(%rbp),%rax
mov    %cl,(%rax)
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
mov    -0x40(%rbp),%rcx
movsbl -0x1(%rcx),%ecx
cmp    %ecx,%eax
jne    1753 <nysiis+0x5f3>
mov    -0x40(%rbp),%rax
mov    -0x30(%rbp),%rcx
add    $0x1,%rcx
cmp    %rcx,%rax
jne    175f <nysiis+0x5ff>
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    144c <nysiis+0x2ec>
mov    -0x40(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x40(%rbp),%rax
mov    -0x1(%rax),%al
mov    %al,-0x19(%rbp)
movsbl -0x19(%rbp),%eax
cmp    $0x53,%eax
jne    17a6 <nysiis+0x646>
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x40(%rbp)
movb   $0x0,-0x1(%rax)
jmp    17f4 <nysiis+0x694>
movsbl -0x19(%rbp),%eax
cmp    $0x59,%eax
jne    17ef <nysiis+0x68f>
mov    -0x40(%rbp),%rax
movsbl -0x2(%rax),%eax
cmp    $0x41,%eax
jne    17ea <nysiis+0x68a>
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x40(%rbp)
movb   $0x0,-0x1(%rax)
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x40(%rbp)
movb   $0x59,-0x1(%rax)
jmp    17ef <nysiis+0x68f>
jmp    17f4 <nysiis+0x694>
mov    -0x40(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x41,%eax
jne    180d <nysiis+0x6ad>
mov    -0x40(%rbp),%rax
movb   $0x0,-0x1(%rax)
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
mov    -0x30(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<nysiis>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %rdi,%rbx
call   1060 <strlen@plt>
mov    %rax,%r15
mov    %rbx,%rdi
call   1080 <strdup@plt>
test   %rax,%rax
je     11da <nysiis+0x7a>
mov    %rax,%rbx
cmpb   $0x0,(%rax)
je     14b2 <nysiis+0x352>
lea    0x1(%r15),%rdi
call   1070 <malloc@plt>
test   %rax,%rax
je     11e1 <nysiis+0x81>
mov    %rax,%r12
lea    0xec1(%rip),%rsi
mov    %rbx,%rdi
mov    $0x3,%edx
call   1040 <strncmp@plt>
test   %eax,%eax
je     11e9 <nysiis+0x89>
lea    0xead(%rip),%rsi
mov    %rbx,%rdi
mov    $0x3,%edx
call   1040 <strncmp@plt>
test   %eax,%eax
je     11ef <nysiis+0x8f>
cmpb   $0x4b,(%rbx)
jne    11f4 <nysiis+0x94>
movb   $0x43,(%rbx)
jmp    1231 <nysiis+0xd1>
xor    %ebx,%ebx
jmp    14b2 <nysiis+0x352>
xor    %r12d,%r12d
jmp    14a7 <nysiis+0x347>
movb   $0x43,0x1(%rbx)
jmp    1231 <nysiis+0xd1>
movb   $0x4e,(%rbx)
jmp    1231 <nysiis+0xd1>
lea    0xe74(%rip),%rsi
mov    %rbx,%rdi
mov    $0x2,%edx
call   1040 <strncmp@plt>
test   %eax,%eax
je     122c <nysiis+0xcc>
lea    0xe5f(%rip),%rsi
mov    %rbx,%rdi
mov    $0x3,%edx
call   1040 <strncmp@plt>
test   %eax,%eax
jne    1231 <nysiis+0xd1>
movw   $0x5353,0x1(%rbx)
jmp    1231 <nysiis+0xd1>
movw   $0x4646,(%rbx)
mov    -0x1(%r15,%rbx,1),%al
cmp    $0x44,%al
je     1259 <nysiis+0xf9>
cmp    $0x54,%al
je     1268 <nysiis+0x108>
cmp    $0x45,%al
jne    1289 <nysiis+0x129>
mov    -0x2(%r15,%rbx,1),%al
cmp    $0x49,%al
je     124f <nysiis+0xef>
cmp    $0x45,%al
jne    1289 <nysiis+0x129>
movw   $0x2059,-0x2(%rbx,%r15,1)
20
jmp    1289 <nysiis+0x129>
mov    -0x2(%r15,%rbx,1),%al
cmp    $0x52,%al
je     1281 <nysiis+0x121>
cmp    $0x4e,%al
je     1281 <nysiis+0x121>
jmp    1289 <nysiis+0x129>
mov    -0x2(%r15,%rbx,1),%al
add    $0xbc,%al
cmp    $0xe,%al
ja     1289 <nysiis+0x129>
movzbl %al,%eax
mov    $0x4401,%ecx
bt     %rax,%rcx
jae    1289 <nysiis+0x129>
movw   $0x2044,-0x2(%rbx,%r15,1)
20
movsbl (%rbx),%edi
call   1050 <toupper@plt>
mov    %al,(%r12)
lea    0x1(%r12),%r14
movsbl 0x1(%rbx),%edi
call   1050 <toupper@plt>
test   $0xdf,%al
mov    %rbx,(%rsp)
je     1463 <nysiis+0x303>
add    $0x3,%rbx
mov    $0x1,%ebp
lea    0xd41(%rip),%r13
jmp    1305 <nysiis+0x1a5>
movb   $0x53,(%r14)
cs nopw 0x0(%rax,%rax,1)
nop
movzbl (%r12,%rbp,1),%eax
cmp    -0x1(%r12,%rbp,1),%al
setne  %al
cmp    $0x1,%rbp
sete   %cl
or     %al,%cl
movzbl %cl,%eax
add    %rax,%rbp
lea    (%r12,%rbp,1),%r14
movsbl -0x1(%rbx),%edi
call   1050 <toupper@plt>
add    $0x1,%rbx
test   $0xdf,%al
je     1463 <nysiis+0x303>
movsbl %al,%edi
lea    -0x41(%rdi),%eax
cmp    $0x19,%eax
ja     1320 <nysiis+0x1c0>
movslq 0x0(%r13,%rax,4),%rax
add    %r13,%rax
jmp    *%rax
movb   $0x41,(%r14)
jmp    12d0 <nysiis+0x170>
call   1050 <toupper@plt>
mov    %al,(%r14)
jmp    12d0 <nysiis+0x170>
movsbl -0x1(%rbx),%edi
call   1050 <toupper@plt>
cmp    $0x56,%al
jne    131a <nysiis+0x1ba>
movb   $0x41,(%r14)
jmp    13d1 <nysiis+0x271>
movsbl -0x1(%rbx),%edi
call   1050 <toupper@plt>
mov    %eax,%r15d
movsbl -0x3(%rbx),%edi
call   1050 <toupper@plt>
add    $0xbf,%r15b
ror    %r15b
cmp    $0xa,%r15b
ja     1440 <nysiis+0x2e0>
movzbl %r15b,%ecx
mov    $0x495,%edx
bt     %rcx,%rdx
jae    1440 <nysiis+0x2e0>
lea    -0x41(%rax),%ecx
ror    %cl
cmp    $0xa,%cl
ja     1440 <nysiis+0x2e0>
movzbl %cl,%ecx
mov    $0x495,%edx
bt     %rcx,%rdx
jae    1440 <nysiis+0x2e0>
movb   $0x48,(%r14)
jmp    12d0 <nysiis+0x170>
movsbl -0x1(%rbx),%edi
call   1050 <toupper@plt>
cmp    $0x4e,%al
jne    1448 <nysiis+0x2e8>
movb   $0x4e,(%r14)
jmp    12d0 <nysiis+0x170>
movsbl -0x1(%rbx),%edi
call   1050 <toupper@plt>
cmp    $0x48,%al
jne    1451 <nysiis+0x2f1>
movb   $0x46,(%r14)
movb   $0x46,0x1(%r12,%rbp,1)
add    $0x1,%rbp
jmp    12d0 <nysiis+0x170>
movb   $0x47,(%r14)
jmp    12d0 <nysiis+0x170>
movsbl -0x1(%rbx),%edi
call   1050 <toupper@plt>
cmp    $0x43,%al
jne    12c1 <nysiis+0x161>
movsbl (%rbx),%edi
call   1050 <toupper@plt>
cmp    $0x48,%al
jne    12c1 <nysiis+0x161>
movb   $0x53,(%r14)
movw   $0x5353,0x1(%rbp,%r12,1)
53
add    $0x2,%rbp
jmp    12d0 <nysiis+0x170>
movsbl -0x3(%rbx),%edi
call   1050 <toupper@plt>
lea    -0x41(%rax),%ecx
ror    %cl
cmp    $0xa,%cl
ja     145a <nysiis+0x2fa>
movzbl %cl,%ecx
mov    $0x495,%edx
bt     %rcx,%rdx
jae    145a <nysiis+0x2fa>
mov    %al,(%r14)
jmp    12d0 <nysiis+0x170>
movb   $0x43,(%r14)
jmp    12d0 <nysiis+0x170>
movb   $0x50,(%r14)
jmp    12d0 <nysiis+0x170>
movb   $0x57,(%r14)
jmp    12d0 <nysiis+0x170>
movb   $0x0,(%r14)
lea    -0x1(%r14),%rax
mov    -0x1(%r14),%cl
cmp    $0x59,%cl
je     1485 <nysiis+0x325>
cmp    $0x53,%cl
mov    (%rsp),%rbx
jne    149b <nysiis+0x33b>
movb   $0x0,(%rax)
mov    %rax,%r14
jmp    149b <nysiis+0x33b>
cmpb   $0x41,-0x2(%r14)
mov    (%rsp),%rbx
jne    149b <nysiis+0x33b>
add    $0xfffffffffffffffe,%r14
movb   $0x0,(%rax)
movb   $0x59,(%r14)
cmpb   $0x41,-0x1(%r14)
jne    14a7 <nysiis+0x347>
movb   $0x0,-0x1(%r14)
mov    %rbx,%rdi
call   1030 <free@plt>
mov    %r12,%rbx
mov    %rbx,%rax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@.str = [4 x i8] c"MAC\00"
@.str.1 = [3 x i8] c"KN\00"
@.str.2 = [3 x i8] c"PH\00"
@.str.3 = [4 x i8] c"SCH\00"
define i8* @nysiis(i8* nocapture %0) {
%2 = tail call i64 @strlen(i8* dereferenceable(1) %0)
%3 = tail call i8* @strdup(i8* %0)
%4 = icmp eq i8* %3, null
br i1 %4, label %173, label %5
5: ; preds = %1
%6 = load i8, i8* %3
%7 = icmp eq i8 %6, 0
br i1 %7, label %173, label %8
8: ; preds = %5
%9 = add i64 %2, 1
%10 = tail call i8* @malloc(i64 %9)
%11 = icmp eq i8* %10, null
br i1 %11, label %170, label %12
12: ; preds = %8
%13 = tail call i32 @strncmp(i8* %3, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i32 3)
%14 = icmp eq i32 %13, 0
br i1 %14, label %15, label %17
15: ; preds = %12
%16 = getelementptr inbounds i8, i8* %3, i64 1
store i8 67, i8* %16
br label %36
17: ; preds = %12
%18 = tail call i32 @strncmp(i8* %3, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32 3)
%19 = icmp eq i32 %18, 0
br i1 %19, label %20, label %21
20: ; preds = %17
store i8 78, i8* %3
br label %36
21: ; preds = %17
%22 = load i8, i8* %3
%23 = icmp eq i8 %22, 75
br i1 %23, label %24, label %25
24: ; preds = %21
store i8 67, i8* %3
br label %36
25: ; preds = %21
%26 = tail call i32 @strncmp(i8* %3, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 2)
%27 = icmp eq i32 %26, 0
br i1 %27, label %28, label %30
28: ; preds = %25
store i8 70, i8* %3
%29 = getelementptr inbounds i8, i8* %3, i64 1
store i8 70, i8* %29
br label %36
30: ; preds = %25
%31 = tail call i32 @strncmp(i8* %3, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 3)
%32 = icmp eq i32 %31, 0
br i1 %32, label %33, label %36
33: ; preds = %30
%34 = getelementptr inbounds i8, i8* %3, i64 1
store i8 83, i8* %34
%35 = getelementptr inbounds i8, i8* %3, i64 2
store i8 83, i8* %35
br label %36
36: ; preds = %20, %28, %33, %30, %24, %15
%37 = add i64 %2, -1
%38 = getelementptr inbounds i8, i8* %3, i64 %37
%39 = load i8, i8* %38
switch i8 %39, label %55 [
i8 69, label %40
i8 84, label %45
i8 68, label %50
]
40: ; preds = %36
%41 = add i64 %2, -2
%42 = getelementptr inbounds i8, i8* %3, i64 %41
%43 = load i8, i8* %42
switch i8 %43, label %55 [
i8 73, label %44
i8 69, label %44
]
44: ; preds = %40, %40
store i8 32, i8* %38
store i8 89, i8* %42
br label %55
45: ; preds = %36
%46 = add i64 %2, -2
%47 = getelementptr inbounds i8, i8* %3, i64 %46
%48 = load i8, i8* %47
switch i8 %48, label %55 [
i8 82, label %49
i8 78, label %49
i8 68, label %49
]
49: ; preds = %45, %45, %45
store i8 32, i8* %38
store i8 68, i8* %47
br label %55
50: ; preds = %36
%51 = add i64 %2, -2
%52 = getelementptr inbounds i8, i8* %3, i64 %51
%53 = load i8, i8* %52
switch i8 %53, label %55 [
i8 82, label %54
i8 78, label %54
]
54: ; preds = %50, %50
store i8 32, i8* %38
store i8 68, i8* %52
br label %55
55: ; preds = %50, %36, %45, %40, %49, %54, %44
%56 = load i8, i8* %3
%57 = tail call signext i8 @toupper(i8 signext %56)
store i8 %57, i8* %10
%58 = getelementptr inbounds i8, i8* %3, i64 1
%59 = getelementptr inbounds i8, i8* %10, i64 1
%60 = load i8, i8* %58
%61 = tail call signext i8 @toupper(i8 signext %60)
%62 = and i8 %61, -33
%63 = icmp eq i8 %62, 0
br i1 %63, label %154, label %64
64: ; preds = %55, %137
%65 = phi i8 [ %151, %137 ], [ %61, %55 ]
%66 = phi i8* [ %149, %137 ], [ %59, %55 ]
%67 = phi i8* [ %148, %137 ], [ %58, %55 ]
%68 = phi i64 [ %147, %137 ], [ 1, %55 ]
%69 = phi i8* [ %67, %137 ], [ %3, %55 ]
%70 = sext i8 %65 to i32
switch i32 %70, label %135 [
i32 69, label %71
i32 65, label %79
i32 73, label %79
i32 79, label %79
i32 85, label %79
i32 81, label %80
i32 90, label %81
i32 77, label %82
i32 75, label %83
i32 83, label %90
i32 80, label %106
i32 72, label %115
i32 87, label %128
]
71: ; preds = %64
%72 = getelementptr inbounds i8, i8* %69, i64 2
%73 = load i8, i8* %72
%74 = tail call signext i8 @toupper(i8 signext %73)
%75 = icmp eq i8 %74, 86
br i1 %75, label %76, label %79
76: ; preds = %71
store i8 65, i8* %66
%77 = add nsw i64 %68, 1
%78 = getelementptr inbounds i8, i8* %10, i64 %77
store i8 70, i8* %78
br label %137
79: ; preds = %71, %64, %64, %64, %64
store i8 65, i8* %66
br label %137
80: ; preds = %64
store i8 71, i8* %66
br label %137
81: ; preds = %64
store i8 83, i8* %66
br label %137
82: ; preds = %64
store i8 78, i8* %66
br label %137
83: ; preds = %64
%84 = getelementptr inbounds i8, i8* %69, i64 2
%85 = load i8, i8* %84
%86 = tail call signext i8 @toupper(i8 signext %85)
%87 = icmp eq i8 %86, 78
br i1 %87, label %88, label %89
88: ; preds = %83
store i8 78, i8* %66
br label %137
89: ; preds = %83
store i8 67, i8* %66
br label %137
90: ; preds = %64
%91 = getelementptr inbounds i8, i8* %69, i64 2
%92 = load i8, i8* %91
%93 = tail call signext i8 @toupper(i8 signext %92)
%94 = icmp eq i8 %93, 67
br i1 %94, label %95, label %105
95: ; preds = %90
%96 = getelementptr inbounds i8, i8* %69, i64 3
%97 = load i8, i8* %96
%98 = tail call signext i8 @toupper(i8 signext %97)
%99 = icmp eq i8 %98, 72
br i1 %99, label %100, label %105
100: ; preds = %95
%101 = add nsw i64 %68, 1
%102 = getelementptr inbounds i8, i8* %10, i64 %101
store i8 83, i8* %66
%103 = add nsw i64 %68, 2
%104 = getelementptr inbounds i8, i8* %10, i64 %103
store i8 83, i8* %102
store i8 83, i8* %104
br label %137
105: ; preds = %95, %90
store i8 83, i8* %66
br label %137
106: ; preds = %64
%107 = getelementptr inbounds i8, i8* %69, i64 2
%108 = load i8, i8* %107
%109 = tail call signext i8 @toupper(i8 signext %108)
%110 = icmp eq i8 %109, 72
br i1 %110, label %111, label %114
111: ; preds = %106
store i8 70, i8* %66
%112 = add nsw i64 %68, 1
%113 = getelementptr inbounds i8, i8* %10, i64 %112
store i8 70, i8* %113
br label %137
114: ; preds = %106
store i8 80, i8* %66
br label %137
115: ; preds = %64
%116 = getelementptr inbounds i8, i8* %69, i64 2
%117 = load i8, i8* %116
%118 = tail call signext i8 @toupper(i8 signext %117)
%119 = load i8, i8* %69
%120 = tail call signext i8 @toupper(i8 signext %119)
%121 = add i8 %118, -65
%122 = tail call i8 @llvm.fshl.i8(i8 %121, i8 %121, i8 7)
switch i8 %122, label %126 [
i8 10, label %123
i8 7, label %123
i8 4, label %123
i8 2, label %123
i8 0, label %123
]
123: ; preds = %115, %115, %115, %115, %115
%124 = add i8 %120, -65
%125 = tail call i8 @llvm.fshl.i8(i8 %124, i8 %124, i8 7)
switch i8 %125, label %126 [
i8 10, label %127
i8 7, label %127
i8 4, label %127
i8 2, label %127
i8 0, label %127
]
126: ; preds = %123, %115
store i8 %120, i8* %66
br label %137
127: ; preds = %123, %123, %123, %123, %123
store i8 72, i8* %66
br label %137
128: ; preds = %64
%129 = load i8, i8* %69
%130 = tail call signext i8 @toupper(i8 signext %129)
%131 = add i8 %130, -65
%132 = tail call i8 @llvm.fshl.i8(i8 %131, i8 %131, i8 7)
switch i8 %132, label %134 [
i8 10, label %133
i8 7, label %133
i8 4, label %133
i8 2, label %133
i8 0, label %133
]
133: ; preds = %128, %128, %128, %128, %128
store i8 %130, i8* %66
br label %137
134: ; preds = %128
store i8 87, i8* %66
br label %137
135: ; preds = %64
%136 = tail call signext i8 @toupper(i8 signext %65)
store i8 %136, i8* %66
br label %137
137: ; preds = %133, %134, %126, %127, %111, %114, %100, %105, %88, %89, %135, %82, %81, %80, %79, %76
%138 = phi i64 [ %68, %135 ], [ %68, %133 ], [ %68, %134 ], [ %68, %127 ], [ %68, %126 ], [ %112, %111 ], [ %68, %114 ], [ %103, %100 ], [ %68, %105 ], [ %68, %88 ], [ %68, %89 ], [ %68, %82 ], [ %68, %81 ], [ %68, %80 ], [ %68, %79 ], [ %77, %76 ]
%139 = getelementptr inbounds i8, i8* %10, i64 %138
%140 = load i8, i8* %139
%141 = getelementptr inbounds i8, i8* %139, i64 -1
%142 = load i8, i8* %141
%143 = icmp ne i8 %140, %142
%144 = icmp eq i64 %138, 1
%145 = select i1 %143, i1 true, i1 %144
%146 = zext i1 %145 to i64
%147 = add nsw i64 %138, %146
%148 = getelementptr inbounds i8, i8* %67, i64 1
%149 = getelementptr inbounds i8, i8* %10, i64 %147
%150 = load i8, i8* %148
%151 = tail call signext i8 @toupper(i8 signext %150)
%152 = and i8 %151, -33
%153 = icmp eq i8 %152, 0
br i1 %153, label %154, label %64
154: ; preds = %137, %55
%155 = phi i8* [ %59, %55 ], [ %149, %137 ]
store i8 0, i8* %155
%156 = getelementptr inbounds i8, i8* %155, i64 -1
%157 = load i8, i8* %156
switch i8 %157, label %164 [
i8 83, label %158
i8 89, label %159
]
158: ; preds = %154
store i8 0, i8* %156
br label %164
159: ; preds = %154
%160 = getelementptr inbounds i8, i8* %155, i64 -2
%161 = load i8, i8* %160
%162 = icmp eq i8 %161, 65
br i1 %162, label %163, label %164
163: ; preds = %159
store i8 0, i8* %156
store i8 89, i8* %160
br label %164
164: ; preds = %154, %163, %159, %158
%165 = phi i8* [ %156, %158 ], [ %160, %163 ], [ %155, %159 ], [ %155, %154 ]
%166 = getelementptr inbounds i8, i8* %165, i64 -1
%167 = load i8, i8* %166
%168 = icmp eq i8 %167, 65
br i1 %168, label %169, label %170
169: ; preds = %164
store i8 0, i8* %166
br label %170
170: ; preds = %164, %169, %8
%171 = phi i8* [ null, %8 ], [ %10, %169 ], [ %10, %164 ]
%172 = tail call i32 @free(i8* %3)
br label %173
173: ; preds = %170, %5, %1
%174 = phi i8* [ null, %1 ], [ %3, %5 ], [ %171, %170 ]
ret i8* %174
}