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

```asm
<_glp_qmdupd>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x68,%rsp
  mov    0xa0(%rsp),%rax
  mov    %rsi,0x8(%rsp)
  mov    %rdx,0x10(%rsp)
  mov    0xa8(%rsp),%rbx
  mov    %rax,0x38(%rsp)
  mov    0xb0(%rsp),%rax
  mov    %r9,0x18(%rsp)
  mov    0xb8(%rsp),%r14
  mov    %rax,0x30(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x58(%rsp)
  mov    (%rdx),%eax
  test   %eax,%eax
  jle    L89
  mov    %rdi,%r12
  lea    0x4(%rsi),%rdi
  mov    %rcx,%r13
  xor    %ecx,%ecx
  movl   $0x0,0x48(%rsp)
  mov    %r8,%rbp
  xor    %r11d,%r11d
  xor    %r8d,%r8d
  movl   $0x0,0x4c(%rsp)
  mov    $0x1,%r9d
  mov    %rdi,0x28(%rsp)
  mov    %r13,0x20(%rsp)
  mov    %ecx,%r13d
  nopl   0x0(%rax,%rax,1)
L185:
  mov    0x20(%rsp),%rdi
  movslq (%rdi,%r9,4),%rdx
  mov    0x18(%rsp),%rdi
  mov    (%r12,%rdx,4),%ecx
  add    (%rdi,%rdx,4),%r11d
  mov    %rdx,%r15
  mov    0x4(%r12,%rdx,4),%edx
  mov    %r11d,%r10d
  cmp    %ecx,%edx
  jle    L137
  sub    %ecx,%edx
  movslq %ecx,%rsi
  mov    0x8(%rsp),%rax
  mov    0x28(%rsp),%rdi
  sub    $0x1,%edx
  add    %rsi,%rdx
  lea    (%rax,%rsi,4),%rax
  lea    (%rdi,%rdx,4),%rdi
  nopw   0x0(%rax,%rax,1)
L7:
  movslq (%rax),%rdx
  lea    (%rbx,%rdx,4),%rsi
  mov    %rdx,%rcx
  cmpl   $0x0,(%rsi)
  jne    L73
  mov    0x0(%rbp,%rdx,4),%edx
  test   %edx,%edx
  jns    L73
  add    $0x1,%r8d
  movl   $0xffffffff,(%rsi)
  mov    $0x1,%r13d
  movslq %r8d,%rdx
  mov    %ecx,(%r14,%rdx,4)
L73:
  add    $0x4,%rax
  cmp    %rax,%rdi
  jne    L7
  mov    0x10(%rsp),%rax
  mov    (%rax),%eax
L137:
  add    $0x1,%r9
  cmp    %r9d,%eax
  jge    L185
  mov    %r13d,%edi
  mov    %r10d,0x48(%rsp)
  mov    0x20(%rsp),%r13
  mov    %r15d,0x50(%rsp)
  test   %dil,%dil
  je     L57
  mov    %r8d,0x4c(%rsp)
  test   %r8d,%r8d
  je     L57
  movslq %r8d,%r8
  sub    $0x8,%rsp
  mov    %rbx,%r9
  mov    %rbp,%rdx
  lea    0x4(%r14,%r8,4),%rax
  mov    %r12,%rdi
  push   %rax
  push   0x40(%rsp)
  push   %r14
  lea    0x6c(%rsp),%rax
  push   %rax
  lea    0x70(%rsp),%rax
  push   %rax
  mov    0x68(%rsp),%r8
  mov    0x48(%rsp),%rcx
  mov    0x38(%rsp),%rsi
  call   <_glp_qmdmrg@plt>
  mov    0x40(%rsp),%rax
  add    $0x30,%rsp
  mov    (%rax),%eax
L57:
  test   %eax,%eax
  jle    L89
  mov    %r14,%r10
  mov    $0x1,%r15d
  lea    0x54(%rsp),%r9
  mov    %r12,%r14
  mov    %rbp,%r12
  mov    0x18(%rsp),%rbp
  jmp    L177
  xchg   %ax,%ax
L13:
  add    $0x1,%r15
  cmp    %r15d,%eax
  jl     L89
L177:
  movslq 0x0(%r13,%r15,4),%rdx
  mov    %edx,0x50(%rsp)
  lea    (%rbx,%rdx,4),%rdx
  cmpl   $0x1,(%rdx)
  ja     L13
  lea    0x50(%rsp),%rdi
  sub    $0x8,%rsp
  mov    %r12,%rcx
  mov    %rbx,%r8
  movl   $0x2,(%rdx)
  mov    %r14,%rsi
  push   %r10
  lea    0x5c(%rsp),%rax
  mov    %r10,0x30(%rsp)
  push   %rax
  push   0x48(%rsp)
  mov    0x28(%rsp),%rdx
  mov    %r9,0x38(%rsp)
  call   <_glp_qmdrch@plt>
  mov    0x74(%rsp),%ecx
  mov    0x68(%rsp),%edx
  add    $0x20,%rsp
  mov    0x18(%rsp),%r9
  mov    0x20(%rsp),%r10
  test   %ecx,%ecx
  jg     L64
L21:
  movslq 0x50(%rsp),%rax
  sub    $0x1,%edx
  mov    %edx,(%r12,%rax,4)
  mov    0x4c(%rsp),%edx
  test   %edx,%edx
  jg     L96
L51:
  mov    0x10(%rsp),%rax
  add    $0x1,%r15
  mov    (%rax),%eax
  cmp    %r15d,%eax
  jge    L177
  nopl   0x0(%rax)
L89:
  mov    0x58(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L54
  add    $0x68,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L96:
  sub    $0x1,%edx
  lea    0x4(%r10),%rax
  lea    0x8(%r10,%rdx,4),%rcx
  nopl   0x0(%rax,%rax,1)
L99:
  movslq (%rax),%rdx
  add    $0x4,%rax
  movl   $0x0,(%rbx,%rdx,4)
  cmp    %rax,%rcx
  jne    L99
  jmp    L51
L64:
  mov    0x30(%rsp),%rdi
  sub    $0x1,%ecx
  lea    0x4(%rdi),%rax
  lea    0x8(%rdi,%rcx,4),%rdi
  cs nopw 0x0(%rax,%rax,1)
L47:
  movslq (%rax),%rcx
  add    $0x4,%rax
  add    0x0(%rbp,%rcx,4),%edx
  movl   $0x0,(%rbx,%rcx,4)
  cmp    %rax,%rdi
  jne    L47
  jmp    L21
L54:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void _glp_qmdupd(int xadj[], int adjncy[], int *_nlist, int list[], int deg[], int qsize[], int qlink[], int marker[], int rchset[], int nbrhd[]) {
  int deg0, deg1, il, inhd, inode, irch, j, jstop, jstrt, mark, nabor, nhdsze, node, rchsze;
  if ((*_nlist) <= 0)
    return;
  deg0 = 0;
  nhdsze = 0;
  for (il = 1; il <= (*_nlist); il++) {
    node = list[il];
    deg0 += qsize[node];
    jstrt = xadj[node];
    jstop = xadj[node + 1] - 1;
    for (j = jstrt; j <= jstop; j++) {
      nabor = adjncy[j];
      if (marker[nabor] == 0 && deg[nabor] < 0) {
        marker[nabor] = -1;
        nhdsze++;
        nbrhd[nhdsze] = nabor;
      }
    }
  }
  if (nhdsze > 0)
    _glp_qmdmrg(xadj, adjncy, deg, qsize, qlink, marker, &deg0, &nhdsze, nbrhd, rchset, &nbrhd[nhdsze + 1]);
  for (il = 1; il <= (*_nlist); il++) {
    node = list[il];
    mark = marker[node];
    if (mark == 0 || mark == 1) {
      marker[node] = 2;
      _glp_qmdrch(&node, xadj, adjncy, deg, marker, &rchsze, rchset, &nhdsze, nbrhd);
      deg1 = deg0;
      if (rchsze > 0) {
        for (irch = 1; irch <= rchsze; irch++) {
          inode = rchset[irch];
          deg1 += qsize[inode];
          marker[inode] = 0;
        }
      }
      deg[node] = deg1 - 1;
      if (nhdsze > 0) {
        for (inhd = 1; inhd <= nhdsze; inhd++) {
          inode = nbrhd[inhd];
          marker[inode] = 0;
        }
      }
    }
  }
  return;
}
```