user: Please show me the C implementation that matches the assembly code listed below:

```asm
<main>:
  endbr64
  sub    $0x18,%rsp
  lea    D109(%rip),%rdi
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  lea    0x7(%rsp),%rsi
  call   <scanf@plt>
  movzbl 0x7(%rsp),%eax
  cmp    $0x61,%al
  je     L57
L457:
  cmp    $0x62,%al
  je     L485
L36:
  cmp    $0x63,%al
  je     L148
L226:
  cmp    $0x64,%al
  je     L363
L405:
  cmp    $0x65,%al
  je     L105
L162:
  cmp    $0x66,%al
  je     L290
L112:
  cmp    $0x67,%al
  je     L298
L355:
  cmp    $0x68,%al
  je     L309
L336:
  cmp    $0x69,%al
  je     L132
L194:
  cmp    $0x6a,%al
  je     L139
L182:
  cmp    $0x6b,%al
  je     L171
L475:
  cmp    $0x6c,%al
  je     L480
L334:
  cmp    $0x6d,%al
  je     L449
L392:
  cmp    $0x6e,%al
  je     L517
L173:
  cmp    $0x6f,%al
  je     L433
L20:
  cmp    $0x70,%al
  je     L497
L245:
  cmp    $0x71,%al
  je     L367
L165:
  cmp    $0x72,%al
  je     L66
L0:
  cmp    $0x73,%al
  je     L304
L80:
  cmp    $0x74,%al
  je     L515
L501:
  cmp    $0x75,%al
  je     L378
L476:
  cmp    $0x76,%al
  je     L65
L330:
  cmp    $0x77,%al
  je     L277
L494:
  cmp    $0x78,%al
  je     L328
L29:
  cmp    $0x79,%al
  je     L486
L195:
  cmp    $0x7a,%al
  je     L420
L191:
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L326
  xor    %eax,%eax
  add    $0x18,%rsp
  ret
L57:
  lea    D207(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L457
L420:
  lea    D152(%rip),%rdi
  call   <printf@plt>
  jmp    L191
L486:
  lea    D35(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L195
L328:
  lea    D202(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L29
L277:
  lea    D192(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L494
L65:
  lea    D224(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L330
L378:
  lea    D99(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L476
L515:
  lea    D18(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L501
L304:
  lea    D83(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L80
L66:
  lea    D229(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L0
L367:
  lea    D154(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L165
L497:
  lea    D21(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L245
L433:
  lea    D245(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L20
L517:
  lea    D145(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L173
L449:
  lea    D4(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L392
L480:
  lea    D58(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L334
L171:
  lea    D128(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L475
L139:
  lea    D118(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L182
L132:
  lea    D52(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L194
L309:
  lea    D97(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L336
L298:
  lea    D44(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L355
L290:
  lea    D47(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L112
L105:
  lea    D147(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L162
L363:
  lea    D33(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L405
L148:
  lea    D8(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L226
L485:
  lea    D242(%rip),%rdi
  call   <printf@plt>
  movzbl 0x7(%rsp),%eax
  jmp    L36
L326:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_tag: D109
data_type: string
name: disassemble_data
arguments: data_tag: D207
data_type: string
name: disassemble_data
arguments: data_tag: D152
data_type: string
name: disassemble_data
arguments: data_tag: D35
data_type: string
name: disassemble_data
arguments: data_tag: D202
data_type: string
name: disassemble_data
arguments: data_tag: D192
data_type: string
name: disassemble_data
arguments: data_tag: D224
data_type: string
name: disassemble_data
arguments: data_tag: D99
data_type: string
name: disassemble_data
arguments: data_tag: D18
data_type: string
name: disassemble_data
arguments: data_tag: D83
data_type: string
name: disassemble_data
arguments: data_tag: D229
data_type: string
name: disassemble_data
arguments: data_tag: D154
data_type: string
name: disassemble_data
arguments: data_tag: D21
data_type: string
name: disassemble_data
arguments: data_tag: D245
data_type: string
name: disassemble_data
arguments: data_tag: D145
data_type: string
name: disassemble_data
arguments: data_tag: D4
data_type: string
name: disassemble_data
arguments: data_tag: D58
data_type: string
name: disassemble_data
arguments: data_tag: D128
data_type: string
name: disassemble_data
arguments: data_tag: D118
data_type: string
name: disassemble_data
arguments: data_tag: D52
data_type: string
name: disassemble_data
arguments: data_tag: D97
data_type: string
name: disassemble_data
arguments: data_tag: D44
data_type: string
name: disassemble_data
arguments: data_tag: D47
data_type: string
name: disassemble_data
arguments: data_tag: D147
data_type: string
name: disassemble_data
arguments: data_tag: D33
data_type: string
name: disassemble_data
arguments: data_tag: D8
data_type: string
name: disassemble_data
arguments: data_tag: D242
data_type: string

tool: D109: %s

tool: D207: 
z

tool: D152: 
a

tool: D35: 
b

tool: D202: 
c

tool: D192: 
d

tool: D224: 
e

tool: D99: 
f

tool: D18: 
g

tool: D83: 
h

tool: D229: 
i

tool: D154: 
j

tool: D21: 
k

tool: D245: 
l

tool: D145: 
m

tool: D4: 
n

tool: D58: 
o

tool: D128: 
p

tool: D118: 
q

tool: D52: 
r

tool: D97: 
s

tool: D44: 
t

tool: D47: 
u

tool: D147: 
v

tool: D33: 
w

tool: D8: 
x

tool: D242: 
y

assistant: ```c
int main() {
  char s;
  scanf("%s", &s);
  if (s == 97)
    printf("\nz");
  if (s == 98)
    printf("\ny");
  if (s == 99)
    printf("\nx");
  if (s == 100)
    printf("\nw");
  if (s == 101)
    printf("\nv");
  if (s == 102)
    printf("\nu");
  if (s == 103)
    printf("\nt");
  if (s == 104)
    printf("\ns");
  if (s == 105)
    printf("\nr");
  if (s == 106)
    printf("\nq");
  if (s == 107)
    printf("\np");
  if (s == 108)
    printf("\no");
  if (s == 109)
    printf("\nn");
  if (s == 110)
    printf("\nm");
  if (s == 111)
    printf("\nl");
  if (s == 112)
    printf("\nk");
  if (s == 113)
    printf("\nj");
  if (s == 114)
    printf("\ni");
  if (s == 115)
    printf("\nh");
  if (s == 116)
    printf("\ng");
  if (s == 117)
    printf("\nf");
  if (s == 118)
    printf("\ne");
  if (s == 119)
    printf("\nd");
  if (s == 120)
    printf("\nc");
  if (s == 121)
    printf("\nb");
  if (s == 122)
    printf("\na");
  return 0;
}
```