// File: snesic[P]stochastic_thin_films/newton-raphson_tools.cpp
// Function: calculate_matrix_A(double**, int const&, double*, double*, double*, double const&, double const&, double const&)
void calculate_matrix_A(double **a, const int& L, double *y, double *y2, double *y3, const double& theta, const double& dx, const double& dt)
{ int i,j; double dx4dt = dt/(dx*dx*dx*dx);
    
    // B.C. for the coefficients left:
    a[0][2] =   -3*( y3[0] + y3[1] ) -   3*y2[0]*( y[2]-4*y[1]+3*y[0] );
    a[0][3] =    2*( y3[0] + y3[1] ) - 1.5*y2[1]*( y[2]-4*y[1]+3*y[0] );
    a[0][4] = -0.5*( y3[0] + y3[1] );
    
    a[1][1] =  0.5*( y3[1] + y3[2] ) + 1.5*( y3[0] + y3[1] ) + 1.5*y2[0]*( y[2]-4*y[1]+3*y[0] );
    a[1][2] = -1.5*y2[1]*( y[3]-4*y[2]+7*y[1]-4*y[0] )
    -1.5*( y3[0] + 2*y3[1] + y3[2]);
    a[1][3] = -1.5*y2[2]*( y[3]-3*y[2]+3*y[1]-y[0] )
    + 1.5*( y3[1] + y3[2])
    + 0.5*( y3[0] + y3[1] );
    a[1][4] = -0.5*( y3[1] + y3[2] );
    
    // B. C. for the newton_Raphson equation:
    
    a[0][3]=2*a[0][3];
    a[1][2]=a[1][2] + a[0][4];//-0.5*(y3[0]+y3[1]);
    a[0][4]=2*a[0][4];
    
    for(i=2;i<L-2;i++)
    {
        a[i][0] = -0.5*( y3[i] + y3[i-1] );
        a[i][1] =  0.5*( y3[i] + y3[i+1] ) + 1.5*y2[i-1]*( y[i+1]-3*y[i]+3*y[i-1]-y[i-2] )
        + 1.5*( y3[i] + y3[i-1] );
        a[i][2] = -1.5*( y3[i] + y3[i+1] ) - 1.5*y2[i] * ( y[i+2]-4*y[i+1]+6*y[i]-4*y[i-1]+y[i-2] )
        -1.5*( y3[i] + y3[i-1] );
        a[i][3] =  1.5*( y3[i] + y3[i+1] ) - 1.5*y2[i+1]*( y[i+2]-3*y[i+1]+3*y[i]-y[i-1] )
        + 0.5*( y3[i] + y3[i-1] );
        a[i][4] = -0.5*( y3[i] + y3[i+1] );
    }
    
    // B.C. for the coefficients right:
    a[L-2][0] = -0.5*( y3[L-3] + y3[L-2] );
    a[L-2][1] =  0.5*( y3[L-2] + y3[L-1] ) + 1.5*y2[L-3]*( y[L-1]-3*y[L-2]+3*y[L-3]-y[L-4] )
    +1.5*( y3[L-3] + y3[L-2] );
    a[L-2][2] = -1.5*( y3[L-2] + y3[L-1] ) - 1.5*y2[L-2] * ( -4*y[L-1]+7*y[L-2]-4*y[L-3]+y[L-4] )
    -1.5*( y3[L-2] + y3[L-3] );
    a[L-2][3] =  1.5*( y3[L-2] + y3[L-1] ) - 1.5*y2[L-1]*( -3*y[L-1]+4*y[L-2]-y[L-3] )
    +0.5*( y3[L-2] + y3[L-3] );
    
    a[L-1][0] = -0.5*( y3[L-1] + y3[L-2] );
    a[L-1][1] =    2*( y3[L-1] + y3[L-2] ) + 1.5*y2[L-2]*( 4*y[L-2]-3*y[L-1]-y[L-3] );
    a[L-1][2] = -  3*( y3[L-1] + y3[L-2] ) -   3*y2[L-1]*( y[L-3]+3*y[L-1]-4*y[L-2] );
    
    // B. C. for the newton_Raphson equation:
    
    a[L-1][1]=2*a[L-1][1];
    a[L-2][2]=a[L-2][2] + a[L-1][0]; //-0.5*(y3[L-1]+y3[L-2]);
    a[L-1][0]=2*a[L-1][0];
    
    for(i=0;i<L;i++)
    for(j=0;j<5;j++)
    a[i][j]=theta*a[i][j]*dx4dt*(-1);     // This should be changed (should be done before)
    for(i=0;i<L;i++) a[i][2]=1+a[i][2];
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq 0x18(%rbp), %rax
movsd (%rax), %xmm0
movq 0x10(%rbp), %rax
movsd (%rax), %xmm1
movq 0x10(%rbp), %rax
mulsd (%rax), %xmm1
movq 0x10(%rbp), %rax
mulsd (%rax), %xmm1
movq 0x10(%rbp), %rax
mulsd (%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x40(%rbp)
movq -0x28(%rbp), %rax
movsd (%rax), %xmm0
movq -0x28(%rbp), %rax
addsd 0x8(%rax), %xmm0
movq -0x20(%rbp), %rax
movsd 0x2ca6(%rip), %xmm1     # 0xa148
mulsd (%rax), %xmm1
movq -0x18(%rbp), %rax
movsd 0x10(%rax), %xmm2
movq -0x18(%rbp), %rax
movsd 0x8(%rax), %xmm3
movsd 0x46f0(%rip), %xmm4     # 0xbbb0
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movq -0x18(%rbp), %rax
movsd (%rax), %xmm2
movsd 0x2c70(%rip), %xmm4     # 0xa148
mulsd %xmm4, %xmm2
addsd %xmm3, %xmm2
mulsd %xmm2, %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
movsd 0x2c4d(%rip), %xmm2     # 0xa150
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movq (%rax), %rax
movsd %xmm0, 0x10(%rax)
movq -0x28(%rbp), %rax
movsd (%rax), %xmm0
movq -0x28(%rbp), %rax
addsd 0x8(%rax), %xmm0
movq -0x20(%rbp), %rax
movsd 0x466c(%rip), %xmm1     # 0xbba0
mulsd 0x8(%rax), %xmm1
movq -0x18(%rbp), %rax
movsd 0x10(%rax), %xmm2
movq -0x18(%rbp), %rax
movsd 0x8(%rax), %xmm3
movsd 0x465d(%rip), %xmm4     # 0xbbb0
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movq -0x18(%rbp), %rax
movsd (%rax), %xmm2
movsd 0x2bdd(%rip), %xmm4     # 0xa148
mulsd %xmm4, %xmm2
addsd %xmm3, %xmm2
mulsd %xmm2, %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
addsd %xmm0, %xmm0
addsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movq (%rax), %rax
movsd %xmm0, 0x18(%rax)
movq -0x28(%rbp), %rax
movsd (%rax), %xmm1
movq -0x28(%rbp), %rax
addsd 0x8(%rax), %xmm1
movsd 0x45dd(%rip), %xmm0     # 0xbb98
mulsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movq (%rax), %rax
movsd %xmm0, 0x20(%rax)
movq -0x28(%rbp), %rax
movsd 0x8(%rax), %xmm1
movq -0x28(%rbp), %rax
addsd 0x10(%rax), %xmm1
movq -0x28(%rbp), %rax
movsd (%rax), %xmm2
movq -0x28(%rbp), %rax
addsd 0x8(%rax), %xmm2
movsd 0x45aa(%rip), %xmm0     # 0xbba0
mulsd %xmm2, %xmm0
movsd 0x2b1e(%rip), %xmm2     # 0xa120
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq -0x20(%rbp), %rax
movsd 0x458a(%rip), %xmm0     # 0xbba0
mulsd (%rax), %xmm0
movq -0x18(%rbp), %rax
movsd 0x10(%rax), %xmm2
movq -0x18(%rbp), %rax
movsd 0x8(%rax), %xmm3
movsd 0x457c(%rip), %xmm4     # 0xbbb0
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movq -0x18(%rbp), %rax
movsd (%rax), %xmm2
movsd 0x2afc(%rip), %xmm4     # 0xa148
mulsd %xmm4, %xmm2
addsd %xmm3, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movsd %xmm0, 0x8(%rax)
movq -0x20(%rbp), %rax
movsd 0x4533(%rip), %xmm0     # 0xbba8
mulsd 0x8(%rax), %xmm0
movq -0x18(%rbp), %rax
movsd 0x18(%rax), %xmm1
movq -0x18(%rbp), %rax
movsd 0x10(%rax), %xmm2
movsd 0x451c(%rip), %xmm3     # 0xbbb0
mulsd %xmm3, %xmm2
addsd %xmm1, %xmm2
movq -0x18(%rbp), %rax
movsd 0x8(%rax), %xmm1
movsd 0x450b(%rip), %xmm3     # 0xbbb8
mulsd %xmm3, %xmm1
addsd %xmm2, %xmm1
movq -0x18(%rbp), %rax
movsd (%rax), %xmm2
movsd 0x44eb(%rip), %xmm3     # 0xbbb0
mulsd %xmm3, %xmm2
addsd %xmm1, %xmm2
movq -0x28(%rbp), %rax
movsd (%rax), %xmm1
movq -0x28(%rbp), %rax
movsd 0x8(%rax), %xmm3
addsd %xmm3, %xmm3
addsd %xmm1, %xmm3
movq -0x28(%rbp), %rax
addsd 0x10(%rax), %xmm3
movsd 0x44a9(%rip), %xmm1     # 0xbba0
mulsd %xmm3, %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movsd %xmm0, 0x10(%rax)
movq -0x20(%rbp), %rax
movsd 0x4475(%rip), %xmm1     # 0xbba8
mulsd 0x10(%rax), %xmm1
movq -0x18(%rbp), %rax
movsd 0x18(%rax), %xmm2
movq -0x18(%rbp), %rax
movsd 0x10(%rax), %xmm0
movsd 0x29fe(%rip), %xmm3     # 0xa150
mulsd %xmm3, %xmm0
addsd %xmm2, %xmm0
movq -0x18(%rbp), %rax
movsd 0x8(%rax), %xmm2
movsd 0x29dd(%rip), %xmm3     # 0xa148
mulsd %xmm3, %xmm2
addsd %xmm0, %xmm2
movq -0x18(%rbp), %rax
subsd (%rax), %xmm2
movq -0x28(%rbp), %rax
movsd 0x8(%rax), %xmm3
movq -0x28(%rbp), %rax
addsd 0x10(%rax), %xmm3
movsd 0x440b(%rip), %xmm0     # 0xbba0
mulsd %xmm3, %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq -0x28(%rbp), %rax
movsd (%rax), %xmm0
movq -0x28(%rbp), %rax
addsd 0x8(%rax), %xmm0
movsd 0x2966(%rip), %xmm2     # 0xa120
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movsd %xmm0, 0x18(%rax)
movq -0x28(%rbp), %rax
movsd 0x8(%rax), %xmm1
movq -0x28(%rbp), %rax
addsd 0x10(%rax), %xmm1
movsd 0x43af(%rip), %xmm0     # 0xbb98
mulsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movsd %xmm0, 0x20(%rax)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movsd 0x2927(%rip), %xmm0     # 0xa130
mulsd 0x18(%rax), %xmm0
movq -0x8(%rbp), %rax
movq (%rax), %rax
movsd %xmm0, 0x18(%rax)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movsd 0x10(%rax), %xmm0
movq -0x8(%rbp), %rax
movq (%rax), %rax
addsd 0x20(%rax), %xmm0
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movsd %xmm0, 0x10(%rax)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movsd 0x28e1(%rip), %xmm0     # 0xa130
mulsd 0x20(%rax), %xmm0
movq -0x8(%rbp), %rax
movq (%rax), %rax
movsd %xmm0, 0x20(%rax)
movl $0x2, -0x34(%rbp)
movl -0x34(%rbp), %eax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
cmpl %ecx, %eax
jge 0x7c1b
movq -0x28(%rbp), %rax
movslq -0x34(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movq -0x28(%rbp), %rax
movl -0x34(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
addsd (%rax,%rcx,8), %xmm1
movsd 0x42f6(%rip), %xmm0     # 0xbb98
mulsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movsd %xmm0, (%rax)
movq -0x28(%rbp), %rax
movslq -0x34(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movq -0x28(%rbp), %rax
movl -0x34(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
addsd (%rax,%rcx,8), %xmm1
movq -0x20(%rbp), %rax
movl -0x34(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd 0x42b6(%rip), %xmm0     # 0xbba0
mulsd (%rax,%rcx,8), %xmm0
movq -0x18(%rbp), %rax
movl -0x34(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm2
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm3
movsd 0x283a(%rip), %xmm4     # 0xa150
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movq -0x18(%rbp), %rax
movl -0x34(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm2
movsd 0x2810(%rip), %xmm4     # 0xa148
mulsd %xmm4, %xmm2
addsd %xmm3, %xmm2
movq -0x18(%rbp), %rax
movl -0x34(%rbp), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
subsd (%rax,%rcx,8), %xmm2
mulsd %xmm2, %xmm0
movsd 0x27c2(%rip), %xmm2     # 0xa120
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq -0x28(%rbp), %rax
movslq -0x34(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x28(%rbp), %rax
movl -0x34(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
addsd (%rax,%rcx,8), %xmm0
movsd 0x4213(%rip), %xmm2     # 0xbba0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movsd %xmm0, 0x8(%rax)
movq -0x28(%rbp), %rax
movslq -0x34(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movq -0x28(%rbp), %rax
movl -0x34(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
addsd (%rax,%rcx,8), %xmm1
movq -0x20(%rbp), %rax
movslq -0x34(%rbp), %rcx
movsd 0x41cb(%rip), %xmm0     # 0xbba0
mulsd (%rax,%rcx,8), %xmm0
movq -0x18(%rbp), %rax
movl -0x34(%rbp), %ecx
addl $0x2, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm3
movq -0x18(%rbp), %rax
movl -0x34(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm2
movsd 0x41aa(%rip), %xmm4     # 0xbbb0
mulsd %xmm4, %xmm2
addsd %xmm3, %xmm2
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm3
movsd 0x2735(%rip), %xmm4     # 0xa158
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movq -0x18(%rbp), %rax
movl -0x34(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm2
movsd 0x416b(%rip), %xmm4     # 0xbbb0
mulsd %xmm4, %xmm2
addsd %xmm3, %xmm2
movq -0x18(%rbp), %rax
movl -0x34(%rbp), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
addsd (%rax,%rcx,8), %xmm2
mulsd %xmm2, %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd 0x4126(%rip), %xmm2     # 0xbba8
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq -0x28(%rbp), %rax
movslq -0x34(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x28(%rbp), %rax
movl -0x34(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
addsd (%rax,%rcx,8), %xmm0
movsd 0x40f7(%rip), %xmm2     # 0xbba8
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movsd %xmm0, 0x10(%rax)
movq -0x28(%rbp), %rax
movslq -0x34(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movq -0x28(%rbp), %rax
movl -0x34(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
addsd (%rax,%rcx,8), %xmm1
movq -0x20(%rbp), %rax
movl -0x34(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movsd 0x40a2(%rip), %xmm0     # 0xbba0
mulsd (%rax,%rcx,8), %xmm0
movq -0x18(%rbp), %rax
movl -0x34(%rbp), %ecx
addl $0x2, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm2
movq -0x18(%rbp), %rax
movl -0x34(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm3
movsd 0x2621(%rip), %xmm4     # 0xa150
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm2
movsd 0x25fc(%rip), %xmm4     # 0xa148
mulsd %xmm4, %xmm2
addsd %xmm3, %xmm2
movq -0x18(%rbp), %rax
movl -0x34(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
subsd (%rax,%rcx,8), %xmm2
mulsd %xmm2, %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd 0x4017(%rip), %xmm2     # 0xbba0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq -0x28(%rbp), %rax
movslq -0x34(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x28(%rbp), %rax
movl -0x34(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
addsd (%rax,%rcx,8), %xmm0
movsd 0x2568(%rip), %xmm2     # 0xa120
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movsd %xmm0, 0x18(%rax)
movq -0x28(%rbp), %rax
movslq -0x34(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movq -0x28(%rbp), %rax
movl -0x34(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
addsd (%rax,%rcx,8), %xmm1
movsd 0x3fa0(%rip), %xmm0     # 0xbb98
mulsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movsd %xmm0, 0x20(%rax)
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x7867
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x3, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm1
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
addsd (%rax,%rcx,8), %xmm1
movsd 0x3f4b(%rip), %xmm0     # 0xbb98
mulsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rax
movsd %xmm0, (%rax)
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm1
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
addsd (%rax,%rcx,8), %xmm1
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x3, %ecx
movslq %ecx, %rcx
movsd 0x3ef5(%rip), %xmm0     # 0xbba0
mulsd (%rax,%rcx,8), %xmm0
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm2
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm3
movsd 0x246e(%rip), %xmm4     # 0xa150
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x3, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm2
movsd 0x2441(%rip), %xmm4     # 0xa148
mulsd %xmm4, %xmm2
addsd %xmm3, %xmm2
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x4, %ecx
movslq %ecx, %rcx
subsd (%rax,%rcx,8), %xmm2
mulsd %xmm2, %xmm0
movsd 0x23f0(%rip), %xmm2     # 0xa120
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x3, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
addsd (%rax,%rcx,8), %xmm0
movsd 0x3e36(%rip), %xmm2     # 0xbba0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rax
movsd %xmm0, 0x8(%rax)
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm1
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
addsd (%rax,%rcx,8), %xmm1
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
movsd 0x3dd3(%rip), %xmm0     # 0xbba0
mulsd (%rax,%rcx,8), %xmm0
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm3
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
movsd 0x3db9(%rip), %xmm2     # 0xbbb8
mulsd (%rax,%rcx,8), %xmm2
movsd 0x3da4(%rip), %xmm4     # 0xbbb0
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x3, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm2
movsd 0x3d7f(%rip), %xmm4     # 0xbbb0
mulsd %xmm4, %xmm2
addsd %xmm3, %xmm2
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x4, %ecx
movslq %ecx, %rcx
addsd (%rax,%rcx,8), %xmm2
mulsd %xmm2, %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd 0x3d37(%rip), %xmm2     # 0xbba8
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x3, %ecx
movslq %ecx, %rcx
addsd (%rax,%rcx,8), %xmm0
movsd 0x3cfd(%rip), %xmm2     # 0xbba8
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rax
movsd %xmm0, 0x10(%rax)
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm1
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
addsd (%rax,%rcx,8), %xmm1
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd 0x3c92(%rip), %xmm0     # 0xbba0
mulsd (%rax,%rcx,8), %xmm0
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm2
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
movsd 0x3c80(%rip), %xmm3     # 0xbbc0
mulsd (%rax,%rcx,8), %xmm3
movsd 0x2203(%rip), %xmm4     # 0xa150
mulsd %xmm4, %xmm2
addsd %xmm3, %xmm2
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x3, %ecx
movslq %ecx, %rcx
subsd (%rax,%rcx,8), %xmm2
mulsd %xmm2, %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd 0x3c13(%rip), %xmm2     # 0xbba0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x3, %ecx
movslq %ecx, %rcx
addsd (%rax,%rcx,8), %xmm0
movsd 0x2159(%rip), %xmm2     # 0xa120
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rax
movsd %xmm0, 0x18(%rax)
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm1
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
addsd (%rax,%rcx,8), %xmm1
movsd 0x3b7e(%rip), %xmm0     # 0xbb98
mulsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rax
movsd %xmm0, (%rax)
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
addsd (%rax,%rcx,8), %xmm0
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
movsd 0x3b28(%rip), %xmm1     # 0xbba0
mulsd (%rax,%rcx,8), %xmm1
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm2
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd 0x209e(%rip), %xmm3     # 0xa148
mulsd (%rax,%rcx,8), %xmm3
movq %xmm3, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm3
movsd 0x3af2(%rip), %xmm4     # 0xbbc0
mulsd %xmm4, %xmm2
addsd %xmm3, %xmm2
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x3, %ecx
movslq %ecx, %rcx
subsd (%rax,%rcx,8), %xmm2
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm0
addsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rax
movsd %xmm0, 0x8(%rax)
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
addsd (%rax,%rcx,8), %xmm0
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd 0x1ff6(%rip), %xmm1     # 0xa148
mulsd (%rax,%rcx,8), %xmm1
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x3, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm2
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm3
movsd 0x1fbf(%rip), %xmm4     # 0xa148
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm2
movsd 0x3a02(%rip), %xmm4     # 0xbbb0
mulsd %xmm4, %xmm2
addsd %xmm3, %xmm2
mulsd %xmm2, %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
movsd 0x1f77(%rip), %xmm2     # 0xa150
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rax
movsd %xmm0, 0x10(%rax)
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rax
movsd 0x1f1a(%rip), %xmm0     # 0xa130
mulsd 0x8(%rax), %xmm0
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rax
movsd %xmm0, 0x8(%rax)
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rax
movsd 0x10(%rax), %xmm0
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rax
addsd (%rax), %xmm0
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rax
movsd %xmm0, 0x10(%rax)
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rax
movsd 0x1e96(%rip), %xmm0     # 0xa130
mulsd (%rax), %xmm0
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rax
movsd %xmm0, (%rax)
movl $0x0, -0x34(%rbp)
movl -0x34(%rbp), %eax
movq -0x10(%rbp), %rcx
cmpl (%rcx), %eax
jge 0x8330
movl $0x0, -0x38(%rbp)
cmpl $0x5, -0x38(%rbp)
jge 0x8323
movq -0x30(%rbp), %rax
movsd (%rax), %xmm0
movq -0x8(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x38(%rbp), %rcx
mulsd (%rax,%rcx,8), %xmm0
mulsd -0x40(%rbp), %xmm0
movsd 0x38c9(%rip), %xmm1     # 0xbbc8
mulsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x38(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
jmp 0x82cf
jmp 0x8325
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x82bd
movl $0x0, -0x34(%rbp)
movl -0x34(%rbp), %eax
movq -0x10(%rbp), %rcx
cmpl (%rcx), %eax
jge 0x8377
movq -0x8(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movsd 0x1cb2(%rip), %xmm0     # 0xa008
addsd 0x10(%rax), %xmm0
movq -0x8(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movsd %xmm0, 0x10(%rax)
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x8337
popq %rbp
retq
nopl (%rax)