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

```asm
<main>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x138,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x128(%rsp)
  xor    %eax,%eax
  lea    D106(%rip),%rdi
  call   <printf@plt>
  lea    D30(%rip),%rdi
  call   <printf@plt>
  lea    0x10(%rsp),%rbx
  mov    %rbx,%rdx
  mov    $0x0,%esi
  lea    D145(%rip),%rdi
  call   <sha1@plt>
  mov    $0x14,%esi
  mov    %rbx,%rdi
  call   <printHex@plt>
  lea    D74(%rip),%rbp
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D18(%rip),%rdi
  call   <printf@plt>
  mov    %rbx,%rdx
  mov    $0x3,%esi
  lea    D143(%rip),%rdi
  call   <sha1@plt>
  mov    $0x14,%esi
  mov    %rbx,%rdi
  call   <printHex@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D73(%rip),%rdi
  call   <printf@plt>
  mov    %rbx,%rdx
  mov    $0x38,%esi
  lea    D57(%rip),%rdi
  call   <sha1@plt>
  mov    $0x14,%esi
  mov    %rbx,%rdi
  call   <printHex@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D51(%rip),%rdi
  call   <printf@plt>
  mov    %rbx,%rdx
  mov    $0x70,%esi
  lea    D148(%rip),%rdi
  call   <sha1@plt>
  mov    $0x14,%esi
  mov    %rbx,%rdi
  call   <printHex@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D22(%rip),%rdi
  call   <printf@plt>
  movabs $0xb0b0b0b0b0b0b0b,%rax
  movabs $0xb0b0b0b0b0b0b0b,%rdx
  mov    %rax,0x30(%rsp)
  mov    %rdx,0x38(%rsp)
  movl   $0xb0b0b0b,0x40(%rsp)
  movabs $0x6572656854206948,%rax
  mov    %rax,0x7(%rsp)
  movb   $0x0,0xf(%rsp)
  lea    D116(%rip),%rdi
  call   <printf@plt>
  lea    0x7(%rsp),%rdx
  lea    0x30(%rsp),%rdi
  mov    %rbx,%r8
  mov    $0x8,%ecx
  mov    $0x14,%esi
  call   <hmac@plt>
  mov    $0x14,%esi
  mov    %rbx,%rdi
  call   <printHex@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  movl   $0x6566654a,0x2(%rsp)
  movb   $0x0,0x6(%rsp)
  movabs $0x206f642074616877,%rax
  movabs $0x20746e6177206179,%rdx
  mov    %rax,0x90(%rsp)
  mov    %rdx,0x98(%rsp)
  movabs $0x68746f6e20726f66,%rax
  mov    %rax,0xa0(%rsp)
  movl   $0x3f676e69,0xa8(%rsp)
  movb   $0x0,0xac(%rsp)
  lea    D115(%rip),%rdi
  call   <printf@plt>
  lea    0x90(%rsp),%rdx
  lea    0x2(%rsp),%rdi
  mov    %rbx,%r8
  mov    $0x1c,%ecx
  mov    $0x4,%esi
  call   <hmac@plt>
  mov    $0x14,%esi
  mov    %rbx,%rdi
  call   <printHex@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  movabs $0xaaaaaaaaaaaaaaaa,%rax
  movabs $0xaaaaaaaaaaaaaaaa,%rdx
  mov    %rax,0x50(%rsp)
  mov    %rdx,0x58(%rsp)
  movl   $0xaaaaaaaa,0x60(%rsp)
  movabs $0xdddddddddddddddd,%rax
  movabs $0xdddddddddddddddd,%rdx
  mov    %rax,0xb0(%rsp)
  mov    %rdx,0xb8(%rsp)
  mov    %rax,0xc0(%rsp)
  mov    %rdx,0xc8(%rsp)
  mov    %rax,0xd0(%rsp)
  mov    %rdx,0xd8(%rsp)
  movw   $0xdddd,0xe0(%rsp)
  lea    D110(%rip),%rdi
  call   <printf@plt>
  lea    0xb0(%rsp),%rdx
  lea    0x50(%rsp),%rdi
  mov    %rbx,%r8
  mov    $0x32,%ecx
  mov    $0x14,%esi
  call   <hmac@plt>
  mov    $0x14,%esi
  mov    %rbx,%rdi
  call   <printHex@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  movabs $0x807060504030201,%rax
  movabs $0x100f0e0d0c0b0a09,%rdx
  mov    %rax,0x70(%rsp)
  mov    %rdx,0x78(%rsp)
  movabs $0x1817161514131211,%rax
  mov    %rax,0x80(%rsp)
  movb   $0x19,0x88(%rsp)
  movabs $0xcdcdcdcdcdcdcdcd,%rax
  movabs $0xcdcdcdcdcdcdcdcd,%rdx
  mov    %rax,0xf0(%rsp)
  mov    %rdx,0xf8(%rsp)
  mov    %rax,0x100(%rsp)
  mov    %rdx,0x108(%rsp)
  mov    %rax,0x110(%rsp)
  mov    %rdx,0x118(%rsp)
  movw   $0xcdcd,0x120(%rsp)
  lea    D144(%rip),%rdi
  call   <printf@plt>
  lea    0xf0(%rsp),%rdx
  lea    0x70(%rsp),%rdi
  mov    %rbx,%r8
  mov    $0x32,%ecx
  mov    $0x19,%esi
  call   <hmac@plt>
  mov    $0x14,%esi
  mov    %rbx,%rdi
  call   <printHex@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  mov    0x128(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L4
  mov    $0x0,%eax
  add    $0x138,%rsp
  pop    %rbx
  pop    %rbp
  ret
L4:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_tag: D106
data_type: string
name: unpack_data
arguments: data_tag: D30
data_type: string
name: unpack_data
arguments: data_tag: D145
data_type: string
name: unpack_data
arguments: data_tag: D74
data_type: string
name: unpack_data
arguments: data_tag: D18
data_type: string
name: unpack_data
arguments: data_tag: D143
data_type: string
name: unpack_data
arguments: data_tag: D73
data_type: string
name: unpack_data
arguments: data_tag: D57
data_type: string
name: unpack_data
arguments: data_tag: D51
data_type: string
name: unpack_data
arguments: data_tag: D148
data_type: string
name: unpack_data
arguments: data_tag: D22
data_type: string
name: unpack_data
arguments: data_tag: D116
data_type: string
name: unpack_data
arguments: data_tag: D115
data_type: string
name: unpack_data
arguments: data_tag: D110
data_type: string
name: unpack_data
arguments: data_tag: D144
data_type: string

tool: D106: SHA1


tool: D30: 0xda39a3ee5e6b4b0d3255bfef95601890afd80709


tool: 

tool: D74: 


tool: D18: 0xa9993e364706816aba3e25717850c26c9cd0d89d


tool: D143: abc

tool: D73: 0x84983e441c3bd26ebaae4aa1f95129e5e54670f1


tool: D57: abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq

tool: D51: 0xa49b2446a02c645bf419f995b67091253a04a259


tool: D148: abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu

tool: D22: HMAC-SHA1


tool: D116: 0xb617318655057264e28bc0b6fb378c8ef146be00


tool: D115: 0xeffcdf6ae5eb2fa2d27416d5f184df9c259a7c79


tool: D110: 0x125d7342b9ac11cd91a39af48aa17b4f63f175d3


tool: D144: 0x4c9007f4026250c6bc8414f9bf50c86c2d7235da


assistant: ```c
int main() {
  unsigned char digest[20];
  printf("SHA1\n");
  char *input_1 = "";
  unsigned char len_1 = 0;
  printf("0xda39a3ee5e6b4b0d3255bfef95601890afd80709\n");
  sha1((const unsigned char *)input_1, len_1, digest);
  printHex(digest, 20);
  printf("\n");
  char *input_2 = "abc";
  unsigned char len_2 = 3;
  printf("0xa9993e364706816aba3e25717850c26c9cd0d89d\n");
  sha1((const unsigned char *)input_2, len_2, digest);
  printHex(digest, 20);
  printf("\n");
  char *input_3 = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
  unsigned char len_3 = 56;
  printf("0x84983e441c3bd26ebaae4aa1f95129e5e54670f1\n");
  sha1((const unsigned char *)input_3, len_3, digest);
  printHex(digest, 20);
  printf("\n");
  char *input_4 = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu";
  unsigned char len_4 = 112;
  printf("0xa49b2446a02c645bf419f995b67091253a04a259\n");
  sha1((const unsigned char *)input_4, len_4, digest);
  printHex(digest, 20);
  printf("\n");
  printf("HMAC-SHA1\n");
  unsigned char key_1[] = {0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b};
  unsigned char keylen_1 = 20;
  unsigned char data_1[] = "Hi There";
  unsigned char datalen_1 = 8;
  printf("0xb617318655057264e28bc0b6fb378c8ef146be00\n");
  hmac(key_1, keylen_1, data_1, datalen_1, digest);
  printHex(digest, 20);
  printf("\n");
  unsigned char key_2[] = "Jefe";
  unsigned char keylen_2 = 4;
  unsigned char data_2[] = "what do ya want for nothing?";
  unsigned char datalen_2 = 28;
  printf("0xeffcdf6ae5eb2fa2d27416d5f184df9c259a7c79\n");
  hmac(key_2, keylen_2, data_2, datalen_2, digest);
  printHex(digest, 20);
  printf("\n");
  unsigned char key_3[] = {0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa};
  unsigned char keylen_3 = 20;
  unsigned char data_3[] = {0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd};
  unsigned char datalen_3 = 50;
  printf("0x125d7342b9ac11cd91a39af48aa17b4f63f175d3\n");
  hmac(key_3, keylen_3, data_3, datalen_3, digest);
  printHex(digest, 20);
  printf("\n");
  unsigned char key_4[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19};
  unsigned char keylen_4 = 25;
  unsigned char data_4[] = {0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd};
  unsigned char datalen_4 = 50;
  printf("0x4c9007f4026250c6bc8414f9bf50c86c2d7235da\n");
  hmac(key_4, keylen_4, data_4, datalen_4, digest);
  printHex(digest, 20);
  printf("\n");
  return 0;
}
```