// File: /workspace/github_cpp_makefile_star2_O1/srajangarg[P]raytracer/src/main.cpp
// Function: importSceneToWorld(SceneInstance*, Mat4, int)
void
importSceneToWorld(SceneInstance * inst, Mat4 localToWorld, int time)
{
  if (inst == NULL)
    return;

  Mat4 nodeXform;
  inst->computeTransform(nodeXform, time);
  localToWorld = localToWorld * nodeXform;
  SceneGroup * g = inst->getChild();

  if (g == NULL)   // for example if the whole scene fails to load
  {
    std::cout << "ERROR: We arrived at an instance with no child?!" << std::endl;
    return;
  }

  int ccount = g->getChildCount();

  for (int i = 0; i < ccount; i++)
  {
    importSceneToWorld(g->getChild(i), localToWorld, 0);
  }

  CameraInfo f;

  if (g->computeCamera(f, time))
  {
    viewToWorld = localToWorld;

    if (view != NULL)
      delete view;

    Vec3 eye(0.0, 0.0, 0.0);
    Vec3 LL(f.sides[FRUS_LEFT], f.sides[FRUS_BOTTOM], -f.sides[FRUS_NEAR]);
    Vec3 UL(f.sides[FRUS_LEFT], f.sides[FRUS_TOP], -f.sides[FRUS_NEAR]);
    Vec3 LR(f.sides[FRUS_RIGHT], f.sides[FRUS_BOTTOM], -f.sides[FRUS_NEAR]);
    Vec3 UR(f.sides[FRUS_RIGHT], f.sides[FRUS_TOP], -f.sides[FRUS_NEAR]);
    view = new View(eye, LL, UL, LR, UR, IMAGE_WIDTH, IMAGE_HEIGHT, RAYS_PER_PIXEL_EDGE);
  }

  LightInfo l;

  if (g->computeLight(l, time))
  {
    if (l.type == LIGHT_AMBIENT)
    {
      RGB amb = world->getAmbientLightColor();
      world->setAmbientLightColor(amb + l.color);
    }
    else if (l.type == LIGHT_DIRECTIONAL)
    {
      DirectionalLight * li = new DirectionalLight(l.color);
      Vec3 dir(0, 0, -1);
      li->setDirection(localToWorld * dir);
      world->addLight(li);
    }
    else if (l.type == LIGHT_POINT)
    {
      PointLight * li = new PointLight(l.color, l.falloff, l.deadDistance);
      Vec3 pos(0, 0, 0);
      li->setPosition(localToWorld * pos);
      world->addLight(li);
    }
    else if (l.type == LIGHT_AREA)
    { 
      AreaLight * li = new AreaLight(l.color, l.falloff, l.deadDistance, l.offset);
      Vec3 pos(0, 0, 0);
      li->setPosition(localToWorld * pos);
      world->addLight(li);
    }
    else if (l.type == LIGHT_SPOT)
    {
      throw "oh no";
    }
  }

  double r;
  MaterialInfo m;

  if (g->computeSphere(r, m, time))
  {
    Material mat(m.k[0], m.k[1], m.k[2], m.k[3], m.k[4], m.k[MAT_MS], m.k[5], m.k[6]);
    Sphere * sph = new Sphere(r, m.color, mat, localToWorld);
    world->addPrimitive(sph);
  }

  TriangleMesh * t;
  unordered_map<MeshVertex*, vector<pair<Triangle*, int>> > vertexToTriangles;

  if (g->computeMesh(t, m, time))
  {
    Material mat(m.k[0], m.k[1], m.k[2], m.k[3], m.k[4], m.k[MAT_MS], m.k[5], m.k[6]);

    for (auto it = t->triangles.begin(); it != t->triangles.end(); ++it)
    {
      Triangle * tri = new Triangle(
        t->vertices[ (**it).ind[0] ]->pos,
        t->vertices[ (**it).ind[1] ]->pos,
        t->vertices[ (**it).ind[2] ]->pos,
        m.color, mat, localToWorld, smooth_normals);
      world->addPrimitive(tri);

      if (smooth_normals)
      {
        // map vertex to which triangles this verttex belongs to
        for (int i = 0; i < 3; ++i)
        {
          if(vertexToTriangles.find(t->vertices[(**it).ind[i]]) == vertexToTriangles.end())
            vertexToTriangles[t->vertices[(**it).ind[i]]] = {make_pair(tri, i)};
          else
            vertexToTriangles[t->vertices[(**it).ind[i]]].push_back(make_pair(tri, i));
        }
      }
    }

    if (smooth_normals)
    {
      // calculate average normal at each vertex, and place them at norms
      // in each of the respective triangles
      for (auto it : vertexToTriangles)
      { 
          Vec3 res(0, 0, 0);

          for (auto tripair : it.second)
            res += tripair.first->calculateFaceNormal();
          res.normalize();
          for (auto tripair : it.second)
              tripair.first->norms[tripair.second] = res;
      }
    }
  }

  std::cout << "Imported scene file" << std::endl;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x338, %rsp            # imm = 0x338
testq %rdi, %rdi
je 0x2ab8c
movl %edx, %ebp
movq %rsi, %rbx
movq %rdi, %r14
leaq 0x2b8(%rsp), %r15
movq %r15, %rsi
callq 0x6688
movsd (%rbx), %xmm0
movsd 0x8(%rbx), %xmm1
movsd 0x20(%r15), %xmm3
movapd %xmm1, %xmm2
mulsd %xmm3, %xmm2
movapd %xmm3, %xmm14
movsd (%r15), %xmm4
movsd 0x8(%r15), %xmm6
movsd %xmm6, 0x8(%rsp)
movapd %xmm0, %xmm3
mulsd %xmm4, %xmm3
movapd %xmm4, %xmm13
addsd %xmm2, %xmm3
movsd 0x10(%rbx), %xmm2
movsd 0x40(%r15), %xmm12
movapd %xmm2, %xmm4
mulsd %xmm12, %xmm4
addsd %xmm3, %xmm4
movsd 0x18(%rbx), %xmm5
movsd 0x60(%r15), %xmm8
movapd %xmm5, %xmm3
mulsd %xmm8, %xmm3
movsd %xmm8, 0x18(%rsp)
addsd %xmm4, %xmm3
movsd %xmm3, 0x148(%rsp)
movsd 0x28(%r15), %xmm4
movsd %xmm4, 0xb8(%rsp)
movapd %xmm1, %xmm3
mulsd %xmm4, %xmm3
movapd %xmm0, %xmm4
mulsd %xmm6, %xmm4
addsd %xmm3, %xmm4
movsd 0x48(%r15), %xmm6
movsd %xmm6, 0x10(%rsp)
movapd %xmm2, %xmm3
mulsd %xmm6, %xmm3
addsd %xmm4, %xmm3
movsd 0x68(%r15), %xmm9
movapd %xmm5, %xmm4
mulsd %xmm9, %xmm4
movsd %xmm9, 0xd0(%rsp)
addsd %xmm3, %xmm4
movsd %xmm4, 0x140(%rsp)
movsd 0x30(%r15), %xmm4
movsd %xmm4, 0xb0(%rsp)
movapd %xmm1, %xmm3
mulsd %xmm4, %xmm3
movsd 0x10(%r15), %xmm11
movapd %xmm0, %xmm4
mulsd %xmm11, %xmm4
movsd %xmm11, 0xc0(%rsp)
addsd %xmm3, %xmm4
movsd 0x50(%r15), %xmm15
movapd %xmm2, %xmm3
mulsd %xmm15, %xmm3
addsd %xmm4, %xmm3
movsd 0x70(%r15), %xmm10
movapd %xmm5, %xmm4
mulsd %xmm10, %xmm4
movsd %xmm10, 0xc8(%rsp)
addsd %xmm3, %xmm4
movsd %xmm4, 0x138(%rsp)
movsd 0x38(%r15), %xmm7
mulsd %xmm7, %xmm1
movsd %xmm7, 0x108(%rsp)
movsd 0x18(%r15), %xmm3
movsd %xmm3, 0xa8(%rsp)
mulsd %xmm3, %xmm0
addsd %xmm1, %xmm0
movsd 0x58(%r15), %xmm6
mulsd %xmm6, %xmm2
movsd %xmm6, 0x100(%rsp)
addsd %xmm0, %xmm2
movsd 0x78(%r15), %xmm0
movsd %xmm0, 0xa0(%rsp)
mulsd %xmm0, %xmm5
addsd %xmm2, %xmm5
movsd %xmm5, 0x130(%rsp)
movsd 0x28(%rbx), %xmm1
movapd %xmm14, %xmm5
movsd %xmm14, 0x110(%rsp)
movapd %xmm14, %xmm2
mulsd %xmm1, %xmm2
movsd 0x20(%rbx), %xmm0
movapd %xmm0, %xmm3
mulsd %xmm13, %xmm3
movapd %xmm13, %xmm14
movsd %xmm13, 0xf8(%rsp)
addsd %xmm2, %xmm3
movsd 0x30(%rbx), %xmm2
movapd %xmm2, %xmm4
mulsd %xmm12, %xmm4
addsd %xmm3, %xmm4
movsd 0x38(%rbx), %xmm13
movapd %xmm13, %xmm3
mulsd %xmm8, %xmm3
addsd %xmm4, %xmm3
movsd %xmm3, 0x128(%rsp)
movsd 0xb8(%rsp), %xmm8
movapd %xmm8, %xmm3
mulsd %xmm1, %xmm3
movapd %xmm0, %xmm4
mulsd 0x8(%rsp), %xmm4
addsd %xmm3, %xmm4
movapd %xmm2, %xmm3
mulsd 0x10(%rsp), %xmm3
addsd %xmm4, %xmm3
movapd %xmm13, %xmm4
mulsd %xmm9, %xmm4
addsd %xmm3, %xmm4
movsd %xmm4, 0x120(%rsp)
movsd 0xb0(%rsp), %xmm9
movapd %xmm9, %xmm3
mulsd %xmm1, %xmm3
movapd %xmm0, %xmm4
mulsd %xmm11, %xmm4
addsd %xmm3, %xmm4
movapd %xmm2, %xmm3
mulsd %xmm15, %xmm3
addsd %xmm4, %xmm3
movapd %xmm13, %xmm4
mulsd %xmm10, %xmm4
addsd %xmm3, %xmm4
movsd %xmm4, 0x118(%rsp)
mulsd %xmm7, %xmm1
movsd 0xa8(%rsp), %xmm10
mulsd %xmm10, %xmm0
addsd %xmm1, %xmm0
mulsd %xmm6, %xmm2
addsd %xmm0, %xmm2
movsd 0xa0(%rsp), %xmm11
mulsd %xmm11, %xmm13
addsd %xmm2, %xmm13
movsd 0x48(%rbx), %xmm7
movapd %xmm5, %xmm0
mulsd %xmm7, %xmm0
movsd 0x40(%rbx), %xmm6
movapd %xmm6, %xmm3
mulsd %xmm14, %xmm3
addsd %xmm0, %xmm3
movsd 0x50(%rbx), %xmm2
movapd %xmm2, %xmm4
mulsd %xmm12, %xmm4
addsd %xmm3, %xmm4
movsd 0x58(%rbx), %xmm3
movapd %xmm3, %xmm14
mulsd 0x18(%rsp), %xmm14
addsd %xmm4, %xmm14
mulsd %xmm7, %xmm8
movapd %xmm6, %xmm5
mulsd 0x8(%rsp), %xmm5
addsd %xmm8, %xmm5
movapd %xmm2, %xmm4
mulsd 0x10(%rsp), %xmm4
addsd %xmm5, %xmm4
movapd %xmm3, %xmm5
mulsd 0xd0(%rsp), %xmm5
addsd %xmm4, %xmm5
mulsd %xmm7, %xmm9
movapd %xmm6, %xmm1
mulsd 0xc0(%rsp), %xmm1
addsd %xmm9, %xmm1
movapd %xmm2, %xmm0
mulsd %xmm15, %xmm0
addsd %xmm1, %xmm0
movapd %xmm3, %xmm4
mulsd 0xc8(%rsp), %xmm4
addsd %xmm0, %xmm4
movsd 0x108(%rsp), %xmm9
mulsd %xmm9, %xmm7
mulsd %xmm10, %xmm6
addsd %xmm7, %xmm6
movsd 0x100(%rsp), %xmm10
mulsd %xmm10, %xmm2
addsd %xmm6, %xmm2
mulsd %xmm11, %xmm3
addsd %xmm2, %xmm3
movsd 0x68(%rbx), %xmm2
movsd 0x110(%rsp), %xmm1
mulsd %xmm2, %xmm1
movsd 0x60(%rbx), %xmm0
movsd 0xf8(%rsp), %xmm6
mulsd %xmm0, %xmm6
addsd %xmm1, %xmm6
movsd 0x70(%rbx), %xmm1
mulsd %xmm1, %xmm12
addsd %xmm6, %xmm12
movsd 0x78(%rbx), %xmm8
movsd 0x18(%rsp), %xmm6
mulsd %xmm8, %xmm6
addsd %xmm12, %xmm6
movsd 0xb8(%rsp), %xmm12
mulsd %xmm2, %xmm12
movsd 0x8(%rsp), %xmm7
mulsd %xmm0, %xmm7
addsd %xmm12, %xmm7
movsd 0x10(%rsp), %xmm11
mulsd %xmm1, %xmm11
addsd %xmm7, %xmm11
movsd 0xd0(%rsp), %xmm7
mulsd %xmm8, %xmm7
addsd %xmm11, %xmm7
movsd 0xb0(%rsp), %xmm11
mulsd %xmm2, %xmm11
movsd 0xc0(%rsp), %xmm12
mulsd %xmm0, %xmm12
addsd %xmm11, %xmm12
mulsd %xmm1, %xmm15
addsd %xmm12, %xmm15
movsd 0xc8(%rsp), %xmm11
mulsd %xmm8, %xmm11
addsd %xmm15, %xmm11
mulsd %xmm2, %xmm9
mulsd 0xa8(%rsp), %xmm0
addsd %xmm9, %xmm0
mulsd %xmm10, %xmm1
addsd %xmm0, %xmm1
mulsd 0xa0(%rsp), %xmm8
addsd %xmm1, %xmm8
movsd 0x148(%rsp), %xmm0
movsd %xmm0, (%rbx)
movsd 0x140(%rsp), %xmm0
movsd %xmm0, 0x8(%rbx)
movsd 0x138(%rsp), %xmm0
movsd %xmm0, 0x10(%rbx)
movsd 0x130(%rsp), %xmm0
movsd %xmm0, 0x18(%rbx)
movsd 0x128(%rsp), %xmm0
movsd %xmm0, 0x20(%rbx)
movsd 0x120(%rsp), %xmm0
movsd %xmm0, 0x28(%rbx)
movsd 0x118(%rsp), %xmm0
movsd %xmm0, 0x30(%rbx)
movsd %xmm13, 0x38(%rbx)
movsd %xmm14, 0x40(%rbx)
movsd %xmm5, 0x48(%rbx)
movsd %xmm4, 0x50(%rbx)
movsd %xmm3, 0x58(%rbx)
movsd %xmm6, 0x60(%rbx)
movsd %xmm7, 0x68(%rbx)
movsd %xmm11, 0x70(%rbx)
movsd %xmm8, 0x78(%rbx)
movq %r14, %rdi
callq 0x65b4
testq %rax, %rax
je 0x2a2d6
movq %rax, %r14
movq %rax, %rdi
callq 0x5dba
testl %eax, %eax
jle 0x2a02b
movl %eax, %r15d
xorl %r12d, %r12d
leaq 0x1e8(%rsp), %r13
movq %r14, %rdi
movl %r12d, %esi
callq 0x5dc8
movsd (%rbx), %xmm0
movsd %xmm0, 0x1e8(%rsp)
movsd 0x8(%rbx), %xmm0
movsd %xmm0, 0x1f0(%rsp)
movsd 0x10(%rbx), %xmm0
movsd %xmm0, 0x1f8(%rsp)
movsd 0x18(%rbx), %xmm0
movsd %xmm0, 0x200(%rsp)
movsd 0x20(%rbx), %xmm0
movsd %xmm0, 0x208(%rsp)
movsd 0x28(%rbx), %xmm0
movsd %xmm0, 0x210(%rsp)
movsd 0x30(%rbx), %xmm0
movsd %xmm0, 0x218(%rsp)
movsd 0x38(%rbx), %xmm0
movsd %xmm0, 0x220(%rsp)
movsd 0x40(%rbx), %xmm0
movsd %xmm0, 0x228(%rsp)
movsd 0x48(%rbx), %xmm0
movsd %xmm0, 0x230(%rsp)
movsd 0x50(%rbx), %xmm0
movsd %xmm0, 0x238(%rsp)
movsd 0x58(%rbx), %xmm0
movsd %xmm0, 0x240(%rsp)
movsd 0x60(%rbx), %xmm0
movsd %xmm0, 0x248(%rsp)
movsd 0x68(%rbx), %xmm0
movsd %xmm0, 0x250(%rsp)
movsd 0x70(%rbx), %xmm0
movsd %xmm0, 0x258(%rsp)
movsd 0x78(%rbx), %xmm0
movsd %xmm0, 0x260(%rsp)
movq %rax, %rdi
movq %r13, %rsi
xorl %edx, %edx
callq 0x2997d
incl %r12d
cmpl %r12d, %r15d
jne 0x29f28
movq %rbx, 0x8(%rsp)
leaq 0x268(%rsp), %rsi
movq %r14, %rdi
movl %ebp, %edx
callq 0x5f88
testb %al, %al
je 0x2a21b
movl %ebp, 0x10(%rsp)
movq 0x8(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0xe4d9(%rip)     # 0x38538
movsd 0x8(%rax), %xmm0
movsd %xmm0, 0xe4d4(%rip)     # 0x38540
movsd 0x10(%rax), %xmm0
movsd %xmm0, 0xe4cf(%rip)     # 0x38548
movsd 0x18(%rax), %xmm0
movsd %xmm0, 0xe4ca(%rip)     # 0x38550
movsd 0x20(%rax), %xmm0
movsd %xmm0, 0xe4c5(%rip)     # 0x38558
movsd 0x28(%rax), %xmm0
movsd %xmm0, 0xe4c0(%rip)     # 0x38560
movsd 0x30(%rax), %xmm0
movsd %xmm0, 0xe4bb(%rip)     # 0x38568
movsd 0x38(%rax), %xmm0
movsd %xmm0, 0xe4b6(%rip)     # 0x38570
movsd 0x40(%rax), %xmm0
movsd %xmm0, 0xe4b1(%rip)     # 0x38578
movsd 0x48(%rax), %xmm0
movsd %xmm0, 0xe4ac(%rip)     # 0x38580
movsd 0x50(%rax), %xmm0
movsd %xmm0, 0xe4a7(%rip)     # 0x38588
movsd 0x58(%rax), %xmm0
movsd %xmm0, 0xe4a2(%rip)     # 0x38590
movsd 0x60(%rax), %xmm0
movsd %xmm0, 0xe49d(%rip)     # 0x38598
movsd 0x68(%rax), %xmm0
movsd %xmm0, 0xe498(%rip)     # 0x385a0
movsd 0x70(%rax), %xmm0
movsd %xmm0, 0xe493(%rip)     # 0x385a8
movsd 0x78(%rax), %xmm0
movsd %xmm0, 0xe48e(%rip)     # 0x385b0
movq 0xe407(%rip), %rdi      # 0x38530
testq %rdi, %rdi
je 0x2a134
movq (%rdi), %rax
callq *0x8(%rax)
xorps %xmm0, %xmm0
leaq 0x40(%rsp), %rax
movaps %xmm0, (%rax)
movq $0x0, 0x10(%rax)
movsd 0x290(%rsp), %xmm0
xorpd 0x28d8(%rip), %xmm0     # 0x2ca30
movsd 0x280(%rsp), %xmm1
movsd 0x270(%rsp), %xmm2
movsd 0x278(%rsp), %xmm3
leaq 0x158(%rsp), %rbx
movsd %xmm2, (%rbx)
movsd %xmm1, 0x8(%rbx)
movlpd %xmm0, 0x10(%rbx)
movsd 0x288(%rsp), %xmm4
leaq 0x1b0(%rsp), %rbp
movsd %xmm2, (%rbp)
movsd %xmm4, 0x8(%rbp)
movlpd %xmm0, 0x10(%rbp)
leaq 0xd8(%rsp), %r15
movsd %xmm3, (%r15)
movsd %xmm1, 0x8(%r15)
movlpd %xmm0, 0x10(%r15)
leaq 0x20(%rsp), %r13
movsd %xmm3, (%r13)
movsd %xmm4, 0x8(%r13)
movlpd %xmm0, 0x10(%r13)
movl $0x90, %edi
callq 0x4310
movq %rax, %r12
subq $0x8, %rsp
movl $0x200, %eax            # imm = 0x200
movq %r12, %rdi
leaq 0x48(%rsp), %rsi
movq %rbx, %rdx
movq %rbp, %rcx
movq %r15, %r8
movq %r13, %r9
pushq $0x2
pushq %rax
pushq %rax
callq 0x27dd0
addq $0x20, %rsp
movq %r12, 0xe319(%rip)      # 0x38530
movl 0x10(%rsp), %ebp
xorpd %xmm0, %xmm0
leaq 0x158(%rsp), %rsi
movupd %xmm0, 0x8(%rsi)
movq $0x0, 0x18(%rsi)
movq %r14, %rdi
movl %ebp, %edx
callq 0x5f16
testb %al, %al
je 0x2a652
movl 0x158(%rsp), %eax
cmpq $0x4, %rax
ja 0x2a652
leaq 0x160(%rsp), %r12
leaq 0x41de(%rip), %rcx      # 0x2e444
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0xe2b2(%rip), %rsi      # 0x38528
leaq 0x40(%rsp), %r15
movq %r15, %rdi
callq 0x283a8
movsd (%r15), %xmm0
movsd 0x8(%r15), %xmm1
addsd 0x160(%rsp), %xmm0
addsd 0x168(%rsp), %xmm1
movq 0xe281(%rip), %rdi      # 0x38528
movsd 0x10(%r15), %xmm2
addsd 0x170(%rsp), %xmm2
leaq 0x2a0(%rsp), %rsi
movsd %xmm0, (%rsi)
movsd %xmm1, 0x8(%rsi)
movsd %xmm2, 0x10(%rsi)
callq 0x2839e
jmp 0x2a652
movq 0xdcf3(%rip), %rbx      # 0x37fd0
leaq 0x4174(%rip), %rsi      # 0x2e458
movl $0x30, %edx
movq %rbx, %rdi
callq 0x4370
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x42f0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4050
movq %rax, %rdi
callq 0x4230
jmp 0x2ab8c
movl $0x50, %edi
callq 0x4310
movq %rax, %r15
movsd 0x178(%rsp), %xmm0
movsd 0x188(%rsp), %xmm1
movq %rax, %rdi
movq %r12, %rsi
callq 0x25bfe
xorpd %xmm0, %xmm0
movq 0x8(%rsp), %rax
movsd 0x8(%rax), %xmm1
mulsd %xmm0, %xmm1
movsd (%rax), %xmm2
mulsd %xmm0, %xmm2
addsd %xmm1, %xmm2
movsd 0x10(%rax), %xmm1
mulsd %xmm0, %xmm1
addsd %xmm2, %xmm1
addsd 0x18(%rax), %xmm1
movsd 0x28(%rax), %xmm2
mulsd %xmm0, %xmm2
movsd 0x20(%rax), %xmm3
mulsd %xmm0, %xmm3
addsd %xmm2, %xmm3
movsd 0x30(%rax), %xmm2
mulsd %xmm0, %xmm2
addsd %xmm3, %xmm2
addsd 0x38(%rax), %xmm2
movsd 0x48(%rax), %xmm3
mulsd %xmm0, %xmm3
movsd 0x40(%rax), %xmm4
mulsd %xmm0, %xmm4
addsd %xmm3, %xmm4
movsd 0x50(%rax), %xmm3
mulsd %xmm0, %xmm3
addsd %xmm4, %xmm3
addsd 0x58(%rax), %xmm3
movsd 0x68(%rax), %xmm4
mulsd %xmm0, %xmm4
movsd 0x60(%rax), %xmm5
mulsd %xmm0, %xmm5
addsd %xmm4, %xmm5
movsd 0x70(%rax), %xmm4
mulsd %xmm0, %xmm4
addsd %xmm5, %xmm4
addsd 0x78(%rax), %xmm4
movsd %xmm1, 0x40(%rsp)
movsd %xmm2, 0x48(%rsp)
movsd %xmm3, 0x50(%rsp)
ucomisd %xmm0, %xmm4
jne 0x2a409
jnp 0x2a427
divsd %xmm4, %xmm1
movsd %xmm1, 0x40(%rsp)
divsd %xmm4, %xmm2
movsd %xmm2, 0x48(%rsp)
divsd %xmm4, %xmm3
movsd %xmm3, 0x50(%rsp)
leaq 0x40(%rsp), %rsi
movq %r15, %rdi
callq 0x25ce8
jmp 0x2a643
movl $0x58, %edi
callq 0x4310
movq %rax, %r15
movsd 0x178(%rsp), %xmm0
movsd 0x188(%rsp), %xmm1
movsd 0x190(%rsp), %xmm2
movq %rax, %rdi
movq %r12, %rsi
callq 0x25e80
xorpd %xmm0, %xmm0
movq 0x8(%rsp), %rax
movsd 0x8(%rax), %xmm1
mulsd %xmm0, %xmm1
movsd (%rax), %xmm2
mulsd %xmm0, %xmm2
addsd %xmm1, %xmm2
movsd 0x10(%rax), %xmm1
mulsd %xmm0, %xmm1
addsd %xmm2, %xmm1
addsd 0x18(%rax), %xmm1
movsd 0x28(%rax), %xmm2
mulsd %xmm0, %xmm2
movsd 0x20(%rax), %xmm3
mulsd %xmm0, %xmm3
addsd %xmm2, %xmm3
movsd 0x30(%rax), %xmm2
mulsd %xmm0, %xmm2
addsd %xmm3, %xmm2
addsd 0x38(%rax), %xmm2
movsd 0x48(%rax), %xmm3
mulsd %xmm0, %xmm3
movsd 0x40(%rax), %xmm4
mulsd %xmm0, %xmm4
addsd %xmm3, %xmm4
movsd 0x50(%rax), %xmm3
mulsd %xmm0, %xmm3
addsd %xmm4, %xmm3
addsd 0x58(%rax), %xmm3
movsd 0x68(%rax), %xmm4
mulsd %xmm0, %xmm4
movsd 0x60(%rax), %xmm5
mulsd %xmm0, %xmm5
addsd %xmm4, %xmm5
movsd 0x70(%rax), %xmm4
mulsd %xmm0, %xmm4
addsd %xmm5, %xmm4
addsd 0x78(%rax), %xmm4
movsd %xmm1, 0x40(%rsp)
movsd %xmm2, 0x48(%rsp)
movsd %xmm3, 0x50(%rsp)
ucomisd %xmm0, %xmm4
jne 0x2a52e
jnp 0x2a54c
divsd %xmm4, %xmm1
movsd %xmm1, 0x40(%rsp)
divsd %xmm4, %xmm2
movsd %xmm2, 0x48(%rsp)
divsd %xmm4, %xmm3
movsd %xmm3, 0x50(%rsp)
leaq 0x40(%rsp), %rsi
movq %r15, %rdi
callq 0x25f6e
jmp 0x2a643
movl $0x50, %edi
callq 0x4310
movq %rax, %r15
movq %rax, %rdi
movq %r12, %rsi
callq 0x26194
xorpd %xmm1, %xmm1
movq 0x8(%rsp), %rax
movsd 0x8(%rax), %xmm2
mulsd %xmm1, %xmm2
movsd (%rax), %xmm0
mulsd %xmm1, %xmm0
addsd %xmm2, %xmm0
subsd 0x10(%rax), %xmm0
addsd 0x18(%rax), %xmm0
movsd 0x28(%rax), %xmm3
mulsd %xmm1, %xmm3
movsd 0x20(%rax), %xmm2
mulsd %xmm1, %xmm2
addsd %xmm3, %xmm2
subsd 0x30(%rax), %xmm2
addsd 0x38(%rax), %xmm2
movsd 0x48(%rax), %xmm4
mulsd %xmm1, %xmm4
movsd 0x40(%rax), %xmm3
mulsd %xmm1, %xmm3
addsd %xmm4, %xmm3
subsd 0x50(%rax), %xmm3
addsd 0x58(%rax), %xmm3
movsd 0x68(%rax), %xmm5
mulsd %xmm1, %xmm5
movsd 0x60(%rax), %xmm4
mulsd %xmm1, %xmm4
addsd %xmm5, %xmm4
subsd 0x70(%rax), %xmm4
addsd 0x78(%rax), %xmm4
movsd %xmm0, 0x40(%rsp)
movsd %xmm2, 0x48(%rsp)
movsd %xmm3, 0x50(%rsp)
ucomisd %xmm1, %xmm4
jne 0x2a618
jnp 0x2a636
divsd %xmm4, %xmm0
movsd %xmm0, 0x40(%rsp)
divsd %xmm4, %xmm2
movsd %xmm2, 0x48(%rsp)
divsd %xmm4, %xmm3
movsd %xmm3, 0x50(%rsp)
leaq 0x40(%rsp), %rsi
movq %r15, %rdi
callq 0x261d6
movq 0xdede(%rip), %rdi      # 0x38528
movq %r15, %rsi
callq 0x28374
leaq 0x78(%rsp), %rax
xorpd %xmm0, %xmm0
movupd %xmm0, (%rax)
movq $0x0, 0x10(%rax)
leaq 0x150(%rsp), %rsi
leaq 0x40(%rsp), %rdx
movq %r14, %rdi
movl %ebp, %ecx
callq 0x5e78
testb %al, %al
je 0x2a73b
xorps %xmm0, %xmm0
cvtsd2ss 0x40(%rsp), %xmm0
xorps %xmm1, %xmm1
cvtsd2ss 0x48(%rsp), %xmm1
xorps %xmm2, %xmm2
cvtsd2ss 0x50(%rsp), %xmm2
xorps %xmm3, %xmm3
cvtsd2ss 0x58(%rsp), %xmm3
xorps %xmm4, %xmm4
cvtsd2ss 0x60(%rsp), %xmm4
xorps %xmm5, %xmm5
cvtsd2ss 0x68(%rsp), %xmm5
cvtsd2ss 0x70(%rsp), %xmm6
leaq 0x1b0(%rsp), %r12
movss %xmm0, (%r12)
movss %xmm1, 0x4(%r12)
movss %xmm2, 0x8(%r12)
movss %xmm3, 0xc(%r12)
movss %xmm4, 0x10(%r12)
movss %xmm2, 0x14(%r12)
movss %xmm5, 0x18(%r12)
movss %xmm6, 0x1c(%r12)
movl $0x148, %edi            # imm = 0x148
callq 0x4310
movq %rax, %r15
movsd 0x150(%rsp), %xmm0
movq %rax, %rdi
leaq 0x78(%rsp), %rsi
movq %r12, %rdx
movq 0x8(%rsp), %rcx
callq 0x26876
movq 0xddf5(%rip), %rdi      # 0x38528
movq %r15, %rsi
callq 0x2834a
leaq 0x1e0(%rsp), %rax
movq %rax, -0x30(%rax)
movq $0x1, -0x28(%rax)
xorpd %xmm0, %xmm0
movupd %xmm0, -0x20(%rax)
movl $0x3f800000, -0x10(%rax) # imm = 0x3F800000
movupd %xmm0, -0x8(%rax)
leaq 0x98(%rsp), %rsi
leaq 0x40(%rsp), %rdx
movq %r14, %rdi
movl %ebp, %ecx
callq 0x5df8
testb %al, %al
je 0x2ab39
xorps %xmm0, %xmm0
cvtsd2ss 0x40(%rsp), %xmm0
xorps %xmm1, %xmm1
cvtsd2ss 0x48(%rsp), %xmm1
xorps %xmm2, %xmm2
cvtsd2ss 0x50(%rsp), %xmm2
xorps %xmm3, %xmm3
cvtsd2ss 0x58(%rsp), %xmm3
xorps %xmm4, %xmm4
cvtsd2ss 0x60(%rsp), %xmm4
xorps %xmm5, %xmm5
cvtsd2ss 0x68(%rsp), %xmm5
xorps %xmm6, %xmm6
cvtsd2ss 0x70(%rsp), %xmm6
movss %xmm0, 0xd8(%rsp)
movss %xmm1, 0xdc(%rsp)
movss %xmm2, 0xe0(%rsp)
movss %xmm3, 0xe4(%rsp)
movss %xmm4, 0xe8(%rsp)
movss %xmm2, 0xec(%rsp)
movss %xmm5, 0xf0(%rsp)
movss %xmm6, 0xf4(%rsp)
movq 0x98(%rsp), %r14
movq 0x18(%r14), %r12
cmpq 0x20(%r14), %r12
je 0x2a9b2
leaq 0x1b0(%rsp), %r13
movl $0x1d8, %edi            # imm = 0x1D8
callq 0x4310
movq %rax, %r15
movq (%r12), %rax
movslq (%rax), %rcx
movq (%r14), %rdi
movq (%rdi,%rcx,8), %rsi
movslq 0x4(%rax), %rcx
movq (%rdi,%rcx,8), %rdx
movslq 0x8(%rax), %rax
movq (%rdi,%rax,8), %rcx
movzbl 0xdd66(%rip), %eax      # 0x385c0
movq %r15, %rdi
leaq 0x78(%rsp), %r8
leaq 0xd8(%rsp), %r9
pushq %rax
pushq 0x10(%rsp)
callq 0x26e72
addq $0x10, %rsp
movq 0xdca9(%rip), %rdi      # 0x38528
movq %r15, %rsi
callq 0x2834a
cmpb $0x1, 0xdd32(%rip)      # 0x385c0
jne 0x2a99c
xorl %r14d, %r14d
movq 0x98(%rsp), %r8
movq (%r12), %rax
movslq (%rax,%r14,4), %r9
movq (%r8), %r10
movq (%r10,%r9,8), %rcx
movq 0x1b0(%rsp), %rdi
movq 0x1b8(%rsp), %r11
movq %rcx, %rax
xorl %edx, %edx
divq %r11
movq %rdx, %rsi
movq (%rdi,%rdx,8), %rdx
movl $0x0, %eax
testq %rdx, %rdx
je 0x2a911
movq (%rdx), %rbp
movq %rdx, %rax
cmpq 0x8(%rbp), %rcx
je 0x2a911
movq %rbp, %rbx
movq (%rbp), %rbp
testq %rbp, %rbp
je 0x2a90f
movq 0x8(%rbp), %rdi
movq %rdi, %rax
xorl %edx, %edx
divq %r11
movl $0x0, %eax
cmpq %rsi, %rdx
jne 0x2a911
movq %rbx, %rax
cmpq %rdi, %rcx
jne 0x2a8e3
jmp 0x2a911
xorl %eax, %eax
testq %rax, %rax
je 0x2a94b
cmpq $0x0, (%rax)
je 0x2a94b
leaq (%r10,%r9,8), %rsi
movq %r13, %rdi
callq 0x2b0fc
movq %r15, 0x20(%rsp)
movl %r14d, 0x28(%rsp)
movq 0x8(%rax), %rsi
cmpq 0x10(%rax), %rsi
je 0x2a98d
movups 0x20(%rsp), %xmm0
movups %xmm0, (%rsi)
addq $0x10, 0x8(%rax)
jmp 0x2a97e
movq %r15, 0x20(%rsp)
movl %r14d, 0x28(%rsp)
movq (%r12), %rax
movslq (%rax,%r14,4), %rsi
shlq $0x3, %rsi
addq (%r8), %rsi
movq %r13, %rdi
callq 0x2b0fc
movq %rax, %rdi
leaq 0x20(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x2b3d2
incq %r14
cmpq $0x3, %r14
jne 0x2a897
jmp 0x2a99c
movq %rax, %rdi
leaq 0x20(%rsp), %rdx
callq 0x2b4fe
jmp 0x2a97e
addq $0x8, %r12
movq 0x98(%rsp), %r14
cmpq 0x20(%r14), %r12
jne 0x2a828
cmpb $0x0, 0xdc07(%rip)      # 0x385c0
je 0x2ab39
movq 0x1c0(%rsp), %r15
testq %r15, %r15
je 0x2ab39
leaq 0x28(%rsp), %rbx
leaq 0x198(%rsp), %r14
movq 0x8(%r15), %rax
movq %rax, 0x20(%rsp)
leaq 0x10(%r15), %rsi
movq %rbx, %rdi
callq 0x2af84
movq 0x28(%rsp), %r12
movq 0x30(%rsp), %r13
cmpq %r13, %r12
je 0x2aa60
xorps %xmm2, %xmm2
xorps %xmm4, %xmm4
xorps %xmm3, %xmm3
movsd %xmm4, 0x18(%rsp)
movsd %xmm3, 0x10(%rsp)
movsd %xmm2, 0x8(%rsp)
movq (%r12), %rsi
movq %r14, %rdi
callq 0x278b2
movsd 0x8(%rsp), %xmm2
addsd 0x198(%rsp), %xmm2
movsd 0x18(%rsp), %xmm4
addsd 0x1a0(%rsp), %xmm4
movsd 0x10(%rsp), %xmm3
addsd 0x1a8(%rsp), %xmm3
addq $0x10, %r12
cmpq %r13, %r12
jne 0x2aa0a
jmp 0x2aa69
xorps %xmm3, %xmm3
xorps %xmm4, %xmm4
xorps %xmm2, %xmm2
movapd %xmm4, %xmm0
mulsd %xmm4, %xmm0
movapd %xmm2, %xmm1
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movapd %xmm3, %xmm0
mulsd %xmm3, %xmm0
addsd %xmm1, %xmm0
ucomisd 0x16c7(%rip), %xmm0     # 0x2c158
jb 0x2aa99
sqrtsd %xmm0, %xmm0
jmp 0x2aac2
movsd %xmm2, 0x8(%rsp)
movsd %xmm3, 0x10(%rsp)
movsd %xmm4, 0x18(%rsp)
callq 0x4280
movsd 0x18(%rsp), %xmm4
movsd 0x10(%rsp), %xmm3
movsd 0x8(%rsp), %xmm2
movq 0x28(%rsp), %rdi
movq 0x30(%rsp), %rax
cmpq %rax, %rdi
je 0x2ab1b
movsd 0x1667(%rip), %xmm1     # 0x2c140
divsd %xmm0, %xmm1
mulsd %xmm1, %xmm2
mulsd %xmm1, %xmm4
mulsd %xmm1, %xmm3
movq %rdi, %rcx
movq (%rcx), %rdx
movslq 0x8(%rcx), %rsi
leaq (%rsi,%rsi,2), %rsi
movsd %xmm2, 0x140(%rdx,%rsi,8)
movsd %xmm4, 0x148(%rdx,%rsi,8)
movsd %xmm3, 0x150(%rdx,%rsi,8)
addq $0x10, %rcx
cmpq %rax, %rcx
jne 0x2aaec
testq %rdi, %rdi
je 0x2ab2d
movq 0x38(%rsp), %rsi
subq %rdi, %rsi
callq 0x4320
movq (%r15), %r15
testq %r15, %r15
jne 0x2a9dd
movq 0xd490(%rip), %rbx      # 0x37fd0
leaq 0x3948(%rip), %rsi      # 0x2e48f
movl $0x13, %edx
movq %rbx, %rdi
callq 0x4370
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x42f0
movsbl %al, %esi
movq 0xd45e(%rip), %rdi      # 0x37fd0
callq 0x4050
movq %rax, %rdi
callq 0x4230
leaq 0x1b0(%rsp), %rdi
callq 0x2b018
addq $0x338, %rsp            # imm = 0x338
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x8, %edi
callq 0x41a0
leaq 0x38da(%rip), %rcx      # 0x2e489
movq %rcx, (%rax)
movq 0xd3ff(%rip), %rsi      # 0x37fb8
movq %rax, %rdi
xorl %edx, %edx
callq 0x4570
jmp 0x2abcf
movq %rax, %rbx
movl $0x58, %esi
jmp 0x2abe1
movq %rax, %rbx
movl $0x50, %esi
jmp 0x2abe1
movq %rax, %rbx
movl $0x148, %esi            # imm = 0x148
movq %r15, %rdi
jmp 0x2abf1
movq %rax, %rbx
movl $0x90, %esi
movq %r12, %rdi
callq 0x4320
jmp 0x2ac3b
jmp 0x2ac2b
jmp 0x2ac2b
movq %rax, %rbx
movl $0x1d8, %esi            # imm = 0x1D8
movq %r15, %rdi
jmp 0x2ac24
jmp 0x2ac2b
jmp 0x2ac2b
jmp 0x2ac2b
movq %rax, %rbx
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x2ac2e
movq 0x38(%rsp), %rsi
subq %rdi, %rsi
callq 0x4320
jmp 0x2ac2e
movq %rax, %rbx
leaq 0x1b0(%rsp), %rdi
callq 0x2b018
movq %rbx, %rdi
callq 0x45c0