#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 */
char *malloc(unsigned int);
int strlen(char *);
char *obfuscate(char *line) {
  unsigned int i;
  unsigned int size = strlen(line) + 1;
  char *obf = malloc(size * sizeof(char));
  unsigned int ind = 0;
  for (i = 0; i < size; i++) {
    if (i != size && line[i] == ':' && line[i + 1] == '=') {
      obf[ind] = ':';
      ind++;
      i++;
    } else if (i != size && line[i] == '!' && line[i + 1] == '=') {
      obf[ind] = '!';
      ind++;
      i++;
    } else if (i != size && line[i] == '>' && line[i + 1] == '=') {
      obf[ind] = ']';
      ind++;
      i++;
    } else if (i != size && line[i] == '<' && line[i + 1] == '=') {
      obf[ind] = '[';
      ind++;
      i++;
    } else if (i != size && line[i] == '>' && line[i + 1] == '>') {
      obf[ind] = '}';
      ind++;
      i++;
    } else if (i != size && line[i] == '<' && line[i + 1] == '<') {
      obf[ind] = '{';
      ind++;
      i++;
    } else if (line[i] != ' ' && line[i] != '	' && line[i] != '\n') {
      obf[ind] = line[i];
      ind++;
    }
  }
  return obf;
}


x86 assembly (clang, -O0):
<obfuscate>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rdi
call   1030 <strlen@plt>
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
mov    -0x10(%rbp),%eax
shl    $0x0,%rax
mov    %eax,%edi
call   1040 <malloc@plt>
mov    %rax,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0xc(%rbp)
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
jae    1413 <obfuscate+0x2f3>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
je     11c2 <obfuscate+0xa2>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3a,%eax
jne    11c2 <obfuscate+0xa2>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3d,%eax
jne    11c2 <obfuscate+0xa2>
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
movb   $0x3a,(%rax,%rcx,1)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1400 <obfuscate+0x2e0>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
je     121d <obfuscate+0xfd>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x21,%eax
jne    121d <obfuscate+0xfd>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3d,%eax
jne    121d <obfuscate+0xfd>
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
movb   $0x21,(%rax,%rcx,1)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    13fb <obfuscate+0x2db>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
je     1278 <obfuscate+0x158>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3e,%eax
jne    1278 <obfuscate+0x158>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3d,%eax
jne    1278 <obfuscate+0x158>
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
movb   $0x5d,(%rax,%rcx,1)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    13f6 <obfuscate+0x2d6>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
je     12d3 <obfuscate+0x1b3>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3c,%eax
jne    12d3 <obfuscate+0x1b3>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3d,%eax
jne    12d3 <obfuscate+0x1b3>
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
movb   $0x5b,(%rax,%rcx,1)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    13f1 <obfuscate+0x2d1>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
je     132e <obfuscate+0x20e>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3e,%eax
jne    132e <obfuscate+0x20e>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3e,%eax
jne    132e <obfuscate+0x20e>
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
movb   $0x7d,(%rax,%rcx,1)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    13ec <obfuscate+0x2cc>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
je     1389 <obfuscate+0x269>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3c,%eax
jne    1389 <obfuscate+0x269>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3c,%eax
jne    1389 <obfuscate+0x269>
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
movb   $0x7b,(%rax,%rcx,1)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    13e7 <obfuscate+0x2c7>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
je     13e2 <obfuscate+0x2c2>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x9,%eax
je     13e2 <obfuscate+0x2c2>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     13e2 <obfuscate+0x2c2>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
mov    (%rax,%rcx,1),%dl
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
mov    %dl,(%rax,%rcx,1)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    13e7 <obfuscate+0x2c7>
jmp    13ec <obfuscate+0x2cc>
jmp    13f1 <obfuscate+0x2d1>
jmp    13f6 <obfuscate+0x2d6>
jmp    13fb <obfuscate+0x2db>
jmp    1400 <obfuscate+0x2e0>
jmp    1405 <obfuscate+0x2e5>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    115b <obfuscate+0x3b>
mov    -0x18(%rbp),%rax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<obfuscate>:
push   %r15
push   %r14
push   %rbx
mov    %rdi,%r15
call   1030 <strlen@plt>
mov    %eax,%r14d
lea    0x1(%r14),%edi
call   1040 <malloc@plt>
inc    %r14d
jne    1144 <obfuscate+0x24>
pop    %rbx
pop    %r14
pop    %r15
ret
xor    %ecx,%ecx
lea    0xeb3(%rip),%r8
xor    %edi,%edi
jmp    1176 <obfuscate+0x56>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %edx,%ebx
mov    %edi,%esi
mov    %ecx,%edx
mov    %bl,(%rax,%rdx,1)
add    $0x1,%ecx
mov    %esi,%edi
add    $0x1,%edi
cmp    %r14d,%edi
jae    113e <obfuscate+0x1e>
mov    %edi,%esi
movzbl (%r15,%rsi,1),%edx
lea    -0x9(%rdx),%ebx
cmp    $0x35,%bl
ja     1160 <obfuscate+0x40>
movzbl %bl,%ebx
movslq (%r8,%rbx,4),%rbx
add    %r8,%rbx
jmp    *%rbx
cmpb   $0x3d,0x1(%r15,%rsi,1)
jne    1160 <obfuscate+0x40>
add    $0x1,%rsi
mov    $0x21,%bl
jmp    1164 <obfuscate+0x44>
movzbl 0x1(%r15,%rsi,1),%r9d
add    $0x1,%rsi
cmp    $0x3c,%r9b
je     11e3 <obfuscate+0xc3>
mov    $0x5b,%bl
cmp    $0x3d,%r9b
je     1164 <obfuscate+0x44>
jmp    1160 <obfuscate+0x40>
cmpb   $0x3d,0x1(%r15,%rsi,1)
jne    1160 <obfuscate+0x40>
add    $0x1,%rsi
mov    $0x3a,%bl
jmp    1164 <obfuscate+0x44>
movzbl 0x1(%r15,%rsi,1),%ebx
add    $0x1,%rsi
cmp    $0x3d,%bl
je     11ea <obfuscate+0xca>
cmp    $0x3e,%bl
jne    1160 <obfuscate+0x40>
mov    $0x7d,%bl
jmp    1164 <obfuscate+0x44>
mov    $0x7b,%bl
jmp    1164 <obfuscate+0x44>
mov    $0x5d,%bl
jmp    1164 <obfuscate+0x44>

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

LLVM IR (-O2):
define noalias i8* @obfuscate(i8* %0) {
%2 = tail call i32 @strlen(i8* %0)
%3 = add nsw i32 %2, 1
%4 = tail call i8* @malloc(i32 %3)
%5 = icmp eq i32 %3, 0
br i1 %5, label %48, label %6
6: ; preds = %1, %43
%7 = phi i32 [ %45, %43 ], [ 0, %1 ]
%8 = phi i32 [ %46, %43 ], [ 0, %1 ]
%9 = zext i32 %8 to i64
%10 = getelementptr inbounds i8, i8* %0, i64 %9
%11 = load i8, i8* %10
switch i8 %11, label %36 [
i8 58, label %12
i8 33, label %18
i8 62, label %24
i8 60, label %29
i8 32, label %43
i8 9, label %43
i8 10, label %43
]
12: ; preds = %6
%13 = add nuw i32 %8, 1
%14 = zext i32 %13 to i64
%15 = getelementptr inbounds i8, i8* %0, i64 %14
%16 = load i8, i8* %15
%17 = icmp eq i8 %16, 61
br i1 %17, label %37, label %36
18: ; preds = %6
%19 = add nuw i32 %8, 1
%20 = zext i32 %19 to i64
%21 = getelementptr inbounds i8, i8* %0, i64 %20
%22 = load i8, i8* %21
%23 = icmp eq i8 %22, 61
br i1 %23, label %37, label %36
24: ; preds = %6
%25 = add nuw i32 %8, 1
%26 = zext i32 %25 to i64
%27 = getelementptr inbounds i8, i8* %0, i64 %26
%28 = load i8, i8* %27
switch i8 %28, label %36 [
i8 61, label %37
i8 62, label %34
]
29: ; preds = %6
%30 = add nuw i32 %8, 1
%31 = zext i32 %30 to i64
%32 = getelementptr inbounds i8, i8* %0, i64 %31
%33 = load i8, i8* %32
switch i8 %33, label %36 [
i8 61, label %37
i8 60, label %35
]
34: ; preds = %24
br label %37
35: ; preds = %29
br label %37
36: ; preds = %29, %24, %6, %12, %18
br label %37
37: ; preds = %29, %24, %18, %12, %35, %36, %34
%38 = phi i8 [ 125, %34 ], [ %11, %36 ], [ 123, %35 ], [ 58, %12 ], [ 33, %18 ], [ 93, %24 ], [ 91, %29 ]
%39 = phi i32 [ %25, %34 ], [ %8, %36 ], [ %30, %35 ], [ %13, %12 ], [ %19, %18 ], [ %25, %24 ], [ %30, %29 ]
%40 = zext i32 %7 to i64
%41 = getelementptr inbounds i8, i8* %4, i64 %40
store i8 %38, i8* %41
%42 = add i32 %7, 1
br label %43
43: ; preds = %37, %6, %6, %6
%44 = phi i32 [ %8, %6 ], [ %8, %6 ], [ %8, %6 ], [ %39, %37 ]
%45 = phi i32 [ %7, %6 ], [ %7, %6 ], [ %7, %6 ], [ %42, %37 ]
%46 = add i32 %44, 1
%47 = icmp ult i32 %46, %3
br i1 %47, label %6, label %48
48: ; preds = %43, %1
ret i8* %4
}