// File: cla7aye15I4nd[P]basic_interpreter/./lib/program.hpp
// Function: basic::basic_interpreter::eval(__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>> const&, __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>> const&, __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>> const&, std::vector<__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>, std::allocator<__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>>> const&)
int eval(const expr_iter& begin,
                 const expr_iter& end,
                 const expr_iter& start,
                 const std::vector<expr_iter>& match) {
            std::vector<int> atom;
            std::vector<char> oper;
            for (auto ptr = begin; ptr != end; ptr++) {
                char c = (*ptr)[0];
                if (c == '+' || c == '-' || c == '*' || c == '/')
                    oper.emplace_back(c);
                else {
                    if (c == '(') {
                        atom.emplace_back(eval(ptr + 1, match[ptr - start], start, match));
                        ptr = match[ptr - start];
                    } else {
                        atom.emplace_back(eval(*ptr));
                    }
                    while (!oper.empty() && oper.back() != '+' && oper.back() != '-') {
                        char op = oper.back(); oper.pop_back();
                        int y = atom.back(); atom.pop_back();
                        int x = atom.back(); atom.pop_back();
                        if (op == '*')
                            atom.emplace_back(x * y);
                        else if (op == '/') {
                            ASSERT(y, DIVIDE_BY_ZERO);
                            atom.emplace_back(x / y);
                        }
                    }
                }
            }

            int result = *atom.begin();
            for (size_t p = 0; p < oper.size(); ++p) {
                if (oper[p] == '+') result += atom[p + 1];
                else result -= atom[p + 1];
            }
            return result;
        }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x100, %rsp            # imm = 0x100
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xc0(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x9990
leaq -0x58(%rbp), %rdi
callq 0x99b0
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x60(%rbp)
movq -0x18(%rbp), %rsi
leaq -0x60(%rbp), %rdi
callq 0x8460
testb $0x1, %al
jne 0x87cd
jmp 0x8aac
leaq -0x60(%rbp), %rdi
callq 0x6e70
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x3430
movq %rax, -0xc8(%rbp)
jmp 0x87eb
movq -0xc8(%rbp), %rax
movb (%rax), %al
movb %al, -0x61(%rbp)
movsbl -0x61(%rbp), %eax
cmpl $0x2b, %eax
je 0x881b
movsbl -0x61(%rbp), %eax
cmpl $0x2d, %eax
je 0x881b
movsbl -0x61(%rbp), %eax
cmpl $0x2a, %eax
je 0x881b
movsbl -0x61(%rbp), %eax
cmpl $0x2f, %eax
jne 0x8852
leaq -0x58(%rbp), %rdi
leaq -0x61(%rbp), %rsi
callq 0x99d0
jmp 0x882a
jmp 0x8a93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x9d40
leaq -0x40(%rbp), %rdi
callq 0x9da0
jmp 0x8ba7
movsbl -0x61(%rbp), %eax
cmpl $0x28, %eax
jne 0x890d
leaq -0x60(%rbp), %rdi
movq %rdi, -0xe0(%rbp)
movl $0x1, %esi
callq 0x71c0
movq -0xe0(%rbp), %rdi
movq %rax, -0x80(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0xd8(%rbp)
movq -0x20(%rbp), %rsi
callq 0x8510
movq -0xd8(%rbp), %rdi
movq %rax, %rsi
callq 0x9ad0
movq -0xc0(%rbp), %rdi
movq %rax, %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
leaq -0x80(%rbp), %rsi
callq 0x8770
movl %eax, -0xcc(%rbp)
jmp 0x88c5
movl -0xcc(%rbp), %eax
movl %eax, -0x78(%rbp)
leaq -0x40(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x9a50
jmp 0x88dd
movq -0x28(%rbp), %rax
movq %rax, -0xe8(%rbp)
movq -0x20(%rbp), %rsi
leaq -0x60(%rbp), %rdi
callq 0x8510
movq -0xe8(%rbp), %rdi
movq %rax, %rsi
callq 0x9ad0
movq (%rax), %rax
movq %rax, -0x60(%rbp)
jmp 0x894d
leaq -0x60(%rbp), %rdi
callq 0x6e70
movq -0xc0(%rbp), %rdi
movq %rax, %rsi
callq 0x9af0
movl %eax, -0xec(%rbp)
jmp 0x892d
movl -0xec(%rbp), %eax
movl %eax, -0x84(%rbp)
leaq -0x40(%rbp), %rdi
leaq -0x84(%rbp), %rsi
callq 0x9a50
jmp 0x894b
jmp 0x894d
jmp 0x894f
leaq -0x58(%rbp), %rdi
callq 0x9b70
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0xed(%rbp)
jne 0x8998
leaq -0x58(%rbp), %rdi
callq 0x9bb0
movsbl (%rax), %ecx
xorl %eax, %eax
cmpl $0x2b, %ecx
movb %al, -0xed(%rbp)
je 0x8998
leaq -0x58(%rbp), %rdi
callq 0x9bb0
movsbl (%rax), %eax
cmpl $0x2d, %eax
setne %al
movb %al, -0xed(%rbp)
movb -0xed(%rbp), %al
testb $0x1, %al
jne 0x89a7
jmp 0x8a91
leaq -0x58(%rbp), %rdi
callq 0x9bb0
movb (%rax), %al
movb %al, -0x85(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x9bf0
leaq -0x40(%rbp), %rdi
callq 0x9c20
movl (%rax), %eax
movl %eax, -0x8c(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x9c60
leaq -0x40(%rbp), %rdi
callq 0x9c20
movl (%rax), %eax
movl %eax, -0x90(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x9c60
movsbl -0x85(%rbp), %eax
cmpl $0x2a, %eax
jne 0x8a2a
movl -0x90(%rbp), %eax
movl -0x8c(%rbp), %ecx
imull %ecx, %eax
movl %eax, -0x94(%rbp)
leaq -0x40(%rbp), %rdi
leaq -0x94(%rbp), %rsi
callq 0x9a50
jmp 0x8a28
jmp 0x8a8c
movsbl -0x85(%rbp), %eax
cmpl $0x2f, %eax
jne 0x8a8a
cmpl $0x0, -0x8c(%rbp)
jne 0x8a61
movl $0x1, %edi
callq 0x3110
movq %rax, %rdi
leaq 0x11315(%rip), %rsi     # 0x19d68
xorl %eax, %eax
movl %eax, %edx
callq 0x33c0
jmp 0x8bb0
movl -0x90(%rbp), %eax
movl -0x8c(%rbp), %ecx
cltd
idivl %ecx
movl %eax, -0x98(%rbp)
leaq -0x40(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x9a50
jmp 0x8a88
jmp 0x8a8a
jmp 0x8a8c
jmp 0x894f
jmp 0x8a93
jmp 0x8a95
leaq -0x60(%rbp), %rdi
xorl %esi, %esi
callq 0x8730
movq %rax, -0xa0(%rbp)
jmp 0x87b7
leaq -0x40(%rbp), %rdi
callq 0x9c90
movq %rax, -0xb0(%rbp)
leaq -0xb0(%rbp), %rdi
callq 0x9cc0
movl (%rax), %eax
movl %eax, -0xa4(%rbp)
movq $0x0, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0xf8(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x9ce0
movq %rax, %rcx
movq -0xf8(%rbp), %rax
cmpq %rcx, %rax
jae 0x8b7a
movq -0xb8(%rbp), %rsi
leaq -0x58(%rbp), %rdi
callq 0x9d00
movsbl (%rax), %eax
cmpl $0x2b, %eax
jne 0x8b3d
movq -0xb8(%rbp), %rsi
addq $0x1, %rsi
leaq -0x40(%rbp), %rdi
callq 0x9d20
movl (%rax), %eax
addl -0xa4(%rbp), %eax
movl %eax, -0xa4(%rbp)
jmp 0x8b61
movq -0xb8(%rbp), %rsi
addq $0x1, %rsi
leaq -0x40(%rbp), %rdi
callq 0x9d20
movl (%rax), %ecx
movl -0xa4(%rbp), %eax
subl %ecx, %eax
movl %eax, -0xa4(%rbp)
jmp 0x8b63
movq -0xb8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xb8(%rbp)
jmp 0x8adb
movl -0xa4(%rbp), %eax
movl %eax, -0xfc(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x9d40
leaq -0x40(%rbp), %rdi
callq 0x9da0
movl -0xfc(%rbp), %eax
addq $0x100, %rsp            # imm = 0x100
popq %rbp
retq
movq -0x70(%rbp), %rdi
callq 0x33e0