user: What is the c source code of the assembly code below:

```asm
<escape>:
  endbr64
  movzbl (%rdi),%eax
  test   %al,%al
  je     L47
  push   %r15
  lea    D37(%rip),%r15
  push   %r14
  lea    D31(%rip),%r14
  push   %r13
  mov    %rdi,%r13
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  mov    %rdi,%rbp
  lea    D0(%rip),%rdi
  push   %rbx
  sub    $0x8,%rsp
  jmp    L224
  nopl   (%rax)
L226:
  mov    %rbx,%rax
  mov    %r12,%rbx
  mov    %rax,%r12
L132:
  movzbl 0x1(%rbx),%eax
  add    $0x1,%rbp
  mov    %al,0x0(%rbp)
  test   %al,%al
  je     L291
L224:
  lea    0x1(%r12),%rbx
  cmp    $0x5c,%al
  jne    L226
  movzbl 0x1(%r12),%edx
  lea    -0x30(%rdx),%eax
  cmp    $0x48,%al
  ja     L49
  movzbl %al,%eax
  movslq (%r14,%rax,4),%rax
  add    %r14,%rax
  notrack jmp *%rax
  nopl   0x0(%rax,%rax,1)
L291:
  add    $0x8,%rsp
  mov    %ebp,%eax
  pop    %rbx
  sub    %r13d,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  movb   $0x7,0x0(%rbp)
  add    $0x2,%r12
  jmp    L132
  xchg   %ax,%ax
L49:
  movb   $0x0,0x2(%r12)
  mov    %r12,%rsi
  xor    %r8d,%r8d
  xor    %ecx,%ecx
  xor    %edx,%edx
  add    $0x2,%r12
  call   <bad@plt>
  lea    D0(%rip),%rdi
  jmp    L132
  nopw   0x0(%rax,%rax,1)
  sub    $0x30,%edx
  lea    0x3(%r12),%rax
  mov    %rbx,%r8
  movsbl %dl,%ecx
L277:
  mov    %r8,%rbx
  add    $0x1,%r8
  mov    %r8,%r12
  jmp    L22
  nopw   0x0(%rax,%rax,1)
L104:
  movsbl 0x1(%rbx),%edx
  lea    -0x30(%rdx),%esi
  cmp    $0x7,%esi
  jbe    L135
  mov    %rbx,%rax
L22:
  cmp    %rax,%rbx
  jb     L104
  mov    %cl,0x0(%rbp)
  jmp    L132
  movb   $0x1b,0x0(%rbp)
  add    $0x2,%r12
  jmp    L132
  lea    0x2(%r12),%rsi
  xor    %edx,%edx
L283:
  movsbl 0x1(%rbx),%ecx
  lea    0x1(%rbx),%r12
  mov    %ecx,%eax
  sub    $0x30,%eax
  cmp    $0x4d,%al
  ja     L18
  movzbl %al,%eax
  movslq (%r15,%rax,4),%rax
  add    %r15,%rax
  notrack jmp *%rax
  cmp    %r12,%rsi
  je     L41
  nopl   0x0(%rax,%rax,1)
L18:
  mov    %dl,0x0(%rbp)
  jmp    L132
  shl    $0x4,%edx
  lea    -0x30(%rcx,%rdx,1),%edx
L280:
  mov    %r12,%rbx
  jmp    L283
  movb   $0x20,0x0(%rbp)
  add    $0x2,%r12
  jmp    L132
  movb   $0x8,0x0(%rbp)
  add    $0x2,%r12
  jmp    L132
  movzbl 0x2(%r12),%eax
  test   %al,%al
  jne    L172
  movb   $0x0,0x0(%rbp)
  add    $0x2,%r12
  jmp    L132
  movb   $0xc,0x0(%rbp)
  add    $0x2,%r12
  jmp    L132
  movb   $0xb,0x0(%rbp)
  add    $0x2,%r12
  jmp    L132
  movb   $0x9,0x0(%rbp)
  add    $0x2,%r12
  jmp    L132
  movb   $0xd,0x0(%rbp)
  add    $0x2,%r12
  jmp    L132
  movb   $0xa,0x0(%rbp)
  add    $0x2,%r12
  jmp    L132
  shl    $0x4,%edx
  lea    -0x37(%rcx,%rdx,1),%edx
  jmp    L280
  shl    $0x4,%edx
  lea    -0x57(%rcx,%rdx,1),%edx
  jmp    L280
  test   %rsi,%rsi
  jne    L18
  lea    0x2(%rbx),%rax
  mov    %r12,%rbx
  mov    %rax,%r12
  jmp    L18
  nopw   0x0(%rax,%rax,1)
L135:
  lea    -0x30(%rdx,%rcx,8),%ecx
  jmp    L277
  nopl   0x0(%rax)
L47:
  xor    %eax,%eax
  ret
  nopl   0x0(%rax,%rax,1)
L172:
  and    $0x1f,%eax
  lea    0x2(%r12),%rbx
  add    $0x3,%r12
  mov    %al,0x0(%rbp)
  jmp    L132
L41:
  xor    %esi,%esi
  jmp    L280
```

tool_calls: name: retrieve_data
arguments: data_tag: D0
type_infered: string

tool: D0: invalid C \ escape


assistant: ```c
int escape(char *s) {
  char *b;
  char *t;
  char *q;
  char *e;
  int c;
  for (b = t = s; *t = *s; s++, t++)
    if (*s == '\\')
      switch (*++s) {
      case '\\':
        break;
      case 'a':
        *t = '\a';
        break;
      case 'b':
        *t = '\b';
        break;
      case 'c':
        if (*t = *++s)
          *t &= 037;
        else
          s--;
        break;
      case 'e':
      case 'E':
        *t = 033;
        break;
      case 'f':
        *t = '\f';
        break;
      case 'n':
        *t = '\n';
        break;
      case 'r':
        *t = '\r';
        break;
      case 's':
        *t = ' ';
        break;
      case 't':
        *t = '\t';
        break;
      case 'v':
        *t = '\v';
        break;
      case 'u':
      case 'x':
        c = 0;
        q = c == 'u' ? (s + 5) : (char *)0;
        e = s + 1;
        while (!e || !q || s < q) {
          switch (*++s) {
          case 'a':
          case 'b':
          case 'c':
          case 'd':
          case 'e':
          case 'f':
            c = (c << 4) + *s - 'a' + 10;
            continue;
          case 'A':
          case 'B':
          case 'C':
          case 'D':
          case 'E':
          case 'F':
            c = (c << 4) + *s - 'A' + 10;
            continue;
          case '0':
          case '1':
          case '2':
          case '3':
          case '4':
          case '5':
          case '6':
          case '7':
          case '8':
          case '9':
            c = (c << 4) + *s - '0';
            continue;
          case '{':
          case '[':
            if (s != e) {
              s--;
              break;
            }
            e = 0;
            continue;
          case '}':
          case ']':
            if (e)
              s--;
            break;
          default:
            s--;
            break;
          }
          break;
        }
        *t = c;
        break;
      case '0':
      case '1':
      case '2':
      case '3':
      case '4':
      case '5':
      case '6':
      case '7':
        c = *s - '0';
        q = s + 2;
        while (s < q) {
          switch (*++s) {
          case '0':
          case '1':
          case '2':
          case '3':
          case '4':
          case '5':
          case '6':
          case '7':
            c = (c << 3) + *s - '0';
            break;
          default:
            q = --s;
            break;
          }
        }
        *t = c;
        break;
      default:
        *(s + 1) = 0;
        bad("invalid C \\ escape\n", s - 1, 0, 0, 0);
      }
  return t - b;
}
```