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

```asm
<manageAccounts>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %edx,-0x34(%rbp)
  cmpl   $0x0,-0x34(%rbp)
  je     L36
  lea    D5(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x1,%edi
  call   <stringInput@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x30(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <searchForUser@plt>
  test   %rax,%rax
  je     L62
L22:
  mov    $0x0,%eax
  call   <lineBreak@plt>
  movl   $0x0,-0x10(%rbp)
L1:
  lea    D15(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <charInput@plt>
  mov    %al,-0x11(%rbp)
  cmpb   $0x41,-0x11(%rbp)
  je     L82
  cmpb   $0x61,-0x11(%rbp)
  je     L82
  cmpb   $0x52,-0x11(%rbp)
  je     L82
  cmpb   $0x72,-0x11(%rbp)
  jne    L0
L82:
  mov    $0x1,%eax
  jmp    L66
L0:
  mov    $0x0,%eax
L66:
  mov    %eax,-0x10(%rbp)
  cmpl   $0x1,-0x10(%rbp)
  je     L38
  lea    D4(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <lineBreak@plt>
L38:
  cmpl   $0x1,-0x10(%rbp)
  jne    L1
  cmpb   $0x41,-0x11(%rbp)
  je     L144
  cmpb   $0x61,-0x11(%rbp)
  jne    L72
L144:
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <addUserFunction@plt>
  jmp    L84
L72:
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <removeUserFunction@plt>
L84:
  mov    $0x0,%edi
  call   <inputYOrN@plt>
  mov    %eax,-0xc(%rbp)
  cmpl   $0x0,-0xc(%rbp)
  jne    L22
  jmp    L116
L62:
  lea    D19(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L116:
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  jmp    L30
L36:
  lea    D48(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D40(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L30:
  mov    $0x2,%edi
  call   <sleep@plt>
  nop
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_label: D5
data_type: string
name: parse_data
arguments: data_label: D15
data_type: string
name: parse_data
arguments: data_label: D4
data_type: string
name: parse_data
arguments: data_label: D19
data_type: string
name: parse_data
arguments: data_label: D48
data_type: string
name: parse_data
arguments: data_label: D40
data_type: string

tool: D5: Enter your password: 

tool: D15: Do you want to Add(A) or Remove(R) accounts? 

tool: D4: 
Incorrect input detected. Please enter 'A' or 'R'.


tool: D19: 
Incorrect password. Exiting program.


tool: D48: You are not an admin.


tool: D40: Please log out and retry using an admin account.

assistant: ```c
void manageAccounts(sqlite3 *db, char *username, int isAdmin) {
  if (isAdmin) {
    char *password;
    printf("Enter your password: ");
    password = stringInput(1);
    if (searchForUser(db, username, password)) {
      int cont;
      do {
        lineBreak();
        char option;
        int attemptResult = 0;
        do {
          printf("Do you want to Add(A) or Remove(R) accounts? ");
          option = charInput();
          attemptResult = ((option == 'A') || (option == 'a') || (option == 'R') || (option == 'r'));
          if (attemptResult != 1) {
            printf("\nIncorrect input detected. Please enter 'A' or 'R'.\n");
            lineBreak();
          }
        } while (attemptResult != 1);
        if ((option == 'A') || (option == 'a')) {
          addUserFunction(db);
        } else {
          removeUserFunction(db);
        }
        cont = inputYOrN(0);
      } while (cont);
    } else {
      printf("\nIncorrect password. Exiting program.\n");
    }
    free(password);
  } else {
    printf("You are not an admin.\n");
    puts("Please log out and retry using an admin account.");
  }
  sleep(2);
}
```