user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<ConvertLine>:
  endbr64
  push   %rbp
  mov    %rdi,%rbp
  add    $0x2,%rdi
  push   %rbx
  mov    %rsi,%rbx
  lea    D29(%rip),%rsi
  sub    $0x58,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
  call   <strstr@plt>
  mov    %rax,%rdx
  xor    %eax,%eax
  test   %rdx,%rdx
  je     L29
  lea    0x3c(%rsp),%rax
  movb   $0x0,(%rdx)
  lea    0x4(%rsp),%rcx
  mov    %rsp,%rdx
  push   %rax
  lea    D28(%rip),%rsi
  mov    %rbp,%rdi
  lea    0x40(%rsp),%rax
  push   %rax
  lea    0x44(%rsp),%rax
  push   %rax
  lea    0x48(%rsp),%rax
  push   %rax
  lea    0x4c(%rsp),%rax
  push   %rax
  lea    0x50(%rsp),%rax
  push   %rax
  lea    0x54(%rsp),%rax
  push   %rax
  lea    0x58(%rsp),%rax
  push   %rax
  lea    0x5c(%rsp),%rax
  push   %rax
  lea    0x60(%rsp),%rax
  push   %rax
  lea    0x64(%rsp),%rax
  push   %rax
  lea    0x68(%rsp),%rax
  push   %rax
  lea    0x6c(%rsp),%r9
  lea    0x68(%rsp),%r8
  call   <sscanf@plt>
  add    $0x60,%rsp
  test   %eax,%eax
  jle    L164
  lea    -0x1(%rax),%edx
  cmp    $0xe,%edx
  jbe    L157
  movdqa (%rsp),%xmm0
  mov    %eax,%edx
  and    $0xfffffff0,%edx
  movdqa %xmm0,%xmm1
  punpcklwd 0x10(%rsp),%xmm0
  punpckhwd 0x10(%rsp),%xmm1
  movdqa %xmm0,%xmm2
  punpcklwd %xmm1,%xmm0
  punpckhwd %xmm1,%xmm2
  movdqa 0x20(%rsp),%xmm1
  punpcklwd %xmm2,%xmm0
  movdqa %xmm1,%xmm2
  punpcklwd 0x30(%rsp),%xmm1
  punpckhwd 0x30(%rsp),%xmm2
  movdqa %xmm1,%xmm3
  punpcklwd %xmm2,%xmm1
  punpckhwd %xmm2,%xmm3
  movdqa D9(%rip),%xmm2
  punpcklwd %xmm3,%xmm1
  pand   %xmm2,%xmm0
  pand   %xmm1,%xmm2
  packuswb %xmm2,%xmm0
  movups %xmm0,(%rbx)
  test   $0xf,%al
  je     L164
L12:
  movslq %edx,%rcx
  mov    (%rsp,%rcx,4),%esi
  mov    %sil,(%rbx,%rcx,1)
  lea    0x1(%rdx),%ecx
  cmp    %ecx,%eax
  jle    L164
  movslq %ecx,%rcx
  mov    (%rsp,%rcx,4),%esi
  mov    %sil,(%rbx,%rcx,1)
  lea    0x2(%rdx),%ecx
  cmp    %ecx,%eax
  jle    L164
  movslq %ecx,%rcx
  mov    (%rsp,%rcx,4),%esi
  mov    %sil,(%rbx,%rcx,1)
  lea    0x3(%rdx),%ecx
  cmp    %ecx,%eax
  jle    L164
  movslq %ecx,%rcx
  mov    (%rsp,%rcx,4),%esi
  mov    %sil,(%rbx,%rcx,1)
  lea    0x4(%rdx),%ecx
  cmp    %ecx,%eax
  jle    L164
  movslq %ecx,%rcx
  mov    (%rsp,%rcx,4),%esi
  mov    %sil,(%rbx,%rcx,1)
  lea    0x5(%rdx),%ecx
  cmp    %ecx,%eax
  jle    L164
  movslq %ecx,%rcx
  mov    (%rsp,%rcx,4),%esi
  mov    %sil,(%rbx,%rcx,1)
  lea    0x6(%rdx),%ecx
  cmp    %ecx,%eax
  jle    L164
  movslq %ecx,%rcx
  mov    (%rsp,%rcx,4),%esi
  mov    %sil,(%rbx,%rcx,1)
  lea    0x7(%rdx),%ecx
  cmp    %ecx,%eax
  jle    L164
  movslq %ecx,%rcx
  mov    (%rsp,%rcx,4),%esi
  mov    %sil,(%rbx,%rcx,1)
  lea    0x8(%rdx),%ecx
  cmp    %ecx,%eax
  jle    L164
  movslq %ecx,%rcx
  mov    (%rsp,%rcx,4),%esi
  mov    %sil,(%rbx,%rcx,1)
  lea    0x9(%rdx),%ecx
  cmp    %ecx,%eax
  jle    L164
  movslq %ecx,%rcx
  mov    (%rsp,%rcx,4),%esi
  mov    %sil,(%rbx,%rcx,1)
  lea    0xa(%rdx),%ecx
  cmp    %ecx,%eax
  jle    L164
  movslq %ecx,%rcx
  mov    (%rsp,%rcx,4),%esi
  mov    %sil,(%rbx,%rcx,1)
  lea    0xb(%rdx),%ecx
  cmp    %ecx,%eax
  jle    L164
  movslq %ecx,%rcx
  mov    (%rsp,%rcx,4),%esi
  mov    %sil,(%rbx,%rcx,1)
  lea    0xc(%rdx),%ecx
  cmp    %ecx,%eax
  jle    L164
  movslq %ecx,%rcx
  mov    (%rsp,%rcx,4),%esi
  mov    %sil,(%rbx,%rcx,1)
  lea    0xd(%rdx),%ecx
  cmp    %ecx,%eax
  jle    L164
  movslq %ecx,%rcx
  add    $0xe,%edx
  mov    (%rsp,%rcx,4),%esi
  mov    %sil,(%rbx,%rcx,1)
  cmp    %edx,%eax
  jle    L164
  movslq %edx,%rdx
  mov    (%rsp,%rdx,4),%ecx
  mov    %cl,(%rbx,%rdx,1)
  nopl   0x0(%rax)
L164:
  cltq
L29:
  mov    0x48(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L61
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  ret
L157:
  xor    %edx,%edx
  jmp    L12
L61:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: tag: D29
data_type: string
name: retrieve_data
arguments: tag: D28
data_type: string
name: retrieve_data
arguments: tag: D9
data_type: byte[16]

tool: D29:   

tool: D28: %*s %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x

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

assistant: ```c
size_t ConvertLine(char *InputLine, unsigned char *OutputData) {
  char *End;
  int BytesConverted;
  int Converted[16];
  int i;
  End = strstr(InputLine + 2, "  ");
  if (!End) {
    return (0);
  }
  *End = 0;
  BytesConverted = sscanf(InputLine, "%*s %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x", &Converted[0], &Converted[1], &Converted[2], &Converted[3], &Converted[4], &Converted[5], &Converted[6], &Converted[7], &Converted[8], &Converted[9], &Converted[10], &Converted[11], &Converted[12], &Converted[13], &Converted[14], &Converted[15]);
  for (i = 0; i < BytesConverted; i++) {
    OutputData[i] = (unsigned char)Converted[i];
  }
  return ((size_t)BytesConverted);
}
```