// File: cla7aye15I4nd[P]basic_interpreter/./lib/program.hpp
// Function: basic::basic_interpreter::check(basic::basic_interpreter::step)
bool check(step s) {
            switch (s.type) {
            case 1:
                REPORT(s.expr.size() < 3);
                REPORT(!is_var(s.expr[0]));
                REPORT(s.expr[1] != "=");
                REPORT(!check_expr(s.expr.begin() + 2, s.expr.end()));
                break;
            case 2:
                //REPORT(s.expr.size() < 1);
                REPORT(!check_expr(s.expr.begin(), s.expr.end()));
                break;
            case 3:
                REPORT(s.expr.size() != 1);
                REPORT(!check_expr(s.expr.begin(), s.expr.end()));
                break;
            case 4:
                REPORT(s.expr.size() != 0);
                break;
            case 5:
                REPORT(s.expr.size() != 1);
                REPORT(!is_digit(s.expr[0]));
                break;
            case 6:
                REPORT(s.expr.size() < 5);
                REPORT(!is_digit(*(s.expr.end() - 1)));
                REPORT(*(s.expr.end() - 2) != "THEN");
                REPORT(!check_expr(s.expr.begin(), s.expr.end() - 2));
            }

            return true;
        }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rsi, -0xa0(%rbp)
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x98(%rbp)
movl (%rsi), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x90(%rbp)
subl $0x5, %eax
ja 0xc57a
movq -0x90(%rbp), %rax
leaq 0x4dd7(%rip), %rcx      # 0x11020
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0xa0(%rbp), %rdi
addq $0x8, %rdi
callq 0xb390
cmpq $0x3, %rax
jae 0xc271
movb $0x0, -0x1(%rbp)
jmp 0xc57e
movq -0xa0(%rbp), %rdi
addq $0x8, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x5d00
movq %rax, %rdi
callq 0x3d40
testb $0x1, %al
jne 0xc29a
movb $0x0, -0x1(%rbp)
jmp 0xc57e
movq -0xa0(%rbp), %rdi
addq $0x8, %rdi
movl $0x1, %esi
callq 0x5d00
movq %rax, %rdi
leaq 0x4e30(%rip), %rsi      # 0x110e9
callq 0xe640
testb $0x1, %al
jne 0xc2c4
jmp 0xc2cd
movb $0x0, -0x1(%rbp)
jmp 0xc57e
movq -0xa0(%rbp), %rdi
addq $0x8, %rdi
callq 0x68c0
movq %rax, -0x28(%rbp)
leaq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0x71c0
movq -0xa0(%rbp), %rdi
movq %rax, -0x20(%rbp)
addq $0x8, %rdi
callq 0x68f0
movq -0x98(%rbp), %rdi
movq %rax, -0x30(%rbp)
leaq -0x20(%rbp), %rsi
leaq -0x30(%rbp), %rdx
callq 0xe670
xorb $-0x1, %al
testb $0x1, %al
jne 0xc323
jmp 0xc32c
movb $0x0, -0x1(%rbp)
jmp 0xc57e
jmp 0xc57a
movq -0xa0(%rbp), %rdi
addq $0x8, %rdi
callq 0x68c0
movq -0xa0(%rbp), %rdi
movq %rax, -0x38(%rbp)
addq $0x8, %rdi
callq 0x68f0
movq -0x98(%rbp), %rdi
movq %rax, -0x40(%rbp)
leaq -0x38(%rbp), %rsi
leaq -0x40(%rbp), %rdx
callq 0xe670
xorb $-0x1, %al
testb $0x1, %al
jne 0xc375
jmp 0xc37e
movb $0x0, -0x1(%rbp)
jmp 0xc57e
jmp 0xc57a
movq -0xa0(%rbp), %rdi
addq $0x8, %rdi
callq 0xb390
cmpq $0x1, %rax
je 0xc3a2
movb $0x0, -0x1(%rbp)
jmp 0xc57e
movq -0xa0(%rbp), %rdi
addq $0x8, %rdi
callq 0x68c0
movq -0xa0(%rbp), %rdi
movq %rax, -0x48(%rbp)
addq $0x8, %rdi
callq 0x68f0
movq -0x98(%rbp), %rdi
movq %rax, -0x50(%rbp)
leaq -0x48(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq 0xe670
xorb $-0x1, %al
testb $0x1, %al
jne 0xc3e6
jmp 0xc3ef
movb $0x0, -0x1(%rbp)
jmp 0xc57e
jmp 0xc57a
movq -0xa0(%rbp), %rdi
addq $0x8, %rdi
callq 0xb390
cmpq $0x0, %rax
je 0xc413
movb $0x0, -0x1(%rbp)
jmp 0xc57e
jmp 0xc57a
movq -0xa0(%rbp), %rdi
addq $0x8, %rdi
callq 0xb390
cmpq $0x1, %rax
je 0xc437
movb $0x0, -0x1(%rbp)
jmp 0xc57e
movq -0xa0(%rbp), %rdi
addq $0x8, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x5d00
movq %rax, %rdi
callq 0x3c90
testb $0x1, %al
jne 0xc460
movb $0x0, -0x1(%rbp)
jmp 0xc57e
jmp 0xc57a
movq -0xa0(%rbp), %rdi
addq $0x8, %rdi
callq 0xb390
cmpq $0x5, %rax
jae 0xc484
movb $0x0, -0x1(%rbp)
jmp 0xc57e
movq -0xa0(%rbp), %rdi
addq $0x8, %rdi
callq 0x68f0
movq %rax, -0x60(%rbp)
leaq -0x60(%rbp), %rdi
movl $0x1, %esi
callq 0x6ac0
movq %rax, -0x58(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x6e70
movq %rax, %rdi
callq 0x3c90
xorb $-0x1, %al
testb $0x1, %al
jne 0xc4c3
jmp 0xc4cc
movb $0x0, -0x1(%rbp)
jmp 0xc57e
movq -0xa0(%rbp), %rdi
addq $0x8, %rdi
callq 0x68f0
movq %rax, -0x70(%rbp)
leaq -0x70(%rbp), %rdi
movl $0x2, %esi
callq 0x6ac0
movq %rax, -0x68(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x6e70
movq %rax, %rdi
leaq 0x4c47(%rip), %rsi      # 0x1114c
callq 0xe640
testb $0x1, %al
jne 0xc510
jmp 0xc516
movb $0x0, -0x1(%rbp)
jmp 0xc57e
movq -0xa0(%rbp), %rdi
addq $0x8, %rdi
callq 0x68c0
movq -0xa0(%rbp), %rdi
movq %rax, -0x78(%rbp)
addq $0x8, %rdi
callq 0x68f0
movq %rax, -0x88(%rbp)
leaq -0x88(%rbp), %rdi
movl $0x2, %esi
callq 0x6ac0
movq -0x98(%rbp), %rdi
movq %rax, -0x80(%rbp)
leaq -0x78(%rbp), %rsi
leaq -0x80(%rbp), %rdx
callq 0xe670
xorb $-0x1, %al
testb $0x1, %al
jne 0xc572
jmp 0xc578
movb $0x0, -0x1(%rbp)
jmp 0xc57e
jmp 0xc57a
movb $0x1, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0xa0, %rsp
popq %rbp
retq
nopl (%rax)