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

```asm
<generateVoipInvitePacket>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x408,%rsp
  mov    %rdi,%r12
  mov    %rsi,0x18(%rsp)
  mov    %rdx,%r15
  mov    %rcx,%rbp
  mov    %r8,0x10(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x3f8(%rsp)
  xor    %eax,%eax
  mov    $0x400,%edi
  call   <malloc@plt>
  mov    %rax,0x8(%rsp)
  movabs $0x20455449564e49,%rcx
  mov    %rcx,0x28(%rsp)
  movq   $0x0,0xf0(%rsp)
  movq   $0x0,0xf8(%rsp)
  movq   $0x0,0x100(%rsp)
  movq   $0x0,0x108(%rsp)
  movq   $0x0,0x110(%rsp)
  movq   $0x0,0x118(%rsp)
  movq   $0x0,0x120(%rsp)
  movq   $0x0,0x128(%rsp)
  lea    0xf0(%rsp),%r14
  lea    D36(%rip),%rsi
  mov    %r14,%rdi
  call   <strcat@plt>
  mov    %r15,%rsi
  mov    %r14,%rdi
  call   <strcat@plt>
  lea    D21(%rip),%rsi
  mov    %r14,%rdi
  call   <strcat@plt>
  mov    %rbp,%rsi
  mov    %r14,%rdi
  call   <strcat@plt>
  lea    D134(%rip),%rsi
  mov    %r14,%rdi
  call   <strcat@plt>
  movabs $0xd302e322f504953,%rcx
  mov    $0xa,%ebx
  mov    %rcx,0x30(%rsp)
  mov    %rbx,0x38(%rsp)
  movq   $0x0,0x1f0(%rsp)
  movq   $0x0,0x1f8(%rsp)
  movq   $0x0,0x200(%rsp)
  movq   $0x0,0x208(%rsp)
  movq   $0x0,0x210(%rsp)
  movq   $0x0,0x218(%rsp)
  movq   $0x0,0x220(%rsp)
  movq   $0x0,0x228(%rsp)
  movq   $0x0,0x230(%rsp)
  movq   $0x0,0x238(%rsp)
  movq   $0x0,0x240(%rsp)
  movq   $0x0,0x248(%rsp)
  movq   $0x0,0x250(%rsp)
  movq   $0x0,0x258(%rsp)
  movq   $0x0,0x260(%rsp)
  movq   $0x0,0x268(%rsp)
  lea    0x1f0(%rsp),%r13
  lea    D185(%rip),%rsi
  mov    %r13,%rdi
  call   <strcat@plt>
  mov    0x10(%rsp),%rbx
  mov    %rbx,%rsi
  mov    %r13,%rdi
  call   <strcat@plt>
  lea    D139(%rip),%rsi
  mov    %r13,%rdi
  call   <strcat@plt>
  mov    %rbx,0x10(%rsp)
  mov    %rbx,%rsi
  mov    %r13,%rdi
  call   <strcat@plt>
  lea    D77(%rip),%rsi
  mov    %r13,%rdi
  call   <strcat@plt>
  movq   $0x0,0x270(%rsp)
  movq   $0x0,0x278(%rsp)
  movq   $0x0,0x280(%rsp)
  movq   $0x0,0x288(%rsp)
  movq   $0x0,0x290(%rsp)
  movq   $0x0,0x298(%rsp)
  movq   $0x0,0x2a0(%rsp)
  movq   $0x0,0x2a8(%rsp)
  movq   $0x0,0x2b0(%rsp)
  movq   $0x0,0x2b8(%rsp)
  movq   $0x0,0x2c0(%rsp)
  movq   $0x0,0x2c8(%rsp)
  movq   $0x0,0x2d0(%rsp)
  movq   $0x0,0x2d8(%rsp)
  movq   $0x0,0x2e0(%rsp)
  movq   $0x0,0x2e8(%rsp)
  lea    0x270(%rsp),%rbx
  lea    D61(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcat@plt>
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <strcat@plt>
  lea    D10(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcat@plt>
  mov    0x18(%rsp),%rsi
  mov    %rbx,%rdi
  call   <strcat@plt>
  lea    D21(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcat@plt>
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <strcat@plt>
  lea    D150(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcat@plt>
  movq   $0x0,0x2f0(%rsp)
  movq   $0x0,0x2f8(%rsp)
  movq   $0x0,0x300(%rsp)
  movq   $0x0,0x308(%rsp)
  movq   $0x0,0x310(%rsp)
  movq   $0x0,0x318(%rsp)
  movq   $0x0,0x320(%rsp)
  movq   $0x0,0x328(%rsp)
  movq   $0x0,0x330(%rsp)
  movq   $0x0,0x338(%rsp)
  movq   $0x0,0x340(%rsp)
  movq   $0x0,0x348(%rsp)
  movq   $0x0,0x350(%rsp)
  movq   $0x0,0x358(%rsp)
  movq   $0x0,0x360(%rsp)
  movq   $0x0,0x368(%rsp)
  lea    0x2f0(%rsp),%r12
  lea    D48(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  mov    %r15,%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  lea    D21(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  lea    D105(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  movq   $0x0,0x130(%rsp)
  movq   $0x0,0x138(%rsp)
  movq   $0x0,0x140(%rsp)
  movq   $0x0,0x148(%rsp)
  movq   $0x0,0x150(%rsp)
  movq   $0x0,0x158(%rsp)
  movq   $0x0,0x160(%rsp)
  movq   $0x0,0x168(%rsp)
  lea    0x130(%rsp),%r15
  lea    D39(%rip),%rsi
  mov    %r15,%rdi
  call   <strcat@plt>
  lea    D21(%rip),%rsi
  mov    %r15,%rdi
  call   <strcat@plt>
  mov    0x10(%rsp),%rsi
  mov    %r15,%rdi
  call   <strcat@plt>
  lea    D170(%rip),%rsi
  mov    %r15,%rdi
  call   <strcat@plt>
  movabs $0x2031203a71655343,%rdx
  movabs $0xa0d455449564e49,%rcx
  mov    %rdx,0x50(%rsp)
  mov    %rcx,0x58(%rsp)
  movq   $0x0,0x60(%rsp)
  movq   $0x0,0x68(%rsp)
  movabs $0x6567412d72657355,%rdx
  movabs $0x6f72654e203a746e,%rcx
  mov    %rdx,0x170(%rsp)
  mov    %rcx,0x178(%rsp)
  movabs $0x4920535050495320,%rdx
  movabs $0x20656e6f68502050,%rcx
  mov    %rdx,0x180(%rsp)
  mov    %rcx,0x188(%rsp)
  movabs $0x206e6f6973726556,%rdx
  movabs $0x312e31352e302e32,%rcx
  mov    %rdx,0x190(%rsp)
  mov    %rcx,0x198(%rsp)
  movq   $0xa0d36,0x1a0(%rsp)
  movq   $0x0,0x1a8(%rsp)
  movabs $0x3a73657269707845,%rdx
  movabs $0xa0d30323120,%rcx
  mov    %rdx,0x40(%rsp)
  mov    %rcx,0x48(%rsp)
  movabs $0x203a747065636341,%rdx
  movabs $0x746163696c707061,%rcx
  mov    %rdx,0x70(%rsp)
  mov    %rcx,0x78(%rsp)
  movabs $0xd7064732f6e6f69,%rdx
  mov    $0xa,%ecx
  mov    %rdx,0x80(%rsp)
  mov    %rcx,0x88(%rsp)
  movabs $0x2d746e65746e6f43,%rdx
  movabs $0x7061203a65707954,%rcx
  mov    %rdx,0x90(%rsp)
  mov    %rcx,0x98(%rsp)
  movabs $0x6f69746163696c70,%rdx
  movabs $0xa0d7064732f6e,%rcx
  mov    %rdx,0xa0(%rsp)
  mov    %rcx,0xa8(%rsp)
  movabs $0x2d746e65746e6f43,%rdx
  movabs $0x203a6874676e654c,%rcx
  mov    %rdx,0xb0(%rsp)
  mov    %rcx,0xb8(%rsp)
  movabs $0xa0d323732,%rdx
  mov    $0x0,%ecx
  mov    %rdx,0xc0(%rsp)
  mov    %rcx,0xc8(%rsp)
  movq   $0x0,0x1b0(%rsp)
  movq   $0x0,0x1b8(%rsp)
  movq   $0x0,0x1c0(%rsp)
  movq   $0x0,0x1c8(%rsp)
  movq   $0x0,0x1d0(%rsp)
  movq   $0x0,0x1d8(%rsp)
  movq   $0x0,0x1e0(%rsp)
  movq   $0x0,0x1e8(%rsp)
  lea    0x1b0(%rsp),%rbp
  lea    D131(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  mov    0x18(%rsp),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  lea    D21(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  mov    0x10(%rsp),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  lea    D105(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  movabs $0x77726f462d78614d,%rdx
  movabs $0x3037203a73647261,%rcx
  mov    %rdx,0xd0(%rsp)
  mov    %rcx,0xd8(%rsp)
  movq   $0xa0d,0xe0(%rsp)
  movq   $0x0,0xe8(%rsp)
  movabs $0x49203a776f6c6c41,%rdx
  movabs $0x41202c455449564e,%rcx
  mov    %rdx,0x370(%rsp)
  mov    %rcx,0x378(%rsp)
  movabs $0x434e4143202c4b43,%rdx
  movabs $0x2c455942202c4c45,%rcx
  mov    %rdx,0x380(%rsp)
  mov    %rcx,0x388(%rsp)
  movabs $0x202c524546455220,%rdx
  movabs $0x2c534e4f4954504f,%rcx
  mov    %rdx,0x390(%rsp)
  mov    %rcx,0x398(%rsp)
  movabs $0x2c594649544f4e20,%rdx
  movabs $0xd0a0d4f464e4920,%rcx
  mov    %rdx,0x3a0(%rsp)
  mov    %rcx,0x3a8(%rsp)
  movq   $0xa,0x3b0(%rsp)
  movq   $0x0,0x3b8(%rsp)
  movq   $0x0,0x3c0(%rsp)
  movq   $0x0,0x3c8(%rsp)
  movq   $0x0,0x3d0(%rsp)
  movq   $0x0,0x3d8(%rsp)
  movq   $0x0,0x3e0(%rsp)
  movq   $0x0,0x3e8(%rsp)
  lea    0x28(%rsp),%rsi
  mov    $0x7,%edx
  mov    0x8(%rsp),%rdi
  call   <memcpy@plt>
  mov    %r14,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    0x8(%rsp),%rax
  lea    0x7(%rax),%rdi
  mov    %r14,%rsi
  call   <memcpy@plt>
  mov    %r14,%rdi
  call   <strlen@plt>
  mov    %eax,%r14d
  lea    0x30(%rsp),%rsi
  lea    0x7(%rax),%edi
  movslq %edi,%rdi
  add    0x8(%rsp),%rdi
  mov    $0x9,%edx
  call   <memcpy@plt>
  add    $0x10,%r14d
  mov    %r13,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  movslq %r14d,%rdi
  add    0x8(%rsp),%rdi
  mov    %r13,%rsi
  call   <memcpy@plt>
  mov    %r13,%rdi
  call   <strlen@plt>
  add    %eax,%r14d
  mov    %rbx,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  movslq %r14d,%rdi
  mov    0x8(%rsp),%r13
  add    %r13,%rdi
  mov    %rbx,%rsi
  call   <memcpy@plt>
  mov    %rbx,%rdi
  call   <strlen@plt>
  lea    (%r14,%rax,1),%ebx
  mov    %r12,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  movslq %ebx,%rdi
  add    %r13,%rdi
  mov    %r12,%rsi
  call   <memcpy@plt>
  mov    %r12,%rdi
  call   <strlen@plt>
  add    %eax,%ebx
  mov    %r15,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  movslq %ebx,%rdi
  add    %r13,%rdi
  mov    %r15,%rsi
  call   <memcpy@plt>
  mov    %r15,%rdi
  call   <strlen@plt>
  add    %eax,%ebx
  lea    0x50(%rsp),%r12
  mov    %r12,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  movslq %ebx,%rdi
  add    %r13,%rdi
  mov    %r12,%rsi
  call   <memcpy@plt>
  mov    %r12,%rdi
  call   <strlen@plt>
  add    %eax,%ebx
  lea    0x170(%rsp),%r12
  mov    %r12,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  movslq %ebx,%rdi
  add    %r13,%rdi
  mov    %r12,%rsi
  call   <memcpy@plt>
  mov    %r12,%rdi
  call   <strlen@plt>
  add    %eax,%ebx
  lea    0x40(%rsp),%r12
  mov    %r12,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  movslq %ebx,%rdi
  add    %r13,%rdi
  mov    %r12,%rsi
  call   <memcpy@plt>
  mov    %r12,%rdi
  call   <strlen@plt>
  add    %eax,%ebx
  lea    0x70(%rsp),%r12
  mov    %r12,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  movslq %ebx,%rdi
  add    %r13,%rdi
  mov    %r12,%rsi
  call   <memcpy@plt>
  mov    %r12,%rdi
  call   <strlen@plt>
  add    %eax,%ebx
  lea    0x90(%rsp),%r12
  mov    %r12,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  movslq %ebx,%rdi
  add    %r13,%rdi
  mov    %r12,%rsi
  call   <memcpy@plt>
  mov    %r12,%rdi
  call   <strlen@plt>
  add    %eax,%ebx
  lea    0xb0(%rsp),%r12
  mov    %r12,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  movslq %ebx,%rdi
  add    %r13,%rdi
  mov    %r12,%rsi
  call   <memcpy@plt>
  mov    %r12,%rdi
  call   <strlen@plt>
  add    %eax,%ebx
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  movslq %ebx,%rdi
  add    %r13,%rdi
  mov    %rbp,%rsi
  call   <memcpy@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  add    %eax,%ebx
  lea    0xd0(%rsp),%rbp
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  movslq %ebx,%rdi
  add    %r13,%rdi
  mov    %rbp,%rsi
  call   <memcpy@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  add    %eax,%ebx
  lea    0x370(%rsp),%rbp
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  movslq %ebx,%rdi
  add    %r13,%rdi
  mov    %rbp,%rsi
  call   <memcpy@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  add    %eax,%ebx
  movslq %ebx,%rbx
  movb   $0x0,0x0(%r13,%rbx,1)
  mov    0x3f8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L5
  mov    0x8(%rsp),%rax
  add    $0x408,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L5:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: label: D36
data_type: string
name: extract_symbolic_data
arguments: label: D21
data_type: string
name: extract_symbolic_data
arguments: label: D134
data_type: string
name: extract_symbolic_data
arguments: label: D185
data_type: string
name: extract_symbolic_data
arguments: label: D139
data_type: string
name: extract_symbolic_data
arguments: label: D77
data_type: string
name: extract_symbolic_data
arguments: label: D61
data_type: string
name: extract_symbolic_data
arguments: label: D10
data_type: string
name: extract_symbolic_data
arguments: label: D150
data_type: string
name: extract_symbolic_data
arguments: label: D48
data_type: string
name: extract_symbolic_data
arguments: label: D105
data_type: string
name: extract_symbolic_data
arguments: label: D39
data_type: string
name: extract_symbolic_data
arguments: label: D170
data_type: string
name: extract_symbolic_data
arguments: label: D131
data_type: string

tool: D36: sip:

tool: D21: @

tool: D134:  

tool: D185: Via: SIP/2.0/UDP 

tool: D139: :5060;branch=z9hG4bKnp104984053-44ce4a41

tool: D77: ;rport


tool: D61: From: "

tool: D10: " <sip:

tool: D150: >;tag=6433ef9


tool: D48: To: <sip:

tool: D105: >


tool: D39: Call-ID: 105090259-446faf7a

tool: D170: 


tool: D131: Contact: <sip:

assistant: ```c
uint8_t *generateVoipInvitePacket(char *userName, char *fromPhoneNumber, char *toPhoneNumber, char *host, char *srcIp) {
  uint8_t *data = (uint8_t *)malloc(1024);
  int ic = 0;
  char method[8] = "INVITE ";
  char requestUri[64] = "";
  strcat(requestUri, "sip:");
  strcat(requestUri, toPhoneNumber);
  strcat(requestUri, "@");
  strcat(requestUri, host);
  strcat(requestUri, " ");
  char version[16] = "SIP/2.0\r\n";
  char via[128] = "";
  strcat(via, "Via: SIP/2.0/UDP ");
  strcat(via, srcIp);
  strcat(via, ":5060;branch=z9hG4bKnp104984053-44ce4a41");
  strcat(via, srcIp);
  strcat(via, ";rport\r\n");
  char from[128] = "";
  strcat(from, "From: \"");
  strcat(from, userName);
  strcat(from, "\" <sip:");
  strcat(from, fromPhoneNumber);
  strcat(from, "@");
  strcat(from, host);
  strcat(from, ">;tag=6433ef9\r\n");
  char to[128] = "";
  strcat(to, "To: <sip:");
  strcat(to, toPhoneNumber);
  strcat(to, "@");
  strcat(to, host);
  strcat(to, ">\r\n");
  char callId[64] = "";
  strcat(callId, "Call-ID: 105090259-446faf7a");
  strcat(callId, "@");
  strcat(callId, srcIp);
  strcat(callId, "\r\n");
  char cseq[32] = "CSeq: 1 INVITE\r\n";
  char userAgent[64] = "User-Agent: Nero SIPPS IP Phone Version 2.0.51.16\r\n";
  char expire[16] = "Expires: 120\r\n";
  char accept[32] = "Accept: application/sdp\r\n";
  char contentType[32] = "Content-Type: application/sdp\r\n";
  char contentLength[32] = "Content-Length: 272\r\n";
  char contact[64] = "";
  strcat(contact, "Contact: <sip:");
  strcat(contact, fromPhoneNumber);
  strcat(contact, "@");
  strcat(contact, srcIp);
  strcat(contact, ">\r\n");
  char maxForward[32] = "Max-Forwards: 70\r\n";
  char allow[128] = "Allow: INVITE, ACK, CANCEL, BYE, REFER, OPTIONS, NOTIFY, INFO\r\n\r\n";
  memcpy(data, method, 7);
  ic += 7;
  memcpy(data + ic, requestUri, strlen(requestUri));
  ic += strlen(requestUri);
  memcpy(data + ic, version, 9);
  ic += 9;
  memcpy(data + ic, via, strlen(via));
  ic += strlen(via);
  memcpy(data + ic, from, strlen(from));
  ic += strlen(from);
  memcpy(data + ic, to, strlen(to));
  ic += strlen(to);
  memcpy(data + ic, callId, strlen(callId));
  ic += strlen(callId);
  memcpy(data + ic, cseq, strlen(cseq));
  ic += strlen(cseq);
  memcpy(data + ic, userAgent, strlen(userAgent));
  ic += strlen(userAgent);
  memcpy(data + ic, expire, strlen(expire));
  ic += strlen(expire);
  memcpy(data + ic, accept, strlen(accept));
  ic += strlen(accept);
  memcpy(data + ic, contentType, strlen(contentType));
  ic += strlen(contentType);
  memcpy(data + ic, contentLength, strlen(contentLength));
  ic += strlen(contentLength);
  memcpy(data + ic, contact, strlen(contact));
  ic += strlen(contact);
  memcpy(data + ic, maxForward, strlen(maxForward));
  ic += strlen(maxForward);
  memcpy(data + ic, allow, strlen(allow));
  ic += strlen(allow);
  data[ic] = '\0';
  return data;
}
```