#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 find_tag_var_end(char const *);
int find_tag_var_start(char const *, char const *);
int psftag_raw_getvar(const char *tag, const char *variable, char *value_out,
                      int value_out_size) {
  char *v = value_out;
  char *vmax = v + value_out_size;
  char *v_linebegin;
  int i, i_end;
  if (value_out_size < 1)
    return -1;
  *v = 0;
  i = find_tag_var_start(tag, variable);
  if (i < 0)
    return -1;
  i_end = i + find_tag_var_end(tag + i);
  while (i < i_end) {
    while ((tag[i] != '=') && (i < i_end)) {
      i++;
    }
    if (i >= i_end)
      break;
    if (v > value_out) {
      if (v < vmax) {
        *v++ = 0x0A;
      }
    }
    i++;
    if (i >= i_end)
      break;
    for (; i < i_end; i++) {
      unsigned u = ((unsigned)(tag[i])) & 0xFF;
      if (u == 0x0A)
        break;
      if (u <= 0x20)
        continue;
      break;
    }
    if (i >= i_end)
      break;
    v_linebegin = v;
    while (i < i_end) {
      unsigned u = ((unsigned)(tag[i++])) & 0xFF;
      if (u == 0x0A)
        break;
      if (v < vmax) {
        *v++ = u;
      }
    }
    while (v > v_linebegin && (((unsigned)(v[-1])) & 0xFF) <= 0x20) {
      v--;
    }
  }
  if (v >= vmax) {
    v = vmax - 1;
  }
  *v = 0;
  return 0;
}


x86 assembly (clang, -O0):
<psftag_raw_getvar>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
movslq -0x24(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
cmpl   $0x1,-0x24(%rbp)
jge    1164 <psftag_raw_getvar+0x44>
movl   $0xffffffff,-0x4(%rbp)
jmp    13b1 <psftag_raw_getvar+0x291>
mov    -0x30(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1030 <find_tag_var_start@plt>
mov    %eax,-0x44(%rbp)
cmpl   $0x0,-0x44(%rbp)
jge    1191 <psftag_raw_getvar+0x71>
movl   $0xffffffff,-0x4(%rbp)
jmp    13b1 <psftag_raw_getvar+0x291>
mov    -0x44(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x10(%rbp),%rdi
movslq -0x44(%rbp),%rax
add    %rax,%rdi
call   1040 <find_tag_var_end@plt>
mov    %eax,%ecx
mov    -0x54(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x48(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x48(%rbp),%eax
jge    1389 <psftag_raw_getvar+0x269>
jmp    11c2 <psftag_raw_getvar+0xa2>
mov    -0x10(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x3d,%ecx
mov    %al,-0x55(%rbp)
je     11e8 <psftag_raw_getvar+0xc8>
mov    -0x44(%rbp),%eax
cmp    -0x48(%rbp),%eax
setl   %al
mov    %al,-0x55(%rbp)
mov    -0x55(%rbp),%al
test   $0x1,%al
jne    11f8 <psftag_raw_getvar+0xd8>
jmp    1206 <psftag_raw_getvar+0xe6>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    11c2 <psftag_raw_getvar+0xa2>
mov    -0x44(%rbp),%eax
cmp    -0x48(%rbp),%eax
jl     1217 <psftag_raw_getvar+0xf7>
jmp    1389 <psftag_raw_getvar+0x269>
mov    -0x30(%rbp),%rax
cmp    -0x20(%rbp),%rax
jbe    124a <psftag_raw_getvar+0x12a>
mov    -0x30(%rbp),%rax
cmp    -0x38(%rbp),%rax
jae    1245 <psftag_raw_getvar+0x125>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0xa,(%rax)
jmp    124a <psftag_raw_getvar+0x12a>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x48(%rbp),%eax
jl     1264 <psftag_raw_getvar+0x144>
jmp    1389 <psftag_raw_getvar+0x269>
jmp    1269 <psftag_raw_getvar+0x149>
mov    -0x44(%rbp),%eax
cmp    -0x48(%rbp),%eax
jge    12ba <psftag_raw_getvar+0x19a>
mov    -0x10(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
and    $0xff,%eax
mov    %eax,-0x4c(%rbp)
cmpl   $0xa,-0x4c(%rbp)
jne    1298 <psftag_raw_getvar+0x178>
jmp    12ba <psftag_raw_getvar+0x19a>
cmpl   $0x20,-0x4c(%rbp)
ja     12a7 <psftag_raw_getvar+0x187>
jmp    12ac <psftag_raw_getvar+0x18c>
jmp    12ba <psftag_raw_getvar+0x19a>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1269 <psftag_raw_getvar+0x149>
mov    -0x44(%rbp),%eax
cmp    -0x48(%rbp),%eax
jl     12cb <psftag_raw_getvar+0x1ab>
jmp    1389 <psftag_raw_getvar+0x269>
mov    -0x30(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x48(%rbp),%eax
jge    1335 <psftag_raw_getvar+0x215>
mov    -0x10(%rbp),%rax
mov    -0x44(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x44(%rbp)
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
and    $0xff,%eax
mov    %eax,-0x50(%rbp)
cmpl   $0xa,-0x50(%rbp)
jne    130c <psftag_raw_getvar+0x1ec>
jmp    1335 <psftag_raw_getvar+0x215>
mov    -0x30(%rbp),%rax
cmp    -0x38(%rbp),%rax
jae    1330 <psftag_raw_getvar+0x210>
mov    -0x50(%rbp),%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
jmp    12d3 <psftag_raw_getvar+0x1b3>
jmp    133a <psftag_raw_getvar+0x21a>
mov    -0x30(%rbp),%rcx
xor    %eax,%eax
cmp    -0x40(%rbp),%rcx
mov    %al,-0x56(%rbp)
jbe    1363 <psftag_raw_getvar+0x243>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%eax
and    $0xff,%eax
cmp    $0x20,%eax
setbe  %al
mov    %al,-0x56(%rbp)
mov    -0x56(%rbp),%al
test   $0x1,%al
jne    1373 <psftag_raw_getvar+0x253>
jmp    1384 <psftag_raw_getvar+0x264>
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
jmp    133a <psftag_raw_getvar+0x21a>
jmp    11b1 <psftag_raw_getvar+0x91>
mov    -0x30(%rbp),%rax
cmp    -0x38(%rbp),%rax
jb     13a3 <psftag_raw_getvar+0x283>
mov    -0x38(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
movb   $0x0,(%rax)
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<psftag_raw_getvar>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    $0xffffffff,%r12d
test   %ecx,%ecx
jle    1287 <psftag_raw_getvar+0x167>
mov    %ecx,%ebp
mov    %rdx,%r14
mov    %rdi,%r15
movb   $0x0,(%rdx)
call   1030 <find_tag_var_start@plt>
test   %eax,%eax
js     1287 <psftag_raw_getvar+0x167>
mov    %eax,%ebx
movslq %ebp,%r12
add    %r14,%r12
mov    %eax,%edi
add    %r15,%rdi
call   1040 <find_tag_var_end@plt>
test   %eax,%eax
jle    1272 <psftag_raw_getvar+0x152>
add    %ebx,%eax
movslq %eax,%r10
movabs $0x100000000,%r8
mov    %r14,%r11
movslq %ebx,%rbp
lea    0x1(%rbp),%ecx
lea    0x2(%rbp),%edi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %rbp,%rdx
mov    %ecx,%ebx
mov    %edi,%esi
add    $0x1,%rbp
cmpb   $0x3d,(%r15,%rdx,1)
je     11ad <psftag_raw_getvar+0x8d>
lea    0x1(%rbx),%ecx
lea    0x1(%rsi),%edi
cmp    %r10,%rdx
jl     1190 <psftag_raw_getvar+0x70>
cmp    %r10,%rdx
jge    1275 <psftag_raw_getvar+0x155>
cmp    %r14,%r11
jbe    11c8 <psftag_raw_getvar+0xa8>
cmp    %r12,%r11
jae    11c8 <psftag_raw_getvar+0xa8>
movb   $0xa,(%r11)
add    $0x1,%r11
mov    %r11,%r9
cmp    %eax,%ebp
jge    126d <psftag_raw_getvar+0x14d>
movslq %ebx,%rbp
lea    (%r15,%rbp,1),%rdx
shl    $0x20,%rbp
xchg   %ax,%ax
movzbl (%rdx),%ecx
cmp    $0xa,%cl
je     1200 <psftag_raw_getvar+0xe0>
cmp    $0x21,%cl
jae    1200 <psftag_raw_getvar+0xe0>
add    %r8,%rbp
add    $0x1,%ebx
add    $0x1,%rdx
add    $0x1,%esi
cmp    %ebx,%eax
jne    11e0 <psftag_raw_getvar+0xc0>
jmp    126d <psftag_raw_getvar+0x14d>
mov    %r9,%rdx
cmp    %ebx,%eax
jle    1250 <psftag_raw_getvar+0x130>
sar    $0x20,%rbp
xor    %edi,%edi
mov    %r9,%rdx
jmp    1228 <psftag_raw_getvar+0x108>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0xffffffff,%edi
cmp    %rbp,%r10
je     1249 <psftag_raw_getvar+0x129>
movzbl (%r15,%rbp,1),%ecx
cmp    $0xa,%cl
je     1243 <psftag_raw_getvar+0x123>
add    $0x1,%rbp
cmp    %r12,%rdx
jae    1220 <psftag_raw_getvar+0x100>
mov    %cl,(%rdx)
add    $0x1,%rdx
jmp    1220 <psftag_raw_getvar+0x100>
sub    %edi,%esi
mov    %esi,%ebx
jmp    1250 <psftag_raw_getvar+0x130>
mov    %eax,%ebx
nopl   0x0(%rax,%rax,1)
mov    %rdx,%r11
cmp    %r9,%rdx
jbe    1263 <psftag_raw_getvar+0x143>
lea    -0x1(%r11),%rdx
cmpb   $0x21,-0x1(%r11)
jb     1250 <psftag_raw_getvar+0x130>
cmp    %eax,%ebx
jl     117a <psftag_raw_getvar+0x5a>
jmp    1275 <psftag_raw_getvar+0x155>
mov    %r9,%r11
jmp    1275 <psftag_raw_getvar+0x155>
mov    %r14,%r11
lea    -0x1(%r12),%rax
cmp    %r12,%r11
cmovb  %r11,%rax
movb   $0x0,(%rax)
xor    %r12d,%r12d
mov    %r12d,%eax
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @psftag_raw_getvar(i8* %0, i8* %1, i8* %2, i32 %3) {
%5 = alloca i32
%6 = alloca i8*
%7 = alloca i8*
%8 = alloca i8*
%9 = alloca i32
%10 = alloca i8*
%11 = alloca i8*
%12 = alloca i8*
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
store i8* %0, i8** %6
store i8* %1, i8** %7
store i8* %2, i8** %8
store i32 %3, i32* %9
%17 = load i8*, i8** %8
store i8* %17, i8** %10
%18 = load i8*, i8** %10
%19 = load i32, i32* %9
%20 = sext i32 %19 to i64
%21 = getelementptr inbounds i8, i8* %18, i64 %20
store i8* %21, i8** %11
%22 = load i32, i32* %9
%23 = icmp slt i32 %22, 1
br i1 %23, label %24, label %25
24: ; preds = %4
store i32 -1, i32* %5
br label %171
25: ; preds = %4
%26 = load i8*, i8** %10
store i8 0, i8* %26
%27 = load i8*, i8** %6
%28 = load i8*, i8** %7
%29 = call i32 @find_tag_var_start(i8* %27, i8* %28)
store i32 %29, i32* %13
%30 = load i32, i32* %13
%31 = icmp slt i32 %30, 0
br i1 %31, label %32, label %33
32: ; preds = %25
store i32 -1, i32* %5
br label %171
33: ; preds = %25
%34 = load i32, i32* %13
%35 = load i8*, i8** %6
%36 = load i32, i32* %13
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds i8, i8* %35, i64 %37
%39 = call i32 @find_tag_var_end(i8* %38)
%40 = add nsw i32 %34, %39
store i32 %40, i32* %14
br label %41
41: ; preds = %161, %33
%42 = load i32, i32* %13
%43 = load i32, i32* %14
%44 = icmp slt i32 %42, %43
br i1 %44, label %45, label %162
45: ; preds = %41
br label %46
46: ; preds = %60, %45
%47 = load i8*, i8** %6
%48 = load i32, i32* %13
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds i8, i8* %47, i64 %49
%51 = load i8, i8* %50
%52 = sext i8 %51 to i32
%53 = icmp ne i32 %52, 61
br i1 %53, label %54, label %58
54: ; preds = %46
%55 = load i32, i32* %13
%56 = load i32, i32* %14
%57 = icmp slt i32 %55, %56
br label %58
58: ; preds = %54, %46
%59 = phi i1 [ false, %46 ], [ %57, %54 ]
br i1 %59, label %60, label %63
60: ; preds = %58
%61 = load i32, i32* %13
%62 = add nsw i32 %61, 1
store i32 %62, i32* %13
br label %46
63: ; preds = %58
%64 = load i32, i32* %13
%65 = load i32, i32* %14
%66 = icmp sge i32 %64, %65
br i1 %66, label %67, label %68
67: ; preds = %63
br label %162
68: ; preds = %63
%69 = load i8*, i8** %10
%70 = load i8*, i8** %8
%71 = icmp ugt i8* %69, %70
br i1 %71, label %72, label %80
72: ; preds = %68
%73 = load i8*, i8** %10
%74 = load i8*, i8** %11
%75 = icmp ult i8* %73, %74
br i1 %75, label %76, label %79
76: ; preds = %72
%77 = load i8*, i8** %10
%78 = getelementptr inbounds i8, i8* %77, i32 1
store i8* %78, i8** %10
store i8 10, i8* %77
br label %79
79: ; preds = %76, %72
br label %80
80: ; preds = %79, %68
%81 = load i32, i32* %13
%82 = add nsw i32 %81, 1
store i32 %82, i32* %13
%83 = load i32, i32* %13
%84 = load i32, i32* %14
%85 = icmp sge i32 %83, %84
br i1 %85, label %86, label %87
86: ; preds = %80
br label %162
87: ; preds = %80
br label %88
88: ; preds = %108, %87
%89 = load i32, i32* %13
%90 = load i32, i32* %14
%91 = icmp slt i32 %89, %90
br i1 %91, label %92, label %111
92: ; preds = %88
%93 = load i8*, i8** %6
%94 = load i32, i32* %13
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds i8, i8* %93, i64 %95
%97 = load i8, i8* %96
%98 = sext i8 %97 to i32
%99 = and i32 %98, 255
store i32 %99, i32* %15
%100 = load i32, i32* %15
%101 = icmp eq i32 %100, 10
br i1 %101, label %102, label %103
102: ; preds = %92
br label %111
103: ; preds = %92
%104 = load i32, i32* %15
%105 = icmp ule i32 %104, 32
br i1 %105, label %106, label %107
106: ; preds = %103
br label %108
107: ; preds = %103
br label %111
108: ; preds = %106
%109 = load i32, i32* %13
%110 = add nsw i32 %109, 1
store i32 %110, i32* %13
br label %88
111: ; preds = %107, %102, %88
%112 = load i32, i32* %13
%113 = load i32, i32* %14
%114 = icmp sge i32 %112, %113
br i1 %114, label %115, label %116
115: ; preds = %111
br label %162
116: ; preds = %111
%117 = load i8*, i8** %10
store i8* %117, i8** %12
br label %118
118: ; preds = %143, %116
%119 = load i32, i32* %13
%120 = load i32, i32* %14
%121 = icmp slt i32 %119, %120
br i1 %121, label %122, label %144
122: ; preds = %118
%123 = load i8*, i8** %6
%124 = load i32, i32* %13
%125 = add nsw i32 %124, 1
store i32 %125, i32* %13
%126 = sext i32 %124 to i64
%127 = getelementptr inbounds i8, i8* %123, i64 %126
%128 = load i8, i8* %127
%129 = sext i8 %128 to i32
%130 = and i32 %129, 255
store i32 %130, i32* %16
%131 = load i32, i32* %16
%132 = icmp eq i32 %131, 10
br i1 %132, label %133, label %134
133: ; preds = %122
br label %144
134: ; preds = %122
%135 = load i8*, i8** %10
%136 = load i8*, i8** %11
%137 = icmp ult i8* %135, %136
br i1 %137, label %138, label %143
138: ; preds = %134
%139 = load i32, i32* %16
%140 = trunc i32 %139 to i8
%141 = load i8*, i8** %10
%142 = getelementptr inbounds i8, i8* %141, i32 1
store i8* %142, i8** %10
store i8 %140, i8* %141
br label %143
143: ; preds = %138, %134
br label %118
144: ; preds = %133, %118
br label %145
145: ; preds = %158, %144
%146 = load i8*, i8** %10
%147 = load i8*, i8** %12
%148 = icmp ugt i8* %146, %147
br i1 %148, label %149, label %156
149: ; preds = %145
%150 = load i8*, i8** %10
%151 = getelementptr inbounds i8, i8* %150, i64 -1
%152 = load i8, i8* %151
%153 = sext i8 %152 to i32
%154 = and i32 %153, 255
%155 = icmp ule i32 %154, 32
br label %156
156: ; preds = %149, %145
%157 = phi i1 [ false, %145 ], [ %155, %149 ]
br i1 %157, label %158, label %161
158: ; preds = %156
%159 = load i8*, i8** %10
%160 = getelementptr inbounds i8, i8* %159, i32 -1
store i8* %160, i8** %10
br label %145
161: ; preds = %156
br label %41
162: ; preds = %115, %86, %67, %41
%163 = load i8*, i8** %10
%164 = load i8*, i8** %11
%165 = icmp uge i8* %163, %164
br i1 %165, label %166, label %169
166: ; preds = %162
%167 = load i8*, i8** %11
%168 = getelementptr inbounds i8, i8* %167, i64 -1
store i8* %168, i8** %10
br label %169
169: ; preds = %166, %162
%170 = load i8*, i8** %10
store i8 0, i8* %170
store i32 0, i32* %5
br label %171
171: ; preds = %169, %32, %24
%172 = load i32, i32* %5
ret i32 %172
}

LLVM IR (-O2):
define i32 @psftag_raw_getvar(i8* %0, i8* %1, i8* %2, i32 %3) {
%5 = sext i32 %3 to i64
%6 = getelementptr inbounds i8, i8* %2, i64 %5
%7 = icmp slt i32 %3, 1
br i1 %7, label %95, label %8
8: ; preds = %4
store i8 0, i8* %2
%9 = tail call i32 @find_tag_var_start(i8* %0, i8* %1)
%10 = icmp slt i32 %9, 0
br i1 %10, label %95, label %11
11: ; preds = %8
%12 = zext i32 %9 to i64
%13 = getelementptr inbounds i8, i8* %0, i64 %12
%14 = tail call i32 @find_tag_var_end(i8* %13)
%15 = add i32 %14, %9
%16 = icmp sgt i32 %14, 0
br i1 %16, label %17, label %90
17: ; preds = %11
%18 = sext i32 %15 to i64
br label %19
19: ; preds = %17, %88
%20 = phi i8* [ %82, %88 ], [ %2, %17 ]
%21 = phi i32 [ %80, %88 ], [ %9, %17 ]
%22 = sext i32 %21 to i64
br label %23
23: ; preds = %23, %19
%24 = phi i64 [ %30, %23 ], [ %22, %19 ]
%25 = getelementptr inbounds i8, i8* %0, i64 %24
%26 = load i8, i8* %25
%27 = icmp ne i8 %26, 61
%28 = icmp slt i64 %24, %18
%29 = select i1 %27, i1 %28, i1 false
%30 = add nsw i64 %24, 1
br i1 %29, label %23, label %31
31: ; preds = %23
%32 = trunc i64 %24 to i32
br i1 %28, label %33, label %90
33: ; preds = %31
%34 = icmp ugt i8* %20, %2
%35 = icmp ult i8* %20, %6
%36 = select i1 %34, i1 %35, i1 false
br i1 %36, label %37, label %39
37: ; preds = %33
%38 = getelementptr inbounds i8, i8* %20, i64 1
store i8 10, i8* %20
br label %39
39: ; preds = %37, %33
%40 = phi i8* [ %38, %37 ], [ %20, %33 ]
%41 = add i32 %32, 1
%42 = icmp slt i32 %41, %15
br i1 %42, label %43, label %90
43: ; preds = %39
%44 = sext i32 %41 to i64
br label %45
45: ; preds = %43, %58
%46 = phi i64 [ %44, %43 ], [ %59, %58 ]
%47 = getelementptr inbounds i8, i8* %0, i64 %46
%48 = load i8, i8* %47
%49 = icmp eq i8 %48, 10
%50 = icmp ugt i8 %48, 32
%51 = or i1 %49, %50
br i1 %51, label %52, label %58
52: ; preds = %45
%53 = trunc i64 %46 to i32
%54 = icmp sgt i32 %15, %53
br i1 %54, label %55, label %78
55: ; preds = %52
%56 = shl i64 %46, 32
%57 = ashr exact i64 %56, 32
br label %62
58: ; preds = %45
%59 = add nsw i64 %46, 1
%60 = trunc i64 %59 to i32
%61 = icmp eq i32 %15, %60
br i1 %61, label %90, label %45
62: ; preds = %55, %73
%63 = phi i64 [ %57, %55 ], [ %65, %73 ]
%64 = phi i8* [ %40, %55 ], [ %74, %73 ]
%65 = add nsw i64 %63, 1
%66 = getelementptr inbounds i8, i8* %0, i64 %63
%67 = load i8, i8* %66
%68 = icmp eq i8 %67, 10
br i1 %68, label %76, label %69
69: ; preds = %62
%70 = icmp ult i8* %64, %6
br i1 %70, label %71, label %73
71: ; preds = %69
%72 = getelementptr inbounds i8, i8* %64, i64 1
store i8 %67, i8* %64
br label %73
73: ; preds = %69, %71
%74 = phi i8* [ %72, %71 ], [ %64, %69 ]
%75 = icmp eq i64 %65, %18
br i1 %75, label %78, label %62
76: ; preds = %62
%77 = trunc i64 %65 to i32
br label %78
78: ; preds = %73, %76, %52
%79 = phi i8* [ %40, %52 ], [ %64, %76 ], [ %74, %73 ]
%80 = phi i32 [ %53, %52 ], [ %77, %76 ], [ %15, %73 ]
br label %81
81: ; preds = %84, %78
%82 = phi i8* [ %79, %78 ], [ %85, %84 ]
%83 = icmp ugt i8* %82, %40
br i1 %83, label %84, label %88
84: ; preds = %81
%85 = getelementptr inbounds i8, i8* %82, i64 -1
%86 = load i8, i8* %85
%87 = icmp ult i8 %86, 33
br i1 %87, label %81, label %88
88: ; preds = %81, %84
%89 = icmp slt i32 %80, %15
br i1 %89, label %19, label %90
90: ; preds = %88, %31, %39, %58, %11
%91 = phi i8* [ %2, %11 ], [ %40, %58 ], [ %82, %88 ], [ %20, %31 ], [ %40, %39 ]
%92 = icmp ult i8* %91, %6
%93 = getelementptr inbounds i8, i8* %6, i64 -1
%94 = select i1 %92, i8* %91, i8* %93
store i8 0, i8* %94
br label %95
95: ; preds = %8, %4, %90
%96 = phi i32 [ 0, %90 ], [ -1, %4 ], [ -1, %8 ]
ret i32 %96
}