user: What is the c source code of the assembly code below?

```asm
<calc_arc>:
  endbr64
  movapd %xmm2,%xmm12
  movapd %xmm3,%xmm9
  movapd %xmm4,%xmm10
  sub    $0x88,%rsp
  subsd  %xmm0,%xmm12
  subsd  %xmm1,%xmm9
  movapd %xmm5,%xmm7
  movq   D127(%rip),%xmm14
  subsd  %xmm0,%xmm10
  subsd  %xmm1,%xmm7
  movapd %xmm2,%xmm15
  movsd  D75(%rip),%xmm13
  addsd  %xmm0,%xmm15
  movapd %xmm0,%xmm6
  movapd %xmm3,%xmm11
  movapd %xmm12,%xmm8
  movapd %xmm9,%xmm0
  addsd  %xmm1,%xmm11
  mulsd  %xmm10,%xmm0
  mulsd  %xmm7,%xmm8
  subsd  %xmm0,%xmm8
  mulsd  D105(%rip),%xmm8
  movapd %xmm8,%xmm0
  andpd  %xmm14,%xmm0
  comisd %xmm13,%xmm0
  ja     L184
  andpd  %xmm14,%xmm10
  comisd %xmm10,%xmm13
  ja     L113
L90:
  mov    D211(%rip),%rax
  mov    %rax,(%rdi)
  movsd  %xmm6,(%rsi)
  movsd  %xmm1,(%rdx)
  movsd  %xmm4,(%rcx)
  movsd  %xmm5,(%r8)
L131:
  add    $0x88,%rsp
  ret
  nopl   0x0(%rax)
L113:
  andpd  %xmm14,%xmm7
  comisd %xmm7,%xmm13
  jbe    L90
  mulsd  %xmm12,%xmm12
  pxor   %xmm8,%xmm8
  mulsd  %xmm9,%xmm9
  addsd  %xmm9,%xmm12
  ucomisd %xmm12,%xmm8
  ja     L81
  sqrtsd %xmm12,%xmm12
L30:
  movsd  D272(%rip),%xmm0
  mulsd  %xmm0,%xmm12
  comisd %xmm12,%xmm13
  movsd  %xmm12,(%rdi)
  jbe    L4
  subsd  %xmm13,%xmm6
  subsd  %xmm13,%xmm1
  mov    D211(%rip),%rax
  addsd  %xmm13,%xmm4
  addsd  %xmm13,%xmm5
  mov    %rax,(%rdi)
  movsd  %xmm6,(%rsi)
  movsd  %xmm1,(%rdx)
  movsd  %xmm4,(%rcx)
  movsd  %xmm5,(%r8)
  jmp    L131
  nopl   0x0(%rax)
L184:
  mulsd  %xmm9,%xmm11
  movapd %xmm1,%xmm0
  mulsd  %xmm12,%xmm15
  addsd  %xmm5,%xmm0
  mulsd  %xmm7,%xmm0
  addsd  %xmm11,%xmm15
  movapd %xmm6,%xmm11
  addsd  %xmm4,%xmm11
  mulsd  %xmm10,%xmm11
  addsd  %xmm0,%xmm11
  movapd %xmm7,%xmm0
  mulsd  %xmm15,%xmm0
  mulsd  %xmm7,%xmm7
  movsd  %xmm11,0x8(%rsp)
  movq   %xmm0,%rax
  movapd %xmm9,%xmm0
  mulsd  %xmm11,%xmm0
  movq   %rax,%xmm11
  subsd  %xmm0,%xmm11
  movapd %xmm11,%xmm0
  addsd  %xmm11,%xmm0
  movsd  0x8(%rsp),%xmm11
  mulsd  %xmm12,%xmm11
  divsd  %xmm8,%xmm0
  movsd  %xmm0,(%rsi)
  movapd %xmm15,%xmm0
  mulsd  %xmm10,%xmm0
  mulsd  %xmm10,%xmm10
  subsd  %xmm0,%xmm11
  addsd  %xmm10,%xmm7
  addsd  %xmm11,%xmm11
  divsd  %xmm8,%xmm11
  pxor   %xmm8,%xmm8
  ucomisd %xmm7,%xmm8
  movsd  %xmm11,(%rdx)
  ja     L320
  sqrtsd %xmm7,%xmm7
L393:
  mulsd  %xmm9,%xmm9
  mulsd  %xmm12,%xmm12
  addsd  %xmm12,%xmm9
  ucomisd %xmm9,%xmm8
  ja     L189
  sqrtsd %xmm9,%xmm9
L163:
  subsd  (%rsi),%xmm2
  subsd  %xmm11,%xmm3
  addsd  %xmm9,%xmm7
  movapd %xmm2,%xmm0
  movapd %xmm3,%xmm9
  mulsd  %xmm2,%xmm0
  mulsd  %xmm3,%xmm9
  addsd  %xmm9,%xmm0
  ucomisd %xmm0,%xmm8
  ja     L93
  sqrtsd %xmm0,%xmm0
L203:
  comisd D350(%rip),%xmm7
  movsd  %xmm0,(%rdi)
  jbe    L90
  divsd  %xmm7,%xmm0
  movsd  D3(%rip),%xmm7
  comisd %xmm0,%xmm7
  jbe    L90
  movsd  (%rsi),%xmm0
  subsd  %xmm0,%xmm6
  subsd  %xmm0,%xmm4
  movsd  (%rdx),%xmm0
  subsd  %xmm0,%xmm1
  subsd  %xmm0,%xmm5
  movapd %xmm6,%xmm0
  movsd  %xmm4,0x8(%rsp)
  andpd  %xmm14,%xmm0
  comisd %xmm0,%xmm13
  ja     L46
  divsd  %xmm6,%xmm1
  mov    %r8,0x40(%rsp)
  mov    %rcx,0x38(%rsp)
  mov    %rdi,0x30(%rsp)
  movsd  %xmm8,0x48(%rsp)
  movsd  %xmm5,0x28(%rsp)
  movsd  %xmm3,0x20(%rsp)
  movsd  %xmm2,0x18(%rsp)
  movsd  %xmm6,0x10(%rsp)
  movapd %xmm1,%xmm0
  call   <atan@plt>
  movsd  0x10(%rsp),%xmm6
  mov    0x30(%rsp),%rdi
  movsd  0x48(%rsp),%xmm8
  mov    D75(%rip),%rax
  mulsd  D13(%rip),%xmm0
  movsd  0x18(%rsp),%xmm2
  comisd %xmm6,%xmm8
  movsd  0x20(%rsp),%xmm3
  movsd  0x28(%rsp),%xmm5
  movq   %rax,%xmm13
  mov    0x38(%rsp),%rcx
  mov    0x40(%rsp),%r8
  movq   D127(%rip),%xmm14
  jbe    L387
  addsd  D8(%rip),%xmm0
L387:
  movsd  %xmm0,(%rcx)
  movapd %xmm2,%xmm0
  andpd  %xmm14,%xmm0
  comisd %xmm0,%xmm13
  jbe    L161
  comisd %xmm8,%xmm3
  movsd  D318(%rip),%xmm1
  ja     L337
  movsd  D117(%rip),%xmm1
L337:
  movsd  0x8(%rsp),%xmm6
  andpd  %xmm6,%xmm14
  comisd %xmm14,%xmm13
  jbe    L352
  comisd %xmm8,%xmm5
  movsd  D318(%rip),%xmm0
  ja     L47
  movsd  D117(%rip),%xmm0
L47:
  movsd  %xmm0,(%r8)
  movsd  (%rcx),%xmm2
  comisd %xmm0,%xmm2
  jbe    L336
  comisd %xmm1,%xmm2
  jbe    L131
  comisd %xmm0,%xmm1
  jbe    L131
L43:
  movsd  (%rdi),%xmm0
  xorpd  D235(%rip),%xmm0
  movsd  %xmm0,(%rdi)
  jmp    L131
  nopl   0x0(%rax)
L4:
  mulsd  %xmm0,%xmm11
  mulsd  %xmm0,%xmm15
  subsd  %xmm11,%xmm1
  movsd  %xmm15,(%rsi)
  movsd  %xmm11,(%rdx)
  subsd  (%rsi),%xmm6
  andpd  %xmm6,%xmm14
  comisd %xmm14,%xmm13
  ja     L155
  divsd  %xmm6,%xmm1
  mov    %r8,0x18(%rsp)
  mov    %rcx,0x10(%rsp)
  movsd  %xmm8,0x20(%rsp)
  movsd  %xmm6,0x8(%rsp)
  movapd %xmm1,%xmm0
  call   <atan@plt>
  movsd  0x8(%rsp),%xmm6
  mov    0x10(%rsp),%rcx
  movsd  0x20(%rsp),%xmm8
  mulsd  D13(%rip),%xmm0
  mov    0x18(%rsp),%r8
  comisd %xmm6,%xmm8
  jbe    L319
  addsd  D8(%rip),%xmm0
L319:
  movsd  %xmm0,(%rcx)
  addsd  D358(%rip),%xmm0
L37:
  movsd  %xmm0,(%r8)
  jmp    L131
  nopl   (%rax)
L46:
  comisd %xmm8,%xmm1
  movsd  D318(%rip),%xmm0
  ja     L387
  movsd  D117(%rip),%xmm0
  jmp    L387
L155:
  comisd %xmm8,%xmm1
  jbe    L346
  movsd  D89(%rip),%xmm0
  movsd  D318(%rip),%xmm1
L378:
  movsd  %xmm1,(%rcx)
  jmp    L37
  nopl   0x0(%rax)
L352:
  divsd  0x8(%rsp),%xmm5
  movapd %xmm5,%xmm0
  mov    %r8,0x28(%rsp)
  mov    %rcx,0x20(%rsp)
  mov    %rdi,0x18(%rsp)
  movsd  %xmm8,0x30(%rsp)
  movsd  %xmm1,0x10(%rsp)
  call   <atan@plt>
  movsd  0x10(%rsp),%xmm1
  mov    0x18(%rsp),%rdi
  movsd  0x30(%rsp),%xmm8
  comisd 0x8(%rsp),%xmm8
  mulsd  D13(%rip),%xmm0
  mov    0x20(%rsp),%rcx
  mov    0x28(%rsp),%r8
  jbe    L47
  addsd  D8(%rip),%xmm0
  jmp    L47
  nopl   0x0(%rax)
L161:
  divsd  %xmm2,%xmm3
  mov    %r8,0x30(%rsp)
  mov    %rcx,0x28(%rsp)
  mov    %rdi,0x20(%rsp)
  movsd  %xmm8,0x38(%rsp)
  movsd  %xmm5,0x18(%rsp)
  movsd  %xmm2,0x10(%rsp)
  movapd %xmm3,%xmm0
  call   <atan@plt>
  movsd  0x10(%rsp),%xmm2
  movsd  0x38(%rsp),%xmm8
  movsd  D13(%rip),%xmm1
  mov    D75(%rip),%rax
  comisd %xmm2,%xmm8
  movsd  0x18(%rsp),%xmm5
  mov    0x20(%rsp),%rdi
  mulsd  %xmm0,%xmm1
  mov    0x28(%rsp),%rcx
  mov    0x30(%rsp),%r8
  movq   %rax,%xmm13
  movq   D127(%rip),%xmm14
  jbe    L337
  addsd  D8(%rip),%xmm1
  jmp    L337
  nopw   0x0(%rax,%rax,1)
L336:
  comisd %xmm0,%xmm1
  ja     L43
  comisd %xmm1,%xmm2
  ja     L43
  jmp    L131
  nopl   0x0(%rax)
L346:
  movsd  D212(%rip),%xmm0
  movsd  D117(%rip),%xmm1
  jmp    L378
L320:
  movapd %xmm7,%xmm0
  mov    %r8,0x70(%rsp)
  mov    %rcx,0x68(%rsp)
  mov    %rdx,0x60(%rsp)
  mov    %rsi,0x58(%rsp)
  mov    %rdi,0x50(%rsp)
  movsd  %xmm8,0x78(%rsp)
  movsd  %xmm5,0x48(%rsp)
  movsd  %xmm4,0x40(%rsp)
  movsd  %xmm3,0x38(%rsp)
  movsd  %xmm2,0x30(%rsp)
  movsd  %xmm1,0x28(%rsp)
  movsd  %xmm6,0x20(%rsp)
  movsd  %xmm9,0x18(%rsp)
  movsd  %xmm12,0x10(%rsp)
  movsd  %xmm11,0x8(%rsp)
  call   <sqrt@plt>
  mov    0x70(%rsp),%r8
  mov    0x68(%rsp),%rcx
  mov    D75(%rip),%rax
  movsd  0x78(%rsp),%xmm8
  movapd %xmm0,%xmm7
  movq   D127(%rip),%xmm14
  mov    0x60(%rsp),%rdx
  mov    0x58(%rsp),%rsi
  mov    0x50(%rsp),%rdi
  movq   %rax,%xmm13
  movsd  0x48(%rsp),%xmm5
  movsd  0x40(%rsp),%xmm4
  movsd  0x38(%rsp),%xmm3
  movsd  0x30(%rsp),%xmm2
  movsd  0x28(%rsp),%xmm1
  movsd  0x20(%rsp),%xmm6
  movsd  0x18(%rsp),%xmm9
  movsd  0x10(%rsp),%xmm12
  movsd  0x8(%rsp),%xmm11
  jmp    L393
L189:
  movapd %xmm9,%xmm0
  mov    %r8,0x68(%rsp)
  mov    %rcx,0x60(%rsp)
  mov    %rdx,0x58(%rsp)
  mov    %rsi,0x50(%rsp)
  mov    %rdi,0x48(%rsp)
  movsd  %xmm8,0x70(%rsp)
  movsd  %xmm5,0x40(%rsp)
  movsd  %xmm4,0x38(%rsp)
  movsd  %xmm3,0x30(%rsp)
  movsd  %xmm2,0x28(%rsp)
  movsd  %xmm1,0x20(%rsp)
  movsd  %xmm6,0x18(%rsp)
  movsd  %xmm7,0x10(%rsp)
  movsd  %xmm11,0x8(%rsp)
  call   <sqrt@plt>
  mov    0x68(%rsp),%r8
  mov    0x60(%rsp),%rcx
  mov    0x58(%rsp),%rdx
  mov    0x50(%rsp),%rsi
  movapd %xmm0,%xmm9
  mov    D75(%rip),%rax
  movsd  0x70(%rsp),%xmm8
  movq   D127(%rip),%xmm14
  mov    0x48(%rsp),%rdi
  movsd  0x40(%rsp),%xmm5
  movsd  0x38(%rsp),%xmm4
  movq   %rax,%xmm13
  movsd  0x30(%rsp),%xmm3
  movsd  0x28(%rsp),%xmm2
  movsd  0x20(%rsp),%xmm1
  movsd  0x18(%rsp),%xmm6
  movsd  0x10(%rsp),%xmm7
  movsd  0x8(%rsp),%xmm11
  jmp    L163
L93:
  mov    %r8,0x60(%rsp)
  mov    %rcx,0x58(%rsp)
  mov    %rdx,0x50(%rsp)
  mov    %rsi,0x48(%rsp)
  mov    %rdi,0x40(%rsp)
  movsd  %xmm8,0x68(%rsp)
  movsd  %xmm5,0x38(%rsp)
  movsd  %xmm4,0x30(%rsp)
  movsd  %xmm1,0x28(%rsp)
  movsd  %xmm6,0x20(%rsp)
  movsd  %xmm3,0x18(%rsp)
  movsd  %xmm2,0x10(%rsp)
  movsd  %xmm7,0x8(%rsp)
  call   <sqrt@plt>
  mov    0x60(%rsp),%r8
  mov    0x58(%rsp),%rcx
  mov    D75(%rip),%rax
  movsd  0x68(%rsp),%xmm8
  movq   D127(%rip),%xmm14
  mov    0x50(%rsp),%rdx
  mov    0x48(%rsp),%rsi
  mov    0x40(%rsp),%rdi
  movq   %rax,%xmm13
  movsd  0x38(%rsp),%xmm5
  movsd  0x30(%rsp),%xmm4
  movsd  0x28(%rsp),%xmm1
  movsd  0x20(%rsp),%xmm6
  movsd  0x18(%rsp),%xmm3
  movsd  0x10(%rsp),%xmm2
  movsd  0x8(%rsp),%xmm7
  jmp    L203
L81:
  movapd %xmm12,%xmm0
  mov    %r8,0x58(%rsp)
  mov    %rcx,0x50(%rsp)
  mov    %rdx,0x48(%rsp)
  mov    %rsi,0x40(%rsp)
  mov    %rdi,0x38(%rsp)
  movsd  %xmm8,0x60(%rsp)
  movsd  %xmm5,0x30(%rsp)
  movsd  %xmm4,0x28(%rsp)
  movsd  %xmm1,0x20(%rsp)
  movsd  %xmm6,0x18(%rsp)
  movsd  %xmm11,0x10(%rsp)
  movsd  %xmm15,0x8(%rsp)
  call   <sqrt@plt>
  mov    0x58(%rsp),%r8
  mov    0x50(%rsp),%rcx
  mov    0x48(%rsp),%rdx
  mov    0x40(%rsp),%rsi
  movapd %xmm0,%xmm12
  mov    D75(%rip),%rax
  movsd  0x60(%rsp),%xmm8
  movq   D127(%rip),%xmm14
  mov    0x38(%rsp),%rdi
  movsd  0x30(%rsp),%xmm5
  movsd  0x28(%rsp),%xmm4
  movq   %rax,%xmm13
  movsd  0x20(%rsp),%xmm1
  movsd  0x18(%rsp),%xmm6
  movsd  0x10(%rsp),%xmm11
  movsd  0x8(%rsp),%xmm15
  jmp    L30
```

tool_calls: name: read_data
arguments: tag: D127
type_guessed: qword
name: read_data
arguments: tag: D75
type_guessed: f64
name: read_data
arguments: tag: D105
type_guessed: f64
name: read_data
arguments: tag: D211
type_guessed: f32[2]
name: read_data
arguments: tag: D272
type_guessed: f32[2]
name: read_data
arguments: tag: D350
type_guessed: f64[2]
name: read_data
arguments: tag: D3
type_guessed: f64
name: read_data
arguments: tag: D13
type_guessed: f64
name: read_data
arguments: tag: D8
type_guessed: f64
name: read_data
arguments: tag: D318
type_guessed: f64
name: read_data
arguments: tag: D117
type_guessed: f32[2]
name: read_data
arguments: tag: D235
type_guessed: f32[4]
name: read_data
arguments: tag: D358
type_guessed: f64
name: read_data
arguments: tag: D89
type_guessed: f32[2]
name: read_data
arguments: tag: D212
type_guessed: f32[2]

tool: D127: 9223372036854775807

tool: D75: 2

tool: D105: 4

tool: {"D211": [0.0,-7.7630157470703125]}

tool: {"D272": [0.0,1.75]}

tool: {"D350": [0.00001,10.0]}

tool: D3: 10

tool: D13: 57.29577951308232

tool: D8: 180

tool: D318: 90

tool: {"D117": [0.0,-3.3515625]}

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

tool: D358: 360

tool: {"D89": [0.0,3.939453125]}

tool: {"D212": [0.0,3.763671875]}

assistant: ```c
void calc_arc(double Ax, double Ay, double Bx, double By, double Cx, double Cy, double *Rad, double *Ox, double *Oy, double *alpha_start, double *alpha_end) {
  const double d_seps = 0.00001;
  const double d_eps = 2.0;
  const double d_r2d = 57.29577951308232;
  double D, Bx_m_Ax = Bx - Ax, By_m_Ay = By - Ay, Cx_m_Ax = Cx - Ax, Cy_m_Ay = Cy - Ay, Bx_p_Ax = Bx + Ax, By_p_Ay = By + Ay, Cx_p_Ax = Cx + Ax, Cy_p_Ay = Cy + Ay;
  D = 4.0 * (Bx_m_Ax * Cy_m_Ay - By_m_Ay * Cx_m_Ax);
  if (fabs(D) > d_eps) {
    double tmp1 = Bx_m_Ax * Bx_p_Ax + By_m_Ay * By_p_Ay;
    double tmp2 = Cx_m_Ax * Cx_p_Ax + Cy_m_Ay * Cy_p_Ay;
    *Ox = 2.0 * (tmp1 * Cy_m_Ay - tmp2 * By_m_Ay) / D;
    *Oy = 2.0 * (tmp2 * Bx_m_Ax - tmp1 * Cx_m_Ax) / D;
    tmp1 = sqrt(Cy_m_Ay * Cy_m_Ay + Cx_m_Ax * Cx_m_Ax) + sqrt(By_m_Ay * By_m_Ay + Bx_m_Ax * Bx_m_Ax);
    Bx -= *Ox;
    By -= *Oy;
    *Rad = sqrt(Bx * Bx + By * By);
    if ((tmp1 > d_seps) && (*Rad / tmp1 < 10.0)) {
      double alpha_m;
      Ax -= *Ox;
      Cx -= *Ox;
      Ay -= *Oy;
      Cy -= *Oy;
      if (fabs(Ax) < d_eps) {
        *alpha_start = (Ay > 0.0) ? (90.0) : (-90.0);
      } else {
        *alpha_start = atan(Ay / Ax) * d_r2d;
        if (Ax < 0.0)
          *alpha_start += (180.0);
      }
      if (fabs(Bx) < d_eps) {
        alpha_m = (By > 0.0) ? (90.0) : (-90.0);
      } else {
        alpha_m = atan(By / Bx) * d_r2d;
        if (Bx < 0.0)
          alpha_m += (180.0);
      }
      if (fabs(Cx) < d_eps) {
        *alpha_end = (Cy > 0.0) ? (90.0) : (-90.0);
      } else {
        *alpha_end = atan(Cy / Cx) * d_r2d;
        if (Cx < 0.0)
          *alpha_end += (180.0);
      }
      if (*alpha_start > *alpha_end) {
        if ((alpha_m < *alpha_start) && (alpha_m > *alpha_end)) {
          *Rad = -*Rad;
        }
      } else {
        if ((alpha_m > *alpha_end) || (alpha_m < *alpha_start)) {
          *Rad = -*Rad;
        }
      }
      return;
    }
  } else {
    if ((fabs(Cx_m_Ax) < d_eps) && (fabs(Cy_m_Ay) < d_eps)) {
      *Rad = sqrt(Bx_m_Ax * Bx_m_Ax + By_m_Ay * By_m_Ay) / 2.0;
      if (*Rad < d_eps) {
        *Rad = -1E+5 - 10.0;
        *Ox = Ax - d_eps;
        *Oy = Ay - d_eps;
        *alpha_start = Cx + d_eps;
        *alpha_end = Cy + d_eps;
        return;
      }
      *Ox = Bx_p_Ax / 2.0;
      *Oy = By_p_Ay / 2.0;
      Bx_m_Ax = Ax - *Ox;
      By_m_Ay = Ay - *Oy;
      if (fabs(Bx_m_Ax) < d_eps) {
        *alpha_start = (By_m_Ay > 0.0) ? (90.0) : (-90.0);
      } else {
        *alpha_start = atan(By_m_Ay / Bx_m_Ax) * d_r2d;
        if (Bx_m_Ax < 0.0)
          *alpha_start += (180.0);
      }
      *alpha_end = *alpha_start + 360.0;
      return;
    }
  }
  *Rad = -1E+5 - 10.0;
  *Ox = Ax;
  *Oy = Ay;
  *alpha_start = Cx;
  *alpha_end = Cy;
}
```