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

```asm
<mc64rd_>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x150,%rsp
  mov    %rdi,-0x128(%rbp)
  mov    %rsi,-0x130(%rbp)
  mov    %rdx,-0x138(%rbp)
  mov    %rcx,-0x140(%rbp)
  mov    %r8,-0x148(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  subq   $0x4,-0x138(%rbp)
  subq   $0x8,-0x148(%rbp)
  subq   $0x4,-0x140(%rbp)
  mov    -0x128(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x100(%rbp)
  movl   $0x1,-0x118(%rbp)
  jmp    L121
L32:
  mov    -0x118(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x138(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    -0x118(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x138(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0xfc(%rbp)
  cmpl   $0x1,-0xfc(%rbp)
  jle    L171
  mov    -0x118(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x138(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0xf8(%rbp)
  cmpl   $0xe,-0xfc(%rbp)
  jle    L24
  mov    -0xf8(%rbp),%eax
  mov    %eax,-0xd0(%rbp)
  mov    -0xf8(%rbp),%edx
  mov    -0xfc(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0xcc(%rbp)
  movl   $0x2,-0x108(%rbp)
L285:
  mov    -0x108(%rbp),%eax
  sub    $0x2,%eax
  cltq
  mov    -0xd0(%rbp,%rax,4),%eax
  mov    %eax,-0xf4(%rbp)
  mov    -0x108(%rbp),%eax
  sub    $0x1,%eax
  cltq
  mov    -0xd0(%rbp,%rax,4),%eax
  mov    %eax,-0xf0(%rbp)
  mov    -0xf4(%rbp),%edx
  mov    -0xf0(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x148(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0xe0(%rbp)
  mov    -0xf0(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0xec(%rbp)
  mov    -0xf4(%rbp),%eax
  mov    %eax,-0x114(%rbp)
  jmp    L193
L184:
  mov    -0x114(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x148(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0xd8(%rbp)
  movsd  -0xd8(%rbp),%xmm0
  ucomisd -0xe0(%rbp),%xmm0
  jp     L105
  movsd  -0xd8(%rbp),%xmm0
  ucomisd -0xe0(%rbp),%xmm0
  je     L38
L105:
  movsd  -0xd8(%rbp),%xmm0
  comisd -0xe0(%rbp),%xmm0
  ja     L36
  movsd  -0xd8(%rbp),%xmm0
  movsd  %xmm0,-0xe0(%rbp)
  jmp    L25
L38:
  nop
  addl   $0x1,-0x114(%rbp)
L193:
  mov    -0x114(%rbp),%eax
  cmp    -0xec(%rbp),%eax
  jle    L184
  subl   $0x2,-0x108(%rbp)
  jmp    L69
L36:
  nop
L25:
  mov    -0xf4(%rbp),%eax
  mov    %eax,-0x104(%rbp)
  mov    -0xf0(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0xec(%rbp)
  mov    -0xf4(%rbp),%eax
  mov    %eax,-0x114(%rbp)
  jmp    L57
L183:
  mov    -0x114(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x148(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  -0xe0(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jae    L188
  mov    -0x104(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x148(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0xd8(%rbp)
  mov    -0x114(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x148(%rbp),%rax
  add    %rax,%rdx
  mov    -0x104(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x148(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x114(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x148(%rbp),%rax
  add    %rdx,%rax
  movsd  -0xd8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x104(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x140(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0xe8(%rbp)
  mov    -0x114(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x140(%rbp),%rax
  add    %rdx,%rax
  mov    -0x104(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x140(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x114(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x140(%rbp),%rax
  add    %rax,%rdx
  mov    -0xe8(%rbp),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x104(%rbp)
  jmp    L170
L188:
  nop
L170:
  addl   $0x1,-0x114(%rbp)
L57:
  mov    -0x114(%rbp),%eax
  cmp    -0xec(%rbp),%eax
  jle    L183
  mov    -0x104(%rbp),%eax
  sub    -0xf4(%rbp),%eax
  mov    %eax,%edx
  mov    -0xf0(%rbp),%eax
  sub    -0x104(%rbp),%eax
  cmp    %eax,%edx
  jl     L153
  mov    -0x108(%rbp),%eax
  add    $0x1,%eax
  cltq
  mov    -0xf0(%rbp),%edx
  mov    %edx,-0xd0(%rbp,%rax,4)
  mov    -0x108(%rbp),%eax
  cltq
  mov    -0x104(%rbp),%edx
  mov    %edx,-0xd0(%rbp,%rax,4)
  mov    -0x108(%rbp),%eax
  sub    $0x1,%eax
  cltq
  mov    -0x104(%rbp),%edx
  mov    %edx,-0xd0(%rbp,%rax,4)
  jmp    L6
L153:
  mov    -0x108(%rbp),%eax
  add    $0x1,%eax
  cltq
  mov    -0x104(%rbp),%edx
  mov    %edx,-0xd0(%rbp,%rax,4)
  mov    -0x108(%rbp),%eax
  cltq
  mov    -0xf4(%rbp),%edx
  mov    %edx,-0xd0(%rbp,%rax,4)
  mov    -0x108(%rbp),%eax
  sub    $0x1,%eax
  cltq
  mov    -0xf0(%rbp),%edx
  mov    %edx,-0xd0(%rbp,%rax,4)
  mov    -0x108(%rbp),%eax
  sub    $0x2,%eax
  cltq
  mov    -0x104(%rbp),%edx
  mov    %edx,-0xd0(%rbp,%rax,4)
L6:
  addl   $0x2,-0x108(%rbp)
L69:
  cmpl   $0x0,-0x108(%rbp)
  je     L51
  mov    -0x108(%rbp),%eax
  sub    $0x1,%eax
  cltq
  mov    -0xd0(%rbp,%rax,4),%edx
  mov    -0x108(%rbp),%eax
  sub    $0x2,%eax
  cltq
  mov    -0xd0(%rbp,%rax,4),%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  cmp    $0xe,%eax
  jle    L271
  jmp    L285
L271:
  subl   $0x2,-0x108(%rbp)
  jmp    L69
L24:
  nop
  jmp    L306
L51:
  nop
L306:
  mov    -0xf8(%rbp),%edx
  mov    -0xfc(%rbp),%eax
  add    %edx,%eax
  sub    $0x1,%eax
  mov    %eax,-0xec(%rbp)
  mov    -0xf8(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x110(%rbp)
  jmp    L303
L3:
  mov    -0x110(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x148(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x110(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x148(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  comisd %xmm1,%xmm0
  jbe    L85
  mov    -0x110(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x148(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0xd8(%rbp)
  mov    -0x110(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x140(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0xe8(%rbp)
  mov    -0x110(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x148(%rbp),%rax
  add    %rax,%rdx
  mov    -0x110(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x148(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x110(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x140(%rbp),%rax
  add    %rdx,%rax
  mov    -0x110(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x140(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0xf8(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0xe4(%rbp)
  mov    -0x110(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x10c(%rbp)
  jmp    L104
L292:
  mov    -0x10c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x148(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  -0xd8(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jbe    L168
  mov    -0x10c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x148(%rbp),%rax
  add    %rax,%rdx
  mov    -0x10c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x148(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x10c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x140(%rbp),%rax
  add    %rdx,%rax
  mov    -0x10c(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x140(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  jmp    L15
L168:
  mov    -0x10c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x148(%rbp),%rax
  add    %rdx,%rax
  movsd  -0xd8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x10c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x140(%rbp),%rax
  add    %rax,%rdx
  mov    -0xe8(%rbp),%eax
  mov    %eax,(%rdx)
  jmp    L85
L15:
  subl   $0x1,-0x10c(%rbp)
L104:
  mov    -0x10c(%rbp),%eax
  cmp    -0xe4(%rbp),%eax
  jge    L292
  mov    -0xf8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x148(%rbp),%rax
  add    %rdx,%rax
  movsd  -0xd8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xf8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x140(%rbp),%rax
  add    %rax,%rdx
  mov    -0xe8(%rbp),%eax
  mov    %eax,(%rdx)
L85:
  addl   $0x1,-0x110(%rbp)
L303:
  mov    -0x110(%rbp),%eax
  cmp    -0xec(%rbp),%eax
  jle    L3
  jmp    L155
L171:
  nop
L155:
  addl   $0x1,-0x118(%rbp)
L121:
  mov    -0x118(%rbp),%eax
  cmp    -0x100(%rbp),%eax
  jle    L32
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L304
  call   <__stack_chk_fail@plt>
L304:
  leave
  ret
```

assistant: ```c
int mc64rd_(int *n, int *ne, int *ip, int *irn, double *a) {
  int i__1, i__2, i__3;
  int j, k, r__, s;
  double ha;
  int hi, td, mid, len, ipj;
  double key;
  int last, todo[50], first;
  --ip;
  --a;
  --irn;
  i__1 = *n;
  for (j = 1; j <= i__1; ++j) {
    len = ip[j + 1] - ip[j];
    if (len <= 1) {
      goto L100;
    }
    ipj = ip[j];
    if (len < 15) {
      goto L400;
    }
    todo[0] = ipj;
    todo[1] = ipj + len;
    td = 2;
  L500:
    first = todo[td - 2];
    last = todo[td - 1];
    key = a[(first + last) / 2];
    i__2 = last - 1;
    for (k = first; k <= i__2; ++k) {
      ha = a[k];
      if (ha == key) {
        goto L475;
      }
      if (ha > key) {
        goto L470;
      }
      key = ha;
      goto L470;
    L475:;
    }
    td += -2;
    goto L425;
  L470:
    mid = first;
    i__2 = last - 1;
    for (k = first; k <= i__2; ++k) {
      if (a[k] <= key) {
        goto L450;
      }
      ha = a[mid];
      a[mid] = a[k];
      a[k] = ha;
      hi = irn[mid];
      irn[mid] = irn[k];
      irn[k] = hi;
      ++mid;
    L450:;
    }
    if (mid - first >= last - mid) {
      todo[td + 1] = last;
      todo[td] = mid;
      todo[td - 1] = mid;
    } else {
      todo[td + 1] = mid;
      todo[td] = first;
      todo[td - 1] = last;
      todo[td - 2] = mid;
    }
    td += 2;
  L425:
    if (td == 0) {
      goto L400;
    }
    if (todo[td - 1] - todo[td - 2] >= 15) {
      goto L500;
    }
    td += -2;
    goto L425;
  L400:
    i__2 = ipj + len - 1;
    for (r__ = ipj + 1; r__ <= i__2; ++r__) {
      if (a[r__ - 1] < a[r__]) {
        ha = a[r__];
        hi = irn[r__];
        a[r__] = a[r__ - 1];
        irn[r__] = irn[r__ - 1];
        i__3 = ipj + 1;
        for (s = r__ - 1; s >= i__3; --s) {
          if (a[s - 1] < ha) {
            a[s] = a[s - 1];
            irn[s] = irn[s - 1];
          } else {
            a[s] = ha;
            irn[s] = hi;
            goto L200;
          }
        }
        a[ipj] = ha;
        irn[ipj] = hi;
      }
    L200:;
    }
  L100:;
  }
  return 0;
}
```