#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*/ isdigit(char);
int strlen(char const *);
char verSinNumIP(const char *numIP) {
  register char i, estado = 1, chLido;
  for (i = 0; i < strlen(numIP); i++) {
    chLido = *(numIP + i);
    switch (estado) {
    case 1:
      if (isdigit(chLido))
        estado = 2;
      else {
        --i;
        estado = 0;
      }
      break;
    case 2:
      if (isdigit(chLido))
        estado = 3;
      else if (chLido == '.')
        estado = 5;
      else {
        --i;
        estado = 0;
      }
      break;
    case 3:
      if (isdigit(chLido))
        estado = 4;
      else if (chLido == '.')
        estado = 5;
      else {
        --i;
        estado = 0;
      }
      break;
    case 4:
      if (chLido == '.')
        estado = 5;
      else {
        --i;
        estado = 0;
      }
      break;
    case 5:
      if (isdigit(chLido))
        estado = 6;
      else {
        --i;
        estado = 0;
      }
      break;
    case 6:
      if (isdigit(chLido))
        estado = 7;
      else if (chLido == '.')
        estado = 9;
      else {
        --i;
        estado = 0;
      }
      break;
    case 7:
      if (isdigit(chLido))
        estado = 8;
      else if (chLido == '.')
        estado = 9;
      else {
        --i;
        estado = 0;
      }
      break;
    case 8:
      if (chLido == '.')
        estado = 9;
      else {
        --i;
        estado = 0;
      }
      break;
    case 9:
      if (isdigit(chLido))
        estado = 10;
      else {
        --i;
        estado = 0;
      }
      break;
    case 10:
      if (isdigit(chLido))
        estado = 11;
      else if (chLido == '.')
        estado = 13;
      else {
        --i;
        estado = 0;
      }
      break;
    case 11:
      if (isdigit(chLido))
        estado = 12;
      else if (chLido == '.')
        estado = 13;
      else {
        --i;
        estado = 0;
      }
      break;
    case 12:
      if (chLido == '.')
        estado = 13;
      else {
        --i;
        estado = 0;
      }
      break;
    case 13:
      if (isdigit(chLido))
        estado = 14;
      else {
        --i;
        estado = 0;
      }
      break;
    case 14:
      if (isdigit(chLido))
        estado = 15;
      else if (chLido == '/')
        estado = 17;
      else {
        --i;
        estado = 0;
      }
      break;
    case 15:
      if (isdigit(chLido))
        estado = 16;
      else if (chLido == '/')
        estado = 17;
      else {
        --i;
        estado = 0;
      }
      break;
    case 16:
      if (chLido == '/')
        estado = 17;
      else {
        --i;
        estado = 0;
      }
      break;
    case 17:
      if (isdigit(chLido))
        estado = 18;
      else {
        --i;
        estado = 0;
      }
      break;
    case 18:
      if (isdigit(chLido))
        estado = 19;
      else if (chLido == '.')
        estado = 21;
      else {
        --i;
        estado = 0;
      }
      break;
    case 19:
      if (isdigit(chLido))
        estado = 20;
      else if (chLido == '.')
        estado = 21;
      else {
        --i;
        estado = 0;
      }
      break;
    case 20:
      if (chLido == '.')
        estado = 21;
      else {
        --i;
        estado = 0;
      }
      break;
    case 21:
      if (isdigit(chLido))
        estado = 22;
      else {
        --i;
        estado = 0;
      }
      break;
    case 22:
      if (isdigit(chLido))
        estado = 23;
      else if (chLido == '.')
        estado = 25;
      else {
        --i;
        estado = 0;
      }
      break;
    case 23:
      if (isdigit(chLido))
        estado = 24;
      else if (chLido == '.')
        estado = 25;
      else {
        --i;
        estado = 0;
      }
      break;
    case 24:
      if (chLido == '.')
        estado = 25;
      else {
        --i;
        estado = 0;
      }
      break;
    case 25:
      if (isdigit(chLido))
        estado = 26;
      else {
        --i;
        estado = 0;
      }
      break;
    case 26:
      if (isdigit(chLido))
        estado = 27;
      else if (chLido == '.')
        estado = 29;
      else {
        --i;
        estado = 0;
      }
      break;
    case 27:
      if (isdigit(chLido))
        estado = 28;
      else if (chLido == '.')
        estado = 29;
      else {
        --i;
        estado = 0;
      }
      break;
    case 28:
      if (chLido == '.')
        estado = 29;
      else {
        --i;
        estado = 0;
      }
      break;
    case 29:
      if (isdigit(chLido))
        estado = 30;
      else {
        --i;
        estado = 0;
      }
      break;
    case 30:
      if (isdigit(chLido))
        estado = 31;
      else {
        --i;
        estado = 0;
      }
      break;
    case 31:
      if (isdigit(chLido))
        estado = 32;
      else {
        --i;
        estado = 0;
      }
      break;
    case 32:
      if (chLido != '\0') {
        --i;
        estado = 0;
      }
      break;
    default:
      i = strlen(numIP) - 1;
      break;
    }
  }
  switch (estado) {
  case 14:
  case 15:
  case 16:
    return 1;
    break;
  case 18:
  case 19:
    return 2;
    break;
  case 30:
  case 31:
  case 32:
    return 3;
    break;
  default:
    return 0;
    break;
  }
}


x86 assembly (clang, -O0):
<verSinNumIP>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
movb   $0x1,-0x12(%rbp)
movb   $0x0,-0x11(%rbp)
movsbl -0x11(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%rdi
call   1040 <strlen@plt>
mov    %eax,%ecx
mov    -0x18(%rbp),%eax
cmp    %ecx,%eax
jge    1874 <verSinNumIP+0x754>
mov    -0x10(%rbp),%rax
movsbq -0x11(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x13(%rbp)
movsbl -0x12(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x20(%rbp)
sub    $0x1f,%eax
ja     1853 <verSinNumIP+0x733>
mov    -0x20(%rbp),%rax
lea    0xe7f(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     11a5 <verSinNumIP+0x85>
movb   $0x2,-0x12(%rbp)
jmp    11b1 <verSinNumIP+0x91>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     11d1 <verSinNumIP+0xb1>
movb   $0x3,-0x12(%rbp)
jmp    11f8 <verSinNumIP+0xd8>
movsbl -0x13(%rbp),%eax
cmp    $0x2e,%eax
jne    11e7 <verSinNumIP+0xc7>
movb   $0x5,-0x12(%rbp)
jmp    11f3 <verSinNumIP+0xd3>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    11f8 <verSinNumIP+0xd8>
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1218 <verSinNumIP+0xf8>
movb   $0x4,-0x12(%rbp)
jmp    123f <verSinNumIP+0x11f>
movsbl -0x13(%rbp),%eax
cmp    $0x2e,%eax
jne    122e <verSinNumIP+0x10e>
movb   $0x5,-0x12(%rbp)
jmp    123a <verSinNumIP+0x11a>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    123f <verSinNumIP+0x11f>
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%eax
cmp    $0x2e,%eax
jne    125a <verSinNumIP+0x13a>
movb   $0x5,-0x12(%rbp)
jmp    1266 <verSinNumIP+0x146>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1286 <verSinNumIP+0x166>
movb   $0x6,-0x12(%rbp)
jmp    1292 <verSinNumIP+0x172>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     12b2 <verSinNumIP+0x192>
movb   $0x7,-0x12(%rbp)
jmp    12d9 <verSinNumIP+0x1b9>
movsbl -0x13(%rbp),%eax
cmp    $0x2e,%eax
jne    12c8 <verSinNumIP+0x1a8>
movb   $0x9,-0x12(%rbp)
jmp    12d4 <verSinNumIP+0x1b4>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    12d9 <verSinNumIP+0x1b9>
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     12f9 <verSinNumIP+0x1d9>
movb   $0x8,-0x12(%rbp)
jmp    1320 <verSinNumIP+0x200>
movsbl -0x13(%rbp),%eax
cmp    $0x2e,%eax
jne    130f <verSinNumIP+0x1ef>
movb   $0x9,-0x12(%rbp)
jmp    131b <verSinNumIP+0x1fb>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    1320 <verSinNumIP+0x200>
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%eax
cmp    $0x2e,%eax
jne    133b <verSinNumIP+0x21b>
movb   $0x9,-0x12(%rbp)
jmp    1347 <verSinNumIP+0x227>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1367 <verSinNumIP+0x247>
movb   $0xa,-0x12(%rbp)
jmp    1373 <verSinNumIP+0x253>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1393 <verSinNumIP+0x273>
movb   $0xb,-0x12(%rbp)
jmp    13ba <verSinNumIP+0x29a>
movsbl -0x13(%rbp),%eax
cmp    $0x2e,%eax
jne    13a9 <verSinNumIP+0x289>
movb   $0xd,-0x12(%rbp)
jmp    13b5 <verSinNumIP+0x295>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    13ba <verSinNumIP+0x29a>
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     13da <verSinNumIP+0x2ba>
movb   $0xc,-0x12(%rbp)
jmp    1401 <verSinNumIP+0x2e1>
movsbl -0x13(%rbp),%eax
cmp    $0x2e,%eax
jne    13f0 <verSinNumIP+0x2d0>
movb   $0xd,-0x12(%rbp)
jmp    13fc <verSinNumIP+0x2dc>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    1401 <verSinNumIP+0x2e1>
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%eax
cmp    $0x2e,%eax
jne    141c <verSinNumIP+0x2fc>
movb   $0xd,-0x12(%rbp)
jmp    1428 <verSinNumIP+0x308>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1448 <verSinNumIP+0x328>
movb   $0xe,-0x12(%rbp)
jmp    1454 <verSinNumIP+0x334>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1474 <verSinNumIP+0x354>
movb   $0xf,-0x12(%rbp)
jmp    149b <verSinNumIP+0x37b>
movsbl -0x13(%rbp),%eax
cmp    $0x2f,%eax
jne    148a <verSinNumIP+0x36a>
movb   $0x11,-0x12(%rbp)
jmp    1496 <verSinNumIP+0x376>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    149b <verSinNumIP+0x37b>
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     14bb <verSinNumIP+0x39b>
movb   $0x10,-0x12(%rbp)
jmp    14e2 <verSinNumIP+0x3c2>
movsbl -0x13(%rbp),%eax
cmp    $0x2f,%eax
jne    14d1 <verSinNumIP+0x3b1>
movb   $0x11,-0x12(%rbp)
jmp    14dd <verSinNumIP+0x3bd>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    14e2 <verSinNumIP+0x3c2>
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%eax
cmp    $0x2f,%eax
jne    14fd <verSinNumIP+0x3dd>
movb   $0x11,-0x12(%rbp)
jmp    1509 <verSinNumIP+0x3e9>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1529 <verSinNumIP+0x409>
movb   $0x12,-0x12(%rbp)
jmp    1535 <verSinNumIP+0x415>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1555 <verSinNumIP+0x435>
movb   $0x13,-0x12(%rbp)
jmp    157c <verSinNumIP+0x45c>
movsbl -0x13(%rbp),%eax
cmp    $0x2e,%eax
jne    156b <verSinNumIP+0x44b>
movb   $0x15,-0x12(%rbp)
jmp    1577 <verSinNumIP+0x457>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    157c <verSinNumIP+0x45c>
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     159c <verSinNumIP+0x47c>
movb   $0x14,-0x12(%rbp)
jmp    15c3 <verSinNumIP+0x4a3>
movsbl -0x13(%rbp),%eax
cmp    $0x2e,%eax
jne    15b2 <verSinNumIP+0x492>
movb   $0x15,-0x12(%rbp)
jmp    15be <verSinNumIP+0x49e>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    15c3 <verSinNumIP+0x4a3>
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%eax
cmp    $0x2e,%eax
jne    15de <verSinNumIP+0x4be>
movb   $0x15,-0x12(%rbp)
jmp    15ea <verSinNumIP+0x4ca>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     160a <verSinNumIP+0x4ea>
movb   $0x16,-0x12(%rbp)
jmp    1616 <verSinNumIP+0x4f6>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1636 <verSinNumIP+0x516>
movb   $0x17,-0x12(%rbp)
jmp    165d <verSinNumIP+0x53d>
movsbl -0x13(%rbp),%eax
cmp    $0x2e,%eax
jne    164c <verSinNumIP+0x52c>
movb   $0x19,-0x12(%rbp)
jmp    1658 <verSinNumIP+0x538>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    165d <verSinNumIP+0x53d>
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     167d <verSinNumIP+0x55d>
movb   $0x18,-0x12(%rbp)
jmp    16a4 <verSinNumIP+0x584>
movsbl -0x13(%rbp),%eax
cmp    $0x2e,%eax
jne    1693 <verSinNumIP+0x573>
movb   $0x19,-0x12(%rbp)
jmp    169f <verSinNumIP+0x57f>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    16a4 <verSinNumIP+0x584>
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%eax
cmp    $0x2e,%eax
jne    16bf <verSinNumIP+0x59f>
movb   $0x19,-0x12(%rbp)
jmp    16cb <verSinNumIP+0x5ab>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     16eb <verSinNumIP+0x5cb>
movb   $0x1a,-0x12(%rbp)
jmp    16f7 <verSinNumIP+0x5d7>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1717 <verSinNumIP+0x5f7>
movb   $0x1b,-0x12(%rbp)
jmp    173e <verSinNumIP+0x61e>
movsbl -0x13(%rbp),%eax
cmp    $0x2e,%eax
jne    172d <verSinNumIP+0x60d>
movb   $0x1d,-0x12(%rbp)
jmp    1739 <verSinNumIP+0x619>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    173e <verSinNumIP+0x61e>
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     175e <verSinNumIP+0x63e>
movb   $0x1c,-0x12(%rbp)
jmp    1785 <verSinNumIP+0x665>
movsbl -0x13(%rbp),%eax
cmp    $0x2e,%eax
jne    1774 <verSinNumIP+0x654>
movb   $0x1d,-0x12(%rbp)
jmp    1780 <verSinNumIP+0x660>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    1785 <verSinNumIP+0x665>
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%eax
cmp    $0x2e,%eax
jne    17a0 <verSinNumIP+0x680>
movb   $0x1d,-0x12(%rbp)
jmp    17ac <verSinNumIP+0x68c>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     17cc <verSinNumIP+0x6ac>
movb   $0x1e,-0x12(%rbp)
jmp    17d8 <verSinNumIP+0x6b8>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     17f8 <verSinNumIP+0x6d8>
movb   $0x1f,-0x12(%rbp)
jmp    1804 <verSinNumIP+0x6e4>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1824 <verSinNumIP+0x704>
movb   $0x20,-0x12(%rbp)
jmp    1830 <verSinNumIP+0x710>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    1862 <verSinNumIP+0x742>
movsbl -0x13(%rbp),%eax
cmp    $0x0,%eax
je     184e <verSinNumIP+0x72e>
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
jmp    1862 <verSinNumIP+0x742>
mov    -0x10(%rbp),%rdi
call   1040 <strlen@plt>
sub    $0x1,%eax
mov    %al,-0x11(%rbp)
jmp    1867 <verSinNumIP+0x747>
mov    -0x11(%rbp),%al
add    $0x1,%al
mov    %al,-0x11(%rbp)
jmp    1134 <verSinNumIP+0x14>
movsbl -0x12(%rbp),%eax
mov    %eax,-0x24(%rbp)
add    $0xfffffff2,%eax
sub    $0x3,%eax
jb     18b4 <verSinNumIP+0x794>
jmp    188c <verSinNumIP+0x76c>
mov    -0x24(%rbp),%eax
add    $0xffffffee,%eax
sub    $0x2,%eax
jb     18bd <verSinNumIP+0x79d>
jmp    18a0 <verSinNumIP+0x780>
mov    -0x24(%rbp),%eax
add    $0xffffffe2,%eax
sub    $0x3,%eax
jb     18c6 <verSinNumIP+0x7a6>
jmp    18cf <verSinNumIP+0x7af>
movb   $0x1,-0x1(%rbp)
jmp    18d3 <verSinNumIP+0x7b3>
movb   $0x2,-0x1(%rbp)
jmp    18d3 <verSinNumIP+0x7b3>
movb   $0x3,-0x1(%rbp)
jmp    18d3 <verSinNumIP+0x7b3>
movb   $0x0,-0x1(%rbp)
movsbl -0x1(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<verSinNumIP>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    %rdi,%r15
call   1040 <strlen@plt>
test   %eax,%eax
jle    145f <verSinNumIP+0x33f>
mov    $0x1,%r12b
xor    %ebp,%ebp
lea    0xebc(%rip),%r14
jmp    117f <verSinNumIP+0x5f>
xor    %eax,%eax
cmp    $0x2e,%bl
setne  %cl
mov    $0xd,%r12d
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cmovne %eax,%r12d
sub    %cl,%bpl
add    $0x1,%bpl
movsbl %bpl,%ebx
mov    %r15,%rdi
call   1040 <strlen@plt>
cmp    %ebx,%eax
jle    1446 <verSinNumIP+0x326>
movsbl %r12b,%eax
add    $0xffffffff,%eax
cmp    $0x1f,%eax
ja     11b6 <verSinNumIP+0x96>
movsbq %bpl,%rcx
movzbl (%r15,%rcx,1),%ebx
movslq (%r14,%rax,4),%rax
add    %r14,%rax
jmp    *%rax
movsbl %bl,%edi
call   1030 <isdigit@plt>
test   %eax,%eax
setne  %r12b
sete   %al
sub    %al,%bpl
add    %r12b,%r12b
jmp    1167 <verSinNumIP+0x47>
mov    %r15,%rdi
call   1040 <strlen@plt>
mov    %eax,%ebp
add    $0xff,%bpl
jmp    1167 <verSinNumIP+0x47>
movsbl %bl,%edi
call   1030 <isdigit@plt>
mov    $0x3,%r12b
test   %eax,%eax
jne    1167 <verSinNumIP+0x47>
jmp    11e6 <verSinNumIP+0xc6>
movsbl %bl,%edi
call   1030 <isdigit@plt>
mov    $0x4,%r12b
test   %eax,%eax
jne    1167 <verSinNumIP+0x47>
xor    %eax,%eax
cmp    $0x2e,%bl
setne  %cl
sete   %al
sub    %cl,%bpl
lea    (%rax,%rax,4),%r12d
jmp    1167 <verSinNumIP+0x47>
movsbl %bl,%edi
call   1030 <isdigit@plt>
test   %eax,%eax
sete   %cl
mov    $0x6,%r12d
jmp    1410 <verSinNumIP+0x2f0>
movsbl %bl,%edi
call   1030 <isdigit@plt>
mov    $0x7,%r12b
test   %eax,%eax
jne    1167 <verSinNumIP+0x47>
jmp    123d <verSinNumIP+0x11d>
movsbl %bl,%edi
call   1030 <isdigit@plt>
mov    $0x8,%r12b
test   %eax,%eax
jne    1167 <verSinNumIP+0x47>
xor    %eax,%eax
cmp    $0x2e,%bl
setne  %cl
sete   %al
sub    %cl,%bpl
lea    (%rax,%rax,8),%r12d
jmp    1167 <verSinNumIP+0x47>
movsbl %bl,%edi
call   1030 <isdigit@plt>
test   %eax,%eax
sete   %cl
mov    $0xa,%r12d
jmp    1410 <verSinNumIP+0x2f0>
movsbl %bl,%edi
call   1030 <isdigit@plt>
mov    $0xb,%r12b
test   %eax,%eax
jne    1167 <verSinNumIP+0x47>
jmp    1146 <verSinNumIP+0x26>
movsbl %bl,%edi
call   1030 <isdigit@plt>
mov    $0xc,%r12b
test   %eax,%eax
jne    1167 <verSinNumIP+0x47>
jmp    1146 <verSinNumIP+0x26>
movsbl %bl,%edi
call   1030 <isdigit@plt>
test   %eax,%eax
sete   %cl
mov    $0xe,%r12d
jmp    1410 <verSinNumIP+0x2f0>
movsbl %bl,%edi
call   1030 <isdigit@plt>
mov    $0xf,%r12b
test   %eax,%eax
jne    1167 <verSinNumIP+0x47>
jmp    12dc <verSinNumIP+0x1bc>
movsbl %bl,%edi
call   1030 <isdigit@plt>
mov    $0x10,%r12b
test   %eax,%eax
jne    1167 <verSinNumIP+0x47>
xor    %eax,%eax
cmp    $0x2f,%bl
setne  %cl
mov    $0x11,%r12d
jmp    1160 <verSinNumIP+0x40>
movsbl %bl,%edi
call   1030 <isdigit@plt>
test   %eax,%eax
sete   %cl
mov    $0x12,%r12d
jmp    1410 <verSinNumIP+0x2f0>
movsbl %bl,%edi
call   1030 <isdigit@plt>
mov    $0x13,%r12b
test   %eax,%eax
jne    1167 <verSinNumIP+0x47>
jmp    132f <verSinNumIP+0x20f>
movsbl %bl,%edi
call   1030 <isdigit@plt>
mov    $0x14,%r12b
test   %eax,%eax
jne    1167 <verSinNumIP+0x47>
xor    %eax,%eax
cmp    $0x2e,%bl
setne  %cl
mov    $0x15,%r12d
jmp    1160 <verSinNumIP+0x40>
movsbl %bl,%edi
call   1030 <isdigit@plt>
test   %eax,%eax
sete   %cl
mov    $0x16,%r12d
jmp    1410 <verSinNumIP+0x2f0>
movsbl %bl,%edi
call   1030 <isdigit@plt>
mov    $0x17,%r12b
test   %eax,%eax
jne    1167 <verSinNumIP+0x47>
jmp    1382 <verSinNumIP+0x262>
movsbl %bl,%edi
call   1030 <isdigit@plt>
mov    $0x18,%r12b
test   %eax,%eax
jne    1167 <verSinNumIP+0x47>
xor    %eax,%eax
cmp    $0x2e,%bl
setne  %cl
mov    $0x19,%r12d
jmp    1160 <verSinNumIP+0x40>
movsbl %bl,%edi
call   1030 <isdigit@plt>
test   %eax,%eax
sete   %cl
mov    $0x1a,%r12d
jmp    1410 <verSinNumIP+0x2f0>
movsbl %bl,%edi
call   1030 <isdigit@plt>
mov    $0x1b,%r12b
test   %eax,%eax
jne    1167 <verSinNumIP+0x47>
jmp    13d2 <verSinNumIP+0x2b2>
movsbl %bl,%edi
call   1030 <isdigit@plt>
mov    $0x1c,%r12b
test   %eax,%eax
jne    1167 <verSinNumIP+0x47>
xor    %eax,%eax
cmp    $0x2e,%bl
setne  %cl
mov    $0x1d,%r12d
jmp    1160 <verSinNumIP+0x40>
movsbl %bl,%edi
call   1030 <isdigit@plt>
test   %eax,%eax
sete   %cl
mov    $0x1e,%r12d
jmp    1410 <verSinNumIP+0x2f0>
movsbl %bl,%edi
call   1030 <isdigit@plt>
test   %eax,%eax
sete   %cl
mov    $0x1f,%r12d
nopl   (%rax)
cmove  %eax,%r12d
jmp    1164 <verSinNumIP+0x44>
movsbl %bl,%edi
call   1030 <isdigit@plt>
test   %eax,%eax
setne  %r12b
sete   %al
sub    %al,%bpl
shl    $0x5,%r12b
jmp    1167 <verSinNumIP+0x47>
xor    %eax,%eax
test   %bl,%bl
setne  %cl
movzbl %r12b,%r12d
jmp    1160 <verSinNumIP+0x40>
movsbq %r12b,%rax
add    $0xfffffffffffffff2,%rax
cmp    $0x12,%eax
ja     145f <verSinNumIP+0x33f>
lea    0xc26(%rip),%rcx
mov    (%rax,%rcx,1),%al
jmp    1461 <verSinNumIP+0x341>
xor    %eax,%eax
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@switch.table.verSinNumIP = [19 x i8] c"\01\01\01\00\02\02\00\00\00\00\00\00\00\00\00\00\03\03\03"
define signext i8 @verSinNumIP(i8* %0) {
%2 = tail call i32 @strlen(i8* %0)
%3 = icmp sgt i32 %2, 0
br i1 %3, label %4, label %264
4: ; preds = %1, %249
%5 = phi i8 [ %251, %249 ], [ 1, %1 ]
%6 = phi i8 [ %252, %249 ], [ 0, %1 ]
%7 = sext i8 %6 to i64
%8 = getelementptr inbounds i8, i8* %0, i64 %7
%9 = load i8, i8* %8
%10 = sext i8 %5 to i32
switch i32 %10, label %245 [
i32 1, label %11
i32 2, label %17
i32 3, label %26
i32 4, label %35
i32 5, label %41
i32 6, label %47
i32 7, label %56
i32 8, label %65
i32 9, label %71
i32 10, label %77
i32 11, label %86
i32 12, label %95
i32 13, label %101
i32 14, label %107
i32 15, label %116
i32 16, label %125
i32 17, label %131
i32 18, label %137
i32 19, label %146
i32 20, label %155
i32 21, label %161
i32 22, label %167
i32 23, label %176
i32 24, label %185
i32 25, label %191
i32 26, label %197
i32 27, label %206
i32 28, label %215
i32 29, label %221
i32 30, label %227
i32 31, label %233
i32 32, label %239
]
11: ; preds = %4
%12 = tail call i32 @isdigit(i8 signext %9)
%13 = icmp eq i32 %12, 0
%14 = sext i1 %13 to i8
%15 = add i8 %6, %14
%16 = select i1 %13, i8 0, i8 2
br label %249
17: ; preds = %4
%18 = tail call i32 @isdigit(i8 signext %9)
%19 = icmp eq i32 %18, 0
br i1 %19, label %20, label %249
20: ; preds = %17
%21 = icmp eq i8 %9, 46
%22 = xor i1 %21, true
%23 = sext i1 %22 to i8
%24 = add i8 %6, %23
%25 = select i1 %21, i8 5, i8 0
br label %249
26: ; preds = %4
%27 = tail call i32 @isdigit(i8 signext %9)
%28 = icmp eq i32 %27, 0
br i1 %28, label %29, label %249
29: ; preds = %26
%30 = icmp eq i8 %9, 46
%31 = xor i1 %30, true
%32 = sext i1 %31 to i8
%33 = add i8 %6, %32
%34 = select i1 %30, i8 5, i8 0
br label %249
35: ; preds = %4
%36 = icmp eq i8 %9, 46
%37 = xor i1 %36, true
%38 = sext i1 %37 to i8
%39 = add i8 %6, %38
%40 = select i1 %36, i8 5, i8 0
br label %249
41: ; preds = %4
%42 = tail call i32 @isdigit(i8 signext %9)
%43 = icmp eq i32 %42, 0
%44 = sext i1 %43 to i8
%45 = add i8 %6, %44
%46 = select i1 %43, i8 0, i8 6
br label %249
47: ; preds = %4
%48 = tail call i32 @isdigit(i8 signext %9)
%49 = icmp eq i32 %48, 0
br i1 %49, label %50, label %249
50: ; preds = %47
%51 = icmp eq i8 %9, 46
%52 = xor i1 %51, true
%53 = sext i1 %52 to i8
%54 = add i8 %6, %53
%55 = select i1 %51, i8 9, i8 0
br label %249
56: ; preds = %4
%57 = tail call i32 @isdigit(i8 signext %9)
%58 = icmp eq i32 %57, 0
br i1 %58, label %59, label %249
59: ; preds = %56
%60 = icmp eq i8 %9, 46
%61 = xor i1 %60, true
%62 = sext i1 %61 to i8
%63 = add i8 %6, %62
%64 = select i1 %60, i8 9, i8 0
br label %249
65: ; preds = %4
%66 = icmp eq i8 %9, 46
%67 = xor i1 %66, true
%68 = sext i1 %67 to i8
%69 = add i8 %6, %68
%70 = select i1 %66, i8 9, i8 0
br label %249
71: ; preds = %4
%72 = tail call i32 @isdigit(i8 signext %9)
%73 = icmp eq i32 %72, 0
%74 = sext i1 %73 to i8
%75 = add i8 %6, %74
%76 = select i1 %73, i8 0, i8 10
br label %249
77: ; preds = %4
%78 = tail call i32 @isdigit(i8 signext %9)
%79 = icmp eq i32 %78, 0
br i1 %79, label %80, label %249
80: ; preds = %77
%81 = icmp eq i8 %9, 46
%82 = xor i1 %81, true
%83 = sext i1 %82 to i8
%84 = add i8 %6, %83
%85 = select i1 %81, i8 13, i8 0
br label %249
86: ; preds = %4
%87 = tail call i32 @isdigit(i8 signext %9)
%88 = icmp eq i32 %87, 0
br i1 %88, label %89, label %249
89: ; preds = %86
%90 = icmp eq i8 %9, 46
%91 = xor i1 %90, true
%92 = sext i1 %91 to i8
%93 = add i8 %6, %92
%94 = select i1 %90, i8 13, i8 0
br label %249
95: ; preds = %4
%96 = icmp eq i8 %9, 46
%97 = xor i1 %96, true
%98 = sext i1 %97 to i8
%99 = add i8 %6, %98
%100 = select i1 %96, i8 13, i8 0
br label %249
101: ; preds = %4
%102 = tail call i32 @isdigit(i8 signext %9)
%103 = icmp eq i32 %102, 0
%104 = sext i1 %103 to i8
%105 = add i8 %6, %104
%106 = select i1 %103, i8 0, i8 14
br label %249
107: ; preds = %4
%108 = tail call i32 @isdigit(i8 signext %9)
%109 = icmp eq i32 %108, 0
br i1 %109, label %110, label %249
110: ; preds = %107
%111 = icmp eq i8 %9, 47
%112 = xor i1 %111, true
%113 = sext i1 %112 to i8
%114 = add i8 %6, %113
%115 = select i1 %111, i8 17, i8 0
br label %249
116: ; preds = %4
%117 = tail call i32 @isdigit(i8 signext %9)
%118 = icmp eq i32 %117, 0
br i1 %118, label %119, label %249
119: ; preds = %116
%120 = icmp eq i8 %9, 47
%121 = xor i1 %120, true
%122 = sext i1 %121 to i8
%123 = add i8 %6, %122
%124 = select i1 %120, i8 17, i8 0
br label %249
125: ; preds = %4
%126 = icmp eq i8 %9, 47
%127 = xor i1 %126, true
%128 = sext i1 %127 to i8
%129 = add i8 %6, %128
%130 = select i1 %126, i8 17, i8 0
br label %249
131: ; preds = %4
%132 = tail call i32 @isdigit(i8 signext %9)
%133 = icmp eq i32 %132, 0
%134 = sext i1 %133 to i8
%135 = add i8 %6, %134
%136 = select i1 %133, i8 0, i8 18
br label %249
137: ; preds = %4
%138 = tail call i32 @isdigit(i8 signext %9)
%139 = icmp eq i32 %138, 0
br i1 %139, label %140, label %249
140: ; preds = %137
%141 = icmp eq i8 %9, 46
%142 = xor i1 %141, true
%143 = sext i1 %142 to i8
%144 = add i8 %6, %143
%145 = select i1 %141, i8 21, i8 0
br label %249
146: ; preds = %4
%147 = tail call i32 @isdigit(i8 signext %9)
%148 = icmp eq i32 %147, 0
br i1 %148, label %149, label %249
149: ; preds = %146
%150 = icmp eq i8 %9, 46
%151 = xor i1 %150, true
%152 = sext i1 %151 to i8
%153 = add i8 %6, %152
%154 = select i1 %150, i8 21, i8 0
br label %249
155: ; preds = %4
%156 = icmp eq i8 %9, 46
%157 = xor i1 %156, true
%158 = sext i1 %157 to i8
%159 = add i8 %6, %158
%160 = select i1 %156, i8 21, i8 0
br label %249
161: ; preds = %4
%162 = tail call i32 @isdigit(i8 signext %9)
%163 = icmp eq i32 %162, 0
%164 = sext i1 %163 to i8
%165 = add i8 %6, %164
%166 = select i1 %163, i8 0, i8 22
br label %249
167: ; preds = %4
%168 = tail call i32 @isdigit(i8 signext %9)
%169 = icmp eq i32 %168, 0
br i1 %169, label %170, label %249
170: ; preds = %167
%171 = icmp eq i8 %9, 46
%172 = xor i1 %171, true
%173 = sext i1 %172 to i8
%174 = add i8 %6, %173
%175 = select i1 %171, i8 25, i8 0
br label %249
176: ; preds = %4
%177 = tail call i32 @isdigit(i8 signext %9)
%178 = icmp eq i32 %177, 0
br i1 %178, label %179, label %249
179: ; preds = %176
%180 = icmp eq i8 %9, 46
%181 = xor i1 %180, true
%182 = sext i1 %181 to i8
%183 = add i8 %6, %182
%184 = select i1 %180, i8 25, i8 0
br label %249
185: ; preds = %4
%186 = icmp eq i8 %9, 46
%187 = xor i1 %186, true
%188 = sext i1 %187 to i8
%189 = add i8 %6, %188
%190 = select i1 %186, i8 25, i8 0
br label %249
191: ; preds = %4
%192 = tail call i32 @isdigit(i8 signext %9)
%193 = icmp eq i32 %192, 0
%194 = sext i1 %193 to i8
%195 = add i8 %6, %194
%196 = select i1 %193, i8 0, i8 26
br label %249
197: ; preds = %4
%198 = tail call i32 @isdigit(i8 signext %9)
%199 = icmp eq i32 %198, 0
br i1 %199, label %200, label %249
200: ; preds = %197
%201 = icmp eq i8 %9, 46
%202 = xor i1 %201, true
%203 = sext i1 %202 to i8
%204 = add i8 %6, %203
%205 = select i1 %201, i8 29, i8 0
br label %249
206: ; preds = %4
%207 = tail call i32 @isdigit(i8 signext %9)
%208 = icmp eq i32 %207, 0
br i1 %208, label %209, label %249
209: ; preds = %206
%210 = icmp eq i8 %9, 46
%211 = xor i1 %210, true
%212 = sext i1 %211 to i8
%213 = add i8 %6, %212
%214 = select i1 %210, i8 29, i8 0
br label %249
215: ; preds = %4
%216 = icmp eq i8 %9, 46
%217 = xor i1 %216, true
%218 = sext i1 %217 to i8
%219 = add i8 %6, %218
%220 = select i1 %216, i8 29, i8 0
br label %249
221: ; preds = %4
%222 = tail call i32 @isdigit(i8 signext %9)
%223 = icmp eq i32 %222, 0
%224 = sext i1 %223 to i8
%225 = add i8 %6, %224
%226 = select i1 %223, i8 0, i8 30
br label %249
227: ; preds = %4
%228 = tail call i32 @isdigit(i8 signext %9)
%229 = icmp eq i32 %228, 0
%230 = sext i1 %229 to i8
%231 = add i8 %6, %230
%232 = select i1 %229, i8 0, i8 31
br label %249
233: ; preds = %4
%234 = tail call i32 @isdigit(i8 signext %9)
%235 = icmp eq i32 %234, 0
%236 = sext i1 %235 to i8
%237 = add i8 %6, %236
%238 = select i1 %235, i8 0, i8 32
br label %249
239: ; preds = %4
%240 = icmp eq i8 %9, 0
%241 = xor i1 %240, true
%242 = sext i1 %241 to i8
%243 = add i8 %6, %242
%244 = select i1 %240, i8 %5, i8 0
br label %249
245: ; preds = %4
%246 = tail call i32 @strlen(i8* %0)
%247 = trunc i32 %246 to i8
%248 = add i8 %247, -1
br label %249
249: ; preds = %233, %227, %221, %215, %209, %200, %191, %185, %179, %170, %161, %155, %149, %140, %131, %125, %119, %110, %101, %95, %89, %80, %71, %65, %59, %50, %41, %35, %29, %20, %11, %239, %206, %197, %176, %167, %146, %137, %116, %107, %86, %77, %56, %47, %26, %17, %245
%250 = phi i8 [ %248, %245 ], [ %6, %17 ], [ %6, %26 ], [ %6, %47 ], [ %6, %56 ], [ %6, %77 ], [ %6, %86 ], [ %6, %107 ], [ %6, %116 ], [ %6, %137 ], [ %6, %146 ], [ %6, %167 ], [ %6, %176 ], [ %6, %197 ], [ %6, %206 ], [ %243, %239 ], [ %15, %11 ], [ %24, %20 ], [ %33, %29 ], [ %39, %35 ], [ %45, %41 ], [ %54, %50 ], [ %63, %59 ], [ %69, %65 ], [ %75, %71 ], [ %84, %80 ], [ %93, %89 ], [ %99, %95 ], [ %105, %101 ], [ %114, %110 ], [ %123, %119 ], [ %129, %125 ], [ %135, %131 ], [ %144, %140 ], [ %153, %149 ], [ %159, %155 ], [ %165, %161 ], [ %174, %170 ], [ %183, %179 ], [ %189, %185 ], [ %195, %191 ], [ %204, %200 ], [ %213, %209 ], [ %219, %215 ], [ %225, %221 ], [ %231, %227 ], [ %237, %233 ]
%251 = phi i8 [ %5, %245 ], [ 3, %17 ], [ 4, %26 ], [ 7, %47 ], [ 8, %56 ], [ 11, %77 ], [ 12, %86 ], [ 15, %107 ], [ 16, %116 ], [ 19, %137 ], [ 20, %146 ], [ 23, %167 ], [ 24, %176 ], [ 27, %197 ], [ 28, %206 ], [ %244, %239 ], [ %16, %11 ], [ %25, %20 ], [ %34, %29 ], [ %40, %35 ], [ %46, %41 ], [ %55, %50 ], [ %64, %59 ], [ %70, %65 ], [ %76, %71 ], [ %85, %80 ], [ %94, %89 ], [ %100, %95 ], [ %106, %101 ], [ %115, %110 ], [ %124, %119 ], [ %130, %125 ], [ %136, %131 ], [ %145, %140 ], [ %154, %149 ], [ %160, %155 ], [ %166, %161 ], [ %175, %170 ], [ %184, %179 ], [ %190, %185 ], [ %196, %191 ], [ %205, %200 ], [ %214, %209 ], [ %220, %215 ], [ %226, %221 ], [ %232, %227 ], [ %238, %233 ]
%252 = add i8 %250, 1
%253 = sext i8 %252 to i32
%254 = tail call i32 @strlen(i8* %0)
%255 = icmp sgt i32 %254, %253
br i1 %255, label %4, label %256
256: ; preds = %249
%257 = sext i8 %251 to i32
%258 = add nsw i32 %257, -14
%259 = icmp ult i32 %258, 19
br i1 %259, label %260, label %264
260: ; preds = %256
%261 = sext i32 %258 to i64
%262 = getelementptr inbounds [19 x i8], [19 x i8]* @switch.table.verSinNumIP, i64 0, i64 %261
%263 = load i8, i8* %262
br label %264
264: ; preds = %1, %256, %260
%265 = phi i8 [ %263, %260 ], [ 0, %256 ], [ 0, %1 ]
ret i8 %265
}