// File: ArashPartow[P]exprtk-extras/exprtk_jump_diffusion_process.cpp
// Function: void european_option_merton_jump_diffusion_process<double>()
void european_option_merton_jump_diffusion_process()
{
   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;

   const std::string european_option_merton_jump_diffusion_process_program =
      " var lambda_t   := lambda * t;                                                  "
      " var v_sqr      := v^2;                                                         "
      " var sigmaJ_sqr := sigmaJ^2;                                                    "
      "                                                                                "
      " var option_price := 0;                                                         "
      " var factorial    := 1;                                                         "
      "                                                                                "
      " for (var i := 0; i < n; i += 1)                                                "
      " {                                                                              "
      "    var prob    := exp(-lambda_t) * lambda_t^i / factorial;                     "
      "    var r_i     := r - lambda * muJ + (i / t) * log(1 + muJ);                   "
      "    var sigma_i := sqrt(v_sqr + (i * sigmaJ_sqr) / t);                          "
      "                                                                                "
      "    option_price +=                                                             "
      "       switch                                                                   "
      "       {                                                                        "
      "          case callput_flag == 'call' : prob * bsm_call(s, k, r_i, t, sigma_i); "
      "          case callput_flag == 'put'  : prob * bsm_put (s, k, r_i, t, sigma_i); "
      "       };                                                                       "
      "                                                                                "
      "    factorial *= (i > 1) ? i : 1;                                               "
      " };                                                                             "
      "                                                                                "
      " option_price;                                                                  ";

   T s      = T(100.00); // Spot / Stock / Underlying / Base price
   T k      = T(110.00); // Strike price
   T v      = T(  0.30); // Volatility
   T t      = T(  2.22); // Years to maturity
   T r      = T(  0.05); // Risk free rate
   T lambda = T(0.0001); // Jump intensity (average jumps per year)
   T muJ    = T( -0.05); // Mean jump size (negative for downward jumps)
   T sigmaJ = T(  0.30); // Standard deviation of the jump size
   T n      = T( 50.00); // Number of terms in the Poisson sum

   std::string callput_flag;

   symbol_table_t symbol_table(symbol_table_t::e_immutable);
   symbol_table.add_variable ("s"     , s     );
   symbol_table.add_variable ("k"     , k     );
   symbol_table.add_variable ("v"     , v     );
   symbol_table.add_variable ("t"     , t     );
   symbol_table.add_variable ("r"     , r     );
   symbol_table.add_variable ("lambda", lambda);
   symbol_table.add_variable ("muJ"   , muJ   );
   symbol_table.add_variable ("sigmaJ", sigmaJ);
   symbol_table.add_variable ("n"     , n     );
   symbol_table.add_stringvar("callput_flag",callput_flag);
   symbol_table.add_pi();

   compositor_t compositor(symbol_table);

   compositor.add(
      function_t("bsm_call")
      .vars("s", "k", "r", "t", "v")
      .expression
      (
         " var d1 := (log(s / k) + (r + v^2 / 2) * t) / (v * sqrt(t)); "
         " var d2 := d1 - v * sqrt(t);                                 "
         " s * ncdf(d1) - k * exp(-r * t) * ncdf(d2);                  "
      ));

   compositor.add(
      function_t("bsm_put")
      .vars("s", "k", "r", "t", "v")
      .expression
      (
         " var d1 := (log(s / k) + (r + v^2 / 2) * t) / (v * sqrt(t)); "
         " var d2 := d1 - v * sqrt(t);                                 "
         " k * exp(-r * t) * ncdf(-d2) - s * ncdf(-d1);                "
      ));

   expression_t expression;
   expression.register_symbol_table(symbol_table);

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

   callput_flag = "call";

   const T jdp_call_option_price = expression.value();

   callput_flag = "put";

   const T jdp_put_option_price = expression.value();

   printf("JDPPrice(%4s, %5.3f, %5.3f, %5.3f, %5.3f, %5.3f) = %10.6f\n",
          "call",
          s, k, t, r, v,
          jdp_call_option_price);

   printf("JDPPrice(%4s, %5.3f, %5.3f, %5.3f, %5.3f, %5.3f) = %10.6f\n",
          "put",
          s, k, t, r, v,
          jdp_put_option_price);

   const T put_call_parity_diff =
      (jdp_call_option_price - jdp_put_option_price) -
      (s - k * std::exp(-r * t));

   printf("Put-Call parity difference: %20.17f\n", put_call_parity_diff);
}

// Assembly:
subq $0x1b38, %rsp           # imm = 0x1B38
leaq 0x1b17(%rsp), %rdi
movq %rdi, 0x110(%rsp)
callq 0x113650
movq 0x110(%rsp), %rdx
leaq 0x349d3a(%rip), %rsi    # 0x464575
leaq 0x1b18(%rsp), %rdi
callq 0x11a750
jmp 0x11a84a
leaq 0x1b17(%rsp), %rdi
callq 0x113770
movabsq $0x4059000000000000, %rax # imm = 0x4059000000000000
movq %rax, 0x1af8(%rsp)
movabsq $0x405b800000000000, %rax # imm = 0x405B800000000000
movq %rax, 0x1af0(%rsp)
movabsq $0x3fd3333333333333, %rax # imm = 0x3FD3333333333333
movq %rax, 0x1ae8(%rsp)
movabsq $0x4001c28f5c28f5c3, %rcx # imm = 0x4001C28F5C28F5C3
movq %rcx, 0x1ae0(%rsp)
movabsq $0x3fa999999999999a, %rcx # imm = 0x3FA999999999999A
movq %rcx, 0x1ad8(%rsp)
movabsq $0x3f1a36e2eb1c432d, %rcx # imm = 0x3F1A36E2EB1C432D
movq %rcx, 0x1ad0(%rsp)
movabsq $-0x4056666666666666, %rcx # imm = 0xBFA999999999999A
movq %rcx, 0x1ac8(%rsp)
movq %rax, 0x1ac0(%rsp)
movabsq $0x4049000000000000, %rax # imm = 0x4049000000000000
movq %rax, 0x1ab8(%rsp)
leaq 0x1a98(%rsp), %rdi
callq 0x113260
leaq 0x1a90(%rsp), %rdi
movl $0x2, %esi
callq 0x11bf30
jmp 0x11a910
leaq 0x1a6f(%rsp), %rdi
movq %rdi, 0x108(%rsp)
callq 0x113650
movq 0x108(%rsp), %rdx
leaq 0x349af1(%rip), %rsi    # 0x464425
leaq 0x1a70(%rsp), %rdi
callq 0x11a750
jmp 0x11a943
leaq 0x1a90(%rsp), %rdi
leaq 0x1a70(%rsp), %rsi
leaq 0x1af8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11bf70
jmp 0x11a964
leaq 0x1a70(%rsp), %rdi
callq 0x113788
leaq 0x1a6f(%rsp), %rdi
callq 0x113770
leaq 0x1a47(%rsp), %rdi
movq %rdi, 0x100(%rsp)
callq 0x113650
movq 0x100(%rsp), %rdx
leaq 0x349a16(%rip), %rsi    # 0x4643b8
leaq 0x1a48(%rsp), %rdi
callq 0x11a750
jmp 0x11a9b1
leaq 0x1a90(%rsp), %rdi
leaq 0x1a48(%rsp), %rsi
leaq 0x1af0(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11bf70
jmp 0x11a9d2
leaq 0x1a48(%rsp), %rdi
callq 0x113788
leaq 0x1a47(%rsp), %rdi
callq 0x113770
leaq 0x1a1f(%rsp), %rdi
movq %rdi, 0xf8(%rsp)
callq 0x113650
movq 0xf8(%rsp), %rdx
leaq 0x34a2e6(%rip), %rsi    # 0x464cf6
leaq 0x1a20(%rsp), %rdi
callq 0x11a750
jmp 0x11aa1f
leaq 0x1a90(%rsp), %rdi
leaq 0x1a20(%rsp), %rsi
leaq 0x1ae8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11bf70
jmp 0x11aa40
leaq 0x1a20(%rsp), %rdi
callq 0x113788
leaq 0x1a1f(%rsp), %rdi
callq 0x113770
leaq 0x19f7(%rsp), %rdi
movq %rdi, 0xf0(%rsp)
callq 0x113650
movq 0xf0(%rsp), %rdx
leaq 0x34abf4(%rip), %rsi    # 0x465672
leaq 0x19f8(%rsp), %rdi
callq 0x11a750
jmp 0x11aa8d
leaq 0x1a90(%rsp), %rdi
leaq 0x19f8(%rsp), %rsi
leaq 0x1ae0(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11bf70
jmp 0x11aaae
leaq 0x19f8(%rsp), %rdi
callq 0x113788
leaq 0x19f7(%rsp), %rdi
callq 0x113770
leaq 0x19cf(%rsp), %rdi
movq %rdi, 0xe8(%rsp)
callq 0x113650
movq 0xe8(%rsp), %rdx
leaq 0x349924(%rip), %rsi    # 0x464410
leaq 0x19d0(%rsp), %rdi
callq 0x11a750
jmp 0x11aafb
leaq 0x1a90(%rsp), %rdi
leaq 0x19d0(%rsp), %rsi
leaq 0x1ad8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11bf70
jmp 0x11ab1c
leaq 0x19d0(%rsp), %rdi
callq 0x113788
leaq 0x19cf(%rsp), %rdi
callq 0x113770
leaq 0x19a7(%rsp), %rdi
movq %rdi, 0xe0(%rsp)
callq 0x113650
movq 0xe0(%rsp), %rdx
leaq 0x34a19e(%rip), %rsi    # 0x464cf8
leaq 0x19a8(%rsp), %rdi
callq 0x11a750
jmp 0x11ab69
leaq 0x1a90(%rsp), %rdi
leaq 0x19a8(%rsp), %rsi
leaq 0x1ad0(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11bf70
jmp 0x11ab8a
leaq 0x19a8(%rsp), %rdi
callq 0x113788
leaq 0x19a7(%rsp), %rdi
callq 0x113770
leaq 0x197f(%rsp), %rdi
movq %rdi, 0xd8(%rsp)
callq 0x113650
movq 0xd8(%rsp), %rdx
leaq 0x34a137(%rip), %rsi    # 0x464cff
leaq 0x1980(%rsp), %rdi
callq 0x11a750
jmp 0x11abd7
leaq 0x1a90(%rsp), %rdi
leaq 0x1980(%rsp), %rsi
leaq 0x1ac8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11bf70
jmp 0x11abf8
leaq 0x1980(%rsp), %rdi
callq 0x113788
leaq 0x197f(%rsp), %rdi
callq 0x113770
leaq 0x1957(%rsp), %rdi
movq %rdi, 0xd0(%rsp)
callq 0x113650
movq 0xd0(%rsp), %rdx
leaq 0x34a0cd(%rip), %rsi    # 0x464d03
leaq 0x1958(%rsp), %rdi
callq 0x11a750
jmp 0x11ac45
leaq 0x1a90(%rsp), %rdi
leaq 0x1958(%rsp), %rsi
leaq 0x1ac0(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11bf70
jmp 0x11ac66
leaq 0x1958(%rsp), %rdi
callq 0x113788
leaq 0x1957(%rsp), %rdi
callq 0x113770
leaq 0x192f(%rsp), %rdi
movq %rdi, 0xc8(%rsp)
callq 0x113650
movq 0xc8(%rsp), %rdx
leaq 0x34979c(%rip), %rsi    # 0x464440
leaq 0x1930(%rsp), %rdi
callq 0x11a750
jmp 0x11acb3
leaq 0x1a90(%rsp), %rdi
leaq 0x1930(%rsp), %rsi
leaq 0x1ab8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11bf70
jmp 0x11acd4
leaq 0x1930(%rsp), %rdi
callq 0x113788
leaq 0x192f(%rsp), %rdi
callq 0x113770
leaq 0x1907(%rsp), %rdi
movq %rdi, 0xc0(%rsp)
callq 0x113650
movq 0xc0(%rsp), %rdx
leaq 0x349ff8(%rip), %rsi    # 0x464d0a
leaq 0x1908(%rsp), %rdi
callq 0x11a750
jmp 0x11ad21
leaq 0x1a90(%rsp), %rdi
leaq 0x1908(%rsp), %rsi
leaq 0x1a98(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11c020
jmp 0x11ad42
leaq 0x1908(%rsp), %rdi
callq 0x113788
leaq 0x1907(%rsp), %rdi
callq 0x113770
leaq 0x1a90(%rsp), %rdi
callq 0x11c0e0
jmp 0x11ad6b
leaq 0xf18(%rsp), %rdi
leaq 0x1a90(%rsp), %rsi
callq 0x11c200
jmp 0x11ad82
leaq 0xe67(%rsp), %rdi
movq %rdi, 0xb8(%rsp)
callq 0x113650
movq 0xb8(%rsp), %rdx
leaq 0x349f71(%rip), %rsi    # 0x464d17
leaq 0xe68(%rsp), %rdi
callq 0x11a750
jmp 0x11adb5
leaq 0xe88(%rsp), %rdi
leaq 0xe68(%rsp), %rsi
callq 0x11c3f0
jmp 0x11adcc
leaq 0xe3f(%rsp), %rdi
movq %rdi, 0xb0(%rsp)
callq 0x113650
movq 0xb0(%rsp), %rdx
leaq 0x349635(%rip), %rsi    # 0x464425
leaq 0xe40(%rsp), %rdi
callq 0x11a750
jmp 0x11adff
leaq 0xe17(%rsp), %rdi
movq %rdi, 0xa8(%rsp)
callq 0x113650
movq 0xa8(%rsp), %rdx
leaq 0x349595(%rip), %rsi    # 0x4643b8
leaq 0xe18(%rsp), %rdi
callq 0x11a750
jmp 0x11ae32
leaq 0xdef(%rsp), %rdi
movq %rdi, 0xa0(%rsp)
callq 0x113650
movq 0xa0(%rsp), %rdx
leaq 0x3495ba(%rip), %rsi    # 0x464410
leaq 0xdf0(%rsp), %rdi
callq 0x11a750
jmp 0x11ae65
leaq 0xdc7(%rsp), %rdi
movq %rdi, 0x98(%rsp)
callq 0x113650
movq 0x98(%rsp), %rdx
leaq 0x34a7e9(%rip), %rsi    # 0x465672
leaq 0xdc8(%rsp), %rdi
callq 0x11a750
jmp 0x11ae98
leaq 0xd9f(%rsp), %rdi
movq %rdi, 0x90(%rsp)
callq 0x113650
movq 0x90(%rsp), %rdx
leaq 0x349e3a(%rip), %rsi    # 0x464cf6
leaq 0xda0(%rsp), %rdi
callq 0x11a750
jmp 0x11aecb
leaq 0xe88(%rsp), %rdi
leaq 0xe40(%rsp), %rsi
leaq 0xe18(%rsp), %rdx
leaq 0xdf0(%rsp), %rcx
leaq 0xdc8(%rsp), %r8
leaq 0xda0(%rsp), %r9
callq 0x11c470
movq %rax, 0x88(%rsp)
jmp 0x11af0a
leaq 0xd77(%rsp), %rdi
movq %rdi, 0x80(%rsp)
callq 0x113650
movq 0x80(%rsp), %rdx
leaq 0x349df2(%rip), %rsi    # 0x464d20
leaq 0xd78(%rsp), %rdi
callq 0x11a750
jmp 0x11af3d
movq 0x88(%rsp), %rdi
leaq 0xd78(%rsp), %rsi
callq 0x11c500
movq %rax, 0x78(%rsp)
jmp 0x11af59
movq 0x78(%rsp), %rsi
leaq 0xf18(%rsp), %rdi
xorl %edx, %edx
callq 0x11c3a0
jmp 0x11af6f
leaq 0xd78(%rsp), %rdi
callq 0x113788
leaq 0xd77(%rsp), %rdi
callq 0x113770
leaq 0xda0(%rsp), %rdi
callq 0x113788
leaq 0xd9f(%rsp), %rdi
callq 0x113770
leaq 0xdc8(%rsp), %rdi
callq 0x113788
leaq 0xdc7(%rsp), %rdi
callq 0x113770
leaq 0xdf0(%rsp), %rdi
callq 0x113788
leaq 0xdef(%rsp), %rdi
callq 0x113770
leaq 0xe18(%rsp), %rdi
callq 0x113788
leaq 0xe17(%rsp), %rdi
callq 0x113770
leaq 0xe40(%rsp), %rdi
callq 0x113788
leaq 0xe3f(%rsp), %rdi
callq 0x113770
leaq 0xe88(%rsp), %rdi
callq 0x11c530
leaq 0xe68(%rsp), %rdi
callq 0x113788
leaq 0xe67(%rsp), %rdi
callq 0x113770
leaq 0xcbf(%rsp), %rdi
movq %rdi, 0x70(%rsp)
callq 0x113650
movq 0x70(%rsp), %rdx
leaq 0x349d88(%rip), %rsi    # 0x464dd8
leaq 0xcc0(%rsp), %rdi
callq 0x11a750
jmp 0x11b05f
leaq 0xce0(%rsp), %rdi
leaq 0xcc0(%rsp), %rsi
callq 0x11c3f0
jmp 0x11b076
leaq 0xc97(%rsp), %rdi
movq %rdi, 0x68(%rsp)
callq 0x113650
movq 0x68(%rsp), %rdx
leaq 0x349391(%rip), %rsi    # 0x464425
leaq 0xc98(%rsp), %rdi
callq 0x11a750
jmp 0x11b0a3
leaq 0xc6f(%rsp), %rdi
movq %rdi, 0x60(%rsp)
callq 0x113650
movq 0x60(%rsp), %rdx
leaq 0x3492f7(%rip), %rsi    # 0x4643b8
leaq 0xc70(%rsp), %rdi
callq 0x11a750
jmp 0x11b0d0
leaq 0xc47(%rsp), %rdi
movq %rdi, 0x58(%rsp)
callq 0x113650
movq 0x58(%rsp), %rdx
leaq 0x349322(%rip), %rsi    # 0x464410
leaq 0xc48(%rsp), %rdi
callq 0x11a750
jmp 0x11b0fd
leaq 0xc1f(%rsp), %rdi
movq %rdi, 0x50(%rsp)
callq 0x113650
movq 0x50(%rsp), %rdx
leaq 0x34a557(%rip), %rsi    # 0x465672
leaq 0xc20(%rsp), %rdi
callq 0x11a750
jmp 0x11b12a
leaq 0xbf7(%rsp), %rdi
movq %rdi, 0x48(%rsp)
callq 0x113650
movq 0x48(%rsp), %rdx
leaq 0x349bae(%rip), %rsi    # 0x464cf6
leaq 0xbf8(%rsp), %rdi
callq 0x11a750
jmp 0x11b157
leaq 0xce0(%rsp), %rdi
leaq 0xc98(%rsp), %rsi
leaq 0xc70(%rsp), %rdx
leaq 0xc48(%rsp), %rcx
leaq 0xc20(%rsp), %r8
leaq 0xbf8(%rsp), %r9
callq 0x11c470
movq %rax, 0x40(%rsp)
jmp 0x11b193
leaq 0xbcf(%rsp), %rdi
movq %rdi, 0x38(%rsp)
callq 0x113650
movq 0x38(%rsp), %rdx
leaq 0x349c2f(%rip), %rsi    # 0x464de0
leaq 0xbd0(%rsp), %rdi
callq 0x11a750
jmp 0x11b1c0
movq 0x40(%rsp), %rdi
leaq 0xbd0(%rsp), %rsi
callq 0x11c500
movq %rax, 0x30(%rsp)
jmp 0x11b1d9
movq 0x30(%rsp), %rsi
leaq 0xf18(%rsp), %rdi
xorl %edx, %edx
callq 0x11c3a0
jmp 0x11b1ef
leaq 0xbd0(%rsp), %rdi
callq 0x113788
leaq 0xbcf(%rsp), %rdi
callq 0x113770
leaq 0xbf8(%rsp), %rdi
callq 0x113788
leaq 0xbf7(%rsp), %rdi
callq 0x113770
leaq 0xc20(%rsp), %rdi
callq 0x113788
leaq 0xc1f(%rsp), %rdi
callq 0x113770
leaq 0xc48(%rsp), %rdi
callq 0x113788
leaq 0xc47(%rsp), %rdi
callq 0x113770
leaq 0xc70(%rsp), %rdi
callq 0x113788
leaq 0xc6f(%rsp), %rdi
callq 0x113770
leaq 0xc98(%rsp), %rdi
callq 0x113788
leaq 0xc97(%rsp), %rdi
callq 0x113770
leaq 0xce0(%rsp), %rdi
callq 0x11c530
leaq 0xcc0(%rsp), %rdi
callq 0x113788
leaq 0xcbf(%rsp), %rdi
callq 0x113770
leaq 0xba8(%rsp), %rdi
callq 0x11c570
jmp 0x11b2c1
leaq 0xba8(%rsp), %rdi
leaq 0x1a90(%rsp), %rsi
callq 0x11c620
jmp 0x11b2d8
leaq 0x130(%rsp), %rdi
movl $0x7f, %esi
callq 0x11c6d0
jmp 0x11b2ec
leaq 0x280(%rsp), %rdi
leaq 0x130(%rsp), %rsi
callq 0x11c800
jmp 0x11b303
leaq 0x130(%rsp), %rdi
callq 0x11d030
leaq 0x280(%rsp), %rdi
leaq 0x1b18(%rsp), %rsi
leaq 0xba8(%rsp), %rdx
callq 0x11d0a0
jmp 0x11b32f
leaq 0x34d59a(%rip), %rsi    # 0x4688d0
leaq 0x1a98(%rsp), %rdi
callq 0x1132e0
jmp 0x11b345
leaq 0xba8(%rsp), %rdi
callq 0x11d930
movsd %xmm0, 0x28(%rsp)
jmp 0x11b35a
movsd 0x28(%rsp), %xmm0
movsd %xmm0, 0x128(%rsp)
leaq 0x349a6c(%rip), %rsi    # 0x464ddc
leaq 0x1a98(%rsp), %rdi
callq 0x1132e0
jmp 0x11b37f
leaq 0xba8(%rsp), %rdi
callq 0x11d930
movsd %xmm0, 0x20(%rsp)
jmp 0x11b394
movsd 0x20(%rsp), %xmm0
movsd %xmm0, 0x120(%rsp)
movsd 0x1af8(%rsp), %xmm0
movsd 0x1af0(%rsp), %xmm1
movsd 0x1ae0(%rsp), %xmm2
movsd 0x1ad8(%rsp), %xmm3
movsd 0x1ae8(%rsp), %xmm4
movsd 0x128(%rsp), %xmm5
leaq 0x349ab8(%rip), %rdi    # 0x464e98
leaq 0x34d4e9(%rip), %rsi    # 0x4688d0
movb $0x6, %al
callq 0x113080
jmp 0x11b3f0
movsd 0x1af8(%rsp), %xmm0
movsd 0x1af0(%rsp), %xmm1
movsd 0x1ae0(%rsp), %xmm2
movsd 0x1ad8(%rsp), %xmm3
movsd 0x1ae8(%rsp), %xmm4
movsd 0x120(%rsp), %xmm5
leaq 0x349a6b(%rip), %rdi    # 0x464e98
leaq 0x3499a8(%rip), %rsi    # 0x464ddc
movb $0x6, %al
callq 0x113080
jmp 0x11b43d
movsd 0x128(%rsp), %xmm0
movsd 0x120(%rsp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, 0x18(%rsp)
movsd 0x1af8(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
movsd 0x1af0(%rsp), %xmm0
movsd %xmm0, 0x8(%rsp)
movaps 0x343b92(%rip), %xmm1   # 0x45f010
movsd 0x1ad8(%rsp), %xmm0
pxor %xmm1, %xmm0
movsd 0x1ae0(%rsp), %xmm1
mulsd %xmm1, %xmm0
callq 0x113130
movsd 0x8(%rsp), %xmm2
movsd 0x10(%rsp), %xmm1
movaps %xmm0, %xmm3
movsd 0x18(%rsp), %xmm0
mulsd %xmm3, %xmm2
subsd %xmm2, %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, 0x118(%rsp)
movsd 0x118(%rsp), %xmm0
leaq 0x3499fc(%rip), %rdi    # 0x464ed3
movb $0x1, %al
callq 0x113080
jmp 0x11b4e0
leaq 0x280(%rsp), %rdi
callq 0x11d950
leaq 0xba8(%rsp), %rdi
callq 0x11db50
leaq 0xf18(%rsp), %rdi
callq 0x11db90
leaq 0x1a90(%rsp), %rdi
callq 0x11dc20
leaq 0x1a98(%rsp), %rdi
callq 0x113788
leaq 0x1b18(%rsp), %rdi
callq 0x113788
addq $0x1b38, %rsp           # imm = 0x1B38
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
leaq 0x1b17(%rsp), %rdi
callq 0x113770
jmp 0x11bc7e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11bc64
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11b5ac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
leaq 0x1a70(%rsp), %rdi
callq 0x113788
leaq 0x1a6f(%rsp), %rdi
callq 0x113770
jmp 0x11bc57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11b5f5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
leaq 0x1a48(%rsp), %rdi
callq 0x113788
leaq 0x1a47(%rsp), %rdi
callq 0x113770
jmp 0x11bc57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11b63e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
leaq 0x1a20(%rsp), %rdi
callq 0x113788
leaq 0x1a1f(%rsp), %rdi
callq 0x113770
jmp 0x11bc57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11b687
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
leaq 0x19f8(%rsp), %rdi
callq 0x113788
leaq 0x19f7(%rsp), %rdi
callq 0x113770
jmp 0x11bc57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11b6d0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
leaq 0x19d0(%rsp), %rdi
callq 0x113788
leaq 0x19cf(%rsp), %rdi
callq 0x113770
jmp 0x11bc57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11b719
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
leaq 0x19a8(%rsp), %rdi
callq 0x113788
leaq 0x19a7(%rsp), %rdi
callq 0x113770
jmp 0x11bc57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11b762
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
leaq 0x1980(%rsp), %rdi
callq 0x113788
leaq 0x197f(%rsp), %rdi
callq 0x113770
jmp 0x11bc57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11b7ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
leaq 0x1958(%rsp), %rdi
callq 0x113788
leaq 0x1957(%rsp), %rdi
callq 0x113770
jmp 0x11bc57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11b7f4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
leaq 0x1930(%rsp), %rdi
callq 0x113788
leaq 0x192f(%rsp), %rdi
callq 0x113770
jmp 0x11bc57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11b83d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
leaq 0x1908(%rsp), %rdi
callq 0x113788
leaq 0x1907(%rsp), %rdi
callq 0x113770
jmp 0x11bc57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11bc57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11ba0a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11b9fd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11b9e3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11b9c9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11b9af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11b995
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11b97b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11b96e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11b961
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
leaq 0xd78(%rsp), %rdi
callq 0x113788
leaq 0xd77(%rsp), %rdi
callq 0x113770
leaq 0xda0(%rsp), %rdi
callq 0x113788
leaq 0xd9f(%rsp), %rdi
callq 0x113770
leaq 0xdc8(%rsp), %rdi
callq 0x113788
leaq 0xdc7(%rsp), %rdi
callq 0x113770
leaq 0xdf0(%rsp), %rdi
callq 0x113788
leaq 0xdef(%rsp), %rdi
callq 0x113770
leaq 0xe18(%rsp), %rdi
callq 0x113788
leaq 0xe17(%rsp), %rdi
callq 0x113770
leaq 0xe40(%rsp), %rdi
callq 0x113788
leaq 0xe3f(%rsp), %rdi
callq 0x113770
leaq 0xe88(%rsp), %rdi
callq 0x11c530
leaq 0xe68(%rsp), %rdi
callq 0x113788
leaq 0xe67(%rsp), %rdi
callq 0x113770
jmp 0x11bc4a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11bbbe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11bbb1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11bb97
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11bb7d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11bb63
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11bb49
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11bb2f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11bb22
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11bb15
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
leaq 0xbd0(%rsp), %rdi
callq 0x113788
leaq 0xbcf(%rsp), %rdi
callq 0x113770
leaq 0xbf8(%rsp), %rdi
callq 0x113788
leaq 0xbf7(%rsp), %rdi
callq 0x113770
leaq 0xc20(%rsp), %rdi
callq 0x113788
leaq 0xc1f(%rsp), %rdi
callq 0x113770
leaq 0xc48(%rsp), %rdi
callq 0x113788
leaq 0xc47(%rsp), %rdi
callq 0x113770
leaq 0xc70(%rsp), %rdi
callq 0x113788
leaq 0xc6f(%rsp), %rdi
callq 0x113770
leaq 0xc98(%rsp), %rdi
callq 0x113788
leaq 0xc97(%rsp), %rdi
callq 0x113770
leaq 0xce0(%rsp), %rdi
callq 0x11c530
leaq 0xcc0(%rsp), %rdi
callq 0x113788
leaq 0xcbf(%rsp), %rdi
callq 0x113770
jmp 0x11bc4a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11bc4a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
jmp 0x11bc3d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
leaq 0x130(%rsp), %rdi
callq 0x11d030
jmp 0x11bc3d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1b08(%rsp)
movl %eax, 0x1b04(%rsp)
leaq 0x280(%rsp), %rdi
callq 0x11d950
leaq 0xba8(%rsp), %rdi
callq 0x11db50
leaq 0xf18(%rsp), %rdi
callq 0x11db90
leaq 0x1a90(%rsp), %rdi
callq 0x11dc20
leaq 0x1a98(%rsp), %rdi
callq 0x113788
leaq 0x1b18(%rsp), %rdi
callq 0x113788
movq 0x1b08(%rsp), %rdi
callq 0x113440
nopl (%rax,%rax)