// File: /workspace/github_cpp_makefile_star2_O1/ArashPartow[P]exprtk-extras/exprtk_truthtable_gen.cpp
// Function: void truth_table_generator<double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
void truth_table_generator(const std::string& boolean_expression)
{
   typedef exprtk::symbol_table<T>    symbol_table_t;
   typedef exprtk::expression<T>      expression_t;
   typedef exprtk::parser<T>          parser_t;
   typedef exprtk::parser_error::type err_t;
   typedef typename parser_t::settings_store settings_t;

   symbol_table_t symbol_table;

   expression_t expression;
   expression.register_symbol_table(symbol_table);

   static const std::size_t compile_options =
      settings_t::e_replacer            +
      settings_t::e_joiner              +
      settings_t::e_numeric_check       +
      settings_t::e_bracket_check       +
      settings_t::e_sequence_check      +
      settings_t::e_strength_reduction  +
      settings_t::e_disable_usr_on_rsrvd;

   parser_t parser(settings_t(compile_options)
                     .disable_all_base_functions    ()
                     .disable_all_control_structures());

   parser.enable_unknown_symbol_resolver();

   parser.dec().collect_variables() = true;
   parser.dec().collect_functions() = true;

   if (!parser.compile(boolean_expression,expression))
   {
      printf("Error: %s\tExpression: %s\n",
             parser.error().c_str(),
             boolean_expression.c_str());

      for (std::size_t i = 0; i < parser.error_count(); ++i)
      {
         err_t error = parser.get_error(i);

         printf("Error: %02d Position: %02d "
                "Type: [%s] "
                "Message: %s "
                "Expression: %s\n",
                static_cast<int>(i),
                static_cast<int>(error.token.position),
                exprtk::parser_error::to_str(error.mode).c_str(),
                error.diagnostic.c_str(),
                boolean_expression.c_str());

         exprtk::parser_error::update_error(error,boolean_expression);

         printf("Error[%02d] at line: %d column: %d\n",
                static_cast<int>(i),
                static_cast<int>(error.line_no),
                static_cast<int>(error.column_no));
      }

      return;
   }

   typedef typename parser_t::dependent_entity_collector::symbol_t dec_symbol_t;

   std::deque<dec_symbol_t> symbol_list;

   parser.dec().symbols(symbol_list);

   if (symbol_list.empty())
   {
      printf("Error: No variables found to build truth table.\n");
      return;
   }

   for (std::size_t i = 0; i < symbol_list.size(); ++i)
   {
      if (exprtk::details::imatch(symbol_list[i].first,"not"))
      {
         symbol_list.erase(symbol_list.begin() + i);

         if (i >= symbol_list.size())
            break;
      }

      if (parser_t::e_st_function == symbol_list[i].second)
      {
         printf("Error: call to function '%s' not allowed.\n",symbol_list[i].first.c_str());
         return;
      }
   }

   if (symbol_list.size() > 32)
   {
      printf("Error: no more than 32 unique variables allowed.\n");
      return;
   }

   unsigned int upper_bound = 1 << symbol_list.size();

   const int index_width = static_cast<int>(std::ceil(std::log10(upper_bound)));

   // Print truth table header
   printf(" #%s ",std::string(index_width - 1,' ').c_str());

   for (std::size_t i = 0; i < symbol_list.size(); ++i)
   {
      printf("| %s ",symbol_list[i].first.c_str());
   }

   printf("| %s \n",boolean_expression.c_str());

   for (std::size_t i = 0; i < upper_bound; ++i)
   {
      for (std::size_t j = 0; j < symbol_list.size(); ++j)
      {
         symbol_table.get_variable(symbol_list[j].first)->ref() = T((i & (1 << (symbol_list.size() - j - 1))) ? 0 : 1);
      }

      const std::size_t result = static_cast<std::size_t>(expression.value());

      printf(" %*d ", index_width, static_cast<int>(i));

      for (std::size_t j = 0; j < symbol_list.size(); ++j)
      {
         printf("| %d ",static_cast<int>(symbol_table.get_variable(symbol_list[j].first)->value()));
      }

      printf("| %d \n", static_cast<int>(result));
   }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xaf8, %rsp            # imm = 0xAF8
movq %rdi, 0x10(%rsp)
leaq 0x8(%rsp), %r14
movq %r14, %rdi
movl $0x1, %esi
callq 0x11a34a
leaq 0x190(%rsp), %rdi
callq 0x11a392
movq 0x198(%rsp), %rcx
movq 0x1a0(%rsp), %rax
subq %rcx, %rax
je 0x1194dc
sarq $0x3, %rax
cmpq $0x1, %rax
movq %rax, %rsi
adcq $0x0, %rsi
cmpq %r14, %rcx
je 0x1194ee
movq 0x8(%rsp), %rdx
cmpq (%rcx), %rdx
je 0x1194ee
addq $0x8, %rcx
movl $0x1, %edi
subq %rsi, %rdi
xorl %esi, %esi
cmpq %rsi, %rdi
je 0x1194dc
decq %rsi
cmpq %r14, %rcx
je 0x1194d4
leaq 0x8(%rcx), %r8
cmpq (%rcx), %rdx
movq %r8, %rcx
jne 0x1194bb
negq %rsi
cmpq %rax, %rsi
jb 0x1194ee
leaq 0x198(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x11d7da
leaq 0x40(%rsp), %rdi
movl $0x85f, %esi            # imm = 0x85F
callq 0x11a42c
leaq 0x50(%rsp), %r14
movq 0x18(%r14), %rcx
leaq 0x31fd53(%rip), %rdi    # 0x439260
leaq 0x32048c(%rip), %rsi    # 0x4399a0
movq %r14, %rdx
callq 0x11da54
leaq 0x80(%rsp), %r15
movq 0x18(%r15), %rcx
leaq 0x320591(%rip), %rdi    # 0x439ac0
leaq 0x32064a(%rip), %rsi    # 0x439b80
movq %r15, %rdx
callq 0x11da54
leaq 0x1d0(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x11a52c
leaq 0x140(%rsp), %rdi
callq 0x11d9dc
leaq 0x110(%rsp), %rdi
callq 0x11d9dc
leaq 0xe0(%rsp), %rdi
callq 0x11d9dc
leaq 0xb0(%rsp), %rdi
callq 0x11d9dc
movq %r15, %rdi
callq 0x11d9dc
movq %r14, %rdi
callq 0x11d9dc
leaq 0x5b0(%rsp), %rax
movb $0x1, -0x18(%rax)
movq %rax, -0x8(%rax)
movw $0x101, -0x128(%rax)    # imm = 0x101
leaq 0x1d0(%rsp), %rdi
leaq 0x190(%rsp), %rdx
movq 0x10(%rsp), %rsi
callq 0x11ad50
testb %al, %al
je 0x11993b
xorpd %xmm0, %xmm0
leaq 0x40(%rsp), %rdi
movapd %xmm0, 0x40(%rdi)
movapd %xmm0, 0x30(%rdi)
movapd %xmm0, 0x20(%rdi)
movapd %xmm0, 0x10(%rdi)
movapd %xmm0, (%rdi)
xorl %esi, %esi
callq 0x2c4200
leaq 0x480(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x11b960
movq 0x70(%rsp), %rax
cmpq 0x50(%rsp), %rax
je 0x119a22
leaq 0x28(%rsp), %r15
xorl %ebp, %ebp
movabsq $-0x3333333333333333, %r12 # imm = 0xCCCCCCCCCCCCCCCD
movq 0x88(%rsp), %rax
movq %rax, %rcx
subq 0x68(%rsp), %rcx
sarq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
leaq (%rcx,%rcx,2), %rax
movq 0x70(%rsp), %rcx
subq 0x78(%rsp), %rcx
sarq $0x3, %rcx
imulq %r12, %rcx
leaq (%rcx,%rax,4), %rcx
movq 0x50(%rsp), %rax
movq 0x60(%rsp), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
imulq %r12, %rdx
addq %rcx, %rdx
cmpq %rdx, %rbp
jae 0x1199a1
movq %rax, %rcx
subq 0x58(%rsp), %rcx
sarq $0x3, %rcx
imulq %r12, %rcx
addq %rbp, %rcx
cmpq $0xb, %rcx
ja 0x1196ab
leaq (,%rbp,4), %rcx
addq %rbp, %rcx
leaq (%rax,%rcx,8), %r13
jmp 0x1196f5
movq %rcx, %rax
testq %rcx, %rcx
jle 0x1196c6
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
jmp 0x1196dd
notq %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
notq %rdx
movq 0x68(%rsp), %rax
imulq $-0x1e0, %rdx, %rsi     # imm = 0xFE20
addq (%rax,%rdx,8), %rsi
leaq (%rcx,%rcx,4), %rax
leaq (%rsi,%rax,8), %r13
movq %r15, 0x18(%rsp)
leaq 0x18(%rsp), %rdi
leaq 0x1b1059(%rip), %rsi    # 0x2ca75f
leaq 0x1b1055(%rip), %rdx    # 0x2ca762
callq 0x11a2ba
movq 0x8(%r13), %r14
cmpq 0x20(%rsp), %r14
jne 0x119786
testq %r14, %r14
sete %bl
je 0x119791
movq %rbp, 0x38(%rsp)
movq (%r13), %rbp
movq 0x18(%rsp), %r13
movsbl (%rbp), %edi
callq 0x116410
movl %eax, %ebx
movsbl (%r13), %edi
callq 0x116410
cmpl %eax, %ebx
jne 0x11978a
movl $0x1, %ecx
movq %rcx, %r15
cmpq %rcx, %r14
je 0x119779
movsbl (%rbp,%r15), %edi
callq 0x116410
movl %eax, %ebx
movsbl (%r13,%r15), %edi
callq 0x116410
leaq 0x1(%r15), %rcx
cmpl %eax, %ebx
je 0x119751
cmpq %r14, %r15
setae %bl
leaq 0x28(%rsp), %r15
jmp 0x11978c
xorl %ebx, %ebx
jmp 0x119791
xorl %ebx, %ebx
movq 0x38(%rsp), %rbp
movq 0x18(%rsp), %rdi
cmpq %r15, %rdi
je 0x1197a8
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x116090
testb %bl, %bl
je 0x1198b0
movq 0x50(%rsp), %rax
movq 0x68(%rsp), %rsi
movq %rax, %rcx
subq 0x58(%rsp), %rcx
sarq $0x3, %rcx
imulq %r12, %rcx
addq %rbp, %rcx
cmpq $0xb, %rcx
ja 0x1197e0
leaq (,%rbp,4), %rcx
addq %rbp, %rcx
jmp 0x119824
movq %rcx, %rax
testq %rcx, %rcx
jle 0x1197fb
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
jmp 0x119812
notq %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
notq %rdx
leaq (%rsi,%rdx,8), %rsi
imulq $-0x1e0, %rdx, %rax     # imm = 0xFE20
addq (%rsi), %rax
leaq (%rcx,%rcx,4), %rcx
leaq (%rax,%rcx,8), %rax
movq %rax, 0x18(%rsp)
movq (%rsi), %rax
movq %rax, 0x20(%rsp)
addq $0x1e0, %rax            # imm = 0x1E0
movq %rax, 0x28(%rsp)
movq %rsi, 0x30(%rsp)
leaq 0x1b0(%rsp), %rdi
leaq 0x40(%rsp), %rsi
leaq 0x18(%rsp), %rdx
callq 0x2c5188
movq 0x88(%rsp), %rax
movq %rax, %rcx
subq 0x68(%rsp), %rcx
sarq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
leaq (%rcx,%rcx,2), %rax
movq 0x60(%rsp), %rcx
movq 0x70(%rsp), %rdx
subq 0x78(%rsp), %rdx
sarq $0x3, %rdx
imulq %r12, %rdx
leaq (%rdx,%rax,4), %rax
subq 0x50(%rsp), %rcx
sarq $0x3, %rcx
imulq %r12, %rcx
addq %rax, %rcx
cmpq %rcx, %rbp
jae 0x1199a1
movq 0x50(%rsp), %rdi
movq 0x68(%rsp), %rsi
movq %rdi, %rcx
subq 0x58(%rsp), %rcx
sarq $0x3, %rcx
imulq %r12, %rcx
addq %rbp, %rcx
cmpq $0xb, %rcx
ja 0x1198e4
leaq (,%rbp,4), %rax
addq %rbp, %rax
leaq (%rdi,%rax,8), %rax
jmp 0x119929
movq %rcx, %rax
testq %rcx, %rcx
jle 0x1198ff
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
jmp 0x119916
notq %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
notq %rdx
imulq $-0x1e0, %rdx, %rax     # imm = 0xFE20
addq (%rsi,%rdx,8), %rax
leaq (%rcx,%rcx,4), %rdx
leaq (%rax,%rdx,8), %rax
cmpl $0x5, 0x20(%rax)
je 0x119a33
incq %rbp
jmp 0x11962a
movq 0x4e8(%rsp), %r8
movabsq $-0x30c30c30c30c30c3, %r15 # imm = 0xCF3CF3CF3CF3CF3D
cmpq %r8, 0x508(%rsp)
je 0x1199fb
movq %r8, %rcx
subq 0x4f0(%rsp), %rcx
movq %rcx, %rax
sarq $0x3, %rax
imulq %r15, %rax
cmpq $0x3, %rax
jb 0x119f66
movq 0x500(%rsp), %rsi
testq %rcx, %rcx
jle 0x119f42
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq %rdx
jmp 0x119f58
movq 0x88(%rsp), %rax
movq %rax, %rcx
subq 0x68(%rsp), %rcx
sarq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
leaq (%rcx,%rcx,2), %rax
movq 0x60(%rsp), %rcx
movq 0x70(%rsp), %rdx
subq 0x78(%rsp), %rdx
sarq $0x3, %rdx
imulq %r12, %rdx
leaq (%rdx,%rax,4), %rax
subq 0x50(%rsp), %rcx
sarq $0x3, %rcx
imulq %r12, %rcx
addq %rax, %rcx
cmpq $0x21, %rcx
jb 0x119a51
leaq 0x1b5af2(%rip), %rdi    # 0x2cf4eb
jmp 0x119a29
movq %r14, 0x40(%rsp)
movabsq $0x726f727245206f4e, %rax # imm = 0x726F727245206F4E
movq %rax, 0x50(%rsp)
movq $0x8, 0x48(%rsp)
movb $0x0, 0x58(%rsp)
jmp 0x119f7e
leaq 0x1b5af3(%rip), %rdi    # 0x2cf51c
callq 0x1164e0
jmp 0x11a1f3
cmpq $0xb, %rcx
ja 0x119f20
leaq (,%rbp,4), %rax
addq %rbp, %rax
leaq (%rdi,%rax,8), %rax
jmp 0x11a1e2
movl $0x1, %ebx
shll %cl, %ebx
cvtsi2sd %rbx, %xmm0
callq 0x116250
callq 0x116510
cvttsd2si %xmm0, %eax
movq %rax, 0x38(%rsp)
decl %eax
movslq %eax, %rsi
leaq 0x18(%rsp), %rdi
movq %r15, (%rdi)
movl $0x20, %edx
callq 0x1162a0
movq 0x18(%rsp), %rsi
leaq 0x1b0f01(%rip), %rdi    # 0x2ca994
xorl %eax, %eax
callq 0x116050
movq 0x18(%rsp), %rdi
cmpq %r15, %rdi
je 0x119ab1
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x116090
movq $-0x1, %r14
leaq 0x1b0edb(%rip), %r15    # 0x2ca99a
xorl %r13d, %r13d
xorl %ebp, %ebp
movq 0x88(%rsp), %rax
movq %rax, %rcx
subq 0x68(%rsp), %rcx
sarq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
leaq (%rcx,%rcx,2), %rax
movq 0x70(%rsp), %rcx
subq 0x78(%rsp), %rcx
sarq $0x3, %rcx
imulq %r12, %rcx
leaq (%rcx,%rax,4), %rcx
movq 0x50(%rsp), %rax
movq 0x60(%rsp), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
imulq %r12, %rdx
addq %rcx, %rdx
cmpq %rdx, %rbp
jae 0x119ba3
movq %rax, %rdx
subq 0x58(%rsp), %rdx
sarq $0x3, %rdx
imulq %r12, %rdx
leaq (%rdx,%rbp), %rcx
cmpq $0xb, %rcx
ja 0x119b3a
addq %r13, %rax
jmp 0x119b87
testq %rcx, %rcx
jle 0x119b55
movq %rcx, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
jmp 0x119b6f
movq %r14, %rax
subq %rdx, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
notq %rdx
movq 0x68(%rsp), %rax
imulq $-0x1e0, %rdx, %rsi     # imm = 0xFE20
addq (%rax,%rdx,8), %rsi
leaq (%rcx,%rcx,4), %rax
leaq (%rsi,%rax,8), %rax
movq (%rax), %rsi
movq %r15, %rdi
xorl %eax, %eax
callq 0x116050
incq %rbp
addq $0x28, %r13
decq %r14
jmp 0x119ac4
movq 0x10(%rsp), %rax
movq (%rax), %rsi
leaq 0x1b0dee(%rip), %rdi    # 0x2ca9a0
xorl %eax, %eax
callq 0x116050
movl %ebx, %eax
movq %rax, 0x10(%rsp)
leaq 0x1b0de6(%rip), %r15    # 0x2ca9ad
xorl %r13d, %r13d
xorl %r14d, %r14d
movq 0x88(%rsp), %rax
movq %rax, %rcx
subq 0x68(%rsp), %rcx
sarq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
leaq (%rcx,%rcx,2), %rax
movq 0x70(%rsp), %rcx
subq 0x78(%rsp), %rcx
sarq $0x3, %rcx
imulq %r12, %rcx
leaq (%rcx,%rax,4), %rcx
movq 0x50(%rsp), %rax
movq 0x60(%rsp), %rbp
subq %rax, %rbp
sarq $0x3, %rbp
imulq %r12, %rbp
addq %rcx, %rbp
cmpq %rbp, %r14
jae 0x119d4d
movq %rax, %rcx
subq 0x58(%rsp), %rcx
sarq $0x3, %rcx
imulq %r12, %rcx
addq %r14, %rcx
cmpq $0xb, %rcx
ja 0x119c47
leaq (%r14,%r14,4), %rcx
leaq (%rax,%rcx,8), %rbx
jmp 0x119c91
movq %rcx, %rax
testq %rcx, %rcx
jle 0x119c62
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
jmp 0x119c79
notq %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
notq %rdx
movq 0x68(%rsp), %rax
imulq $-0x1e0, %rdx, %rsi     # imm = 0xFE20
addq (%rax,%rdx,8), %rsi
leaq (%rcx,%rcx,4), %rax
leaq (%rsi,%rax,8), %rbx
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x8(%rbx), %rax
cmpq $0x1, %rax
je 0x119cf5
movq (%rbx), %rcx
leaq -0x1(%rax), %rdx
movl $0x1, %r8d
xorl %esi, %esi
movb (%rcx,%r8), %r9b
cmpb $0x5f, %r9b
je 0x119ce3
leal -0x30(%r9), %r10d
cmpb $0xa, %r10b
jb 0x119ce3
movl %r9d, %r10d
andb $-0x21, %r10b
addb $-0x41, %r10b
cmpb $0x1a, %r10b
jb 0x119ce3
cmpq %rdx, %r8
jae 0x119cef
cmpb $0x2e, %r9b
jne 0x119cef
incq %r8
cmpq %rax, %r8
setae %sil
jne 0x119cb3
testb $0x1, %sil
je 0x119d04
addq $0x1f0, %rdi            # imm = 0x1F0
movq %rbx, %rsi
callq 0x284cbc
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq %rbx, %rsi
callq 0x26ff66
movl %r14d, %ecx
notl %ecx
addl %ecx, %ebp
movl $0x1, %edx
movl %ebp, %ecx
shll %cl, %edx
movslq %edx, %rcx
movsd 0x1ac2e0(%rip), %xmm0   # 0x2c6010
testq %rcx, %r13
je 0x119d39
xorpd %xmm0, %xmm0
movq 0x48(%rax), %rax
movq 0x28(%rax), %rax
movsd %xmm0, (%rax)
incq %r14
jmp 0x119bcd
movq 0x190(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
cvttsd2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subsd 0x1ac295(%rip), %xmm0   # 0x2c6008
cvttsd2si %xmm0, %rbp
andq %rcx, %rbp
orq %rax, %rbp
leaq 0x1b0c22(%rip), %rdi    # 0x2ca9a7
movq 0x38(%rsp), %rsi
movl %r13d, %edx
xorl %eax, %eax
callq 0x116050
xorl %r14d, %r14d
movq 0x88(%rsp), %rax
movq %rax, %rcx
subq 0x68(%rsp), %rcx
sarq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
leaq (%rcx,%rcx,2), %rax
movq 0x70(%rsp), %rcx
subq 0x78(%rsp), %rcx
sarq $0x3, %rcx
imulq %r12, %rcx
leaq (%rcx,%rax,4), %rcx
movq 0x50(%rsp), %rax
movq 0x60(%rsp), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
imulq %r12, %rdx
addq %rcx, %rdx
cmpq %rdx, %r14
jae 0x119efd
movq %rax, %rcx
subq 0x58(%rsp), %rcx
sarq $0x3, %rcx
imulq %r12, %rcx
addq %r14, %rcx
cmpq $0xb, %rcx
ja 0x119e11
leaq (%r14,%r14,4), %rcx
leaq (%rax,%rcx,8), %rbx
jmp 0x119e5b
movq %rcx, %rax
testq %rcx, %rcx
jle 0x119e2c
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
jmp 0x119e43
notq %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
notq %rdx
movq 0x68(%rsp), %rax
imulq $-0x1e0, %rdx, %rsi     # imm = 0xFE20
addq (%rax,%rdx,8), %rsi
leaq (%rcx,%rcx,4), %rax
leaq (%rsi,%rax,8), %rbx
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x8(%rbx), %rax
cmpq $0x1, %rax
je 0x119ebf
movq (%rbx), %rcx
leaq -0x1(%rax), %rdx
movl $0x1, %r8d
xorl %esi, %esi
movb (%rcx,%r8), %r9b
cmpb $0x5f, %r9b
je 0x119ead
leal -0x30(%r9), %r10d
cmpb $0xa, %r10b
jb 0x119ead
movl %r9d, %r10d
andb $-0x21, %r10b
addb $-0x41, %r10b
cmpb $0x1a, %r10b
jb 0x119ead
cmpq %rdx, %r8
jae 0x119eb9
cmpb $0x2e, %r9b
jne 0x119eb9
incq %r8
cmpq %rax, %r8
setae %sil
jne 0x119e7d
testb $0x1, %sil
je 0x119ece
addq $0x1f0, %rdi            # imm = 0x1F0
movq %rbx, %rsi
callq 0x284cbc
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq %rbx, %rsi
callq 0x26ff66
movq 0x48(%rax), %rax
movq 0x28(%rax), %rax
cvttsd2si (%rax), %esi
movq %r15, %rdi
xorl %eax, %eax
callq 0x116050
incq %r14
jmp 0x119d97
leaq 0x1b0aaf(%rip), %rdi    # 0x2ca9b3
movl %ebp, %esi
xorl %eax, %eax
callq 0x116050
incq %r13
cmpq 0x10(%rsp), %r13
jne 0x119bca
jmp 0x11a1f3
movq %rcx, %rax
testq %rcx, %rcx
jle 0x11a1b8
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
jmp 0x11a1cf
notq %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq %rdx
notq %rdx
imulq $-0x1f8, %rdx, %r8      # imm = 0xFE08
addq (%rsi,%rdx,8), %r8
addq %rcx, %r8
leaq 0x40(%rsp), %rdi
movq %r14, (%rdi)
movq 0x38(%r8), %rsi
movq 0x40(%r8), %rdx
addq %rsi, %rdx
callq 0x11c566
movq 0x40(%rsp), %rsi
movq 0x10(%rsp), %rax
movq (%rax), %rdx
leaq 0x1b0957(%rip), %rdi    # 0x2ca8e9
xorl %eax, %eax
callq 0x116050
movq 0x40(%rsp), %rdi
cmpq %r14, %rdi
je 0x119fb0
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x116090
movq $-0x1, %r12
leaq 0x40(%rsp), %r14
xorl %r13d, %r13d
xorl %ebp, %ebp
movq 0x520(%rsp), %rax
movq %rax, %rcx
subq 0x500(%rsp), %rcx
sarq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
leaq (%rcx,%rcx,2), %rax
movq 0x508(%rsp), %rcx
subq 0x510(%rsp), %rcx
sarq $0x3, %rcx
imulq %r15, %rcx
addq %rax, %rcx
movq 0x4e8(%rsp), %rsi
movq 0x4f8(%rsp), %rax
subq %rsi, %rax
sarq $0x3, %rax
imulq %r15, %rax
addq %rcx, %rax
cmpq %rax, %rbp
jae 0x11a1fd
movq %rsi, %rdx
subq 0x4f0(%rsp), %rdx
sarq $0x3, %rdx
imulq %r15, %rdx
leaq (%rdx,%rbp), %rcx
cmpq $0x2, %rcx
ja 0x11a048
addq %r13, %rsi
jmp 0x11a098
testq %rcx, %rcx
jle 0x11a062
movq %rcx, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq %rdx
jmp 0x11a07b
movq %r12, %rax
subq %rdx, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq %rdx
notq %rdx
movq 0x500(%rsp), %rax
imulq $-0x1f8, %rdx, %rdi     # imm = 0xFE08
addq (%rax,%rdx,8), %rdi
imulq $0xa8, %rcx, %rsi
addq %rdi, %rsi
movq %r14, %rdi
callq 0x196e22
movq 0x68(%rsp), %rbx
movl 0x70(%rsp), %esi
leaq 0x18(%rsp), %rdi
callq 0x11b721
movq 0x18(%rsp), %rcx
movq 0x78(%rsp), %r8
movq 0x10(%rsp), %rax
movq (%rax), %r9
leaq 0x1b0837(%rip), %rdi    # 0x2ca903
movl %ebp, %esi
movl %ebx, %edx
xorl %eax, %eax
callq 0x116050
movq 0x18(%rsp), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x11a0f3
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x116090
movq %r14, %rdi
movq 0x10(%rsp), %rsi
callq 0x11b7ce
movl 0xd8(%rsp), %edx
movl 0xe0(%rsp), %ecx
leaq 0x1b0830(%rip), %rdi    # 0x2ca945
movl %ebp, %esi
xorl %eax, %eax
callq 0x116050
movq 0xb8(%rsp), %rdi
leaq 0xc8(%rsp), %rax
cmpq %rax, %rdi
je 0x11a143
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0x98(%rsp), %rdi
leaq 0xa8(%rsp), %rax
cmpq %rax, %rdi
je 0x11a168
movq 0xa8(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0x78(%rsp), %rdi
leaq 0x88(%rsp), %rax
cmpq %rax, %rdi
je 0x11a18a
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x11a1a6
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x116090
incq %rbp
addq $0xa8, %r13
decq %r12
jmp 0x119fc1
notq %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq $0x3, %rdx
notq %rdx
imulq $-0x1e0, %rdx, %rax     # imm = 0xFE20
addq (%rsi,%rdx,8), %rax
leaq (%rcx,%rcx,4), %rcx
leaq (%rax,%rcx,8), %rax
movq (%rax), %rsi
leaq 0x1b077d(%rip), %rdi    # 0x2ca969
xorl %eax, %eax
callq 0x116050
leaq 0x40(%rsp), %rdi
callq 0x11bb2c
leaq 0x1d0(%rsp), %rdi
callq 0x11bb76
leaq 0x190(%rsp), %rdi
callq 0x11be38
leaq 0x8(%rsp), %rdi
callq 0x11be86
addq $0xaf8, %rsp            # imm = 0xAF8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x11a276
jmp 0x11a25e
jmp 0x11a276
jmp 0x11a25e
jmp 0x11a23f
jmp 0x11a25e
movq %rax, %rbx
jmp 0x11a290
movq %rax, %rbx
jmp 0x11a29d
jmp 0x11a276
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x11ad08
jmp 0x11a290
jmp 0x11a276
jmp 0x11a276
movq %rax, %rbx
jmp 0x11a283
jmp 0x11a265
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x11b8f6
jmp 0x11a283
jmp 0x11a276
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x11bb2c
leaq 0x1d0(%rsp), %rdi
callq 0x11bb76
leaq 0x190(%rsp), %rdi
callq 0x11be38
leaq 0x8(%rsp), %rdi
callq 0x11be86
movq %rbx, %rdi
callq 0x1162f0