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

```asm
<pr_type>:
  endbr64
  cmp    $0x4,%dil
  jbe    L2
  lea    -0x80(%rdi),%eax
  cmp    $0x9,%al
  ja     L29
  add    $0x7f,%edi
  lea    D171(%rip),%rax
  cmp    $0x8,%dil
  ja     L16
  lea    D110(%rip),%rdx
  movzbl %dil,%edi
  movslq (%rdx,%rdi,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopw   0x0(%rax,%rax,1)
  lea    D146(%rip),%rax
L16:
  ret
  nopl   0x0(%rax,%rax,1)
L2:
  lea    D51(%rip),%rdx
  movzbl %dil,%edi
  movslq (%rdx,%rdi,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopl   (%rax)
  lea    D162(%rip),%rax
  ret
  lea    D156(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D157(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D153(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D77(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D53(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D125(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D177(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D89(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D40(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D104(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D64(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D3(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
L29:
  lea    D136(%rip),%rax
  ret
```

tool_calls: name: parse_data
arguments: tag: D171
type_infered: string
name: parse_data
arguments: tag: D146
type_infered: string
name: parse_data
arguments: tag: D162
type_infered: string
name: parse_data
arguments: tag: D156
type_infered: string
name: parse_data
arguments: tag: D157
type_infered: string
name: parse_data
arguments: tag: D153
type_infered: string
name: parse_data
arguments: tag: D77
type_infered: string
name: parse_data
arguments: tag: D53
type_infered: string
name: parse_data
arguments: tag: D125
type_infered: string
name: parse_data
arguments: tag: D177
type_infered: string
name: parse_data
arguments: tag: D89
type_infered: string
name: parse_data
arguments: tag: D40
type_infered: string
name: parse_data
arguments: tag: D104
type_infered: string
name: parse_data
arguments: tag: D64
type_infered: string
name: parse_data
arguments: tag: D3
type_infered: string
name: parse_data
arguments: tag: D136
type_infered: string

tool: D171: Echo Request

tool: D146: Error

tool: D162: Destination Unreachable

tool: D156: Parameter Problem

tool: D157: Packet Too Big

tool: D153: Time Exceeded in Transit

tool: D77: Echo Reply

tool: D53: Membership Reduction

tool: D125: Router Solicitation

tool: D177: Router Advertisement

tool: D89: Neighbor Solicitation

tool: D40: Membership Query

tool: D104: Membership Report

tool: D64: Redirect

tool: D3: Neighbor Advertisement

tool: D136: OUT-OF-RANGE

assistant: ```c
char *pr_type(unsigned char t) {
  switch (t) {
  case 0:
    return "Error";
  case 1:
    return "Destination Unreachable";
  case 2:
    return "Packet Too Big";
  case 3:
    return "Time Exceeded in Transit";
  case 4:
    return "Parameter Problem";
  case 128:
    return "Echo Request";
  case 129:
    return "Echo Reply";
  case 130:
    return "Membership Query";
  case 131:
    return "Membership Report";
  case 132:
    return "Membership Reduction";
  case 133:
    return "Router Solicitation";
  case 134:
    return "Router Advertisement";
  case 135:
    return "Neighbor Solicitation";
  case 136:
    return "Neighbor Advertisement";
  case 137:
    return "Redirect";
  }
  return ("OUT-OF-RANGE");
}
```