user: Demonstrate the C code that generates the assembly output below:

```asm
<send_rtp_packet>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x40,%rsp
  mov    %rdi,-0x2028(%rbp)
  mov    %rsi,-0x2030(%rbp)
  mov    %edx,-0x2034(%rbp)
  mov    %ecx,-0x2038(%rbp)
  mov    %r8d,-0x203c(%rbp)
  mov    %r9d,-0x2040(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x2034(%rbp),%eax
  add    $0x14,%eax
  mov    %eax,-0x2014(%rbp)
  lea    -0x2010(%rbp),%rax
  mov    $0x2000,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  movl   $0x80,-0x2010(%rbp)
  mov    0x10(%rbp),%eax
  shl    $0x7,%eax
  add    $0x1a,%eax
  mov    %eax,-0x200c(%rbp)
  mov    -0x2038(%rbp),%eax
  sar    $0x8,%eax
  mov    %eax,-0x2008(%rbp)
  mov    -0x2038(%rbp),%eax
  movzbl %al,%eax
  mov    %eax,-0x2004(%rbp)
  mov    -0x203c(%rbp),%eax
  shr    $0x18,%eax
  mov    %eax,-0x2000(%rbp)
  mov    -0x203c(%rbp),%eax
  sar    $0x10,%eax
  movzbl %al,%eax
  mov    %eax,-0x1ffc(%rbp)
  mov    -0x203c(%rbp),%eax
  sar    $0x8,%eax
  movzbl %al,%eax
  mov    %eax,-0x1ff8(%rbp)
  mov    -0x203c(%rbp),%eax
  movzbl %al,%eax
  mov    %eax,-0x1ff4(%rbp)
  movl   $0x13,-0x1ff0(%rbp)
  movl   $0xf9,-0x1fec(%rbp)
  movl   $0x7e,-0x1fe8(%rbp)
  movl   $0x67,-0x1fe4(%rbp)
  movl   $0x0,-0x1fe0(%rbp)
  mov    -0x2040(%rbp),%eax
  sar    $0x10,%eax
  movzbl %al,%eax
  mov    %eax,-0x1fdc(%rbp)
  mov    -0x2040(%rbp),%eax
  sar    $0x8,%eax
  movzbl %al,%eax
  mov    %eax,-0x1fd8(%rbp)
  mov    -0x2040(%rbp),%eax
  movzbl %al,%eax
  mov    %eax,-0x1fd4(%rbp)
  movl   $0x0,-0x1fd0(%rbp)
  movl   $0x3c,-0x1fcc(%rbp)
  mov    0x28(%rbp),%eax
  mov    %eax,-0x1fd0(%rbp)
  cmpl   $0x0,0x38(%rbp)
  je     L5
  mov    -0x1fd0(%rbp),%eax
  or     $0x40,%eax
  mov    %eax,-0x1fd0(%rbp)
L5:
  mov    0x30(%rbp),%eax
  mov    %eax,-0x1fcc(%rbp)
  mov    0x18(%rbp),%eax
  lea    0x7(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x3,%eax
  mov    %eax,-0x1fc8(%rbp)
  mov    0x20(%rbp),%eax
  lea    0x7(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x3,%eax
  mov    %eax,-0x1fc4(%rbp)
  mov    -0x2034(%rbp),%edx
  mov    -0x2030(%rbp),%rax
  lea    -0x2010(%rbp),%rcx
  add    $0x50,%rcx
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <memcpy@plt>
  mov    -0x2014(%rbp),%edx
  lea    -0x2010(%rbp),%rcx
  mov    -0x2028(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <udp_write@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L19
  call   <__stack_chk_fail@plt>
L19:
  leave
  ret
```

assistant: ```c
void send_rtp_packet(struct UdpSocket *sock, uint8_t *Jpeg, int JpegLen, uint32_t m_SequenceNumber, uint32_t m_Timestamp, uint32_t m_offset, uint8_t marker_bit, int w, int h, uint8_t format_code, uint8_t quality_code, uint8_t has_dri_header) {
  uint8_t RtpBuf[2048];
  int RtpPacketSize = JpegLen + 12 + 8;
  memset(RtpBuf, 0x00, sizeof(RtpBuf));
  RtpBuf[0] = 0x80;
  RtpBuf[1] = 0x1a + (marker_bit << 7);
  RtpBuf[2] = m_SequenceNumber >> 8;
  RtpBuf[3] = m_SequenceNumber & 0x0FF;
  RtpBuf[4] = (m_Timestamp & 0xFF000000) >> 24;
  RtpBuf[5] = (m_Timestamp & 0x00FF0000) >> 16;
  RtpBuf[6] = (m_Timestamp & 0x0000FF00) >> 8;
  RtpBuf[7] = (m_Timestamp & 0x000000FF);
  RtpBuf[8] = 0x13;
  RtpBuf[9] = 0xf9;
  RtpBuf[10] = 0x7e;
  RtpBuf[11] = 0x67;
  RtpBuf[12] = 0x00;
  RtpBuf[13] = (m_offset & 0x00FF0000) >> 16;
  RtpBuf[14] = (m_offset & 0x0000FF00) >> 8;
  RtpBuf[15] = (m_offset & 0x000000FF);
  RtpBuf[16] = 0x00;
  RtpBuf[17] = 60;
  RtpBuf[16] = format_code;
  if (has_dri_header)
    RtpBuf[16] |= 0x40;
  RtpBuf[17] = quality_code;
  RtpBuf[18] = w / 8;
  RtpBuf[19] = h / 8;
  memcpy(&RtpBuf[20], Jpeg, JpegLen);
  udp_write(sock, RtpBuf, RtpPacketSize);
}
```