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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x4c(%rbp)
  jmp    L116
L57:
  lea    D65(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x48(%rbp)
  jmp    L21
L147:
  lea    -0x30(%rbp),%rdx
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x48(%rbp),%eax
  cltq
  add    %rax,%rax
  add    %rcx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    %rax,%rsi
  lea    D48(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  addl   $0x1,-0x48(%rbp)
L21:
  cmpl   $0x3,-0x48(%rbp)
  jle    L147
  addl   $0x1,-0x4c(%rbp)
L116:
  cmpl   $0x1,-0x4c(%rbp)
  jle    L57
  lea    D21(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x40(%rbp)
  movl   $0x0,-0x4c(%rbp)
  jmp    L42
L4:
  movl   $0x0,-0x44(%rbp)
  movl   $0x1,-0x48(%rbp)
  jmp    L66
L18:
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%eax
  cltq
  add    %rax,%rax
  add    %rdx,%rax
  mov    -0x30(%rbp,%rax,4),%eax
  add    %eax,-0x44(%rbp)
  addl   $0x1,-0x48(%rbp)
L66:
  cmpl   $0x3,-0x48(%rbp)
  jle    L18
  mov    -0x40(%rbp),%eax
  cmp    -0x44(%rbp),%eax
  jge    L43
  mov    -0x44(%rbp),%eax
  mov    %eax,-0x40(%rbp)
  mov    -0x4c(%rbp),%eax
  mov    %eax,-0x3c(%rbp)
L43:
  mov    -0x4c(%rbp),%eax
  cltq
  mov    -0x30(%rbp,%rax,4),%eax
  mov    -0x44(%rbp),%edx
  mov    %eax,%esi
  lea    D10(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0x4c(%rbp)
L42:
  cmpl   $0x1,-0x4c(%rbp)
  jle    L4
  lea    D4(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x38(%rbp)
  movl   $0x1,-0x48(%rbp)
  jmp    L149
L117:
  movl   $0x0,-0x34(%rbp)
  mov    -0x48(%rbp),%eax
  mov    %eax,%esi
  lea    D0(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x4c(%rbp)
  jmp    L130
L80:
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%eax
  cltq
  add    %rax,%rax
  add    %rdx,%rax
  mov    -0x30(%rbp,%rax,4),%eax
  cmp    %eax,-0x34(%rbp)
  jge    L2
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%eax
  cltq
  add    %rax,%rax
  add    %rdx,%rax
  mov    -0x30(%rbp,%rax,4),%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x4c(%rbp),%eax
  mov    %eax,-0x38(%rbp)
L2:
  addl   $0x1,-0x4c(%rbp)
L130:
  cmpl   $0x1,-0x4c(%rbp)
  jle    L80
  mov    -0x38(%rbp),%eax
  cltq
  mov    -0x30(%rbp,%rax,4),%eax
  mov    -0x34(%rbp),%edx
  mov    %eax,%esi
  lea    D73(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0x48(%rbp)
L149:
  cmpl   $0x3,-0x48(%rbp)
  jle    L117
  mov    -0x3c(%rbp),%eax
  cltq
  mov    -0x30(%rbp,%rax,4),%eax
  mov    -0x40(%rbp),%edx
  mov    %eax,%esi
  lea    D17(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L63
  call   <__stack_chk_fail@plt>
L63:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D65
type_guessed: string
name: parse_data
arguments: data_tag: D48
type_guessed: string
name: parse_data
arguments: data_tag: D21
type_guessed: string
name: parse_data
arguments: data_tag: D10
type_guessed: string
name: parse_data
arguments: data_tag: D4
type_guessed: string
name: parse_data
arguments: data_tag: D0
type_guessed: string
name: parse_data
arguments: data_tag: D73
type_guessed: string
name: parse_data
arguments: data_tag: D17
type_guessed: string

tool: D65: Enter data in form of Roll No. Sub1 Sub2 Sub3 

tool: D48: %d

tool: D21: Total Marks Scored: 

tool: D10: Student %d: %d 


tool: D4: MAX MARKS: 

tool: D0: Subject %d: 


tool: D73: Student: %d Marks: %d 


tool: D17: Max. Total By Student: %d and Marks: %d 


assistant: ```c
int main() {
  int data[4][2];
  int i, j;
  for (i = 0; i < 2; i++) {
    printf("Enter data in form of Roll No. Sub1 Sub2 Sub3 \n");
    for (j = 0; j < 4; j++) {
      scanf("%d", &data[j][i]);
    }
  }
  printf("Total Marks Scored: \n");
  int sum;
  int tmax = 0, idmax;
  for (i = 0; i < 2; i++) {
    sum = 0;
    for (j = 1; j < 4; j++) {
      sum += data[j][i];
    }
    if (tmax < sum) {
      tmax = sum;
      idmax = i;
    }
    printf("Student %d: %d \n", data[0][i], sum);
  }
  printf("MAX MARKS: \n");
  int id = 0;
  int max;
  for (j = 1; j < 4; j++) {
    max = 0;
    printf("Subject %d: \n", j);
    for (i = 0; i < 2; i++) {
      if (max < data[j][i]) {
        max = data[j][i];
        id = i;
      }
    }
    printf("Student: %d Marks: %d \n", data[0][id], max);
  }
  printf("Max. Total By Student: %d and Marks: %d \n", data[0][idmax], tmax);
  return 0;
}
```