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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xb0,%rsp
  mov    %edi,-0xa4(%rbp)
  mov    %rsi,-0xb0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movq   $0x0,-0x40(%rbp)
  movq   $0x0,-0x38(%rbp)
  movq   $0x0,-0x30(%rbp)
  movq   $0x0,-0x28(%rbp)
  movq   $0x0,-0x20(%rbp)
  movq   $0x0,-0x18(%rbp)
  movq   $0x0,-0x78(%rbp)
  movl   $0x0,-0x70(%rbp)
  movq   $0x0,-0x6c(%rbp)
  movl   $0x0,-0x64(%rbp)
  movb   $0x0,-0x99(%rbp)
  movq   $0x0,-0x60(%rbp)
  movq   $0x0,-0x58(%rbp)
  movq   $0x0,-0x50(%rbp)
  movq   $0x0,-0x48(%rbp)
  movl   $0x0,-0x98(%rbp)
  jmp    L59
L135:
  movl   $0x0,-0x94(%rbp)
  jmp    L20
L69:
  lea    -0x40(%rbp),%rdx
  mov    -0x94(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x98(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rcx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    %rax,%rsi
  lea    D23(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  addl   $0x1,-0x94(%rbp)
L20:
  cmpl   $0x3,-0x94(%rbp)
  jle    L69
  addl   $0x1,-0x98(%rbp)
L59:
  cmpl   $0x2,-0x98(%rbp)
  jle    L135
  movl   $0x0,-0x90(%rbp)
  jmp    L44
L213:
  lea    -0x40(%rbp),%rdx
  mov    -0x90(%rbp),%eax
  cltq
  shl    $0x4,%rax
  add    %rax,%rdx
  lea    -0x60(%rbp),%rax
  mov    %rax,%rsi
  mov    %rdx,%rdi
  call   <findmax@plt>
  movl   $0x0,-0x8c(%rbp)
  jmp    L116
L219:
  mov    -0x8c(%rbp),%eax
  cltq
  mov    -0x60(%rbp,%rax,4),%eax
  test   %eax,%eax
  je     L185
  mov    -0x8c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x90(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rdx,%rax
  sub    $0x78,%rax
  movb   $0x1,(%rax)
L185:
  addl   $0x1,-0x8c(%rbp)
L116:
  cmpl   $0x3,-0x8c(%rbp)
  jle    L219
  addl   $0x1,-0x90(%rbp)
L44:
  cmpl   $0x2,-0x90(%rbp)
  jle    L213
  movl   $0x0,-0x88(%rbp)
  jmp    L64
L120:
  mov    -0x88(%rbp),%eax
  cltq
  mov    -0x40(%rbp,%rax,4),%eax
  mov    %eax,-0x50(%rbp)
  mov    -0x88(%rbp),%eax
  cltq
  add    $0x4,%rax
  mov    -0x40(%rbp,%rax,4),%eax
  mov    %eax,-0x4c(%rbp)
  mov    -0x88(%rbp),%eax
  cltq
  add    $0x8,%rax
  mov    -0x40(%rbp,%rax,4),%eax
  mov    %eax,-0x48(%rbp)
  lea    -0x60(%rbp),%rdx
  lea    -0x50(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <findmin@plt>
  movl   $0x0,-0x84(%rbp)
  jmp    L107
L98:
  mov    -0x84(%rbp),%eax
  cltq
  mov    -0x60(%rbp,%rax,4),%eax
  test   %eax,%eax
  je     L32
  mov    -0x88(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x84(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rdx,%rax
  sub    $0x78,%rax
  movb   $0x1,(%rax)
L32:
  addl   $0x1,-0x84(%rbp)
L107:
  cmpl   $0x2,-0x84(%rbp)
  jle    L98
  addl   $0x1,-0x88(%rbp)
L64:
  cmpl   $0x3,-0x88(%rbp)
  jle    L120
  movl   $0x0,-0x80(%rbp)
  jmp    L208
L4:
  movl   $0x0,-0x7c(%rbp)
  jmp    L139
L126:
  mov    -0x7c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x80(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rdx,%rax
  sub    $0x78,%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L176
  mov    -0x7c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x80(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rdx,%rax
  sub    $0x6c,%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L176
  mov    -0x7c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x80(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    -0x40(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movb   $0x1,-0x99(%rbp)
L176:
  addl   $0x1,-0x7c(%rbp)
L139:
  cmpl   $0x3,-0x7c(%rbp)
  jle    L126
  addl   $0x1,-0x80(%rbp)
L208:
  cmpl   $0x2,-0x80(%rbp)
  jle    L4
  cmpb   $0x1,-0x99(%rbp)
  je     L8
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L8:
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L172
  call   <__stack_chk_fail@plt>
L172:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D23
type: string
name: extract_symbolic_data
arguments: data_tag: D3
type: string
name: extract_symbolic_data
arguments: data_tag: D28
type: string

tool: D23: %d

tool: D3: %d


tool: D28: NO

assistant: ```c
int main(int argc, char const *argv[]) {
  int data[3][4] = {0};
  char ismax[3][4] = {0};
  char ismin[3][4] = {0};
  char yes = 0;
  int re[4] = {0}, col[4] = {0};
  for (int i = 0; i < 3; ++i) {
    for (int j = 0; j < 4; ++j) {
      scanf("%d", &data[i][j]);
    }
  }
  for (int i = 0; i < 3; ++i) {
    findmax(data[i], re);
    for (int j = 0; j < 4; ++j) {
      if (re[j])
        ismax[i][j] = 1;
    }
  }
  for (int i = 0; i < 4; ++i) {
    col[0] = data[0][i];
    col[1] = data[1][i];
    col[2] = data[2][i];
    findmin(col, re);
    for (int j = 0; j < 3; ++j) {
      if (re[j])
        ismax[j][i] = 1;
    }
  }
  for (int i = 0; i < 3; ++i) {
    for (int j = 0; j < 4; ++j) {
      if (ismax[i][j] && ismin[i][j]) {
        printf("%d\n", data[i][j]);
        yes = 1;
      }
    }
  }
  if (yes != 1) {
    printf("NO");
  }
  return 0;
}
```