user: What would the C source look like for the assembly code provided here?

```asm
<testQueryPlanning>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xe0,%rsp
  lea    D188(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D256(%rip),%rax
  mov    %rax,-0xe0(%rbp)
  lea    D283(%rip),%rax
  mov    %rax,-0xd8(%rbp)
  mov    -0xe0(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    -0xe0(%rbp),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <parse_string@plt>
  mov    %rax,-0xd0(%rbp)
  mov    -0xd0(%rbp),%rax
  mov    %rax,%rdi
  call   <streamline_query@plt>
  mov    -0xd0(%rbp),%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <ast_to_string@plt>
  mov    %rax,-0xc8(%rbp)
  mov    -0xd8(%rbp),%rdx
  mov    -0xc8(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L74
  lea    D64(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L21
L74:
  mov    -0xd8(%rbp),%rdx
  mov    -0xc8(%rbp),%rax
  mov    %rax,%rsi
  lea    D280(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L21:
  mov    -0xc8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0xd0(%rbp),%rax
  mov    %rax,%rdi
  call   <free_ast_node@plt>
  lea    D153(%rip),%rax
  mov    %rax,-0xc0(%rbp)
  lea    D160(%rip),%rax
  mov    %rax,-0xb8(%rbp)
  mov    -0xc0(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    -0xc0(%rbp),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <parse_string@plt>
  mov    %rax,-0xb0(%rbp)
  mov    -0xb0(%rbp),%rax
  mov    %rax,%rdi
  call   <streamline_query@plt>
  mov    -0xb0(%rbp),%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <ast_to_string@plt>
  mov    %rax,-0xa8(%rbp)
  mov    -0xb8(%rbp),%rdx
  mov    -0xa8(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L28
  lea    D165(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L48
L28:
  mov    -0xb8(%rbp),%rdx
  mov    -0xa8(%rbp),%rax
  mov    %rax,%rsi
  lea    D149(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L48:
  mov    -0xa8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0xb0(%rbp),%rax
  mov    %rax,%rdi
  call   <free_ast_node@plt>
  lea    D209(%rip),%rax
  mov    %rax,-0xa0(%rbp)
  lea    D160(%rip),%rax
  mov    %rax,-0x98(%rbp)
  mov    -0xa0(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    -0xa0(%rbp),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <parse_string@plt>
  mov    %rax,-0x90(%rbp)
  mov    -0x90(%rbp),%rax
  mov    %rax,%rdi
  call   <streamline_query@plt>
  mov    -0x90(%rbp),%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <ast_to_string@plt>
  mov    %rax,-0x88(%rbp)
  mov    -0x98(%rbp),%rdx
  mov    -0x88(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L33
  lea    D13(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L129
L33:
  mov    -0x98(%rbp),%rdx
  mov    -0x88(%rbp),%rax
  mov    %rax,%rsi
  lea    D247(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L129:
  mov    -0x88(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x90(%rbp),%rax
  mov    %rax,%rdi
  call   <free_ast_node@plt>
  lea    D196(%rip),%rax
  mov    %rax,-0x80(%rbp)
  lea    D120(%rip),%rax
  mov    %rax,-0x78(%rbp)
  mov    -0x80(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    -0x80(%rbp),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <parse_string@plt>
  mov    %rax,-0x70(%rbp)
  mov    -0x70(%rbp),%rax
  mov    %rax,%rdi
  call   <streamline_query@plt>
  mov    -0x70(%rbp),%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <ast_to_string@plt>
  mov    %rax,-0x68(%rbp)
  mov    -0x78(%rbp),%rdx
  mov    -0x68(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L62
  lea    D233(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L98
L62:
  mov    -0x78(%rbp),%rdx
  mov    -0x68(%rbp),%rax
  mov    %rax,%rsi
  lea    D39(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L98:
  mov    -0x68(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x70(%rbp),%rax
  mov    %rax,%rdi
  call   <free_ast_node@plt>
  lea    D1(%rip),%rax
  mov    %rax,-0x60(%rbp)
  lea    D264(%rip),%rax
  mov    %rax,-0x58(%rbp)
  mov    -0x60(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    -0x60(%rbp),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <parse_string@plt>
  mov    %rax,-0x50(%rbp)
  mov    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <streamline_query@plt>
  mov    -0x50(%rbp),%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <ast_to_string@plt>
  mov    %rax,-0x48(%rbp)
  mov    -0x58(%rbp),%rdx
  mov    -0x48(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L23
  lea    D177(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L4
L23:
  mov    -0x58(%rbp),%rdx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rsi
  lea    D227(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L4:
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <free_ast_node@plt>
  lea    D107(%rip),%rax
  mov    %rax,-0x40(%rbp)
  lea    D238(%rip),%rax
  mov    %rax,-0x38(%rbp)
  mov    -0x40(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    -0x40(%rbp),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <parse_string@plt>
  mov    %rax,-0x30(%rbp)
  mov    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <streamline_query@plt>
  mov    -0x30(%rbp),%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <ast_to_string@plt>
  mov    %rax,-0x28(%rbp)
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L109
  lea    D55(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L119
L109:
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rax,%rsi
  lea    D18(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L119:
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <free_ast_node@plt>
  lea    D54(%rip),%rax
  mov    %rax,-0x20(%rbp)
  lea    D54(%rip),%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    -0x20(%rbp),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <parse_string@plt>
  mov    %rax,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <streamline_query@plt>
  mov    -0x10(%rbp),%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <ast_to_string@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x18(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L135
  lea    D90(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L49
L135:
  mov    -0x18(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  mov    %rax,%rsi
  lea    D202(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L49:
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <free_ast_node@plt>
  nop
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D188
datatype: string
name: extract_symbolic_data
arguments: data_tag: D256
datatype: string
name: extract_symbolic_data
arguments: data_tag: D283
datatype: string
name: extract_symbolic_data
arguments: data_tag: D64
datatype: string
name: extract_symbolic_data
arguments: data_tag: D280
datatype: string
name: extract_symbolic_data
arguments: data_tag: D153
datatype: string
name: extract_symbolic_data
arguments: data_tag: D160
datatype: string
name: extract_symbolic_data
arguments: data_tag: D165
datatype: string
name: extract_symbolic_data
arguments: data_tag: D149
datatype: string
name: extract_symbolic_data
arguments: data_tag: D209
datatype: string
name: extract_symbolic_data
arguments: data_tag: D13
datatype: string
name: extract_symbolic_data
arguments: data_tag: D247
datatype: string
name: extract_symbolic_data
arguments: data_tag: D196
datatype: string
name: extract_symbolic_data
arguments: data_tag: D120
datatype: string
name: extract_symbolic_data
arguments: data_tag: D233
datatype: string
name: extract_symbolic_data
arguments: data_tag: D39
datatype: string
name: extract_symbolic_data
arguments: data_tag: D1
datatype: string
name: extract_symbolic_data
arguments: data_tag: D264
datatype: string
name: extract_symbolic_data
arguments: data_tag: D177
datatype: string
name: extract_symbolic_data
arguments: data_tag: D227
datatype: string
name: extract_symbolic_data
arguments: data_tag: D107
datatype: string
name: extract_symbolic_data
arguments: data_tag: D238
datatype: string
name: extract_symbolic_data
arguments: data_tag: D55
datatype: string
name: extract_symbolic_data
arguments: data_tag: D18
datatype: string
name: extract_symbolic_data
arguments: data_tag: D54
datatype: string
name: extract_symbolic_data
arguments: data_tag: D90
datatype: string
name: extract_symbolic_data
arguments: data_tag: D202
datatype: string

tool: D188: Starting Query Planning Tests..

tool: D256: a*(b|b?bb?)c

tool: D283: (b|bb?)c

tool: D64: Test 1 Passed.

tool: D280: Test 1 Failed: %s compared to %s


tool: D153: a*(bc|d)+

tool: D160: (bc|d)

tool: D165: Test 2 Passed.

tool: D149: Test 2 Failed: %s compared to %s


tool: D209: a*(bc|d)b?

tool: D13: Test 3 Passed.

tool: D247: Test 3 Failed: %s compared to %s


tool: D196: a?(b*cd|e?fg?)h

tool: D120: (cd|fg?)h

tool: D233: Test 4 Passed.

tool: D39: Test 4 Failed: %s compared to %s


tool: D1: a*b?cd(e*|f)g?

tool: D264: cd

tool: D177: Test 5 Passed.

tool: D227: Test 5 Failed: %s compared to %s


tool: D107: a+bc+

tool: D238: abc

tool: D55: Test 6 Passed.

tool: D18: Test 6 Failed: %s compared to %s


tool: D54: ab*c

tool: D90: Test 7 Passed.

tool: D202: Test 7 Failed: %s compared to %s


assistant: ```c
void testQueryPlanning(void) {
  printf("Starting Query Planning Tests..\n");
  {
    struct ast_node *result;
    char *stringResult;
    char *query1 = "a*(b|b?bb?)c";
    char *valid = "(b|bb?)c";
    result = parse_string(strlen(query1), query1);
    streamline_query(result);
    stringResult = ast_to_string(result, 0, 0);
    if (0 == strcmp(stringResult, valid)) {
      printf("Test 1 Passed.\n");
    } else {
      printf("Test 1 Failed: %s compared to %s\n", stringResult, valid);
      exit(1);
    }
    free(stringResult);
    free_ast_node(result);
  }
  {
    struct ast_node *result;
    char *stringResult;
    char *query1 = "a*(bc|d)+";
    char *valid = "(bc|d)";
    result = parse_string(strlen(query1), query1);
    streamline_query(result);
    stringResult = ast_to_string(result, 0, 0);
    if (0 == strcmp(stringResult, valid)) {
      printf("Test 2 Passed.\n");
    } else {
      printf("Test 2 Failed: %s compared to %s\n", stringResult, valid);
      exit(1);
    }
    free(stringResult);
    free_ast_node(result);
  }
  {
    struct ast_node *result;
    char *stringResult;
    char *query1 = "a*(bc|d)b?";
    char *valid = "(bc|d)";
    result = parse_string(strlen(query1), query1);
    streamline_query(result);
    stringResult = ast_to_string(result, 0, 0);
    if (0 == strcmp(stringResult, valid)) {
      printf("Test 3 Passed.\n");
    } else {
      printf("Test 3 Failed: %s compared to %s\n", stringResult, valid);
      exit(1);
    }
    free(stringResult);
    free_ast_node(result);
  }
  {
    struct ast_node *result;
    char *stringResult;
    char *query1 = "a?(b*cd|e?fg?)h";
    char *valid = "(cd|fg?)h";
    result = parse_string(strlen(query1), query1);
    streamline_query(result);
    stringResult = ast_to_string(result, 0, 0);
    if (0 == strcmp(stringResult, valid)) {
      printf("Test 4 Passed.\n");
    } else {
      printf("Test 4 Failed: %s compared to %s\n", stringResult, valid);
      exit(1);
    }
    free(stringResult);
    free_ast_node(result);
  }
  {
    struct ast_node *result;
    char *stringResult;
    char *query1 = "a*b?cd(e*|f)g?";
    char *valid = "cd";
    result = parse_string(strlen(query1), query1);
    streamline_query(result);
    stringResult = ast_to_string(result, 0, 0);
    if (0 == strcmp(stringResult, valid)) {
      printf("Test 5 Passed.\n");
    } else {
      printf("Test 5 Failed: %s compared to %s\n", stringResult, valid);
      exit(1);
    }
    free(stringResult);
    free_ast_node(result);
  }
  {
    struct ast_node *result;
    char *stringResult;
    char *query1 = "a+bc+";
    char *valid = "abc";
    result = parse_string(strlen(query1), query1);
    streamline_query(result);
    stringResult = ast_to_string(result, 0, 0);
    if (0 == strcmp(stringResult, valid)) {
      printf("Test 6 Passed.\n");
    } else {
      printf("Test 6 Failed: %s compared to %s\n", stringResult, valid);
      exit(1);
    }
    free(stringResult);
    free_ast_node(result);
  }
  {
    struct ast_node *result;
    char *stringResult;
    char *query1 = "ab*c";
    char *valid = "ab*c";
    result = parse_string(strlen(query1), query1);
    streamline_query(result);
    stringResult = ast_to_string(result, 0, 0);
    if (0 == strcmp(stringResult, valid)) {
      printf("Test 7 Passed.\n");
    } else {
      printf("Test 7 Failed: %s compared to %s\n", stringResult, valid);
      exit(1);
    }
    free(stringResult);
    free_ast_node(result);
  }
}
```