#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*/ printf(char *, ...);
int /*<<< orphan*/ *strchr(char *, int);
int main(void) {
  int i;
  printf("static const char HREF_SAFE[] = {\n\t");
  for (i = 0; i < 256; ++i) {
    printf("%d, ", ((((i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z') ||
                      (i >= '0' && i <= '9')) ||
                     i == '-' || i == '_' || i == '.') ||
                    strchr("-_.+!*(),%#@?=;:/,+$", i) != NULL));
    if (i % 16 == 15 && i < 255)
      printf("\n\t");
  }
  printf("};\n\n");
  printf("static const char URL_SAFE[] = {\n\t");
  for (i = 0; i < 256; ++i) {
    printf("%d, ", (((i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z') ||
                     (i >= '0' && i <= '9')) ||
                    i == '-' || i == '_' || i == '.'));
    if (i % 16 == 15 && i < 255)
      printf("\n\t");
  }
  printf("};\n\n");
  printf("static const char URI_SAFE[] = {\n\t");
  for (i = 0; i < 256; ++i) {
    printf("%d, ", ((((i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z') ||
                      (i >= '0' && i <= '9')) ||
                     i == '-' || i == '_' || i == '.') ||
                    (((i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z') ||
                      (i >= '0' && i <= '9')) ||
                     i == '-' || i == '_' || i == '.' || i == '!' || i == '~' ||
                     i == '*' || i == '\'' || i == '(' || i == ')') ||
                    (i == ';' || i == '/' || i == '?' || i == ':' || i == '@' ||
                     i == '&' || i == '=' || i == '+' || i == '$' || i == ',' ||
                     i == '[' || i == ']')));
    if (i % 16 == 15 && i < 255)
      printf("\n\t");
  }
  printf("};\n");
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xeca(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x100,-0x8(%rbp)
jge    123a <main+0x11a>
cmpl   $0x61,-0x8(%rbp)
jl     116a <main+0x4a>
mov    $0x1,%al
cmpl   $0x7a,-0x8(%rbp)
mov    %al,-0x9(%rbp)
jle    11e2 <main+0xc2>
cmpl   $0x41,-0x8(%rbp)
jl     1183 <main+0x63>
mov    $0x1,%al
cmpl   $0x5a,-0x8(%rbp)
mov    %al,-0x9(%rbp)
jle    11e2 <main+0xc2>
cmpl   $0x30,-0x8(%rbp)
jl     119c <main+0x7c>
mov    $0x1,%al
cmpl   $0x39,-0x8(%rbp)
mov    %al,-0x9(%rbp)
jle    11e2 <main+0xc2>
mov    $0x1,%al
cmpl   $0x2d,-0x8(%rbp)
mov    %al,-0x9(%rbp)
je     11e2 <main+0xc2>
mov    $0x1,%al
cmpl   $0x5f,-0x8(%rbp)
mov    %al,-0x9(%rbp)
je     11e2 <main+0xc2>
mov    $0x1,%al
cmpl   $0x2e,-0x8(%rbp)
mov    %al,-0x9(%rbp)
je     11e2 <main+0xc2>
mov    -0x8(%rbp),%esi
lea    0xe56(%rip),%rdi
call   1030 <strchr@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x9(%rbp)
mov    -0x9(%rbp),%al
and    $0x1,%al
movzbl %al,%esi
lea    0xe33(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
mov    $0x10,%ecx
cltd
idiv   %ecx
cmp    $0xf,%edx
jne    1227 <main+0x107>
cmpl   $0xff,-0x8(%rbp)
jge    1227 <main+0x107>
lea    0xe01(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    122c <main+0x10c>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1144 <main+0x24>
lea    0xdfd(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xdf4(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x100,-0x8(%rbp)
jge    1335 <main+0x215>
cmpl   $0x61,-0x8(%rbp)
jl     1283 <main+0x163>
mov    $0x1,%al
cmpl   $0x7a,-0x8(%rbp)
mov    %al,-0xa(%rbp)
jle    12dd <main+0x1bd>
cmpl   $0x41,-0x8(%rbp)
jl     129c <main+0x17c>
mov    $0x1,%al
cmpl   $0x5a,-0x8(%rbp)
mov    %al,-0xa(%rbp)
jle    12dd <main+0x1bd>
cmpl   $0x30,-0x8(%rbp)
jl     12b5 <main+0x195>
mov    $0x1,%al
cmpl   $0x39,-0x8(%rbp)
mov    %al,-0xa(%rbp)
jle    12dd <main+0x1bd>
mov    $0x1,%al
cmpl   $0x2d,-0x8(%rbp)
mov    %al,-0xa(%rbp)
je     12dd <main+0x1bd>
mov    $0x1,%al
cmpl   $0x5f,-0x8(%rbp)
mov    %al,-0xa(%rbp)
je     12dd <main+0x1bd>
cmpl   $0x2e,-0x8(%rbp)
sete   %al
mov    %al,-0xa(%rbp)
mov    -0xa(%rbp),%al
and    $0x1,%al
movzbl %al,%esi
lea    0xd38(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
mov    $0x10,%ecx
cltd
idiv   %ecx
cmp    $0xf,%edx
jne    1322 <main+0x202>
cmpl   $0xff,-0x8(%rbp)
jge    1322 <main+0x202>
lea    0xd06(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1327 <main+0x207>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    125d <main+0x13d>
lea    0xd02(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xd1c(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x100,-0x8(%rbp)
jge    15bc <main+0x49c>
cmpl   $0x61,-0x8(%rbp)
jl     137e <main+0x25e>
mov    $0x1,%al
cmpl   $0x7a,-0x8(%rbp)
mov    %al,-0xb(%rbp)
jle    1564 <main+0x444>
cmpl   $0x41,-0x8(%rbp)
jl     1397 <main+0x277>
mov    $0x1,%al
cmpl   $0x5a,-0x8(%rbp)
mov    %al,-0xb(%rbp)
jle    1564 <main+0x444>
cmpl   $0x30,-0x8(%rbp)
jl     13b0 <main+0x290>
mov    $0x1,%al
cmpl   $0x39,-0x8(%rbp)
mov    %al,-0xb(%rbp)
jle    1564 <main+0x444>
mov    $0x1,%al
cmpl   $0x2d,-0x8(%rbp)
mov    %al,-0xb(%rbp)
je     1564 <main+0x444>
mov    $0x1,%al
cmpl   $0x5f,-0x8(%rbp)
mov    %al,-0xb(%rbp)
je     1564 <main+0x444>
mov    $0x1,%al
cmpl   $0x2e,-0x8(%rbp)
mov    %al,-0xb(%rbp)
je     1564 <main+0x444>
cmpl   $0x61,-0x8(%rbp)
jl     13f6 <main+0x2d6>
mov    $0x1,%al
cmpl   $0x7a,-0x8(%rbp)
mov    %al,-0xb(%rbp)
jle    1564 <main+0x444>
cmpl   $0x41,-0x8(%rbp)
jl     140f <main+0x2ef>
mov    $0x1,%al
cmpl   $0x5a,-0x8(%rbp)
mov    %al,-0xb(%rbp)
jle    1564 <main+0x444>
cmpl   $0x30,-0x8(%rbp)
jl     1428 <main+0x308>
mov    $0x1,%al
cmpl   $0x39,-0x8(%rbp)
mov    %al,-0xb(%rbp)
jle    1564 <main+0x444>
mov    $0x1,%al
cmpl   $0x2d,-0x8(%rbp)
mov    %al,-0xb(%rbp)
je     1564 <main+0x444>
mov    $0x1,%al
cmpl   $0x5f,-0x8(%rbp)
mov    %al,-0xb(%rbp)
je     1564 <main+0x444>
mov    $0x1,%al
cmpl   $0x2e,-0x8(%rbp)
mov    %al,-0xb(%rbp)
je     1564 <main+0x444>
mov    $0x1,%al
cmpl   $0x21,-0x8(%rbp)
mov    %al,-0xb(%rbp)
je     1564 <main+0x444>
mov    $0x1,%al
cmpl   $0x7e,-0x8(%rbp)
mov    %al,-0xb(%rbp)
je     1564 <main+0x444>
mov    $0x1,%al
cmpl   $0x2a,-0x8(%rbp)
mov    %al,-0xb(%rbp)
je     1564 <main+0x444>
mov    $0x1,%al
cmpl   $0x27,-0x8(%rbp)
mov    %al,-0xb(%rbp)
je     1564 <main+0x444>
mov    $0x1,%al
cmpl   $0x28,-0x8(%rbp)
mov    %al,-0xb(%rbp)
je     1564 <main+0x444>
mov    $0x1,%al
cmpl   $0x29,-0x8(%rbp)
mov    %al,-0xb(%rbp)
je     1564 <main+0x444>
mov    $0x1,%al
cmpl   $0x3b,-0x8(%rbp)
mov    %al,-0xc(%rbp)
je     155e <main+0x43e>
mov    $0x1,%al
cmpl   $0x2f,-0x8(%rbp)
mov    %al,-0xc(%rbp)
je     155e <main+0x43e>
mov    $0x1,%al
cmpl   $0x3f,-0x8(%rbp)
mov    %al,-0xc(%rbp)
je     155e <main+0x43e>
mov    $0x1,%al
cmpl   $0x3a,-0x8(%rbp)
mov    %al,-0xc(%rbp)
je     155e <main+0x43e>
mov    $0x1,%al
cmpl   $0x40,-0x8(%rbp)
mov    %al,-0xc(%rbp)
je     155e <main+0x43e>
mov    $0x1,%al
cmpl   $0x26,-0x8(%rbp)
mov    %al,-0xc(%rbp)
je     155e <main+0x43e>
mov    $0x1,%al
cmpl   $0x3d,-0x8(%rbp)
mov    %al,-0xc(%rbp)
je     155e <main+0x43e>
mov    $0x1,%al
cmpl   $0x2b,-0x8(%rbp)
mov    %al,-0xc(%rbp)
je     155e <main+0x43e>
mov    $0x1,%al
cmpl   $0x24,-0x8(%rbp)
mov    %al,-0xc(%rbp)
je     155e <main+0x43e>
mov    $0x1,%al
cmpl   $0x2c,-0x8(%rbp)
mov    %al,-0xc(%rbp)
je     155e <main+0x43e>
mov    $0x1,%al
cmpl   $0x5b,-0x8(%rbp)
mov    %al,-0xc(%rbp)
je     155e <main+0x43e>
cmpl   $0x5d,-0x8(%rbp)
sete   %al
mov    %al,-0xc(%rbp)
mov    -0xc(%rbp),%al
mov    %al,-0xb(%rbp)
mov    -0xb(%rbp),%al
and    $0x1,%al
movzbl %al,%esi
lea    0xab1(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
mov    $0x10,%ecx
cltd
idiv   %ecx
cmp    $0xf,%edx
jne    15a9 <main+0x489>
cmpl   $0xff,-0x8(%rbp)
jge    15a9 <main+0x489>
lea    0xa7f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    15ae <main+0x48e>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1358 <main+0x238>
lea    0xac6(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
lea    0xee0(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0xef6(%rip),%r12
lea    0xeec(%rip),%r14
lea    0xeed(%rip),%r15
movabs $0x4000000000003,%r13
xor    %ebx,%ebx
jmp    117d <main+0x4d>
nopw   0x0(%rax,%rax,1)
lea    0x1(%rbx),%eax
cmp    $0xff,%ebx
mov    %eax,%ebx
jae    11eb <main+0xbb>
lea    -0x61(%rbx),%ecx
mov    $0x1,%al
cmp    $0x1a,%ecx
jb     11c0 <main+0x90>
lea    -0x41(%rbx),%ecx
cmp    $0x1a,%ecx
jb     11c0 <main+0x90>
lea    -0x30(%rbx),%ecx
cmp    $0xa,%ecx
jb     11c0 <main+0x90>
lea    -0x2d(%rbx),%ecx
cmp    $0x32,%ecx
ja     11a5 <main+0x75>
bt     %rcx,%r13
jb     11c0 <main+0x90>
mov    %r15,%rdi
mov    %ebx,%esi
call   1040 <strchr@plt>
test   %rax,%rax
setne  %al
cs nopw 0x0(%rax,%rax,1)
nop
movzbl %al,%esi
mov    %r12,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
cmp    $0xfe,%ebx
ja     1170 <main+0x40>
mov    %ebx,%eax
and    $0xf,%eax
cmp    $0xf,%eax
jne    1170 <main+0x40>
mov    %r14,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
jmp    1170 <main+0x40>
lea    0xeb2(%rip),%rdi
call   1030 <puts@plt>
lea    0xe60(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0xe38(%rip),%r15
lea    0xe2e(%rip),%r14
xor    %ebx,%ebx
jmp    122d <main+0xfd>
nopw   0x0(%rax,%rax,1)
lea    0x1(%rbx),%eax
cmp    $0xff,%ebx
mov    %eax,%ebx
jae    1288 <main+0x158>
lea    -0x61(%rbx),%eax
mov    $0x1,%esi
cmp    $0x1a,%eax
jb     1260 <main+0x130>
lea    -0x41(%rbx),%eax
cmp    $0x1a,%eax
jb     1260 <main+0x130>
lea    -0x30(%rbx),%eax
cmp    $0xa,%eax
jb     1260 <main+0x130>
lea    -0x2d(%rbx),%eax
cmp    $0x32,%eax
ja     1258 <main+0x128>
bt     %rax,%r13
jb     1260 <main+0x130>
xor    %esi,%esi
nopw   0x0(%rax,%rax,1)
mov    %r15,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
cmp    $0xfe,%ebx
ja     1220 <main+0xf0>
mov    %ebx,%eax
and    $0xf,%eax
cmp    $0xf,%eax
jne    1220 <main+0xf0>
mov    %r14,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
jmp    1220 <main+0xf0>
lea    0xe15(%rip),%rdi
call   1030 <puts@plt>
lea    0xde6(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0xd9b(%rip),%r12
lea    0xd91(%rip),%r14
movabs $0x40000000000033c1,%r15
xor    %ebx,%ebx
jmp    12d1 <main+0x1a1>
xchg   %ax,%ax
lea    0x1(%rbx),%eax
cmp    $0xff,%ebx
mov    %eax,%ebx
jae    1387 <main+0x257>
lea    -0x61(%rbx),%ecx
mov    $0x1,%al
cmp    $0x1a,%ecx
jb     1300 <main+0x1d0>
lea    -0x41(%rbx),%ecx
cmp    $0x1a,%ecx
jb     1300 <main+0x1d0>
lea    -0x30(%rbx),%ecx
cmp    $0xa,%ecx
jb     1300 <main+0x1d0>
lea    -0x21(%rbx),%ecx
cmp    $0x3e,%ecx
ja     132b <main+0x1fb>
bt     %rcx,%r15
jae    132b <main+0x1fb>
nopl   0x0(%rax)
movzbl %al,%esi
mov    %r12,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
cmp    $0xfe,%ebx
ja     12c0 <main+0x190>
mov    %ebx,%eax
and    $0xf,%eax
cmp    $0xf,%eax
jne    12c0 <main+0x190>
mov    %r14,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
jmp    12c0 <main+0x190>
cmp    $0x7e,%ebx
je     1300 <main+0x1d0>
cmp    $0x2f,%ebx
sete   %cl
mov    %ebx,%eax
and    $0x7ffffffb,%eax
cmp    $0x3b,%eax
sete   %al
mov    %ebx,%edx
and    $0x7ffffff7,%edx
movd   %ebx,%xmm0
movd   %edx,%xmm1
pshufd $0x0,%xmm0,%xmm2
punpckldq %xmm1,%xmm0
pshufd $0x10,%xmm0,%xmm0
pcmpeqd 0xc97(%rip),%xmm0
pcmpeqd 0xc9f(%rip),%xmm2
packssdw %xmm2,%xmm0
pmovmskb %xmm0,%edx
test   %edx,%edx
setne  %dl
or     %cl,%al
or     %dl,%al
jmp    1300 <main+0x1d0>
lea    0xd1a(%rip),%rdi
call   1030 <puts@plt>
xor    %eax,%eax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@.str = [36 x i8] c"static const char HREF_SAFE[] = {\0A\09\00"
@.str.1 = [5 x i8] c"%d, \00"
@.str.2 = [21 x i8] c"-_.+!*(),%#@?=;:/,+$\00"
@.str.3 = [3 x i8] c"\0A\09\00"
@.str.4 = [5 x i8] c"};\0A\0A\00"
@.str.5 = [35 x i8] c"static const char URL_SAFE[] = {\0A\09\00"
@.str.6 = [35 x i8] c"static const char URI_SAFE[] = {\0A\09\00"
@.str.7 = [4 x i8] c"};\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
store i32 0, i32* %1
%3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str, i64 0, i64 0))
store i32 0, i32* %2
br label %4
4: ; preds = %51, %0
%5 = load i32, i32* %2
%6 = icmp slt i32 %5, 256
br i1 %6, label %7, label %54
7: ; preds = %4
%8 = load i32, i32* %2
%9 = icmp sge i32 %8, 97
br i1 %9, label %10, label %13
10: ; preds = %7
%11 = load i32, i32* %2
%12 = icmp sle i32 %11, 122
br i1 %12, label %38, label %13
13: ; preds = %10, %7
%14 = load i32, i32* %2
%15 = icmp sge i32 %14, 65
br i1 %15, label %16, label %19
16: ; preds = %13
%17 = load i32, i32* %2
%18 = icmp sle i32 %17, 90
br i1 %18, label %38, label %19
19: ; preds = %16, %13
%20 = load i32, i32* %2
%21 = icmp sge i32 %20, 48
br i1 %21, label %22, label %25
22: ; preds = %19
%23 = load i32, i32* %2
%24 = icmp sle i32 %23, 57
br i1 %24, label %38, label %25
25: ; preds = %22, %19
%26 = load i32, i32* %2
%27 = icmp eq i32 %26, 45
br i1 %27, label %38, label %28
28: ; preds = %25
%29 = load i32, i32* %2
%30 = icmp eq i32 %29, 95
br i1 %30, label %38, label %31
31: ; preds = %28
%32 = load i32, i32* %2
%33 = icmp eq i32 %32, 46
br i1 %33, label %38, label %34
34: ; preds = %31
%35 = load i32, i32* %2
%36 = call i32* @strchr(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.2, i64 0, i64 0), i32 %35)
%37 = icmp ne i32* %36, null
br label %38
38: ; preds = %34, %31, %28, %25, %22, %16, %10
%39 = phi i1 [ true, %31 ], [ true, %28 ], [ true, %25 ], [ true, %22 ], [ true, %16 ], [ true, %10 ], [ %37, %34 ]
%40 = zext i1 %39 to i32
%41 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i32 %40)
%42 = load i32, i32* %2
%43 = srem i32 %42, 16
%44 = icmp eq i32 %43, 15
br i1 %44, label %45, label %50
45: ; preds = %38
%46 = load i32, i32* %2
%47 = icmp slt i32 %46, 255
br i1 %47, label %48, label %50
48: ; preds = %45
%49 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0))
br label %50
50: ; preds = %48, %45, %38
br label %51
51: ; preds = %50
%52 = load i32, i32* %2
%53 = add nsw i32 %52, 1
store i32 %53, i32* %2
br label %4
54: ; preds = %4
%55 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0))
%56 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.5, i64 0, i64 0))
store i32 0, i32* %2
br label %57
57: ; preds = %100, %54
%58 = load i32, i32* %2
%59 = icmp slt i32 %58, 256
br i1 %59, label %60, label %103
60: ; preds = %57
%61 = load i32, i32* %2
%62 = icmp sge i32 %61, 97
br i1 %62, label %63, label %66
63: ; preds = %60
%64 = load i32, i32* %2
%65 = icmp sle i32 %64, 122
br i1 %65, label %87, label %66
66: ; preds = %63, %60
%67 = load i32, i32* %2
%68 = icmp sge i32 %67, 65
br i1 %68, label %69, label %72
69: ; preds = %66
%70 = load i32, i32* %2
%71 = icmp sle i32 %70, 90
br i1 %71, label %87, label %72
72: ; preds = %69, %66
%73 = load i32, i32* %2
%74 = icmp sge i32 %73, 48
br i1 %74, label %75, label %78
75: ; preds = %72
%76 = load i32, i32* %2
%77 = icmp sle i32 %76, 57
br i1 %77, label %87, label %78
78: ; preds = %75, %72
%79 = load i32, i32* %2
%80 = icmp eq i32 %79, 45
br i1 %80, label %87, label %81
81: ; preds = %78
%82 = load i32, i32* %2
%83 = icmp eq i32 %82, 95
br i1 %83, label %87, label %84
84: ; preds = %81
%85 = load i32, i32* %2
%86 = icmp eq i32 %85, 46
br label %87
87: ; preds = %84, %81, %78, %75, %69, %63
%88 = phi i1 [ true, %81 ], [ true, %78 ], [ true, %75 ], [ true, %69 ], [ true, %63 ], [ %86, %84 ]
%89 = zext i1 %88 to i32
%90 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i32 %89)
%91 = load i32, i32* %2
%92 = srem i32 %91, 16
%93 = icmp eq i32 %92, 15
br i1 %93, label %94, label %99
94: ; preds = %87
%95 = load i32, i32* %2
%96 = icmp slt i32 %95, 255
br i1 %96, label %97, label %99
97: ; preds = %94
%98 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0))
br label %99
99: ; preds = %97, %94, %87
br label %100
100: ; preds = %99
%101 = load i32, i32* %2
%102 = add nsw i32 %101, 1
store i32 %102, i32* %2
br label %57
103: ; preds = %57
%104 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0))
%105 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.6, i64 0, i64 0))
store i32 0, i32* %2
br label %106
106: ; preds = %232, %103
%107 = load i32, i32* %2
%108 = icmp slt i32 %107, 256
br i1 %108, label %109, label %235
109: ; preds = %106
%110 = load i32, i32* %2
%111 = icmp sge i32 %110, 97
br i1 %111, label %112, label %115
112: ; preds = %109
%113 = load i32, i32* %2
%114 = icmp sle i32 %113, 122
br i1 %114, label %219, label %115
115: ; preds = %112, %109
%116 = load i32, i32* %2
%117 = icmp sge i32 %116, 65
br i1 %117, label %118, label %121
118: ; preds = %115
%119 = load i32, i32* %2
%120 = icmp sle i32 %119, 90
br i1 %120, label %219, label %121
121: ; preds = %118, %115
%122 = load i32, i32* %2
%123 = icmp sge i32 %122, 48
br i1 %123, label %124, label %127
124: ; preds = %121
%125 = load i32, i32* %2
%126 = icmp sle i32 %125, 57
br i1 %126, label %219, label %127
127: ; preds = %124, %121
%128 = load i32, i32* %2
%129 = icmp eq i32 %128, 45
br i1 %129, label %219, label %130
130: ; preds = %127
%131 = load i32, i32* %2
%132 = icmp eq i32 %131, 95
br i1 %132, label %219, label %133
133: ; preds = %130
%134 = load i32, i32* %2
%135 = icmp eq i32 %134, 46
br i1 %135, label %219, label %136
136: ; preds = %133
%137 = load i32, i32* %2
%138 = icmp sge i32 %137, 97
br i1 %138, label %139, label %142
139: ; preds = %136
%140 = load i32, i32* %2
%141 = icmp sle i32 %140, 122
br i1 %141, label %219, label %142
142: ; preds = %139, %136
%143 = load i32, i32* %2
%144 = icmp sge i32 %143, 65
br i1 %144, label %145, label %148
145: ; preds = %142
%146 = load i32, i32* %2
%147 = icmp sle i32 %146, 90
br i1 %147, label %219, label %148
148: ; preds = %145, %142
%149 = load i32, i32* %2
%150 = icmp sge i32 %149, 48
br i1 %150, label %151, label %154
151: ; preds = %148
%152 = load i32, i32* %2
%153 = icmp sle i32 %152, 57
br i1 %153, label %219, label %154
154: ; preds = %151, %148
%155 = load i32, i32* %2
%156 = icmp eq i32 %155, 45
br i1 %156, label %219, label %157
157: ; preds = %154
%158 = load i32, i32* %2
%159 = icmp eq i32 %158, 95
br i1 %159, label %219, label %160
160: ; preds = %157
%161 = load i32, i32* %2
%162 = icmp eq i32 %161, 46
br i1 %162, label %219, label %163
163: ; preds = %160
%164 = load i32, i32* %2
%165 = icmp eq i32 %164, 33
br i1 %165, label %219, label %166
166: ; preds = %163
%167 = load i32, i32* %2
%168 = icmp eq i32 %167, 126
br i1 %168, label %219, label %169
169: ; preds = %166
%170 = load i32, i32* %2
%171 = icmp eq i32 %170, 42
br i1 %171, label %219, label %172
172: ; preds = %169
%173 = load i32, i32* %2
%174 = icmp eq i32 %173, 39
br i1 %174, label %219, label %175
175: ; preds = %172
%176 = load i32, i32* %2
%177 = icmp eq i32 %176, 40
br i1 %177, label %219, label %178
178: ; preds = %175
%179 = load i32, i32* %2
%180 = icmp eq i32 %179, 41
br i1 %180, label %219, label %181
181: ; preds = %178
%182 = load i32, i32* %2
%183 = icmp eq i32 %182, 59
br i1 %183, label %217, label %184
184: ; preds = %181
%185 = load i32, i32* %2
%186 = icmp eq i32 %185, 47
br i1 %186, label %217, label %187
187: ; preds = %184
%188 = load i32, i32* %2
%189 = icmp eq i32 %188, 63
br i1 %189, label %217, label %190
190: ; preds = %187
%191 = load i32, i32* %2
%192 = icmp eq i32 %191, 58
br i1 %192, label %217, label %193
193: ; preds = %190
%194 = load i32, i32* %2
%195 = icmp eq i32 %194, 64
br i1 %195, label %217, label %196
196: ; preds = %193
%197 = load i32, i32* %2
%198 = icmp eq i32 %197, 38
br i1 %198, label %217, label %199
199: ; preds = %196
%200 = load i32, i32* %2
%201 = icmp eq i32 %200, 61
br i1 %201, label %217, label %202
202: ; preds = %199
%203 = load i32, i32* %2
%204 = icmp eq i32 %203, 43
br i1 %204, label %217, label %205
205: ; preds = %202
%206 = load i32, i32* %2
%207 = icmp eq i32 %206, 36
br i1 %207, label %217, label %208
208: ; preds = %205
%209 = load i32, i32* %2
%210 = icmp eq i32 %209, 44
br i1 %210, label %217, label %211
211: ; preds = %208
%212 = load i32, i32* %2
%213 = icmp eq i32 %212, 91
br i1 %213, label %217, label %214
214: ; preds = %211
%215 = load i32, i32* %2
%216 = icmp eq i32 %215, 93
br label %217
217: ; preds = %214, %211, %208, %205, %202, %199, %196, %193, %190, %187, %184, %181
%218 = phi i1 [ true, %211 ], [ true, %208 ], [ true, %205 ], [ true, %202 ], [ true, %199 ], [ true, %196 ], [ true, %193 ], [ true, %190 ], [ true, %187 ], [ true, %184 ], [ true, %181 ], [ %216, %214 ]
br label %219
219: ; preds = %217, %178, %175, %172, %169, %166, %163, %160, %157, %154, %151, %145, %139, %133, %130, %127, %124, %118, %112
%220 = phi i1 [ true, %178 ], [ true, %175 ], [ true, %172 ], [ true, %169 ], [ true, %166 ], [ true, %163 ], [ true, %160 ], [ true, %157 ], [ true, %154 ], [ true, %151 ], [ true, %145 ], [ true, %139 ], [ true, %133 ], [ true, %130 ], [ true, %127 ], [ true, %124 ], [ true, %118 ], [ true, %112 ], [ %218, %217 ]
%221 = zext i1 %220 to i32
%222 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i32 %221)
%223 = load i32, i32* %2
%224 = srem i32 %223, 16
%225 = icmp eq i32 %224, 15
br i1 %225, label %226, label %231
226: ; preds = %219
%227 = load i32, i32* %2
%228 = icmp slt i32 %227, 255
br i1 %228, label %229, label %231
229: ; preds = %226
%230 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0))
br label %231
231: ; preds = %229, %226, %219
br label %232
232: ; preds = %231
%233 = load i32, i32* %2
%234 = add nsw i32 %233, 1
store i32 %234, i32* %2
br label %106
235: ; preds = %106
%236 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0))
ret i32 0
}

LLVM IR (-O2):
@.str = [36 x i8] c"static const char HREF_SAFE[] = {\0A\09\00"
@.str.1 = [5 x i8] c"%d, \00"
@.str.2 = [21 x i8] c"-_.+!*(),%#@?=;:/,+$\00"
@.str.3 = [3 x i8] c"\0A\09\00"
@.str.5 = [35 x i8] c"static const char URL_SAFE[] = {\0A\09\00"
@.str.6 = [35 x i8] c"static const char URI_SAFE[] = {\0A\09\00"
@str.8 = [4 x i8] c"};\0A\00"
@str.9 = [3 x i8] c"};\00"
define i32 @main() {
%1 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([36 x i8], [36 x i8]* @.str, i64 0, i64 0))
br label %2
2: ; preds = %0, %28
%3 = phi i32 [ 0, %0 ], [ %29, %28 ]
%4 = add nsw i32 %3, -97
%5 = icmp ult i32 %4, 26
%6 = add nsw i32 %3, -65
%7 = icmp ult i32 %6, 26
%8 = select i1 %5, i1 true, i1 %7
br i1 %8, label %17, label %9
9: ; preds = %2
%10 = freeze i32 %3
%11 = add nsw i32 %10, -48
%12 = icmp ult i32 %11, 10
br i1 %12, label %17, label %13
13: ; preds = %9
switch i32 %10, label %14 [
i32 95, label %17
i32 46, label %17
i32 45, label %17
]
14: ; preds = %13
%15 = tail call i32* @strchr(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.2, i64 0, i64 0), i32 %10)
%16 = icmp ne i32* %15, null
br label %17
17: ; preds = %13, %13, %13, %9, %2, %14
%18 = phi i32 [ %10, %14 ], [ %3, %2 ], [ %10, %13 ], [ %10, %9 ], [ %10, %13 ], [ %10, %13 ]
%19 = phi i1 [ %16, %14 ], [ true, %2 ], [ true, %13 ], [ true, %9 ], [ true, %13 ], [ true, %13 ]
%20 = zext i1 %19 to i32
%21 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i32 %20)
%22 = and i32 %3, 15
%23 = icmp eq i32 %22, 15
%24 = icmp ult i32 %18, 255
%25 = and i1 %24, %23
br i1 %25, label %26, label %28
26: ; preds = %17
%27 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0))
br label %28
28: ; preds = %17, %26
%29 = add nuw nsw i32 %18, 1
br i1 %24, label %2, label %30
30: ; preds = %28
%31 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @str.8, i64 0, i64 0))
%32 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([35 x i8], [35 x i8]* @.str.5, i64 0, i64 0))
br label %33
33: ; preds = %30, %56
%34 = phi i32 [ 0, %30 ], [ %57, %56 ]
%35 = add nsw i32 %34, -97
%36 = icmp ult i32 %35, 26
%37 = add nsw i32 %34, -65
%38 = icmp ult i32 %37, 26
%39 = select i1 %36, i1 true, i1 %38
br i1 %39, label %46, label %40
40: ; preds = %33
%41 = freeze i32 %34
%42 = add nsw i32 %41, -48
%43 = icmp ult i32 %42, 10
br i1 %43, label %46, label %44
44: ; preds = %40
switch i32 %41, label %45 [
i32 95, label %46
i32 45, label %46
i32 46, label %46
]
45: ; preds = %44
br label %46
46: ; preds = %44, %44, %44, %40, %33, %45
%47 = phi i32 [ %41, %45 ], [ %34, %33 ], [ %41, %44 ], [ %41, %40 ], [ %41, %44 ], [ %41, %44 ]
%48 = phi i32 [ 0, %45 ], [ 1, %33 ], [ 1, %44 ], [ 1, %40 ], [ 1, %44 ], [ 1, %44 ]
%49 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i32 %48)
%50 = and i32 %34, 15
%51 = icmp eq i32 %50, 15
%52 = icmp ult i32 %47, 255
%53 = and i1 %52, %51
br i1 %53, label %54, label %56
54: ; preds = %46
%55 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0))
br label %56
56: ; preds = %46, %54
%57 = add nuw nsw i32 %47, 1
br i1 %52, label %33, label %58
58: ; preds = %56
%59 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @str.8, i64 0, i64 0))
%60 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([35 x i8], [35 x i8]* @.str.6, i64 0, i64 0))
br label %61
61: ; preds = %58, %97
%62 = phi i32 [ 0, %58 ], [ %98, %97 ]
%63 = add nsw i32 %62, -97
%64 = icmp ult i32 %63, 26
%65 = add nsw i32 %62, -65
%66 = icmp ult i32 %65, 26
%67 = select i1 %64, i1 true, i1 %66
br i1 %67, label %86, label %68
68: ; preds = %61
%69 = freeze i32 %62
%70 = add nsw i32 %69, -48
%71 = icmp ult i32 %70, 10
br i1 %71, label %86, label %72
72: ; preds = %68
switch i32 %69, label %73 [
i32 95, label %86
i32 46, label %86
i32 45, label %86
i32 126, label %86
i32 42, label %86
i32 41, label %86
i32 40, label %86
i32 39, label %86
i32 33, label %86
]
73: ; preds = %72
%74 = icmp eq i32 %69, 47
%75 = and i32 %69, 2147483643
%76 = icmp eq i32 %75, 59
%77 = and i32 %69, 2147483639
%78 = insertelement <8 x i32> poison, i32 %69, i64 0
%79 = insertelement <8 x i32> %78, i32 %77, i64 1
%80 = shufflevector <8 x i32> %79, <8 x i32> poison, <8 x i32> <i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0, i32 0>
%81 = icmp eq <8 x i32> %80, <i32 93, i32 91, i32 36, i32 43, i32 61, i32 38, i32 64, i32 58>
%82 = bitcast <8 x i1> %81 to i8
%83 = icmp ne i8 %82, 0
%84 = or i1 %83, %74
%85 = or i1 %84, %76
br label %86
86: ; preds = %73, %72, %72, %72, %72, %72, %72, %72, %72, %72, %68, %61
%87 = phi i32 [ %62, %61 ], [ %69, %72 ], [ %69, %68 ], [ %69, %72 ], [ %69, %72 ], [ %69, %73 ], [ %69, %72 ], [ %69, %72 ], [ %69, %72 ], [ %69, %72 ], [ %69, %72 ], [ %69, %72 ]
%88 = phi i1 [ true, %61 ], [ true, %72 ], [ true, %68 ], [ true, %72 ], [ true, %72 ], [ %85, %73 ], [ true, %72 ], [ true, %72 ], [ true, %72 ], [ true, %72 ], [ true, %72 ], [ true, %72 ]
%89 = zext i1 %88 to i32
%90 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i32 %89)
%91 = and i32 %62, 15
%92 = icmp eq i32 %91, 15
%93 = icmp ult i32 %87, 255
%94 = and i1 %93, %92
br i1 %94, label %95, label %97
95: ; preds = %86
%96 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0))
br label %97
97: ; preds = %86, %95
%98 = add nuw nsw i32 %87, 1
br i1 %93, label %61, label %99
99: ; preds = %97
%100 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @str.9, i64 0, i64 0))
ret i32 0
}