user: Translate the below assembly code into C programming language:

```asm
<testQSort>:
  endbr64
  push   %rbx
  lea    D17(%rip),%rcx
  lea    D14(%rip),%rbx
  mov    $0x9,%edx
  movq   %rbx,%xmm8
  sub    $0x230,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x228(%rsp)
  lea    D124(%rip),%rax
  lea    0xf0(%rsp),%rsi
  lea    0x180(%rsp),%rdi
  movl   $0x3,0x110(%rsp)
  movq   %rax,%xmm0
  lea    D89(%rip),%rax
  movdqa %xmm0,%xmm7
  movq   %rax,%xmm1
  movq   %rax,%xmm5
  movq   %rax,%xmm2
  punpcklqdq %xmm7,%xmm7
  movdqa %xmm0,%xmm6
  lea    D45(%rip),%rax
  movaps %xmm7,0x40(%rsp)
  punpcklqdq %xmm1,%xmm6
  punpcklqdq %xmm0,%xmm8
  movq   %rax,%xmm4
  movq   %rax,%xmm7
  lea    D53(%rip),%rax
  movaps %xmm6,0x50(%rsp)
  movq   %rax,%xmm3
  lea    D104(%rip),%rax
  punpcklqdq %xmm1,%xmm7
  movaps %xmm8,0x30(%rsp)
  punpcklqdq %xmm4,%xmm3
  movdqa D37(%rip),%xmm4
  punpcklqdq %xmm0,%xmm5
  punpcklqdq %xmm2,%xmm2
  movq   %rax,%xmm1
  lea    D190(%rip),%rax
  movaps %xmm3,0x10(%rsp)
  movaps %xmm4,0xf0(%rsp)
  movdqa D97(%rip),%xmm4
  movq   %rax,%xmm3
  lea    D193(%rip),%rax
  movq   %rax,%xmm0
  lea    D98(%rip),%rax
  movaps %xmm2,0x60(%rsp)
  movaps %xmm4,0x100(%rsp)
  movq   %rcx,%xmm4
  lea    D212(%rip),%rcx
  punpcklqdq %xmm3,%xmm4
  movaps %xmm7,0x20(%rsp)
  movaps %xmm4,0x180(%rsp)
  movq   %rcx,%xmm4
  punpcklqdq %xmm0,%xmm4
  movaps %xmm5,(%rsp)
  movaps %xmm4,0x190(%rsp)
  movq   %rax,%xmm4
  lea    D57(%rip),%rax
  movq   %rax,%xmm3
  lea    D11(%rip),%rax
  punpcklqdq %xmm1,%xmm4
  mov    %rax,0x1c0(%rsp)
  punpcklqdq %xmm3,%xmm1
  xor    %eax,%eax
  movaps %xmm4,0x1a0(%rsp)
  movaps %xmm1,0x1b0(%rsp)
  call   <testQSort_@plt>
  movdqa (%rsp),%xmm5
  xor    %eax,%eax
  movdqa 0x10(%rsp),%xmm3
  movdqa D8(%rip),%xmm1
  lea    0x90(%rsp),%rsi
  lea    0x120(%rsp),%rdi
  mov    $0x5,%edx
  movaps %xmm5,0x120(%rsp)
  movaps %xmm3,0x130(%rsp)
  movaps %xmm1,0x90(%rsp)
  movl   $0x2,0xa0(%rsp)
  mov    %rbx,0x140(%rsp)
  call   <testQSort_@plt>
  movdqa D63(%rip),%xmm1
  movdqa 0x20(%rsp),%xmm7
  xor    %eax,%eax
  movdqa 0x30(%rsp),%xmm8
  lea    0x70(%rsp),%rsi
  mov    $0x4,%edx
  lea    0xb0(%rsp),%rdi
  movaps %xmm1,0x70(%rsp)
  movaps %xmm8,0xb0(%rsp)
  movaps %xmm7,0xc0(%rsp)
  call   <testQSort_@plt>
  movdqa 0x60(%rsp),%xmm2
  xor    %eax,%eax
  movdqa D76(%rip),%xmm1
  movdqa (%rsp),%xmm5
  lea    0x80(%rsp),%rsi
  mov    $0x4,%edx
  lea    0xd0(%rsp),%rdi
  movaps %xmm1,0x80(%rsp)
  movaps %xmm5,0xd0(%rsp)
  movaps %xmm2,0xe0(%rsp)
  movaps %xmm2,0x10(%rsp)
  call   <testQSort_@plt>
  movdqa (%rsp),%xmm5
  mov    $0xb,%edx
  movdqa D216(%rip),%xmm1
  mov    D201(%rip),%rax
  movdqa 0x10(%rsp),%xmm2
  lea    0x150(%rsp),%rsi
  lea    0x1d0(%rsp),%rdi
  movdqa 0x50(%rsp),%xmm6
  movaps %xmm1,0x150(%rsp)
  movdqa D35(%rip),%xmm1
  mov    %rax,0x170(%rsp)
  lea    D124(%rip),%rax
  movaps %xmm5,0x1d0(%rsp)
  movdqa 0x40(%rsp),%xmm5
  mov    %rax,0x220(%rsp)
  xor    %eax,%eax
  movl   $0xa,0x178(%rsp)
  movaps %xmm1,0x160(%rsp)
  movaps %xmm2,0x1e0(%rsp)
  movaps %xmm6,0x1f0(%rsp)
  movaps %xmm5,0x200(%rsp)
  movaps %xmm2,0x210(%rsp)
  call   <testQSort_@plt>
  mov    0x228(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L2
  add    $0x230,%rsp
  pop    %rbx
  ret
L2:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_tag: D17
type: string
name: unpack_data
arguments: data_tag: D14
type: string
name: unpack_data
arguments: data_tag: D124
type: string
name: unpack_data
arguments: data_tag: D89
type: string
name: unpack_data
arguments: data_tag: D45
type: string
name: unpack_data
arguments: data_tag: D53
type: string
name: unpack_data
arguments: data_tag: D104
type: string
name: unpack_data
arguments: data_tag: D37
type: byte[16]
name: unpack_data
arguments: data_tag: D190
type: string
name: unpack_data
arguments: data_tag: D97
type: byte[16]
name: unpack_data
arguments: data_tag: D193
type: string
name: unpack_data
arguments: data_tag: D98
type: string
name: unpack_data
arguments: data_tag: D212
type: string
name: unpack_data
arguments: data_tag: D57
type: string
name: unpack_data
arguments: data_tag: D11
type: string
name: unpack_data
arguments: data_tag: D8
type: byte[16]
name: unpack_data
arguments: data_tag: D63
type: byte[16]
name: unpack_data
arguments: data_tag: D76
type: byte[16]
name: unpack_data
arguments: data_tag: D216
type: byte[16]
name: unpack_data
arguments: data_tag: D201
type: byte[8]
name: unpack_data
arguments: data_tag: D35
type: byte[16]

tool: D17: asdfd);

tool: D14: 4

tool: D124: 2

tool: D89: 1

tool: D45: 3

tool: D53: 5

tool: D104: applicable

tool: {"D37": [0x05,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00]}

tool: D190: tabloid

tool: {"D97": [0x02,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00]}

tool: D193: venomous

tool: D98: curtain

tool: D212: elapid

tool: D57: innovative

tool: D11: nest

tool: {"D8": [0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x04,0x00,0x00,0x00]}

tool: {"D63": [0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D76": [0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00]}

tool: {"D216": [0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x00,0x00]}

tool: {"D201": [0x06,0x00,0x00,0x00,0x07,0x00,0x00,0x00]}

tool: {"D35": [0x08,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00]}

assistant: ```c
void testQSort() {
  testQSort_((char *[]){"asdfd);", "tabloid", "elapid", "venomous", "curtain", "applicable", "applicable", "innovative", "nest"}, (int[]){5, 6, 0, 4, 2, 7, 8, 1, 3}, 9);
  testQSort_((char *[]){"1", "2", "5", "3", "4"}, (int[]){0, 1, 3, 4, 2}, 5);
  testQSort_((char *[]){"4", "2", "3", "1"}, (int[]){3, 1, 2, 0}, 4);
  testQSort_((char *[]){"1", "2", "1", "1"}, (int[]){0, 2, 3, 1}, 4);
  testQSort_((char *[]){"1", "2", "1", "1", "2", "1", "2", "2", "1", "1", "2"}, (int[]){0, 2, 3, 5, 8, 9, 1, 4, 6, 7, 10}, 11);
}
```