user: 下面的汇编指令对应的C源代码是什么:

```asm
<main>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  lea    -0x50000(%rsp),%r11
L276:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L276
  sub    $0x18,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x50008(%rsp)
  xor    %eax,%eax
  cmp    $0x1,%edi
  je     L112
  mov    $0x1,%eax
  cmp    $0x2,%edi
  je     L202
L207:
  mov    0x50008(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L235
  add    $0x50018,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L202:
  mov    0x8(%rsi),%rcx
  mov    %rsi,%r12
  xor    %esi,%esi
L152:
  movzbl (%rcx,%rsi,1),%eax
  mov    %esi,%r9d
  test   %al,%al
  jne    L25
  xor    %ebx,%ebx
  xor    %r13d,%r13d
  lea    D4(%rip),%rbp
  movslq %ebx,%rdx
  movzbl (%rcx,%rdx,1),%eax
  test   %al,%al
  je     L117
  nopl   0x0(%rax)
L72:
  sub    $0x2b,%eax
  cmp    $0x32,%al
  ja     L87
  movzbl %al,%eax
  movslq 0x0(%rbp,%rax,4),%rax
  add    %rbp,%rax
  notrack jmp *%rax
  movslq %r13d,%rax
  cmpb   $0x0,0x40000(%rsp,%rax,1)
  je     L87
L76:
  mov    (%rsp,%rdx,4),%ebx
  nopl   (%rax)
L87:
  add    $0x1,%ebx
  movslq %ebx,%rdx
  movzbl (%rcx,%rdx,1),%eax
  test   %al,%al
  jne    L72
L117:
  xor    %eax,%eax
  jmp    L207
  movslq %r13d,%rax
  cmpb   $0x0,0x40000(%rsp,%rax,1)
  jne    L87
  jmp    L76
  add    $0x1,%r13d
  jmp    L87
  sub    $0x1,%r13d
  jmp    L87
  movslq %r13d,%rax
  movzbl 0x40000(%rsp,%rax,1),%edi
  call   <putchar@plt>
  mov    0x8(%r12),%rcx
  jmp    L87
  movslq %r13d,%rax
  subb   $0x1,0x40000(%rsp,%rax,1)
  jmp    L87
  xor    %eax,%eax
  call   <getchar@plt>
  cmp    $0xd,%al
  je     L192
  movslq %r13d,%rdx
  mov    0x8(%r12),%rcx
  mov    %al,0x40000(%rsp,%rdx,1)
  jmp    L87
  movslq %r13d,%rax
  addb   $0x1,0x40000(%rsp,%rax,1)
  jmp    L87
L112:
  lea    D13(%rip),%rdi
  call   <puts@plt>
  xor    %eax,%eax
  jmp    L207
L25:
  cmp    $0x5b,%al
  je     L95
L7:
  add    $0x1,%rsi
  jmp    L152
L192:
  movslq %r13d,%rax
  mov    0x8(%r12),%rcx
  movb   $0xa,0x40000(%rsp,%rax,1)
  jmp    L87
L95:
  lea    0x1(%rsi),%eax
  xor    %edi,%edi
  cltq
  jmp    L29
L243:
  cmp    $0x5d,%dl
  je     L268
L198:
  add    $0x1,%rax
L29:
  movzbl (%rcx,%rax,1),%edx
  movslq %eax,%r8
  cmp    $0x5b,%dl
  jne    L243
  add    $0x1,%edi
  jmp    L198
L268:
  test   %edi,%edi
  je     L90
  sub    $0x1,%edi
  jmp    L198
L90:
  mov    %eax,(%rsp,%rsi,4)
  mov    %r9d,(%rsp,%r8,4)
  jmp    L7
L235:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: tag: D13
datatype: string

tool: D13: usage bfi ">[brainfuckcode]<.,+-"


assistant: ```c
int main(int argc, char **argv) {
  if (argc == 1) {
    puts("usage bfi \">[brainfuckcode]<.,+-\"\n");
    return 0;
  } else if (argc == 2) {
    int i, ptr = 0;
    unsigned char data[65536];
    unsigned int jump[65536];
    for (i = 0;; i++) {
      if (!argv[1][i])
        break;
      if (argv[1][i] == '[') {
        int o = i, skip = 0;
        for (;;) {
          i++;
          if (argv[1][i] == '[')
            skip++;
          else if (argv[1][i] == ']') {
            if (skip > 0) {
              skip--;
            } else {
              jump[o] = i;
              jump[i] = o;
              i = o;
              break;
            }
          }
        }
      }
    }
    for (i = 0;; i++) {
      switch (argv[1][i]) {
      case '>':
        ptr++;
        break;
      case '<':
        ptr--;
        break;
      case '+':
        data[ptr]++;
        break;
      case '-':
        data[ptr]--;
        break;
      case '[':
        if (data[ptr] == 0)
          i = jump[i];
        break;
      case ']':
        if (data[ptr] != 0)
          i = jump[i];
        break;
      case '.':
        putchar(data[ptr]);
        break;
      case ',':
        data[ptr] = getchar();
        if (data[ptr] == 13)
          data[ptr] = 10;
        break;
      case 0:
        return 0;
      }
    }
  }
  return 1;
}
```