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

```asm
<lookup>:
  endbr64
  push   %r12
  mov    $0x2e,%esi
  push   %rbp
  push   %rbx
  xor    %ebx,%ebx
  sub    $0x90,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x88(%rsp)
  xor    %eax,%eax
  call   <strrchr@plt>
  lea    D119(%rip),%rsi
  mov    %rax,%rbp
  lea    D126(%rip),%rax
  mov    %rax,0x8(%rsp)
  lea    D114(%rip),%rax
  mov    %rax,0x10(%rsp)
  lea    D101(%rip),%rax
  mov    %rax,0x18(%rsp)
  lea    D63(%rip),%rax
  mov    %rax,0x20(%rsp)
  lea    D9(%rip),%rax
  mov    %rax,0x28(%rsp)
  lea    D47(%rip),%rax
  mov    %rax,0x30(%rsp)
  lea    D84(%rip),%rax
  mov    %rax,0x38(%rsp)
  lea    D66(%rip),%rax
  mov    %rax,0x40(%rsp)
  lea    D76(%rip),%rax
  mov    %rax,0x48(%rsp)
  lea    D42(%rip),%rax
  mov    %rax,0x50(%rsp)
  lea    D65(%rip),%rax
  mov    %rax,0x58(%rsp)
  lea    D74(%rip),%rax
  mov    %rax,0x60(%rsp)
  lea    D108(%rip),%rax
  mov    %rax,0x68(%rsp)
  lea    D0(%rip),%rax
  mov    %rax,0x70(%rsp)
  lea    D73(%rip),%rax
  mov    %rax,0x78(%rsp)
  jmp    L33
  xchg   %ax,%ax
L6:
  mov    (%rsp,%rbx,8),%rsi
L33:
  mov    %rbp,%rdi
  movslq %ebx,%r12
  call   <strcasecmp@plt>
  test   %rax,%rax
  je     L10
  add    $0x1,%rbx
  cmp    $0x8,%rbx
  jne    L6
  xor    %eax,%eax
L14:
  mov    0x88(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L46
  add    $0x90,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nop
L10:
  mov    0x40(%rsp,%r12,8),%rax
  jmp    L14
L46:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: tag: D119
type_guessed: string
name: disassemble_data
arguments: tag: D126
type_guessed: string
name: disassemble_data
arguments: tag: D114
type_guessed: string
name: disassemble_data
arguments: tag: D101
type_guessed: string
name: disassemble_data
arguments: tag: D63
type_guessed: string
name: disassemble_data
arguments: tag: D9
type_guessed: string
name: disassemble_data
arguments: tag: D47
type_guessed: string
name: disassemble_data
arguments: tag: D84
type_guessed: string
name: disassemble_data
arguments: tag: D66
type_guessed: string
name: disassemble_data
arguments: tag: D76
type_guessed: string
name: disassemble_data
arguments: tag: D42
type_guessed: string
name: disassemble_data
arguments: tag: D65
type_guessed: string
name: disassemble_data
arguments: tag: D74
type_guessed: string
name: disassemble_data
arguments: tag: D108
type_guessed: string
name: disassemble_data
arguments: tag: D0
type_guessed: string
name: disassemble_data
arguments: tag: D73
type_guessed: string

tool: D119: .css

tool: D126: .html

tool: D114: .gif

tool: D101: .ico

tool: D63: .jpg

tool: D9: .js

tool: D47: .php

tool: D84: .png

tool: D66: text/css

tool: D76: text/html

tool: D42: image/gif

tool: D65: image/x-icon

tool: D74: image/jpeg

tool: D108: text/javascript

tool: D0: text/x-php

tool: D73: image/png

assistant: ```c
const char *lookup(const char *path) {
  const int SIZE = 8;
  const char dot = '.';
  char *getExtension = strrchr(path, dot);
  char *extensions[8] = {".css", ".html", ".gif", ".ico", ".jpg", ".js", ".php", ".png"};
  char *texts[8] = {"text/css", "text/html", "image/gif", "image/x-icon", "image/jpeg", "text/javascript", "text/x-php", "image/png"};
  for (int i = 0; i < SIZE; i++) {
    if (strcasecmp(getExtension, extensions[i]) == 0) {
      return texts[i];
    }
  }
  return NULL;
}
```