// File: marxn[P]pupp/3rdparty/gmp/mpn/toom53_mul.c
// Function: _gmpn_toom53_mul
void
mpn_toom53_mul (mp_ptr pp,
		mp_srcptr ap, mp_size_t an,
		mp_srcptr bp, mp_size_t bn,
		mp_ptr scratch)
{
  mp_size_t n, s, t;
  mp_limb_t cy;
  mp_ptr gp;
  mp_ptr as1, asm1, as2, asm2, ash;
  mp_ptr bs1, bsm1, bs2, bsm2, bsh;
  mp_ptr tmp;
  enum toom7_flags flags;
  TMP_DECL;

#define a0  ap
#define a1  (ap + n)
#define a2  (ap + 2*n)
#define a3  (ap + 3*n)
#define a4  (ap + 4*n)
#define b0  bp
#define b1  (bp + n)
#define b2  (bp + 2*n)

  n = 1 + (3 * an >= 5 * bn ? (an - 1) / (size_t) 5 : (bn - 1) / (size_t) 3);

  s = an - 4 * n;
  t = bn - 2 * n;

  ASSERT (0 < s && s <= n);
  ASSERT (0 < t && t <= n);

  TMP_MARK;

  tmp = TMP_ALLOC_LIMBS (10 * (n + 1));
  as1  = tmp; tmp += n + 1;
  asm1 = tmp; tmp += n + 1;
  as2  = tmp; tmp += n + 1;
  asm2 = tmp; tmp += n + 1;
  ash  = tmp; tmp += n + 1;
  bs1  = tmp; tmp += n + 1;
  bsm1 = tmp; tmp += n + 1;
  bs2  = tmp; tmp += n + 1;
  bsm2 = tmp; tmp += n + 1;
  bsh  = tmp; tmp += n + 1;

  gp = pp;

  /* Compute as1 and asm1.  */
  flags = (enum toom7_flags) (toom7_w3_neg & mpn_toom_eval_pm1 (as1, asm1, 4, ap, n, s, gp));

  /* Compute as2 and asm2. */
  flags = (enum toom7_flags) (flags | (toom7_w1_neg & mpn_toom_eval_pm2 (as2, asm2, 4, ap, n, s, gp)));

  /* Compute ash = 16 a0 + 8 a1 + 4 a2 + 2 a3 + a4
     = 2*(2*(2*(2*a0 + a1) + a2) + a3) + a4  */
#if HAVE_NATIVE_mpn_addlsh1_n
  cy = mpn_addlsh1_n (ash, a1, a0, n);
  cy = 2*cy + mpn_addlsh1_n (ash, a2, ash, n);
  cy = 2*cy + mpn_addlsh1_n (ash, a3, ash, n);
  if (s < n)
    {
      mp_limb_t cy2;
      cy2 = mpn_addlsh1_n (ash, a4, ash, s);
      ash[n] = 2*cy + mpn_lshift (ash + s, ash + s, n - s, 1);
      MPN_INCR_U (ash + s, n+1-s, cy2);
    }
  else
    ash[n] = 2*cy + mpn_addlsh1_n (ash, a4, ash, n);
#else
  cy = mpn_lshift (ash, a0, n, 1);
  cy += mpn_add_n (ash, ash, a1, n);
  cy = 2*cy + mpn_lshift (ash, ash, n, 1);
  cy += mpn_add_n (ash, ash, a2, n);
  cy = 2*cy + mpn_lshift (ash, ash, n, 1);
  cy += mpn_add_n (ash, ash, a3, n);
  cy = 2*cy + mpn_lshift (ash, ash, n, 1);
  ash[n] = cy + mpn_add (ash, ash, n, a4, s);
#endif

  /* Compute bs1 and bsm1.  */
  bs1[n] = mpn_add (bs1, b0, n, b2, t);		/* b0 + b2 */
#if HAVE_NATIVE_mpn_add_n_sub_n
  if (bs1[n] == 0 && mpn_cmp (bs1, b1, n) < 0)
    {
      bs1[n] = mpn_add_n_sub_n (bs1, bsm1, b1, bs1, n) >> 1;
      bsm1[n] = 0;
      flags = (enum toom7_flags) (flags ^ toom7_w3_neg);
    }
  else
    {
      cy = mpn_add_n_sub_n (bs1, bsm1, bs1, b1, n);
      bsm1[n] = bs1[n] - (cy & 1);
      bs1[n] += (cy >> 1);
    }
#else
  if (bs1[n] == 0 && mpn_cmp (bs1, b1, n) < 0)
    {
      mpn_sub_n (bsm1, b1, bs1, n);
      bsm1[n] = 0;
      flags = (enum toom7_flags) (flags ^ toom7_w3_neg);
    }
  else
    {
      bsm1[n] = bs1[n] - mpn_sub_n (bsm1, bs1, b1, n);
    }
  bs1[n] += mpn_add_n (bs1, bs1, b1, n);  /* b0+b1+b2 */
#endif

  /* Compute bs2 and bsm2. */
#if HAVE_NATIVE_mpn_addlsh_n || HAVE_NATIVE_mpn_addlsh2_n
#if HAVE_NATIVE_mpn_addlsh2_n
  cy = mpn_addlsh2_n (bs2, b0, b2, t);
#else /* HAVE_NATIVE_mpn_addlsh_n */
  cy = mpn_addlsh_n (bs2, b0, b2, t, 2);
#endif
  if (t < n)
    cy = mpn_add_1 (bs2 + t, b0 + t, n - t, cy);
  bs2[n] = cy;
#else
  cy = mpn_lshift (gp, b2, t, 2);
  bs2[n] = mpn_add (bs2, b0, n, gp, t);
  MPN_INCR_U (bs2 + t, n+1-t, cy);
#endif

  gp[n] = mpn_lshift (gp, b1, n, 1);

#if HAVE_NATIVE_mpn_add_n_sub_n
  if (mpn_cmp (bs2, gp, n+1) < 0)
    {
      ASSERT_NOCARRY (mpn_add_n_sub_n (bs2, bsm2, gp, bs2, n+1));
      flags = (enum toom7_flags) (flags ^ toom7_w1_neg);
    }
  else
    {
      ASSERT_NOCARRY (mpn_add_n_sub_n (bs2, bsm2, bs2, gp, n+1));
    }
#else
  if (mpn_cmp (bs2, gp, n+1) < 0)
    {
      ASSERT_NOCARRY (mpn_sub_n (bsm2, gp, bs2, n+1));
      flags = (enum toom7_flags) (flags ^ toom7_w1_neg);
    }
  else
    {
      ASSERT_NOCARRY (mpn_sub_n (bsm2, bs2, gp, n+1));
    }
  mpn_add_n (bs2, bs2, gp, n+1);
#endif

  /* Compute bsh = 4 b0 + 2 b1 + b2 = 2*(2*b0 + b1)+b2.  */
#if HAVE_NATIVE_mpn_addlsh1_n
  cy = mpn_addlsh1_n (bsh, b1, b0, n);
  if (t < n)
    {
      mp_limb_t cy2;
      cy2 = mpn_addlsh1_n (bsh, b2, bsh, t);
      bsh[n] = 2*cy + mpn_lshift (bsh + t, bsh + t, n - t, 1);
      MPN_INCR_U (bsh + t, n+1-t, cy2);
    }
  else
    bsh[n] = 2*cy + mpn_addlsh1_n (bsh, b2, bsh, n);
#else
  cy = mpn_lshift (bsh, b0, n, 1);
  cy += mpn_add_n (bsh, bsh, b1, n);
  cy = 2*cy + mpn_lshift (bsh, bsh, n, 1);
  bsh[n] = cy + mpn_add (bsh, bsh, n, b2, t);
#endif

  ASSERT (as1[n] <= 4);
  ASSERT (bs1[n] <= 2);
  ASSERT (asm1[n] <= 2);
  ASSERT (bsm1[n] <= 1);
  ASSERT (as2[n] <= 30);
  ASSERT (bs2[n] <= 6);
  ASSERT (asm2[n] <= 20);
  ASSERT (bsm2[n] <= 4);
  ASSERT (ash[n] <= 30);
  ASSERT (bsh[n] <= 6);

#define v0    pp				/* 2n */
#define v1    (pp + 2 * n)			/* 2n+1 */
#define vinf  (pp + 6 * n)			/* s+t */
#define v2    scratch				/* 2n+1 */
#define vm2   (scratch + 2 * n + 1)		/* 2n+1 */
#define vh    (scratch + 4 * n + 2)		/* 2n+1 */
#define vm1   (scratch + 6 * n + 3)		/* 2n+1 */
#define scratch_out (scratch + 8 * n + 4)		/* 2n+1 */
  /* Total scratch need: 10*n+5 */

  /* Must be in allocation order, as they overwrite one limb beyond
   * 2n+1. */
  mpn_mul_n (v2, as2, bs2, n + 1);		/* v2, 2n+1 limbs */
  mpn_mul_n (vm2, asm2, bsm2, n + 1);		/* vm2, 2n+1 limbs */
  mpn_mul_n (vh, ash, bsh, n + 1);		/* vh, 2n+1 limbs */

  /* vm1, 2n+1 limbs */
#ifdef SMALLER_RECURSION
  mpn_mul_n (vm1, asm1, bsm1, n);
  if (asm1[n] == 1)
    {
      cy = bsm1[n] + mpn_add_n (vm1 + n, vm1 + n, bsm1, n);
    }
  else if (asm1[n] == 2)
    {
#if HAVE_NATIVE_mpn_addlsh1_n
      cy = 2 * bsm1[n] + mpn_addlsh1_n (vm1 + n, vm1 + n, bsm1, n);
#else
      cy = 2 * bsm1[n] + mpn_addmul_1 (vm1 + n, bsm1, n, CNST_LIMB(2));
#endif
    }
  else
    cy = 0;
  if (bsm1[n] != 0)
    cy += mpn_add_n (vm1 + n, vm1 + n, asm1, n);
  vm1[2 * n] = cy;
#else /* SMALLER_RECURSION */
  vm1[2 * n] = 0;
  mpn_mul_n (vm1, asm1, bsm1, n + ((asm1[n] | bsm1[n]) != 0));
#endif /* SMALLER_RECURSION */

  /* v1, 2n+1 limbs */
#ifdef SMALLER_RECURSION
  mpn_mul_n (v1, as1, bs1, n);
  if (as1[n] == 1)
    {
      cy = bs1[n] + mpn_add_n (v1 + n, v1 + n, bs1, n);
    }
  else if (as1[n] == 2)
    {
#if HAVE_NATIVE_mpn_addlsh1_n
      cy = 2 * bs1[n] + mpn_addlsh1_n (v1 + n, v1 + n, bs1, n);
#else
      cy = 2 * bs1[n] + mpn_addmul_1 (v1 + n, bs1, n, CNST_LIMB(2));
#endif
    }
  else if (as1[n] != 0)
    {
      cy = as1[n] * bs1[n] + mpn_addmul_1 (v1 + n, bs1, n, as1[n]);
    }
  else
    cy = 0;
  if (bs1[n] == 1)
    {
      cy += mpn_add_n (v1 + n, v1 + n, as1, n);
    }
  else if (bs1[n] == 2)
    {
#if HAVE_NATIVE_mpn_addlsh1_n
      cy += mpn_addlsh1_n (v1 + n, v1 + n, as1, n);
#else
      cy += mpn_addmul_1 (v1 + n, as1, n, CNST_LIMB(2));
#endif
    }
  v1[2 * n] = cy;
#else /* SMALLER_RECURSION */
  v1[2 * n] = 0;
  mpn_mul_n (v1, as1, bs1, n + ((as1[n] | bs1[n]) != 0));
#endif /* SMALLER_RECURSION */

  mpn_mul_n (v0, a0, b0, n);			/* v0, 2n limbs */

  /* vinf, s+t limbs */
  if (s > t)  mpn_mul (vinf, a4, s, b2, t);
  else        mpn_mul (vinf, b2, t, a4, s);

  mpn_toom_interpolate_7pts (pp, n, flags, vm2, vm1, v2, vh, s + t,
			     scratch_out);

  TMP_FREE;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
subq $0x138, %rsp            # imm = 0x138
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
imulq $0x3, -0x20(%rbp), %rax
imulq $0x5, -0x30(%rbp), %rcx
cmpq %rcx, %rax
jl 0x412ee
movq -0x20(%rbp), %rax
subq $0x1, %rax
movl $0x5, %ecx
xorl %edx, %edx
divq %rcx
movq %rax, -0xf0(%rbp)
jmp 0x41307
movq -0x30(%rbp), %rax
subq $0x1, %rax
movl $0x3, %ecx
xorl %edx, %edx
divq %rcx
movq %rax, -0xf0(%rbp)
movq -0xf0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
movq -0x20(%rbp), %rax
movq -0x40(%rbp), %rcx
shlq $0x2, %rcx
subq %rcx, %rax
movq %rax, -0x48(%rbp)
movq -0x30(%rbp), %rax
movq -0x40(%rbp), %rcx
shlq %rcx
subq %rcx, %rax
movq %rax, -0x50(%rbp)
jmp 0x4133d
jmp 0x4133f
jmp 0x41341
movq $0x0, -0xc8(%rbp)
movq -0x40(%rbp), %rax
addq $0x1, %rax
imulq $0xa, %rax, %rax
shlq $0x3, %rax
cmpq $0x7f00, %rax           # imm = 0x7F00
setbe %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x413a0
movq -0x40(%rbp), %rax
shlq $0x4, %rax
leaq (%rax,%rax,4), %rcx
negq %rcx
movq %rsp, %rax
leaq -0x50(%rax,%rcx), %rax
movq %rax, %rsp
movq %rax, -0xf8(%rbp)
jmp 0x413c3
movq -0x40(%rbp), %rax
addq $0x1, %rax
imulq $0xa, %rax, %rsi
shlq $0x3, %rsi
leaq -0xc8(%rbp), %rdi
callq 0x56430
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x40(%rbp), %rax
addq $0x1, %rax
shlq $0x3, %rax
addq -0xb8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x40(%rbp), %rax
addq $0x1, %rax
shlq $0x3, %rax
addq -0xb8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x40(%rbp), %rax
addq $0x1, %rax
shlq $0x3, %rax
addq -0xb8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x40(%rbp), %rax
addq $0x1, %rax
shlq $0x3, %rax
addq -0xb8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x40(%rbp), %rax
addq $0x1, %rax
shlq $0x3, %rax
addq -0xb8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x40(%rbp), %rax
addq $0x1, %rax
shlq $0x3, %rax
addq -0xb8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x40(%rbp), %rax
addq $0x1, %rax
shlq $0x3, %rax
addq -0xb8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0x40(%rbp), %rax
addq $0x1, %rax
shlq $0x3, %rax
addq -0xb8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0x40(%rbp), %rax
addq $0x1, %rax
shlq $0x3, %rax
addq -0xb8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0xb0(%rbp)
movq -0x40(%rbp), %rax
addq $0x1, %rax
shlq $0x3, %rax
addq -0xb8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x68(%rbp), %rdi
movq -0x70(%rbp), %rsi
movq -0x18(%rbp), %rcx
movq -0x40(%rbp), %r8
movq -0x48(%rbp), %r9
movq -0x60(%rbp), %rax
movl $0x4, %edx
subq $0x10, %rsp
movq %rax, (%rsp)
callq 0x49d70
addq $0x10, %rsp
andl $0x2, %eax
movl %eax, -0xbc(%rbp)
movl -0xbc(%rbp), %eax
movl %eax, -0x10c(%rbp)
movq -0x78(%rbp), %rdi
movq -0x80(%rbp), %rsi
movq -0x18(%rbp), %rcx
movq -0x40(%rbp), %r8
movq -0x48(%rbp), %r9
movq -0x60(%rbp), %rax
movl $0x4, %edx
subq $0x10, %rsp
movq %rax, (%rsp)
callq 0x49f90
addq $0x10, %rsp
movl %eax, %ecx
movl -0x10c(%rbp), %eax
andl $0x1, %ecx
orl %ecx, %eax
movl %eax, -0xbc(%rbp)
movq -0x88(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x18(%rbp), %rdx
movq -0x40(%rbp), %rcx
callq 0x555c0
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rax
shlq %rax
movq %rax, -0x108(%rbp)
movq -0x88(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x40(%rbp), %rax
shlq %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x88(%rbp), %rdx
movq -0x40(%rbp), %rcx
callq 0x555c0
movq %rax, %rcx
movq -0x108(%rbp), %rax
addq %rcx, %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rax
shlq %rax
movq %rax, -0x100(%rbp)
movq -0x88(%rbp), %rdi
movq -0x18(%rbp), %rsi
imulq $0x3, -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x88(%rbp), %rdx
movq -0x40(%rbp), %rcx
callq 0x555c0
movq %rax, %rcx
movq -0x100(%rbp), %rax
addq %rcx, %rax
movq %rax, -0x58(%rbp)
movq -0x48(%rbp), %rax
cmpq -0x40(%rbp), %rax
jge 0x41768
movq -0x88(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x40(%rbp), %rax
shlq $0x2, %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x88(%rbp), %rdx
movq -0x48(%rbp), %rcx
callq 0x555c0
movq %rax, -0xd0(%rbp)
movq -0x58(%rbp), %rax
shlq %rax
movq %rax, -0x118(%rbp)
movq -0x88(%rbp), %rdi
movq -0x48(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x88(%rbp), %rsi
movq -0x48(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x40(%rbp), %rdx
subq -0x48(%rbp), %rdx
movl $0x1, %ecx
callq 0x37320
movq -0x118(%rbp), %rdx
addq %rax, %rdx
movq -0x88(%rbp), %rax
movq -0x40(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x88(%rbp), %rax
movq -0x48(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0xd0(%rbp), %rcx
addq %rcx, (%rax)
jae 0x4175b
addq $0x1, 0x8(%rax)
leaq 0x8(%rax), %rax
jb 0x41750
movq %rax, -0xd8(%rbp)
jmp 0x41764
jmp 0x41766
jmp 0x417b9
movq -0x58(%rbp), %rax
shlq %rax
movq %rax, -0x120(%rbp)
movq -0x88(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x40(%rbp), %rax
shlq $0x2, %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x88(%rbp), %rdx
movq -0x40(%rbp), %rcx
callq 0x555c0
movq -0x120(%rbp), %rdx
addq %rax, %rdx
movq -0x88(%rbp), %rax
movq -0x40(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x90(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x40(%rbp), %rdx
movq -0x28(%rbp), %rcx
movq -0x40(%rbp), %rax
shlq %rax
shlq $0x3, %rax
addq %rax, %rcx
movq -0x50(%rbp), %r8
callq 0x36b60
movq %rax, %rdx
movq -0x90(%rbp), %rax
movq -0x40(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x90(%rbp), %rax
movq -0x40(%rbp), %rcx
cmpq $0x0, (%rax,%rcx,8)
jne 0x41875
movq -0x90(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x40(%rbp), %rdx
callq 0x3b060
cmpl $0x0, %eax
jge 0x41875
movq -0x98(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x90(%rbp), %rdx
movq -0x40(%rbp), %rcx
callq 0x36fe0
movq -0x98(%rbp), %rax
movq -0x40(%rbp), %rcx
movq $0x0, (%rax,%rcx,8)
movl -0xbc(%rbp), %eax
xorl $0x2, %eax
movl %eax, -0xbc(%rbp)
jmp 0x418ca
movq -0x90(%rbp), %rax
movq -0x40(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x128(%rbp)
movq -0x98(%rbp), %rdi
movq -0x90(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdx
movq -0x40(%rbp), %rcx
callq 0x36fe0
movq -0x128(%rbp), %rdx
subq %rax, %rdx
movq -0x98(%rbp), %rax
movq -0x40(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x90(%rbp), %rdi
movq -0x90(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdx
movq -0x40(%rbp), %rcx
callq 0x36c80
movq %rax, %rdx
movq -0x90(%rbp), %rax
movq -0x40(%rbp), %rcx
addq (%rax,%rcx,8), %rdx
movq %rdx, (%rax,%rcx,8)
movq -0xa0(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x40(%rbp), %rax
shlq %rax
shlq $0x3, %rax
addq %rax, %rdx
movq -0x50(%rbp), %rcx
callq 0x55b60
movq %rax, -0x58(%rbp)
movq -0x50(%rbp), %rax
cmpq -0x40(%rbp), %rax
jge 0x41970
movq -0xa0(%rbp), %rdi
movq -0x50(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x28(%rbp), %rsi
movq -0x50(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x40(%rbp), %rdx
subq -0x50(%rbp), %rdx
movq -0x58(%rbp), %rcx
callq 0x564f0
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rdx
movq -0xa0(%rbp), %rax
movq -0x40(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x60(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x40(%rbp), %rdx
movl $0x1, %ecx
callq 0x37320
movq %rax, %rdx
movq -0x60(%rbp), %rax
movq -0x40(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0xa0(%rbp), %rdi
movq -0x60(%rbp), %rsi
movq -0x40(%rbp), %rdx
addq $0x1, %rdx
callq 0x3b060
cmpl $0x0, %eax
jge 0x41a00
movq -0xa8(%rbp), %rdi
movq -0x60(%rbp), %rsi
movq -0xa0(%rbp), %rdx
movq -0x40(%rbp), %rcx
addq $0x1, %rcx
callq 0x36fe0
movl -0xbc(%rbp), %eax
xorl $0x1, %eax
movl %eax, -0xbc(%rbp)
jmp 0x41a1f
movq -0xa8(%rbp), %rdi
movq -0xa0(%rbp), %rsi
movq -0x60(%rbp), %rdx
movq -0x40(%rbp), %rcx
addq $0x1, %rcx
callq 0x36fe0
movq -0xa0(%rbp), %rdi
movq -0xa0(%rbp), %rsi
movq -0x60(%rbp), %rdx
movq -0x40(%rbp), %rcx
addq $0x1, %rcx
callq 0x36c80
movq -0xb0(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x28(%rbp), %rdx
movq -0x40(%rbp), %rcx
callq 0x555c0
movq %rax, -0x58(%rbp)
movq -0x50(%rbp), %rax
cmpq -0x40(%rbp), %rax
jge 0x41b36
movq -0xb0(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x40(%rbp), %rax
shlq %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0xb0(%rbp), %rdx
movq -0x50(%rbp), %rcx
callq 0x555c0
movq %rax, -0xe0(%rbp)
movq -0x58(%rbp), %rax
shlq %rax
movq %rax, -0x130(%rbp)
movq -0xb0(%rbp), %rdi
movq -0x50(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0xb0(%rbp), %rsi
movq -0x50(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x40(%rbp), %rdx
subq -0x50(%rbp), %rdx
movl $0x1, %ecx
callq 0x37320
movq -0x130(%rbp), %rdx
addq %rax, %rdx
movq -0xb0(%rbp), %rax
movq -0x40(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0xb0(%rbp), %rax
movq -0x50(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0xe0(%rbp), %rcx
addq %rcx, (%rax)
jae 0x41b29
addq $0x1, 0x8(%rax)
leaq 0x8(%rax), %rax
jb 0x41b1e
movq %rax, -0xe8(%rbp)
jmp 0x41b32
jmp 0x41b34
jmp 0x41b86
movq -0x58(%rbp), %rax
shlq %rax
movq %rax, -0x138(%rbp)
movq -0xb0(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x40(%rbp), %rax
shlq %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0xb0(%rbp), %rdx
movq -0x40(%rbp), %rcx
callq 0x555c0
movq -0x138(%rbp), %rdx
addq %rax, %rdx
movq -0xb0(%rbp), %rax
movq -0x40(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
jmp 0x41b88
jmp 0x41b8a
jmp 0x41b8c
jmp 0x41b8e
jmp 0x41b90
jmp 0x41b92
jmp 0x41b94
jmp 0x41b96
jmp 0x41b98
jmp 0x41b9a
jmp 0x41b9c
jmp 0x41b9e
jmp 0x41ba0
jmp 0x41ba2
jmp 0x41ba4
jmp 0x41ba6
jmp 0x41ba8
jmp 0x41baa
jmp 0x41bac
jmp 0x41bae
movq -0x38(%rbp), %rdi
movq -0x78(%rbp), %rsi
movq -0xa0(%rbp), %rdx
movq -0x40(%rbp), %rcx
addq $0x1, %rcx
callq 0x39000
movq -0x38(%rbp), %rdi
movq -0x40(%rbp), %rax
shlq %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x8, %rdi
movq -0x80(%rbp), %rsi
movq -0xa8(%rbp), %rdx
movq -0x40(%rbp), %rcx
addq $0x1, %rcx
callq 0x39000
movq -0x38(%rbp), %rdi
movq -0x40(%rbp), %rax
shlq $0x2, %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x10, %rdi
movq -0x88(%rbp), %rsi
movq -0xb0(%rbp), %rdx
movq -0x40(%rbp), %rcx
addq $0x1, %rcx
callq 0x39000
movq -0x38(%rbp), %rax
imulq $0x6, -0x40(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x40(%rbp), %rcx
shlq %rcx
movq $0x0, 0x18(%rax,%rcx,8)
movq -0x38(%rbp), %rdi
imulq $0x6, -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
addq $0x18, %rdi
movq -0x70(%rbp), %rsi
movq -0x98(%rbp), %rdx
movq -0x40(%rbp), %rcx
movq -0x70(%rbp), %rax
movq -0x40(%rbp), %r8
movq (%rax,%r8,8), %rax
movq -0x98(%rbp), %r8
movq -0x40(%rbp), %r9
orq (%r8,%r9,8), %rax
cmpq $0x0, %rax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
addq %rax, %rcx
callq 0x39000
movq -0x10(%rbp), %rax
movq -0x40(%rbp), %rcx
shlq %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x40(%rbp), %rcx
shlq %rcx
movq $0x0, (%rax,%rcx,8)
movq -0x10(%rbp), %rdi
movq -0x40(%rbp), %rax
shlq %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x68(%rbp), %rsi
movq -0x90(%rbp), %rdx
movq -0x40(%rbp), %rcx
movq -0x68(%rbp), %rax
movq -0x40(%rbp), %r8
movq (%rax,%r8,8), %rax
movq -0x90(%rbp), %r8
movq -0x40(%rbp), %r9
orq (%r8,%r9,8), %rax
cmpq $0x0, %rax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
addq %rax, %rcx
callq 0x39000
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x40(%rbp), %rcx
callq 0x39000
movq -0x48(%rbp), %rax
cmpq -0x50(%rbp), %rax
jle 0x41d74
movq -0x10(%rbp), %rdi
imulq $0x6, -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x18(%rbp), %rsi
movq -0x40(%rbp), %rax
shlq $0x2, %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x48(%rbp), %rdx
movq -0x28(%rbp), %rcx
movq -0x40(%rbp), %rax
shlq %rax
shlq $0x3, %rax
addq %rax, %rcx
movq -0x50(%rbp), %r8
callq 0x37f00
jmp 0x41db6
movq -0x10(%rbp), %rdi
imulq $0x6, -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x28(%rbp), %rsi
movq -0x40(%rbp), %rax
shlq %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x50(%rbp), %rdx
movq -0x18(%rbp), %rcx
movq -0x40(%rbp), %rax
shlq $0x2, %rax
shlq $0x3, %rax
addq %rax, %rcx
movq -0x48(%rbp), %r8
callq 0x37f00
movq -0x10(%rbp), %rdi
movq -0x40(%rbp), %rsi
movl -0xbc(%rbp), %edx
movq -0x38(%rbp), %rcx
movq -0x40(%rbp), %rax
shlq %rax
shlq $0x3, %rax
addq %rax, %rcx
addq $0x8, %rcx
movq -0x38(%rbp), %r8
imulq $0x6, -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %r8
addq $0x18, %r8
movq -0x38(%rbp), %r9
movq -0x38(%rbp), %r11
movq -0x40(%rbp), %rax
shlq $0x2, %rax
shlq $0x3, %rax
addq %rax, %r11
addq $0x10, %r11
movq -0x48(%rbp), %r10
addq -0x50(%rbp), %r10
movq -0x38(%rbp), %rax
movq -0x40(%rbp), %rbx
shlq $0x3, %rbx
shlq $0x3, %rbx
addq %rbx, %rax
addq $0x20, %rax
subq $0x20, %rsp
movq %r11, (%rsp)
movq %r10, 0x8(%rsp)
movq %rax, 0x10(%rsp)
callq 0x4b2d0
addq $0x20, %rsp
cmpq $0x0, -0xc8(%rbp)
setne %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x41e72
movq -0xc8(%rbp), %rdi
callq 0x564a0
jmp 0x41e74
leaq -0x8(%rbp), %rsp
popq %rbx
popq %rbp
retq
nopl (%rax,%rax)