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

```asm
<main>:
  endbr64
  push   %r13
  xor    %edi,%edi
  push   %r12
  push   %rbp
  sub    $0x10,%rsp
  call   <time@plt>
  mov    %eax,%edi
  call   <srand@plt>
  mov    $0xf4240,%edi
  call   <malloc@plt>
  mov    $0xf4240,%edi
  mov    %rax,%r13
  call   <malloc@plt>
  mov    $0xf4240,%edi
  mov    %rax,%r12
  call   <malloc@plt>
  mov    $0xa,%edi
  mov    %rax,%rbp
  call   <putchar@plt>
  mov    %rbp,%rcx
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    $0x64,%r8d
  mov    $0x1f4,%edi
  call   <randomMatrix@plt>
  xor    %eax,%eax
  call   <get_cur_time@plt>
  mov    %rbp,%rcx
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    $0x64,%r8d
  mov    $0x1f4,%edi
  movsd  %xmm0,0x8(%rsp)
  call   <matmatijk@plt>
  xor    %eax,%eax
  call   <get_cur_time@plt>
  subsd  0x8(%rsp),%xmm0
  mov    $0x1,%eax
  lea    D52(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <get_cur_time@plt>
  mov    %rbp,%rcx
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    $0x64,%r8d
  mov    $0x1f4,%edi
  movsd  %xmm0,0x8(%rsp)
  call   <matmatjik@plt>
  xor    %eax,%eax
  call   <get_cur_time@plt>
  subsd  0x8(%rsp),%xmm0
  mov    $0x1,%eax
  lea    D36(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <get_cur_time@plt>
  mov    %rbp,%rcx
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    $0x64,%r8d
  mov    $0x1f4,%edi
  movsd  %xmm0,0x8(%rsp)
  call   <matmatikj@plt>
  xor    %eax,%eax
  call   <get_cur_time@plt>
  subsd  0x8(%rsp),%xmm0
  mov    $0x1,%eax
  lea    D31(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <get_cur_time@plt>
  mov    %rbp,%rcx
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    $0x64,%r8d
  mov    $0x1f4,%edi
  movsd  %xmm0,0x8(%rsp)
  call   <matmatjki@plt>
  xor    %eax,%eax
  call   <get_cur_time@plt>
  subsd  0x8(%rsp),%xmm0
  mov    $0x1,%eax
  lea    D25(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <get_cur_time@plt>
  mov    %rbp,%rcx
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    $0x64,%r8d
  mov    $0x1f4,%edi
  movsd  %xmm0,0x8(%rsp)
  call   <matmatkij@plt>
  xor    %eax,%eax
  call   <get_cur_time@plt>
  subsd  0x8(%rsp),%xmm0
  mov    $0x1,%eax
  lea    D28(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <get_cur_time@plt>
  mov    %rbp,%rcx
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    $0x64,%r8d
  mov    $0x1f4,%edi
  movsd  %xmm0,0x8(%rsp)
  call   <matmatkji@plt>
  xor    %eax,%eax
  call   <get_cur_time@plt>
  subsd  0x8(%rsp),%xmm0
  mov    $0x1,%eax
  lea    D48(%rip),%rdi
  call   <printf@plt>
  mov    %r13,%rdi
  call   <free@plt>
  mov    %r12,%rdi
  call   <free@plt>
  mov    %rbp,%rdi
  call   <free@plt>
  add    $0x10,%rsp
  xor    %eax,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
```

tool_calls: name: read_data
arguments: tag: D52
type_infered: string
name: read_data
arguments: tag: D36
type_infered: string
name: read_data
arguments: tag: D31
type_infered: string
name: read_data
arguments: tag: D25
type_infered: string
name: read_data
arguments: tag: D28
type_infered: string
name: read_data
arguments: tag: D48
type_infered: string

tool: D52: IJK - Elapsed time: %lfs


tool: D36: JIK - Elapsed time: %lfs


tool: D31: IKJ - Elapsed time: %lfs


tool: D25: JKI - Elapsed time: %lfs


tool: D28: KIJ - Elapsed time: %lfs


tool: D48: KJI - Elapsed time: %lfs


assistant: ```c
int main(int argc, const char *argv[]) {
  srand((unsigned int)time(NULL));
  int LD = 500, N = 100;
  float **A = NULL, **B = NULL, **C = NULL;
  double inizio, fine;
  A = (float **)malloc(LD * LD * sizeof(float));
  B = (float **)malloc(LD * LD * sizeof(float));
  C = (float **)malloc(LD * LD * sizeof(float));
  printf("\n");
  randomMatrix(LD, (float(*)[LD])A, (float(*)[LD])B, (float(*)[LD])C, N);
  inizio = get_cur_time();
  matmatijk(LD, (float(*)[LD])A, (float(*)[LD])B, (float(*)[LD])C, N);
  fine = get_cur_time();
  printf("IJK - Elapsed time: %lfs\n", fine - inizio);
  inizio = get_cur_time();
  matmatjik(LD, (float(*)[LD])A, (float(*)[LD])B, (float(*)[LD])C, N);
  fine = get_cur_time();
  printf("JIK - Elapsed time: %lfs\n", fine - inizio);
  inizio = get_cur_time();
  matmatikj(LD, (float(*)[LD])A, (float(*)[LD])B, (float(*)[LD])C, N);
  fine = get_cur_time();
  printf("IKJ - Elapsed time: %lfs\n", fine - inizio);
  inizio = get_cur_time();
  matmatjki(LD, (float(*)[LD])A, (float(*)[LD])B, (float(*)[LD])C, N);
  fine = get_cur_time();
  printf("JKI - Elapsed time: %lfs\n", fine - inizio);
  inizio = get_cur_time();
  matmatkij(LD, (float(*)[LD])A, (float(*)[LD])B, (float(*)[LD])C, N);
  fine = get_cur_time();
  printf("KIJ - Elapsed time: %lfs\n", fine - inizio);
  inizio = get_cur_time();
  matmatkji(LD, (float(*)[LD])A, (float(*)[LD])B, (float(*)[LD])C, N);
  fine = get_cur_time();
  printf("KJI - Elapsed time: %lfs\n", fine - inizio);
  free(A);
  free(B);
  free(C);
  return 0;
}
```