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

```asm
<token_parse>:
  endbr64
  push   %r14
  mov    %rdi,%r14
  push   %r13
  push   %r12
  push   %rbp
  mov    %rdx,%rbp
  push   %rbx
  movzbl (%rdi),%eax
  mov    %esi,%ebx
  test   %al,%al
  je     L31
  mov    %rdi,%rdx
  mov    $0x2,%ecx
  test   %rbp,%rbp
  jne    L9
  jmp    L244
  nopl   0x0(%rax)
L11:
  cmp    %al,0x0(%rbp)
  je     L195
  movzbl 0x1(%rdx),%eax
  add    $0x1,%rdx
  test   %al,%al
  je     L19
L9:
  cmp    %al,%bl
  jne    L11
  movzbl 0x1(%rdx),%eax
  add    $0x1,%rdx
  add    $0x1,%ecx
  test   %al,%al
  jne    L9
L19:
  lea    0x8(,%rcx,8),%edi
L118:
  call   <malloc@plt>
  mov    %r14,%rdi
  mov    %rax,%r12
  call   <strlen@plt>
  lea    0x1(%rax),%edi
  call   <malloc@plt>
  mov    %r14,%rsi
  mov    %rax,%r13
  mov    %rax,%rdi
  call   <strcpy@plt>
  movzbl 0x0(%r13),%eax
  test   %al,%al
  je     L218
  test   %rbp,%rbp
  je     L79
L132:
  lea    0x1(%r13),%rdx
  mov    %r13,%r8
  xor    %esi,%esi
  xor    %ecx,%ecx
  jmp    L28
L193:
  cmp    %al,0x0(%rbp)
  je     L131
  movzbl (%rdx),%eax
  add    $0x1,%rdx
  test   %al,%al
  je     L206
L28:
  lea    0x0(,%rcx,8),%rdi
  lea    (%r12,%rdi,1),%r9
  cmp    %al,%bl
  jne    L193
  mov    %r8,(%r9)
  movzbl (%rdx),%eax
  add    $0x1,%esi
  mov    %rdx,%r8
  movb   $0x0,-0x1(%rdx)
  movslq %esi,%rcx
  add    $0x1,%rdx
  test   %al,%al
  jne    L28
L206:
  shl    $0x3,%rcx
  lea    (%r12,%rcx,1),%r9
  lea    0x8(%rcx),%rax
  add    $0x10,%rcx
L145:
  mov    %r8,(%r9)
  movq   $0x0,(%r12,%rax,1)
  mov    %r12,%rax
  mov    %r13,(%r12,%rcx,1)
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopw   0x0(%rax,%rax,1)
L244:
  cmp    %bl,%al
  sete   %al
  add    $0x1,%rdx
  movzbl %al,%eax
  add    %eax,%ecx
  movzbl (%rdx),%eax
  test   %al,%al
  jne    L244
  jmp    L19
  nopw   0x0(%rax,%rax,1)
L79:
  lea    0x1(%r13),%rdx
  mov    %r13,%r8
  xor    %esi,%esi
  xor    %ecx,%ecx
  nopl   0x0(%rax,%rax,1)
L53:
  lea    (%r12,%rcx,8),%rdi
  cmp    %al,%bl
  je     L100
L161:
  movzbl (%rdx),%eax
  add    $0x1,%rdx
  test   %al,%al
  je     L206
  lea    (%r12,%rcx,8),%rdi
  cmp    %al,%bl
  jne    L161
  nopl   0x0(%rax,%rax,1)
L100:
  mov    %r8,(%rdi)
  movzbl (%rdx),%eax
  add    $0x1,%esi
  mov    %rdx,%r8
  movb   $0x0,-0x1(%rdx)
  movslq %esi,%rcx
  add    $0x1,%rdx
  test   %al,%al
  jne    L53
  jmp    L206
L195:
  lea    0x10(,%rcx,8),%edi
  call   <malloc@plt>
  mov    %r14,%rdi
  mov    %rax,%r12
  call   <strlen@plt>
  lea    0x1(%rax),%edi
  call   <malloc@plt>
  mov    %r14,%rsi
  mov    %rax,%r13
  mov    %rax,%rdi
  call   <strcpy@plt>
  movzbl 0x0(%r13),%eax
  test   %al,%al
  jne    L132
L218:
  mov    %r12,%r9
  mov    %r13,%r8
  mov    $0x10,%ecx
  mov    $0x8,%eax
  jmp    L145
  nop
L131:
  add    $0x1,%r8
  lea    0x8(%rdi),%rax
  lea    0x10(%rdi),%rcx
  jmp    L145
L31:
  mov    $0x18,%edi
  jmp    L118
```

assistant: ```c
char **token_parse(char *token, char delim, char *dump) {
  int size = 2;
  char *ctoken = token;
  char **tok_arr = NULL;
  char *cpy = NULL;
  int index = 0;
  char *last = NULL;
  while (*ctoken) {
    if (*ctoken == delim)
      ++size;
    else if (dump != NULL) {
      if (*ctoken == *dump) {
        ++size;
        break;
      }
    }
    ++ctoken;
  }
  tok_arr = (char **)malloc(sizeof(char *) * size + sizeof(char *));
  cpy = (char *)malloc(sizeof(char) * strlen(token) + sizeof(char));
  strcpy(cpy, token);
  token = cpy;
  index = 0;
  last = token;
  while (*token) {
    if (*token == delim) {
      tok_arr[index] = last;
      *token = '\0';
      last = (token + 1);
      ++index;
    } else if (dump != NULL) {
      if (*token == *dump) {
        last++;
        break;
      }
    }
    ++token;
  }
  tok_arr[index] = last;
  tok_arr[index + 1] = NULL;
  tok_arr[index + 2] = cpy;
  return tok_arr;
}
```