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

```asm
<isnotfound>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x230,%rsp
  mov    %rdi,-0x228(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x220(%rbp)
  movq   $0x0,-0x218(%rbp)
  movl   $0x0,-0x21c(%rbp)
  cmpq   $0x0,-0x228(%rbp)
  je     L14
  mov    -0x228(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L14
  mov    -0x228(%rbp),%rdx
  lea    -0x210(%rbp),%rax
  lea    D40(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    -0x210(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <isfexists@plt>
  test   %eax,%eax
  jne    L121
  movl   $0x1,-0x220(%rbp)
  jmp    L111
L121:
  mov    -0x228(%rbp),%rcx
  mov    -0x228(%rbp),%rdx
  lea    -0x210(%rbp),%rax
  lea    D23(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    -0x210(%rbp),%rax
  lea    D34(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <popen@plt>
  mov    %rax,-0x218(%rbp)
  cmpq   $0x0,-0x218(%rbp)
  je     L77
  jmp    L66
L96:
  lea    -0x110(%rbp),%rax
  mov    $0x0,%r8d
  mov    $0x0,%ecx
  lea    D11(%rip),%rdx
  lea    D29(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <strreplace@plt>
  test   %eax,%eax
  jle    L5
  addl   $0x1,-0x21c(%rbp)
L5:
  lea    -0x110(%rbp),%rax
  mov    $0x0,%r8d
  mov    $0x0,%ecx
  lea    D11(%rip),%rdx
  lea    D13(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <strreplace@plt>
  test   %eax,%eax
  jle    L66
  addl   $0x1,-0x21c(%rbp)
L66:
  mov    -0x218(%rbp),%rdx
  lea    -0x110(%rbp),%rax
  mov    $0xff,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  jne    L96
  cmpl   $0x0,-0x21c(%rbp)
  jle    L91
  movl   $0x1,-0x220(%rbp)
L91:
  mov    -0x218(%rbp),%rax
  mov    %rax,%rdi
  call   <pclose@plt>
  jmp    L111
L14:
  nop
  jmp    L111
L77:
  nop
L111:
  mov    -0x220(%rbp),%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L12
  call   <__stack_chk_fail@plt>
L12:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D40
data_type: string
name: extract_symbolic_data
arguments: data_tag: D23
data_type: string
name: extract_symbolic_data
arguments: data_tag: D34
data_type: string
name: extract_symbolic_data
arguments: data_tag: D11
data_type: string
name: extract_symbolic_data
arguments: data_tag: D29
data_type: string
name: extract_symbolic_data
arguments: data_tag: D13
data_type: string

tool: D40: %s.err

tool: D23: grep -i "%s" %s.err

tool: D34: r

tool: 

tool: D29: not found

tool: D13: no such

assistant: ```c
int isnotfound(char *filename) {
  int status = 0;
  int isfexists();
  char command[256];
  FILE *grepout = NULL;
  char grepline[256];
  int strreplace();
  int nlines = 0;
  if (((filename) == NULL ? 1 : (*(filename) == '\000' ? 1 : 0)))
    goto end_of_job;
  sprintf(command, "%s.err", filename);
  if (!isfexists(command)) {
    status = 1;
    goto end_of_job;
  }
  sprintf(command, "grep -i \"%s\" %s.err", filename, filename);
  grepout = popen(command, "r");
  if (grepout == NULL)
    goto end_of_job;
  while (fgets(grepline, 255, grepout) != NULL) {
    if (strreplace(grepline, "not found", "", 0, 0) > 0)
      nlines++;
    if (strreplace(grepline, "no such", "", 0, 0) > 0)
      nlines++;
  }
  if (nlines > 0)
    status = 1;
  pclose(grepout);
end_of_job:
  return (status);
}
```