user: What is the c source code of the assembly code below?

```asm
<Cmd_BotAdd>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  call   <Cmd_Argc@plt>
  cmp    $0x2,%eax
  jg     L16
  lea    D45(%rip),%rdi
  mov    %eax,%ebx
  call   <GetCvarInt@plt>
  test   %eax,%eax
  jle    L11
  cmp    $0x1,%ebx
  je     L29
  mov    $0x1,%edi
  lea    D53(%rip),%r12
  call   <Cmd_Argv@plt>
  mov    %eax,%edi
  call   <atoi@plt>
  mov    %r12,%rdi
  mov    %eax,%ebx
  call   <GetCvarInt@plt>
  lea    D33(%rip),%rdi
  mov    %eax,%r13d
  call   <GetCvarInt@plt>
  mov    $0x40,%edx
  cmp    %edx,%eax
  cmovle %eax,%edx
  test   %ebx,%ebx
  mov    $0x1,%eax
  cmovle %eax,%ebx
  mov    %edx,%ebp
  cmp    %ebx,%edx
  cmovg  %ebx,%ebp
  test   %ebp,%ebp
  jle    L23
  xor    %ebx,%ebx
  nopl   (%rax)
L54:
  xor    %eax,%eax
  add    $0x1,%ebx
  call   <AddTestClient@plt>
  cmp    %ebx,%ebp
  jne    L54
L23:
  lea    0x0(%rbp,%r13,1),%ecx
  lea    0x6(%rsp),%rbp
  mov    $0x2,%esi
  mov    %rbp,%rdi
  lea    D25(%rip),%rdx
  call   <snprintf@plt>
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <SetCvar@plt>
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L21
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopw   0x0(%rax,%rax,1)
L16:
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L21
  lea    D42(%rip),%rdi
L88:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  jmp    1130 <Com_Printf@plt>
  xchg   %ax,%ax
L29:
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L21
  add    $0x18,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  jmp    10d0 <AddTestClient@plt>
  nopl   0x0(%rax)
L11:
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L21
  lea    D21(%rip),%rdi
  jmp    L88
L21:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: label: D45
type: string
name: disassemble_data
arguments: label: D53
type: string
name: disassemble_data
arguments: label: D33
type: string
name: disassemble_data
arguments: label: D25
type: string
name: disassemble_data
arguments: label: D42
type: string
name: disassemble_data
arguments: label: D21
type: string

tool: D45: sv_running

tool: D53: bot_count

tool: D33: bot_maxcount

tool: D25: %d

tool: D42: Usage: bot_add <amount> or just bot_add


tool: D21: Server is not running.


assistant: ```c
void Cmd_BotAdd() {
  int argc = Cmd_Argc();
  if (argc > 2) {
    Com_Printf("Usage: bot_add <amount> or just bot_add\n");
    return;
  }
  if (GetCvarInt("sv_running") < 1) {
    Com_Printf("Server is not running.\n");
    return;
  }
  if (argc == 1) {
    AddTestClient();
    return;
  }
  int amount = atoi(Cmd_Argv(1));
  int botcount = GetCvarInt("bot_count");
  int botmax = GetCvarInt("bot_maxcount");
  if (amount > 64)
    amount = 64;
  if (amount < 1)
    amount = 1;
  if (amount > botmax)
    amount = botmax;
  int i;
  for (i = 0; i < amount; i++)
    AddTestClient();
  int total = amount + botcount;
  char str[2];
  snprintf(str, 2, "%d", total);
  SetCvar("bot_count", str);
}
```