user: What would the C source look like for the assembly code provided here:

```asm
<bmp_js_l>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xd0,%rsp
  mov    %rdi,-0xc8(%rbp)
  mov    %esi,-0xcc(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0xcc(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  add    $0x3,%eax
  mov    %eax,-0xb0(%rbp)
  movl   $0x1,-0xac(%rbp)
  mov    $0x2a2f4d42,%eax
  movabs $0x6c0000007a0000,%rdx
  mov    %rax,-0x90(%rbp)
  mov    %rdx,-0x88(%rbp)
  movw   $0x0,-0x80(%rbp)
  mov    $0x180001,%eax
  movabs $0xb1300000010,%rdx
  mov    %rax,-0x70(%rbp)
  mov    %rdx,-0x68(%rbp)
  mov    $0xb13,%eax
  movabs $0x7352474200000000,%rdx
  mov    %rax,-0x60(%rbp)
  mov    %rdx,-0x58(%rbp)
  movq   $0x0,-0x50(%rbp)
  movq   $0x0,-0x48(%rbp)
  movq   $0x0,-0x40(%rbp)
  movq   $0x0,-0x38(%rbp)
  movq   $0x0,-0x30(%rbp)
  movq   $0x0,-0x28(%rbp)
  movq   $0x2,-0x20(%rbp)
  movq   $0x0,-0x18(%rbp)
  movl   $0x303d2f2a,-0x10(%rbp)
  movw   $0xa3b,-0xc(%rbp)
  movl   $0x2f2f,-0x96(%rbp)
  movw   $0x0,-0x92(%rbp)
  mov    -0xcc(%rbp),%eax
  add    $0x86,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    %rax,-0xa8(%rbp)
  movl   $0x0,-0xb4(%rbp)
  jmp    L5
L3:
  mov    -0xb4(%rbp),%eax
  shl    $0x3,%eax
  mov    -0xb0(%rbp),%edx
  mov    %eax,%ecx
  shr    %cl,%edx
  mov    %edx,%eax
  mov    %eax,%edx
  mov    -0xb4(%rbp),%eax
  cltq
  mov    %dl,-0x9e(%rbp,%rax,1)
  mov    -0xb4(%rbp),%eax
  shl    $0x3,%eax
  mov    -0xac(%rbp),%edx
  mov    %eax,%ecx
  shr    %cl,%edx
  mov    %edx,%eax
  mov    %eax,%edx
  mov    -0xb4(%rbp),%eax
  cltq
  mov    %dl,-0x9a(%rbp,%rax,1)
  addl   $0x1,-0xb4(%rbp)
L5:
  cmpl   $0x3,-0xb4(%rbp)
  jle    L3
  lea    -0x90(%rbp),%rcx
  mov    -0xa8(%rbp),%rax
  mov    $0x12,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  mov    -0xa8(%rbp),%rax
  lea    0x12(%rax),%rcx
  lea    -0x9e(%rbp),%rax
  mov    $0x4,%edx
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <memcpy@plt>
  mov    -0xa8(%rbp),%rax
  lea    0x16(%rax),%rcx
  lea    -0x9a(%rbp),%rax
  mov    $0x4,%edx
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <memcpy@plt>
  mov    -0xa8(%rbp),%rax
  lea    0x1a(%rax),%rcx
  lea    -0x70(%rbp),%rax
  mov    $0x6c,%edx
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <memcpy@plt>
  mov    -0xa8(%rbp),%rax
  lea    0x80(%rax),%rcx
  mov    -0xcc(%rbp),%edx
  mov    -0xc8(%rbp),%rax
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <memcpy@plt>
  mov    -0xcc(%rbp),%eax
  sub    $0xffffff80,%eax
  movslq %eax,%rdx
  mov    -0xa8(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  lea    -0x96(%rbp),%rax
  mov    $0x6,%edx
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <memcpy@plt>
  mov    -0xa8(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L23
  call   <__stack_chk_fail@plt>
L23:
  leave
  ret
```

assistant: ```c
char *bmp_js_l(char *content, int size) {
  unsigned int width = size / 3 + 3;
  unsigned int height = 1;
  const char _bmp_header1[18] = {0x42, 0x4d, 0x2f, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00};
  char sizew[4], sizeh[4];
  const char _bmp_header2[134 - 32] = {0x01, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x47, 0x52, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x2f, 0x3d, 0x30, 0x3b, 0x0a};
  const char _bmp_footer[6] = {0x2f, 0x2f, 0x00, 0x00, 0x00, 0x00};
  char *buffer = (char *)malloc(134 + size);
  for (int i = 0; i < 4; i++) {
    sizew[i] = (width >> i * 8) & 0xff;
    sizeh[i] = (height >> i * 8) & 0xff;
  }
  memcpy(buffer, _bmp_header1, 18);
  memcpy(&buffer[18], sizew, 4);
  memcpy(&buffer[22], sizeh, 4);
  memcpy(&buffer[26], _bmp_header2, 134 - 26);
  memcpy(&buffer[134 - 6], content, size);
  memcpy(&buffer[134 - 6 + size], _bmp_footer, 6);
  return buffer;
}
```