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

```asm
<if_statement>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  movq   $0x0,-0x28(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x38(%rbp),%rax
  mov    $0x49,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <eat@plt>
  mov    -0x38(%rbp),%rax
  mov    $0xa,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <eat@plt>
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <expr@plt>
  cltq
  mov    %rax,-0x10(%rbp)
  mov    -0x10(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <bool@plt>
  mov    -0x10(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <read_expr@plt>
  mov    %eax,%edx
  mov    -0x38(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <lfalse_expr@plt>
  cltq
  mov    %rax,-0x10(%rbp)
  mov    -0x38(%rbp),%rax
  mov    $0xb,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <eat@plt>
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <label@plt>
  cltq
  mov    %rax,-0x28(%rbp)
  mov    -0x10(%rbp),%rdx
  mov    -0x28(%rbp),%rcx
  mov    -0x38(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <branch@plt>
  cltq
  mov    %rax,-0x18(%rbp)
  mov    -0x10(%rbp),%rdx
  mov    -0x40(%rbp),%rcx
  mov    -0x38(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <flatten@plt>
  mov    -0x18(%rbp),%rdx
  mov    -0x40(%rbp),%rcx
  mov    -0x38(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <flatten@plt>
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <label@plt>
  mov    %eax,%edx
  mov    -0x40(%rbp),%rcx
  mov    -0x38(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <flatten@plt>
  mov    -0x40(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <statement@plt>
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <peek@plt>
  cmp    $0x43,%eax
  jne    L17
  mov    -0x38(%rbp),%rax
  mov    $0x43,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <eat@plt>
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <label@plt>
  cltq
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rcx
  mov    -0x38(%rbp),%rax
  mov    $0x0,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <branch@plt>
  cltq
  mov    %rax,-0x20(%rbp)
  mov    -0x20(%rbp),%rdx
  mov    -0x40(%rbp),%rcx
  mov    -0x38(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <flatten@plt>
  mov    -0x28(%rbp),%rdx
  mov    -0x40(%rbp),%rcx
  mov    -0x38(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <flatten@plt>
  mov    -0x40(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <statement@plt>
  mov    -0x8(%rbp),%rdx
  mov    -0x40(%rbp),%rcx
  mov    -0x38(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <flatten@plt>
  jmp    L13
L17:
  mov    -0x28(%rbp),%rdx
  mov    -0x40(%rbp),%rcx
  mov    -0x38(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <flatten@plt>
L13:
  nop
  leave
  ret
```

assistant: ```c
void if_statement(struct compile_state *state, struct triple *first) {
  struct triple *test, *jmp1, *jmp2, *middle, *end;
  jmp1 = jmp2 = middle = 0;
  eat(state, 73);
  eat(state, 10);
  test = expr(state);
  bool(state, test);
  test = lfalse_expr(state, read_expr(state, test));
  eat(state, 11);
  middle = label(state);
  jmp1 = branch(state, middle, test);
  flatten(state, first, test);
  flatten(state, first, jmp1);
  flatten(state, first, label(state));
  statement(state, first);
  if (peek(state) == 67) {
    eat(state, 67);
    end = label(state);
    jmp2 = branch(state, end, 0);
    flatten(state, first, jmp2);
    flatten(state, first, middle);
    statement(state, first);
    flatten(state, first, end);
  } else {
    flatten(state, first, middle);
  }
}
```