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

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  lea    D45(%rip),%rsi
  lea    D66(%rip),%rdi
  call   <fopen@plt>
  mov    %rax,0x8(%rsp)
  mov    %rax,%rdi
  call   <get_file_size@plt>
  mov    %eax,%r14d
  lea    0x1(%rax),%r15d
  mov    %r15d,%edi
  call   <malloc@plt>
  mov    %rax,%r13
  mov    %r14d,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  mulsd  D63(%rip),%xmm0
  movsd  %xmm0,(%rsp)
  cvttsd2si %xmm0,%ebx
  mov    %ebx,%edi
  call   <malloc@plt>
  mov    %rax,%r12
  mov    %ebx,%edi
  call   <malloc@plt>
  mov    %rax,%rbp
  movsd  (%rsp),%xmm0
  mulsd  D19(%rip),%xmm0
  addsd  D4(%rip),%xmm0
  cvttsd2si %xmm0,%edi
  call   <malloc@plt>
  mov    %rax,%rbx
  mov    0x8(%rsp),%rcx
  mov    $0x1,%edx
  mov    %r14d,%esi
  mov    %r13,%rdi
  call   <fread@plt>
  cvttsd2si (%rsp),%rcx
  mov    %r15d,%edx
  mov    %r12,%rsi
  mov    %r13,%rdi
  call   <base64_to_hex@plt>
  mov    %eax,%edx
  mov    %eax,%r14d
  shr    %r14d
  mov    %r14d,%ecx
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <hex_to_str@plt>
  mov    %rbx,%rcx
  lea    D25(%rip),%rdx
  mov    %r14d,%esi
  mov    %rbp,%rdi
  call   <decrypt@plt>
  mov    %r14d,%r14d
  movb   $0x0,(%rbx,%r14,1)
  mov    %rbx,%rsi
  lea    D22(%rip),%rdi
  call   <printf@plt>
  mov    %r13,%rdi
  call   <free@plt>
  mov    %r12,%rdi
  call   <free@plt>
  mov    %rbp,%rdi
  call   <free@plt>
  mov    %rbx,%rdi
  call   <free@plt>
  mov    $0x0,%eax
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: unpack_data
arguments: label: D45
type_guessed: string
name: unpack_data
arguments: label: D66
type_guessed: string
name: unpack_data
arguments: label: D63
type_guessed: f64
name: unpack_data
arguments: label: D19
type_guessed: byte[8]
name: unpack_data
arguments: label: D4
type_guessed: byte[8]
name: unpack_data
arguments: label: D25
type_guessed: string
name: unpack_data
arguments: label: D22
type_guessed: string

tool: D45: r

tool: D66: 7.txt

tool: D63: 1.5

tool: {"D19": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f]}

tool: {"D4": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

tool: D25: YELLOW SUBMARINE

tool: D22: %s

assistant: ```c
int main() {
  unsigned char *input_b64 = NULL, *input_hex = NULL, *input_str = NULL, *output_str = NULL;
  unsigned int hex_len = 0;
  unsigned int file_size = 0;
  unsigned char *key = "YELLOW SUBMARINE";
  FILE *file = fopen("7.txt", "r");
  file_size = get_file_size(file);
  input_b64 = malloc(sizeof(char) * file_size + 1);
  input_hex = malloc(sizeof(char) * file_size * 1.5);
  input_str = malloc(sizeof(char) * (file_size * 1.5));
  output_str = malloc(sizeof(char) * (file_size * 1.5) / 2 + 1);
  fread(input_b64, file_size, 1, file);
  hex_len = base64_to_hex(input_b64, input_hex, file_size + 1, file_size * 1.5);
  hex_to_str(input_hex, input_str, hex_len, hex_len / 2);
  decrypt(input_str, hex_len / 2, key, output_str);
  output_str[hex_len / 2] = '\0';
  printf("%s", output_str);
  free(input_b64);
  free(input_hex);
  free(input_str);
  free(output_str);
}
```