// File: /workspace/github_c_makefile_star2_O2/PoulinV[P]AxiCLASS/build/../source/transfer.c
// Function: transfer_init
int transfer_init(
                  struct precision * ppr,
                  struct background * pba,
                  struct thermodynamics * pth,
                  struct perturbations * ppt,
                  struct fourier * pfo,
                  struct transfer * ptr
                  ) {

  /** Summary: */

  /** - define local variables */

  /* running index for wavenumbers */
  int index_q;

  /* conformal time today */
  double tau0;
  /* conformal time at recombination */
  double tau_rec;
  /* order of magnitude of the oscillation period of transfer functions */
  double q_period;

  /* maximum number of sampling times for transfer sources */
  int tau_size_max;

  /* array of sources S(k,tau), just taken from perturbation module,
     or transformed if non-linear corrections are needed
     sources[index_md][index_ic * ppt->tp_size[index_md] + index_tp][index_tau * ppt->k_size[index_md] + index_k]
  */
  double *** sources;

  /* array of source derivatives S''(k,tau)
     (second derivative with respect to k, not tau!),
     used to interpolate sources at the right values of k,
     sources_spline[index_md][index_ic * ppt->tp_size[index_md] + index_tp][index_tau * ppt->k_size[index_md] + index_k]
  */
  double *** sources_spline;


  /** - array with the correspondence between the index of sources in
      the perturbation module and in the transfer module,
      tp_of_tt[index_md][index_tt]
  */
  int ** tp_of_tt;

  /* structure containing the flat spherical bessel functions */

  HyperInterpStruct BIS;
  double xmax;


  /** - check whether any spectrum in harmonic space (i.e., any \f$C_l\f$'s) is actually requested */

  if (ppt->has_cls == _FALSE_) {
    ptr->has_cls = _FALSE_;
    if (ptr->transfer_verbose > 0)
      printf("No harmonic space transfer functions to compute. Transfer module skipped.\n");
    return _SUCCESS_;
  }
  else
    ptr->has_cls = _TRUE_;

  if (ptr->transfer_verbose > 0)
    fprintf(stdout,"Computing transfers\n");

  /** - check whether we will need the full Limber scheme */

  if ((ppt->has_cl_cmb_lensing_potential == _TRUE_) && (ppt->want_lcmb_full_limber == _TRUE_)) {
    ptr->do_lcmb_full_limber = _TRUE_;
  }
  else {
    ptr->do_lcmb_full_limber = _FALSE_;
  }

  /** - get number of modes (scalars, tensors...) */

  ptr->md_size = ppt->md_size;

  /** - get conformal age / recombination time
      from background / thermodynamics structures
      (only place where these structures are used in this module) */

  tau0 = pba->conformal_age;
  tau_rec = pth->tau_rec;

  /** - correspondence between k and l depend on angular diameter
      distance, i.e. on curvature. */

  ptr->angular_rescaling = pth->angular_rescaling;

  /** - order of magnitude of the oscillation period of transfer functions */

  q_period = 2.*_PI_/(tau0-tau_rec)*ptr->angular_rescaling;

  /** - initialize all indices in the transfer structure and
      allocate all its arrays using transfer_indices() */

  class_call(transfer_indices(ppr,ppt,ptr,q_period,pba->K,pba->sgnK),
             ptr->error_message,
             ptr->error_message);

  /** - copy sources to a local array sources (in fact, only the pointers are copied, not the data), and eventually apply non-linear corrections to the sources */

  class_alloc(sources,
              ptr->md_size*sizeof(double**),
              ptr->error_message);

  class_call(transfer_perturbation_copy_sources_and_nl_corrections(ppt,pfo,ptr,sources),
             ptr->error_message,
             ptr->error_message);

  /** - spline all the sources passed by the perturbation module with respect to k (in order to interpolate later at a given value of k) */

  class_alloc(sources_spline,
              ptr->md_size*sizeof(double**),
              ptr->error_message);

  class_call(transfer_perturbation_source_spline(ppt,ptr,sources,sources_spline),
             ptr->error_message,
             ptr->error_message);

  /** - allocate and fill array describing the correspondence between perturbation types and transfer types */

  class_alloc(tp_of_tt,
              ptr->md_size*sizeof(int*),
              ptr->error_message);

  class_call(transfer_get_source_correspondence(ppt,ptr,tp_of_tt),
             ptr->error_message,
             ptr->error_message);

  /** - evaluate maximum number of sampled times in the transfer
      sources: needs to be known here, in order to allocate a large
      enough workspace */

  class_call(transfer_source_tau_size_max(ppr,pba,ppt,ptr,tau_rec,tau0,&tau_size_max),
             ptr->error_message,
             ptr->error_message);

  /** - compute flat spherical bessel functions */

  xmax = ptr->q[ptr->q_size-1]*tau0;
  // If the use the flat approximation for K<0, we need to increase xmax artificially
  if (pba->sgnK == -1 && ptr->index_q_flat_approximation < ptr->q_size)
    xmax *= sqrt(pba->sgnK*pba->K)/ptr->q[ptr->q_size-1]*(ptr->l[ptr->l_size_max-1]+1)/asinh((ptr->l[ptr->l_size_max-1]+1)/ptr->q[ptr->q_size-1]*sqrt(pba->sgnK*pba->K))*1.01;

  class_call(hyperspherical_HIS_create(0,
                                       1.,
                                       ptr->l_size_max,
                                       ptr->l,
                                       ppr->hyper_x_min,
                                       xmax,
                                       ppr->hyper_sampling_flat,
                                       ptr->l[ptr->l_size_max-1]+1,
                                       ppr->hyper_phi_min_abs,
                                       &BIS,
                                       ptr->error_message),
             ptr->error_message,
             ptr->error_message);

  /** - eventually read the selection and evolution functions */

  class_call(transfer_global_selection_read(ptr),
             ptr->error_message,
             ptr->error_message);

  /** - precompute window function for integrated nCl/sCl quantities*/
  double* window = NULL;
  if ((ppt->has_cl_lensing_potential == _TRUE_) || (ppt->has_cl_number_count == _TRUE_)) {
    class_call(transfer_precompute_selection(ppr,
                                             pba,
                                             ppt,
                                             ptr,
                                             tau_rec,
                                             tau_size_max,
                                             &(window)),
               ptr->error_message,
               ptr->error_message);
  }

  class_setup_parallel();

  /** - loop over all wavenumbers (parallelized).*/
  /* For each wavenumber: */
  for (index_q = 0; index_q < MAX(ptr->q_size,ptr->q_size_limber); index_q++) {
 class_run_parallel(with_arguments(pba,pth,ppt,ptr,ppr,index_q,tau_rec,tp_of_tt,sources,sources_spline,tau_size_max,window,tau0,&BIS),

      /* compute the transfer functions in the normal case (not the
         full Limber one) */

      struct transfer_workspace tw;
      struct transfer_workspace * ptw = &tw;

      class_call(transfer_workspace_init(ptr,
                                         ppr,
                                         ptw,
                                         ppt->tau_size,
                                         tau_size_max,
                                         pba->K,
                                         pba->sgnK,
                                         tau0-pth->tau_cut,
                                         &BIS),
                 ptr->error_message,
                 ptr->error_message);

      if (index_q < ptr->q_size) {

        if (ptr->transfer_verbose > 2)
        printf("Compute transfer for wavenumber [%d/%zu]\n",index_q,ptr->q_size-1);

        /* Update interpolation structure: */
        class_call(transfer_update_HIS(ppr,
                                       ptr,
                                       ptw,
                                       index_q,
                                       tau0),
                   ptr->error_message,
                   ptr->error_message);

        class_call(transfer_compute_for_each_q(ppr,
                                               pba,
                                               ppt,
                                               ptr,
                                               tp_of_tt,
                                               index_q,
                                               tau_size_max,
                                               tau_rec,
                                               sources,
                                               sources_spline,
                                               window,
                                               ptw,
                                               _FALSE_),
                   ptr->error_message,
                   ptr->error_message);
      }

      /* compute the transfer functions in the full Limber case (if
       this case is not needed, ptr->q_size_limber=0 and the
       condition is never met) */

      if (index_q < ptr->q_size_limber) {

        class_call(transfer_compute_for_each_q(ppr,
                                               pba,
                                               ppt,
                                               ptr,
                                               tp_of_tt,
                                               index_q,
                                               tau_size_max,
                                               tau_rec,
                                               sources,
                                               sources_spline,
                                               window,
                                               ptw,
                                               _TRUE_),
                            ptr->error_message,
                            ptr->error_message);
      }

      class_call(transfer_workspace_free(ptr,ptw),
                 ptr->error_message,
                 ptr->error_message);
      return _SUCCESS_;
    );
  } /* end of loop over wavenumber */

  class_finish_parallel();

  /** - finally, free arrays allocated outside parallel zone */
  free(window);

  class_call(transfer_perturbation_sources_spline_free(ppt,ptr,sources_spline),
             ptr->error_message,
             ptr->error_message);

  class_call(transfer_perturbation_sources_free(ppt,pfo,ptr,sources),
             ptr->error_message,
             ptr->error_message);

  class_call(transfer_free_source_correspondence(ptr,tp_of_tt),
             ptr->error_message,
             ptr->error_message);

  class_call(hyperspherical_HIS_free(&BIS,ptr->error_message),
             ptr->error_message,
             ptr->error_message);

  ptr->is_allocated = _TRUE_;
  return _SUCCESS_;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x998, %rsp            # imm = 0x998
movq %r9, %r14
cmpw $0x0, 0xc(%rcx)
je 0x9eea1
movq %r8, %r15
movq %rcx, %r12
movq %rdx, %r13
movq %rsi, %rbp
movq %rdi, %rbx
movw $0x1, 0x8a0(%r14)
cmpw $0x0, 0x968(%r14)
jle 0x9edbc
movq 0xa41a9(%rip), %rax     # 0x142f50
movq (%rax), %rcx
leaq 0x7685f(%rip), %rdi     # 0x115610
pushq $0x14
popq %rsi
pushq $0x1
popq %rdx
callq 0x8700
cmpw $0x1, 0x2c(%r12)
jne 0x9edd2
movw $0x1, %ax
cmpw $0x1, 0x60(%r12)
je 0x9edd4
xorl %eax, %eax
movw %ax, 0x93c(%r14)
movl 0x854(%r12), %eax
movl %eax, 0x8a4(%r14)
movsd 0x310(%rbp), %xmm2
movsd 0xf38(%r13), %xmm0
movsd 0xfd0(%r13), %xmm1
movsd %xmm1, 0x918(%r14)
movsd %xmm2, 0x68(%rsp)
movsd %xmm0, 0x60(%rsp)
subsd %xmm0, %xmm2
movsd 0x495c2(%rip), %xmm0    # 0xe83e8
divsd %xmm2, %xmm0
mulsd %xmm1, %xmm0
movsd 0x318(%rbp), %xmm1
movl 0x320(%rbp), %ecx
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0x9f945
testl %eax, %eax
je 0x9eed7
addq $0x96a, %r14            # imm = 0x96A
leaq 0x46590(%rip), %rsi     # 0xe53f0
leaq 0x767be(%rip), %rdx     # 0x115625
leaq 0x190(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rcx
xorl %eax, %eax
callq 0x2e014
leaq 0x461b1(%rip), %rsi     # 0xe5034
leaq 0x767d3(%rip), %rdx     # 0x11565d
movq %r14, %rdi
movl $0xd8, %ecx
movq %rbx, %r8
xorl %eax, %eax
callq 0x2e014
pushq $0x1
popq %rbx
jmp 0x9eec3
andw $0x0, 0x8a0(%r14)
xorl %ebx, %ebx
cmpw $0x0, 0x968(%r14)
jle 0x9eec3
leaq 0x793da(%rip), %rdi     # 0x118298
callq 0x8540
movl %ebx, %eax
addq $0x998, %rsp            # imm = 0x998
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rbx, 0x58(%rsp)
movslq 0x8a4(%r14), %rbx
leaq (,%rbx,8), %rdi
callq 0x8490
testq %rax, %rax
je 0x9ef56
movq %r12, %rdi
movq %r15, %rsi
movq %r14, %rdx
movq %rax, %rcx
movq %rax, %rbx
callq 0xa00b7
testl %eax, %eax
je 0x9efa0
addq $0x96a, %r14            # imm = 0x96A
leaq 0x464d1(%rip), %rsi     # 0xe53f0
leaq 0x76745(%rip), %rdx     # 0x11566b
leaq 0x190(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rcx
xorl %eax, %eax
callq 0x2e014
leaq 0x460f2(%rip), %rsi     # 0xe5034
leaq 0x76714(%rip), %rdx     # 0x11565d
movq %r14, %rdi
movl $0xe2, %ecx
jmp 0x9ee92
shll $0x3, %ebx
leaq 0x460a4(%rip), %rsi     # 0xe5004
leaq 0x70210(%rip), %rdx     # 0x10f177
leaq 0x190(%rsp), %r15
movq %r15, %rdi
movl %ebx, %ecx
xorl %eax, %eax
callq 0x2e014
addq $0x96a, %r14            # imm = 0x96A
leaq 0x460ab(%rip), %rsi     # 0xe5034
leaq 0x766cd(%rip), %rdx     # 0x11565d
movq %r14, %rdi
movl $0xde, %ecx
movq %r15, %r8
jmp 0x9ee95
movq %rbx, 0x50(%rsp)
movslq 0x8a4(%r14), %rbx
leaq (,%rbx,8), %rdi
callq 0x8490
testq %rax, %rax
je 0x9f021
movq %r12, %rdi
movq %r14, %rsi
movq 0x50(%rsp), %rdx
movq %rax, %rcx
movq %rax, %rbx
callq 0xa0453
testl %eax, %eax
je 0x9f068
addq $0x96a, %r14            # imm = 0x96A
leaq 0x46406(%rip), %rsi     # 0xe53f0
leaq 0x766d4(%rip), %rdx     # 0x1156c5
leaq 0x190(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rcx
xorl %eax, %eax
callq 0x2e014
leaq 0x46027(%rip), %rsi     # 0xe5034
leaq 0x76649(%rip), %rdx     # 0x11565d
movq %r14, %rdi
movl $0xec, %ecx
jmp 0x9ee92
shll $0x3, %ebx
leaq 0x45fd9(%rip), %rsi     # 0xe5004
leaq 0x76684(%rip), %rdx     # 0x1156b6
leaq 0x190(%rsp), %r15
movq %r15, %rdi
movl %ebx, %ecx
xorl %eax, %eax
callq 0x2e014
addq $0x96a, %r14            # imm = 0x96A
leaq 0x45fe0(%rip), %rsi     # 0xe5034
leaq 0x76602(%rip), %rdx     # 0x11565d
movq %r14, %rdi
movl $0xe8, %ecx
jmp 0x9ef98
movq %rbx, 0x80(%rsp)
movslq 0x8a4(%r14), %rbx
leaq (,%rbx,8), %rdi
callq 0x8490
testq %rax, %rax
je 0x9f0e7
movq %r12, %rdi
movq %r14, %rsi
movq %rax, %rdx
movq %rax, %rbx
callq 0xa06ac
testl %eax, %eax
je 0x9f12e
addq $0x96a, %r14            # imm = 0x96A
leaq 0x46340(%rip), %rsi     # 0xe53f0
leaq 0x7665b(%rip), %rdx     # 0x115712
leaq 0x190(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rcx
xorl %eax, %eax
callq 0x2e014
leaq 0x45f61(%rip), %rsi     # 0xe5034
leaq 0x76583(%rip), %rdx     # 0x11565d
movq %r14, %rdi
movl $0xf6, %ecx
jmp 0x9ee92
shll $0x3, %ebx
leaq 0x45f13(%rip), %rsi     # 0xe5004
leaq 0x76611(%rip), %rdx     # 0x115709
leaq 0x190(%rsp), %r15
movq %r15, %rdi
movl %ebx, %ecx
xorl %eax, %eax
callq 0x2e014
addq $0x96a, %r14            # imm = 0x96A
leaq 0x45f1a(%rip), %rsi     # 0xe5034
leaq 0x7653c(%rip), %rdx     # 0x11565d
movq %r14, %rdi
movl $0xf2, %ecx
jmp 0x9ef98
movq %rbx, 0x78(%rsp)
leaq 0x2c(%rsp), %r8
movq 0x58(%rsp), %rbx
movq %rbx, %rdi
movq %rbp, %rsi
movq %r12, %rdx
movq %r14, %rcx
movsd 0x60(%rsp), %xmm0
movsd 0x68(%rsp), %xmm1
callq 0xa0ad8
testl %eax, %eax
je 0x9f1a3
addq $0x96a, %r14            # imm = 0x96A
leaq 0x46284(%rip), %rsi     # 0xe53f0
leaq 0x765d4(%rip), %rdx     # 0x115747
leaq 0x190(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rcx
xorl %eax, %eax
callq 0x2e014
leaq 0x45ea5(%rip), %rsi     # 0xe5034
leaq 0x764c7(%rip), %rdx     # 0x11565d
movq %r14, %rdi
movl $0xfe, %ecx
jmp 0x9ee92
movq 0x920(%r14), %rax
movq 0x928(%r14), %rcx
movsd -0x8(%rcx,%rax,8), %xmm2
mulsd 0x68(%rsp), %xmm2
cmpl $-0x1, 0x320(%rbp)
jne 0x9f2a5
movslq 0x938(%r14), %rcx
cmpq %rcx, %rax
jbe 0x9f2a5
movsd %xmm2, 0x10(%rsp)
movsd 0x318(%rbp), %xmm1
movapd 0x46040(%rip), %xmm0    # 0xe5230
xorpd %xmm1, %xmm0
movsd 0x492cc(%rip), %xmm2    # 0xe84c8
ucomisd %xmm1, %xmm2
jb 0x9f208
sqrtsd %xmm0, %xmm0
jmp 0x9f20d
callq 0x82d0
movq 0x928(%r14), %rax
movq 0x910(%r14), %rcx
movq 0x920(%r14), %rdx
movsd -0x8(%rax,%rdx,8), %xmm1
divsd %xmm1, %xmm0
movslq 0x908(%r14), %rax
movl -0x4(%rcx,%rax,4), %eax
incl %eax
cvtsi2sd %eax, %xmm2
mulsd %xmm2, %xmm0
movsd %xmm0, 0x30(%rsp)
cvtsi2sdl 0x320(%rbp), %xmm0
mulsd 0x318(%rbp), %xmm0
divsd %xmm1, %xmm2
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x9f26b
sqrtsd %xmm0, %xmm0
jmp 0x9f27c
movsd %xmm2, 0x48(%rsp)
callq 0x82d0
movsd 0x48(%rsp), %xmm2
mulsd %xmm0, %xmm2
movapd %xmm2, %xmm0
callq 0x84a0
movsd 0x30(%rsp), %xmm1
divsd %xmm0, %xmm1
mulsd 0x75f45(%rip), %xmm1    # 0x1151e0
movsd 0x10(%rsp), %xmm2
mulsd %xmm1, %xmm2
movslq 0x908(%r14), %rsi
movq 0x910(%r14), %rdx
movsd 0x718(%rbx), %xmm1
movsd 0x720(%rbx), %xmm3
movl -0x4(%rdx,%rsi,4), %ecx
incl %ecx
movsd 0x740(%rbx), %xmm4
leaq 0x96a(%r14), %rbx
movsd 0x45f80(%rip), %xmm0    # 0xe5260
leaq 0x130(%rsp), %r8
xorl %edi, %edi
movq %rbx, %r9
callq 0x1fe2c
cmpl $0x1, %eax
jne 0x9f338
leaq 0x460f2(%rip), %rsi     # 0xe53f0
leaq 0x7648b(%rip), %rdx     # 0x115790
leaq 0x190(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x2e014
leaq 0x45d13(%rip), %rsi     # 0xe5034
leaq 0x76335(%rip), %rdx     # 0x11565d
movq %rbx, %rdi
movl $0x113, %ecx            # imm = 0x113
movq %r14, %r8
jmp 0x9ee95
movq %rbx, 0x20(%rsp)
movq %r14, %rdi
callq 0xa0be0
testl %eax, %eax
je 0x9f38c
leaq 0x460a0(%rip), %rsi     # 0xe53f0
leaq 0x764f4(%rip), %rdx     # 0x11584b
leaq 0x190(%rsp), %rbx
movq %rbx, %rdi
movq 0x20(%rsp), %r14
movq %r14, %rcx
xorl %eax, %eax
callq 0x2e014
leaq 0x45cbc(%rip), %rsi     # 0xe5034
leaq 0x762de(%rip), %rdx     # 0x11565d
movq %r14, %rdi
movl $0x119, %ecx            # imm = 0x119
jmp 0x9ee92
andq $0x0, 0x70(%rsp)
cmpw $0x1, 0x2e(%r12)
je 0x9f3a4
cmpw $0x1, 0x30(%r12)
jne 0x9f40e
movl 0x2c(%rsp), %r8d
leaq 0x70(%rsp), %r9
movq 0x58(%rsp), %rdi
movq %rbp, %rsi
movq %r12, %rdx
movq %r14, %rcx
movsd 0x60(%rsp), %xmm0
callq 0xa1300
testl %eax, %eax
je 0x9f40e
leaq 0x4601e(%rip), %rsi     # 0xe53f0
leaq 0x76496(%rip), %rdx     # 0x11586f
leaq 0x190(%rsp), %rbx
movq %rbx, %rdi
movq 0x20(%rsp), %r14
movq %r14, %rcx
xorl %eax, %eax
callq 0x2e014
leaq 0x45c3a(%rip), %rsi     # 0xe5034
leaq 0x7625c(%rip), %rdx     # 0x11565d
movq %r14, %rdi
movl $0x126, %ecx            # imm = 0x126
jmp 0x9ee92
movq %r15, 0xd8(%rsp)
callq 0x1a2a0
leaq 0xf0(%rsp), %rdi
movl %eax, %esi
callq 0x1a33e
xorpd %xmm0, %xmm0
leaq 0xc0(%rsp), %rax
movapd %xmm0, (%rax)
andq $0x0, 0x10(%rax)
xorl %edx, %edx
leaq 0xf(%rsp), %r15
leaq 0xa1dd3(%rip), %rax     # 0x141220
addq $0x10, %rax
movq %rax, 0xe0(%rsp)
movq %r13, 0x88(%rsp)
movq 0x920(%r14), %rax
movq 0x940(%r14), %rcx
cmpq %rcx, %rax
cmovaq %rax, %rcx
movq %rdx, 0x30(%rsp)
cmpq %rdx, %rcx
jbe 0x9f79e
movl 0x2c(%rsp), %eax
movl %eax, 0x10(%rsp)
movq 0x70(%rsp), %rax
movq %rax, 0x48(%rsp)
andq $0x0, 0x90(%rsp)
movq %r15, %rdi
pushq $0x1
popq %rsi
callq 0x1b0f6
movq %rax, %rcx
movq %r15, 0xb0(%rsp)
movq %rax, 0xb8(%rsp)
movabsq $0x100000001, %r15      # imm = 0x100000001
movq %r15, 0x8(%rax)
movq 0xe0(%rsp), %rax
movq %rcx, %rbx
movq %rax, (%rcx)
movl $0xa8, %edi
callq 0x83d0
movq %rax, %rcx
leaq 0x1f(%rsp), %rax
movq %rax, 0x190(%rsp)
movq %rcx, 0x198(%rsp)
movq %r15, 0x8(%rcx)
leaq 0xa26ba(%rip), %rax     # 0x141bc0
movq %rax, (%rcx)
movq %rcx, %r15
addq $0x10, %rcx
movq %rcx, 0xe8(%rsp)
movq %rcx, %rdi
leaq 0x1e(%rsp), %rsi
callq 0x1b18a
leaq 0xa26e4(%rip), %rax     # 0x141c10
movq %rax, 0x10(%r15)
movq %rbp, 0x38(%r15)
movq %r13, 0x40(%r15)
movq %r12, 0x48(%r15)
movq %r14, 0x50(%r15)
movq 0x58(%rsp), %rax
movq %rax, 0x58(%r15)
movq 0x30(%rsp), %rax
movl %eax, 0x60(%r15)
movsd 0x60(%rsp), %xmm0
movsd %xmm0, 0x68(%r15)
movq 0x78(%rsp), %rax
movq %rax, 0x70(%r15)
movq 0x50(%rsp), %rax
movq %rax, 0x78(%r15)
movq 0x80(%rsp), %rax
movq %rax, 0x80(%r15)
movl 0x10(%rsp), %eax
movl %eax, 0x88(%r15)
movq 0x48(%rsp), %rax
movq %rax, 0x90(%r15)
movq %rbx, %rax
addq $0x10, %rax
movq %rax, 0x10(%rsp)
movsd 0x68(%rsp), %xmm0
movsd %xmm0, 0x98(%r15)
leaq 0x130(%rsp), %rax
movq %rax, 0xa0(%r15)
andq $0x0, 0x198(%rsp)
leaq 0x190(%rsp), %rdi
callq 0xabe86
movq 0xe8(%rsp), %rax
movq %rax, 0x10(%rbx)
andq $0x0, 0x40(%rsp)
movq %r15, 0x18(%rbx)
andq $0x0, 0x38(%rsp)
leaq 0x40(%rsp), %rdi
callq 0x1afb0
andq $0x0, 0xb8(%rsp)
movq %rbx, 0x98(%rsp)
movq 0x10(%rsp), %rbx
movq %rbx, 0x90(%rsp)
leaq 0xb0(%rsp), %rdi
callq 0x1b0e8
leaq 0xa0(%rsp), %rdi
movq %rbx, %rsi
callq 0x1b09c
leaq 0x38(%rsp), %rdi
leaq 0x90(%rsp), %rsi
callq 0x1b986
pushq $0x1
popq %rax
lock
xaddl %eax, 0x110(%rsp)
movq %rax, 0x10(%rsp)
xorl %edx, %edx
movl 0xf0(%rsp), %ecx
cmpl %ecx, %edx
jae 0x9f6c0
movq 0x10(%rsp), %rax
movq %rdx, %r13
addl %edx, %eax
xorl %edx, %edx
divl %ecx
movq 0x118(%rsp), %rbx
imulq $0xb0, %rdx, %r15
leaq (%rbx,%r15), %rdi
addq $0x58, %rdi
movq %rdi, 0x190(%rsp)
callq 0x1add8
movb %al, 0x198(%rsp)
testb %al, %al
jne 0x9f722
leaq 0x190(%rsp), %rdi
callq 0x1adc2
movq %r13, %rdx
incl %edx
movq 0x88(%rsp), %r13
jmp 0x9f65c
movq 0x10(%rsp), %rax
xorl %edx, %edx
divl %ecx
movq 0x118(%rsp), %rbx
imulq $0xb0, %rdx, %r15
leaq (%rbx,%r15), %rsi
addq $0x58, %rsi
leaq 0x190(%rsp), %rdi
callq 0x1ae48
addq %r15, %rbx
movq %rbx, %rdi
leaq 0x38(%rsp), %rsi
callq 0xac582
leaq 0x190(%rsp), %rdi
callq 0x1adc2
subq $-0x80, %rbx
movq %rbx, %rdi
callq 0x81e0
leaq 0x40(%rsp), %rdi
callq 0x1afb0
jmp 0x9f75d
addq %r15, %rbx
movq %rbx, %rdi
leaq 0x38(%rsp), %rsi
callq 0xac582
leaq 0x190(%rsp), %rdi
callq 0x1adc2
subq $-0x80, %rbx
movq %rbx, %rdi
callq 0x81e0
leaq 0x40(%rsp), %rdi
callq 0x1afb0
movq 0x88(%rsp), %r13
leaq 0x98(%rsp), %rdi
callq 0x1afb0
leaq 0xc0(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x1bb4a
leaq 0xa8(%rsp), %rdi
callq 0x1afb0
movq 0x30(%rsp), %rdx
incq %rdx
leaq 0xf(%rsp), %r15
jmp 0x9f461
movq 0xc0(%rsp), %rbx
movq 0xc8(%rsp), %r15
cmpq %r15, %rbx
je 0x9f7c8
movq %rbx, %rdi
callq 0x1a3be
addq $0x10, %rbx
testl %eax, %eax
je 0x9f7ae
jmp 0x9f877
leaq 0xc0(%rsp), %rdi
callq 0x1a3f0
movq 0x70(%rsp), %rdi
callq 0x8430
movq %r12, %rdi
movq %r14, %rsi
movq 0x80(%rsp), %rdx
callq 0xa2e9d
movq %r12, %rdi
movq 0xd8(%rsp), %rsi
movq %r14, %rdx
movq 0x50(%rsp), %rcx
callq 0xa2f27
movq %r14, %rdi
movq 0x78(%rsp), %rsi
callq 0xa30b0
leaq 0x130(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x20f0c
cmpl $0x1, %eax
jne 0x9f87c
leaq 0x45bbb(%rip), %rsi     # 0xe53f0
leaq 0x76087(%rip), %rdx     # 0x1158c3
leaq 0x190(%rsp), %rdi
movq 0x20(%rsp), %rcx
xorl %eax, %eax
callq 0x2e014
leaq 0x457dd(%rip), %rsi     # 0xe5034
leaq 0x75dff(%rip), %rdx     # 0x11565d
leaq 0x190(%rsp), %r8
movq 0x20(%rsp), %rdi
movl $0x192, %ecx            # imm = 0x192
xorl %eax, %eax
callq 0x2e014
pushq $0x1
popq %rbx
jmp 0x9f888
movw $0x1, 0x116a(%r14)
xorl %ebx, %ebx
leaq 0xc0(%rsp), %rdi
callq 0x1a3f8
leaq 0xf0(%rsp), %rdi
callq 0x1a41a
jmp 0x9eec3
jmp 0x9f920
jmp 0x9f920
jmp 0x9f8af
jmp 0x9f920
movq %rax, %rbx
leaq 0x190(%rsp), %rdi
callq 0x1adc2
jmp 0x9f8c4
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x1afb0
leaq 0xa8(%rsp), %rdi
callq 0x1afb0
jmp 0x9f8ed
movq %rax, %rbx
leaq 0xa8(%rsp), %rdi
jmp 0x9f8f5
movq %rax, %rbx
leaq 0x98(%rsp), %rdi
callq 0x1afb0
jmp 0x9f923
movq %rax, %rbx
leaq 0x190(%rsp), %rdi
callq 0xabe86
jmp 0x9f911
movq %rax, %rbx
leaq 0xb0(%rsp), %rdi
callq 0x1b0e8
jmp 0x9f923
movq %rax, %rbx
leaq 0xc0(%rsp), %rdi
callq 0x1a3f8
leaq 0xf0(%rsp), %rdi
callq 0x1a41a
movq %rbx, %rdi
callq 0x8680