#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 *, unsigned char);
void printUTF8(long long u) {
  long long m;
  if (u < 0x80) {
    printf("%c", (unsigned char)u);
  } else if (u < 0x800) {
    m = ((u & 0x7c0) >> 6) | 0xc0;
    printf("%c", (unsigned char)m);
    m = (u & 0x3f) | 0x80;
    printf("%c", (unsigned char)m);
  } else if (u < 0x10000) {
    m = ((u & 0xf000) >> 12) | 0xe0;
    printf("%c", (unsigned char)m);
    m = ((u & 0xfc0) >> 6) | 0x80;
    printf("%c", (unsigned char)m);
    m = (u & 0x3f) | 0x80;
    printf("%c", (unsigned char)m);
  } else if (u < 0x200000) {
    m = ((u & 0x1c0000) >> 18) | 0xf0;
    printf("%c", (unsigned char)m);
    m = ((u & 0x3f000) >> 12) | 0x80;
    printf("%c", (unsigned char)m);
    m = ((u & 0xfc0) >> 6) | 0x80;
    printf("%c", (unsigned char)m);
    m = (u & 0x3f) | 0x80;
    printf("%c", (unsigned char)m);
  } else if (u < 0x4000000) {
    m = ((u & 0x3000000) >> 24) | 0xf8;
    printf("%c", (unsigned char)m);
    m = ((u & 0xfc0000) >> 18) | 0x80;
    printf("%c", (unsigned char)m);
    m = ((u & 0x3f000) >> 12) | 0x80;
    printf("%c", (unsigned char)m);
    m = ((u & 0xfc00) >> 6) | 0x80;
    printf("%c", (unsigned char)m);
    m = (u & 0x3f) | 0x80;
    printf("%c", (unsigned char)m);
  } else {
    m = ((u & 0x40000000) >> 30) | 0xfc;
    printf("%c", (unsigned char)m);
    m = ((u & 0x3f000000) >> 24) | 0x80;
    printf("%c", (unsigned char)m);
    m = ((u & 0xfc0000) >> 18) | 0x80;
    printf("%c", (unsigned char)m);
    m = ((u & 0x3f000) >> 12) | 0x80;
    printf("%c", (unsigned char)m);
    m = ((u & 0xfc0) >> 6) | 0x80;
    printf("%c", (unsigned char)m);
    m = (u & 0x3f) | 0x80;
    printf("%c", (unsigned char)m);
  }
}


x86 assembly (clang, -O0):
<printUTF8>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
cmpq   $0x80,-0x8(%rbp)
jge    1142 <printUTF8+0x32>
mov    -0x8(%rbp),%rax
lea    0xecb(%rip),%rdi
movzbl %al,%esi
call   1030 <printf@plt>
jmp    14e0 <printUTF8+0x3d0>
cmpq   $0x800,-0x8(%rbp)
jge    11a5 <printUTF8+0x95>
mov    -0x8(%rbp),%rax
and    $0x7c0,%rax
sar    $0x6,%rax
or     $0xc0,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
lea    0xe8d(%rip),%rdi
movzbl %al,%esi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x3f,%rax
or     $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
lea    0xe68(%rip),%rdi
movzbl %al,%esi
call   1030 <printf@plt>
jmp    14db <printUTF8+0x3cb>
cmpq   $0x10000,-0x8(%rbp)
jge    1233 <printUTF8+0x123>
mov    -0x8(%rbp),%rax
and    $0xf000,%rax
sar    $0xc,%rax
or     $0xe0,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
lea    0xe2a(%rip),%rdi
movzbl %al,%esi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0xfc0,%rax
sar    $0x6,%rax
or     $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
lea    0xdff(%rip),%rdi
movzbl %al,%esi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x3f,%rax
or     $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
lea    0xdda(%rip),%rdi
movzbl %al,%esi
call   1030 <printf@plt>
jmp    14d6 <printUTF8+0x3c6>
cmpq   $0x200000,-0x8(%rbp)
jge    12ec <printUTF8+0x1dc>
mov    -0x8(%rbp),%rax
and    $0x1c0000,%rax
sar    $0x12,%rax
or     $0xf0,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
lea    0xd9c(%rip),%rdi
movzbl %al,%esi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x3f000,%rax
sar    $0xc,%rax
or     $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
lea    0xd71(%rip),%rdi
movzbl %al,%esi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0xfc0,%rax
sar    $0x6,%rax
or     $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
lea    0xd46(%rip),%rdi
movzbl %al,%esi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x3f,%rax
or     $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
lea    0xd21(%rip),%rdi
movzbl %al,%esi
call   1030 <printf@plt>
jmp    14d1 <printUTF8+0x3c1>
cmpq   $0x4000000,-0x8(%rbp)
04
jge    13d0 <printUTF8+0x2c0>
mov    -0x8(%rbp),%rax
and    $0x3000000,%rax
sar    $0x18,%rax
or     $0xf8,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
lea    0xce3(%rip),%rdi
movzbl %al,%esi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0xfc0000,%rax
sar    $0x12,%rax
or     $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
lea    0xcb8(%rip),%rdi
movzbl %al,%esi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x3f000,%rax
sar    $0xc,%rax
or     $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
lea    0xc8d(%rip),%rdi
movzbl %al,%esi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0xfc00,%rax
sar    $0x6,%rax
or     $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
lea    0xc62(%rip),%rdi
movzbl %al,%esi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x3f,%rax
or     $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
lea    0xc3d(%rip),%rdi
movzbl %al,%esi
call   1030 <printf@plt>
jmp    14cc <printUTF8+0x3bc>
mov    -0x8(%rbp),%rax
and    $0x40000000,%rax
sar    $0x1e,%rax
or     $0xfc,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
lea    0xc0d(%rip),%rdi
movzbl %al,%esi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x3f000000,%rax
sar    $0x18,%rax
or     $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
lea    0xbe2(%rip),%rdi
movzbl %al,%esi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0xfc0000,%rax
sar    $0x12,%rax
or     $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
lea    0xbb7(%rip),%rdi
movzbl %al,%esi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x3f000,%rax
sar    $0xc,%rax
or     $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
lea    0xb8c(%rip),%rdi
movzbl %al,%esi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0xfc0,%rax
sar    $0x6,%rax
or     $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
lea    0xb61(%rip),%rdi
movzbl %al,%esi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x3f,%rax
or     $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
lea    0xb3c(%rip),%rdi
movzbl %al,%esi
call   1030 <printf@plt>
jmp    14d1 <printUTF8+0x3c1>
jmp    14d6 <printUTF8+0x3c6>
jmp    14db <printUTF8+0x3cb>
jmp    14e0 <printUTF8+0x3d0>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<printUTF8>:
push   %r14
push   %rbx
push   %rax
mov    %rdi,%rbx
cmp    $0x7f,%rdi
jle    124e <printUTF8+0x13e>
mov    %rbx,%rax
cmp    $0x7ff,%rbx
ja     1142 <printUTF8+0x32>
shr    $0x6,%rax
or     $0xc0,%al
movzbl %al,%esi
lea    0xec3(%rip),%rdi
jmp    1243 <printUTF8+0x133>
cmp    $0xffff,%rbx
ja     1160 <printUTF8+0x50>
shr    $0xc,%rax
or     $0xe0,%al
movzbl %al,%esi
lea    0xea5(%rip),%r14
jmp    122a <printUTF8+0x11a>
cmp    $0x1fffff,%rbx
ja     117e <printUTF8+0x6e>
shr    $0x12,%rax
or     $0xf0,%al
movzbl %al,%esi
lea    0xe87(%rip),%r14
jmp    1214 <printUTF8+0x104>
cmp    $0x3ffffff,%rbx
ja     11d6 <printUTF8+0xc6>
shr    $0x18,%rax
or     $0xf8,%al
movzbl %al,%esi
lea    0xe69(%rip),%r14
mov    %r14,%rdi
call   1030 <printf@plt>
mov    %rbx,%rax
shr    $0x12,%rax
and    $0x3f,%al
or     $0x80,%al
movzbl %al,%esi
mov    %r14,%rdi
call   1030 <printf@plt>
mov    %rbx,%rax
shr    $0xc,%rax
and    $0x3f,%al
or     $0x80,%al
movzbl %al,%esi
mov    %r14,%rdi
call   1030 <printf@plt>
mov    %rbx,%rax
shr    $0x6,%rax
and    $0x70,%al
jmp    123b <printUTF8+0x12b>
shr    $0x1e,%rax
and    $0x1,%al
or     $0xfc,%al
movzbl %al,%esi
lea    0xe18(%rip),%r14
mov    %r14,%rdi
call   1030 <printf@plt>
mov    %rbx,%rax
shr    $0x18,%rax
and    $0x3f,%al
or     $0x80,%al
movzbl %al,%esi
mov    %r14,%rdi
call   1030 <printf@plt>
mov    %rbx,%rax
shr    $0x12,%rax
and    $0x3f,%al
or     $0x80,%al
movzbl %al,%esi
mov    %r14,%rdi
call   1030 <printf@plt>
mov    %rbx,%rax
shr    $0xc,%rax
and    $0x3f,%al
or     $0x80,%al
movzbl %al,%esi
mov    %r14,%rdi
call   1030 <printf@plt>
mov    %rbx,%rax
shr    $0x6,%rax
and    $0x3f,%al
or     $0x80,%al
movzbl %al,%esi
mov    %r14,%rdi
call   1030 <printf@plt>
and    $0x3f,%bl
or     $0x80,%bl
movzbl %bl,%esi
lea    0xda8(%rip),%rdi
add    $0x8,%rsp
pop    %rbx
pop    %r14
jmp    1030 <printf@plt>

LLVM IR (-O0):
@.str = [3 x i8] c"%c\00"
define void @printUTF8(i64 %0) {
%2 = alloca i64
%3 = alloca i64
store i64 %0, i64* %2
%4 = load i64, i64* %2
%5 = icmp slt i64 %4, 128
br i1 %5, label %6, label %10
6: ; preds = %1
%7 = load i64, i64* %2
%8 = trunc i64 %7 to i8
%9 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %8)
br label %166
10: ; preds = %1
%11 = load i64, i64* %2
%12 = icmp slt i64 %11, 2048
br i1 %12, label %13, label %27
13: ; preds = %10
%14 = load i64, i64* %2
%15 = and i64 %14, 1984
%16 = ashr i64 %15, 6
%17 = or i64 %16, 192
store i64 %17, i64* %3
%18 = load i64, i64* %3
%19 = trunc i64 %18 to i8
%20 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %19)
%21 = load i64, i64* %2
%22 = and i64 %21, 63
%23 = or i64 %22, 128
store i64 %23, i64* %3
%24 = load i64, i64* %3
%25 = trunc i64 %24 to i8
%26 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %25)
br label %165
27: ; preds = %10
%28 = load i64, i64* %2
%29 = icmp slt i64 %28, 65536
br i1 %29, label %30, label %51
30: ; preds = %27
%31 = load i64, i64* %2
%32 = and i64 %31, 61440
%33 = ashr i64 %32, 12
%34 = or i64 %33, 224
store i64 %34, i64* %3
%35 = load i64, i64* %3
%36 = trunc i64 %35 to i8
%37 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %36)
%38 = load i64, i64* %2
%39 = and i64 %38, 4032
%40 = ashr i64 %39, 6
%41 = or i64 %40, 128
store i64 %41, i64* %3
%42 = load i64, i64* %3
%43 = trunc i64 %42 to i8
%44 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %43)
%45 = load i64, i64* %2
%46 = and i64 %45, 63
%47 = or i64 %46, 128
store i64 %47, i64* %3
%48 = load i64, i64* %3
%49 = trunc i64 %48 to i8
%50 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %49)
br label %164
51: ; preds = %27
%52 = load i64, i64* %2
%53 = icmp slt i64 %52, 2097152
br i1 %53, label %54, label %82
54: ; preds = %51
%55 = load i64, i64* %2
%56 = and i64 %55, 1835008
%57 = ashr i64 %56, 18
%58 = or i64 %57, 240
store i64 %58, i64* %3
%59 = load i64, i64* %3
%60 = trunc i64 %59 to i8
%61 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %60)
%62 = load i64, i64* %2
%63 = and i64 %62, 258048
%64 = ashr i64 %63, 12
%65 = or i64 %64, 128
store i64 %65, i64* %3
%66 = load i64, i64* %3
%67 = trunc i64 %66 to i8
%68 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %67)
%69 = load i64, i64* %2
%70 = and i64 %69, 4032
%71 = ashr i64 %70, 6
%72 = or i64 %71, 128
store i64 %72, i64* %3
%73 = load i64, i64* %3
%74 = trunc i64 %73 to i8
%75 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %74)
%76 = load i64, i64* %2
%77 = and i64 %76, 63
%78 = or i64 %77, 128
store i64 %78, i64* %3
%79 = load i64, i64* %3
%80 = trunc i64 %79 to i8
%81 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %80)
br label %163
82: ; preds = %51
%83 = load i64, i64* %2
%84 = icmp slt i64 %83, 67108864
br i1 %84, label %85, label %120
85: ; preds = %82
%86 = load i64, i64* %2
%87 = and i64 %86, 50331648
%88 = ashr i64 %87, 24
%89 = or i64 %88, 248
store i64 %89, i64* %3
%90 = load i64, i64* %3
%91 = trunc i64 %90 to i8
%92 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %91)
%93 = load i64, i64* %2
%94 = and i64 %93, 16515072
%95 = ashr i64 %94, 18
%96 = or i64 %95, 128
store i64 %96, i64* %3
%97 = load i64, i64* %3
%98 = trunc i64 %97 to i8
%99 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %98)
%100 = load i64, i64* %2
%101 = and i64 %100, 258048
%102 = ashr i64 %101, 12
%103 = or i64 %102, 128
store i64 %103, i64* %3
%104 = load i64, i64* %3
%105 = trunc i64 %104 to i8
%106 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %105)
%107 = load i64, i64* %2
%108 = and i64 %107, 64512
%109 = ashr i64 %108, 6
%110 = or i64 %109, 128
store i64 %110, i64* %3
%111 = load i64, i64* %3
%112 = trunc i64 %111 to i8
%113 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %112)
%114 = load i64, i64* %2
%115 = and i64 %114, 63
%116 = or i64 %115, 128
store i64 %116, i64* %3
%117 = load i64, i64* %3
%118 = trunc i64 %117 to i8
%119 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %118)
br label %162
120: ; preds = %82
%121 = load i64, i64* %2
%122 = and i64 %121, 1073741824
%123 = ashr i64 %122, 30
%124 = or i64 %123, 252
store i64 %124, i64* %3
%125 = load i64, i64* %3
%126 = trunc i64 %125 to i8
%127 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %126)
%128 = load i64, i64* %2
%129 = and i64 %128, 1056964608
%130 = ashr i64 %129, 24
%131 = or i64 %130, 128
store i64 %131, i64* %3
%132 = load i64, i64* %3
%133 = trunc i64 %132 to i8
%134 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %133)
%135 = load i64, i64* %2
%136 = and i64 %135, 16515072
%137 = ashr i64 %136, 18
%138 = or i64 %137, 128
store i64 %138, i64* %3
%139 = load i64, i64* %3
%140 = trunc i64 %139 to i8
%141 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %140)
%142 = load i64, i64* %2
%143 = and i64 %142, 258048
%144 = ashr i64 %143, 12
%145 = or i64 %144, 128
store i64 %145, i64* %3
%146 = load i64, i64* %3
%147 = trunc i64 %146 to i8
%148 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %147)
%149 = load i64, i64* %2
%150 = and i64 %149, 4032
%151 = ashr i64 %150, 6
%152 = or i64 %151, 128
store i64 %152, i64* %3
%153 = load i64, i64* %3
%154 = trunc i64 %153 to i8
%155 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %154)
%156 = load i64, i64* %2
%157 = and i64 %156, 63
%158 = or i64 %157, 128
store i64 %158, i64* %3
%159 = load i64, i64* %3
%160 = trunc i64 %159 to i8
%161 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %160)
br label %162
162: ; preds = %120, %85
br label %163
163: ; preds = %162, %54
br label %164
164: ; preds = %163, %30
br label %165
165: ; preds = %164, %13
br label %166
166: ; preds = %165, %6
ret void
}

LLVM IR (-O2):
@.str = [3 x i8] c"%c\00"
define void @printUTF8(i64 %0) {
%2 = icmp slt i64 %0, 128
br i1 %2, label %3, label %5
3: ; preds = %1
%4 = trunc i64 %0 to i8
br label %104
5: ; preds = %1
%6 = icmp ult i64 %0, 2048
br i1 %6, label %7, label %15
7: ; preds = %5
%8 = lshr i64 %0, 6
%9 = trunc i64 %8 to i8
%10 = or i8 %9, -64
%11 = tail call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %10)
%12 = trunc i64 %0 to i8
%13 = and i8 %12, 63
%14 = or i8 %13, -128
br label %104
15: ; preds = %5
%16 = icmp ult i64 %0, 65536
br i1 %16, label %17, label %30
17: ; preds = %15
%18 = lshr i64 %0, 12
%19 = trunc i64 %18 to i8
%20 = or i8 %19, -32
%21 = tail call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %20)
%22 = lshr i64 %0, 6
%23 = trunc i64 %22 to i8
%24 = and i8 %23, 63
%25 = or i8 %24, -128
%26 = tail call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %25)
%27 = trunc i64 %0 to i8
%28 = and i8 %27, 63
%29 = or i8 %28, -128
br label %104
30: ; preds = %15
%31 = icmp ult i64 %0, 2097152
br i1 %31, label %32, label %50
32: ; preds = %30
%33 = lshr i64 %0, 18
%34 = trunc i64 %33 to i8
%35 = or i8 %34, -16
%36 = tail call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %35)
%37 = lshr i64 %0, 12
%38 = trunc i64 %37 to i8
%39 = and i8 %38, 63
%40 = or i8 %39, -128
%41 = tail call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %40)
%42 = lshr i64 %0, 6
%43 = trunc i64 %42 to i8
%44 = and i8 %43, 63
%45 = or i8 %44, -128
%46 = tail call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %45)
%47 = trunc i64 %0 to i8
%48 = and i8 %47, 63
%49 = or i8 %48, -128
br label %104
50: ; preds = %30
%51 = icmp ult i64 %0, 67108864
br i1 %51, label %52, label %75
52: ; preds = %50
%53 = lshr i64 %0, 24
%54 = trunc i64 %53 to i8
%55 = or i8 %54, -8
%56 = tail call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %55)
%57 = lshr i64 %0, 18
%58 = trunc i64 %57 to i8
%59 = and i8 %58, 63
%60 = or i8 %59, -128
%61 = tail call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %60)
%62 = lshr i64 %0, 12
%63 = trunc i64 %62 to i8
%64 = and i8 %63, 63
%65 = or i8 %64, -128
%66 = tail call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %65)
%67 = lshr i64 %0, 6
%68 = trunc i64 %67 to i8
%69 = and i8 %68, 112
%70 = or i8 %69, -128
%71 = tail call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %70)
%72 = trunc i64 %0 to i8
%73 = and i8 %72, 63
%74 = or i8 %73, -128
br label %104
75: ; preds = %50
%76 = lshr i64 %0, 30
%77 = trunc i64 %76 to i8
%78 = and i8 %77, 1
%79 = or i8 %78, -4
%80 = tail call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %79)
%81 = lshr i64 %0, 24
%82 = trunc i64 %81 to i8
%83 = and i8 %82, 63
%84 = or i8 %83, -128
%85 = tail call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %84)
%86 = lshr i64 %0, 18
%87 = trunc i64 %86 to i8
%88 = and i8 %87, 63
%89 = or i8 %88, -128
%90 = tail call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %89)
%91 = lshr i64 %0, 12
%92 = trunc i64 %91 to i8
%93 = and i8 %92, 63
%94 = or i8 %93, -128
%95 = tail call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %94)
%96 = lshr i64 %0, 6
%97 = trunc i64 %96 to i8
%98 = and i8 %97, 63
%99 = or i8 %98, -128
%100 = tail call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %99)
%101 = trunc i64 %0 to i8
%102 = and i8 %101, 63
%103 = or i8 %102, -128
br label %104
104: ; preds = %7, %32, %75, %52, %17, %3
%105 = phi i8 [ %14, %7 ], [ %49, %32 ], [ %103, %75 ], [ %74, %52 ], [ %29, %17 ], [ %4, %3 ]
%106 = tail call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 zeroext %105)
ret void
}