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

```asm
<parse_config_file>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  lea    -0x3(%rdi,%rsi,1),%rbp
  lea    -0x7(%rdi,%rsi,1),%r14
  cmp    %rbp,%rdi
  ja     L121
  mov    %rdi,%rbx
  lea    (%rdi,%rsi,1),%r12
  lea    D9(%rip),%r15
  jmp    L59
L44:
  cmp    %rbx,%r14
  jbe    L191
  cmpb   $0x5f,0x6(%rbx)
  je     L114
L191:
  cmpb   $0x49,(%rbx)
  jne    L130
  cmpb   $0x46,0x1(%rbx)
  jne    L130
  cmpb   $0x5f,0x2(%rbx)
  je     L202
L130:
  cmp    %rbx,%rbp
  jae    L266
  jmp    L211
L301:
  add    $0x1,%rbx
  cmp    %rbx,%rbp
  jb     L211
L266:
  movsbl (%rbx),%edi
  call   <isalnum@plt>
  test   %rax,%rax
  jne    L301
  cmpb   $0x5f,(%rbx)
  je     L301
L211:
  add    $0x1,%rbx
  cmp    %rbx,%rbp
  jb     L121
L59:
  movsbl (%rbx),%edi
  call   <isalnum@plt>
  test   %rax,%rax
  jne    L44
  cmpb   $0x5f,(%rbx)
  jne    L211
  cmp    %rbx,%r14
  jbe    L130
  cmpb   $0x5f,0x6(%rbx)
  jne    L130
L114:
  mov    $0x6,%edx
  mov    %r15,%rsi
  mov    %rbx,%rdi
  call   <memcmp@plt>
  test   %eax,%eax
  je     L275
  mov    $0x6,%edx
  lea    D5(%rip),%rsi
  mov    %rbx,%rdi
  call   <memcmp@plt>
  test   %eax,%eax
  je     L108
  mov    $0x6,%edx
  lea    D1(%rip),%rsi
  mov    %rbx,%rdi
  call   <memcmp@plt>
  test   %eax,%eax
  jne    L191
  mov    $0x7,%r13d
  jmp    L226
L275:
  mov    $0x7,%r13d
  jmp    L226
L108:
  mov    $0x7,%r13d
  jmp    L226
L202:
  mov    $0x3,%r13d
L226:
  movslq %r13d,%r13
  add    %rbx,%r13
  mov    %r12,0x8(%rsp)
  cmp    %r12,%r13
  jae    L33
  mov    %r13,%rbx
  jmp    L272
L7:
  add    $0x1,%rbx
  cmp    %r12,%rbx
  je     L106
L272:
  movsbl (%rbx),%edi
  call   <isalnum@plt>
  test   %rax,%rax
  jne    L7
  cmpb   $0x5f,(%rbx)
  je     L7
  cmp    %rbx,%r13
  je     L211
  mov    %rbx,0x8(%rsp)
L106:
  mov    0x8(%rsp),%esi
  sub    %r13d,%esi
  mov    %r13,%rdi
  call   <use_config@plt>
  mov    %r13,%rbx
  jmp    L211
L33:
  mov    %r13,%rbx
  jmp    L211
L121:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D9
type_guessed: string
name: disassemble_data
arguments: tag: D5
type_guessed: string
name: disassemble_data
arguments: tag: D1
type_guessed: string

tool: D9: CONFIG

tool: D5: ENABLE

tool: D1: IF_NOT

assistant: ```c
void parse_config_file(char *map, size_t len) {
  char *end_3 = map + len - 3;
  char *end_7 = map + len - 7;
  char *p = map;
  char *q;
  int off;
  for (; p <= end_3; p++) {
    if (!(isalnum(*p) || *p == '_'))
      continue;
    if (p < end_7 && p[6] == '_') {
      if (!memcmp(p, "CONFIG", 6))
        goto conf7;
      if (!memcmp(p, "ENABLE", 6))
        goto conf7;
      if (!memcmp(p, "IF_NOT", 6))
        goto conf7;
    }
    if (p[0] == 'I' && p[1] == 'F' && p[2] == '_') {
      off = 3;
      goto conf;
    }
    while (p <= end_3 && (isalnum(*p) || *p == '_'))
      p++;
    continue;
  conf7:
    off = 7;
  conf:
    p += off;
    for (q = p; q < end_3 + 3; q++) {
      if (!(isalnum(*q) || *q == '_'))
        break;
    }
    if (q != p) {
      use_config(p, q - p);
    }
  }
}
```