#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 strlen(char *);
void stganograf(char *text) {
  int i, size = strlen(text);
  for (i = 0; i < size; i++) {
    switch (text[i]) {
    case 'A':
      text[i] = '4';
      break;
    case 'B':
      text[i] = '8';
      break;
    case 'C':
      text[i] = '(';
      break;
    case 'E':
      text[i] = '3';
      break;
    case 'H':
      text[i] = '#';
      break;
    case 'I':
      text[i] = '1';
      break;
    case 'O':
      text[i] = '0';
      break;
    case 'S':
      text[i] = '5';
      break;
    case 'T':
      text[i] = '7';
      break;
    case 'Y':
      text[i] = '&';
      break;
    case '4':
      text[i] = 'A';
      break;
    case '8':
      text[i] = 'B';
      break;
    case '(':
      text[i] = 'C';
      break;
    case '3':
      text[i] = 'E';
      break;
    case '#':
      text[i] = 'H';
      break;
    case '1':
      text[i] = 'I';
      break;
    case '0':
      text[i] = 'O';
      break;
    case '5':
      text[i] = 'S';
      break;
    case '7':
      text[i] = 'T';
      break;
    case '&':
      text[i] = 'Y';
      break;
    }
  }
}


x86 assembly (clang, -O0):
<stganograf>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,-0x10(%rbp)
movl   $0x0,-0xc(%rbp)
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    12cf <stganograf+0x1bf>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
add    $0xffffffdd,%eax
mov    %eax,%ecx
mov    %rcx,-0x18(%rbp)
sub    $0x36,%eax
ja     12bc <stganograf+0x1ac>
mov    -0x18(%rbp),%rax
lea    0xe9c(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x34,(%rax,%rcx,1)
jmp    12bc <stganograf+0x1ac>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x38,(%rax,%rcx,1)
jmp    12bc <stganograf+0x1ac>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x28,(%rax,%rcx,1)
jmp    12bc <stganograf+0x1ac>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x33,(%rax,%rcx,1)
jmp    12bc <stganograf+0x1ac>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x23,(%rax,%rcx,1)
jmp    12bc <stganograf+0x1ac>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x31,(%rax,%rcx,1)
jmp    12bc <stganograf+0x1ac>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x30,(%rax,%rcx,1)
jmp    12bc <stganograf+0x1ac>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x35,(%rax,%rcx,1)
jmp    12bc <stganograf+0x1ac>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x37,(%rax,%rcx,1)
jmp    12bc <stganograf+0x1ac>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x26,(%rax,%rcx,1)
jmp    12bc <stganograf+0x1ac>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x41,(%rax,%rcx,1)
jmp    12bc <stganograf+0x1ac>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x42,(%rax,%rcx,1)
jmp    12bc <stganograf+0x1ac>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x43,(%rax,%rcx,1)
jmp    12bc <stganograf+0x1ac>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x45,(%rax,%rcx,1)
jmp    12bc <stganograf+0x1ac>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x48,(%rax,%rcx,1)
jmp    12bc <stganograf+0x1ac>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x49,(%rax,%rcx,1)
jmp    12bc <stganograf+0x1ac>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x4f,(%rax,%rcx,1)
jmp    12bc <stganograf+0x1ac>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x53,(%rax,%rcx,1)
jmp    12bc <stganograf+0x1ac>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x54,(%rax,%rcx,1)
jmp    12bc <stganograf+0x1ac>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x59,(%rax,%rcx,1)
jmp    12c1 <stganograf+0x1b1>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    112f <stganograf+0x1f>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<stganograf>:
push   %rbx
mov    %rdi,%rbx
call   1030 <strlen@plt>
test   %eax,%eax
jle    11ac <stganograf+0x9c>
mov    %eax,%eax
xor    %ecx,%ecx
lea    0xed4(%rip),%rsi
nopl   0x0(%rax)
movsbl (%rbx,%rcx,1),%edi
add    $0xffffffdd,%edi
cmp    $0x36,%edi
ja     11a3 <stganograf+0x93>
mov    $0x34,%dl
movslq (%rsi,%rdi,4),%rdi
add    %rsi,%rdi
jmp    *%rdi
mov    $0x48,%dl
jmp    11a0 <stganograf+0x90>
mov    $0x59,%dl
jmp    11a0 <stganograf+0x90>
mov    $0x43,%dl
jmp    11a0 <stganograf+0x90>
mov    $0x4f,%dl
jmp    11a0 <stganograf+0x90>
mov    $0x49,%dl
jmp    11a0 <stganograf+0x90>
mov    $0x45,%dl
jmp    11a0 <stganograf+0x90>
mov    $0x41,%dl
jmp    11a0 <stganograf+0x90>
mov    $0x53,%dl
jmp    11a0 <stganograf+0x90>
mov    $0x54,%dl
jmp    11a0 <stganograf+0x90>
mov    $0x42,%dl
jmp    11a0 <stganograf+0x90>
mov    $0x38,%dl
jmp    11a0 <stganograf+0x90>
mov    $0x28,%dl
jmp    11a0 <stganograf+0x90>
mov    $0x33,%dl
jmp    11a0 <stganograf+0x90>
mov    $0x23,%dl
jmp    11a0 <stganograf+0x90>
mov    $0x31,%dl
jmp    11a0 <stganograf+0x90>
mov    $0x30,%dl
jmp    11a0 <stganograf+0x90>
mov    $0x35,%dl
jmp    11a0 <stganograf+0x90>
mov    $0x37,%dl
jmp    11a0 <stganograf+0x90>
mov    $0x26,%dl
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %dl,(%rbx,%rcx,1)
add    $0x1,%rcx
cmp    %rcx,%rax
jne    1130 <stganograf+0x20>
pop    %rbx
ret

LLVM IR (-O0):
define void @stganograf(i8* %0) {
%2 = alloca i8*
%3 = alloca i32
%4 = alloca i32
store i8* %0, i8** %2
%5 = load i8*, i8** %2
%6 = call i32 @strlen(i8* %5)
store i32 %6, i32* %4
store i32 0, i32* %3
br label %7
7: ; preds = %119, %1
%8 = load i32, i32* %3
%9 = load i32, i32* %4
%10 = icmp slt i32 %8, %9
br i1 %10, label %11, label %122
11: ; preds = %7
%12 = load i8*, i8** %2
%13 = load i32, i32* %3
%14 = sext i32 %13 to i64
%15 = getelementptr inbounds i8, i8* %12, i64 %14
%16 = load i8, i8* %15
%17 = sext i8 %16 to i32
switch i32 %17, label %118 [
i32 65, label %18
i32 66, label %23
i32 67, label %28
i32 69, label %33
i32 72, label %38
i32 73, label %43
i32 79, label %48
i32 83, label %53
i32 84, label %58
i32 89, label %63
i32 52, label %68
i32 56, label %73
i32 40, label %78
i32 51, label %83
i32 35, label %88
i32 49, label %93
i32 48, label %98
i32 53, label %103
i32 55, label %108
i32 38, label %113
]
18: ; preds = %11
%19 = load i8*, i8** %2
%20 = load i32, i32* %3
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds i8, i8* %19, i64 %21
store i8 52, i8* %22
br label %118
23: ; preds = %11
%24 = load i8*, i8** %2
%25 = load i32, i32* %3
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds i8, i8* %24, i64 %26
store i8 56, i8* %27
br label %118
28: ; preds = %11
%29 = load i8*, i8** %2
%30 = load i32, i32* %3
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds i8, i8* %29, i64 %31
store i8 40, i8* %32
br label %118
33: ; preds = %11
%34 = load i8*, i8** %2
%35 = load i32, i32* %3
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds i8, i8* %34, i64 %36
store i8 51, i8* %37
br label %118
38: ; preds = %11
%39 = load i8*, i8** %2
%40 = load i32, i32* %3
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds i8, i8* %39, i64 %41
store i8 35, i8* %42
br label %118
43: ; preds = %11
%44 = load i8*, i8** %2
%45 = load i32, i32* %3
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds i8, i8* %44, i64 %46
store i8 49, i8* %47
br label %118
48: ; preds = %11
%49 = load i8*, i8** %2
%50 = load i32, i32* %3
%51 = sext i32 %50 to i64
%52 = getelementptr inbounds i8, i8* %49, i64 %51
store i8 48, i8* %52
br label %118
53: ; preds = %11
%54 = load i8*, i8** %2
%55 = load i32, i32* %3
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds i8, i8* %54, i64 %56
store i8 53, i8* %57
br label %118
58: ; preds = %11
%59 = load i8*, i8** %2
%60 = load i32, i32* %3
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds i8, i8* %59, i64 %61
store i8 55, i8* %62
br label %118
63: ; preds = %11
%64 = load i8*, i8** %2
%65 = load i32, i32* %3
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds i8, i8* %64, i64 %66
store i8 38, i8* %67
br label %118
68: ; preds = %11
%69 = load i8*, i8** %2
%70 = load i32, i32* %3
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds i8, i8* %69, i64 %71
store i8 65, i8* %72
br label %118
73: ; preds = %11
%74 = load i8*, i8** %2
%75 = load i32, i32* %3
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds i8, i8* %74, i64 %76
store i8 66, i8* %77
br label %118
78: ; preds = %11
%79 = load i8*, i8** %2
%80 = load i32, i32* %3
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds i8, i8* %79, i64 %81
store i8 67, i8* %82
br label %118
83: ; preds = %11
%84 = load i8*, i8** %2
%85 = load i32, i32* %3
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds i8, i8* %84, i64 %86
store i8 69, i8* %87
br label %118
88: ; preds = %11
%89 = load i8*, i8** %2
%90 = load i32, i32* %3
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds i8, i8* %89, i64 %91
store i8 72, i8* %92
br label %118
93: ; preds = %11
%94 = load i8*, i8** %2
%95 = load i32, i32* %3
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds i8, i8* %94, i64 %96
store i8 73, i8* %97
br label %118
98: ; preds = %11
%99 = load i8*, i8** %2
%100 = load i32, i32* %3
%101 = sext i32 %100 to i64
%102 = getelementptr inbounds i8, i8* %99, i64 %101
store i8 79, i8* %102
br label %118
103: ; preds = %11
%104 = load i8*, i8** %2
%105 = load i32, i32* %3
%106 = sext i32 %105 to i64
%107 = getelementptr inbounds i8, i8* %104, i64 %106
store i8 83, i8* %107
br label %118
108: ; preds = %11
%109 = load i8*, i8** %2
%110 = load i32, i32* %3
%111 = sext i32 %110 to i64
%112 = getelementptr inbounds i8, i8* %109, i64 %111
store i8 84, i8* %112
br label %118
113: ; preds = %11
%114 = load i8*, i8** %2
%115 = load i32, i32* %3
%116 = sext i32 %115 to i64
%117 = getelementptr inbounds i8, i8* %114, i64 %116
store i8 89, i8* %117
br label %118
118: ; preds = %11, %113, %108, %103, %98, %93, %88, %83, %78, %73, %68, %63, %58, %53, %48, %43, %38, %33, %28, %23, %18
br label %119
119: ; preds = %118
%120 = load i32, i32* %3
%121 = add nsw i32 %120, 1
store i32 %121, i32* %3
br label %7
122: ; preds = %7
ret void
}

LLVM IR (-O2):
define void @stganograf(i8* %0) {
%2 = tail call i32 @strlen(i8* %0)
%3 = icmp sgt i32 %2, 0
br i1 %3, label %4, label %35
4: ; preds = %1
%5 = zext i32 %2 to i64
br label %6
6: ; preds = %4, %32
%7 = phi i64 [ 0, %4 ], [ %33, %32 ]
%8 = getelementptr inbounds i8, i8* %0, i64 %7
%9 = load i8, i8* %8
%10 = sext i8 %9 to i32
switch i32 %10, label %32 [
i32 65, label %30
i32 66, label %11
i32 67, label %12
i32 69, label %13
i32 72, label %14
i32 73, label %15
i32 79, label %16
i32 83, label %17
i32 84, label %18
i32 89, label %19
i32 52, label %20
i32 56, label %21
i32 40, label %22
i32 51, label %23
i32 35, label %24
i32 49, label %25
i32 48, label %26
i32 53, label %27
i32 55, label %28
i32 38, label %29
]
11: ; preds = %6
br label %30
12: ; preds = %6
br label %30
13: ; preds = %6
br label %30
14: ; preds = %6
br label %30
15: ; preds = %6
br label %30
16: ; preds = %6
br label %30
17: ; preds = %6
br label %30
18: ; preds = %6
br label %30
19: ; preds = %6
br label %30
20: ; preds = %6
br label %30
21: ; preds = %6
br label %30
22: ; preds = %6
br label %30
23: ; preds = %6
br label %30
24: ; preds = %6
br label %30
25: ; preds = %6
br label %30
26: ; preds = %6
br label %30
27: ; preds = %6
br label %30
28: ; preds = %6
br label %30
29: ; preds = %6
br label %30
30: ; preds = %6, %29, %28, %27, %26, %25, %24, %23, %22, %21, %20, %19, %18, %17, %16, %15, %14, %13, %12, %11
%31 = phi i8 [ 56, %11 ], [ 40, %12 ], [ 51, %13 ], [ 35, %14 ], [ 49, %15 ], [ 48, %16 ], [ 53, %17 ], [ 55, %18 ], [ 38, %19 ], [ 65, %20 ], [ 66, %21 ], [ 67, %22 ], [ 69, %23 ], [ 72, %24 ], [ 73, %25 ], [ 79, %26 ], [ 83, %27 ], [ 84, %28 ], [ 89, %29 ], [ 52, %6 ]
store i8 %31, i8* %8
br label %32
32: ; preds = %30, %6
%33 = add nuw nsw i64 %7, 1
%34 = icmp eq i64 %33, %5
br i1 %34, label %35, label %6
35: ; preds = %32, %1
ret void
}