user: Please show me the C implementation that matches the assembly code listed below:

```asm
<httpdate_to_timet>:
  endbr64
  push   %rbx
  sub    $0x460,%rsp
  mov    %rdi,%rbx
  mov    %fs:0x28,%rax
  mov    %rax,0x458(%rsp)
  xor    %eax,%eax
  lea    0x30(%rsp),%rdi
  mov    $0x28,%edx
  mov    $0x0,%esi
  call   <memset@plt>
  movzbl (%rbx),%eax
  cmp    $0x20,%al
  je     L310
  cmp    $0x9,%al
  jne    L133
L310:
  add    $0x1,%rbx
  movzbl (%rbx),%eax
  cmp    $0x20,%al
  je     L310
  cmp    $0x9,%al
  je     L310
L133:
  lea    0x60(%rsp),%rcx
  lea    0x18(%rsp),%rdx
  lea    0xc(%rsp),%rax
  push   %rax
  lea    0x18(%rsp),%rax
  push   %rax
  lea    0x24(%rsp),%r9
  lea    0x2c(%rsp),%r8
  lea    D19(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x10,%rsp
  cmp    $0x6,%eax
  je     L307
L54:
  lea    0x60(%rsp),%rcx
  lea    0x18(%rsp),%rdx
  lea    0xc(%rsp),%rax
  push   %rax
  lea    0x18(%rsp),%rax
  push   %rax
  lea    0x24(%rsp),%r9
  lea    0x2c(%rsp),%r8
  lea    D16(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x10,%rsp
  cmp    $0x6,%eax
  je     L47
L254:
  lea    0x10(%rsp),%rcx
  lea    0x14(%rsp),%rdx
  lea    0x1c(%rsp),%rax
  push   %rax
  lea    0x68(%rsp),%rax
  push   %rax
  lea    0x28(%rsp),%r9
  lea    0x1c(%rsp),%r8
  lea    D4(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x10,%rsp
  cmp    $0x6,%eax
  je     L339
L260:
  lea    0x10(%rsp),%rcx
  lea    0x14(%rsp),%rdx
  lea    0x1c(%rsp),%rax
  push   %rax
  lea    0x68(%rsp),%rax
  push   %rax
  lea    0x28(%rsp),%r9
  lea    0x1c(%rsp),%r8
  lea    D25(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x10,%rsp
  cmp    $0x6,%eax
  je     L93
L186:
  lea    0x18(%rsp),%rcx
  lea    0x260(%rsp),%rdx
  sub    $0x8,%rsp
  lea    0x14(%rsp),%rax
  push   %rax
  lea    0x20(%rsp),%rax
  push   %rax
  lea    0x2c(%rsp),%rax
  push   %rax
  lea    0x3c(%rsp),%r9
  lea    0x80(%rsp),%r8
  lea    D40(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x20,%rsp
  cmp    $0x7,%eax
  je     L296
L227:
  lea    0x18(%rsp),%rcx
  lea    0x260(%rsp),%rdx
  sub    $0x8,%rsp
  lea    0x14(%rsp),%rax
  push   %rax
  lea    0x20(%rsp),%rax
  push   %rax
  lea    0x2c(%rsp),%rax
  push   %rax
  lea    0x3c(%rsp),%r9
  lea    0x80(%rsp),%r8
  lea    D32(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x20,%rsp
  cmp    $0x7,%eax
  je     L248
L255:
  lea    0x60(%rsp),%rcx
  lea    0x260(%rsp),%rdx
  sub    $0x8,%rsp
  lea    0x24(%rsp),%rax
  push   %rax
  lea    0x1c(%rsp),%rax
  push   %rax
  lea    0x28(%rsp),%rax
  push   %rax
  lea    0x34(%rsp),%r9
  lea    0x38(%rsp),%r8
  lea    D48(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x20,%rsp
  cmp    $0x7,%eax
  jne    L92
  lea    0x28(%rsp),%rsi
  lea    0x260(%rsp),%rdi
  call   <scan_wday@plt>
  test   %rax,%rax
  je     L1
  lea    0x20(%rsp),%rsi
  lea    0x60(%rsp),%rdi
  call   <scan_mon@plt>
  test   %rax,%rax
  je     L303
  mov    0x28(%rsp),%rax
  mov    %rax,0x50(%rsp)
  mov    0x20(%rsp),%rax
  mov    %rax,0x38(%rsp)
  mov    0x18(%rsp),%eax
  mov    %eax,0x30(%rsp)
  mov    0x14(%rsp),%eax
  mov    %eax,0x44(%rsp)
  mov    0x10(%rsp),%eax
  mov    %eax,0x48(%rsp)
  mov    0xc(%rsp),%eax
  mov    %eax,0x4c(%rsp)
  mov    0x1c(%rsp),%eax
  mov    %eax,0x40(%rsp)
L181:
  mov    0x40(%rsp),%eax
  cmp    $0x76c,%eax
  jle    L126
  sub    $0x76c,%eax
  mov    %eax,0x40(%rsp)
L88:
  lea    0x30(%rsp),%rdi
  call   <tm_to_time@plt>
L275:
  mov    0x458(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L51
  add    $0x460,%rsp
  pop    %rbx
  ret
L307:
  lea    0x20(%rsp),%rsi
  lea    0x60(%rsp),%rdi
  call   <scan_mon@plt>
  test   %rax,%rax
  je     L54
  mov    0x18(%rsp),%eax
  mov    %eax,0x30(%rsp)
  mov    0x20(%rsp),%rax
  mov    %rax,0x38(%rsp)
  mov    0x1c(%rsp),%eax
  mov    %eax,0x40(%rsp)
  mov    0x14(%rsp),%eax
  mov    %eax,0x44(%rsp)
  mov    0x10(%rsp),%eax
  mov    %eax,0x48(%rsp)
  mov    0xc(%rsp),%eax
  mov    %eax,0x4c(%rsp)
  jmp    L181
L47:
  lea    0x20(%rsp),%rsi
  lea    0x60(%rsp),%rdi
  call   <scan_mon@plt>
  test   %rax,%rax
  je     L254
  mov    0x18(%rsp),%eax
  mov    %eax,0x30(%rsp)
  mov    0x20(%rsp),%rax
  mov    %rax,0x38(%rsp)
  mov    0x1c(%rsp),%eax
  mov    %eax,0x40(%rsp)
  mov    0x14(%rsp),%eax
  mov    %eax,0x44(%rsp)
  mov    0x10(%rsp),%eax
  mov    %eax,0x48(%rsp)
  mov    0xc(%rsp),%eax
  mov    %eax,0x4c(%rsp)
  jmp    L181
L339:
  lea    0x20(%rsp),%rsi
  lea    0x60(%rsp),%rdi
  call   <scan_mon@plt>
  test   %rax,%rax
  je     L260
  mov    0x14(%rsp),%eax
  mov    %eax,0x44(%rsp)
  mov    0x10(%rsp),%eax
  mov    %eax,0x48(%rsp)
  mov    0xc(%rsp),%eax
  mov    %eax,0x4c(%rsp)
  mov    0x18(%rsp),%eax
  mov    %eax,0x30(%rsp)
  mov    0x20(%rsp),%rax
  mov    %rax,0x38(%rsp)
  mov    0x1c(%rsp),%eax
  mov    %eax,0x40(%rsp)
  jmp    L181
L93:
  lea    0x20(%rsp),%rsi
  lea    0x60(%rsp),%rdi
  call   <scan_mon@plt>
  test   %rax,%rax
  je     L186
  mov    0x14(%rsp),%eax
  mov    %eax,0x44(%rsp)
  mov    0x10(%rsp),%eax
  mov    %eax,0x48(%rsp)
  mov    0xc(%rsp),%eax
  mov    %eax,0x4c(%rsp)
  mov    0x18(%rsp),%eax
  mov    %eax,0x30(%rsp)
  mov    0x20(%rsp),%rax
  mov    %rax,0x38(%rsp)
  mov    0x1c(%rsp),%eax
  mov    %eax,0x40(%rsp)
  jmp    L181
L296:
  lea    0x28(%rsp),%rsi
  lea    0x260(%rsp),%rdi
  call   <scan_wday@plt>
  test   %rax,%rax
  je     L227
  lea    0x20(%rsp),%rsi
  lea    0x60(%rsp),%rdi
  call   <scan_mon@plt>
  test   %rax,%rax
  je     L227
  mov    0x28(%rsp),%rax
  mov    %rax,0x50(%rsp)
  mov    0x18(%rsp),%eax
  mov    %eax,0x30(%rsp)
  mov    0x20(%rsp),%rax
  mov    %rax,0x38(%rsp)
  mov    0x1c(%rsp),%eax
  mov    %eax,0x40(%rsp)
  mov    0x14(%rsp),%eax
  mov    %eax,0x44(%rsp)
  mov    0x10(%rsp),%eax
  mov    %eax,0x48(%rsp)
  mov    0xc(%rsp),%eax
  mov    %eax,0x4c(%rsp)
  jmp    L181
L248:
  lea    0x28(%rsp),%rsi
  lea    0x260(%rsp),%rdi
  call   <scan_wday@plt>
  test   %rax,%rax
  je     L255
  lea    0x20(%rsp),%rsi
  lea    0x60(%rsp),%rdi
  call   <scan_mon@plt>
  test   %rax,%rax
  je     L255
  mov    0x28(%rsp),%rax
  mov    %rax,0x50(%rsp)
  mov    0x18(%rsp),%eax
  mov    %eax,0x30(%rsp)
  mov    0x20(%rsp),%rax
  mov    %rax,0x38(%rsp)
  mov    0x1c(%rsp),%eax
  mov    %eax,0x40(%rsp)
  mov    0x14(%rsp),%eax
  mov    %eax,0x44(%rsp)
  mov    0x10(%rsp),%eax
  mov    %eax,0x48(%rsp)
  mov    0xc(%rsp),%eax
  mov    %eax,0x4c(%rsp)
  jmp    L181
L126:
  cmp    $0x45,%eax
  jg     L88
  add    $0x64,%eax
  mov    %eax,0x40(%rsp)
  jmp    L88
L92:
  mov    $0xffffffff,%eax
  jmp    L275
L1:
  mov    $0xffffffff,%eax
  jmp    L275
L303:
  mov    $0xffffffff,%eax
  jmp    L275
L51:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: tag: D19
type_guessed: string
name: parse_data
arguments: tag: D16
type_guessed: string
name: parse_data
arguments: tag: D4
type_guessed: string
name: parse_data
arguments: tag: D25
type_guessed: string
name: parse_data
arguments: tag: D40
type_guessed: string
name: parse_data
arguments: tag: D32
type_guessed: string
name: parse_data
arguments: tag: D48
type_guessed: string

tool: D19: %d-%[a-zA-Z]-%d %d:%d:%d GMT

tool: D16: %d %[a-zA-Z] %d %d:%d:%d GMT

tool: D4: %d:%d:%d GMT %d-%[a-zA-Z]-%d

tool: D25: %d:%d:%d GMT %d %[a-zA-Z] %d

tool: D40: %[a-zA-Z], %d-%[a-zA-Z]-%d %d:%d:%d GMT

tool: D32: %[a-zA-Z], %d %[a-zA-Z] %d %d:%d:%d GMT

tool: D48: %[a-zA-Z] %[a-zA-Z] %d %d:%d:%d GMT %d

assistant: ```c
time_t httpdate_to_timet(const char *str) {
  struct tm tm;
  const char *cp;
  char str_mon[500], str_wday[500];
  int tm_sec, tm_min, tm_hour, tm_mday, tm_year;
  long tm_mon, tm_wday;
  time_t t;
  memset((char *)&tm, 0, sizeof(struct tm));
  for (cp = str; *cp == ' ' || *cp == '\t'; ++cp)
    ;
  if (sscanf(cp, "%d-%[a-zA-Z]-%d %d:%d:%d GMT", &tm_mday, str_mon, &tm_year, &tm_hour, &tm_min, &tm_sec) == 6 && scan_mon(str_mon, &tm_mon)) {
    tm.tm_mday = tm_mday;
    tm.tm_mon = tm_mon;
    tm.tm_year = tm_year;
    tm.tm_hour = tm_hour;
    tm.tm_min = tm_min;
    tm.tm_sec = tm_sec;
  } else if (sscanf(cp, "%d %[a-zA-Z] %d %d:%d:%d GMT", &tm_mday, str_mon, &tm_year, &tm_hour, &tm_min, &tm_sec) == 6 && scan_mon(str_mon, &tm_mon)) {
    tm.tm_mday = tm_mday;
    tm.tm_mon = tm_mon;
    tm.tm_year = tm_year;
    tm.tm_hour = tm_hour;
    tm.tm_min = tm_min;
    tm.tm_sec = tm_sec;
  } else if (sscanf(cp, "%d:%d:%d GMT %d-%[a-zA-Z]-%d", &tm_hour, &tm_min, &tm_sec, &tm_mday, str_mon, &tm_year) == 6 && scan_mon(str_mon, &tm_mon)) {
    tm.tm_hour = tm_hour;
    tm.tm_min = tm_min;
    tm.tm_sec = tm_sec;
    tm.tm_mday = tm_mday;
    tm.tm_mon = tm_mon;
    tm.tm_year = tm_year;
  } else if (sscanf(cp, "%d:%d:%d GMT %d %[a-zA-Z] %d", &tm_hour, &tm_min, &tm_sec, &tm_mday, str_mon, &tm_year) == 6 && scan_mon(str_mon, &tm_mon)) {
    tm.tm_hour = tm_hour;
    tm.tm_min = tm_min;
    tm.tm_sec = tm_sec;
    tm.tm_mday = tm_mday;
    tm.tm_mon = tm_mon;
    tm.tm_year = tm_year;
  } else if (sscanf(cp, "%[a-zA-Z], %d-%[a-zA-Z]-%d %d:%d:%d GMT", str_wday, &tm_mday, str_mon, &tm_year, &tm_hour, &tm_min, &tm_sec) == 7 && scan_wday(str_wday, &tm_wday) && scan_mon(str_mon, &tm_mon)) {
    tm.tm_wday = tm_wday;
    tm.tm_mday = tm_mday;
    tm.tm_mon = tm_mon;
    tm.tm_year = tm_year;
    tm.tm_hour = tm_hour;
    tm.tm_min = tm_min;
    tm.tm_sec = tm_sec;
  } else if (sscanf(cp, "%[a-zA-Z], %d %[a-zA-Z] %d %d:%d:%d GMT", str_wday, &tm_mday, str_mon, &tm_year, &tm_hour, &tm_min, &tm_sec) == 7 && scan_wday(str_wday, &tm_wday) && scan_mon(str_mon, &tm_mon)) {
    tm.tm_wday = tm_wday;
    tm.tm_mday = tm_mday;
    tm.tm_mon = tm_mon;
    tm.tm_year = tm_year;
    tm.tm_hour = tm_hour;
    tm.tm_min = tm_min;
    tm.tm_sec = tm_sec;
  } else if (sscanf(cp, "%[a-zA-Z] %[a-zA-Z] %d %d:%d:%d GMT %d", str_wday, str_mon, &tm_mday, &tm_hour, &tm_min, &tm_sec, &tm_year) == 7 && scan_wday(str_wday, &tm_wday) && scan_mon(str_mon, &tm_mon)) {
    tm.tm_wday = tm_wday;
    tm.tm_mon = tm_mon;
    tm.tm_mday = tm_mday;
    tm.tm_hour = tm_hour;
    tm.tm_min = tm_min;
    tm.tm_sec = tm_sec;
    tm.tm_year = tm_year;
  } else
    return (time_t)-1;
  if (tm.tm_year > 1900)
    tm.tm_year -= 1900;
  else if (tm.tm_year < 70)
    tm.tm_year += 100;
  t = tm_to_time(&tm);
  return t;
}
```