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

```asm
<_escaped_strcpy>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movq   $0x0,-0x10(%rbp)
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L69
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rdx
  mov    %rcx,(%rdx)
  movb   $0x22,(%rax)
  jmp    L69
L128:
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x5c,%eax
  ja     L47
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D19(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D19(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rdx
  mov    %rcx,(%rdx)
  movb   $0x5c,(%rax)
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%esi
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rdx
  mov    %rcx,(%rdx)
  mov    %esi,%edx
  mov    %dl,(%rax)
  jmp    L69
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rdx
  mov    %rcx,(%rdx)
  movb   $0x5c,(%rax)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rdx
  mov    %rcx,(%rdx)
  movb   $0x62,(%rax)
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,-0x10(%rbp)
  jmp    L69
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rdx
  mov    %rcx,(%rdx)
  movb   $0x5c,(%rax)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rdx
  mov    %rcx,(%rdx)
  movb   $0x66,(%rax)
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,-0x10(%rbp)
  jmp    L69
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rdx
  mov    %rcx,(%rdx)
  movb   $0x5c,(%rax)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rdx
  mov    %rcx,(%rdx)
  movb   $0x6e,(%rax)
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,-0x10(%rbp)
  jmp    L69
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rdx
  mov    %rcx,(%rdx)
  movb   $0x5c,(%rax)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rdx
  mov    %rcx,(%rdx)
  movb   $0x72,(%rax)
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,-0x10(%rbp)
  jmp    L69
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rdx
  mov    %rcx,(%rdx)
  movb   $0x5c,(%rax)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rdx
  mov    %rcx,(%rdx)
  movb   $0x74,(%rax)
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,-0x10(%rbp)
  jmp    L69
L47:
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x7f,%eax
  jle    L125
  lea    -0x10(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <_unicode@plt>
  jmp    L38
L125:
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%esi
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rdx
  mov    %rcx,(%rdx)
  mov    %esi,%edx
  mov    %dl,(%rax)
L38:
  nop
L69:
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jne    L128
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L117
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rdx
  mov    %rcx,(%rdx)
  movb   $0x22,(%rax)
L117:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L0
  call   <__stack_chk_fail@plt>
L0:
  leave
  ret
```

assistant: ```c
void _escaped_strcpy(char **buf, uint8_t *ujstringdata) {
  uint16_t n = 0;
  if (ujstringdata[0])
    *((*buf)++) = '"';
  while (ujstringdata[n]) {
    switch (ujstringdata[n]) {
    case '"':
    case '\\':
    case '\x00':
    case '\x01':
    case '\x02':
    case '\x03':
    case '\x04':
    case '\x05':
    case '\x06':
    case '\x07':
    case '\x0B':
    case '\x0E':
    case '\x0F':
    case '\x10':
    case '\x11':
    case '\x12':
    case '\x13':
    case '\x14':
    case '\x15':
    case '\x16':
    case '\x17':
    case '\x18':
    case '\x19':
    case '\x1A':
    case '\x1B':
    case '\x1C':
    case '\x1D':
    case '\x1E':
    case '\x1F':
      *((*buf)++) = '\\';
      *((*buf)++) = (char)ujstringdata[n++];
      continue;
    case '\b':
      *((*buf)++) = '\\';
      *((*buf)++) = 'b';
      n++;
      continue;
    case '\f':
      *((*buf)++) = '\\';
      *((*buf)++) = 'f';
      n++;
      continue;
    case '\n':
      *((*buf)++) = '\\';
      *((*buf)++) = 'n';
      n++;
      continue;
    case '\r':
      *((*buf)++) = '\\';
      *((*buf)++) = 'r';
      n++;
      continue;
    case '\t':
      *((*buf)++) = '\\';
      *((*buf)++) = 't';
      n++;
      continue;
    default:
      if (ujstringdata[n] > 0x7F) {
        _unicode(buf, ujstringdata, &n);
      } else {
        *((*buf)++) = (char)ujstringdata[n++];
      }
      continue;
    }
  }
  if (ujstringdata[0])
    *((*buf)++) = '"';
}
```