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

```asm
<MHD_str_remove_tokens_caseless_>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x38,%rsp
  mov    %rdi,%r15
  mov    %rsi,0x8(%rsp)
  mov    %rdx,%rbp
  mov    %rcx,%rbx
  movl   $0x0,0x14(%rsp)
  mov    $0x0,%r12d
  test   %rcx,%rcx
  jne    L336
  jmp    L175
L308:
  movabs $0x100100000200,%rdi
  bt     %rax,%rdi
  jae    L221
  add    $0x1,%r12
  cmp    %r12,%rbx
  je     L175
L159:
  movzbl 0x0(%rbp,%r12,1),%eax
  cmp    $0x2c,%al
  jbe    L308
L221:
  cmp    %r12,%rbx
  jbe    L175
  lea    0x0(%rbp,%r12,1),%rax
  mov    %rax,(%rsp)
  mov    %r12,%rax
  jmp    L315
L75:
  add    $0x1,%rax
  cmp    %rax,%rbx
  jbe    L227
L400:
  movzbl 0x0(%rbp,%rax,1),%edx
  cmp    $0x20,%dl
  je     L75
  cmp    $0x9,%dl
  je     L75
  cmp    %rax,%rbx
  jbe    L111
  cmp    $0x2c,%dl
  je     L231
L315:
  add    $0x1,%rax
  cmp    %rax,%rbx
  jbe    L116
  movzbl 0x0(%rbp,%rax,1),%edx
  cmp    $0x2c,%dl
  ja     L315
  movabs $0x100100000200,%rdi
  bt     %rdx,%rdi
  jae    L315
  mov    %rax,%rsi
  sub    %r12,%rsi
  jmp    L400
L231:
  mov    %rsi,%rdx
  mov    %rax,%r12
  jmp    L169
L111:
  mov    %rsi,%rdx
  mov    %rax,%r12
  jmp    L169
L157:
  mov    (%rsp),%rsi
  mov    %r15,%rdi
  call   <MHD_str_equal_caseless_bin_n_@plt>
  test   %rax,%rax
  je     L79
  mov    0x8(%rsp),%rax
  movq   $0x0,(%rax)
  movl   $0x1,0x14(%rsp)
  jmp    L79
L110:
  mov    $0x0,%r14d
  mov    $0x0,%r13d
  mov    %r12,0x18(%rsp)
  mov    %rdx,%r12
  mov    %rbp,0x20(%rsp)
  mov    %rbx,0x28(%rsp)
  mov    0x8(%rsp),%rbx
  jmp    L82
L363:
  test   %r14,%r14
  je     L85
  lea    0x2(%r14),%rax
  cmp    %r13,%rax
  je     L430
  movb   $0x2c,(%r15,%r14,1)
  movb   $0x20,0x1(%r15,%r14,1)
  mov    %rax,%r14
  jmp    L85
L430:
  mov    %rax,%r14
  jmp    L85
L318:
  lea    0x1(%r13),%rax
  add    $0x1,%r14
  cmp    %rax,(%rbx)
  jbe    L29
  cmpb   $0x2c,0x1(%r15,%r13,1)
  je     L29
  mov    %rax,%r13
L85:
  cmp    %r14,%r13
  je     L318
  movzbl (%r15,%r13,1),%eax
  mov    %al,(%r15,%r14,1)
  jmp    L318
L29:
  add    $0x3,%r13
L211:
  mov    (%rbx),%rax
  lea    0x0(%r13,%r12,1),%rdx
  cmp    %rdx,%rax
  jb     L107
L82:
  lea    0x0(%r13,%r12,1),%rbp
  cmp    %rbp,(%rbx)
  je     L12
  cmpb   $0x2c,(%r15,%rbp,1)
  jne    L363
L12:
  lea    (%r15,%r13,1),%rdi
  mov    %r12,%rdx
  mov    (%rsp),%rsi
  call   <MHD_str_equal_caseless_bin_n_@plt>
  test   %rax,%rax
  je     L363
  lea    0x2(%rbp),%r13
  movl   $0x1,0x14(%rsp)
  jmp    L211
L107:
  mov    0x18(%rsp),%r12
  mov    0x20(%rsp),%rbp
  mov    0x28(%rsp),%rbx
  cmp    %r13,%rax
  jbe    L6
  sub    %r13,%rax
  mov    %rax,(%rsp)
  test   %r14,%r14
  je     L131
  lea    0x2(%r14),%rax
  cmp    %r13,%rax
  je     L253
  movb   $0x2c,(%r15,%r14,1)
  movb   $0x20,0x1(%r15,%r14,1)
L179:
  lea    (%r15,%r13,1),%rsi
  mov    %rax,%r13
  lea    (%r15,%rax,1),%rdi
  mov    (%rsp),%rdx
  call   <memmove@plt>
L253:
  mov    (%rsp),%r14
  add    %r13,%r14
L6:
  mov    0x8(%rsp),%rax
  mov    %r14,(%rax)
  jmp    L79
L131:
  test   %r13,%r13
  je     L253
  mov    %r14,%rax
  jmp    L179
L227:
  mov    %rsi,%rdx
L456:
  mov    %rax,%r12
L169:
  mov    %rdx,%rax
  cmp    %rdx,%rcx
  je     L157
  add    $0x2,%rax
  cmp    %rcx,%rax
  jb     L110
L79:
  cmp    %r12,%rbx
  jbe    L175
L336:
  mov    0x8(%rsp),%rax
  mov    (%rax),%rcx
  test   %rcx,%rcx
  je     L175
  cmp    %r12,%rbx
  ja     L159
L175:
  mov    0x14(%rsp),%eax
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L116:
  mov    %rax,%rdi
  sub    %r12,%rdi
  mov    %rdi,%rdx
  jmp    L456
```

assistant: ```c
int MHD_str_remove_tokens_caseless_(char *str, size_t *str_len, const char *const tokens, const size_t tokens_len) {
  const char *const t = tokens;
  size_t pt;
  int token_removed;
  ((void)0);
  token_removed = 0;
  pt = 0;
  while (pt < tokens_len && *str_len != 0) {
    const char *tkn;
    size_t tkn_len;
    while ((pt < tokens_len) && ((' ' == t[pt]) || ('\t' == t[pt]) || (',' == t[pt])))
      pt++;
    if (pt >= tokens_len)
      break;
    tkn = t + pt;
    do {
      do {
        pt++;
      } while (pt < tokens_len && (' ' != t[pt] && '\t' != t[pt] && ',' != t[pt]));
      tkn_len = pt - (size_t)(tkn - t);
      while (pt < tokens_len && (' ' == t[pt] || '\t' == t[pt]))
        pt++;
    } while (pt < tokens_len && ',' != t[pt]);
    ((void)0);
    if (*str_len == tkn_len) {
      if (MHD_str_equal_caseless_bin_n_(str, tkn, tkn_len)) {
        *str_len = 0;
        token_removed = (!0);
      }
      continue;
    }
    if (*str_len > tkn_len + 2) {
      size_t pr;
      size_t pw;
      pr = 0;
      pw = 0;
      do {
        ((void)0);
        ((void)0);
        if ((((*str_len) == (pr + tkn_len)) || (',' == str[pr + tkn_len])) && MHD_str_equal_caseless_bin_n_(str + pr, tkn, tkn_len)) {
          ((void)0);
          token_removed = (!0);
          pr += tkn_len + 2;
        } else {
          if (0 != pw) {
            if (pr != pw + 2) {
              str[pw++] = ',';
              str[pw++] = ' ';
            } else
              pw += 2;
          }
          do {
            if (pr != pw)
              str[pw] = str[pr];
            pr++;
            pw++;
          } while (pr < *str_len && ',' != str[pr]);
          pr += 2;
        }
        if ((*str_len) < (pr + tkn_len)) {
          if ((*str_len) > pr) {
            size_t copy_size;
            copy_size = *str_len - pr;
            if (0 != pw) {
              if (pr != pw + 2) {
                str[pw++] = ',';
                str[pw++] = ' ';
              } else
                pw += 2;
            }
            if (pr != pw)
              memmove(str + pw, str + pr, copy_size);
            pw += copy_size;
          }
          *str_len = pw;
          break;
        }
        ((void)0);
        ((void)0);
        ((void)0);
        ((void)0);
      } while (1);
    }
  }
  return token_removed;
}
```