user: Translate the below assembly code into C programming language:

```asm
<command_dispatcher>:
  endbr64
  push   %rbx
  lea    -0xf4000(%rsp),%r11
L123:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L123
  sub    $0x260,%rsp
  mov    %rdi,%rbx
  mov    %fs:0x28,%rax
  mov    %rax,0xf4258(%rsp)
  xor    %eax,%eax
  lea    0x6(%rsp),%rdx
  lea    D176(%rip),%rsi
  call   <sscanf@plt>
  test   %eax,%eax
  jle    L367
  lea    0x6(%rsp),%rdi
  lea    D350(%rip),%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L516
  lea    0x6(%rsp),%rdi
  lea    D141(%rip),%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L63
  lea    0x6(%rsp),%rdi
  lea    D172(%rip),%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L495
  lea    0x6(%rsp),%rdi
  lea    D389(%rip),%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L603
  lea    0x6(%rsp),%rdi
  lea    D61(%rip),%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L477
  lea    0x6(%rsp),%rdi
  lea    D228(%rip),%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L357
  lea    0x6(%rsp),%rdi
  lea    D159(%rip),%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L407
  lea    0x6(%rsp),%rdi
  lea    D165(%rip),%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L14
  lea    0x6(%rsp),%rdi
  lea    D73(%rip),%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L74
  lea    0x6(%rsp),%rdi
  lea    D289(%rip),%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L558
  lea    0x6(%rsp),%rdi
  lea    D294(%rip),%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L299
  lea    0x6(%rsp),%rdi
  lea    D243(%rip),%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L595
  lea    0x6(%rsp),%rdi
  lea    D387(%rip),%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L159
  lea    0x6(%rsp),%rdi
  lea    D327(%rip),%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L344
  lea    0x6(%rsp),%rdi
  lea    D114(%rip),%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L132
  lea    0x6(%rsp),%rdi
  lea    D30(%rip),%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L374
  lea    0x6(%rsp),%rdi
  lea    D315(%rip),%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L456
  lea    0x6(%rsp),%rdi
  lea    D142(%rip),%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L410
  lea    0x5(%rsp),%rcx
  lea    0x6(%rsp),%rdx
  lea    D111(%rip),%rsi
  mov    %rbx,%rdi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L559
  movsbl 0x5(%rsp),%edi
  call   <test_command@plt>
  jmp    L367
L516:
  call   <quit_command@plt>
L367:
  mov    0xf4258(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L82
  add    $0xf4260,%rsp
  pop    %rbx
  ret
L63:
  lea    0x10(%rsp),%rcx
  lea    0x6(%rsp),%rdx
  lea    D15(%rip),%rsi
  mov    %rbx,%rdi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L539
  lea    0x10(%rsp),%rdi
  call   <mount_command@plt>
  jmp    L367
L539:
  lea    D317(%rip),%rdi
  call   <printf@plt>
  jmp    L367
L495:
  lea    0x10(%rsp),%rcx
  lea    0x6(%rsp),%rdx
  lea    D15(%rip),%rsi
  mov    %rbx,%rdi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L464
  lea    0x10(%rsp),%rdi
  call   <wmount_command@plt>
  jmp    L367
L464:
  lea    D291(%rip),%rdi
  call   <printf@plt>
  jmp    L367
L603:
  call   <umount_command@plt>
  jmp    L367
L477:
  lea    0x10(%rsp),%rcx
  lea    0x6(%rsp),%rdx
  lea    D15(%rip),%rsi
  mov    %rbx,%rdi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L367
  lea    0x10(%rsp),%rdi
  call   <cd_command@plt>
  jmp    L367
L357:
  lea    0x10(%rsp),%rcx
  lea    0x6(%rsp),%rdx
  lea    D15(%rip),%rsi
  mov    %rbx,%rdi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L434
  lea    0x10(%rsp),%rdi
  call   <ls_command@plt>
  jmp    L367
L434:
  mov    $0x0,%edi
  call   <ls_command@plt>
  jmp    L367
L407:
  lea    0x10(%rsp),%rcx
  lea    0x6(%rsp),%rdx
  lea    D15(%rip),%rsi
  mov    %rbx,%rdi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L362
  lea    0x10(%rsp),%rdi
  call   <lsdel_command@plt>
  jmp    L367
L362:
  mov    $0x0,%edi
  call   <lsdel_command@plt>
  jmp    L367
L14:
  lea    0x5(%rsp),%rcx
  lea    0x6(%rsp),%rdx
  lea    D111(%rip),%rsi
  mov    %rbx,%rdi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L87
  movsbl 0x5(%rsp),%edi
  call   <chain_command@plt>
  jmp    L367
L87:
  lea    D321(%rip),%rdi
  call   <printf@plt>
  jmp    L367
L74:
  call   <fat_command@plt>
  jmp    L367
L558:
  lea    0x10(%rsp),%rcx
  lea    0x6(%rsp),%rdx
  lea    D15(%rip),%rsi
  mov    %rbx,%rdi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L160
  lea    0x10(%rsp),%rdi
  call   <dump_fat_command@plt>
  jmp    L367
L160:
  lea    D363(%rip),%rdi
  call   <printf@plt>
  jmp    L367
L299:
  lea    0x10(%rsp),%rcx
  lea    0x6(%rsp),%rdx
  lea    D15(%rip),%rsi
  mov    %rbx,%rdi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L212
  lea    0x10(%rsp),%rdi
  call   <dump_command@plt>
  jmp    L367
L212:
  lea    D414(%rip),%rdi
  call   <printf@plt>
  jmp    L367
L595:
  lea    0x10(%rsp),%rcx
  lea    0x6(%rsp),%rdx
  lea    D15(%rip),%rsi
  mov    %rbx,%rdi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L213
  lea    0x10(%rsp),%rdi
  call   <hdump_command@plt>
  jmp    L367
L213:
  lea    D130(%rip),%rdi
  call   <printf@plt>
  jmp    L367
L159:
  lea    0x10(%rsp),%rcx
  lea    0x6(%rsp),%rdx
  lea    D15(%rip),%rsi
  mov    %rbx,%rdi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L247
  lea    0x10(%rsp),%rdi
  call   <delete_command@plt>
  jmp    L367
L247:
  lea    D316(%rip),%rdi
  call   <printf@plt>
  jmp    L367
L344:
  lea    0x10(%rsp),%rcx
  lea    0x6(%rsp),%rdx
  lea    D15(%rip),%rsi
  mov    %rbx,%rdi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L309
  lea    0x10(%rsp),%rdi
  call   <undelete_command@plt>
  jmp    L367
L309:
  lea    D57(%rip),%rdi
  call   <printf@plt>
  jmp    L367
L132:
  call   <info_command@plt>
  jmp    L367
L374:
  lea    0x5(%rsp),%rcx
  lea    0x6(%rsp),%rdx
  lea    D223(%rip),%rsi
  mov    %rbx,%rdi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  jle    L290
  movsbl 0x5(%rsp),%edi
  call   <show_command@plt>
  jmp    L367
L290:
  lea    D23(%rip),%rdi
  call   <printf@plt>
  jmp    L367
L456:
  call   <test_fat_command@plt>
  jmp    L367
L559:
  lea    D320(%rip),%rdi
  call   <printf@plt>
  jmp    L367
L410:
  lea    D264(%rip),%rdi
  call   <printf@plt>
  jmp    L367
L82:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: tag: D176
data_type: string
name: extract_symbolic_data
arguments: tag: D350
data_type: string
name: extract_symbolic_data
arguments: tag: D141
data_type: string
name: extract_symbolic_data
arguments: tag: D172
data_type: string
name: extract_symbolic_data
arguments: tag: D389
data_type: string
name: extract_symbolic_data
arguments: tag: D61
data_type: string
name: extract_symbolic_data
arguments: tag: D228
data_type: string
name: extract_symbolic_data
arguments: tag: D159
data_type: string
name: extract_symbolic_data
arguments: tag: D165
data_type: string
name: extract_symbolic_data
arguments: tag: D73
data_type: string
name: extract_symbolic_data
arguments: tag: D289
data_type: string
name: extract_symbolic_data
arguments: tag: D294
data_type: string
name: extract_symbolic_data
arguments: tag: D243
data_type: string
name: extract_symbolic_data
arguments: tag: D387
data_type: string
name: extract_symbolic_data
arguments: tag: D327
data_type: string
name: extract_symbolic_data
arguments: tag: D114
data_type: string
name: extract_symbolic_data
arguments: tag: D30
data_type: string
name: extract_symbolic_data
arguments: tag: D315
data_type: string
name: extract_symbolic_data
arguments: tag: D142
data_type: string
name: extract_symbolic_data
arguments: tag: D111
data_type: string
name: extract_symbolic_data
arguments: tag: D15
data_type: string
name: extract_symbolic_data
arguments: tag: D317
data_type: string
name: extract_symbolic_data
arguments: tag: D291
data_type: string
name: extract_symbolic_data
arguments: tag: D321
data_type: string
name: extract_symbolic_data
arguments: tag: D363
data_type: string
name: extract_symbolic_data
arguments: tag: D414
data_type: string
name: extract_symbolic_data
arguments: tag: D130
data_type: string
name: extract_symbolic_data
arguments: tag: D316
data_type: string
name: extract_symbolic_data
arguments: tag: D57
data_type: string
name: extract_symbolic_data
arguments: tag: D223
data_type: string
name: extract_symbolic_data
arguments: tag: D23
data_type: string
name: extract_symbolic_data
arguments: tag: D320
data_type: string
name: extract_symbolic_data
arguments: tag: D264
data_type: string

tool: D176: %s

tool: D350: quit

tool: D141: mount

tool: D172: wmount

tool: D389: umount

tool: D61: cd

tool: D228: ls

tool: D159: lsdel

tool: D165: chain

tool: D73: fat

tool: D289: dump_fat

tool: D294: dump

tool: D243: hdump

tool: D387: delete

tool: D327: undelete

tool: D114: info

tool: D30: show

tool: D315: test_fat

tool: D142: test

tool: D111: %s %u

tool: D15: %s %s

tool: D317: mount mount-device


tool: D291: wmount mount-device


tool: D321: chain cluster-number


tool: D363: dump_fat file-path


tool: D414: dump file-name

tool: D130: hdump file-name

tool: D316: delete file-name

tool: D57: undelete file-name

tool: D223: %s %c

tool: D23: show w|c


tool: D320: test cluster-number


tool: D264: 404 Not Found


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, "wmount")) {
    char dev[(1000 * 1000)];
    int len = 0;
    len = sscanf(command, "%s %s", verb, dev);
    if (len < 2) {
      printf("wmount mount-device\n");
      return;
    }
    wmount_command(dev);
  } else if (!strcmp(verb, "umount")) {
    umount_command();
  } else if (!strcmp(verb, "cd")) {
    char path[(1000 * 1000)];
    int len;
    len = sscanf(command, "%s %s", verb, path);
    if (len < 2) {
      return;
    }
    cd_command(path);
  } else if (!strcmp(verb, "ls")) {
    char dir[(1000 * 1000)];
    int len;
    len = sscanf(command, "%s %s", verb, dir);
    if (len < 2) {
      ls_command(NULL);
      return;
    }
    ls_command(dir);
  } else if (!strcmp(verb, "lsdel")) {
    char dir[(1000 * 1000)];
    int len;
    len = sscanf(command, "%s %s", verb, dir);
    if (len < 2) {
      lsdel_command(NULL);
      return;
    }
    lsdel_command(dir);
  } else if (!strcmp(verb, "chain")) {
    uint32_t index;
    int len;
    len = sscanf(command, "%s %u", 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, "delete")) {
    char dir[(1000 * 1000)];
    int len;
    len = sscanf(command, "%s %s", verb, dir);
    if (len < 2) {
      printf("delete file-name");
      return;
    }
    delete_command(dir);
  } else if (!strcmp(verb, "undelete")) {
    char dir[(1000 * 1000)];
    int len;
    len = sscanf(command, "%s %s", verb, dir);
    if (len < 2) {
      printf("undelete file-name");
      return;
    }
    undelete_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 if (!strcmp(verb, "test_fat")) {
    test_fat_command();
  } else if (!strcmp(verb, "test")) {
    uint32_t index;
    int len;
    len = sscanf(command, "%s %u", verb, &index);
    if (len < 2) {
      printf("test cluster-number\n");
      return;
    }
    test_command(index);
  } else {
    printf("404 Not Found\n");
  }
}
```