// File: /workspace/github_cpp_makefile_star2_O3/ArashPartow[P]exprtk-extras/exprtk_miller_rabin_primality_test.cpp
// Function: void miller_rabin_probabilistic_primality_test<double>()
void miller_rabin_probabilistic_primality_test()
{
   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 prime_numbers[] =
   {
      5083823,   5083879,   5083889,   5083909,   5083913,   5083927,   5083931,  5083957,
      5083973,   5083993,   5084017,   5084033,   5084069,   5084099,   5084111,  5084113,
      5084117,   5084129,   5084141,   5084147,   5084171,   5084179,   5084197,  5084213,
      5084221,   5084243,   5084249,   5084263,   5084269,   5084333,   5084371,  5084383,
      5084393,   5084399,   5084407,   5084423,   5084437,   5084447,   5084461,  5084473,
      5084477,   5084489,   5084501,   5084509,   5084531,   5084537,   5084543,  5084549,
      5084551,   5084557,   5084567,   5084593,   5084617,   5084627,   5084641,  5084671,
      5084689,   5084693,   5084711,   5084731,   5084743,   5084749,   5084753,  5084803,
      5084809,   5084813,   5084843,   5084851,   5084867,   5084869,   5084897,  5084903,
      6782807,   6782821,   6782827,   6782833,   6782869,   6782903,   6782911,  6782921,
      6782929,   6782933,   6782939,   6782959,   6782969,   6782977,   6783011,  6783031,
      6783047,   6783067,   6783083,   6783089,   6783097,   6783107,   6783131,  6783143,
      6783149,   6783151,   6783169,   6783193,   6783211,   6783223,   6783239,  6783241,
      6783253,   6783263,   6783299,   6783317,   6783331,   6783353,   6783421,  6783433,
      6783449,   6783457,   6783461,   6783467,   6783481,   6783521,   6783529,  6783533,
      9723667,   9723691,   9723697,   9723709,   9723713,   9723757,   9723761,  9723767,
      9723773,   9723797,   9723799,   9723803,   9723809,   9723821,   9723829,  9723841,
      9723851,   9723853,   9723869,   9723887,   9723893,   9723907,   9723913,  9723937,
      9723941,   9723943,   9723979,   9723997,   9724021,   9724061,   9724079,  9724087,
      9724097,   9724103,   9724129,   9724151,   9724171,   9724201,   9724207,  9724213,
      9724223,   9724241,   9724259,   9724277,   9724279,   9724283,   9724291,  9724327,
     10619129,  10619131,  10619137,  10619159,  10619177,  10619179,  10619209, 10619243,
     10619251,  10619263,  10619291,  10619303,  10619327,  10619341,  10619381, 10619393,
     10619431,  10619489,  10619501,  10619503,  10619513,  10619563,  10619573, 10619591,
     10619599,  10619617,  10619621,  10619641,  10619647,  10619669,  10619681, 10619711,
     10619723,  10619729,  10619731,  10619737,  10619759,  10619773,  10619783, 10619801,
     10619863,  10619893,  10619897,  10619899,  10619911,  10619923,  10619927, 10619957,
     10619971,  10619989,  10620007,  10620023,  10620041,  10620067,  10620131, 10620133,
     10620139,  10620143,  10620149,  10620151,  10620157,  10620163,  10620179, 10620199,
     10748671,  10748687,  10748693,  10748701,  10748707,  10748713,  10748747, 10748767,
     10748779,  10748783,  10748791,  10748807,  10748809,  10748827,  10748849, 10748863,
     10748867,  10748869,  10748873,  10748893,  10748897,  10748917,  10748921, 10748923,
     10748951,  10748953,  10748957,  10748963,  10748987,  10748999,  10749001, 10749023,
     10749029,  10749059,  10749061,  10749071,  10749077,  10749107,  10749121, 10749143,
     10749161,  10749163,  10749173,  10749191,  10749197,  10749199,  10749241, 10749251,
     10749259,  10749283,  10749313,  10749317,  10749337,  10749367,  10749371, 10749373,
     10749379,  10749391,  10749433,  10749437,  10749449,  10749461,  10749493, 10749581,
     10749587,  10749601,  10749617,  10749631,  10749659,  10749677,  10749679, 10749703,
     10749709,  10749719,  10749727,  10749743,  10749773,  10749779,  10749811, 10749821,
     10749833,  10749853,  10749857,  10749863,  10749881,  10749883,  10749889, 10749917,
     10749971,  10749983,  10749989,  10749997,  10750009,  10750021,  10750031, 10750037,
     10750049,  10750057,  10750073,  10750099,  10750127,  10750141,  10750147, 10750189,
     10750193,  10750249,  10750279,  10750303,  10750309,  10750319,  10750349, 10750373,
   };

   T composites[] =
   {
       199203677,  779234623,  843093203,  883543291, 1197162971,
      1282615157, 1552390397, 1765737859, 1878769589, 1993904873,
      2257133471, 2520523529, 2579094799, 2853450949, 2935025369,
      3095780533, 3164132249, 3408963511, 4260042859, 4608613981,
      4654875857, 5085931997, 7278175081, 7289187463, 9206112101
   };

   exprtk::rtl::io::println<T> println;
   random_uint<T>              random;

   symbol_table_t symbol_table;

   symbol_table.add_vector  ("prime_numbers"    , prime_numbers);
   symbol_table.add_vector  ("composite_numbers", composites   );
   symbol_table.add_function("println"          , println      );
   symbol_table.add_function("random"           , random       );

   compositor_t compositor(symbol_table);

   compositor.add(function_t()
      .name("modexp") // (base^exponent) mod m
      .var("b") // base
      .var("e") // exponent
      .var("m") // modulo
      .expression
      (
         " if (m == 1)                       "
         " {                                 "
         "    return [0];                    "
         " };                                "
         "                                   "
         " var result := 1;                  "
         " b %= m;                           "
         "                                   "
         " while (e > 0)                     "
         " {                                 "
         "    if ((e % 2) == 1)              "
         "    {                              "
         "       result := (result * b) % m; "
         "    };                             "
         "                                   "
         "    b := b^2 % m;                  "
         "    e := floor(e / 2);             "
         " };                                "
         "                                   "
         " result                            "
      ));

   compositor.add(function_t()
      .name("is_probable_prime")
      .var("n") // Number to test for primaility
      .var("k") // Number of iterations to perform
      .expression
      (
         " switch                                             "
         " {                                                  "
         "    case n <= 1       : return [false];             "
         "    case frac(n) != 0 : return [false];             "
         "    case n == 2       : return [true ];             "
         " };                                                 "
         "                                                    "
         " if (((n - 1) % 6 != 0) and ((n + 1) % 6 != 0))     "
         " {                                                  "
         "    return [false];                                 "
         " };                                                 "
         "                                                    "
         " var primes[25] :=                                  "
         "     {                                              "
         "        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                   "
         "     };                                             "
         "                                                    "
         " var upper_bound := min(n - 1, trunc(sqrt(n)) + 1); "
         "                                                    "
         " for (var i := 0; i < primes[]; i += 1)             "
         " {                                                  "
         "    if (primes[i] >= upper_bound)                   "
         "       return [true];                               "
         "    else if ((n % primes[i]) == 0)                  "
         "       return [false];                              "
         " };                                                 "
         "                                                    "
         " var s := n - 1;                                    "
         " var t := 0;                                        "
         "                                                    "
         " while ((s % 2) == 0)                               "
         " {                                                  "
         "    s := floor(s / 2);                              "
         "    t += 1;                                         "
         " };                                                 "
         "                                                    "
         " for (var trials := 0; trials < k; trials += 1)     "
         " {                                                  "
         "    var a := random(2, n - 2);                      "
         "    var x := modexp(a, s, n);                       "
         "                                                    "
         "    if ((x == 1) or (x == (n - 1)))                 "
         "    {                                               "
         "       continue;                                    "
         "    };                                              "
         "                                                    "
         "    for (var r := 1; r < t; r += 1)                 "
         "    {                                               "
         "       x := modexp(x, 2, n);                        "
         "                                                    "
         "       if (x == 1)                                  "
         "          return [false];                           "
         "       else if (x == (n - 1))                       "
         "          break;                                    "
         "    };                                              "
         "                                                    "
         "    if (x != (n - 1))                               "
         "    {                                               "
         "       return [false];                              "
         "    };                                              "
         " };                                                 "
         "                                                    "
         " return [true];                                     "
      ));

   const std::string miller_rabin_primality_test_program =
      "                                                     "
      " println('Testing prime numbers...');                "
      " for (var i := 0; i < prime_numbers[]; i += 1)       "
      " {                                                   "
      "    var n := prime_numbers[i];                       "
      "                                                     "
      "    if (is_probable_prime(n,1000))                   "
      "    {                                                "
      "       println(n, ' is correctly a prime number');   "
      "    }                                                "
      "    else                                             "
      "    {                                                "
      "       println(n, ' is NOT a prime number (error)'); "
      "    }                                                "
      " };                                                  "
      "                                                     "
      " println('Testing composite numbers...');            "
      " for (var i := 0; i < composite_numbers[]; i += 1)   "
      " {                                                   "
      "    var n := composite_numbers[i];                   "
      "                                                     "
      "    if (not(is_probable_prime(n,1000)))              "
      "    {                                                "
      "       println(n, ' is correctly a composite');      "
      "    }                                                "
      "    else                                             "
      "    {                                                "
      "       println(n, ' is a prime number (error)');     "
      "    }                                                "
      " };                                                  "
      "                                                     "
      " for (var i := 0; i < prime_numbers[]; i += 1)       "
      " {                                                   "
      "    for (var j := i; j < prime_numbers[]; j += 1)    "
      "    {                                                "
      "       var n := prime_numbers[i] * prime_numbers[j]; "
      "                                                     "
      "       if (not(is_probable_prime(n,1000)))           "
      "       {                                             "
      "          println(n, ' is correctly a composite');   "
      "       }                                             "
      "       else                                          "
      "       {                                             "
      "          println(n, ' is a prime number (error)');  "
      "       }                                             "
      "    }                                                "
      " };                                                  ";

   expression_t expression;
   expression.register_symbol_table(symbol_table);

   parser_t parser;
   parser.compile(miller_rabin_primality_test_program,expression);

   expression.value();
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x3498, %rsp           # imm = 0x3498
leaq 0x19d993(%rip), %rsi    # 0x2b7e80
leaq 0x29d0(%rsp), %rdi
movl $0xac0, %edx            # imm = 0xAC0
callq 0x117060
leaq 0x19e43a(%rip), %rsi    # 0x2b8940
leaq 0x1550(%rsp), %rdi
movl $0xc8, %edx
callq 0x117060
leaq 0x1630(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x197456(%rip), %rsi    # 0x2b1981
leaq 0x197455(%rip), %rdx    # 0x2b1987
leaq 0x1620(%rsp), %rdi
callq 0x11b024
leaq 0x1d8(%rsp), %rdi
leaq 0x1620(%rsp), %rsi
callq 0x11b0ba
movq 0x1620(%rsp), %rdi
cmpq %r14, %rdi
je 0x11a571
movq 0x1630(%rsp), %rsi
incq %rsi
callq 0x117090
leaq 0x1620(%rsp), %rdi
callq 0x11b1c2
movq %rsp, %rdi
movl $0x1, %esi
callq 0x11b2f6
leaq 0x250(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1973ea(%rip), %rsi    # 0x2b1988
leaq 0x1973f0(%rip), %rdx    # 0x2b1995
leaq 0x240(%rsp), %rdi
callq 0x11b024
movq %rsp, %rdi
leaq 0x240(%rsp), %rsi
leaq 0x29d0(%rsp), %rdx
callq 0x11b33e
movq 0x240(%rsp), %rdi
cmpq %r14, %rdi
je 0x11a5e7
movq 0x250(%rsp), %rsi
incq %rsi
callq 0x117090
leaq 0x240(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x19739d(%rip), %rsi    # 0x2b1996
leaq 0x1973a7(%rip), %rdx    # 0x2b19a7
callq 0x11b024
movq %rsp, %rdi
leaq 0x240(%rsp), %rsi
leaq 0x1550(%rsp), %rdx
callq 0x11b510
movq 0x240(%rsp), %rdi
cmpq %r14, %rdi
je 0x11a63a
movq 0x250(%rsp), %rsi
incq %rsi
callq 0x117090
leaq 0x240(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x19735c(%rip), %rsi    # 0x2b19a8
leaq 0x19735c(%rip), %rdx    # 0x2b19af
callq 0x11b024
movq %rsp, %rdi
leaq 0x240(%rsp), %rsi
leaq 0x1d8(%rsp), %rdx
callq 0x11b6e2
movq 0x240(%rsp), %rdi
cmpq %r14, %rdi
je 0x11a68d
movq 0x250(%rsp), %rsi
incq %rsi
callq 0x117090
leaq 0x240(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x197311(%rip), %rsi    # 0x2b19b0
leaq 0x197310(%rip), %rdx    # 0x2b19b6
callq 0x11b024
movq %rsp, %rdi
leaq 0x240(%rsp), %rsi
leaq 0x1620(%rsp), %rdx
callq 0x11b84c
movq 0x240(%rsp), %rdi
cmpq %r14, %rdi
je 0x11a6e0
movq 0x250(%rsp), %rsi
incq %rsi
callq 0x117090
leaq 0x240(%rsp), %rdi
movq %rsp, %rbx
movq %rbx, %rsi
callq 0x11b956
leaq 0xc28(%rsp), %rdi
callq 0x11bade
leaq 0x98(%rsp), %rbp
movq %rbp, -0x10(%rbp)
leaq 0x1972a4(%rip), %rsi    # 0x2b19b7
leaq 0x1972a3(%rip), %rdx    # 0x2b19bd
leaq 0x88(%rsp), %rdi
callq 0x11b024
leaq 0xc28(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x117550
leaq 0x18(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x197272(%rip), %rsi    # 0x2b19be
leaq 0x19726c(%rip), %rdx    # 0x2b19bf
leaq 0x8(%rsp), %rdi
callq 0x11b024
leaq 0xc68(%rsp), %r15
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x1296b4
leaq 0x38(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x199a10(%rip), %rsi    # 0x2b4192
leaq 0x199a0a(%rip), %rdx    # 0x2b4193
leaq 0x28(%rsp), %rdi
callq 0x11b024
leaq 0x28(%rsp), %rsi
movq %r15, %rdi
callq 0x1296b4
leaq 0x58(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x197205(%rip), %rsi    # 0x2b19b5
leaq 0x1971ff(%rip), %rdx    # 0x2b19b6
leaq 0x48(%rsp), %rdi
callq 0x11b024
leaq 0x48(%rsp), %rsi
movq %r15, %rdi
callq 0x1296b4
leaq 0x78(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1971e2(%rip), %rsi    # 0x2b19c0
leaq 0x197497(%rip), %rdx    # 0x2b1c7c
leaq 0x68(%rsp), %rdi
callq 0x11b024
leaq 0xc48(%rsp), %r12
leaq 0x68(%rsp), %rsi
movq %r12, %rdi
callq 0x117550
leaq 0xb70(%rsp), %rdi
leaq 0xc28(%rsp), %rsi
callq 0x122554
leaq 0xb78(%rsp), %rcx
cmpq %rax, %rcx
jne 0x11a8d8
leaq 0x240(%rsp), %rdi
leaq 0xc28(%rsp), %rsi
movq %r12, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x1212ba
testb %al, %al
je 0x11a8d8
leaq 0xc28(%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 0xba0(%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 0x122178
movq (%rax), %r12
leaq 0xc28(%rsp), %rsi
leaq 0xb70(%rsp), %rdi
callq 0x1224d8
movq %r12, %rdi
movq %rax, %rsi
callq 0x1221f4
movq 0x68(%rsp), %rdi
cmpq %r14, %rdi
je 0x11a8ef
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x117090
movq 0x48(%rsp), %rdi
cmpq %r13, %rdi
je 0x11a906
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x117090
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x11a922
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x117090
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x11a93e
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x117090
movq 0x88(%rsp), %rdi
cmpq %rbp, %rdi
je 0x11a95b
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x117090
movq %r15, %rdi
callq 0x12994e
leaq 0xc58(%rsp), %r14
movq -0x10(%r14), %rdi
cmpq %r14, %rdi
je 0x11a984
movq 0xc58(%rsp), %rsi
incq %rsi
callq 0x117090
leaq 0xc38(%rsp), %rbp
movq -0x10(%rbp), %rdi
cmpq %rbp, %rdi
je 0x11a9a5
movq 0xc38(%rsp), %rsi
incq %rsi
callq 0x117090
leaq 0xc28(%rsp), %rdi
callq 0x11bade
leaq 0x88(%rsp), %rdi
leaq 0x98(%rsp), %rax
movq %rax, (%rdi)
leaq 0x1972b1(%rip), %rsi    # 0x2b1c7d
leaq 0x1972bb(%rip), %rdx    # 0x2b1c8e
callq 0x11b024
leaq 0xc28(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x117550
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x196e4f(%rip), %rsi    # 0x2b1850
leaq 0x196e49(%rip), %rdx    # 0x2b1851
callq 0x11b024
leaq 0xc68(%rsp), %r15
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x1296b4
leaq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
movq %rax, (%rdi)
leaq 0x196d92(%rip), %rsi    # 0x2b17c8
leaq 0x196d8c(%rip), %rdx    # 0x2b17c9
callq 0x11b024
leaq 0x28(%rsp), %rsi
movq %r15, %rdi
callq 0x1296b4
leaq 0x48(%rsp), %rdi
movq %r13, (%rdi)
leaq 0x197231(%rip), %rsi    # 0x2b1c8f
leaq 0x197f5e(%rip), %rdx    # 0x2b29c3
callq 0x11b024
leaq 0xc48(%rsp), %r12
leaq 0x48(%rsp), %rsi
movq %r12, %rdi
callq 0x117550
leaq 0xc28(%rsp), %rsi
leaq 0xb70(%rsp), %rdi
callq 0x122554
leaq 0xb78(%rsp), %rcx
cmpq %rax, %rcx
jne 0x11ab53
leaq 0x240(%rsp), %rdi
leaq 0xc28(%rsp), %rsi
movq %r12, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x1212ba
testb %al, %al
je 0x11ab53
leaq 0xc28(%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 0xba0(%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 0x122178
movq (%rax), %r12
leaq 0xc28(%rsp), %rsi
leaq 0xb70(%rsp), %rdi
callq 0x1224d8
movq %r12, %rdi
movq %rax, %rsi
callq 0x1221f4
movq 0x48(%rsp), %rdi
cmpq %r13, %rdi
je 0x11ab6a
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x117090
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x11ab86
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x117090
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x11aba2
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x117090
movq 0x88(%rsp), %rdi
leaq 0x98(%rsp), %rax
cmpq %rax, %rdi
je 0x11abc7
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x117090
movq %r15, %rdi
callq 0x12994e
movq 0xc48(%rsp), %rdi
cmpq %r14, %rdi
je 0x11abec
movq 0xc58(%rsp), %rsi
incq %rsi
callq 0x117090
movq 0xc28(%rsp), %rdi
cmpq %rbp, %rdi
je 0x11ac09
movq 0xc38(%rsp), %rsi
incq %rsi
callq 0x117090
leaq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
movq %rax, (%rdi)
leaq 0x197da7(%rip), %rsi    # 0x2b29c4
leaq 0x19875b(%rip), %rdx    # 0x2b337f
callq 0x11b024
leaq 0x28(%rsp), %rdi
callq 0x11bbaa
movq 0x30(%rsp), %rax
movq 0x38(%rsp), %rcx
subq %rax, %rcx
je 0x11ac65
sarq $0x3, %rcx
movq (%rsp), %rdx
cmpq $0x1, %rcx
adcq $0x0, %rcx
cmpq %rbx, %rax
je 0x11ac72
cmpq (%rax), %rdx
je 0x11ac72
addq $0x8, %rax
decq %rcx
jne 0x11ac52
leaq 0x30(%rsp), %rdi
movq %rsp, %rsi
callq 0x129bd4
leaq 0x88(%rsp), %rdi
movl $0x7f, %esi
callq 0x11bc36
leaq 0xc28(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x11bd36
leaq 0x188(%rsp), %rdi
callq 0x129dba
leaq 0x158(%rsp), %rdi
callq 0x129dba
leaq 0x128(%rsp), %rdi
callq 0x129dba
leaq 0xf8(%rsp), %rdi
callq 0x129dba
leaq 0xc8(%rsp), %rdi
callq 0x129dba
leaq 0x98(%rsp), %rdi
callq 0x129dba
leaq 0xc28(%rsp), %rdi
leaq 0x8(%rsp), %rsi
leaq 0x28(%rsp), %rdx
callq 0x11c55a
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
leaq 0xc28(%rsp), %rdi
callq 0x11d0f6
leaq 0x28(%rsp), %rdi
callq 0x11d3b8
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x11ad40
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x117090
leaq 0x240(%rsp), %rdi
callq 0x11d406
movq %rsp, %rdi
callq 0x11d468
leaq 0x230(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x11ad76
movq 0x230(%rsp), %rsi
incq %rsi
callq 0x117090
leaq 0x2919f3(%rip), %rax    # 0x3ac770
leaq 0x208(%rsp), %rcx
movq %rax, -0x30(%rcx)
movq -0x10(%rcx), %rdi
cmpq %rcx, %rdi
je 0x11ada2
movq 0x208(%rsp), %rsi
incq %rsi
callq 0x117090
addq $0x3498, %rsp           # imm = 0x3498
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x11adcb
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x11c512
jmp 0x11aec1
movq %rax, %rbx
jmp 0x11aec1
movq %rax, %rbx
jmp 0x11aecb
jmp 0x11ae2f
jmp 0x11addf
movq %rax, %rbx
jmp 0x11af0a
jmp 0x11ade9
movq %rax, %rbx
jmp 0x11af26
jmp 0x11adf3
movq %rax, %rbx
jmp 0x11af42
jmp 0x11ae27
jmp 0x11ae2f
jmp 0x11ae01
movq %rax, %rbx
jmp 0x11af76
jmp 0x11ae0b
movq %rax, %rbx
jmp 0x11af8d
jmp 0x11ae15
movq %rax, %rbx
jmp 0x11afa9
jmp 0x11ae1f
movq %rax, %rbx
jmp 0x11afc5
movq %rax, %rbx
jmp 0x11afe2
movq %rax, %rbx
jmp 0x11afef
jmp 0x11ae6e
jmp 0x11ae45
jmp 0x11ae6e
jmp 0x11ae45
jmp 0x11ae6e
jmp 0x11ae45
jmp 0x11ae6e
movq %rax, %rbx
movq 0x240(%rsp), %rdi
cmpq %r14, %rdi
je 0x11affc
movq 0x250(%rsp), %rsi
incq %rsi
callq 0x117090
jmp 0x11affc
movq %rax, %rbx
jmp 0x11affc
jmp 0x11ae78
movq %rax, %rbx
jmp 0x11b004
movq %rax, %rbx
movq 0x1620(%rsp), %rdi
cmpq %r14, %rdi
je 0x11b011
movq 0x1630(%rsp), %rsi
incq %rsi
callq 0x117090
jmp 0x11b011
movq %rax, %rbx
jmp 0x11b011
movq %rax, %rbx
leaq 0xc28(%rsp), %rdi
callq 0x11d0f6
leaq 0x28(%rsp), %rdi
callq 0x11d3b8
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x11afef
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x117090
jmp 0x11afef
movq %rax, %rbx
movq 0x48(%rsp), %rdi
cmpq %r13, %rdi
je 0x11af0a
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x117090
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x11af26
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x117090
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x11af42
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x117090
movq 0x88(%rsp), %rdi
leaq 0x98(%rsp), %rax
cmpq %rax, %rdi
jne 0x11afd2
jmp 0x11afe2
movq %rax, %rbx
movq 0x68(%rsp), %rdi
cmpq %r14, %rdi
je 0x11af76
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x117090
movq 0x48(%rsp), %rdi
cmpq %r13, %rdi
je 0x11af8d
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x117090
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x11afa9
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x117090
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x11afc5
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x117090
movq 0x88(%rsp), %rdi
cmpq %rbp, %rdi
je 0x11afe2
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x117090
leaq 0xc28(%rsp), %rdi
callq 0x11bb6a
leaq 0x240(%rsp), %rdi
callq 0x11d406
movq %rsp, %rdi
callq 0x11d468
leaq 0x1d8(%rsp), %rdi
callq 0x11d500
movq %rbx, %rdi
callq 0x117300