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

```asm
<lookup>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xc0,%rsp
  mov    %rdi,-0xb8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x8,-0x9c(%rbp)
  movb   $0x2e,-0xa1(%rbp)
  movsbl -0xa1(%rbp),%edx
  mov    -0xb8(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <strrchr@plt>
  mov    %rax,-0x98(%rbp)
  lea    D157(%rip),%rax
  mov    %rax,-0x90(%rbp)
  lea    D33(%rip),%rax
  mov    %rax,-0x88(%rbp)
  lea    D29(%rip),%rax
  mov    %rax,-0x80(%rbp)
  lea    D82(%rip),%rax
  mov    %rax,-0x78(%rbp)
  lea    D43(%rip),%rax
  mov    %rax,-0x70(%rbp)
  lea    D87(%rip),%rax
  mov    %rax,-0x68(%rbp)
  lea    D105(%rip),%rax
  mov    %rax,-0x60(%rbp)
  lea    D0(%rip),%rax
  mov    %rax,-0x58(%rbp)
  lea    D85(%rip),%rax
  mov    %rax,-0x50(%rbp)
  lea    D122(%rip),%rax
  mov    %rax,-0x48(%rbp)
  lea    D47(%rip),%rax
  mov    %rax,-0x40(%rbp)
  lea    D12(%rip),%rax
  mov    %rax,-0x38(%rbp)
  lea    D121(%rip),%rax
  mov    %rax,-0x30(%rbp)
  lea    D64(%rip),%rax
  mov    %rax,-0x28(%rbp)
  lea    D126(%rip),%rax
  mov    %rax,-0x20(%rbp)
  lea    D41(%rip),%rax
  mov    %rax,-0x18(%rbp)
  movl   $0x0,-0xa0(%rbp)
  jmp    L41
L10:
  mov    -0xa0(%rbp),%eax
  cltq
  mov    -0x90(%rbp,%rax,8),%rdx
  mov    -0x98(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %rax,%rax
  jne    L33
  mov    -0xa0(%rbp),%eax
  cltq
  mov    -0x50(%rbp,%rax,8),%rax
  jmp    L44
L33:
  addl   $0x1,-0xa0(%rbp)
L41:
  mov    -0xa0(%rbp),%eax
  cmp    -0x9c(%rbp),%eax
  jl     L10
  mov    $0x0,%eax
L44:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L1
  call   <__stack_chk_fail@plt>
L1:
  leave
  ret
```

tool_calls: name: parse_data
arguments: tag: D157
type_guessed: string
name: parse_data
arguments: tag: D33
type_guessed: string
name: parse_data
arguments: tag: D29
type_guessed: string
name: parse_data
arguments: tag: D82
type_guessed: string
name: parse_data
arguments: tag: D43
type_guessed: string
name: parse_data
arguments: tag: D87
type_guessed: string
name: parse_data
arguments: tag: D105
type_guessed: string
name: parse_data
arguments: tag: D0
type_guessed: string
name: parse_data
arguments: tag: D85
type_guessed: string
name: parse_data
arguments: tag: D122
type_guessed: string
name: parse_data
arguments: tag: D47
type_guessed: string
name: parse_data
arguments: tag: D12
type_guessed: string
name: parse_data
arguments: tag: D121
type_guessed: string
name: parse_data
arguments: tag: D64
type_guessed: string
name: parse_data
arguments: tag: D126
type_guessed: string
name: parse_data
arguments: tag: D41
type_guessed: string

tool: D157: .css

tool: D33: .html

tool: D29: .gif

tool: D82: .ico

tool: D43: .jpg

tool: D87: .js

tool: D105: .php

tool: D0: .png

tool: D85: text/css

tool: D122: text/html

tool: D47: image/gif

tool: D12: image/x-icon

tool: D121: image/jpeg

tool: D64: text/javascript

tool: D126: text/x-php

tool: D41: 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;
}
```