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

```asm
<g2_c_para_3>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x828,%rsp
  mov    %edi,0x1c(%rsp)
  mov    %rsi,0x20(%rsp)
  mov    %rcx,%r14
  mov    %fs:0x28,%rax
  mov    %rax,0x818(%rsp)
  xor    %eax,%eax
  lea    0x70(%rsp),%rcx
  lea    0x50(%rsp),%rdx
  mov    $0x4,%edi
  call   <g2_split@plt>
  movq   $0x0,0x30(%rsp)
  mov    $0x0,%ebx
L4:
  movsd  0x58(%rsp,%rbx,1),%xmm0
  subsd  0x50(%rsp,%rbx,1),%xmm0
  movsd  0x78(%rsp,%rbx,1),%xmm1
  subsd  0x70(%rsp,%rbx,1),%xmm1
  mov    0x30(%rsp,%rbx,1),%rbp
  mulsd  %xmm0,%xmm0
  mulsd  %xmm1,%xmm1
  addsd  %xmm1,%xmm0
  pxor   %xmm7,%xmm7
  ucomisd %xmm0,%xmm7
  ja     L57
  sqrtsd %xmm0,%xmm0
L115:
  movq   %rbp,%xmm6
  addsd  %xmm0,%xmm6
  movsd  %xmm6,0x38(%rsp,%rbx,1)
  add    $0x8,%rbx
  cmp    $0x18,%rbx
  jne    L4
  movsd  0x40(%rsp),%xmm1
  divsd  D6(%rip),%xmm1
  mov    $0x0,%eax
L100:
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,0x590(%rsp,%rax,8)
  add    $0x1,%rax
  cmp    $0x50,%rax
  jne    L100
  lea    0x590(%rsp),%rbp
  lea    0x50(%rsp),%rdx
  lea    0x30(%rsp),%rbx
  lea    0x90(%rsp),%r9
  mov    %rbp,%r8
  mov    $0x50,%ecx
  mov    %rbx,%rsi
  mov    $0x4,%edi
  call   <g2_c_newton@plt>
  lea    0x70(%rsp),%rdx
  lea    0x310(%rsp),%r9
  mov    %rbp,%r8
  mov    $0x50,%ecx
  mov    %rbx,%rsi
  mov    $0x4,%edi
  call   <g2_c_newton@plt>
  mov    $0x0,%eax
L15:
  movsd  0x90(%rsp,%rax,1),%xmm0
  movsd  %xmm0,(%r14,%rax,2)
  movsd  0x310(%rsp,%rax,1),%xmm0
  movsd  %xmm0,0x8(%r14,%rax,2)
  add    $0x8,%rax
  cmp    $0x280,%rax
  jne    L15
  mov    0x1c(%rsp),%eax
  cmp    $0x4,%eax
  jle    L26
  mov    0x20(%rsp),%rsi
  lea    0x10(%rsi),%rcx
  mov    %rcx,0x8(%rsp)
  lea    0x500(%r14),%rbx
  lea    -0x5(%rax),%eax
  shl    $0x4,%rax
  lea    0x20(%rsi,%rax,1),%rax
  mov    %rax,0x10(%rsp)
  lea    0x70(%rsp),%rax
  lea    0x50(%rsp),%r15
  lea    0x90(%rsp),%r12
  lea    0x310(%rsp),%rbp
  mov    %r14,0x28(%rsp)
  mov    %rax,%r14
  jmp    L121
L57:
  call   <sqrt@plt>
  jmp    L115
L0:
  call   <sqrt@plt>
  jmp    L62
L124:
  movsd  0x38(%rsp),%xmm2
  movsd  0x40(%rsp),%xmm1
  subsd  %xmm2,%xmm1
  divsd  D1(%rip),%xmm1
  mov    $0x0,%eax
L93:
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  %xmm1,%xmm0
  addsd  %xmm2,%xmm0
  movsd  %xmm0,0x590(%rsp,%rax,8)
  add    $0x1,%rax
  cmp    $0x28,%rax
  jne    L93
  lea    0x590(%rsp),%r13
  lea    0x30(%rsp),%rax
  mov    %r12,%r9
  mov    %r13,%r8
  mov    $0x28,%ecx
  mov    %r15,%rdx
  mov    %rax,(%rsp)
  mov    %rax,%rsi
  mov    $0x4,%edi
  call   <g2_c_newton@plt>
  mov    %rbp,%r9
  mov    %r13,%r8
  mov    $0x28,%ecx
  mov    %r14,%rdx
  mov    (%rsp),%rsi
  mov    $0x4,%edi
  call   <g2_c_newton@plt>
  mov    $0x0,%eax
L154:
  movsd  (%rax,%r12,1),%xmm0
  movsd  %xmm0,(%rbx,%rax,2)
  movsd  (%rax,%rbp,1),%xmm0
  movsd  %xmm0,0x8(%rbx,%rax,2)
  add    $0x8,%rax
  cmp    $0x140,%rax
  jne    L154
  addq   $0x10,0x8(%rsp)
  mov    0x8(%rsp),%rax
  add    $0x280,%rbx
  cmp    0x10(%rsp),%rax
  je     L65
L121:
  mov    %r14,%rcx
  mov    %r15,%rdx
  mov    0x8(%rsp),%rsi
  mov    $0x4,%edi
  call   <g2_split@plt>
  mov    $0x0,%r13d
L83:
  movsd  0x58(%rsp,%r13,1),%xmm0
  subsd  0x0(%r13,%r15,1),%xmm0
  movsd  0x78(%rsp,%r13,1),%xmm1
  subsd  0x0(%r13,%r14,1),%xmm1
  movsd  0x30(%rsp,%r13,1),%xmm3
  movsd  %xmm3,(%rsp)
  mulsd  %xmm0,%xmm0
  mulsd  %xmm1,%xmm1
  addsd  %xmm1,%xmm0
  pxor   %xmm4,%xmm4
  ucomisd %xmm0,%xmm4
  ja     L0
  sqrtsd %xmm0,%xmm0
L62:
  addsd  (%rsp),%xmm0
  movsd  %xmm0,0x38(%rsp,%r13,1)
  add    $0x8,%r13
  cmp    $0x18,%r13
  jne    L83
  jmp    L124
L65:
  mov    0x28(%rsp),%r14
L26:
  movsd  0x40(%rsp),%xmm2
  movsd  0x48(%rsp),%xmm1
  subsd  %xmm2,%xmm1
  divsd  D1(%rip),%xmm1
  mov    $0x0,%eax
L142:
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  %xmm1,%xmm0
  addsd  %xmm2,%xmm0
  movsd  %xmm0,0x590(%rsp,%rax,8)
  add    $0x1,%rax
  cmp    $0x28,%rax
  jne    L142
  lea    0x590(%rsp),%rbp
  lea    0x50(%rsp),%rdx
  lea    0x30(%rsp),%rbx
  lea    0x90(%rsp),%r9
  mov    %rbp,%r8
  mov    $0x28,%ecx
  mov    %rbx,%rsi
  mov    $0x4,%edi
  call   <g2_c_newton@plt>
  lea    0x70(%rsp),%rdx
  lea    0x310(%rsp),%r9
  mov    %rbp,%r8
  mov    $0x28,%ecx
  mov    %rbx,%rsi
  mov    $0x4,%edi
  call   <g2_c_newton@plt>
  mov    0x1c(%rsp),%eax
  lea    -0xa(%rax,%rax,4),%ecx
  shl    $0x4,%ecx
  movslq %ecx,%rsi
  shl    $0x3,%rsi
  lea    (%r14,%rsi,1),%rdx
  mov    $0x0,%eax
L118:
  movsd  0x90(%rsp,%rax,1),%xmm0
  movsd  %xmm0,(%rdx,%rax,2)
  movsd  0x310(%rsp,%rax,1),%xmm0
  movsd  %xmm0,0x8(%rdx,%rax,2)
  add    $0x8,%rax
  cmp    $0x140,%rax
  jne    L118
  mov    0x1c(%rsp),%eax
  add    %eax,%eax
  cltq
  shl    $0x3,%rax
  mov    0x20(%rsp),%rdi
  movsd  -0x10(%rdi,%rax,1),%xmm0
  movsd  %xmm0,0x280(%r14,%rsi,1)
  movsd  -0x8(%rdi,%rax,1),%xmm0
  movslq %ecx,%rcx
  movsd  %xmm0,0x288(%r14,%rcx,8)
  mov    0x818(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L120
  add    $0x828,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L120:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_tag: D6
type: f32[2]
name: unpack_data
arguments: data_tag: D1
type: f32[2]

tool: {"D6": [0.0,3.3125]}

tool: {"D1": [0.0,3.0625]}

assistant: ```c
void g2_c_para_3(int n, const double *points, int m, double *sxy) {
  int i, j;
  double x1t, y1t;
  double o, step;
  double X[(40 * 2)];
  double Y[(40 * 2)];
  double t[(3 + 1)];
  double Xpts[(3 + 1)];
  double Ypts[(3 + 1)];
  double s[(40 * 2)];
  m = m;
  g2_split((3 + 1), points, Xpts, Ypts);
  t[0] = 0.;
  for (i = 1; i < (3 + 1); i++) {
    x1t = Xpts[i] - Xpts[i - 1];
    y1t = Ypts[i] - Ypts[i - 1];
    t[i] = t[i - 1] + sqrt(x1t * x1t + y1t * y1t);
  }
  step = t[2] / (40 * 2);
  for (i = 0; i < (40 * 2); i++)
    s[i] = i * step;
  g2_c_newton((3 + 1), t, Xpts, (40 * 2), s, X);
  g2_c_newton((3 + 1), t, Ypts, (40 * 2), s, Y);
  for (i = 0; i < (40 * 2); i++) {
    sxy[i + i] = X[i];
    sxy[i + i + 1] = Y[i];
  }
  for (j = 1; j < n - (3 + 1) + 1; j++) {
    g2_split((3 + 1), points + j + j, Xpts, Ypts);
    for (i = 1; i < (3 + 1); i++) {
      x1t = Xpts[i] - Xpts[i - 1];
      y1t = Ypts[i] - Ypts[i - 1];
      t[i] = t[i - 1] + sqrt(x1t * x1t + y1t * y1t);
    }
    o = t[1];
    step = (t[2] - o) / 40;
    for (i = 0; i < 40; i++)
      s[i] = i * step + o;
    g2_c_newton((3 + 1), t, Xpts, 40, s, X);
    g2_c_newton((3 + 1), t, Ypts, 40, s, Y);
    for (i = 0; i < 40; i++) {
      sxy[(j + 1) * (40 * 2) + i + i] = X[i];
      sxy[(j + 1) * (40 * 2) + i + i + 1] = Y[i];
    }
  }
  o = t[2];
  step = (t[3] - o) / 40;
  for (i = 0; i < 40; i++)
    s[i] = i * step + o;
  g2_c_newton((3 + 1), t, Xpts, 40, s, X);
  g2_c_newton((3 + 1), t, Ypts, 40, s, Y);
  for (i = 0; i < 40; i++) {
    sxy[(n - (3 + 1) + 2) * (40 * 2) + i + i] = X[i];
    sxy[(n - (3 + 1) + 2) * (40 * 2) + i + i + 1] = Y[i];
  }
  sxy[(n - 1) * (40 * 2)] = points[n + n - 2];
  sxy[(n - 1) * (40 * 2) + 1] = points[n + n - 1];
}
```