// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::compile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, exprtk::expression<double>&)
inline bool compile(const std::string& expression_string, expression<T>& expr)
      {
         state_               .reset();
         error_list_          .clear();
         brkcnt_list_         .clear();
         synthesis_error_     .clear();
         immutable_memory_map_.reset();
         immutable_symtok_map_.clear();
         current_state_stack_ .clear();
         assert_ids_          .clear();
         sem_                 .cleanup();

         return_cleanup();

         if (!valid_settings())
         {
            return false;
         }

         expression_generator_.set_allocator(node_allocator_);

         if (expression_string.empty())
         {
            set_error(make_error(
               parser_error::e_syntax,
               "ERR001 - Empty expression!",
               exprtk_error_location));

            return false;
         }

         if (!init(expression_string))
         {
            process_lexer_errors();
            return false;
         }

         if (lexer().empty())
         {
            set_error(make_error(
               parser_error::e_syntax,
               "ERR002 - Empty expression!",
               exprtk_error_location));

            return false;
         }

         if (halt_compilation_check())
         {
            exprtk_debug(("halt_compilation_check() - compile checkpoint 0\n"));
            sem_.cleanup();
            return false;
         }

         if (!run_assemblies())
         {
            sem_.cleanup();
            return false;
         }

         if (halt_compilation_check())
         {
            exprtk_debug(("halt_compilation_check() - compile checkpoint 1\n"));
            sem_.cleanup();
            return false;
         }

         symtab_store_.symtab_list_ = expr.get_symbol_table_list();
         dec_.clear();

         lexer().begin();

         next_token();

         expression_node_ptr e = parse_corpus();

         if ((0 != e) && (token_t::e_eof == current_token().type))
         {
            bool* retinvk_ptr = 0;

            if (state_.return_stmt_present)
            {
               dec_.return_present_ = true;

               e = expression_generator_
                     .return_envelope(e, results_context_, retinvk_ptr);
            }

            expr.set_expression(e);
            expr.set_retinvk(retinvk_ptr);

            register_local_vars(expr);
            register_return_results(expr);

            return !(!expr);
         }
         else
         {
            if (error_list_.empty())
            {
               set_error(make_error(
                  parser_error::e_syntax,
                  current_token(),
                  "ERR003 - Invalid expression encountered",
                  exprtk_error_location));
            }

            if ((0 != e) && branch_deletable(e))
            {
               destroy_node(e);
            }

            dec_.clear    ();
            sem_.cleanup  ();
            return_cleanup();

            return false;
         }
      }

// Assembly:
subq $0x3b8, %rsp            # imm = 0x3B8
movq %rdi, 0x3a8(%rsp)
movq %rsi, 0x3a0(%rsp)
movq %rdx, 0x398(%rsp)
movq 0x3a8(%rsp), %rdi
movq %rdi, 0x28(%rsp)
addq $0x3a8, %rdi            # imm = 0x3A8
callq 0x253200
movq 0x28(%rsp), %rdi
addq $0x308, %rdi            # imm = 0x308
callq 0x3718e0
movq 0x28(%rsp), %rdi
addq $0x358, %rdi            # imm = 0x358
callq 0x371920
movq 0x28(%rsp), %rdi
addq $0x510, %rdi            # imm = 0x510
callq 0x11b450
movq 0x28(%rsp), %rdi
addq $0x5e8, %rdi            # imm = 0x5E8
callq 0x371960
movq 0x28(%rsp), %rdi
addq $0x618, %rdi            # imm = 0x618
callq 0x371970
movq 0x28(%rsp), %rdi
addq $0x5d0, %rdi            # imm = 0x5D0
callq 0x371980
movq 0x28(%rsp), %rdi
addq $0x8f8, %rdi            # imm = 0x8F8
callq 0x3719a0
movq 0x28(%rsp), %rdi
addq $0x530, %rdi            # imm = 0x530
callq 0x3719b0
movq 0x28(%rsp), %rdi
callq 0x371a50
movq 0x28(%rsp), %rdi
callq 0x371ac0
testb $0x1, %al
jne 0x22f065
movb $0x0, 0x3b7(%rsp)
jmp 0x22f7ed
movq 0x28(%rsp), %rsi
movq %rsi, %rdi
addq $0x220, %rdi            # imm = 0x220
addq $0x290, %rsi            # imm = 0x290
callq 0x371e20
movq 0x3a0(%rsp), %rdi
callq 0x11b260
testb $0x1, %al
jne 0x22f096
jmp 0x22f230
leaq 0x2cf(%rsp), %rdi
movq %rdi, 0x20(%rsp)
callq 0x11b6f0
movq 0x20(%rsp), %rdx
leaq 0x377e44(%rip), %rsi    # 0x5a6ef8
leaq 0x2d0(%rsp), %rdi
callq 0x134520
jmp 0x22f0c3
leaq 0x278(%rsp), %rdi
movl $0x602a, %esi           # imm = 0x602A
callq 0x371f20
jmp 0x22f0d7
leaq 0x377e35(%rip), %rsi    # 0x5a6f13
leaq 0x298(%rsp), %rdi
leaq 0x278(%rsp), %rdx
callq 0x29dd70
jmp 0x22f0f5
leaq 0x2f0(%rsp), %rdi
movl $0x1, %esi
leaq 0x2d0(%rsp), %rdx
leaq 0x298(%rsp), %rcx
callq 0x371e70
jmp 0x22f119
movq 0x28(%rsp), %rdi
leaq 0x2f0(%rsp), %rsi
callq 0x371e40
jmp 0x22f12d
leaq 0x2f0(%rsp), %rdi
callq 0x371330
leaq 0x298(%rsp), %rdi
callq 0x11b838
leaq 0x278(%rsp), %rdi
callq 0x11b838
leaq 0x2d0(%rsp), %rdi
callq 0x11b838
leaq 0x2cf(%rsp), %rdi
callq 0x11b820
movb $0x0, 0x3b7(%rsp)
jmp 0x22f7ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c0(%rsp)
movl %eax, 0x2bc(%rsp)
jmp 0x22f21e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c0(%rsp)
movl %eax, 0x2bc(%rsp)
jmp 0x22f211
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c0(%rsp)
movl %eax, 0x2bc(%rsp)
jmp 0x22f204
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c0(%rsp)
movl %eax, 0x2bc(%rsp)
jmp 0x22f1f7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c0(%rsp)
movl %eax, 0x2bc(%rsp)
leaq 0x2f0(%rsp), %rdi
callq 0x371330
leaq 0x298(%rsp), %rdi
callq 0x11b838
leaq 0x278(%rsp), %rdi
callq 0x11b838
leaq 0x2d0(%rsp), %rdi
callq 0x11b838
leaq 0x2cf(%rsp), %rdi
callq 0x11b820
jmp 0x22f7fe
movq 0x28(%rsp), %rdi
movq 0x3a0(%rsp), %rsi
callq 0x371f50
testb $0x1, %al
jne 0x22f25d
movq 0x28(%rsp), %rdi
callq 0x371fb0
movb $0x0, 0x3b7(%rsp)
jmp 0x22f7ed
movq 0x28(%rsp), %rdi
callq 0x3723b0
movq %rax, %rdi
callq 0x3723c0
testb $0x1, %al
jne 0x22f278
jmp 0x22f412
leaq 0x1af(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0x11b6f0
movq 0x18(%rsp), %rdx
leaq 0x377c89(%rip), %rsi    # 0x5a6f1f
leaq 0x1b0(%rsp), %rdi
callq 0x134520
jmp 0x22f2a5
leaq 0x168(%rsp), %rdi
movl $0x603a, %esi           # imm = 0x603A
callq 0x371f20
jmp 0x22f2b9
leaq 0x377c53(%rip), %rsi    # 0x5a6f13
leaq 0x188(%rsp), %rdi
leaq 0x168(%rsp), %rdx
callq 0x29dd70
jmp 0x22f2d7
leaq 0x1d0(%rsp), %rdi
movl $0x1, %esi
leaq 0x1b0(%rsp), %rdx
leaq 0x188(%rsp), %rcx
callq 0x371e70
jmp 0x22f2fb
movq 0x28(%rsp), %rdi
leaq 0x1d0(%rsp), %rsi
callq 0x371e40
jmp 0x22f30f
leaq 0x1d0(%rsp), %rdi
callq 0x371330
leaq 0x188(%rsp), %rdi
callq 0x11b838
leaq 0x168(%rsp), %rdi
callq 0x11b838
leaq 0x1b0(%rsp), %rdi
callq 0x11b838
leaq 0x1af(%rsp), %rdi
callq 0x11b820
movb $0x0, 0x3b7(%rsp)
jmp 0x22f7ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c0(%rsp)
movl %eax, 0x2bc(%rsp)
jmp 0x22f400
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c0(%rsp)
movl %eax, 0x2bc(%rsp)
jmp 0x22f3f3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c0(%rsp)
movl %eax, 0x2bc(%rsp)
jmp 0x22f3e6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c0(%rsp)
movl %eax, 0x2bc(%rsp)
jmp 0x22f3d9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c0(%rsp)
movl %eax, 0x2bc(%rsp)
leaq 0x1d0(%rsp), %rdi
callq 0x371330
leaq 0x188(%rsp), %rdi
callq 0x11b838
leaq 0x168(%rsp), %rdi
callq 0x11b838
leaq 0x1b0(%rsp), %rdi
callq 0x11b838
leaq 0x1af(%rsp), %rdi
callq 0x11b820
jmp 0x22f7fe
movq 0x28(%rsp), %rdi
callq 0x3723e0
testb $0x1, %al
jne 0x22f422
jmp 0x22f440
movq 0x28(%rsp), %rdi
addq $0x530, %rdi            # imm = 0x530
callq 0x3719b0
movb $0x0, 0x3b7(%rsp)
jmp 0x22f7ed
movq 0x28(%rsp), %rdi
callq 0x372720
testb $0x1, %al
jne 0x22f46c
movq 0x28(%rsp), %rdi
addq $0x530, %rdi            # imm = 0x530
callq 0x3719b0
movb $0x0, 0x3b7(%rsp)
jmp 0x22f7ed
movq 0x28(%rsp), %rdi
callq 0x3723e0
testb $0x1, %al
jne 0x22f47c
jmp 0x22f49a
movq 0x28(%rsp), %rdi
addq $0x530, %rdi            # imm = 0x530
callq 0x3719b0
movb $0x0, 0x3b7(%rsp)
jmp 0x22f7ed
movq 0x398(%rsp), %rsi
leaq 0x150(%rsp), %rdi
callq 0x373580
movq 0x28(%rsp), %rdi
addq $0x298, %rdi            # imm = 0x298
leaq 0x150(%rsp), %rsi
callq 0x3735b0
leaq 0x150(%rsp), %rdi
callq 0x23c480
movq 0x28(%rsp), %rdi
addq $0x2b0, %rdi            # imm = 0x2B0
callq 0x3735f0
movq 0x28(%rsp), %rdi
callq 0x3723b0
movq %rax, %rdi
callq 0x373640
movq 0x28(%rsp), %rdi
callq 0x373690
movq 0x28(%rsp), %rdi
callq 0x3736c0
movq %rax, 0x148(%rsp)
xorl %eax, %eax
cmpq 0x148(%rsp), %rax
je 0x22f5fd
movq 0x28(%rsp), %rdi
callq 0x373e90
movq %rax, %rcx
movl $0x6, %eax
cmpl (%rcx), %eax
jne 0x22f5fd
movq 0x28(%rsp), %rax
movq $0x0, 0x140(%rsp)
testb $0x1, 0x3ab(%rax)
je 0x22f592
movq 0x28(%rsp), %rax
movb $0x1, 0x2bb(%rax)
movq %rax, %rdi
addq $0x220, %rdi            # imm = 0x220
movq 0x148(%rsp), %rsi
movq 0x3d0(%rax), %rdx
leaq 0x140(%rsp), %rcx
callq 0x373ea0
movq %rax, 0x148(%rsp)
movq 0x398(%rsp), %rdi
movq 0x148(%rsp), %rsi
callq 0x23c3b0
movq 0x398(%rsp), %rdi
movq 0x140(%rsp), %rsi
callq 0x373f00
movq 0x28(%rsp), %rdi
movq 0x398(%rsp), %rsi
callq 0x373f30
movq 0x28(%rsp), %rdi
movq 0x398(%rsp), %rsi
callq 0x374140
movq 0x398(%rsp), %rdi
callq 0x374180
xorb $-0x1, %al
andb $0x1, %al
movb %al, 0x3b7(%rsp)
jmp 0x22f7ed
movq 0x28(%rsp), %rdi
addq $0x308, %rdi            # imm = 0x308
callq 0x3741c0
testb $0x1, %al
jne 0x22f617
jmp 0x22f78d
movq 0x28(%rsp), %rdi
callq 0x373e90
movq %rax, 0x8(%rsp)
leaq 0x77(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x11b6f0
movq 0x10(%rsp), %rdx
leaq 0x3778f9(%rip), %rsi    # 0x5a6f3a
leaq 0x78(%rsp), %rdi
callq 0x134520
jmp 0x22f64d
leaq 0x30(%rsp), %rdi
movl $0x6078, %esi           # imm = 0x6078
callq 0x371f20
jmp 0x22f65e
leaq 0x3778ae(%rip), %rsi    # 0x5a6f13
leaq 0x50(%rsp), %rdi
leaq 0x30(%rsp), %rdx
callq 0x29dd70
jmp 0x22f676
movq 0x8(%rsp), %rdx
leaq 0x98(%rsp), %rdi
movl $0x1, %esi
leaq 0x78(%rsp), %rcx
leaq 0x50(%rsp), %r8
callq 0x3741e0
jmp 0x22f699
movq 0x28(%rsp), %rdi
leaq 0x98(%rsp), %rsi
callq 0x371e40
jmp 0x22f6ad
leaq 0x98(%rsp), %rdi
callq 0x371330
leaq 0x50(%rsp), %rdi
callq 0x11b838
leaq 0x30(%rsp), %rdi
callq 0x11b838
leaq 0x78(%rsp), %rdi
callq 0x11b838
leaq 0x77(%rsp), %rdi
callq 0x11b820
jmp 0x22f78d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c0(%rsp)
movl %eax, 0x2bc(%rsp)
jmp 0x22f781
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c0(%rsp)
movl %eax, 0x2bc(%rsp)
jmp 0x22f777
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c0(%rsp)
movl %eax, 0x2bc(%rsp)
jmp 0x22f76d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c0(%rsp)
movl %eax, 0x2bc(%rsp)
jmp 0x22f763
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c0(%rsp)
movl %eax, 0x2bc(%rsp)
leaq 0x98(%rsp), %rdi
callq 0x371330
leaq 0x50(%rsp), %rdi
callq 0x11b838
leaq 0x30(%rsp), %rdi
callq 0x11b838
leaq 0x78(%rsp), %rdi
callq 0x11b838
leaq 0x77(%rsp), %rdi
callq 0x11b820
jmp 0x22f7fe
xorl %eax, %eax
cmpq 0x148(%rsp), %rax
je 0x22f7b9
movq 0x148(%rsp), %rdi
callq 0x23c7e0
testb $0x1, %al
jne 0x22f7ac
jmp 0x22f7b9
leaq 0x148(%rsp), %rdi
callq 0x23c830
movq 0x28(%rsp), %rdi
addq $0x2b0, %rdi            # imm = 0x2B0
callq 0x3735f0
movq 0x28(%rsp), %rdi
addq $0x530, %rdi            # imm = 0x530
callq 0x3719b0
movq 0x28(%rsp), %rdi
callq 0x371a50
movb $0x0, 0x3b7(%rsp)
movb 0x3b7(%rsp), %al
andb $0x1, %al
addq $0x3b8, %rsp            # imm = 0x3B8
retq
movq 0x2c0(%rsp), %rdi
callq 0x11b4e0
nopl (%rax,%rax)