user: 请从给定的汇编指令推导出C源代码:

```asm
<hex_to_base4>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%rbp
  mov    %rsi,%r12
  mov    $0x0,%esi
  mov    %r12,%rdi
  call   <memset@plt>
  mov    $0x0,%ebx
  lea    D114(%rip),%r15
  lea    D59(%rip),%r13
  lea    D155(%rip),%r14
  jmp    L5
  lea    D55(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
L66:
  add    $0x1,%rbx
L5:
  mov    %rbp,%rdi
  call   <strlen@plt>
  cmp    %ebx,%eax
  jle    L17
  movzbl 0x0(%rbp,%rbx,1),%eax
  sub    $0x30,%eax
  cmp    $0x36,%al
  ja     L42
  movzbl %al,%eax
  movslq 0x0(%r13,%rax,4),%rax
  add    %r13,%rax
  notrack jmp *%rax
  lea    D134(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L66
  lea    D107(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L66
  lea    D126(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L66
  lea    D97(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L66
  lea    D149(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L66
  lea    D28(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L66
  lea    D35(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L66
  lea    D99(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L66
  lea    D129(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L66
  lea    D179(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L66
  lea    D157(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L66
  lea    D89(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L66
  lea    D20(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L66
  lea    D92(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L66
  mov    %r14,%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L66
L42:
  mov    %r15,%rdi
  call   <printf@plt>
  jmp    L66
L17:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D114
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D155
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D55
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D134
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D107
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D126
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D97
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D149
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D28
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D35
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D99
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D129
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D179
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D157
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D89
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D20
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D92
type_guessed: string

tool: D114: Some wierd number is in the key 


tool: D155: 33

tool: D55: 00

tool: D134: 01

tool: D107: 02

tool: D126: 03

tool: D97: 10

tool: D149: 11

tool: D28: 12

tool: D35: 13

tool: D99: 20

tool: D129: 21

tool: D179: 22

tool: D157: 23

tool: D89: 30

tool: D20: 31

tool: D92: 32

assistant: ```c
void hex_to_base4(char *hexstr, char *base4str, size_t b4slen) {
  int i = 0;
  memset(base4str, 0, b4slen);
  for (i = 0; i < strlen(hexstr); i++) {
    switch (hexstr[i]) {
    case '0':
      strcat(base4str, "00");
      break;
    case '1':
      strcat(base4str, "01");
      break;
    case '2':
      strcat(base4str, "02");
      break;
    case '3':
      strcat(base4str, "03");
      break;
    case '4':
      strcat(base4str, "10");
      break;
    case '5':
      strcat(base4str, "11");
      break;
    case '6':
      strcat(base4str, "12");
      break;
    case '7':
      strcat(base4str, "13");
      break;
    case '8':
      strcat(base4str, "20");
      break;
    case '9':
      strcat(base4str, "21");
      break;
    case 'a':
      strcat(base4str, "22");
      break;
    case 'b':
      strcat(base4str, "23");
      break;
    case 'c':
      strcat(base4str, "30");
      break;
    case 'd':
      strcat(base4str, "31");
      break;
    case 'e':
      strcat(base4str, "32");
      break;
    case 'f':
      strcat(base4str, "33");
      break;
    default:
      printf("Some wierd number is in the key \n");
      break;
    }
  }
}
```