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

```asm
<RunEncryptionKeySchedule>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x48(%rbp),%rax
  mov    %rax,-0x30(%rbp)
  mov    -0x50(%rbp),%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0x28(%rbp),%rax
  lea    0x8(%rax),%rdx
  mov    -0x30(%rbp),%rax
  mov    0x8(%rax),%rax
  mov    %rax,(%rdx)
  mov    -0x28(%rbp),%rax
  lea    0x10(%rax),%rdx
  mov    -0x30(%rbp),%rax
  mov    0x10(%rax),%rax
  mov    %rax,(%rdx)
  mov    -0x28(%rbp),%rax
  lea    0x18(%rax),%rdx
  mov    -0x30(%rbp),%rax
  mov    0x18(%rax),%rax
  mov    %rax,(%rdx)
  mov    -0x28(%rbp),%rax
  lea    0x20(%rax),%rdx
  mov    -0x30(%rbp),%rax
  mov    0x20(%rax),%rax
  mov    %rax,(%rdx)
  mov    -0x28(%rbp),%rax
  lea    0x28(%rax),%rdx
  mov    -0x30(%rbp),%rax
  mov    0x28(%rax),%rax
  mov    %rax,(%rdx)
  mov    -0x30(%rbp),%rax
  mov    0x30(%rax),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x30(%rbp),%rax
  mov    0x38(%rax),%rax
  mov    %rax,-0x18(%rbp)
  movl   $0x1,-0x34(%rbp)
  jmp    L29
L27:
  mov    -0x34(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x20(%rbp),%rax
  mov    %rax,(%rdx)
  mov    -0x18(%rbp),%rsi
  mov    -0x34(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x34(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  lea    (%rsi,%rcx,1),%rdx
  mov    %rdx,(%rax)
  mov    -0x34(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x34(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x18(%rbp)
  lea    -0x20(%rbp),%rax
  add    $0x8,%rax
  lea    -0x20(%rbp),%rdx
  mov    %rax,%rsi
  mov    %rdx,%rdi
  call   <speckey@plt>
  mov    -0x34(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x20(%rbp),%rax
  mov    %rax,(%rdx)
  mov    -0x34(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  add    $0x3,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x18(%rbp),%rax
  mov    %rax,(%rdx)
  mov    -0x20(%rbp),%rsi
  mov    -0x34(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rcx
  mov    -0x34(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  add    $0x4,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  lea    (%rsi,%rcx,1),%rdx
  mov    %rdx,(%rax)
  mov    -0x18(%rbp),%rsi
  mov    -0x34(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  add    $0x3,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rcx
  mov    -0x34(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  add    $0x5,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  lea    (%rsi,%rcx,1),%rdx
  mov    %rdx,(%rax)
  mov    -0x34(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  add    $0x4,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x34(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  add    $0x5,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x18(%rbp)
  addl   $0x1,-0x34(%rbp)
L29:
  cmpl   $0xf,-0x34(%rbp)
  jle    L27
  mov    -0x28(%rbp),%rax
  lea    0x300(%rax),%rdx
  mov    -0x20(%rbp),%rax
  mov    %rax,(%rdx)
  mov    -0x18(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    $0x308,%rax
  add    $0x10,%rdx
  mov    %rdx,(%rax)
  mov    -0x28(%rbp),%rax
  mov    0x2d0(%rax),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x28(%rbp),%rax
  mov    0x2d8(%rax),%rax
  mov    %rax,-0x18(%rbp)
  lea    -0x20(%rbp),%rax
  add    $0x8,%rax
  lea    -0x20(%rbp),%rdx
  mov    %rax,%rsi
  mov    %rdx,%rdi
  call   <speckey@plt>
  mov    -0x28(%rbp),%rax
  lea    0x310(%rax),%rdx
  mov    -0x20(%rbp),%rax
  mov    %rax,(%rdx)
  mov    -0x28(%rbp),%rax
  lea    0x318(%rax),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rax,(%rdx)
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L11
  call   <__stack_chk_fail@plt>
L11:
  leave
  ret
```

assistant: ```c
void RunEncryptionKeySchedule(uint8_t *key, uint8_t *roundKeys) {
  uint8_t i;
  uint16_t temp[2];
  uint16_t *Key = (uint16_t *)key;
  uint16_t *RoundKeys = (uint16_t *)roundKeys;
  RoundKeys[0] = Key[0];
  RoundKeys[1] = Key[1];
  RoundKeys[2] = Key[2];
  RoundKeys[3] = Key[3];
  RoundKeys[4] = Key[4];
  RoundKeys[5] = Key[5];
  temp[0] = Key[6];
  temp[1] = Key[7];
  for (i = 1; i < 2 * 8; i++) {
    RoundKeys[6 * i + 0] = temp[0];
    RoundKeys[6 * i + 1] = temp[1] + i;
    temp[0] = RoundKeys[6 * (i - 1) + 0];
    temp[1] = RoundKeys[6 * (i - 1) + 1];
    speckey(temp, temp + 1);
    RoundKeys[6 * i + 2] = temp[0];
    RoundKeys[6 * i + 3] = temp[1];
    RoundKeys[6 * i + 4] = temp[0] + RoundKeys[6 * (i - 1) + 2];
    RoundKeys[6 * i + 5] = temp[1] + RoundKeys[6 * (i - 1) + 3];
    temp[0] = RoundKeys[6 * (i - 1) + 4];
    temp[1] = RoundKeys[6 * (i - 1) + 5];
  }
  RoundKeys[6 * 2 * 8 + 0] = temp[0];
  RoundKeys[6 * 2 * 8 + 1] = temp[1] + 2 * 8;
  temp[0] = RoundKeys[6 * (2 * 8 - 1) + 0];
  temp[1] = RoundKeys[6 * (2 * 8 - 1) + 1];
  speckey(temp, temp + 1);
  RoundKeys[6 * 2 * 8 + 2] = temp[0];
  RoundKeys[6 * 2 * 8 + 3] = temp[1];
}
```