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

```asm
<main>:
  endbr64
  push   %rbp
  mov    $0x32,%ecx
  push   %rbx
  sub    $0x338,%rsp
  movdqa D2(%rip),%xmm0
  movdqa D19(%rip),%xmm2
  mov    %fs:0x28,%rax
  mov    %rax,0x328(%rsp)
  xor    %eax,%eax
  mov    %rsp,%r8
  mov    $0xffffffffffffffff,%rax
  lea    0x190(%rsp),%rdx
  mov    %r8,%rdi
  movdqa %xmm0,%xmm1
  rep stos %rax,%es:(%rdi)
  mov    $0x32,%ecx
  mov    %rdx,%rdi
  rep stos %rax,%es:(%rdi)
  mov    %r8,%rax
  nop
L48:
  movdqa %xmm1,%xmm3
  add    $0x10,%rax
  paddd  %xmm2,%xmm1
  movaps %xmm3,-0x10(%rax)
  cmp    %rax,%rdx
  jne    L48
  mov    %rdx,%rax
  lea    0x320(%rsp),%rcx
L86:
  movdqa %xmm0,%xmm1
  add    $0x10,%rax
  paddd  %xmm2,%xmm0
  movaps %xmm1,-0x10(%rax)
  cmp    %rcx,%rax
  jne    L86
  xor    %eax,%eax
  mov    $0xffffffff,%ebp
  mov    $0xffffffff,%esi
  xor    %ebx,%ebx
  nopl   0x0(%rax,%rax,1)
L67:
  mov    (%r8,%rax,4),%edi
  cmp    %edi,(%rdx,%rax,4)
  je     L44
  cmp    $0xffffffff,%esi
  mov    %eax,%ebp
  cmove  %eax,%esi
  add    $0x1,%ebx
L44:
  add    $0x1,%rax
  cmp    $0x64,%rax
  jne    L67
  test   %ebx,%ebx
  je     L66
  movslq %esi,%rax
  mov    0x190(%rsp,%rax,4),%ecx
  mov    (%rsp,%rax,4),%edx
  cmp    $0x1,%ebx
  je     L42
  mov    %ebx,%r8d
  lea    D14(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  movslq %ebp,%rax
  mov    %ebx,%r8d
  mov    %ebp,%esi
  mov    0x190(%rsp,%rax,4),%ecx
  mov    (%rsp,%rax,4),%edx
  xor    %eax,%eax
  lea    D10(%rip),%rdi
  call   <printf@plt>
L11:
  mov    0x328(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L68
  add    $0x338,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  ret
L66:
  xor    %esi,%esi
  lea    D36(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L11
L42:
  lea    D43(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L11
L68:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: label: D2
datatype: byte[16]
name: read_data
arguments: label: D19
datatype: byte[16]
name: read_data
arguments: label: D14
datatype: string
name: read_data
arguments: label: D10
datatype: string
name: read_data
arguments: label: D36
datatype: string
name: read_data
arguments: label: D43
datatype: string

tool: {"D2": [0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00]}

tool: {"D19": [0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00]}

tool: D14: first mismatch: [index:%d]: a %d != %d (total errors: %d)


tool: D10: last mismatch: [index:%d]: a %d != %d (total errors %d)


tool: D36: Done with %d errors


tool: D43: one mismatch: [index:%d]: a %d != %d


assistant: ```c
int main() {
  int a[100], aa[100];
  int i, error = 0;
  for (i = 0; i < 100; i++)
    aa[i] = a[i] = -1;
#pragma omp target map(tofrom : a [0:100])
  {
    int k;
#pragma omp simd
    for (k = 0; k < 100; k++)
      a[k] = k;
  }
  for (i = 0; i < 100; i++)
    aa[i] = i;
  int first = -1;
  int last = -1;
  for (i = 0; i < 100; i++) {
    if (a[i] != aa[i]) {
      if (first == -1)
        first = i;
      last = i;
      ++error;
    }
  }
  if (error) {
    if (error == 1)
      printf("one mismatch: [index:%d]: a %d != %d\n", first, a[first], aa[first]);
    else {
      printf("first mismatch: [index:%d]: a %d != %d (total errors: %d)\n", first, a[first], aa[first], error);
      printf("last mismatch: [index:%d]: a %d != %d (total errors %d)\n", last, a[last], aa[last], error);
    }
    return 0;
  }
  printf("Done with %d errors\n", error);
  return error;
}
```