user: 请将以下的汇编代码转换成C语言代码：

```asm
<translate_lujvo>:
  endbr64
  push   %r15
  mov    %rdi,%r15
  push   %r14
  lea    D80(%rip),%r14
  push   %r13
  lea    D61(%rip),%r13
  push   %r12
  mov    $0x1,%r12d
  push   %rbp
  lea    D101(%rip),%rbp
  push   %rbx
  lea    D23(%rip),%rbx
  sub    $0x78,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x68(%rsp)
  xor    %eax,%eax
  movl   $0x0,0x1c(%rsp)
  movb   $0x0,D61(%rip)
  jmp    L477
  nopl   0x0(%rax,%rax,1)
L109:
  cmp    $0x4,%eax
  jne    L384
  lea    0x20(%rsp),%r9
  mov    $0x4,%edx
  mov    %r15,%rsi
  movb   $0x25,0x20(%rsp)
  lea    0x21(%rsp),%rdi
  mov    %r9,0x8(%rsp)
  add    $0x5,%r15
  call   <strncpy@plt>
  mov    0x8(%rsp),%rdi
  lea    0x1c(%rsp),%rsi
  movb   $0x0,0x25(%rsp)
  call   <translate_comp@plt>
  mov    %r12d,%edx
  mov    %r13,%rsi
  mov    %rax,%rdi
  call   <append_trans@plt>
  movzbl (%r15),%eax
L26:
  test   %al,%al
  je     L531
L113:
  xor    %r12d,%r12d
L477:
  mov    %r15,%rdi
  call   <strlen@plt>
  cmp    $0x5,%eax
  je     L11
  mov    %r15,%rdi
  call   <strlen@plt>
  cmp    $0x4,%eax
  jle    L128
  mov    $0x79,%esi
  mov    %r15,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L384
  sub    %r15,%rax
  cmp    $0x3,%eax
  jne    L109
  mov    $0x3,%edx
  mov    %rbp,%rsi
  mov    %r15,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L35
  movl   $0x2,0x1c(%rsp)
L251:
  movzbl 0x4(%r15),%eax
  add    $0x4,%r15
  jmp    L26
  nopw   0x0(%rax,%rax,1)
L384:
  cmpb   $0x27,0x2(%r15)
  movb   $0x25,0x20(%rsp)
  je     L31
  mov    $0x3,%edx
  mov    %rbp,%rsi
  mov    %r15,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L95
  movl   $0x2,0x1c(%rsp)
L56:
  movsbl 0x1(%r15),%esi
  mov    %rbx,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L466
  movsbl 0x2(%r15),%esi
  mov    %rbx,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  movzbl 0x3(%r15),%eax
  je     L479
  test   %r12d,%r12d
  je     L479
  test   %al,%al
  je     L531
  cmp    $0x72,%al
  je     L530
  cmp    $0x6e,%al
  jne    L479
  cmpb   $0x72,0x4(%r15)
  je     L1
  add    $0x3,%r15
  jmp    L113
  cs nopw 0x0(%rax,%rax,1)
L466:
  movzbl 0x3(%r15),%eax
L479:
  add    $0x3,%r15
  jmp    L26
  xchg   %ax,%ax
L31:
  lea    0x20(%rsp),%r9
  mov    $0x4,%edx
  lea    0x21(%rsp),%rdi
  mov    %r15,%rsi
  mov    %r9,0x8(%rsp)
  call   <strncpy@plt>
  mov    0x8(%rsp),%rdi
  lea    0x1c(%rsp),%rsi
  movb   $0x0,0x25(%rsp)
  call   <translate_comp@plt>
  mov    %r13,%rsi
  mov    %r12d,%edx
  mov    %rax,%rdi
  call   <append_trans@plt>
  movsbl 0x1(%r15),%esi
  mov    %rbx,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L530
  movsbl 0x3(%r15),%esi
  mov    %rbx,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  movzbl 0x4(%r15),%eax
  je     L88
  test   %r12d,%r12d
  je     L88
  test   %al,%al
  je     L531
  cmp    $0x72,%al
  je     L361
  cmp    $0x6e,%al
  je     L145
  nopl   0x0(%rax)
L88:
  add    $0x4,%r15
  jmp    L26
  nopl   0x0(%rax)
L11:
  lea    0x1c(%rsp),%rsi
  mov    %r15,%rdi
  call   <translate_comp@plt>
  mov    %r12d,%edx
  mov    %r13,%rsi
  mov    %rax,%rdi
  call   <append_trans@plt>
L531:
  mov    0x68(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L419
  add    $0x78,%rsp
  mov    %r13,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L35:
  mov    $0x3,%edx
  mov    %r14,%rsi
  mov    %r15,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L420
  movl   $0x3,0x1c(%rsp)
  jmp    L251
  nopl   (%rax)
L95:
  mov    $0x3,%edx
  mov    %r14,%rsi
  mov    %r15,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L262
  movl   $0x3,0x1c(%rsp)
  jmp    L56
  nopl   (%rax)
L530:
  movzbl 0x4(%r15),%eax
  add    $0x4,%r15
  jmp    L26
  xchg   %ax,%ax
L128:
  lea    0x20(%rsp),%rbp
  lea    D76(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcpy@plt>
  mov    %rbp,%rdi
  mov    %r15,%rsi
  call   <strcat@plt>
  mov    %rbp,%rdi
  lea    0x1c(%rsp),%rsi
  call   <translate_comp@plt>
  mov    %rax,%rbp
  test   %rax,%rax
  je     L339
  test   %r12d,%r12d
  je     L138
L285:
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <strcat@plt>
  jmp    L531
  nopl   0x0(%rax)
L420:
  mov    $0x3,%edx
  lea    D69(%rip),%rsi
  mov    %r15,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L182
  movl   $0x4,0x1c(%rsp)
  jmp    L251
  nopl   (%rax)
L262:
  mov    $0x3,%edx
  lea    D69(%rip),%rsi
  mov    %r15,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L96
  movl   $0x4,0x1c(%rsp)
  jmp    L56
L96:
  mov    $0x3,%edx
  lea    D119(%rip),%rsi
  mov    %r15,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L184
  movl   $0x5,0x1c(%rsp)
  jmp    L56
L138:
  lea    D42(%rip),%rsi
  mov    %r13,%rdi
  call   <strcat@plt>
  jmp    L285
  nopw   0x0(%rax,%rax,1)
L182:
  mov    $0x3,%edx
  lea    D119(%rip),%rsi
  mov    %r15,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L134
  movl   $0x5,0x1c(%rsp)
  jmp    L251
  nopl   (%rax)
L339:
  test   %r12d,%r12d
  je     L108
L33:
  lea    D65(%rip),%rsi
  mov    %r13,%rdi
  call   <strcat@plt>
  jmp    L531
L145:
  cmpb   $0x72,0x5(%r15)
  je     L411
L1:
  add    $0x4,%r15
  jmp    L113
L361:
  movzbl 0x5(%r15),%eax
  add    $0x5,%r15
  jmp    L26
L134:
  lea    0x20(%rsp),%r9
  lea    0x21(%rsp),%rdi
  mov    $0x3,%edx
  mov    %r15,%rsi
  mov    %r9,0x8(%rsp)
  movb   $0x25,0x20(%rsp)
  call   <strncpy@plt>
  mov    0x8(%rsp),%rdi
  lea    0x1c(%rsp),%rsi
  movb   $0x0,0x24(%rsp)
  call   <translate_comp@plt>
  mov    %r12d,%edx
  mov    %r13,%rsi
  mov    %rax,%rdi
  call   <append_trans@plt>
  jmp    L251
L108:
  lea    D42(%rip),%rsi
  mov    %r13,%rdi
  call   <strcat@plt>
  jmp    L33
L184:
  lea    0x20(%rsp),%r9
  lea    0x21(%rsp),%rdi
  mov    $0x3,%edx
  mov    %r15,%rsi
  mov    %r9,0x8(%rsp)
  call   <strncpy@plt>
  mov    0x8(%rsp),%rdi
  lea    0x1c(%rsp),%rsi
  movb   $0x0,0x24(%rsp)
  call   <translate_comp@plt>
  mov    %r12d,%edx
  mov    %r13,%rsi
  mov    %rax,%rdi
  call   <append_trans@plt>
  jmp    L56
L411:
  add    $0x5,%r15
  jmp    L113
L419:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: tag: D80
type_infered: string
name: parse_data
arguments: tag: D101
type_infered: string
name: parse_data
arguments: tag: D23
type_infered: string
name: parse_data
arguments: tag: D76
type_infered: string
name: parse_data
arguments: tag: D69
type_infered: string
name: parse_data
arguments: tag: D119
type_infered: string
name: parse_data
arguments: tag: D42
type_infered: string
name: parse_data
arguments: tag: D65
type_infered: string

tool: D80: ter

tool: D101: sel

tool: D23: aeiou

tool: D76: %

tool: D69: vel

tool: D119: xel

tool: D42: -

tool: D65: ?

assistant: ```c
char *translate_lujvo(char *word) {
  static char result[4096];
  char buf[64];
  char *w, *trans;
  int initial;
  char *yy;
  int ypos = 0;
  int conversion = 0;
  w = word;
  result[0] = 0;
  initial = 1;
  do {
    if (strlen(w) == 5) {
      trans = translate_comp(w, &conversion);
      append_trans(trans, result, initial);
      break;
    } else {
      if (strlen(w) < 5) {
        strcpy(buf, "%");
        strcat(buf, w);
        trans = translate_comp(buf, &conversion);
        if (trans) {
          if (!initial) {
            strcat(result, "-");
          }
          strcat(result, trans);
        } else {
          if (!initial) {
            strcat(result, "-");
          }
          strcat(result, "?");
        }
        break;
      } else {
        yy = strchr(w, 'y');
        if (yy) {
          ypos = yy - w;
        }
        if (yy && ypos == 3) {
          if (!strncmp(w, "sel", 3)) {
            conversion = 2;
          } else if (!strncmp(w, "ter", 3)) {
            conversion = 3;
          } else if (!strncmp(w, "vel", 3)) {
            conversion = 4;
          } else if (!strncmp(w, "xel", 3)) {
            conversion = 5;
          } else {
            buf[0] = '%';
            strncpy(buf + 1, w, 3);
            buf[4] = 0;
            trans = translate_comp(buf, &conversion);
            append_trans(trans, result, initial);
          }
          w += 4;
        } else if (yy && ypos == 4) {
          buf[0] = '%';
          strncpy(buf + 1, w, 4);
          buf[5] = 0;
          trans = translate_comp(buf, &conversion);
          append_trans(trans, result, initial);
          w += 5;
        } else {
          buf[0] = '%';
          if (w[2] == '\'') {
            strncpy(buf + 1, w, 4);
            buf[5] = 0;
            trans = translate_comp(buf, &conversion);
            append_trans(trans, result, initial);
            if (strchr("aeiou", w[1]) && strchr("aeiou", w[3]) && initial && w[4] && (w[4] == 'r' || (w[4] == 'n' && w[5] == 'r'))) {
              w += 5;
            } else {
              w += 4;
            }
          } else {
            if (!strncmp(w, "sel", 3)) {
              conversion = 2;
            } else if (!strncmp(w, "ter", 3)) {
              conversion = 3;
            } else if (!strncmp(w, "vel", 3)) {
              conversion = 4;
            } else if (!strncmp(w, "xel", 3)) {
              conversion = 5;
            } else {
              strncpy(buf + 1, w, 3);
              buf[4] = 0;
              trans = translate_comp(buf, &conversion);
              append_trans(trans, result, initial);
            }
            if (strchr("aeiou", w[1]) && strchr("aeiou", w[2]) && initial && w[3] && (w[3] == 'r' || (w[3] == 'n' && w[4] == 'r'))) {
              w += 4;
            } else {
              w += 3;
            }
          }
        }
      }
    }
    initial = 0;
  } while (*w);
  return result;
}
```