user: Converte this assembly snippet into its equivalent C code:

```asm
<Project4_123>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x90,%rsp
  mov    %rdi,-0x68(%rbp)
  mov    %rsi,-0x70(%rbp)
  mov    %rdx,-0x78(%rbp)
  mov    %rcx,-0x80(%rbp)
  mov    %r8,-0x88(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x54(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x50(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x4c(%rbp)
  movl   $0x0,-0x44(%rbp)
  jmp    L10
L47:
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  subss  %xmm1,%xmm0
  mov    -0x44(%rbp),%eax
  cltq
  movss  %xmm0,-0x38(%rbp,%rax,4)
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  subss  %xmm1,%xmm0
  mov    -0x44(%rbp),%eax
  cltq
  movss  %xmm0,-0x2c(%rbp,%rax,4)
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  subss  %xmm1,%xmm0
  mov    -0x44(%rbp),%eax
  cltq
  movss  %xmm0,-0x20(%rbp,%rax,4)
  mov    -0x44(%rbp),%eax
  cltq
  movss  -0x38(%rbp,%rax,4),%xmm1
  mov    -0x44(%rbp),%eax
  cltq
  movss  -0x38(%rbp,%rax,4),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x54(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x54(%rbp)
  mov    -0x44(%rbp),%eax
  cltq
  movss  -0x2c(%rbp,%rax,4),%xmm1
  mov    -0x44(%rbp),%eax
  cltq
  movss  -0x2c(%rbp,%rax,4),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x50(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x50(%rbp)
  mov    -0x44(%rbp),%eax
  cltq
  movss  -0x20(%rbp,%rax,4),%xmm1
  mov    -0x44(%rbp),%eax
  cltq
  movss  -0x20(%rbp,%rax,4),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x4c(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x4c(%rbp)
  addl   $0x1,-0x44(%rbp)
L10:
  cmpl   $0x2,-0x44(%rbp)
  jle    L47
  mov    -0x54(%rbp),%eax
  movd   %eax,%xmm0
  call   <sqrt@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x54(%rbp)
  mov    -0x50(%rbp),%eax
  movd   %eax,%xmm0
  call   <sqrt@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x50(%rbp)
  mov    -0x4c(%rbp),%eax
  movd   %eax,%xmm0
  call   <sqrt@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x4c(%rbp)
  lea    -0x14(%rbp),%rdx
  lea    -0x2c(%rbp),%rcx
  lea    -0x38(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <VectorProduct@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x40(%rbp)
  movl   $0x0,-0x44(%rbp)
  jmp    L1
L7:
  mov    -0x44(%rbp),%eax
  cltq
  movss  -0x14(%rbp,%rax,4),%xmm0
  divss  -0x40(%rbp),%xmm0
  mov    -0x44(%rbp),%eax
  cltq
  movss  %xmm0,-0x14(%rbp,%rax,4)
  addl   $0x1,-0x44(%rbp)
L1:
  cmpl   $0x2,-0x44(%rbp)
  jle    L7
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x48(%rbp)
  movl   $0x0,-0x44(%rbp)
  jmp    L15
L104:
  mov    -0x44(%rbp),%eax
  cltq
  movss  -0x14(%rbp,%rax,4),%xmm1
  mov    -0x44(%rbp),%eax
  cltq
  movss  -0x20(%rbp,%rax,4),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x48(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x48(%rbp)
  addl   $0x1,-0x44(%rbp)
L15:
  cmpl   $0x2,-0x44(%rbp)
  jle    L104
  movss  -0x4c(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x40(%rbp),%xmm1
  movss  -0x48(%rbp),%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x48(%rbp)
  pxor   %xmm0,%xmm0
  comiss -0x48(%rbp),%xmm0
  jbe    L69
  mov    -0x48(%rbp),%eax
  movd   %eax,%xmm0
  call   <fabs@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x48(%rbp)
  movl   $0x0,-0x44(%rbp)
  jmp    L81
L68:
  mov    -0x44(%rbp),%eax
  cltq
  movss  -0x14(%rbp,%rax,4),%xmm0
  movss  D1(%rip),%xmm1
  xorps  %xmm1,%xmm0
  mov    -0x44(%rbp),%eax
  cltq
  movss  %xmm0,-0x14(%rbp,%rax,4)
  addl   $0x1,-0x44(%rbp)
L81:
  cmpl   $0x2,-0x44(%rbp)
  jle    L68
L69:
  movss  -0x4c(%rbp),%xmm0
  mulss  -0x48(%rbp),%xmm0
  movss  %xmm0,-0x3c(%rbp)
  movl   $0x0,-0x44(%rbp)
  jmp    L50
L96:
  mov    -0x44(%rbp),%eax
  cltq
  movss  -0x14(%rbp,%rax,4),%xmm0
  mulss  -0x3c(%rbp),%xmm0
  mov    -0x44(%rbp),%eax
  cltq
  movss  %xmm0,-0x14(%rbp,%rax,4)
  mov    -0x44(%rbp),%eax
  cltq
  movss  -0x20(%rbp,%rax,4),%xmm0
  mov    -0x44(%rbp),%eax
  cltq
  movss  -0x14(%rbp,%rax,4),%xmm2
  movaps %xmm0,%xmm1
  subss  %xmm2,%xmm1
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x44(%rbp)
L50:
  cmpl   $0x2,-0x44(%rbp)
  jle    L96
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L63
  call   <__stack_chk_fail@plt>
L63:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D1
data_type: byte[4]

tool: {"D1": [0x00,0x00,0x00,0x80]}

assistant: ```c
void Project4_123(float *Coord1, float *Coord2, float *Coord3, float *Coord4, float *Coord_Proj4_123) {
  float Vector21[3], Vector23[3], Vector14[3], VectorNormal_123[3];
  float Length_21 = 0.0, Length_23 = 0.0, Length_14 = 0.0, NormalLength;
  float COS_Norm_14, Proj_14_Norm;
  int i;
  for (i = 0; i < 3; i++) {
    Vector21[i] = Coord1[i] - Coord2[i];
    Vector23[i] = Coord3[i] - Coord2[i];
    Vector14[i] = Coord4[i] - Coord1[i];
    Length_21 += Vector21[i] * Vector21[i];
    Length_23 += Vector23[i] * Vector23[i];
    Length_14 += Vector14[i] * Vector14[i];
  }
  Length_21 = sqrt(Length_21);
  Length_23 = sqrt(Length_23);
  Length_14 = sqrt(Length_14);
  NormalLength = VectorProduct(Vector21, Vector23, VectorNormal_123);
  for (i = 0; i < 3; i++)
    VectorNormal_123[i] /= NormalLength;
  COS_Norm_14 = 0.0;
  for (i = 0; i < 3; i++)
    COS_Norm_14 += VectorNormal_123[i] * Vector14[i];
  COS_Norm_14 /= (Length_14 * NormalLength);
  if (COS_Norm_14 < 0.0) {
    COS_Norm_14 = fabs(COS_Norm_14);
    for (i = 0; i < 3; i++)
      VectorNormal_123[i] = -VectorNormal_123[i];
  }
  Proj_14_Norm = Length_14 * COS_Norm_14;
  for (i = 0; i < 3; i++) {
    VectorNormal_123[i] *= Proj_14_Norm;
    Coord_Proj4_123[i] = (Vector14[i] - VectorNormal_123[i]) + Coord1[i];
  }
}
```