user: 下面的汇编指令对应的C源代码是什么：

```asm
<parse_bool>:
  endbr64
  mov    %rdi,%rcx
  movzbl (%rdi),%eax
  cmp    $0x20,%al
  je     L236
  cmp    $0x9,%al
  jne    L135
L236:
  mov    $0x0,%edx
L894:
  add    $0x1,%rdx
  movzbl (%rcx,%rdx,1),%eax
  cmp    $0x20,%al
  je     L894
  cmp    $0x9,%al
  je     L894
L666:
  sub    $0x30,%eax
  cmp    $0x49,%al
  ja     L940
  movzbl %al,%eax
  lea    D9(%rip),%rsi
  movslq (%rsi,%rax,4),%rax
  add    %rsi,%rax
  notrack jmp *%rax
L135:
  mov    $0x0,%edx
  jmp    L666
  lea    0x1(%rdx),%rax
  cmpb   $0x72,0x1(%rcx,%rdx,1)
  je     L590
L748:
  movzbl (%rcx,%rax,1),%edx
  cmp    $0x20,%dl
  je     L452
  cmp    $0x9,%dl
  jne    L683
L452:
  lea    0x1(%rcx,%rax,1),%rax
L107:
  movzbl (%rax),%edx
  add    $0x1,%rax
  cmp    $0x20,%dl
  je     L107
  cmp    $0x9,%dl
  je     L107
L683:
  cmp    $0xa,%dl
  je     L86
  test   %dl,%dl
  je     L86
  mov    $0xffffffff,%eax
  ret
L590:
  mov    $0xffffffff,%eax
  cmpb   $0x75,0x2(%rcx,%rdx,1)
  je     L473
L601:
  ret
L473:
  cmpb   $0x65,0x3(%rcx,%rdx,1)
  jne    L601
  lea    0x4(%rdx),%rax
  jmp    L748
  lea    0x1(%rdx),%rax
  movzbl 0x1(%rcx,%rdx,1),%esi
  cmp    $0x72,%sil
  je     L861
  cmp    $0x52,%sil
  je     L130
L83:
  movzbl (%rcx,%rax,1),%edx
  cmp    $0x20,%dl
  je     L793
  cmp    $0x9,%dl
  jne    L118
L793:
  lea    0x1(%rcx,%rax,1),%rax
L454:
  movzbl (%rax),%edx
  add    $0x1,%rax
  cmp    $0x20,%dl
  je     L454
  cmp    $0x9,%dl
  je     L454
L118:
  cmp    $0xa,%dl
  je     L302
  test   %dl,%dl
  je     L302
  mov    $0xffffffff,%eax
  ret
L861:
  cmpb   $0x75,0x2(%rcx,%rdx,1)
  je     L157
L475:
  movzbl (%rcx,%rax,1),%edx
  jmp    L118
L157:
  cmpb   $0x65,0x3(%rcx,%rdx,1)
  jne    L475
  lea    0x4(%rdx),%rax
  jmp    L83
L130:
  mov    $0xffffffff,%eax
  cmpb   $0x55,0x2(%rcx,%rdx,1)
  jne    L601
  cmpb   $0x45,0x3(%rcx,%rdx,1)
  jne    L601
  lea    0x4(%rdx),%rax
  jmp    L83
  lea    0x1(%rdx),%rax
  cmpb   $0x65,0x1(%rcx,%rdx,1)
  je     L527
L645:
  movzbl (%rcx,%rax,1),%edx
  cmp    $0x20,%dl
  je     L256
  cmp    $0x9,%dl
  jne    L850
L256:
  lea    0x1(%rcx,%rax,1),%rax
L75:
  movzbl (%rax),%edx
  add    $0x1,%rax
  cmp    $0x20,%dl
  je     L75
  cmp    $0x9,%dl
  je     L75
L850:
  cmp    $0xa,%dl
  je     L25
  test   %dl,%dl
  je     L25
  mov    $0xffffffff,%eax
  ret
L527:
  mov    $0xffffffff,%eax
  cmpb   $0x73,0x2(%rcx,%rdx,1)
  jne    L601
  lea    0x3(%rdx),%rax
  jmp    L645
  lea    0x1(%rdx),%rax
  movzbl 0x1(%rcx,%rdx,1),%esi
  cmp    $0x65,%sil
  je     L11
  cmp    $0x45,%sil
  je     L562
L846:
  movzbl (%rcx,%rax,1),%edx
  cmp    $0x20,%dl
  je     L889
  cmp    $0x9,%dl
  jne    L8
L889:
  lea    0x1(%rcx,%rax,1),%rax
L472:
  movzbl (%rax),%edx
  add    $0x1,%rax
  cmp    $0x20,%dl
  je     L472
  cmp    $0x9,%dl
  je     L472
L8:
  cmp    $0xa,%dl
  je     L786
  test   %dl,%dl
  je     L786
  mov    $0xffffffff,%eax
  ret
L11:
  cmpb   $0x73,0x2(%rcx,%rdx,1)
  je     L656
  movzbl (%rcx,%rax,1),%edx
  jmp    L8
L656:
  lea    0x3(%rdx),%rax
  jmp    L846
L562:
  mov    $0xffffffff,%eax
  cmpb   $0x53,0x2(%rcx,%rdx,1)
  jne    L601
  lea    0x3(%rdx),%rax
  jmp    L846
  movzbl 0x1(%rcx,%rdx,1),%esi
  cmp    $0x20,%sil
  je     L623
  cmp    $0x9,%sil
  jne    L143
L623:
  lea    0x2(%rcx,%rdx,1),%rax
L348:
  movzbl (%rax),%esi
  add    $0x1,%rax
  cmp    $0x20,%sil
  je     L348
  cmp    $0x9,%sil
  je     L348
L143:
  cmp    $0xa,%sil
  je     L394
  test   %sil,%sil
  je     L394
  mov    $0xffffffff,%eax
  ret
  lea    0x1(%rdx),%rax
  movzbl 0x1(%rcx,%rdx,1),%esi
  cmp    $0x61,%sil
  je     L708
L360:
  movzbl (%rcx,%rax,1),%esi
  cmp    $0x20,%sil
  je     L395
  cmp    $0x9,%sil
  jne    L287
L395:
  lea    0x1(%rcx,%rax,1),%rax
L556:
  movzbl (%rax),%esi
  add    $0x1,%rax
  cmp    $0x20,%sil
  je     L556
  cmp    $0x9,%sil
  je     L556
L287:
  cmp    $0xa,%sil
  sete   %al
  test   %sil,%sil
  sete   %dl
  or     %edx,%eax
  movzbl %al,%eax
  sub    $0x1,%eax
  ret
L708:
  cmpb   $0x6c,0x2(%rcx,%rdx,1)
  jne    L287
  cmpb   $0x73,0x3(%rcx,%rdx,1)
  jne    L287
  lea    0x5(%rdx),%rax
  cmpb   $0x65,0x4(%rcx,%rdx,1)
  jne    L287
  jmp    L360
  lea    0x1(%rdx),%rax
  movzbl 0x1(%rcx,%rdx,1),%esi
  cmp    $0x61,%sil
  je     L282
  cmp    $0x41,%sil
  jne    L518
  cmpb   $0x4c,0x2(%rcx,%rdx,1)
  jne    L806
  cmpb   $0x53,0x3(%rcx,%rdx,1)
  jne    L806
  lea    0x5(%rdx),%rax
  cmpb   $0x45,0x4(%rcx,%rdx,1)
  jne    L806
  jmp    L518
L282:
  cmpb   $0x6c,0x2(%rcx,%rdx,1)
  je     L120
L550:
  movzbl (%rcx,%rax,1),%esi
  jmp    L806
L120:
  cmpb   $0x73,0x3(%rcx,%rdx,1)
  jne    L550
  cmpb   $0x65,0x4(%rcx,%rdx,1)
  jne    L550
  lea    0x5(%rdx),%rax
L518:
  movzbl (%rcx,%rax,1),%esi
  cmp    $0x20,%sil
  je     L21
  cmp    $0x9,%sil
  jne    L806
L21:
  lea    0x1(%rcx,%rax,1),%rax
L876:
  movzbl (%rax),%esi
  add    $0x1,%rax
  cmp    $0x20,%sil
  je     L876
  cmp    $0x9,%sil
  je     L876
L806:
  cmp    $0xa,%sil
  sete   %al
  test   %sil,%sil
  sete   %dl
  or     %edx,%eax
  movzbl %al,%eax
  sub    $0x1,%eax
  ret
  lea    0x1(%rdx),%rax
  cmpb   $0x6f,0x1(%rcx,%rdx,1)
  je     L420
L320:
  movzbl (%rcx,%rax,1),%edx
  cmp    $0x20,%dl
  je     L737
  cmp    $0x9,%dl
  jne    L553
L737:
  lea    0x1(%rcx,%rax,1),%rax
L762:
  movzbl (%rax),%edx
  add    $0x1,%rax
  cmp    $0x20,%dl
  je     L762
  cmp    $0x9,%dl
  je     L762
L553:
  cmp    $0xa,%dl
  sete   %al
  test   %dl,%dl
  sete   %dl
  or     %edx,%eax
  movzbl %al,%eax
  sub    $0x1,%eax
  ret
L420:
  lea    0x2(%rdx),%rax
  jmp    L320
  movzbl 0x1(%rcx,%rdx,1),%eax
  and    $0xffffffdf,%eax
  cmp    $0x4f,%al
  sete   %al
  movzbl %al,%eax
  lea    0x1(%rax,%rdx,1),%rax
  movzbl (%rcx,%rax,1),%edx
  cmp    $0x20,%dl
  je     L249
  cmp    $0x9,%dl
  jne    L449
L249:
  lea    0x1(%rcx,%rax,1),%rax
L235:
  movzbl (%rax),%edx
  add    $0x1,%rax
  cmp    $0x20,%dl
  je     L235
  cmp    $0x9,%dl
  je     L235
L449:
  cmp    $0xa,%dl
  sete   %al
  test   %dl,%dl
  sete   %dl
  or     %edx,%eax
  movzbl %al,%eax
  sub    $0x1,%eax
  ret
  movzbl 0x1(%rcx,%rdx,1),%esi
  cmp    $0x20,%sil
  je     L698
  cmp    $0x9,%sil
  jne    L759
L698:
  lea    0x2(%rcx,%rdx,1),%rax
L618:
  movzbl (%rax),%esi
  add    $0x1,%rax
  cmp    $0x20,%sil
  je     L618
  cmp    $0x9,%sil
  je     L618
L759:
  cmp    $0xa,%sil
  sete   %al
  test   %sil,%sil
  sete   %dl
  or     %edx,%eax
  movzbl %al,%eax
  sub    $0x1,%eax
  ret
L940:
  mov    $0xffffffff,%eax
  ret
L86:
  mov    $0x1,%eax
  ret
L302:
  mov    $0x1,%eax
  ret
L25:
  mov    $0x1,%eax
  ret
L786:
  mov    $0x1,%eax
  ret
L394:
  mov    $0x1,%eax
  ret
```

assistant: ```c
int parse_bool(char *source) {
  size_t i = 0;
  while (source[i] == ' ' || source[i] == '\t') {
    i++;
  }
  if (source[i] == 't') {
    i++;
    if (source[i] == 'r' && source[i + 1] == 'u' && source[i + 2] == 'e') {
      i += 3;
    }
    while (source[i] == ' ' || source[i] == '\t') {
      i++;
    }
    if (source[i] == '\n' || source[i] == '\0') {
      return 1;
    } else {
      return -1;
    }
  } else if (source[i] == 'T') {
    i++;
    if (source[i] == 'r' && source[i + 1] == 'u' && source[i + 2] == 'e') {
      i += 3;
    } else if (source[i] == 'R' && source[i + 1] == 'U' && source[i + 2] == 'E') {
      i += 3;
    }
    while (source[i] == ' ' || source[i] == '\t') {
      i++;
    }
    if (source[i] == '\n' || source[i] == '\0') {
      return 1;
    } else {
      return -1;
    }
  } else if (source[i] == 'y') {
    i++;
    if (source[i] == 'e' && source[i + 1] == 's') {
      i += 2;
    }
    while (source[i] == ' ' || source[i] == '\t') {
      i++;
    }
    if (source[i] == '\n' || source[i] == '\0') {
      return 1;
    } else {
      return -1;
    }
  } else if (source[i] == 'Y') {
    i++;
    if (source[i] == 'e' && source[i + 1] == 's') {
      i += 2;
    } else if (source[i] == 'E' && source[i + 1] == 'S') {
      i += 2;
    }
    while (source[i] == ' ' || source[i] == '\t') {
      i++;
    }
    if (source[i] == '\n' || source[i] == '\0') {
      return 1;
    } else {
      return -1;
    }
  } else if (source[i] == '1') {
    i++;
    while (source[i] == ' ' || source[i] == '\t') {
      i++;
    }
    if (source[i] == '\n' || source[i] == '\0') {
      return 1;
    } else {
      return -1;
    }
  } else if (source[i] == 'f') {
    i++;
    if (source[i] == 'a' && source[i + 1] == 'l' && source[i + 2] == 's' && source[i + 3] == 'e') {
      i += 4;
    }
    while (source[i] == ' ' || source[i] == '\t') {
      i++;
    }
    if (source[i] == '\n' || source[i] == '\0') {
      return 0;
    } else {
      return -1;
    }
  } else if (source[i] == 'F') {
    i++;
    if (source[i] == 'a' && source[i + 1] == 'l' && source[i + 2] == 's' && source[i + 3] == 'e') {
      i += 4;
    } else if (source[i] == 'A' && source[i + 1] == 'L' && source[i + 2] == 'S' && source[i + 3] == 'E') {
      i += 4;
    }
    while (source[i] == ' ' || source[i] == '\t') {
      i++;
    }
    if (source[i] == '\n' || source[i] == '\0') {
      return 0;
    } else {
      return -1;
    }
  } else if (source[i] == 'n') {
    i++;
    if (source[i] == 'o') {
      i++;
    }
    while (source[i] == ' ' || source[i] == '\t') {
      i++;
    }
    if (source[i] == '\n' || source[i] == '\0') {
      return 0;
    } else {
      return -1;
    }
  } else if (source[i] == 'N') {
    i++;
    if (source[i] == 'o' || source[i] == 'O') {
      i++;
    }
    while (source[i] == ' ' || source[i] == '\t') {
      i++;
    }
    if (source[i] == '\n' || source[i] == '\0') {
      return 0;
    } else {
      return -1;
    }
  } else if (source[i] == '0') {
    i++;
    while (source[i] == ' ' || source[i] == '\t') {
      i++;
    }
    if (source[i] == '\n' || source[i] == '\0') {
      return 0;
    } else {
      return -1;
    }
  } else {
    return -1;
  }
}
```