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

```asm
<main>:
  endbr64
  push   %r15
  lea    D38(%rip),%r15
  push   %r14
  lea    D58(%rip),%r14
  push   %r13
  push   %r12
  lea    D50(%rip),%r12
  push   %rbp
  push   %rbx
  lea    D27(%rip),%rbx
  sub    $0x48,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x38(%rsp)
  xor    %eax,%eax
  lea    0x34(%rsp),%rcx
  lea    0x2c(%rsp),%r13
  mov    %rcx,0x18(%rsp)
  lea    0x30(%rsp),%rbp
  nopw   0x0(%rax,%rax,1)
L31:
  mov    %eax,0xc(%rsp)
  jmp    L14
  xchg   %ax,%ax
L20:
  mov    %edx,0x14(%rsp)
  call   <sqrt@plt>
  mov    0x30(%rsp),%edx
  pxor   %xmm0,%xmm0
  mov    0x14(%rsp),%edi
  sub    %edx,%eax
  mov    %edx,0x10(%rsp)
  mov    %eax,%ecx
  shr    $0x1f,%eax
  add    %ecx,%eax
  sar    %eax
  imul   0x2c(%rsp),%eax
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,0xc(%rsp)
  call   <sqrt@plt>
  mov    0x10(%rsp),%edx
  pxor   %xmm1,%xmm1
  movss  0xc(%rsp),%xmm0
  lea    D51(%rip),%rdi
  neg    %edx
  cvtss2sd %xmm0,%xmm0
  sub    %eax,%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  imul   0x2c(%rsp),%eax
  cvtsi2ss %eax,%xmm1
  mov    $0x2,%eax
  cvtss2sd %xmm1,%xmm1
  call   <printf@plt>
  movl   $0x0,0xc(%rsp)
L14:
  mov    %r15,%rdi
  call   <puts@plt>
  mov    %r14,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r13,%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  mov    %r12,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  lea    D48(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x18(%rsp),%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  mov    0x30(%rsp),%edx
  mov    0x2c(%rsp),%eax
  imul   0x34(%rsp),%eax
  imul   %edx,%edx
  shl    $0x2,%eax
  sub    %eax,%edx
  mov    %edx,%edi
  jns    L20
  lea    D9(%rip),%rdi
  call   <puts@plt>
  cmpl   $0x1,0xc(%rsp)
  mov    $0x1,%eax
  jne    L31
  mov    0x38(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L36
  add    $0x48,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L36:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_label: D38
data_type: string
name: unpack_data
arguments: data_label: D58
data_type: string
name: unpack_data
arguments: data_label: D50
data_type: string
name: unpack_data
arguments: data_label: D27
data_type: string
name: unpack_data
arguments: data_label: D51
data_type: string
name: unpack_data
arguments: data_label: D48
data_type: string
name: unpack_data
arguments: data_label: D9
data_type: string

tool: D38: 

Ingrese los coeficientes de la cuadratica ax^2+bx+c

tool: D58: a = 

tool: D50: b = 

tool: D27: %d

tool: D51: Raices: x1=%f x2=%f


tool: D48: c = 

tool: D9: sus dos raices son imaginarias!

assistant: ```c
int main() {
  int a, b, c;
  float r1, r2;
  unsigned int intentos = 0;
  while (intentos < 2) {
    printf("\n\nIngrese los coeficientes de la cuadratica ax^2+bx+c\n");
    printf("a = ");
    scanf("%d", &a);
    printf("b = ");
    scanf("%d", &b);
    printf("c = ");
    scanf("%d", &c);
    int deter = b * b - 4 * a * c;
    if (deter < 0) {
      printf("sus dos raices son imaginarias!\n");
      intentos++;
    } else {
      r1 = (-b + sqrt(deter)) / 2 * a;
      r2 = (-b - sqrt(deter)) / 2 * a;
      printf("Raices: x1=%f x2=%f\n", r1, r2);
      intentos = 0;
    }
  }
  return 0;
}
```