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

```asm
<copyLoop>:
  endbr64
  push   %r15
  mov    $0x7e,%ecx
  pxor   %xmm0,%xmm0
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  mov    %edi,%ebp
  push   %rbx
  sub    $0x848,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x838(%rsp)
  mov    D36(%rip),%rax
  lea    0x40(%rsp),%rdi
  movaps %xmm0,0x30(%rsp)
  movl   $0x0,0x24(%rsp)
  movl   $0x0,0x28(%rsp)
  movaps %xmm0,0x430(%rsp)
  mov    (%rax),%eax
  mov    %eax,0x1c(%rsp)
  xor    %eax,%eax
  rep stos %rax,%es:(%rdi)
  lea    0x440(%rsp),%rdi
  mov    $0x7e,%ecx
  rep stos %rax,%es:(%rdi)
  test   %rsi,%rsi
  je     L85
  mov    %edx,%r13d
  test   %edx,%edx
  jne    L47
L85:
  mov    0x838(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L5
  mov    0x1c(%rsp),%eax
  add    $0x848,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  xchg   %ax,%ax
L47:
  lea    0x24(%rsp),%rax
  mov    %rsi,%rdx
  lea    0x1(%rbp),%r15d
  mov    %rsi,%r12
  mov    %rax,%rdi
  mov    %r13d,%esi
  mov    %rax,0x8(%rsp)
  lea    0x2c(%rsp),%rbx
  call   <RC4_set_key@plt>
  lea    0x28(%rsp),%rax
  mov    %r13d,%esi
  mov    %r12,%rdx
  mov    %rax,%rdi
  mov    %rax,0x10(%rsp)
  lea    0x30(%rsp),%r13
  lea    0x430(%rsp),%r14
  call   <RC4_set_key@plt>
  nopl   0x0(%rax)
L69:
  mov    %rbx,%rdi
  movl   $0x0,0x2c(%rsp)
  call   <FD_ZERO@plt>
  mov    D23(%rip),%rax
  mov    %rbx,%rsi
  mov    (%rax),%edi
  call   <FD_SET@plt>
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <FD_SET@plt>
  xor    %r8d,%r8d
  xor    %ecx,%ecx
  xor    %edx,%edx
  mov    %rbx,%rsi
  mov    %r15d,%edi
  call   <select@plt>
  test   %rax,%rax
  jle    L69
  mov    D23(%rip),%rax
  mov    %rbx,%rsi
  mov    (%rax),%edi
  call   <FD_ISSET@plt>
  test   %rax,%rax
  je     L73
  mov    D23(%rip),%rax
  mov    %ebp,%r12d
  mov    (%rax),%r8d
L109:
  cmp    $0xffffffff,%r8d
  mov    %r8d,(%rsp)
  je     L69
  cmp    $0xffffffff,%r12d
  je     L69
  mov    $0x400,%esi
  mov    %r13,%rdi
  call   <bzero@plt>
  mov    $0x400,%esi
  mov    %r14,%rdi
  call   <bzero@plt>
  mov    (%rsp),%edi
  mov    $0x400,%edx
  mov    %r13,%rsi
  call   <read@plt>
  test   %rax,%rax
  je     L85
  cmp    %ebp,%r12d
  mov    0x10(%rsp),%rdi
  mov    %r14,%rcx
  mov    %r13,%rdx
  cmove  0x8(%rsp),%rdi
  mov    %rax,%rsi
  mov    %rax,(%rsp)
  call   <RC4@plt>
  mov    (%rsp),%rdx
  mov    %r12d,%edi
  mov    %r14,%rsi
  call   <write@plt>
  mov    %r12d,%edi
  call   <fsync@plt>
  jmp    L69
  nopl   0x0(%rax,%rax,1)
L73:
  mov    %rbx,%rsi
  mov    %ebp,%edi
  call   <FD_ISSET@plt>
  test   %rax,%rax
  je     L69
  mov    D42(%rip),%rax
  mov    %ebp,%r8d
  mov    (%rax),%r12d
  jmp    L109
L5:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int copyLoop(int s, char *pKey, int nKeyLen) {
  int nRetVal = EXIT_FAILURE;
  RC4_KEY sEKey = {0};
  RC4_KEY sDKey = {0};
  char pPlain[(1024)] = {0};
  char pCipher[(1024)] = {0};
  if (pKey && nKeyLen) {
    RC4_set_key(&sEKey, nKeyLen, pKey);
    RC4_set_key(&sDKey, nKeyLen, pKey);
    while (true) {
      fd_set set = {0};
      int from = -1, to = -1;
      FD_ZERO(&set);
      FD_SET(STDIN_FILENO, &set);
      FD_SET(s, &set);
      if (0 < select(s + 1, &set, NULL, NULL, NULL)) {
        if (FD_ISSET(STDIN_FILENO, &set)) {
          from = STDIN_FILENO;
          to = s;
        } else if (FD_ISSET(s, &set)) {
          from = s;
          to = STDOUT_FILENO;
        }
      }
      if (-1 != from && -1 != to) {
        ssize_t len = 0;
        bzero(pPlain, (1024));
        bzero(pCipher, (1024));
        len = read(from, pPlain, (1024));
        if (len) {
          RC4((to == s) ? &sEKey : &sDKey, len, pPlain, pCipher);
          write(to, pCipher, len);
          fsync(to);
        } else {
          break;
        }
      }
    }
  }
  return nRetVal;
}
```