user: 请从给定的汇编指令推导出C源代码:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x24(%rbp),%rax
  mov    %rax,%rsi
  lea    D114(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movl   $0x0,-0x18(%rbp)
  movl   $0x0,-0x14(%rbp)
  movl   $0x0,-0x10(%rbp)
  movl   $0x0,-0xc(%rbp)
  movl   $0x0,-0x1c(%rbp)
  jmp    L67
L68:
  lea    -0x25(%rbp),%rdx
  lea    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D94(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movzbl -0x25(%rbp),%eax
  cmp    $0x43,%al
  jne    L4
  mov    -0x20(%rbp),%eax
  add    %eax,-0x14(%rbp)
  jmp    L60
L4:
  movzbl -0x25(%rbp),%eax
  cmp    $0x52,%al
  jne    L45
  mov    -0x20(%rbp),%eax
  add    %eax,-0x10(%rbp)
  jmp    L60
L45:
  movzbl -0x25(%rbp),%eax
  cmp    $0x53,%al
  jne    L60
  mov    -0x20(%rbp),%eax
  add    %eax,-0xc(%rbp)
L60:
  mov    -0x20(%rbp),%eax
  add    %eax,-0x18(%rbp)
  addl   $0x1,-0x1c(%rbp)
L67:
  mov    -0x24(%rbp),%eax
  cmp    %eax,-0x1c(%rbp)
  jl     L68
  pxor   %xmm3,%xmm3
  cvtsi2sdl -0x18(%rbp),%xmm3
  movq   %xmm3,%rax
  movq   %rax,%xmm0
  lea    D42(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  pxor   %xmm4,%xmm4
  cvtsi2sdl -0x14(%rbp),%xmm4
  movq   %xmm4,%rax
  movq   %rax,%xmm0
  lea    D12(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  pxor   %xmm5,%xmm5
  cvtsi2sdl -0x10(%rbp),%xmm5
  movq   %xmm5,%rax
  movq   %rax,%xmm0
  lea    D119(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  pxor   %xmm6,%xmm6
  cvtsi2sdl -0xc(%rbp),%xmm6
  movq   %xmm6,%rax
  movq   %rax,%xmm0
  lea    D32(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x18(%rbp),%xmm2
  movsd  D6(%rip),%xmm0
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x14(%rbp),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  lea    D87(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x18(%rbp),%xmm2
  movsd  D6(%rip),%xmm0
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x10(%rbp),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  lea    D98(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x18(%rbp),%xmm2
  movsd  D6(%rip),%xmm0
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0xc(%rbp),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  lea    D102(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L71
  call   <__stack_chk_fail@plt>
L71:
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D114
type_infered: string
name: parse_data
arguments: label: D94
type_infered: string
name: parse_data
arguments: label: D42
type_infered: string
name: parse_data
arguments: label: D12
type_infered: string
name: parse_data
arguments: label: D119
type_infered: string
name: parse_data
arguments: label: D32
type_infered: string
name: parse_data
arguments: label: D6
type_infered: f64
name: parse_data
arguments: label: D87
type_infered: string
name: parse_data
arguments: label: D98
type_infered: string
name: parse_data
arguments: label: D102
type_infered: string

tool: D114: %d

tool: D94: %d %c

tool: D42: Total: %d cobaias


tool: D12: Total de coelhos: %d


tool: D119: Total de ratos: %d


tool: D32: Total de sapos: %d


tool: D6: 100

tool: D87: Percentual de coelhos: %.2f %%


tool: D98: Percentual de ratos: %.2f %%


tool: D102: Percentual de sapos: %.2f %%


assistant: ```c
int main() {
  int testsQtt;
  scanf("%d", &testsQtt);
  int i;
  char animalType;
  int animalAmount;
  int totalQtt = 0, cQtt = 0, rQtt = 0, sQtt = 0;
  for (i = 0; i < testsQtt; i++) {
    scanf("%d %c", &animalAmount, &animalType);
    if (animalType == 'C')
      cQtt += animalAmount;
    else if (animalType == 'R')
      rQtt += animalAmount;
    else if (animalType == 'S')
      sQtt += animalAmount;
    totalQtt += animalAmount;
  }
  printf("Total: %d cobaias\n", totalQtt);
  printf("Total de coelhos: %d\n", cQtt);
  printf("Total de ratos: %d\n", rQtt);
  printf("Total de sapos: %d\n", sQtt);
  printf("Percentual de coelhos: %.2f %%\n", ((100.0 / totalQtt) * cQtt));
  printf("Percentual de ratos: %.2f %%\n", ((100.0 / totalQtt) * rQtt));
  printf("Percentual de sapos: %.2f %%\n", ((100.0 / totalQtt) * sQtt));
  return 0;
}
```