user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<u1db__bin_to_hex>:
  endbr64
  mov    %rdi,%rcx
  mov    %rdx,%rax
  lea    (%rsi,%rsi,1),%edi
  test   %esi,%esi
  jle    L338
  movslq %esi,%rdx
  lea    (%rax,%rdx,2),%r8
  cmp    %r8,%rcx
  setae  %r8b
  add    %rcx,%rdx
  cmp    %rdx,%rax
  setae  %dl
  or     %dl,%r8b
  je     L290
  lea    -0x1(%rsi),%edx
  cmp    $0xe,%edx
  jbe    L290
  mov    %esi,%r8d
  movdqa D35(%rip),%xmm2
  xor    %edx,%edx
  shr    $0x4,%r8d
  shl    $0x4,%r8
  cs nopw 0x0(%rax,%rax,1)
L115:
  movdqu (%rcx,%rdx,1),%xmm1
  movdqa %xmm1,%xmm0
  pand   %xmm2,%xmm1
  psrlw  $0x4,%xmm0
  pand   %xmm2,%xmm0
  movdqa %xmm0,%xmm3
  punpckhbw %xmm1,%xmm0
  punpcklbw %xmm1,%xmm3
  movups %xmm0,0x10(%rax,%rdx,2)
  movups %xmm3,(%rax,%rdx,2)
  add    $0x10,%rdx
  cmp    %rdx,%r8
  jne    L115
  mov    %esi,%edx
  and    $0xfffffff0,%edx
  test   $0xf,%sil
  je     L320
  mov    %edx,%r9d
  lea    (%rdx,%rdx,1),%r8d
  add    %rcx,%r9
  movslq %r8d,%r11
  movzbl (%r9),%r10d
  shr    $0x4,%r10b
  mov    %r10b,(%rax,%r11,1)
  movzbl (%r9),%r9d
  and    $0xf,%r9d
  mov    %r9b,0x1(%rax,%r11,1)
  lea    0x1(%rdx),%r9d
  cmp    %r9d,%esi
  jle    L320
  movslq %r9d,%r9
  lea    0x2(%r8),%r10d
  add    %rcx,%r9
  movslq %r10d,%r10
  movzbl (%r9),%r11d
  shr    $0x4,%r11b
  mov    %r11b,(%rax,%r10,1)
  movzbl (%r9),%r9d
  and    $0xf,%r9d
  mov    %r9b,0x1(%rax,%r10,1)
  lea    0x2(%rdx),%r9d
  cmp    %r9d,%esi
  jle    L320
  movslq %r9d,%r9
  lea    0x4(%r8),%r10d
  add    %rcx,%r9
  movslq %r10d,%r10
  movzbl (%r9),%r11d
  shr    $0x4,%r11b
  mov    %r11b,(%rax,%r10,1)
  movzbl (%r9),%r9d
  and    $0xf,%r9d
  mov    %r9b,0x1(%rax,%r10,1)
  lea    0x3(%rdx),%r9d
  cmp    %r9d,%esi
  jle    L320
  movslq %r9d,%r9
  lea    0x6(%r8),%r10d
  add    %rcx,%r9
  movslq %r10d,%r10
  movzbl (%r9),%r11d
  shr    $0x4,%r11b
  mov    %r11b,(%rax,%r10,1)
  movzbl (%r9),%r9d
  and    $0xf,%r9d
  mov    %r9b,0x1(%rax,%r10,1)
  lea    0x4(%rdx),%r9d
  cmp    %r9d,%esi
  jle    L320
  movslq %r9d,%r9
  lea    0x8(%r8),%r10d
  add    %rcx,%r9
  movslq %r10d,%r10
  movzbl (%r9),%r11d
  shr    $0x4,%r11b
  mov    %r11b,(%rax,%r10,1)
  movzbl (%r9),%r9d
  and    $0xf,%r9d
  mov    %r9b,0x1(%rax,%r10,1)
  lea    0x5(%rdx),%r9d
  cmp    %r9d,%esi
  jle    L320
  movslq %r9d,%r9
  lea    0xa(%r8),%r10d
  add    %rcx,%r9
  movslq %r10d,%r10
  movzbl (%r9),%r11d
  shr    $0x4,%r11b
  mov    %r11b,(%rax,%r10,1)
  movzbl (%r9),%r9d
  and    $0xf,%r9d
  mov    %r9b,0x1(%rax,%r10,1)
  lea    0x6(%rdx),%r9d
  cmp    %r9d,%esi
  jle    L320
  movslq %r9d,%r9
  lea    0xc(%r8),%r10d
  add    %rcx,%r9
  movslq %r10d,%r10
  movzbl (%r9),%r11d
  shr    $0x4,%r11b
  mov    %r11b,(%rax,%r10,1)
  movzbl (%r9),%r9d
  and    $0xf,%r9d
  mov    %r9b,0x1(%rax,%r10,1)
  lea    0x7(%rdx),%r9d
  cmp    %r9d,%esi
  jle    L320
  movslq %r9d,%r9
  lea    0xe(%r8),%r10d
  add    %rcx,%r9
  movslq %r10d,%r10
  movzbl (%r9),%r11d
  shr    $0x4,%r11b
  mov    %r11b,(%rax,%r10,1)
  movzbl (%r9),%r9d
  and    $0xf,%r9d
  mov    %r9b,0x1(%rax,%r10,1)
  lea    0x8(%rdx),%r9d
  cmp    %r9d,%esi
  jle    L320
  movslq %r9d,%r9
  lea    0x10(%r8),%r10d
  add    %rcx,%r9
  movslq %r10d,%r10
  movzbl (%r9),%r11d
  shr    $0x4,%r11b
  mov    %r11b,(%rax,%r10,1)
  movzbl (%r9),%r9d
  and    $0xf,%r9d
  mov    %r9b,0x1(%rax,%r10,1)
  lea    0x9(%rdx),%r9d
  cmp    %r9d,%esi
  jle    L320
  movslq %r9d,%r9
  lea    0x12(%r8),%r10d
  add    %rcx,%r9
  movslq %r10d,%r10
  movzbl (%r9),%r11d
  shr    $0x4,%r11b
  mov    %r11b,(%rax,%r10,1)
  movzbl (%r9),%r9d
  and    $0xf,%r9d
  mov    %r9b,0x1(%rax,%r10,1)
  lea    0xa(%rdx),%r9d
  cmp    %r9d,%esi
  jle    L320
  movslq %r9d,%r9
  lea    0x14(%r8),%r10d
  add    %rcx,%r9
  movslq %r10d,%r10
  movzbl (%r9),%r11d
  shr    $0x4,%r11b
  mov    %r11b,(%rax,%r10,1)
  movzbl (%r9),%r9d
  and    $0xf,%r9d
  mov    %r9b,0x1(%rax,%r10,1)
  lea    0xb(%rdx),%r9d
  cmp    %r9d,%esi
  jle    L320
  movslq %r9d,%r9
  lea    0x16(%r8),%r10d
  add    %rcx,%r9
  movslq %r10d,%r10
  movzbl (%r9),%r11d
  shr    $0x4,%r11b
  mov    %r11b,(%rax,%r10,1)
  movzbl (%r9),%r9d
  and    $0xf,%r9d
  mov    %r9b,0x1(%rax,%r10,1)
  lea    0xc(%rdx),%r9d
  cmp    %r9d,%esi
  jle    L320
  movslq %r9d,%r9
  lea    0x18(%r8),%r10d
  add    %rcx,%r9
  movslq %r10d,%r10
  movzbl (%r9),%r11d
  shr    $0x4,%r11b
  mov    %r11b,(%rax,%r10,1)
  movzbl (%r9),%r9d
  and    $0xf,%r9d
  mov    %r9b,0x1(%rax,%r10,1)
  lea    0xd(%rdx),%r9d
  cmp    %r9d,%esi
  jle    L320
  movslq %r9d,%r9
  lea    0x1a(%r8),%r10d
  add    $0xe,%edx
  add    %rcx,%r9
  movslq %r10d,%r10
  movzbl (%r9),%r11d
  shr    $0x4,%r11b
  mov    %r11b,(%rax,%r10,1)
  movzbl (%r9),%r9d
  and    $0xf,%r9d
  mov    %r9b,0x1(%rax,%r10,1)
  cmp    %edx,%esi
  jle    L320
  movslq %edx,%rdx
  add    %rcx,%rdx
  lea    0x1c(%r8),%ecx
  movzbl (%rdx),%esi
  movslq %ecx,%rcx
  shr    $0x4,%sil
  mov    %sil,(%rax,%rcx,1)
  movzbl (%rdx),%edx
  and    $0xf,%edx
  mov    %dl,0x1(%rax,%rcx,1)
  nopl   (%rax)
L320:
  test   %edi,%edi
  mov    $0x1,%esi
  cmovg  %edi,%esi
  cmp    $0xf,%edi
  jle    L171
  mov    %esi,%ecx
  movdqa D23(%rip),%xmm5
  mov    %rax,%rdx
  movdqa D6(%rip),%xmm4
  shr    $0x4,%ecx
  movdqa D0(%rip),%xmm3
  sub    $0x1,%ecx
  shl    $0x4,%rcx
  lea    0x10(%rax,%rcx,1),%rcx
  nopw   0x0(%rax,%rax,1)
L360:
  movdqu (%rdx),%xmm0
  add    $0x10,%rdx
  movdqa %xmm0,%xmm2
  movdqa %xmm0,%xmm1
  pcmpgtb %xmm5,%xmm0
  paddb  %xmm4,%xmm2
  paddb  %xmm3,%xmm1
  pand   %xmm0,%xmm1
  pandn  %xmm2,%xmm0
  por    %xmm1,%xmm0
  movups %xmm0,-0x10(%rdx)
  cmp    %rdx,%rcx
  jne    L360
  mov    %esi,%edx
  and    $0xfffffff0,%edx
  and    $0xf,%esi
  je     L94
L373:
  movslq %edx,%rcx
  add    %rax,%rcx
  movzbl (%rcx),%r8d
  lea    0x30(%r8),%r9d
  lea    0x57(%r8),%esi
  cmp    $0x9,%r8b
  cmovle %r9d,%esi
  mov    %sil,(%rcx)
  lea    0x1(%rdx),%ecx
  cmp    %edi,%ecx
  jge    L97
  movslq %ecx,%rcx
  add    %rax,%rcx
  movzbl (%rcx),%r8d
  lea    0x30(%r8),%r9d
  lea    0x57(%r8),%esi
  cmp    $0x9,%r8b
  cmovle %r9d,%esi
  mov    %sil,(%rcx)
  lea    0x2(%rdx),%ecx
  cmp    %edi,%ecx
  jge    L97
  movslq %ecx,%rcx
  add    %rax,%rcx
  movzbl (%rcx),%r8d
  lea    0x30(%r8),%r9d
  lea    0x57(%r8),%esi
  cmp    $0x9,%r8b
  cmovle %r9d,%esi
  mov    %sil,(%rcx)
  lea    0x3(%rdx),%ecx
  cmp    %edi,%ecx
  jge    L97
  movslq %ecx,%rcx
  add    %rax,%rcx
  movzbl (%rcx),%r8d
  lea    0x30(%r8),%r9d
  lea    0x57(%r8),%esi
  cmp    $0x9,%r8b
  cmovle %r9d,%esi
  mov    %sil,(%rcx)
  lea    0x4(%rdx),%ecx
  cmp    %edi,%ecx
  jge    L97
  movslq %ecx,%rcx
  add    %rax,%rcx
  movzbl (%rcx),%r8d
  lea    0x30(%r8),%r9d
  lea    0x57(%r8),%esi
  cmp    $0x9,%r8b
  cmovle %r9d,%esi
  mov    %sil,(%rcx)
  lea    0x5(%rdx),%ecx
  cmp    %ecx,%edi
  jle    L97
  movslq %ecx,%rcx
  add    %rax,%rcx
  movzbl (%rcx),%r8d
  lea    0x30(%r8),%r9d
  lea    0x57(%r8),%esi
  cmp    $0x9,%r8b
  cmovle %r9d,%esi
  mov    %sil,(%rcx)
  lea    0x6(%rdx),%ecx
  cmp    %ecx,%edi
  jle    L97
  movslq %ecx,%rcx
  add    %rax,%rcx
  movzbl (%rcx),%r8d
  lea    0x30(%r8),%r9d
  lea    0x57(%r8),%esi
  cmp    $0x9,%r8b
  cmovle %r9d,%esi
  mov    %sil,(%rcx)
  lea    0x7(%rdx),%ecx
  cmp    %ecx,%edi
  jle    L97
  movslq %ecx,%rcx
  add    %rax,%rcx
  movzbl (%rcx),%r8d
  lea    0x30(%r8),%r9d
  lea    0x57(%r8),%esi
  cmp    $0x9,%r8b
  cmovle %r9d,%esi
  mov    %sil,(%rcx)
  lea    0x8(%rdx),%ecx
  cmp    %ecx,%edi
  jle    L97
  movslq %ecx,%rcx
  add    %rax,%rcx
  movzbl (%rcx),%r8d
  lea    0x30(%r8),%r9d
  lea    0x57(%r8),%esi
  cmp    $0x9,%r8b
  cmovle %r9d,%esi
  mov    %sil,(%rcx)
  lea    0x9(%rdx),%ecx
  cmp    %ecx,%edi
  jle    L97
  movslq %ecx,%rcx
  add    %rax,%rcx
  movzbl (%rcx),%r8d
  lea    0x30(%r8),%r9d
  lea    0x57(%r8),%esi
  cmp    $0x9,%r8b
  cmovle %r9d,%esi
  mov    %sil,(%rcx)
  lea    0xa(%rdx),%ecx
  cmp    %ecx,%edi
  jle    L97
  movslq %ecx,%rcx
  add    %rax,%rcx
  movzbl (%rcx),%r8d
  lea    0x30(%r8),%r9d
  lea    0x57(%r8),%esi
  cmp    $0x9,%r8b
  cmovle %r9d,%esi
  mov    %sil,(%rcx)
  lea    0xb(%rdx),%ecx
  cmp    %ecx,%edi
  jle    L97
  movslq %ecx,%rcx
  add    %rax,%rcx
  movzbl (%rcx),%r8d
  lea    0x30(%r8),%r9d
  lea    0x57(%r8),%esi
  cmp    $0x9,%r8b
  cmovle %r9d,%esi
  mov    %sil,(%rcx)
  lea    0xc(%rdx),%ecx
  cmp    %ecx,%edi
  jle    L97
  movslq %ecx,%rcx
  add    %rax,%rcx
  movzbl (%rcx),%r8d
  lea    0x30(%r8),%r9d
  lea    0x57(%r8),%esi
  cmp    $0x9,%r8b
  cmovle %r9d,%esi
  mov    %sil,(%rcx)
  lea    0xd(%rdx),%ecx
  cmp    %ecx,%edi
  jle    L97
  movslq %ecx,%rcx
  add    %rax,%rcx
  movzbl (%rcx),%r8d
  cmp    $0x9,%r8b
  lea    0x30(%r8),%r9d
  lea    0x57(%r8),%esi
  cmovle %r9d,%esi
  add    $0xe,%edx
  mov    %sil,(%rcx)
  cmp    %edx,%edi
  jle    L97
  movslq %edx,%rdx
  add    %rax,%rdx
  movzbl (%rdx),%ecx
  lea    0x57(%rcx),%esi
  lea    0x30(%rcx),%eax
  cmp    $0xa,%cl
  cmovge %esi,%eax
  mov    %al,(%rdx)
  ret
  nopl   0x0(%rax,%rax,1)
L338:
  test   %edi,%edi
  jg     L320
L97:
  ret
  nopl   0x0(%rax)
L290:
  mov    %esi,%esi
  xor    %edx,%edx
  nopl   0x0(%rax)
L273:
  movzbl (%rcx,%rdx,1),%r8d
  shr    $0x4,%r8b
  mov    %r8b,(%rax,%rdx,2)
  movzbl (%rcx,%rdx,1),%r8d
  and    $0xf,%r8d
  mov    %r8b,0x1(%rax,%rdx,2)
  add    $0x1,%rdx
  cmp    %rdx,%rsi
  jne    L273
  jmp    L320
L171:
  xor    %edx,%edx
  jmp    L373
L94:
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D35
type_guessed: byte[16]
name: unpack_data
arguments: data_label: D23
type_guessed: byte[16]
name: unpack_data
arguments: data_label: D6
type_guessed: byte[16]
name: unpack_data
arguments: data_label: D0
type_guessed: byte[16]

tool: {"D35": [0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f]}

tool: {"D23": [0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09]}

tool: {"D6": [0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30]}

tool: {"D0": [0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57]}

assistant: ```c
void u1db__bin_to_hex(unsigned char *bin_in, int bin_count, char *hex_out) {
  int i;
  for (i = 0; i < bin_count; ++i) {
    hex_out[i * 2] = (bin_in[i] >> 4);
    hex_out[i * 2 + 1] = (bin_in[i] & 0x0F);
  }
  for (i = 0; i < bin_count * 2; ++i) {
    if (hex_out[i] < 10) {
      hex_out[i] += '0';
    } else {
      hex_out[i] += 'a' - 10;
    }
  }
}
```