user: What would the C source look like for the assembly code provided here:

```asm
<_utctime_to_ulong>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x38,%rsp
  mov    %rdi,%r13
  mov    %rsi,%rbp
  mov    %edx,%ebx
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  movslq %edx,%r12
  lea    (%rsi,%r12,1),%rcx
  mov    %rsi,%rax
  cmp    %rcx,%rsi
  jae    L67
L135:
  movzbl (%rax),%esi
  lea    -0x30(%rsi),%edx
  cmp    $0x9,%dl
  ja     L215
  add    $0x1,%rax
  cmp    %rax,%rcx
  jne    L135
  mov    %rcx,%rax
L67:
  cmp    $0x11,%ebx
  jle    L166
  mov    $0xffffffff,%eax
  jmp    L118
L215:
  cmp    $0x11,%ebx
  jg     L142
  cmp    %rax,%rcx
  jbe    L166
  lea    0xa(%rbp),%rdx
  cmp    %rdx,%rax
  jb     L8
L166:
  movzbl (%rax),%edx
  lea    -0x2b(%rdx),%esi
  test   $0xfd,%sil
  je     L19
  cmp    $0x5a,%dl
  jne    L232
L19:
  cmp    $0x5a,%dl
  je     L148
  cmp    $0x2f,%dl
  jg     L96
  add    $0x5,%rax
  cmp    %rax,%rcx
  jne    L183
L96:
  mov    %rsp,%rdi
  mov    $0x20,%edx
  mov    $0x0,%esi
  call   <memset@plt>
  add    $0x2,%r12
  cmp    $0x20,%r12
  ja     L254
  mov    $0x2,%esi
  mov    %rbp,%rdi
  call   <get_num@plt>
  test   %eax,%eax
  js     L208
  cmp    $0x31,%eax
  jg     L79
  mov    %rsp,%rdi
  lea    D15(%rip),%rsi
  call   <strcpy@plt>
L111:
  mov    %rsp,%r12
  lea    0x2(%rsp),%rdi
  mov    %ebx,%edx
  mov    %rbp,%rsi
  call   <memcpy@plt>
  lea    0x2(%rbx),%edx
  mov    %r12,%rsi
  mov    %r13,%rdi
  call   <_gentime_to_ulong@plt>
  lea    -0x2(%rax),%edx
  test   %eax,%eax
  cmovg  %edx,%eax
L118:
  mov    0x28(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L250
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L148:
  add    $0x1,%rax
  cmp    %rax,%rcx
  je     L96
  mov    $0xffffffff,%eax
  jmp    L118
L79:
  mov    %rsp,%rdi
  lea    D2(%rip),%rsi
  call   <strcpy@plt>
  jmp    L111
L142:
  mov    $0xffffffff,%eax
  jmp    L118
L8:
  mov    $0xffffffff,%eax
  jmp    L118
L232:
  mov    $0xffffffff,%eax
  jmp    L118
L183:
  mov    $0xffffffff,%eax
  jmp    L118
L254:
  mov    $0xffffffff,%eax
  jmp    L118
L208:
  mov    $0xffffffff,%eax
  jmp    L118
L250:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: tag: D15
type_guessed: string
name: retrieve_data
arguments: tag: D2
type_guessed: string

tool: D15: 20

tool: D2: 19

assistant: ```c
int _utctime_to_ulong(int64_t *valp, char *fromp, int lth) {
  int yr;
  char *b, *ep;
  for (b = fromp, ep = &fromp[lth]; b < ep && *b >= '0' && *b <= '9'; b++)
    ;
  if (lth > 17 || (b < ep && b < &fromp[(((((0 + 2) + 2) + 2) + 2) + 2)]) || (*b != 'Z' && *b != '+' && *b != '-') || (*b == 'Z' && ep != &b[1]) || (*b < '0' && ep != &b[(1 + 2) + 2]))
    return -1;
  char genfrom[32];
  memset(genfrom, 0, 32);
  if ((size_t)lth + 2 > sizeof(genfrom))
    return -1;
  yr = (int)get_num(&fromp[0], 2);
  if (yr < 0)
    return -1;
  if (yr < 50)
    strcpy(genfrom, "20");
  else
    strcpy(genfrom, "19");
  memcpy(&genfrom[2], fromp, lth);
  int ansr = _gentime_to_ulong(valp, genfrom, lth + 2);
  if (ansr <= 0)
    return ansr;
  return ansr - 2;
}
```