user: Converte this assembly snippet into its equivalent C code:

```asm
<FileExtensionToProtocolInfo>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %esi,-0x3c(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movq   $0x0,-0x28(%rbp)
  cmpl   $0x0,-0x3c(%rbp)
  je     L165
  mov    -0x38(%rbp),%rsi
  lea    -0x12(%rbp),%rax
  mov    $0x0,%r8d
  mov    $0x1,%ecx
  mov    $0xa,%edx
  mov    %rax,%rdi
  call   <strToUtf8@plt>
  lea    -0x12(%rbp),%rax
  mov    %rax,-0x38(%rbp)
L165:
  mov    -0x38(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2e,%al
  je     L32
  movb   $0x2e,-0x1c(%rbp)
  lea    -0x1c(%rbp),%rax
  add    $0x1,%rax
  mov    -0x38(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x1c(%rbp),%rax
  mov    %rax,-0x38(%rbp)
L32:
  mov    -0x38(%rbp),%rax
  lea    D87(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stricmp@plt>
  test   %rax,%rax
  jne    L33
  lea    D33(%rip),%rax
  mov    %rax,-0x28(%rbp)
  jmp    L58
L33:
  mov    -0x38(%rbp),%rax
  lea    D76(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stricmp@plt>
  test   %rax,%rax
  jne    L256
  lea    D182(%rip),%rax
  mov    %rax,-0x28(%rbp)
  jmp    L58
L256:
  mov    -0x38(%rbp),%rax
  lea    D81(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stricmp@plt>
  test   %rax,%rax
  jne    L266
  lea    D111(%rip),%rax
  mov    %rax,-0x28(%rbp)
  jmp    L58
L266:
  mov    -0x38(%rbp),%rax
  lea    D245(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stricmp@plt>
  test   %rax,%rax
  jne    L248
  lea    D26(%rip),%rax
  mov    %rax,-0x28(%rbp)
  jmp    L58
L248:
  mov    -0x38(%rbp),%rax
  lea    D129(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stricmp@plt>
  test   %rax,%rax
  jne    L246
  lea    D248(%rip),%rax
  mov    %rax,-0x28(%rbp)
  jmp    L58
L246:
  mov    -0x38(%rbp),%rax
  lea    D42(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stricmp@plt>
  test   %rax,%rax
  jne    L194
  lea    D16(%rip),%rax
  mov    %rax,-0x28(%rbp)
  jmp    L58
L194:
  mov    -0x38(%rbp),%rax
  lea    D209(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stricmp@plt>
  test   %rax,%rax
  jne    L133
  lea    D210(%rip),%rax
  mov    %rax,-0x28(%rbp)
  jmp    L58
L133:
  mov    -0x38(%rbp),%rax
  lea    D106(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stricmp@plt>
  test   %rax,%rax
  jne    L164
  lea    D64(%rip),%rax
  mov    %rax,-0x28(%rbp)
  jmp    L58
L164:
  mov    -0x38(%rbp),%rax
  lea    D58(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stricmp@plt>
  test   %rax,%rax
  jne    L24
  lea    D174(%rip),%rax
  mov    %rax,-0x28(%rbp)
  jmp    L58
L24:
  mov    -0x38(%rbp),%rax
  lea    D109(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stricmp@plt>
  test   %rax,%rax
  jne    L51
  lea    D174(%rip),%rax
  mov    %rax,-0x28(%rbp)
  jmp    L58
L51:
  mov    -0x38(%rbp),%rax
  lea    D193(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stricmp@plt>
  test   %rax,%rax
  jne    L166
  lea    D137(%rip),%rax
  mov    %rax,-0x28(%rbp)
  jmp    L58
L166:
  mov    -0x38(%rbp),%rax
  lea    D47(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmpi@plt>
  test   %rax,%rax
  jne    L99
  lea    D82(%rip),%rax
  mov    %rax,-0x28(%rbp)
  jmp    L58
L99:
  lea    D132(%rip),%rax
  mov    %rax,-0x28(%rbp)
L58:
  mov    -0x28(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L189
  call   <__stack_chk_fail@plt>
L189:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D87
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D33
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D76
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D182
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D81
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D111
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D245
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D26
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D129
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D248
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D42
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D16
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D209
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D210
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D106
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D64
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D58
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D174
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D109
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D193
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D137
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D47
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D82
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D132
type_infered: string

tool: D87: .mp3

tool: D33: http-get:*:audio/mpeg:*

tool: D76: .wma

tool: D182: http-get:*:audio/x-ms-wma:*

tool: D81: .ogg

tool: D111: http-get:*:audio/x-ogg:*

tool: D245: .asx

tool: D26: http-get:*:audio/x-ms-asx:*

tool: D129: .asf

tool: D248: http-get:*:video/x-ms-asf:*

tool: D42: .wmv

tool: D16: http-get:*:video/x-ms-wmv:*

tool: D209: .mpg

tool: D210: http-get:*:video/mpeg:*

tool: D106: .mov

tool: D64: http-get:*:video/quicktime:*

tool: D58: .jpg

tool: D174: http-get:*:image/jpeg:*

tool: D109: .jpeg

tool: D193: .bmp

tool: D137: http-get:*:image/bmp:*

tool: D47: .m3u

tool: D82: http-get:*:audio/mpegurl:*

tool: D132: http-get:*:application/octet-stream:*

assistant: ```c
char *FileExtensionToProtocolInfo(char *extension, int wide) {
  char tempExtension[10], temp2[10];
  char *retVal = NULL;
  if (wide) {
    strToUtf8(temp2, extension, 10, 1, NULL);
    extension = temp2;
  }
  if (extension[0] != '.') {
    tempExtension[0] = '.';
    strcpy(tempExtension + 1, extension);
    extension = tempExtension;
  }
  if (stricmp(extension, ".mp3") == 0) {
    retVal = "http-get:*:audio/mpeg:*";
  } else if (stricmp(extension, ".wma") == 0) {
    retVal = "http-get:*:audio/x-ms-wma:*";
  } else if (stricmp(extension, ".ogg") == 0) {
    retVal = "http-get:*:audio/x-ogg:*";
  } else if (stricmp(extension, ".asx") == 0) {
    retVal = "http-get:*:audio/x-ms-asx:*";
  } else if (stricmp(extension, ".asf") == 0) {
    retVal = "http-get:*:video/x-ms-asf:*";
  } else if (stricmp(extension, ".wmv") == 0) {
    retVal = "http-get:*:video/x-ms-wmv:*";
  } else if (stricmp(extension, ".mpg") == 0) {
    retVal = "http-get:*:video/mpeg:*";
  } else if (stricmp(extension, ".mov") == 0) {
    retVal = "http-get:*:video/quicktime:*";
  } else if (stricmp(extension, ".jpg") == 0) {
    retVal = "http-get:*:image/jpeg:*";
  } else if (stricmp(extension, ".jpeg") == 0) {
    retVal = "http-get:*:image/jpeg:*";
  } else if (stricmp(extension, ".bmp") == 0) {
    retVal = "http-get:*:image/bmp:*";
  } else if (strcmpi(extension, ".m3u") == 0) {
    retVal = "http-get:*:audio/mpegurl:*";
  } else {
    retVal = "http-get:*:application/octet-stream:*";
  }
  return retVal;
}
```