user: Please show me the C implementation that matches the assembly code listed below:

```asm
<command_dispatcher>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  lea    -0xf4000(%rsp),%r11
L276:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L276
  sub    $0x260,%rsp
  lea    D46(%rip),%rsi
  mov    %fs:0x28,%rax
  mov    %rax,0xf4258(%rsp)
  xor    %eax,%eax
  lea    0x6(%rsp),%r12
  mov    %rdi,%rbp
  mov    %r12,%rdx
  call   <sscanf@plt>
  test   %eax,%eax
  jle    L396
  cmpl   $0x74697571,0x6(%rsp)
  je     L278
L365:
  cmpl   $0x6e756f6d,0x6(%rsp)
  je     L275
L322:
  cmpw   $0x736c,0x6(%rsp)
  je     L379
L187:
  cmpl   $0x69616863,0x6(%rsp)
  je     L452
L414:
  cmpl   $0x746166,0x6(%rsp)
  je     L173
  movabs $0x7461665f706d7564,%rax
  cmp    %rax,0x6(%rsp)
  je     L197
L65:
  cmpl   $0x706d7564,0x6(%rsp)
  je     L88
L198:
  cmpl   $0x6d756468,0x6(%rsp)
  je     L265
L27:
  cmpl   $0x6f666e69,0x6(%rsp)
  je     L42
L211:
  cmpl   $0x776f6873,0x6(%rsp)
  je     L459
L344:
  lea    D119(%rip),%rdi
  call   <printf@plt>
  nopl   0x0(%rax)
L396:
  mov    0xf4258(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L378
  add    $0xf4260,%rsp
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopl   0x0(%rax)
L278:
  cmpb   $0x0,0xa(%rsp)
  jne    L365
  xor    %eax,%eax
  call   <quit_command@plt>
  jmp    L396
  nopl   0x0(%rax)
L275:
  cmpw   $0x74,0xa(%rsp)
  jne    L322
  lea    0x10(%rsp),%r13
  xor    %eax,%eax
  mov    %r12,%rdx
  mov    %rbp,%rdi
  mov    %r13,%rcx
  lea    D40(%rip),%rsi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L148
  mov    %r13,%rdi
  call   <mount_command@plt>
  jmp    L396
  nopl   0x0(%rax,%rax,1)
L452:
  cmpw   $0x6e,0xa(%rsp)
  jne    L414
  xor    %eax,%eax
  lea    0x5(%rsp),%rcx
  mov    %r12,%rdx
  mov    %rbp,%rdi
  lea    D88(%rip),%rsi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L382
  movsbl 0x5(%rsp),%edi
  call   <chain_command@plt>
  jmp    L396
  nopl   (%rax)
L379:
  cmpb   $0x0,0x8(%rsp)
  jne    L187
  lea    0x10(%rsp),%r13
  xor    %eax,%eax
  mov    %r12,%rdx
  mov    %rbp,%rdi
  mov    %r13,%rcx
  lea    D40(%rip),%rsi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L249
  mov    %r13,%rdi
  call   <ls_command@plt>
  jmp    L396
  nopl   0x0(%rax)
L173:
  xor    %eax,%eax
  call   <fat_command@plt>
  jmp    L396
  nopl   0x0(%rax)
L265:
  cmpw   $0x70,0xa(%rsp)
  jne    L27
  lea    0x10(%rsp),%r13
  xor    %eax,%eax
  mov    %r12,%rdx
  mov    %rbp,%rdi
  mov    %r13,%rcx
  lea    D40(%rip),%rsi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L168
  mov    %r13,%rdi
  call   <hdump_command@plt>
  jmp    L396
  xchg   %ax,%ax
L148:
  lea    D8(%rip),%rdi
  call   <printf@plt>
  jmp    L396
  nopl   0x0(%rax)
L249:
  lea    D80(%rip),%rdi
  call   <printf@plt>
  jmp    L396
  nopl   0x0(%rax)
L197:
  cmpb   $0x0,0xe(%rsp)
  jne    L65
  lea    0x10(%rsp),%r13
  xor    %eax,%eax
  mov    %r12,%rdx
  mov    %rbp,%rdi
  mov    %r13,%rcx
  lea    D40(%rip),%rsi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L401
  mov    %r13,%rdi
  call   <dump_fat_command@plt>
  jmp    L396
  nopl   0x0(%rax)
L88:
  cmpb   $0x0,0xa(%rsp)
  jne    L198
  lea    0x10(%rsp),%r13
  xor    %eax,%eax
  mov    %r12,%rdx
  mov    %rbp,%rdi
  mov    %r13,%rcx
  lea    D40(%rip),%rsi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L85
  mov    %r13,%rdi
  call   <dump_command@plt>
  jmp    L396
L382:
  lea    D13(%rip),%rdi
  call   <printf@plt>
  jmp    L396
  xchg   %ax,%ax
L42:
  cmpb   $0x0,0xa(%rsp)
  jne    L211
  xor    %eax,%eax
  call   <info_command@plt>
  jmp    L396
L401:
  lea    D62(%rip),%rdi
  call   <printf@plt>
  jmp    L396
L459:
  cmpb   $0x0,0xa(%rsp)
  jne    L344
  xor    %eax,%eax
  lea    0x5(%rsp),%rcx
  mov    %r12,%rdx
  mov    %rbp,%rdi
  lea    D28(%rip),%rsi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L34
  movsbl 0x5(%rsp),%edi
  call   <show_command@plt>
  jmp    L396
L85:
  lea    D55(%rip),%rdi
  call   <printf@plt>
  jmp    L396
L168:
  lea    D106(%rip),%rdi
  call   <printf@plt>
  jmp    L396
L34:
  lea    D64(%rip),%rdi
  call   <printf@plt>
  jmp    L396
L378:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: tag: D46
data_type: string
name: read_data
arguments: tag: D119
data_type: string
name: read_data
arguments: tag: D40
data_type: string
name: read_data
arguments: tag: D88
data_type: string
name: read_data
arguments: tag: D8
data_type: string
name: read_data
arguments: tag: D80
data_type: string
name: read_data
arguments: tag: D13
data_type: string
name: read_data
arguments: tag: D62
data_type: string
name: read_data
arguments: tag: D28
data_type: string
name: read_data
arguments: tag: D55
data_type: string
name: read_data
arguments: tag: D106
data_type: string
name: read_data
arguments: tag: D64
data_type: string

tool: D46: %s

tool: D119: 404 Not Found


tool: D40: %s %s

tool: D88: %s %hu

tool: D8: mount mount-device


tool: D80: ls directory


tool: D13: chain cluster-number


tool: D62: dump_fat file-path


tool: D28: %s %c

tool: D55: dump file-name

tool: D106: hdump file-name

tool: D64: show w|c


assistant: ```c
void command_dispatcher(const char *command) {
  char verb[10];
  int len;
  len = sscanf(command, "%s", verb);
  if (len < 1) {
    return;
  }
  if (!strcmp(verb, "quit")) {
    quit_command();
  } else if (!strcmp(verb, "mount")) {
    char dev[(1000 * 1000)];
    int len = 0;
    len = sscanf(command, "%s %s", verb, dev);
    if (len < 2) {
      printf("mount mount-device\n");
      return;
    }
    mount_command(dev);
  } else if (!strcmp(verb, "ls")) {
    char dir[(1000 * 1000)];
    int len;
    len = sscanf(command, "%s %s", verb, dir);
    if (len < 2) {
      printf("ls directory\n");
      return;
    }
    ls_command(dir);
  } else if (!strcmp(verb, "chain")) {
    uint16_t index;
    int len;
    len = sscanf(command, "%s %hu", verb, &index);
    if (len < 2) {
      printf("chain cluster-number\n");
      return;
    }
    chain_command(index);
  } else if (!strcmp(verb, "fat")) {
    fat_command();
  } else if (!strcmp(verb, "dump_fat")) {
    char path[(1000 * 1000)];
    int len;
    len = sscanf(command, "%s %s", verb, path);
    if (len < 2) {
      printf("dump_fat file-path\n");
      return;
    }
    dump_fat_command(path);
  } else if (!strcmp(verb, "dump")) {
    char dir[(1000 * 1000)];
    int len;
    len = sscanf(command, "%s %s", verb, dir);
    if (len < 2) {
      printf("dump file-name");
      return;
    }
    dump_command(dir);
  } else if (!strcmp(verb, "hdump")) {
    char dir[(1000 * 1000)];
    int len;
    len = sscanf(command, "%s %s", verb, dir);
    if (len < 2) {
      printf("hdump file-name");
      return;
    }
    hdump_command(dir);
  } else if (!strcmp(verb, "info")) {
    info_command();
  } else if (!strcmp(verb, "show")) {
    char c;
    int len;
    len = sscanf(command, "%s %c", verb, &c);
    if (len < 2) {
      printf("show w|c\n");
      return;
    }
    show_command(c);
  } else {
    printf("404 Not Found\n");
  }
}
```