user: Please show me the C implementation that matches the assembly code listed below:

```asm
<sentrycrashdl_convertBinaryImageUUID>:
  endbr64
  sub    $0x28,%rsp
  movdqa D5(%rip),%xmm0
  mov    %fs:0x28,%rcx
  mov    %rcx,0x18(%rsp)
  xor    %ecx,%ecx
  movzbl (%rdi),%ecx
  movaps %xmm0,(%rsp)
  shr    $0x4,%cl
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,(%rsi)
  movzbl (%rdi),%ecx
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x1(%rsi)
  movzbl 0x1(%rdi),%ecx
  shr    $0x4,%cl
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x2(%rsi)
  movzbl 0x1(%rdi),%ecx
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x3(%rsi)
  movzbl 0x2(%rdi),%ecx
  shr    $0x4,%cl
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x4(%rsi)
  movzbl 0x2(%rdi),%ecx
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x5(%rsi)
  movzbl 0x3(%rdi),%ecx
  shr    $0x4,%cl
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x6(%rsi)
  movzbl 0x3(%rdi),%ecx
  movb   $0x2d,0x8(%rsi)
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x7(%rsi)
  movzbl 0x4(%rdi),%ecx
  shr    $0x4,%cl
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x9(%rsi)
  movzbl 0x4(%rdi),%ecx
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0xa(%rsi)
  movzbl 0x5(%rdi),%ecx
  shr    $0x4,%cl
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0xb(%rsi)
  movzbl 0x5(%rdi),%ecx
  movb   $0x2d,0xd(%rsi)
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0xc(%rsi)
  movzbl 0x6(%rdi),%ecx
  shr    $0x4,%cl
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0xe(%rsi)
  movzbl 0x6(%rdi),%ecx
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0xf(%rsi)
  movzbl 0x7(%rdi),%ecx
  shr    $0x4,%cl
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x10(%rsi)
  movzbl 0x7(%rdi),%ecx
  movb   $0x2d,0x12(%rsi)
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x11(%rsi)
  movzbl 0x8(%rdi),%ecx
  shr    $0x4,%cl
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x13(%rsi)
  movzbl 0x8(%rdi),%ecx
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x14(%rsi)
  movzbl 0x9(%rdi),%ecx
  shr    $0x4,%cl
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x15(%rsi)
  movzbl 0x9(%rdi),%ecx
  movb   $0x2d,0x17(%rsi)
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x16(%rsi)
  movzbl 0xa(%rdi),%ecx
  shr    $0x4,%cl
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x18(%rsi)
  movzbl 0xa(%rdi),%ecx
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x19(%rsi)
  movzbl 0xb(%rdi),%ecx
  shr    $0x4,%cl
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x1a(%rsi)
  movzbl 0xb(%rdi),%ecx
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x1b(%rsi)
  movzbl 0xc(%rdi),%ecx
  shr    $0x4,%cl
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x1c(%rsi)
  movzbl 0xc(%rdi),%ecx
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x1d(%rsi)
  movzbl 0xd(%rdi),%ecx
  shr    $0x4,%cl
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x1e(%rsi)
  movzbl 0xd(%rdi),%ecx
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x1f(%rsi)
  movzbl 0xe(%rdi),%ecx
  shr    $0x4,%cl
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x20(%rsi)
  movzbl 0xe(%rdi),%ecx
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x21(%rsi)
  movzbl 0xf(%rdi),%ecx
  shr    $0x4,%cl
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x22(%rsi)
  movzbl 0xf(%rdi),%edx
  movb   $0x0,0x24(%rsi)
  and    $0xf,%edx
  movzbl (%rsp,%rdx,1),%edx
  mov    %dl,0x23(%rsi)
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L1
  add    $0x28,%rsp
  ret
L1:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_label: D5
datatype: byte[16]

tool: {"D5": [0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46]}

assistant: ```c
void sentrycrashdl_convertBinaryImageUUID(const unsigned char *src, char *dst) {
  const char g_hexNybbles[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
  for (int i = 0; i < 4; i++) {
    *dst++ = g_hexNybbles[(*src >> 4) & 15];
    *dst++ = g_hexNybbles[(*src++) & 15];
  }
  *dst++ = '-';
  for (int i = 0; i < 2; i++) {
    *dst++ = g_hexNybbles[(*src >> 4) & 15];
    *dst++ = g_hexNybbles[(*src++) & 15];
  }
  *dst++ = '-';
  for (int i = 0; i < 2; i++) {
    *dst++ = g_hexNybbles[(*src >> 4) & 15];
    *dst++ = g_hexNybbles[(*src++) & 15];
  }
  *dst++ = '-';
  for (int i = 0; i < 2; i++) {
    *dst++ = g_hexNybbles[(*src >> 4) & 15];
    *dst++ = g_hexNybbles[(*src++) & 15];
  }
  *dst++ = '-';
  for (int i = 0; i < 6; i++) {
    *dst++ = g_hexNybbles[(*src >> 4) & 15];
    *dst++ = g_hexNybbles[(*src++) & 15];
  }
  *dst++ = '\0';
}
```