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

```asm
<mergeKLists>:
  endbr64
  test   %esi,%esi
  je     L247
  cmp    $0x1,%esi
  je     L448
  push   %r15
  mov    %esi,%eax
  push   %r14
  sar    %eax
  push   %r13
  movslq %eax,%rdx
  push   %r12
  lea    (%rdi,%rdx,8),%r12
  push   %rbp
  mov    %esi,%ebp
  push   %rbx
  sub    %eax,%ebp
  sub    $0x28,%rsp
  test   %eax,%eax
  je     L233
  cmp    $0x1,%eax
  je     L262
  mov    %esi,%edx
  sar    $0x2,%edx
  sub    %edx,%eax
  mov    %eax,%r15d
  movslq %edx,%rax
  lea    (%rdi,%rax,8),%r13
  test   %edx,%edx
  je     L256
  cmp    $0x1,%edx
  je     L177
  mov    %esi,%r14d
  sar    $0x3,%r14d
  movslq %r14d,%rax
  sub    %r14d,%edx
  lea    (%rdi,%rax,8),%r8
  test   %r14d,%r14d
  je     L185
  cmp    $0x1,%r14d
  je     L269
  mov    %esi,%ebx
  mov    %r8,0x18(%rsp)
  sar    $0x4,%ebx
  mov    %edx,0x10(%rsp)
  mov    %ebx,%esi
  mov    %rdi,0x8(%rsp)
  call   <mergeKLists>
  mov    0x8(%rsp),%rdi
  mov    %r14d,%ecx
  movslq %ebx,%rsi
  sub    %ebx,%ecx
  mov    %rax,(%rsp)
  lea    (%rdi,%rsi,8),%rdi
  mov    %ecx,%esi
  call   <mergeKLists>
  mov    (%rsp),%rdi
  mov    %rax,%rsi
  call   <merge2@plt>
  mov    0x18(%rsp),%r8
  mov    0x10(%rsp),%edx
  mov    %rax,%r14
L443:
  xor    %esi,%esi
  test   %edx,%edx
  je     L94
  cmp    $0x1,%edx
  je     L102
L280:
  mov    %edx,%ebx
  mov    %r8,%rdi
  mov    %edx,0x10(%rsp)
  sar    %ebx
  mov    %r8,0x8(%rsp)
  mov    %ebx,%esi
  call   <mergeKLists>
  mov    0x10(%rsp),%edx
  mov    0x8(%rsp),%r8
  mov    %rax,(%rsp)
  sub    %ebx,%edx
  movslq %ebx,%rbx
  mov    %edx,%esi
  lea    (%r8,%rbx,8),%rdi
  call   <mergeKLists>
  mov    (%rsp),%rdi
  mov    %rax,%rsi
  call   <merge2@plt>
  mov    %rax,%rsi
L94:
  mov    %r14,%rdi
  call   <merge2@plt>
  mov    %rax,%r14
L390:
  xor    %esi,%esi
  test   %r15d,%r15d
  je     L441
  cmp    $0x1,%r15d
  je     L379
L402:
  mov    %r15d,%ebx
  mov    %r15d,%edx
  sar    %ebx
  movslq %ebx,%rax
  sub    %ebx,%edx
  lea    0x0(%r13,%rax,8),%rcx
  test   %ebx,%ebx
  je     L373
  cmp    $0x1,%ebx
  je     L173
  sar    $0x2,%r15d
  mov    %r13,%rdi
  mov    %rcx,0x10(%rsp)
  mov    %r15d,%esi
  sub    %r15d,%ebx
  movslq %r15d,%r15
  mov    %edx,0x8(%rsp)
  call   <mergeKLists>
  lea    0x0(%r13,%r15,8),%rdi
  mov    %ebx,%esi
  mov    %rax,(%rsp)
  call   <mergeKLists>
  mov    (%rsp),%rdi
  mov    %rax,%rsi
  call   <merge2@plt>
  mov    0x8(%rsp),%edx
  xor    %esi,%esi
  mov    0x10(%rsp),%rcx
  mov    %rax,%r13
  test   %edx,%edx
  je     L297
L223:
  cmp    $0x1,%edx
  je     L382
L252:
  mov    %edx,%ebx
  mov    %rcx,%rdi
  mov    %edx,0x8(%rsp)
  sar    %ebx
  mov    %rcx,(%rsp)
  mov    %ebx,%esi
  call   <mergeKLists>
  mov    0x8(%rsp),%edx
  mov    (%rsp),%rcx
  mov    %rax,%r15
  sub    %ebx,%edx
  movslq %ebx,%rbx
  mov    %edx,%esi
  lea    (%rcx,%rbx,8),%rdi
  call   <mergeKLists>
  mov    %r15,%rdi
  mov    %rax,%rsi
  call   <merge2@plt>
  mov    %rax,%rsi
L297:
  mov    %r13,%rdi
  call   <merge2@plt>
  mov    %rax,%rsi
L441:
  mov    %r14,%rdi
  call   <merge2@plt>
  xor    %esi,%esi
  mov    %rax,%r13
  test   %ebp,%ebp
  je     L33
  cmp    $0x1,%ebp
  je     L119
L138:
  mov    %ebp,%esi
  mov    %ebp,%r15d
  sar    %esi
  movslq %esi,%rax
  sub    %esi,%r15d
  lea    (%r12,%rax,8),%rbx
  test   %esi,%esi
  je     L198
  cmp    $0x1,%esi
  je     L385
  mov    %ebp,%edx
  sar    $0x2,%edx
  sub    %edx,%esi
  movslq %edx,%rax
  mov    %esi,%r14d
  lea    (%r12,%rax,8),%rcx
  test   %edx,%edx
  je     L8
  cmp    $0x1,%edx
  je     L153
  sar    $0x3,%ebp
  mov    %r12,%rdi
  mov    %rcx,0x10(%rsp)
  mov    %ebp,%esi
  mov    %edx,0x8(%rsp)
  call   <mergeKLists>
  mov    0x8(%rsp),%edx
  mov    %rax,(%rsp)
  sub    %ebp,%edx
  movslq %ebp,%rbp
  mov    %edx,%esi
  lea    (%r12,%rbp,8),%rdi
  call   <mergeKLists>
  mov    (%rsp),%rdi
  mov    %rax,%rsi
  call   <merge2@plt>
  mov    0x10(%rsp),%rcx
  mov    %rax,%r12
L415:
  xor    %esi,%esi
  test   %r14d,%r14d
  je     L83
  cmp    $0x1,%r14d
  je     L492
L251:
  mov    %r14d,%ebp
  mov    %rcx,%rdi
  mov    %rcx,0x8(%rsp)
  sar    %ebp
  mov    %ebp,%esi
  call   <mergeKLists>
  mov    0x8(%rsp),%rcx
  mov    %r14d,%esi
  sub    %ebp,%esi
  movslq %ebp,%rbp
  mov    %rax,(%rsp)
  lea    (%rcx,%rbp,8),%rdi
  call   <mergeKLists>
  mov    (%rsp),%rdi
  mov    %rax,%rsi
  call   <merge2@plt>
  mov    %rax,%rsi
L83:
  mov    %r12,%rdi
  call   <merge2@plt>
  xor    %esi,%esi
  mov    %rax,%r12
  test   %r15d,%r15d
  je     L87
L9:
  cmp    $0x1,%r15d
  je     L171
  mov    %r15d,%ebp
  mov    %r15d,%r14d
  sar    %ebp
  movslq %ebp,%rax
  sub    %ebp,%r14d
  lea    (%rbx,%rax,8),%rdx
  test   %ebp,%ebp
  je     L493
  cmp    $0x1,%ebp
  je     L317
  sar    $0x2,%r15d
  mov    %rbx,%rdi
  mov    %rdx,0x8(%rsp)
  mov    %r15d,%esi
  call   <mergeKLists>
  mov    %ebp,%esi
  sub    %r15d,%esi
  movslq %r15d,%r15
  mov    %rax,(%rsp)
  lea    (%rbx,%r15,8),%rdi
  call   <mergeKLists>
  mov    (%rsp),%rdi
  mov    %rax,%rsi
  call   <merge2@plt>
  xor    %esi,%esi
  test   %r14d,%r14d
  mov    0x8(%rsp),%rdx
  mov    %rax,%rbp
  je     L236
L478:
  cmp    $0x1,%r14d
  je     L388
L342:
  mov    %r14d,%ebx
  mov    %rdx,%rdi
  mov    %rdx,(%rsp)
  sar    %ebx
  mov    %ebx,%esi
  call   <mergeKLists>
  mov    (%rsp),%rdx
  mov    %r14d,%esi
  sub    %ebx,%esi
  movslq %ebx,%rbx
  mov    %rax,%r15
  lea    (%rdx,%rbx,8),%rdi
  call   <mergeKLists>
  mov    %r15,%rdi
  mov    %rax,%rsi
  call   <merge2@plt>
  mov    %rax,%rsi
L236:
  mov    %rbp,%rdi
  call   <merge2@plt>
  mov    %rax,%rsi
L87:
  mov    %r12,%rdi
  call   <merge2@plt>
  mov    %rax,%rsi
L33:
  add    $0x28,%rsp
  mov    %r13,%rdi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1050 <merge2@plt>
  nopl   0x0(%rax,%rax,1)
L448:
  mov    (%rdi),%rax
  ret
  nopl   0x0(%rax)
L233:
  xor    %r13d,%r13d
  jmp    L138
  nopl   0x0(%rax,%rax,1)
L177:
  mov    (%rdi),%r14
  jmp    L390
  nopl   0x0(%rax,%rax,1)
L247:
  xor    %eax,%eax
  ret
  nopl   0x0(%rax,%rax,1)
L262:
  mov    (%rdi),%r13
  cmp    $0x1,%ebp
  jne    L138
L119:
  mov    (%r12),%rsi
  jmp    L33
  nopw   0x0(%rax,%rax,1)
L171:
  mov    (%rbx),%rsi
  jmp    L87
  nopl   (%rax)
L379:
  mov    0x0(%r13),%rsi
  jmp    L441
  nopl   0x0(%rax)
L385:
  mov    (%r12),%r12
  jmp    L9
  nopl   0x0(%rax)
L256:
  xor    %r14d,%r14d
  jmp    L402
L269:
  mov    (%rdi),%r14
  jmp    L443
  nopl   0x0(%rax,%rax,1)
L388:
  mov    (%rdx),%rsi
  jmp    L236
  nopl   0x0(%rax,%rax,1)
L317:
  mov    (%rbx),%rbp
  jmp    L478
  nopl   0x0(%rax,%rax,1)
L492:
  mov    (%rcx),%rsi
  jmp    L83
  nopl   0x0(%rax,%rax,1)
L153:
  mov    (%r12),%r12
  jmp    L415
  nopl   0x0(%rax)
L382:
  mov    (%rcx),%rsi
  jmp    L297
  nopl   0x0(%rax,%rax,1)
L173:
  mov    0x0(%r13),%r13
  jmp    L223
  nopl   0x0(%rax)
L102:
  mov    (%r8),%rsi
  jmp    L94
  nopl   0x0(%rax,%rax,1)
L373:
  xor    %r13d,%r13d
  jmp    L252
  nopl   0x0(%rax,%rax,1)
L8:
  xor    %r12d,%r12d
  jmp    L251
  nopl   0x0(%rax,%rax,1)
L185:
  xor    %r14d,%r14d
  jmp    L280
  nopl   0x0(%rax,%rax,1)
L198:
  mov    %r15d,%eax
  mov    %r15d,%r14d
  xor    %r12d,%r12d
  xor    %ebp,%ebp
  sar    %eax
  sub    %eax,%r14d
  cltq
  lea    (%rbx,%rax,8),%rdx
  jmp    L342
L493:
  xor    %ebp,%ebp
  jmp    L342
```

assistant: ```c
struct ListNode *mergeKLists(struct ListNode **lists, int listsSize) {
  if (!listsSize)
    return (((struct ListNode *)0));
  if (listsSize == 1)
    return (lists[0]);
  int m;
  struct ListNode *h1, *h2;
  m = listsSize >> 1;
  h1 = mergeKLists(lists, m);
  h2 = mergeKLists(lists + m, listsSize - m);
  return (merge2(h1, h2));
}
```