// File: /workspace/github_cpp_makefile_star2_O3/ArashPartow[P]exprtk/exprtk_simple_example_09.cpp
// Function: void primes<double>()
void primes()
{
   typedef exprtk::symbol_table<T>         symbol_table_t;
   typedef exprtk::expression<T>           expression_t;
   typedef exprtk::parser<T>               parser_t;
   typedef exprtk::function_compositor<T>  compositor_t;
   typedef typename compositor_t::function function_t;

   T x = T(0);

   symbol_table_t symbol_table;

   symbol_table.add_constants();
   symbol_table.add_variable("x",x);

   compositor_t compositor(symbol_table);

   //Mode 1 - if statement based
   compositor.add(
      function_t("is_prime_impl1")
      .vars("x", "y")
      .expression
      (
         " if (y == 1,true,                "
         "    if (0 == (x % y),false,      "
         "       is_prime_impl1(x,y - 1))) "
      ));

   compositor.add(
      function_t("is_prime1")
      .var("x")
      .expression
      (
         " if (frac(x) != 0)                                   "
         "    return [false];                                  "
         " else if (x <= 0)                                    "
         "    return [false];                                  "
         " else                                                "
         "    is_prime_impl1(x,min(x - 1,trunc(sqrt(x)) + 1)); "
      ));

   //Mode 2 - switch statement based
   compositor.add(
      function_t("is_prime_impl2")
      .vars("x", "y")
      .expression
      (
         " switch                                          "
         " {                                               "
         "    case y == 1       : true;                    "
         "    case (x % y) == 0 : false;                   "
         "    default           : is_prime_impl2(x,y - 1); "
         " }                                               "
      ));

   compositor.add(
      function_t("is_prime2")
      .var("x")
      .expression
      (
         " switch                                                                  "
         " {                                                                       "
         "    case x <= 0       : false;                                           "
         "    case frac(x) != 0 : false;                                           "
         "    default           : is_prime_impl2(x,min(x - 1,trunc(sqrt(x)) + 1)); "
         " }                                                                       "
      ));

   //Mode 3 - switch statement and for-loop based
   compositor.add(
      function_t("is_prime3")
      .var("x")
      .expression
      (
         " switch                                              "
         " {                                                   "
         "    case x <= 1       : return [false];              "
         "    case frac(x) != 0 : return [false];              "
         "    case x == 2       : return [true ];              "
         " };                                                  "
         "                                                     "
         " var prime_lut[27] :=                                "
         " {                                                   "
         "      2,   3,   5,   7,  11,  13,  17,  19,  23,     "
         "     29,  31,  37,  41,  43,  47,  53,  59,  61,     "
         "     67,  71,  73,  79,  83,  89,  97, 101, 103      "
         " };                                                  "
         "                                                     "
         " var upper_bound := min(x - 1, trunc(sqrt(x)) + 1);  "
         "                                                     "
         " for (var i := 0; i < prime_lut[]; i += 1)           "
         " {                                                   "
         "    if (prime_lut[i] >= upper_bound)                 "
         "       return [true];                                "
         "    else if ((x % prime_lut[i]) == 0)                "
         "       return [false];                               "
         " };                                                  "
         "                                                     "
         " var lower_bound := prime_lut[prime_lut[] - 1] + 2;  "
         "                                                     "
         " for (var i := lower_bound; i < upper_bound; i += 2) "
         " {                                                   "
         "    if ((x % i) == 0)                                "
         "    {                                                "
         "       return [false];                               "
         "    }                                                "
         " };                                                  "
         "                                                     "
         " return [true];                                      "
      ));

   std::string expression_str1 = "is_prime1(x)";
   std::string expression_str2 = "is_prime2(x)";
   std::string expression_str3 = "is_prime3(x)";

   expression_t expression1;
   expression_t expression2;
   expression_t expression3;
   expression1.register_symbol_table(symbol_table);
   expression2.register_symbol_table(symbol_table);
   expression3.register_symbol_table(symbol_table);

   parser_t parser;

   parser.compile(expression_str1, expression1);
   parser.compile(expression_str2, expression2);
   parser.compile(expression_str3, expression3);

   for (std::size_t i = 0; i < 15000; ++i)
   {
      x = static_cast<T>(i);

      const T result1 = expression1.value();
      const T result2 = expression2.value();
      const T result3 = expression3.value();

      const bool results_concur = (result1 == result2) &&
                                  (result1 == result3) ;

      printf("%03d  Result1: %c  Result2: %c  Result3: %c  "
             "Results Concur: %c\n",
             static_cast<unsigned int>(i),
             (result1 == T(1)) ? 'T' : 'F',
             (result2 == T(1)) ? 'T' : 'F',
             (result3 == T(1)) ? 'T' : 'F',
             (results_concur)  ? 'T' : 'F');
   }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1548, %rsp           # imm = 0x1548
movq $0x0, 0x70(%rsp)
leaq 0x28(%rsp), %rbx
movq %rbx, %rdi
movl $0x1, %esi
callq 0x11a65a
movq %rbx, %rdi
callq 0x11a6a2
leaq 0xb70(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1973e1(%rip), %rsi    # 0x2b08ad
leaq 0x1973db(%rip), %rdx    # 0x2b08ae
leaq 0xb60(%rsp), %rdi
callq 0x11a5c4
leaq 0x28(%rsp), %rdi
leaq 0xb60(%rsp), %rsi
leaq 0x70(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11a7e8
movq 0xb60(%rsp), %rdi
cmpq %r14, %rdi
je 0x119516
movq 0xb70(%rsp), %rsi
incq %rsi
callq 0x116090
leaq 0xb60(%rsp), %rdi
leaq 0x28(%rsp), %rbx
movq %rbx, %rsi
callq 0x11a938
leaq 0xf8(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x197417(%rip), %rsi    # 0x2b0955
leaq 0x19741e(%rip), %rdx    # 0x2b0963
leaq 0xe8(%rsp), %rdi
callq 0x11a5c4
leaq 0x238(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x11aac0
leaq 0x18(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x197336(%rip), %rsi    # 0x2b08ad
leaq 0x197330(%rip), %rdx    # 0x2b08ae
leaq 0x8(%rsp), %rdi
callq 0x11a5c4
leaq 0x40(%rsp), %rbp
movq %rbp, -0x10(%rbp)
leaq 0x1981b3(%rip), %rsi    # 0x2b174b
leaq 0x1981ad(%rip), %rdx    # 0x2b174c
leaq 0x30(%rsp), %rdi
callq 0x11a5c4
leaq 0x278(%rsp), %r15
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x127b84
leaq 0x30(%rsp), %rsi
movq %r15, %rdi
callq 0x127b84
leaq 0x60(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x197389(%rip), %rsi    # 0x2b0964
leaq 0x1973e5(%rip), %rdx    # 0x2b09c7
leaq 0x50(%rsp), %rdi
callq 0x11a5c4
leaq 0x258(%rsp), %r12
leaq 0x50(%rsp), %rsi
movq %r12, %rdi
callq 0x116520
leaq 0x1490(%rsp), %rdi
leaq 0x238(%rsp), %rsi
callq 0x11f8de
leaq 0x1498(%rsp), %rcx
cmpq %rax, %rcx
jne 0x1196d5
leaq 0xb60(%rsp), %rdi
leaq 0x238(%rsp), %rsi
movq %r12, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x11e644
testb %al, %al
je 0x1196d5
leaq 0x238(%rsp), %rsi
movq 0x88(%rsi), %rax
movq %rax, %rcx
subq 0x68(%rsi), %rcx
shrq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
movq 0x60(%rsi), %rax
movq 0x70(%rsi), %rdx
subq 0x78(%rsi), %rdx
subq 0x50(%rsi), %rax
sarq $0x5, %rdx
sarq $0x5, %rax
leaq (%rcx,%rcx,2), %rcx
shlq $0x8, %rcx
addq 0x14c0(%rsp), %rcx
leaq (%rdx,%rdx,2), %rdx
shlq $0x4, %rdx
leaq (%rax,%rax,2), %rdi
shlq $0x4, %rdi
addq %rdx, %rdi
addq %rcx, %rdi
callq 0x11f502
movq (%rax), %r12
leaq 0x238(%rsp), %rsi
leaq 0x1490(%rsp), %rdi
callq 0x11f862
movq %r12, %rdi
movq %rax, %rsi
callq 0x11f57e
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x1196f1
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0x30(%rsp), %rdi
cmpq %rbp, %rdi
je 0x119708
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x119724
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x116090
movq %r15, %rdi
callq 0x127e1e
leaq 0x268(%rsp), %r13
movq -0x10(%r13), %rdi
cmpq %r13, %rdi
je 0x11974d
movq 0x268(%rsp), %rsi
incq %rsi
callq 0x116090
leaq 0x248(%rsp), %r14
movq -0x10(%r14), %rdi
cmpq %r14, %rdi
leaq 0xf8(%rsp), %r15
je 0x119776
movq 0x248(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0xe8(%rsp), %rdi
cmpq %r15, %rdi
je 0x119793
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x116090
leaq 0xe8(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x197223(%rip), %rsi    # 0x2b09c8
leaq 0x197225(%rip), %rdx    # 0x2b09d1
callq 0x11a5c4
leaq 0x238(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x11aac0
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x1970d3(%rip), %rsi    # 0x2b08ad
leaq 0x1970cd(%rip), %rdx    # 0x2b08ae
callq 0x11a5c4
leaq 0x278(%rsp), %r15
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x127b84
leaq 0x30(%rsp), %rdi
movq %rbp, (%rdi)
leaq 0x1971c8(%rip), %rsi    # 0x2b09d2
leaq 0x1972ff(%rip), %rdx    # 0x2b0b10
callq 0x11a5c4
leaq 0x258(%rsp), %r12
leaq 0x30(%rsp), %rsi
movq %r12, %rdi
callq 0x116520
leaq 0x238(%rsp), %rsi
leaq 0x1490(%rsp), %rdi
callq 0x11f8de
leaq 0x1498(%rsp), %rcx
cmpq %rax, %rcx
jne 0x1198ff
leaq 0xb60(%rsp), %rdi
leaq 0x238(%rsp), %rsi
movq %r12, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x11e644
testb %al, %al
je 0x1198ff
leaq 0x238(%rsp), %rsi
movq 0x88(%rsi), %rax
movq %rax, %rcx
subq 0x68(%rsi), %rcx
shrq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
movq 0x60(%rsi), %rax
movq 0x70(%rsi), %rdx
subq 0x78(%rsi), %rdx
subq 0x50(%rsi), %rax
sarq $0x5, %rdx
sarq $0x5, %rax
leaq (%rcx,%rcx,2), %rcx
shlq $0x8, %rcx
addq 0x14c0(%rsp), %rcx
leaq (%rdx,%rdx,2), %rdx
shlq $0x4, %rdx
leaq (%rax,%rax,2), %rdi
shlq $0x4, %rdi
addq %rdx, %rdi
addq %rcx, %rdi
callq 0x11f502
movq (%rax), %r12
leaq 0x238(%rsp), %rsi
leaq 0x1490(%rsp), %rdi
callq 0x11f862
movq %r12, %rdi
movq %rax, %rsi
callq 0x11f57e
movq 0x30(%rsp), %rdi
cmpq %rbp, %rdi
je 0x119916
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x119932
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x116090
movq %r15, %rdi
callq 0x127e1e
movq 0x258(%rsp), %rdi
cmpq %r13, %rdi
je 0x119957
movq 0x268(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0x238(%rsp), %rdi
cmpq %r14, %rdi
leaq 0xf8(%rsp), %r15
je 0x11997c
movq 0x248(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0xe8(%rsp), %rdi
cmpq %r15, %rdi
je 0x119999
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x116090
leaq 0xe8(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x197166(%rip), %rsi    # 0x2b0b11
leaq 0x19716d(%rip), %rdx    # 0x2b0b1f
callq 0x11a5c4
leaq 0x238(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x11aac0
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x196ecd(%rip), %rsi    # 0x2b08ad
leaq 0x196ec7(%rip), %rdx    # 0x2b08ae
callq 0x11a5c4
leaq 0x30(%rsp), %rdi
movq %rbp, (%rdi)
leaq 0x197d50(%rip), %rsi    # 0x2b174b
leaq 0x197d4a(%rip), %rdx    # 0x2b174c
callq 0x11a5c4
leaq 0x278(%rsp), %r15
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x127b84
leaq 0x30(%rsp), %rsi
movq %r15, %rdi
callq 0x127b84
leaq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
movq %rax, (%rdi)
leaq 0x1970e3(%rip), %rsi    # 0x2b0b20
leaq 0x197202(%rip), %rdx    # 0x2b0c46
callq 0x11a5c4
leaq 0x258(%rsp), %r12
leaq 0x50(%rsp), %rsi
movq %r12, %rdi
callq 0x116520
leaq 0x238(%rsp), %rsi
leaq 0x1490(%rsp), %rdi
callq 0x11f8de
leaq 0x1498(%rsp), %rcx
cmpq %rax, %rcx
jne 0x119b32
leaq 0xb60(%rsp), %rdi
leaq 0x238(%rsp), %rsi
movq %r12, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x11e644
testb %al, %al
je 0x119b32
leaq 0x238(%rsp), %rsi
movq 0x88(%rsi), %rax
movq %rax, %rcx
subq 0x68(%rsi), %rcx
shrq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
movq 0x60(%rsi), %rax
movq 0x70(%rsi), %rdx
subq 0x78(%rsi), %rdx
subq 0x50(%rsi), %rax
sarq $0x5, %rdx
sarq $0x5, %rax
leaq (%rcx,%rcx,2), %rcx
shlq $0x8, %rcx
addq 0x14c0(%rsp), %rcx
leaq (%rdx,%rdx,2), %rdx
shlq $0x4, %rdx
leaq (%rax,%rax,2), %rdi
shlq $0x4, %rdi
addq %rdx, %rdi
addq %rcx, %rdi
callq 0x11f502
movq (%rax), %r12
leaq 0x238(%rsp), %rsi
leaq 0x1490(%rsp), %rdi
callq 0x11f862
movq %r12, %rdi
movq %rax, %rsi
callq 0x11f57e
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x119b4e
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0x30(%rsp), %rdi
cmpq %rbp, %rdi
je 0x119b65
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x119b81
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x116090
movq %r15, %rdi
callq 0x127e1e
movq 0x258(%rsp), %rdi
cmpq %r13, %rdi
je 0x119ba6
movq 0x268(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0x238(%rsp), %rdi
cmpq %r14, %rdi
leaq 0xf8(%rsp), %r15
je 0x119bcb
movq 0x248(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0xe8(%rsp), %rdi
cmpq %r15, %rdi
je 0x119be8
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x116090
leaq 0xe8(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x19704d(%rip), %rsi    # 0x2b0c47
leaq 0x19704f(%rip), %rdx    # 0x2b0c50
callq 0x11a5c4
leaq 0x238(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x11aac0
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x196c7e(%rip), %rsi    # 0x2b08ad
leaq 0x196c78(%rip), %rdx    # 0x2b08ae
callq 0x11a5c4
leaq 0x278(%rsp), %r15
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x127b84
leaq 0x30(%rsp), %rdi
movq %rbp, (%rdi)
leaq 0x196ff2(%rip), %rsi    # 0x2b0c51
leaq 0x1971a1(%rip), %rdx    # 0x2b0e07
callq 0x11a5c4
leaq 0x258(%rsp), %r12
leaq 0x30(%rsp), %rsi
movq %r12, %rdi
callq 0x116520
leaq 0x238(%rsp), %rsi
leaq 0x1490(%rsp), %rdi
callq 0x11f8de
leaq 0x1498(%rsp), %rcx
cmpq %rax, %rcx
jne 0x119d54
leaq 0xb60(%rsp), %rdi
leaq 0x238(%rsp), %rsi
movq %r12, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x11e644
testb %al, %al
je 0x119d54
leaq 0x238(%rsp), %rsi
movq 0x88(%rsi), %rax
movq %rax, %rcx
subq 0x68(%rsi), %rcx
shrq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
movq 0x60(%rsi), %rax
movq 0x70(%rsi), %rdx
subq 0x78(%rsi), %rdx
subq 0x50(%rsi), %rax
sarq $0x5, %rdx
sarq $0x5, %rax
leaq (%rcx,%rcx,2), %rcx
shlq $0x8, %rcx
addq 0x14c0(%rsp), %rcx
leaq (%rdx,%rdx,2), %rdx
shlq $0x4, %rdx
leaq (%rax,%rax,2), %rdi
shlq $0x4, %rdi
addq %rdx, %rdi
addq %rcx, %rdi
callq 0x11f502
movq (%rax), %r12
leaq 0x238(%rsp), %rsi
leaq 0x1490(%rsp), %rdi
callq 0x11f862
movq %r12, %rdi
movq %rax, %rsi
callq 0x11f57e
movq 0x30(%rsp), %rdi
cmpq %rbp, %rdi
je 0x119d6b
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x119d87
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x116090
movq %r15, %rdi
callq 0x127e1e
movq 0x258(%rsp), %rdi
cmpq %r13, %rdi
je 0x119dac
movq 0x268(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0x238(%rsp), %rdi
cmpq %r14, %rdi
leaq 0xf8(%rsp), %r15
je 0x119dd1
movq 0x248(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0xe8(%rsp), %rdi
cmpq %r15, %rdi
je 0x119dee
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x116090
leaq 0xe8(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x197008(%rip), %rsi    # 0x2b0e08
leaq 0x19700a(%rip), %rdx    # 0x2b0e11
callq 0x11a5c4
leaq 0x238(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x11aac0
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x196a78(%rip), %rsi    # 0x2b08ad
leaq 0x196a72(%rip), %rdx    # 0x2b08ae
callq 0x11a5c4
leaq 0x278(%rsp), %r15
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x127b84
leaq 0x30(%rsp), %rdi
movq %rbp, (%rdi)
leaq 0x196fad(%rip), %rsi    # 0x2b0e12
leaq 0x1976e5(%rip), %rdx    # 0x2b1551
callq 0x11a5c4
leaq 0x258(%rsp), %r12
leaq 0x30(%rsp), %rsi
movq %r12, %rdi
callq 0x116520
leaq 0x238(%rsp), %rsi
leaq 0x1490(%rsp), %rdi
callq 0x11f8de
leaq 0x1498(%rsp), %rcx
cmpq %rax, %rcx
jne 0x119f5a
leaq 0xb60(%rsp), %rdi
leaq 0x238(%rsp), %rsi
movq %r12, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x11e644
testb %al, %al
je 0x119f5a
leaq 0x238(%rsp), %rsi
movq 0x88(%rsi), %rax
movq %rax, %rcx
subq 0x68(%rsi), %rcx
shrq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
movq 0x60(%rsi), %rax
movq 0x70(%rsi), %rdx
subq 0x78(%rsi), %rdx
subq 0x50(%rsi), %rax
sarq $0x5, %rdx
sarq $0x5, %rax
leaq (%rcx,%rcx,2), %rcx
shlq $0x8, %rcx
addq 0x14c0(%rsp), %rcx
leaq (%rdx,%rdx,2), %rdx
shlq $0x4, %rdx
leaq (%rax,%rax,2), %rdi
shlq $0x4, %rdi
addq %rdx, %rdi
addq %rcx, %rdi
callq 0x11f502
movq (%rax), %r12
leaq 0x238(%rsp), %rsi
leaq 0x1490(%rsp), %rdi
callq 0x11f862
movq %r12, %rdi
movq %rax, %rsi
callq 0x11f57e
movq 0x30(%rsp), %rdi
cmpq %rbp, %rdi
je 0x119f71
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x119f8d
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x116090
movq %r15, %rdi
callq 0x127e1e
movq 0x258(%rsp), %rdi
cmpq %r13, %rdi
je 0x119fb2
movq 0x268(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0x238(%rsp), %rdi
cmpq %r14, %rdi
leaq 0xf8(%rsp), %r14
je 0x119fd7
movq 0x248(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0xe8(%rsp), %rdi
cmpq %r14, %rdi
je 0x119ff4
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x116090
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x19754a(%rip), %rsi    # 0x2b1552
leaq 0x19754f(%rip), %rdx    # 0x2b155e
callq 0x11a5c4
leaq 0x30(%rsp), %rdi
movq %rbp, (%rdi)
leaq 0x19753c(%rip), %rsi    # 0x2b155f
leaq 0x197541(%rip), %rdx    # 0x2b156b
callq 0x11a5c4
leaq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
movq %rax, (%rdi)
leaq 0x197529(%rip), %rsi    # 0x2b156c
leaq 0x19752e(%rip), %rdx    # 0x2b1578
callq 0x11a5c4
leaq 0xc8(%rsp), %rdi
callq 0x11ab9a
leaq 0xa8(%rsp), %rdi
callq 0x11ab9a
leaq 0x88(%rsp), %rdi
callq 0x11ab9a
movq 0xd0(%rsp), %rax
movq 0xd8(%rsp), %rcx
subq %rax, %rcx
je 0x11a0af
sarq $0x3, %rcx
movq 0x28(%rsp), %rdx
cmpq $0x1, %rcx
adcq $0x0, %rcx
cmpq %rbx, %rax
je 0x11a0c1
cmpq (%rax), %rdx
je 0x11a0c1
addq $0x8, %rax
decq %rcx
jne 0x11a09c
leaq 0xd0(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x1280a4
movq 0xb0(%rsp), %rax
movq 0xb8(%rsp), %rcx
subq %rax, %rcx
je 0x11a0fa
sarq $0x3, %rcx
movq 0x28(%rsp), %rdx
cmpq $0x1, %rcx
adcq $0x0, %rcx
cmpq %rbx, %rax
je 0x11a10c
cmpq (%rax), %rdx
je 0x11a10c
addq $0x8, %rax
decq %rcx
jne 0x11a0e7
leaq 0xb0(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x1280a4
movq 0x90(%rsp), %rax
movq 0x98(%rsp), %rcx
subq %rax, %rcx
je 0x11a145
sarq $0x3, %rcx
movq 0x28(%rsp), %rdx
cmpq $0x1, %rcx
adcq $0x0, %rcx
cmpq %rbx, %rax
je 0x11a157
cmpq (%rax), %rdx
je 0x11a157
addq $0x8, %rax
decq %rcx
jne 0x11a132
leaq 0x90(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x1280a4
leaq 0xe8(%rsp), %rdi
movl $0x7f, %esi
callq 0x11ac26
leaq 0x238(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x11ad26
leaq 0x1e8(%rsp), %rdi
callq 0x12828a
leaq 0x1b8(%rsp), %rdi
callq 0x12828a
leaq 0x188(%rsp), %rdi
callq 0x12828a
leaq 0x158(%rsp), %rdi
callq 0x12828a
leaq 0x128(%rsp), %rdi
callq 0x12828a
leaq 0xf8(%rsp), %rdi
callq 0x12828a
leaq 0x238(%rsp), %rdi
leaq 0x8(%rsp), %rsi
leaq 0xc8(%rsp), %rdx
callq 0x11b54a
leaq 0x238(%rsp), %rdi
leaq 0x30(%rsp), %rsi
leaq 0xa8(%rsp), %rdx
callq 0x11b54a
leaq 0x238(%rsp), %rdi
leaq 0x50(%rsp), %rsi
leaq 0x88(%rsp), %rdx
callq 0x11b54a
movl $0x46, %r15d
leaq 0x197352(%rip), %rbx    # 0x2b1579
xorl %r14d, %r14d
xorps %xmm0, %xmm0
cvtsi2sd %r14, %xmm0
movsd %xmm0, 0x70(%rsp)
movq 0xc8(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movsd %xmm0, 0x80(%rsp)
movq 0xa8(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movsd %xmm0, 0x78(%rsp)
movq 0x88(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movsd 0x191d83(%rip), %xmm1   # 0x2ac008
movsd 0x80(%rsp), %xmm2
ucomisd %xmm1, %xmm2
movl $0x54, %edx
cmovnel %r15d, %edx
cmovpl %r15d, %edx
movsd 0x78(%rsp), %xmm3
ucomisd %xmm1, %xmm3
movl $0x54, %ecx
cmovnel %r15d, %ecx
cmovpl %r15d, %ecx
ucomisd %xmm1, %xmm0
movl $0x54, %r8d
cmovnel %r15d, %r8d
cmovpl %r15d, %r8d
ucomisd %xmm0, %xmm2
movl $0x54, %r9d
cmovnel %r15d, %r9d
cmovpl %r15d, %r9d
ucomisd %xmm3, %xmm2
cmovnel %r15d, %r9d
cmovpl %r15d, %r9d
movq %rbx, %rdi
movl %r14d, %esi
xorl %eax, %eax
callq 0x116050
incq %r14
cmpq $0x3a98, %r14           # imm = 0x3A98
jne 0x11a22a
leaq 0x238(%rsp), %rdi
callq 0x11c0e6
leaq 0x88(%rsp), %rdi
callq 0x11c3a8
leaq 0xa8(%rsp), %rdi
callq 0x11c3a8
leaq 0xc8(%rsp), %rdi
callq 0x11c3a8
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x11a353
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0x30(%rsp), %rdi
cmpq %rbp, %rdi
je 0x11a36a
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x11a386
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x116090
leaq 0xb60(%rsp), %rdi
callq 0x11c3f6
leaq 0x28(%rsp), %rdi
callq 0x11c458
addq $0x1548, %rsp           # imm = 0x1548
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq 0xe8(%rsp), %rdi
callq 0x11b502
jmp 0x11a524
jmp 0x11a473
movq %rax, %rbx
jmp 0x11a531
movq %rax, %rbx
jmp 0x11a53e
movq %rax, %rbx
jmp 0x11a54b
movq %rax, %rbx
jmp 0x11a567
movq %rax, %rbx
jmp 0x11a57e
jmp 0x11a432
jmp 0x11a41d
jmp 0x11a41d
jmp 0x11a422
jmp 0x11a42a
jmp 0x11a432
jmp 0x11a41d
jmp 0x11a41d
jmp 0x11a422
jmp 0x11a42a
jmp 0x11a432
jmp 0x11a481
jmp 0x11a41d
jmp 0x11a422
jmp 0x11a42a
jmp 0x11a432
jmp 0x11a41d
jmp 0x11a41d
jmp 0x11a422
jmp 0x11a42a
jmp 0x11a432
jmp 0x11a481
movq %rax, %rbx
jmp 0x11a49b
movq %rax, %rbx
jmp 0x11a4b7
movq %rax, %rbx
jmp 0x11a4c4
movq %rax, %rbx
jmp 0x11a59a
jmp 0x11a467
movq %rax, %rbx
movq 0xb60(%rsp), %rdi
cmpq %r14, %rdi
je 0x11a5a7
movq 0xb70(%rsp), %rsi
incq %rsi
callq 0x116090
jmp 0x11a5a7
jmp 0x11a467
movq %rax, %rbx
jmp 0x11a5a7
jmp 0x11a481
jmp 0x11a481
movq %rax, %rbx
jmp 0x11a524
jmp 0x11a481
jmp 0x11a481
jmp 0x11a4ea
movq %rax, %rbx
movq 0x30(%rsp), %rdi
cmpq %rbp, %rdi
je 0x11a49b
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x11a4b7
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x116090
leaq 0x238(%rsp), %rdi
callq 0x11ab5a
movq 0xe8(%rsp), %rdi
leaq 0xf8(%rsp), %rax
cmpq %rax, %rdi
je 0x11a59a
movq 0xf8(%rsp), %rsi
jmp 0x11a592
movq %rax, %rbx
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x11a484
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x116090
jmp 0x11a484
jmp 0x11a514
jmp 0x11a514
jmp 0x11a514
movq %rax, %rbx
leaq 0x238(%rsp), %rdi
callq 0x11c0e6
leaq 0x88(%rsp), %rdi
callq 0x11c3a8
leaq 0xa8(%rsp), %rdi
callq 0x11c3a8
leaq 0xc8(%rsp), %rdi
callq 0x11c3a8
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x11a567
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0x30(%rsp), %rdi
cmpq %rbp, %rdi
je 0x11a57e
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x116090
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x11a59a
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x116090
leaq 0xb60(%rsp), %rdi
callq 0x11c3f6
leaq 0x28(%rsp), %rdi
callq 0x11c458
movq %rbx, %rdi
callq 0x1162e0