#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*/ ffpmsg(char *);
int /*<<< orphan*/ strcat(char *, char *);
int /*<<< orphan*/ strcpy(char *, char *);
size_t strcspn(char *, char *);
size_t strlen(char *);
int strncmp(char *, char *, int);
int /*<<< orphan*/ strncpy(char *, char *, size_t);
size_t strspn(char *, char *);
int ffpsvc(char *card, char *value, char *comm, int *status) {
  int jj;
  size_t ii, cardlen, nblank, valpos;
  if (*status > 0)
    return (*status);
  value[0] = '\0';
  if (comm)
    comm[0] = '\0';
  cardlen = strlen(card);
  if (((card)[0] < ("HIERARCH ")[0] ? -1
       : (card)[0] > ("HIERARCH ")[0]
           ? 1
           : strncmp((card), ("HIERARCH "), (9))) == 0) {
    valpos = strcspn(card, "=");
    if (valpos == cardlen) {
      if (comm != NULL) {
        if (cardlen > 8) {
          strcpy(comm, &card[8]);
          jj = cardlen - 8;
          for (jj--; jj >= 0; jj--) {
            if (comm[jj] == ' ')
              comm[jj] = '\0';
            else
              break;
          }
        }
      }
      return (*status);
    }
    valpos++;
  } else if (cardlen < 9 ||
             ((card)[0] < ("COMMENT ")[0] ? -1
              : (card)[0] > ("COMMENT ")[0]
                  ? 1
                  : strncmp((card), ("COMMENT "), (8))) == 0 ||
             ((card)[0] < ("HISTORY ")[0] ? -1
              : (card)[0] > ("HISTORY ")[0]
                  ? 1
                  : strncmp((card), ("HISTORY "), (8))) == 0 ||
             ((card)[0] < ("END     ")[0] ? -1
              : (card)[0] > ("END     ")[0]
                  ? 1
                  : strncmp((card), ("END     "), (8))) == 0 ||
             ((card)[0] < ("        ")[0] ? -1
              : (card)[0] > ("        ")[0]
                  ? 1
                  : strncmp((card), ("        "), (8))) == 0 ||
             ((&card[8])[0] < ("= ")[0] ? -1
              : (&card[8])[0] > ("= ")[0]
                  ? 1
                  : strncmp((&card[8]), ("= "), (2))) != 0) {
    if (comm != NULL) {
      if (cardlen > 8) {
        strcpy(comm, &card[8]);
        jj = cardlen - 8;
        for (jj--; jj >= 0; jj--) {
          if (comm[jj] == ' ')
            comm[jj] = '\0';
          else
            break;
        }
      }
    }
    return (*status);
  } else {
    valpos = 10;
  }
  nblank = strspn(&card[valpos], " ");
  if (nblank + valpos == cardlen) {
    return (*status);
  }
  ii = valpos + nblank;
  if (card[ii] == '/') {
    ii++;
  } else if (card[ii] == '\'') {
    value[0] = card[ii];
    for (jj = 1, ii++; ii < cardlen; ii++, jj++) {
      if (card[ii] == '\'') {
        if (card[ii + 1] == '\'') {
          value[jj] = card[ii];
          ii++;
          jj++;
        } else {
          value[jj] = card[ii];
          break;
        }
      }
      value[jj] = card[ii];
    }
    if (ii == cardlen) {
      jj = ((jj) < (69) ? (jj) : (69));
      value[jj] = '\'';
      value[jj + 1] = '\0';
      ffpmsg("This keyword string value has no closing quote:");
      ffpmsg(card);
    } else {
      value[jj + 1] = '\0';
      ii++;
    }
  } else if (card[ii] == '(') {
    nblank = strcspn(&card[ii], ")");
    if (nblank == strlen(&card[ii])) {
      ffpmsg("This complex keyword value has no closing ')':");
      ffpmsg(card);
      return (*status = 205);
    }
    nblank++;
    strncpy(value, &card[ii], nblank);
    value[nblank] = '\0';
    ii = ii + nblank;
  } else {
    nblank = strcspn(&card[ii], " /");
    strncpy(value, &card[ii], nblank);
    value[nblank] = '\0';
    ii = ii + nblank;
  }
  if (comm) {
    nblank = strspn(&card[ii], " ");
    ii = ii + nblank;
    if (ii < 80) {
      if (card[ii] == '/') {
        ii++;
        if (card[ii] == ' ')
          ii++;
      }
      strcat(comm, &card[ii]);
      jj = strlen(comm);
      for (jj--; jj >= 0; jj--) {
        if (comm[jj] == ' ')
          comm[jj] = '\0';
        else
          break;
      }
    }
  }
  return (*status);
}


x86 assembly (clang, -O0):
<ffpsvc>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    -0x28(%rbp),%rax
cmpl   $0x0,(%rax)
jle    11b6 <ffpsvc+0x36>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    1a09 <ffpsvc+0x889>
mov    -0x18(%rbp),%rax
movb   $0x0,(%rax)
cmpq   $0x0,-0x20(%rbp)
je     11cf <ffpsvc+0x4f>
mov    -0x20(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x10(%rbp),%rdi
call   1060 <strlen@plt>
mov    %rax,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xe16(%rip),%ecx
cmp    %ecx,%eax
jge    11ff <ffpsvc+0x7f>
mov    $0xffffffff,%eax
mov    %eax,-0x54(%rbp)
jmp    1240 <ffpsvc+0xc0>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xdf3(%rip),%ecx
cmp    %ecx,%eax
jle    1222 <ffpsvc+0xa2>
mov    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    123a <ffpsvc+0xba>
mov    -0x10(%rbp),%rdi
lea    0xdd3(%rip),%rsi
mov    $0x9,%edx
call   1040 <strncmp@plt>
mov    %eax,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    $0x0,%eax
jne    131a <ffpsvc+0x19a>
mov    -0x10(%rbp),%rdi
lea    0xdb3(%rip),%rsi
call   1090 <strcspn@plt>
mov    %rax,-0x50(%rbp)
mov    -0x50(%rbp),%rax
cmp    -0x40(%rbp),%rax
jne    1309 <ffpsvc+0x189>
cmpq   $0x0,-0x20(%rbp)
je     12fb <ffpsvc+0x17b>
cmpq   $0x8,-0x40(%rbp)
jbe    12f6 <ffpsvc+0x176>
mov    -0x20(%rbp),%rdi
mov    -0x10(%rbp),%rsi
add    $0x8,%rsi
call   1050 <strcpy@plt>
mov    -0x40(%rbp),%rax
sub    $0x8,%rax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jl     12f1 <ffpsvc+0x171>
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    12d9 <ffpsvc+0x159>
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    12de <ffpsvc+0x15e>
jmp    12f1 <ffpsvc+0x171>
jmp    12e3 <ffpsvc+0x163>
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    12a9 <ffpsvc+0x129>
jmp    12f6 <ffpsvc+0x176>
jmp    12fb <ffpsvc+0x17b>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    1a09 <ffpsvc+0x889>
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
jmp    1603 <ffpsvc+0x483>
cmpq   $0x9,-0x40(%rbp)
jb     155b <ffpsvc+0x3db>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xcd9(%rip),%ecx
cmp    %ecx,%eax
jge    1348 <ffpsvc+0x1c8>
mov    $0xffffffff,%eax
mov    %eax,-0x5c(%rbp)
jmp    1389 <ffpsvc+0x209>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xcb6(%rip),%ecx
cmp    %ecx,%eax
jle    136b <ffpsvc+0x1eb>
mov    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    1383 <ffpsvc+0x203>
mov    -0x10(%rbp),%rdi
lea    0xc96(%rip),%rsi
mov    $0x8,%edx
call   1040 <strncmp@plt>
mov    %eax,-0x60(%rbp)
mov    -0x60(%rbp),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    $0x0,%eax
je     155b <ffpsvc+0x3db>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xc72(%rip),%ecx
cmp    %ecx,%eax
jge    13b8 <ffpsvc+0x238>
mov    $0xffffffff,%eax
mov    %eax,-0x64(%rbp)
jmp    13f9 <ffpsvc+0x279>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xc4f(%rip),%ecx
cmp    %ecx,%eax
jle    13db <ffpsvc+0x25b>
mov    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    13f3 <ffpsvc+0x273>
mov    -0x10(%rbp),%rdi
lea    0xc2f(%rip),%rsi
mov    $0x8,%edx
call   1040 <strncmp@plt>
mov    %eax,-0x68(%rbp)
mov    -0x68(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    $0x0,%eax
je     155b <ffpsvc+0x3db>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xc0b(%rip),%ecx
cmp    %ecx,%eax
jge    1428 <ffpsvc+0x2a8>
mov    $0xffffffff,%eax
mov    %eax,-0x6c(%rbp)
jmp    1469 <ffpsvc+0x2e9>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xbe8(%rip),%ecx
cmp    %ecx,%eax
jle    144b <ffpsvc+0x2cb>
mov    $0x1,%eax
mov    %eax,-0x70(%rbp)
jmp    1463 <ffpsvc+0x2e3>
mov    -0x10(%rbp),%rdi
lea    0xbc8(%rip),%rsi
mov    $0x8,%edx
call   1040 <strncmp@plt>
mov    %eax,-0x70(%rbp)
mov    -0x70(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
cmp    $0x0,%eax
je     155b <ffpsvc+0x3db>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xba4(%rip),%ecx
cmp    %ecx,%eax
jge    1498 <ffpsvc+0x318>
mov    $0xffffffff,%eax
mov    %eax,-0x74(%rbp)
jmp    14d9 <ffpsvc+0x359>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xb81(%rip),%ecx
cmp    %ecx,%eax
jle    14bb <ffpsvc+0x33b>
mov    $0x1,%eax
mov    %eax,-0x78(%rbp)
jmp    14d3 <ffpsvc+0x353>
mov    -0x10(%rbp),%rdi
lea    0xb61(%rip),%rsi
mov    $0x8,%edx
call   1040 <strncmp@plt>
mov    %eax,-0x78(%rbp)
mov    -0x78(%rbp),%eax
mov    %eax,-0x74(%rbp)
mov    -0x74(%rbp),%eax
cmp    $0x0,%eax
je     155b <ffpsvc+0x3db>
mov    -0x10(%rbp),%rax
movsbl 0x8(%rax),%eax
movsbl 0xb3c(%rip),%ecx
cmp    %ecx,%eax
jge    1509 <ffpsvc+0x389>
mov    $0xffffffff,%eax
mov    %eax,-0x7c(%rbp)
jmp    154f <ffpsvc+0x3cf>
mov    -0x10(%rbp),%rax
movsbl 0x8(%rax),%eax
movsbl 0xb18(%rip),%ecx
cmp    %ecx,%eax
jle    152d <ffpsvc+0x3ad>
mov    $0x1,%eax
mov    %eax,-0x80(%rbp)
jmp    1549 <ffpsvc+0x3c9>
mov    -0x10(%rbp),%rdi
add    $0x8,%rdi
lea    0xaf4(%rip),%rsi
mov    $0x2,%edx
call   1040 <strncmp@plt>
mov    %eax,-0x80(%rbp)
mov    -0x80(%rbp),%eax
mov    %eax,-0x7c(%rbp)
mov    -0x7c(%rbp),%eax
cmp    $0x0,%eax
je     15f6 <ffpsvc+0x476>
cmpq   $0x0,-0x20(%rbp)
je     15e8 <ffpsvc+0x468>
cmpq   $0x8,-0x40(%rbp)
jbe    15e3 <ffpsvc+0x463>
mov    -0x20(%rbp),%rdi
mov    -0x10(%rbp),%rsi
add    $0x8,%rsi
call   1050 <strcpy@plt>
mov    -0x40(%rbp),%rax
sub    $0x8,%rax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jl     15de <ffpsvc+0x45e>
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    15c6 <ffpsvc+0x446>
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    15cb <ffpsvc+0x44b>
jmp    15de <ffpsvc+0x45e>
jmp    15d0 <ffpsvc+0x450>
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    1596 <ffpsvc+0x416>
jmp    15e3 <ffpsvc+0x463>
jmp    15e8 <ffpsvc+0x468>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    1a09 <ffpsvc+0x889>
movq   $0xa,-0x50(%rbp)
jmp    1603 <ffpsvc+0x483>
mov    -0x10(%rbp),%rdi
add    -0x50(%rbp),%rdi
lea    0xa1c(%rip),%rsi
call   1080 <strspn@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
add    -0x50(%rbp),%rax
cmp    -0x40(%rbp),%rax
jne    163b <ffpsvc+0x4bb>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    1a09 <ffpsvc+0x889>
mov    -0x50(%rbp),%rax
add    -0x48(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
jne    166d <ffpsvc+0x4ed>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    1907 <ffpsvc+0x787>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x27,%eax
jne    17f7 <ffpsvc+0x677>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    (%rax,%rcx,1),%cl
mov    -0x18(%rbp),%rax
mov    %cl,(%rax)
movl   $0x1,-0x2c(%rbp)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    -0x40(%rbp),%rax
jae    175f <ffpsvc+0x5df>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x27,%eax
jne    172f <ffpsvc+0x5af>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%eax
cmp    $0x27,%eax
jne    170f <ffpsvc+0x58f>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    172a <ffpsvc+0x5aa>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    175f <ffpsvc+0x5df>
jmp    172f <ffpsvc+0x5af>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    16a6 <ffpsvc+0x526>
mov    -0x38(%rbp),%rax
cmp    -0x40(%rbp),%rax
jne    17d5 <ffpsvc+0x655>
cmpl   $0x45,-0x2c(%rbp)
jge    1785 <ffpsvc+0x605>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x84(%rbp)
jmp    1795 <ffpsvc+0x615>
mov    $0x45,%eax
mov    %eax,-0x84(%rbp)
jmp    1795 <ffpsvc+0x615>
mov    -0x84(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movb   $0x27,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
lea    0x871(%rip),%rdi
call   1070 <ffpmsg@plt>
mov    -0x10(%rbp),%rdi
call   1070 <ffpmsg@plt>
jmp    17f2 <ffpsvc+0x672>
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    1902 <ffpsvc+0x782>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x28,%eax
jne    18b8 <ffpsvc+0x738>
mov    -0x10(%rbp),%rdi
add    -0x38(%rbp),%rdi
lea    0x848(%rip),%rsi
call   1090 <strcspn@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
mov    %rax,-0x90(%rbp)
mov    -0x10(%rbp),%rdi
add    -0x38(%rbp),%rdi
call   1060 <strlen@plt>
mov    %rax,%rcx
mov    -0x90(%rbp),%rax
cmp    %rcx,%rax
jne    187a <ffpsvc+0x6fa>
lea    0x80f(%rip),%rdi
call   1070 <ffpmsg@plt>
mov    -0x10(%rbp),%rdi
call   1070 <ffpmsg@plt>
mov    -0x28(%rbp),%rax
movl   $0xcd,(%rax)
movl   $0xcd,-0x4(%rbp)
jmp    1a09 <ffpsvc+0x889>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
add    -0x38(%rbp),%rsi
mov    -0x48(%rbp),%rdx
call   1030 <strncpy@plt>
mov    -0x18(%rbp),%rax
mov    -0x48(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
add    -0x48(%rbp),%rax
mov    %rax,-0x38(%rbp)
jmp    18fd <ffpsvc+0x77d>
mov    -0x10(%rbp),%rdi
add    -0x38(%rbp),%rdi
lea    0x7cd(%rip),%rsi
call   1090 <strcspn@plt>
mov    %rax,-0x48(%rbp)
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
add    -0x38(%rbp),%rsi
mov    -0x48(%rbp),%rdx
call   1030 <strncpy@plt>
mov    -0x18(%rbp),%rax
mov    -0x48(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
add    -0x48(%rbp),%rax
mov    %rax,-0x38(%rbp)
jmp    1902 <ffpsvc+0x782>
jmp    1907 <ffpsvc+0x787>
cmpq   $0x0,-0x20(%rbp)
je     1a00 <ffpsvc+0x880>
mov    -0x10(%rbp),%rdi
add    -0x38(%rbp),%rdi
lea    0x70d(%rip),%rsi
call   1080 <strspn@plt>
mov    %rax,-0x48(%rbp)
mov    -0x38(%rbp),%rax
add    -0x48(%rbp),%rax
mov    %rax,-0x38(%rbp)
cmpq   $0x50,-0x38(%rbp)
jae    19fb <ffpsvc+0x87b>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
jne    1988 <ffpsvc+0x808>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    1983 <ffpsvc+0x803>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    1988 <ffpsvc+0x808>
mov    -0x20(%rbp),%rdi
mov    -0x10(%rbp),%rsi
add    -0x38(%rbp),%rsi
call   10a0 <strcat@plt>
mov    -0x20(%rbp),%rdi
call   1060 <strlen@plt>
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jl     19f6 <ffpsvc+0x876>
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    19de <ffpsvc+0x85e>
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    19e3 <ffpsvc+0x863>
jmp    19f6 <ffpsvc+0x876>
jmp    19e8 <ffpsvc+0x868>
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    19ae <ffpsvc+0x82e>
jmp    19fb <ffpsvc+0x87b>
jmp    1a00 <ffpsvc+0x880>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ffpsvc>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    (%rcx),%eax
test   %eax,%eax
jg     1529 <ffpsvc+0x3a9>
mov    %rcx,%r14
mov    %rdx,%r12
mov    %rsi,%r13
mov    %rdi,%r15
movb   $0x0,(%rsi)
test   %rdx,%rdx
je     11ae <ffpsvc+0x2e>
movb   $0x0,(%r12)
mov    %r15,%rdi
call   1060 <strlen@plt>
mov    %rax,%rbx
cmpb   $0x48,(%r15)
jne    11db <ffpsvc+0x5b>
lea    0xe3a(%rip),%rsi
mov    %r15,%rdi
mov    $0x9,%edx
call   1040 <strncmp@plt>
test   %eax,%eax
je     12ce <ffpsvc+0x14e>
cmp    $0x9,%rbx
jb     1526 <ffpsvc+0x3a6>
mov    (%r15),%al
cmp    $0x43,%al
jne    120b <ffpsvc+0x8b>
lea    0xe19(%rip),%rsi
mov    %r15,%rdi
mov    $0x8,%edx
call   1040 <strncmp@plt>
test   %eax,%eax
je     1289 <ffpsvc+0x109>
mov    (%r15),%al
cmp    $0x48,%al
jne    122a <ffpsvc+0xaa>
lea    0xdff(%rip),%rsi
mov    %r15,%rdi
mov    $0x8,%edx
call   1040 <strncmp@plt>
test   %eax,%eax
je     1289 <ffpsvc+0x109>
mov    (%r15),%al
cmp    $0x45,%al
jne    1249 <ffpsvc+0xc9>
lea    0xde9(%rip),%rsi
mov    %r15,%rdi
mov    $0x8,%edx
call   1040 <strncmp@plt>
test   %eax,%eax
je     1289 <ffpsvc+0x109>
mov    (%r15),%al
cmp    $0x20,%al
jne    1265 <ffpsvc+0xe5>
lea    0xdd3(%rip),%rsi
mov    %r15,%rdi
mov    $0x8,%edx
call   1040 <strncmp@plt>
test   %eax,%eax
je     1289 <ffpsvc+0x109>
cmpb   $0x3d,0x8(%r15)
jne    1289 <ffpsvc+0x109>
lea    0x8(%r15),%rdi
lea    0xdb9(%rip),%rsi
mov    $0x2,%edx
call   1040 <strncmp@plt>
test   %eax,%eax
je     1334 <ffpsvc+0x1b4>
test   %r12,%r12
je     1526 <ffpsvc+0x3a6>
add    $0x8,%r15
mov    %r12,%rdi
mov    %r15,%rsi
call   1050 <strcpy@plt>
add    $0xfffffff7,%ebx
js     1526 <ffpsvc+0x3a6>
nopw   0x0(%rax,%rax,1)
mov    %ebx,%eax
cmpb   $0x20,(%r12,%rax,1)
jne    1526 <ffpsvc+0x3a6>
movb   $0x0,(%r12,%rax,1)
lea    -0x1(%rax),%ebx
test   %eax,%eax
jg     12b0 <ffpsvc+0x130>
jmp    1526 <ffpsvc+0x3a6>
lea    0xd35(%rip),%rsi
mov    %r15,%rdi
call   1090 <strcspn@plt>
cmp    %rbx,%rax
jne    132b <ffpsvc+0x1ab>
test   %r12,%r12
je     1526 <ffpsvc+0x3a6>
cmp    $0x9,%rbx
jb     1526 <ffpsvc+0x3a6>
add    $0x8,%r15
mov    %r12,%rdi
mov    %r15,%rsi
call   1050 <strcpy@plt>
add    $0xfffffff7,%ebx
js     1526 <ffpsvc+0x3a6>
mov    %ebx,%eax
cmpb   $0x20,(%r12,%rax,1)
jne    1526 <ffpsvc+0x3a6>
movb   $0x0,(%r12,%rax,1)
lea    -0x1(%rax),%ebx
test   %eax,%eax
jg     130d <ffpsvc+0x18d>
jmp    1526 <ffpsvc+0x3a6>
mov    %rax,%rbp
add    $0x1,%rbp
jmp    1339 <ffpsvc+0x1b9>
mov    $0xa,%ebp
lea    (%r15,%rbp,1),%rdi
lea    0xcea(%rip),%rsi
call   1080 <strspn@plt>
add    %rbp,%rax
cmp    %rbx,%rax
je     1526 <ffpsvc+0x3a6>
mov    (%r15,%rax,1),%cl
cmp    $0x27,%cl
je     13c5 <ffpsvc+0x245>
lea    (%r15,%rax,1),%rbx
cmp    $0x28,%cl
je     1379 <ffpsvc+0x1f9>
cmp    $0x2f,%cl
jne    141f <ffpsvc+0x29f>
add    $0x1,%rax
jmp    14b3 <ffpsvc+0x333>
mov    %rax,(%rsp)
lea    0xcdf(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcspn@plt>
mov    %rax,%rbp
mov    %rbx,%rdi
call   1060 <strlen@plt>
cmp    %rax,%rbp
jne    1483 <ffpsvc+0x303>
lea    0xcbe(%rip),%rdi
call   1070 <ffpmsg@plt>
mov    %r15,%rdi
call   1070 <ffpmsg@plt>
movl   $0xcd,(%r14)
mov    $0xcd,%eax
jmp    1529 <ffpsvc+0x3a9>
movb   $0x27,0x0(%r13)
lea    0x1(%rax),%rcx
mov    $0x1,%esi
cmp    %rbx,%rcx
jae    1452 <ffpsvc+0x2d2>
mov    $0x1,%esi
jmp    13f6 <ffpsvc+0x276>
mov    %rcx,%rax
movslq %esi,%rsi
mov    %dl,0x0(%r13,%rsi,1)
add    $0x1,%esi
lea    0x1(%rax),%rcx
cmp    %rbx,%rcx
jae    1452 <ffpsvc+0x2d2>
movzbl (%r15,%rcx,1),%edx
cmp    $0x27,%dl
jne    13df <ffpsvc+0x25f>
cmpb   $0x27,0x2(%r15,%rax,1)
movslq %esi,%rdx
movb   $0x27,0x0(%r13,%rdx,1)
jne    1452 <ffpsvc+0x2d2>
add    $0x2,%rax
add    $0x1,%esi
movzbl (%r15,%rax,1),%edx
jmp    13e2 <ffpsvc+0x262>
mov    %rax,(%rsp)
lea    0xc6a(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcspn@plt>
mov    %rax,%rbp
mov    %r13,%rdi
mov    %rbx,%rsi
mov    %rax,%rdx
call   1030 <strncpy@plt>
movb   $0x0,0x0(%r13,%rbp,1)
mov    (%rsp),%rbx
add    %rbp,%rbx
jmp    14b6 <ffpsvc+0x336>
cmp    %rbx,%rcx
jne    14a6 <ffpsvc+0x326>
cmp    $0x45,%esi
mov    $0x45,%ecx
cmovl  %esi,%ecx
movslq %ecx,%rax
movw   $0x27,0x0(%r13,%rax,1)
lea    0xbbf(%rip),%rdi
call   1070 <ffpmsg@plt>
mov    %r15,%rdi
call   1070 <ffpmsg@plt>
jmp    14b6 <ffpsvc+0x336>
lea    0x1(%rbp),%rdx
mov    %r13,%rdi
mov    %rbx,%rsi
call   1030 <strncpy@plt>
movb   $0x0,0x1(%r13,%rbp,1)
mov    (%rsp),%rax
lea    (%rax,%rbp,1),%rbx
add    $0x1,%rbx
jmp    14b6 <ffpsvc+0x336>
movslq %esi,%rcx
movb   $0x0,0x1(%rcx,%r13,1)
add    $0x2,%rax
mov    %rax,%rbx
test   %r12,%r12
je     1526 <ffpsvc+0x3a6>
lea    (%r15,%rbx,1),%rdi
lea    0xb68(%rip),%rsi
call   1080 <strspn@plt>
add    %rbx,%rax
cmp    $0x4f,%rax
ja     1526 <ffpsvc+0x3a6>
cmpb   $0x2f,(%r15,%rax,1)
jne    14ed <ffpsvc+0x36d>
cmpb   $0x20,0x1(%r15,%rax,1)
lea    0x2(%rax),%rcx
lea    0x1(%rax),%rax
cmove  %rcx,%rax
add    %rax,%r15
mov    %r12,%rdi
mov    %r15,%rsi
call   10a0 <strcat@plt>
mov    %r12,%rdi
call   1060 <strlen@plt>
test   %eax,%eax
jle    1526 <ffpsvc+0x3a6>
mov    %eax,%eax
add    $0x1,%rax
lea    -0x2(%rax),%ecx
cmpb   $0x20,(%r12,%rcx,1)
jne    1526 <ffpsvc+0x3a6>
movb   $0x0,(%r12,%rcx,1)
add    $0xffffffffffffffff,%rax
cmp    $0x1,%rax
ja     150d <ffpsvc+0x38d>
mov    (%r14),%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [10 x i8] c"HIERARCH \00"
@.str.1 = [2 x i8] c"=\00"
@.str.2 = [9 x i8] c"COMMENT \00"
@.str.3 = [9 x i8] c"HISTORY \00"
@.str.4 = [9 x i8] c"END \00"
@.str.5 = [9 x i8] c" \00"
@.str.6 = [3 x i8] c"= \00"
@.str.7 = [2 x i8] c" \00"
@.str.8 = [48 x i8] c"This keyword string value has no closing quote:\00"
@.str.9 = [2 x i8] c")\00"
@.str.10 = [47 x i8] c"This complex keyword value has no closing ')':\00"
@.str.11 = [3 x i8] c" /\00"
define i32 @ffpsvc(i8* %0, i8* %1, i8* %2, i32* %3) {
%5 = alloca i32
%6 = alloca i8*
%7 = alloca i8*
%8 = alloca i8*
%9 = alloca i32*
%10 = alloca i32
%11 = alloca i64
%12 = alloca i64
%13 = alloca i64
%14 = alloca i64
store i8* %0, i8** %6
store i8* %1, i8** %7
store i8* %2, i8** %8
store i32* %3, i32** %9
%15 = load i32*, i32** %9
%16 = load i32, i32* %15
%17 = icmp sgt i32 %16, 0
br i1 %17, label %18, label %21
18: ; preds = %4
%19 = load i32*, i32** %9
%20 = load i32, i32* %19
store i32 %20, i32* %5
br label %546
21: ; preds = %4
%22 = load i8*, i8** %7
%23 = getelementptr inbounds i8, i8* %22, i64 0
store i8 0, i8* %23
%24 = load i8*, i8** %8
%25 = icmp ne i8* %24, null
br i1 %25, label %26, label %29
26: ; preds = %21
%27 = load i8*, i8** %8
%28 = getelementptr inbounds i8, i8* %27, i64 0
store i8 0, i8* %28
br label %29
29: ; preds = %26, %21
%30 = load i8*, i8** %6
%31 = call i64 @strlen(i8* %30)
store i64 %31, i64* %12
%32 = load i8*, i8** %6
%33 = getelementptr inbounds i8, i8* %32, i64 0
%34 = load i8, i8* %33
%35 = sext i8 %34 to i32
%36 = load i8, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0)
%37 = sext i8 %36 to i32
%38 = icmp slt i32 %35, %37
br i1 %38, label %39, label %40
39: ; preds = %29
br label %54
40: ; preds = %29
%41 = load i8*, i8** %6
%42 = getelementptr inbounds i8, i8* %41, i64 0
%43 = load i8, i8* %42
%44 = sext i8 %43 to i32
%45 = load i8, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0)
%46 = sext i8 %45 to i32
%47 = icmp sgt i32 %44, %46
br i1 %47, label %48, label %49
48: ; preds = %40
br label %52
49: ; preds = %40
%50 = load i8*, i8** %6
%51 = call i32 @strncmp(i8* %50, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i32 9)
br label %52
52: ; preds = %49, %48
%53 = phi i32 [ 1, %48 ], [ %51, %49 ]
br label %54
54: ; preds = %52, %39
%55 = phi i32 [ -1, %39 ], [ %53, %52 ]
%56 = icmp eq i32 %55, 0
br i1 %56, label %57, label %108
57: ; preds = %54
%58 = load i8*, i8** %6
%59 = call i64 @strcspn(i8* %58, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
store i64 %59, i64* %14
%60 = load i64, i64* %14
%61 = load i64, i64* %12
%62 = icmp eq i64 %60, %61
br i1 %62, label %63, label %105
63: ; preds = %57
%64 = load i8*, i8** %8
%65 = icmp ne i8* %64, null
br i1 %65, label %66, label %102
66: ; preds = %63
%67 = load i64, i64* %12
%68 = icmp ugt i64 %67, 8
br i1 %68, label %69, label %101
69: ; preds = %66
%70 = load i8*, i8** %8
%71 = load i8*, i8** %6
%72 = getelementptr inbounds i8, i8* %71, i64 8
%73 = call i32 @strcpy(i8* %70, i8* %72)
%74 = load i64, i64* %12
%75 = sub i64 %74, 8
%76 = trunc i64 %75 to i32
store i32 %76, i32* %10
%77 = load i32, i32* %10
%78 = add nsw i32 %77, -1
store i32 %78, i32* %10
br label %79
79: ; preds = %97, %69
%80 = load i32, i32* %10
%81 = icmp sge i32 %80, 0
br i1 %81, label %82, label %100
82: ; preds = %79
%83 = load i8*, i8** %8
%84 = load i32, i32* %10
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds i8, i8* %83, i64 %85
%87 = load i8, i8* %86
%88 = sext i8 %87 to i32
%89 = icmp eq i32 %88, 32
br i1 %89, label %90, label %95
90: ; preds = %82
%91 = load i8*, i8** %8
%92 = load i32, i32* %10
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds i8, i8* %91, i64 %93
store i8 0, i8* %94
br label %96
95: ; preds = %82
br label %100
96: ; preds = %90
br label %97
97: ; preds = %96
%98 = load i32, i32* %10
%99 = add nsw i32 %98, -1
store i32 %99, i32* %10
br label %79
100: ; preds = %95, %79
br label %101
101: ; preds = %100, %66
br label %102
102: ; preds = %101, %63
%103 = load i32*, i32** %9
%104 = load i32, i32* %103
store i32 %104, i32* %5
br label %546
105: ; preds = %57
%106 = load i64, i64* %14
%107 = add i64 %106, 1
store i64 %107, i64* %14
br label %288
108: ; preds = %54
%109 = load i64, i64* %12
%110 = icmp ult i64 %109, 9
br i1 %110, label %244, label %111
111: ; preds = %108
%112 = load i8*, i8** %6
%113 = getelementptr inbounds i8, i8* %112, i64 0
%114 = load i8, i8* %113
%115 = sext i8 %114 to i32
%116 = load i8, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0)
%117 = sext i8 %116 to i32
%118 = icmp slt i32 %115, %117
br i1 %118, label %119, label %120
119: ; preds = %111
br label %134
120: ; preds = %111
%121 = load i8*, i8** %6
%122 = getelementptr inbounds i8, i8* %121, i64 0
%123 = load i8, i8* %122
%124 = sext i8 %123 to i32
%125 = load i8, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0)
%126 = sext i8 %125 to i32
%127 = icmp sgt i32 %124, %126
br i1 %127, label %128, label %129
128: ; preds = %120
br label %132
129: ; preds = %120
%130 = load i8*, i8** %6
%131 = call i32 @strncmp(i8* %130, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32 8)
br label %132
132: ; preds = %129, %128
%133 = phi i32 [ 1, %128 ], [ %131, %129 ]
br label %134
134: ; preds = %132, %119
%135 = phi i32 [ -1, %119 ], [ %133, %132 ]
%136 = icmp eq i32 %135, 0
br i1 %136, label %244, label %137
137: ; preds = %134
%138 = load i8*, i8** %6
%139 = getelementptr inbounds i8, i8* %138, i64 0
%140 = load i8, i8* %139
%141 = sext i8 %140 to i32
%142 = load i8, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0)
%143 = sext i8 %142 to i32
%144 = icmp slt i32 %141, %143
br i1 %144, label %145, label %146
145: ; preds = %137
br label %160
146: ; preds = %137
%147 = load i8*, i8** %6
%148 = getelementptr inbounds i8, i8* %147, i64 0
%149 = load i8, i8* %148
%150 = sext i8 %149 to i32
%151 = load i8, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0)
%152 = sext i8 %151 to i32
%153 = icmp sgt i32 %150, %152
br i1 %153, label %154, label %155
154: ; preds = %146
br label %158
155: ; preds = %146
%156 = load i8*, i8** %6
%157 = call i32 @strncmp(i8* %156, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0), i32 8)
br label %158
158: ; preds = %155, %154
%159 = phi i32 [ 1, %154 ], [ %157, %155 ]
br label %160
160: ; preds = %158, %145
%161 = phi i32 [ -1, %145 ], [ %159, %158 ]
%162 = icmp eq i32 %161, 0
br i1 %162, label %244, label %163
163: ; preds = %160
%164 = load i8*, i8** %6
%165 = getelementptr inbounds i8, i8* %164, i64 0
%166 = load i8, i8* %165
%167 = sext i8 %166 to i32
%168 = load i8, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0)
%169 = sext i8 %168 to i32
%170 = icmp slt i32 %167, %169
br i1 %170, label %171, label %172
171: ; preds = %163
br label %186
172: ; preds = %163
%173 = load i8*, i8** %6
%174 = getelementptr inbounds i8, i8* %173, i64 0
%175 = load i8, i8* %174
%176 = sext i8 %175 to i32
%177 = load i8, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0)
%178 = sext i8 %177 to i32
%179 = icmp sgt i32 %176, %178
br i1 %179, label %180, label %181
180: ; preds = %172
br label %184
181: ; preds = %172
%182 = load i8*, i8** %6
%183 = call i32 @strncmp(i8* %182, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0), i32 8)
br label %184
184: ; preds = %181, %180
%185 = phi i32 [ 1, %180 ], [ %183, %181 ]
br label %186
186: ; preds = %184, %171
%187 = phi i32 [ -1, %171 ], [ %185, %184 ]
%188 = icmp eq i32 %187, 0
br i1 %188, label %244, label %189
189: ; preds = %186
%190 = load i8*, i8** %6
%191 = getelementptr inbounds i8, i8* %190, i64 0
%192 = load i8, i8* %191
%193 = sext i8 %192 to i32
%194 = load i8, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.5, i64 0, i64 0)
%195 = sext i8 %194 to i32
%196 = icmp slt i32 %193, %195
br i1 %196, label %197, label %198
197: ; preds = %189
br label %212
198: ; preds = %189
%199 = load i8*, i8** %6
%200 = getelementptr inbounds i8, i8* %199, i64 0
%201 = load i8, i8* %200
%202 = sext i8 %201 to i32
%203 = load i8, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.5, i64 0, i64 0)
%204 = sext i8 %203 to i32
%205 = icmp sgt i32 %202, %204
br i1 %205, label %206, label %207
206: ; preds = %198
br label %210
207: ; preds = %198
%208 = load i8*, i8** %6
%209 = call i32 @strncmp(i8* %208, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.5, i64 0, i64 0), i32 8)
br label %210
210: ; preds = %207, %206
%211 = phi i32 [ 1, %206 ], [ %209, %207 ]
br label %212
212: ; preds = %210, %197
%213 = phi i32 [ -1, %197 ], [ %211, %210 ]
%214 = icmp eq i32 %213, 0
br i1 %214, label %244, label %215
215: ; preds = %212
%216 = load i8*, i8** %6
%217 = getelementptr inbounds i8, i8* %216, i64 8
%218 = getelementptr inbounds i8, i8* %217, i64 0
%219 = load i8, i8* %218
%220 = sext i8 %219 to i32
%221 = load i8, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0)
%222 = sext i8 %221 to i32
%223 = icmp slt i32 %220, %222
br i1 %223, label %224, label %225
224: ; preds = %215
br label %241
225: ; preds = %215
%226 = load i8*, i8** %6
%227 = getelementptr inbounds i8, i8* %226, i64 8
%228 = getelementptr inbounds i8, i8* %227, i64 0
%229 = load i8, i8* %228
%230 = sext i8 %229 to i32
%231 = load i8, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0)
%232 = sext i8 %231 to i32
%233 = icmp sgt i32 %230, %232
br i1 %233, label %234, label %235
234: ; preds = %225
br label %239
235: ; preds = %225
%236 = load i8*, i8** %6
%237 = getelementptr inbounds i8, i8* %236, i64 8
%238 = call i32 @strncmp(i8* %237, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i32 2)
br label %239
239: ; preds = %235, %234
%240 = phi i32 [ 1, %234 ], [ %238, %235 ]
br label %241
241: ; preds = %239, %224
%242 = phi i32 [ -1, %224 ], [ %240, %239 ]
%243 = icmp ne i32 %242, 0
br i1 %243, label %244, label %286
244: ; preds = %241, %212, %186, %160, %134, %108
%245 = load i8*, i8** %8
%246 = icmp ne i8* %245, null
br i1 %246, label %247, label %283
247: ; preds = %244
%248 = load i64, i64* %12
%249 = icmp ugt i64 %248, 8
br i1 %249, label %250, label %282
250: ; preds = %247
%251 = load i8*, i8** %8
%252 = load i8*, i8** %6
%253 = getelementptr inbounds i8, i8* %252, i64 8
%254 = call i32 @strcpy(i8* %251, i8* %253)
%255 = load i64, i64* %12
%256 = sub i64 %255, 8
%257 = trunc i64 %256 to i32
store i32 %257, i32* %10
%258 = load i32, i32* %10
%259 = add nsw i32 %258, -1
store i32 %259, i32* %10
br label %260
260: ; preds = %278, %250
%261 = load i32, i32* %10
%262 = icmp sge i32 %261, 0
br i1 %262, label %263, label %281
263: ; preds = %260
%264 = load i8*, i8** %8
%265 = load i32, i32* %10
%266 = sext i32 %265 to i64
%267 = getelementptr inbounds i8, i8* %264, i64 %266
%268 = load i8, i8* %267
%269 = sext i8 %268 to i32
%270 = icmp eq i32 %269, 32
br i1 %270, label %271, label %276
271: ; preds = %263
%272 = load i8*, i8** %8
%273 = load i32, i32* %10
%274 = sext i32 %273 to i64
%275 = getelementptr inbounds i8, i8* %272, i64 %274
store i8 0, i8* %275
br label %277
276: ; preds = %263
br label %281
277: ; preds = %271
br label %278
278: ; preds = %277
%279 = load i32, i32* %10
%280 = add nsw i32 %279, -1
store i32 %280, i32* %10
br label %260
281: ; preds = %276, %260
br label %282
282: ; preds = %281, %247
br label %283
283: ; preds = %282, %244
%284 = load i32*, i32** %9
%285 = load i32, i32* %284
store i32 %285, i32* %5
br label %546
286: ; preds = %241
store i64 10, i64* %14
br label %287
287: ; preds = %286
br label %288
288: ; preds = %287, %105
%289 = load i8*, i8** %6
%290 = load i64, i64* %14
%291 = getelementptr inbounds i8, i8* %289, i64 %290
%292 = call i64 @strspn(i8* %291, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.7, i64 0, i64 0))
store i64 %292, i64* %13
%293 = load i64, i64* %13
%294 = load i64, i64* %14
%295 = add i64 %293, %294
%296 = load i64, i64* %12
%297 = icmp eq i64 %295, %296
br i1 %297, label %298, label %301
298: ; preds = %288
%299 = load i32*, i32** %9
%300 = load i32, i32* %299
store i32 %300, i32* %5
br label %546
301: ; preds = %288
%302 = load i64, i64* %14
%303 = load i64, i64* %13
%304 = add i64 %302, %303
store i64 %304, i64* %11
%305 = load i8*, i8** %6
%306 = load i64, i64* %11
%307 = getelementptr inbounds i8, i8* %305, i64 %306
%308 = load i8, i8* %307
%309 = sext i8 %308 to i32
%310 = icmp eq i32 %309, 47
br i1 %310, label %311, label %314
311: ; preds = %301
%312 = load i64, i64* %11
%313 = add i64 %312, 1
store i64 %313, i64* %11
br label %476
314: ; preds = %301
%315 = load i8*, i8** %6
%316 = load i64, i64* %11
%317 = getelementptr inbounds i8, i8* %315, i64 %316
%318 = load i8, i8* %317
%319 = sext i8 %318 to i32
%320 = icmp eq i32 %319, 39
br i1 %320, label %321, label %419
321: ; preds = %314
%322 = load i8*, i8** %6
%323 = load i64, i64* %11
%324 = getelementptr inbounds i8, i8* %322, i64 %323
%325 = load i8, i8* %324
%326 = load i8*, i8** %7
%327 = getelementptr inbounds i8, i8* %326, i64 0
store i8 %325, i8* %327
store i32 1, i32* %10
%328 = load i64, i64* %11
%329 = add i64 %328, 1
store i64 %329, i64* %11
br label %330
330: ; preds = %381, %321
%331 = load i64, i64* %11
%332 = load i64, i64* %12
%333 = icmp ult i64 %331, %332
br i1 %333, label %334, label %386
334: ; preds = %330
%335 = load i8*, i8** %6
%336 = load i64, i64* %11
%337 = getelementptr inbounds i8, i8* %335, i64 %336
%338 = load i8, i8* %337
%339 = sext i8 %338 to i32
%340 = icmp eq i32 %339, 39
br i1 %340, label %341, label %372
341: ; preds = %334
%342 = load i8*, i8** %6
%343 = load i64, i64* %11
%344 = add i64 %343, 1
%345 = getelementptr inbounds i8, i8* %342, i64 %344
%346 = load i8, i8* %345
%347 = sext i8 %346 to i32
%348 = icmp eq i32 %347, 39
br i1 %348, label %349, label %362
349: ; preds = %341
%350 = load i8*, i8** %6
%351 = load i64, i64* %11
%352 = getelementptr inbounds i8, i8* %350, i64 %351
%353 = load i8, i8* %352
%354 = load i8*, i8** %7
%355 = load i32, i32* %10
%356 = sext i32 %355 to i64
%357 = getelementptr inbounds i8, i8* %354, i64 %356
store i8 %353, i8* %357
%358 = load i64, i64* %11
%359 = add i64 %358, 1
store i64 %359, i64* %11
%360 = load i32, i32* %10
%361 = add nsw i32 %360, 1
store i32 %361, i32* %10
br label %371
362: ; preds = %341
%363 = load i8*, i8** %6
%364 = load i64, i64* %11
%365 = getelementptr inbounds i8, i8* %363, i64 %364
%366 = load i8, i8* %365
%367 = load i8*, i8** %7
%368 = load i32, i32* %10
%369 = sext i32 %368 to i64
%370 = getelementptr inbounds i8, i8* %367, i64 %369
store i8 %366, i8* %370
br label %386
371: ; preds = %349
br label %372
372: ; preds = %371, %334
%373 = load i8*, i8** %6
%374 = load i64, i64* %11
%375 = getelementptr inbounds i8, i8* %373, i64 %374
%376 = load i8, i8* %375
%377 = load i8*, i8** %7
%378 = load i32, i32* %10
%379 = sext i32 %378 to i64
%380 = getelementptr inbounds i8, i8* %377, i64 %379
store i8 %376, i8* %380
br label %381
381: ; preds = %372
%382 = load i64, i64* %11
%383 = add i64 %382, 1
store i64 %383, i64* %11
%384 = load i32, i32* %10
%385 = add nsw i32 %384, 1
store i32 %385, i32* %10
br label %330
386: ; preds = %362, %330
%387 = load i64, i64* %11
%388 = load i64, i64* %12
%389 = icmp eq i64 %387, %388
br i1 %389, label %390, label %410
390: ; preds = %386
%391 = load i32, i32* %10
%392 = icmp slt i32 %391, 69
br i1 %392, label %393, label %395
393: ; preds = %390
%394 = load i32, i32* %10
br label %396
395: ; preds = %390
br label %396
396: ; preds = %395, %393
%397 = phi i32 [ %394, %393 ], [ 69, %395 ]
store i32 %397, i32* %10
%398 = load i8*, i8** %7
%399 = load i32, i32* %10
%400 = sext i32 %399 to i64
%401 = getelementptr inbounds i8, i8* %398, i64 %400
store i8 39, i8* %401
%402 = load i8*, i8** %7
%403 = load i32, i32* %10
%404 = add nsw i32 %403, 1
%405 = sext i32 %404 to i64
%406 = getelementptr inbounds i8, i8* %402, i64 %405
store i8 0, i8* %406
%407 = call i32 @ffpmsg(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.8, i64 0, i64 0))
%408 = load i8*, i8** %6
%409 = call i32 @ffpmsg(i8* %408)
br label %418
410: ; preds = %386
%411 = load i8*, i8** %7
%412 = load i32, i32* %10
%413 = add nsw i32 %412, 1
%414 = sext i32 %413 to i64
%415 = getelementptr inbounds i8, i8* %411, i64 %414
store i8 0, i8* %415
%416 = load i64, i64* %11
%417 = add i64 %416, 1
store i64 %417, i64* %11
br label %418
418: ; preds = %410, %396
br label %475
419: ; preds = %314
%420 = load i8*, i8** %6
%421 = load i64, i64* %11
%422 = getelementptr inbounds i8, i8* %420, i64 %421
%423 = load i8, i8* %422
%424 = sext i8 %423 to i32
%425 = icmp eq i32 %424, 40
br i1 %425, label %426, label %457
426: ; preds = %419
%427 = load i8*, i8** %6
%428 = load i64, i64* %11
%429 = getelementptr inbounds i8, i8* %427, i64 %428
%430 = call i64 @strcspn(i8* %429, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.9, i64 0, i64 0))
store i64 %430, i64* %13
%431 = load i64, i64* %13
%432 = load i8*, i8** %6
%433 = load i64, i64* %11
%434 = getelementptr inbounds i8, i8* %432, i64 %433
%435 = call i64 @strlen(i8* %434)
%436 = icmp eq i64 %431, %435
br i1 %436, label %437, label %442
437: ; preds = %426
%438 = call i32 @ffpmsg(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.10, i64 0, i64 0))
%439 = load i8*, i8** %6
%440 = call i32 @ffpmsg(i8* %439)
%441 = load i32*, i32** %9
store i32 205, i32* %441
store i32 205, i32* %5
br label %546
442: ; preds = %426
%443 = load i64, i64* %13
%444 = add i64 %443, 1
store i64 %444, i64* %13
%445 = load i8*, i8** %7
%446 = load i8*, i8** %6
%447 = load i64, i64* %11
%448 = getelementptr inbounds i8, i8* %446, i64 %447
%449 = load i64, i64* %13
%450 = call i32 @strncpy(i8* %445, i8* %448, i64 %449)
%451 = load i8*, i8** %7
%452 = load i64, i64* %13
%453 = getelementptr inbounds i8, i8* %451, i64 %452
store i8 0, i8* %453
%454 = load i64, i64* %11
%455 = load i64, i64* %13
%456 = add i64 %454, %455
store i64 %456, i64* %11
br label %474
457: ; preds = %419
%458 = load i8*, i8** %6
%459 = load i64, i64* %11
%460 = getelementptr inbounds i8, i8* %458, i64 %459
%461 = call i64 @strcspn(i8* %460, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.11, i64 0, i64 0))
store i64 %461, i64* %13
%462 = load i8*, i8** %7
%463 = load i8*, i8** %6
%464 = load i64, i64* %11
%465 = getelementptr inbounds i8, i8* %463, i64 %464
%466 = load i64, i64* %13
%467 = call i32 @strncpy(i8* %462, i8* %465, i64 %466)
%468 = load i8*, i8** %7
%469 = load i64, i64* %13
%470 = getelementptr inbounds i8, i8* %468, i64 %469
store i8 0, i8* %470
%471 = load i64, i64* %11
%472 = load i64, i64* %13
%473 = add i64 %471, %472
store i64 %473, i64* %11
br label %474
474: ; preds = %457, %442
br label %475
475: ; preds = %474, %418
br label %476
476: ; preds = %475, %311
%477 = load i8*, i8** %8
%478 = icmp ne i8* %477, null
br i1 %478, label %479, label %543
479: ; preds = %476
%480 = load i8*, i8** %6
%481 = load i64, i64* %11
%482 = getelementptr inbounds i8, i8* %480, i64 %481
%483 = call i64 @strspn(i8* %482, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.7, i64 0, i64 0))
store i64 %483, i64* %13
%484 = load i64, i64* %11
%485 = load i64, i64* %13
%486 = add i64 %484, %485
store i64 %486, i64* %11
%487 = load i64, i64* %11
%488 = icmp ult i64 %487, 80
br i1 %488, label %489, label %542
489: ; preds = %479
%490 = load i8*, i8** %6
%491 = load i64, i64* %11
%492 = getelementptr inbounds i8, i8* %490, i64 %491
%493 = load i8, i8* %492
%494 = sext i8 %493 to i32
%495 = icmp eq i32 %494, 47
br i1 %495, label %496, label %509
496: ; preds = %489
%497 = load i64, i64* %11
%498 = add i64 %497, 1
store i64 %498, i64* %11
%499 = load i8*, i8** %6
%500 = load i64, i64* %11
%501 = getelementptr inbounds i8, i8* %499, i64 %500
%502 = load i8, i8* %501
%503 = sext i8 %502 to i32
%504 = icmp eq i32 %503, 32
br i1 %504, label %505, label %508
505: ; preds = %496
%506 = load i64, i64* %11
%507 = add i64 %506, 1
store i64 %507, i64* %11
br label %508
508: ; preds = %505, %496
br label %509
509: ; preds = %508, %489
%510 = load i8*, i8** %8
%511 = load i8*, i8** %6
%512 = load i64, i64* %11
%513 = getelementptr inbounds i8, i8* %511, i64 %512
%514 = call i32 @strcat(i8* %510, i8* %513)
%515 = load i8*, i8** %8
%516 = call i64 @strlen(i8* %515)
%517 = trunc i64 %516 to i32
store i32 %517, i32* %10
%518 = load i32, i32* %10
%519 = add nsw i32 %518, -1
store i32 %519, i32* %10
br label %520
520: ; preds = %538, %509
%521 = load i32, i32* %10
%522 = icmp sge i32 %521, 0
br i1 %522, label %523, label %541
523: ; preds = %520
%524 = load i8*, i8** %8
%525 = load i32, i32* %10
%526 = sext i32 %525 to i64
%527 = getelementptr inbounds i8, i8* %524, i64 %526
%528 = load i8, i8* %527
%529 = sext i8 %528 to i32
%530 = icmp eq i32 %529, 32
br i1 %530, label %531, label %536
531: ; preds = %523
%532 = load i8*, i8** %8
%533 = load i32, i32* %10
%534 = sext i32 %533 to i64
%535 = getelementptr inbounds i8, i8* %532, i64 %534
store i8 0, i8* %535
br label %537
536: ; preds = %523
br label %541
537: ; preds = %531
br label %538
538: ; preds = %537
%539 = load i32, i32* %10
%540 = add nsw i32 %539, -1
store i32 %540, i32* %10
br label %520
541: ; preds = %536, %520
br label %542
542: ; preds = %541, %479
br label %543
543: ; preds = %542, %476
%544 = load i32*, i32** %9
%545 = load i32, i32* %544
store i32 %545, i32* %5
br label %546
546: ; preds = %543, %437, %298, %283, %102, %18
%547 = load i32, i32* %5
ret i32 %547
}

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