user: Translate the below assembly code into C programming language:

```asm
<floydWarshall>:
  endbr64
  sub    $0x58,%rsp
  movdqu 0x30(%rdi),%xmm0
  movdqu (%rdi),%xmm1
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
  movdqu 0x10(%rdi),%xmm2
  movdqu 0x20(%rdi),%xmm3
  mov    %rsp,%r9
  movaps %xmm0,0x30(%rsp)
  pshufd $0xff,%xmm0,%xmm0
  mov    %r9,%rdx
  mov    %r9,%rax
  movaps %xmm1,(%rsp)
  movd   %xmm0,%esi
  lea    0x40(%rsp),%r8
  movaps %xmm2,0x10(%rsp)
  movaps %xmm3,0x20(%rsp)
L82:
  mov    (%rdx),%ecx
  mov    (%rax),%edi
  add    %ecx,%edi
  cmp    %edi,(%rsp)
  jle    L123
  mov    %edi,(%rsp)
  mov    (%rdx),%ecx
L123:
  mov    0x4(%rax),%edi
  add    %ecx,%edi
  cmp    %edi,0x4(%rsp)
  jle    L145
  mov    %edi,0x4(%rsp)
  mov    (%rdx),%ecx
L145:
  mov    0x8(%rax),%edi
  add    %ecx,%edi
  cmp    0x8(%rsp),%edi
  jge    L50
  mov    %edi,0x8(%rsp)
  mov    (%rdx),%ecx
L50:
  add    0xc(%rax),%ecx
  cmp    0xc(%rsp),%ecx
  jge    L53
  mov    %ecx,0xc(%rsp)
L53:
  mov    0x10(%rdx),%ecx
  mov    (%rax),%edi
  add    %ecx,%edi
  cmp    %edi,0x10(%rsp)
  jle    L47
  mov    %edi,0x10(%rsp)
  mov    0x10(%rdx),%ecx
L47:
  mov    0x4(%rax),%edi
  add    %ecx,%edi
  cmp    0x14(%rsp),%edi
  jge    L6
  mov    %edi,0x14(%rsp)
  mov    0x10(%rdx),%ecx
L6:
  mov    0x8(%rax),%edi
  add    %ecx,%edi
  cmp    0x18(%rsp),%edi
  jge    L173
  mov    %edi,0x18(%rsp)
  mov    0x10(%rdx),%ecx
L173:
  add    0xc(%rax),%ecx
  cmp    0x1c(%rsp),%ecx
  jge    L135
  mov    %ecx,0x1c(%rsp)
L135:
  mov    0x20(%rdx),%ecx
  mov    (%rax),%edi
  add    %ecx,%edi
  cmp    0x20(%rsp),%edi
  jge    L13
  mov    %edi,0x20(%rsp)
  mov    0x20(%rdx),%ecx
L13:
  mov    0x4(%rax),%edi
  add    %ecx,%edi
  cmp    0x24(%rsp),%edi
  jge    L1
  mov    %edi,0x24(%rsp)
  mov    0x20(%rdx),%ecx
L1:
  mov    0x8(%rax),%edi
  add    %ecx,%edi
  cmp    0x28(%rsp),%edi
  jge    L161
  mov    %edi,0x28(%rsp)
  mov    0x20(%rdx),%ecx
L161:
  add    0xc(%rax),%ecx
  cmp    0x2c(%rsp),%ecx
  jge    L170
  mov    %ecx,0x2c(%rsp)
L170:
  mov    0x30(%rdx),%ecx
  mov    (%rax),%edi
  add    %ecx,%edi
  cmp    0x30(%rsp),%edi
  jge    L178
  mov    %edi,0x30(%rsp)
  mov    0x30(%rdx),%ecx
L178:
  mov    0x4(%rax),%edi
  add    %ecx,%edi
  cmp    0x34(%rsp),%edi
  jge    L20
  mov    %edi,0x34(%rsp)
  mov    0x30(%rdx),%ecx
L20:
  mov    0x8(%rax),%edi
  add    %ecx,%edi
  cmp    0x38(%rsp),%edi
  jge    L139
  mov    %edi,0x38(%rsp)
  mov    0x30(%rdx),%ecx
L139:
  add    0xc(%rax),%ecx
  cmp    %ecx,%esi
  jle    L74
  mov    %ecx,0x3c(%rsp)
  mov    %ecx,%esi
L74:
  add    $0x10,%rax
  add    $0x4,%rdx
  cmp    %r8,%rax
  jne    L82
  mov    %r9,%rdi
  call   <printSolution@plt>
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L175
  add    $0x58,%rsp
  ret
L175:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void floydWarshall(int graph[][4]) {
  int dist[4][4], i, j, k;
  for (i = 0; i < 4; i++) {
    for (j = 0; j < 4; j++) {
      dist[i][j] = graph[i][j];
    }
  }
  for (k = 0; k < 4; k++) {
    for (i = 0; i < 4; i++) {
      for (j = 0; j < 4; j++) {
        if (dist[i][k] + dist[k][j] < dist[i][j])
          dist[i][j] = dist[i][k] + dist[k][j];
      }
    }
  }
  printSolution(dist);
}
```