user: What would the C source look like for the assembly code provided here:

```asm
<multipart_parse_headers>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x100,%rsp
  mov    %rdi,-0xd8(%rbp)
  mov    %rsi,-0xe0(%rbp)
  mov    %rdx,-0xe8(%rbp)
  mov    %rcx,-0xf0(%rbp)
  mov    %r8d,-0xf4(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0xe8(%rbp),%rax
  mov    %rax,%rdi
  call   <kore_buf_stringify@plt>
  mov    %rax,-0xa0(%rbp)
  lea    -0x90(%rbp),%rdx
  mov    -0xa0(%rbp),%rax
  mov    $0x5,%ecx
  lea    D56(%rip),%rsi
  mov    %rax,%rdi
  call   <kore_split_string@plt>
  mov    %eax,-0xc0(%rbp)
  movl   $0x0,-0xc4(%rbp)
  jmp    L243
L182:
  mov    -0xc4(%rbp),%eax
  cltq
  mov    -0x90(%rbp,%rax,8),%rax
  lea    -0x60(%rbp),%rdx
  mov    $0x5,%ecx
  lea    D31(%rip),%rsi
  mov    %rax,%rdi
  call   <kore_split_string@plt>
  mov    %eax,-0xbc(%rbp)
  cmpl   $0x2,-0xbc(%rbp)
  jne    L180
  mov    -0x60(%rbp),%rax
  lea    D13(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %rax,%rax
  jne    L22
  mov    -0x58(%rbp),%rax
  mov    %rax,-0xa8(%rbp)
  jmp    L26
L187:
  addq   $0x1,-0xa8(%rbp)
L26:
  mov    -0xa8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L187
  lea    -0x30(%rbp),%rdx
  mov    -0xa8(%rbp),%rax
  mov    $0x5,%ecx
  lea    D5(%rip),%rsi
  mov    %rax,%rdi
  call   <kore_split_string@plt>
  mov    %eax,-0xbc(%rbp)
  cmpl   $0x1,-0xbc(%rbp)
  jle    L221
  mov    -0x30(%rbp),%rax
  lea    D34(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %rax,%rax
  jne    L200
  mov    -0x28(%rbp),%rax
  mov    $0x3d,%esi
  mov    %rax,%rdi
  call   <strchr@plt>
  mov    %rax,-0x98(%rbp)
  cmpq   $0x0,-0x98(%rbp)
  je     L64
  mov    -0x98(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x2,%rax
  jle    L76
  addq   $0x1,-0x98(%rbp)
  lea    -0xb8(%rbp),%rdx
  mov    -0x98(%rbp),%rax
  mov    $0x22,%esi
  mov    %rax,%rdi
  call   <kore_strip_chars@plt>
  mov    -0x20(%rbp),%rax
  test   %rax,%rax
  jne    L222
  mov    -0xb8(%rbp),%rdx
  mov    -0xf4(%rbp),%edi
  mov    -0xf0(%rbp),%rcx
  mov    -0xe0(%rbp),%rsi
  mov    -0xd8(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <multipart_add_field@plt>
  mov    -0xb8(%rbp),%rax
  mov    %rax,%rdi
  call   <kore_mem_free@plt>
  jmp    L90
L222:
  mov    -0x20(%rbp),%rax
  mov    %rax,-0xa8(%rbp)
  jmp    L240
L205:
  addq   $0x1,-0xa8(%rbp)
L240:
  mov    -0xa8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L205
  mov    -0xa8(%rbp),%rax
  mov    $0x9,%edx
  lea    D41(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncasecmp@plt>
  test   %eax,%eax
  jne    L97
  mov    -0xa8(%rbp),%rax
  mov    $0x3d,%esi
  mov    %rax,%rdi
  call   <strchr@plt>
  mov    %rax,-0x98(%rbp)
  cmpq   $0x0,-0x98(%rbp)
  jne    L66
  mov    -0xb8(%rbp),%rax
  mov    %rax,%rdi
  call   <kore_mem_free@plt>
  jmp    L90
L66:
  addq   $0x1,-0x98(%rbp)
  lea    -0xb0(%rbp),%rdx
  mov    -0x98(%rbp),%rax
  mov    $0x22,%esi
  mov    %rax,%rdi
  call   <kore_strip_chars@plt>
  mov    -0xb0(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  test   %rax,%rax
  jle    L175
  mov    -0xb0(%rbp),%rcx
  mov    -0xb8(%rbp),%rdx
  mov    -0xf4(%rbp),%r8d
  mov    -0xf0(%rbp),%rdi
  mov    -0xe0(%rbp),%rsi
  mov    -0xd8(%rbp),%rax
  mov    %r8d,%r9d
  mov    %rdi,%r8
  mov    %rax,%rdi
  call   <multipart_file_add@plt>
L175:
  mov    -0xb0(%rbp),%rax
  mov    %rax,%rdi
  call   <kore_mem_free@plt>
L97:
  mov    -0xb8(%rbp),%rax
  mov    %rax,%rdi
  call   <kore_mem_free@plt>
  jmp    L90
L180:
  nop
  jmp    L90
L22:
  nop
  jmp    L90
L221:
  nop
  jmp    L90
L200:
  nop
  jmp    L90
L64:
  nop
  jmp    L90
L76:
  nop
L90:
  addl   $0x1,-0xc4(%rbp)
L243:
  mov    -0xc4(%rbp),%eax
  cmp    -0xc0(%rbp),%eax
  jl     L182
  mov    $0x1,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L59
  call   <__stack_chk_fail@plt>
L59:
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D56
type: string
name: parse_data
arguments: label: D31
type: string
name: parse_data
arguments: label: D13
type: string
name: parse_data
arguments: label: D5
type: string
name: parse_data
arguments: label: D34
type: string
name: parse_data
arguments: label: D41
type: string

tool: D56: 


tool: D31: :

tool: D13: content-disposition

tool: D5: ;

tool: D34: form-data

tool: D41: filename=

assistant: ```c
int multipart_parse_headers(struct http_request *req, struct kore_buf *in, struct kore_buf *hbuf, const char *boundary, const int blen) {
  int h, c, i;
  char *headers[5], *args[5], *opt[5];
  char *d, *val, *name, *fname, *string;
  string = kore_buf_stringify(hbuf);
  h = kore_split_string(string, "\r\n", headers, 5);
  for (i = 0; i < h; i++) {
    c = kore_split_string(headers[i], ":", args, 5);
    if (c != 2)
      continue;
    if (strcasecmp(args[0], "content-disposition"))
      continue;
    for (d = args[1]; isspace(*d); d++)
      ;
    c = kore_split_string(d, ";", opt, 5);
    if (c < 2)
      continue;
    if (strcasecmp(opt[0], "form-data"))
      continue;
    if ((val = strchr(opt[1], '=')) == NULL)
      continue;
    if (strlen(val) < 3)
      continue;
    val++;
    kore_strip_chars(val, '"', &name);
    if (opt[2] == NULL) {
      multipart_add_field(req, in, name, boundary, blen);
      kore_mem_free(name);
      continue;
    }
    for (d = opt[2]; isspace(*d); d++)
      ;
    if (!strncasecmp(d, "filename=", 9)) {
      if ((val = strchr(d, '=')) == NULL) {
        kore_mem_free(name);
        continue;
      }
      val++;
      kore_strip_chars(val, '"', &fname);
      if (strlen(fname) > 0) {
        multipart_file_add(req, in, name, fname, boundary, blen);
      }
      kore_mem_free(fname);
    } else {
      ;
    }
    kore_mem_free(name);
  }
  return (1);
}
```