// File: ArashPartow[P]exprtk-extras/exprtk_game_of_life.cpp
// Function: void game_of_life<double>()
void game_of_life()
{
   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::size_t width  = 60;
   const std::size_t height = 30;

   std::vector<T> world(width * height, T(0));
   rnd_01<T> rnd01;
   exprtk::rtl::io::package<T> io_package;

   symbol_table_t symbol_table;
   symbol_table.add_constant("width" , static_cast<T>(width ));
   symbol_table.add_constant("height", static_cast<T>(height));
   symbol_table.add_vector  ("world" , world);
   symbol_table.add_package (io_package);
   symbol_table.add_function("random", rnd01);
   symbol_table.add_function("sleep" ,
                             [](T time_ms) -> T
                             {
                               std::this_thread::sleep_for(
                               std::chrono::milliseconds(static_cast<std::size_t>(time_ms)));
                               return T(1);
                             });

   compositor_t compositor(symbol_table);

   compositor.load_variables(true);
   compositor.load_vectors  (true);


   compositor.add(
      function_t("point")
      .vars("x","y")
      .expression
      (
         " world[y * width + x]; "
      ));

   compositor.add(
      function_t("set_point")
      .vars("x","y","value")
      .expression
      (
         " world[y * width + x] := value; "
      ));

   compositor.add(
      function_t("render")
      .expression
      (
         " print('+');                                         "
         " for (var x := 0; x < width; x += 1) { print('-'); } "
         " println('+');                                       "
         "                                                     "
         " for (var y := 0; y < height; y += 1)                "
         " {                                                   "
         "    print('|');                                      "
         "    for (var x := 0; x < width; x += 1)              "
         "    {                                                "
         "       print( point(x,y) ? '*' : ' ' );              "
         "    };                                               "
         "    println('|');                                    "
         " };                                                  "
         "                                                     "
         " print('+');                                         "
         " for (var x := 0; x < width; x += 1) { print('-'); } "
         " println('+');                                       "
      ));

   compositor.add(
      function_t("evolve")
      .expression
      (
         " var next_world[world[]] := [0];                       "
         "                                                       "
         " for (var y := 0; y < height; y += 1)                  "
         " {                                                     "
         "    for (var x := 0; x < width; x += 1)                "
         "    {                                                  "
         "       var alive_count := point(x,y) ? -1 : 0;         "
         "                                                       "
         "       for (var y1 := y - 1; y1 <= y + 1; y1 += 1)     "
         "       {                                               "
         "          var curr_y := (y1 + height) % height;        "
         "                                                       "
         "          for (var x1 := x - 1; x1 <= x + 1; x1 += 1)  "
         "          {                                            "
         "             var curr_x := (x1 + width) % width;       "
         "                                                       "
         "             if (point(curr_x,curr_y))                 "
         "             {                                         "
         "                alive_count += 1;                      "
         "             }                                         "
         "          }                                            "
         "       };                                              "
         "                                                       "
         "       next_world[y * width + x] :=                    "
         "          switch                                       "
         "          {                                            "
         "             case alive_count == 2 and point(x,y) : 1; "
         "             case alive_count == 3 : 1;                "
         "             default               : 0;                "
         "          };                                           "
         "    }                                                  "
         " };                                                    "
         "                                                       "
         " world := next_world;                                  "
      ));

   const std::string game_of_life_driver =
      " /* Randomly setup the initial state of the world */ "
      " for (var x := 0; x < width; x += 1)                 "
      " {                                                   "
      "    for (var y := 0; y < height; y += 1)             "
      "    {                                                "
      "       set_point(x, y, (random() < 0.15) ? 1 : 0);   "
      "    }                                                "
      " };                                                  "
      "                                                     "
      " var num_generations := 200;                         "
      "                                                     "
      " for (var i := 0; i < num_generations; i += 1)       "
      " {                                                   "
      "    println('Generation: ', i);                      "
      "    render();                                        "
      "    evolve();                                        "
      "    sleep(200);                                      "
      " }                                                   ";

   expression_t expression;
   expression.register_symbol_table(symbol_table);

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

   expression.value();
}

// Assembly:
subq $0x2f78, %rsp           # imm = 0x2F78
movq $0x3c, 0x2f70(%rsp)
movq $0x1e, 0x2f68(%rsp)
movq $0x0, 0x2f48(%rsp)
leaq 0x2f47(%rsp), %rdi
movq %rdi, 0xc8(%rsp)
callq 0x11cbc0
movq 0xc8(%rsp), %rcx
leaq 0x2f50(%rsp), %rdi
movl $0x708, %esi            # imm = 0x708
leaq 0x2f48(%rsp), %rdx
callq 0x11cbd0
jmp 0x11b904
leaq 0x2f47(%rsp), %rdi
callq 0x11cc50
leaq 0x1b70(%rsp), %rdi
callq 0x11cc60
jmp 0x11b920
leaq 0x1aa0(%rsp), %rdi
callq 0x11ce00
jmp 0x11b92f
leaq 0x1a98(%rsp), %rdi
movl $0x1, %esi
callq 0x11cf50
jmp 0x11b943
leaq 0x1a77(%rsp), %rdi
movq %rdi, 0xc0(%rsp)
callq 0x1146b0
movq 0xc0(%rsp), %rdx
leaq 0x34cc0e(%rip), %rsi    # 0x468575
leaq 0x1a78(%rsp), %rdi
callq 0x11b7e0
jmp 0x11b976
movabsq $0x404e000000000000, %rax # imm = 0x404E000000000000
movq %rax, 0x1a68(%rsp)
leaq 0x1a98(%rsp), %rdi
leaq 0x1a78(%rsp), %rsi
leaq 0x1a68(%rsp), %rdx
callq 0x11cf90
jmp 0x11b9a7
leaq 0x1a78(%rsp), %rdi
callq 0x114818
leaq 0x1a77(%rsp), %rdi
callq 0x114800
leaq 0x1a47(%rsp), %rdi
movq %rdi, 0xb8(%rsp)
callq 0x1146b0
movq 0xb8(%rsp), %rdx
leaq 0x34cb96(%rip), %rsi    # 0x46857b
leaq 0x1a48(%rsp), %rdi
callq 0x11b7e0
jmp 0x11b9f4
movabsq $0x403e000000000000, %rax # imm = 0x403E000000000000
movq %rax, 0x1a38(%rsp)
leaq 0x1a98(%rsp), %rdi
leaq 0x1a48(%rsp), %rsi
leaq 0x1a38(%rsp), %rdx
callq 0x11cf90
jmp 0x11ba25
leaq 0x1a48(%rsp), %rdi
callq 0x114818
leaq 0x1a47(%rsp), %rdi
callq 0x114800
leaq 0x1a17(%rsp), %rdi
movq %rdi, 0xb0(%rsp)
callq 0x1146b0
movq 0xb0(%rsp), %rdx
leaq 0x34cb1f(%rip), %rsi    # 0x468582
leaq 0x1a18(%rsp), %rdi
callq 0x11b7e0
jmp 0x11ba72
leaq 0x1a98(%rsp), %rdi
leaq 0x1a18(%rsp), %rsi
leaq 0x2f50(%rsp), %rdx
callq 0x11d070
jmp 0x11ba91
leaq 0x1a18(%rsp), %rdi
callq 0x114818
leaq 0x1a17(%rsp), %rdi
callq 0x114800
leaq 0x1a98(%rsp), %rdi
leaq 0x1aa0(%rsp), %rsi
callq 0x11d130
jmp 0x11bac2
leaq 0x19ef(%rsp), %rdi
movq %rdi, 0xa8(%rsp)
callq 0x1146b0
movq 0xa8(%rsp), %rdx
leaq 0x34caa2(%rip), %rsi    # 0x468588
leaq 0x19f0(%rsp), %rdi
callq 0x11b7e0
jmp 0x11baf5
leaq 0x1a98(%rsp), %rdi
leaq 0x19f0(%rsp), %rsi
leaq 0x1b70(%rsp), %rdx
callq 0x11d160
jmp 0x11bb14
leaq 0x19f0(%rsp), %rdi
callq 0x114818
leaq 0x19ef(%rsp), %rdi
callq 0x114800
leaq 0x19c7(%rsp), %rdi
movq %rdi, 0xa0(%rsp)
callq 0x1146b0
movq 0xa0(%rsp), %rdx
leaq 0x34ca3d(%rip), %rsi    # 0x46858f
leaq 0x19c8(%rsp), %rdi
callq 0x11b7e0
jmp 0x11bb61
leaq 0x19c6(%rsp), %rdi
callq 0x11d330
movq %rax, %rdx
leaq 0x1a98(%rsp), %rdi
leaq 0x19c8(%rsp), %rsi
callq 0x11d200
jmp 0x11bb88
leaq 0x19c8(%rsp), %rdi
callq 0x114818
leaq 0x19c7(%rsp), %rdi
callq 0x114800
leaq 0xfd8(%rsp), %rdi
leaq 0x1a98(%rsp), %rsi
callq 0x11d340
jmp 0x11bbb9
leaq 0xfd8(%rsp), %rdi
movl $0x1, %esi
callq 0x11d4e0
jmp 0x11bbcd
leaq 0xfd8(%rsp), %rdi
movl $0x1, %esi
callq 0x11d510
jmp 0x11bbe1
leaq 0xf27(%rsp), %rdi
movq %rdi, 0x98(%rsp)
callq 0x1146b0
movq 0x98(%rsp), %rdx
leaq 0x34c9ae(%rip), %rsi    # 0x4685b3
leaq 0xf28(%rsp), %rdi
callq 0x11b7e0
jmp 0x11bc14
leaq 0xf48(%rsp), %rdi
leaq 0xf28(%rsp), %rsi
callq 0x11d590
jmp 0x11bc2b
leaq 0xeff(%rsp), %rdi
movq %rdi, 0x90(%rsp)
callq 0x1146b0
movq 0x90(%rsp), %rdx
leaq 0x34c87e(%rip), %rsi    # 0x4684cd
leaq 0xf00(%rsp), %rdi
callq 0x11b7e0
jmp 0x11bc5e
leaq 0xed7(%rsp), %rdi
movq %rdi, 0x88(%rsp)
callq 0x1146b0
movq 0x88(%rsp), %rdx
leaq 0x34c913(%rip), %rsi    # 0x468595
leaq 0xed8(%rsp), %rdi
callq 0x11b7e0
jmp 0x11bc91
leaq 0xf48(%rsp), %rdi
leaq 0xf00(%rsp), %rsi
leaq 0xed8(%rsp), %rdx
callq 0x11d610
movq %rax, 0x80(%rsp)
jmp 0x11bcb8
leaq 0xeaf(%rsp), %rdi
movq %rdi, 0x78(%rsp)
callq 0x1146b0
movq 0x78(%rsp), %rdx
leaq 0x34c8c1(%rip), %rsi    # 0x468597
leaq 0xeb0(%rsp), %rdi
callq 0x11b7e0
jmp 0x11bce5
movq 0x80(%rsp), %rdi
leaq 0xeb0(%rsp), %rsi
callq 0x11d660
movq %rax, 0x70(%rsp)
jmp 0x11bd01
movq 0x70(%rsp), %rsi
leaq 0xfd8(%rsp), %rdi
xorl %edx, %edx
callq 0x11d540
jmp 0x11bd17
leaq 0xeb0(%rsp), %rdi
callq 0x114818
leaq 0xeaf(%rsp), %rdi
callq 0x114800
leaq 0xed8(%rsp), %rdi
callq 0x114818
leaq 0xed7(%rsp), %rdi
callq 0x114800
leaq 0xf00(%rsp), %rdi
callq 0x114818
leaq 0xeff(%rsp), %rdi
callq 0x114800
leaq 0xf48(%rsp), %rdi
callq 0x11d690
leaq 0xf28(%rsp), %rdi
callq 0x114818
leaq 0xf27(%rsp), %rdi
callq 0x114800
leaq 0xdf7(%rsp), %rdi
movq %rdi, 0x68(%rsp)
callq 0x1146b0
movq 0x68(%rsp), %rdx
leaq 0x34c805(%rip), %rsi    # 0x4685af
leaq 0xdf8(%rsp), %rdi
callq 0x11b7e0
jmp 0x11bdb9
leaq 0xe18(%rsp), %rdi
leaq 0xdf8(%rsp), %rsi
callq 0x11d590
jmp 0x11bdd0
leaq 0xdcf(%rsp), %rdi
movq %rdi, 0x60(%rsp)
callq 0x1146b0
movq 0x60(%rsp), %rdx
leaq 0x34c6df(%rip), %rsi    # 0x4684cd
leaq 0xdd0(%rsp), %rdi
callq 0x11b7e0
jmp 0x11bdfd
leaq 0xda7(%rsp), %rdi
movq %rdi, 0x58(%rsp)
callq 0x1146b0
movq 0x58(%rsp), %rdx
leaq 0x34c77a(%rip), %rsi    # 0x468595
leaq 0xda8(%rsp), %rdi
callq 0x11b7e0
jmp 0x11be2a
leaq 0xd7f(%rsp), %rdi
movq %rdi, 0x50(%rsp)
callq 0x1146b0
movq 0x50(%rsp), %rdx
leaq 0x34d7fa(%rip), %rsi    # 0x469642
leaq 0xd80(%rsp), %rdi
callq 0x11b7e0
jmp 0x11be57
leaq 0xe18(%rsp), %rdi
leaq 0xdd0(%rsp), %rsi
leaq 0xda8(%rsp), %rdx
leaq 0xd80(%rsp), %rcx
callq 0x11d6d0
movq %rax, 0x48(%rsp)
jmp 0x11be83
leaq 0xd57(%rsp), %rdi
movq %rdi, 0x40(%rsp)
callq 0x1146b0
movq 0x40(%rsp), %rdx
leaq 0x34c718(%rip), %rsi    # 0x4685b9
leaq 0xd58(%rsp), %rdi
callq 0x11b7e0
jmp 0x11beb0
movq 0x48(%rsp), %rdi
leaq 0xd58(%rsp), %rsi
callq 0x11d660
movq %rax, 0x38(%rsp)
jmp 0x11bec9
movq 0x38(%rsp), %rsi
leaq 0xfd8(%rsp), %rdi
xorl %edx, %edx
callq 0x11d540
jmp 0x11bedf
leaq 0xd58(%rsp), %rdi
callq 0x114818
leaq 0xd57(%rsp), %rdi
callq 0x114800
leaq 0xd80(%rsp), %rdi
callq 0x114818
leaq 0xd7f(%rsp), %rdi
callq 0x114800
leaq 0xda8(%rsp), %rdi
callq 0x114818
leaq 0xda7(%rsp), %rdi
callq 0x114800
leaq 0xdd0(%rsp), %rdi
callq 0x114818
leaq 0xdcf(%rsp), %rdi
callq 0x114800
leaq 0xe18(%rsp), %rdi
callq 0x11d690
leaq 0xdf8(%rsp), %rdi
callq 0x114818
leaq 0xdf7(%rsp), %rdi
callq 0x114800
leaq 0xc9f(%rsp), %rdi
movq %rdi, 0x30(%rsp)
callq 0x1146b0
movq 0x30(%rsp), %rdx
leaq 0x34c64e(%rip), %rsi    # 0x4685da
leaq 0xca0(%rsp), %rdi
callq 0x11b7e0
jmp 0x11bf9b
leaq 0xcc0(%rsp), %rdi
leaq 0xca0(%rsp), %rsi
callq 0x11d590
jmp 0x11bfb2
leaq 0xc77(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x1146b0
movq 0x28(%rsp), %rdx
leaq 0x34c611(%rip), %rsi    # 0x4685e1
leaq 0xc78(%rsp), %rdi
callq 0x11b7e0
jmp 0x11bfdf
leaq 0xcc0(%rsp), %rdi
leaq 0xc78(%rsp), %rsi
callq 0x11d660
movq %rax, 0x20(%rsp)
jmp 0x11bffb
movq 0x20(%rsp), %rsi
leaq 0xfd8(%rsp), %rdi
xorl %edx, %edx
callq 0x11d540
jmp 0x11c011
leaq 0xc78(%rsp), %rdi
callq 0x114818
leaq 0xc77(%rsp), %rdi
callq 0x114800
leaq 0xcc0(%rsp), %rdi
callq 0x11d690
leaq 0xca0(%rsp), %rdi
callq 0x114818
leaq 0xc9f(%rsp), %rdi
callq 0x114800
leaq 0xbbf(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0x1146b0
movq 0x18(%rsp), %rdx
leaq 0x34c8f7(%rip), %rsi    # 0x468967
leaq 0xbc0(%rsp), %rdi
callq 0x11b7e0
jmp 0x11c07f
leaq 0xbe0(%rsp), %rdi
leaq 0xbc0(%rsp), %rsi
callq 0x11d590
jmp 0x11c096
leaq 0xb97(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x1146b0
movq 0x10(%rsp), %rdx
leaq 0x34c8ba(%rip), %rsi    # 0x46896e
leaq 0xb98(%rsp), %rdi
callq 0x11b7e0
jmp 0x11c0c3
leaq 0xbe0(%rsp), %rdi
leaq 0xb98(%rsp), %rsi
callq 0x11d660
movq %rax, 0x8(%rsp)
jmp 0x11c0df
movq 0x8(%rsp), %rsi
leaq 0xfd8(%rsp), %rdi
xorl %edx, %edx
callq 0x11d540
jmp 0x11c0f5
leaq 0xb98(%rsp), %rdi
callq 0x114818
leaq 0xb97(%rsp), %rdi
callq 0x114800
leaq 0xbe0(%rsp), %rdi
callq 0x11d690
leaq 0xbc0(%rsp), %rdi
callq 0x114818
leaq 0xbbf(%rsp), %rdi
callq 0x114800
leaq 0xb6f(%rsp), %rdi
movq %rdi, (%rsp)
callq 0x1146b0
movq (%rsp), %rdx
leaq 0x34cf6b(%rip), %rsi    # 0x4690bd
leaq 0xb70(%rsp), %rdi
callq 0x11b7e0
jmp 0x11c161
leaq 0xb6f(%rsp), %rdi
callq 0x114800
leaq 0xb48(%rsp), %rdi
callq 0x11d730
jmp 0x11c17d
leaq 0xb48(%rsp), %rdi
leaq 0x1a98(%rsp), %rsi
callq 0x11d7e0
jmp 0x11c194
leaq 0xd0(%rsp), %rdi
movl $0x7f, %esi
callq 0x11d890
jmp 0x11c1a8
leaq 0x220(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
callq 0x11d9c0
jmp 0x11c1bf
leaq 0xd0(%rsp), %rdi
callq 0x11e1f0
leaq 0x220(%rsp), %rdi
leaq 0xb70(%rsp), %rsi
leaq 0xb48(%rsp), %rdx
callq 0x11e260
jmp 0x11c1eb
leaq 0xb48(%rsp), %rdi
callq 0x11eaf0
jmp 0x11c1fa
leaq 0x220(%rsp), %rdi
callq 0x11eb10
leaq 0xb48(%rsp), %rdi
callq 0x11ed10
leaq 0xb70(%rsp), %rdi
callq 0x114818
leaq 0xfd8(%rsp), %rdi
callq 0x11ed50
leaq 0x1a98(%rsp), %rdi
callq 0x11ede0
leaq 0x1aa0(%rsp), %rdi
callq 0x11ee60
leaq 0x1b70(%rsp), %rdi
callq 0x11ee90
leaq 0x2f50(%rsp), %rdi
callq 0x11eea0
addq $0x2f78, %rsp           # imm = 0x2F78
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
leaq 0x2f47(%rsp), %rdi
callq 0x11cc50
jmp 0x11c90c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c8ff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c8f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c8e5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c312
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
leaq 0x1a78(%rsp), %rdi
callq 0x114818
leaq 0x1a77(%rsp), %rdi
callq 0x114800
jmp 0x11c8d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c35b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
leaq 0x1a48(%rsp), %rdi
callq 0x114818
leaq 0x1a47(%rsp), %rdi
callq 0x114800
jmp 0x11c8d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c3a4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
leaq 0x1a18(%rsp), %rdi
callq 0x114818
leaq 0x1a17(%rsp), %rdi
callq 0x114800
jmp 0x11c8d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c8d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c406
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
leaq 0x19f0(%rsp), %rdi
callq 0x114818
leaq 0x19ef(%rsp), %rdi
callq 0x114800
jmp 0x11c8d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c44f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
leaq 0x19c8(%rsp), %rdi
callq 0x114818
leaq 0x19c7(%rsp), %rdi
callq 0x114800
jmp 0x11c8d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c8cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c583
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c576
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c55c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c542
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c535
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c528
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
leaq 0xeb0(%rsp), %rdi
callq 0x114818
leaq 0xeaf(%rsp), %rdi
callq 0x114800
leaq 0xed8(%rsp), %rdi
callq 0x114818
leaq 0xed7(%rsp), %rdi
callq 0x114800
leaq 0xf00(%rsp), %rdi
callq 0x114818
leaq 0xeff(%rsp), %rdi
callq 0x114800
leaq 0xf48(%rsp), %rdi
callq 0x11d690
leaq 0xf28(%rsp), %rdi
callq 0x114818
leaq 0xf27(%rsp), %rdi
callq 0x114800
jmp 0x11c8cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c6d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c6c4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c6aa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c690
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c676
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c669
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c65c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
leaq 0xd58(%rsp), %rdi
callq 0x114818
leaq 0xd57(%rsp), %rdi
callq 0x114800
leaq 0xd80(%rsp), %rdi
callq 0x114818
leaq 0xd7f(%rsp), %rdi
callq 0x114800
leaq 0xda8(%rsp), %rdi
callq 0x114818
leaq 0xda7(%rsp), %rdi
callq 0x114800
leaq 0xdd0(%rsp), %rdi
callq 0x114818
leaq 0xdcf(%rsp), %rdi
callq 0x114800
leaq 0xe18(%rsp), %rdi
callq 0x11d690
leaq 0xdf8(%rsp), %rdi
callq 0x114818
leaq 0xdf7(%rsp), %rdi
callq 0x114800
jmp 0x11c8cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c76d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c760
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c746
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
leaq 0xc78(%rsp), %rdi
callq 0x114818
leaq 0xc77(%rsp), %rdi
callq 0x114800
leaq 0xcc0(%rsp), %rdi
callq 0x11d690
leaq 0xca0(%rsp), %rdi
callq 0x114818
leaq 0xc9f(%rsp), %rdi
callq 0x114800
jmp 0x11c8cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c809
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c7fc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c7e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
leaq 0xb98(%rsp), %rdi
callq 0x114818
leaq 0xb97(%rsp), %rdi
callq 0x114800
leaq 0xbe0(%rsp), %rdi
callq 0x11d690
leaq 0xbc0(%rsp), %rdi
callq 0x114818
leaq 0xbbf(%rsp), %rdi
callq 0x114800
jmp 0x11c8cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
leaq 0xb6f(%rsp), %rdi
callq 0x114800
jmp 0x11c8cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c8be
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
jmp 0x11c8b1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
leaq 0xd0(%rsp), %rdi
callq 0x11e1f0
jmp 0x11c8b1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f38(%rsp)
movl %eax, 0x2f34(%rsp)
leaq 0x220(%rsp), %rdi
callq 0x11eb10
leaq 0xb48(%rsp), %rdi
callq 0x11ed10
leaq 0xb70(%rsp), %rdi
callq 0x114818
leaq 0xfd8(%rsp), %rdi
callq 0x11ed50
leaq 0x1a98(%rsp), %rdi
callq 0x11ede0
leaq 0x1aa0(%rsp), %rdi
callq 0x11ee60
leaq 0x1b70(%rsp), %rdi
callq 0x11ee90
leaq 0x2f50(%rsp), %rdi
callq 0x11eea0
movq 0x2f38(%rsp), %rdi
callq 0x114480
nopl (%rax)