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

```asm
<partition_sort>:
  endbr64
  push   %r15
  mov    %rdx,%r15
  mov    %rdi,%r11
  push   %r14
  lea    -0x1(%r15),%eax
  push   %r13
  push   %r12
  mov    %r15,%r12
  push   %rbp
  mov    %rcx,%rbp
  neg    %r12
  push   %rbx
  mov    %r15d,%ebx
  and    $0xfffffff0,%ebx
  sub    $0x208,%rsp
  mov    %fs:0x28,%rdx
  mov    %rdx,0x1f8(%rsp)
  xor    %edx,%edx
  mov    %eax,0x8(%rsp)
  mov    %r15d,%eax
  shr    $0x4,%eax
  mov    %rdi,0xf0(%rsp)
  mov    %r15d,%edi
  sub    $0x1,%eax
  sub    %ebx,%edi
  mov    %esi,0x1c(%rsp)
  add    $0x1,%rax
  mov    %esi,0x70(%rsp)
  shl    $0x4,%rax
  mov    %r15d,0x18(%rsp)
  mov    %rax,0x28(%rsp)
  mov    %ebx,%eax
  mov    %rax,0x48(%rsp)
  lea    -0x4(%r15),%eax
  mov    %eax,0x30(%rsp)
  shr    $0x2,%eax
  lea    0x1(%rax),%ecx
  mov    %eax,0x68(%rsp)
  mov    %ecx,%eax
  mov    %ecx,0xc(%rsp)
  and    $0xfffffffc,%ecx
  shr    $0x2,%eax
  mov    %r15d,0x4(%rsp)
  sub    $0x1,%eax
  mov    %ebx,0x50(%rsp)
  add    $0x1,%rax
  mov    %edi,0x54(%rsp)
  shl    $0x4,%rax
  mov    %ecx,0x34(%rsp)
  mov    %rax,0x40(%rsp)
  mov    %ecx,%eax
  shl    $0x2,%rax
  mov    %edi,0x58(%rsp)
  mov    %rax,0x38(%rsp)
  lea    -0x1(%rdi),%eax
  mov    %eax,0x5c(%rsp)
L1022:
  mov    %edx,0x6c(%rsp)
  nopl   (%rax)
L644:
  mov    0x1c(%rsp),%ecx
  mov    0x18(%rsp),%edx
  mov    %r11,0x10(%rsp)
  mov    %r11,%rdi
  mov    %ecx,%eax
  sar    %eax
  imul   %edx,%eax
  movslq %eax,%rbx
  sub    %edx,%eax
  and    $0x1,%ecx
  cltq
  lea    (%r11,%rbx,1),%r13
  cmovne %rbx,%rax
  mov    %r13,%rsi
  mov    %rax,0x20(%rsp)
  lea    0x0(%r13,%rax,1),%r14
  call   *%rbp
  mov    0x10(%rsp),%r11
  test   %eax,%eax
  jle    L1045
  mov    0x4(%rsp),%ecx
  mov    %ecx,%eax
  or     %r11d,%eax
  test   $0x3,%al
  lea    0x10(%rbx),%rax
  jne    L846
  test   %rax,%rax
  lea    0x10(%r11),%rsi
  setle  %al
  cmp    %rsi,%r13
  setae  %sil
  or     %sil,%al
  je     L474
  cmp    $0x4,%ecx
  je     L474
  cmpl   $0x8,0x30(%rsp)
  jbe    L699
  mov    0x40(%rsp),%rdx
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L1856:
  movdqu (%r11,%rax,1),%xmm0
  movdqu 0x0(%r13,%rax,1),%xmm1
  movups %xmm1,(%r11,%rax,1)
  movups %xmm0,0x0(%r13,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L1856
  mov    0x38(%rsp),%rax
  mov    0x34(%rsp),%ecx
  lea    (%r11,%rax,1),%rdi
  lea    0x0(%r13,%rax,1),%rsi
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %ecx,0xc(%rsp)
  je     L1217
  mov    %ecx,%eax
L1310:
  mov    0xc(%rsp),%r8d
  sub    %eax,%r8d
  cmp    %eax,0x68(%rsp)
  je     L304
  shl    $0x2,%rax
  lea    (%r11,%rax,1),%r9
  add    %rbx,%rax
  add    %r11,%rax
  mov    (%r9),%r10
  movq   (%rax),%xmm0
  movq   %xmm0,(%r9)
  mov    %r8d,%r9d
  and    $0xfffffffe,%r9d
  mov    %r10,(%rax)
  mov    %r9d,%eax
  shl    $0x2,%rax
  add    %rax,%rdi
  add    %rax,%rsi
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %r9d,%r8d
  je     L1217
L304:
  mov    (%rdi),%eax
  mov    (%rsi),%r8d
  mov    %r8d,(%rdi)
  mov    %eax,(%rsi)
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
L1217:
  mov    %eax,%eax
  add    $0x4,%rax
  lea    (%r11,%rax,1),%rsi
  add    %r13,%rax
L1878:
  lea    (%rsi,%r12,1),%rcx
  lea    (%rax,%r12,1),%r13
  mov    %rcx,0x10(%rsp)
L1045:
  mov    %r11,0x60(%rsp)
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   *%rbp
  test   %eax,%eax
  jle    L1290
  mov    0x10(%rsp),%rdi
  mov    %r14,%rsi
  call   *%rbp
  test   %eax,%eax
  jle    L1370
  mov    0x4(%rsp),%ecx
  mov    0x10(%rsp),%rdx
  mov    0x60(%rsp),%r11
  mov    %ecx,%eax
  or     %edx,%eax
  test   $0x3,%al
  jne    L1602
  mov    0x20(%rsp),%r8
  lea    0x10(%rdx),%rdi
  add    %rbx,%r8
  lea    0x10(%r11,%r8,1),%rax
  lea    (%r11,%r8,1),%rsi
  cmp    %rax,%rdx
  setae  %al
  cmp    %rdi,%rsi
  setae  %dil
  or     %dil,%al
  je     L778
  cmp    $0x4,%ecx
  je     L778
  cmpl   $0x8,0x30(%rsp)
  jbe    L1112
  mov    0x40(%rsp),%rcx
  xor    %eax,%eax
L1567:
  movdqu (%rdx,%rax,1),%xmm0
  movdqu (%rsi,%rax,1),%xmm6
  movups %xmm6,(%rdx,%rax,1)
  movups %xmm0,(%rsi,%rax,1)
  add    $0x10,%rax
  cmp    %rcx,%rax
  jne    L1567
  mov    0x38(%rsp),%rax
  mov    0x10(%rsp),%rdi
  mov    0x34(%rsp),%ecx
  add    %rax,%rdi
  lea    (%r14,%rax,1),%rsi
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %ecx,0xc(%rsp)
  je     L1781
  mov    %ecx,%eax
L1459:
  mov    0xc(%rsp),%r9d
  sub    %eax,%r9d
  cmp    0x68(%rsp),%eax
  je     L75
  mov    0x10(%rsp),%rcx
  shl    $0x2,%rax
  lea    (%rcx,%rax,1),%r10
  add    %r8,%rax
  add    %r11,%rax
  mov    (%r10),%r8
  mov    (%rax),%r11
  mov    %r11,(%r10)
  mov    %r8,(%rax)
  mov    %r9d,%r8d
  and    $0xfffffffe,%r8d
  mov    %r8d,%eax
  shl    $0x2,%rax
  add    %rax,%rdi
  add    %rax,%rsi
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %r8d,%r9d
  je     L1781
L75:
  mov    (%rdi),%eax
  mov    (%rsi),%r8d
  mov    %r8d,(%rdi)
  mov    %eax,(%rsi)
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
L1781:
  mov    0x10(%rsp),%rsi
  mov    %eax,%eax
  add    $0x4,%rax
  add    %rax,%rsi
  add    %r14,%rax
L627:
  lea    (%rsi,%r12,1),%rcx
  lea    (%rax,%r12,1),%r14
  mov    %rcx,0x10(%rsp)
L1370:
  mov    0x4(%rsp),%ecx
  mov    %ecx,%eax
  or     %r13d,%eax
  test   $0x3,%al
  lea    0xf(%r13),%rax
  jne    L363
  sub    %r14,%rax
  cmp    $0x1e,%rax
  jbe    L1365
  cmp    $0x4,%ecx
  je     L1365
  cmpl   $0x8,0x30(%rsp)
  jbe    L1182
  mov    0x40(%rsp),%rdx
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L1551:
  movdqu 0x0(%r13,%rax,1),%xmm0
  movdqu (%r14,%rax,1),%xmm4
  movups %xmm4,0x0(%r13,%rax,1)
  movups %xmm0,(%r14,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L1551
  mov    0x38(%rsp),%rax
  mov    0x34(%rsp),%ecx
  lea    0x0(%r13,%rax,1),%rdi
  lea    (%r14,%rax,1),%rsi
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %ecx,0xc(%rsp)
  je     L1088
  mov    %ecx,%eax
L1071:
  mov    0xc(%rsp),%r8d
  sub    %eax,%r8d
  cmp    0x68(%rsp),%eax
  je     L1607
  shl    $0x2,%rax
  lea    0x0(%r13,%rax,1),%r9
  add    %r14,%rax
  mov    (%rax),%r11
  mov    (%r9),%r10
  mov    %r11,(%r9)
  mov    %r8d,%r9d
  and    $0xfffffffe,%r9d
  mov    %r10,(%rax)
  mov    %r9d,%eax
  shl    $0x2,%rax
  add    %rax,%rdi
  add    %rax,%rsi
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %r9d,%r8d
  je     L1088
L1607:
  mov    (%rdi),%eax
  mov    (%rsi),%r8d
  mov    %r8d,(%rdi)
  mov    %eax,(%rsi)
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
L1088:
  mov    %eax,%eax
  add    $0x4,%rax
  lea    0x0(%r13,%rax,1),%rdx
  add    %r14,%rax
L247:
  lea    (%rdx,%r12,1),%r13
  lea    (%rax,%r12,1),%r14
L1290:
  mov    0x4(%rsp),%ecx
  lea    (%r14,%r12,1),%rsi
  mov    %ecx,%eax
  or     %r13d,%eax
  test   $0x3,%al
  mov    %r14,%rax
  jne    L1713
  sub    %r15,%rax
  lea    0x10(%r13),%rdi
  add    $0x10,%rax
  cmp    %rax,%r13
  setae  %al
  cmp    %rdi,%rsi
  setae  %dil
  or     %dil,%al
  je     L1154
  cmp    $0x4,%ecx
  je     L1154
  cmpl   $0x8,0x30(%rsp)
  jbe    L1829
  mov    0x40(%rsp),%rdx
  xor    %eax,%eax
  nopl   0x0(%rax,%rax,1)
L1219:
  movdqu 0x0(%r13,%rax,1),%xmm0
  movdqu (%rsi,%rax,1),%xmm4
  movups %xmm4,0x0(%r13,%rax,1)
  movups %xmm0,(%rsi,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L1219
  mov    0x38(%rsp),%rax
  mov    0x34(%rsp),%ecx
  lea    0x0(%r13,%rax,1),%r8
  lea    (%rsi,%rax,1),%rdi
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %ecx,0xc(%rsp)
  je     L10
  mov    %ecx,%eax
L333:
  mov    0xc(%rsp),%r9d
  sub    %eax,%r9d
  cmp    0x68(%rsp),%eax
  je     L1130
  shl    $0x2,%rax
  lea    0x0(%r13,%rax,1),%rdx
  sub    %r15,%rax
  add    %r14,%rax
  mov    (%rdx),%rcx
  mov    (%rax),%r10
  mov    %r10,(%rdx)
  mov    %r9d,%edx
  and    $0xfffffffe,%edx
  mov    %rcx,(%rax)
  mov    %edx,%eax
  shl    $0x2,%rax
  add    %rax,%r8
  add    %rax,%rdi
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %edx,%r9d
  je     L10
L1130:
  mov    (%r8),%eax
  mov    (%rdi),%edx
  mov    %edx,(%r8)
  mov    %eax,(%rdi)
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
L10:
  mov    %eax,%eax
  lea    0x4(%rsi,%rax,1),%rax
  mov    %rax,0x20(%rsp)
L1536:
  lea    (%rax,%r12,1),%rbx
  mov    0x10(%rsp),%r14
  mov    %rbx,%r13
  nopl   0x0(%rax,%rax,1)
L94:
  add    %r15,%r14
  mov    %rbx,%rsi
  mov    %r14,%rdi
  call   *%rbp
  test   %eax,%eax
  js     L94
  nop
L815:
  add    %r12,%r13
  mov    %rbx,%rsi
  mov    %r13,%rdi
  call   *%rbp
  test   %eax,%eax
  jg     L815
  mov    0x4(%rsp),%ecx
  mov    %ecx,%eax
  or     %r14d,%eax
  and    $0x3,%eax
  cmp    %r13,%r14
  jae    L1524
  test   %eax,%eax
  lea    0xf(%r13),%rax
  jne    L733
  sub    %r14,%rax
  cmp    $0x1e,%rax
  jbe    L1110
  cmp    $0x4,%ecx
  je     L1110
  cmpl   $0x8,0x30(%rsp)
  jbe    L621
  mov    0x40(%rsp),%rdx
  xor    %eax,%eax
  nopl   0x0(%rax,%rax,1)
L1177:
  movdqu (%r14,%rax,1),%xmm0
  movdqu 0x0(%r13,%rax,1),%xmm2
  movups %xmm2,(%r14,%rax,1)
  movups %xmm0,0x0(%r13,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L1177
  mov    0x38(%rsp),%rax
  mov    0x34(%rsp),%edi
  lea    (%r14,%rax,1),%rcx
  lea    0x0(%r13,%rax,1),%rdx
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %edi,0xc(%rsp)
  je     L29
  mov    %edi,%eax
L1786:
  mov    0xc(%rsp),%esi
  sub    %eax,%esi
  cmp    0x68(%rsp),%eax
  je     L462
  shl    $0x2,%rax
  lea    (%r14,%rax,1),%rdi
  add    %r13,%rax
  mov    (%rax),%r9
  mov    (%rdi),%r8
  mov    %r9,(%rdi)
  mov    %esi,%edi
  and    $0xfffffffe,%edi
  mov    %r8,(%rax)
  mov    %edi,%eax
  shl    $0x2,%rax
  add    %rax,%rcx
  add    %rax,%rdx
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %edi,%esi
  je     L29
L462:
  mov    (%rcx),%eax
  mov    (%rdx),%esi
  mov    %esi,(%rcx)
  mov    %eax,(%rdx)
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
L29:
  add    $0x4,%rax
  add    %rax,%r14
  add    %r13,%rax
L1275:
  add    %r12,%r14
  lea    (%rax,%r12,1),%r13
  jmp    L94
  cs nopw 0x0(%rax,%rax,1)
L733:
  sub    %r14,%rax
  cmp    $0x1e,%rax
  jbe    L218
  mov    0x8(%rsp),%eax
  cmp    $0x6,%eax
  jbe    L218
  cmp    $0xe,%eax
  jbe    L1235
  mov    0x28(%rsp),%rdx
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L961:
  movdqu (%r14,%rax,1),%xmm0
  movdqu 0x0(%r13,%rax,1),%xmm3
  movups %xmm3,(%r14,%rax,1)
  movups %xmm0,0x0(%r13,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L961
  mov    0x48(%rsp),%rax
  mov    0x50(%rsp),%edi
  lea    (%r14,%rax,1),%rcx
  lea    0x0(%r13,%rax,1),%rdx
  mov    0x8(%rsp),%eax
  cmp    %edi,0x18(%rsp)
  je     L1768
  cmpl   $0x6,0x5c(%rsp)
  mov    0x58(%rsp),%r8d
  jbe    L463
  mov    %edi,%eax
  mov    0x54(%rsp),%edi
L1115:
  lea    (%r14,%rax,1),%rsi
  add    %r13,%rax
  mov    (%rax),%r10
  mov    (%rsi),%r9
  mov    %r10,(%rsi)
  mov    %r8d,%esi
  and    $0xfffffff8,%esi
  mov    %r9,(%rax)
  mov    %esi,%eax
  sub    %esi,%edi
  add    %rax,%rcx
  add    %rax,%rdx
  mov    0x8(%rsp),%eax
  cmp    %r8d,%esi
  je     L1768
L1136:
  movzbl (%rcx),%eax
  movzbl (%rdx),%esi
  mov    %sil,(%rcx)
  mov    %al,(%rdx)
  mov    0x8(%rsp),%eax
  cmp    $0x1,%edi
  je     L1768
  movzbl 0x1(%rcx),%esi
  movzbl 0x1(%rdx),%r8d
  mov    %r8b,0x1(%rcx)
  mov    %sil,0x1(%rdx)
  cmp    $0x2,%edi
  je     L1768
  movzbl 0x2(%rcx),%esi
  movzbl 0x2(%rdx),%r8d
  mov    %r8b,0x2(%rcx)
  mov    %sil,0x2(%rdx)
  cmp    $0x3,%edi
  je     L1768
  movzbl 0x3(%rcx),%esi
  movzbl 0x3(%rdx),%r8d
  mov    %r8b,0x3(%rcx)
  mov    %sil,0x3(%rdx)
  cmp    $0x4,%edi
  je     L1768
  movzbl 0x4(%rcx),%esi
  movzbl 0x4(%rdx),%r8d
  mov    %r8b,0x4(%rcx)
  mov    %sil,0x4(%rdx)
  cmp    $0x5,%edi
  je     L1768
  movzbl 0x5(%rcx),%esi
  movzbl 0x5(%rdx),%r8d
  mov    %r8b,0x5(%rcx)
  mov    %sil,0x5(%rdx)
  cmp    $0x6,%edi
  je     L1768
  movzbl 0x6(%rcx),%esi
  movzbl 0x6(%rdx),%edi
  mov    %dil,0x6(%rcx)
  mov    %sil,0x6(%rdx)
L1768:
  add    $0x1,%rax
  add    %rax,%r14
  add    %r13,%rax
  jmp    L1275
  nopl   0x0(%rax,%rax,1)
L1524:
  test   %eax,%eax
  mov    0x20(%rsp),%rax
  jne    L124
  sub    %r15,%rax
  lea    0x10(%r14),%rdx
  add    $0x10,%rax
  cmp    %rax,%r14
  setae  %al
  cmp    %rdx,%rbx
  setae  %dl
  or     %dl,%al
  je     L1339
  cmpl   $0x4,0x4(%rsp)
  je     L1339
  cmpl   $0x8,0x30(%rsp)
  jbe    L1
  mov    0x40(%rsp),%rdx
  xor    %eax,%eax
  nopl   0x0(%rax)
L992:
  movdqu (%r14,%rax,1),%xmm0
  movdqu (%rbx,%rax,1),%xmm6
  movups %xmm6,(%r14,%rax,1)
  movups %xmm0,(%rbx,%rax,1)
  add    $0x10,%rax
  cmp    %rdx,%rax
  jne    L992
  mov    0x38(%rsp),%rax
  mov    0x34(%rsp),%ecx
  lea    (%r14,%rax,1),%rdx
  add    %rax,%rbx
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %ecx,0xc(%rsp)
  je     L1134
  mov    %ecx,%eax
L242:
  mov    0xc(%rsp),%esi
  sub    %eax,%esi
  cmp    0x68(%rsp),%eax
  je     L440
  shl    $0x2,%rax
  lea    (%r14,%rax,1),%rdi
  sub    %r15,%rax
  add    0x20(%rsp),%rax
  mov    (%rax),%r9
  mov    (%rdi),%r8
  mov    %r9,(%rdi)
  mov    %esi,%edi
  and    $0xfffffffe,%edi
  mov    %r8,(%rax)
  mov    %edi,%eax
  shl    $0x2,%rax
  add    %rax,%rdx
  add    %rax,%rbx
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
  cmp    %esi,%edi
  je     L1134
L440:
  mov    (%rdx),%eax
  mov    (%rbx),%esi
  mov    %esi,(%rdx)
  mov    %eax,(%rbx)
  mov    0x4(%rsp),%eax
  sub    $0x4,%eax
L1134:
  mov    %eax,%eax
  lea    0x4(%r14,%rax,1),%r11
L1092:
  mov    0x10(%rsp),%rbx
  add    %r12,%r11
  xor    %edx,%edx
  mov    %r11,%rax
  sub    %rbx,%rax
  div    %r15
  sub    %eax,0x1c(%rsp)
  lea    -0x1(%rax),%edx
  mov    0x1c(%rsp),%eax
  cmp    %eax,%edx
  jle    L722
  cmp    $0xa,%eax
  jle    L655
  movslq 0x6c(%rsp),%rax
  mov    %rbx,0xf0(%rsp,%rax,8)
  mov    %edx,0x70(%rsp,%rax,4)
  lea    0x1(%rax),%eax
  mov    %eax,0x6c(%rsp)
  jmp    L644
L218:
  mov    0x8(%rsp),%eax
  mov    %r13,%rcx
  mov    %r14,%rdx
  lea    0x1(%r14,%rax,1),%r8
  nopl   0x0(%rax)
L1893:
  movzbl (%rdx),%esi
  movzbl (%rcx),%edi
  add    $0x1,%rdx
  add    $0x1,%rcx
  mov    %dil,-0x1(%rdx)
  mov    %sil,-0x1(%rcx)
  cmp    %r8,%rdx
  jne    L1893
  jmp    L1768
L1110:
  mov    0x4(%rsp),%eax
  mov    %r13,%rcx
  lea    -0x4(%rax),%edx
  mov    %rdx,%rax
  lea    0x4(%r14,%rdx,1),%r8
  mov    %r14,%rdx
  nopl   (%rax)
L1793:
  mov    (%rcx),%edi
  mov    (%rdx),%esi
  add    $0x4,%rdx
  add    $0x4,%rcx
  mov    %edi,-0x4(%rdx)
  mov    %esi,-0x4(%rcx)
  cmp    %r8,%rdx
  jne    L1793
  jmp    L29
L722:
  cmp    $0xa,%edx
  jle    L934
  mov    %eax,%ebx
  movslq 0x6c(%rsp),%rax
  mov    %edx,0x1c(%rsp)
  mov    %r11,0xf0(%rsp,%rax,8)
  mov    0x10(%rsp),%r11
  mov    %ebx,0x70(%rsp,%rax,4)
  lea    0x1(%rax),%eax
  mov    %eax,0x6c(%rsp)
  jmp    L644
L124:
  sub    %r15,%rax
  lea    0x10(%r14),%rdx
  add    $0x10,%rax
  cmp    %rax,%r14
  setae  %al
  cmp    %rdx,%rbx
  setae  %dl
  or     %dl,%al
  je     L858
  mov    0x8(%rsp),%eax
  cmp    $0x6,%eax
  jbe    L858
  cmp    $0xe,%eax
  jbe    L311
  mov    0x28(%rsp),%rdx
  xor    %eax,%eax
  nopl   0x0(%rax)
L1657:
  movdqu (%r14,%rax,1),%xmm0
  movdqu (%rbx,%rax,1),%xmm7
  movups %xmm7,(%r14,%rax,1)
  movups %xmm0,(%rbx,%rax,1)
  add    $0x10,%rax
  cmp    %rdx,%rax
  jne    L1657
  mov    0x48(%rsp),%rax
  mov    0x8(%rsp),%edi
  lea    (%r14,%rax,1),%rdx
  add    %rax,%rbx
  mov    0x50(%rsp),%eax
  cmp    %eax,0x18(%rsp)
  je     L1302
  cmpl   $0x6,0x5c(%rsp)
  mov    0x58(%rsp),%esi
  mov    0x54(%rsp),%r8d
  jbe    L726
L443:
  lea    (%r14,%rax,1),%rdi
  sub    %r15,%rax
  add    0x20(%rsp),%rax
  mov    (%rdi),%r9
  mov    (%rax),%r10
  mov    %r10,(%rdi)
  mov    %r9,(%rax)
  mov    %esi,%eax
  and    $0xfffffff8,%eax
  mov    %eax,%edi
  sub    %eax,%r8d
  add    %rdi,%rdx
  add    %rdi,%rbx
  mov    0x8(%rsp),%edi
  cmp    %esi,%eax
  je     L1302
L726:
  movzbl (%rdx),%eax
  movzbl (%rbx),%esi
  mov    0x8(%rsp),%edi
  mov    %sil,(%rdx)
  mov    %al,(%rbx)
  cmp    $0x1,%r8d
  je     L1302
  movzbl 0x1(%rdx),%eax
  movzbl 0x1(%rbx),%esi
  mov    %sil,0x1(%rdx)
  mov    %al,0x1(%rbx)
  cmp    $0x2,%r8d
  je     L1302
  movzbl 0x2(%rdx),%eax
  movzbl 0x2(%rbx),%esi
  mov    %sil,0x2(%rdx)
  mov    %al,0x2(%rbx)
  cmp    $0x3,%r8d
  je     L1302
  movzbl 0x3(%rdx),%eax
  movzbl 0x3(%rbx),%esi
  mov    %sil,0x3(%rdx)
  mov    %al,0x3(%rbx)
  cmp    $0x4,%r8d
  je     L1302
  movzbl 0x4(%rdx),%eax
  movzbl 0x4(%rbx),%esi
  mov    %sil,0x4(%rdx)
  mov    %al,0x4(%rbx)
  cmp    $0x5,%r8d
  je     L1302
  movzbl 0x5(%rdx),%eax
  movzbl 0x5(%rbx),%esi
  mov    %sil,0x5(%rdx)
  mov    %al,0x5(%rbx)
  cmp    $0x6,%r8d
  je     L1302
  movzbl 0x6(%rdx),%eax
  movzbl 0x6(%rbx),%esi
  mov    %sil,0x6(%rdx)
  mov    %al,0x6(%rbx)
L1302:
  lea    0x1(%r14,%rdi,1),%r11
  jmp    L1092
L1713:
  sub    %r15,%rax
  lea    0x10(%r13),%rdi
  add    $0x10,%rax
  cmp    %rax,%r13
  setae  %al
  cmp    %rdi,%rsi
  setae  %dil
  or     %dil,%al
  je     L409
  mov    0x8(%rsp),%eax
  cmp    $0x6,%eax
  jbe    L409
  cmp    $0xe,%eax
  jbe    L1850
  mov    0x28(%rsp),%rdx
  xor    %eax,%eax
  nopl   0x0(%rax)
L1759:
  movdqu 0x0(%r13,%rax,1),%xmm0
  movdqu (%rsi,%rax,1),%xmm5
  movups %xmm5,0x0(%r13,%rax,1)
  movups %xmm0,(%rsi,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L1759
  mov    0x48(%rsp),%rax
  mov    0x8(%rsp),%edi
  mov    0x50(%rsp),%ecx
  lea    0x0(%r13,%rax,1),%r8
  add    %rsi,%rax
  cmp    %ecx,0x18(%rsp)
  je     L80
  cmpl   $0x6,0x5c(%rsp)
  mov    0x58(%rsp),%r9d
  jbe    L1327
  mov    0x54(%rsp),%r10d
  mov    %ecx,%edi
L98:
  lea    0x0(%r13,%rdi,1),%rdx
  sub    %r15,%rdi
  lea    (%r14,%rdi,1),%rcx
  mov    (%rdx),%rdi
  mov    (%rcx),%r11
  mov    %r11,(%rdx)
  mov    %r9d,%edx
  and    $0xfffffff8,%edx
  mov    %rdi,(%rcx)
  mov    0x8(%rsp),%edi
  mov    %edx,%ecx
  sub    %edx,%r10d
  add    %rcx,%r8
  add    %rcx,%rax
  cmp    %r9d,%edx
  je     L80
L754:
  movzbl (%r8),%edx
  movzbl (%rax),%ecx
  mov    0x8(%rsp),%edi
  mov    %cl,(%r8)
  mov    %dl,(%rax)
  cmp    $0x1,%r10d
  je     L80
  movzbl 0x1(%r8),%edx
  movzbl 0x1(%rax),%ecx
  mov    %cl,0x1(%r8)
  mov    %dl,0x1(%rax)
  cmp    $0x2,%r10d
  je     L80
  movzbl 0x2(%r8),%edx
  movzbl 0x2(%rax),%ecx
  mov    %cl,0x2(%r8)
  mov    %dl,0x2(%rax)
  cmp    $0x3,%r10d
  je     L80
  movzbl 0x3(%r8),%edx
  movzbl 0x3(%rax),%ecx
  mov    %cl,0x3(%r8)
  mov    %dl,0x3(%rax)
  cmp    $0x4,%r10d
  je     L80
  movzbl 0x4(%r8),%edx
  movzbl 0x4(%rax),%ecx
  mov    %cl,0x4(%r8)
  mov    %dl,0x4(%rax)
  cmp    $0x5,%r10d
  je     L80
  movzbl 0x5(%r8),%edx
  movzbl 0x5(%rax),%ecx
  mov    %cl,0x5(%r8)
  mov    %dl,0x5(%rax)
  cmp    $0x6,%r10d
  je     L80
  movzbl 0x6(%r8),%edx
  movzbl 0x6(%rax),%ecx
  mov    %cl,0x6(%r8)
  mov    %dl,0x6(%rax)
L80:
  lea    0x1(%rsi,%rdi,1),%rax
  mov    %rax,0x20(%rsp)
  jmp    L1536
L1235:
  mov    %ecx,%edi
  mov    0x18(%rsp),%r8d
  mov    %r13,%rdx
  mov    %r14,%rcx
  xor    %eax,%eax
  jmp    L1115
L621:
  mov    %r13,%rdx
  mov    %r14,%rcx
  xor    %eax,%eax
  jmp    L1786
L463:
  mov    0x54(%rsp),%edi
  jmp    L1136
L846:
  test   %rax,%rax
  lea    0x10(%r11),%rsi
  setle  %al
  cmp    %rsi,%r13
  setae  %sil
  or     %sil,%al
  je     L1556
  mov    0x8(%rsp),%eax
  cmp    $0x6,%eax
  jbe    L1556
  cmp    $0xe,%eax
  jbe    L1680
  mov    0x28(%rsp),%rdx
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L24:
  movdqu (%r11,%rax,1),%xmm0
  movdqu 0x0(%r13,%rax,1),%xmm1
  movups %xmm1,(%r11,%rax,1)
  movups %xmm0,0x0(%r13,%rax,1)
  add    $0x10,%rax
  cmp    %rdx,%rax
  jne    L24
  mov    0x48(%rsp),%rax
  mov    0x8(%rsp),%edi
  lea    (%r11,%rax,1),%r8
  lea    0x0(%r13,%rax,1),%rsi
  mov    0x50(%rsp),%eax
  cmp    %eax,0x18(%rsp)
  je     L732
  cmpl   $0x6,0x5c(%rsp)
  mov    0x58(%rsp),%r9d
  jbe    L57
  mov    0x54(%rsp),%edi
L1359:
  lea    (%r11,%rax,1),%r10
  add    %rbx,%rax
  add    %r11,%rax
  movq   (%r10),%xmm0
  movq   (%rax),%xmm1
  movq   %xmm1,(%r10)
  movq   %xmm0,(%rax)
  mov    %r9d,%eax
  and    $0xfffffff8,%eax
  mov    %eax,%r10d
  sub    %eax,%edi
  add    %r10,%r8
  add    %r10,%rsi
  mov    %edi,%r10d
  mov    0x8(%rsp),%edi
  cmp    %eax,%r9d
  je     L732
L881:
  movzbl (%rsi),%edi
  movzbl (%r8),%eax
  mov    %dil,(%r8)
  mov    0x8(%rsp),%edi
  mov    %al,(%rsi)
  cmp    $0x1,%r10d
  je     L732
  movzbl 0x1(%r8),%eax
  movzbl 0x1(%rsi),%r9d
  mov    %r9b,0x1(%r8)
  mov    %al,0x1(%rsi)
  cmp    $0x2,%r10d
  je     L732
  movzbl 0x2(%r8),%eax
  movzbl 0x2(%rsi),%r9d
  mov    %r9b,0x2(%r8)
  mov    %al,0x2(%rsi)
  cmp    $0x3,%r10d
  je     L732
  movzbl 0x3(%r8),%eax
  movzbl 0x3(%rsi),%r9d
  mov    %r9b,0x3(%r8)
  mov    %al,0x3(%rsi)
  cmp    $0x4,%r10d
  je     L732
  movzbl 0x4(%r8),%eax
  movzbl 0x4(%rsi),%r9d
  mov    %r9b,0x4(%r8)
  mov    %al,0x4(%rsi)
  cmp    $0x5,%r10d
  je     L732
  movzbl 0x5(%r8),%eax
  movzbl 0x5(%rsi),%r9d
  mov    %r9b,0x5(%r8)
  mov    %al,0x5(%rsi)
  cmp    $0x6,%r10d
  je     L732
  movzbl 0x6(%r8),%eax
  movzbl 0x6(%rsi),%r9d
  mov    %r9b,0x6(%r8)
  mov    %al,0x6(%rsi)
L732:
  lea    0x1(%rdi),%rax
  lea    (%r11,%rax,1),%rsi
  add    %r13,%rax
  jmp    L1878
L363:
  sub    %r14,%rax
  cmp    $0x1e,%rax
  jbe    L630
  mov    0x8(%rsp),%eax
  cmp    $0x6,%eax
  jbe    L630
  cmp    $0xe,%eax
  jbe    L950
  mov    0x28(%rsp),%rdx
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L849:
  movdqu 0x0(%r13,%rax,1),%xmm0
  movdqu (%r14,%rax,1),%xmm5
  movups %xmm5,0x0(%r13,%rax,1)
  movups %xmm0,(%r14,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L849
  mov    0x48(%rsp),%rax
  mov    0x8(%rsp),%edi
  lea    0x0(%r13,%rax,1),%r8
  lea    (%r14,%rax,1),%rsi
  mov    0x50(%rsp),%eax
  cmp    %eax,0x18(%rsp)
  je     L478
  cmpl   $0x6,0x5c(%rsp)
  mov    0x58(%rsp),%r9d
  jbe    L1178
  mov    0x54(%rsp),%edi
L1179:
  lea    0x0(%r13,%rax,1),%r10
  add    %r14,%rax
  mov    (%rax),%rbx
  mov    (%r10),%r11
  mov    %rbx,(%r10)
  mov    %r9d,%r10d
  and    $0xfffffff8,%r10d
  mov    %r11,(%rax)
  mov    %r10d,%eax
  add    %rax,%r8
  add    %rax,%rsi
  mov    %edi,%eax
  mov    0x8(%rsp),%edi
  sub    %r10d,%eax
  cmp    %r10d,%r9d
  je     L478
L1725:
  movzbl (%r8),%edi
  movzbl (%rsi),%r9d
  mov    %r9b,(%r8)
  mov    %dil,(%rsi)
  mov    0x8(%rsp),%edi
  cmp    $0x1,%eax
  je     L478
  movzbl 0x1(%r8),%r9d
  movzbl 0x1(%rsi),%r10d
  mov    %r10b,0x1(%r8)
  mov    %r9b,0x1(%rsi)
  cmp    $0x2,%eax
  je     L478
  movzbl 0x2(%r8),%r9d
  movzbl 0x2(%rsi),%r10d
  mov    %r10b,0x2(%r8)
  mov    %r9b,0x2(%rsi)
  cmp    $0x3,%eax
  je     L478
  movzbl 0x3(%r8),%r9d
  movzbl 0x3(%rsi),%r10d
  mov    %r10b,0x3(%r8)
  mov    %r9b,0x3(%rsi)
  cmp    $0x4,%eax
  je     L478
  movzbl 0x4(%r8),%r9d
  movzbl 0x4(%rsi),%r10d
  mov    %r10b,0x4(%r8)
  mov    %r9b,0x4(%rsi)
  cmp    $0x5,%eax
  je     L478
  movzbl 0x5(%r8),%r9d
  movzbl 0x5(%rsi),%r10d
  mov    %r10b,0x5(%r8)
  mov    %r9b,0x5(%rsi)
  cmp    $0x6,%eax
  je     L478
  movzbl 0x6(%r8),%eax
  movzbl 0x6(%rsi),%r9d
  mov    %r9b,0x6(%r8)
  mov    %al,0x6(%rsi)
L478:
  lea    0x1(%rdi),%rax
  lea    0x0(%r13,%rax,1),%rdx
  add    %r14,%rax
  jmp    L247
L655:
  cmp    $0xa,%edx
  jle    L747
  mov    %edx,0x1c(%rsp)
  mov    %rbx,%r11
  jmp    L644
L934:
  cmpl   $0xa,0x1c(%rsp)
  jg     L644
L747:
  mov    0x6c(%rsp),%eax
  test   %eax,%eax
  je     L284
  sub    $0x1,%eax
  mov    %eax,%edx
  cltq
  mov    0xf0(%rsp,%rax,8),%r11
  mov    0x70(%rsp,%rax,4),%eax
  mov    %eax,0x1c(%rsp)
  jmp    L1022
L1602:
  add    0x20(%rsp),%rbx
  lea    0x10(%rdx),%rdi
  lea    0x10(%r11,%rbx,1),%rax
  lea    (%r11,%rbx,1),%rsi
  cmp    %rax,%rdx
  setae  %al
  cmp    %rdi,%rsi
  setae  %dil
  or     %dil,%al
  je     L432
  mov    0x8(%rsp),%eax
  cmp    $0x6,%eax
  jbe    L432
  cmp    $0xe,%eax
  jbe    L416
  mov    0x28(%rsp),%rcx
  xor    %eax,%eax
L299:
  movdqu (%rdx,%rax,1),%xmm0
  movdqu (%rsi,%rax,1),%xmm7
  movups %xmm7,(%rdx,%rax,1)
  movups %xmm0,(%rsi,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rcx
  jne    L299
  mov    0x48(%rsp),%rax
  mov    0x10(%rsp),%rsi
  mov    0x8(%rsp),%edi
  mov    0x50(%rsp),%ecx
  add    %rax,%rsi
  add    %r14,%rax
  cmp    %ecx,0x18(%rsp)
  je     L687
  cmpl   $0x6,0x5c(%rsp)
  mov    0x58(%rsp),%r8d
  jbe    L1830
  mov    0x54(%rsp),%r10d
  mov    %ecx,%edi
L211:
  mov    0x10(%rsp),%rcx
  add    %rdi,%rbx
  lea    (%rcx,%rdi,1),%r9
  lea    (%r11,%rbx,1),%rdi
  mov    (%rdi),%rbx
  mov    (%r9),%r11
  mov    %rbx,(%r9)
  mov    %r11,(%rdi)
  mov    %r8d,%r11d
  and    $0xfffffff8,%r11d
  mov    %r11d,%edi
  sub    %r11d,%r10d
  add    %rdi,%rsi
  add    %rdi,%rax
  mov    %r10d,%r9d
  mov    0x8(%rsp),%edi
  cmp    %r11d,%r8d
  je     L687
L246:
  movzbl (%rsi),%edi
  movzbl (%rax),%r8d
  mov    %r8b,(%rsi)
  mov    %dil,(%rax)
  mov    0x8(%rsp),%edi
  cmp    $0x1,%r9d
  je     L687
  movzbl 0x1(%rsi),%r8d
  movzbl 0x1(%rax),%r10d
  mov    %r10b,0x1(%rsi)
  mov    %r8b,0x1(%rax)
  cmp    $0x2,%r9d
  je     L687
  movzbl 0x2(%rsi),%r8d
  movzbl 0x2(%rax),%r10d
  mov    %r10b,0x2(%rsi)
  mov    %r8b,0x2(%rax)
  cmp    $0x3,%r9d
  je     L687
  movzbl 0x3(%rsi),%r8d
  movzbl 0x3(%rax),%r10d
  mov    %r10b,0x3(%rsi)
  mov    %r8b,0x3(%rax)
  cmp    $0x4,%r9d
  je     L687
  movzbl 0x4(%rsi),%r8d
  movzbl 0x4(%rax),%r10d
  mov    %r10b,0x4(%rsi)
  mov    %r8b,0x4(%rax)
  cmp    $0x5,%r9d
  je     L687
  movzbl 0x5(%rsi),%r8d
  movzbl 0x5(%rax),%r10d
  mov    %r10b,0x5(%rsi)
  mov    %r8b,0x5(%rax)
  cmp    $0x6,%r9d
  je     L687
  movzbl 0x6(%rsi),%r8d
  movzbl 0x6(%rax),%r9d
  mov    %r9b,0x6(%rsi)
  mov    %r8b,0x6(%rax)
L687:
  mov    0x10(%rsp),%rsi
  lea    0x1(%rdi),%rax
  add    %rax,%rsi
  add    %r14,%rax
  jmp    L627
L858:
  mov    0x8(%rsp),%edi
  mov    %r14,%rax
  lea    0x1(%rbx,%rdi,1),%r8
  nopl   0x0(%rax)
L987:
  movzbl (%rax),%edx
  movzbl (%rbx),%ecx
  add    $0x1,%rbx
  add    $0x1,%rax
  mov    %cl,-0x1(%rax)
  mov    %dl,-0x1(%rbx)
  cmp    %rbx,%r8
  jne    L987
  jmp    L1302
L1339:
  mov    0x4(%rsp),%eax
  lea    -0x4(%rax),%edx
  mov    %rdx,%rax
  lea    0x4(%r14,%rdx,1),%r8
  mov    %r14,%rdx
L1621:
  mov    (%rbx),%esi
  mov    (%rdx),%ecx
  add    $0x4,%rdx
  add    $0x4,%rbx
  mov    %esi,-0x4(%rdx)
  mov    %ecx,-0x4(%rbx)
  cmp    %r8,%rdx
  jne    L1621
  jmp    L1134
L409:
  mov    0x8(%rsp),%edi
  mov    %rsi,%rax
  lea    0x1(%r13,%rdi,1),%r9
  nopl   0x0(%rax,%rax,1)
L526:
  movzbl 0x0(%r13),%edx
  movzbl (%rax),%ecx
  add    $0x1,%r13
  add    $0x1,%rax
  mov    %cl,-0x1(%r13)
  mov    %dl,-0x1(%rax)
  cmp    %r9,%r13
  jne    L526
  jmp    L80
L1154:
  mov    0x4(%rsp),%eax
  lea    -0x4(%rax),%ecx
  mov    %rcx,%rax
  lea    0x4(%r13,%rcx,1),%r9
  mov    %rsi,%rcx
  nopl   0x0(%rax,%rax,1)
L1164:
  mov    (%rcx),%edi
  mov    0x0(%r13),%edx
  add    $0x4,%r13
  add    $0x4,%rcx
  mov    %edi,-0x4(%r13)
  mov    %edx,-0x4(%rcx)
  cmp    %r9,%r13
  jne    L1164
  jmp    L10
L1556:
  mov    0x8(%rsp),%edi
  mov    %r13,%rsi
  mov    %r11,%rax
  lea    0x1(%r11,%rdi,1),%r10
L48:
  movzbl (%rax),%edx
  movzbl (%rsi),%ecx
  add    $0x1,%rax
  add    $0x1,%rsi
  mov    %cl,-0x1(%rax)
  mov    %dl,-0x1(%rsi)
  cmp    %rax,%r10
  jne    L48
  jmp    L732
L630:
  mov    0x8(%rsp),%edi
  mov    %r14,%rsi
  mov    %r13,%rax
  lea    0x1(%r13,%rdi,1),%r10
L1050:
  movzbl (%rax),%edx
  movzbl (%rsi),%ecx
  add    $0x1,%rax
  add    $0x1,%rsi
  mov    %cl,-0x1(%rax)
  mov    %dl,-0x1(%rsi)
  cmp    %r10,%rax
  jne    L1050
  jmp    L478
L1365:
  mov    0x4(%rsp),%eax
  mov    %r14,%rdi
  lea    -0x4(%rax),%esi
  mov    %rsi,%rax
  lea    0x4(%r13,%rsi,1),%r10
  mov    %r13,%rsi
L1890:
  mov    (%rdi),%ecx
  mov    (%rsi),%edx
  add    $0x4,%rsi
  add    $0x4,%rdi
  mov    %ecx,-0x4(%rsi)
  mov    %edx,-0x4(%rdi)
  cmp    %r10,%rsi
  jne    L1890
  jmp    L1088
L474:
  mov    0x4(%rsp),%eax
  mov    %r13,%rdi
  lea    -0x4(%rax),%esi
  mov    %rsi,%rax
  lea    0x4(%r11,%rsi,1),%r10
  mov    %r11,%rsi
L974:
  mov    (%rdi),%ecx
  mov    (%rsi),%edx
  add    $0x4,%rsi
  add    $0x4,%rdi
  mov    %ecx,-0x4(%rsi)
  mov    %edx,-0x4(%rdi)
  cmp    %r10,%rsi
  jne    L974
  jmp    L1217
L1:
  mov    %r14,%rdx
  xor    %eax,%eax
  jmp    L242
L1829:
  mov    %rsi,%rdi
  mov    %r13,%r8
  xor    %eax,%eax
  jmp    L333
L311:
  mov    0x18(%rsp),%esi
  mov    %ecx,%r8d
  mov    %r14,%rdx
  xor    %eax,%eax
  jmp    L443
L1327:
  mov    0x54(%rsp),%r10d
  jmp    L754
L1850:
  mov    0x18(%rsp),%r9d
  mov    %ecx,%r10d
  mov    %rsi,%rax
  mov    %r13,%r8
  xor    %edi,%edi
  jmp    L98
L432:
  mov    0x8(%rsp),%edi
  mov    0x10(%rsp),%rax
  mov    %r14,%rsi
  lea    0x1(%rax,%rdi,1),%r10
L1677:
  movzbl (%rax),%edx
  movzbl (%rsi),%ecx
  add    $0x1,%rax
  add    $0x1,%rsi
  mov    %cl,-0x1(%rax)
  mov    %dl,-0x1(%rsi)
  cmp    %r10,%rax
  jne    L1677
  jmp    L687
L778:
  mov    0x4(%rsp),%eax
  mov    0x10(%rsp),%rcx
  mov    %r14,%rdi
  lea    -0x4(%rax),%esi
  mov    %rsi,%rax
  lea    0x4(%rcx,%rsi,1),%r10
  mov    %rcx,%rsi
L1698:
  mov    (%rdi),%ecx
  mov    (%rsi),%edx
  add    $0x4,%rsi
  add    $0x4,%rdi
  mov    %ecx,-0x4(%rsi)
  mov    %edx,-0x4(%rdi)
  cmp    %r10,%rsi
  jne    L1698
  jmp    L1781
L699:
  mov    %r13,%rsi
  mov    %r11,%rdi
  xor    %eax,%eax
  jmp    L1310
L1680:
  mov    0x18(%rsp),%r9d
  mov    %ecx,%edi
  mov    %r13,%rsi
  mov    %r11,%r8
  xor    %eax,%eax
  jmp    L1359
L57:
  mov    0x54(%rsp),%r10d
  jmp    L881
L950:
  mov    0x18(%rsp),%r9d
  mov    %ecx,%edi
  mov    %r14,%rsi
  mov    %r13,%r8
  xor    %eax,%eax
  jmp    L1179
L1178:
  mov    0x54(%rsp),%eax
  jmp    L1725
L1182:
  mov    %r14,%rsi
  mov    %r13,%rdi
  xor    %eax,%eax
  jmp    L1071
L1112:
  mov    %rdx,%rdi
  mov    %r14,%rsi
  xor    %eax,%eax
  jmp    L1459
L416:
  mov    0x18(%rsp),%r8d
  mov    %ecx,%r10d
  mov    %rdx,%rsi
  mov    %r14,%rax
  xor    %edi,%edi
  jmp    L211
L1830:
  mov    0x54(%rsp),%r9d
  jmp    L246
L284:
  mov    0x1f8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L717
  add    $0x208,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L717:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void partition_sort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) {
  int stackpointer = 1;
  void *basestack[32];
  int sizestack[32];
  basestack[0] = base;
  sizestack[0] = nmemb;
  while (stackpointer != 0) {
    char *b = (char *)basestack[--stackpointer];
    int n = sizestack[stackpointer];
    for (;;) {
      int halfn = (n >> 1) * size;
      char *bmid = b + halfn;
      char *btop;
      if ((n & 1) == 0)
        halfn -= size;
      btop = bmid + halfn;
      if ((*compar)(b, bmid) > 0) {
        int xsize = size;
        if (((xsize | (int)b) & 0x3) == 0) {
          do {
            int temp = *(int *)b;
            *(int *)b = *(int *)bmid;
            *(int *)bmid = temp;
            b += 4;
            bmid += 4;
            xsize -= 4;
            ;
          } while (xsize != 0);
        } else {
          do {
            char temp = *b;
            *b++ = *bmid;
            *bmid++ = temp;
            xsize--;
          } while (xsize != 0);
        }
        b -= size;
        bmid -= size;
      };
      if ((*compar)(bmid, btop) > 0) {
        if ((*compar)(b, btop) > 0) {
          int xsize = size;
          if (((xsize | (int)b) & 0x3) == 0) {
            do {
              int temp = *(int *)b;
              *(int *)b = *(int *)btop;
              *(int *)btop = temp;
              b += 4;
              btop += 4;
              xsize -= 4;
              ;
            } while (xsize != 0);
          } else {
            do {
              char temp = *b;
              *b++ = *btop;
              *btop++ = temp;
              xsize--;
            } while (xsize != 0);
          }
          b -= size;
          btop -= size;
        };
        {
          int xsize = size;
          if (((xsize | (int)bmid) & 0x3) == 0) {
            do {
              int temp = *(int *)bmid;
              *(int *)bmid = *(int *)btop;
              *(int *)btop = temp;
              bmid += 4;
              btop += 4;
              xsize -= 4;
              ;
            } while (xsize != 0);
          } else {
            do {
              char temp = *bmid;
              *bmid++ = *btop;
              *btop++ = temp;
              xsize--;
            } while (xsize != 0);
          }
          bmid -= size;
          btop -= size;
        };
      }
      {
        char *l;
        char *r = btop - size;
        char *pivot;
        int s1, s2;
        {
          int xsize = size;
          if (((xsize | (int)bmid) & 0x3) == 0) {
            do {
              int temp = *(int *)bmid;
              *(int *)bmid = *(int *)r;
              *(int *)r = temp;
              bmid += 4;
              r += 4;
              xsize -= 4;
              ;
            } while (xsize != 0);
          } else {
            do {
              char temp = *bmid;
              *bmid++ = *r;
              *r++ = temp;
              xsize--;
            } while (xsize != 0);
          }
          bmid -= size;
          r -= size;
        };
        l = b;
        pivot = r;
        for (;;) {
          do
            l += size;
          while ((*compar)(l, pivot) < 0);
          do
            r -= size;
          while ((*compar)(r, pivot) > 0);
          if (r <= l)
            break;
          {
            int xsize = size;
            if (((xsize | (int)l) & 0x3) == 0) {
              do {
                int temp = *(int *)l;
                *(int *)l = *(int *)r;
                *(int *)r = temp;
                l += 4;
                r += 4;
                xsize -= 4;
                ;
              } while (xsize != 0);
            } else {
              do {
                char temp = *l;
                *l++ = *r;
                *r++ = temp;
                xsize--;
              } while (xsize != 0);
            }
            l -= size;
            r -= size;
          };
        }
        {
          int xsize = size;
          if (((xsize | (int)l) & 0x3) == 0) {
            do {
              int temp = *(int *)l;
              *(int *)l = *(int *)pivot;
              *(int *)pivot = temp;
              l += 4;
              pivot += 4;
              xsize -= 4;
              ;
            } while (xsize != 0);
          } else {
            do {
              char temp = *l;
              *l++ = *pivot;
              *pivot++ = temp;
              xsize--;
            } while (xsize != 0);
          }
          l -= size;
          pivot -= size;
        };
        s1 = ((l - b) / size) - 1;
        s2 = n - s1 - 1;
        if (s1 > s2) {
          if (s2 > 10) {
            (basestack[stackpointer] = (void *)(b), sizestack[stackpointer++] = (s1));
            b = l;
            n = s2;
          } else if (s1 > 10)
            n = s1;
          else
            break;
        } else {
          if (s1 > 10) {
            (basestack[stackpointer] = (void *)(l), sizestack[stackpointer++] = (s2));
            n = s1;
          } else if (s2 > 10) {
            b = l;
            n = s2;
          } else
            break;
        }
      }
    }
  }
}
```