user: 请将以下的汇编代码转换成C语言代码:

```asm
<strqetok>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %rcx,-0x30(%rbp)
  movq   $0x0,-0x8(%rbp)
  cmpq   $0x0,-0x18(%rbp)
  je     L84
  mov    -0x18(%rbp),%rax
  mov    %rax,D407(%rip)
  mov    D407(%rip),%rax
  mov    %rax,D413(%rip)
  movb   $0x0,D223(%rip)
  movb   $0x0,D286(%rip)
L84:
  mov    D413(%rip),%rax
  test   %rax,%rax
  jne    L27
  mov    $0x0,%eax
  jmp    L73
L183:
  movzbl D223(%rip),%eax
  test   %al,%al
  je     L151
  cmpq   $0x0,-0x8(%rbp)
  jne    L267
  mov    D407(%rip),%rax
  mov    %rax,-0x8(%rbp)
L267:
  mov    D413(%rip),%rdx
  mov    D407(%rip),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,D257(%rip)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  movb   $0x0,D223(%rip)
  jmp    L40
L151:
  movzbl D286(%rip),%eax
  test   %al,%al
  je     L2
  mov    D413(%rip),%rax
  movzbl (%rax),%edx
  movzbl D286(%rip),%eax
  cmp    %al,%dl
  jne    L116
  movb   $0x0,D286(%rip)
  jmp    L40
L116:
  mov    D413(%rip),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    -0x28(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <_isinstr@plt>
  test   %rax,%rax
  je     L23
  mov    D413(%rip),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L23
  mov    D413(%rip),%rax
  add    $0x1,%rax
  movzbl (%rax),%edx
  movzbl D286(%rip),%eax
  cmp    %al,%dl
  je     L9
  mov    D413(%rip),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    -0x28(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <_isinstr@plt>
  test   %rax,%rax
  je     L23
L9:
  movb   $0x1,D223(%rip)
  jmp    L40
L23:
  cmpq   $0x0,-0x8(%rbp)
  jne    L120
  mov    D257(%rip),%rax
  mov    %rax,-0x8(%rbp)
L120:
  mov    D413(%rip),%rdx
  mov    D257(%rip),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,D257(%rip)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  jmp    L40
L2:
  mov    D413(%rip),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    -0x30(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <_isinstr@plt>
  test   %rax,%rax
  je     L268
  cmpq   $0x0,-0x8(%rbp)
  je     L40
  mov    D257(%rip),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,D257(%rip)
  movb   $0x0,(%rax)
  mov    -0x8(%rbp),%rax
  jmp    L73
L268:
  mov    D413(%rip),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    -0x28(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <_isinstr@plt>
  test   %rax,%rax
  je     L211
  movb   $0x1,D223(%rip)
  jmp    L40
L211:
  mov    D413(%rip),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    -0x20(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <_isinstr@plt>
  test   %rax,%rax
  je     L47
  cmpq   $0x0,-0x8(%rbp)
  jne    L213
  mov    D257(%rip),%rax
  mov    %rax,-0x8(%rbp)
L213:
  mov    D413(%rip),%rax
  movzbl (%rax),%eax
  mov    %al,D257(%rip)
  jmp    L40
L47:
  cmpq   $0x0,-0x8(%rbp)
  jne    L42
  mov    D257(%rip),%rax
  mov    %rax,-0x8(%rbp)
L42:
  mov    D413(%rip),%rdx
  mov    D257(%rip),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,D257(%rip)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
L40:
  mov    D413(%rip),%rax
  add    $0x1,%rax
  mov    %rax,D257(%rip)
L27:
  mov    D257(%rip),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L183
  cmpq   $0x0,-0x8(%rbp)
  je     L266
  mov    D257(%rip),%rax
  movb   $0x0,(%rax)
L266:
  mov    -0x8(%rbp),%rax
L73:
  leave
  ret
```

assistant: ```c
char *strqetok(char *str, const char *quot, const char *esc, const char *delim) {
  static char *r, *w;
  static unsigned char e;
  static char q;
  char *t = 0;
  if (str) {
    r = w = str;
    e = 0;
    q = '\0';
  }
  if (!r)
    return 0;
  while (*r) {
    if (e) {
      if (!t)
        t = w;
      *w++ = *r;
      e = 0;
    } else if (q) {
      if (*r == q) {
        q = '\0';
      } else if (_isinstr(*r, esc) && r[1] && (r[1] == q || _isinstr(r[1], esc))) {
        e = 1;
      } else {
        if (!t)
          t = w;
        *w++ = *r;
      }
    } else {
      if (_isinstr(*r, delim)) {
        if (t) {
          *w++ = '\0';
          return t;
        }
      } else if (_isinstr(*r, esc)) {
        e = 1;
      } else if (_isinstr(*r, quot)) {
        if (!t)
          t = w;
        q = *r;
      } else {
        if (!t)
          t = w;
        *w++ = *r;
      }
    }
    ++r;
  }
  if (t)
    *w = '\0';
  return t;
}
```