// File: tomfunkhouser[P]gaps/apps/conf2img/conf2img.cpp
// Function: WriteImages(char const*)
static int
WriteImages(const char *output_directory)
{
  // Check parameters
  RNBoolean create_mesh_images = create_mesh_face_images || create_mesh_material_images || create_mesh_segment_images || create_mesh_category_images;
  if (!create_depth_images && !create_position_images && !create_boundary_images && !create_normal_images && !create_segmentation_images && !create_mesh_images) return 1;

  // Start statistics
  RNTime start_time;
  start_time.Read();
  if (print_verbose) {
    printf("Writing images to %s ...\n", output_directory);
    fflush(stdout);
  }

  // Create output directory
  char cmd[1024];
  sprintf(cmd, "mkdir -p %s", output_image_directory);
  system(cmd);

  // Write images
  for (int i = 0; i < configuration.NImages(); i++) {
    RGBDImage *image = configuration.Image(i);

    // Get image name
    char image_name_buffer[2048];
    const char *filename = image->DepthFilename();
    if (!filename) filename = image->ColorFilename();
    if (!filename) filename = "default";
    strncpy(image_name_buffer, filename, 2047);
    char *image_name = (strrchr(image_name_buffer, '/')) ? strrchr(image_name_buffer, '/')+1 : image_name_buffer;
    char *endp = strrchr(image_name, '.');
    if (endp) *endp = '\0';

    // Check if already done
    RNBoolean done = TRUE;
    if (done && create_depth_images) {
      char output_image_filename[4096];
      sprintf(output_image_filename, "%s/%s_depth.png", output_directory, image_name);
      if (!RNFileExists(output_image_filename)) done = FALSE;
    }
    if (done && create_boundary_images) {
      char output_image_filename[4096];
      sprintf(output_image_filename, "%s/%s_boundary.png", output_directory, image_name);
      if (!RNFileExists(output_image_filename)) done = FALSE;
    }
    if (done && create_position_images) {
      char output_image_filename[4096];
      sprintf(output_image_filename, "%s/%s_px.png", output_directory, image_name);
      if (!RNFileExists(output_image_filename)) done = FALSE;
    }
    if (done && create_normal_images) {
      char output_image_filename[4096];
      sprintf(output_image_filename, "%s/%s_nx.png", output_directory, image_name);
      if (!RNFileExists(output_image_filename)) done = FALSE;
    }
    if (done && create_segmentation_images) {
      char output_image_filename[4096];
      sprintf(output_image_filename, "%s/%s_segmentation.png", output_directory, image_name);
      if (!RNFileExists(output_image_filename)) done = FALSE;
    }
    if (done && create_mesh_face_images) {
      char output_image_filename[4096];
      sprintf(output_image_filename, "%s/%s_face.pfm", output_directory, image_name);
      if (!RNFileExists(output_image_filename)) done = FALSE;
    }
    if (done && create_mesh_material_images) {
      char output_image_filename[4096];
      sprintf(output_image_filename, "%s/%s_material.png", output_directory, image_name);
      if (!RNFileExists(output_image_filename)) done = FALSE;
    }
    if (done && create_mesh_segment_images) {
      char output_image_filename[4096];
      sprintf(output_image_filename, "%s/%s_segment.png", output_directory, image_name);
      if (!RNFileExists(output_image_filename)) done = FALSE;
    }
    if (done && create_mesh_category_images) {
      char output_image_filename[4096];
      sprintf(output_image_filename, "%s/%s_category.png", output_directory, image_name);
      if (!RNFileExists(output_image_filename)) done = FALSE;
    }
    if (done) continue;

    // Print timing message
    RNTime step_time;
    if (print_debug) {
      printf("    A %s\n", image_name);
      fflush(stdout);
      step_time.Read();
    }

    // Create depth image
    if (!image->ReadDepthChannel()) return 0;
    R2Grid depth_image = *(image->DepthChannel());
    R3Matrix intrinsics_matrix = image->Intrinsics();
    height = (int) ((double) image->NPixels(RN_Y) * width / (double) image->NPixels(RN_X) + 0.5);
    RGBDResampleDepthImage(depth_image, intrinsics_matrix, width, height);
    if (!image->ReleaseDepthChannel()) return 0;
    if (create_depth_images) {
      // Write depth image
      R2Grid tmp = depth_image; tmp.Multiply(png_distance_scale);
      char output_image_filename[4096];
      sprintf(output_image_filename, "%s/%s_depth.png", output_directory, image_name);
      tmp.WriteFile(output_image_filename);
    }

    // Print timing message
    if (print_debug) {
      printf("    B %g %d %d %g\n", step_time.Elapsed(), depth_image.XResolution(), depth_image.YResolution(), depth_image.Mean());
      fflush(stdout);
      step_time.Read();
    }

    // Create boundary image
    R2Grid boundary_image;
    if (create_boundary_images || create_normal_images || create_segmentation_images || create_mesh_images) {
      if (!RGBDCreateBoundaryChannel(depth_image, boundary_image)) return 0;
      if (create_boundary_images) {
        // Write boundary image
        char output_image_filename[4096];
        sprintf(output_image_filename, "%s/%s_boundary.png", output_directory, image_name);
        boundary_image.WriteFile(output_image_filename);
      }
    }

    // Print timing message
    if (print_debug) {
      printf("    C %g\n", step_time.Elapsed());
      fflush(stdout);
      step_time.Read();
    }

    // Create position images (in camera coordinates)
    R2Grid px_image, py_image, pz_image;
    if (create_position_images || create_normal_images || create_segmentation_images || create_mesh_images) {
      if (!RGBDCreatePositionChannels(depth_image, px_image, py_image, pz_image,
          intrinsics_matrix, R4identity_matrix)) return 0;
      if (create_position_images) {
        // Write position images
        char output_image_filename[4096];
        sprintf(output_image_filename, "%s/%s_px.pfm", output_directory, image_name);
        px_image.WriteFile(output_image_filename);
        sprintf(output_image_filename, "%s/%s_py.pfm", output_directory, image_name);
        py_image.WriteFile(output_image_filename);
        sprintf(output_image_filename, "%s/%s_pz.pfm", output_directory, image_name);
        pz_image.WriteFile(output_image_filename);
      }
    }

    // Print timing message
    if (print_debug) {
      printf("    D %g\n", step_time.Elapsed());
      fflush(stdout);
      step_time.Read();
    }

    // Create normal images (in camera coordinates)
    R2Grid nx_image, ny_image, nz_image, radius_image;
    if (create_normal_images || create_segmentation_images) {
    // if (create_normal_images || create_segmentation_images || create_mesh_images) {
      RGBDCreateNormalChannels(depth_image,
        px_image, py_image, pz_image, boundary_image,
        nx_image, ny_image, nz_image, radius_image,
        R3zero_point, R3negz_vector, R3posy_vector);
      if (create_normal_images) {
        // Write normal images
        R2Grid tmp;
        char output_image_filename[4096];
        sprintf(output_image_filename, "%s/%s_nx.png", output_directory, image_name);
        tmp = nx_image;  tmp.Add(1); tmp.Multiply(32768);  tmp.Threshold(0, 0, R2_GRID_KEEP_VALUE); tmp.Threshold(65535, R2_GRID_KEEP_VALUE, 65535);
        tmp.WriteFile(output_image_filename);
        sprintf(output_image_filename, "%s/%s_ny.png", output_directory, image_name);
        tmp = ny_image;  tmp.Add(1); tmp.Multiply(32768);  tmp.Threshold(0, 0, R2_GRID_KEEP_VALUE); tmp.Threshold(65535, R2_GRID_KEEP_VALUE, 65535);
        tmp.WriteFile(output_image_filename);
        sprintf(output_image_filename, "%s/%s_nz.png", output_directory, image_name);
        tmp = nz_image;  tmp.Add(1); tmp.Multiply(32768);  tmp.Threshold(0, 0, R2_GRID_KEEP_VALUE); tmp.Threshold(65535, R2_GRID_KEEP_VALUE, 65535);
        tmp.WriteFile(output_image_filename);
        sprintf(output_image_filename, "%s/%s_radius.png", output_directory, image_name);
        tmp = radius_image;  tmp.Multiply(png_distance_scale); 
        tmp.WriteFile(output_image_filename);
      }
    }

    // Print timing message
    if (print_debug) {
      printf("    E %g\n", step_time.Elapsed());
      fflush(stdout);
      step_time.Read();
    }

    // Create segmentation image
    if (create_segmentation_images) {
      // Create color image
      if (!image->ReadColorChannels()) return 0;
      R2Image color_image(width, height, 3);
      for (int iy = 0; iy < height; iy++) {
        for (int ix = 0; ix < width; ix++) {
          color_image.SetPixelRGB(ix, iy, image->PixelColor(ix, iy));
        }
      }
      if (!image->ReleaseColorChannels()) return 0;
      R3Matrix color_intrinsics_matrix = image->Intrinsics();
      RGBDResampleColorImage(color_image, color_intrinsics_matrix, width, height);

      // Create segmentation image
      R2Grid segmentation_image;
      char output_ascii_filename[4096];
      sprintf(output_ascii_filename, "%s/%s_segmentation.txt", output_directory, image_name);
      RGBDCreateSegmentationChannel(depth_image,
        px_image, py_image, pz_image, boundary_image,
        nx_image, ny_image, nz_image, radius_image,
        color_image, segmentation_image,
        R3zero_point, R3negz_vector, R3posy_vector,
        output_ascii_filename);

      // Write segmentation image
      if (create_segmentation_images) {
        char output_image_filename[4096];
        sprintf(output_image_filename, "%s/%s_segmentation.png", output_directory, image_name);
        segmentation_image.WriteFile(output_image_filename);
      }
    }

    // Print timing message
    if (print_debug) {
      printf("    F %g\n", step_time.Elapsed());
      fflush(stdout);
      step_time.Read();
    }

    // Create mesh images
    if (create_mesh_images && (mesh.NFaces() > 0)) {
      // Create mesh images
      R2Grid mesh_face_image, mesh_material_image, mesh_segment_image, mesh_category_image;
      CreateMeshChannels(image, depth_image,
        px_image, py_image, pz_image, boundary_image,
        nx_image, ny_image, nz_image, radius_image,
        mesh_face_image, mesh_material_image, mesh_segment_image, mesh_category_image,
        R3zero_point, R3negz_vector, R3posy_vector, mesh);

      // Write mesh face image
      if (create_mesh_face_images) {
        char output_image_filename[4096];
        sprintf(output_image_filename, "%s/%s_face.pfm", output_directory, image_name);
        mesh_face_image.WriteFile(output_image_filename);
      }

      // Write mesh material image
      if (create_mesh_material_images) {
        char output_image_filename[4096];
        sprintf(output_image_filename, "%s/%s_material.png", output_directory, image_name);
        mesh_material_image.WriteFile(output_image_filename);
      }

      // Write mesh segment image
      if (create_mesh_segment_images) {
        char output_image_filename[4096];
        sprintf(output_image_filename, "%s/%s_segment.png", output_directory, image_name);
        mesh_segment_image.WriteFile(output_image_filename);
      }

      // Write mesh category image
      if (create_mesh_category_images) {
        char output_image_filename[4096];
        sprintf(output_image_filename, "%s/%s_category.png", output_directory, image_name);
        mesh_category_image.WriteFile(output_image_filename);
      }
    }

    // Print timing message
    if (print_debug) {
      printf("    G %g\n", step_time.Elapsed());
      fflush(stdout);
      step_time.Read();
    }
  }

  // Print statistics
  if (print_verbose) {
    printf("Wrote images to %s\n", output_directory);
    printf("  Time = %.2f seconds\n", start_time.Elapsed());
    printf("  # Images = %d\n", configuration.NImages());
    fflush(stdout);
  }


  // Return success
  return 1;
}

// Assembly:
subq $0x14ba8, %rsp          # imm = 0x14BA8
movq %rdi, 0x14b98(%rsp)
movb $0x1, %al
cmpl $0x0, 0x22bbbc(%rip)    # 0x255dc4
movb %al, 0x15f(%rsp)
jne 0x2a246
movb $0x1, %al
cmpl $0x0, 0x22bbae(%rip)    # 0x255dc8
movb %al, 0x15f(%rsp)
jne 0x2a246
movb $0x1, %al
cmpl $0x0, 0x22bba0(%rip)    # 0x255dcc
movb %al, 0x15f(%rsp)
jne 0x2a246
cmpl $0x0, 0x22bb94(%rip)    # 0x255dd0
setne %al
movb %al, 0x15f(%rsp)
movb 0x15f(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, 0x14b94(%rsp)
cmpl $0x0, 0x22bb50(%rip)    # 0x255db0
jne 0x2a2a0
cmpl $0x0, 0x22bb4b(%rip)    # 0x255db4
jne 0x2a2a0
cmpl $0x0, 0x22bb4a(%rip)    # 0x255dbc
jne 0x2a2a0
cmpl $0x0, 0x22bb3d(%rip)    # 0x255db8
jne 0x2a2a0
cmpl $0x0, 0x22bb3c(%rip)    # 0x255dc0
jne 0x2a2a0
cmpl $0x0, 0x14b94(%rsp)
jne 0x2a2a0
movl $0x1, 0x14ba4(%rsp)
jmp 0x2bbef
leaq 0x14b80(%rsp), %rdi
callq 0x13fe80
leaq 0x14b80(%rsp), %rdi
callq 0x30490
cmpl $0x0, 0x22bac7(%rip)    # 0x255d88
je 0x2a2e8
movq 0x14b98(%rsp), %rsi
leaq 0x1b51d4(%rip), %rdi    # 0x1df4a6
movb $0x0, %al
callq 0x24090
movq 0x224cb0(%rip), %rax    # 0x24ef90
movq (%rax), %rdi
callq 0x24c10
leaq 0x14780(%rsp), %rdi
movq 0x22ba89(%rip), %rdx    # 0x255d80
leaq 0x1b51c2(%rip), %rsi    # 0x1df4c0
movb $0x0, %al
callq 0x24160
leaq 0x14780(%rsp), %rdi
callq 0x24870
movl $0x0, 0x1477c(%rsp)
movl 0x1477c(%rsp), %eax
movl %eax, 0x158(%rsp)
leaq 0x22b856(%rip), %rdi    # 0x255b88
callq 0x304b0
movl %eax, %ecx
movl 0x158(%rsp), %eax
cmpl %ecx, %eax
jge 0x2bb7f
movl 0x1477c(%rsp), %esi
leaq 0x22b832(%rip), %rdi    # 0x255b88
callq 0x304d0
movq %rax, 0x14770(%rsp)
movq 0x14770(%rsp), %rdi
callq 0x306c0
movq %rax, 0x13f68(%rsp)
cmpq $0x0, 0x13f68(%rsp)
jne 0x2a398
movq 0x14770(%rsp), %rdi
callq 0x306e0
movq %rax, 0x13f68(%rsp)
cmpq $0x0, 0x13f68(%rsp)
jne 0x2a3b2
leaq 0x1b5122(%rip), %rax    # 0x1df4cc
movq %rax, 0x13f68(%rsp)
leaq 0x13f70(%rsp), %rdi
movq 0x13f68(%rsp), %rsi
movl $0x7ff, %edx            # imm = 0x7FF
callq 0x244a0
leaq 0x13f70(%rsp), %rdi
movl $0x2f, %esi
callq 0x24b20
cmpq $0x0, %rax
je 0x2a404
leaq 0x13f70(%rsp), %rdi
movl $0x2f, %esi
callq 0x24b20
addq $0x1, %rax
movq %rax, 0x150(%rsp)
jmp 0x2a414
leaq 0x13f70(%rsp), %rax
movq %rax, 0x150(%rsp)
movq 0x150(%rsp), %rax
movq %rax, 0x13f60(%rsp)
movq 0x13f60(%rsp), %rdi
movl $0x2e, %esi
callq 0x24b20
movq %rax, 0x13f58(%rsp)
cmpq $0x0, 0x13f58(%rsp)
je 0x2a454
movq 0x13f58(%rsp), %rax
movb $0x0, (%rax)
movl $0x1, 0x13f54(%rsp)
cmpl $0x0, 0x13f54(%rsp)
je 0x2a4b7
cmpl $0x0, 0x22b940(%rip)    # 0x255db0
je 0x2a4b7
leaq 0x12f50(%rsp), %rdi
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b5043(%rip), %rsi    # 0x1df4d4
movb $0x0, %al
callq 0x24160
leaq 0x12f50(%rsp), %rdi
callq 0x143be0
cmpl $0x0, %eax
jne 0x2a4b5
movl $0x0, 0x13f54(%rsp)
jmp 0x2a4b7
cmpl $0x0, 0x13f54(%rsp)
je 0x2a50f
cmpl $0x0, 0x22b8f4(%rip)    # 0x255dbc
je 0x2a50f
leaq 0x11f50(%rsp), %rdi
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b4ffb(%rip), %rsi    # 0x1df4e4
movb $0x0, %al
callq 0x24160
leaq 0x11f50(%rsp), %rdi
callq 0x143be0
cmpl $0x0, %eax
jne 0x2a50d
movl $0x0, 0x13f54(%rsp)
jmp 0x2a50f
cmpl $0x0, 0x13f54(%rsp)
je 0x2a567
cmpl $0x0, 0x22b894(%rip)    # 0x255db4
je 0x2a567
leaq 0x10f50(%rsp), %rdi
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b4fb6(%rip), %rsi    # 0x1df4f7
movb $0x0, %al
callq 0x24160
leaq 0x10f50(%rsp), %rdi
callq 0x143be0
cmpl $0x0, %eax
jne 0x2a565
movl $0x0, 0x13f54(%rsp)
jmp 0x2a567
cmpl $0x0, 0x13f54(%rsp)
je 0x2a5bf
cmpl $0x0, 0x22b840(%rip)    # 0x255db8
je 0x2a5bf
leaq 0xff50(%rsp), %rdi
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b4f6b(%rip), %rsi    # 0x1df504
movb $0x0, %al
callq 0x24160
leaq 0xff50(%rsp), %rdi
callq 0x143be0
cmpl $0x0, %eax
jne 0x2a5bd
movl $0x0, 0x13f54(%rsp)
jmp 0x2a5bf
cmpl $0x0, 0x13f54(%rsp)
je 0x2a617
cmpl $0x0, 0x22b7f0(%rip)    # 0x255dc0
je 0x2a617
leaq 0xef50(%rsp), %rdi
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b4f20(%rip), %rsi    # 0x1df511
movb $0x0, %al
callq 0x24160
leaq 0xef50(%rsp), %rdi
callq 0x143be0
cmpl $0x0, %eax
jne 0x2a615
movl $0x0, 0x13f54(%rsp)
jmp 0x2a617
cmpl $0x0, 0x13f54(%rsp)
je 0x2a66f
cmpl $0x0, 0x22b79c(%rip)    # 0x255dc4
je 0x2a66f
leaq 0xdf50(%rsp), %rdi
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b4edf(%rip), %rsi    # 0x1df528
movb $0x0, %al
callq 0x24160
leaq 0xdf50(%rsp), %rdi
callq 0x143be0
cmpl $0x0, %eax
jne 0x2a66d
movl $0x0, 0x13f54(%rsp)
jmp 0x2a66f
cmpl $0x0, 0x13f54(%rsp)
je 0x2a6c7
cmpl $0x0, 0x22b748(%rip)    # 0x255dc8
je 0x2a6c7
leaq 0xcf50(%rsp), %rdi
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b4e96(%rip), %rsi    # 0x1df537
movb $0x0, %al
callq 0x24160
leaq 0xcf50(%rsp), %rdi
callq 0x143be0
cmpl $0x0, %eax
jne 0x2a6c5
movl $0x0, 0x13f54(%rsp)
jmp 0x2a6c7
cmpl $0x0, 0x13f54(%rsp)
je 0x2a71f
cmpl $0x0, 0x22b6f4(%rip)    # 0x255dcc
je 0x2a71f
leaq 0xbf50(%rsp), %rdi
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b4e51(%rip), %rsi    # 0x1df54a
movb $0x0, %al
callq 0x24160
leaq 0xbf50(%rsp), %rdi
callq 0x143be0
cmpl $0x0, %eax
jne 0x2a71d
movl $0x0, 0x13f54(%rsp)
jmp 0x2a71f
cmpl $0x0, 0x13f54(%rsp)
je 0x2a777
cmpl $0x0, 0x22b6a0(%rip)    # 0x255dd0
je 0x2a777
leaq 0xaf50(%rsp), %rdi
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b4e0b(%rip), %rsi    # 0x1df55c
movb $0x0, %al
callq 0x24160
leaq 0xaf50(%rsp), %rdi
callq 0x143be0
cmpl $0x0, %eax
jne 0x2a775
movl $0x0, 0x13f54(%rsp)
jmp 0x2a777
cmpl $0x0, 0x13f54(%rsp)
je 0x2a786
jmp 0x2baf2
leaq 0xaf40(%rsp), %rdi
callq 0x13fe80
cmpl $0x0, 0x22b5f2(%rip)    # 0x255d8c
je 0x2a7ce
movq 0x13f60(%rsp), %rsi
leaq 0x1b4dc4(%rip), %rdi    # 0x1df56f
movb $0x0, %al
callq 0x24090
movq 0x2247d7(%rip), %rax    # 0x24ef90
movq (%rax), %rdi
callq 0x24c10
leaq 0xaf40(%rsp), %rdi
callq 0x30490
movq 0x14770(%rsp), %rdi
movq (%rdi), %rax
callq *0x108(%rax)
cmpl $0x0, %eax
jne 0x2a7f4
movl $0x0, 0x14ba4(%rsp)
jmp 0x2bbef
movq 0x14770(%rsp), %rdi
callq 0x30700
movq %rax, %rsi
leaq 0xae70(%rsp), %rdi
callq 0x118550
movq 0x14770(%rsp), %rdi
callq 0x30720
movq %rax, 0x148(%rsp)
jmp 0x2a828
movq 0x148(%rsp), %rsi
leaq 0xae28(%rsp), %rdi
callq 0x1317f0
jmp 0x2a83f
movq 0x14770(%rsp), %rdi
movl $0x1, %esi
callq 0x30500
cvtsi2sd %eax, %xmm0
cvtsi2sdl 0x22b53f(%rip), %xmm1 # 0x255d9c
mulsd %xmm1, %xmm0
movsd %xmm0, 0x140(%rsp)
movq 0x14770(%rsp), %rdi
xorl %esi, %esi
callq 0x30500
movsd 0x140(%rsp), %xmm0
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
movsd 0x1b4786(%rip), %xmm1   # 0x1df018
addsd %xmm1, %xmm0
cvttsd2si %xmm0, %eax
movl %eax, 0x22b500(%rip)    # 0x255da0
movl 0x22b4f6(%rip), %edx    # 0x255d9c
movl 0x22b4f4(%rip), %ecx    # 0x255da0
leaq 0xae70(%rsp), %rdi
leaq 0xae28(%rsp), %rsi
callq 0x4cb60
jmp 0x2a8c3
movq 0x14770(%rsp), %rdi
movq (%rdi), %rax
movq 0x158(%rax), %rax
callq *%rax
movl %eax, 0x13c(%rsp)
jmp 0x2a8e0
movl 0x13c(%rsp), %eax
cmpl $0x0, %eax
jne 0x2a920
movl $0x0, 0x14ba4(%rsp)
movl $0x1, 0xae18(%rsp)
jmp 0x2bad1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xae20(%rsp)
movl %eax, 0xae1c(%rsp)
jmp 0x2bb70
cmpl $0x0, 0x22b489(%rip)    # 0x255db0
je 0x2a9d5
leaq 0xad48(%rsp), %rdi
leaq 0xae70(%rsp), %rsi
callq 0x118550
jmp 0x2a944
movsd 0x22515c(%rip), %xmm0   # 0x24faa8
leaq 0xad48(%rsp), %rdi
callq 0x11f930
jmp 0x2a95b
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b4b62(%rip), %rsi    # 0x1df4d4
xorl %eax, %eax
leaq 0x9d40(%rsp), %rdi
movq %rdi, 0x130(%rsp)
callq 0x24160
movq 0x130(%rsp), %rsi
leaq 0xad48(%rsp), %rdi
callq 0x128850
jmp 0x2a9a0
leaq 0xad48(%rsp), %rdi
callq 0x118840
jmp 0x2a9d5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xae20(%rsp)
movl %eax, 0xae1c(%rsp)
leaq 0xad48(%rsp), %rdi
callq 0x118840
jmp 0x2bb70
cmpl $0x0, 0x22b3b0(%rip)    # 0x255d8c
je 0x2aa8c
leaq 0xaf40(%rsp), %rdi
callq 0x13ff40
movsd %xmm0, 0x128(%rsp)
jmp 0x2a9fa
leaq 0xae70(%rsp), %rdi
callq 0x30740
movl %eax, 0x124(%rsp)
jmp 0x2aa10
leaq 0xae70(%rsp), %rdi
callq 0x30760
movl %eax, 0x120(%rsp)
jmp 0x2aa26
leaq 0xae70(%rsp), %rdi
callq 0x118d30
movsd %xmm0, 0x118(%rsp)
jmp 0x2aa3e
movsd 0x118(%rsp), %xmm1
movl 0x120(%rsp), %edx
movl 0x124(%rsp), %esi
movsd 0x128(%rsp), %xmm0
leaq 0x1b4b14(%rip), %rdi    # 0x1df579
movb $0x2, %al
callq 0x24090
jmp 0x2aa6e
movq 0x22451b(%rip), %rax    # 0x24ef90
movq (%rax), %rdi
callq 0x24c10
jmp 0x2aa7f
leaq 0xaf40(%rsp), %rdi
callq 0x30490
leaq 0x9c70(%rsp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x117390
jmp 0x2aa9f
cmpl $0x0, 0x22b316(%rip)    # 0x255dbc
jne 0x2aac8
cmpl $0x0, 0x22b309(%rip)    # 0x255db8
jne 0x2aac8
cmpl $0x0, 0x22b308(%rip)    # 0x255dc0
jne 0x2aac8
cmpl $0x0, 0x14b94(%rsp)
je 0x2ab80
leaq 0xae70(%rsp), %rdi
leaq 0x9c70(%rsp), %rsi
movsd 0x1b4540(%rip), %xmm0   # 0x1df020
callq 0x49550
movl %eax, 0x114(%rsp)
jmp 0x2aaee
movl 0x114(%rsp), %eax
cmpl $0x0, %eax
jne 0x2ab2e
movl $0x0, 0x14ba4(%rsp)
movl $0x1, 0xae18(%rsp)
jmp 0x2bac4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xae20(%rsp)
movl %eax, 0xae1c(%rsp)
jmp 0x2bb63
cmpl $0x0, 0x22b287(%rip)    # 0x255dbc
je 0x2ab7e
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b4996(%rip), %rsi    # 0x1df4e4
xorl %eax, %eax
leaq 0x8c70(%rsp), %rdi
movq %rdi, 0x108(%rsp)
callq 0x24160
movq 0x108(%rsp), %rsi
leaq 0x9c70(%rsp), %rdi
callq 0x128850
jmp 0x2ab7c
jmp 0x2ab7e
jmp 0x2ab80
cmpl $0x0, 0x22b205(%rip)    # 0x255d8c
je 0x2abd8
leaq 0xaf40(%rsp), %rdi
callq 0x13ff40
movsd %xmm0, 0x100(%rsp)
jmp 0x2aba1
movsd 0x100(%rsp), %xmm0
leaq 0x1b49db(%rip), %rdi    # 0x1df58c
movb $0x1, %al
callq 0x24090
jmp 0x2abba
movq 0x2243cf(%rip), %rax    # 0x24ef90
movq (%rax), %rdi
callq 0x24c10
jmp 0x2abcb
leaq 0xaf40(%rsp), %rdi
callq 0x30490
leaq 0x8ba0(%rsp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x117390
jmp 0x2abeb
leaq 0x8ad0(%rsp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x117390
jmp 0x2abfe
leaq 0x8a00(%rsp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x117390
jmp 0x2ac11
cmpl $0x0, 0x22b19c(%rip)    # 0x255db4
jne 0x2ac3a
cmpl $0x0, 0x22b197(%rip)    # 0x255db8
jne 0x2ac3a
cmpl $0x0, 0x22b196(%rip)    # 0x255dc0
jne 0x2ac3a
cmpl $0x0, 0x14b94(%rsp)
je 0x2adc9
leaq 0x22e1ef(%rip), %r9     # 0x258e30
leaq 0xae70(%rsp), %rdi
leaq 0x8ba0(%rsp), %rsi
leaq 0x8ad0(%rsp), %rdx
leaq 0x8a00(%rsp), %rcx
leaq 0xae28(%rsp), %r8
callq 0x48b60
movl %eax, 0xfc(%rsp)
jmp 0x2ac77
movl 0xfc(%rsp), %eax
cmpl $0x0, %eax
jne 0x2ace9
movl $0x0, 0x14ba4(%rsp)
movl $0x1, 0xae18(%rsp)
jmp 0x2ba9d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xae20(%rsp)
movl %eax, 0xae1c(%rsp)
jmp 0x2bb56
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xae20(%rsp)
movl %eax, 0xae1c(%rsp)
jmp 0x2bb49
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xae20(%rsp)
movl %eax, 0xae1c(%rsp)
jmp 0x2bb3c
cmpl $0x0, 0x22b0c4(%rip)    # 0x255db4
je 0x2adc7
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b4889(%rip), %rsi    # 0x1df596
xorl %eax, %eax
leaq 0x7a00(%rsp), %rdi
movq %rdi, 0xf0(%rsp)
callq 0x24160
movq 0xf0(%rsp), %rsi
leaq 0x8ba0(%rsp), %rdi
callq 0x128850
jmp 0x2ad3b
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b4851(%rip), %rsi    # 0x1df5a3
xorl %eax, %eax
leaq 0x7a00(%rsp), %rdi
movq %rdi, 0xe8(%rsp)
callq 0x24160
movq 0xe8(%rsp), %rsi
leaq 0x8ad0(%rsp), %rdi
callq 0x128850
jmp 0x2ad80
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b4819(%rip), %rsi    # 0x1df5b0
xorl %eax, %eax
leaq 0x7a00(%rsp), %rdi
movq %rdi, 0xe0(%rsp)
callq 0x24160
movq 0xe0(%rsp), %rsi
leaq 0x8a00(%rsp), %rdi
callq 0x128850
jmp 0x2adc5
jmp 0x2adc7
jmp 0x2adc9
cmpl $0x0, 0x22afbc(%rip)    # 0x255d8c
je 0x2ae21
leaq 0xaf40(%rsp), %rdi
callq 0x13ff40
movsd %xmm0, 0xd8(%rsp)
jmp 0x2adea
movsd 0xd8(%rsp), %xmm0
leaq 0x1b47c3(%rip), %rdi    # 0x1df5bd
movb $0x1, %al
callq 0x24090
jmp 0x2ae03
movq 0x224186(%rip), %rax    # 0x24ef90
movq (%rax), %rdi
callq 0x24c10
jmp 0x2ae14
leaq 0xaf40(%rsp), %rdi
callq 0x30490
leaq 0x7930(%rsp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x117390
jmp 0x2ae34
leaq 0x7860(%rsp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x117390
jmp 0x2ae47
leaq 0x7790(%rsp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x117390
jmp 0x2ae5a
leaq 0x76c0(%rsp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x117390
jmp 0x2ae6d
cmpl $0x0, 0x22af44(%rip)    # 0x255db8
jne 0x2ae83
cmpl $0x0, 0x22af43(%rip)    # 0x255dc0
je 0x2b28b
leaq 0x22e60e(%rip), %rcx    # 0x259498
movq %rsp, %rax
movq %rax, 0xd0(%rsp)
movq %rcx, 0x28(%rax)
leaq 0x22e658(%rip), %rcx    # 0x2594f8
movq %rcx, 0x20(%rax)
leaq 0x22e4b5(%rip), %rcx    # 0x259360
movq %rcx, 0x18(%rax)
leaq 0x76c0(%rsp), %rcx
movq %rcx, 0x10(%rax)
leaq 0x7790(%rsp), %rcx
movq %rcx, 0x8(%rax)
leaq 0x7860(%rsp), %rcx
movq %rcx, (%rax)
movl $0x1, 0x38(%rax)
movl $0x2, 0x30(%rax)
leaq 0xae70(%rsp), %rdi
leaq 0x8ba0(%rsp), %rsi
leaq 0x8ad0(%rsp), %rdx
leaq 0x8a00(%rsp), %rcx
leaq 0x9c70(%rsp), %r8
leaq 0x7930(%rsp), %r9
movsd 0x1b4108(%rip), %xmm0   # 0x1df020
callq 0x492c0
jmp 0x2af1f
cmpl $0x0, 0x22ae92(%rip)    # 0x255db8
je 0x2b289
leaq 0x75f0(%rsp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x117390
jmp 0x2af3f
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b45ae(%rip), %rsi    # 0x1df504
xorl %eax, %eax
leaq 0x65f0(%rsp), %rdi
callq 0x24160
leaq 0x75f0(%rsp), %rdi
leaq 0x7930(%rsp), %rsi
callq 0x1183d0
jmp 0x2af7c
leaq 0x75f0(%rsp), %rdi
movsd 0x1b409c(%rip), %xmm0   # 0x1df028
callq 0x11f680
jmp 0x2af93
leaq 0x75f0(%rsp), %rdi
movsd 0x1b408d(%rip), %xmm0   # 0x1df030
callq 0x11f930
jmp 0x2afaa
leaq 0x75f0(%rsp), %rdi
xorps %xmm1, %xmm1
movsd 0x1b407b(%rip), %xmm2   # 0x1df038
movaps %xmm1, %xmm0
callq 0x11b730
jmp 0x2afc7
leaq 0x75f0(%rsp), %rdi
movsd 0x1b4061(%rip), %xmm1   # 0x1df038
movsd 0x1b4061(%rip), %xmm2   # 0x1df040
movaps %xmm2, %xmm0
callq 0x11b730
jmp 0x2afe9
leaq 0x75f0(%rsp), %rdi
leaq 0x65f0(%rsp), %rsi
callq 0x128850
jmp 0x2b000
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b45b0(%rip), %rsi    # 0x1df5c7
xorl %eax, %eax
leaq 0x65f0(%rsp), %rdi
callq 0x24160
leaq 0x75f0(%rsp), %rdi
leaq 0x7860(%rsp), %rsi
callq 0x1183d0
jmp 0x2b03d
leaq 0x75f0(%rsp), %rdi
movsd 0x1b3fdb(%rip), %xmm0   # 0x1df028
callq 0x11f680
jmp 0x2b054
leaq 0x75f0(%rsp), %rdi
movsd 0x1b3fcc(%rip), %xmm0   # 0x1df030
callq 0x11f930
jmp 0x2b06b
leaq 0x75f0(%rsp), %rdi
xorps %xmm1, %xmm1
movsd 0x1b3fba(%rip), %xmm2   # 0x1df038
movaps %xmm1, %xmm0
callq 0x11b730
jmp 0x2b088
leaq 0x75f0(%rsp), %rdi
movsd 0x1b3fa0(%rip), %xmm1   # 0x1df038
movsd 0x1b3fa0(%rip), %xmm2   # 0x1df040
movaps %xmm2, %xmm0
callq 0x11b730
jmp 0x2b0aa
leaq 0x75f0(%rsp), %rdi
leaq 0x65f0(%rsp), %rsi
callq 0x128850
jmp 0x2b0c1
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b44fc(%rip), %rsi    # 0x1df5d4
xorl %eax, %eax
leaq 0x65f0(%rsp), %rdi
callq 0x24160
leaq 0x75f0(%rsp), %rdi
leaq 0x7790(%rsp), %rsi
callq 0x1183d0
jmp 0x2b0fe
leaq 0x75f0(%rsp), %rdi
movsd 0x1b3f1a(%rip), %xmm0   # 0x1df028
callq 0x11f680
jmp 0x2b115
leaq 0x75f0(%rsp), %rdi
movsd 0x1b3f0b(%rip), %xmm0   # 0x1df030
callq 0x11f930
jmp 0x2b12c
leaq 0x75f0(%rsp), %rdi
xorps %xmm1, %xmm1
movsd 0x1b3ef9(%rip), %xmm2   # 0x1df038
movaps %xmm1, %xmm0
callq 0x11b730
jmp 0x2b149
leaq 0x75f0(%rsp), %rdi
movsd 0x1b3edf(%rip), %xmm1   # 0x1df038
movsd 0x1b3edf(%rip), %xmm2   # 0x1df040
movaps %xmm2, %xmm0
callq 0x11b730
jmp 0x2b16b
leaq 0x75f0(%rsp), %rdi
leaq 0x65f0(%rsp), %rsi
callq 0x128850
jmp 0x2b182
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b4448(%rip), %rsi    # 0x1df5e1
xorl %eax, %eax
leaq 0x65f0(%rsp), %rdi
callq 0x24160
leaq 0x75f0(%rsp), %rdi
leaq 0x76c0(%rsp), %rsi
callq 0x1183d0
jmp 0x2b1bf
movsd 0x2248e1(%rip), %xmm0   # 0x24faa8
leaq 0x75f0(%rsp), %rdi
callq 0x11f930
jmp 0x2b1d6
leaq 0x75f0(%rsp), %rdi
leaq 0x65f0(%rsp), %rsi
callq 0x128850
jmp 0x2b1ed
leaq 0x75f0(%rsp), %rdi
callq 0x118840
jmp 0x2b289
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xae20(%rsp)
movl %eax, 0xae1c(%rsp)
jmp 0x2bb2f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xae20(%rsp)
movl %eax, 0xae1c(%rsp)
jmp 0x2bb22
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xae20(%rsp)
movl %eax, 0xae1c(%rsp)
jmp 0x2bb15
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xae20(%rsp)
movl %eax, 0xae1c(%rsp)
jmp 0x2bb08
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xae20(%rsp)
movl %eax, 0xae1c(%rsp)
leaq 0x75f0(%rsp), %rdi
callq 0x118840
jmp 0x2bb08
jmp 0x2b28b
cmpl $0x0, 0x22aafa(%rip)    # 0x255d8c
je 0x2b2e3
leaq 0xaf40(%rsp), %rdi
callq 0x13ff40
movsd %xmm0, 0xc8(%rsp)
jmp 0x2b2ac
movsd 0xc8(%rsp), %xmm0
leaq 0x1b4336(%rip), %rdi    # 0x1df5f2
movb $0x1, %al
callq 0x24090
jmp 0x2b2c5
movq 0x223cc4(%rip), %rax    # 0x24ef90
movq (%rax), %rdi
callq 0x24c10
jmp 0x2b2d6
leaq 0xaf40(%rsp), %rdi
callq 0x30490
cmpl $0x0, 0x22aad6(%rip)    # 0x255dc0
je 0x2b66b
movq 0x14770(%rsp), %rdi
movq (%rdi), %rax
movq 0x100(%rax), %rax
callq *%rax
movl %eax, 0xc4(%rsp)
jmp 0x2b30d
movl 0xc4(%rsp), %eax
cmpl $0x0, %eax
jne 0x2b334
movl $0x0, 0x14ba4(%rsp)
movl $0x1, 0xae18(%rsp)
jmp 0x2ba69
movl 0x22aa62(%rip), %esi    # 0x255d9c
movl 0x22aa60(%rip), %edx    # 0x255da0
leaq 0x65d8(%rsp), %rdi
movl $0x3, %ecx
callq 0x137050
jmp 0x2b354
movl $0x0, 0x65d4(%rsp)
movl 0x65d4(%rsp), %eax
cmpl 0x22aa34(%rip), %eax    # 0x255da0
jge 0x2b42e
movl $0x0, 0x65d0(%rsp)
movl 0x65d0(%rsp), %eax
cmpl 0x22aa12(%rip), %eax    # 0x255d9c
jge 0x2b416
movl 0x65d0(%rsp), %edx
movl %edx, 0xbc(%rsp)
movl 0x65d4(%rsp), %ecx
movl %ecx, 0xc0(%rsp)
movq 0x14770(%rsp), %rsi
leaq 0x65b8(%rsp), %rdi
callq 0x415a0
jmp 0x2b3c3
movl 0xc0(%rsp), %edx
movl 0xbc(%rsp), %esi
leaq 0x65d8(%rsp), %rdi
leaq 0x65b8(%rsp), %rcx
callq 0x1378a0
jmp 0x2b3e8
jmp 0x2b3ea
movl 0x65d0(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x65d0(%rsp)
jmp 0x2b37d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xae20(%rsp)
movl %eax, 0xae1c(%rsp)
jmp 0x2b659
jmp 0x2b418
movl 0x65d4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x65d4(%rsp)
jmp 0x2b35f
movq 0x14770(%rsp), %rdi
movq (%rdi), %rax
movq 0x150(%rax), %rax
callq *%rax
movl %eax, 0xb8(%rsp)
jmp 0x2b44b
movl 0xb8(%rsp), %eax
cmpl $0x0, %eax
jne 0x2b472
movl $0x0, 0x14ba4(%rsp)
movl $0x1, 0xae18(%rsp)
jmp 0x2b639
movq 0x14770(%rsp), %rdi
callq 0x30720
movq %rax, 0xb0(%rsp)
jmp 0x2b489
movq 0xb0(%rsp), %rsi
leaq 0x6570(%rsp), %rdi
callq 0x1317f0
jmp 0x2b4a0
movl 0x22a8f6(%rip), %edx    # 0x255d9c
movl 0x22a8f4(%rip), %ecx    # 0x255da0
leaq 0x65d8(%rsp), %rdi
leaq 0x6570(%rsp), %rsi
callq 0x4d2a0
jmp 0x2b4c3
leaq 0x64a0(%rsp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x117390
jmp 0x2b4d6
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b410f(%rip), %rsi    # 0x1df5fc
xorl %eax, %eax
leaq 0x54a0(%rsp), %rdi
movq %rdi, 0xa0(%rsp)
callq 0x24160
movq 0xa0(%rsp), %rcx
movq %rsp, %rax
movq %rax, 0xa8(%rsp)
movq %rcx, 0x40(%rax)
leaq 0x22df76(%rip), %rcx    # 0x259498
movq %rcx, 0x38(%rax)
leaq 0x22dfcb(%rip), %rcx    # 0x2594f8
movq %rcx, 0x30(%rax)
leaq 0x22de28(%rip), %rcx    # 0x259360
movq %rcx, 0x28(%rax)
leaq 0x64a0(%rsp), %rcx
movq %rcx, 0x20(%rax)
leaq 0x65d8(%rsp), %rcx
movq %rcx, 0x18(%rax)
leaq 0x76c0(%rsp), %rcx
movq %rcx, 0x10(%rax)
leaq 0x7790(%rsp), %rcx
movq %rcx, 0x8(%rax)
leaq 0x7860(%rsp), %rcx
movq %rcx, (%rax)
leaq 0xae70(%rsp), %rdi
leaq 0x8ba0(%rsp), %rsi
leaq 0x8ad0(%rsp), %rdx
leaq 0x8a00(%rsp), %rcx
leaq 0x9c70(%rsp), %r8
leaq 0x7930(%rsp), %r9
callq 0x31250
jmp 0x2b5ae
cmpl $0x0, 0x22a80b(%rip)    # 0x255dc0
je 0x2b621
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b3f43(%rip), %rsi    # 0x1df511
xorl %eax, %eax
leaq 0x44a0(%rsp), %rdi
movq %rdi, 0x98(%rsp)
callq 0x24160
movq 0x98(%rsp), %rsi
leaq 0x64a0(%rsp), %rdi
callq 0x128850
jmp 0x2b5fc
jmp 0x2b621
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xae20(%rsp)
movl %eax, 0xae1c(%rsp)
leaq 0x64a0(%rsp), %rdi
callq 0x118840
jmp 0x2b659
leaq 0x64a0(%rsp), %rdi
callq 0x118840
movl $0x0, 0xae18(%rsp)
leaq 0x65d8(%rsp), %rdi
callq 0x137570
movl 0xae18(%rsp), %eax
testl %eax, %eax
jne 0x2ba69
jmp 0x2b657
jmp 0x2b66b
leaq 0x65d8(%rsp), %rdi
callq 0x137570
jmp 0x2bb08
cmpl $0x0, 0x22a71a(%rip)    # 0x255d8c
je 0x2b6c3
leaq 0xaf40(%rsp), %rdi
callq 0x13ff40
movsd %xmm0, 0x90(%rsp)
jmp 0x2b68c
movsd 0x90(%rsp), %xmm0
leaq 0x1b3f77(%rip), %rdi    # 0x1df613
movb $0x1, %al
callq 0x24090
jmp 0x2b6a5
movq 0x2238e4(%rip), %rax    # 0x24ef90
movq (%rax), %rdi
callq 0x24c10
jmp 0x2b6b6
leaq 0xaf40(%rsp), %rdi
callq 0x30490
cmpl $0x0, 0x14b94(%rsp)
je 0x2ba0c
leaq 0x22a558(%rip), %rdi    # 0x255c30
callq 0x30660
cmpl $0x0, %eax
jle 0x2ba0c
leaq 0x43d0(%rsp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x117390
jmp 0x2b6f9
leaq 0x4300(%rsp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x117390
jmp 0x2b70c
leaq 0x4230(%rsp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x117390
jmp 0x2b71f
leaq 0x4160(%rsp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x117390
jmp 0x2b732
movq 0x14770(%rsp), %rdi
leaq 0x22a4ef(%rip), %rcx    # 0x255c30
movq %rsp, %rax
movq %rax, 0x88(%rsp)
movq %rcx, 0x58(%rax)
leaq 0x22dd41(%rip), %rcx    # 0x259498
movq %rcx, 0x50(%rax)
leaq 0x22dd96(%rip), %rcx    # 0x2594f8
movq %rcx, 0x48(%rax)
leaq 0x22dbf3(%rip), %rcx    # 0x259360
movq %rcx, 0x40(%rax)
leaq 0x4160(%rsp), %rcx
movq %rcx, 0x38(%rax)
leaq 0x4230(%rsp), %rcx
movq %rcx, 0x30(%rax)
leaq 0x4300(%rsp), %rcx
movq %rcx, 0x28(%rax)
leaq 0x43d0(%rsp), %rcx
movq %rcx, 0x20(%rax)
leaq 0x76c0(%rsp), %rcx
movq %rcx, 0x18(%rax)
leaq 0x7790(%rsp), %rcx
movq %rcx, 0x10(%rax)
leaq 0x7860(%rsp), %rcx
movq %rcx, 0x8(%rax)
leaq 0x7930(%rsp), %rcx
movq %rcx, (%rax)
leaq 0xae70(%rsp), %rsi
leaq 0x8ba0(%rsp), %rdx
leaq 0x8ad0(%rsp), %rcx
leaq 0x8a00(%rsp), %r8
leaq 0x9c70(%rsp), %r9
movsd 0x1b3848(%rip), %xmm0   # 0x1df048
callq 0x2bd50
jmp 0x2b807
cmpl $0x0, 0x22a5b6(%rip)    # 0x255dc4
je 0x2b8cc
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b3cfd(%rip), %rsi    # 0x1df528
xorl %eax, %eax
leaq 0x3160(%rsp), %rdi
movq %rdi, 0x80(%rsp)
callq 0x24160
movq 0x80(%rsp), %rsi
leaq 0x43d0(%rsp), %rdi
callq 0x128850
jmp 0x2b859
jmp 0x2b8cc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xae20(%rsp)
movl %eax, 0xae1c(%rsp)
jmp 0x2b9fa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xae20(%rsp)
movl %eax, 0xae1c(%rsp)
jmp 0x2b9ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xae20(%rsp)
movl %eax, 0xae1c(%rsp)
jmp 0x2b9e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xae20(%rsp)
movl %eax, 0xae1c(%rsp)
leaq 0x4160(%rsp), %rdi
callq 0x118840
jmp 0x2b9e0
cmpl $0x0, 0x22a4f5(%rip)    # 0x255dc8
je 0x2b916
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b3c4b(%rip), %rsi    # 0x1df537
xorl %eax, %eax
leaq 0x2160(%rsp), %rdi
movq %rdi, 0x78(%rsp)
callq 0x24160
movq 0x78(%rsp), %rsi
leaq 0x4300(%rsp), %rdi
callq 0x128850
jmp 0x2b914
jmp 0x2b916
cmpl $0x0, 0x22a4af(%rip)    # 0x255dcc
je 0x2b960
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b3c14(%rip), %rsi    # 0x1df54a
xorl %eax, %eax
leaq 0x1160(%rsp), %rdi
movq %rdi, 0x70(%rsp)
callq 0x24160
movq 0x70(%rsp), %rsi
leaq 0x4230(%rsp), %rdi
callq 0x128850
jmp 0x2b95e
jmp 0x2b960
cmpl $0x0, 0x22a469(%rip)    # 0x255dd0
je 0x2b9aa
movq 0x14b98(%rsp), %rdx
movq 0x13f60(%rsp), %rcx
leaq 0x1b3bdc(%rip), %rsi    # 0x1df55c
xorl %eax, %eax
leaq 0x160(%rsp), %rdi
movq %rdi, 0x68(%rsp)
callq 0x24160
movq 0x68(%rsp), %rsi
leaq 0x4160(%rsp), %rdi
callq 0x128850
jmp 0x2b9a8
jmp 0x2b9aa
leaq 0x4160(%rsp), %rdi
callq 0x118840
leaq 0x4230(%rsp), %rdi
callq 0x118840
leaq 0x4300(%rsp), %rdi
callq 0x118840
leaq 0x43d0(%rsp), %rdi
callq 0x118840
jmp 0x2ba0c
leaq 0x4230(%rsp), %rdi
callq 0x118840
leaq 0x4300(%rsp), %rdi
callq 0x118840
leaq 0x43d0(%rsp), %rdi
callq 0x118840
jmp 0x2bb08
cmpl $0x0, 0x22a379(%rip)    # 0x255d8c
je 0x2ba5e
leaq 0xaf40(%rsp), %rdi
callq 0x13ff40
movsd %xmm0, 0x60(%rsp)
jmp 0x2ba2a
movsd 0x60(%rsp), %xmm0
leaq 0x1b3be6(%rip), %rdi    # 0x1df61d
movb $0x1, %al
callq 0x24090
jmp 0x2ba40
movq 0x223549(%rip), %rax    # 0x24ef90
movq (%rax), %rdi
callq 0x24c10
jmp 0x2ba51
leaq 0xaf40(%rsp), %rdi
callq 0x30490
movl $0x0, 0xae18(%rsp)
leaq 0x76c0(%rsp), %rdi
callq 0x118840
leaq 0x7790(%rsp), %rdi
callq 0x118840
leaq 0x7860(%rsp), %rdi
callq 0x118840
leaq 0x7930(%rsp), %rdi
callq 0x118840
leaq 0x8a00(%rsp), %rdi
callq 0x118840
leaq 0x8ad0(%rsp), %rdi
callq 0x118840
leaq 0x8ba0(%rsp), %rdi
callq 0x118840
leaq 0x9c70(%rsp), %rdi
callq 0x118840
leaq 0xae70(%rsp), %rdi
callq 0x118840
movl 0xae18(%rsp), %eax
testl %eax, %eax
je 0x2baf0
jmp 0x2baeb
jmp 0x2bbef
jmp 0x2baf2
movl 0x1477c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x1477c(%rsp)
jmp 0x2a31d
leaq 0x76c0(%rsp), %rdi
callq 0x118840
leaq 0x7790(%rsp), %rdi
callq 0x118840
leaq 0x7860(%rsp), %rdi
callq 0x118840
leaq 0x7930(%rsp), %rdi
callq 0x118840
leaq 0x8a00(%rsp), %rdi
callq 0x118840
leaq 0x8ad0(%rsp), %rdi
callq 0x118840
leaq 0x8ba0(%rsp), %rdi
callq 0x118840
leaq 0x9c70(%rsp), %rdi
callq 0x118840
leaq 0xae70(%rsp), %rdi
callq 0x118840
jmp 0x2bbfe
cmpl $0x0, 0x22a202(%rip)    # 0x255d88
je 0x2bbe4
movq 0x14b98(%rsp), %rsi
leaq 0x1b3a90(%rip), %rdi    # 0x1df627
movb $0x0, %al
callq 0x24090
leaq 0x14b80(%rsp), %rdi
callq 0x13ff40
leaq 0x1b382b(%rip), %rdi    # 0x1df3dd
movb $0x1, %al
callq 0x24090
leaq 0x229fc8(%rip), %rdi    # 0x255b88
callq 0x304b0
movl %eax, %esi
leaq 0x1b3826(%rip), %rdi    # 0x1df3f4
movb $0x0, %al
callq 0x24090
movq 0x2233b4(%rip), %rax    # 0x24ef90
movq (%rax), %rdi
callq 0x24c10
movl $0x1, 0x14ba4(%rsp)
movl 0x14ba4(%rsp), %eax
addq $0x14ba8, %rsp          # imm = 0x14BA8
retq
movq 0xae20(%rsp), %rdi
callq 0x25290
nopl (%rax,%rax)