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

```asm
<main>:
  endbr64
  sub    $0x58,%rsp
  lea    D45(%rip),%rdi
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
  mov    %rsp,%rsi
  call   <statvfs@plt>
  cmp    $0xffffffff,%eax
  je     L4
  mov    (%rsp),%esi
  lea    D101(%rip),%rdi
  call   <printf@plt>
  mov    0x4(%rsp),%esi
  lea    D62(%rip),%rdi
  call   <printf@plt>
  mov    0x40(%rsp),%esi
  lea    D56(%rip),%rdi
  call   <printf@plt>
  mov    0x38(%rsp),%esi
  lea    D14(%rip),%rdi
  call   <printf@plt>
  mov    0x30(%rsp),%esi
  lea    D96(%rip),%rdi
  call   <printf@plt>
  mov    0x28(%rsp),%esi
  lea    D64(%rip),%rdi
  call   <printf@plt>
  mov    0x20(%rsp),%esi
  lea    D0(%rip),%rdi
  call   <printf@plt>
  mov    0x18(%rsp),%esi
  lea    D117(%rip),%rdi
  call   <printf@plt>
  mov    0x8(%rsp),%esi
  lea    D20(%rip),%rdi
  call   <printf@plt>
  mov    0xc(%rsp),%esi
  lea    D98(%rip),%rdi
  call   <printf@plt>
  mov    0x10(%rsp),%esi
  lea    D3(%rip),%rdi
  call   <printf@plt>
L4:
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L9
  xor    %eax,%eax
  add    $0x58,%rsp
  ret
L9:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: data_label: D45
type_guessed: string
name: retrieve_data
arguments: data_label: D101
type_guessed: string
name: retrieve_data
arguments: data_label: D62
type_guessed: string
name: retrieve_data
arguments: data_label: D56
type_guessed: string
name: retrieve_data
arguments: data_label: D14
type_guessed: string
name: retrieve_data
arguments: data_label: D96
type_guessed: string
name: retrieve_data
arguments: data_label: D64
type_guessed: string
name: retrieve_data
arguments: data_label: D0
type_guessed: string
name: retrieve_data
arguments: data_label: D117
type_guessed: string
name: retrieve_data
arguments: data_label: D20
type_guessed: string
name: retrieve_data
arguments: data_label: D98
type_guessed: string
name: retrieve_data
arguments: data_label: D3
type_guessed: string

tool: D45: /

tool: D101: File system block size: %lu bytes


tool: D62: File system fundamental block size: %lu bytes


tool: D56: Total number of blocks in file system: %u


tool: D14: Total number of available blocks: %u


tool: D96: Total number of free blocks: %u


tool: D64: Total number of i-nodes: %u


tool: D0: Total number of free i-nodes: %u


tool: D117: i-nodes available to unprivileged process: %u


tool: D20: File system id: %lu


tool: D98: Mount flags: %lu


tool: D3: Maximum length of file names on this file system : %lu


assistant: ```c
int main(int argc, char *argv[]) {
  struct statvfs statvfsbuf;
  if (statvfs("/", &statvfsbuf) != -1) {
    printf("File system block size: %lu bytes\n", statvfsbuf.f_bsize);
    printf("File system fundamental block size: %lu bytes\n", statvfsbuf.f_frsize);
    printf("Total number of blocks in file system: %u\n", (unsigned int)statvfsbuf.f_blocks);
    printf("Total number of available blocks: %u\n", (unsigned int)statvfsbuf.f_bavail);
    printf("Total number of free blocks: %u\n", (unsigned int)statvfsbuf.f_bfree);
    printf("Total number of i-nodes: %u\n", (unsigned int)statvfsbuf.f_files);
    printf("Total number of free i-nodes: %u\n", (unsigned int)statvfsbuf.f_ffree);
    printf("i-nodes available to unprivileged process: %u\n", (unsigned int)statvfsbuf.f_favail);
    printf("File system id: %lu\n", statvfsbuf.f_fsid);
    printf("Mount flags: %lu\n", statvfsbuf.f_flag);
    printf("Maximum length of file names on this file system : %lu\n", statvfsbuf.f_namemax);
  }
  return 0;
}
```