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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D15(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  movss  -0xc(%rbp),%xmm1
  movss  D193(%rip),%xmm0
  comiss %xmm1,%xmm0
  jb     L37
  movss  -0xc(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D146(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm3,%xmm3
  cvtsd2ss %xmm0,%xmm3
  movss  -0xc(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movss  -0xc(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm0,%xmm2
  movsd  D146(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  pxor   %xmm4,%xmm4
  cvtsd2ss %xmm0,%xmm4
  movd   %xmm4,%eax
  mov    $0xf,%esi
  movaps %xmm3,%xmm1
  movd   %eax,%xmm0
  lea    D1(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L78
L37:
  movss  -0xc(%rbp),%xmm1
  movss  D70(%rip),%xmm0
  comiss %xmm1,%xmm0
  jb     L13
  movss  -0xc(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D132(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm3,%xmm3
  cvtsd2ss %xmm0,%xmm3
  movss  -0xc(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movss  -0xc(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm0,%xmm2
  movsd  D132(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  pxor   %xmm5,%xmm5
  cvtsd2ss %xmm0,%xmm5
  movd   %xmm5,%eax
  mov    $0xc,%esi
  movaps %xmm3,%xmm1
  movd   %eax,%xmm0
  lea    D1(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L78
L13:
  movss  -0xc(%rbp),%xmm1
  movss  D185(%rip),%xmm0
  comiss %xmm1,%xmm0
  jb     L75
  movss  -0xc(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D2(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm3,%xmm3
  cvtsd2ss %xmm0,%xmm3
  movss  -0xc(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movss  -0xc(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm0,%xmm2
  movsd  D2(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  pxor   %xmm6,%xmm6
  cvtsd2ss %xmm0,%xmm6
  movd   %xmm6,%eax
  mov    $0xa,%esi
  movaps %xmm3,%xmm1
  movd   %eax,%xmm0
  lea    D1(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L78
L75:
  movss  -0xc(%rbp),%xmm1
  movss  D61(%rip),%xmm0
  comiss %xmm1,%xmm0
  jb     L10
  movss  -0xc(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D169(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm3,%xmm3
  cvtsd2ss %xmm0,%xmm3
  movss  -0xc(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movss  -0xc(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm0,%xmm2
  movsd  D169(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  pxor   %xmm7,%xmm7
  cvtsd2ss %xmm0,%xmm7
  movd   %xmm7,%eax
  mov    $0x7,%esi
  movaps %xmm3,%xmm1
  movd   %eax,%xmm0
  lea    D1(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L78
L10:
  movss  -0xc(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D62(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm3,%xmm3
  cvtsd2ss %xmm0,%xmm3
  movss  -0xc(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movss  -0xc(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm0,%xmm2
  movsd  D62(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  pxor   %xmm4,%xmm4
  cvtsd2ss %xmm0,%xmm4
  movd   %xmm4,%eax
  mov    $0x4,%esi
  movaps %xmm3,%xmm1
  movd   %eax,%xmm0
  lea    D1(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L78:
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L53
  call   <__stack_chk_fail@plt>
L53:
  leave
  ret
```

tool_calls: name: read_data
arguments: label: D15
data_type: string
name: read_data
arguments: label: D193
data_type: byte[4]
name: read_data
arguments: label: D146
data_type: byte[8]
name: read_data
arguments: label: D1
data_type: string
name: read_data
arguments: label: D70
data_type: byte[4]
name: read_data
arguments: label: D132
data_type: byte[8]
name: read_data
arguments: label: D185
data_type: byte[4]
name: read_data
arguments: label: D2
data_type: byte[8]
name: read_data
arguments: label: D61
data_type: byte[4]
name: read_data
arguments: label: D169
data_type: byte[8]
name: read_data
arguments: label: D62
data_type: byte[8]

tool: D15: %f

tool: {"D193": [0x00,0x00,0xc8,0x43]}

tool: {"D146": [0x33,0x33,0x33,0x33,0x33,0x33,0xc3,0x3f]}

tool: D1: Novo salario: %0.2f
Reajuste ganho: %0.2f
Em percentual: %d %


tool: {"D70": [0x00,0x00,0x48,0x44]}

tool: {"D132": [0xb8,0x1e,0x85,0xeb,0x51,0xb8,0xbe,0x3f]}

tool: {"D185": [0x00,0x00,0x96,0x44]}

tool: {"D2": [0x9a,0x99,0x99,0x99,0x99,0x99,0xb9,0x3f]}

tool: {"D61": [0x00,0x00,0xfa,0x44]}

tool: {"D169": [0x66,0x66,0x66,0x66,0x66,0x66,0xe6,0x3f]}

tool: {"D62": [0x9a,0x99,0x99,0x99,0x99,0x99,0xd9,0x3f]}

assistant: ```c
int main(void) {
  float x;
  scanf("%f", &x);
  if (x <= 400)
    printf("Novo salario: %0.2f\nReajuste ganho: %0.2f\nEm percentual: %d %\n", x + x * .15, x * .15, 15);
  else if (x <= 800)
    printf("Novo salario: %0.2f\nReajuste ganho: %0.2f\nEm percentual: %d %\n", x + x * .12, x * .12, 12);
  else if (x <= 1200)
    printf("Novo salario: %0.2f\nReajuste ganho: %0.2f\nEm percentual: %d %\n", x + x * .10, x * .10, 10);
  else if (x <= 2000)
    printf("Novo salario: %0.2f\nReajuste ganho: %0.2f\nEm percentual: %d %\n", x + x * .7, x * .7, 7);
  else
    printf("Novo salario: %0.2f\nReajuste ganho: %0.2f\nEm percentual: %d %\n", x + x * .4, x * .4, 4);
  return 0;
}
```