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

```asm
<parse_uint64>:
  endbr64
  push   %r14
  xor    %ecx,%ecx
  mov    %rsi,%r14
  lea    D48(%rip),%rdx
  push   %r13
  mov    $0x563,%esi
  mov    %rdi,%r13
  push   %r12
  push   %rbp
  lea    D59(%rip),%rbp
  push   %rbx
  cmpb   $0x0,(%rdi)
  mov    %rbp,%rdi
  setne  %cl
  call   <test_true@plt>
  test   %eax,%eax
  je     L20
  movl   $0x0,(%r14)
  xor    %eax,%eax
  cmpb   $0x0,0x0(%r13)
  mov    %r13,%rbx
  lea    D4(%rip),%r12
  je     L15
  nopw   0x0(%rax,%rax,1)
L13:
  lea    (%rax,%rax,4),%eax
  add    %eax,%eax
  mov    %eax,(%r14)
  movzbl (%rbx),%edi
  call   <isdigit@plt>
  xor    %ecx,%ecx
  mov    %r12,%rdx
  mov    $0x56d,%esi
  test   %rax,%rax
  mov    %rbp,%rdi
  setne  %cl
  call   <test_true@plt>
  test   %eax,%eax
  je     L2
  movsbl (%rbx),%edx
  mov    (%r14),%eax
  add    $0x1,%rbx
  lea    -0x30(%rdx,%rax,1),%eax
  mov    %eax,(%r14)
  cmpb   $0x0,(%rbx)
  je     L15
  test   %eax,%eax
  jle    L13
  mov    %r13,%rcx
  mov    %rbp,%rdi
  mov    $0x569,%esi
  lea    D31(%rip),%rdx
  call   <test_error@plt>
  pop    %rbx
  mov    $0xffffffff,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopl   0x0(%rax,%rax,1)
L15:
  pop    %rbx
  mov    $0x1,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  xchg   %ax,%ax
L2:
  mov    %r13,%rcx
  mov    %rbp,%rdi
  mov    $0x56e,%esi
  lea    D1(%rip),%rdx
  call   <test_error@plt>
  pop    %rbx
  mov    $0xffffffff,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopl   (%rax)
L20:
  mov    %rbp,%rdi
  lea    D15(%rip),%rdx
  mov    $0x564,%esi
  call   <test_info@plt>
  pop    %rbx
  mov    $0xffffffff,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D48
type_infered: string
name: unpack_data
arguments: data_tag: D59
type_infered: string
name: unpack_data
arguments: data_tag: D4
type_infered: string
name: unpack_data
arguments: data_tag: D31
type_infered: string
name: unpack_data
arguments: data_tag: D1
type_infered: string
name: unpack_data
arguments: data_tag: D15
type_infered: string

tool: D48: *p

tool: D59: /scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/papyrussolution/OpenPapyrus/refs/heads/master/Src/OSF/OpenSSL-111/test/evp_test.c

tool: D4: isdigit((unsigned char)*p)

tool: D31: Integer overflow in string %s

tool: D1: Invalid character in string %s

tool: D15: Invalid empty integer value

assistant: ```c
int parse_uint64(const char *value, uint64_t *pr) {
  const char *p = value;
  if (!test_true("/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/papyrussolution/OpenPapyrus/refs/heads/master/Src/OSF/OpenSSL-111/test/evp_test.c", 1379, "*p", (*p) != 0)) {
    test_info("/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/papyrussolution/OpenPapyrus/refs/heads/master/Src/OSF/OpenSSL-111/test/evp_test.c", 1380, "Invalid empty integer value");
    return -1;
  }
  for (*pr = 0; *p;) {
    if (*pr > ((uint64_t)-1) / 10) {
      test_error("/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/papyrussolution/OpenPapyrus/refs/heads/master/Src/OSF/OpenSSL-111/test/evp_test.c", 1385, "Integer overflow in string %s", value);
      return -1;
    }
    *pr *= 10;
    if (!test_true("/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/papyrussolution/OpenPapyrus/refs/heads/master/Src/OSF/OpenSSL-111/test/evp_test.c", 1389, "isdigit((unsigned char)*p)", (isdigit((unsigned char)*p)) != 0)) {
      test_error("/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/papyrussolution/OpenPapyrus/refs/heads/master/Src/OSF/OpenSSL-111/test/evp_test.c", 1390, "Invalid character in string %s", value);
      return -1;
    }
    *pr += *p - '0';
    p++;
  }
  return 1;
}
```