user: What is the c source code of the assembly code below:

```asm
<bin2bcd>:
  endbr64
  cmp    $0x9,%edi
  jle    L34
  lea    -0xa(%rdi),%esi
  mov    $0xcccccccd,%edx
  mov    %rsi,%rax
  imul   %rdx,%rsi
  shr    $0x23,%rsi
  add    $0x1,%esi
  cmp    $0x95,%eax
  jbe    L63
  movd   %edi,%xmm4
  mov    %esi,%edx
  movdqa D0(%rip),%xmm3
  xor    %eax,%eax
  pshufd $0x0,%xmm4,%xmm1
  movdqa D10(%rip),%xmm2
  paddd  D9(%rip),%xmm1
  shr    $0x4,%edx
  cs nopw 0x0(%rax,%rax,1)
L160:
  movdqa %xmm1,%xmm0
  add    $0x1,%eax
  paddd  %xmm3,%xmm1
  paddd  %xmm2,%xmm0
  cmp    %eax,%edx
  jne    L160
  mov    %esi,%r9d
  movdqa D7(%rip),%xmm1
  pshufd $0xff,%xmm0,%xmm0
  paddb  D45(%rip),%xmm1
  and    $0xfffffff0,%r9d
  imul   $0xfffffff6,%r9d,%ecx
  mov    %r9d,%r8d
  movaps %xmm1,-0x18(%rsp)
  movzbl -0x9(%rsp),%eax
  shl    $0x4,%r8d
  add    %edi,%ecx
  cmp    %esi,%r9d
  je     L43
L3:
  lea    -0xa(%rcx),%edi
  lea    0x10(%r8),%eax
  cmp    $0x9,%edi
  jle    L103
  lea    -0x14(%rcx),%edi
  lea    0x20(%r8),%eax
  cmp    $0x9,%edi
  jle    L103
  lea    -0x1e(%rcx),%edi
  lea    0x30(%r8),%eax
  cmp    $0x9,%edi
  jle    L103
  lea    -0x28(%rcx),%edi
  lea    0x40(%r8),%eax
  cmp    $0x9,%edi
  jle    L103
  lea    -0x32(%rcx),%edi
  lea    0x50(%r8),%eax
  cmp    $0x9,%edi
  jle    L103
  lea    -0x3c(%rcx),%edi
  lea    0x60(%r8),%eax
  cmp    $0x9,%edi
  jle    L103
  lea    -0x46(%rcx),%edi
  lea    0x70(%r8),%eax
  cmp    $0x9,%edi
  jle    L103
  lea    -0x50(%rcx),%edi
  lea    -0x80(%r8),%eax
  cmp    $0x9,%edi
  jle    L103
  lea    -0x5a(%rcx),%edi
  lea    -0x70(%r8),%eax
  cmp    $0x9,%edi
  jle    L103
  lea    -0x64(%rcx),%edi
  lea    -0x60(%r8),%eax
  cmp    $0x9,%edi
  jle    L103
  lea    -0x6e(%rcx),%edi
  lea    -0x50(%r8),%eax
  cmp    $0x9,%edi
  jle    L103
  lea    -0x78(%rcx),%edi
  lea    -0x40(%r8),%eax
  cmp    $0x9,%edi
  jle    L103
  lea    -0x82(%rcx),%edi
  lea    -0x30(%r8),%eax
  cmp    $0x9,%edi
  jle    L103
  lea    -0x8c(%rcx),%edi
  lea    -0x20(%r8),%eax
  cmp    $0x9,%edi
  jle    L103
  lea    -0x96(%rcx),%edi
  lea    -0x10(%r8),%eax
L103:
  add    %edi,%eax
  movsbl %al,%eax
  ret
  nopl   (%rax)
L34:
  xor    %eax,%eax
  add    %edi,%eax
  movsbl %al,%eax
  ret
L63:
  mov    %edi,%ecx
  xor    %r8d,%r8d
  jmp    L3
L43:
  movd   %xmm0,%edi
  jmp    L103
```

tool_calls: name: read_data
arguments: label: D0
datatype: byte[16]
name: read_data
arguments: label: D10
datatype: byte[16]
name: read_data
arguments: label: D9
datatype: byte[16]
name: read_data
arguments: label: D7
datatype: byte[16]
name: read_data
arguments: label: D45
datatype: byte[16]

tool: {"D0": [0x60,0xff,0xff,0xff,0x60,0xff,0xff,0xff,0x60,0xff,0xff,0xff,0x60,0xff,0xff,0xff]}

tool: {"D10": [0x7e,0xff,0xff,0xff,0x7e,0xff,0xff,0xff,0x7e,0xff,0xff,0xff,0x7e,0xff,0xff,0xff]}

tool: {"D9": [0x00,0x00,0x00,0x00,0xf6,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xe2,0xff,0xff,0xff]}

tool: {"D7": [0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10]}

tool: {"D45": [0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90,0xa0,0xb0,0xc0,0xd0,0xe0,0xf0]}

assistant: ```c
uint8_t bin2bcd(uint8_t value) {
  char retval;
  retval = 0;
  while (1) {
    if (value >= 10) {
      value -= 10;
      retval += 0x10;
    } else {
      retval += value;
      break;
    }
  }
  return (retval);
}
```