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

```asm
<check_english>:
  endbr64
  push   %r12
  push   %rbp
  sub    $0x8,%rsp
  test   %rsi,%rsi
  je     L212
  lea    -0x1(%rsi),%rdx
  mov    %rdi,%rbp
  mov    %rsi,%rax
  cmp    $0xe,%rdx
  jbe    L635
  mov    %rsi,%rcx
  pxor   %xmm1,%xmm1
  pxor   %xmm5,%xmm5
  mov    %rdi,%rdx
  and    $0xfffffffffffffff0,%rcx
  movdqa D28(%rip),%xmm7
  movdqa D6(%rip),%xmm6
  pxor   %xmm4,%xmm4
  add    %rdi,%rcx
  nopl   0x0(%rax)
L428:
  movdqu (%rdx),%xmm0
  movdqa %xmm5,%xmm3
  add    $0x10,%rdx
  pcmpeqb %xmm7,%xmm0
  pand   %xmm6,%xmm0
  pcmpgtb %xmm0,%xmm3
  movdqa %xmm0,%xmm2
  punpcklbw %xmm3,%xmm2
  punpckhbw %xmm3,%xmm0
  movdqa %xmm4,%xmm3
  pcmpgtw %xmm2,%xmm3
  movdqa %xmm2,%xmm8
  punpcklwd %xmm3,%xmm8
  punpckhwd %xmm3,%xmm2
  movdqa %xmm0,%xmm3
  paddd  %xmm8,%xmm1
  paddd  %xmm2,%xmm1
  movdqa %xmm4,%xmm2
  pcmpgtw %xmm0,%xmm2
  punpcklwd %xmm2,%xmm3
  punpckhwd %xmm2,%xmm0
  paddd  %xmm3,%xmm1
  paddd  %xmm0,%xmm1
  cmp    %rcx,%rdx
  jne    L428
  movdqa %xmm1,%xmm0
  mov    %rax,%rcx
  psrldq $0x8,%xmm0
  and    $0xfffffffffffffff0,%rcx
  paddd  %xmm0,%xmm1
  movdqa %xmm1,%xmm0
  psrldq $0x4,%xmm0
  paddd  %xmm0,%xmm1
  movd   %xmm1,%edx
  test   $0xf,%al
  je     L10
L420:
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  je     L637
  add    $0x1,%rcx
  cmp    %rcx,%rax
  jbe    L10
L149:
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  je     L48
  add    $0x1,%rcx
  cmp    %rcx,%rax
  jbe    L10
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  je     L593
L339:
  add    $0x1,%rcx
  cmp    %rcx,%rax
  jbe    L10
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  je     L22
L92:
  add    $0x1,%rcx
  cmp    %rcx,%rax
  jbe    L10
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  je     L435
L96:
  add    $0x1,%rcx
  cmp    %rcx,%rax
  jbe    L10
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  je     L2
L532:
  add    $0x1,%rcx
  cmp    %rcx,%rax
  jbe    L10
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  je     L54
L356:
  add    $0x1,%rcx
  cmp    %rcx,%rax
  jbe    L10
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  je     L111
L480:
  add    $0x1,%rcx
  cmp    %rcx,%rax
  jbe    L10
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  je     L207
L565:
  add    $0x1,%rcx
  cmp    %rcx,%rax
  jbe    L10
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  je     L309
L488:
  add    $0x1,%rcx
  cmp    %rcx,%rax
  jbe    L10
L394:
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  je     L582
  add    $0x1,%rcx
  cmp    %rcx,%rax
  jbe    L10
L525:
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  je     L79
  add    $0x1,%rcx
  cmp    %rcx,%rax
  jbe    L10
L65:
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  je     L462
  add    $0x1,%rcx
  cmp    %rcx,%rax
  jbe    L10
L562:
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  je     L491
  add    $0x1,%rcx
  cmp    %rcx,%rax
  jbe    L10
L173:
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%edx
L10:
  test   %edx,%edx
  jne    L575
L283:
  sub    $0x5,%eax
  xor    %r12d,%r12d
  cmp    $0x1,%eax
  ja     L400
  lea    D30(%rip),%rsi
  mov    %rbp,%rdi
  call   <strstr@plt>
  test   %rax,%rax
  je     L400
  lea    D44(%rip),%rsi
  mov    %rbp,%rdi
  call   <strstr@plt>
  test   %rax,%rax
  je     L400
  lea    D3(%rip),%rsi
  mov    %rbp,%rdi
  xor    %r12d,%r12d
  call   <strstr@plt>
  test   %rax,%rax
  setne  %r12b
L400:
  add    $0x8,%rsp
  mov    %r12d,%eax
  pop    %rbp
  pop    %r12
  ret
  nopl   0x0(%rax)
L637:
  add    $0x1,%rcx
  add    $0x1,%edx
  cmp    %rax,%rcx
  jb     L149
L575:
  movslq %edx,%rcx
  xor    %edx,%edx
  div    %rcx
  jmp    L283
  nopw   0x0(%rax,%rax,1)
L48:
  add    $0x1,%rcx
  add    $0x1,%edx
  cmp    %rax,%rcx
  jae    L575
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  jne    L339
L593:
  add    $0x1,%rcx
  add    $0x1,%edx
  cmp    %rcx,%rax
  jbe    L575
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  jne    L92
L22:
  add    $0x1,%rcx
  add    $0x1,%edx
  cmp    %rax,%rcx
  jae    L575
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  jne    L96
L435:
  add    $0x1,%rcx
  add    $0x1,%edx
  cmp    %rcx,%rax
  jbe    L575
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  jne    L532
L2:
  add    $0x1,%rcx
  add    $0x1,%edx
  cmp    %rcx,%rax
  jbe    L575
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  jne    L356
L54:
  add    $0x1,%rcx
  add    $0x1,%edx
  cmp    %rcx,%rax
  jbe    L575
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  jne    L480
L111:
  add    $0x1,%rcx
  add    $0x1,%edx
  cmp    %rcx,%rax
  jbe    L575
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  jne    L565
L207:
  add    $0x1,%rcx
  add    $0x1,%edx
  cmp    %rcx,%rax
  jbe    L575
  cmpb   $0x20,0x0(%rbp,%rcx,1)
  jne    L488
L309:
  add    $0x1,%rcx
  add    $0x1,%edx
  cmp    %rcx,%rax
  ja     L394
  jmp    L575
  nopl   0x0(%rax)
L212:
  xor    %r12d,%r12d
  add    $0x8,%rsp
  mov    %r12d,%eax
  pop    %rbp
  pop    %r12
  ret
L635:
  xor    %ecx,%ecx
  xor    %edx,%edx
  jmp    L420
L582:
  add    $0x1,%rcx
  add    $0x1,%edx
  cmp    %rcx,%rax
  ja     L525
  jmp    L575
L79:
  add    $0x1,%rcx
  add    $0x1,%edx
  cmp    %rcx,%rax
  ja     L65
  jmp    L575
L462:
  add    $0x1,%rcx
  add    $0x1,%edx
  cmp    %rcx,%rax
  ja     L562
  jmp    L575
L491:
  add    $0x1,%rcx
  add    $0x1,%edx
  cmp    %rcx,%rax
  ja     L173
  jmp    L575
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D28
type_guessed: byte[16]
name: extract_symbolic_data
arguments: data_label: D6
type_guessed: byte[16]
name: extract_symbolic_data
arguments: data_label: D30
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D44
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D3
type_guessed: string

tool: {"D28": [0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20]}

tool: {"D6": [0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01]}

tool: D30: The

tool: D44: Gospel

tool: D3: of

assistant: ```c
int check_english(const char *buf, const size_t bufsiz) {
  const char *words[] = {"The", "Gospel", "of"};
  int spcount = 0;
  size_t i;
  for (i = 0; i < bufsiz; ++i) {
    if (buf[i] == 32)
      ++spcount;
  }
  int spfreq = bufsiz / (spcount == 0 ? 1 : spcount);
  if (spfreq <= 4 || spfreq >= 7)
    return 0;
  for (i = 0; i < 3; ++i) {
    if (strstr(buf, words[i]) == NULL)
      break;
  }
  return i == 3;
}
```