#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 *);
int /*<<< orphan*/ is_hostaddr(char *);
int /*<<< orphan*/ is_hostname(char *);
scalar_t__ isalnum(char);
int /*<<< orphan*/ isalpha(char);
scalar_t__ isdigit(char);
scalar_t__ isxdigit(char);
char *mp_strdup(char const *);
char *strsep(char **, char *);
scalar_t__ strstr(char *, char *);
int is_url(const char *url) {
  char *buf, *buf2;
  char *ptr, *remain;
  ptr = remain = mp_strdup(url);
  buf = strsep(&remain, ":");
  if (!remain || !isalpha(*buf)) {
    free(ptr);
    return (0);
  }
  while (*(++buf)) {
    if (isalnum(*buf) || *buf == '+' || *buf == '-' || *buf == '.')
      continue;
    free(ptr);
    return (0);
  }
  if (*(remain) != '/' || *(remain + 1) != '/') {
    free(ptr);
    return (0);
  }
  remain += 2;
  buf = strsep(&remain, "/?#");
  if (*buf != '\0') {
    if (strstr(buf, "@")) {
      buf2 = strsep(&buf, "@");
      do {
        if (isalnum(*buf2) || *buf2 == '+' || *buf2 == '-' || *buf2 == '.' ||
            *buf2 == '~' || *buf2 == '!' || *buf2 == '$' || *buf2 == '&' ||
            *buf2 == '\'' || *buf2 == '(' || *buf2 == ')' || *buf2 == '*' ||
            *buf2 == ',' || *buf2 == ';' || *buf2 == '=' || *buf2 == ':')
          continue;
        if (*buf2 == '%' && isxdigit(*(buf2 + 1)) && isxdigit(*(buf2 + 2))) {
          buf2 += 2;
          continue;
        }
        free(ptr);
        return (0);
      } while (*(++buf2));
    }
    if (*buf == '[') {
      buf++;
      buf2 = strsep(&buf, "]");
      if (*buf2 == ':')
        buf2++;
      if (!buf) {
        free(ptr);
        return (0);
      }
      do {
        if (isxdigit(*buf2) || *buf2 == ':')
          continue;
        free(ptr);
        return (0);
      } while (*(++buf2));
    } else if (isdigit(*buf)) {
      buf2 = strsep(&buf, ":");
      if (!is_hostaddr(buf2)) {
        free(ptr);
        return (0);
      }
    } else {
      buf2 = strsep(&buf, ":");
      if (!is_hostname(buf2)) {
        free(ptr);
        return (0);
      }
    }
    if (buf && *buf != '\0') {
      do {
        if (isdigit(*buf))
          continue;
        free(ptr);
        return (0);
      } while (*(++buf));
    }
  }
  if (!remain || *remain == '\0') {
    free(ptr);
    return (1);
  }
  buf = strsep(&remain, "?#");
  while (1) {
    if (*buf == '\0')
      break;
    if (isalnum(*buf) || *buf == '+' || *buf == '-' || *buf == '_' ||
        *buf == '.' || *buf == '~' || *buf == '!' || *buf == '$' ||
        *buf == '&' || *buf == '\'' || *buf == '(' || *buf == ')' ||
        *buf == '*' || *buf == ',' || *buf == ';' || *buf == '=' ||
        *buf == ':' || *buf == '@' || *buf == '/') {
      buf++;
      continue;
    }
    if (*buf == '%' && isxdigit(*(buf + 1)) && isxdigit(*(buf + 2))) {
      buf += 3;
      continue;
    }
    free(ptr);
    return (0);
  }
  if (!remain || *remain == '\0') {
    free(ptr);
    return (1);
  }
  buf = remain;
  while (1) {
    if (*buf == '\0')
      break;
    if (isalnum(*buf) || *buf == '+' || *buf == '-' || *buf == '_' ||
        *buf == '.' || *buf == '~' || *buf == '!' || *buf == '$' ||
        *buf == '&' || *buf == '\'' || *buf == '(' || *buf == ')' ||
        *buf == '*' || *buf == ',' || *buf == ';' || *buf == '=' ||
        *buf == ':' || *buf == '@' || *buf == '/' || *buf == '?' ||
        *buf == '#') {
      buf++;
      continue;
    }
    if (*buf == '%' && isxdigit(*(buf + 1)) && isxdigit(*(buf + 2))) {
      buf += 3;
      continue;
    }
    free(ptr);
    return (0);
  }
  free(ptr);
  return (1);
}


x86 assembly (clang, -O0):
<is_url>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rdi
call   1050 <mp_strdup@plt>
mov    %rax,-0x30(%rbp)
mov    %rax,-0x28(%rbp)
lea    -0x30(%rbp),%rdi
lea    0xe38(%rip),%rsi
call   1090 <strsep@plt>
mov    %rax,-0x18(%rbp)
cmpq   $0x0,-0x30(%rbp)
je     11f1 <is_url+0x51>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edi
call   10a0 <isalpha@plt>
cmp    $0x0,%eax
jne    1206 <is_url+0x66>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
movl   $0x0,-0x4(%rbp)
jmp    1aae <is_url+0x90e>
jmp    120b <is_url+0x6b>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
cmpb   $0x0,0x1(%rax)
je     1284 <is_url+0xe4>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edi
call   1060 <isalnum@plt>
cmp    $0x0,%rax
jne    126a <is_url+0xca>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2b,%eax
je     126a <is_url+0xca>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
je     126a <is_url+0xca>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    126f <is_url+0xcf>
jmp    120b <is_url+0x6b>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
movl   $0x0,-0x4(%rbp)
jmp    1aae <is_url+0x90e>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    12a5 <is_url+0x105>
mov    -0x30(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2f,%eax
je     12ba <is_url+0x11a>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
movl   $0x0,-0x4(%rbp)
jmp    1aae <is_url+0x90e>
mov    -0x30(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x30(%rbp)
lea    -0x30(%rbp),%rdi
lea    0xd31(%rip),%rsi
call   1090 <strsep@plt>
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     1682 <is_url+0x4e2>
mov    -0x18(%rbp),%rdi
lea    0xd11(%rip),%rsi
call   10c0 <strstr@plt>
cmp    $0x0,%rax
je     14a5 <is_url+0x305>
lea    -0x18(%rbp),%rdi
lea    0xcf7(%rip),%rsi
call   1090 <strsep@plt>
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movsbl (%rax),%edi
call   1060 <isalnum@plt>
cmp    $0x0,%rax
jne    141e <is_url+0x27e>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2b,%eax
je     141e <is_url+0x27e>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
je     141e <is_url+0x27e>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
je     141e <is_url+0x27e>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7e,%eax
je     141e <is_url+0x27e>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x21,%eax
je     141e <is_url+0x27e>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x24,%eax
je     141e <is_url+0x27e>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x26,%eax
je     141e <is_url+0x27e>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x27,%eax
je     141e <is_url+0x27e>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x28,%eax
je     141e <is_url+0x27e>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x29,%eax
je     141e <is_url+0x27e>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
je     141e <is_url+0x27e>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2c,%eax
je     141e <is_url+0x27e>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3b,%eax
je     141e <is_url+0x27e>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3d,%eax
je     141e <is_url+0x27e>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3a,%eax
jne    1423 <is_url+0x283>
jmp    1487 <is_url+0x2e7>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x25,%eax
jne    1472 <is_url+0x2d2>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%edi
call   10b0 <isxdigit@plt>
cmp    $0x0,%rax
je     1472 <is_url+0x2d2>
mov    -0x20(%rbp),%rax
movsbl 0x2(%rax),%edi
call   10b0 <isxdigit@plt>
cmp    $0x0,%rax
je     1472 <is_url+0x2d2>
mov    -0x20(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x20(%rbp)
jmp    1487 <is_url+0x2e7>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
movl   $0x0,-0x4(%rbp)
jmp    1aae <is_url+0x90e>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
cmpb   $0x0,0x1(%rax)
jne    1318 <is_url+0x178>
jmp    14a5 <is_url+0x305>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5b,%eax
jne    1574 <is_url+0x3d4>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
lea    -0x18(%rbp),%rdi
lea    0xb3c(%rip),%rsi
call   1090 <strsep@plt>
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3a,%eax
jne    14f1 <is_url+0x351>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
cmpq   $0x0,-0x18(%rbp)
jne    1511 <is_url+0x371>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
movl   $0x0,-0x4(%rbp)
jmp    1aae <is_url+0x90e>
jmp    1516 <is_url+0x376>
mov    -0x20(%rbp),%rax
movsbl (%rax),%edi
call   10b0 <isxdigit@plt>
cmp    $0x0,%rax
jne    153c <is_url+0x39c>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3a,%eax
jne    1541 <is_url+0x3a1>
jmp    1556 <is_url+0x3b6>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
movl   $0x0,-0x4(%rbp)
jmp    1aae <is_url+0x90e>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
cmpb   $0x0,0x1(%rax)
jne    1516 <is_url+0x376>
jmp    160f <is_url+0x46f>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edi
call   1040 <isdigit@plt>
cmp    $0x0,%rax
je     15ca <is_url+0x42a>
lea    -0x18(%rbp),%rdi
lea    0xa6b(%rip),%rsi
call   1090 <strsep@plt>
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rdi
call   1080 <is_hostaddr@plt>
cmp    $0x0,%eax
jne    15c5 <is_url+0x425>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
movl   $0x0,-0x4(%rbp)
jmp    1aae <is_url+0x90e>
jmp    160a <is_url+0x46a>
lea    -0x18(%rbp),%rdi
lea    0xa2b(%rip),%rsi
call   1090 <strsep@plt>
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rdi
call   1070 <is_hostname@plt>
cmp    $0x0,%eax
jne    1605 <is_url+0x465>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
movl   $0x0,-0x4(%rbp)
jmp    1aae <is_url+0x90e>
jmp    160a <is_url+0x46a>
jmp    160f <is_url+0x46f>
cmpq   $0x0,-0x18(%rbp)
je     167d <is_url+0x4dd>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     167d <is_url+0x4dd>
jmp    162f <is_url+0x48f>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edi
call   1040 <isdigit@plt>
cmp    $0x0,%rax
je     164a <is_url+0x4aa>
jmp    165f <is_url+0x4bf>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
movl   $0x0,-0x4(%rbp)
jmp    1aae <is_url+0x90e>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
cmpb   $0x0,0x1(%rax)
jne    162f <is_url+0x48f>
jmp    167d <is_url+0x4dd>
jmp    1682 <is_url+0x4e2>
cmpq   $0x0,-0x30(%rbp)
je     169d <is_url+0x4fd>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    16b2 <is_url+0x512>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
movl   $0x1,-0x4(%rbp)
jmp    1aae <is_url+0x90e>
lea    -0x30(%rbp),%rdi
lea    0x946(%rip),%rsi
call   1090 <strsep@plt>
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    16db <is_url+0x53b>
jmp    1886 <is_url+0x6e6>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edi
call   1060 <isalnum@plt>
cmp    $0x0,%rax
jne    1811 <is_url+0x671>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2b,%eax
je     1811 <is_url+0x671>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
je     1811 <is_url+0x671>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5f,%eax
je     1811 <is_url+0x671>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
je     1811 <is_url+0x671>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7e,%eax
je     1811 <is_url+0x671>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x21,%eax
je     1811 <is_url+0x671>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x24,%eax
je     1811 <is_url+0x671>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x26,%eax
je     1811 <is_url+0x671>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x27,%eax
je     1811 <is_url+0x671>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x28,%eax
je     1811 <is_url+0x671>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x29,%eax
je     1811 <is_url+0x671>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
je     1811 <is_url+0x671>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2c,%eax
je     1811 <is_url+0x671>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3b,%eax
je     1811 <is_url+0x671>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3d,%eax
je     1811 <is_url+0x671>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3a,%eax
je     1811 <is_url+0x671>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x40,%eax
je     1811 <is_url+0x671>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1822 <is_url+0x682>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    16c6 <is_url+0x526>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x25,%eax
jne    1871 <is_url+0x6d1>
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%edi
call   10b0 <isxdigit@plt>
cmp    $0x0,%rax
je     1871 <is_url+0x6d1>
mov    -0x18(%rbp),%rax
movsbl 0x2(%rax),%edi
call   10b0 <isxdigit@plt>
cmp    $0x0,%rax
je     1871 <is_url+0x6d1>
mov    -0x18(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x18(%rbp)
jmp    16c6 <is_url+0x526>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
movl   $0x0,-0x4(%rbp)
jmp    1aae <is_url+0x90e>
cmpq   $0x0,-0x30(%rbp)
je     18a1 <is_url+0x701>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    18b6 <is_url+0x716>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
movl   $0x1,-0x4(%rbp)
jmp    1aae <is_url+0x90e>
mov    -0x30(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    18d3 <is_url+0x733>
jmp    1a9e <is_url+0x8fe>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edi
call   1060 <isalnum@plt>
cmp    $0x0,%rax
jne    1a29 <is_url+0x889>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2b,%eax
je     1a29 <is_url+0x889>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
je     1a29 <is_url+0x889>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5f,%eax
je     1a29 <is_url+0x889>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
je     1a29 <is_url+0x889>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7e,%eax
je     1a29 <is_url+0x889>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x21,%eax
je     1a29 <is_url+0x889>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x24,%eax
je     1a29 <is_url+0x889>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x26,%eax
je     1a29 <is_url+0x889>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x27,%eax
je     1a29 <is_url+0x889>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x28,%eax
je     1a29 <is_url+0x889>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x29,%eax
je     1a29 <is_url+0x889>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
je     1a29 <is_url+0x889>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2c,%eax
je     1a29 <is_url+0x889>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3b,%eax
je     1a29 <is_url+0x889>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3d,%eax
je     1a29 <is_url+0x889>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3a,%eax
je     1a29 <is_url+0x889>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x40,%eax
je     1a29 <is_url+0x889>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
je     1a29 <is_url+0x889>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3f,%eax
je     1a29 <is_url+0x889>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x23,%eax
jne    1a3a <is_url+0x89a>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    18be <is_url+0x71e>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x25,%eax
jne    1a89 <is_url+0x8e9>
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%edi
call   10b0 <isxdigit@plt>
cmp    $0x0,%rax
je     1a89 <is_url+0x8e9>
mov    -0x18(%rbp),%rax
movsbl 0x2(%rax),%edi
call   10b0 <isxdigit@plt>
cmp    $0x0,%rax
je     1a89 <is_url+0x8e9>
mov    -0x18(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x18(%rbp)
jmp    18be <is_url+0x71e>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
movl   $0x0,-0x4(%rbp)
jmp    1aae <is_url+0x90e>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<is_url>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0x18,%rsp
call   1050 <mp_strdup@plt>
mov    %rax,%rbx
mov    %rax,0x10(%rsp)
lea    0x12aa(%rip),%rsi
lea    0x10(%rsp),%rdi
call   1090 <strsep@plt>
mov    %rax,0x8(%rsp)
xor    %r14d,%r14d
cmpq   $0x0,0x10(%rsp)
je     154f <is_url+0x3af>
movsbl (%rax),%edi
call   10a0 <isalpha@plt>
test   %eax,%eax
je     154f <is_url+0x3af>
mov    0x8(%rsp),%rax
lea    0x1(%rax),%rcx
mov    %rcx,0x8(%rsp)
mov    0x1(%rax),%al
test   %al,%al
je     124b <is_url+0xab>
movabs $0x680000000000,%rbp
jmp    1221 <is_url+0x81>
nopl   (%rax)
lea    0x1(%rcx),%rax
mov    %rax,0x8(%rsp)
movzbl 0x1(%rcx),%eax
test   %al,%al
je     124b <is_url+0xab>
movsbl %al,%edi
call   1060 <isalnum@plt>
mov    0x8(%rsp),%rcx
test   %rax,%rax
jne    1210 <is_url+0x70>
movzbl (%rcx),%eax
cmp    $0x2e,%rax
ja     154f <is_url+0x3af>
bt     %rax,%rbp
jb     1210 <is_url+0x70>
jmp    154f <is_url+0x3af>
mov    0x10(%rsp),%rax
cmpb   $0x2f,(%rax)
jne    154f <is_url+0x3af>
cmpb   $0x2f,0x1(%rax)
jne    154f <is_url+0x3af>
add    $0x2,%rax
mov    %rax,0x10(%rsp)
lea    0x11f7(%rip),%rsi
lea    0x10(%rsp),%rdi
call   1090 <strsep@plt>
mov    %rax,0x8(%rsp)
cmpb   $0x0,(%rax)
je     1413 <is_url+0x273>
lea    0x11dc(%rip),%rsi
mov    %rax,%rdi
call   10c0 <strstr@plt>
test   %rax,%rax
je     1328 <is_url+0x188>
lea    0x11c4(%rip),%rsi
lea    0x8(%rsp),%rdi
call   1090 <strsep@plt>
mov    %rax,%rbp
mov    (%rax),%al
lea    0xd40(%rip),%r15
jmp    12dc <is_url+0x13c>
add    $0x2,%rbp
cs nopw 0x0(%rax,%rax,1)
movzbl 0x1(%rbp),%eax
add    $0x1,%rbp
test   %al,%al
je     1328 <is_url+0x188>
movsbl %al,%edi
call   1060 <isalnum@plt>
test   %rax,%rax
jne    12d0 <is_url+0x130>
movzbl 0x0(%rbp),%eax
add    $0xdf,%al
cmp    $0x5d,%al
ja     154f <is_url+0x3af>
movzbl %al,%eax
movslq (%r15,%rax,4),%rax
add    %r15,%rax
jmp    *%rax
movsbl 0x1(%rbp),%edi
call   10b0 <isxdigit@plt>
test   %rax,%rax
je     154f <is_url+0x3af>
movsbl 0x2(%rbp),%edi
call   10b0 <isxdigit@plt>
test   %rax,%rax
jne    12c2 <is_url+0x122>
jmp    154f <is_url+0x3af>
mov    0x8(%rsp),%rax
mov    (%rax),%cl
cmp    $0x5b,%cl
jne    13a4 <is_url+0x204>
add    $0x1,%rax
mov    %rax,0x8(%rsp)
lea    0x112c(%rip),%rsi
lea    0x8(%rsp),%rdi
call   1090 <strsep@plt>
xor    %edx,%edx
cmpb   $0x3a,(%rax)
sete   %cl
cmpq   $0x0,0x8(%rsp)
je     154f <is_url+0x3af>
mov    %cl,%dl
mov    (%rax,%rdx,1),%cl
lea    (%rax,%rdx,1),%rbp
add    $0x1,%rbp
jmp    138c <is_url+0x1ec>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movzbl 0x0(%rbp),%ecx
add    $0x1,%rbp
test   %cl,%cl
je     13dc <is_url+0x23c>
movsbl %cl,%edi
call   10b0 <isxdigit@plt>
test   %rax,%rax
jne    1380 <is_url+0x1e0>
cmpb   $0x3a,-0x1(%rbp)
je     1380 <is_url+0x1e0>
jmp    154f <is_url+0x3af>
movsbl %cl,%edi
call   1040 <isdigit@plt>
mov    %rax,%rbp
lea    0x10b2(%rip),%rsi
lea    0x8(%rsp),%rdi
call   1090 <strsep@plt>
mov    %rax,%rdi
test   %rbp,%rbp
je     13cf <is_url+0x22f>
call   1080 <is_hostaddr@plt>
jmp    13d4 <is_url+0x234>
call   1070 <is_hostname@plt>
test   %eax,%eax
je     154f <is_url+0x3af>
mov    0x8(%rsp),%rax
test   %rax,%rax
je     1413 <is_url+0x273>
mov    (%rax),%al
test   %al,%al
je     1413 <is_url+0x273>
movsbl %al,%edi
call   1040 <isdigit@plt>
test   %rax,%rax
je     154f <is_url+0x3af>
mov    0x8(%rsp),%rax
lea    0x1(%rax),%rcx
mov    %rcx,0x8(%rsp)
movzbl 0x1(%rax),%eax
test   %al,%al
jne    13ec <is_url+0x24c>
mov    0x10(%rsp),%rax
test   %rax,%rax
je     1549 <is_url+0x3a9>
cmpb   $0x0,(%rax)
je     1549 <is_url+0x3a9>
lea    0x103a(%rip),%rsi
lea    0x10(%rsp),%rdi
call   1090 <strsep@plt>
mov    %rax,0x8(%rsp)
mov    (%rax),%al
test   %al,%al
je     14c2 <is_url+0x322>
lea    0xd2b(%rip),%rbp
nopl   (%rax)
movsbl %al,%edi
call   1060 <isalnum@plt>
mov    0x8(%rsp),%rcx
test   %rax,%rax
jne    147c <is_url+0x2dc>
movzbl (%rcx),%eax
add    $0xdf,%al
cmp    $0x5d,%al
ja     154f <is_url+0x3af>
movzbl %al,%eax
movslq 0x0(%rbp,%rax,4),%rax
add    %rbp,%rax
jmp    *%rax
add    $0x1,%rcx
mov    %rcx,0x8(%rsp)
movzbl (%rcx),%eax
test   %al,%al
jne    1450 <is_url+0x2b0>
jmp    14c2 <is_url+0x322>
movsbl 0x1(%rcx),%edi
call   10b0 <isxdigit@plt>
test   %rax,%rax
je     154f <is_url+0x3af>
mov    0x8(%rsp),%rax
movsbl 0x2(%rax),%edi
call   10b0 <isxdigit@plt>
test   %rax,%rax
je     154f <is_url+0x3af>
mov    0x8(%rsp),%rcx
add    $0x3,%rcx
jmp    1480 <is_url+0x2e0>
mov    0x10(%rsp),%rax
test   %rax,%rax
je     1549 <is_url+0x3a9>
cmpb   $0x0,(%rax)
je     1549 <is_url+0x3a9>
mov    %rax,0x8(%rsp)
mov    (%rax),%al
test   %al,%al
je     1549 <is_url+0x3a9>
lea    0xe0d(%rip),%rbp
movsbl %al,%edi
call   1060 <isalnum@plt>
mov    0x8(%rsp),%rcx
test   %rax,%rax
jne    150b <is_url+0x36b>
movzbl (%rcx),%eax
add    $0xdf,%al
cmp    $0x5d,%al
ja     154f <is_url+0x3af>
movzbl %al,%eax
movslq 0x0(%rbp,%rax,4),%rax
add    %rbp,%rax
jmp    *%rax
add    $0x1,%rcx
mov    %rcx,0x8(%rsp)
movzbl (%rcx),%eax
test   %al,%al
jne    14e3 <is_url+0x343>
jmp    1549 <is_url+0x3a9>
movsbl 0x1(%rcx),%edi
call   10b0 <isxdigit@plt>
test   %rax,%rax
je     154f <is_url+0x3af>
mov    0x8(%rsp),%rax
movsbl 0x2(%rax),%edi
call   10b0 <isxdigit@plt>
test   %rax,%rax
je     154f <is_url+0x3af>
mov    0x8(%rsp),%rcx
add    $0x3,%rcx
jmp    150f <is_url+0x36f>
mov    $0x1,%r14d
mov    %rbx,%rdi
call   1030 <free@plt>
mov    %r14d,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@.str = [2 x i8] c":\00"
@.str.1 = [4 x i8] c"/?#\00"
@.str.2 = [2 x i8] c"@\00"
@.str.3 = [2 x i8] c"]\00"
@.str.4 = [3 x i8] c"?#\00"
define i32 @is_url(i8* %0) {
%2 = alloca i8*
%3 = alloca i8*
%4 = bitcast i8** %2 to i8*
%5 = bitcast i8** %3 to i8*
%6 = tail call i8* @mp_strdup(i8* %0)
store i8* %6, i8** %3
%7 = call i8* @strsep(i8** %3, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
store i8* %7, i8** %2
%8 = load i8*, i8** %3
%9 = icmp eq i8* %8, null
br i1 %9, label %196, label %10
10: ; preds = %1
%11 = load i8, i8* %7
%12 = call i32 @isalpha(i8 signext %11)
%13 = icmp eq i32 %12, 0
br i1 %13, label %196, label %14
14: ; preds = %10
%15 = load i8*, i8** %2
%16 = getelementptr inbounds i8, i8* %15, i64 1
store i8* %16, i8** %2
%17 = load i8, i8* %16
%18 = icmp eq i8 %17, 0
br i1 %18, label %30, label %19
19: ; preds = %14, %26
%20 = phi i8 [ %28, %26 ], [ %17, %14 ]
%21 = call i64 @isalnum(i8 signext %20)
%22 = icmp eq i64 %21, 0
%23 = load i8*, i8** %2
br i1 %22, label %24, label %26
24: ; preds = %19
%25 = load i8, i8* %23
switch i8 %25, label %196 [
i8 43, label %26
i8 45, label %26
i8 46, label %26
]
26: ; preds = %19, %24, %24, %24
%27 = getelementptr inbounds i8, i8* %23, i64 1
store i8* %27, i8** %2
%28 = load i8, i8* %27
%29 = icmp eq i8 %28, 0
br i1 %29, label %30, label %19
30: ; preds = %26, %14
%31 = load i8*, i8** %3
%32 = load i8, i8* %31
%33 = icmp eq i8 %32, 47
br i1 %33, label %34, label %196
34: ; preds = %30
%35 = getelementptr inbounds i8, i8* %31, i64 1
%36 = load i8, i8* %35
%37 = icmp eq i8 %36, 47
br i1 %37, label %38, label %196
38: ; preds = %34
%39 = getelementptr inbounds i8, i8* %31, i64 2
store i8* %39, i8** %3
%40 = call i8* @strsep(i8** %3, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0))
store i8* %40, i8** %2
%41 = load i8, i8* %40
%42 = icmp eq i8 %41, 0
br i1 %42, label %123, label %43
43: ; preds = %38
%44 = call i64 @strstr(i8* %40, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
%45 = icmp eq i64 %44, 0
br i1 %45, label %71, label %46
46: ; preds = %43
%47 = call i8* @strsep(i8** %2, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
%48 = load i8, i8* %47
br label %49
49: ; preds = %66, %46
%50 = phi i8 [ %48, %46 ], [ %69, %66 ]
%51 = phi i8* [ %47, %46 ], [ %68, %66 ]
%52 = call i64 @isalnum(i8 signext %50)
%53 = icmp eq i64 %52, 0
br i1 %53, label %54, label %66
54: ; preds = %49
%55 = load i8, i8* %51
switch i8 %55, label %196 [
i8 43, label %66
i8 45, label %66
i8 46, label %66
i8 126, label %66
i8 33, label %66
i8 36, label %66
i8 38, label %66
i8 39, label %66
i8 40, label %66
i8 41, label %66
i8 42, label %66
i8 44, label %66
i8 59, label %66
i8 61, label %66
i8 58, label %66
i8 37, label %56
]
56: ; preds = %54
%57 = getelementptr inbounds i8, i8* %51, i64 1
%58 = load i8, i8* %57
%59 = call i64 @isxdigit(i8 signext %58)
%60 = icmp eq i64 %59, 0
br i1 %60, label %196, label %61
61: ; preds = %56
%62 = getelementptr inbounds i8, i8* %51, i64 2
%63 = load i8, i8* %62
%64 = call i64 @isxdigit(i8 signext %63)
%65 = icmp eq i64 %64, 0
br i1 %65, label %196, label %66
66: ; preds = %61, %54, %54, %54, %54, %54, %54, %54, %54, %54, %54, %54, %54, %54, %54, %54, %49
%67 = phi i8* [ %51, %49 ], [ %51, %54 ], [ %51, %54 ], [ %51, %54 ], [ %51, %54 ], [ %51, %54 ], [ %51, %54 ], [ %51, %54 ], [ %51, %54 ], [ %51, %54 ], [ %51, %54 ], [ %51, %54 ], [ %51, %54 ], [ %51, %54 ], [ %51, %54 ], [ %51, %54 ], [ %62, %61 ]
%68 = getelementptr inbounds i8, i8* %67, i64 1
%69 = load i8, i8* %68
%70 = icmp eq i8 %69, 0
br i1 %70, label %71, label %49
71: ; preds = %66, %43
%72 = load i8*, i8** %2
%73 = load i8, i8* %72
%74 = icmp eq i8 %73, 91
br i1 %74, label %75, label %98
75: ; preds = %71
%76 = getelementptr inbounds i8, i8* %72, i64 1
store i8* %76, i8** %2
%77 = call i8* @strsep(i8** %2, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
%78 = load i8, i8* %77
%79 = icmp eq i8 %78, 58
%80 = zext i1 %79 to i64
%81 = getelementptr i8, i8* %77, i64 %80
%82 = load i8*, i8** %2
%83 = icmp eq i8* %82, null
br i1 %83, label %196, label %84
84: ; preds = %75
%85 = load i8, i8* %81
br label %86
86: ; preds = %84, %94
%87 = phi i8 [ %96, %94 ], [ %85, %84 ]
%88 = phi i8* [ %95, %94 ], [ %81, %84 ]
%89 = call i64 @isxdigit(i8 signext %87)
%90 = icmp eq i64 %89, 0
br i1 %90, label %91, label %94
91: ; preds = %86
%92 = load i8, i8* %88
%93 = icmp eq i8 %92, 58
br i1 %93, label %94, label %196
94: ; preds = %86, %91
%95 = getelementptr inbounds i8, i8* %88, i64 1
%96 = load i8, i8* %95
%97 = icmp eq i8 %96, 0
br i1 %97, label %108, label %86
98: ; preds = %71
%99 = call i64 @isdigit(i8 signext %73)
%100 = icmp eq i64 %99, 0
%101 = call i8* @strsep(i8** %2, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
br i1 %100, label %105, label %102
102: ; preds = %98
%103 = call i32 @is_hostaddr(i8* %101)
%104 = icmp eq i32 %103, 0
br i1 %104, label %196, label %108
105: ; preds = %98
%106 = call i32 @is_hostname(i8* %101)
%107 = icmp eq i32 %106, 0
br i1 %107, label %196, label %108
108: ; preds = %94, %102, %105
%109 = load i8*, i8** %2
%110 = icmp eq i8* %109, null
br i1 %110, label %123, label %111
111: ; preds = %108
%112 = load i8, i8* %109
%113 = icmp eq i8 %112, 0
br i1 %113, label %123, label %114
114: ; preds = %111, %118
%115 = phi i8 [ %121, %118 ], [ %112, %111 ]
%116 = call i64 @isdigit(i8 signext %115)
%117 = icmp eq i64 %116, 0
br i1 %117, label %196, label %118
118: ; preds = %114
%119 = load i8*, i8** %2
%120 = getelementptr inbounds i8, i8* %119, i64 1
store i8* %120, i8** %2
%121 = load i8, i8* %120
%122 = icmp eq i8 %121, 0
br i1 %122, label %123, label %114
123: ; preds = %118, %108, %111, %38
%124 = load i8*, i8** %3
%125 = icmp eq i8* %124, null
br i1 %125, label %196, label %126
126: ; preds = %123
%127 = load i8, i8* %124
%128 = icmp eq i8 %127, 0
br i1 %128, label %196, label %129
129: ; preds = %126
%130 = call i8* @strsep(i8** %3, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.4, i64 0, i64 0))
store i8* %130, i8** %2
%131 = load i8, i8* %130
%132 = icmp eq i8 %131, 0
br i1 %132, label %160, label %133
133: ; preds = %129, %142
%134 = phi i8 [ %144, %142 ], [ %131, %129 ]
%135 = call i64 @isalnum(i8 signext %134)
%136 = icmp eq i64 %135, 0
%137 = load i8*, i8** %2
br i1 %136, label %138, label %140
138: ; preds = %133
%139 = load i8, i8* %137
switch i8 %139, label %196 [
i8 43, label %140
i8 45, label %140
i8 95, label %140
i8 46, label %140
i8 126, label %140
i8 33, label %140
i8 36, label %140
i8 38, label %140
i8 39, label %140
i8 40, label %140
i8 41, label %140
i8 42, label %140
i8 44, label %140
i8 59, label %140
i8 61, label %140
i8 58, label %140
i8 64, label %140
i8 47, label %140
i8 37, label %146
]
140: ; preds = %133, %138, %138, %138, %138, %138, %138, %138, %138, %138, %138, %138, %138, %138, %138, %138, %138, %138, %138
%141 = getelementptr inbounds i8, i8* %137, i64 1
br label %142
142: ; preds = %140, %157
%143 = phi i8* [ %141, %140 ], [ %159, %157 ]
store i8* %143, i8** %2
%144 = load i8, i8* %143
%145 = icmp eq i8 %144, 0
br i1 %145, label %160, label %133
146: ; preds = %138
%147 = getelementptr inbounds i8, i8* %137, i64 1
%148 = load i8, i8* %147
%149 = call i64 @isxdigit(i8 signext %148)
%150 = icmp eq i64 %149, 0
br i1 %150, label %196, label %151
151: ; preds = %146
%152 = load i8*, i8** %2
%153 = getelementptr inbounds i8, i8* %152, i64 2
%154 = load i8, i8* %153
%155 = call i64 @isxdigit(i8 signext %154)
%156 = icmp eq i64 %155, 0
br i1 %156, label %196, label %157
157: ; preds = %151
%158 = load i8*, i8** %2
%159 = getelementptr inbounds i8, i8* %158, i64 3
br label %142
160: ; preds = %142, %129
%161 = load i8*, i8** %3
%162 = icmp eq i8* %161, null
br i1 %162, label %196, label %163
163: ; preds = %160
%164 = load i8, i8* %161
%165 = icmp eq i8 %164, 0
br i1 %165, label %196, label %166
166: ; preds = %163
store i8* %161, i8** %2
%167 = load i8, i8* %161
%168 = icmp eq i8 %167, 0
br i1 %168, label %196, label %169
169: ; preds = %166, %178
%170 = phi i8 [ %180, %178 ], [ %167, %166 ]
%171 = call i64 @isalnum(i8 signext %170)
%172 = icmp eq i64 %171, 0
%173 = load i8*, i8** %2
br i1 %172, label %174, label %176
174: ; preds = %169
%175 = load i8, i8* %173
switch i8 %175, label %196 [
i8 43, label %176
i8 45, label %176
i8 95, label %176
i8 46, label %176
i8 126, label %176
i8 33, label %176
i8 36, label %176
i8 38, label %176
i8 39, label %176
i8 40, label %176
i8 41, label %176
i8 42, label %176
i8 44, label %176
i8 59, label %176
i8 61, label %176
i8 58, label %176
i8 64, label %176
i8 47, label %176
i8 63, label %176
i8 35, label %176
i8 37, label %182
]
176: ; preds = %169, %174, %174, %174, %174, %174, %174, %174, %174, %174, %174, %174, %174, %174, %174, %174, %174, %174, %174, %174, %174
%177 = getelementptr inbounds i8, i8* %173, i64 1
br label %178
178: ; preds = %176, %193
%179 = phi i8* [ %177, %176 ], [ %195, %193 ]
store i8* %179, i8** %2
%180 = load i8, i8* %179
%181 = icmp eq i8 %180, 0
br i1 %181, label %196, label %169
182: ; preds = %174
%183 = getelementptr inbounds i8, i8* %173, i64 1
%184 = load i8, i8* %183
%185 = call i64 @isxdigit(i8 signext %184)
%186 = icmp eq i64 %185, 0
br i1 %186, label %196, label %187
187: ; preds = %182
%188 = load i8*, i8** %2
%189 = getelementptr inbounds i8, i8* %188, i64 2
%190 = load i8, i8* %189
%191 = call i64 @isxdigit(i8 signext %190)
%192 = icmp eq i64 %191, 0
br i1 %192, label %196, label %193
193: ; preds = %187
%194 = load i8*, i8** %2
%195 = getelementptr inbounds i8, i8* %194, i64 3
br label %178
196: ; preds = %24, %56, %61, %54, %91, %114, %146, %151, %138, %178, %182, %187, %174, %166, %160, %163, %123, %126, %105, %102, %75, %30, %34, %1, %10
%197 = phi i32 [ 0, %10 ], [ 0, %1 ], [ 0, %34 ], [ 0, %30 ], [ 0, %75 ], [ 0, %102 ], [ 0, %105 ], [ 1, %126 ], [ 1, %123 ], [ 1, %163 ], [ 1, %160 ], [ 1, %166 ], [ 0, %174 ], [ 0, %187 ], [ 0, %182 ], [ 1, %178 ], [ 0, %138 ], [ 0, %151 ], [ 0, %146 ], [ 0, %114 ], [ 0, %91 ], [ 0, %54 ], [ 0, %61 ], [ 0, %56 ], [ 0, %24 ]
%198 = call i32 @free(i8* %6)
ret i32 %197
}