// File: /workspace/github_cpp_makefile_star2_O3/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 0xa0(%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 0x122328
movq %r14, %rdi
movq %r15, %rsi
callq 0x11fbc2
testq %rax, %rax
je 0x11e253
xorpd %xmm0, %xmm0
leaq 0x50(%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 0x1221a6
movq %rsp, %rdi
movl $0x1, %esi
callq 0x11f0e2
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, 0x48(%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, 0x40(%rsp)
movabsq $0x40147e6b3fe9fadb, %rax # imm = 0x40147E6B3FE9FADB
movq %rax, 0x38(%rsp)
leaq 0xd68(%rsp), %rdi
callq 0x11fce6
leaq 0x450(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x19abec(%rip), %rsi    # 0x2b8388
leaq 0x19abe6(%rip), %rdx    # 0x2b8389
leaq 0x440(%rsp), %rdi
callq 0x125c9e
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x28(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11f270
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11d7e4
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x1180c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x1994e5(%rip), %rsi    # 0x2b6cdb
leaq 0x1994df(%rip), %rdx    # 0x2b6cdc
callq 0x125c9e
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x20(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11f270
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11d836
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x1180c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x19914d(%rip), %rsi    # 0x2b6995
leaq 0x199147(%rip), %rdx    # 0x2b6996
callq 0x125c9e
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x48(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11f270
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11d888
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x1180c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x199416(%rip), %rsi    # 0x2b6cb0
leaq 0x199410(%rip), %rdx    # 0x2b6cb1
callq 0x125c9e
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x18(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11f270
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11d8da
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x1180c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x199312(%rip), %rsi    # 0x2b6bfe
leaq 0x19930c(%rip), %rdx    # 0x2b6bff
callq 0x125c9e
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x10(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11f270
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11d92c
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x1180c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x19988f(%rip), %rsi    # 0x2b71cd
leaq 0x199889(%rip), %rdx    # 0x2b71ce
callq 0x125c9e
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x40(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11f270
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11d97e
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x1180c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x19986b(%rip), %rsi    # 0x2b71fb
leaq 0x199865(%rip), %rdx    # 0x2b71fc
callq 0x125c9e
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x38(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11f270
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11d9d0
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x1180c0
xorl %eax, %eax
movw %ax, 0x2d0(%rsp)
movq %rax, 0x2d8(%rsp)
movq $-0x1, %rcx
movq %rcx, 0x2e0(%rsp)
movq $0x3, 0x2e8(%rsp)
leaq 0x2932ec(%rip), %rdx    # 0x3b0cf0
movq %rdx, 0x2c8(%rsp)
movw %ax, 0x2a8(%rsp)
movq %rax, 0x2b0(%rsp)
movq %rcx, 0x2b8(%rsp)
movq $0x4, 0x2c0(%rsp)
leaq 0x2933c1(%rip), %rdx    # 0x3b0df8
movq %rdx, 0x2a0(%rsp)
movw %ax, 0x280(%rsp)
movq %rax, 0x288(%rsp)
movq %rcx, 0x290(%rsp)
movq $0x5, 0x298(%rsp)
leaq 0x29346e(%rip), %rdx    # 0x3b0ed8
movq %rdx, 0x278(%rsp)
movw %ax, 0x258(%rsp)
movq %rax, 0x260(%rsp)
movq %rcx, 0x268(%rsp)
movq $0x6, 0x270(%rsp)
leaq 0x29351b(%rip), %rdx    # 0x3b0fb8
movq %rdx, 0x250(%rsp)
movw %ax, 0x230(%rsp)
movq %rax, 0x238(%rsp)
movq %rcx, 0x240(%rsp)
movq $0x7, 0x248(%rsp)
leaq 0x2935c8(%rip), %rdx    # 0x3b1098
movq %rdx, 0x228(%rsp)
movw %ax, 0x208(%rsp)
movq %rax, 0x210(%rsp)
movq %rcx, 0x218(%rsp)
movq $0x8, 0x220(%rsp)
leaq 0x293675(%rip), %rdx    # 0x3b1178
movq %rdx, 0x200(%rsp)
movw %ax, 0x1e0(%rsp)
movq %rax, 0x1e8(%rsp)
movq %rcx, 0x1f0(%rsp)
movq $0x9, 0x1f8(%rsp)
leaq 0x293722(%rip), %rdx    # 0x3b1258
movq %rdx, 0x1d8(%rsp)
movw %ax, 0x1b8(%rsp)
movq %rax, 0x1c0(%rsp)
movq %rcx, 0x1c8(%rsp)
movq $0xa, 0x1d0(%rsp)
leaq 0x2937cf(%rip), %rdx    # 0x3b1338
movq %rdx, 0x1b0(%rsp)
movw %ax, 0x190(%rsp)
movq %rax, 0x198(%rsp)
movq %rcx, 0x1a0(%rsp)
movq $0xb, 0x1a8(%rsp)
leaq 0x29387c(%rip), %rdx    # 0x3b1418
movq %rdx, 0x188(%rsp)
movw %ax, 0x168(%rsp)
movq %rax, 0x170(%rsp)
movq %rcx, 0x178(%rsp)
movq $0xc, 0x180(%rsp)
leaq 0x293929(%rip), %rdx    # 0x3b14f8
movq %rdx, 0x160(%rsp)
movw %ax, 0x140(%rsp)
movq %rax, 0x148(%rsp)
movq %rcx, 0x150(%rsp)
movq $0xd, 0x158(%rsp)
leaq 0x2939d6(%rip), %rdx    # 0x3b15d8
movq %rdx, 0x138(%rsp)
movw %ax, 0x118(%rsp)
movq %rax, 0x120(%rsp)
movq %rcx, 0x128(%rsp)
movq $0xe, 0x130(%rsp)
leaq 0x293a83(%rip), %rax    # 0x3b16b8
movq %rax, 0x110(%rsp)
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x19908e(%rip), %rsi    # 0x2b6cdd
leaq 0x19908d(%rip), %rdx    # 0x2b6ce3
callq 0x125c9e
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x2c8(%rsp), %rdx
callq 0x120390
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11dc90
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x1180c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x199042(%rip), %rsi    # 0x2b6ce4
leaq 0x199041(%rip), %rdx    # 0x2b6cea
callq 0x125c9e
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x2a0(%rsp), %rdx
callq 0x120390
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11dce3
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x1180c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x198ff6(%rip), %rsi    # 0x2b6ceb
leaq 0x198ff5(%rip), %rdx    # 0x2b6cf1
callq 0x125c9e
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x278(%rsp), %rdx
callq 0x120390
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11dd36
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x1180c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x198faa(%rip), %rsi    # 0x2b6cf2
leaq 0x198fa9(%rip), %rdx    # 0x2b6cf8
callq 0x125c9e
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x250(%rsp), %rdx
callq 0x120390
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11dd89
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x1180c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x198f5e(%rip), %rsi    # 0x2b6cf9
leaq 0x198f5d(%rip), %rdx    # 0x2b6cff
callq 0x125c9e
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x228(%rsp), %rdx
callq 0x120390
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11dddc
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x1180c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x198f12(%rip), %rsi    # 0x2b6d00
leaq 0x198f11(%rip), %rdx    # 0x2b6d06
callq 0x125c9e
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x200(%rsp), %rdx
callq 0x120390
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11de2f
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x1180c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x198ec6(%rip), %rsi    # 0x2b6d07
leaq 0x198ec5(%rip), %rdx    # 0x2b6d0d
callq 0x125c9e
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x1d8(%rsp), %rdx
callq 0x120390
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11de82
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x1180c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x198e7a(%rip), %rsi    # 0x2b6d0e
leaq 0x198e79(%rip), %rdx    # 0x2b6d14
callq 0x125c9e
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x1b0(%rsp), %rdx
callq 0x120390
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11ded5
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x1180c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x198e2e(%rip), %rsi    # 0x2b6d15
leaq 0x198e2d(%rip), %rdx    # 0x2b6d1b
callq 0x125c9e
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x188(%rsp), %rdx
callq 0x120390
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11df28
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x1180c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x198de2(%rip), %rsi    # 0x2b6d1c
leaq 0x198de1(%rip), %rdx    # 0x2b6d22
callq 0x125c9e
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x160(%rsp), %rdx
callq 0x120390
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11df7b
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x1180c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x198d96(%rip), %rsi    # 0x2b6d23
leaq 0x198d95(%rip), %rdx    # 0x2b6d29
callq 0x125c9e
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x138(%rsp), %rdx
callq 0x120390
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11dfce
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x1180c0
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x198d4a(%rip), %rsi    # 0x2b6d2a
leaq 0x198d49(%rip), %rdx    # 0x2b6d30
callq 0x125c9e
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
leaq 0x110(%rsp), %rdx
callq 0x120390
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11e021
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x1180c0
leaq 0xd68(%rsp), %rdi
movq %rsp, %rsi
callq 0x12bd04
leaq 0x440(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x199f04(%rip), %rsi    # 0x2b7f47
leaq 0x199efe(%rip), %rdx    # 0x2b7f48
callq 0x125c9e
leaq 0x2fa2b2(%rip), %rdx    # 0x418308
movq %rsp, %rdi
leaq 0x440(%rsp), %rsi
movl $0x1, %ecx
callq 0x11f270
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11e088
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x1180c0
movq %rsp, %r14
movq %r14, %rdi
callq 0x11f12a
leaq 0x2f0(%rsp), %rdi
movl $0x7f, %esi
callq 0x12049a
leaq 0x440(%rsp), %rdi
leaq 0x2f0(%rsp), %rsi
callq 0x12059a
leaq 0x3f0(%rsp), %rdi
callq 0x12887c
leaq 0x3c0(%rsp), %rdi
callq 0x12887c
leaq 0x390(%rsp), %rdi
callq 0x12887c
leaq 0x360(%rsp), %rdi
callq 0x12887c
leaq 0x330(%rsp), %rdi
callq 0x12887c
leaq 0x300(%rsp), %rdi
callq 0x12887c
xorl %r15d, %r15d
leaq 0x2f0(%rsp), %r12
leaq 0x440(%rsp), %r13
leaq 0x50(%rsp), %rbp
movq 0xe8(%rsp), %rax
movq %rax, %rcx
subq 0xc8(%rsp), %rcx
shrq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
shlq $0x4, %rcx
movq 0xd0(%rsp), %rax
subq 0xd8(%rsp), %rax
movq 0xc0(%rsp), %rdx
sarq $0x5, %rax
subq 0xb0(%rsp), %rdx
sarq $0x5, %rdx
addq %rax, %rdx
addq %rcx, %rdx
cmpq %rdx, %r15
jae 0x11e269
movq %r12, %rdi
callq 0x120dbe
movq 0x2f8(%rsp), %rax
movq 0x300(%rsp), %rcx
subq %rax, %rcx
je 0x11e1ba
sarq $0x3, %rcx
movq (%rsp), %rdx
cmpq $0x1, %rcx
adcq $0x0, %rcx
cmpq %r14, %rax
je 0x11e1ca
cmpq (%rax), %rdx
je 0x11e1ca
addq $0x8, %rax
decq %rcx
jne 0x11e1a7
leaq 0x2f8(%rsp), %rdi
movq %r14, %rsi
callq 0x18bcd4
movq 0xb0(%rsp), %rcx
movq 0xc8(%rsp), %rax
movq %rcx, %rsi
subq 0xb8(%rsp), %rsi
sarq $0x5, %rsi
addq %r15, %rsi
js 0x11e203
cmpq $0xf, %rsi
ja 0x11e20c
movq %r15, %rax
shlq $0x5, %rax
addq %rax, %rcx
movq %rcx, %rsi
jmp 0x11e225
movq %rsi, %rcx
sarq $0x4, %rcx
jmp 0x11e213
movq %rsi, %rcx
shrq $0x4, %rcx
movq %rcx, %rdx
shlq $0x4, %rdx
subq %rdx, %rsi
shlq $0x5, %rsi
addq (%rax,%rcx,8), %rsi
movq %r13, %rdi
movq %r12, %rdx
callq 0x120e4a
testb %al, %al
je 0x11e704
movq %rbp, %rdi
movq %r12, %rsi
callq 0x1219e6
movq %r12, %rdi
callq 0x121a34
incq %r15
jmp 0x11e120
movq (%r14), %rsi
leaq 0x198a55(%rip), %rdi    # 0x2b6cb2
xorl %eax, %eax
callq 0x118080
jmp 0x11e917
leaq 0x440(%rsp), %rdi
callq 0x121a82
leaq 0x448(%rsp), %rdi
xorpd %xmm0, %xmm0
movupd %xmm0, 0x10(%rdi)
movupd %xmm0, (%rdi)
leaq 0x2f8(%rsp), %r14
movupd %xmm0, 0x10(%r14)
movupd %xmm0, (%r14)
movb $0x1, -0x8(%rdi)
xorl %r15d, %r15d
xorl %esi, %esi
callq 0x118280
xorpd %xmm0, %xmm0
leaq 0x198abc(%rip), %r13    # 0x2b6d73
movq 0x98(%rsp), %rcx
movq 0x78(%rsp), %rax
movq %rcx, %rdx
subq %rax, %rdx
shrq $0x3, %rdx
cmpq $0x1, %rcx
adcq $-0x1, %rdx
shlq $0x4, %rdx
movq 0x80(%rsp), %rsi
subq 0x88(%rsp), %rsi
sarq $0x5, %rsi
movq 0x60(%rsp), %rcx
movq 0x70(%rsp), %rdi
subq %rcx, %rdi
sarq $0x5, %rdi
addq %rsi, %rdi
addq %rdx, %rdi
cmpq %rdi, %r15
movsd %xmm0, 0x30(%rsp)
jae 0x11e642
movq %rcx, %r12
subq 0x68(%rsp), %r12
sarq $0x5, %r12
addq %r15, %r12
js 0x11e33a
cmpq $0xf, %r12
ja 0x11e343
movq %r15, %rax
shlq $0x5, %rax
addq %rax, %rcx
movq %rcx, %r12
jmp 0x11e35c
movq %r12, %rcx
sarq $0x4, %rcx
jmp 0x11e34a
movq %r12, %rcx
shrq $0x4, %rcx
movq %rcx, %rdx
shlq $0x4, %rdx
subq %rdx, %r12
shlq $0x5, %r12
addq (%rax,%rcx,8), %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, 0x48(%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, 0x40(%rsp)
movabsq $0x40147e6b3fe9fadb, %rax # imm = 0x40147E6B3FE9FADB
movq %rax, 0x38(%rsp)
movb $0x1, 0x2f0(%rsp)
movq %r14, %rdi
xorl %esi, %esi
callq 0x118280
cmpq $0x0, (%rbx)
je 0x11e441
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 0x11e3e9
jmp 0x11e44b
xorpd %xmm0, %xmm0
movsd %xmm0, 0x8(%rsp)
leaq 0x308(%rsp), %rdi
xorl %esi, %esi
callq 0x118280
movb $0x0, 0x2f0(%rsp)
movq 0x98(%rsp), %rcx
movl 0x78(%rsp), %edx
movl %ecx, %eax
subl %edx, %eax
shrl $0x3, %eax
cmpq $0x1, %rcx
adcl $-0x1, %eax
movq 0x2f8(%rsp), %rbp
movq 0x308(%rsp), %r12
movq %r12, %rdx
movsd 0x193c89(%rip), %xmm0   # 0x2b2120
subq %rbp, %rdx
jl 0x11e4e8
imulq $0xf4240, %rdx, %rcx    # imm = 0xF4240
addq 0x310(%rsp), %rcx
subq 0x300(%rsp), %rcx
movq %rcx, %xmm1
punpckldq 0x193d10(%rip), %xmm1 # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x193d18(%rip), %xmm1   # 0x2b21e0
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
mulsd 0x193b4c(%rip), %xmm0   # 0x2b2028
mulsd 0x193c44(%rip), %xmm0   # 0x2b2128
cvttsd2si %xmm0, %ecx
movq 0x70(%rsp), %rdx
movq 0x80(%rsp), %rsi
subq 0x88(%rsp), %rsi
subq 0x60(%rsp), %rdx
movsd (%rbx), %xmm1
unpcklps 0x193cc3(%rip), %xmm1   # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x193ccb(%rip), %xmm1   # 0x2b21e0
movq 0xb0(%rsp), %r9
movq 0xc8(%rsp), %r8
movq %r9, %rdi
subq 0xb8(%rsp), %rdi
sarq $0x5, %rdi
addq %r15, %rdi
js 0x11e54e
cmpq $0xf, %rdi
ja 0x11e557
movq %r15, %rdi
shlq $0x5, %rdi
addq %rdi, %r9
movq %r9, %rdi
jmp 0x11e570
movq %rdi, %r9
sarq $0x4, %r9
jmp 0x11e55e
movq %rdi, %r9
shrq $0x4, %r9
movq %r9, %r10
shlq $0x4, %r10
subq %r10, %rdi
shlq $0x5, %rdi
addq (%r8,%r9,8), %rdi
incq %r15
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 %r15d, %esi
movsd 0x8(%rsp), %xmm1
movb $0x2, %al
callq 0x118080
movq 0x2f9a31(%rip), %rax    # 0x417fe0
movq (%rax), %rdi
callq 0x118290
movsd 0x193b61(%rip), %xmm0   # 0x2b2120
subq %rbp, %r12
jl 0x11e60c
imulq $0xf4240, %r12, %rax    # imm = 0xF4240
addq 0x310(%rsp), %rax
subq 0x300(%rsp), %rax
movq %rax, %xmm1
punpckldq 0x193be8(%rip), %xmm1 # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x193bf0(%rip), %xmm1   # 0x2b21e0
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
mulsd 0x193a24(%rip), %xmm0   # 0x2b2028
mulsd 0x193b1c(%rip), %xmm0   # 0x2b2128
movsd (%rbx), %xmm1
unpcklps 0x193bb9(%rip), %xmm1   # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x193bc1(%rip), %xmm1   # 0x2b21e0
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 0x11e2b7
leaq 0x458(%rsp), %r14
movq %r14, %rdi
xorl %esi, %esi
callq 0x118280
movsd (%rbx), %xmm2
movsd 0x193b70(%rip), %xmm3   # 0x2b21d0
unpcklps %xmm3, %xmm2            # xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]
movapd 0x193b75(%rip), %xmm0   # 0x2b21e0
subpd %xmm0, %xmm2
movapd %xmm2, %xmm1
unpckhpd %xmm2, %xmm1            # xmm1 = xmm1[1],xmm2[1]
addsd %xmm2, %xmm1
movq 0x98(%rsp), %rax
movq %rax, %rcx
subq 0x78(%rsp), %rcx
shrq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
shlq $0x4, %rcx
movq 0x70(%rsp), %rax
movq 0x80(%rsp), %rdx
subq 0x88(%rsp), %rdx
sarq $0x5, %rdx
subq 0x60(%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 0x1986c4(%rip), %rdi    # 0x2b6dab
movb $0x1, %al
callq 0x118080
movq (%r14), %rax
subq -0x10(%r14), %rax
jge 0x11e76e
movsd 0x193921(%rip), %xmm0   # 0x2b2020
jmp 0x11e7ae
movq 0x758(%rsp), %rdi
cmpq %rdi, 0x778(%rsp)
je 0x11e7dd
movq 0x770(%rsp), %rsi
movq %rdi, %rcx
subq 0x760(%rsp), %rcx
movq %rcx, %rdx
sarq $0x3, %rdx
movabsq $-0x30c30c30c30c30c3, %rax # imm = 0xCF3CF3CF3CF3CF3D
imulq %rdx, %rax
cmpq $-0xa7, %rcx
jl 0x11e804
cmpq $0x3, %rax
jb 0x11e828
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq %rdx
jmp 0x11e81a
imulq $0xf4240, %rax, %rax    # imm = 0xF4240
addq 0x460(%rsp), %rax
subq 0x450(%rsp), %rax
movq %rax, %xmm1
punpckldq 0x193a3e(%rip), %xmm1 # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x193a46(%rip), %xmm1   # 0x2b21e0
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
mulsd 0x19387a(%rip), %xmm0   # 0x2b2028
leaq 0x19861a(%rip), %rdi    # 0x2b6dcf
movb $0x1, %al
callq 0x118080
movsd 0x30(%rsp), %xmm0
divsd 0x19394e(%rip), %xmm0   # 0x2b2118
leaq 0x198624(%rip), %rdi    # 0x2b6df5
movb $0x1, %al
callq 0x118080
jmp 0x11e8f8
leaq 0x100(%rsp), %rsi
movq %rsi, -0x10(%rsi)
movabsq $0x726f727245206f4e, %rax # imm = 0x726F727245206F4E
movq %rax, (%rsi)
movq $0x8, -0x8(%rsi)
movb $0x0, 0x8(%rsi)
jmp 0x11e854
notq %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq %rdx
notq %rdx
imulq $-0x1f8, %rdx, %rdi     # imm = 0xFE08
addq (%rsi,%rdx,8), %rdi
addq %rcx, %rdi
leaq 0x100(%rsp), %rax
movq %rax, -0x10(%rax)
movq 0x38(%rdi), %rsi
movq 0x40(%rdi), %rdx
addq %rsi, %rdx
leaq 0xf0(%rsp), %rdi
callq 0x12260a
movq 0xf0(%rsp), %rsi
movq 0xb0(%rsp), %rdx
movq 0xc8(%rsp), %rcx
movq %rdx, %rax
subq 0xb8(%rsp), %rax
sarq $0x5, %rax
addq %r15, %rax
js 0x11e88a
cmpq $0xf, %rax
ja 0x11e893
shlq $0x5, %r15
addq %r15, %rdx
movq %rdx, %rax
jmp 0x11e8ac
movq %rax, %rdx
sarq $0x4, %rdx
jmp 0x11e89a
movq %rax, %rdx
shrq $0x4, %rdx
movq %rdx, %rdi
shlq $0x4, %rdi
subq %rdi, %rax
shlq $0x5, %rax
addq (%rcx,%rdx,8), %rax
movq (%rax), %rdx
leaq 0x19847b(%rip), %rdi    # 0x2b6d31
xorl %eax, %eax
callq 0x118080
leaq 0x100(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x11e8de
movq 0x100(%rsp), %rsi
incq %rsi
callq 0x1180c0
leaq 0x2f0(%rsp), %rdi
callq 0x121a34
leaq 0x440(%rsp), %rdi
callq 0x121a82
leaq 0xd68(%rsp), %rdi
callq 0x121d46
movq %rsp, %rdi
callq 0x11fb2c
leaq 0x50(%rsp), %rdi
callq 0x11fae2
leaq 0xa0(%rsp), %rdi
callq 0x12215c
addq $0x1548, %rsp           # imm = 0x1548
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x11e9f8
movq %rax, %rbx
leaq 0x2f0(%rsp), %rdi
callq 0x120d76
jmp 0x11ea1a
jmp 0x11ea17
jmp 0x11e9bc
jmp 0x11ea17
jmp 0x11e9bc
jmp 0x11ea17
jmp 0x11e9bc
jmp 0x11ea17
jmp 0x11e9bc
jmp 0x11ea17
jmp 0x11e9bc
jmp 0x11ea17
jmp 0x11e9bc
jmp 0x11ea17
jmp 0x11e9bc
jmp 0x11ea17
jmp 0x11e9bc
jmp 0x11ea17
jmp 0x11e9bc
jmp 0x11ea17
jmp 0x11e9bc
jmp 0x11ea17
jmp 0x11e9bc
jmp 0x11ea17
jmp 0x11e9bc
jmp 0x11ea17
jmp 0x11e9bc
jmp 0x11ea17
jmp 0x11e9bc
jmp 0x11ea17
jmp 0x11e9bc
jmp 0x11ea17
jmp 0x11e9bc
jmp 0x11ea17
jmp 0x11e9bc
jmp 0x11ea17
jmp 0x11e9bc
jmp 0x11ea17
jmp 0x11e9bc
jmp 0x11ea17
movq %rax, %rbx
movq 0x440(%rsp), %rdi
cmpq %r14, %rdi
je 0x11ea1a
movq 0x450(%rsp), %rsi
incq %rsi
callq 0x1180c0
jmp 0x11ea1a
jmp 0x11ea17
movq %rax, %rbx
jmp 0x11ea27
movq %rax, %rbx
jmp 0x11ea2f
jmp 0x11e9ec
movq %rax, %rbx
jmp 0x11ea39
jmp 0x11ea17
movq %rax, %rbx
jmp 0x11ea08
movq %rax, %rbx
leaq 0x2f0(%rsp), %rdi
callq 0x121a34
leaq 0x440(%rsp), %rdi
callq 0x121a82
jmp 0x11ea1a
movq %rax, %rbx
leaq 0xd68(%rsp), %rdi
callq 0x121d46
movq %rsp, %rdi
callq 0x11fb2c
leaq 0x50(%rsp), %rdi
callq 0x11fae2
leaq 0xa0(%rsp), %rdi
callq 0x12215c
movq %rbx, %rdi
callq 0x118340