// File: /workspace/github_cpp_makefile_star2_O1/ArashPartow[P]exprtk/exprtk_benchmark.cpp
// Function: perform_file_based_benchmark(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, unsigned long const&)
void perform_file_based_benchmark(const std::string& file_name, const std::size_t& rounds)
{
   std::deque<std::string> expr_str_list;

   if (0 == load_expression_file(file_name,expr_str_list))
   {
      printf("Failed to load any expressions from: %s\n", file_name.c_str());
      return;
   }

   typedef exprtk::symbol_table<double> symbol_table_t;
   typedef exprtk::expression<double>   expression_t;
   typedef exprtk::parser<double>       parser_t;

   std::deque<expression_t> expression_list;

   symbol_table_t symbol_table;

   double a = 1.1;
   double b = 2.2;
   double c = 3.3;
   double x = 2.123456;
   double y = 3.123456;
   double z = 4.123456;
   double w = 5.123456;

   exprtk::rtl::vecops::package<double> vector_package;

   symbol_table.add_variable("a", a);
   symbol_table.add_variable("b", b);
   symbol_table.add_variable("c", c);

   symbol_table.add_variable("x", x);
   symbol_table.add_variable("y", y);
   symbol_table.add_variable("z", z);
   symbol_table.add_variable("w", w);

   exprtk::polynomial<double, 1> poly01;
   exprtk::polynomial<double, 2> poly02;
   exprtk::polynomial<double, 3> poly03;
   exprtk::polynomial<double, 4> poly04;
   exprtk::polynomial<double, 5> poly05;
   exprtk::polynomial<double, 6> poly06;
   exprtk::polynomial<double, 7> poly07;
   exprtk::polynomial<double, 8> poly08;
   exprtk::polynomial<double, 9> poly09;
   exprtk::polynomial<double,10> poly10;
   exprtk::polynomial<double,11> poly11;
   exprtk::polynomial<double,12> poly12;

   symbol_table.add_function("poly01", poly01);
   symbol_table.add_function("poly02", poly02);
   symbol_table.add_function("poly03", poly03);
   symbol_table.add_function("poly04", poly04);
   symbol_table.add_function("poly05", poly05);
   symbol_table.add_function("poly06", poly06);
   symbol_table.add_function("poly07", poly07);
   symbol_table.add_function("poly08", poly08);
   symbol_table.add_function("poly09", poly09);
   symbol_table.add_function("poly10", poly10);
   symbol_table.add_function("poly11", poly11);
   symbol_table.add_function("poly12", poly12);

   symbol_table.add_package(vector_package);


   static double e = exprtk::details::numeric::constant::e;
   symbol_table.add_variable("e", e, true);

   symbol_table.add_constants();

   {
      parser_t parser;

      for (std::size_t i = 0; i < expr_str_list.size(); ++i)
      {
         expression_t expression;
         expression.register_symbol_table(symbol_table);

         if (!parser.compile(expr_str_list[i],expression))
         {
            printf("[perform_file_based_benchmark] - Parser Error: %s\tExpression: %s\n",
                   parser.error().c_str(),
                   expr_str_list[i].c_str());

            return;
         }

         expression_list.push_back(expression);
      }
   }

   exprtk::timer total_timer;
   exprtk::timer timer;

   double single_eval_total_time = 0.0;

   total_timer.start();

   for (std::size_t i = 0; i < expression_list.size(); ++i)
   {
      expression_t& expression = expression_list[i];

      a = 1.1;
      b = 2.2;
      c = 3.3;
      x = 2.123456;
      y = 3.123456;
      z = 4.123456;
      w = 5.123456;

      timer.start();
      double sum = 0.0;

      for (std::size_t r = 0; r < rounds; ++r)
      {
         sum += expression.value();
         std::swap(a,b);
         std::swap(x,y);
      }

      timer.stop();

      printf("Expression %3d of %3d %9.3f ns\t%10d ns\t(%30.10f)  '%s'\n",
             static_cast<int>(i + 1),
             static_cast<int>(expression_list.size()),
             (timer.time() * 1000000000.0) / (1.0 * rounds),
             static_cast<int>(timer.time() * 1000000000.0),
             sum,
             expr_str_list[i].c_str());

      fflush(stdout);

      single_eval_total_time += (timer.time() * 1000000000.0) / (1.0 * rounds);
   }

   total_timer.stop();

   printf("[*] Number Of Evals:        %15.0f\n",
          rounds * (expression_list.size() * 1.0));

   printf("[*] Total Time:             %9.3fsec\n",
          total_timer.time());

   printf("[*] Total Single Eval Time: %9.3fms\n",
          single_eval_total_time / 1000000.0);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1548, %rsp           # imm = 0x1548
movq %rsi, %rbx
movq %rdi, %r14
xorpd %xmm0, %xmm0
leaq 0xc0(%rsp), %r15
movapd %xmm0, 0x40(%r15)
movapd %xmm0, 0x30(%r15)
movapd %xmm0, 0x20(%r15)
movapd %xmm0, 0x10(%r15)
movapd %xmm0, (%r15)
movq %r15, %rdi
xorl %esi, %esi
callq 0x124998
movq %r14, %rdi
movq %r15, %rsi
callq 0x1223d0
testq %rax, %rax
je 0x1209ff
xorpd %xmm0, %xmm0
leaq 0x70(%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 0x124816
movq %rsp, %rdi
movl $0x1, %esi
callq 0x1217b4
movabsq $0x3ff199999999999a, %rax # imm = 0x3FF199999999999A
movq %rax, 0x28(%rsp)
movabsq $0x400199999999999a, %rax # imm = 0x400199999999999A
movq %rax, 0x20(%rsp)
movabsq $0x400a666666666666, %rax # imm = 0x400A666666666666
movq %rax, 0x68(%rsp)
movabsq $0x4000fcd67fd3f5b6, %rax # imm = 0x4000FCD67FD3F5B6
movq %rax, 0x18(%rsp)
movabsq $0x4008fcd67fd3f5b6, %rax # imm = 0x4008FCD67FD3F5B6
movq %rax, 0x10(%rsp)
movabsq $0x40107e6b3fe9fadb, %rax # imm = 0x40107E6B3FE9FADB
movq %rax, 0x60(%rsp)
movabsq $0x40147e6b3fe9fadb, %rax # imm = 0x40147E6B3FE9FADB
movq %rax, 0x58(%rsp)
leaq 0xd68(%rsp), %rdi
callq 0x1224f4
leaq 0x450(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1bd5ad(%rip), %rsi    # 0x2dd34e
leaq 0x1bd5a7(%rip), %rdx    # 0x2dd34f
leaq 0x440(%rsp), %rdi
callq 0x1283de
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x28(%rsp), %rdx
xorl %ecx, %ecx
callq 0x121942
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11fde9
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x11a0c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1bbe78(%rip), %rsi    # 0x2dbc73
leaq 0x1bbe72(%rip), %rdx    # 0x2dbc74
callq 0x1283de
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x20(%rsp), %rdx
xorl %ecx, %ecx
callq 0x121942
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11fe3b
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x11a0c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1bbae0(%rip), %rsi    # 0x2db92d
leaq 0x1bbada(%rip), %rdx    # 0x2db92e
callq 0x1283de
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x68(%rsp), %rdx
xorl %ecx, %ecx
callq 0x121942
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11fe8d
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x11a0c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1bbda9(%rip), %rsi    # 0x2dbc48
leaq 0x1bbda3(%rip), %rdx    # 0x2dbc49
callq 0x1283de
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x18(%rsp), %rdx
xorl %ecx, %ecx
callq 0x121942
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11fedf
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x11a0c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1bbca5(%rip), %rsi    # 0x2dbb96
leaq 0x1bbc9f(%rip), %rdx    # 0x2dbb97
callq 0x1283de
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x10(%rsp), %rdx
xorl %ecx, %ecx
callq 0x121942
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11ff31
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x11a0c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1bc222(%rip), %rsi    # 0x2dc165
leaq 0x1bc21c(%rip), %rdx    # 0x2dc166
callq 0x1283de
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x60(%rsp), %rdx
xorl %ecx, %ecx
callq 0x121942
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11ff83
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x11a0c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1bc1fe(%rip), %rsi    # 0x2dc193
leaq 0x1bc1f8(%rip), %rdx    # 0x2dc194
callq 0x1283de
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x58(%rsp), %rdx
xorl %ecx, %ecx
callq 0x121942
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11ffd5
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x11a0c0
xorl %eax, %eax
movw %ax, 0x2d0(%rsp)
movq %rax, 0x2d8(%rsp)
movq $-0x1, %rcx
movq %rcx, 0x2e0(%rsp)
movq $0x3, 0x2e8(%rsp)
leaq 0x2c6117(%rip), %rdx    # 0x3e6120
movq %rdx, 0x2c8(%rsp)
movw %ax, 0x2a8(%rsp)
movq %rax, 0x2b0(%rsp)
movq %rcx, 0x2b8(%rsp)
movq $0x4, 0x2c0(%rsp)
leaq 0x2c62b4(%rip), %rdx    # 0x3e62f0
movq %rdx, 0x2a0(%rsp)
movw %ax, 0x280(%rsp)
movq %rax, 0x288(%rsp)
movq %rcx, 0x290(%rsp)
movq $0x5, 0x298(%rsp)
leaq 0x2c6361(%rip), %rdx    # 0x3e63d0
movq %rdx, 0x278(%rsp)
movw %ax, 0x258(%rsp)
movq %rax, 0x260(%rsp)
movq %rcx, 0x268(%rsp)
movq $0x6, 0x270(%rsp)
leaq 0x2c640e(%rip), %rdx    # 0x3e64b0
movq %rdx, 0x250(%rsp)
movw %ax, 0x230(%rsp)
movq %rax, 0x238(%rsp)
movq %rcx, 0x240(%rsp)
movq $0x7, 0x248(%rsp)
leaq 0x2c64bb(%rip), %rdx    # 0x3e6590
movq %rdx, 0x228(%rsp)
movw %ax, 0x208(%rsp)
movq %rax, 0x210(%rsp)
movq %rcx, 0x218(%rsp)
movq $0x8, 0x220(%rsp)
leaq 0x2c6568(%rip), %rdx    # 0x3e6670
movq %rdx, 0x200(%rsp)
movw %ax, 0x1e0(%rsp)
movq %rax, 0x1e8(%rsp)
movq %rcx, 0x1f0(%rsp)
movq $0x9, 0x1f8(%rsp)
leaq 0x2c6615(%rip), %rdx    # 0x3e6750
movq %rdx, 0x1d8(%rsp)
movw %ax, 0x1b8(%rsp)
movq %rax, 0x1c0(%rsp)
movq %rcx, 0x1c8(%rsp)
movq $0xa, 0x1d0(%rsp)
leaq 0x2c66c2(%rip), %rdx    # 0x3e6830
movq %rdx, 0x1b0(%rsp)
movw %ax, 0x190(%rsp)
movq %rax, 0x198(%rsp)
movq %rcx, 0x1a0(%rsp)
movq $0xb, 0x1a8(%rsp)
leaq 0x2c676f(%rip), %rdx    # 0x3e6910
movq %rdx, 0x188(%rsp)
movw %ax, 0x168(%rsp)
movq %rax, 0x170(%rsp)
movq %rcx, 0x178(%rsp)
movq $0xc, 0x180(%rsp)
leaq 0x2c681c(%rip), %rdx    # 0x3e69f0
movq %rdx, 0x160(%rsp)
movw %ax, 0x140(%rsp)
movq %rax, 0x148(%rsp)
movq %rcx, 0x150(%rsp)
movq $0xd, 0x158(%rsp)
leaq 0x2c68c9(%rip), %rdx    # 0x3e6ad0
movq %rdx, 0x138(%rsp)
movw %ax, 0x118(%rsp)
movq %rax, 0x120(%rsp)
movq %rcx, 0x128(%rsp)
movq $0xe, 0x130(%rsp)
leaq 0x2c6976(%rip), %rax    # 0x3e6bb0
movq %rax, 0x110(%rsp)
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1bba21(%rip), %rsi    # 0x2dbc75
leaq 0x1bba20(%rip), %rdx    # 0x2dbc7b
callq 0x1283de
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x2c8(%rsp), %rdx
callq 0x122b9e
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x120295
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x11a0c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1bb9d5(%rip), %rsi    # 0x2dbc7c
leaq 0x1bb9d4(%rip), %rdx    # 0x2dbc82
callq 0x1283de
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x2a0(%rsp), %rdx
callq 0x122b9e
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x1202e8
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x11a0c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1bb989(%rip), %rsi    # 0x2dbc83
leaq 0x1bb988(%rip), %rdx    # 0x2dbc89
callq 0x1283de
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x278(%rsp), %rdx
callq 0x122b9e
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x12033b
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x11a0c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1bb93d(%rip), %rsi    # 0x2dbc8a
leaq 0x1bb93c(%rip), %rdx    # 0x2dbc90
callq 0x1283de
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x250(%rsp), %rdx
callq 0x122b9e
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x12038e
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x11a0c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1bb8f1(%rip), %rsi    # 0x2dbc91
leaq 0x1bb8f0(%rip), %rdx    # 0x2dbc97
callq 0x1283de
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x228(%rsp), %rdx
callq 0x122b9e
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x1203e1
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x11a0c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1bb8a5(%rip), %rsi    # 0x2dbc98
leaq 0x1bb8a4(%rip), %rdx    # 0x2dbc9e
callq 0x1283de
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x200(%rsp), %rdx
callq 0x122b9e
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x120434
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x11a0c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1bb859(%rip), %rsi    # 0x2dbc9f
leaq 0x1bb858(%rip), %rdx    # 0x2dbca5
callq 0x1283de
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x1d8(%rsp), %rdx
callq 0x122b9e
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x120487
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x11a0c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1bb80d(%rip), %rsi    # 0x2dbca6
leaq 0x1bb80c(%rip), %rdx    # 0x2dbcac
callq 0x1283de
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x1b0(%rsp), %rdx
callq 0x122b9e
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x1204da
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x11a0c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1bb7c1(%rip), %rsi    # 0x2dbcad
leaq 0x1bb7c0(%rip), %rdx    # 0x2dbcb3
callq 0x1283de
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x188(%rsp), %rdx
callq 0x122b9e
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x12052d
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x11a0c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1bb775(%rip), %rsi    # 0x2dbcb4
leaq 0x1bb774(%rip), %rdx    # 0x2dbcba
callq 0x1283de
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x160(%rsp), %rdx
callq 0x122b9e
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x120580
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x11a0c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1bb729(%rip), %rsi    # 0x2dbcbb
leaq 0x1bb728(%rip), %rdx    # 0x2dbcc1
callq 0x1283de
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x138(%rsp), %rdx
callq 0x122b9e
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x1205d3
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x11a0c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1bb6dd(%rip), %rsi    # 0x2dbcc2
leaq 0x1bb6dc(%rip), %rdx    # 0x2dbcc8
callq 0x1283de
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x110(%rsp), %rdx
callq 0x122b9e
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x120626
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x11a0c0
leaq 0xd68(%rsp), %rdi
movq %rsp, %rsi
callq 0x12f120
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1bc897(%rip), %rsi    # 0x2dcedf
leaq 0x1bc891(%rip), %rdx    # 0x2dcee0
callq 0x1283de
leaq 0x32dcad(%rip), %rdx    # 0x44e308
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
movl $0x1, %ecx
callq 0x121942
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x12068d
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x11a0c0
movq %rsp, %r14
movq %r14, %rdi
callq 0x1217fc
leaq 0x2f0(%rsp), %rdi
movl $0x7f, %esi
callq 0x122cc6
leaq 0x440(%rsp), %rdi
leaq 0x2f0(%rsp), %rsi
callq 0x122dc6
leaq 0x3f0(%rsp), %rdi
callq 0x12aefe
leaq 0x3c0(%rsp), %rdi
callq 0x12aefe
leaq 0x390(%rsp), %rdi
callq 0x12aefe
leaq 0x360(%rsp), %rdi
callq 0x12aefe
leaq 0x330(%rsp), %rdi
callq 0x12aefe
leaq 0x300(%rsp), %rdi
callq 0x12aefe
leaq 0x2f0(%rsp), %r12
leaq 0x440(%rsp), %r13
xorl %r15d, %r15d
movq 0x108(%rsp), %rax
movq %rax, %rcx
subq 0xe8(%rsp), %rcx
shrq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
shlq $0x4, %rcx
movq 0xf0(%rsp), %rax
subq 0xf8(%rsp), %rax
movq 0xe0(%rsp), %rdx
sarq $0x5, %rax
subq 0xd0(%rsp), %rdx
sarq $0x5, %rdx
addq %rax, %rdx
addq %rcx, %rdx
cmpq %rdx, %r15
jae 0x120a15
movq %r12, %rdi
callq 0x1235ea
movq 0x2f8(%rsp), %rcx
movq 0x300(%rsp), %rax
subq %rcx, %rax
je 0x1207e3
sarq $0x3, %rax
cmpq $0x1, %rax
movq %rax, %rdi
adcq $0x0, %rdi
cmpq %r14, %rcx
je 0x1207f3
movq (%rsp), %rdx
cmpq (%rcx), %rdx
je 0x1207f3
addq $0x8, %rcx
movl $0x1, %esi
subq %rdi, %rsi
xorl %edi, %edi
cmpq %rdi, %rsi
je 0x1207e3
decq %rdi
cmpq %r14, %rcx
je 0x1207db
leaq 0x8(%rcx), %r8
cmpq (%rcx), %rdx
movq %r8, %rcx
jne 0x1207c2
negq %rdi
cmpq %rax, %rdi
jb 0x1207f3
leaq 0x2f8(%rsp), %rdi
movq %r14, %rsi
callq 0x1a600c
movq 0xd0(%rsp), %rsi
movq %rsi, %rax
subq 0xd8(%rsp), %rax
sarq $0x5, %rax
addq %r15, %rax
cmpq $0xf, %rax
ja 0x12081f
movq %r15, %rax
shlq $0x5, %rax
addq %rax, %rsi
jmp 0x12085a
movq %rax, %rcx
shrq $0x4, %rcx
movq %rcx, %rdx
movabsq $-0x1000000000000000, %rsi # imm = 0xF000000000000000
orq %rsi, %rdx
testq %rax, %rax
cmovgq %rcx, %rdx
movq 0xe8(%rsp), %rcx
movq %rdx, %rsi
shlq $0x4, %rsi
subq %rsi, %rax
shlq $0x5, %rax
addq (%rcx,%rdx,8), %rax
movq %rax, %rsi
movq %r13, %rdi
movq %r12, %rdx
callq 0x123684
movl %eax, %ebp
testb %al, %al
je 0x12087d
leaq 0x70(%rsp), %rdi
movq %r12, %rsi
callq 0x124056
jmp 0x1209d9
movq 0x758(%rsp), %rdi
cmpq %rdi, 0x778(%rsp)
je 0x1208cc
movq %rdi, %rcx
subq 0x760(%rsp), %rcx
movq %rcx, %rax
sarq $0x3, %rax
movabsq $-0x30c30c30c30c30c3, %rdx # imm = 0xCF3CF3CF3CF3CF3D
imulq %rdx, %rax
cmpq $0x3, %rax
jb 0x120921
testq %rcx, %rcx
jle 0x1208f5
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq %rdx
jmp 0x12090b
leaq 0x48(%rsp), %rax
movq %rax, 0x38(%rsp)
movabsq $0x726f727245206f4e, %rax # imm = 0x726F727245206F4E
movq %rax, 0x48(%rsp)
movq $0x8, 0x40(%rsp)
movb $0x0, 0x50(%rsp)
jmp 0x120940
notq %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq %rdx
notq %rdx
movq 0x770(%rsp), %rax
imulq $-0x1f8, %rdx, %rdi     # imm = 0xFE08
addq (%rax,%rdx,8), %rdi
addq %rcx, %rdi
leaq 0x48(%rsp), %rax
movq %rax, 0x38(%rsp)
movq 0x38(%rdi), %rsi
movq 0x40(%rdi), %rdx
addq %rsi, %rdx
leaq 0x38(%rsp), %rdi
callq 0x124c7a
movq 0xd0(%rsp), %rcx
movq %rcx, %rax
subq 0xd8(%rsp), %rax
movq 0x38(%rsp), %rsi
sarq $0x5, %rax
addq %r15, %rax
cmpq $0xf, %rax
ja 0x120971
movq %r15, %rax
shlq $0x5, %rax
addq %rax, %rcx
jmp 0x1209ac
movq %rax, %rcx
shrq $0x4, %rcx
movq %rcx, %rdx
movabsq $-0x1000000000000000, %rdi # imm = 0xF000000000000000
orq %rdi, %rdx
testq %rax, %rax
cmovgq %rcx, %rdx
movq 0xe8(%rsp), %rcx
movq %rdx, %rdi
shlq $0x4, %rdi
subq %rdi, %rax
shlq $0x5, %rax
addq (%rcx,%rdx,8), %rax
movq %rax, %rcx
movq (%rcx), %rdx
leaq 0x1bb313(%rip), %rdi    # 0x2dbcc9
xorl %eax, %eax
callq 0x11a080
movq 0x38(%rsp), %rdi
leaq 0x48(%rsp), %rax
cmpq %rax, %rdi
je 0x1209d9
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x11a0c0
movq %r12, %rdi
callq 0x1240a4
incq %r15
testb %bpl, %bpl
jne 0x120720
leaq 0x440(%rsp), %rdi
callq 0x1240f2
jmp 0x120fc2
movq (%r14), %rsi
leaq 0x1bb241(%rip), %rdi    # 0x2dbc4a
xorl %eax, %eax
callq 0x11a080
jmp 0x120fe1
leaq 0x440(%rsp), %r15
movq %r15, %rdi
callq 0x1240f2
xorl %r14d, %r14d
movb %r14b, (%r15)
leaq 0x448(%rsp), %rdi
xorpd %xmm0, %xmm0
movupd %xmm0, (%rdi)
movupd %xmm0, 0x10(%rdi)
leaq 0x2f8(%rsp), %r15
movb %r14b, -0x8(%r15)
movupd %xmm0, (%r15)
movupd %xmm0, 0x10(%r15)
movb $0x1, -0x8(%rdi)
xorl %esi, %esi
callq 0x11a280
xorpd %xmm0, %xmm0
leaq 0x1bb29e(%rip), %r13    # 0x2dbd0b
movq 0xb8(%rsp), %rcx
movq 0x98(%rsp), %rax
movq %rcx, %rdx
subq %rax, %rdx
shrq $0x3, %rdx
cmpq $0x1, %rcx
adcq $-0x1, %rdx
shlq $0x4, %rdx
movq 0xa0(%rsp), %rcx
subq 0xa8(%rsp), %rcx
sarq $0x5, %rcx
movq 0x80(%rsp), %r12
movq 0x90(%rsp), %rsi
subq %r12, %rsi
sarq $0x5, %rsi
addq %rcx, %rsi
addq %rdx, %rsi
cmpq %rsi, %r14
movsd %xmm0, 0x30(%rsp)
jae 0x120e8b
movq %r12, %rcx
subq 0x88(%rsp), %rcx
sarq $0x5, %rcx
addq %r14, %rcx
cmpq $0xf, %rcx
ja 0x120af7
movq %r14, %rax
shlq $0x5, %rax
addq %rax, %r12
jmp 0x120b2a
movq %rcx, %rdx
shrq $0x4, %rdx
movq %rdx, %rsi
movabsq $-0x1000000000000000, %rdi # imm = 0xF000000000000000
orq %rdi, %rsi
testq %rcx, %rcx
cmovgq %rdx, %rsi
movq %rsi, %rdx
shlq $0x4, %rdx
subq %rdx, %rcx
shlq $0x5, %rcx
addq (%rax,%rsi,8), %rcx
movq %rcx, %r12
movabsq $0x3ff199999999999a, %rax # imm = 0x3FF199999999999A
movq %rax, 0x28(%rsp)
movabsq $0x400199999999999a, %rax # imm = 0x400199999999999A
movq %rax, 0x20(%rsp)
movabsq $0x400a666666666666, %rax # imm = 0x400A666666666666
movq %rax, 0x68(%rsp)
movabsq $0x4000fcd67fd3f5b6, %rax # imm = 0x4000FCD67FD3F5B6
movq %rax, 0x18(%rsp)
movabsq $0x4008fcd67fd3f5b6, %rax # imm = 0x4008FCD67FD3F5B6
movq %rax, 0x10(%rsp)
movabsq $0x40107e6b3fe9fadb, %rax # imm = 0x40107E6B3FE9FADB
movq %rax, 0x60(%rsp)
movabsq $0x40147e6b3fe9fadb, %rax # imm = 0x40147E6B3FE9FADB
movq %rax, 0x58(%rsp)
movb $0x1, 0x2f0(%rsp)
movq %r15, %rdi
xorl %esi, %esi
callq 0x11a280
cmpq $0x0, (%rbx)
je 0x120c0f
xorpd %xmm0, %xmm0
movsd %xmm0, 0x8(%rsp)
xorl %ebp, %ebp
movq (%r12), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movsd 0x8(%rsp), %xmm1
addsd %xmm0, %xmm1
movsd %xmm1, 0x8(%rsp)
movsd 0x28(%rsp), %xmm0
movsd 0x20(%rsp), %xmm1
movsd %xmm1, 0x28(%rsp)
movsd %xmm0, 0x20(%rsp)
movsd 0x18(%rsp), %xmm0
movsd 0x10(%rsp), %xmm1
movsd %xmm1, 0x18(%rsp)
movsd %xmm0, 0x10(%rsp)
incq %rbp
cmpq (%rbx), %rbp
jb 0x120bb7
jmp 0x120c19
xorpd %xmm0, %xmm0
movsd %xmm0, 0x8(%rsp)
leaq 0x308(%rsp), %rdi
xorl %esi, %esi
callq 0x11a280
movb $0x0, 0x2f0(%rsp)
movq 0xb8(%rsp), %rcx
movl 0x98(%rsp), %edx
movl %ecx, %eax
subl %edx, %eax
shrl $0x3, %eax
cmpq $0x1, %rcx
adcl $-0x1, %eax
movq 0x308(%rsp), %rcx
movsd 0x1b64c3(%rip), %xmm0   # 0x2d7120
subq 0x2f8(%rsp), %rcx
jl 0x120caf
imulq $0xf4240, %rcx, %rcx    # imm = 0xF4240
addq 0x310(%rsp), %rcx
subq 0x300(%rsp), %rcx
movq %rcx, %xmm1
punpckldq 0x1b6545(%rip), %xmm1 # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x1b654d(%rip), %xmm1   # 0x2d71e0
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
mulsd 0x1b6381(%rip), %xmm0   # 0x2d7028
mulsd 0x1b6479(%rip), %xmm0   # 0x2d7128
movq 0x90(%rsp), %rdx
movq 0xa0(%rsp), %rsi
subq 0xa8(%rsp), %rsi
subq 0x80(%rsp), %rdx
movq (%rbx), %rdi
movq 0x308(%rsp), %r8
subq 0x2f8(%rsp), %r8
jl 0x120d30
imulq $0xf4240, %r8, %rcx     # imm = 0xF4240
addq 0x310(%rsp), %rcx
subq 0x300(%rsp), %rcx
movq %rcx, %xmm1
punpckldq 0x1b64c8(%rip), %xmm1 # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x1b64d0(%rip), %xmm1   # 0x2d71e0
movapd %xmm1, %xmm2
unpckhpd %xmm1, %xmm2            # xmm2 = xmm2[1],xmm1[1]
addsd %xmm1, %xmm2
mulsd 0x1b6304(%rip), %xmm2   # 0x2d7028
mulsd 0x1b63fc(%rip), %xmm2   # 0x2d7128
cvttsd2si %xmm2, %ecx
movq %rdi, %xmm1
punpckldq 0x1b6493(%rip), %xmm1 # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
movq 0xd0(%rsp), %rdi
movq %rdi, %r8
subq 0xd8(%rsp), %r8
subpd 0x1b6488(%rip), %xmm1   # 0x2d71e0
sarq $0x5, %r8
addq %r14, %r8
cmpq $0xf, %r8
ja 0x120d71
movq %r14, %r8
shlq $0x5, %r8
addq %r8, %rdi
jmp 0x120dac
movq %r8, %rdi
shrq $0x4, %rdi
movq %rdi, %r9
movabsq $-0x1000000000000000, %r10 # imm = 0xF000000000000000
orq %r10, %r9
testq %r8, %r8
cmovgq %rdi, %r9
movq 0xe8(%rsp), %rdi
movq %r9, %r10
shlq $0x4, %r10
subq %r10, %r8
shlq $0x5, %r8
addq (%rdi,%r9,8), %r8
movq %r8, %rdi
incq %r14
shll $0x4, %eax
shrq $0x5, %rsi
shrq $0x5, %rdx
addl %esi, %edx
addl %eax, %edx
movapd %xmm1, %xmm2
unpckhpd %xmm1, %xmm2            # xmm2 = xmm2[1],xmm1[1]
addsd %xmm1, %xmm2
divsd %xmm2, %xmm0
movq (%rdi), %r8
movq %r13, %rdi
movl %r14d, %esi
movsd 0x8(%rsp), %xmm1
movb $0x2, %al
callq 0x11a080
movq 0x32d1f5(%rip), %rax    # 0x44dfe0
movq (%rax), %rdi
callq 0x11a290
movq 0x308(%rsp), %rax
movsd 0x1b631d(%rip), %xmm0   # 0x2d7120
subq 0x2f8(%rsp), %rax
jl 0x120e55
imulq $0xf4240, %rax, %rax    # imm = 0xF4240
addq 0x310(%rsp), %rax
subq 0x300(%rsp), %rax
movq %rax, %xmm1
punpckldq 0x1b639f(%rip), %xmm1 # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x1b63a7(%rip), %xmm1   # 0x2d71e0
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
mulsd 0x1b61db(%rip), %xmm0   # 0x2d7028
mulsd 0x1b62d3(%rip), %xmm0   # 0x2d7128
movsd (%rbx), %xmm1
unpcklps 0x1b6370(%rip), %xmm1   # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x1b6378(%rip), %xmm1   # 0x2d71e0
movapd %xmm1, %xmm2
unpckhpd %xmm1, %xmm2            # xmm2 = xmm2[1],xmm1[1]
addsd %xmm1, %xmm2
divsd %xmm2, %xmm0
movsd 0x30(%rsp), %xmm1
addsd %xmm0, %xmm1
movapd %xmm1, %xmm0
jmp 0x120a6d
leaq 0x458(%rsp), %r14
movq %r14, %rdi
xorl %esi, %esi
callq 0x11a280
movb $0x0, -0x18(%r14)
movsd (%rbx), %xmm2
movsd 0x1b6322(%rip), %xmm3   # 0x2d71d0
unpcklps %xmm3, %xmm2            # xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]
movapd 0x1b6327(%rip), %xmm0   # 0x2d71e0
subpd %xmm0, %xmm2
movapd %xmm2, %xmm1
unpckhpd %xmm2, %xmm1            # xmm1 = xmm1[1],xmm2[1]
addsd %xmm2, %xmm1
movq 0xb8(%rsp), %rax
movq %rax, %rcx
subq 0x98(%rsp), %rcx
shrq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
shlq $0x4, %rcx
movq 0x90(%rsp), %rax
movq 0xa0(%rsp), %rdx
subq 0xa8(%rsp), %rdx
sarq $0x5, %rdx
subq 0x80(%rsp), %rax
sarq $0x5, %rax
addq %rdx, %rax
addq %rcx, %rax
movq %rax, %xmm2
punpckldq %xmm3, %xmm2    # xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]
subpd %xmm0, %xmm2
movapd %xmm2, %xmm0
unpckhpd %xmm2, %xmm0            # xmm0 = xmm0[1],xmm2[1]
addsd %xmm2, %xmm0
mulsd %xmm1, %xmm0
leaq 0x1bae05(%rip), %rdi    # 0x2dbd43
movb $0x1, %al
callq 0x11a080
movq (%r14), %rax
subq -0x10(%r14), %rax
jge 0x120f58
movsd 0x1b60ca(%rip), %xmm0   # 0x2d7020
jmp 0x120f98
imulq $0xf4240, %rax, %rax    # imm = 0xF4240
addq 0x460(%rsp), %rax
subq 0x450(%rsp), %rax
movq %rax, %xmm1
punpckldq 0x1b6254(%rip), %xmm1 # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x1b625c(%rip), %xmm1   # 0x2d71e0
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
mulsd 0x1b6090(%rip), %xmm0   # 0x2d7028
leaq 0x1badc8(%rip), %rdi    # 0x2dbd67
movb $0x1, %al
callq 0x11a080
movsd 0x30(%rsp), %xmm0
divsd 0x1b6164(%rip), %xmm0   # 0x2d7118
leaq 0x1badd2(%rip), %rdi    # 0x2dbd8d
movb $0x1, %al
callq 0x11a080
leaq 0xd68(%rsp), %rdi
callq 0x1243b6
movq %rsp, %rdi
callq 0x12233a
leaq 0x70(%rsp), %rdi
callq 0x1222f0
leaq 0xc0(%rsp), %rdi
callq 0x1247cc
addq $0x1548, %rsp           # imm = 0x1548
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq 0x2f0(%rsp), %rdi
callq 0x1235a2
jmp 0x1210e4
jmp 0x1210e1
jmp 0x121084
jmp 0x1210e1
jmp 0x121084
jmp 0x1210e1
jmp 0x121084
jmp 0x1210e1
jmp 0x121084
jmp 0x1210e1
jmp 0x121084
jmp 0x1210e1
jmp 0x121084
jmp 0x1210e1
jmp 0x121084
jmp 0x1210e1
jmp 0x121084
jmp 0x1210e1
jmp 0x121084
jmp 0x1210e1
jmp 0x121084
jmp 0x1210e1
jmp 0x121084
jmp 0x1210e1
jmp 0x121084
jmp 0x1210e1
jmp 0x121084
jmp 0x1210e1
jmp 0x121084
jmp 0x1210e1
jmp 0x121084
jmp 0x1210e1
jmp 0x121084
jmp 0x1210e1
jmp 0x121084
jmp 0x1210e1
jmp 0x121084
jmp 0x1210e1
jmp 0x121084
jmp 0x1210e1
movq %rax, %rbx
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x1210e4
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x11a0c0
jmp 0x1210e4
jmp 0x1210e1
movq %rax, %rbx
jmp 0x1210f1
movq %rax, %rbx
jmp 0x1210f9
jmp 0x1210b4
movq %rax, %rbx
jmp 0x121103
jmp 0x1210e1
jmp 0x1210c2
movq %rax, %rbx
jmp 0x1210d2
movq %rax, %rbx
leaq 0x2f0(%rsp), %rdi
callq 0x1240a4
leaq 0x440(%rsp), %rdi
callq 0x1240f2
jmp 0x1210e4
movq %rax, %rbx
leaq 0xd68(%rsp), %rdi
callq 0x1243b6
movq %rsp, %rdi
callq 0x12233a
leaq 0x70(%rsp), %rdi
callq 0x1222f0
leaq 0xc0(%rsp), %rdi
callq 0x1247cc
movq %rbx, %rdi
callq 0x11a340