user: Demonstrate the C code that generates the assembly output below:

```asm
<u8_read_escape_sequence>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %rdx,-0x58(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  cmpq   $0x0,-0x50(%rbp)
  setne  %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x30(%rbp)
  movq   $0x1,-0x20(%rbp)
  mov    -0x48(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0x31(%rbp)
  movsbl -0x31(%rbp),%eax
  mov    %eax,%edi
  call   <octal_digit@plt>
  test   %rax,%rax
  je     L100
  movq   $0x0,-0x20(%rbp)
L42:
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  mov    -0x48(%rbp),%rdx
  lea    (%rax,%rdx,1),%rcx
  mov    -0x30(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x30(%rbp)
  movzbl (%rcx),%edx
  cltq
  mov    %dl,-0x12(%rbp,%rax,1)
  mov    -0x20(%rbp),%rax
  cmp    -0x50(%rbp),%rax
  jae    L125
  mov    -0x48(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <octal_digit@plt>
  test   %rax,%rax
  je     L125
  cmpl   $0x2,-0x30(%rbp)
  jle    L42
L125:
  mov    -0x30(%rbp),%eax
  cltq
  movb   $0x0,-0x12(%rbp,%rax,1)
  lea    -0x12(%rbp),%rax
  mov    $0x8,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <strtol@plt>
  mov    %rax,-0x28(%rbp)
  jmp    L59
L100:
  cmpb   $0x78,-0x31(%rbp)
  jne    L63
  movl   $0x2,-0x2c(%rbp)
  jmp    L130
L63:
  cmpb   $0x75,-0x31(%rbp)
  jne    L153
  movl   $0x4,-0x2c(%rbp)
  jmp    L130
L153:
  cmpb   $0x55,-0x31(%rbp)
  jne    L148
  movl   $0x8,-0x2c(%rbp)
  jmp    L130
L146:
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  mov    -0x48(%rbp),%rdx
  lea    (%rax,%rdx,1),%rcx
  mov    -0x30(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x30(%rbp)
  movzbl (%rcx),%edx
  cltq
  mov    %dl,-0x12(%rbp,%rax,1)
L130:
  mov    -0x20(%rbp),%rax
  cmp    -0x50(%rbp),%rax
  jae    L127
  mov    -0x48(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <hex_digit@plt>
  test   %rax,%rax
  je     L127
  mov    -0x30(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L146
L127:
  cmpl   $0x0,-0x30(%rbp)
  jne    L94
  mov    $0x0,%eax
  jmp    L36
L94:
  mov    -0x30(%rbp),%eax
  cltq
  movb   $0x0,-0x12(%rbp,%rax,1)
  lea    -0x12(%rbp),%rax
  mov    $0x10,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <strtol@plt>
  mov    %rax,-0x28(%rbp)
  jmp    L59
L148:
  movsbl -0x31(%rbp),%eax
  mov    %eax,%edi
  call   <read_escape_control_char@plt>
  mov    %rax,-0x28(%rbp)
L59:
  mov    -0x58(%rbp),%rax
  mov    -0x28(%rbp),%rdx
  mov    %rdx,(%rax)
  mov    -0x20(%rbp),%rax
L36:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L122
  call   <__stack_chk_fail@plt>
L122:
  leave
  ret
```

assistant: ```c
size_t u8_read_escape_sequence(const char *str, size_t ssz, u_int32_t *dest) {
  assert(ssz > 0);
  u_int32_t ch;
  char digs[10];
  int dno = 0, ndig;
  size_t i = 1;
  char c0 = str[0];
  if (octal_digit(c0)) {
    i = 0;
    do {
      digs[dno++] = str[i++];
    } while (i < ssz && octal_digit(str[i]) && dno < 3);
    digs[dno] = '\0';
    ch = strtol(digs, NULL, 8);
  } else if ((c0 == 'x' && (ndig = 2)) || (c0 == 'u' && (ndig = 4)) || (c0 == 'U' && (ndig = 8))) {
    while (i < ssz && hex_digit(str[i]) && dno < ndig) {
      digs[dno++] = str[i++];
    }
    if (dno == 0)
      return 0;
    digs[dno] = '\0';
    ch = strtol(digs, NULL, 16);
  } else {
    ch = (u_int32_t)read_escape_control_char(c0);
  }
  *dest = ch;
  return i;
}
```