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

```asm
<main>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %edi,%ebp
  mov    %rsi,%rbx
  cmp    $0x1,%edi
  jle    L54
L181:
  mov    0x8(%rbx),%rdi
  call   <atoi@plt>
  cmp    $0x19,%eax
  ja     L225
  mov    %eax,%eax
  lea    D13(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
L54:
  mov    (%rsi),%rsi
  lea    D14(%rip),%rdi
  call   <printf@plt>
  mov    $0xffffffff,%edi
  call   <exit@plt>
  jmp    L181
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise1@plt>
L225:
  mov    $0x0,%eax
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  ret
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise2@plt>
  jmp    L225
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise3@plt>
  jmp    L225
  mov    $0x1,%edx
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise45@plt>
  jmp    L225
  mov    $0x0,%edx
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise45@plt>
  jmp    L225
  mov    $0x1,%edx
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise67@plt>
  jmp    L225
  mov    $0x0,%edx
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise67@plt>
  jmp    L225
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise8@plt>
  jmp    L225
  mov    $0x1,%edx
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise910@plt>
  jmp    L225
  mov    $0x0,%edx
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise910@plt>
  jmp    L225
  mov    $0x1,%edx
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise1112@plt>
  jmp    L225
  mov    $0x0,%edx
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise1112@plt>
  jmp    L225
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise13@plt>
  jmp    L225
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise14@plt>
  jmp    L225
  mov    $0x1,%edx
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise1516@plt>
  jmp    L225
  mov    $0x0,%edx
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise1516@plt>
  jmp    L225
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise17@plt>
  jmp    L225
  mov    $0x1,%edx
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise1920@plt>
  jmp    L225
  mov    $0x0,%edx
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise1920@plt>
  jmp    L225
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise21@plt>
  jmp    L225
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise22@plt>
  jmp    L225
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise23@plt>
  jmp    L225
  mov    $0x1,%edx
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise2425@plt>
  jmp    L225
  mov    $0x0,%edx
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <exercise2425@plt>
  jmp    L225
```

tool_calls: name: parse_data
arguments: data_tag: D14
data_type: string

tool: D14: USAGE:
%s <exercise number> ...


assistant: ```c
int main(int argc, char *argv[]) {
  if (argc < 2) {
    printf("USAGE:\n%s <exercise number> ...\n", argv[0]);
    exit(-1);
  }
  switch (atoi(argv[1])) {
  case 1:
    exercise1(argc, argv);
    break;
  case 2:
    exercise2(argc, argv);
    break;
  case 3:
    exercise3(argc, argv);
    break;
  case 4:
    exercise45(argc, argv, 1);
    break;
  case 5:
    exercise45(argc, argv, 0);
    break;
  case 6:
    exercise67(argc, argv, 1);
    break;
  case 7:
    exercise67(argc, argv, 0);
    break;
  case 8:
    exercise8(argc, argv);
    break;
  case 9:
    exercise910(argc, argv, 1);
    break;
  case 10:
    exercise910(argc, argv, 0);
    break;
  case 11:
    exercise1112(argc, argv, 1);
    break;
  case 12:
    exercise1112(argc, argv, 0);
    break;
  case 13:
    exercise13(argc, argv);
    break;
  case 14:
    exercise14(argc, argv);
    break;
  case 15:
    exercise1516(argc, argv, 1);
    break;
  case 16:
    exercise1516(argc, argv, 0);
    break;
  case 17:
    exercise17(argc, argv);
    break;
  case 19:
    exercise1920(argc, argv, 1);
    break;
  case 20:
    exercise1920(argc, argv, 0);
    break;
  case 21:
    exercise21(argc, argv);
    break;
  case 22:
    exercise22(argc, argv);
    break;
  case 23:
    exercise23(argc, argv);
    break;
  case 24:
    exercise2425(argc, argv, 1);
    break;
  case 25:
    exercise2425(argc, argv, 0);
    break;
  }
  return 0;
}
```