user: Demonstrate the C code that generates the assembly output below:

```asm
<W_CleanupName>:
  endbr64
  movsbl (%rdi),%ecx
  mov    %rsi,%rax
  mov    %rdi,%rdx
  mov    %ecx,%esi
  test   %ecx,%ecx
  je     L259
  sub    $0x41,%ecx
  lea    0x20(%rsi),%edi
  cmp    $0x1a,%ecx
  cmovb  %edi,%esi
  mov    %sil,(%rax)
  movsbl 0x1(%rdx),%esi
  mov    %esi,%ecx
  test   %esi,%esi
  je     L57
  sub    $0x41,%esi
  lea    0x20(%rcx),%edi
  cmp    $0x1a,%esi
  cmovb  %edi,%ecx
  mov    %cl,0x1(%rax)
  movsbl 0x2(%rdx),%esi
  mov    %esi,%ecx
  test   %esi,%esi
  je     L352
  sub    $0x41,%esi
  lea    0x20(%rcx),%edi
  cmp    $0x1a,%esi
  cmovb  %edi,%ecx
  mov    %cl,0x2(%rax)
  movsbl 0x3(%rdx),%esi
  mov    %esi,%ecx
  test   %esi,%esi
  je     L255
  sub    $0x41,%esi
  lea    0x20(%rcx),%edi
  cmp    $0x1a,%esi
  cmovb  %edi,%ecx
  mov    %cl,0x3(%rax)
  movsbl 0x4(%rdx),%esi
  mov    %esi,%ecx
  test   %esi,%esi
  je     L330
  sub    $0x41,%esi
  lea    0x20(%rcx),%edi
  cmp    $0x1a,%esi
  cmovb  %edi,%ecx
  mov    %cl,0x4(%rax)
  movsbl 0x5(%rdx),%esi
  mov    %esi,%ecx
  test   %esi,%esi
  je     L188
  sub    $0x41,%esi
  lea    0x20(%rcx),%edi
  cmp    $0x1a,%esi
  cmovb  %edi,%ecx
  mov    %cl,0x5(%rax)
  movsbl 0x6(%rdx),%esi
  mov    %esi,%ecx
  test   %esi,%esi
  je     L61
  sub    $0x41,%esi
  lea    0x20(%rcx),%edi
  cmp    $0x1a,%esi
  cmovb  %edi,%ecx
  mov    %cl,0x6(%rax)
  movsbl 0x7(%rdx),%esi
  mov    %esi,%ecx
  test   %esi,%esi
  je     L116
  sub    $0x41,%esi
  lea    0x20(%rcx),%edi
  cmp    $0x1a,%esi
  cmovb  %edi,%ecx
  mov    %cl,0x7(%rax)
  movsbl 0x8(%rdx),%esi
  mov    %esi,%ecx
  test   %esi,%esi
  je     L125
  sub    $0x41,%esi
  lea    0x20(%rcx),%edi
  cmp    $0x1a,%esi
  cmovb  %edi,%ecx
  mov    %cl,0x8(%rax)
  movsbl 0x9(%rdx),%esi
  mov    %esi,%ecx
  test   %esi,%esi
  je     L299
  sub    $0x41,%esi
  lea    0x20(%rcx),%edi
  cmp    $0x1a,%esi
  cmovb  %edi,%ecx
  mov    %cl,0x9(%rax)
  movsbl 0xa(%rdx),%esi
  mov    %esi,%ecx
  test   %esi,%esi
  je     L245
  sub    $0x41,%esi
  lea    0x20(%rcx),%edi
  cmp    $0x1a,%esi
  cmovb  %edi,%ecx
  mov    %cl,0xa(%rax)
  movsbl 0xb(%rdx),%esi
  mov    %esi,%ecx
  test   %esi,%esi
  je     L269
  sub    $0x41,%esi
  lea    0x20(%rcx),%edi
  cmp    $0x1a,%esi
  cmovb  %edi,%ecx
  mov    %cl,0xb(%rax)
  movsbl 0xc(%rdx),%esi
  mov    %esi,%ecx
  test   %esi,%esi
  je     L358
  sub    $0x41,%esi
  lea    0x20(%rcx),%edi
  cmp    $0x1a,%esi
  cmovb  %edi,%ecx
  mov    %cl,0xc(%rax)
  movsbl 0xd(%rdx),%esi
  mov    %esi,%ecx
  test   %esi,%esi
  je     L333
  sub    $0x41,%esi
  lea    0x20(%rcx),%edi
  cmp    $0x1a,%esi
  cmovb  %edi,%ecx
  mov    %cl,0xd(%rax)
  movsbl 0xe(%rdx),%esi
  mov    %esi,%ecx
  test   %esi,%esi
  je     L211
  sub    $0x41,%esi
  lea    0x20(%rcx),%edi
  cmp    $0x1a,%esi
  cmovb  %edi,%ecx
  mov    %cl,0xe(%rax)
  movsbl 0xf(%rdx),%ecx
  mov    %ecx,%edx
  test   %ecx,%ecx
  je     L324
  sub    $0x41,%ecx
  lea    0x20(%rdx),%esi
  cmp    $0x1a,%ecx
  cmovb  %esi,%edx
  mov    %dl,0xf(%rax)
  ret
L57:
  mov    $0x1,%ecx
  nop
L259:
  mov    $0x10,%edx
  xor    %edi,%edi
  sub    %ecx,%edx
  movslq %ecx,%rcx
  add    %rcx,%rax
  cmp    $0x8,%edx
  jae    L178
  test   $0x4,%dl
  jne    L308
  test   %edx,%edx
  je     L231
  movb   $0x0,(%rax)
  test   $0x2,%dl
  jne    L258
L231:
  ret
  cs nopw 0x0(%rax,%rax,1)
L178:
  mov    %edx,%ecx
  movq   $0x0,(%rax)
  movq   $0x0,-0x8(%rax,%rcx,1)
  lea    0x8(%rax),%rcx
  and    $0xfffffffffffffff8,%rcx
  sub    %rcx,%rax
  add    %eax,%edx
  and    $0xfffffff8,%edx
  cmp    $0x8,%edx
  jb     L231
  and    $0xfffffff8,%edx
  xor    %eax,%eax
L217:
  mov    %eax,%esi
  add    $0x8,%eax
  mov    %rdi,(%rcx,%rsi,1)
  cmp    %edx,%eax
  jb     L217
  ret
L358:
  mov    $0xc,%ecx
  jmp    L259
L308:
  movl   $0x0,(%rax)
  movl   $0x0,-0x4(%rax,%rdx,1)
  ret
L258:
  xor    %ecx,%ecx
  mov    %cx,-0x2(%rax,%rdx,1)
  ret
L352:
  mov    $0x2,%ecx
  jmp    L259
L255:
  mov    $0x3,%ecx
  jmp    L259
L330:
  mov    $0x4,%ecx
  jmp    L259
L188:
  mov    $0x5,%ecx
  jmp    L259
L61:
  mov    $0x6,%ecx
  jmp    L259
L116:
  mov    $0x7,%ecx
  jmp    L259
L125:
  mov    $0x8,%ecx
  jmp    L259
L299:
  mov    $0x9,%ecx
  jmp    L259
L245:
  mov    $0xa,%ecx
  jmp    L259
L269:
  mov    $0xb,%ecx
  jmp    L259
L333:
  mov    $0xd,%ecx
  jmp    L259
L211:
  mov    $0xe,%ecx
  jmp    L259
L324:
  mov    $0xf,%ecx
  jmp    L259
```

assistant: ```c
void W_CleanupName(const char *in, char *out) {
  int i;
  int c;
  for (i = 0; i < 16; i++) {
    c = in[i];
    if (!c)
      break;
    if (c >= 'A' && c <= 'Z')
      c += ('a' - 'A');
    out[i] = c;
  }
  for (; i < 16; i++)
    out[i] = 0;
}
```