Skip to content

Commit

Permalink
New error message
Browse files Browse the repository at this point in the history
I guess we need some way to deal with
`(addcarry₆₄, [((#3 *₆₄ #7) >>₆₄ 32), (addcarry₆₄, [(#20 +₆₄ #26), (#3 *₆₄ #7 *₆₄ 2^32)])])`
≠
`(addcarry₆₄, [(((#3 *₆₄ #7) *ℤ 2^32-1) >>₆₄ 64), (addcarry₆₄, [(#3 *₆₄ #7 *₆₄ 2^32-1), (((#3 *₆₄ #7) *ℤ 2^64-1) >>₆₄ 64)]), (addcarry₆₄, [(#20 +₆₄ #26), ((#3 *₆₄ #7 *₆₄ 2^32-1) +₆₄ (((#3 *₆₄ #7) *ℤ 2^64-1) >>₆₄ 64)), (addcarry₆₄, [(#3 *₆₄ #7), (#3 *₆₄ #7 *₆₄ 2^64-1)])])])`

```
check_args
/* Autogenerated: 'src/ExtractionOCaml/word_by_word_montgomery' p256 64 '2^256 - 2^224 + 2^192 + 2^96 - 1' mul --no-wide-int --shiftr-avoid-uint1 --hints-file 'fiat-amd64/boringssl_intel_manual_mul_p256.asm' */
/* curve description: p256 */
/* machine_wordsize = 64 (from "64") */
/* requested operations: mul */
/* m = 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff (from "2^256 - 2^224 + 2^192 + 2^96 - 1") */
/*                                                                    */
/* NOTE: In addition to the bounds specified above each function, all */
/*   functions synthesized for this Montgomery arithmetic require the */
/*   input to be strictly less than the prime modulus (m), and also   */
/*   require the input to be in the unique saturated representation.  */
/*   All functions also ensure that these two properties are true of  */
/*   return values.                                                   */
/*  */
/* Computed values: */
/*   eval z = z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) */
/*   bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) */
/*   twos_complement_eval z = let x1 := z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) in */
/*                            if x1 & (2^256-1) < 2^255 then x1 & (2^256-1) else (x1 & (2^256-1)) - 2^256 */

#include <stdint.h>
#if defined(__GNUC__) || defined(__clang__)
#  define FIAT_P256_FIAT_INLINE __inline__
#else
#  define FIAT_P256_FIAT_INLINE
#endif

#if (-1 & 3) != 3
#error "This code only works on a two's complement system"
#endif

After rewriting PartialEvaluate:
(λ x1 x2,
  let x3 := x1[1] in
  let x4 := x1[2] in
  let x5 := x1[3] in
  let x6 := x1[0] in
  let x7 := Z.mul_split((2^64), (0, x2[3])) in
  let x8 := Z.mul_split((2^64), (0, x2[2])) in
  let x9 := Z.mul_split((2^64), (0, x2[1])) in
  let x10 := Z.mul_split((2^64), (0, x2[0])) in
  let x11 := Z.mul_split((2^64), (0, x2[3])) in
  let x12 := Z.mul_split((2^64), (0, x2[2])) in
  let x13 := Z.mul_split((2^64), (0, x2[1])) in
  let x14 := Z.mul_split((2^64), (0, x2[0])) in
  let x15 := Z.mul_split((2^64), (0, x2[3])) in
  let x16 := Z.mul_split((2^64), (0, x2[2])) in
  let x17 := Z.mul_split((2^64), (0, x2[1])) in
  let x18 := Z.mul_split((2^64), (0, x2[0])) in
  let x19 := Z.mul_split((2^64), (x6, x2[3])) in
  let x20 := Z.mul_split((2^64), (x6, x2[2])) in
  let x21 := Z.mul_split((2^64), (x6, x2[1])) in
  let x22 := Z.mul_split((2^64), (x6, x2[0])) in
  let x23 := 2^192 * x7₂ in
  let x24 := 2^128 * x7₁ in
  let x25 := 2^128 * x8₂ in
  let x26 := 2^64 * x8₁ in
  let x27 := 2^64 * x9₂ in
  let x28 := 1 * x9₁ in
  let x29 := 1 * x10₂ in
  let x30 := 1 * x10₁ in
  let x31 := 2^128 * x11₂ in
  let x32 := 2^64 * x11₁ in
  let x33 := 2^64 * x12₂ in
  let x34 := 1 * x12₁ in
  let x35 := 1 * x13₂ in
  let x36 := 1 * x13₁ in
  let x37 := 1 * x14₂ in
  let x38 := 1 * x14₁ in
  let x39 := 2^64 * x15₂ in
  let x40 := 1 * x15₁ in
  let x41 := 1 * x16₂ in
  let x42 := 1 * x16₁ in
  let x43 := 1 * x17₂ in
  let x44 := 1 * x17₁ in
  let x45 := 1 * x18₂ in
  let x46 := 1 * x18₁ in
  let x47 := 1 * x19₂ in
  let x48 := 1 * x19₁ in
  let x49 := 1 * x20₂ in
  let x50 := 1 * x20₁ in
  let x51 := 1 * x21₂ in
  let x52 := 1 * x21₁ in
  let x53 := 1 * x22₂ in
  let x54 := 1 * x22₁ in
  let x55 := Z.add_with_get_carry((2^64), (0, (x54, 0))) in
  let x56 := Z.add_with_get_carry((2^64), (x55₂, (x53, 0))) in
  let x57 := Z.add_with_get_carry((2^64), (x56₂, (x51, 0))) in
  let x58 := Z.add_with_get_carry((2^64), (x57₂, (x49, 0))) in
  let x59 := Z.add_with_get_carry((2^64), (x58₂, (x47, x23))) in
  let x60 := Z.add_with_get_carry((2^64), (0, (x55₁, 0))) in
  let x61 := Z.add_with_get_carry((2^64), (x60₂, (x56₁, 0))) in
  let x62 := Z.add_with_get_carry((2^64), (x61₂, (x57₁, 0))) in
  let x63 := Z.add_with_get_carry((2^64), (x62₂, (x58₁, 0))) in
  let x64 := Z.add_with_get_carry((2^64), (x63₂, (x59₁, x24))) in
  let x65 := Z.add_with_get_carry((2^64), (0, (x60₁, 0))) in
  let x66 := Z.add_with_get_carry((2^64), (x65₂, (x61₁, 0))) in
  let x67 := Z.add_with_get_carry((2^64), (x66₂, (x62₁, 0))) in
  let x68 := Z.add_with_get_carry((2^64), (x67₂, (x63₁, 0))) in
  let x69 := Z.add_with_get_carry((2^64), (x68₂, (x64₁, x25))) in
  let x70 := Z.add_with_get_carry((2^64), (0, (x65₁, 0))) in
  let x71 := Z.add_with_get_carry((2^64), (x70₂, (x66₁, 0))) in
  let x72 := Z.add_with_get_carry((2^64), (x71₂, (x67₁, 0))) in
  let x73 := Z.add_with_get_carry((2^64), (x72₂, (x68₁, 0))) in
  let x74 := Z.add_with_get_carry((2^64), (x73₂, (x69₁, x26))) in
  let x75 := Z.add_with_get_carry((2^64), (0, (x70₁, 0))) in
  let x76 := Z.add_with_get_carry((2^64), (x75₂, (x71₁, 0))) in
  let x77 := Z.add_with_get_carry((2^64), (x76₂, (x72₁, 0))) in
  let x78 := Z.add_with_get_carry((2^64), (x77₂, (x73₁, 0))) in
  let x79 := Z.add_with_get_carry((2^64), (x78₂, (x74₁, x27))) in
  let x80 := Z.add_with_get_carry((2^64), (0, (x75₁, 0))) in
  let x81 := Z.add_with_get_carry((2^64), (x80₂, (x76₁, 0))) in
  let x82 := Z.add_with_get_carry((2^64), (x81₂, (x77₁, 0))) in
  let x83 := Z.add_with_get_carry((2^64), (x82₂, (x78₁, 0))) in
  let x84 := Z.add_with_get_carry((2^64), (x83₂, (x79₁, x28))) in
  let x85 := Z.add_with_get_carry((2^64), (0, (x80₁, 0))) in
  let x86 := Z.add_with_get_carry((2^64), (x85₂, (x81₁, 0))) in
  let x87 := Z.add_with_get_carry((2^64), (x86₂, (x82₁, 0))) in
  let x88 := Z.add_with_get_carry((2^64), (x87₂, (x83₁, 0))) in
  let x89 := Z.add_with_get_carry((2^64), (x88₂, (x84₁, x29))) in
  let x90 := Z.add_with_get_carry((2^64), (0, (x85₁, 0))) in
  let x91 := Z.add_with_get_carry((2^64), (x90₂, (x86₁, 0))) in
  let x92 := Z.add_with_get_carry((2^64), (x91₂, (x87₁, 0))) in
  let x93 := Z.add_with_get_carry((2^64), (x92₂, (x88₁, 0))) in
  let x94 := Z.add_with_get_carry((2^64), (x93₂, (x89₁, x31))) in
  let x95 := Z.add_with_get_carry((2^64), (0, (x90₁, 0))) in
  let x96 := Z.add_with_get_carry((2^64), (x95₂, (x91₁, 0))) in
  let x97 := Z.add_with_get_carry((2^64), (x96₂, (x92₁, 0))) in
  let x98 := Z.add_with_get_carry((2^64), (x97₂, (x93₁, 0))) in
  let x99 := Z.add_with_get_carry((2^64), (x98₂, (x94₁, x32))) in
  let x100 := Z.add_with_get_carry((2^64), (0, (x95₁, 0))) in
  let x101 := Z.add_with_get_carry((2^64), (x100₂, (x96₁, 0))) in
  let x102 := Z.add_with_get_carry((2^64), (x101₂, (x97₁, 0))) in
  let x103 := Z.add_with_get_carry((2^64), (x102₂, (x98₁, x30))) in
  let x104 := Z.add_with_get_carry((2^64), (x103₂, (x99₁, x33))) in
  let x105 := Z.add_with_get_carry((2^64), (0, (x100₁, 0))) in
  let x106 := Z.add_with_get_carry((2^64), (x105₂, (x101₁, 0))) in
  let x107 := Z.add_with_get_carry((2^64), (x106₂, (x102₁, 0))) in
  let x108 := Z.add_with_get_carry((2^64), (x107₂, (x103₁, x36))) in
  let x109 := Z.add_with_get_carry((2^64), (x108₂, (x104₁, x34))) in
  let x110 := Z.add_with_get_carry((2^64), (0, (x105₁, 0))) in
  let x111 := Z.add_with_get_carry((2^64), (x110₂, (x106₁, 0))) in
  let x112 := Z.add_with_get_carry((2^64), (x111₂, (x107₁, x38))) in
  let x113 := Z.add_with_get_carry((2^64), (x112₂, (x108₁, x37))) in
  let x114 := Z.add_with_get_carry((2^64), (x113₂, (x109₁, x35))) in
  let x115 := Z.add_with_get_carry((2^64), (0, (x110₁, 0))) in
  let x116 := Z.add_with_get_carry((2^64), (x115₂, (x111₁, 0))) in
  let x117 := Z.add_with_get_carry((2^64), (x116₂, (x112₁, x44))) in
  let x118 := Z.add_with_get_carry((2^64), (x117₂, (x113₁, x42))) in
  let x119 := Z.add_with_get_carry((2^64), (x118₂, (x114₁, x39))) in
  let x120 := Z.add_with_get_carry((2^64), (0, (x115₁, 0))) in
  let x121 := Z.add_with_get_carry((2^64), (x120₂, (x116₁, x46))) in
  let x122 := Z.add_with_get_carry((2^64), (x121₂, (x117₁, x45))) in
  let x123 := Z.add_with_get_carry((2^64), (x122₂, (x118₁, x43))) in
  let x124 := Z.add_with_get_carry((2^64), (x123₂, (x119₁, x40))) in
  let x125 := Z.add_with_get_carry((2^64), (0, (x120₁, 0))) in
  let x126 := Z.add_with_get_carry((2^64), (x125₂, (x121₁, x52))) in
  let x127 := Z.add_with_get_carry((2^64), (x126₂, (x122₁, x50))) in
  let x128 := Z.add_with_get_carry((2^64), (x127₂, (x123₁, x48))) in
  let x129 := Z.add_with_get_carry((2^64), (x128₂, (x124₁, x41))) in
  let x130 := Z.add_with_get_carry((2^64), (0, (0, x125₁))) in
  let x131 := Z.add_with_get_carry((2^64), (x130₂, (0, x126₁))) in
  let x132 := Z.add_with_get_carry((2^64), (x131₂, (0, x127₁))) in
  let x133 := Z.add_with_get_carry((2^64), (x132₂, (0, x128₁))) in
  let x134 := Z.add_with_get_carry((2^64), (x133₂, (0, x129₁))) in
  let x135 := 0 + x134₂ in
  let x136 := (Z.mul_split((2^64), (x130₁, 1)))₁ in
  let x137 := Z.mul_split((2^64), (x136, 0xffffffff00000001)) in
  let x138 := Z.mul_split((2^64), (x136, 0)) in
  let x139 := Z.mul_split((2^64), (x136, (2^32-1))) in
  let x140 := Z.mul_split((2^64), (x136, (2^64-1))) in
  let x141 := 1 * x137₂ in
  let x142 := 1 * x137₁ in
  let x143 := 1 * x138₂ in
  let x144 := 1 * x138₁ in
  let x145 := 1 * x139₂ in
  let x146 := 1 * x139₁ in
  let x147 := 1 * x140₂ in
  let x148 := 1 * x140₁ in
  let x149 := Z.add_with_get_carry((2^64), (0, (x148, 0))) in
  let x150 := Z.add_with_get_carry((2^64), (x149₂, (x147, 0))) in
  let x151 := Z.add_with_get_carry((2^64), (x150₂, (x145, 0))) in
  let x152 := Z.add_with_get_carry((2^64), (x151₂, (x143, 0))) in
  let x153 := Z.add_with_get_carry((2^64), (x152₂, (x141, 0))) in
  let x154 := Z.add_with_get_carry((2^64), (0, (x149₁, 0))) in
  let x155 := Z.add_with_get_carry((2^64), (x154₂, (x150₁, 0))) in
  let x156 := Z.add_with_get_carry((2^64), (x155₂, (x151₁, 0))) in
  let x157 := Z.add_with_get_carry((2^64), (x156₂, (x152₁, 0))) in
  let x158 := Z.add_with_get_carry((2^64), (x157₂, (x153₁, 0))) in
  let x159 := Z.add_with_get_carry((2^64), (0, (x154₁, 0))) in
  let x160 := Z.add_with_get_carry((2^64), (x159₂, (x155₁, 0))) in
  let x161 := Z.add_with_get_carry((2^64), (x160₂, (x156₁, 0))) in
  let x162 := Z.add_with_get_carry((2^64), (x161₂, (x157₁, 0))) in
  let x163 := Z.add_with_get_carry((2^64), (x162₂, (x158₁, 0))) in
  let x164 := Z.add_with_get_carry((2^64), (0, (x159₁, 0))) in
  let x165 := Z.add_with_get_carry((2^64), (x164₂, (x160₁, 0))) in
  let x166 := Z.add_with_get_carry((2^64), (x165₂, (x161₁, 0))) in
  let x167 := Z.add_with_get_carry((2^64), (x166₂, (x162₁, 0))) in
  let x168 := Z.add_with_get_carry((2^64), (x167₂, (x163₁, 0))) in
  let x169 := Z.add_with_get_carry((2^64), (0, (x164₁, 0))) in
  let x170 := Z.add_with_get_carry((2^64), (x169₂, (x165₁, 0))) in
  let x171 := Z.add_with_get_carry((2^64), (x170₂, (x166₁, 0))) in
  let x172 := Z.add_with_get_carry((2^64), (x171₂, (x167₁, 0))) in
  let x173 := Z.add_with_get_carry((2^64), (x172₂, (x168₁, 0))) in
  let x174 := Z.add_with_get_carry((2^64), (0, (x169₁, 0))) in
  let x175 := Z.add_with_get_carry((2^64), (x174₂, (x170₁, 0))) in
  let x176 := Z.add_with_get_carry((2^64), (x175₂, (x171₁, 0))) in
  let x177 := Z.add_with_get_carry((2^64), (x176₂, (x172₁, 0))) in
  let x178 := Z.add_with_get_carry((2^64), (x177₂, (x173₁, 0))) in
  let x179 := Z.add_with_get_carry((2^64), (0, (x174₁, 0))) in
  let x180 := Z.add_with_get_carry((2^64), (x179₂, (x175₁, 0))) in
  let x181 := Z.add_with_get_carry((2^64), (x180₂, (x176₁, 0))) in
  let x182 := Z.add_with_get_carry((2^64), (x181₂, (x177₁, 0))) in
  let x183 := Z.add_with_get_carry((2^64), (x182₂, (x178₁, 0))) in
  let x184 := Z.add_with_get_carry((2^64), (0, (x179₁, 0))) in
  let x185 := Z.add_with_get_carry((2^64), (x184₂, (x180₁, 0))) in
  let x186 := Z.add_with_get_carry((2^64), (x185₂, (x181₁, 0))) in
  let x187 := Z.add_with_get_carry((2^64), (x186₂, (x182₁, 0))) in
  let x188 := Z.add_with_get_carry((2^64), (x187₂, (x183₁, 0))) in
  let x189 := Z.add_with_get_carry((2^64), (0, (x184₁, 0))) in
  let x190 := Z.add_with_get_carry((2^64), (x189₂, (x185₁, 0))) in
  let x191 := Z.add_with_get_carry((2^64), (x190₂, (x186₁, 0))) in
  let x192 := Z.add_with_get_carry((2^64), (x191₂, (x187₁, 0))) in
  let x193 := Z.add_with_get_carry((2^64), (x192₂, (x188₁, 0))) in
  let x194 := Z.add_with_get_carry((2^64), (0, (x189₁, 0))) in
  let x195 := Z.add_with_get_carry((2^64), (x194₂, (x190₁, 0))) in
  let x196 := Z.add_with_get_carry((2^64), (x195₂, (x191₁, 0))) in
  let x197 := Z.add_with_get_carry((2^64), (x196₂, (x192₁, 0))) in
  let x198 := Z.add_with_get_carry((2^64), (x197₂, (x193₁, 0))) in
  let x199 := Z.add_with_get_carry((2^64), (0, (x194₁, 0))) in
  let x200 := Z.add_with_get_carry((2^64), (x199₂, (x195₁, 0))) in
  let x201 := Z.add_with_get_carry((2^64), (x200₂, (x196₁, 0))) in
  let x202 := Z.add_with_get_carry((2^64), (x201₂, (x197₁, 0))) in
  let x203 := Z.add_with_get_carry((2^64), (x202₂, (x198₁, 0))) in
  let x204 := Z.add_with_get_carry((2^64), (0, (x199₁, 0))) in
  let x205 := Z.add_with_get_carry((2^64), (x204₂, (x200₁, 0))) in
  let x206 := Z.add_with_get_carry((2^64), (x205₂, (x201₁, 0))) in
  let x207 := Z.add_with_get_carry((2^64), (x206₂, (x202₁, 0))) in
  let x208 := Z.add_with_get_carry((2^64), (x207₂, (x203₁, 0))) in
  let x209 := Z.add_with_get_carry((2^64), (0, (x204₁, 0))) in
  let x210 := Z.add_with_get_carry((2^64), (x209₂, (x205₁, 0))) in
  let x211 := Z.add_with_get_carry((2^64), (x210₂, (x206₁, 0))) in
  let x212 := Z.add_with_get_carry((2^64), (x211₂, (x207₁, 0))) in
  let x213 := Z.add_with_get_carry((2^64), (x212₂, (x208₁, 0))) in
  let x214 := Z.add_with_get_carry((2^64), (0, (x209₁, 0))) in
  let x215 := Z.add_with_get_carry((2^64), (x214₂, (x210₁, 0))) in
  let x216 := Z.add_with_get_carry((2^64), (x215₂, (x211₁, 0))) in
  let x217 := Z.add_with_get_carry((2^64), (x216₂, (x212₁, 0))) in
  let x218 := Z.add_with_get_carry((2^64), (x217₂, (x213₁, 0))) in
  let x219 := Z.add_with_get_carry((2^64), (0, (x214₁, 0))) in
  let x220 := Z.add_with_get_carry((2^64), (x219₂, (x215₁, x146))) in
  let x221 := Z.add_with_get_carry((2^64), (x220₂, (x216₁, x144))) in
  let x222 := Z.add_with_get_carry((2^64), (x221₂, (x217₁, x142))) in
  let x223 := Z.add_with_get_carry((2^64), (x222₂, (x218₁, 0))) in
  let x224 := Z.add_with_get_carry((2^64), (0, (x130₁, x219₁))) in
  let x225 := Z.add_with_get_carry((2^64), (x224₂, (x131₁, x220₁))) in
  let x226 := Z.add_with_get_carry((2^64), (x225₂, (x132₁, x221₁))) in
  let x227 := Z.add_with_get_carry((2^64), (x226₂, (x133₁, x222₁))) in
  let x228 := Z.add_with_get_carry((2^64), (x227₂, (x134₁, x223₁))) in
  let x229 := Z.add_with_get_carry((2^64), (x228₂, (x135, 0))) in
  let x230 := Z.mul_split((2^64), (0, x2[3])) in
  let x231 := Z.mul_split((2^64), (0, x2[2])) in
  let x232 := Z.mul_split((2^64), (0, x2[1])) in
  let x233 := Z.mul_split((2^64), (0, x2[0])) in
  let x234 := Z.mul_split((2^64), (0, x2[3])) in
  let x235 := Z.mul_split((2^64), (0, x2[2])) in
  let x236 := Z.mul_split((2^64), (0, x2[1])) in
  let x237 := Z.mul_split((2^64), (0, x2[0])) in
  let x238 := Z.mul_split((2^64), (0, x2[3])) in
  let x239 := Z.mul_split((2^64), (0, x2[2])) in
  let x240 := Z.mul_split((2^64), (0, x2[1])) in
  let x241 := Z.mul_split((2^64), (0, x2[0])) in
  let x242 := Z.mul_split((2^64), (x3, x2[3])) in
  let x243 := Z.mul_split((2^64), (x3, x2[2])) in
  let x244 := Z.mul_split((2^64), (x3, x2[1])) in
  let x245 := Z.mul_split((2^64), (x3, x2[0])) in
  let x246 := 2^192 * x230₂ in
  let x247 := 2^128 * x230₁ in
  let x248 := 2^128 * x231₂ in
  let x249 := 2^64 * x231₁ in
  let x250 := 2^64 * x232₂ in
  let x251 := 1 * x232₁ in
  let x252 := 1 * x233₂ in
  let x253 := 1 * x233₁ in
  let x254 := 2^128 * x234₂ in
  let x255 := 2^64 * x234₁ in
  let x256 := 2^64 * x235₂ in
  let x257 := 1 * x235₁ in
  let x258 := 1 * x236₂ in
  let x259 := 1 * x236₁ in
  let x260 := 1 * x237₂ in
  let x261 := 1 * x237₁ in
  let x262 := 2^64 * x238₂ in
  let x263 := 1 * x238₁ in
  let x264 := 1 * x239₂ in
  let x265 := 1 * x239₁ in
  let x266 := 1 * x240₂ in
  let x267 := 1 * x240₁ in
  let x268 := 1 * x241₂ in
  let x269 := 1 * x241₁ in
  let x270 := 1 * x242₂ in
  let x271 := 1 * x242₁ in
  let x272 := 1 * x243₂ in
  let x273 := 1 * x243₁ in
  let x274 := 1 * x244₂ in
  let x275 := 1 * x244₁ in
  let x276 := 1 * x245₂ in
  let x277 := 1 * x245₁ in
  let x278 := Z.add_with_get_carry((2^64), (0, (x277, 0))) in
  let x279 := Z.add_with_get_carry((2^64), (x278₂, (x276, 0))) in
  let x280 := Z.add_with_get_carry((2^64), (x279₂, (x274, 0))) in
  let x281 := Z.add_with_get_carry((2^64), (x280₂, (x272, 0))) in
  let x282 := Z.add_with_get_carry((2^64), (x281₂, (x270, x246))) in
  let x283 := Z.add_with_get_carry((2^64), (0, (x278₁, 0))) in
  let x284 := Z.add_with_get_carry((2^64), (x283₂, (x279₁, 0))) in
  let x285 := Z.add_with_get_carry((2^64), (x284₂, (x280₁, 0))) in
  let x286 := Z.add_with_get_carry((2^64), (x285₂, (x281₁, 0))) in
  let x287 := Z.add_with_get_carry((2^64), (x286₂, (x282₁, x247))) in
  let x288 := Z.add_with_get_carry((2^64), (0, (x283₁, 0))) in
  let x289 := Z.add_with_get_carry((2^64), (x288₂, (x284₁, 0))) in
  let x290 := Z.add_with_get_carry((2^64), (x289₂, (x285₁, 0))) in
  let x291 := Z.add_with_get_carry((2^64), (x290₂, (x286₁, 0))) in
  let x292 := Z.add_with_get_carry((2^64), (x291₂, (x287₁, x248))) in
  let x293 := Z.add_with_get_carry((2^64), (0, (x288₁, 0))) in
  let x294 := Z.add_with_get_carry((2^64), (x293₂, (x289₁, 0))) in
  let x295 := Z.add_with_get_carry((2^64), (x294₂, (x290₁, 0))) in
  let x296 := Z.add_with_get_carry((2^64), (x295₂, (x291₁, 0))) in
  let x297 := Z.add_with_get_carry((2^64), (x296₂, (x292₁, x249))) in
  let x298 := Z.add_with_get_carry((2^64), (0, (x293₁, 0))) in
  let x299 := Z.add_with_get_carry((2^64), (x298₂, (x294₁, 0))) in
  let x300 := Z.add_with_get_carry((2^64), (x299₂, (x295₁, 0))) in
  let x301 := Z.add_with_get_carry((2^64), (x300₂, (x296₁, 0))) in
  let x302 := Z.add_with_get_carry((2^64), (x301₂, (x297₁, x250))) in
  let x303 := Z.add_with_get_carry((2^64), (0, (x298₁, 0))) in
  let x304 := Z.add_with_get_carry((2^64), (x303₂, (x299₁, 0))) in
  let x305 := Z.add_with_get_carry((2^64), (x304₂, (x300₁, 0))) in
  let x306 := Z.add_with_get_carry((2^64), (x305₂, (x301₁, 0))) in
  let x307 := Z.add_with_get_carry((2^64), (x306₂, (x302₁, x251))) in
  let x308 := Z.add_with_get_carry((2^64), (0, (x303₁, 0))) in
  let x309 := Z.add_with_get_carry((2^64), (x308₂, (x304₁, 0))) in
  let x310 := Z.add_with_get_carry((2^64), (x309₂, (x305₁, 0))) in
  let x311 := Z.add_with_get_carry((2^64), (x310₂, (x306₁, 0))) in
  let x312 := Z.add_with_get_carry((2^64), (x311₂, (x307₁, x252))) in
  let x313 := Z.add_with_get_carry((2^64), (0, (x308₁, 0))) in
  let x314 := Z.add_with_get_carry((2^64), (x313₂, (x309₁, 0))) in
  let x315 := Z.add_with_get_carry((2^64), (x314₂, (x310₁, 0))) in
  let x316 := Z.add_with_get_carry((2^64), (x315₂, (x311₁, 0))) in
  let x317 := Z.add_with_get_carry((2^64), (x316₂, (x312₁, x254))) in
  let x318 := Z.add_with_get_carry((2^64), (0, (x313₁, 0))) in
  let x319 := Z.add_with_get_carry((2^64), (x318₂, (x314₁, 0))) in
  let x320 := Z.add_with_get_carry((2^64), (x319₂, (x315₁, 0))) in
  let x321 := Z.add_with_get_carry((2^64), (x320₂, (x316₁, 0))) in
  let x322 := Z.add_with_get_carry((2^64), (x321₂, (x317₁, x255))) in
  let x323 := Z.add_with_get_carry((2^64), (0, (x318₁, 0))) in
  let x324 := Z.add_with_get_carry((2^64), (x323₂, (x319₁, 0))) in
  let x325 := Z.add_with_get_carry((2^64), (x324₂, (x320₁, 0))) in
  let x326 := Z.add_with_get_carry((2^64), (x325₂, (x321₁, x253))) in
  let x327 := Z.add_with_get_carry((2^64), (x326₂, (x322₁, x256))) in
  let x328 := Z.add_with_get_carry((2^64), (0, (x323₁, 0))) in
  let x329 := Z.add_with_get_carry((2^64), (x328₂, (x324₁, 0))) in
  let x330 := Z.add_with_get_carry((2^64), (x329₂, (x325₁, 0))) in
  let x331 := Z.add_with_get_carry((2^64), (x330₂, (x326₁, x259))) in
  let x332 := Z.add_with_get_carry((2^64), (x331₂, (x327₁, x257))) in
  let x333 := Z.add_with_get_carry((2^64), (0, (x328₁, 0))) in
  let x334 := Z.add_with_get_carry((2^64), (x333₂, (x329₁, 0))) in
  let x335 := Z.add_with_get_carry((2^64), (x334₂, (x330₁, x261))) in
  let x336 := Z.add_with_get_carry((2^64), (x335₂, (x331₁, x260))) in
  let x337 := Z.add_with_get_carry((2^64), (x336₂, (x332₁, x258))) in
  let x338 := Z.add_with_get_carry((2^64), (0, (x333₁, 0))) in
  let x339 := Z.add_with_get_carry((2^64), (x338₂, (x334₁, 0))) in
  let x340 := Z.add_with_get_carry((2^64), (x339₂, (x335₁, x267))) in
  let x341 := Z.add_with_get_carry((2^64), (x340₂, (x336₁, x265))) in
  let x342 := Z.add_with_get_carry((2^64), (x341₂, (x337₁, x262))) in
  let x343 := Z.add_with_get_carry((2^64), (0, (x338₁, 0))) in
  let x344 := Z.add_with_get_carry((2^64), (x343₂, (x339₁, x269))) in
  let x345 := Z.add_with_get_carry((2^64), (x344₂, (x340₁, x268))) in
  let x346 := Z.add_with_get_carry((2^64), (x345₂, (x341₁, x266))) in
  let x347 := Z.add_with_get_carry((2^64), (x346₂, (x342₁, x263))) in
  let x348 := Z.add_with_get_carry((2^64), (0, (x343₁, 0))) in
  let x349 := Z.add_with_get_carry((2^64), (x348₂, (x344₁, x275))) in
  let x350 := Z.add_with_get_carry((2^64), (x349₂, (x345₁, x273))) in
  let x351 := Z.add_with_get_carry((2^64), (x350₂, (x346₁, x271))) in
  let x352 := Z.add_with_get_carry((2^64), (x351₂, (x347₁, x264))) in
  let x353 := Z.add_with_get_carry((2^64), (0, (x225₁, x348₁))) in
  let x354 := Z.add_with_get_carry((2^64), (x353₂, (x226₁, x349₁))) in
  let x355 := Z.add_with_get_carry((2^64), (x354₂, (x227₁, x350₁))) in
  let x356 := Z.add_with_get_carry((2^64), (x355₂, (x228₁, x351₁))) in
  let x357 := Z.add_with_get_carry((2^64), (x356₂, (x229₁, x352₁))) in
  let x358 := 0 + x357₂ in
  let x359 := (Z.mul_split((2^64), (x353₁, 1)))₁ in
  let x360 := Z.mul_split((2^64), (x359, 0xffffffff00000001)) in
  let x361 := Z.mul_split((2^64), (x359, 0)) in
  let x362 := Z.mul_split((2^64), (x359, (2^32-1))) in
  let x363 := Z.mul_split((2^64), (x359, (2^64-1))) in
  let x364 := 1 * x360₂ in
  let x365 := 1 * x360₁ in
  let x366 := 1 * x361₂ in
  let x367 := 1 * x361₁ in
  let x368 := 1 * x362₂ in
  let x369 := 1 * x362₁ in
  let x370 := 1 * x363₂ in
  let x371 := 1 * x363₁ in
  let x372 := Z.add_with_get_carry((2^64), (0, (x371, 0))) in
  let x373 := Z.add_with_get_carry((2^64), (x372₂, (x370, 0))) in
  let x374 := Z.add_with_get_carry((2^64), (x373₂, (x368, 0))) in
  let x375 := Z.add_with_get_carry((2^64), (x374₂, (x366, 0))) in
  let x376 := Z.add_with_get_carry((2^64), (x375₂, (x364, 0))) in
  let x377 := Z.add_with_get_carry((2^64), (0, (x372₁, 0))) in
  let x378 := Z.add_with_get_carry((2^64), (x377₂, (x373₁, 0))) in
  let x379 := Z.add_with_get_carry((2^64), (x378₂, (x374₁, 0))) in
  let x380 := Z.add_with_get_carry((2^64), (x379₂, (x375₁, 0))) in
  let x381 := Z.add_with_get_carry((2^64), (x380₂, (x376₁, 0))) in
  let x382 := Z.add_with_get_carry((2^64), (0, (x377₁, 0))) in
  let x383 := Z.add_with_get_carry((2^64), (x382₂, (x378₁, 0))) in
  let x384 := Z.add_with_get_carry((2^64), (x383₂, (x379₁, 0))) in
  let x385 := Z.add_with_get_carry((2^64), (x384₂, (x380₁, 0))) in
  let x386 := Z.add_with_get_carry((2^64), (x385₂, (x381₁, 0))) in
  let x387 := Z.add_with_get_carry((2^64), (0, (x382₁, 0))) in
  let x388 := Z.add_with_get_carry((2^64), (x387₂, (x383₁, 0))) in
  let x389 := Z.add_with_get_carry((2^64), (x388₂, (x384₁, 0))) in
  let x390 := Z.add_with_get_carry((2^64), (x389₂, (x385₁, 0))) in
  let x391 := Z.add_with_get_carry((2^64), (x390₂, (x386₁, 0))) in
  let x392 := Z.add_with_get_carry((2^64), (0, (x387₁, 0))) in
  let x393 := Z.add_with_get_carry((2^64), (x392₂, (x388₁, 0))) in
  let x394 := Z.add_with_get_carry((2^64), (x393₂, (x389₁, 0))) in
  let x395 := Z.add_with_get_carry((2^64), (x394₂, (x390₁, 0))) in
  let x396 := Z.add_with_get_carry((2^64), (x395₂, (x391₁, 0))) in
  let x397 := Z.add_with_get_carry((2^64), (0, (x392₁, 0))) in
  let x398 := Z.add_with_get_carry((2^64), (x397₂, (x393₁, 0))) in
  let x399 := Z.add_with_get_carry((2^64), (x398₂, (x394₁, 0))) in
  let x400 := Z.add_with_get_carry((2^64), (x399₂, (x395₁, 0))) in
  let x401 := Z.add_with_get_carry((2^64), (x400₂, (x396₁, 0))) in
  let x402 := Z.add_with_get_carry((2^64), (0, (x397₁, 0))) in
  let x403 := Z.add_with_get_carry((2^64), (x402₂, (x398₁, 0))) in
  let x404 := Z.add_with_get_carry((2^64), (x403₂, (x399₁, 0))) in
  let x405 := Z.add_with_get_carry((2^64), (x404₂, (x400₁, 0))) in
  let x406 := Z.add_with_get_carry((2^64), (x405₂, (x401₁, 0))) in
  let x407 := Z.add_with_get_carry((2^64), (0, (x402₁, 0))) in
  let x408 := Z.add_with_get_carry((2^64), (x407₂, (x403₁, 0))) in
  let x409 := Z.add_with_get_carry((2^64), (x408₂, (x404₁, 0))) in
  let x410 := Z.add_with_get_carry((2^64), (x409₂, (x405₁, 0))) in
  let x411 := Z.add_with_get_carry((2^64), (x410₂, (x406₁, 0))) in
  let x412 := Z.add_with_get_carry((2^64), (0, (x407₁, 0))) in
  let x413 := Z.add_with_get_carry((2^64), (x412₂, (x408₁, 0))) in
  let x414 := Z.add_with_get_carry((2^64), (x413₂, (x409₁, 0))) in
  let x415 := Z.add_with_get_carry((2^64), (x414₂, (x410₁, 0))) in
  let x416 := Z.add_with_get_carry((2^64), (x415₂, (x411₁, 0))) in
  let x417 := Z.add_with_get_carry((2^64), (0, (x412₁, 0))) in
  let x418 := Z.add_with_get_carry((2^64), (x417₂, (x413₁, 0))) in
  let x419 := Z.add_with_get_carry((2^64), (x418₂, (x414₁, 0))) in
  let x420 := Z.add_with_get_carry((2^64), (x419₂, (x415₁, 0))) in
  let x421 := Z.add_with_get_carry((2^64), (x420₂, (x416₁, 0))) in
  let x422 := Z.add_with_get_carry((2^64), (0, (x417₁, 0))) in
  let x423 := Z.add_with_get_carry((2^64), (x422₂, (x418₁, 0))) in
  let x424 := Z.add_with_get_carry((2^64), (x423₂, (x419₁, 0))) in
  let x425 := Z.add_with_get_carry((2^64), (x424₂, (x420₁, 0))) in
  let x426 := Z.add_with_get_carry((2^64), (x425₂, (x421₁, 0))) in
  let x427 := Z.add_with_get_carry((2^64), (0, (x422₁, 0))) in
  let x428 := Z.add_with_get_carry((2^64), (x427₂, (x423₁, 0))) in
  let x429 := Z.add_with_get_carry((2^64), (x428₂, (x424₁, 0))) in
  let x430 := Z.add_with_get_carry((2^64), (x429₂, (x425₁, 0))) in
  let x431 := Z.add_with_get_carry((2^64), (x430₂, (x426₁, 0))) in
  let x432 := Z.add_with_get_carry((2^64), (0, (x427₁, 0))) in
  let x433 := Z.add_with_get_carry((2^64), (x432₂, (x428₁, 0))) in
  let x434 := Z.add_with_get_carry((2^64), (x433₂, (x429₁, 0))) in
  let x435 := Z.add_with_get_carry((2^64), (x434₂, (x430₁, 0))) in
  let x436 := Z.add_with_get_carry((2^64), (x435₂, (x431₁, 0))) in
  let x437 := Z.add_with_get_carry((2^64), (0, (x432₁, 0))) in
  let x438 := Z.add_with_get_carry((2^64), (x437₂, (x433₁, 0))) in
  let x439 := Z.add_with_get_carry((2^64), (x438₂, (x434₁, 0))) in
  let x440 := Z.add_with_get_carry((2^64), (x439₂, (x435₁, 0))) in
  let x441 := Z.add_with_get_carry((2^64), (x440₂, (x436₁, 0))) in
  let x442 := Z.add_with_get_carry((2^64), (0, (x437₁, 0))) in
  let x443 := Z.add_with_get_carry((2^64), (x442₂, (x438₁, x369))) in
  let x444 := Z.add_with_get_carry((2^64), (x443₂, (x439₁, x367))) in
  let x445 := Z.add_with_get_carry((2^64), (x444₂, (x440₁, x365))) in
  let x446 := Z.add_with_get_carry((2^64), (x445₂, (x441₁, 0))) in
  let x447 := Z.add_with_get_carry((2^64), (0, (x353₁, x442₁))) in
  let x448 := Z.add_with_get_carry((2^64), (x447₂, (x354₁, x443₁))) in
  let x449 := Z.add_with_get_carry((2^64), (x448₂, (x355₁, x444₁))) in
  let x450 := Z.add_with_get_carry((2^64), (x449₂, (x356₁, x445₁))) in
  let x451 := Z.add_with_get_carry((2^64), (x450₂, (x357₁, x446₁))) in
  let x452 := Z.add_with_get_carry((2^64), (x451₂, (x358, 0))) in
  let x453 := Z.mul_split((2^64), (0, x2[3])) in
  let x454 := Z.mul_split((2^64), (0, x2[2])) in
  let x455 := Z.mul_split((2^64), (0, x2[1])) in
  let x456 := Z.mul_split((2^64), (0, x2[0])) in
  let x457 := Z.mul_split((2^64), (0, x2[3])) in
  let x458 := Z.mul_split((2^64), (0, x2[2])) in
  let x459 := Z.mul_split((2^64), (0, x2[1])) in
  let x460 := Z.mul_split((2^64), (0, x2[0])) in
  let x461 := Z.mul_split((2^64), (0, x2[3])) in
  let x462 := Z.mul_split((2^64), (0, x2[2])) in
  let x463 := Z.mul_split((2^64), (0, x2[1])) in
  let x464 := Z.mul_split((2^64), (0, x2[0])) in
  let x465 := Z.mul_split((2^64), (x4, x2[3])) in
  let x466 := Z.mul_split((2^64), (x4, x2[2])) in
  let x467 := Z.mul_split((2^64), (x4, x2[1])) in
  let x468 := Z.mul_split((2^64), (x4, x2[0])) in
  let x469 := 2^192 * x453₂ in
  let x470 := 2^128 * x453₁ in
  let x471 := 2^128 * x454₂ in
  let x472 := 2^64 * x454₁ in
  let x473 := 2^64 * x455₂ in
  let x474 := 1 * x455₁ in
  let x475 := 1 * x456₂ in
  let x476 := 1 * x456₁ in
  let x477 := 2^128 * x457₂ in
  let x478 := 2^64 * x457₁ in
  let x479 := 2^64 * x458₂ in
  let x480 := 1 * x458₁ in
  let x481 := 1 * x459₂ in
  let x482 := 1 * x459₁ in
  let x483 := 1 * x460₂ in
  let x484 := 1 * x460₁ in
  let x485 := 2^64 * x461₂ in
  let x486 := 1 * x461₁ in
  let x487 := 1 * x462₂ in
  let x488 := 1 * x462₁ in
  let x489 := 1 * x463₂ in
  let x490 := 1 * x463₁ in
  let x491 := 1 * x464₂ in
  let x492 := 1 * x464₁ in
  let x493 := 1 * x465₂ in
  let x494 := 1 * x465₁ in
  let x495 := 1 * x466₂ in
  let x496 := 1 * x466₁ in
  let x497 := 1 * x467₂ in
  let x498 := 1 * x467₁ in
  let x499 := 1 * x468₂ in
  let x500 := 1 * x468₁ in
  let x501 := Z.add_with_get_carry((2^64), (0, (x500, 0))) in
  let x502 := Z.add_with_get_carry((2^64), (x501₂, (x499, 0))) in
  let x503 := Z.add_with_get_carry((2^64), (x502₂, (x497, 0))) in
  let x504 := Z.add_with_get_carry((2^64), (x503₂, (x495, 0))) in
  let x505 := Z.add_with_get_carry((2^64), (x504₂, (x493, x469))) in
  let x506 := Z.add_with_get_carry((2^64), (0, (x501₁, 0))) in
  let x507 := Z.add_with_get_carry((2^64), (x506₂, (x502₁, 0))) in
  let x508 := Z.add_with_get_carry((2^64), (x507₂, (x503₁, 0))) in
  let x509 := Z.add_with_get_carry((2^64), (x508₂, (x504₁, 0))) in
  let x510 := Z.add_with_get_carry((2^64), (x509₂, (x505₁, x470))) in
  let x511 := Z.add_with_get_carry((2^64), (0, (x506₁, 0))) in
  let x512 := Z.add_with_get_carry((2^64), (x511₂, (x507₁, 0))) in
  let x513 := Z.add_with_get_carry((2^64), (x512₂, (x508₁, 0))) in
  let x514 := Z.add_with_get_carry((2^64), (x513₂, (x509₁, 0))) in
  let x515 := Z.add_with_get_carry((2^64), (x514₂, (x510₁, x471))) in
  let x516 := Z.add_with_get_carry((2^64), (0, (x511₁, 0))) in
  let x517 := Z.add_with_get_carry((2^64), (x516₂, (x512₁, 0))) in
  let x518 := Z.add_with_get_carry((2^64), (x517₂, (x513₁, 0))) in
  let x519 := Z.add_with_get_carry((2^64), (x518₂, (x514₁, 0))) in
  let x520 := Z.add_with_get_carry((2^64), (x519₂, (x515₁, x472))) in
  let x521 := Z.add_with_get_carry((2^64), (0, (x516₁, 0))) in
  let x522 := Z.add_with_get_carry((2^64), (x521₂, (x517₁, 0))) in
  let x523 := Z.add_with_get_carry((2^64), (x522₂, (x518₁, 0))) in
  let x524 := Z.add_with_get_carry((2^64), (x523₂, (x519₁, 0))) in
  let x525 := Z.add_with_get_carry((2^64), (x524₂, (x520₁, x473))) in
  let x526 := Z.add_with_get_carry((2^64), (0, (x521₁, 0))) in
  let x527 := Z.add_with_get_carry((2^64), (x526₂, (x522₁, 0))) in
  let x528 := Z.add_with_get_carry((2^64), (x527₂, (x523₁, 0))) in
  let x529 := Z.add_with_get_carry((2^64), (x528₂, (x524₁, 0))) in
  let x530 := Z.add_with_get_carry((2^64), (x529₂, (x525₁, x474))) in
  let x531 := Z.add_with_get_carry((2^64), (0, (x526₁, 0))) in
  let x532 := Z.add_with_get_carry((2^64), (x531₂, (x527₁, 0))) in
  let x533 := Z.add_with_get_carry((2^64), (x532₂, (x528₁, 0))) in
  let x534 := Z.add_with_get_carry((2^64), (x533₂, (x529₁, 0))) in
  let x535 := Z.add_with_get_carry((2^64), (x534₂, (x530₁, x475))) in
  let x536 := Z.add_with_get_carry((2^64), (0, (x531₁, 0))) in
  let x537 := Z.add_with_get_carry((2^64), (x536₂, (x532₁, 0))) in
  let x538 := Z.add_with_get_carry((2^64), (x537₂, (x533₁, 0))) in
  let x539 := Z.add_with_get_carry((2^64), (x538₂, (x534₁, 0))) in
  let x540 := Z.add_with_get_carry((2^64), (x539₂, (x535₁, x477))) in
  let x541 := Z.add_with_get_carry((2^64), (0, (x536₁, 0))) in
  let x542 := Z.add_with_get_carry((2^64), (x541₂, (x537₁, 0))) in
  let x543 := Z.add_with_get_carry((2^64), (x542₂, (x538₁, 0))) in
  let x544 := Z.add_with_get_carry((2^64), (x543₂, (x539₁, 0))) in
  let x545 := Z.add_with_get_carry((2^64), (x544₂, (x540₁, x478))) in
  let x546 := Z.add_with_get_carry((2^64), (0, (x541₁, 0))) in
  let x547 := Z.add_with_get_carry((2^64), (x546₂, (x542₁, 0))) in
  let x548 := Z.add_with_get_carry((2^64), (x547₂, (x543₁, 0))) in
  let x549 := Z.add_with_get_carry((2^64), (x548₂, (x544₁, x476))) in
  let x550 := Z.add_with_get_carry((2^64), (x549₂, (x545₁, x479))) in
  let x551 := Z.add_with_get_carry((2^64), (0, (x546₁, 0))) in
  let x552 := Z.add_with_get_carry((2^64), (x551₂, (x547₁, 0))) in
  let x553 := Z.add_with_get_carry((2^64), (x552₂, (x548₁, 0))) in
  let x554 := Z.add_with_get_carry((2^64), (x553₂, (x549₁, x482))) in
  let x555 := Z.add_with_get_carry((2^64), (x554₂, (x550₁, x480))) in
  let x556 := Z.add_with_get_carry((2^64), (0, (x551₁, 0))) in
  let x557 := Z.add_with_get_carry((2^64), (x556₂, (x552₁, 0))) in
  let x558 := Z.add_with_get_carry((2^64), (x557₂, (x553₁, x484))) in
  let x559 := Z.add_with_get_carry((2^64), (x558₂, (x554₁, x483))) in
  let x560 := Z.add_with_get_carry((2^64), (x559₂, (x555₁, x481))) in
  let x561 := Z.add_with_get_carry((2^64), (0, (x556₁, 0))) in
  let x562 := Z.add_with_get_carry((2^64), (x561₂, (x557₁, 0))) in
  let x563 := Z.add_with_get_carry((2^64), (x562₂, (x558₁, x490))) in
  let x564 := Z.add_with_get_carry((2^64), (x563₂, (x559₁, x488))) in
  let x565 := Z.add_with_get_carry((2^64), (x564₂, (x560₁, x485))) in
  let x566 := Z.add_with_get_carry((2^64), (0, (x561₁, 0))) in
  let x567 := Z.add_with_get_carry((2^64), (x566₂, (x562₁, x492))) in
  let x568 := Z.add_with_get_carry((2^64), (x567₂, (x563₁, x491))) in
  let x569 := Z.add_with_get_carry((2^64), (x568₂, (x564₁, x489))) in
  let x570 := Z.add_with_get_carry((2^64), (x569₂, (x565₁, x486))) in
  let x571 := Z.add_with_get_carry((2^64), (0, (x566₁, 0))) in
  let x572 := Z.add_with_get_carry((2^64), (x571₂, (x567₁, x498))) in
  let x573 := Z.add_with_get_carry((2^64), (x572₂, (x568₁, x496))) in
  let x574 := Z.add_with_get_carry((2^64), (x573₂, (x569₁, x494))) in
  let x575 := Z.add_with_get_carry((2^64), (x574₂, (x570₁, x487))) in
  let x576 := Z.add_with_get_carry((2^64), (0, (x448₁, x571₁))) in
  let x577 := Z.add_with_get_carry((2^64), (x576₂, (x449₁, x572₁))) in
  let x578 := Z.add_with_get_carry((2^64), (x577₂, (x450₁, x573₁))) in
  let x579 := Z.add_with_get_carry((2^64), (x578₂, (x451₁, x574₁))) in
  let x580 := Z.add_with_get_carry((2^64), (x579₂, (x452₁, x575₁))) in
  let x581 := 0 + x580₂ in
  let x582 := (Z.mul_split((2^64), (x576₁, 1)))₁ in
  let x583 := Z.mul_split((2^64), (x582, 0xffffffff00000001)) in
  let x584 := Z.mul_split((2^64), (x582, 0)) in
  let x585 := Z.mul_split((2^64), (x582, (2^32-1))) in
  let x586 := Z.mul_split((2^64), (x582, (2^64-1))) in
  let x587 := 1 * x583₂ in
  let x588 := 1 * x583₁ in
  let x589 := 1 * x584₂ in
  let x590 := 1 * x584₁ in
  let x591 := 1 * x585₂ in
  let x592 := 1 * x585₁ in
  let x593 := 1 * x586₂ in
  let x594 := 1 * x586₁ in
  let x595 := Z.add_with_get_carry((2^64), (0, (x594, 0))) in
  let x596 := Z.add_with_get_carry((2^64), (x595₂, (x593, 0))) in
  let x597 := Z.add_with_get_carry((2^64), (x596₂, (x591, 0))) in
  let x598 := Z.add_with_get_carry((2^64), (x597₂, (x589, 0))) in
  let x599 := Z.add_with_get_carry((2^64), (x598₂, (x587, 0))) in
  let x600 := Z.add_with_get_carry((2^64), (0, (x595₁, 0))) in
  let x601 := Z.add_with_get_carry((2^64), (x600₂, (x596₁, 0))) in
  let x602 := Z.add_with_get_carry((2^64), (x601₂, (x597₁, 0))) in
  let x603 := Z.add_with_get_carry((2^64), (x602₂, (x598₁, 0))) in
  let x604 := Z.add_with_get_carry((2^64), (x603₂, (x599₁, 0))) in
  let x605 := Z.add_with_get_carry((2^64), (0, (x600₁, 0))) in
  let x606 := Z.add_with_get_carry((2^64), (x605₂, (x601₁, 0))) in
  let x607 := Z.add_with_get_carry((2^64), (x606₂, (x602₁, 0))) in
  let x608 := Z.add_with_get_carry((2^64), (x607₂, (x603₁, 0))) in
  let x609 := Z.add_with_get_carry((2^64), (x608₂, (x604₁, 0))) in
  let x610 := Z.add_with_get_carry((2^64), (0, (x605₁, 0))) in
  let x611 := Z.add_with_get_carry((2^64), (x610₂, (x606₁, 0))) in
  let x612 := Z.add_with_get_carry((2^64), (x611₂, (x607₁, 0))) in
  let x613 := Z.add_with_get_carry((2^64), (x612₂, (x608₁, 0))) in
  let x614 := Z.add_with_get_carry((2^64), (x613₂, (x609₁, 0))) in
  let x615 := Z.add_with_get_carry((2^64), (0, (x610₁, 0))) in
  let x616 := Z.add_with_get_carry((2^64), (x615₂, (x611₁, 0))) in
  let x617 := Z.add_with_get_carry((2^64), (x616₂, (x612₁, 0))) in
  let x618 := Z.add_with_get_carry((2^64), (x617₂, (x613₁, 0))) in
  let x619 := Z.add_with_get_carry((2^64), (x618₂, (x614₁, 0))) in
  let x620 := Z.add_with_get_carry((2^64), (0, (x615₁, 0))) in
  let x621 := Z.add_with_get_carry((2^64), (x620₂, (x616₁, 0))) in
  let x622 := Z.add_with_get_carry((2^64), (x621₂, (x617₁, 0))) in
  let x623 := Z.add_with_get_carry((2^64), (x622₂, (x618₁, 0))) in
  let x624 := Z.add_with_get_carry((2^64), (x623₂, (x619₁, 0))) in
  let x625 := Z.add_with_get_carry((2^64), (0, (x620₁, 0))) in
  let x626 := Z.add_with_get_carry((2^64), (x625₂, (x621₁, 0))) in
  let x627 := Z.add_with_get_carry((2^64), (x626₂, (x622₁, 0))) in
  let x628 := Z.add_with_get_carry((2^64), (x627₂, (x623₁, 0))) in
  let x629 := Z.add_with_get_carry((2^64), (x628₂, (x624₁, 0))) in
  let x630 := Z.add_with_get_carry((2^64), (0, (x625₁, 0))) in
  let x631 := Z.add_with_get_carry((2^64), (x630₂, (x626₁, 0))) in
  let x632 := Z.add_with_get_carry((2^64), (x631₂, (x627₁, 0))) in
  let x633 := Z.add_with_get_carry((2^64), (x632₂, (x628₁, 0))) in
  let x634 := Z.add_with_get_carry((2^64), (x633₂, (x629₁, 0))) in
  let x635 := Z.add_with_get_carry((2^64), (0, (x630₁, 0))) in
  let x636 := Z.add_with_get_carry((2^64), (x635₂, (x631₁, 0))) in
  let x637 := Z.add_with_get_carry((2^64), (x636₂, (x632₁, 0))) in
  let x638 := Z.add_with_get_carry((2^64), (x637₂, (x633₁, 0))) in
  let x639 := Z.add_with_get_carry((2^64), (x638₂, (x634₁, 0))) in
  let x640 := Z.add_with_get_carry((2^64), (0, (x635₁, 0))) in
  let x641 := Z.add_with_get_carry((2^64), (x640₂, (x636₁, 0))) in
  let x642 := Z.add_with_get_carry((2^64), (x641₂, (x637₁, 0))) in
  let x643 := Z.add_with_get_carry((2^64), (x642₂, (x638₁, 0))) in
  let x644 := Z.add_with_get_carry((2^64), (x643₂, (x639₁, 0))) in
  let x645 := Z.add_with_get_carry((2^64), (0, (x640₁, 0))) in
  let x646 := Z.add_with_get_carry((2^64), (x645₂, (x641₁, 0))) in
  let x647 := Z.add_with_get_carry((2^64), (x646₂, (x642₁, 0))) in
  let x648 := Z.add_with_get_carry((2^64), (x647₂, (x643₁, 0))) in
  let x649 := Z.add_with_get_carry((2^64), (x648₂, (x644₁, 0))) in
  let x650 := Z.add_with_get_carry((2^64), (0, (x645₁, 0))) in
  let x651 := Z.add_with_get_carry((2^64), (x650₂, (x646₁, 0))) in
  let x652 := Z.add_with_get_carry((2^64), (x651₂, (x647₁, 0))) in
  let x653 := Z.add_with_get_carry((2^64), (x652₂, (x648₁, 0))) in
  let x654 := Z.add_with_get_carry((2^64), (x653₂, (x649₁, 0))) in
  let x655 := Z.add_with_get_carry((2^64), (0, (x650₁, 0))) in
  let x656 := Z.add_with_get_carry((2^64), (x655₂, (x651₁, 0))) in
  let x657 := Z.add_with_get_carry((2^64), (x656₂, (x652₁, 0))) in
  let x658 := Z.add_with_get_carry((2^64), (x657₂, (x653₁, 0))) in
  let x659 := Z.add_with_get_carry((2^64), (x658₂, (x654₁, 0))) in
  let x660 := Z.add_with_get_carry((2^64), (0, (x655₁, 0))) in
  let x661 := Z.add_with_get_carry((2^64), (x660₂, (x656₁, 0))) in
  let x662 := Z.add_with_get_carry((2^64), (x661₂, (x657₁, 0))) in
  let x663 := Z.add_with_get_carry((2^64), (x662₂, (x658₁, 0))) in
  let x664 := Z.add_with_get_carry((2^64), (x663₂, (x659₁, 0))) in
  let x665 := Z.add_with_get_carry((2^64), (0, (x660₁, 0))) in
  let x666 := Z.add_with_get_carry((2^64), (x665₂, (x661₁, x592))) in
  let x667 := Z.add_with_get_carry((2^64), (x666₂, (x662₁, x590))) in
  let x668 := Z.add_with_get_carry((2^64), (x667₂, (x663₁, x588))) in
  let x669 := Z.add_with_get_carry((2^64), (x668₂, (x664₁, 0))) in
  let x670 := Z.add_with_get_carry((2^64), (0, (x576₁, x665₁))) in
  let x671 := Z.add_with_get_carry((2^64), (x670₂, (x577₁, x666₁))) in
  let x672 := Z.add_with_get_carry((2^64), (x671₂, (x578₁, x667₁))) in
  let x673 := Z.add_with_get_carry((2^64), (x672₂, (x579₁, x668₁))) in
  let x674 := Z.add_with_get_carry((2^64), (x673₂, (x580₁, x669₁))) in
  let x675 := Z.add_with_get_carry((2^64), (x674₂, (x581, 0))) in
  let x676 := Z.mul_split((2^64), (0, x2[3])) in
  let x677 := Z.mul_split((2^64), (0, x2[2])) in
  let x678 := Z.mul_split((2^64), (0, x2[1])) in
  let x679 := Z.mul_split((2^64), (0, x2[0])) in
  let x680 := Z.mul_split((2^64), (0, x2[3])) in
  let x681 := Z.mul_split((2^64), (0, x2[2])) in
  let x682 := Z.mul_split((2^64), (0, x2[1])) in
  let x683 := Z.mul_split((2^64), (0, x2[0])) in
  let x684 := Z.mul_split((2^64), (0, x2[3])) in
  let x685 := Z.mul_split((2^64), (0, x2[2])) in
  let x686 := Z.mul_split((2^64), (0, x2[1])) in
  let x687 := Z.mul_split((2^64), (0, x2[0])) in
  let x688 := Z.mul_split((2^64), (x5, x2[3])) in
  let x689 := Z.mul_split((2^64), (x5, x2[2])) in
  let x690 := Z.mul_split((2^64), (x5, x2[1])) in
  let x691 := Z.mul_split((2^64), (x5, x2[0])) in
  let x692 := 2^192 * x676₂ in
  let x693 := 2^128 * x676₁ in
  let x694 := 2^128 * x677₂ in
  let x695 := 2^64 * x677₁ in
  let x696 := 2^64 * x678₂ in
  let x697 := 1 * x678₁ in
  let x698 := 1 * x679₂ in
  let x699 := 1 * x679₁ in
  let x700 := 2^128 * x680₂ in
  let x701 := 2^64 * x680₁ in
  let x702 := 2^64 * x681₂ in
  let x703 := 1 * x681₁ in
  let x704 := 1 * x682₂ in
  let x705 := 1 * x682₁ in
  let x706 := 1 * x683₂ in
  let x707 := 1 * x683₁ in
  let x708 := 2^64 * x684₂ in
  let x709 := 1 * x684₁ in
  let x710 := 1 * x685₂ in
  let x711 := 1 * x685₁ in
  let x712 := 1 * x686₂ in
  let x713 := 1 * x686₁ in
  let x714 := 1 * x687₂ in
  let x715 := 1 * x687₁ in
  let x716 := 1 * x688₂ in
  let x717 := 1 * x688₁ in
  let x718 := 1 * x689₂ in
  let x719 := 1 * x689₁ in
  let x720 := 1 * x690₂ in
  let x721 := 1 * x690₁ in
  let x722 := 1 * x691₂ in
  let x723 := 1 * x691₁ in
  let x724 := Z.add_with_get_carry((2^64), (0, (x723, 0))) in
  let x725 := Z.add_with_get_carry((2^64), (x724₂, (x722, 0))) in
  let x726 := Z.add_with_get_carry((2^64), (x725₂, (x720, 0))) in
  let x727 := Z.add_with_get_carry((2^64), (x726₂, (x718, 0))) in
  let x728 := Z.add_with_get_carry((2^64), (x727₂, (x716, x692))) in
  let x729 := Z.add_with_get_carry((2^64), (0, (x724₁, 0))) in
  let x730 := Z.add_with_get_carry((2^64), (x729₂, (x725₁, 0))) in
  let x731 := Z.add_with_get_carry((2^64), (x730₂, (x726₁, 0))) in
  let x732 := Z.add_with_get_carry((2^64), (x731₂, (x727₁, 0))) in
  let x733 := Z.add_with_get_carry((2^64), (x732₂, (x728₁, x693))) in
  let x734 := Z.add_with_get_carry((2^64), (0, (x729₁, 0))) in
  let x735 := Z.add_with_get_carry((2^64), (x734₂, (x730₁, 0))) in
  let x736 := Z.add_with_get_carry((2^64), (x735₂, (x731₁, 0))) in
  let x737 := Z.add_with_get_carry((2^64), (x736₂, (x732₁, 0))) in
  let x738 := Z.add_with_get_carry((2^64), (x737₂, (x733₁, x694))) in
  let x739 := Z.add_with_get_carry((2^64), (0, (x734₁, 0))) in
  let x740 := Z.add_with_get_carry((2^64), (x739₂, (x735₁, 0))) in
  let x741 := Z.add_with_get_carry((2^64), (x740₂, (x736₁, 0))) in
  let x742 := Z.add_with_get_carry((2^64), (x741₂, (x737₁, 0))) in
  let x743 := Z.add_with_get_carry((2^64), (x742₂, (x738₁, x695))) in
  let x744 := Z.add_with_get_carry((2^64), (0, (x739₁, 0))) in
  let x745 := Z.add_with_get_carry((2^64), (x744₂, (x740₁, 0))) in
  let x746 := Z.add_with_get_carry((2^64), (x745₂, (x741₁, 0))) in
  let x747 := Z.add_with_get_carry((2^64), (x746₂, (x742₁, 0))) in
  let x748 := Z.add_with_get_carry((2^64), (x747₂, (x743₁, x696))) in
  let x749 := Z.add_with_get_carry((2^64), (0, (x744₁, 0))) in
  let x750 := Z.add_with_get_carry((2^64), (x749₂, (x745₁, 0))) in
  let x751 := Z.add_with_get_carry((2^64), (x750₂, (x746₁, 0))) in
  let x752 := Z.add_with_get_carry((2^64), (x751₂, (x747₁, 0))) in
  let x753 := Z.add_with_get_carry((2^64), (x752₂, (x748₁, x697))) in
  let x754 := Z.add_with_get_carry((2^64), (0, (x749₁, 0))) in
  let x755 := Z.add_with_get_carry((2^64), (x754₂, (x750₁, 0))) in
  let x756 := Z.add_with_get_carry((2^64), (x755₂, (x751₁, 0))) in
  let x757 := Z.add_with_get_carry((2^64), (x756₂, (x752₁, 0))) in
  let x758 := Z.add_with_get_carry((2^64), (x757₂, (x753₁, x698))) in
  let x759 := Z.add_with_get_carry((2^64), (0, (x754₁, 0))) in
  let x760 := Z.add_with_get_carry((2^64), (x759₂, (x755₁, 0))) in
  let x761 := Z.add_with_get_carry((2^64), (x760₂, (x756₁, 0))) in
  let x762 := Z.add_with_get_carry((2^64), (x761₂, (x757₁, 0))) in
  let x763 := Z.add_with_get_carry((2^64), (x762₂, (x758₁, x700))) in
  let x764 := Z.add_with_get_carry((2^64), (0, (x759₁, 0))) in
  let x765 := Z.add_with_get_carry((2^64), (x764₂, (x760₁, 0))) in
  let x766 := Z.add_with_get_carry((2^64), (x765₂, (x761₁, 0))) in
  let x767 := Z.add_with_get_carry((2^64), (x766₂, (x762₁, 0))) in
  let x768 := Z.add_with_get_carry((2^64), (x767₂, (x763₁, x701))) in
  let x769 := Z.add_with_get_carry((2^64), (0, (x764₁, 0))) in
  let x770 := Z.add_with_get_carry((2^64), (x769₂, (x765₁, 0))) in
  let x771 := Z.add_with_get_carry((2^64), (x770₂, (x766₁, 0))) in
  let x772 := Z.add_with_get_carry((2^64), (x771₂, (x767₁, x699))) in
  let x773 := Z.add_with_get_carry((2^64), (x772₂, (x768₁, x702))) in
  let x774 := Z.add_with_get_carry((2^64), (0, (x769₁, 0))) in
  let x775 := Z.add_with_get_carry((2^64), (x774₂, (x770₁, 0))) in
  let x776 := Z.add_with_get_carry((2^64), (x775₂, (x771₁, 0))) in
  let x777 := Z.add_with_get_carry((2^64), (x776₂, (x772₁, x705))) in
  let x778 := Z.add_with_get_carry((2^64), (x777₂, (x773₁, x703))) in
  let x779 := Z.add_with_get_carry((2^64), (0, (x774₁, 0))) in
  let x780 := Z.add_with_get_carry((2^64), (x779₂, (x775₁, 0))) in
  let x781 := Z.add_with_get_carry((2^64), (x780₂, (x776₁, x707))) in
  let x782 := Z.add_with_get_carry((2^64), (x781₂, (x777₁, x706))) in
  let x783 := Z.add_with_get_carry((2^64), (x782₂, (x778₁, x704))) in
  let x784 := Z.add_with_get_carry((2^64), (0, (x779₁, 0))) in
  let x785 := Z.add_with_get_carry((2^64), (x784₂, (x780₁, 0))) in
  let x786 := Z.add_with_get_carry((2^64), (x785₂, (x781₁, x713))) in
  let x787 := Z.add_with_get_carry((2^64), (x786₂, (x782₁, x711))) in
  let x788 := Z.add_with_get_carry((2^64), (x787₂, (x783₁, x708))) in
  let x789 := Z.add_with_get_carry((2^64), (0, (x784₁, 0))) in
  let x790 := Z.add_with_get_carry((2^64), (x789₂, (x785₁, x715))) in
  let x791 := Z.add_with_get_carry((2^64), (x790₂, (x786₁, x714))) in
  let x792 := Z.add_with_get_carry((2^64), (x791₂, (x787₁, x712))) in
  let x793 := Z.add_with_get_carry((2^64), (x792₂, (x788₁, x709))) in
  let x794 := Z.add_with_get_carry((2^64), (0, (x789₁, 0))) in
  let x795 := Z.add_with_get_carry((2^64), (x794₂, (x790₁, x721))) in
  let x796 := Z.add_with_get_carry((2^64), (x795₂, (x791₁, x719))) in
  let x797 := Z.add_with_get_carry((2^64), (x796₂, (x792₁, x717))) in
  let x798 := Z.add_with_get_carry((2^64), (x797₂, (x793₁, x710))) in
  let x799 := Z.add_with_get_carry((2^64), (0, (x671₁, x794₁))) in
  let x800 := Z.add_with_get_carry((2^64), (x799₂, (x672₁, x795₁))) in
  let x801 := Z.add_with_get_carry((2^64), (x800₂, (x673₁, x796₁))) in
  let x802 := Z.add_with_get_carry((2^64), (x801₂, (x674₁, x797₁))) in
  let x803 := Z.add_with_get_carry((2^64), (x802₂, (x675₁, x798₁))) in
  let x804 := 0 + x803₂ in
  let x805 := (Z.mul_split((2^64), (x799₁, 1)))₁ in
  let x806 := Z.mul_split((2^64), (x805, 0xffffffff00000001)) in
  let x807 := Z.mul_split((2^64), (x805, 0)) in
  let x808 := Z.mul_split((2^64), (x805, (2^32-1))) in
  let x809 := Z.mul_split((2^64), (x805, (2^64-1))) in
  let x810 := 1 * x806₂ in
  let x811 := 1 * x806₁ in
  let x812 := 1 * x807₂ in
  let x813 := 1 * x807₁ in
  let x814 := 1 * x808₂ in
  let x815 := 1 * x808₁ in
  let x816 := 1 * x809₂ in
  let x817 := 1 * x809₁ in
  let x818 := Z.add_with_get_carry((2^64), (0, (x817, 0))) in
  let x819 := Z.add_with_get_carry((2^64), (x818₂, (x816, 0))) in
  let x820 := Z.add_with_get_carry((2^64), (x819₂, (x814, 0))) in
  let x821 := Z.add_with_get_carry((2^64), (x820₂, (x812, 0))) in
  let x822 := Z.add_with_get_carry((2^64), (x821₂, (x810, 0))) in
  let x823 := Z.add_with_get_carry((2^64), (0, (x818₁, 0))) in
  let x824 := Z.add_with_get_carry((2^64), (x823₂, (x819₁, 0))) in
  let x825 := Z.add_with_get_carry((2^64), (x824₂, (x820₁, 0))) in
  let x826 := Z.add_with_get_carry((2^64), (x825₂, (x821₁, 0))) in
  let x827 := Z.add_with_get_carry((2^64), (x826₂, (x822₁, 0))) in
  let x828 := Z.add_with_get_carry((2^64), (0, (x823₁, 0))) in
  let x829 := Z.add_with_get_carry((2^64), (x828₂, (x824₁, 0))) in
  let x830 := Z.add_with_get_carry((2^64), (x829₂, (x825₁, 0))) in
  let x831 := Z.add_with_get_carry((2^64), (x830₂, (x826₁, 0))) in
  let x832 := Z.add_with_get_carry((2^64), (x831₂, (x827₁, 0))) in
  let x833 := Z.add_with_get_carry((2^64), (0, (x828₁, 0))) in
  let x834 := Z.add_with_get_carry((2^64), (x833₂, (x829₁, 0))) in
  let x835 := Z.add_with_get_carry((2^64), (x834₂, (x830₁, 0))) in
  let x836 := Z.add_with_get_carry((2^64), (x835₂, (x831₁, 0))) in
  let x837 := Z.add_with_get_carry((2^64), (x836₂, (x832₁, 0))) in
  let x838 := Z.add_with_get_carry((2^64), (0, (x833₁, 0))) in
  let x839 := Z.add_with_get_carry((2^64), (x838₂, (x834₁, 0))) in
  let x840 := Z.add_with_get_carry((2^64), (x839₂, (x835₁, 0))) in
  let x841 := Z.add_with_get_carry((2^64), (x840₂, (x836₁, 0))) in
  let x842 := Z.add_with_get_carry((2^64), (x841₂, (x837₁, 0))) in
  let x843 := Z.add_with_get_carry((2^64), (0, (x838₁, 0))) in
  let x844 := Z.add_with_get_carry((2^64), (x843₂, (x839₁, 0))) in
  let x845 := Z.add_with_get_carry((2^64), (x844₂, (x840₁, 0))) in
  let x846 := Z.add_with_get_carry((2^64), (x845₂, (x841₁, 0))) in
  let x847 := Z.add_with_get_carry((2^64), (x846₂, (x842₁, 0))) in
  let x848 := Z.add_with_get_carry((2^64), (0, (x843₁, 0))) in
  let x849 := Z.add_with_get_carry((2^64), (x848₂, (x844₁, 0))) in
  let x850 := Z.add_with_get_carry((2^64), (x849₂, (x845₁, 0))) in
  let x851 := Z.add_with_get_carry((2^64), (x850₂, (x846₁, 0))) in
  let x852 := Z.add_with_get_carry((2^64), (x851₂, (x847₁, 0))) in
  let x853 := Z.add_with_get_carry((2^64), (0, (x848₁, 0))) in
  let x854 := Z.add_with_get_carry((2^64), (x853₂, (x849₁, 0))) in
  let x855 := Z.add_with_get_carry((2^64), (x854₂, (x850₁, 0))) in
  let x856 := Z.add_with_get_carry((2^64), (x855₂, (x851₁, 0))) in
  let x857 := Z.add_with_get_carry((2^64), (x856₂, (x852₁, 0))) in
  let x858 := Z.add_with_get_carry((2^64), (0, (x853₁, 0))) in
  let x859 := Z.add_with_get_carry((2^64), (x858₂, (x854₁, 0))) in
  let x860 := Z.add_with_get_carry((2^64), (x859₂, (x855₁, 0))) in
  let x861 := Z.add_with_get_carry((2^64), (x860₂, (x856₁, 0))) in
  let x862 := Z.add_with_get_carry((2^64), (x861₂, (x857₁, 0))) in
  let x863 := Z.add_with_get_carry((2^64), (0, (x858₁, 0))) in
  let x864 := Z.add_with_get_carry((2^64), (x863₂, (x859₁, 0))) in
  let x865 := Z.add_with_get_carry((2^64), (x864₂, (x860₁, 0))) in
  let x866 := Z.add_with_get_carry((2^64), (x865₂, (x861₁, 0))) in
  let x867 := Z.add_with_get_carry((2^64), (x866₂, (x862₁, 0))) in
  let x868 := Z.add_with_get_carry((2^64), (0, (x863₁, 0))) in
  let x869 := Z.add_with_get_carry((2^64), (x868₂, (x864₁, 0))) in
  let x870 := Z.add_with_get_carry((2^64), (x869₂, (x865₁, 0))) in
  let x871 := Z.add_with_get_carry((2^64), (x870₂, (x866₁, 0))) in
  let x872 := Z.add_with_get_carry((2^64), (x871₂, (x867₁, 0))) in
  let x873 := Z.add_with_get_carry((2^64), (0, (x868₁, 0))) in
  let x874 := Z.add_with_get_carry((2^64), (x873₂, (x869₁, 0))) in
  let x875 := Z.add_with_get_carry((2^64), (x874₂, (x870₁, 0))) in
  let x876 := Z.add_with_get_carry((2^64), (x875₂, (x871₁, 0))) in
  let x877 := Z.add_with_get_carry((2^64), (x876₂, (x872₁, 0))) in
  let x878 := Z.add_with_get_carry((2^64), (0, (x873₁, 0))) in
  let x879 := Z.add_with_get_carry((2^64), (x878₂, (x874₁, 0))) in
  let x880 := Z.add_with_get_carry((2^64), (x879₂, (x875₁, 0))) in
  let x881 := Z.add_with_get_carry((2^64), (x880₂, (x876₁, 0))) in
  let x882 := Z.add_with_get_carry((2^64), (x881₂, (x877₁, 0))) in
  let x883 := Z.add_with_get_carry((2^64), (0, (x878₁, 0))) in
  let x884 := Z.add_with_get_carry((2^64), (x883₂, (x879₁, 0))) in
  let x885 := Z.add_with_get_carry((2^64), (x884₂, (x880₁, 0))) in
  let x886 := Z.add_with_get_carry((2^64), (x885₂, (x881₁, 0))) in
  let x887 := Z.add_with_get_carry((2^64), (x886₂, (x882₁, 0))) in
  let x888 := Z.add_with_get_carry((2^64), (0, (x883₁, 0))) in
  let x889 := Z.add_with_get_carry((2^64), (x888₂, (x884₁, x815))) in
  let x890 := Z.add_with_get_carry((2^64), (x889₂, (x885₁, x813))) in
  let x891 := Z.add_with_get_carry((2^64), (x890₂, (x886₁, x811))) in
  let x892 := Z.add_with_get_carry((2^64), (x891₂, (x887₁, 0))) in
  let x893 := Z.add_with_get_carry((2^64), (0, (x799₁, x888₁))) in
  let x894 := Z.add_with_get_carry((2^64), (x893₂, (x800₁, x889₁))) in
  let x895 := Z.add_with_get_carry((2^64), (x894₂, (x801₁, x890₁))) in
  let x896 := Z.add_with_get_carry((2^64), (x895₂, (x802₁, x891₁))) in
  let x897 := Z.add_with_get_carry((2^64), (x896₂, (x803₁, x892₁))) in
  let x898 := Z.add_with_get_carry((2^64), (x897₂, (x804, 0))) in
  let x899 := Z.add_with_get_carry((2^64), (0, (x894₁, (-(2^64-1))))) in
  let x900 := Z.add_with_get_carry((2^64), (x899₂, (x895₁, (-(2^32-1))))) in
  let x901 := Z.add_with_get_carry((2^64), (x900₂, (x896₁, 0))) in
  let x902 := Z.add_with_get_carry((2^64), (x901₂, (x897₁, (-0xffffffff00000001)))) in
  let x903 := Z.add_with_get_carry((2^64), (x902₂, (x898₁, 0))) in
  Z.zselect((-(0 + x903₂)), (x899₁, x894₁)) :: Z.zselect((-(0 + x903₂)), (x900₁, x895₁)) :: Z.zselect((-(0 + x903₂)), (x901₁, x896₁)) :: Z.zselect((-(0 + x903₂)), (x902₁, x897₁)) :: []
)

After rewriting RewriteUnfoldValueBarrier:
(λ x1 x2,
  let x3 := x1[1] in
  let x4 := x1[2] in
  let x5 := x1[3] in
  let x6 := x1[0] in
  let x7 := Z.mul_split((2^64), (0, x2[3])) in
  let x8 := Z.mul_split((2^64), (0, x2[2])) in
  let x9 := Z.mul_split((2^64), (0, x2[1])) in
  let x10 := Z.mul_split((2^64), (0, x2[0])) in
  let x11 := Z.mul_split((2^64), (0, x2[3])) in
  let x12 := Z.mul_split((2^64), (0, x2[2])) in
  let x13 := Z.mul_split((2^64), (0, x2[1])) in
  let x14 := Z.mul_split((2^64), (0, x2[0])) in
  let x15 := Z.mul_split((2^64), (0, x2[3])) in
  let x16 := Z.mul_split((2^64), (0, x2[2])) in
  let x17 := Z.mul_split((2^64), (0, x2[1])) in
  let x18 := Z.mul_split((2^64), (0, x2[0])) in
  let x19 := Z.mul_split((2^64), (x6, x2[3])) in
  let x20 := Z.mul_split((2^64), (x6, x2[2])) in
  let x21 := Z.mul_split((2^64), (x6, x2[1])) in
  let x22 := Z.mul_split((2^64), (x6, x2[0])) in
  let x23 := 2^192 * x7₂ in
  let x24 := 2^128 * x7₁ in
  let x25 := 2^128 * x8₂ in
  let x26 := 2^64 * x8₁ in
  let x27 := 2^64 * x9₂ in
  let x28 := 1 * x9₁ in
  let x29 := 1 * x10₂ in
  let x30 := 1 * x10₁ in
  let x31 := 2^128 * x11₂ in
  let x32 := 2^64 * x11₁ in
  let x33 := 2^64 * x12₂ in
  let x34 := 1 * x12₁ in
  let x35 := 1 * x13₂ in
  let x36 := 1 * x13₁ in
  let x37 := 1 * x14₂ in
  let x38 := 1 * x14₁ in
  let x39 := 2^64 * x15₂ in
  let x40 := 1 * x15₁ in
  let x41 := 1 * x16₂ in
  let x42 := 1 * x16₁ in
  let x43 := 1 * x17₂ in
  let x44 := 1 * x17₁ in
  let x45 := 1 * x18₂ in
  let x46 := 1 * x18₁ in
  let x47 := 1 * x19₂ in
  let x48 := 1 * x19₁ in
  let x49 := 1 * x20₂ in
  let x50 := 1 * x20₁ in
  let x51 := 1 * x21₂ in
  let x52 := 1 * x21₁ in
  let x53 := 1 * x22₂ in
  let x54 := 1 * x22₁ in
  let x55 := Z.add_with_get_carry((2^64), (0, (x54, 0))) in
  let x56 := Z.add_with_get_carry((2^64), (x55₂, (x53, 0))) in
  let x57 := Z.add_with_get_carry((2^64), (x56₂, (x51, 0))) in
  let x58 := Z.add_with_get_carry((2^64), (x57₂, (x49, 0))) in
  let x59 := Z.add_with_get_carry((2^64), (x58₂, (x47, x23))) in
  let x60 := Z.add_with_get_carry((2^64), (0, (x55₁, 0))) in
  let x61 := Z.add_with_get_carry((2^64), (x60₂, (x56₁, 0))) in
  let x62 := Z.add_with_get_carry((2^64), (x61₂, (x57₁, 0))) in
  let x63 := Z.add_with_get_carry((2^64), (x62₂, (x58₁, 0))) in
  let x64 := Z.add_with_get_carry((2^64), (x63₂, (x59₁, x24))) in
  let x65 := Z.add_with_get_carry((2^64), (0, (x60₁, 0))) in
  let x66 := Z.add_with_get_carry((2^64), (x65₂, (x61₁, 0))) in
  let x67 := Z.add_with_get_carry((2^64), (x66₂, (x62₁, 0))) in
  let x68 := Z.add_with_get_carry((2^64), (x67₂, (x63₁, 0))) in
  let x69 := Z.add_with_get_carry((2^64), (x68₂, (x64₁, x25))) in
  let x70 := Z.add_with_get_carry((2^64), (0, (x65₁, 0))) in
  let x71 := Z.add_with_get_carry((2^64), (x70₂, (x66₁, 0))) in
  let x72 := Z.add_with_get_carry((2^64), (x71₂, (x67₁, 0))) in
  let x73 := Z.add_with_get_carry((2^64), (x72₂, (x68₁, 0))) in
  let x74 := Z.add_with_get_carry((2^64), (x73₂, (x69₁, x26))) in
  let x75 := Z.add_with_get_carry((2^64), (0, (x70₁, 0))) in
  let x76 := Z.add_with_get_carry((2^64), (x75₂, (x71₁, 0))) in
  let x77 := Z.add_with_get_carry((2^64), (x76₂, (x72₁, 0))) in
  let x78 := Z.add_with_get_carry((2^64), (x77₂, (x73₁, 0))) in
  let x79 := Z.add_with_get_carry((2^64), (x78₂, (x74₁, x27))) in
  let x80 := Z.add_with_get_carry((2^64), (0, (x75₁, 0))) in
  let x81 := Z.add_with_get_carry((2^64), (x80₂, (x76₁, 0))) in
  let x82 := Z.add_with_get_carry((2^64), (x81₂, (x77₁, 0))) in
  let x83 := Z.add_with_get_carry((2^64), (x82₂, (x78₁, 0))) in
  let x84 := Z.add_with_get_carry((2^64), (x83₂, (x79₁, x28))) in
  let x85 := Z.add_with_get_carry((2^64), (0, (x80₁, 0))) in
  let x86 := Z.add_with_get_carry((2^64), (x85₂, (x81₁, 0))) in
  let x87 := Z.add_with_get_carry((2^64), (x86₂, (x82₁, 0))) in
  let x88 := Z.add_with_get_carry((2^64), (x87₂, (x83₁, 0))) in
  let x89 := Z.add_with_get_carry((2^64), (x88₂, (x84₁, x29))) in
  let x90 := Z.add_with_get_carry((2^64), (0, (x85₁, 0))) in
  let x91 := Z.add_with_get_carry((2^64), (x90₂, (x86₁, 0))) in
  let x92 := Z.add_with_get_carry((2^64), (x91₂, (x87₁, 0))) in
  let x93 := Z.add_with_get_carry((2^64), (x92₂, (x88₁, 0))) in
  let x94 := Z.add_with_get_carry((2^64), (x93₂, (x89₁, x31))) in
  let x95 := Z.add_with_get_carry((2^64), (0, (x90₁, 0))) in
  let x96 := Z.add_with_get_carry((2^64), (x95₂, (x91₁, 0))) in
  let x97 := Z.add_with_get_carry((2^64), (x96₂, (x92₁, 0))) in
  let x98 := Z.add_with_get_carry((2^64), (x97₂, (x93₁, 0))) in
  let x99 := Z.add_with_get_carry((2^64), (x98₂, (x94₁, x32))) in
  let x100 := Z.add_with_get_carry((2^64), (0, (x95₁, 0))) in
  let x101 := Z.add_with_get_carry((2^64), (x100₂, (x96₁, 0))) in
  let x102 := Z.add_with_get_carry((2^64), (x101₂, (x97₁, 0))) in
  let x103 := Z.add_with_get_carry((2^64), (x102₂, (x98₁, x30))) in
  let x104 := Z.add_with_get_carry((2^64), (x103₂, (x99₁, x33))) in
  let x105 := Z.add_with_get_carry((2^64), (0, (x100₁, 0))) in
  let x106 := Z.add_with_get_carry((2^64), (x105₂, (x101₁, 0))) in
  let x107 := Z.add_with_get_carry((2^64), (x106₂, (x102₁, 0))) in
  let x108 := Z.add_with_get_carry((2^64), (x107₂, (x103₁, x36))) in
  let x109 := Z.add_with_get_carry((2^64), (x108₂, (x104₁, x34))) in
  let x110 := Z.add_with_get_carry((2^64), (0, (x105₁, 0))) in
  let x111 := Z.add_with_get_carry((2^64), (x110₂, (x106₁, 0))) in
  let x112 := Z.add_with_get_carry((2^64), (x111₂, (x107₁, x38))) in
  let x113 := Z.add_with_get_carry((2^64), (x112₂, (x108₁, x37))) in
  let x114 := Z.add_with_get_carry((2^64), (x113₂, (x109₁, x35))) in
  let x115 := Z.add_with_get_carry((2^64), (0, (x110₁, 0))) in
  let x116 := Z.add_with_get_carry((2^64), (x115₂, (x111₁, 0))) in
  let x117 := Z.add_with_get_carry((2^64), (x116₂, (x112₁, x44))) in
  let x118 := Z.add_with_get_carry((2^64), (x117₂, (x113₁, x42))) in
  let x119 := Z.add_with_get_carry((2^64), (x118₂, (x114₁, x39))) in
  let x120 := Z.add_with_get_carry((2^64), (0, (x115₁, 0))) in
  let x121 := Z.add_with_get_carry((2^64), (x120₂, (x116₁, x46))) in
  let x122 := Z.add_with_get_carry((2^64), (x121₂, (x117₁, x45))) in
  let x123 := Z.add_with_get_carry((2^64), (x122₂, (x118₁, x43))) in
  let x124 := Z.add_with_get_carry((2^64), (x123₂, (x119₁, x40))) in
  let x125 := Z.add_with_get_carry((2^64), (0, (x120₁, 0))) in
  let x126 := Z.add_with_get_carry((2^64), (x125₂, (x121₁, x52))) in
  let x127 := Z.add_with_get_carry((2^64), (x126₂, (x122₁, x50))) in
  let x128 := Z.add_with_get_carry((2^64), (x127₂, (x123₁, x48))) in
  let x129 := Z.add_with_get_carry((2^64), (x128₂, (x124₁, x41))) in
  let x130 := Z.add_with_get_carry((2^64), (0, (0, x125₁))) in
  let x131 := Z.add_with_get_carry((2^64), (x130₂, (0, x126₁))) in
  let x132 := Z.add_with_get_carry((2^64), (x131₂, (0, x127₁))) in
  let x133 := Z.add_with_get_carry((2^64), (x132₂, (0, x128₁))) in
  let x134 := Z.add_with_get_carry((2^64), (x133₂, (0, x129₁))) in
  let x135 := 0 + x134₂ in
  let x136 := (Z.mul_split((2^64), (x130₁, 1)))₁ in
  let x137 := Z.mul_split((2^64), (x136, 0xffffffff00000001)) in
  let x138 := Z.mul_split((2^64), (x136, 0)) in
  let x139 := Z.mul_split((2^64), (x136, (2^32-1))) in
  let x140 := Z.mul_split((2^64), (x136, (2^64-1))) in
  let x141 := 1 * x137₂ in
  let x142 := 1 * x137₁ in
  let x143 := 1 * x138₂ in
  let x144 := 1 * x138₁ in
  let x145 := 1 * x139₂ in
  let x146 := 1 * x139₁ in
  let x147 := 1 * x140₂ in
  let x148 := 1 * x140₁ in
  let x149 := Z.add_with_get_carry((2^64), (0, (x148, 0))) in
  let x150 := Z.add_with_get_carry((2^64), (x149₂, (x147, 0))) in
  let x151 := Z.add_with_get_carry((2^64), (x150₂, (x145, 0))) in
  let x152 := Z.add_with_get_carry((2^64), (x151₂, (x143, 0))) in
  let x153 := Z.add_with_get_carry((2^64), (x152₂, (x141, 0))) in
  let x154 := Z.add_with_get_carry((2^64), (0, (x149₁, 0))) in
  let x155 := Z.add_with_get_carry((2^64), (x154₂, (x150₁, 0))) in
  let x156 := Z.add_with_get_carry((2^64), (x155₂, (x151₁, 0))) in
  let x157 := Z.add_with_get_carry((2^64), (x156₂, (x152₁, 0))) in
  let x158 := Z.add_with_get_carry((2^64), (x157₂, (x153₁, 0))) in
  let x159 := Z.add_with_get_carry((2^64), (0, (x154₁, 0))) in
  let x160 := Z.add_with_get_carry((2^64), (x159₂, (x155₁, 0))) in
  let x161 := Z.add_with_get_carry((2^64), (x160₂, (x156₁, 0))) in
  let x162 := Z.add_with_get_carry((2^64), (x161₂, (x157₁, 0))) in
  let x163 := Z.add_with_get_carry((2^64), (x162₂, (x158₁, 0))) in
  let x164 := Z.add_with_get_carry((2^64), (0, (x159₁, 0))) in
  let x165 := Z.add_with_get_carry((2^64), (x164₂, (x160₁, 0))) in
  let x166 := Z.add_with_get_carry((2^64), (x165₂, (x161₁, 0))) in
  let x167 := Z.add_with_get_carry((2^64), (x166₂, (x162₁, 0))) in
  let x168 := Z.add_with_get_carry((2^64), (x167₂, (x163₁, 0))) in
  let x169 := Z.add_with_get_carry((2^64), (0, (x164₁, 0))) in
  let x170 := Z.add_with_get_carry((2^64), (x169₂, (x165₁, 0))) in
  let x171 := Z.add_with_get_carry((2^64), (x170₂, (x166₁, 0))) in
  let x172 := Z.add_with_get_carry((2^64), (x171₂, (x167₁, 0))) in
  let x173 := Z.add_with_get_carry((2^64), (x172₂, (x168₁, 0))) in
  let x174 := Z.add_with_get_carry((2^64), (0, (x169₁, 0))) in
  let x175 := Z.add_with_get_carry((2^64), (x174₂, (x170₁, 0))) in
  let x176 := Z.add_with_get_carry((2^64), (x175₂, (x171₁, 0))) in
  let x177 := Z.add_with_get_carry((2^64), (x176₂, (x172₁, 0))) in
  let x178 := Z.add_with_get_carry((2^64), (x177₂, (x173₁, 0))) in
  let x179 := Z.add_with_get_carry((2^64), (0, (x174₁, 0))) in
  let x180 := Z.add_with_get_carry((2^64), (x179₂, (x175₁, 0))) in
  let x181 := Z.add_with_get_carry((2^64), (x180₂, (x176₁, 0))) in
  let x182 := Z.add_with_get_carry((2^64), (x181₂, (x177₁, 0))) in
  let x183 := Z.add_with_get_carry((2^64), (x182₂, (x178₁, 0))) in
  let x184 := Z.add_with_get_carry((2^64), (0, (x179₁, 0))) in
  let x185 := Z.add_with_get_carry((2^64), (x184₂, (x180₁, 0))) in
  let x186 := Z.add_with_get_carry((2^64), (x185₂, (x181₁, 0))) in
  let x187 := Z.add_with_get_carry((2^64), (x186₂, (x182₁, 0))) in
  let x188 := Z.add_with_get_carry((2^64), (x187₂, (x183₁, 0))) in
  let x189 := Z.add_with_get_carry((2^64), (0, (x184₁, 0))) in
  let x190 := Z.add_with_get_carry((2^64), (x189₂, (x185₁, 0))) in
  let x191 := Z.add_with_get_carry((2^64), (x190₂, (x186₁, 0))) in
  let x192 := Z.add_with_get_carry((2^64), (x191₂, (x187₁, 0))) in
  let x193 := Z.add_with_get_carry((2^64), (x192₂, (x188₁, 0))) in
  let x194 := Z.add_with_get_carry((2^64), (0, (x189₁, 0))) in
  let x195 := Z.add_with_get_carry((2^64), (x194₂, (x190₁, 0))) in
  let x196 := Z.add_with_get_carry((2^64), (x195₂, (x191₁, 0))) in
  let x197 := Z.add_with_get_carry((2^64), (x196₂, (x192₁, 0))) in
  let x198 := Z.add_with_get_carry(…
  • Loading branch information
JasonGross committed Nov 12, 2022
1 parent 0e5f2ac commit 43535bd
Showing 1 changed file with 10,261 additions and 0 deletions.
Loading

0 comments on commit 43535bd

Please sign in to comment.