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

```asm
<main>:
  endbr64
  push   %r15
  lea    D144(%rip),%rdi
  lea    D122(%rip),%r15
  push   %r14
  lea    D8(%rip),%r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  call   <puts@plt>
  mov    $0x1f90,%edi
  call   <creer_serveur@plt>
  mov    %eax,0xc(%rsp)
  nopw   0x0(%rax,%rax,1)
L171:
  mov    0xc(%rsp),%edi
  xor    %edx,%edx
  xor    %esi,%esi
  call   <accept@plt>
  mov    %eax,%ebp
  cmp    $0xffffffff,%eax
  je     L67
  xor    %eax,%eax
  call   <fork@plt>
  test   %rax,%rax
  je     L105
  mov    %ebp,%edi
  call   <close@plt>
  cmp    $0xffffffff,%eax
  jne    L171
  lea    D165(%rip),%rdi
  call   <perror@plt>
L91:
  add    $0x18,%rsp
  mov    $0xffffffff,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L105:
  mov    $0x100,%edi
  xor    %r13d,%r13d
  xor    %r12d,%r12d
  call   <malloc@plt>
  mov    %ebp,%edi
  lea    D120(%rip),%rsi
  mov    %rax,%rbx
  call   <fdopen@plt>
  mov    $0x100,%esi
  mov    %rbx,%rdi
  mov    %rax,%rdx
  mov    %rax,%rbp
  call   <fgets_or_exit@plt>
  jmp    L64
  cs nopw 0x0(%rax,%rax,1)
L61:
  cmp    $0x1,%r12d
  je     L119
  mov    $0x2,%r12d
L108:
  mov    %rbp,%rdx
  mov    $0x100,%esi
  mov    %rbx,%rdi
  call   <fgets_or_exit@plt>
L64:
  mov    %r14,%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L69
  mov    %r15,%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L69
  xor    %eax,%eax
  mov    %rbx,%rdi
  call   <printf@plt>
  test   %r12d,%r12d
  jne    L61
  mov    %rbx,%rdi
  call   <checkGet@plt>
  test   %rax,%rax
  jne    L108
  mov    %rbx,%rdi
  call   <checkURL@plt>
  test   %rax,%rax
  mov    $0x1,%eax
  cmovne %eax,%r13d
L119:
  mov    %rbx,%rdi
  mov    $0x1,%r12d
  call   <checkHost@plt>
  cmp    $0x1,%rax
  adc    $0x0,%r12d
  jmp    L108
  nopl   0x0(%rax)
L69:
  cmp    $0x2,%r12d
  jne    L185
  test   %r13d,%r13d
  jne    L137
  lea    D62(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0xa,%r12d
  call   <fprintf@plt>
  mov    $0x1,%edi
  lea    D45(%rip),%r13
  call   <sleep@plt>
  nopl   0x0(%rax)
L170:
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  sub    $0x1,%r12d
  jne    L170
  xor    %eax,%eax
  lea    D126(%rip),%r12
  call   <getpid@plt>
  mov    %rbx,%rdx
  mov    %r12,%rdi
  mov    %eax,%esi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L158
  nopl   0x0(%rax,%rax,1)
L65:
  xor    %eax,%eax
  call   <getpid@plt>
  mov    %rbx,%rdx
  mov    %r12,%rdi
  mov    %eax,%esi
  xor    %eax,%eax
  call   <printf@plt>
L158:
  mov    %rbp,%rdx
  mov    $0x100,%esi
  mov    %rbx,%rdi
  call   <fgets_or_exit@plt>
  test   %rax,%rax
  jne    L65
  jmp    L171
L67:
  lea    D44(%rip),%rdi
  call   <perror@plt>
  jmp    L91
L137:
  mov    %rbp,%rdi
  lea    D133(%rip),%rsi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D169(%rip),%rsi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D41(%rip),%rsi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D122(%rip),%rsi
  call   <fprintf@plt>
  lea    D178(%rip),%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  jmp    L91
L185:
  mov    %rbp,%rdi
  lea    D152(%rip),%rsi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D169(%rip),%rsi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D41(%rip),%rsi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D122(%rip),%rsi
  call   <fprintf@plt>
  lea    D104(%rip),%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  jmp    L91
```

tool_calls: name: extract_symbolic_data
arguments: label: D144
type_guessed: string
name: extract_symbolic_data
arguments: label: D122
type_guessed: string
name: extract_symbolic_data
arguments: label: D8
type_guessed: string
name: extract_symbolic_data
arguments: label: D165
type_guessed: string
name: extract_symbolic_data
arguments: label: D120
type_guessed: string
name: extract_symbolic_data
arguments: label: D62
type_guessed: string
name: extract_symbolic_data
arguments: label: D45
type_guessed: string
name: extract_symbolic_data
arguments: label: D126
type_guessed: string
name: extract_symbolic_data
arguments: label: D44
type_guessed: string
name: extract_symbolic_data
arguments: label: D133
type_guessed: string
name: extract_symbolic_data
arguments: label: D169
type_guessed: string
name: extract_symbolic_data
arguments: label: D41
type_guessed: string
name: extract_symbolic_data
arguments: label: D178
type_guessed: string
name: extract_symbolic_data
arguments: label: D152
type_guessed: string
name: extract_symbolic_data
arguments: label: D104
type_guessed: string

tool: D144: Lancement de Swanson

tool: D122: 


tool: D8: 


tool: D165: close socket_client

tool: D120: w+

tool: D62: HTTP/1.1 200 OK
Connection: close
Content-Length: 2

Ok


tool: D45: She's here. I can smell it


tool: D126: <%d> %s

tool: D44: accept socket_serveur

tool: D133: HTTP/1.1 404 URL Not Found


tool: D169: Connection: close


tool: D41: Content-Length: 17


tool: D178: 404 URL Not Found


tool: D152: HTTP/1.1 400 Bad Request


tool: D104: 400 Bad request


assistant: ```c
int main(void) {
  printf("%s\n", "Lancement de Swanson");
  int socket_serveur = creer_serveur(8080);
  while (1) {
    int socket_client;
    socket_client = accept(socket_serveur, NULL, NULL);
    if (socket_client == -1) {
      perror("accept socket_serveur");
      return -1;
    }
    const char *message_bienvenue = "She's here. I can smell it\n";
    if (fork() == 0) {
      int taille = 256 * sizeof(char);
      char *buffer = malloc(taille);
      FILE *socket_client_file = fdopen(socket_client, "w+");
      fgets_or_exit(buffer, taille, socket_client_file);
      int lignesPresentes = 0;
      int wrongURL = 0;
      while (strcmp(buffer, "\n") != 0 && strcmp(buffer, "\r\n") != 0) {
        printf(buffer);
        if (lignesPresentes == 0 && checkGet(buffer) == 0) {
          if (checkURL(buffer) != 0) {
            wrongURL = 1;
          }
          lignesPresentes++;
        }
        if (lignesPresentes == 1 && checkHost(buffer) == 0) {
          lignesPresentes++;
        }
        fgets_or_exit(buffer, taille, socket_client_file);
      }
      if (lignesPresentes != 2) {
        fprintf(socket_client_file, "HTTP/1.1 400 Bad Request\r\n");
        fprintf(socket_client_file, "Connection: close\r\n");
        fprintf(socket_client_file, "Content-Length: 17\r\n");
        fprintf(socket_client_file, "\r\n");
        fprintf(socket_client_file, "400 Bad request\r\n");
        return -1;
      }
      if (wrongURL != 0) {
        fprintf(socket_client_file, "HTTP/1.1 404 URL Not Found\r\n");
        fprintf(socket_client_file, "Connection: close\r\n");
        fprintf(socket_client_file, "Content-Length: 17\r\n");
        fprintf(socket_client_file, "\r\n");
        fprintf(socket_client_file, "404 URL Not Found\r\n");
        return -1;
      }
      fprintf(socket_client_file, "HTTP/1.1 200 OK\r\nConnection: close\r\nContent-Length: 2\r\n\r\nOk\r\n");
      sleep(1);
      int i;
      for (i = 0; i < 10; i++) {
        fprintf(socket_client_file, message_bienvenue);
      }
      printf("<%d> %s", getpid(), buffer);
      while (fgets_or_exit(buffer, taille, socket_client_file) != NULL) {
        printf("<%d> %s", getpid(), buffer);
      }
    } else {
      if (close(socket_client) == -1) {
        perror("close socket_client");
        return -1;
      }
    }
  }
  if (close(socket_serveur) == -1) {
    perror("close socket_serveur");
    return -1;
  }
  return 0;
}
```