user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movsd  D74(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  D74(%rip),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  lea    D16(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x50(%rbp),%rcx
  lea    -0x58(%rbp),%rdx
  lea    -0x60(%rbp),%rax
  mov    %rax,%rsi
  lea    D70(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  lea    -0x40(%rbp),%rax
  add    $0x8,%rax
  movsd  -0x50(%rbp),%xmm1
  movsd  -0x58(%rbp),%xmm0
  mov    -0x60(%rbp),%rdx
  lea    -0x40(%rbp),%rcx
  mov    %rax,%rsi
  mov    %rcx,%rdi
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rdx,%xmm0
  call   <oblRozwKwad@plt>
  lea    -0x30(%rbp),%rcx
  add    $0x18,%rcx
  lea    -0x30(%rbp),%rdx
  add    $0x10,%rdx
  lea    -0x30(%rbp),%rax
  add    $0x8,%rax
  movsd  -0x38(%rbp),%xmm0
  mov    -0x40(%rbp),%r8
  lea    -0x30(%rbp),%rdi
  mov    %rax,%rsi
  movapd %xmm0,%xmm1
  movq   %r8,%xmm0
  call   <obliczRozwDwukwad@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x48(%rbp)
  movl   $0x0,-0x64(%rbp)
  jmp    L28
L26:
  mov    -0x64(%rbp),%eax
  cltq
  movsd  -0x30(%rbp,%rax,8),%xmm2
  movsd  -0x50(%rbp),%xmm1
  movsd  -0x58(%rbp),%xmm0
  mov    -0x60(%rbp),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <sprawdzRozw@plt>
  test   %rax,%rax
  je     L68
  lea    D17(%rip),%rax
  jmp    L47
L68:
  lea    D58(%rip),%rax
L47:
  mov    -0x64(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x30(%rbp,%rdx,8),%rcx
  mov    -0x64(%rbp),%edx
  lea    0x1(%rdx),%esi
  mov    %rax,%rdx
  movq   %rcx,%xmm0
  lea    D7(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  addl   $0x1,-0x64(%rbp)
L28:
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x64(%rbp),%xmm1
  movsd  -0x48(%rbp),%xmm0
  comisd %xmm1,%xmm0
  ja     L26
  pxor   %xmm0,%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jp     L61
  pxor   %xmm0,%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jne    L61
  lea    D19(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L61:
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L66
  call   <__stack_chk_fail@plt>
L66:
  leave
  ret
```

tool_calls: name: read_data
arguments: tag: D74
type_guessed: byte[8]
name: read_data
arguments: tag: D16
type_guessed: string
name: read_data
arguments: tag: D70
type_guessed: string
name: read_data
arguments: tag: D17
type_guessed: string
name: read_data
arguments: tag: D58
type_guessed: string
name: read_data
arguments: tag: D7
type_guessed: string
name: read_data
arguments: tag: D19
type_guessed: string

tool: {"D74": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xbf]}

tool: D16: Podaj wspolczynniki:

tool: D70: %lf %lf %lf

tool: D17: tak

tool: D58: nie

tool: D7: Rozwiazanie %i: %lf Czy poprawne: %s


tool: D19: Brak rozwiazan!

assistant: ```c
int main(void) {
  double a, b, c, t[2] = {-1, -1}, x[4], xrozw;
  printf("Podaj wspolczynniki:\n");
  scanf("%lf %lf %lf", &a, &b, &c);
  oblRozwKwad(a, b, c, t, t + 1);
  xrozw = obliczRozwDwukwad(t[0], t[1], x, x + 1, x + 2, x + 3);
  for (int i = 0; i < xrozw; ++i)
    printf("Rozwiazanie %i: %lf Czy poprawne: %s\n", i + 1, x[i], sprawdzRozw(a, b, c, x[i]) ? "tak" : "nie");
  if (xrozw == 0)
    printf("Brak rozwiazan!\n");
  return 0;
}
```