#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 valid_local_part(const unsigned char *local_part) {
  const unsigned char *ptr;
  int state;
  size_t len;
  ptr = local_part;
  if (!(((((*ptr >= 'A') && (*ptr <= 'Z')) ||
          ((*ptr >= 'a') && (*ptr <= 'z')))) ||
        (((*ptr >= '0') && (*ptr <= '9'))) || (*ptr == '!') || (*ptr == '#') ||
        (*ptr == '$') || (*ptr == '%') || (*ptr == '&') || (*ptr == '\'') ||
        (*ptr == '*') || (*ptr == '+') || (*ptr == '-') || (*ptr == '/') ||
        (*ptr == '=') || (*ptr == '?') || (*ptr == '^') || (*ptr == '_') ||
        (*ptr == '`') || (*ptr == '{') || (*ptr == '|') || (*ptr == '}') ||
        (*ptr == '~'))) {
    return -1;
  }
  ptr++;
  len = 1;
  state = 0;
  do {
    if (state == 0) {
      if (*ptr == '.') {
        state = 1;
      } else if (!*ptr) {
        break;
      } else if (!(((((*ptr >= 'A') && (*ptr <= 'Z')) ||
                     ((*ptr >= 'a') && (*ptr <= 'z')))) ||
                   (((*ptr >= '0') && (*ptr <= '9'))) || (*ptr == '!') ||
                   (*ptr == '#') || (*ptr == '$') || (*ptr == '%') ||
                   (*ptr == '&') || (*ptr == '\'') || (*ptr == '*') ||
                   (*ptr == '+') || (*ptr == '-') || (*ptr == '/') ||
                   (*ptr == '=') || (*ptr == '?') || (*ptr == '^') ||
                   (*ptr == '_') || (*ptr == '`') || (*ptr == '{') ||
                   (*ptr == '|') || (*ptr == '}') || (*ptr == '~'))) {
        return -1;
      }
    } else {
      if (!(((((*ptr >= 'A') && (*ptr <= 'Z')) ||
              ((*ptr >= 'a') && (*ptr <= 'z')))) ||
            (((*ptr >= '0') && (*ptr <= '9'))) || (*ptr == '!') ||
            (*ptr == '#') || (*ptr == '$') || (*ptr == '%') || (*ptr == '&') ||
            (*ptr == '\'') || (*ptr == '*') || (*ptr == '+') || (*ptr == '-') ||
            (*ptr == '/') || (*ptr == '=') || (*ptr == '?') || (*ptr == '^') ||
            (*ptr == '_') || (*ptr == '`') || (*ptr == '{') || (*ptr == '|') ||
            (*ptr == '}') || (*ptr == '~'))) {
        return -1;
      }
      state = 0;
    }
    if (++len > 64) {
      return -1;
    }
    ptr++;
  } while (1);
  return 0;
}


x86 assembly (clang, -O0):
<valid_local_part>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x41,%eax
jl     1130 <valid_local_part+0x30>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x5a,%eax
jle    12ac <valid_local_part+0x1ac>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x61,%eax
jl     1150 <valid_local_part+0x50>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x7a,%eax
jle    12ac <valid_local_part+0x1ac>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x30,%eax
jl     1170 <valid_local_part+0x70>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x39,%eax
jle    12ac <valid_local_part+0x1ac>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x21,%eax
je     12ac <valid_local_part+0x1ac>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x23,%eax
je     12ac <valid_local_part+0x1ac>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x24,%eax
je     12ac <valid_local_part+0x1ac>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x25,%eax
je     12ac <valid_local_part+0x1ac>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x26,%eax
je     12ac <valid_local_part+0x1ac>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x27,%eax
je     12ac <valid_local_part+0x1ac>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x2a,%eax
je     12ac <valid_local_part+0x1ac>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x2b,%eax
je     12ac <valid_local_part+0x1ac>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x2d,%eax
je     12ac <valid_local_part+0x1ac>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x2f,%eax
je     12ac <valid_local_part+0x1ac>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x3d,%eax
je     12ac <valid_local_part+0x1ac>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x3f,%eax
je     12ac <valid_local_part+0x1ac>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x5e,%eax
je     12ac <valid_local_part+0x1ac>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x5f,%eax
je     12ac <valid_local_part+0x1ac>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x60,%eax
je     12ac <valid_local_part+0x1ac>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x7b,%eax
je     12ac <valid_local_part+0x1ac>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x7c,%eax
je     12ac <valid_local_part+0x1ac>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x7d,%eax
je     12ac <valid_local_part+0x1ac>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x7e,%eax
je     12ac <valid_local_part+0x1ac>
movl   $0xffffffff,-0x4(%rbp)
jmp    1691 <valid_local_part+0x591>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
movq   $0x1,-0x28(%rbp)
movl   $0x0,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jne    14aa <valid_local_part+0x3aa>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x2e,%eax
jne    12ed <valid_local_part+0x1ed>
movl   $0x1,-0x1c(%rbp)
jmp    14a5 <valid_local_part+0x3a5>
mov    -0x18(%rbp),%rax
cmpb   $0x0,(%rax)
jne    12ff <valid_local_part+0x1ff>
jmp    168a <valid_local_part+0x58a>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x41,%eax
jl     131f <valid_local_part+0x21f>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x5a,%eax
jle    149b <valid_local_part+0x39b>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x61,%eax
jl     133f <valid_local_part+0x23f>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x7a,%eax
jle    149b <valid_local_part+0x39b>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x30,%eax
jl     135f <valid_local_part+0x25f>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x39,%eax
jle    149b <valid_local_part+0x39b>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x21,%eax
je     149b <valid_local_part+0x39b>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x23,%eax
je     149b <valid_local_part+0x39b>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x24,%eax
je     149b <valid_local_part+0x39b>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x25,%eax
je     149b <valid_local_part+0x39b>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x26,%eax
je     149b <valid_local_part+0x39b>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x27,%eax
je     149b <valid_local_part+0x39b>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x2a,%eax
je     149b <valid_local_part+0x39b>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x2b,%eax
je     149b <valid_local_part+0x39b>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x2d,%eax
je     149b <valid_local_part+0x39b>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x2f,%eax
je     149b <valid_local_part+0x39b>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x3d,%eax
je     149b <valid_local_part+0x39b>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x3f,%eax
je     149b <valid_local_part+0x39b>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x5e,%eax
je     149b <valid_local_part+0x39b>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x5f,%eax
je     149b <valid_local_part+0x39b>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x60,%eax
je     149b <valid_local_part+0x39b>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x7b,%eax
je     149b <valid_local_part+0x39b>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x7c,%eax
je     149b <valid_local_part+0x39b>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x7d,%eax
je     149b <valid_local_part+0x39b>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x7e,%eax
je     149b <valid_local_part+0x39b>
movl   $0xffffffff,-0x4(%rbp)
jmp    1691 <valid_local_part+0x591>
jmp    14a0 <valid_local_part+0x3a0>
jmp    14a5 <valid_local_part+0x3a5>
jmp    164d <valid_local_part+0x54d>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x41,%eax
jl     14ca <valid_local_part+0x3ca>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x5a,%eax
jle    1646 <valid_local_part+0x546>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x61,%eax
jl     14ea <valid_local_part+0x3ea>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x7a,%eax
jle    1646 <valid_local_part+0x546>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x30,%eax
jl     150a <valid_local_part+0x40a>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x39,%eax
jle    1646 <valid_local_part+0x546>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x21,%eax
je     1646 <valid_local_part+0x546>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x23,%eax
je     1646 <valid_local_part+0x546>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x24,%eax
je     1646 <valid_local_part+0x546>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x25,%eax
je     1646 <valid_local_part+0x546>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x26,%eax
je     1646 <valid_local_part+0x546>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x27,%eax
je     1646 <valid_local_part+0x546>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x2a,%eax
je     1646 <valid_local_part+0x546>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x2b,%eax
je     1646 <valid_local_part+0x546>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x2d,%eax
je     1646 <valid_local_part+0x546>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x2f,%eax
je     1646 <valid_local_part+0x546>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x3d,%eax
je     1646 <valid_local_part+0x546>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x3f,%eax
je     1646 <valid_local_part+0x546>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x5e,%eax
je     1646 <valid_local_part+0x546>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x5f,%eax
je     1646 <valid_local_part+0x546>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x60,%eax
je     1646 <valid_local_part+0x546>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x7b,%eax
je     1646 <valid_local_part+0x546>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x7c,%eax
je     1646 <valid_local_part+0x546>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x7d,%eax
je     1646 <valid_local_part+0x546>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x7e,%eax
je     1646 <valid_local_part+0x546>
movl   $0xffffffff,-0x4(%rbp)
jmp    1691 <valid_local_part+0x591>
movl   $0x0,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
cmp    $0x40,%rax
jbe    166f <valid_local_part+0x56f>
movl   $0xffffffff,-0x4(%rbp)
jmp    1691 <valid_local_part+0x591>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    $0x1,%al
test   $0x1,%al
jne    12c7 <valid_local_part+0x1c7>
jmp    168a <valid_local_part+0x58a>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<valid_local_part>:
mov    (%rdi),%cl
mov    %ecx,%eax
and    $0xdf,%al
add    $0xbf,%al
cmp    $0x1a,%al
jb     1137 <valid_local_part+0x37>
lea    -0x30(%rcx),%eax
cmp    $0xa,%al
jb     1137 <valid_local_part+0x37>
mov    $0xffffffff,%eax
add    $0xdf,%cl
cmp    $0x5d,%cl
ja     11e4 <valid_local_part+0xe4>
movzbl %cl,%ecx
lea    0xed2(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
xor    %ecx,%ecx
lea    0x11b0(%rip),%r8
lea    0x1031(%rip),%r9
xor    %edx,%edx
jmp    115e <valid_local_part+0x5e>
nopl   0x0(%rax,%rax,1)
add    $0x1,%rcx
cmp    $0x40,%rcx
je     11df <valid_local_part+0xdf>
movzbl 0x1(%rdi,%rcx,1),%esi
test   %edx,%edx
jne    11b0 <valid_local_part+0xb0>
mov    $0x1,%edx
cmp    $0x2e,%sil
je     1150 <valid_local_part+0x50>
test   %sil,%sil
je     11e5 <valid_local_part+0xe5>
mov    %esi,%eax
and    $0xdf,%al
add    $0xbf,%al
xor    %edx,%edx
cmp    $0x1a,%al
jb     1150 <valid_local_part+0x50>
lea    -0x30(%rsi),%eax
cmp    $0xa,%al
jb     1150 <valid_local_part+0x50>
mov    $0xffffffff,%eax
add    $0xdf,%sil
cmp    $0x5d,%sil
ja     11e4 <valid_local_part+0xe4>
movzbl %sil,%esi
movslq (%r8,%rsi,4),%rsi
add    %r8,%rsi
jmp    *%rsi
cs nopw 0x0(%rax,%rax,1)
mov    %esi,%eax
and    $0xdf,%al
add    $0xbf,%al
xor    %edx,%edx
cmp    $0x1a,%al
jb     1150 <valid_local_part+0x50>
lea    -0x30(%rsi),%eax
cmp    $0xa,%al
jb     1150 <valid_local_part+0x50>
mov    $0xffffffff,%eax
add    $0xdf,%sil
cmp    $0x5d,%sil
ja     11e4 <valid_local_part+0xe4>
movzbl %sil,%esi
movslq (%r9,%rsi,4),%rsi
add    %r9,%rsi
jmp    *%rsi
mov    $0xffffffff,%eax
ret
xor    %eax,%eax
ret

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

LLVM IR (-O2):
define i32 @valid_local_part(i8* nocapture %0) {
%2 = load i8, i8* %0
%3 = and i8 %2, -33
%4 = add i8 %3, -65
%5 = icmp ult i8 %4, 26
%6 = add i8 %2, -48
%7 = icmp ult i8 %6, 10
%8 = select i1 %5, i1 true, i1 %7
br i1 %8, label %10, label %9
9: ; preds = %1
switch i8 %2, label %39 [
i8 33, label %10
i8 35, label %10
i8 36, label %10
i8 37, label %10
i8 38, label %10
i8 39, label %10
i8 42, label %10
i8 43, label %10
i8 45, label %10
i8 47, label %10
i8 61, label %10
i8 63, label %10
i8 94, label %10
i8 95, label %10
i8 96, label %10
i8 123, label %10
i8 124, label %10
i8 125, label %10
i8 126, label %10
]
10: ; preds = %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %1
br label %11
11: ; preds = %10, %35
%12 = phi i8* [ %15, %35 ], [ %0, %10 ]
%13 = phi i32 [ %36, %35 ], [ 0, %10 ]
%14 = phi i64 [ %37, %35 ], [ 1, %10 ]
%15 = getelementptr inbounds i8, i8* %12, i64 1
%16 = icmp eq i32 %13, 0
%17 = load i8, i8* %15
br i1 %16, label %18, label %27
18: ; preds = %11
switch i8 %17, label %19 [
i8 46, label %35
i8 0, label %39
]
19: ; preds = %18
%20 = and i8 %17, -33
%21 = add i8 %20, -65
%22 = icmp ult i8 %21, 26
%23 = add i8 %17, -48
%24 = icmp ult i8 %23, 10
%25 = select i1 %22, i1 true, i1 %24
br i1 %25, label %35, label %26
26: ; preds = %19
switch i8 %17, label %39 [
i8 33, label %35
i8 35, label %35
i8 36, label %35
i8 37, label %35
i8 38, label %35
i8 39, label %35
i8 42, label %35
i8 43, label %35
i8 45, label %35
i8 47, label %35
i8 61, label %35
i8 63, label %35
i8 94, label %35
i8 95, label %35
i8 96, label %35
i8 123, label %35
i8 124, label %35
i8 125, label %35
i8 126, label %35
]
27: ; preds = %11
%28 = and i8 %17, -33
%29 = add i8 %28, -65
%30 = icmp ult i8 %29, 26
%31 = add i8 %17, -48
%32 = icmp ult i8 %31, 10
%33 = select i1 %30, i1 true, i1 %32
br i1 %33, label %35, label %34
34: ; preds = %27
switch i8 %17, label %39 [
i8 33, label %35
i8 35, label %35
i8 36, label %35
i8 37, label %35
i8 38, label %35
i8 39, label %35
i8 42, label %35
i8 43, label %35
i8 45, label %35
i8 47, label %35
i8 61, label %35
i8 63, label %35
i8 94, label %35
i8 95, label %35
i8 96, label %35
i8 123, label %35
i8 124, label %35
i8 125, label %35
i8 126, label %35
]
35: ; preds = %27, %34, %34, %34, %34, %34, %34, %34, %34, %34, %34, %34, %34, %34, %34, %34, %34, %34, %34, %34, %26, %26, %26, %26, %26, %26, %26, %26, %26, %26, %26, %26, %26, %26, %26, %26, %26, %26, %26, %19, %18
%36 = phi i32 [ 0, %26 ], [ 1, %18 ], [ 0, %19 ], [ 0, %26 ], [ 0, %26 ], [ 0, %26 ], [ 0, %26 ], [ 0, %26 ], [ 0, %26 ], [ 0, %26 ], [ 0, %26 ], [ 0, %26 ], [ 0, %26 ], [ 0, %26 ], [ 0, %26 ], [ 0, %26 ], [ 0, %26 ], [ 0, %26 ], [ 0, %26 ], [ 0, %26 ], [ 0, %26 ], [ 0, %34 ], [ 0, %34 ], [ 0, %34 ], [ 0, %34 ], [ 0, %34 ], [ 0, %34 ], [ 0, %34 ], [ 0, %34 ], [ 0, %34 ], [ 0, %34 ], [ 0, %34 ], [ 0, %34 ], [ 0, %34 ], [ 0, %34 ], [ 0, %34 ], [ 0, %34 ], [ 0, %34 ], [ 0, %34 ], [ 0, %34 ], [ 0, %27 ]
%37 = add nuw nsw i64 %14, 1
%38 = icmp eq i64 %37, 65
br i1 %38, label %39, label %11
39: ; preds = %18, %35, %34, %26, %9
%40 = phi i32 [ -1, %9 ], [ 0, %18 ], [ -1, %35 ], [ -1, %34 ], [ -1, %26 ]
ret i32 %40
}