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

```asm
<solvePDE>:
  endbr64
  push   %r15
  pxor   %xmm0,%xmm0
  push   %r14
  push   %r13
  push   %r12
  lea    D92(%rip),%r12
  push   %rbp
  mov    %rsi,%rbp
  mov    %r12,%rsi
  push   %rbx
  sub    $0xf8,%rsp
  mov    %rdx,0x48(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0xe8(%rsp)
  xor    %eax,%eax
  mov    D84(%rip),%rax
  movaps %xmm0,0x70(%rsp)
  movaps %xmm0,0x80(%rsp)
  movaps %xmm0,0x90(%rsp)
  movaps %xmm0,0xa0(%rsp)
  movaps %xmm0,0xb0(%rsp)
  movaps %xmm0,0xc0(%rsp)
  movaps %xmm0,0xd0(%rsp)
  movups %xmm0,0x58(%rsp)
  movq   $0x0,0xe0(%rsp)
  mov    %rax,0x50(%rsp)
  call   <fopen@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  mov    %rax,%r15
  mov    %rax,0x30(%rsp)
  call   <fopen@plt>
  mov    %rax,%rdi
  mov    %rax,%r14
  mov    %rax,0x38(%rsp)
  call   <lineCount@plt>
  mov    %r15,%rdi
  mov    %eax,%ebx
  call   <lineCount@plt>
  mov    %eax,%ebp
  xor    %eax,%eax
  call   <omp_get_wtime@plt>
  mov    %r15,%rdi
  movsd  %xmm0,(%rsp)
  call   <lineCount@plt>
  mov    $0x2,%edx
  mov    %r15,%rdi
  mov    %eax,%esi
  call   <readMatrixFile@plt>
  mov    %r14,%rdi
  mov    %rax,%r13
  call   <lineCount@plt>
  mov    $0x3,%edx
  mov    %r14,%rdi
  mov    %eax,%esi
  call   <readMatrixFile@plt>
  mov    %rax,0x40(%rsp)
  mov    %rax,%r12
  xor    %eax,%eax
  call   <omp_get_wtime@plt>
  xor    %eax,%eax
  movapd %xmm0,%xmm7
  subsd  (%rsp),%xmm7
  movsd  %xmm7,0x18(%rsp)
  call   <omp_get_wtime@plt>
  mov    %ebp,%edi
  imul   %ebp,%edi
  movsd  %xmm0,(%rsp)
  call   <zeros@plt>
  mov    %ebp,%edi
  mov    %rax,%r15
  call   <zeros@plt>
  mov    %rax,%r14
  xor    %eax,%eax
  call   <omp_get_wtime@plt>
  xor    %eax,%eax
  movapd %xmm0,%xmm1
  subsd  (%rsp),%xmm1
  movsd  %xmm1,0x20(%rsp)
  call   <omp_get_wtime@plt>
  movsd  %xmm0,0x28(%rsp)
  test   %ebx,%ebx
  jle    L6
  lea    -0x1(%rbx),%eax
  lea    0x70(%rsp),%rbx
  lea    (%rax,%rax,2),%rax
  lea    0x18(%r12,%rax,8),%rax
  mov    %rax,(%rsp)
  lea    0xa0(%rsp),%rax
  mov    %rax,0x8(%rsp)
  lea    0x50(%rsp),%rax
  mov    %rax,0x10(%rsp)
  nopl   0x0(%rax)
L4:
  cvttsd2si (%r12),%eax
  mov    0x8(%rsp),%rsi
  mov    %rbx,%rdi
  add    $0x18,%r12
  lea    -0x2(%rax,%rax,1),%eax
  cltq
  movsd  0x0(%r13,%rax,8),%xmm0
  movsd  %xmm0,0x70(%rsp)
  movsd  0x8(%r13,%rax,8),%xmm0
  movsd  %xmm0,0x78(%rsp)
  cvttsd2si -0x10(%r12),%eax
  lea    -0x2(%rax,%rax,1),%eax
  cltq
  movsd  0x0(%r13,%rax,8),%xmm0
  movsd  %xmm0,0x80(%rsp)
  movsd  0x8(%r13,%rax,8),%xmm0
  movsd  %xmm0,0x88(%rsp)
  cvttsd2si -0x8(%r12),%eax
  lea    -0x2(%rax,%rax,1),%eax
  cltq
  movsd  0x0(%r13,%rax,8),%xmm0
  movsd  %xmm0,0x90(%rsp)
  movsd  0x8(%r13,%rax,8),%xmm0
  movsd  %xmm0,0x98(%rsp)
  call   <localStiffnessMatrix@plt>
  mov    D27(%rip),%rax
  mov    0x10(%rsp),%rsi
  mov    %rbx,%rdi
  movq   %rax,%xmm0
  call   <localVector@plt>
  cvttsd2si -0x18(%r12),%eax
  sub    $0x1,%eax
  movslq %eax,%rsi
  imul   %ebp,%eax
  lea    (%r14,%rsi,8),%rsi
  movsd  (%rsi),%xmm0
  addsd  0x50(%rsp),%xmm0
  cltq
  movsd  %xmm0,(%rsi)
  cvttsd2si -0x18(%r12),%esi
  sub    $0x1,%esi
  movslq %esi,%rsi
  add    %rax,%rsi
  lea    (%r15,%rsi,8),%rsi
  movsd  (%rsi),%xmm0
  addsd  0xa0(%rsp),%xmm0
  movsd  %xmm0,(%rsi)
  cvttsd2si -0x10(%r12),%esi
  sub    $0x1,%esi
  movslq %esi,%rsi
  add    %rax,%rsi
  lea    (%r15,%rsi,8),%rsi
  movsd  (%rsi),%xmm0
  addsd  0xa8(%rsp),%xmm0
  movsd  %xmm0,(%rsi)
  cvttsd2si -0x8(%r12),%esi
  sub    $0x1,%esi
  movslq %esi,%rsi
  add    %rsi,%rax
  lea    (%r15,%rax,8),%rax
  movsd  (%rax),%xmm0
  addsd  0xb0(%rsp),%xmm0
  movsd  %xmm0,(%rax)
  cvttsd2si -0x10(%r12),%eax
  sub    $0x1,%eax
  movslq %eax,%rsi
  imul   %ebp,%eax
  lea    (%r14,%rsi,8),%rsi
  movsd  (%rsi),%xmm0
  addsd  0x58(%rsp),%xmm0
  cltq
  movsd  %xmm0,(%rsi)
  cvttsd2si -0x18(%r12),%esi
  sub    $0x1,%esi
  movslq %esi,%rsi
  add    %rax,%rsi
  lea    (%r15,%rsi,8),%rsi
  movsd  (%rsi),%xmm0
  addsd  0xb8(%rsp),%xmm0
  movsd  %xmm0,(%rsi)
  cvttsd2si -0x10(%r12),%esi
  sub    $0x1,%esi
  movslq %esi,%rsi
  add    %rax,%rsi
  lea    (%r15,%rsi,8),%rsi
  movsd  (%rsi),%xmm0
  addsd  0xc0(%rsp),%xmm0
  movsd  %xmm0,(%rsi)
  cvttsd2si -0x8(%r12),%esi
  sub    $0x1,%esi
  movslq %esi,%rsi
  add    %rsi,%rax
  lea    (%r15,%rax,8),%rax
  movsd  (%rax),%xmm0
  addsd  0xc8(%rsp),%xmm0
  movsd  %xmm0,(%rax)
  cvttsd2si -0x8(%r12),%eax
  sub    $0x1,%eax
  movslq %eax,%rsi
  imul   %ebp,%eax
  lea    (%r14,%rsi,8),%rsi
  movsd  (%rsi),%xmm0
  addsd  0x60(%rsp),%xmm0
  cltq
  movsd  %xmm0,(%rsi)
  cvttsd2si -0x18(%r12),%esi
  sub    $0x1,%esi
  movslq %esi,%rsi
  add    %rax,%rsi
  lea    (%r15,%rsi,8),%rsi
  movsd  (%rsi),%xmm0
  addsd  0xd0(%rsp),%xmm0
  movsd  %xmm0,(%rsi)
  cvttsd2si -0x10(%r12),%esi
  sub    $0x1,%esi
  movslq %esi,%rsi
  add    %rax,%rsi
  lea    (%r15,%rsi,8),%rsi
  movsd  (%rsi),%xmm0
  addsd  0xd8(%rsp),%xmm0
  movsd  %xmm0,(%rsi)
  cvttsd2si -0x8(%r12),%esi
  sub    $0x1,%esi
  movslq %esi,%rsi
  add    %rsi,%rax
  lea    (%r15,%rax,8),%rax
  movsd  (%rax),%xmm0
  addsd  0xe0(%rsp),%xmm0
  movsd  %xmm0,(%rax)
  cmp    %r12,(%rsp)
  jne    L4
L6:
  xor    %eax,%eax
  call   <omp_get_wtime@plt>
  xor    %eax,%eax
  movapd %xmm0,%xmm3
  subsd  0x28(%rsp),%xmm3
  movsd  %xmm3,0x10(%rsp)
  call   <omp_get_wtime@plt>
  mov    %r14,%rcx
  mov    %r15,%rdx
  mov    %r13,%rsi
  mov    D84(%rip),%rax
  mov    %ebp,%edi
  movsd  %xmm0,(%rsp)
  movq   %rax,%xmm0
  call   <assignDirichletCondition@plt>
  xor    %eax,%eax
  call   <omp_get_wtime@plt>
  xor    %eax,%eax
  movapd %xmm0,%xmm4
  subsd  (%rsp),%xmm4
  movsd  %xmm4,0x8(%rsp)
  call   <omp_get_wtime@plt>
  mov    %r14,%rdx
  mov    %r15,%rsi
  mov    %ebp,%edi
  movsd  %xmm0,(%rsp)
  call   <backSubstitution@plt>
  mov    %rax,%r12
  xor    %eax,%eax
  call   <omp_get_wtime@plt>
  xor    %eax,%eax
  movapd %xmm0,%xmm5
  subsd  (%rsp),%xmm5
  movsd  %xmm5,(%rsp)
  call   <omp_get_wtime@plt>
  lea    D80(%rip),%rdi
  movapd %xmm0,%xmm6
  subsd  0x28(%rsp),%xmm6
  movapd %xmm6,%xmm0
  movsd  %xmm6,0x28(%rsp)
  call   <printf@plt>
  movsd  0x18(%rsp),%xmm0
  lea    D29(%rip),%rdi
  call   <printf@plt>
  movsd  0x20(%rsp),%xmm0
  lea    D43(%rip),%rdi
  call   <printf@plt>
  movsd  0x10(%rsp),%xmm3
  lea    D25(%rip),%rdi
  movapd %xmm3,%xmm0
  call   <printf@plt>
  movsd  0x8(%rsp),%xmm4
  lea    D83(%rip),%rdi
  movapd %xmm4,%xmm0
  call   <printf@plt>
  movsd  (%rsp),%xmm5
  lea    D39(%rip),%rdi
  movapd %xmm5,%xmm0
  call   <printf@plt>
  movsd  0x28(%rsp),%xmm6
  movsd  (%rsp),%xmm5
  lea    D21(%rip),%rsi
  movsd  0x8(%rsp),%xmm4
  movsd  0x10(%rsp),%xmm3
  movsd  0x20(%rsp),%xmm2
  movsd  0x18(%rsp),%xmm1
  movapd %xmm6,%xmm0
  mov    0x48(%rsp),%rdi
  call   <fprintf@plt>
  mov    0x30(%rsp),%rdi
  call   <free@plt>
  mov    0x38(%rsp),%rdi
  call   <free@plt>
  mov    %r13,%rdi
  call   <free@plt>
  mov    0x40(%rsp),%rdi
  call   <free@plt>
  mov    %r15,%rdi
  call   <free@plt>
  mov    %r14,%rdi
  call   <free@plt>
  mov    %r12,%rdi
  call   <free@plt>
  mov    0xe8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L5
  add    $0xf8,%rsp
  mov    %r12,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L5:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D92
data_type: string
name: extract_symbolic_data
arguments: data_label: D84
data_type: f64
name: extract_symbolic_data
arguments: data_label: D27
data_type: byte[8]
name: extract_symbolic_data
arguments: data_label: D80
data_type: string
name: extract_symbolic_data
arguments: data_label: D29
data_type: string
name: extract_symbolic_data
arguments: data_label: D43
data_type: string
name: extract_symbolic_data
arguments: data_label: D25
data_type: string
name: extract_symbolic_data
arguments: data_label: D83
data_type: string
name: extract_symbolic_data
arguments: data_label: D39
data_type: string
name: extract_symbolic_data
arguments: data_label: D21
data_type: string

tool: D92: r

tool: D84: 1

tool: {"D27": [0x00,0x00,0x00,0x00,0x00,0x00,0x10,0xc0]}

tool: D80: Elapsed time for computation: %lf seconds.


tool: D29: Elapsed time for IO: %lf seconds.


tool: D43: Elapsed time for zeros: %lf seconds.


tool: D25: Elapsed time for assembling: %lf seconds.


tool: D83: Elapsed time for dirichlet: %lf seconds.


tool: D39: Elapsed time for system: %lf seconds.


tool: D21: %lf, %lf, %lf, %lf, %lf, %lf


assistant: ```c
double *solvePDE(char fileP[], char fileT[], FILE *result) {
  int vertexSize, globalVertex2, globalVertex, meshSize;
  int tri = 0, i = 0, j = 0;
  double f = -4, g = 1;
  double vertices[3][2] = {{0}};
  double localW[3][3] = {{0}};
  double localB[3] = {1};
  FILE *meshFile = fopen(fileP, "r");
  FILE *vertexFile = fopen(fileT, "r");
  vertexSize = lineCount(vertexFile);
  meshSize = lineCount(meshFile);
  double startIO = omp_get_wtime();
  double *meshPoints = readMatrixFile(meshFile, lineCount(meshFile), 2);
  double *vertexNumbers = readMatrixFile(vertexFile, lineCount(vertexFile), 3);
  double ioTime = omp_get_wtime() - startIO;
  double startZeros = omp_get_wtime();
  double *w = zeros(meshSize * meshSize);
  double *b = zeros(meshSize);
  double zerosTime = omp_get_wtime() - startZeros;
  double startComputation = omp_get_wtime();
  for (tri = 0; tri < vertexSize; tri++) {
    for (i = 0; i < 3; i++) {
      globalVertex = (int)*(vertexNumbers + tri * 3 + i) - 1;
      vertices[i][0] = *(meshPoints + globalVertex * 2 + 0);
      vertices[i][1] = *(meshPoints + globalVertex * 2 + 1);
    }
    localStiffnessMatrix(vertices, localW);
    localVector(vertices, f, localB);
    for (i = 0; i < 3; i++) {
      globalVertex = (int)*(vertexNumbers + tri * 3 + i) - 1;
      b[globalVertex] += localB[i];
      for (j = 0; j < 3; j++) {
        globalVertex2 = (int)*(vertexNumbers + tri * 3 + j) - 1;
        *(w + globalVertex * meshSize + globalVertex2) += localW[i][j];
      }
    }
  }
  double assemblingTime = omp_get_wtime() - startComputation;
  double startDirichlet = omp_get_wtime();
  assignDirichletCondition(meshSize, g, meshPoints, w, b);
  double dirichletTime = omp_get_wtime() - startDirichlet;
  double startSys = omp_get_wtime();
  double *u = backSubstitution(meshSize, w, b);
  double sysTime = omp_get_wtime() - startSys;
  double computationTime = omp_get_wtime() - startComputation;
  printf("Elapsed time for computation: %lf seconds.\n", computationTime);
  printf("Elapsed time for IO: %lf seconds.\n", ioTime);
  printf("Elapsed time for zeros: %lf seconds.\n", zerosTime);
  printf("Elapsed time for assembling: %lf seconds.\n", assemblingTime);
  printf("Elapsed time for dirichlet: %lf seconds.\n", dirichletTime);
  printf("Elapsed time for system: %lf seconds.\n", sysTime);
  fprintf(result, "%lf, %lf, %lf, %lf, %lf, %lf\n", computationTime, ioTime, zerosTime, assemblingTime, dirichletTime, sysTime);
  free(meshFile);
  free(vertexFile);
  free(meshPoints);
  free(vertexNumbers);
  free(w);
  free(b);
  free(u);
  return u;
}
```