user: 请从给定的汇编指令推导出C源代码：

```asm
<RandomFunc>:
  endbr64
  sub    $0x18,%rsp
  mov    %rsi,%r8
  mov    0x8(%rdi),%rsi
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  mov    (%rdi),%rax
  xor    $0x29be1cdb,%rax
  mov    %rax,(%rsp)
  test   %rsi,%rsi
  je     L63
  mov    %rax,%rcx
  xor    %edx,%edx
  shr    $0x20,%rax
  shr    $0x10,%rcx
  jmp    L70
  nopw   0x0(%rax,%rax,1)
L33:
  mov    %ecx,%edi
  mov    %eax,%ecx
  mov    %edi,%eax
L70:
  add    $0x2,%rdx
  cmp    %rsi,%rdx
  jb     L33
  lea    -0x1(%rsi),%rdx
  mov    %ax,0x2(%rsp)
  mov    %cx,0x4(%rsp)
  cmp    $0xf,%rdx
  jbe    L25
  shr    $0x4,%rdx
  lea    0x2(%rsp),%rax
  mov    %rdx,%rdi
  shl    $0x7,%rdi
  add    %rax,%rdi
  nopw   0x0(%rax,%rax,1)
L118:
  movdqu (%rax),%xmm7
  movdqu 0x10(%rax),%xmm6
  sub    $0xffffffffffffff80,%rax
  movdqu -0x60(%rax),%xmm5
  movdqu -0x50(%rax),%xmm4
  pextrw $0x1,%xmm7,%ecx
  movdqu -0x40(%rax),%xmm3
  movdqu -0x30(%rax),%xmm2
  movdqu -0x20(%rax),%xmm1
  movdqu -0x10(%rax),%xmm0
  mov    %cx,-0x80(%rax)
  pextrw $0x1,%xmm6,%ecx
  mov    %cx,-0x70(%rax)
  pextrw $0x1,%xmm5,%ecx
  mov    %cx,-0x60(%rax)
  pextrw $0x1,%xmm4,%ecx
  mov    %cx,-0x50(%rax)
  pextrw $0x1,%xmm3,%ecx
  mov    %cx,-0x40(%rax)
  pextrw $0x1,%xmm2,%ecx
  mov    %cx,-0x30(%rax)
  pextrw $0x1,%xmm1,%ecx
  mov    %cx,-0x20(%rax)
  pextrw $0x1,%xmm0,%ecx
  mov    %cx,-0x10(%rax)
  pextrw $0x2,%xmm7,%ecx
  mov    %cx,-0x7e(%rax)
  pextrw $0x2,%xmm6,%ecx
  mov    %cx,-0x6e(%rax)
  pextrw $0x2,%xmm5,%ecx
  mov    %cx,-0x5e(%rax)
  pextrw $0x2,%xmm4,%ecx
  mov    %cx,-0x4e(%rax)
  pextrw $0x2,%xmm3,%ecx
  mov    %cx,-0x3e(%rax)
  pextrw $0x2,%xmm2,%ecx
  mov    %cx,-0x2e(%rax)
  pextrw $0x2,%xmm1,%ecx
  mov    %cx,-0x1e(%rax)
  pextrw $0x2,%xmm0,%ecx
  mov    %cx,-0xe(%rax)
  pextrw $0x0,%xmm7,%ecx
  mov    %cx,-0x7c(%rax)
  pextrw $0x0,%xmm6,%ecx
  mov    %cx,-0x6c(%rax)
  pextrw $0x0,%xmm5,%ecx
  mov    %cx,-0x5c(%rax)
  pextrw $0x0,%xmm4,%ecx
  mov    %cx,-0x4c(%rax)
  pextrw $0x0,%xmm3,%ecx
  mov    %cx,-0x3c(%rax)
  pextrw $0x0,%xmm2,%ecx
  mov    %cx,-0x2c(%rax)
  pextrw $0x0,%xmm1,%ecx
  mov    %cx,-0x1c(%rax)
  pextrw $0x0,%xmm0,%ecx
  mov    %cx,-0xc(%rax)
  cmp    %rdi,%rax
  jne    L118
  shl    $0x4,%rdx
L28:
  lea    0x0(,%rdx,8),%rcx
  mov    %rsp,%rdi
  lea    (%rdi,%rcx,1),%rax
  movzwl 0x4(%rax),%r9d
  movzwl 0x2(%rax),%r10d
  mov    %r9w,0x2(%rax)
  movzwl 0x6(%rax),%r9d
  mov    %r10w,0x6(%rax)
  mov    %r9w,0x4(%rax)
  lea    0x2(%rdx),%rax
  cmp    %rsi,%rax
  jae    L129
  lea    0x10(%rdi,%rcx,1),%rax
  movzwl 0x4(%rax),%r9d
  movzwl 0x2(%rax),%r10d
  mov    %r9w,0x2(%rax)
  movzwl 0x6(%rax),%r9d
  mov    %r10w,0x6(%rax)
  mov    %r9w,0x4(%rax)
  lea    0x4(%rdx),%rax
  cmp    %rsi,%rax
  jae    L129
  lea    0x20(%rdi,%rcx,1),%rax
  movzwl 0x4(%rax),%r9d
  movzwl 0x2(%rax),%r10d
  mov    %r9w,0x2(%rax)
  movzwl 0x6(%rax),%r9d
  mov    %r10w,0x6(%rax)
  mov    %r9w,0x4(%rax)
  lea    0x6(%rdx),%rax
  cmp    %rax,%rsi
  jbe    L129
  lea    0x30(%rdi,%rcx,1),%rax
  movzwl 0x4(%rax),%r9d
  movzwl 0x2(%rax),%r10d
  mov    %r9w,0x2(%rax)
  movzwl 0x6(%rax),%r9d
  mov    %r10w,0x6(%rax)
  mov    %r9w,0x4(%rax)
  lea    0x8(%rdx),%rax
  cmp    %rax,%rsi
  jbe    L129
  lea    0x40(%rdi,%rcx,1),%rax
  movzwl 0x4(%rax),%r9d
  movzwl 0x2(%rax),%r10d
  mov    %r9w,0x2(%rax)
  movzwl 0x6(%rax),%r9d
  mov    %r10w,0x6(%rax)
  mov    %r9w,0x4(%rax)
  lea    0xa(%rdx),%rax
  cmp    %rax,%rsi
  jbe    L129
  lea    0x50(%rdi,%rcx,1),%rax
  add    $0xc,%rdx
  movzwl 0x4(%rax),%r9d
  movzwl 0x2(%rax),%r10d
  mov    %r9w,0x2(%rax)
  movzwl 0x6(%rax),%r9d
  mov    %r10w,0x6(%rax)
  mov    %r9w,0x4(%rax)
  cmp    %rdx,%rsi
  jbe    L129
  lea    0x60(%rdi,%rcx,1),%rax
  movzwl 0x4(%rax),%edx
  movzwl 0x2(%rax),%ecx
  mov    %dx,0x2(%rax)
  movzwl 0x6(%rax),%edx
  mov    %cx,0x6(%rax)
  mov    %dx,0x4(%rax)
L129:
  mov    (%rsp),%rax
L63:
  shl    $0x7,%rax
  mov    %rax,(%r8)
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L122
  add    $0x18,%rsp
  ret
L25:
  xor    %edx,%edx
  jmp    L28
L122:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void RandomFunc(unsigned long input[1], unsigned long output[1]) {
  unsigned long state[1];
  unsigned long local1;
  unsigned short copy11;
  unsigned short copy12;
  {
    state[0UL] = input[0UL] ^ 700325083UL;
    local1 = 0UL;
    while (local1 < input[1UL]) {
      copy11 = *((unsigned short *)(&state[0UL]) + 1);
      *((unsigned short *)(&state[0UL]) + 1) = *((unsigned short *)(&state[0UL]) + 2);
      *((unsigned short *)(&state[0UL]) + 2) = copy11;
      local1 += 2UL;
    }
    local1 = 0UL;
    while (local1 < input[1UL]) {
      copy12 = *((unsigned short *)(&state[local1]) + 2);
      *((unsigned short *)(&state[local1]) + 2) = *((unsigned short *)(&state[local1]) + 1);
      *((unsigned short *)(&state[local1]) + 1) = copy12;
      copy12 = *((unsigned short *)(&state[local1]) + 3);
      *((unsigned short *)(&state[local1]) + 3) = *((unsigned short *)(&state[local1]) + 2);
      *((unsigned short *)(&state[local1]) + 2) = copy12;
      local1 += 2UL;
    }
    output[0UL] = state[0UL] << 7UL;
  }
}
```