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

```asm
<parseaddr_route>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    (%rdi),%rbp
  mov    %rsi,(%rsp)
  mov    %rdi,0x8(%rsp)
  movsbl 0x0(%rbp),%edi
L185:
  test   %edi,%edi
  je     L478
L93:
  lea    0x1(%rbp),%rbx
  cmp    $0x28,%edi
  je     L328
  call   <isspace@plt>
  test   %rax,%rax
  je     L478
  movsbl 0x1(%rbp),%edi
  mov    %rbx,%rbp
  test   %edi,%edi
  jne    L93
L478:
  mov    %rbp,%rbx
  lea    0x1(%rbp),%r15
L39:
  mov    (%rsp),%rax
  mov    %rbx,%r12
  movabs $0x2800000100003,%r13
  mov    %rbx,(%rax)
  movzbl (%rbx),%ebp
  cs nopw 0x0(%rax,%rax,1)
L183:
  movzbl %bpl,%r14d
  mov    %r14d,%edi
  call   <isalnum@plt>
  test   %rax,%rax
  jne    L67
  lea    -0x2c(%rbp),%eax
  cmp    $0x31,%al
  ja     L441
  bt     %rax,%r13
  jb     L67
  cmp    $0x2,%al
  je     L324
L441:
  mov    %r14d,%edi
  call   <isspace@plt>
  cmp    $0x28,%bpl
  je     L251
  test   %rax,%rax
  je     L273
L251:
  movsbl (%rbx),%edi
  mov    %rbx,%r14
  test   %edi,%edi
  jne    L123
  jmp    L454
  nopl   0x0(%rax)
L471:
  call   <isspace@plt>
  test   %rax,%rax
  je     L190
  movzbl 0x1(%r14),%ebp
  mov    %rbx,%r14
  movsbl %bpl,%edi
L302:
  test   %edi,%edi
  je     L97
L123:
  lea    0x1(%r14),%rbx
  cmp    $0x28,%edi
  jne    L471
  movzbl 0x1(%r14),%ebp
  mov    $0x1,%esi
  nopl   (%rax)
L460:
  lea    0x1(%rbx),%r15
  movsbl %bpl,%eax
  mov    %r15,%r14
  test   %eax,%eax
  je     L454
L197:
  movzbl 0x1(%rbx),%ebp
  cmp    $0x5c,%eax
  je     L4
  cmp    $0x28,%eax
  je     L485
  cmp    $0x29,%eax
  jne    L465
  sub    $0x1,%esi
  je     L3
  mov    %r15,%rbx
  movsbl %bpl,%eax
  lea    0x1(%rbx),%r15
  mov    %r15,%r14
  test   %eax,%eax
  jne    L197
  nopl   0x0(%rax)
L454:
  xor    %ebp,%ebp
  jmp    L183
L328:
  movzbl 0x1(%rbp),%eax
  mov    $0x1,%esi
L80:
  lea    0x1(%rbx),%r15
  movsbl %al,%ecx
  mov    %r15,%rbp
  test   %ecx,%ecx
  je     L39
  movzbl 0x1(%rbx),%eax
  cmp    $0x5c,%ecx
  je     L316
L117:
  cmp    $0x28,%ecx
  je     L85
  cmp    $0x29,%ecx
  jne    L423
  sub    $0x1,%esi
  je     L132
  mov    %r15,%rbx
  movsbl %al,%ecx
  lea    0x1(%rbx),%r15
  mov    %r15,%rbp
  test   %ecx,%ecx
  je     L39
  movzbl 0x1(%rbx),%eax
  cmp    $0x5c,%ecx
  jne    L117
L316:
  test   %al,%al
  je     L423
  movzbl 0x2(%rbx),%eax
  lea    0x2(%rbx),%rbp
L423:
  mov    %rbp,%rbx
  jmp    L80
  nopl   0x0(%rax)
L4:
  test   %bpl,%bpl
  je     L465
  movzbl 0x2(%rbx),%ebp
  lea    0x2(%rbx),%r14
L465:
  mov    %r14,%rbx
  jmp    L460
  nopl   (%rax)
L485:
  add    $0x1,%esi
  mov    %r15,%rbx
  jmp    L460
  nopl   0x0(%rax,%rax,1)
L67:
  mov    %bpl,(%r12)
  add    $0x1,%r12
  movzbl 0x1(%rbx),%ebp
  mov    %r15,%rbx
  add    $0x1,%r15
  jmp    L183
  nopl   0x0(%rax,%rax,1)
L3:
  movsbl %bpl,%edi
  jmp    L302
L324:
  mov    (%rsp),%rax
  cmp    %r12,(%rax)
  jae    L341
  cmpb   $0x2e,-0x1(%r12)
  je     L341
  movb   $0x2e,(%r12)
  add    $0x1,%r12
  movzbl 0x1(%rbx),%ebp
  mov    %r15,%rbx
  add    $0x1,%r15
  jmp    L183
  nopl   0x0(%rax,%rax,1)
L341:
  movzbl 0x1(%rbx),%ebp
  mov    %r15,%rbx
  add    $0x1,%r15
  jmp    L183
  nopl   0x0(%rax,%rax,1)
L85:
  add    $0x1,%esi
  mov    %r15,%rbx
  jmp    L80
  nopl   0x0(%rax,%rax,1)
L190:
  movzbl (%r14),%ebp
  mov    %r14,%rbx
  lea    0x1(%r14),%r15
  jmp    L183
L132:
  movsbl %al,%edi
  jmp    L185
L273:
  mov    (%rsp),%rax
  mov    (%rax),%rsi
  cmp    %r12,%rsi
  jae    L476
  nopl   0x0(%rax)
L392:
  movzbl -0x1(%r12),%eax
  mov    %eax,%ecx
  and    $0xfffffffd,%ecx
  cmp    $0x2c,%cl
  je     L306
  cmp    $0x40,%al
  jne    L476
L306:
  sub    $0x1,%r12
  cmp    %r12,%rsi
  jne    L392
L177:
  mov    0x8(%rsp),%rax
  movb   $0x0,(%rsi)
  mov    %r15,(%rax)
  add    $0x18,%rsp
  movsbl %bpl,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L476:
  mov    %r12,%rsi
  jmp    L177
L97:
  mov    %r14,%rbx
  lea    0x1(%r14),%r15
  jmp    L183
```

assistant: ```c
int parseaddr_route(char **inp, char **routep) {
  char c;
  char *src = *inp;
  char *dst;
  {
    int _c, _comment = 0;
    while ((_c = *(src))) {
      if (_c == '(') {
        _comment = 1;
        (src)++;
        while ((_comment && (_c = *(src)))) {
          (src)++;
          if (_c == '\\' && *(src))
            (src)++;
          else if (_c == '(')
            _comment++;
          else if (_c == ')')
            _comment--;
        }
        (src)--;
      } else if (!isspace(_c))
        break;
      (src)++;
    }
  };
  *routep = dst = src;
  for (;;) {
    c = *src++;
    if (isalnum((int)(unsigned char)c) || c == '-' || c == '[' || c == ']' || c == ',' || c == '@') {
      *dst++ = c;
    } else if (c == '.') {
      if (dst > *routep && dst[-1] != '.')
        *dst++ = c;
    } else if (isspace((int)(unsigned char)c) || c == '(') {
      src--;
      {
        int _c, _comment = 0;
        while ((_c = *(src))) {
          if (_c == '(') {
            _comment = 1;
            (src)++;
            while ((_comment && (_c = *(src)))) {
              (src)++;
              if (_c == '\\' && *(src))
                (src)++;
              else if (_c == '(')
                _comment++;
              else if (_c == ')')
                _comment--;
            }
            (src)--;
          } else if (!isspace(_c))
            break;
          (src)++;
        }
      };
    } else {
      while (dst > *routep && (dst[-1] == '.' || dst[-1] == ',' || dst[-1] == '@'))
        dst--;
      *dst = '\0';
      *inp = src;
      return c;
    }
  }
}
```