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

```asm
<parse_server_input>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  lea    D127(%rip),%rbx
  mov    %rbx,%rsi
  call   <strtok@plt>
  mov    %rax,%rbp
  mov    %rbx,%rsi
  mov    $0x0,%edi
  call   <strtok@plt>
  test   %rbp,%rbp
  je     L68
  mov    %rax,%rbx
  test   %rax,%rax
  je     L251
  lea    D198(%rip),%rsi
  mov    $0x0,%edi
  call   <strtok@plt>
  mov    %rax,%r12
  mov    %rbp,%rdi
  call   <atoi@plt>
  mov    %eax,%ebp
  lea    D169(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L20
  mov    %r12,%rsi
  mov    %ebp,%edi
  call   <server_hello@plt>
  mov    $0x0,%eax
L176:
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L68:
  lea    D174(%rip),%rcx
  mov    $0x4,%edx
  mov    $0x0,%esi
  mov    $0xffffffff,%edi
  mov    $0x0,%eax
  call   <log_add@plt>
  mov    $0xffffffff,%eax
  jmp    L176
L251:
  lea    D4(%rip),%rcx
  mov    $0x4,%edx
  mov    $0x0,%esi
  mov    $0xffffffff,%edi
  mov    $0x0,%eax
  call   <log_add@plt>
  mov    $0xffffffff,%eax
  jmp    L176
L20:
  lea    D168(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L115
  mov    %r12,%rsi
  mov    %ebp,%edi
  call   <server_msg@plt>
  mov    $0x0,%eax
  jmp    L176
L115:
  lea    D78(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L64
  mov    %r12,%rsi
  mov    %ebp,%edi
  call   <server_ctcp@plt>
  mov    $0x0,%eax
  jmp    L176
L64:
  lea    D144(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L11
  mov    %r12,%rsi
  mov    %ebp,%edi
  call   <server_notice@plt>
  mov    $0x0,%eax
  jmp    L176
L11:
  lea    D126(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L179
  mov    %r12,%rsi
  mov    %ebp,%edi
  call   <server_snotice@plt>
  mov    $0x0,%eax
  jmp    L176
L179:
  lea    D33(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L273
  mov    %r12,%rsi
  mov    %ebp,%edi
  call   <server_ctcpr@plt>
  mov    $0x0,%eax
  jmp    L176
L273:
  lea    D3(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L180
  mov    %r12,%rsi
  mov    %ebp,%edi
  call   <server_join@plt>
  mov    $0x0,%eax
  jmp    L176
L180:
  lea    D8(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L345
  mov    %r12,%rsi
  mov    %ebp,%edi
  call   <server_part@plt>
  mov    $0x0,%eax
  jmp    L176
L345:
  lea    D217(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L358
  mov    %r12,%rsi
  mov    %ebp,%edi
  call   <server_nick@plt>
  mov    $0x0,%eax
  jmp    L176
L358:
  lea    D113(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L353
  mov    %r12,%rsi
  mov    %ebp,%edi
  call   <server_quit@plt>
  mov    $0x0,%eax
  jmp    L176
L353:
  lea    D58(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L32
  mov    %r12,%rsi
  mov    %ebp,%edi
  call   <server_connect@plt>
  mov    $0x0,%eax
  jmp    L176
L32:
  lea    D12(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L244
  mov    %r12,%rsi
  mov    %ebp,%edi
  call   <server_update@plt>
  mov    $0x0,%eax
  jmp    L176
L244:
  lea    D71(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L59
  mov    %r12,%rsi
  mov    %ebp,%edi
  call   <server_send@plt>
  mov    $0x0,%eax
  jmp    L176
L59:
  lea    D145(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L107
  mov    %r12,%rsi
  mov    %ebp,%edi
  call   <server_topic@plt>
  mov    $0x0,%eax
  jmp    L176
L107:
  lea    D205(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L181
  mov    %r12,%rsi
  mov    %ebp,%edi
  call   <server_note@plt>
  mov    $0x0,%eax
  jmp    L176
L181:
  lea    D189(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L46
  mov    %r12,%rsi
  mov    %ebp,%edi
  call   <server_dcc@plt>
  mov    $0x0,%eax
  jmp    L176
L46:
  lea    D116(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L247
  mov    %r12,%rsi
  mov    %ebp,%edi
  call   <server_invite@plt>
  mov    $0x0,%eax
  jmp    L176
L247:
  mov    %rbx,%r8
  lea    D124(%rip),%rcx
  mov    $0x4,%edx
  mov    $0x0,%esi
  mov    $0xffffffff,%edi
  mov    $0x0,%eax
  call   <log_add@plt>
  mov    $0x0,%eax
  jmp    L176
```

tool_calls: name: unpack_data
arguments: label: D127
data_type: string
name: unpack_data
arguments: label: D198
data_type: string
name: unpack_data
arguments: label: D169
data_type: string
name: unpack_data
arguments: label: D174
data_type: string
name: unpack_data
arguments: label: D4
data_type: string
name: unpack_data
arguments: label: D168
data_type: string
name: unpack_data
arguments: label: D78
data_type: string
name: unpack_data
arguments: label: D144
data_type: string
name: unpack_data
arguments: label: D126
data_type: string
name: unpack_data
arguments: label: D33
data_type: string
name: unpack_data
arguments: label: D3
data_type: string
name: unpack_data
arguments: label: D8
data_type: string
name: unpack_data
arguments: label: D217
data_type: string
name: unpack_data
arguments: label: D113
data_type: string
name: unpack_data
arguments: label: D58
data_type: string
name: unpack_data
arguments: label: D12
data_type: string
name: unpack_data
arguments: label: D71
data_type: string
name: unpack_data
arguments: label: D145
data_type: string
name: unpack_data
arguments: label: D205
data_type: string
name: unpack_data
arguments: label: D189
data_type: string
name: unpack_data
arguments: label: D116
data_type: string
name: unpack_data
arguments: label: D124
data_type: string

tool: D127:  

tool: 

tool: D169: HELLO

tool: D174: Garbage server input: no child id

tool: D4: Garbage server input: no command

tool: D168: MSG

tool: D78: CTCP

tool: D144: NOTICE

tool: D126: SNOTICE

tool: D33: CTCPR

tool: D3: JOIN

tool: D8: PART

tool: D217: NICK

tool: D113: QUIT

tool: D58: CONNECT

tool: D12: UPDATE

tool: D71: SEND

tool: D145: TOPIC

tool: D205: NOTE

tool: D189: DCC

tool: D116: INVITE

tool: D124: Garbage server input: unknown command `%s'.

assistant: ```c
int parse_server_input(char *msg) {
  char *id, *cmd, *param;
  int cid;
  id = strtok(msg, " ");
  cmd = strtok(NULL, " ");
  if (id == NULL) {
    log_add(-1, NULL, 0x00000004, "Garbage server input: no child id");
    return -1;
  }
  if (cmd == NULL) {
    log_add(-1, NULL, 0x00000004, "Garbage server input: no command");
    return -1;
  }
  param = strtok(NULL, "");
  cid = atoi(id);
  if (strcmp(cmd, "HELLO") == 0)
    server_hello(cid, param);
  else if (strcmp(cmd, "MSG") == 0)
    server_msg(cid, param);
  else if (strcmp(cmd, "CTCP") == 0)
    server_ctcp(cid, param);
  else if (strcmp(cmd, "NOTICE") == 0)
    server_notice(cid, param);
  else if (strcmp(cmd, "SNOTICE") == 0)
    server_snotice(cid, param);
  else if (strcmp(cmd, "CTCPR") == 0)
    server_ctcpr(cid, param);
  else if (strcmp(cmd, "JOIN") == 0)
    server_join(cid, param);
  else if (strcmp(cmd, "PART") == 0)
    server_part(cid, param);
  else if (strcmp(cmd, "NICK") == 0)
    server_nick(cid, param);
  else if (strcmp(cmd, "QUIT") == 0)
    server_quit(cid, param);
  else if (strcmp(cmd, "CONNECT") == 0)
    server_connect(cid, param);
  else if (strcmp(cmd, "UPDATE") == 0)
    server_update(cid, param);
  else if (strcmp(cmd, "SEND") == 0)
    server_send(cid, param);
  else if (strcmp(cmd, "TOPIC") == 0)
    server_topic(cid, param);
  else if (strcmp(cmd, "NOTE") == 0)
    server_note(cid, param);
  else if (strcmp(cmd, "DCC") == 0)
    server_dcc(cid, param);
  else if (strcmp(cmd, "INVITE") == 0)
    server_invite(cid, param);
  else {
    log_add(-1, NULL, 0x00000004, "Garbage server input: unknown command `%s'.", cmd);
  }
  return 0;
}
```