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

```asm
<data_pkg>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %rdi,-0x68(%rbp)
  mov    %rsi,-0x70(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x4c(%rbp),%rdx
  lea    -0x58(%rbp),%rcx
  mov    -0x68(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sha256_loc@plt>
  mov    -0x68(%rbp),%rcx
  lea    -0x40(%rbp),%rax
  mov    $0x20,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  mov    -0x68(%rbp),%rax
  lea    0x34(%rax),%rcx
  lea    -0x40(%rbp),%rax
  add    $0x20,%rax
  mov    $0xc,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  mov    -0x70(%rbp),%rax
  add    $0xc,%rax
  mov    %rax,-0x60(%rbp)
  lea    -0x40(%rbp),%rax
  add    $0x20,%rax
  mov    -0x60(%rbp),%rcx
  mov    $0xc,%edx
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <memcpy@plt>
  mov    -0x60(%rbp),%rax
  add    $0xc,%rax
  lea    -0x58(%rbp),%rdx
  lea    0x4(%rdx),%rcx
  mov    $0x4,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  mov    -0x60(%rbp),%rax
  lea    0x10(%rax),%rcx
  lea    -0x58(%rbp),%rax
  mov    $0x4,%edx
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <memcpy@plt>
  mov    -0x60(%rbp),%rax
  add    $0x14,%rax
  lea    -0x4c(%rbp),%rdx
  lea    0x8(%rdx),%rcx
  mov    $0x4,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  mov    -0x60(%rbp),%rax
  add    $0x18,%rax
  lea    -0x4c(%rbp),%rdx
  lea    0x4(%rdx),%rcx
  mov    $0x4,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  mov    -0x60(%rbp),%rax
  lea    0x1c(%rax),%rcx
  lea    -0x4c(%rbp),%rax
  mov    $0x4,%edx
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <memcpy@plt>
  mov    -0x60(%rbp),%rax
  lea    0x20(%rax),%rcx
  lea    -0x40(%rbp),%rax
  mov    $0x20,%edx
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <memcpy@plt>
  mov    -0x60(%rbp),%rax
  add    $0x40,%rax
  lea    -0x58(%rbp),%rdx
  lea    0x8(%rdx),%rcx
  mov    $0x4,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  mov    -0x70(%rbp),%rax
  movb   $0x11,(%rax)
  mov    -0x70(%rbp),%rax
  add    $0x1,%rax
  movb   $0x11,(%rax)
  mov    -0x70(%rbp),%rax
  add    $0x2,%rax
  movb   $0x11,(%rax)
  mov    -0x70(%rbp),%rax
  add    $0x3,%rax
  movb   $0x11,(%rax)
  mov    -0x70(%rbp),%rax
  add    $0x4,%rax
  movb   $0x1,(%rax)
  mov    -0x70(%rbp),%rax
  add    $0x5,%rax
  movb   $0x0,(%rax)
  mov    -0x70(%rbp),%rax
  add    $0x6,%rax
  movb   $0x0,(%rax)
  mov    -0x70(%rbp),%rax
  add    $0x7,%rax
  movb   $0x0,(%rax)
  mov    -0x70(%rbp),%rax
  add    $0x8,%rax
  movb   $0x0,(%rax)
  mov    -0x70(%rbp),%rax
  add    $0x9,%rax
  movb   $0x0,(%rax)
  mov    -0x70(%rbp),%rax
  add    $0xa,%rax
  movb   $0x0,(%rax)
  mov    -0x70(%rbp),%rax
  add    $0xb,%rax
  movb   $0x0,(%rax)
  mov    -0x70(%rbp),%rax
  add    $0x50,%rax
  movb   $0x0,(%rax)
  mov    -0x70(%rbp),%rax
  add    $0x51,%rax
  movb   $0x0,(%rax)
  mov    -0x70(%rbp),%rax
  add    $0x52,%rax
  movb   $0x0,(%rax)
  mov    -0x70(%rbp),%rax
  add    $0x53,%rax
  movb   $0x0,(%rax)
  mov    -0x70(%rbp),%rax
  add    $0x54,%rax
  movb   $0xaa,(%rax)
  mov    -0x70(%rbp),%rax
  add    $0x55,%rax
  movb   $0xaa,(%rax)
  mov    -0x70(%rbp),%rax
  add    $0x56,%rax
  movb   $0xaa,(%rax)
  mov    -0x70(%rbp),%rax
  add    $0x57,%rax
  movb   $0xaa,(%rax)
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L5
  call   <__stack_chk_fail@plt>
L5:
  leave
  ret
```

assistant: ```c
void data_pkg(const uint8_t *data, uint8_t *out) {
  uint8_t work[44];
  uint8_t *t;
  unsigned int per_a[3];
  unsigned int per_b[3];
  sha256_loc(data, per_a, per_b);
  memcpy(work, data, 32);
  memcpy(work + 32, data + 52, 12);
  t = out + 12;
  memcpy(t, work + 32, 12);
  memcpy(t + 12 + 0, (unsigned char *)&per_a[1], 4);
  memcpy(t + 12 + 4, (unsigned char *)&per_a[0], 4);
  memcpy(t + 12 + 8, (unsigned char *)&per_b[2], 4);
  memcpy(t + 12 + 12, (unsigned char *)&per_b[1], 4);
  memcpy(t + 12 + 16, (unsigned char *)&per_b[0], 4);
  memcpy(t + 12 + 20, work, 32);
  memcpy(t + 12 + 52, (unsigned char *)&per_a[2], 4);
  out[0] = 0x11;
  out[1] = 0x11;
  out[2] = 0x11;
  out[3] = 0x11;
  out[4] = 0x1;
  out[5] = 0x0;
  out[6] = 0x0;
  out[7] = 0x0;
  out[8] = 0x0;
  out[9] = 0x0;
  out[10] = 0x0;
  out[11] = 0x0;
  out[80] = 0x0;
  out[81] = 0x0;
  out[82] = 0x0;
  out[83] = 0x0;
  out[84] = 0xaa;
  out[85] = 0xaa;
  out[86] = 0xaa;
  out[87] = 0xaa;
}
```