// File: 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:
subq $0x1c48, %rsp           # imm = 0x1C48
movq $0x0, 0x1c40(%rsp)
leaq 0x1c38(%rsp), %rdi
movq %rdi, 0x120(%rsp)
movl $0x1, %esi
callq 0x11bd90
movq 0x120(%rsp), %rdi
callq 0x11bdd0
jmp 0x11a84c
leaq 0x1c07(%rsp), %rdi
movq %rdi, 0x118(%rsp)
callq 0x113650
movq 0x118(%rsp), %rdx
leaq 0x347c4d(%rip), %rsi    # 0x4624bd
leaq 0x1c08(%rsp), %rdi
callq 0x11a750
jmp 0x11a87f
leaq 0x1c38(%rsp), %rdi
leaq 0x1c08(%rsp), %rsi
leaq 0x1c40(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11be30
jmp 0x11a8a0
leaq 0x1c08(%rsp), %rdi
callq 0x113788
leaq 0x1c07(%rsp), %rdi
callq 0x113770
leaq 0x1218(%rsp), %rdi
leaq 0x1c38(%rsp), %rsi
callq 0x11bee0
jmp 0x11a8d1
leaq 0x1167(%rsp), %rdi
movq %rdi, 0x110(%rsp)
callq 0x113650
movq 0x110(%rsp), %rdx
leaq 0x347c70(%rip), %rsi    # 0x462565
leaq 0x1168(%rsp), %rdi
callq 0x11a750
jmp 0x11a904
leaq 0x1188(%rsp), %rdi
leaq 0x1168(%rsp), %rsi
callq 0x11c0d0
jmp 0x11a91b
leaq 0x113f(%rsp), %rdi
movq %rdi, 0x108(%rsp)
callq 0x113650
movq 0x108(%rsp), %rdx
leaq 0x347b7e(%rip), %rsi    # 0x4624bd
leaq 0x1140(%rsp), %rdi
callq 0x11a750
jmp 0x11a94e
leaq 0x1117(%rsp), %rdi
movq %rdi, 0x100(%rsp)
callq 0x113650
movq 0x100(%rsp), %rdx
leaq 0x347c02(%rip), %rsi    # 0x462574
leaq 0x1118(%rsp), %rdi
callq 0x11a750
jmp 0x11a981
leaq 0x1188(%rsp), %rdi
leaq 0x1140(%rsp), %rsi
leaq 0x1118(%rsp), %rdx
callq 0x11c150
movq %rax, 0xf8(%rsp)
jmp 0x11a9a8
leaq 0x10ef(%rsp), %rdi
movq %rdi, 0xf0(%rsp)
callq 0x113650
movq 0xf0(%rsp), %rdx
leaq 0x347baa(%rip), %rsi    # 0x462576
leaq 0x10f0(%rsp), %rdi
callq 0x11a750
jmp 0x11a9db
movq 0xf8(%rsp), %rdi
leaq 0x10f0(%rsp), %rsi
callq 0x11c1a0
movq %rax, 0xe8(%rsp)
jmp 0x11a9fa
movq 0xe8(%rsp), %rsi
leaq 0x1218(%rsp), %rdi
xorl %edx, %edx
callq 0x11c080
jmp 0x11aa13
leaq 0x10f0(%rsp), %rdi
callq 0x113788
leaq 0x10ef(%rsp), %rdi
callq 0x113770
leaq 0x1118(%rsp), %rdi
callq 0x113788
leaq 0x1117(%rsp), %rdi
callq 0x113770
leaq 0x1140(%rsp), %rdi
callq 0x113788
leaq 0x113f(%rsp), %rdi
callq 0x113770
leaq 0x1188(%rsp), %rdi
callq 0x11c1d0
leaq 0x1168(%rsp), %rdi
callq 0x113788
leaq 0x1167(%rsp), %rdi
callq 0x113770
leaq 0x1037(%rsp), %rdi
movq %rdi, 0xe0(%rsp)
callq 0x113650
movq 0xe0(%rsp), %rdx
leaq 0x347b2e(%rip), %rsi    # 0x4625da
leaq 0x1038(%rsp), %rdi
callq 0x11a750
jmp 0x11aabb
leaq 0x1058(%rsp), %rdi
leaq 0x1038(%rsp), %rsi
callq 0x11c0d0
jmp 0x11aad2
leaq 0x100f(%rsp), %rdi
movq %rdi, 0xd8(%rsp)
callq 0x113650
movq 0xd8(%rsp), %rdx
leaq 0x3479c7(%rip), %rsi    # 0x4624bd
leaq 0x1010(%rsp), %rdi
callq 0x11a750
jmp 0x11ab05
leaq 0x1058(%rsp), %rdi
leaq 0x1010(%rsp), %rsi
callq 0x11c210
movq %rax, 0xd0(%rsp)
jmp 0x11ab24
leaq 0xfe7(%rsp), %rdi
movq %rdi, 0xc8(%rsp)
callq 0x113650
movq 0xc8(%rsp), %rdx
leaq 0x347a9c(%rip), %rsi    # 0x4625e4
leaq 0xfe8(%rsp), %rdi
callq 0x11a750
jmp 0x11ab57
movq 0xd0(%rsp), %rdi
leaq 0xfe8(%rsp), %rsi
callq 0x11c1a0
movq %rax, 0xc0(%rsp)
jmp 0x11ab76
movq 0xc0(%rsp), %rsi
leaq 0x1218(%rsp), %rdi
xorl %edx, %edx
callq 0x11c080
jmp 0x11ab8f
leaq 0xfe8(%rsp), %rdi
callq 0x113788
leaq 0xfe7(%rsp), %rdi
callq 0x113770
leaq 0x1010(%rsp), %rdi
callq 0x113788
leaq 0x100f(%rsp), %rdi
callq 0x113770
leaq 0x1058(%rsp), %rdi
callq 0x11c1d0
leaq 0x1038(%rsp), %rdi
callq 0x113788
leaq 0x1037(%rsp), %rdi
callq 0x113770
leaq 0xf2f(%rsp), %rdi
movq %rdi, 0xb8(%rsp)
callq 0x113650
movq 0xb8(%rsp), %rdx
leaq 0x347b15(%rip), %rsi    # 0x462723
leaq 0xf30(%rsp), %rdi
callq 0x11a750
jmp 0x11ac1d
leaq 0xf50(%rsp), %rdi
leaq 0xf30(%rsp), %rsi
callq 0x11c0d0
jmp 0x11ac34
leaq 0xf07(%rsp), %rdi
movq %rdi, 0xb0(%rsp)
callq 0x113650
movq 0xb0(%rsp), %rdx
leaq 0x347865(%rip), %rsi    # 0x4624bd
leaq 0xf08(%rsp), %rdi
callq 0x11a750
jmp 0x11ac67
leaq 0xedf(%rsp), %rdi
movq %rdi, 0xa8(%rsp)
callq 0x113650
movq 0xa8(%rsp), %rdx
leaq 0x3478e9(%rip), %rsi    # 0x462574
leaq 0xee0(%rsp), %rdi
callq 0x11a750
jmp 0x11ac9a
leaq 0xf50(%rsp), %rdi
leaq 0xf08(%rsp), %rsi
leaq 0xee0(%rsp), %rdx
callq 0x11c150
movq %rax, 0xa0(%rsp)
jmp 0x11acc1
leaq 0xeb7(%rsp), %rdi
movq %rdi, 0x98(%rsp)
callq 0x113650
movq 0x98(%rsp), %rdx
leaq 0x347a4d(%rip), %rsi    # 0x462732
leaq 0xeb8(%rsp), %rdi
callq 0x11a750
jmp 0x11acf4
movq 0xa0(%rsp), %rdi
leaq 0xeb8(%rsp), %rsi
callq 0x11c1a0
movq %rax, 0x90(%rsp)
jmp 0x11ad13
movq 0x90(%rsp), %rsi
leaq 0x1218(%rsp), %rdi
xorl %edx, %edx
callq 0x11c080
jmp 0x11ad2c
leaq 0xeb8(%rsp), %rdi
callq 0x113788
leaq 0xeb7(%rsp), %rdi
callq 0x113770
leaq 0xee0(%rsp), %rdi
callq 0x113788
leaq 0xedf(%rsp), %rdi
callq 0x113770
leaq 0xf08(%rsp), %rdi
callq 0x113788
leaq 0xf07(%rsp), %rdi
callq 0x113770
leaq 0xf50(%rsp), %rdi
callq 0x11c1d0
leaq 0xf30(%rsp), %rdi
callq 0x113788
leaq 0xf2f(%rsp), %rdi
callq 0x113770
leaq 0xdff(%rsp), %rdi
movq %rdi, 0x88(%rsp)
callq 0x113650
movq 0x88(%rsp), %rdx
leaq 0x347a94(%rip), %rsi    # 0x462859
leaq 0xe00(%rsp), %rdi
callq 0x11a750
jmp 0x11add4
leaq 0xe20(%rsp), %rdi
leaq 0xe00(%rsp), %rsi
callq 0x11c0d0
jmp 0x11adeb
leaq 0xdd7(%rsp), %rdi
movq %rdi, 0x80(%rsp)
callq 0x113650
movq 0x80(%rsp), %rdx
leaq 0x3476ae(%rip), %rsi    # 0x4624bd
leaq 0xdd8(%rsp), %rdi
callq 0x11a750
jmp 0x11ae1e
leaq 0xe20(%rsp), %rdi
leaq 0xdd8(%rsp), %rsi
callq 0x11c210
movq %rax, 0x78(%rsp)
jmp 0x11ae3a
leaq 0xdaf(%rsp), %rdi
movq %rdi, 0x70(%rsp)
callq 0x113650
movq 0x70(%rsp), %rdx
leaq 0x347a0b(%rip), %rsi    # 0x462863
leaq 0xdb0(%rsp), %rdi
callq 0x11a750
jmp 0x11ae67
movq 0x78(%rsp), %rdi
leaq 0xdb0(%rsp), %rsi
callq 0x11c1a0
movq %rax, 0x68(%rsp)
jmp 0x11ae80
movq 0x68(%rsp), %rsi
leaq 0x1218(%rsp), %rdi
xorl %edx, %edx
callq 0x11c080
jmp 0x11ae96
leaq 0xdb0(%rsp), %rdi
callq 0x113788
leaq 0xdaf(%rsp), %rdi
callq 0x113770
leaq 0xdd8(%rsp), %rdi
callq 0x113788
leaq 0xdd7(%rsp), %rdi
callq 0x113770
leaq 0xe20(%rsp), %rdi
callq 0x11c1d0
leaq 0xe00(%rsp), %rdi
callq 0x113788
leaq 0xdff(%rsp), %rdi
callq 0x113770
leaq 0xcf7(%rsp), %rdi
movq %rdi, 0x60(%rsp)
callq 0x113650
movq 0x60(%rsp), %rdx
leaq 0x347b0b(%rip), %rsi    # 0x462a1a
leaq 0xcf8(%rsp), %rdi
callq 0x11a750
jmp 0x11af1e
leaq 0xd18(%rsp), %rdi
leaq 0xcf8(%rsp), %rsi
callq 0x11c0d0
jmp 0x11af35
leaq 0xccf(%rsp), %rdi
movq %rdi, 0x58(%rsp)
callq 0x113650
movq 0x58(%rsp), %rdx
leaq 0x34756a(%rip), %rsi    # 0x4624bd
leaq 0xcd0(%rsp), %rdi
callq 0x11a750
jmp 0x11af62
leaq 0xd18(%rsp), %rdi
leaq 0xcd0(%rsp), %rsi
callq 0x11c210
movq %rax, 0x50(%rsp)
jmp 0x11af7e
leaq 0xca7(%rsp), %rdi
movq %rdi, 0x48(%rsp)
callq 0x113650
movq 0x48(%rsp), %rdx
leaq 0x347a88(%rip), %rsi    # 0x462a24
leaq 0xca8(%rsp), %rdi
callq 0x11a750
jmp 0x11afab
movq 0x50(%rsp), %rdi
leaq 0xca8(%rsp), %rsi
callq 0x11c1a0
movq %rax, 0x40(%rsp)
jmp 0x11afc4
movq 0x40(%rsp), %rsi
leaq 0x1218(%rsp), %rdi
xorl %edx, %edx
callq 0x11c080
jmp 0x11afda
leaq 0xca8(%rsp), %rdi
callq 0x113788
leaq 0xca7(%rsp), %rdi
callq 0x113770
leaq 0xcd0(%rsp), %rdi
callq 0x113788
leaq 0xccf(%rsp), %rdi
callq 0x113770
leaq 0xd18(%rsp), %rdi
callq 0x11c1d0
leaq 0xcf8(%rsp), %rdi
callq 0x113788
leaq 0xcf7(%rsp), %rdi
callq 0x113770
leaq 0xc7f(%rsp), %rdi
movq %rdi, 0x38(%rsp)
callq 0x113650
movq 0x38(%rsp), %rdx
leaq 0x348111(%rip), %rsi    # 0x463164
leaq 0xc80(%rsp), %rdi
callq 0x11a750
jmp 0x11b062
leaq 0xc7f(%rsp), %rdi
callq 0x113770
leaq 0xc57(%rsp), %rdi
movq %rdi, 0x30(%rsp)
callq 0x113650
movq 0x30(%rsp), %rdx
leaq 0x3480e4(%rip), %rsi    # 0x463171
leaq 0xc58(%rsp), %rdi
callq 0x11a750
jmp 0x11b09c
leaq 0xc57(%rsp), %rdi
callq 0x113770
leaq 0xc2f(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x113650
movq 0x28(%rsp), %rdx
leaq 0x3480b7(%rip), %rsi    # 0x46317e
leaq 0xc30(%rsp), %rdi
callq 0x11a750
jmp 0x11b0d6
leaq 0xc2f(%rsp), %rdi
callq 0x113770
leaq 0xc08(%rsp), %rdi
callq 0x11c240
jmp 0x11b0f2
leaq 0xbe8(%rsp), %rdi
callq 0x11c240
jmp 0x11b101
leaq 0xbc8(%rsp), %rdi
callq 0x11c240
jmp 0x11b110
leaq 0xc08(%rsp), %rdi
leaq 0x1c38(%rsp), %rsi
callq 0x11c2f0
jmp 0x11b127
leaq 0xbe8(%rsp), %rdi
leaq 0x1c38(%rsp), %rsi
callq 0x11c2f0
jmp 0x11b13e
leaq 0xbc8(%rsp), %rdi
leaq 0x1c38(%rsp), %rsi
callq 0x11c2f0
jmp 0x11b155
leaq 0x150(%rsp), %rdi
movl $0x7f, %esi
callq 0x11c3a0
jmp 0x11b169
leaq 0x2a0(%rsp), %rdi
leaq 0x150(%rsp), %rsi
callq 0x11c4d0
jmp 0x11b180
leaq 0x150(%rsp), %rdi
callq 0x11cd00
leaq 0x2a0(%rsp), %rdi
leaq 0xc80(%rsp), %rsi
leaq 0xc08(%rsp), %rdx
callq 0x11cd70
jmp 0x11b1ac
leaq 0x2a0(%rsp), %rdi
leaq 0xc58(%rsp), %rsi
leaq 0xbe8(%rsp), %rdx
callq 0x11cd70
jmp 0x11b1cb
leaq 0x2a0(%rsp), %rdi
leaq 0xc30(%rsp), %rsi
leaq 0xbc8(%rsp), %rdx
callq 0x11cd70
jmp 0x11b1ea
movq $0x0, 0x148(%rsp)
cmpq $0x3a98, 0x148(%rsp) # imm = 0x3A98
jae 0x11b9f9
movaps 0x341e01(%rip), %xmm1   # 0x45d010
movq 0x148(%rsp), %xmm0
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x341dfc(%rip), %xmm1   # 0x45d020
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd %xmm0, 0x1c40(%rsp)
leaq 0xc08(%rsp), %rdi
callq 0x11d600
movsd %xmm0, 0x20(%rsp)
jmp 0x11b251
movsd 0x20(%rsp), %xmm0
movsd %xmm0, 0x140(%rsp)
leaq 0xbe8(%rsp), %rdi
callq 0x11d600
movsd %xmm0, 0x18(%rsp)
jmp 0x11b275
movsd 0x18(%rsp), %xmm0
movsd %xmm0, 0x138(%rsp)
leaq 0xbc8(%rsp), %rdi
callq 0x11d600
movsd %xmm0, 0x10(%rsp)
jmp 0x11b299
movsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x130(%rsp)
movsd 0x140(%rsp), %xmm0
xorl %eax, %eax
ucomisd 0x138(%rsp), %xmm0
movb %al, 0xf(%rsp)
jne 0x11b2e2
jp 0x11b2e2
movsd 0x140(%rsp), %xmm0
ucomisd 0x130(%rsp), %xmm0
sete %al
setnp %cl
andb %cl, %al
movb %al, 0xf(%rsp)
movb 0xf(%rsp), %al
andb $0x1, %al
movb %al, 0x12f(%rsp)
movl 0x148(%rsp), %esi
movsd 0x140(%rsp), %xmm0
movsd 0x341d39(%rip), %xmm1   # 0x45d040
ucomisd %xmm1, %xmm0
movl $0x46, %r9d
movl $0x54, %eax
movl %eax, %edx
cmovnel %r9d, %edx
cmovpl %r9d, %edx
movsd 0x138(%rsp), %xmm0
ucomisd %xmm1, %xmm0
movl %eax, %ecx
cmovnel %r9d, %ecx
cmovpl %r9d, %ecx
movsd 0x130(%rsp), %xmm0
ucomisd %xmm1, %xmm0
movl %eax, %r8d
cmovnel %r9d, %r8d
cmovpl %r9d, %r8d
movb 0x12f(%rsp), %dil
testb $0x1, %dil
cmovnel %eax, %r9d
leaq 0x347e25(%rip), %rdi    # 0x46318b
xorl %eax, %eax
callq 0x113080
jmp 0x11b36f
jmp 0x11b371
movq 0x148(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x148(%rsp)
jmp 0x11b1f6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11bad1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b3da
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
leaq 0x1c08(%rsp), %rdi
callq 0x113788
leaq 0x1c07(%rsp), %rdi
callq 0x113770
jmp 0x11bad1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b4f5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b4e8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b4ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b4b4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b4a7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b49a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
leaq 0x10f0(%rsp), %rdi
callq 0x113788
leaq 0x10ef(%rsp), %rdi
callq 0x113770
leaq 0x1118(%rsp), %rdi
callq 0x113788
leaq 0x1117(%rsp), %rdi
callq 0x113770
leaq 0x1140(%rsp), %rdi
callq 0x113788
leaq 0x113f(%rsp), %rdi
callq 0x113770
leaq 0x1188(%rsp), %rdi
callq 0x11c1d0
leaq 0x1168(%rsp), %rdi
callq 0x113788
leaq 0x1167(%rsp), %rdi
callq 0x113770
jmp 0x11bac4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b5dd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b5d0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b5b6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b5a9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b59c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
leaq 0xfe8(%rsp), %rdi
callq 0x113788
leaq 0xfe7(%rsp), %rdi
callq 0x113770
leaq 0x1010(%rsp), %rdi
callq 0x113788
leaq 0x100f(%rsp), %rdi
callq 0x113770
leaq 0x1058(%rsp), %rdi
callq 0x11c1d0
leaq 0x1038(%rsp), %rdi
callq 0x113788
leaq 0x1037(%rsp), %rdi
callq 0x113770
jmp 0x11bac4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b6f8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b6eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b6d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b6b7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b6aa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b69d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
leaq 0xeb8(%rsp), %rdi
callq 0x113788
leaq 0xeb7(%rsp), %rdi
callq 0x113770
leaq 0xee0(%rsp), %rdi
callq 0x113788
leaq 0xedf(%rsp), %rdi
callq 0x113770
leaq 0xf08(%rsp), %rdi
callq 0x113788
leaq 0xf07(%rsp), %rdi
callq 0x113770
leaq 0xf50(%rsp), %rdi
callq 0x11c1d0
leaq 0xf30(%rsp), %rdi
callq 0x113788
leaq 0xf2f(%rsp), %rdi
callq 0x113770
jmp 0x11bac4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b7e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b7d3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b7b9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b7ac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b79f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
leaq 0xdb0(%rsp), %rdi
callq 0x113788
leaq 0xdaf(%rsp), %rdi
callq 0x113770
leaq 0xdd8(%rsp), %rdi
callq 0x113788
leaq 0xdd7(%rsp), %rdi
callq 0x113770
leaq 0xe20(%rsp), %rdi
callq 0x11c1d0
leaq 0xe00(%rsp), %rdi
callq 0x113788
leaq 0xdff(%rsp), %rdi
callq 0x113770
jmp 0x11bac4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b8c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b8bb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b8a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b894
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11b887
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
leaq 0xca8(%rsp), %rdi
callq 0x113788
leaq 0xca7(%rsp), %rdi
callq 0x113770
leaq 0xcd0(%rsp), %rdi
callq 0x113788
leaq 0xccf(%rsp), %rdi
callq 0x113770
leaq 0xd18(%rsp), %rdi
callq 0x11c1d0
leaq 0xcf8(%rsp), %rdi
callq 0x113788
leaq 0xcf7(%rsp), %rdi
callq 0x113770
jmp 0x11bac4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
leaq 0xc7f(%rsp), %rdi
callq 0x113770
jmp 0x11bac4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
leaq 0xc57(%rsp), %rdi
callq 0x113770
jmp 0x11bab7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
leaq 0xc2f(%rsp), %rdi
callq 0x113770
jmp 0x11baaa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11ba9d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11ba90
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11ba83
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
jmp 0x11ba76
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
leaq 0x150(%rsp), %rdi
callq 0x11cd00
jmp 0x11ba76
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1c30(%rsp)
movl %eax, 0x1c2c(%rsp)
leaq 0x2a0(%rsp), %rdi
callq 0x11d620
jmp 0x11ba76
leaq 0x2a0(%rsp), %rdi
callq 0x11d620
leaq 0xbc8(%rsp), %rdi
callq 0x11d820
leaq 0xbe8(%rsp), %rdi
callq 0x11d820
leaq 0xc08(%rsp), %rdi
callq 0x11d820
leaq 0xc30(%rsp), %rdi
callq 0x113788
leaq 0xc58(%rsp), %rdi
callq 0x113788
leaq 0xc80(%rsp), %rdi
callq 0x113788
leaq 0x1218(%rsp), %rdi
callq 0x11d860
leaq 0x1c38(%rsp), %rdi
callq 0x11d8f0
addq $0x1c48, %rsp           # imm = 0x1C48
retq
leaq 0xbc8(%rsp), %rdi
callq 0x11d820
leaq 0xbe8(%rsp), %rdi
callq 0x11d820
leaq 0xc08(%rsp), %rdi
callq 0x11d820
leaq 0xc30(%rsp), %rdi
callq 0x113788
leaq 0xc58(%rsp), %rdi
callq 0x113788
leaq 0xc80(%rsp), %rdi
callq 0x113788
leaq 0x1218(%rsp), %rdi
callq 0x11d860
leaq 0x1c38(%rsp), %rdi
callq 0x11d8f0
movq 0x1c30(%rsp), %rdi
callq 0x113440
nopl (%rax,%rax)