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

```asm
<ZeroAngle>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0xd8,%rsp
  mov    %edi,-0xa4(%rbp)
  movsd  %xmm0,-0xb0(%rbp)
  movsd  %xmm1,-0xb8(%rbp)
  movsd  %xmm2,-0xc0(%rbp)
  movsd  %xmm3,-0xc8(%rbp)
  movsd  %xmm4,-0xd0(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x90(%rbp)
  movsd  D213(%rip),%xmm0
  divsd  -0xb8(%rbp),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0xc0(%rbp),%xmm0
  movq   D53(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  D72(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x88(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x80(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x70(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x68(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movl   $0x0,-0x94(%rbp)
  mov    $0xe,%edi
  call   <DegtoRad@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x78(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  jmp    L143
L25:
  mov    -0x60(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movsd  -0xb8(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x68(%rbp)
  mov    -0x60(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  movsd  -0xb8(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x70(%rbp)
  mov    -0x60(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movsd  D135(%rip),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  mov    -0x60(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  movsd  D135(%rip),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x90(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  -0xc0(%rbp),%xmm0
  movq   D53(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  D72(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x88(%rbp)
  jmp    L64
L73:
  movsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x70(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  D147(%rip),%xmm0
  mov    -0x70(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movsd  %xmm0,-0xd8(%rbp)
  movsd  D147(%rip),%xmm0
  mov    -0x68(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movapd %xmm0,%xmm5
  addsd  -0xd8(%rbp),%xmm5
  movq   %xmm5,%rax
  movsd  D76(%rip),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x50(%rbp)
  movsd  D213(%rip),%xmm0
  divsd  -0x50(%rbp),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0x50(%rbp),%xmm0
  mov    -0xb0(%rbp),%rdx
  mov    -0xa4(%rbp),%eax
  movapd %xmm0,%xmm1
  movq   %rdx,%xmm0
  mov    %eax,%edi
  call   <retard@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x38(%rbp)
  movsd  -0x38(%rbp),%xmm0
  movq   D53(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  mulsd  -0x68(%rbp),%xmm0
  divsd  -0x50(%rbp),%xmm0
  movsd  -0x58(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x38(%rbp),%xmm0
  movq   D53(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  mulsd  -0x70(%rbp),%xmm0
  divsd  -0x50(%rbp),%xmm0
  movsd  -0x58(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x70(%rbp),%xmm0
  addsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  -0x68(%rbp),%xmm0
  addsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  -0x58(%rbp),%xmm0
  mulsd  -0x18(%rbp),%xmm0
  movsd  -0x68(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  -0x58(%rbp),%xmm0
  mulsd  -0x20(%rbp),%xmm0
  movsd  -0x70(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  -0x70(%rbp),%xmm0
  addsd  -0x48(%rbp),%xmm0
  mulsd  -0x58(%rbp),%xmm0
  movsd  D147(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  -0x80(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  -0x68(%rbp),%xmm0
  addsd  -0x40(%rbp),%xmm0
  mulsd  -0x58(%rbp),%xmm0
  movsd  D147(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  -0x88(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x88(%rbp)
  pxor   %xmm0,%xmm0
  comisd -0x68(%rbp),%xmm0
  jbe    L53
  movsd  -0xd0(%rbp),%xmm0
  comisd -0x88(%rbp),%xmm0
  ja     L127
L53:
  movsd  -0x70(%rbp),%xmm1
  movsd  D48(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x68(%rbp),%xmm0
  comisd %xmm1,%xmm0
  ja     L147
  movsd  -0x90(%rbp),%xmm0
  addsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,-0x90(%rbp)
L64:
  movsd  -0xc8(%rbp),%xmm1
  movsd  D48(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  comisd -0x80(%rbp),%xmm0
  jae    L73
  jmp    L84
L127:
  nop
  jmp    L84
L147:
  nop
L84:
  movsd  -0x88(%rbp),%xmm0
  comisd -0xd0(%rbp),%xmm0
  jbe    L6
  movsd  -0x78(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L6
  movsd  -0x78(%rbp),%xmm0
  movq   D53(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  D147(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x78(%rbp)
L6:
  movsd  -0xd0(%rbp),%xmm0
  comisd -0x88(%rbp),%xmm0
  jbe    L88
  pxor   %xmm0,%xmm0
  comisd -0x78(%rbp),%xmm0
  jbe    L88
  movsd  -0x78(%rbp),%xmm0
  movq   D53(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  D147(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x78(%rbp)
L88:
  mov    -0x78(%rbp),%rax
  movq   %rax,%xmm0
  call   <fabs@plt>
  mov    %rax,%rbx
  mov    D124(%rip),%rax
  movq   %rax,%xmm0
  call   <MOAtoRad@plt>
  cmp    %rax,%rbx
  jge    L97
  movl   $0x1,-0x94(%rbp)
L97:
  mov    $0x2d,%edi
  call   <DegtoRad@plt>
  movsd  -0x60(%rbp),%xmm1
  comisd %xmm0,%xmm1
  jbe    L116
  movl   $0x1,-0x94(%rbp)
L116:
  movsd  -0x60(%rbp),%xmm0
  addsd  -0x78(%rbp),%xmm0
  movsd  %xmm0,-0x60(%rbp)
L143:
  cmpl   $0x0,-0x94(%rbp)
  je     L25
  mov    -0x60(%rbp),%rax
  movq   %rax,%xmm0
  call   <RadtoDeg@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D213
type_guessed: f64
name: disassemble_data
arguments: data_label: D53
type_guessed: f32[2]
name: disassemble_data
arguments: data_label: D72
type_guessed: f64
name: disassemble_data
arguments: data_label: D135
type_guessed: byte[8]
name: disassemble_data
arguments: data_label: D147
type_guessed: f32[2]
name: disassemble_data
arguments: data_label: D76
type_guessed: f64
name: disassemble_data
arguments: data_label: D48
type_guessed: f32[2]
name: disassemble_data
arguments: data_label: D124
type_guessed: f64

tool: D213: 1

tool: {"D53": [0.0,-0.0]}

tool: D72: 12

tool: {"D135": [0x46,0xb6,0xf3,0xfd,0xd4,0x18,0x40,0xc0]}

tool: {"D147": [0.0,2.0]}

tool: D76: 0.5

tool: {"D48": [0.0,2.125]}

tool: D124: 0.01

assistant: ```c
double ZeroAngle(int DragFunction, double DragCoefficient, double Vi, double SightHeight, double ZeroRange, double yIntercept) {
  double t = 0;
  double dt = 1 / Vi;
  double y = -SightHeight / 12;
  double x = 0;
  double da;
  double v = 0, vx = 0, vy = 0;
  double vx1 = 0, vy1 = 0;
  double dv = 0, dvx = 0, dvy = 0;
  double Gx = 0, Gy = 0;
  double angle = 0;
  int quit = 0;
  da = DegtoRad(14);
  for (angle = 0; quit == 0; angle = angle + da) {
    vy = Vi * sin(angle);
    vx = Vi * cos(angle);
    Gx = (-32.194) * sin(angle);
    Gy = (-32.194) * cos(angle);
    for (t = 0, x = 0, y = -SightHeight / 12; x <= ZeroRange * 3; t = t + dt) {
      vy1 = vy;
      vx1 = vx;
      v = pow((pow(vx, 2) + pow(vy, 2)), 0.5);
      dt = 1 / v;
      dv = retard(DragFunction, DragCoefficient, v);
      dvy = -dv * vy / v * dt;
      dvx = -dv * vx / v * dt;
      vx = vx + dvx;
      vy = vy + dvy;
      vy = vy + dt * Gy;
      vx = vx + dt * Gx;
      x = x + dt * (vx + vx1) / 2;
      y = y + dt * (vy + vy1) / 2;
      if (vy < 0 && y < yIntercept) {
        break;
      }
      if (vy > 3 * vx) {
        break;
      }
    }
    if (y > yIntercept && da > 0) {
      da = -da / 2;
    }
    if (y < yIntercept && da < 0) {
      da = -da / 2;
    }
    if (fabs(da) < MOAtoRad(0.01))
      quit = 1;
    if (angle > DegtoRad(45))
      quit = 1;
  }
  return RadtoDeg(angle);
}
```