// File: /workspace/github_c_makefile_star2_O3/PoulinV[P]AxiCLASS/build/../external/heating/noninjection.c
// Function: noninjection_init
int noninjection_init(struct precision* ppr,
                      struct background* pba,
                      struct thermodynamics* pth,
                      struct perturbations* ppt,
                      struct primordial* ppm,
                      struct noninjection* pni){

  /** Summary: */

  /** - Define local variables */
  int index_k,index_z;
  int last_index_back, last_index_thermo, last_index_coarse = 0;
  double *pvecback, *pvecthermo;
  double R, dkappa;
  double dEdt;
  double z_wkb;
  double h,a,b;
  double temp_injection;
  double z_coarse;

  /* z-table */
  pni->z_size = pth->tt_size;
  class_alloc(pni->z_table,
              pni->z_size*sizeof(double),
              pni->error_message);
  memcpy(pni->z_table,
         pth->z_table,
         pni->z_size*sizeof(double));
  pni->last_index_z = 0;

  /* Photon non-injected table */
  class_alloc(pni->photon_dep_table,
              pni->z_size*sizeof(double),
              pni->error_message);
  /* Initialize to zero */
  for(index_z = 0; index_z < pni->z_size; ++index_z){
    pni->photon_dep_table[index_z] = 0.;
  }

  /** - Allocate new storage space that is a bit coarser in z as to reduce computational costs */
  pni->logz_max = log(1.+pni->z_table[pni->z_size-1]);
  pni->z_size_coarse = ppr->noninjection_Nz_log; /* This table is only going to be filled after the initial run anyway */
  class_alloc(pni->z_table_coarse,
              pni->z_size_coarse*sizeof(double),
              pni->error_message);
  for(index_z=0;index_z<pni->z_size_coarse-1;++index_z){
    pni->z_table_coarse[index_z] = exp(index_z*pni->logz_max/(pni->z_size_coarse-1))-1.;
  }
  pni->z_table_coarse[pni->z_size_coarse-1] = pni->z_table[pni->z_size-1];

  class_alloc(pni->noninjection_table,
              pni->z_size_coarse*sizeof(double),
              pni->error_message);
  class_alloc(pni->ddnoninjection_table,
              pni->z_size_coarse*sizeof(double),
              pni->error_message);

  /** - Allocate qunatities from primordial structure */
  pni->k_max = ppr->k_max_acc_diss;
  pni->k_min = ppr->k_min_acc_diss;
  pni->k_size = ppr->noninjection_Nk_acc_diss;
  class_alloc(pni->k,
              pni->k_size*sizeof(double),
              pni->error_message);
  class_alloc(pni->k_weights,
              pni->k_size*sizeof(double),
              pni->error_message);
  class_alloc(pni->pk_primordial_k,
              pni->k_size*sizeof(double),
              pni->error_message);

  /** - Import primordial spectrum */
  for (index_k=0; index_k<pni->k_size; index_k++) {
    pni->k[index_k] = exp(log(pni->k_min)+(log(pni->k_max)-log(pni->k_min))/(pni->k_size)*index_k);

    class_call(primordial_spectrum_at_k(ppm,
                                        ppt->index_md_scalars,
                                        linear,
                                        pni->k[index_k],
                                        &pni->pk_primordial_k[index_k]),
               ppm->error_message,
               pni->error_message);
  }

  /** - Prepare wavenumber integration */
  class_call(array_trapezoidal_weights(pni->k,
                                       pni->k_size,
                                       pni->k_weights,
                                       pni->error_message),
             pni->error_message,
             pni->error_message);

  class_alloc(pni->integrand_approx,
              pni->k_size*sizeof(double),
              pni->error_message);

  /** - Allocate backgorund and thermodynamcis vectors */
  last_index_back = 0;
  last_index_thermo = 0;
  class_alloc(pvecback,
              pba->bg_size*sizeof(double),
              pni->error_message);
  class_alloc(pvecthermo,
              pth->tt_size*sizeof(double),
              pni->error_message);

  /** - Calculate WKB approximation ampltidue factor f_nu at early times */
  z_wkb = ppr->z_wkb_acc_diss;
  class_call(background_at_z(pba,
                             z_wkb,
                             long_info,
                             inter_normal,
                             &last_index_back,
                             pvecback),
             pba->error_message,
             pni->error_message);

  pni->f_nu_wkb = (1.-pvecback[pba->index_bg_rho_g]/(pvecback[pba->index_bg_Omega_r]*pvecback[pba->index_bg_rho_crit]));

  /** - Import quantities from other structures */
  /* Background structure */
  pni->H0 = pba->H0*_c_/_Mpc_over_m_;                                                               // [1/s]
  pni->T_g0 = pba->T_cmb;                                                                           // [K]
  pni->Omega0_b = pba->Omega0_b;                                                                    // [-]
  pni->Omega0_cdm = pba->Omega0_cdm;                                                                // [-]
  pni->rho0_cdm = pba->Omega0_cdm*pow(pni->H0,2)*3/8./_PI_/_G_*_c_*_c_;                             // [J/m^3]

  /* Thermodynamics structure */
  pni->fHe = pth->fHe;                                                                              // [-]
  pni->N_e0 = pth->n_e;                                                                             // [1/m^3]

  /** - Loop over z and calculate the heating at each point */
  dEdt = 0.;
  for(index_z=0; index_z<pni->z_size_coarse; ++index_z){

    z_coarse = pni->z_table_coarse[index_z];
    pni->noninjection_table[index_z] = 0.;

    /* Import quantities from background and thermodynamics structure */
    class_call(background_at_z(pba,
                               z_coarse,
                               long_info,
                               inter_closeby,
                               &last_index_back,
                               pvecback),
               pba->error_message,
               pni->error_message);

    pni->H = pvecback[pba->index_bg_H]*_c_/_Mpc_over_m_;                                            // [1/s]
    pni->a = pvecback[pba->index_bg_a];                                                             // [-]
    pni->rho_g = pvecback[pba->index_bg_rho_g]*_Jm3_over_Mpc2_;                                     // [J/m^3]
    R = (3./4.)*pvecback[pba->index_bg_rho_b]/pvecback[pba->index_bg_rho_g];                        // [-]
    pni->nH = pni->N_e0*pow(pni->a,-3);

    class_call(thermodynamics_at_z(pba,
                                   pth,
                                   z_coarse,
                                   inter_normal,
                                   &last_index_thermo,
                                   pvecback,
                                   pvecthermo),
               pth->error_message,
               pni->error_message);

    dkappa = pvecthermo[pth->index_th_dkappa];                                                      // [1/Mpc]
    pni->dkD_dz = 1./(pvecback[pba->index_bg_H]*dkappa)*(16./15.+pow(R,2.)/(1.+R))/(6.*(1.0+R));    // [Mpc^2]
    pni->kD = 2.*_PI_/pvecthermo[pth->index_th_r_d];                                                // [1/Mpc]
    pni->T_b = pvecthermo[pth->index_th_Tb];                                                        // [K]
    pni->T_g = pni->T_g0/pni->a;                                                                    // [K]
    pni->x_e = pvecthermo[pth->index_th_xe];                                                        // [-]
    pni->heat_capacity = (3./2.)*_k_B_*pni->nH*(1.+pni->fHe+pni->x_e);                              // [J/(K m^3)]

    /* Include all non-injected energy that does not need to be deposited (i.e. adiabatic terms as below) */
    /* First order cooling of photons due to adiabatic interaction with baryons */
    class_call(noninjection_rate_adiabatic_cooling(pni,
                                                   z_coarse,
                                                   &dEdt),
               pni->error_message,
               pni->error_message);
    pni->noninjection_table[index_z]+=dEdt;

    /* Second order acoustic dissipation of BAO */
    class_call(noninjection_rate_acoustic_diss(pni,
                                               z_coarse,
                                               &dEdt),
               pni->error_message,
               pni->error_message);
    pni->noninjection_table[index_z]+=dEdt;
  }

  /** - Spline coarse z table in view of interpolation */
  class_call(array_spline_table_columns2(pni->z_table_coarse,
                                         pni->z_size_coarse,
                                         pni->noninjection_table,
                                         1,
                                         pni->ddnoninjection_table,
                                         _SPLINE_EST_DERIV_,
                                         pni->error_message),
             pni->error_message,
             pni->error_message);

  /** - Evaluate the spline coarse table at the fine-grained z samples */
  for(index_z=0;index_z<pni->z_size;++index_z){
    class_call(array_spline_hunt(pni->z_table_coarse,
                                 pni->z_size_coarse,
                                 pni->z_table[index_z],
                                 &last_index_coarse,
                                 &h,&a,&b,
                                 pni->error_message),
               pni->error_message,
               pni->error_message);

    temp_injection = array_spline_eval(pni->noninjection_table,
                                       pni->ddnoninjection_table,
                                       last_index_coarse,
                                       last_index_coarse+1,
                                       h,a,b);
    pni->photon_dep_table[index_z]+=temp_injection;
  }

  /** - Free temporary variables */
  free(pvecback);
  free(pvecthermo);

  return _SUCCESS_;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x888, %rsp            # imm = 0x888
movq %r9, %rbx
movq %r8, 0x8(%rsp)
movq %rcx, 0x20(%rsp)
movq %rdx, %r12
movq %rsi, 0x60(%rsp)
movq %rdi, %rbp
movl $0x0, 0x18(%rsp)
movslq 0xf08(%rdx), %r14
movl %r14d, 0x60(%r9)
leaq (,%r14,8), %r15
movq %r15, %rdi
callq 0x8460
movq %rax, 0x68(%rbx)
testq %rax, %rax
je 0xd2977
movq %rax, %r13
movq 0xf10(%r12), %rsi
movq %rax, %rdi
movq %r15, %rdx
callq 0x82d0
movl $0x0, 0x70(%rbx)
movq %r15, %rdi
callq 0x8460
movq %rax, 0x108(%rbx)
testq %rax, %rax
je 0xd29c0
testl %r14d, %r14d
jle 0xd2788
movq %rax, %rdi
xorl %esi, %esi
movq %r15, %rdx
callq 0x8200
movsd -0x8(%r13,%r14,8), %xmm0
addsd 0x1bac9(%rip), %xmm0    # 0xee260
callq 0x82c0
movsd %xmm0, 0x48(%rbx)
movl 0x1dc(%rbp), %r14d
movslq %r14d, %r13
movl %r13d, 0x40(%rbx)
leaq (,%r13,8), %r15
movq %r15, %rdi
callq 0x8460
movq %rax, 0x38(%rbx)
testq %rax, %rax
je 0xd2a09
leaq -0x1(%r13), %rcx
cmpl $0x2, %r13d
jl 0xd281f
xorl %r13d, %r13d
xorps %xmm0, %xmm0
cvtsi2sd %r13d, %xmm0
mulsd 0x48(%rbx), %xmm0
xorps %xmm1, %xmm1
cvtsi2sd %ecx, %xmm1
divsd %xmm1, %xmm0
callq 0x8670
addsd 0x1bfea(%rip), %xmm0    # 0xee7e8
movq 0x38(%rbx), %rax
movsd %xmm0, (%rax,%r13,8)
incq %r13
movl 0x40(%rbx), %r14d
movslq %r14d, %r15
leaq -0x1(%r15), %rcx
cmpq %rcx, %r13
jl 0xd27d9
shlq $0x3, %r15
movq 0x68(%rbx), %rdx
movslq 0x60(%rbx), %rsi
movsd -0x8(%rdx,%rsi,8), %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq %r15, %rdi
callq 0x8460
movq %rax, 0x50(%rbx)
testq %rax, %rax
je 0xd2a52
movq %r15, %rdi
callq 0x8460
movq %rax, 0x58(%rbx)
testq %rax, %rax
je 0xd2a98
movupd 0x1e8(%rbp), %xmm0
movupd %xmm0, (%rbx)
movslq 0x1e0(%rbp), %r14
movl %r14d, 0x10(%rbx)
movq %r14, %r13
shlq $0x3, %r13
movq %r13, %rdi
callq 0x8460
movq %rax, 0x18(%rbx)
testq %rax, %rax
je 0xd2aff
movq %rax, %r15
movq %r13, %rdi
callq 0x8460
movq %rax, 0x20(%rbx)
testq %rax, %rax
je 0xd2b49
movq %rax, 0x10(%rsp)
movq %r13, %rdi
callq 0x8460
movq %rax, 0x28(%rbx)
testq %rax, %rax
je 0xd2b93
testl %r14d, %r14d
jle 0xd2bdd
xorl %r15d, %r15d
xorl %r13d, %r13d
movsd (%rbx), %xmm0
callq 0x82c0
movsd %xmm0, 0x10(%rsp)
movsd 0x8(%rbx), %xmm0
callq 0x82c0
movsd %xmm0, 0x40(%rsp)
movsd (%rbx), %xmm0
callq 0x82c0
movsd 0x40(%rsp), %xmm1
subsd %xmm0, %xmm1
xorps %xmm0, %xmm0
cvtsi2sdl 0x10(%rbx), %xmm0
divsd %xmm0, %xmm1
xorps %xmm0, %xmm0
cvtsi2sd %r13d, %xmm0
mulsd %xmm1, %xmm0
addsd 0x10(%rsp), %xmm0
callq 0x8670
movq 0x18(%rbx), %rax
movsd %xmm0, (%rax,%r15)
movq 0x20(%rsp), %rax
movl 0x848(%rax), %esi
movq 0x28(%rbx), %rcx
addq %r15, %rcx
movq 0x8(%rsp), %rdi
xorl %edx, %edx
callq 0x943b4
cmpl $0x1, %eax
je 0xd2d1e
incq %r13
movslq 0x10(%rbx), %r14
addq $0x8, %r15
cmpq %r14, %r13
jl 0xd28d0
movq 0x18(%rbx), %r15
movq 0x20(%rbx), %rdx
jmp 0xd2be2
shll $0x3, %r14d
leaq 0x1b682(%rip), %rsi     # 0xee004
leaq 0x57187(%rip), %rdx     # 0x129b10
leaq 0x80(%rsp), %r15
movq %r15, %rdi
movl %r14d, %ecx
xorl %eax, %eax
callq 0x30af0
addq $0x110, %rbx            # imm = 0x110
leaq 0x1b688(%rip), %rsi     # 0xee034
leaq 0x5716a(%rip), %rdx     # 0x129b1d
movq %rbx, %rdi
movl $0x2f, %ecx
jmp 0xd2adc
shll $0x3, %r14d
leaq 0x1b639(%rip), %rsi     # 0xee004
leaq 0x5715d(%rip), %rdx     # 0x129b2f
leaq 0x80(%rsp), %r15
movq %r15, %rdi
movl %r14d, %ecx
xorl %eax, %eax
callq 0x30af0
addq $0x110, %rbx            # imm = 0x110
leaq 0x1b63f(%rip), %rsi     # 0xee034
leaq 0x57121(%rip), %rdx     # 0x129b1d
movq %rbx, %rdi
movl $0x38, %ecx
jmp 0xd2adc
shll $0x3, %r14d
leaq 0x1b5f0(%rip), %rsi     # 0xee004
leaq 0x5712a(%rip), %rdx     # 0x129b45
leaq 0x80(%rsp), %r15
movq %r15, %rdi
movl %r14d, %ecx
xorl %eax, %eax
callq 0x30af0
addq $0x110, %rbx            # imm = 0x110
leaq 0x1b5f6(%rip), %rsi     # 0xee034
leaq 0x570d8(%rip), %rdx     # 0x129b1d
movq %rbx, %rdi
movl $0x43, %ecx
jmp 0xd2adc
shll $0x3, %r14d
leaq 0x1b5a7(%rip), %rsi     # 0xee004
leaq 0x570f5(%rip), %rdx     # 0x129b59
leaq 0x80(%rsp), %r15
movq %r15, %rdi
movl %r14d, %ecx
xorl %eax, %eax
callq 0x30af0
addq $0x110, %rbx            # imm = 0x110
leaq 0x1b5ad(%rip), %rsi     # 0xee034
leaq 0x5708f(%rip), %rdx     # 0x129b1d
movq %rbx, %rdi
movl $0x4b, %ecx
jmp 0xd2adc
shll $0x3, %r14d
leaq 0x1b561(%rip), %rsi     # 0xee004
leaq 0x570c7(%rip), %rdx     # 0x129b71
leaq 0x80(%rsp), %r15
movq %r15, %rdi
movl %r14d, %ecx
xorl %eax, %eax
callq 0x30af0
addq $0x110, %rbx            # imm = 0x110
leaq 0x1b567(%rip), %rsi     # 0xee034
leaq 0x57049(%rip), %rdx     # 0x129b1d
movq %rbx, %rdi
movl $0x4e, %ecx
movq %r15, %r8
xorl %eax, %eax
callq 0x30af0
movl $0x1, %ebp
movl %ebp, %eax
addq $0x888, %rsp            # imm = 0x888
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leal (,%r14,8), %ecx
leaq 0x1b4f6(%rip), %rsi     # 0xee004
leaq 0x57076(%rip), %rdx     # 0x129b8b
leaq 0x80(%rsp), %r14
movq %r14, %rdi
xorl %eax, %eax
callq 0x30af0
addq $0x110, %rbx            # imm = 0x110
leaq 0x1b4ff(%rip), %rsi     # 0xee034
leaq 0x56fe1(%rip), %rdx     # 0x129b1d
movq %rbx, %rdi
movl $0x56, %ecx
jmp 0xd2d67
leal (,%r14,8), %ecx
leaq 0x1b4ac(%rip), %rsi     # 0xee004
leaq 0x57033(%rip), %rdx     # 0x129b92
leaq 0x80(%rsp), %r14
movq %r14, %rdi
xorl %eax, %eax
callq 0x30af0
addq $0x110, %rbx            # imm = 0x110
leaq 0x1b4b5(%rip), %rsi     # 0xee034
leaq 0x56f97(%rip), %rdx     # 0x129b1d
movq %rbx, %rdi
movl $0x59, %ecx
jmp 0xd2d67
leal (,%r14,8), %ecx
leaq 0x1b462(%rip), %rsi     # 0xee004
leaq 0x56ff8(%rip), %rdx     # 0x129ba1
leaq 0x80(%rsp), %r14
movq %r14, %rdi
xorl %eax, %eax
callq 0x30af0
addq $0x110, %rbx            # imm = 0x110
leaq 0x1b46b(%rip), %rsi     # 0xee034
leaq 0x56f4d(%rip), %rdx     # 0x129b1d
movq %rbx, %rdi
movl $0x5c, %ecx
jmp 0xd2d67
movq 0x10(%rsp), %rdx
leaq 0x110(%rbx), %r13
movq %r15, %rdi
movl %r14d, %esi
movq %r13, %rcx
callq 0x1b43a
cmpl $0x1, %eax
jne 0xd2c3a
leaq 0x1b7ed(%rip), %rsi     # 0xee3f0
leaq 0x5701a(%rip), %rdx     # 0x129c24
leaq 0x80(%rsp), %rbx
movq %rbx, %rdi
movq %r13, %rcx
xorl %eax, %eax
callq 0x30af0
leaq 0x1b40e(%rip), %rsi     # 0xee034
leaq 0x56ef0(%rip), %rdx     # 0x129b1d
movq %r13, %rdi
movl $0x71, %ecx
jmp 0xd2e31
movslq 0x10(%rbx), %r14
leaq (,%r14,8), %rdi
callq 0x8460
movq %rax, 0x30(%rbx)
testq %rax, %rax
je 0xd2d6f
movq %r13, 0x8(%rsp)
xorl %eax, %eax
movl %eax, 0x1c(%rsp)
movl %eax, 0x2c(%rsp)
movq 0x60(%rsp), %r15
movslq 0x43c(%r15), %r14
leaq (,%r14,8), %rdi
callq 0x8460
testq %rax, %rax
je 0xd2db1
movq %rax, %r13
movslq 0xf08(%r12), %r14
leaq (,%r14,8), %rdi
callq 0x8460
testq %rax, %rax
je 0xd2df2
movq %rax, 0x30(%rsp)
movsd 0x1f8(%rbp), %xmm0
leaq 0x1c(%rsp), %rcx
movq %r15, %rdi
movl $0x2, %esi
xorl %edx, %edx
movq %r13, %r8
callq 0x5c3a8
cmpl $0x1, %eax
jne 0xd2e39
addq $0xd1c, %r15            # imm = 0xD1C
leaq 0x1b70b(%rip), %rsi     # 0xee3f0
leaq 0x56fa1(%rip), %rdx     # 0x129c8d
leaq 0x80(%rsp), %rbx
movq %rbx, %rdi
movq %r15, %rcx
xorl %eax, %eax
callq 0x30af0
leaq 0x1b32c(%rip), %rsi     # 0xee034
leaq 0x56e0e(%rip), %rdx     # 0x129b1d
movq 0x8(%rsp), %rdi
movl $0x8a, %ecx
jmp 0xd2e31
movq 0x8(%rsp), %rcx
addq $0x32a, %rcx            # imm = 0x32A
leaq 0x1b6bf(%rip), %rsi     # 0xee3f0
leaq 0x56e7e(%rip), %rdx     # 0x129bb6
leaq 0x80(%rsp), %r14
movq %r14, %rdi
xorl %eax, %eax
callq 0x30af0
addq $0x110, %rbx            # imm = 0x110
leaq 0x1b2dc(%rip), %rsi     # 0xee034
leaq 0x56dbe(%rip), %rdx     # 0x129b1d
movq %rbx, %rdi
movl $0x68, %ecx
movq %r14, %r8
jmp 0xd2adf
shll $0x3, %r14d
leaq 0x1b28a(%rip), %rsi     # 0xee004
leaq 0x56ef6(%rip), %rdx     # 0x129c77
leaq 0x80(%rsp), %rbx
movq %rbx, %rdi
movl %r14d, %ecx
xorl %eax, %eax
callq 0x30af0
leaq 0x1b297(%rip), %rsi     # 0xee034
leaq 0x56d79(%rip), %rdx     # 0x129b1d
movq %r13, %rdi
movl $0x75, %ecx
jmp 0xd2e31
shll $0x3, %r14d
leaq 0x1b248(%rip), %rsi     # 0xee004
leaq 0x424cf(%rip), %rdx     # 0x115292
leaq 0x80(%rsp), %rbx
movq %rbx, %rdi
movl %r14d, %ecx
xorl %eax, %eax
callq 0x30af0
leaq 0x1b255(%rip), %rsi     # 0xee034
leaq 0x56d37(%rip), %rdx     # 0x129b1d
movq 0x8(%rsp), %rdi
movl $0x7c, %ecx
jmp 0xd2e31
shll $0x3, %r14d
leaq 0x1b207(%rip), %rsi     # 0xee004
leaq 0x4249c(%rip), %rdx     # 0x1152a0
leaq 0x80(%rsp), %rbx
movq %rbx, %rdi
movl %r14d, %ecx
xorl %eax, %eax
callq 0x30af0
leaq 0x1b214(%rip), %rsi     # 0xee034
leaq 0x56cf6(%rip), %rdx     # 0x129b1d
movq 0x8(%rsp), %rdi
movl $0x7f, %ecx
movq %rbx, %r8
jmp 0xd2adf
movslq 0x38c(%r15), %rax
movsd (%r13,%rax,8), %xmm0
movslq 0x404(%r15), %rax
movsd (%r13,%rax,8), %xmm1
movslq 0x408(%r15), %rax
mulsd (%r13,%rax,8), %xmm1
divsd %xmm1, %xmm0
movsd 0x1b3f1(%rip), %xmm1    # 0xee260
subsd %xmm0, %xmm1
movsd %xmm1, 0x78(%rbx)
movsd 0x1fd70(%rip), %xmm2    # 0xf2bf0
movsd (%r15), %xmm0
mulsd %xmm2, %xmm0
divsd 0x1fc57(%rip), %xmm0    # 0xf2ae8
movsd %xmm0, 0x90(%rbx)
movups 0x18(%r15), %xmm1
movups %xmm1, 0x98(%rbx)
movsd 0x28(%r15), %xmm1
movsd %xmm1, 0xa8(%rbx)
mulsd %xmm0, %xmm0
mulsd %xmm1, %xmm0
mulsd 0x1c7bd(%rip), %xmm0    # 0xef680
mulsd 0x1fc25(%rip), %xmm0    # 0xf2af0
divsd 0x1e105(%rip), %xmm0    # 0xf0fd8
divsd 0x1fc1d(%rip), %xmm0    # 0xf2af8
mulsd %xmm2, %xmm0
mulsd %xmm2, %xmm0
movsd %xmm0, 0xb0(%rbx)
movupd 0x1000(%r12), %xmm0
movupd %xmm0, 0xb8(%rbx)
movl 0x40(%rbx), %esi
movq 0x50(%rbx), %rdx
testl %esi, %esi
jle 0xd317f
xorl %r14d, %r14d
movq 0x30(%rsp), %rbp
movq 0x38(%rbx), %rax
movsd (%rax,%r14,8), %xmm0
movq $0x0, (%rdx,%r14,8)
movq %r15, %rdi
movsd %xmm0, 0x20(%rsp)
movl $0x2, %esi
movl $0x1, %edx
leaq 0x1c(%rsp), %rcx
movq %r13, %r8
callq 0x5c3a8
cmpl $0x1, %eax
je 0xd32f9
movslq 0x384(%r15), %rax
movsd (%r13,%rax,8), %xmm0
mulsd 0x1fc8b(%rip), %xmm0    # 0xf2bf0
divsd 0x1fb7b(%rip), %xmm0    # 0xf2ae8
movsd %xmm0, 0xc8(%rbx)
movslq 0x380(%r15), %rax
movsd (%r13,%rax,8), %xmm0
movsd %xmm0, 0xd0(%rbx)
movslq 0x38c(%r15), %rax
movsd (%r13,%rax,8), %xmm1
movsd %xmm1, 0x58(%rsp)
mulsd 0x3a759(%rip), %xmm1    # 0x10d700
movsd %xmm1, 0xd8(%rbx)
movslq 0x390(%r15), %rax
movsd (%r13,%rax,8), %xmm1
movaps %xmm1, 0x40(%rsp)
movsd 0xc0(%rbx), %xmm1
movsd %xmm1, 0x10(%rsp)
movsd 0x1e4a8(%rip), %xmm1    # 0xf1480
callq 0x8620
mulsd 0x10(%rsp), %xmm0
movsd %xmm0, 0xe8(%rbx)
movq %r15, %rdi
movq %r12, %rsi
movsd 0x20(%rsp), %xmm0
xorl %edx, %edx
leaq 0x2c(%rsp), %rcx
movq %r13, %r8
movq %rbp, %r9
callq 0x662ac
cmpl $0x1, %eax
je 0xd3340
movapd 0x40(%rsp), %xmm3
mulsd 0x1fb38(%rip), %xmm3    # 0xf2b58
divsd 0x58(%rsp), %xmm3
movslq 0xe80(%r12), %rax
movsd (%rbp,%rax,8), %xmm0
movslq 0x384(%r15), %rax
mulsd (%r13,%rax,8), %xmm0
movapd %xmm3, %xmm1
mulsd %xmm3, %xmm1
shufpd $0x2, 0x56a9d(%rip), %xmm1 # xmm1 = xmm1[0],mem[1]
movsd 0x1b205(%rip), %xmm4    # 0xee260
addsd %xmm4, %xmm3
movapd %xmm3, %xmm2
unpcklpd %xmm0, %xmm2            # xmm2 = xmm2[0],xmm0[0]
divpd %xmm2, %xmm1
movapd %xmm1, %xmm0
addsd 0x3a6b1(%rip), %xmm0    # 0x10d728
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
mulsd %xmm0, %xmm1
shufpd $0x2, 0x56a78(%rip), %xmm1 # xmm1 = xmm1[0],mem[1]
mulsd 0x1c5e0(%rip), %xmm3    # 0xef670
movslq 0xf00(%r12), %rax
movhpd (%rbp,%rax,8), %xmm3    # xmm3 = xmm3[0],mem[0]
divpd %xmm3, %xmm1
movupd %xmm1, 0x80(%rbx)
movslq 0xee4(%r12), %rax
movsd (%rbp,%rax,8), %xmm0
movsd %xmm0, 0xf0(%rbx)
movsd 0x98(%rbx), %xmm0
divsd 0xd0(%rbx), %xmm0
movsd %xmm0, 0xf8(%rbx)
movslq 0xe7c(%r12), %rax
movsd (%rbp,%rax,8), %xmm1
movsd %xmm1, 0x100(%rbx)
movsd 0xe8(%rbx), %xmm2
mulsd 0x3a612(%rip), %xmm2    # 0x10d710
movsd 0xb8(%rbx), %xmm3
addsd %xmm4, %xmm3
addsd %xmm1, %xmm3
mulsd %xmm2, %xmm3
movsd %xmm3, 0xe0(%rbx)
xorpd 0x1b10e(%rip), %xmm3    # 0xee230
mulsd 0xc8(%rbx), %xmm3
mulsd %xmm0, %xmm3
movsd %xmm3, 0x38(%rsp)
movq 0x50(%rbx), %rax
addsd (%rax,%r14,8), %xmm3
movsd %xmm3, (%rax,%r14,8)
movq %rbx, %rdi
leaq 0x38(%rsp), %rsi
callq 0xd3434
testl %eax, %eax
jne 0xd3387
movsd 0x38(%rsp), %xmm0
movq 0x50(%rbx), %rdx
addsd (%rdx,%r14,8), %xmm0
movsd %xmm0, (%rdx,%r14,8)
incq %r14
movslq 0x40(%rbx), %rsi
cmpq %rsi, %r14
jl 0xd2f14
movq 0x38(%rbx), %rdi
movq 0x58(%rbx), %r8
movq 0x8(%rsp), %r14
movq %r14, (%rsp)
movl $0x1, %ebp
movl $0x1, %ecx
movl $0x1, %r9d
callq 0x160b8
cmpl $0x1, %eax
jne 0xd31f2
leaq 0x1b23f(%rip), %rsi     # 0xee3f0
leaq 0x56c11(%rip), %rdx     # 0x129dc9
leaq 0x80(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rcx
xorl %eax, %eax
callq 0x30af0
leaq 0x1ae60(%rip), %rsi     # 0xee034
leaq 0x56942(%rip), %rdx     # 0x129b1d
movq %r14, %rdi
movl $0xde, %ecx
movq %rbx, %r8
xorl %eax, %eax
callq 0x30af0
jmp 0xd2aeb
cmpl $0x0, 0x60(%rbx)
jle 0xd32e0
xorl %r15d, %r15d
leaq 0x78(%rsp), %r12
leaq 0x70(%rsp), %rbp
leaq 0x68(%rsp), %r14
movq 0x38(%rbx), %rdi
movl 0x40(%rbx), %esi
movq 0x68(%rbx), %rax
movsd (%rax,%r15,8), %xmm0
movq 0x8(%rsp), %rax
movq %rax, (%rsp)
leaq 0x18(%rsp), %rdx
movq %r12, %rcx
movq %rbp, %r8
movq %r14, %r9
callq 0x19e56
cmpl $0x1, %eax
je 0xd33ca
movsd 0x70(%rsp), %xmm1
movslq 0x18(%rsp), %rax
movsd 0x68(%rsp), %xmm2
movq 0x50(%rbx), %rcx
movq 0x58(%rbx), %rdx
movsd 0x8(%rcx,%rax,8), %xmm3
mulsd %xmm2, %xmm3
movsd (%rcx,%rax,8), %xmm0
mulsd %xmm1, %xmm0
addsd %xmm3, %xmm0
movapd %xmm2, %xmm3
mulsd %xmm2, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm2, %xmm3
movapd %xmm1, %xmm2
mulsd %xmm1, %xmm2
mulsd %xmm1, %xmm2
mulsd 0x8(%rdx,%rax,8), %xmm3
subsd %xmm1, %xmm2
mulsd (%rdx,%rax,8), %xmm2
addsd %xmm3, %xmm2
movsd 0x78(%rsp), %xmm1
mulsd %xmm1, %xmm2
mulsd %xmm1, %xmm2
divsd 0x1c3b7(%rip), %xmm2    # 0xef670
addsd %xmm0, %xmm2
movq 0x108(%rbx), %rax
addsd (%rax,%r15,8), %xmm2
movsd %xmm2, (%rax,%r15,8)
incq %r15
movslq 0x60(%rbx), %rax
cmpq %rax, %r15
jl 0xd320e
movq %r13, %rdi
callq 0x8410
movq 0x30(%rsp), %rdi
callq 0x8410
xorl %ebp, %ebp
jmp 0xd2aeb
addq $0xd1c, %r15            # imm = 0xD1C
leaq 0x1b0e9(%rip), %rsi     # 0xee3f0
leaq 0x569d0(%rip), %rdx     # 0x129cde
leaq 0x80(%rsp), %rbx
movq %rbx, %rdi
movq %r15, %rcx
xorl %eax, %eax
callq 0x30af0
leaq 0x1ad0a(%rip), %rsi     # 0xee034
leaq 0x567ec(%rip), %rdx     # 0x129b1d
movq 0x8(%rsp), %rdi
movl $0xa9, %ecx
jmp 0xd2e31
addq $0x1064, %r12           # imm = 0x1064
leaq 0x1b0a2(%rip), %rsi     # 0xee3f0
leaq 0x569de(%rip), %rdx     # 0x129d33
leaq 0x80(%rsp), %rbx
movq %rbx, %rdi
movq %r12, %rcx
xorl %eax, %eax
callq 0x30af0
leaq 0x1acc3(%rip), %rsi     # 0xee034
leaq 0x567a5(%rip), %rdx     # 0x129b1d
movq 0x8(%rsp), %rdi
movl $0xb9, %ecx
jmp 0xd2e31
leaq 0x1b062(%rip), %rsi     # 0xee3f0
leaq 0x569fe(%rip), %rdx     # 0x129d93
leaq 0x80(%rsp), %rbx
movq %rbx, %rdi
movq 0x8(%rsp), %r14
movq %r14, %rcx
xorl %eax, %eax
callq 0x30af0
leaq 0x1ac7e(%rip), %rsi     # 0xee034
leaq 0x56760(%rip), %rdx     # 0x129b1d
movq %r14, %rdi
movl $0xd1, %ecx
jmp 0xd2e31
leaq 0x1b01f(%rip), %rsi     # 0xee3f0
leaq 0x56a84(%rip), %rdx     # 0x129e5c
leaq 0x80(%rsp), %rbx
movq %rbx, %rdi
movq 0x8(%rsp), %r14
movq %r14, %rcx
xorl %eax, %eax
callq 0x30af0
leaq 0x1ac3b(%rip), %rsi     # 0xee034
leaq 0x5671d(%rip), %rdx     # 0x129b1d
movq %r14, %rdi
movl $0xe9, %ecx
jmp 0xd2e31