From b32ccc5e4f4af32f9cd11afc95e7336776ad6dd0 Mon Sep 17 00:00:00 2001 From: schaeff Date: Tue, 21 Aug 2018 13:05:17 +0200 Subject: [PATCH] implement type inference for multidef --- zokrates_cli/examples/argument_reassign.code | 2 +- zokrates_cli/examples/conditions.code | 4 +- .../error/{empty.code => empty-error.code} | 0 ...rongsyntax.code => wrongsyntax-error.code} | 0 zokrates_cli/examples/for.code | 2 +- .../examples/functions/expressions.code | 2 +- .../examples/functions/no_args_multiple.code | 2 +- zokrates_cli/examples/multi_return.code | 6 +- zokrates_cli/examples/multi_return_sum.code | 2 +- zokrates_cli/examples/reassignment.code | 2 +- .../examples/sha256/binary/fulladd.code | 4 +- .../examples/sha256/binary/halfadd.code | 2 +- .../examples/sha256/binary/isbit.code | 0 .../examples/sha256/bitwise/32/and.code | 2 +- .../sha256/bitwise/32/andxorandxorand.code | 4 +- .../examples/sha256/bitwise/32/xor.code | 2 +- zokrates_cli/examples/sha256/merkleproof.code | 904 ------------------ zokrates_cli/examples/sha256/preimage.code | 2 +- zokrates_cli/examples/sha256/sha256.code | 18 +- zokrates_cli/examples/sha256/testest | 71 -- .../examples/sha256/utils/32/add.code | 2 +- .../sha256/utils/32/ar17xar19xars10.code | 8 +- .../sha256/utils/32/ar2xar13xar22.code | 8 +- .../sha256/utils/32/ar6xar11xar25.code | 8 +- .../sha256/utils/32/ar7xar18xars3.code | 8 +- .../sha256/utils/32/compression_round.code | 4 +- .../examples/sha256/utils/32/extend.code | 4 +- zokrates_cli/examples/sudokuchecker.code | 2 +- zokrates_cli/examples/waldo.code | 2 +- zokrates_cli/src/bin.rs | 16 +- zokrates_core/src/absy/mod.rs | 7 +- zokrates_core/src/absy/parameter.rs | 2 +- zokrates_core/src/compile.rs | 6 +- zokrates_core/src/flatten/mod.rs | 4 + zokrates_core/src/parser/parse/function.rs | 19 +- zokrates_core/src/parser/parse/import.rs | 2 +- zokrates_core/src/parser/parse/statement.rs | 344 ++++--- zokrates_core/src/semantics.rs | 349 ++++--- zokrates_core/src/typed_absy/mod.rs | 5 + 39 files changed, 545 insertions(+), 1286 deletions(-) rename zokrates_cli/examples/error/{empty.code => empty-error.code} (100%) rename zokrates_cli/examples/error/{wrongsyntax.code => wrongsyntax-error.code} (100%) delete mode 100644 zokrates_cli/examples/sha256/binary/isbit.code delete mode 100644 zokrates_cli/examples/sha256/merkleproof.code delete mode 100644 zokrates_cli/examples/sha256/testest diff --git a/zokrates_cli/examples/argument_reassign.code b/zokrates_cli/examples/argument_reassign.code index da9ae61b..60db55c6 100644 --- a/zokrates_cli/examples/argument_reassign.code +++ b/zokrates_cli/examples/argument_reassign.code @@ -2,5 +2,5 @@ def sub(field a) -> (field): field a = a + 3 return a -def main(): +def main() -> (field): return sub(4) \ No newline at end of file diff --git a/zokrates_cli/examples/conditions.code b/zokrates_cli/examples/conditions.code index 956af688..526239b1 100644 --- a/zokrates_cli/examples/conditions.code +++ b/zokrates_cli/examples/conditions.code @@ -1,6 +1,6 @@ -def main(field a): +def main(field a) -> (field): field b = (a + 5) * 6 2 * b == a * 12 + 60 field c = 7 * (b + a) - field c == 7 * b + 7 * a + c == 7 * b + 7 * a return b + c diff --git a/zokrates_cli/examples/error/empty.code b/zokrates_cli/examples/error/empty-error.code similarity index 100% rename from zokrates_cli/examples/error/empty.code rename to zokrates_cli/examples/error/empty-error.code diff --git a/zokrates_cli/examples/error/wrongsyntax.code b/zokrates_cli/examples/error/wrongsyntax-error.code similarity index 100% rename from zokrates_cli/examples/error/wrongsyntax.code rename to zokrates_cli/examples/error/wrongsyntax-error.code diff --git a/zokrates_cli/examples/for.code b/zokrates_cli/examples/for.code index fdcf09ac..750faa1c 100644 --- a/zokrates_cli/examples/for.code +++ b/zokrates_cli/examples/for.code @@ -1,6 +1,6 @@ def main(field a) -> (field): field x = 7 - for i in 0..10 do + for field i in 0..10 do // x = x + a field x = x + a endfor diff --git a/zokrates_cli/examples/functions/expressions.code b/zokrates_cli/examples/functions/expressions.code index 06e22ab4..9d650213 100644 --- a/zokrates_cli/examples/functions/expressions.code +++ b/zokrates_cli/examples/functions/expressions.code @@ -3,7 +3,7 @@ def add(field a,field b) -> (field): return v // Expected for inputs 1,1: c=4, d=7, e=10 -def main(a,b): +def main(field a,field b) -> (field): field c = add(a*2+3*b-a,b-1) field d = add(a*b+2, a*b*c) field e = add(add(a,d),add(a,b)) diff --git a/zokrates_cli/examples/functions/no_args_multiple.code b/zokrates_cli/examples/functions/no_args_multiple.code index 55bf120a..544b16c7 100644 --- a/zokrates_cli/examples/functions/no_args_multiple.code +++ b/zokrates_cli/examples/functions/no_args_multiple.code @@ -5,6 +5,6 @@ def add(field a,field b) -> (field): field a=const() return a+b -def main(a,b) -> (field): +def main(field a,field b) -> (field): field c = add(a, b+const()) return const() diff --git a/zokrates_cli/examples/multi_return.code b/zokrates_cli/examples/multi_return.code index a2c8e1cf..b779312a 100644 --- a/zokrates_cli/examples/multi_return.code +++ b/zokrates_cli/examples/multi_return.code @@ -1,7 +1,7 @@ -def foo(field a) -> (field): +def foo(field a) -> (field, field, field, field): field b = 12*a return a, 2*a, 5*b, a*b -def main(i) -> (field): - x, y, z, t = foo(i) +def main(field i) -> (field): + field x, field y, field z, field t = foo(i) return 1 diff --git a/zokrates_cli/examples/multi_return_sum.code b/zokrates_cli/examples/multi_return_sum.code index f89276a8..786abf81 100644 --- a/zokrates_cli/examples/multi_return_sum.code +++ b/zokrates_cli/examples/multi_return_sum.code @@ -1,5 +1,5 @@ def foo() -> (field, field): return 1, 2 def main() -> (field, field): - a, b = foo() + field a, field b = foo() return a + b, b - a \ No newline at end of file diff --git a/zokrates_cli/examples/reassignment.code b/zokrates_cli/examples/reassignment.code index 86589668..38e5c3c1 100644 --- a/zokrates_cli/examples/reassignment.code +++ b/zokrates_cli/examples/reassignment.code @@ -1,4 +1,4 @@ -def main(field x): +def main(field x) -> (field): field a = x + 5 field b = a + x a = 7 diff --git a/zokrates_cli/examples/sha256/binary/fulladd.code b/zokrates_cli/examples/sha256/binary/fulladd.code index 27423ce5..211cca32 100644 --- a/zokrates_cli/examples/sha256/binary/fulladd.code +++ b/zokrates_cli/examples/sha256/binary/fulladd.code @@ -3,8 +3,8 @@ import "./halfadd.code" as HALFADD import "./or.code" as OR -def main(field a, field b, field car) -> (field): +def main(field a, field b, field car) -> (field, field): out1, car1 = HALFADD(a, b) out2, car2 = HALFADD(out1, car) - car3 = OR(car1, car2) + field car3 = OR(car1, car2) return out2, car3 \ No newline at end of file diff --git a/zokrates_cli/examples/sha256/binary/halfadd.code b/zokrates_cli/examples/sha256/binary/halfadd.code index 53f5d10e..75e19833 100644 --- a/zokrates_cli/examples/sha256/binary/halfadd.code +++ b/zokrates_cli/examples/sha256/binary/halfadd.code @@ -3,5 +3,5 @@ import "./xor.code" as XOR import "./and.code" as AND -def main(field a, field b): +def main(field a, field b) -> (field, field): return XOR(a, b), AND(a, b) \ No newline at end of file diff --git a/zokrates_cli/examples/sha256/binary/isbit.code b/zokrates_cli/examples/sha256/binary/isbit.code deleted file mode 100644 index e69de29b..00000000 diff --git a/zokrates_cli/examples/sha256/bitwise/32/and.code b/zokrates_cli/examples/sha256/bitwise/32/and.code index 27e036b0..e99a9a82 100644 --- a/zokrates_cli/examples/sha256/bitwise/32/and.code +++ b/zokrates_cli/examples/sha256/bitwise/32/and.code @@ -2,5 +2,5 @@ import "./../../binary/and.code" as AND -def main(field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0, field c31, field c30, field c29, field c28, field c27, field c26, field c25, field c24, field c23, field c22, field c21, field c20, field c19, field c18, field c17, field c16, field c15, field c14, field c13, field c12, field c11, field c10, field c9, field c8, field c7, field c6, field c5, field c4, field c3, field c2, field c1, field c0): +def main(field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0, field c31, field c30, field c29, field c28, field c27, field c26, field c25, field c24, field c23, field c22, field c21, field c20, field c19, field c18, field c17, field c16, field c15, field c14, field c13, field c12, field c11, field c10, field c9, field c8, field c7, field c6, field c5, field c4, field c3, field c2, field c1, field c0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return AND(b31, c31), AND(b30, c30), AND(b29, c29), AND(b28, c28), AND(b27, c27), AND(b26, c26), AND(b25, c25), AND(b24, c24), AND(b23, c23), AND(b22, c22), AND(b21, c21), AND(b20, c20), AND(b19, c19), AND(b18, c18), AND(b17, c17), AND(b16, c16), AND(b15, c15), AND(b14, c14), AND(b13, c13), AND(b12, c12), AND(b11, c11), AND(b10, c10), AND(b9, c9), AND(b8, c8), AND(b7, c7), AND(b6, c6), AND(b5, c5), AND(b4, c4), AND(b3, c3), AND(b2, c2), AND(b1, c1), AND(b0, c0) \ No newline at end of file diff --git a/zokrates_cli/examples/sha256/bitwise/32/andxorandxorand.code b/zokrates_cli/examples/sha256/bitwise/32/andxorandxorand.code index b4c8b531..442a68cd 100644 --- a/zokrates_cli/examples/sha256/bitwise/32/andxorandxorand.code +++ b/zokrates_cli/examples/sha256/bitwise/32/andxorandxorand.code @@ -1,6 +1,6 @@ // ANDXORANDXORAND -import "./../../field binary/andxorandxorand.code" as ANDXORANDXORAND +import "./../../binary/andxorandxorand.code" as ANDXORANDXORAND def main(field a31, field a30, field a29, field a28, field a27, field a26, field a25, field a24, field a23, field a22, field a21, field a20, field a19, field a18, field a17, field a16, field a15, field a14, field a13, field a12, field a11, field a10, field a9, field a8, field a7, field a6, field a5, field a4, field a3, field a2, field a1, field a0, field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0, field c31, field c30, field c29, field c28, field c27, field c26, field c25, field c24, field c23, field c22, field c21, field c20, field c19, field c18, field c17, field c16, field c15, field c14, field c13, field c12, field c11, field c10, field c9, field c8, field c7, field c6, field c5, field c4, field c3, field c2, field c1, field c0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): - return ANDXORANDXORAND(a31, field b31, c31), ANDXORANDXORAND(a30, b30, c30), ANDXORANDXORAND(a29, b29, c29), ANDXORANDXORAND(a28, b28, c28), ANDXORANDXORAND(a27, b27, c27), ANDXORANDXORAND(a26, b26, c26), ANDXORANDXORAND(a25, b25, c25), ANDXORANDXORAND(a24, b24, c24), ANDXORANDXORAND(a23, b23, c23), ANDXORANDXORAND(a22, b22, c22), ANDXORANDXORAND(a21, b21, c21), ANDXORANDXORAND(a20, b20, c20), ANDXORANDXORAND(a19, b19, c19), ANDXORANDXORAND(a18, b18, c18), ANDXORANDXORAND(a17, b17, c17), ANDXORANDXORAND(a16, b16, c16), ANDXORANDXORAND(a15, b15, c15), ANDXORANDXORAND(a14, b14, c14), ANDXORANDXORAND(a13, b13, c13), ANDXORANDXORAND(a12, b12, c12), ANDXORANDXORAND(a11, b11, c11), ANDXORANDXORAND(a10, b10, c10), ANDXORANDXORAND(a9, b9, c9), ANDXORANDXORAND(a8, b8, c8), ANDXORANDXORAND(a7, b7, c7), ANDXORANDXORAND(a6, b6, c6), ANDXORANDXORAND(a5, b5, c5), ANDXORANDXORAND(a4, b4, c4), ANDXORANDXORAND(a3, b3, c3), ANDXORANDXORAND(a2, b2, c2), ANDXORANDXORAND(a1, b1, c1), ANDXORANDXORAND(a0, b0, c0) + return ANDXORANDXORAND(a31, b31, c31), ANDXORANDXORAND(a30, b30, c30), ANDXORANDXORAND(a29, b29, c29), ANDXORANDXORAND(a28, b28, c28), ANDXORANDXORAND(a27, b27, c27), ANDXORANDXORAND(a26, b26, c26), ANDXORANDXORAND(a25, b25, c25), ANDXORANDXORAND(a24, b24, c24), ANDXORANDXORAND(a23, b23, c23), ANDXORANDXORAND(a22, b22, c22), ANDXORANDXORAND(a21, b21, c21), ANDXORANDXORAND(a20, b20, c20), ANDXORANDXORAND(a19, b19, c19), ANDXORANDXORAND(a18, b18, c18), ANDXORANDXORAND(a17, b17, c17), ANDXORANDXORAND(a16, b16, c16), ANDXORANDXORAND(a15, b15, c15), ANDXORANDXORAND(a14, b14, c14), ANDXORANDXORAND(a13, b13, c13), ANDXORANDXORAND(a12, b12, c12), ANDXORANDXORAND(a11, b11, c11), ANDXORANDXORAND(a10, b10, c10), ANDXORANDXORAND(a9, b9, c9), ANDXORANDXORAND(a8, b8, c8), ANDXORANDXORAND(a7, b7, c7), ANDXORANDXORAND(a6, b6, c6), ANDXORANDXORAND(a5, b5, c5), ANDXORANDXORAND(a4, b4, c4), ANDXORANDXORAND(a3, b3, c3), ANDXORANDXORAND(a2, b2, c2), ANDXORANDXORAND(a1, b1, c1), ANDXORANDXORAND(a0, b0, c0) diff --git a/zokrates_cli/examples/sha256/bitwise/32/xor.code b/zokrates_cli/examples/sha256/bitwise/32/xor.code index ff9eb417..e876350f 100644 --- a/zokrates_cli/examples/sha256/bitwise/32/xor.code +++ b/zokrates_cli/examples/sha256/bitwise/32/xor.code @@ -2,5 +2,5 @@ import "./../../binary/xor.code" as XOR -def main(field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0, field c31, field c30, field c29, field c28, field c27, field c26, field c25, field c24, field c23, field c22, field c21, field c20, field c19, field c18, field c17, field c16, field c15, field c14, field c13, field c12, field c11, field c10, field c9, field c8, field c7, field c6, field c5, field c4, field c3, field c2, field c1, field c0): +def main(field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0, field c31, field c30, field c29, field c28, field c27, field c26, field c25, field c24, field c23, field c22, field c21, field c20, field c19, field c18, field c17, field c16, field c15, field c14, field c13, field c12, field c11, field c10, field c9, field c8, field c7, field c6, field c5, field c4, field c3, field c2, field c1, field c0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return XOR(b31, c31), XOR(b30, c30), XOR(b29, c29), XOR(b28, c28), XOR(b27, c27), XOR(b26, c26), XOR(b25, c25), XOR(b24, c24), XOR(b23, c23), XOR(b22, c22), XOR(b21, c21), XOR(b20, c20), XOR(b19, c19), XOR(b18, c18), XOR(b17, c17), XOR(b16, c16), XOR(b15, c15), XOR(b14, c14), XOR(b13, c13), XOR(b12, c12), XOR(b11, c11), XOR(b10, c10), XOR(b9, c9), XOR(b8, c8), XOR(b7, c7), XOR(b6, c6), XOR(b5, c5), XOR(b4, c4), XOR(b3, c3), XOR(b2, c2), XOR(b1, c1), XOR(b0, c0) \ No newline at end of file diff --git a/zokrates_cli/examples/sha256/merkleproof.code b/zokrates_cli/examples/sha256/merkleproof.code deleted file mode 100644 index 51af76fe..00000000 --- a/zokrates_cli/examples/sha256/merkleproof.code +++ /dev/null @@ -1,904 +0,0 @@ -def NOT(x): - return 1 - x - -def AND(x, y): - return x * y - -def OR(x, y): - return NOT(AND(NOT(x), NOT(y))) - -def XOR(x, y): - return AND(OR(x, y), NOT(AND(x,y))) - -def NOT(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): - return NOT(b31), NOT(b30), NOT(b29), NOT(b28), NOT(b27), NOT(b26), NOT(b25), NOT(b24), NOT(b23), NOT(b22), NOT(b21), NOT(b20), NOT(b19), NOT(b18), NOT(b17), NOT(b16), NOT(b15), NOT(b14), NOT(b13), NOT(b12), NOT(b11), NOT(b10), NOT(b9), NOT(b8), NOT(b7), NOT(b6), NOT(b5), NOT(b4), NOT(b3), NOT(b2), NOT(b1), NOT(b0) - -def XOR(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0): - return XOR(b31, c31), XOR(b30, c30), XOR(b29, c29), XOR(b28, c28), XOR(b27, c27), XOR(b26, c26), XOR(b25, c25), XOR(b24, c24), XOR(b23, c23), XOR(b22, c22), XOR(b21, c21), XOR(b20, c20), XOR(b19, c19), XOR(b18, c18), XOR(b17, c17), XOR(b16, c16), XOR(b15, c15), XOR(b14, c14), XOR(b13, c13), XOR(b12, c12), XOR(b11, c11), XOR(b10, c10), XOR(b9, c9), XOR(b8, c8), XOR(b7, c7), XOR(b6, c6), XOR(b5, c5), XOR(b4, c4), XOR(b3, c3), XOR(b2, c2), XOR(b1, c1), XOR(b0, c0) - -def AND(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0): - return AND(b31, c31), AND(b30, c30), AND(b29, c29), AND(b28, c28), AND(b27, c27), AND(b26, c26), AND(b25, c25), AND(b24, c24), AND(b23, c23), AND(b22, c22), AND(b21, c21), AND(b20, c20), AND(b19, c19), AND(b18, c18), AND(b17, c17), AND(b16, c16), AND(b15, c15), AND(b14, c14), AND(b13, c13), AND(b12, c12), AND(b11, c11), AND(b10, c10), AND(b9, c9), AND(b8, c8), AND(b7, c7), AND(b6, c6), AND(b5, c5), AND(b4, c4), AND(b3, c3), AND(b2, c2), AND(b1, c1), AND(b0, c0) - -def ANDXORANDXORAND(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0): - return XOR(XOR(AND(a31,b31),AND(a31,c31)),AND(b31,c31)), XOR(XOR(AND(a30,b30),AND(a30,c30)),AND(b30,c30)), XOR(XOR(AND(a29,b29),AND(a29,c29)),AND(b29,c29)), XOR(XOR(AND(a28,b28),AND(a28,c28)),AND(b28,c28)), XOR(XOR(AND(a27,b27),AND(a27,c27)),AND(b27,c27)), XOR(XOR(AND(a26,b26),AND(a26,c26)),AND(b26,c26)), XOR(XOR(AND(a25,b25),AND(a25,c25)),AND(b25,c25)), XOR(XOR(AND(a24,b24),AND(a24,c24)),AND(b24,c24)), XOR(XOR(AND(a23,b23),AND(a23,c23)),AND(b23,c23)), XOR(XOR(AND(a22,b22),AND(a22,c22)),AND(b22,c22)), XOR(XOR(AND(a21,b21),AND(a21,c21)),AND(b21,c21)), XOR(XOR(AND(a20,b20),AND(a20,c20)),AND(b20,c20)), XOR(XOR(AND(a19,b19),AND(a19,c19)),AND(b19,c19)), XOR(XOR(AND(a18,b18),AND(a18,c18)),AND(b18,c18)), XOR(XOR(AND(a17,b17),AND(a17,c17)),AND(b17,c17)), XOR(XOR(AND(a16,b16),AND(a16,c16)),AND(b16,c16)), XOR(XOR(AND(a15,b15),AND(a15,c15)),AND(b15,c15)), XOR(XOR(AND(a14,b14),AND(a14,c14)),AND(b14,c14)), XOR(XOR(AND(a13,b13),AND(a13,c13)),AND(b13,c13)), XOR(XOR(AND(a12,b12),AND(a12,c12)),AND(b12,c12)), XOR(XOR(AND(a11,b11),AND(a11,c11)),AND(b11,c11)), XOR(XOR(AND(a10,b10),AND(a10,c10)),AND(b10,c10)), XOR(XOR(AND(a9,b9),AND(a9,c9)),AND(b9,c9)), XOR(XOR(AND(a8,b8),AND(a8,c8)),AND(b8,c8)), XOR(XOR(AND(a7,b7),AND(a7,c7)),AND(b7,c7)), XOR(XOR(AND(a6,b6),AND(a6,c6)),AND(b6,c6)), XOR(XOR(AND(a5,b5),AND(a5,c5)),AND(b5,c5)), XOR(XOR(AND(a4,b4),AND(a4,c4)),AND(b4,c4)), XOR(XOR(AND(a3,b3),AND(a3,c3)),AND(b3,c3)), XOR(XOR(AND(a2,b2),AND(a2,c2)),AND(b2,c2)), XOR(XOR(AND(a1,b1),AND(a1,c1)),AND(b1,c1)), XOR(XOR(AND(a0,b0),AND(a0,c0)),AND(b0,c0)) - -def ANDXORNOTAND(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0): - return XOR(AND(a31,b31),AND(NOT(a31), c31)), XOR(AND(a30,b30),AND(NOT(a30), c30)), XOR(AND(a29,b29),AND(NOT(a29), c29)), XOR(AND(a28,b28),AND(NOT(a28), c28)), XOR(AND(a27,b27),AND(NOT(a27), c27)), XOR(AND(a26,b26),AND(NOT(a26), c26)), XOR(AND(a25,b25),AND(NOT(a25), c25)), XOR(AND(a24,b24),AND(NOT(a24), c24)), XOR(AND(a23,b23),AND(NOT(a23), c23)), XOR(AND(a22,b22),AND(NOT(a22), c22)), XOR(AND(a21,b21),AND(NOT(a21), c21)), XOR(AND(a20,b20),AND(NOT(a20), c20)), XOR(AND(a19,b19),AND(NOT(a19), c19)), XOR(AND(a18,b18),AND(NOT(a18), c18)), XOR(AND(a17,b17),AND(NOT(a17), c17)), XOR(AND(a16,b16),AND(NOT(a16), c16)), XOR(AND(a15,b15),AND(NOT(a15), c15)), XOR(AND(a14,b14),AND(NOT(a14), c14)), XOR(AND(a13,b13),AND(NOT(a13), c13)), XOR(AND(a12,b12),AND(NOT(a12), c12)), XOR(AND(a11,b11),AND(NOT(a11), c11)), XOR(AND(a10,b10),AND(NOT(a10), c10)), XOR(AND(a9,b9),AND(NOT(a9), c9)), XOR(AND(a8,b8),AND(NOT(a8), c8)), XOR(AND(a7,b7),AND(NOT(a7), c7)), XOR(AND(a6,b6),AND(NOT(a6), c6)), XOR(AND(a5,b5),AND(NOT(a5), c5)), XOR(AND(a4,b4),AND(NOT(a4), c4)), XOR(AND(a3,b3),AND(NOT(a3), c3)), XOR(AND(a2,b2),AND(NOT(a2), c2)), XOR(AND(a1,b1),AND(NOT(a1), c1)), XOR(AND(a0,b0),AND(NOT(a0), c0)) - -def HALFADD(a, b): - return XOR(a, b), AND(a, b) - -def FULLADD(a, b, car): - out1, car1 = HALFADD(a, b) - out2, car2 = HALFADD(out1, car) - car3 = OR(car1, car2) - return out2, car3 - -def ADD(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0): - d0, car1 = FULLADD(b0, c0, 0) - d1, car2 = FULLADD(b1, c1, car1) - d2, car3 = FULLADD(b2, c2, car2) - d3, car4 = FULLADD(b3, c3, car3) - d4, car5 = FULLADD(b4, c4, car4) - d5, car6 = FULLADD(b5, c5, car5) - d6, car7 = FULLADD(b6, c6, car6) - d7, car8 = FULLADD(b7, c7, car7) - d8, car9 = FULLADD(b8, c8, car8) - d9, car10 = FULLADD(b9, c9, car9) - d10, car11 = FULLADD(b10, c10, car10) - d11, car12 = FULLADD(b11, c11, car11) - d12, car13 = FULLADD(b12, c12, car12) - d13, car14 = FULLADD(b13, c13, car13) - d14, car15 = FULLADD(b14, c14, car14) - d15, car16 = FULLADD(b15, c15, car15) - d16, car17 = FULLADD(b16, c16, car16) - d17, car18 = FULLADD(b17, c17, car17) - d18, car19 = FULLADD(b18, c18, car18) - d19, car20 = FULLADD(b19, c19, car19) - d20, car21 = FULLADD(b20, c20, car20) - d21, car22 = FULLADD(b21, c21, car21) - d22, car23 = FULLADD(b22, c22, car22) - d23, car24 = FULLADD(b23, c23, car23) - d24, car25 = FULLADD(b24, c24, car24) - d25, car26 = FULLADD(b25, c25, car25) - d26, car27 = FULLADD(b26, c26, car26) - d27, car28 = FULLADD(b27, c27, car27) - d28, car29 = FULLADD(b28, c28, car28) - d29, car30 = FULLADD(b29, c29, car29) - d30, car31 = FULLADD(b30, c30, car30) - d31, car32 = FULLADD(b31, c31, car31) - return d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0 - -def ADD(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0): - ab31, ab30, ab29, ab28, ab27, ab26, ab25, ab24, ab23, ab22, ab21, ab20, ab19, ab18, ab17, ab16, ab15, ab14, ab13, ab12, ab11, ab10, ab9, ab8, ab7, ab6, ab5, ab4, ab3, ab2, ab1, ab0 = ADD(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0) - cd31, cd30, cd29, cd28, cd27, cd26, cd25, cd24, cd23, cd22, cd21, cd20, cd19, cd18, cd17, cd16, cd15, cd14, cd13, cd12, cd11, cd10, cd9, cd8, cd7, cd6, cd5, cd4, cd3, cd2, cd1, cd0 = ADD(c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0) - abcd31, abcd30, abcd29, abcd28, abcd27, abcd26, abcd25, abcd24, abcd23, abcd22, abcd21, abcd20, abcd19, abcd18, abcd17, abcd16, abcd15, abcd14, abcd13, abcd12, abcd11, abcd10, abcd9, abcd8, abcd7, abcd6, abcd5, abcd4, abcd3, abcd2, abcd1, abcd0 = ADD(ab31, ab30, ab29, ab28, ab27, ab26, ab25, ab24, ab23, ab22, ab21, ab20, ab19, ab18, ab17, ab16, ab15, ab14, ab13, ab12, ab11, ab10, ab9, ab8, ab7, ab6, ab5, ab4, ab3, ab2, ab1, ab0, cd31, cd30, cd29, cd28, cd27, cd26, cd25, cd24, cd23, cd22, cd21, cd20, cd19, cd18, cd17, cd16, cd15, cd14, cd13, cd12, cd11, cd10, cd9, cd8, cd7, cd6, cd5, cd4, cd3, cd2, cd1, cd0) - abcde31, abcde30, abcde29, abcde28, abcde27, abcde26, abcde25, abcde24, abcde23, abcde22, abcde21, abcde20, abcde19, abcde18, abcde17, abcde16, abcde15, abcde14, abcde13, abcde12, abcde11, abcde10, abcde9, abcde8, abcde7, abcde6, abcde5, abcde4, abcde3, abcde2, abcde1, abcde0 = ADD(abcd31, abcd30, abcd29, abcd28, abcd27, abcd26, abcd25, abcd24, abcd23, abcd22, abcd21, abcd20, abcd19, abcd18, abcd17, abcd16, abcd15, abcd14, abcd13, abcd12, abcd11, abcd10, abcd9, abcd8, abcd7, abcd6, abcd5, abcd4, abcd3, abcd2, abcd1, abcd0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0) - return abcde31, abcde30, abcde29, abcde28, abcde27, abcde26, abcde25, abcde24, abcde23, abcde22, abcde21, abcde20, abcde19, abcde18, abcde17, abcde16, abcde15, abcde14, abcde13, abcde12, abcde11, abcde10, abcde9, abcde8, abcde7, abcde6, abcde5, abcde4, abcde3, abcde2, abcde1, abcde0 - -def ADD(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0): - ab31, ab30, ab29, ab28, ab27, ab26, ab25, ab24, ab23, ab22, ab21, ab20, ab19, ab18, ab17, ab16, ab15, ab14, ab13, ab12, ab11, ab10, ab9, ab8, ab7, ab6, ab5, ab4, ab3, ab2, ab1, ab0 = ADD(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0) - cd31, cd30, cd29, cd28, cd27, cd26, cd25, cd24, cd23, cd22, cd21, cd20, cd19, cd18, cd17, cd16, cd15, cd14, cd13, cd12, cd11, cd10, cd9, cd8, cd7, cd6, cd5, cd4, cd3, cd2, cd1, cd0 = ADD(c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0) - abcd31, abcd30, abcd29, abcd28, abcd27, abcd26, abcd25, abcd24, abcd23, abcd22, abcd21, abcd20, abcd19, abcd18, abcd17, abcd16, abcd15, abcd14, abcd13, abcd12, abcd11, abcd10, abcd9, abcd8, abcd7, abcd6, abcd5, abcd4, abcd3, abcd2, abcd1, abcd0 = ADD(ab31, ab30, ab29, ab28, ab27, ab26, ab25, ab24, ab23, ab22, ab21, ab20, ab19, ab18, ab17, ab16, ab15, ab14, ab13, ab12, ab11, ab10, ab9, ab8, ab7, ab6, ab5, ab4, ab3, ab2, ab1, ab0, cd31, cd30, cd29, cd28, cd27, cd26, cd25, cd24, cd23, cd22, cd21, cd20, cd19, cd18, cd17, cd16, cd15, cd14, cd13, cd12, cd11, cd10, cd9, cd8, cd7, cd6, cd5, cd4, cd3, cd2, cd1, cd0) - return abcd31, abcd30, abcd29, abcd28, abcd27, abcd26, abcd25, abcd24, abcd23, abcd22, abcd21, abcd20, abcd19, abcd18, abcd17, abcd16, abcd15, abcd14, abcd13, abcd12, abcd11, abcd10, abcd9, abcd8, abcd7, abcd6, abcd5, abcd4, abcd3, abcd2, abcd1, abcd0 - -def RR2(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): - return b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2 - -def RR3(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): - return b2, b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3 - -def RR6(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): - return b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6 - -def RR7(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): - return b6, b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7 - -def RR10(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): - return b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10 - -def RR11(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): - return b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11 - -def RR13(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): - return b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13 - -def RR17(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): - return b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17 - -def RR18(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): - return b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18 - -def RR19(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): - return b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19 - -def RR22(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): - return b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22 - -def RR25(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): - return b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25 - -def AR6XAR11XAR25(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0): - u31, u30, u29, u28, u27, u26, u25, u24, u23, u22, u21, u20, u19, u18, u17, u16, u15, u14, u13, u12, u11, u10, u9, u8, u7, u6, u5, u4, u3, u2, u1, u0 = RR6(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) - v31, v30, v29, v28, v27, v26, v25, v24, v23, v22, v21, v20, v19, v18, v17, v16, v15, v14, v13, v12, v11, v10, v9, v8, v7, v6, v5, v4, v3, v2, v1, v0 = RR11(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) - w31, w30, w29, w28, w27, w26, w25, w24, w23, w22, w21, w20, w19, w18, w17, w16, w15, w14, w13, w12, w11, w10, w9, w8, w7, w6, w5, w4, w3, w2, w1, w0 = RR25(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) - x31, x30, x29, x28, x27, x26, x25, x24, x23, x22, x21, x20, x19, x18, x17, x16, x15, x14, x13, x12, x11, x10, x9, x8, x7, x6, x5, x4, x3, x2, x1, x0 = XOR(u31, u30, u29, u28, u27, u26, u25, u24, u23, u22, u21, u20, u19, u18, u17, u16, u15, u14, u13, u12, u11, u10, u9, u8, u7, u6, u5, u4, u3, u2, u1, u0, v31, v30, v29, v28, v27, v26, v25, v24, v23, v22, v21, v20, v19, v18, v17, v16, v15, v14, v13, v12, v11, v10, v9, v8, v7, v6, v5, v4, v3, v2, v1, v0) - z31, z30, z29, z28, z27, z26, z25, z24, z23, z22, z21, z20, z19, z18, z17, z16, z15, z14, z13, z12, z11, z10, z9, z8, z7, z6, z5, z4, z3, z2, z1, z0 = XOR(w31, w30, w29, w28, w27, w26, w25, w24, w23, w22, w21, w20, w19, w18, w17, w16, w15, w14, w13, w12, w11, w10, w9, w8, w7, w6, w5, w4, w3, w2, w1, w0, x31, x30, x29, x28, x27, x26, x25, x24, x23, x22, x21, x20, x19, x18, x17, x16, x15, x14, x13, x12, x11, x10, x9, x8, x7, x6, x5, x4, x3, x2, x1, x0) - return z31, z30, z29, z28, z27, z26, z25, z24, z23, z22, z21, z20, z19, z18, z17, z16, z15, z14, z13, z12, z11, z10, z9, z8, z7, z6, z5, z4, z3, z2, z1, z0 - -def AR2XAR13XAR22(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0): - u31, u30, u29, u28, u27, u26, u25, u24, u23, u22, u21, u20, u19, u18, u17, u16, u15, u14, u13, u12, u11, u10, u9, u8, u7, u6, u5, u4, u3, u2, u1, u0 = RR2(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) - v31, v30, v29, v28, v27, v26, v25, v24, v23, v22, v21, v20, v19, v18, v17, v16, v15, v14, v13, v12, v11, v10, v9, v8, v7, v6, v5, v4, v3, v2, v1, v0 = RR13(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) - w31, w30, w29, w28, w27, w26, w25, w24, w23, w22, w21, w20, w19, w18, w17, w16, w15, w14, w13, w12, w11, w10, w9, w8, w7, w6, w5, w4, w3, w2, w1, w0 = RR22(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) - x31, x30, x29, x28, x27, x26, x25, x24, x23, x22, x21, x20, x19, x18, x17, x16, x15, x14, x13, x12, x11, x10, x9, x8, x7, x6, x5, x4, x3, x2, x1, x0 = XOR(u31, u30, u29, u28, u27, u26, u25, u24, u23, u22, u21, u20, u19, u18, u17, u16, u15, u14, u13, u12, u11, u10, u9, u8, u7, u6, u5, u4, u3, u2, u1, u0, v31, v30, v29, v28, v27, v26, v25, v24, v23, v22, v21, v20, v19, v18, v17, v16, v15, v14, v13, v12, v11, v10, v9, v8, v7, v6, v5, v4, v3, v2, v1, v0) - z31, z30, z29, z28, z27, z26, z25, z24, z23, z22, z21, z20, z19, z18, z17, z16, z15, z14, z13, z12, z11, z10, z9, z8, z7, z6, z5, z4, z3, z2, z1, z0 = XOR(w31, w30, w29, w28, w27, w26, w25, w24, w23, w22, w21, w20, w19, w18, w17, w16, w15, w14, w13, w12, w11, w10, w9, w8, w7, w6, w5, w4, w3, w2, w1, w0, x31, x30, x29, x28, x27, x26, x25, x24, x23, x22, x21, x20, x19, x18, x17, x16, x15, x14, x13, x12, x11, x10, x9, x8, x7, x6, x5, x4, x3, x2, x1, x0) - return z31, z30, z29, z28, z27, z26, z25, z24, z23, z22, z21, z20, z19, z18, z17, z16, z15, z14, z13, z12, z11, z10, z9, z8, z7, z6, z5, z4, z3, z2, z1, z0 - -def AR7XAR18XAR3(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0): - u31, u30, u29, u28, u27, u26, u25, u24, u23, u22, u21, u20, u19, u18, u17, u16, u15, u14, u13, u12, u11, u10, u9, u8, u7, u6, u5, u4, u3, u2, u1, u0 = RR7(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) - v31, v30, v29, v28, v27, v26, v25, v24, v23, v22, v21, v20, v19, v18, v17, v16, v15, v14, v13, v12, v11, v10, v9, v8, v7, v6, v5, v4, v3, v2, v1, v0 = RR18(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) - w31, w30, w29, w28, w27, w26, w25, w24, w23, w22, w21, w20, w19, w18, w17, w16, w15, w14, w13, w12, w11, w10, w9, w8, w7, w6, w5, w4, w3, w2, w1, w0 = RR3(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) - x31, x30, x29, x28, x27, x26, x25, x24, x23, x22, x21, x20, x19, x18, x17, x16, x15, x14, x13, x12, x11, x10, x9, x8, x7, x6, x5, x4, x3, x2, x1, x0 = XOR(u31, u30, u29, u28, u27, u26, u25, u24, u23, u22, u21, u20, u19, u18, u17, u16, u15, u14, u13, u12, u11, u10, u9, u8, u7, u6, u5, u4, u3, u2, u1, u0, v31, v30, v29, v28, v27, v26, v25, v24, v23, v22, v21, v20, v19, v18, v17, v16, v15, v14, v13, v12, v11, v10, v9, v8, v7, v6, v5, v4, v3, v2, v1, v0) - z31, z30, z29, z28, z27, z26, z25, z24, z23, z22, z21, z20, z19, z18, z17, z16, z15, z14, z13, z12, z11, z10, z9, z8, z7, z6, z5, z4, z3, z2, z1, z0 = XOR(w31, w30, w29, w28, w27, w26, w25, w24, w23, w22, w21, w20, w19, w18, w17, w16, w15, w14, w13, w12, w11, w10, w9, w8, w7, w6, w5, w4, w3, w2, w1, w0, x31, x30, x29, x28, x27, x26, x25, x24, x23, x22, x21, x20, x19, x18, x17, x16, x15, x14, x13, x12, x11, x10, x9, x8, x7, x6, x5, x4, x3, x2, x1, x0) - return z31, z30, z29, z28, z27, z26, z25, z24, z23, z22, z21, z20, z19, z18, z17, z16, z15, z14, z13, z12, z11, z10, z9, z8, z7, z6, z5, z4, z3, z2, z1, z0 - -def AR17XAR19XAR10(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0): - u31, u30, u29, u28, u27, u26, u25, u24, u23, u22, u21, u20, u19, u18, u17, u16, u15, u14, u13, u12, u11, u10, u9, u8, u7, u6, u5, u4, u3, u2, u1, u0 = RR17(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) - v31, v30, v29, v28, v27, v26, v25, v24, v23, v22, v21, v20, v19, v18, v17, v16, v15, v14, v13, v12, v11, v10, v9, v8, v7, v6, v5, v4, v3, v2, v1, v0 = RR19(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) - w31, w30, w29, w28, w27, w26, w25, w24, w23, w22, w21, w20, w19, w18, w17, w16, w15, w14, w13, w12, w11, w10, w9, w8, w7, w6, w5, w4, w3, w2, w1, w0 = RR10(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) - x31, x30, x29, x28, x27, x26, x25, x24, x23, x22, x21, x20, x19, x18, x17, x16, x15, x14, x13, x12, x11, x10, x9, x8, x7, x6, x5, x4, x3, x2, x1, x0 = XOR(u31, u30, u29, u28, u27, u26, u25, u24, u23, u22, u21, u20, u19, u18, u17, u16, u15, u14, u13, u12, u11, u10, u9, u8, u7, u6, u5, u4, u3, u2, u1, u0, v31, v30, v29, v28, v27, v26, v25, v24, v23, v22, v21, v20, v19, v18, v17, v16, v15, v14, v13, v12, v11, v10, v9, v8, v7, v6, v5, v4, v3, v2, v1, v0) - z31, z30, z29, z28, z27, z26, z25, z24, z23, z22, z21, z20, z19, z18, z17, z16, z15, z14, z13, z12, z11, z10, z9, z8, z7, z6, z5, z4, z3, z2, z1, z0 = XOR(w31, w30, w29, w28, w27, w26, w25, w24, w23, w22, w21, w20, w19, w18, w17, w16, w15, w14, w13, w12, w11, w10, w9, w8, w7, w6, w5, w4, w3, w2, w1, w0, x31, x30, x29, x28, x27, x26, x25, x24, x23, x22, x21, x20, x19, x18, x17, x16, x15, x14, x13, x12, x11, x10, x9, x8, x7, x6, x5, x4, x3, x2, x1, x0) - return z31, z30, z29, z28, z27, z26, z25, z24, z23, z22, z21, z20, z19, z18, z17, z16, z15, z14, z13, z12, z11, z10, z9, z8, z7, z6, z5, z4, z3, z2, z1, z0 - -def H0(): - return 0,1,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1 -def H1(): - return 1,0,1,1,1,0,1,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1 -def H2(): - return 0,0,1,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,0,1,1,1,0,0,1,0 -def H3(): - return 1,0,1,0,0,1,0,1,0,1,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,0,1,1,1,0,1,0 -def H4(): - return 0,1,0,1,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,0,0,1,1,1,1,1,1,1 -def H5(): - return 1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,0,0 -def H6(): - return 0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1 -def H7(): - return 0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,0,1,0,0,0,1,1,0,0,1 - -def COPY(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): - return b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0 - -def EXTEND(wm15b31, wm15b30, wm15b29, wm15b28, wm15b27, wm15b26, wm15b25, wm15b24, wm15b23, wm15b22, wm15b21, wm15b20, wm15b19, wm15b18, wm15b17, wm15b16, wm15b15, wm15b14, wm15b13, wm15b12, wm15b11, wm15b10, wm15b9, wm15b8, wm15b7, wm15b6, wm15b5, wm15b4, wm15b3, wm15b2, wm15b1, wm15b0, wm2b31, wm2b30, wm2b29, wm2b28, wm2b27, wm2b26, wm2b25, wm2b24, wm2b23, wm2b22, wm2b21, wm2b20, wm2b19, wm2b18, wm2b17, wm2b16, wm2b15, wm2b14, wm2b13, wm2b12, wm2b11, wm2b10, wm2b9, wm2b8, wm2b7, wm2b6, wm2b5, wm2b4, wm2b3, wm2b2, wm2b1, wm2b0, wm16b31, wm16b30, wm16b29, wm16b28, wm16b27, wm16b26, wm16b25, wm16b24, wm16b23, wm16b22, wm16b21, wm16b20, wm16b19, wm16b18, wm16b17, wm16b16, wm16b15, wm16b14, wm16b13, wm16b12, wm16b11, wm16b10, wm16b9, wm16b8, wm16b7, wm16b6, wm16b5, wm16b4, wm16b3, wm16b2, wm16b1, wm16b0, wm7b31, wm7b30, wm7b29, wm7b28, wm7b27, wm7b26, wm7b25, wm7b24, wm7b23, wm7b22, wm7b21, wm7b20, wm7b19, wm7b18, wm7b17, wm7b16, wm7b15, wm7b14, wm7b13, wm7b12, wm7b11, wm7b10, wm7b9, wm7b8, wm7b7, wm7b6, wm7b5, wm7b4, wm7b3, wm7b2, wm7b1, wm7b0): - // s0 := (w[i-15] rightrotate 7) xor (w[i-15] rightrotate 18) xor (w[i-15] rightshift 3) - szero31, szero30, szero29, szero28, szero27, szero26, szero25, szero24, szero23, szero22, szero21, szero20, szero19, szero18, szero17, szero16, szero15, szero14, szero13, szero12, szero11, szero10, szero9, szero8, szero7, szero6, szero5, szero4, szero3, szero2, szero1, szero0 = AR7XAR18XAR3(wm15b31, wm15b30, wm15b29, wm15b28, wm15b27, wm15b26, wm15b25, wm15b24, wm15b23, wm15b22, wm15b21, wm15b20, wm15b19, wm15b18, wm15b17, wm15b16, wm15b15, wm15b14, wm15b13, wm15b12, wm15b11, wm15b10, wm15b9, wm15b8, wm15b7, wm15b6, wm15b5, wm15b4, wm15b3, wm15b2, wm15b1, wm15b0) - // s1 := (w[i-2] rightrotate 17) xor (w[i-2] rightrotate 19) xor (w[i-2] rightshift 10) - sone31, sone30, sone29, sone28, sone27, sone26, sone25, sone24, sone23, sone22, sone21, sone20, sone19, sone18, sone17, sone16, sone15, sone14, sone13, sone12, sone11, sone10, sone9, sone8, sone7, sone6, sone5, sone4, sone3, sone2, sone1, sone0 = AR17XAR19XAR10(wm2b31, wm2b30, wm2b29, wm2b28, wm2b27, wm2b26, wm2b25, wm2b24, wm2b23, wm2b22, wm2b21, wm2b20, wm2b19, wm2b18, wm2b17, wm2b16, wm2b15, wm2b14, wm2b13, wm2b12, wm2b11, wm2b10, wm2b9, wm2b8, wm2b7, wm2b6, wm2b5, wm2b4, wm2b3, wm2b2, wm2b1, wm2b0) - // w[i] := w[i-16] + s0 + w[i-7] + s1 - wfb31, wfb30, wfb29, wfb28, wfb27, wfb26, wfb25, wfb24, wfb23, wfb22, wfb21, wfb20, wfb19, wfb18, wfb17, wfb16, wfb15, wfb14, wfb13, wfb12, wfb11, wfb10, wfb9, wfb8, wfb7, wfb6, wfb5, wfb4, wfb3, wfb2, wfb1, wfb0 = ADD(wm16b31, wm16b30, wm16b29, wm16b28, wm16b27, wm16b26, wm16b25, wm16b24, wm16b23, wm16b22, wm16b21, wm16b20, wm16b19, wm16b18, wm16b17, wm16b16, wm16b15, wm16b14, wm16b13, wm16b12, wm16b11, wm16b10, wm16b9, wm16b8, wm16b7, wm16b6, wm16b5, wm16b4, wm16b3, wm16b2, wm16b1, wm16b0, szero31, szero30, szero29, szero28, szero27, szero26, szero25, szero24, szero23, szero22, szero21, szero20, szero19, szero18, szero17, szero16, szero15, szero14, szero13, szero12, szero11, szero10, szero9, szero8, szero7, szero6, szero5, szero4, szero3, szero2, szero1, szero0, wm7b31, wm7b30, wm7b29, wm7b28, wm7b27, wm7b26, wm7b25, wm7b24, wm7b23, wm7b22, wm7b21, wm7b20, wm7b19, wm7b18, wm7b17, wm7b16, wm7b15, wm7b14, wm7b13, wm7b12, wm7b11, wm7b10, wm7b9, wm7b8, wm7b7, wm7b6, wm7b5, wm7b4, wm7b3, wm7b2, wm7b1, wm7b0, sone31, sone30, sone29, sone28, sone27, sone26, sone25, sone24, sone23, sone22, sone21, sone20, sone19, sone18, sone17, sone16, sone15, sone14, sone13, sone12, sone11, sone10, sone9, sone8, sone7, sone6, sone5, sone4, sone3, sone2, sone1, sone0) - return wfb31, wfb30, wfb29, wfb28, wfb27, wfb26, wfb25, wfb24, wfb23, wfb22, wfb21, wfb20, wfb19, wfb18, wfb17, wfb16, wfb15, wfb14, wfb13, wfb12, wfb11, wfb10, wfb9, wfb8, wfb7, wfb6, wfb5, wfb4, wfb3, wfb2, wfb1, wfb0 - -def COMPROUND(k31, k30, k29, k28, k27, k26, k25, k24, k23, k22, k21, k20, k19, k18, k17, k16, k15, k14, k13, k12, k11, k10, k9, k8, k7, k6, k5, k4, k3, k2, k1, k0, w31, w30, w29, w28, w27, w26, w25, w24, w23, w22, w21, w20, w19, w18, w17, w16, w15, w14, w13, w12, w11, w10, w9, w8, w7, w6, w5, w4, w3, w2, w1, w0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0): - - // S1 := (e rightrotate 6) xor (e rightrotate 11) xor (e rightrotate 25) - SOne31, SOne30, SOne29, SOne28, SOne27, SOne26, SOne25, SOne24, SOne23, SOne22, SOne21, SOne20, SOne19, SOne18, SOne17, SOne16, SOne15, SOne14, SOne13, SOne12, SOne11, SOne10, SOne9, SOne8, SOne7, SOne6, SOne5, SOne4, SOne3, SOne2, SOne1, SOne0 = AR6XAR11XAR25(e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0) - - // ch := (e and f) xor ((not e) and g) - ch31, ch30, ch29, ch28, ch27, ch26, ch25, ch24, ch23, ch22, ch21, ch20, ch19, ch18, ch17, ch16, ch15, ch14, ch13, ch12, ch11, ch10, ch9, ch8, ch7, ch6, ch5, ch4, ch3, ch2, ch1, ch0 = ANDXORNOTAND(e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0) - - // temp1 := h + S1 + ch + k[i] + w[i] - tempOne31, tempOne30, tempOne29, tempOne28, tempOne27, tempOne26, tempOne25, tempOne24, tempOne23, tempOne22, tempOne21, tempOne20, tempOne19, tempOne18, tempOne17, tempOne16, tempOne15, tempOne14, tempOne13, tempOne12, tempOne11, tempOne10, tempOne9, tempOne8, tempOne7, tempOne6, tempOne5, tempOne4, tempOne3, tempOne2, tempOne1, tempOne0 = ADD(k31, k30, k29, k28, k27, k26, k25, k24, k23, k22, k21, k20, k19, k18, k17, k16, k15, k14, k13, k12, k11, k10, k9, k8, k7, k6, k5, k4, k3, k2, k1, k0, w31, w30, w29, w28, w27, w26, w25, w24, w23, w22, w21, w20, w19, w18, w17, w16, w15, w14, w13, w12, w11, w10, w9, w8, w7, w6, w5, w4, w3, w2, w1, w0, ch31, ch30, ch29, ch28, ch27, ch26, ch25, ch24, ch23, ch22, ch21, ch20, ch19, ch18, ch17, ch16, ch15, ch14, ch13, ch12, ch11, ch10, ch9, ch8, ch7, ch6, ch5, ch4, ch3, ch2, ch1, ch0, SOne31, SOne30, SOne29, SOne28, SOne27, SOne26, SOne25, SOne24, SOne23, SOne22, SOne21, SOne20, SOne19, SOne18, SOne17, SOne16, SOne15, SOne14, SOne13, SOne12, SOne11, SOne10, SOne9, SOne8, SOne7, SOne6, SOne5, SOne4, SOne3, SOne2, SOne1, SOne0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // S0 := (a rightrotate 2) xor (a rightrotate 13) xor (a rightrotate 22) - SZero31, SZero30, SZero29, SZero28, SZero27, SZero26, SZero25, SZero24, SZero23, SZero22, SZero21, SZero20, SZero19, SZero18, SZero17, SZero16, SZero15, SZero14, SZero13, SZero12, SZero11, SZero10, SZero9, SZero8, SZero7, SZero6, SZero5, SZero4, SZero3, SZero2, SZero1, SZero0 = AR2XAR13XAR22(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) - - // maj := (a and b) xor (a and c) xor (b and c) - maj31, maj30, maj29, maj28, maj27, maj26, maj25, maj24, maj23, maj22, maj21, maj20, maj19, maj18, maj17, maj16, maj15, maj14, maj13, maj12, maj11, maj10, maj9, maj8, maj7, maj6, maj5, maj4, maj3, maj2, maj1, maj0 = ANDXORANDXORAND(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0) - - // temp2 := S0 + maj - tempTwo31, tempTwo30, tempTwo29, tempTwo28, tempTwo27, tempTwo26, tempTwo25, tempTwo24, tempTwo23, tempTwo22, tempTwo21, tempTwo20, tempTwo19, tempTwo18, tempTwo17, tempTwo16, tempTwo15, tempTwo14, tempTwo13, tempTwo12, tempTwo11, tempTwo10, tempTwo9, tempTwo8, tempTwo7, tempTwo6, tempTwo5, tempTwo4, tempTwo3, tempTwo2, tempTwo1, tempTwo0 = ADD(SZero31, SZero30, SZero29, SZero28, SZero27, SZero26, SZero25, SZero24, SZero23, SZero22, SZero21, SZero20, SZero19, SZero18, SZero17, SZero16, SZero15, SZero14, SZero13, SZero12, SZero11, SZero10, SZero9, SZero8, SZero7, SZero6, SZero5, SZero4, SZero3, SZero2, SZero1, SZero0, maj31, maj30, maj29, maj28, maj27, maj26, maj25, maj24, maj23, maj22, maj21, maj20, maj19, maj18, maj17, maj16, maj15, maj14, maj13, maj12, maj11, maj10, maj9, maj8, maj7, maj6, maj5, maj4, maj3, maj2, maj1, maj0) - - // en := d + temp1 - en31, en30, en29, en28, en27, en26, en25, en24, en23, en22, en21, en20, en19, en18, en17, en16, en15, en14, en13, en12, en11, en10, en9, en8, en7, en6, en5, en4, en3, en2, en1, en0 = ADD(d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, tempOne31, tempOne30, tempOne29, tempOne28, tempOne27, tempOne26, tempOne25, tempOne24, tempOne23, tempOne22, tempOne21, tempOne20, tempOne19, tempOne18, tempOne17, tempOne16, tempOne15, tempOne14, tempOne13, tempOne12, tempOne11, tempOne10, tempOne9, tempOne8, tempOne7, tempOne6, tempOne5, tempOne4, tempOne3, tempOne2, tempOne1, tempOne0) - - // an := temp1 + temp2 - an31, an30, an29, an28, an27, an26, an25, an24, an23, an22, an21, an20, an19, an18, an17, an16, an15, an14, an13, an12, an11, an10, an9, an8, an7, an6, an5, an4, an3, an2, an1, an0 = ADD(tempOne31, tempOne30, tempOne29, tempOne28, tempOne27, tempOne26, tempOne25, tempOne24, tempOne23, tempOne22, tempOne21, tempOne20, tempOne19, tempOne18, tempOne17, tempOne16, tempOne15, tempOne14, tempOne13, tempOne12, tempOne11, tempOne10, tempOne9, tempOne8, tempOne7, tempOne6, tempOne5, tempOne4, tempOne3, tempOne2, tempOne1, tempOne0, tempTwo31, tempTwo30, tempTwo29, tempTwo28, tempTwo27, tempTwo26, tempTwo25, tempTwo24, tempTwo23, tempTwo22, tempTwo21, tempTwo20, tempTwo19, tempTwo18, tempTwo17, tempTwo16, tempTwo15, tempTwo14, tempTwo13, tempTwo12, tempTwo11, tempTwo10, tempTwo9, tempTwo8, tempTwo7, tempTwo6, tempTwo5, tempTwo4, tempTwo3, tempTwo2, tempTwo1, tempTwo0) - - return an31, an30, an29, an28, an27, an26, an25, an24, an23, an22, an21, an20, an19, an18, an17, an16, an15, an14, an13, an12, an11, an10, an9, an8, an7, an6, an5, an4, an3, an2, an1, an0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, en31, en30, en29, en28, en27, en26, en25, en24, en23, en22, en21, en20, en19, en18, en17, en16, en15, en14, en13, en12, en11, en10, en9, en8, en7, en6, en5, en4, en3, en2, en1, en0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0 - -def sha256compress(i511, i510, i509, i508, i507, i506, i505, i504, i503, i502, i501, i500, i499, i498, i497, i496, i495, i494, i493, i492, i491, i490, i489, i488, i487, i486, i485, i484, i483, i482, i481, i480, i479, i478, i477, i476, i475, i474, i473, i472, i471, i470, i469, i468, i467, i466, i465, i464, i463, i462, i461, i460, i459, i458, i457, i456, i455, i454, i453, i452, i451, i450, i449, i448, i447, i446, i445, i444, i443, i442, i441, i440, i439, i438, i437, i436, i435, i434, i433, i432, i431, i430, i429, i428, i427, i426, i425, i424, i423, i422, i421, i420, i419, i418, i417, i416, i415, i414, i413, i412, i411, i410, i409, i408, i407, i406, i405, i404, i403, i402, i401, i400, i399, i398, i397, i396, i395, i394, i393, i392, i391, i390, i389, i388, i387, i386, i385, i384, i383, i382, i381, i380, i379, i378, i377, i376, i375, i374, i373, i372, i371, i370, i369, i368, i367, i366, i365, i364, i363, i362, i361, i360, i359, i358, i357, i356, i355, i354, i353, i352, i351, i350, i349, i348, i347, i346, i345, i344, i343, i342, i341, i340, i339, i338, i337, i336, i335, i334, i333, i332, i331, i330, i329, i328, i327, i326, i325, i324, i323, i322, i321, i320, i319, i318, i317, i316, i315, i314, i313, i312, i311, i310, i309, i308, i307, i306, i305, i304, i303, i302, i301, i300, i299, i298, i297, i296, i295, i294, i293, i292, i291, i290, i289, i288, i287, i286, i285, i284, i283, i282, i281, i280, i279, i278, i277, i276, i275, i274, i273, i272, i271, i270, i269, i268, i267, i266, i265, i264, i263, i262, i261, i260, i259, i258, i257, i256, i255, i254, i253, i252, i251, i250, i249, i248, i247, i246, i245, i244, i243, i242, i241, i240, i239, i238, i237, i236, i235, i234, i233, i232, i231, i230, i229, i228, i227, i226, i225, i224, i223, i222, i221, i220, i219, i218, i217, i216, i215, i214, i213, i212, i211, i210, i209, i208, i207, i206, i205, i204, i203, i202, i201, i200, i199, i198, i197, i196, i195, i194, i193, i192, i191, i190, i189, i188, i187, i186, i185, i184, i183, i182, i181, i180, i179, i178, i177, i176, i175, i174, i173, i172, i171, i170, i169, i168, i167, i166, i165, i164, i163, i162, i161, i160, i159, i158, i157, i156, i155, i154, i153, i152, i151, i150, i149, i148, i147, i146, i145, i144, i143, i142, i141, i140, i139, i138, i137, i136, i135, i134, i133, i132, i131, i130, i129, i128, i127, i126, i125, i124, i123, i122, i121, i120, i119, i118, i117, i116, i115, i114, i113, i112, i111, i110, i109, i108, i107, i106, i105, i104, i103, i102, i101, i100, i99, i98, i97, i96, i95, i94, i93, i92, i91, i90, i89, i88, i87, i86, i85, i84, i83, i82, i81, i80, i79, i78, i77, i76, i75, i74, i73, i72, i71, i70, i69, i68, i67, i66, i65, i64, i63, i62, i61, i60, i59, i58, i57, i56, i55, i54, i53, i52, i51, i50, i49, i48, i47, i46, i45, i44, i43, i42, i41, i40, i39, i38, i37, i36, i35, i34, i33, i32, i31, i30, i29, i28, i27, i26, i25, i24, i23, i22, i21, i20, i19, i18, i17, i16, i15, i14, i13, i12, i11, i10, i9, i8, i7, i6, i5, i4, i3, i2, i1, i0): - - // copy chunk into first 16 words w[0..15] of the message schedule array - - w0b0, w0b1, w0b2, w0b3, w0b4, w0b5, w0b6, w0b7, w0b8, w0b9, w0b10, w0b11, w0b12, w0b13, w0b14, w0b15, w0b16, w0b17, w0b18, w0b19, w0b20, w0b21, w0b22, w0b23, w0b24, w0b25, w0b26, w0b27, w0b28, w0b29, w0b30, w0b31 = COPY(i511, i510, i509, i508, i507, i506, i505, i504, i503, i502, i501, i500, i499, i498, i497, i496, i495, i494, i493, i492, i491, i490, i489, i488, i487, i486, i485, i484, i483, i482, i481, i480) - - w1b0, w1b1, w1b2, w1b3, w1b4, w1b5, w1b6, w1b7, w1b8, w1b9, w1b10, w1b11, w1b12, w1b13, w1b14, w1b15, w1b16, w1b17, w1b18, w1b19, w1b20, w1b21, w1b22, w1b23, w1b24, w1b25, w1b26, w1b27, w1b28, w1b29, w1b30, w1b31 = COPY(i479, i478, i477, i476, i475, i474, i473, i472, i471, i470, i469, i468, i467, i466, i465, i464, i463, i462, i461, i460, i459, i458, i457, i456, i455, i454, i453, i452, i451, i450, i449, i448) - - w2b0, w2b1, w2b2, w2b3, w2b4, w2b5, w2b6, w2b7, w2b8, w2b9, w2b10, w2b11, w2b12, w2b13, w2b14, w2b15, w2b16, w2b17, w2b18, w2b19, w2b20, w2b21, w2b22, w2b23, w2b24, w2b25, w2b26, w2b27, w2b28, w2b29, w2b30, w2b31 = COPY(i447, i446, i445, i444, i443, i442, i441, i440, i439, i438, i437, i436, i435, i434, i433, i432, i431, i430, i429, i428, i427, i426, i425, i424, i423, i422, i421, i420, i419, i418, i417, i416) - - w3b0, w3b1, w3b2, w3b3, w3b4, w3b5, w3b6, w3b7, w3b8, w3b9, w3b10, w3b11, w3b12, w3b13, w3b14, w3b15, w3b16, w3b17, w3b18, w3b19, w3b20, w3b21, w3b22, w3b23, w3b24, w3b25, w3b26, w3b27, w3b28, w3b29, w3b30, w3b31 = COPY(i415, i414, i413, i412, i411, i410, i409, i408, i407, i406, i405, i404, i403, i402, i401, i400, i399, i398, i397, i396, i395, i394, i393, i392, i391, i390, i389, i388, i387, i386, i385, i384) - - w4b0, w4b1, w4b2, w4b3, w4b4, w4b5, w4b6, w4b7, w4b8, w4b9, w4b10, w4b11, w4b12, w4b13, w4b14, w4b15, w4b16, w4b17, w4b18, w4b19, w4b20, w4b21, w4b22, w4b23, w4b24, w4b25, w4b26, w4b27, w4b28, w4b29, w4b30, w4b31 = COPY(i383, i382, i381, i380, i379, i378, i377, i376, i375, i374, i373, i372, i371, i370, i369, i368, i367, i366, i365, i364, i363, i362, i361, i360, i359, i358, i357, i356, i355, i354, i353, i352) - - w5b0, w5b1, w5b2, w5b3, w5b4, w5b5, w5b6, w5b7, w5b8, w5b9, w5b10, w5b11, w5b12, w5b13, w5b14, w5b15, w5b16, w5b17, w5b18, w5b19, w5b20, w5b21, w5b22, w5b23, w5b24, w5b25, w5b26, w5b27, w5b28, w5b29, w5b30, w5b31 = COPY(i351, i350, i349, i348, i347, i346, i345, i344, i343, i342, i341, i340, i339, i338, i337, i336, i335, i334, i333, i332, i331, i330, i329, i328, i327, i326, i325, i324, i323, i322, i321, i320) - - w6b0, w6b1, w6b2, w6b3, w6b4, w6b5, w6b6, w6b7, w6b8, w6b9, w6b10, w6b11, w6b12, w6b13, w6b14, w6b15, w6b16, w6b17, w6b18, w6b19, w6b20, w6b21, w6b22, w6b23, w6b24, w6b25, w6b26, w6b27, w6b28, w6b29, w6b30, w6b31 = COPY(i319, i318, i317, i316, i315, i314, i313, i312, i311, i310, i309, i308, i307, i306, i305, i304, i303, i302, i301, i300, i299, i298, i297, i296, i295, i294, i293, i292, i291, i290, i289, i288) - - w7b0, w7b1, w7b2, w7b3, w7b4, w7b5, w7b6, w7b7, w7b8, w7b9, w7b10, w7b11, w7b12, w7b13, w7b14, w7b15, w7b16, w7b17, w7b18, w7b19, w7b20, w7b21, w7b22, w7b23, w7b24, w7b25, w7b26, w7b27, w7b28, w7b29, w7b30, w7b31 = COPY(i287, i286, i285, i284, i283, i282, i281, i280, i279, i278, i277, i276, i275, i274, i273, i272, i271, i270, i269, i268, i267, i266, i265, i264, i263, i262, i261, i260, i259, i258, i257, i256) - - w8b0, w8b1, w8b2, w8b3, w8b4, w8b5, w8b6, w8b7, w8b8, w8b9, w8b10, w8b11, w8b12, w8b13, w8b14, w8b15, w8b16, w8b17, w8b18, w8b19, w8b20, w8b21, w8b22, w8b23, w8b24, w8b25, w8b26, w8b27, w8b28, w8b29, w8b30, w8b31 = COPY(i255, i254, i253, i252, i251, i250, i249, i248, i247, i246, i245, i244, i243, i242, i241, i240, i239, i238, i237, i236, i235, i234, i233, i232, i231, i230, i229, i228, i227, i226, i225, i224) - - w9b0, w9b1, w9b2, w9b3, w9b4, w9b5, w9b6, w9b7, w9b8, w9b9, w9b10, w9b11, w9b12, w9b13, w9b14, w9b15, w9b16, w9b17, w9b18, w9b19, w9b20, w9b21, w9b22, w9b23, w9b24, w9b25, w9b26, w9b27, w9b28, w9b29, w9b30, w9b31 = COPY(i223, i222, i221, i220, i219, i218, i217, i216, i215, i214, i213, i212, i211, i210, i209, i208, i207, i206, i205, i204, i203, i202, i201, i200, i199, i198, i197, i196, i195, i194, i193, i192) - - w10b0, w10b1, w10b2, w10b3, w10b4, w10b5, w10b6, w10b7, w10b8, w10b9, w10b10, w10b11, w10b12, w10b13, w10b14, w10b15, w10b16, w10b17, w10b18, w10b19, w10b20, w10b21, w10b22, w10b23, w10b24, w10b25, w10b26, w10b27, w10b28, w10b29, w10b30, w10b31 = COPY(i191, i190, i189, i188, i187, i186, i185, i184, i183, i182, i181, i180, i179, i178, i177, i176, i175, i174, i173, i172, i171, i170, i169, i168, i167, i166, i165, i164, i163, i162, i161, i160) - - w11b0, w11b1, w11b2, w11b3, w11b4, w11b5, w11b6, w11b7, w11b8, w11b9, w11b10, w11b11, w11b12, w11b13, w11b14, w11b15, w11b16, w11b17, w11b18, w11b19, w11b20, w11b21, w11b22, w11b23, w11b24, w11b25, w11b26, w11b27, w11b28, w11b29, w11b30, w11b31 = COPY(i159, i158, i157, i156, i155, i154, i153, i152, i151, i150, i149, i148, i147, i146, i145, i144, i143, i142, i141, i140, i139, i138, i137, i136, i135, i134, i133, i132, i131, i130, i129, i128) - - w12b0, w12b1, w12b2, w12b3, w12b4, w12b5, w12b6, w12b7, w12b8, w12b9, w12b10, w12b11, w12b12, w12b13, w12b14, w12b15, w12b16, w12b17, w12b18, w12b19, w12b20, w12b21, w12b22, w12b23, w12b24, w12b25, w12b26, w12b27, w12b28, w12b29, w12b30, w12b31 = COPY(i127, i126, i125, i124, i123, i122, i121, i120, i119, i118, i117, i116, i115, i114, i113, i112, i111, i110, i109, i108, i107, i106, i105, i104, i103, i102, i101, i100, i99, i98, i97, i96) - - w13b0, w13b1, w13b2, w13b3, w13b4, w13b5, w13b6, w13b7, w13b8, w13b9, w13b10, w13b11, w13b12, w13b13, w13b14, w13b15, w13b16, w13b17, w13b18, w13b19, w13b20, w13b21, w13b22, w13b23, w13b24, w13b25, w13b26, w13b27, w13b28, w13b29, w13b30, w13b31 = COPY(i95, i94, i93, i92, i91, i90, i89, i88, i87, i86, i85, i84, i83, i82, i81, i80, i79, i78, i77, i76, i75, i74, i73, i72, i71, i70, i69, i68, i67, i66, i65, i64) - - w14b0, w14b1, w14b2, w14b3, w14b4, w14b5, w14b6, w14b7, w14b8, w14b9, w14b10, w14b11, w14b12, w14b13, w14b14, w14b15, w14b16, w14b17, w14b18, w14b19, w14b20, w14b21, w14b22, w14b23, w14b24, w14b25, w14b26, w14b27, w14b28, w14b29, w14b30, w14b31 = COPY(i63, i62, i61, i60, i59, i58, i57, i56, i55, i54, i53, i52, i51, i50, i49, i48, i47, i46, i45, i44, i43, i42, i41, i40, i39, i38, i37, i36, i35, i34, i33, i32) - - w15b0, w15b1, w15b2, w15b3, w15b4, w15b5, w15b6, w15b7, w15b8, w15b9, w15b10, w15b11, w15b12, w15b13, w15b14, w15b15, w15b16, w15b17, w15b18, w15b19, w15b20, w15b21, w15b22, w15b23, w15b24, w15b25, w15b26, w15b27, w15b28, w15b29, w15b30, w15b31 = COPY(i31, i30, i29, i28, i27, i26, i25, i24, i23, i22, i21, i20, i19, i18, i17, i16, i15, i14, i13, i12, i11, i10, i9, i8, i7, i6, i5, i4, i3, i2, i1, i0) - - // EXTENSION LOOP - - // PASS 16 - w16b31, w16b30, w16b29, w16b28, w16b27, w16b26, w16b25, w16b24, w16b23, w16b22, w16b21, w16b20, w16b19, w16b18, w16b17, w16b16, w16b15, w16b14, w16b13, w16b12, w16b11, w16b10, w16b9, w16b8, w16b7, w16b6, w16b5, w16b4, w16b3, w16b2, w16b1, w16b0 = EXTEND(w1b31, w1b30, w1b29, w1b28, w1b27, w1b26, w1b25, w1b24, w1b23, w1b22, w1b21, w1b20, w1b19, w1b18, w1b17, w1b16, w1b15, w1b14, w1b13, w1b12, w1b11, w1b10, w1b9, w1b8, w1b7, w1b6, w1b5, w1b4, w1b3, w1b2, w1b1, w1b0, w14b31, w14b30, w14b29, w14b28, w14b27, w14b26, w14b25, w14b24, w14b23, w14b22, w14b21, w14b20, w14b19, w14b18, w14b17, w14b16, w14b15, w14b14, w14b13, w14b12, w14b11, w14b10, w14b9, w14b8, w14b7, w14b6, w14b5, w14b4, w14b3, w14b2, w14b1, w14b0, w0b31, w0b30, w0b29, w0b28, w0b27, w0b26, w0b25, w0b24, w0b23, w0b22, w0b21, w0b20, w0b19, w0b18, w0b17, w0b16, w0b15, w0b14, w0b13, w0b12, w0b11, w0b10, w0b9, w0b8, w0b7, w0b6, w0b5, w0b4, w0b3, w0b2, w0b1, w0b0, w9b31, w9b30, w9b29, w9b28, w9b27, w9b26, w9b25, w9b24, w9b23, w9b22, w9b21, w9b20, w9b19, w9b18, w9b17, w9b16, w9b15, w9b14, w9b13, w9b12, w9b11, w9b10, w9b9, w9b8, w9b7, w9b6, w9b5, w9b4, w9b3, w9b2, w9b1, w9b0) - - // PASS 17 - w17b31, w17b30, w17b29, w17b28, w17b27, w17b26, w17b25, w17b24, w17b23, w17b22, w17b21, w17b20, w17b19, w17b18, w17b17, w17b16, w17b15, w17b14, w17b13, w17b12, w17b11, w17b10, w17b9, w17b8, w17b7, w17b6, w17b5, w17b4, w17b3, w17b2, w17b1, w17b0 = EXTEND(w2b31, w2b30, w2b29, w2b28, w2b27, w2b26, w2b25, w2b24, w2b23, w2b22, w2b21, w2b20, w2b19, w2b18, w2b17, w2b16, w2b15, w2b14, w2b13, w2b12, w2b11, w2b10, w2b9, w2b8, w2b7, w2b6, w2b5, w2b4, w2b3, w2b2, w2b1, w2b0, w15b31, w15b30, w15b29, w15b28, w15b27, w15b26, w15b25, w15b24, w15b23, w15b22, w15b21, w15b20, w15b19, w15b18, w15b17, w15b16, w15b15, w15b14, w15b13, w15b12, w15b11, w15b10, w15b9, w15b8, w15b7, w15b6, w15b5, w15b4, w15b3, w15b2, w15b1, w15b0, w1b31, w1b30, w1b29, w1b28, w1b27, w1b26, w1b25, w1b24, w1b23, w1b22, w1b21, w1b20, w1b19, w1b18, w1b17, w1b16, w1b15, w1b14, w1b13, w1b12, w1b11, w1b10, w1b9, w1b8, w1b7, w1b6, w1b5, w1b4, w1b3, w1b2, w1b1, w1b0, w10b31, w10b30, w10b29, w10b28, w10b27, w10b26, w10b25, w10b24, w10b23, w10b22, w10b21, w10b20, w10b19, w10b18, w10b17, w10b16, w10b15, w10b14, w10b13, w10b12, w10b11, w10b10, w10b9, w10b8, w10b7, w10b6, w10b5, w10b4, w10b3, w10b2, w10b1, w10b0) - - // PASS 18 - w18b31, w18b30, w18b29, w18b28, w18b27, w18b26, w18b25, w18b24, w18b23, w18b22, w18b21, w18b20, w18b19, w18b18, w18b17, w18b16, w18b15, w18b14, w18b13, w18b12, w18b11, w18b10, w18b9, w18b8, w18b7, w18b6, w18b5, w18b4, w18b3, w18b2, w18b1, w18b0 = EXTEND(w3b31, w3b30, w3b29, w3b28, w3b27, w3b26, w3b25, w3b24, w3b23, w3b22, w3b21, w3b20, w3b19, w3b18, w3b17, w3b16, w3b15, w3b14, w3b13, w3b12, w3b11, w3b10, w3b9, w3b8, w3b7, w3b6, w3b5, w3b4, w3b3, w3b2, w3b1, w3b0, w16b31, w16b30, w16b29, w16b28, w16b27, w16b26, w16b25, w16b24, w16b23, w16b22, w16b21, w16b20, w16b19, w16b18, w16b17, w16b16, w16b15, w16b14, w16b13, w16b12, w16b11, w16b10, w16b9, w16b8, w16b7, w16b6, w16b5, w16b4, w16b3, w16b2, w16b1, w16b0, w2b31, w2b30, w2b29, w2b28, w2b27, w2b26, w2b25, w2b24, w2b23, w2b22, w2b21, w2b20, w2b19, w2b18, w2b17, w2b16, w2b15, w2b14, w2b13, w2b12, w2b11, w2b10, w2b9, w2b8, w2b7, w2b6, w2b5, w2b4, w2b3, w2b2, w2b1, w2b0, w11b31, w11b30, w11b29, w11b28, w11b27, w11b26, w11b25, w11b24, w11b23, w11b22, w11b21, w11b20, w11b19, w11b18, w11b17, w11b16, w11b15, w11b14, w11b13, w11b12, w11b11, w11b10, w11b9, w11b8, w11b7, w11b6, w11b5, w11b4, w11b3, w11b2, w11b1, w11b0) - - // PASS 19 - w19b31, w19b30, w19b29, w19b28, w19b27, w19b26, w19b25, w19b24, w19b23, w19b22, w19b21, w19b20, w19b19, w19b18, w19b17, w19b16, w19b15, w19b14, w19b13, w19b12, w19b11, w19b10, w19b9, w19b8, w19b7, w19b6, w19b5, w19b4, w19b3, w19b2, w19b1, w19b0 = EXTEND(w4b31, w4b30, w4b29, w4b28, w4b27, w4b26, w4b25, w4b24, w4b23, w4b22, w4b21, w4b20, w4b19, w4b18, w4b17, w4b16, w4b15, w4b14, w4b13, w4b12, w4b11, w4b10, w4b9, w4b8, w4b7, w4b6, w4b5, w4b4, w4b3, w4b2, w4b1, w4b0, w17b31, w17b30, w17b29, w17b28, w17b27, w17b26, w17b25, w17b24, w17b23, w17b22, w17b21, w17b20, w17b19, w17b18, w17b17, w17b16, w17b15, w17b14, w17b13, w17b12, w17b11, w17b10, w17b9, w17b8, w17b7, w17b6, w17b5, w17b4, w17b3, w17b2, w17b1, w17b0, w3b31, w3b30, w3b29, w3b28, w3b27, w3b26, w3b25, w3b24, w3b23, w3b22, w3b21, w3b20, w3b19, w3b18, w3b17, w3b16, w3b15, w3b14, w3b13, w3b12, w3b11, w3b10, w3b9, w3b8, w3b7, w3b6, w3b5, w3b4, w3b3, w3b2, w3b1, w3b0, w12b31, w12b30, w12b29, w12b28, w12b27, w12b26, w12b25, w12b24, w12b23, w12b22, w12b21, w12b20, w12b19, w12b18, w12b17, w12b16, w12b15, w12b14, w12b13, w12b12, w12b11, w12b10, w12b9, w12b8, w12b7, w12b6, w12b5, w12b4, w12b3, w12b2, w12b1, w12b0) - - // PASS 20 - w20b31, w20b30, w20b29, w20b28, w20b27, w20b26, w20b25, w20b24, w20b23, w20b22, w20b21, w20b20, w20b19, w20b18, w20b17, w20b16, w20b15, w20b14, w20b13, w20b12, w20b11, w20b10, w20b9, w20b8, w20b7, w20b6, w20b5, w20b4, w20b3, w20b2, w20b1, w20b0 = EXTEND(w5b31, w5b30, w5b29, w5b28, w5b27, w5b26, w5b25, w5b24, w5b23, w5b22, w5b21, w5b20, w5b19, w5b18, w5b17, w5b16, w5b15, w5b14, w5b13, w5b12, w5b11, w5b10, w5b9, w5b8, w5b7, w5b6, w5b5, w5b4, w5b3, w5b2, w5b1, w5b0, w18b31, w18b30, w18b29, w18b28, w18b27, w18b26, w18b25, w18b24, w18b23, w18b22, w18b21, w18b20, w18b19, w18b18, w18b17, w18b16, w18b15, w18b14, w18b13, w18b12, w18b11, w18b10, w18b9, w18b8, w18b7, w18b6, w18b5, w18b4, w18b3, w18b2, w18b1, w18b0, w4b31, w4b30, w4b29, w4b28, w4b27, w4b26, w4b25, w4b24, w4b23, w4b22, w4b21, w4b20, w4b19, w4b18, w4b17, w4b16, w4b15, w4b14, w4b13, w4b12, w4b11, w4b10, w4b9, w4b8, w4b7, w4b6, w4b5, w4b4, w4b3, w4b2, w4b1, w4b0, w13b31, w13b30, w13b29, w13b28, w13b27, w13b26, w13b25, w13b24, w13b23, w13b22, w13b21, w13b20, w13b19, w13b18, w13b17, w13b16, w13b15, w13b14, w13b13, w13b12, w13b11, w13b10, w13b9, w13b8, w13b7, w13b6, w13b5, w13b4, w13b3, w13b2, w13b1, w13b0) - - // PASS 21 - w21b31, w21b30, w21b29, w21b28, w21b27, w21b26, w21b25, w21b24, w21b23, w21b22, w21b21, w21b20, w21b19, w21b18, w21b17, w21b16, w21b15, w21b14, w21b13, w21b12, w21b11, w21b10, w21b9, w21b8, w21b7, w21b6, w21b5, w21b4, w21b3, w21b2, w21b1, w21b0 = EXTEND(w6b31, w6b30, w6b29, w6b28, w6b27, w6b26, w6b25, w6b24, w6b23, w6b22, w6b21, w6b20, w6b19, w6b18, w6b17, w6b16, w6b15, w6b14, w6b13, w6b12, w6b11, w6b10, w6b9, w6b8, w6b7, w6b6, w6b5, w6b4, w6b3, w6b2, w6b1, w6b0, w19b31, w19b30, w19b29, w19b28, w19b27, w19b26, w19b25, w19b24, w19b23, w19b22, w19b21, w19b20, w19b19, w19b18, w19b17, w19b16, w19b15, w19b14, w19b13, w19b12, w19b11, w19b10, w19b9, w19b8, w19b7, w19b6, w19b5, w19b4, w19b3, w19b2, w19b1, w19b0, w5b31, w5b30, w5b29, w5b28, w5b27, w5b26, w5b25, w5b24, w5b23, w5b22, w5b21, w5b20, w5b19, w5b18, w5b17, w5b16, w5b15, w5b14, w5b13, w5b12, w5b11, w5b10, w5b9, w5b8, w5b7, w5b6, w5b5, w5b4, w5b3, w5b2, w5b1, w5b0, w14b31, w14b30, w14b29, w14b28, w14b27, w14b26, w14b25, w14b24, w14b23, w14b22, w14b21, w14b20, w14b19, w14b18, w14b17, w14b16, w14b15, w14b14, w14b13, w14b12, w14b11, w14b10, w14b9, w14b8, w14b7, w14b6, w14b5, w14b4, w14b3, w14b2, w14b1, w14b0) - - // PASS 22 - w22b31, w22b30, w22b29, w22b28, w22b27, w22b26, w22b25, w22b24, w22b23, w22b22, w22b21, w22b20, w22b19, w22b18, w22b17, w22b16, w22b15, w22b14, w22b13, w22b12, w22b11, w22b10, w22b9, w22b8, w22b7, w22b6, w22b5, w22b4, w22b3, w22b2, w22b1, w22b0 = EXTEND(w7b31, w7b30, w7b29, w7b28, w7b27, w7b26, w7b25, w7b24, w7b23, w7b22, w7b21, w7b20, w7b19, w7b18, w7b17, w7b16, w7b15, w7b14, w7b13, w7b12, w7b11, w7b10, w7b9, w7b8, w7b7, w7b6, w7b5, w7b4, w7b3, w7b2, w7b1, w7b0, w20b31, w20b30, w20b29, w20b28, w20b27, w20b26, w20b25, w20b24, w20b23, w20b22, w20b21, w20b20, w20b19, w20b18, w20b17, w20b16, w20b15, w20b14, w20b13, w20b12, w20b11, w20b10, w20b9, w20b8, w20b7, w20b6, w20b5, w20b4, w20b3, w20b2, w20b1, w20b0, w6b31, w6b30, w6b29, w6b28, w6b27, w6b26, w6b25, w6b24, w6b23, w6b22, w6b21, w6b20, w6b19, w6b18, w6b17, w6b16, w6b15, w6b14, w6b13, w6b12, w6b11, w6b10, w6b9, w6b8, w6b7, w6b6, w6b5, w6b4, w6b3, w6b2, w6b1, w6b0, w15b31, w15b30, w15b29, w15b28, w15b27, w15b26, w15b25, w15b24, w15b23, w15b22, w15b21, w15b20, w15b19, w15b18, w15b17, w15b16, w15b15, w15b14, w15b13, w15b12, w15b11, w15b10, w15b9, w15b8, w15b7, w15b6, w15b5, w15b4, w15b3, w15b2, w15b1, w15b0) - - // PASS 23 - w23b31, w23b30, w23b29, w23b28, w23b27, w23b26, w23b25, w23b24, w23b23, w23b22, w23b21, w23b20, w23b19, w23b18, w23b17, w23b16, w23b15, w23b14, w23b13, w23b12, w23b11, w23b10, w23b9, w23b8, w23b7, w23b6, w23b5, w23b4, w23b3, w23b2, w23b1, w23b0 = EXTEND(w8b31, w8b30, w8b29, w8b28, w8b27, w8b26, w8b25, w8b24, w8b23, w8b22, w8b21, w8b20, w8b19, w8b18, w8b17, w8b16, w8b15, w8b14, w8b13, w8b12, w8b11, w8b10, w8b9, w8b8, w8b7, w8b6, w8b5, w8b4, w8b3, w8b2, w8b1, w8b0, w21b31, w21b30, w21b29, w21b28, w21b27, w21b26, w21b25, w21b24, w21b23, w21b22, w21b21, w21b20, w21b19, w21b18, w21b17, w21b16, w21b15, w21b14, w21b13, w21b12, w21b11, w21b10, w21b9, w21b8, w21b7, w21b6, w21b5, w21b4, w21b3, w21b2, w21b1, w21b0, w7b31, w7b30, w7b29, w7b28, w7b27, w7b26, w7b25, w7b24, w7b23, w7b22, w7b21, w7b20, w7b19, w7b18, w7b17, w7b16, w7b15, w7b14, w7b13, w7b12, w7b11, w7b10, w7b9, w7b8, w7b7, w7b6, w7b5, w7b4, w7b3, w7b2, w7b1, w7b0, w16b31, w16b30, w16b29, w16b28, w16b27, w16b26, w16b25, w16b24, w16b23, w16b22, w16b21, w16b20, w16b19, w16b18, w16b17, w16b16, w16b15, w16b14, w16b13, w16b12, w16b11, w16b10, w16b9, w16b8, w16b7, w16b6, w16b5, w16b4, w16b3, w16b2, w16b1, w16b0) - - // PASS 24 - w24b31, w24b30, w24b29, w24b28, w24b27, w24b26, w24b25, w24b24, w24b23, w24b22, w24b21, w24b20, w24b19, w24b18, w24b17, w24b16, w24b15, w24b14, w24b13, w24b12, w24b11, w24b10, w24b9, w24b8, w24b7, w24b6, w24b5, w24b4, w24b3, w24b2, w24b1, w24b0 = EXTEND(w9b31, w9b30, w9b29, w9b28, w9b27, w9b26, w9b25, w9b24, w9b23, w9b22, w9b21, w9b20, w9b19, w9b18, w9b17, w9b16, w9b15, w9b14, w9b13, w9b12, w9b11, w9b10, w9b9, w9b8, w9b7, w9b6, w9b5, w9b4, w9b3, w9b2, w9b1, w9b0, w22b31, w22b30, w22b29, w22b28, w22b27, w22b26, w22b25, w22b24, w22b23, w22b22, w22b21, w22b20, w22b19, w22b18, w22b17, w22b16, w22b15, w22b14, w22b13, w22b12, w22b11, w22b10, w22b9, w22b8, w22b7, w22b6, w22b5, w22b4, w22b3, w22b2, w22b1, w22b0, w8b31, w8b30, w8b29, w8b28, w8b27, w8b26, w8b25, w8b24, w8b23, w8b22, w8b21, w8b20, w8b19, w8b18, w8b17, w8b16, w8b15, w8b14, w8b13, w8b12, w8b11, w8b10, w8b9, w8b8, w8b7, w8b6, w8b5, w8b4, w8b3, w8b2, w8b1, w8b0, w17b31, w17b30, w17b29, w17b28, w17b27, w17b26, w17b25, w17b24, w17b23, w17b22, w17b21, w17b20, w17b19, w17b18, w17b17, w17b16, w17b15, w17b14, w17b13, w17b12, w17b11, w17b10, w17b9, w17b8, w17b7, w17b6, w17b5, w17b4, w17b3, w17b2, w17b1, w17b0) - - // PASS 25 - w25b31, w25b30, w25b29, w25b28, w25b27, w25b26, w25b25, w25b24, w25b23, w25b22, w25b21, w25b20, w25b19, w25b18, w25b17, w25b16, w25b15, w25b14, w25b13, w25b12, w25b11, w25b10, w25b9, w25b8, w25b7, w25b6, w25b5, w25b4, w25b3, w25b2, w25b1, w25b0 = EXTEND(w10b31, w10b30, w10b29, w10b28, w10b27, w10b26, w10b25, w10b24, w10b23, w10b22, w10b21, w10b20, w10b19, w10b18, w10b17, w10b16, w10b15, w10b14, w10b13, w10b12, w10b11, w10b10, w10b9, w10b8, w10b7, w10b6, w10b5, w10b4, w10b3, w10b2, w10b1, w10b0, w23b31, w23b30, w23b29, w23b28, w23b27, w23b26, w23b25, w23b24, w23b23, w23b22, w23b21, w23b20, w23b19, w23b18, w23b17, w23b16, w23b15, w23b14, w23b13, w23b12, w23b11, w23b10, w23b9, w23b8, w23b7, w23b6, w23b5, w23b4, w23b3, w23b2, w23b1, w23b0, w9b31, w9b30, w9b29, w9b28, w9b27, w9b26, w9b25, w9b24, w9b23, w9b22, w9b21, w9b20, w9b19, w9b18, w9b17, w9b16, w9b15, w9b14, w9b13, w9b12, w9b11, w9b10, w9b9, w9b8, w9b7, w9b6, w9b5, w9b4, w9b3, w9b2, w9b1, w9b0, w18b31, w18b30, w18b29, w18b28, w18b27, w18b26, w18b25, w18b24, w18b23, w18b22, w18b21, w18b20, w18b19, w18b18, w18b17, w18b16, w18b15, w18b14, w18b13, w18b12, w18b11, w18b10, w18b9, w18b8, w18b7, w18b6, w18b5, w18b4, w18b3, w18b2, w18b1, w18b0) - - // PASS 26 - w26b31, w26b30, w26b29, w26b28, w26b27, w26b26, w26b25, w26b24, w26b23, w26b22, w26b21, w26b20, w26b19, w26b18, w26b17, w26b16, w26b15, w26b14, w26b13, w26b12, w26b11, w26b10, w26b9, w26b8, w26b7, w26b6, w26b5, w26b4, w26b3, w26b2, w26b1, w26b0 = EXTEND(w11b31, w11b30, w11b29, w11b28, w11b27, w11b26, w11b25, w11b24, w11b23, w11b22, w11b21, w11b20, w11b19, w11b18, w11b17, w11b16, w11b15, w11b14, w11b13, w11b12, w11b11, w11b10, w11b9, w11b8, w11b7, w11b6, w11b5, w11b4, w11b3, w11b2, w11b1, w11b0, w24b31, w24b30, w24b29, w24b28, w24b27, w24b26, w24b25, w24b24, w24b23, w24b22, w24b21, w24b20, w24b19, w24b18, w24b17, w24b16, w24b15, w24b14, w24b13, w24b12, w24b11, w24b10, w24b9, w24b8, w24b7, w24b6, w24b5, w24b4, w24b3, w24b2, w24b1, w24b0, w10b31, w10b30, w10b29, w10b28, w10b27, w10b26, w10b25, w10b24, w10b23, w10b22, w10b21, w10b20, w10b19, w10b18, w10b17, w10b16, w10b15, w10b14, w10b13, w10b12, w10b11, w10b10, w10b9, w10b8, w10b7, w10b6, w10b5, w10b4, w10b3, w10b2, w10b1, w10b0, w19b31, w19b30, w19b29, w19b28, w19b27, w19b26, w19b25, w19b24, w19b23, w19b22, w19b21, w19b20, w19b19, w19b18, w19b17, w19b16, w19b15, w19b14, w19b13, w19b12, w19b11, w19b10, w19b9, w19b8, w19b7, w19b6, w19b5, w19b4, w19b3, w19b2, w19b1, w19b0) - - // PASS 27 - w27b31, w27b30, w27b29, w27b28, w27b27, w27b26, w27b25, w27b24, w27b23, w27b22, w27b21, w27b20, w27b19, w27b18, w27b17, w27b16, w27b15, w27b14, w27b13, w27b12, w27b11, w27b10, w27b9, w27b8, w27b7, w27b6, w27b5, w27b4, w27b3, w27b2, w27b1, w27b0 = EXTEND(w12b31, w12b30, w12b29, w12b28, w12b27, w12b26, w12b25, w12b24, w12b23, w12b22, w12b21, w12b20, w12b19, w12b18, w12b17, w12b16, w12b15, w12b14, w12b13, w12b12, w12b11, w12b10, w12b9, w12b8, w12b7, w12b6, w12b5, w12b4, w12b3, w12b2, w12b1, w12b0, w25b31, w25b30, w25b29, w25b28, w25b27, w25b26, w25b25, w25b24, w25b23, w25b22, w25b21, w25b20, w25b19, w25b18, w25b17, w25b16, w25b15, w25b14, w25b13, w25b12, w25b11, w25b10, w25b9, w25b8, w25b7, w25b6, w25b5, w25b4, w25b3, w25b2, w25b1, w25b0, w11b31, w11b30, w11b29, w11b28, w11b27, w11b26, w11b25, w11b24, w11b23, w11b22, w11b21, w11b20, w11b19, w11b18, w11b17, w11b16, w11b15, w11b14, w11b13, w11b12, w11b11, w11b10, w11b9, w11b8, w11b7, w11b6, w11b5, w11b4, w11b3, w11b2, w11b1, w11b0, w20b31, w20b30, w20b29, w20b28, w20b27, w20b26, w20b25, w20b24, w20b23, w20b22, w20b21, w20b20, w20b19, w20b18, w20b17, w20b16, w20b15, w20b14, w20b13, w20b12, w20b11, w20b10, w20b9, w20b8, w20b7, w20b6, w20b5, w20b4, w20b3, w20b2, w20b1, w20b0) - - // PASS 28 - w28b31, w28b30, w28b29, w28b28, w28b27, w28b26, w28b25, w28b24, w28b23, w28b22, w28b21, w28b20, w28b19, w28b18, w28b17, w28b16, w28b15, w28b14, w28b13, w28b12, w28b11, w28b10, w28b9, w28b8, w28b7, w28b6, w28b5, w28b4, w28b3, w28b2, w28b1, w28b0 = EXTEND(w13b31, w13b30, w13b29, w13b28, w13b27, w13b26, w13b25, w13b24, w13b23, w13b22, w13b21, w13b20, w13b19, w13b18, w13b17, w13b16, w13b15, w13b14, w13b13, w13b12, w13b11, w13b10, w13b9, w13b8, w13b7, w13b6, w13b5, w13b4, w13b3, w13b2, w13b1, w13b0, w26b31, w26b30, w26b29, w26b28, w26b27, w26b26, w26b25, w26b24, w26b23, w26b22, w26b21, w26b20, w26b19, w26b18, w26b17, w26b16, w26b15, w26b14, w26b13, w26b12, w26b11, w26b10, w26b9, w26b8, w26b7, w26b6, w26b5, w26b4, w26b3, w26b2, w26b1, w26b0, w12b31, w12b30, w12b29, w12b28, w12b27, w12b26, w12b25, w12b24, w12b23, w12b22, w12b21, w12b20, w12b19, w12b18, w12b17, w12b16, w12b15, w12b14, w12b13, w12b12, w12b11, w12b10, w12b9, w12b8, w12b7, w12b6, w12b5, w12b4, w12b3, w12b2, w12b1, w12b0, w21b31, w21b30, w21b29, w21b28, w21b27, w21b26, w21b25, w21b24, w21b23, w21b22, w21b21, w21b20, w21b19, w21b18, w21b17, w21b16, w21b15, w21b14, w21b13, w21b12, w21b11, w21b10, w21b9, w21b8, w21b7, w21b6, w21b5, w21b4, w21b3, w21b2, w21b1, w21b0) - - // PASS 29 - w29b31, w29b30, w29b29, w29b28, w29b27, w29b26, w29b25, w29b24, w29b23, w29b22, w29b21, w29b20, w29b19, w29b18, w29b17, w29b16, w29b15, w29b14, w29b13, w29b12, w29b11, w29b10, w29b9, w29b8, w29b7, w29b6, w29b5, w29b4, w29b3, w29b2, w29b1, w29b0 = EXTEND(w14b31, w14b30, w14b29, w14b28, w14b27, w14b26, w14b25, w14b24, w14b23, w14b22, w14b21, w14b20, w14b19, w14b18, w14b17, w14b16, w14b15, w14b14, w14b13, w14b12, w14b11, w14b10, w14b9, w14b8, w14b7, w14b6, w14b5, w14b4, w14b3, w14b2, w14b1, w14b0, w27b31, w27b30, w27b29, w27b28, w27b27, w27b26, w27b25, w27b24, w27b23, w27b22, w27b21, w27b20, w27b19, w27b18, w27b17, w27b16, w27b15, w27b14, w27b13, w27b12, w27b11, w27b10, w27b9, w27b8, w27b7, w27b6, w27b5, w27b4, w27b3, w27b2, w27b1, w27b0, w13b31, w13b30, w13b29, w13b28, w13b27, w13b26, w13b25, w13b24, w13b23, w13b22, w13b21, w13b20, w13b19, w13b18, w13b17, w13b16, w13b15, w13b14, w13b13, w13b12, w13b11, w13b10, w13b9, w13b8, w13b7, w13b6, w13b5, w13b4, w13b3, w13b2, w13b1, w13b0, w22b31, w22b30, w22b29, w22b28, w22b27, w22b26, w22b25, w22b24, w22b23, w22b22, w22b21, w22b20, w22b19, w22b18, w22b17, w22b16, w22b15, w22b14, w22b13, w22b12, w22b11, w22b10, w22b9, w22b8, w22b7, w22b6, w22b5, w22b4, w22b3, w22b2, w22b1, w22b0) - - // PASS 30 - w30b31, w30b30, w30b29, w30b28, w30b27, w30b26, w30b25, w30b24, w30b23, w30b22, w30b21, w30b20, w30b19, w30b18, w30b17, w30b16, w30b15, w30b14, w30b13, w30b12, w30b11, w30b10, w30b9, w30b8, w30b7, w30b6, w30b5, w30b4, w30b3, w30b2, w30b1, w30b0 = EXTEND(w15b31, w15b30, w15b29, w15b28, w15b27, w15b26, w15b25, w15b24, w15b23, w15b22, w15b21, w15b20, w15b19, w15b18, w15b17, w15b16, w15b15, w15b14, w15b13, w15b12, w15b11, w15b10, w15b9, w15b8, w15b7, w15b6, w15b5, w15b4, w15b3, w15b2, w15b1, w15b0, w28b31, w28b30, w28b29, w28b28, w28b27, w28b26, w28b25, w28b24, w28b23, w28b22, w28b21, w28b20, w28b19, w28b18, w28b17, w28b16, w28b15, w28b14, w28b13, w28b12, w28b11, w28b10, w28b9, w28b8, w28b7, w28b6, w28b5, w28b4, w28b3, w28b2, w28b1, w28b0, w14b31, w14b30, w14b29, w14b28, w14b27, w14b26, w14b25, w14b24, w14b23, w14b22, w14b21, w14b20, w14b19, w14b18, w14b17, w14b16, w14b15, w14b14, w14b13, w14b12, w14b11, w14b10, w14b9, w14b8, w14b7, w14b6, w14b5, w14b4, w14b3, w14b2, w14b1, w14b0, w23b31, w23b30, w23b29, w23b28, w23b27, w23b26, w23b25, w23b24, w23b23, w23b22, w23b21, w23b20, w23b19, w23b18, w23b17, w23b16, w23b15, w23b14, w23b13, w23b12, w23b11, w23b10, w23b9, w23b8, w23b7, w23b6, w23b5, w23b4, w23b3, w23b2, w23b1, w23b0) - - // PASS 31 - w31b31, w31b30, w31b29, w31b28, w31b27, w31b26, w31b25, w31b24, w31b23, w31b22, w31b21, w31b20, w31b19, w31b18, w31b17, w31b16, w31b15, w31b14, w31b13, w31b12, w31b11, w31b10, w31b9, w31b8, w31b7, w31b6, w31b5, w31b4, w31b3, w31b2, w31b1, w31b0 = EXTEND(w16b31, w16b30, w16b29, w16b28, w16b27, w16b26, w16b25, w16b24, w16b23, w16b22, w16b21, w16b20, w16b19, w16b18, w16b17, w16b16, w16b15, w16b14, w16b13, w16b12, w16b11, w16b10, w16b9, w16b8, w16b7, w16b6, w16b5, w16b4, w16b3, w16b2, w16b1, w16b0, w29b31, w29b30, w29b29, w29b28, w29b27, w29b26, w29b25, w29b24, w29b23, w29b22, w29b21, w29b20, w29b19, w29b18, w29b17, w29b16, w29b15, w29b14, w29b13, w29b12, w29b11, w29b10, w29b9, w29b8, w29b7, w29b6, w29b5, w29b4, w29b3, w29b2, w29b1, w29b0, w15b31, w15b30, w15b29, w15b28, w15b27, w15b26, w15b25, w15b24, w15b23, w15b22, w15b21, w15b20, w15b19, w15b18, w15b17, w15b16, w15b15, w15b14, w15b13, w15b12, w15b11, w15b10, w15b9, w15b8, w15b7, w15b6, w15b5, w15b4, w15b3, w15b2, w15b1, w15b0, w24b31, w24b30, w24b29, w24b28, w24b27, w24b26, w24b25, w24b24, w24b23, w24b22, w24b21, w24b20, w24b19, w24b18, w24b17, w24b16, w24b15, w24b14, w24b13, w24b12, w24b11, w24b10, w24b9, w24b8, w24b7, w24b6, w24b5, w24b4, w24b3, w24b2, w24b1, w24b0) - - // PASS 32 - w32b31, w32b30, w32b29, w32b28, w32b27, w32b26, w32b25, w32b24, w32b23, w32b22, w32b21, w32b20, w32b19, w32b18, w32b17, w32b16, w32b15, w32b14, w32b13, w32b12, w32b11, w32b10, w32b9, w32b8, w32b7, w32b6, w32b5, w32b4, w32b3, w32b2, w32b1, w32b0 = EXTEND(w17b31, w17b30, w17b29, w17b28, w17b27, w17b26, w17b25, w17b24, w17b23, w17b22, w17b21, w17b20, w17b19, w17b18, w17b17, w17b16, w17b15, w17b14, w17b13, w17b12, w17b11, w17b10, w17b9, w17b8, w17b7, w17b6, w17b5, w17b4, w17b3, w17b2, w17b1, w17b0, w30b31, w30b30, w30b29, w30b28, w30b27, w30b26, w30b25, w30b24, w30b23, w30b22, w30b21, w30b20, w30b19, w30b18, w30b17, w30b16, w30b15, w30b14, w30b13, w30b12, w30b11, w30b10, w30b9, w30b8, w30b7, w30b6, w30b5, w30b4, w30b3, w30b2, w30b1, w30b0, w16b31, w16b30, w16b29, w16b28, w16b27, w16b26, w16b25, w16b24, w16b23, w16b22, w16b21, w16b20, w16b19, w16b18, w16b17, w16b16, w16b15, w16b14, w16b13, w16b12, w16b11, w16b10, w16b9, w16b8, w16b7, w16b6, w16b5, w16b4, w16b3, w16b2, w16b1, w16b0, w25b31, w25b30, w25b29, w25b28, w25b27, w25b26, w25b25, w25b24, w25b23, w25b22, w25b21, w25b20, w25b19, w25b18, w25b17, w25b16, w25b15, w25b14, w25b13, w25b12, w25b11, w25b10, w25b9, w25b8, w25b7, w25b6, w25b5, w25b4, w25b3, w25b2, w25b1, w25b0) - - // PASS 33 - w33b31, w33b30, w33b29, w33b28, w33b27, w33b26, w33b25, w33b24, w33b23, w33b22, w33b21, w33b20, w33b19, w33b18, w33b17, w33b16, w33b15, w33b14, w33b13, w33b12, w33b11, w33b10, w33b9, w33b8, w33b7, w33b6, w33b5, w33b4, w33b3, w33b2, w33b1, w33b0 = EXTEND(w18b31, w18b30, w18b29, w18b28, w18b27, w18b26, w18b25, w18b24, w18b23, w18b22, w18b21, w18b20, w18b19, w18b18, w18b17, w18b16, w18b15, w18b14, w18b13, w18b12, w18b11, w18b10, w18b9, w18b8, w18b7, w18b6, w18b5, w18b4, w18b3, w18b2, w18b1, w18b0, w31b31, w31b30, w31b29, w31b28, w31b27, w31b26, w31b25, w31b24, w31b23, w31b22, w31b21, w31b20, w31b19, w31b18, w31b17, w31b16, w31b15, w31b14, w31b13, w31b12, w31b11, w31b10, w31b9, w31b8, w31b7, w31b6, w31b5, w31b4, w31b3, w31b2, w31b1, w31b0, w17b31, w17b30, w17b29, w17b28, w17b27, w17b26, w17b25, w17b24, w17b23, w17b22, w17b21, w17b20, w17b19, w17b18, w17b17, w17b16, w17b15, w17b14, w17b13, w17b12, w17b11, w17b10, w17b9, w17b8, w17b7, w17b6, w17b5, w17b4, w17b3, w17b2, w17b1, w17b0, w26b31, w26b30, w26b29, w26b28, w26b27, w26b26, w26b25, w26b24, w26b23, w26b22, w26b21, w26b20, w26b19, w26b18, w26b17, w26b16, w26b15, w26b14, w26b13, w26b12, w26b11, w26b10, w26b9, w26b8, w26b7, w26b6, w26b5, w26b4, w26b3, w26b2, w26b1, w26b0) - - // PASS 34 - w34b31, w34b30, w34b29, w34b28, w34b27, w34b26, w34b25, w34b24, w34b23, w34b22, w34b21, w34b20, w34b19, w34b18, w34b17, w34b16, w34b15, w34b14, w34b13, w34b12, w34b11, w34b10, w34b9, w34b8, w34b7, w34b6, w34b5, w34b4, w34b3, w34b2, w34b1, w34b0 = EXTEND(w19b31, w19b30, w19b29, w19b28, w19b27, w19b26, w19b25, w19b24, w19b23, w19b22, w19b21, w19b20, w19b19, w19b18, w19b17, w19b16, w19b15, w19b14, w19b13, w19b12, w19b11, w19b10, w19b9, w19b8, w19b7, w19b6, w19b5, w19b4, w19b3, w19b2, w19b1, w19b0, w32b31, w32b30, w32b29, w32b28, w32b27, w32b26, w32b25, w32b24, w32b23, w32b22, w32b21, w32b20, w32b19, w32b18, w32b17, w32b16, w32b15, w32b14, w32b13, w32b12, w32b11, w32b10, w32b9, w32b8, w32b7, w32b6, w32b5, w32b4, w32b3, w32b2, w32b1, w32b0, w18b31, w18b30, w18b29, w18b28, w18b27, w18b26, w18b25, w18b24, w18b23, w18b22, w18b21, w18b20, w18b19, w18b18, w18b17, w18b16, w18b15, w18b14, w18b13, w18b12, w18b11, w18b10, w18b9, w18b8, w18b7, w18b6, w18b5, w18b4, w18b3, w18b2, w18b1, w18b0, w27b31, w27b30, w27b29, w27b28, w27b27, w27b26, w27b25, w27b24, w27b23, w27b22, w27b21, w27b20, w27b19, w27b18, w27b17, w27b16, w27b15, w27b14, w27b13, w27b12, w27b11, w27b10, w27b9, w27b8, w27b7, w27b6, w27b5, w27b4, w27b3, w27b2, w27b1, w27b0) - - // PASS 35 - w35b31, w35b30, w35b29, w35b28, w35b27, w35b26, w35b25, w35b24, w35b23, w35b22, w35b21, w35b20, w35b19, w35b18, w35b17, w35b16, w35b15, w35b14, w35b13, w35b12, w35b11, w35b10, w35b9, w35b8, w35b7, w35b6, w35b5, w35b4, w35b3, w35b2, w35b1, w35b0 = EXTEND(w20b31, w20b30, w20b29, w20b28, w20b27, w20b26, w20b25, w20b24, w20b23, w20b22, w20b21, w20b20, w20b19, w20b18, w20b17, w20b16, w20b15, w20b14, w20b13, w20b12, w20b11, w20b10, w20b9, w20b8, w20b7, w20b6, w20b5, w20b4, w20b3, w20b2, w20b1, w20b0, w33b31, w33b30, w33b29, w33b28, w33b27, w33b26, w33b25, w33b24, w33b23, w33b22, w33b21, w33b20, w33b19, w33b18, w33b17, w33b16, w33b15, w33b14, w33b13, w33b12, w33b11, w33b10, w33b9, w33b8, w33b7, w33b6, w33b5, w33b4, w33b3, w33b2, w33b1, w33b0, w19b31, w19b30, w19b29, w19b28, w19b27, w19b26, w19b25, w19b24, w19b23, w19b22, w19b21, w19b20, w19b19, w19b18, w19b17, w19b16, w19b15, w19b14, w19b13, w19b12, w19b11, w19b10, w19b9, w19b8, w19b7, w19b6, w19b5, w19b4, w19b3, w19b2, w19b1, w19b0, w28b31, w28b30, w28b29, w28b28, w28b27, w28b26, w28b25, w28b24, w28b23, w28b22, w28b21, w28b20, w28b19, w28b18, w28b17, w28b16, w28b15, w28b14, w28b13, w28b12, w28b11, w28b10, w28b9, w28b8, w28b7, w28b6, w28b5, w28b4, w28b3, w28b2, w28b1, w28b0) - - // PASS 36 - w36b31, w36b30, w36b29, w36b28, w36b27, w36b26, w36b25, w36b24, w36b23, w36b22, w36b21, w36b20, w36b19, w36b18, w36b17, w36b16, w36b15, w36b14, w36b13, w36b12, w36b11, w36b10, w36b9, w36b8, w36b7, w36b6, w36b5, w36b4, w36b3, w36b2, w36b1, w36b0 = EXTEND(w21b31, w21b30, w21b29, w21b28, w21b27, w21b26, w21b25, w21b24, w21b23, w21b22, w21b21, w21b20, w21b19, w21b18, w21b17, w21b16, w21b15, w21b14, w21b13, w21b12, w21b11, w21b10, w21b9, w21b8, w21b7, w21b6, w21b5, w21b4, w21b3, w21b2, w21b1, w21b0, w34b31, w34b30, w34b29, w34b28, w34b27, w34b26, w34b25, w34b24, w34b23, w34b22, w34b21, w34b20, w34b19, w34b18, w34b17, w34b16, w34b15, w34b14, w34b13, w34b12, w34b11, w34b10, w34b9, w34b8, w34b7, w34b6, w34b5, w34b4, w34b3, w34b2, w34b1, w34b0, w20b31, w20b30, w20b29, w20b28, w20b27, w20b26, w20b25, w20b24, w20b23, w20b22, w20b21, w20b20, w20b19, w20b18, w20b17, w20b16, w20b15, w20b14, w20b13, w20b12, w20b11, w20b10, w20b9, w20b8, w20b7, w20b6, w20b5, w20b4, w20b3, w20b2, w20b1, w20b0, w29b31, w29b30, w29b29, w29b28, w29b27, w29b26, w29b25, w29b24, w29b23, w29b22, w29b21, w29b20, w29b19, w29b18, w29b17, w29b16, w29b15, w29b14, w29b13, w29b12, w29b11, w29b10, w29b9, w29b8, w29b7, w29b6, w29b5, w29b4, w29b3, w29b2, w29b1, w29b0) - - // PASS 37 - w37b31, w37b30, w37b29, w37b28, w37b27, w37b26, w37b25, w37b24, w37b23, w37b22, w37b21, w37b20, w37b19, w37b18, w37b17, w37b16, w37b15, w37b14, w37b13, w37b12, w37b11, w37b10, w37b9, w37b8, w37b7, w37b6, w37b5, w37b4, w37b3, w37b2, w37b1, w37b0 = EXTEND(w22b31, w22b30, w22b29, w22b28, w22b27, w22b26, w22b25, w22b24, w22b23, w22b22, w22b21, w22b20, w22b19, w22b18, w22b17, w22b16, w22b15, w22b14, w22b13, w22b12, w22b11, w22b10, w22b9, w22b8, w22b7, w22b6, w22b5, w22b4, w22b3, w22b2, w22b1, w22b0, w35b31, w35b30, w35b29, w35b28, w35b27, w35b26, w35b25, w35b24, w35b23, w35b22, w35b21, w35b20, w35b19, w35b18, w35b17, w35b16, w35b15, w35b14, w35b13, w35b12, w35b11, w35b10, w35b9, w35b8, w35b7, w35b6, w35b5, w35b4, w35b3, w35b2, w35b1, w35b0, w21b31, w21b30, w21b29, w21b28, w21b27, w21b26, w21b25, w21b24, w21b23, w21b22, w21b21, w21b20, w21b19, w21b18, w21b17, w21b16, w21b15, w21b14, w21b13, w21b12, w21b11, w21b10, w21b9, w21b8, w21b7, w21b6, w21b5, w21b4, w21b3, w21b2, w21b1, w21b0, w30b31, w30b30, w30b29, w30b28, w30b27, w30b26, w30b25, w30b24, w30b23, w30b22, w30b21, w30b20, w30b19, w30b18, w30b17, w30b16, w30b15, w30b14, w30b13, w30b12, w30b11, w30b10, w30b9, w30b8, w30b7, w30b6, w30b5, w30b4, w30b3, w30b2, w30b1, w30b0) - - // PASS 38 - w38b31, w38b30, w38b29, w38b28, w38b27, w38b26, w38b25, w38b24, w38b23, w38b22, w38b21, w38b20, w38b19, w38b18, w38b17, w38b16, w38b15, w38b14, w38b13, w38b12, w38b11, w38b10, w38b9, w38b8, w38b7, w38b6, w38b5, w38b4, w38b3, w38b2, w38b1, w38b0 = EXTEND(w23b31, w23b30, w23b29, w23b28, w23b27, w23b26, w23b25, w23b24, w23b23, w23b22, w23b21, w23b20, w23b19, w23b18, w23b17, w23b16, w23b15, w23b14, w23b13, w23b12, w23b11, w23b10, w23b9, w23b8, w23b7, w23b6, w23b5, w23b4, w23b3, w23b2, w23b1, w23b0, w36b31, w36b30, w36b29, w36b28, w36b27, w36b26, w36b25, w36b24, w36b23, w36b22, w36b21, w36b20, w36b19, w36b18, w36b17, w36b16, w36b15, w36b14, w36b13, w36b12, w36b11, w36b10, w36b9, w36b8, w36b7, w36b6, w36b5, w36b4, w36b3, w36b2, w36b1, w36b0, w22b31, w22b30, w22b29, w22b28, w22b27, w22b26, w22b25, w22b24, w22b23, w22b22, w22b21, w22b20, w22b19, w22b18, w22b17, w22b16, w22b15, w22b14, w22b13, w22b12, w22b11, w22b10, w22b9, w22b8, w22b7, w22b6, w22b5, w22b4, w22b3, w22b2, w22b1, w22b0, w31b31, w31b30, w31b29, w31b28, w31b27, w31b26, w31b25, w31b24, w31b23, w31b22, w31b21, w31b20, w31b19, w31b18, w31b17, w31b16, w31b15, w31b14, w31b13, w31b12, w31b11, w31b10, w31b9, w31b8, w31b7, w31b6, w31b5, w31b4, w31b3, w31b2, w31b1, w31b0) - - // PASS 39 - w39b31, w39b30, w39b29, w39b28, w39b27, w39b26, w39b25, w39b24, w39b23, w39b22, w39b21, w39b20, w39b19, w39b18, w39b17, w39b16, w39b15, w39b14, w39b13, w39b12, w39b11, w39b10, w39b9, w39b8, w39b7, w39b6, w39b5, w39b4, w39b3, w39b2, w39b1, w39b0 = EXTEND(w24b31, w24b30, w24b29, w24b28, w24b27, w24b26, w24b25, w24b24, w24b23, w24b22, w24b21, w24b20, w24b19, w24b18, w24b17, w24b16, w24b15, w24b14, w24b13, w24b12, w24b11, w24b10, w24b9, w24b8, w24b7, w24b6, w24b5, w24b4, w24b3, w24b2, w24b1, w24b0, w37b31, w37b30, w37b29, w37b28, w37b27, w37b26, w37b25, w37b24, w37b23, w37b22, w37b21, w37b20, w37b19, w37b18, w37b17, w37b16, w37b15, w37b14, w37b13, w37b12, w37b11, w37b10, w37b9, w37b8, w37b7, w37b6, w37b5, w37b4, w37b3, w37b2, w37b1, w37b0, w23b31, w23b30, w23b29, w23b28, w23b27, w23b26, w23b25, w23b24, w23b23, w23b22, w23b21, w23b20, w23b19, w23b18, w23b17, w23b16, w23b15, w23b14, w23b13, w23b12, w23b11, w23b10, w23b9, w23b8, w23b7, w23b6, w23b5, w23b4, w23b3, w23b2, w23b1, w23b0, w32b31, w32b30, w32b29, w32b28, w32b27, w32b26, w32b25, w32b24, w32b23, w32b22, w32b21, w32b20, w32b19, w32b18, w32b17, w32b16, w32b15, w32b14, w32b13, w32b12, w32b11, w32b10, w32b9, w32b8, w32b7, w32b6, w32b5, w32b4, w32b3, w32b2, w32b1, w32b0) - - // PASS 40 - w40b31, w40b30, w40b29, w40b28, w40b27, w40b26, w40b25, w40b24, w40b23, w40b22, w40b21, w40b20, w40b19, w40b18, w40b17, w40b16, w40b15, w40b14, w40b13, w40b12, w40b11, w40b10, w40b9, w40b8, w40b7, w40b6, w40b5, w40b4, w40b3, w40b2, w40b1, w40b0 = EXTEND(w25b31, w25b30, w25b29, w25b28, w25b27, w25b26, w25b25, w25b24, w25b23, w25b22, w25b21, w25b20, w25b19, w25b18, w25b17, w25b16, w25b15, w25b14, w25b13, w25b12, w25b11, w25b10, w25b9, w25b8, w25b7, w25b6, w25b5, w25b4, w25b3, w25b2, w25b1, w25b0, w38b31, w38b30, w38b29, w38b28, w38b27, w38b26, w38b25, w38b24, w38b23, w38b22, w38b21, w38b20, w38b19, w38b18, w38b17, w38b16, w38b15, w38b14, w38b13, w38b12, w38b11, w38b10, w38b9, w38b8, w38b7, w38b6, w38b5, w38b4, w38b3, w38b2, w38b1, w38b0, w24b31, w24b30, w24b29, w24b28, w24b27, w24b26, w24b25, w24b24, w24b23, w24b22, w24b21, w24b20, w24b19, w24b18, w24b17, w24b16, w24b15, w24b14, w24b13, w24b12, w24b11, w24b10, w24b9, w24b8, w24b7, w24b6, w24b5, w24b4, w24b3, w24b2, w24b1, w24b0, w33b31, w33b30, w33b29, w33b28, w33b27, w33b26, w33b25, w33b24, w33b23, w33b22, w33b21, w33b20, w33b19, w33b18, w33b17, w33b16, w33b15, w33b14, w33b13, w33b12, w33b11, w33b10, w33b9, w33b8, w33b7, w33b6, w33b5, w33b4, w33b3, w33b2, w33b1, w33b0) - - // PASS 41 - w41b31, w41b30, w41b29, w41b28, w41b27, w41b26, w41b25, w41b24, w41b23, w41b22, w41b21, w41b20, w41b19, w41b18, w41b17, w41b16, w41b15, w41b14, w41b13, w41b12, w41b11, w41b10, w41b9, w41b8, w41b7, w41b6, w41b5, w41b4, w41b3, w41b2, w41b1, w41b0 = EXTEND(w26b31, w26b30, w26b29, w26b28, w26b27, w26b26, w26b25, w26b24, w26b23, w26b22, w26b21, w26b20, w26b19, w26b18, w26b17, w26b16, w26b15, w26b14, w26b13, w26b12, w26b11, w26b10, w26b9, w26b8, w26b7, w26b6, w26b5, w26b4, w26b3, w26b2, w26b1, w26b0, w39b31, w39b30, w39b29, w39b28, w39b27, w39b26, w39b25, w39b24, w39b23, w39b22, w39b21, w39b20, w39b19, w39b18, w39b17, w39b16, w39b15, w39b14, w39b13, w39b12, w39b11, w39b10, w39b9, w39b8, w39b7, w39b6, w39b5, w39b4, w39b3, w39b2, w39b1, w39b0, w25b31, w25b30, w25b29, w25b28, w25b27, w25b26, w25b25, w25b24, w25b23, w25b22, w25b21, w25b20, w25b19, w25b18, w25b17, w25b16, w25b15, w25b14, w25b13, w25b12, w25b11, w25b10, w25b9, w25b8, w25b7, w25b6, w25b5, w25b4, w25b3, w25b2, w25b1, w25b0, w34b31, w34b30, w34b29, w34b28, w34b27, w34b26, w34b25, w34b24, w34b23, w34b22, w34b21, w34b20, w34b19, w34b18, w34b17, w34b16, w34b15, w34b14, w34b13, w34b12, w34b11, w34b10, w34b9, w34b8, w34b7, w34b6, w34b5, w34b4, w34b3, w34b2, w34b1, w34b0) - - // PASS 42 - w42b31, w42b30, w42b29, w42b28, w42b27, w42b26, w42b25, w42b24, w42b23, w42b22, w42b21, w42b20, w42b19, w42b18, w42b17, w42b16, w42b15, w42b14, w42b13, w42b12, w42b11, w42b10, w42b9, w42b8, w42b7, w42b6, w42b5, w42b4, w42b3, w42b2, w42b1, w42b0 = EXTEND(w27b31, w27b30, w27b29, w27b28, w27b27, w27b26, w27b25, w27b24, w27b23, w27b22, w27b21, w27b20, w27b19, w27b18, w27b17, w27b16, w27b15, w27b14, w27b13, w27b12, w27b11, w27b10, w27b9, w27b8, w27b7, w27b6, w27b5, w27b4, w27b3, w27b2, w27b1, w27b0, w40b31, w40b30, w40b29, w40b28, w40b27, w40b26, w40b25, w40b24, w40b23, w40b22, w40b21, w40b20, w40b19, w40b18, w40b17, w40b16, w40b15, w40b14, w40b13, w40b12, w40b11, w40b10, w40b9, w40b8, w40b7, w40b6, w40b5, w40b4, w40b3, w40b2, w40b1, w40b0, w26b31, w26b30, w26b29, w26b28, w26b27, w26b26, w26b25, w26b24, w26b23, w26b22, w26b21, w26b20, w26b19, w26b18, w26b17, w26b16, w26b15, w26b14, w26b13, w26b12, w26b11, w26b10, w26b9, w26b8, w26b7, w26b6, w26b5, w26b4, w26b3, w26b2, w26b1, w26b0, w35b31, w35b30, w35b29, w35b28, w35b27, w35b26, w35b25, w35b24, w35b23, w35b22, w35b21, w35b20, w35b19, w35b18, w35b17, w35b16, w35b15, w35b14, w35b13, w35b12, w35b11, w35b10, w35b9, w35b8, w35b7, w35b6, w35b5, w35b4, w35b3, w35b2, w35b1, w35b0) - - // PASS 43 - w43b31, w43b30, w43b29, w43b28, w43b27, w43b26, w43b25, w43b24, w43b23, w43b22, w43b21, w43b20, w43b19, w43b18, w43b17, w43b16, w43b15, w43b14, w43b13, w43b12, w43b11, w43b10, w43b9, w43b8, w43b7, w43b6, w43b5, w43b4, w43b3, w43b2, w43b1, w43b0 = EXTEND(w28b31, w28b30, w28b29, w28b28, w28b27, w28b26, w28b25, w28b24, w28b23, w28b22, w28b21, w28b20, w28b19, w28b18, w28b17, w28b16, w28b15, w28b14, w28b13, w28b12, w28b11, w28b10, w28b9, w28b8, w28b7, w28b6, w28b5, w28b4, w28b3, w28b2, w28b1, w28b0, w41b31, w41b30, w41b29, w41b28, w41b27, w41b26, w41b25, w41b24, w41b23, w41b22, w41b21, w41b20, w41b19, w41b18, w41b17, w41b16, w41b15, w41b14, w41b13, w41b12, w41b11, w41b10, w41b9, w41b8, w41b7, w41b6, w41b5, w41b4, w41b3, w41b2, w41b1, w41b0, w27b31, w27b30, w27b29, w27b28, w27b27, w27b26, w27b25, w27b24, w27b23, w27b22, w27b21, w27b20, w27b19, w27b18, w27b17, w27b16, w27b15, w27b14, w27b13, w27b12, w27b11, w27b10, w27b9, w27b8, w27b7, w27b6, w27b5, w27b4, w27b3, w27b2, w27b1, w27b0, w36b31, w36b30, w36b29, w36b28, w36b27, w36b26, w36b25, w36b24, w36b23, w36b22, w36b21, w36b20, w36b19, w36b18, w36b17, w36b16, w36b15, w36b14, w36b13, w36b12, w36b11, w36b10, w36b9, w36b8, w36b7, w36b6, w36b5, w36b4, w36b3, w36b2, w36b1, w36b0) - - // PASS 44 - w44b31, w44b30, w44b29, w44b28, w44b27, w44b26, w44b25, w44b24, w44b23, w44b22, w44b21, w44b20, w44b19, w44b18, w44b17, w44b16, w44b15, w44b14, w44b13, w44b12, w44b11, w44b10, w44b9, w44b8, w44b7, w44b6, w44b5, w44b4, w44b3, w44b2, w44b1, w44b0 = EXTEND(w29b31, w29b30, w29b29, w29b28, w29b27, w29b26, w29b25, w29b24, w29b23, w29b22, w29b21, w29b20, w29b19, w29b18, w29b17, w29b16, w29b15, w29b14, w29b13, w29b12, w29b11, w29b10, w29b9, w29b8, w29b7, w29b6, w29b5, w29b4, w29b3, w29b2, w29b1, w29b0, w42b31, w42b30, w42b29, w42b28, w42b27, w42b26, w42b25, w42b24, w42b23, w42b22, w42b21, w42b20, w42b19, w42b18, w42b17, w42b16, w42b15, w42b14, w42b13, w42b12, w42b11, w42b10, w42b9, w42b8, w42b7, w42b6, w42b5, w42b4, w42b3, w42b2, w42b1, w42b0, w28b31, w28b30, w28b29, w28b28, w28b27, w28b26, w28b25, w28b24, w28b23, w28b22, w28b21, w28b20, w28b19, w28b18, w28b17, w28b16, w28b15, w28b14, w28b13, w28b12, w28b11, w28b10, w28b9, w28b8, w28b7, w28b6, w28b5, w28b4, w28b3, w28b2, w28b1, w28b0, w37b31, w37b30, w37b29, w37b28, w37b27, w37b26, w37b25, w37b24, w37b23, w37b22, w37b21, w37b20, w37b19, w37b18, w37b17, w37b16, w37b15, w37b14, w37b13, w37b12, w37b11, w37b10, w37b9, w37b8, w37b7, w37b6, w37b5, w37b4, w37b3, w37b2, w37b1, w37b0) - - // PASS 45 - w45b31, w45b30, w45b29, w45b28, w45b27, w45b26, w45b25, w45b24, w45b23, w45b22, w45b21, w45b20, w45b19, w45b18, w45b17, w45b16, w45b15, w45b14, w45b13, w45b12, w45b11, w45b10, w45b9, w45b8, w45b7, w45b6, w45b5, w45b4, w45b3, w45b2, w45b1, w45b0 = EXTEND(w30b31, w30b30, w30b29, w30b28, w30b27, w30b26, w30b25, w30b24, w30b23, w30b22, w30b21, w30b20, w30b19, w30b18, w30b17, w30b16, w30b15, w30b14, w30b13, w30b12, w30b11, w30b10, w30b9, w30b8, w30b7, w30b6, w30b5, w30b4, w30b3, w30b2, w30b1, w30b0, w43b31, w43b30, w43b29, w43b28, w43b27, w43b26, w43b25, w43b24, w43b23, w43b22, w43b21, w43b20, w43b19, w43b18, w43b17, w43b16, w43b15, w43b14, w43b13, w43b12, w43b11, w43b10, w43b9, w43b8, w43b7, w43b6, w43b5, w43b4, w43b3, w43b2, w43b1, w43b0, w29b31, w29b30, w29b29, w29b28, w29b27, w29b26, w29b25, w29b24, w29b23, w29b22, w29b21, w29b20, w29b19, w29b18, w29b17, w29b16, w29b15, w29b14, w29b13, w29b12, w29b11, w29b10, w29b9, w29b8, w29b7, w29b6, w29b5, w29b4, w29b3, w29b2, w29b1, w29b0, w38b31, w38b30, w38b29, w38b28, w38b27, w38b26, w38b25, w38b24, w38b23, w38b22, w38b21, w38b20, w38b19, w38b18, w38b17, w38b16, w38b15, w38b14, w38b13, w38b12, w38b11, w38b10, w38b9, w38b8, w38b7, w38b6, w38b5, w38b4, w38b3, w38b2, w38b1, w38b0) - - // PASS 46 - w46b31, w46b30, w46b29, w46b28, w46b27, w46b26, w46b25, w46b24, w46b23, w46b22, w46b21, w46b20, w46b19, w46b18, w46b17, w46b16, w46b15, w46b14, w46b13, w46b12, w46b11, w46b10, w46b9, w46b8, w46b7, w46b6, w46b5, w46b4, w46b3, w46b2, w46b1, w46b0 = EXTEND(w31b31, w31b30, w31b29, w31b28, w31b27, w31b26, w31b25, w31b24, w31b23, w31b22, w31b21, w31b20, w31b19, w31b18, w31b17, w31b16, w31b15, w31b14, w31b13, w31b12, w31b11, w31b10, w31b9, w31b8, w31b7, w31b6, w31b5, w31b4, w31b3, w31b2, w31b1, w31b0, w44b31, w44b30, w44b29, w44b28, w44b27, w44b26, w44b25, w44b24, w44b23, w44b22, w44b21, w44b20, w44b19, w44b18, w44b17, w44b16, w44b15, w44b14, w44b13, w44b12, w44b11, w44b10, w44b9, w44b8, w44b7, w44b6, w44b5, w44b4, w44b3, w44b2, w44b1, w44b0, w30b31, w30b30, w30b29, w30b28, w30b27, w30b26, w30b25, w30b24, w30b23, w30b22, w30b21, w30b20, w30b19, w30b18, w30b17, w30b16, w30b15, w30b14, w30b13, w30b12, w30b11, w30b10, w30b9, w30b8, w30b7, w30b6, w30b5, w30b4, w30b3, w30b2, w30b1, w30b0, w39b31, w39b30, w39b29, w39b28, w39b27, w39b26, w39b25, w39b24, w39b23, w39b22, w39b21, w39b20, w39b19, w39b18, w39b17, w39b16, w39b15, w39b14, w39b13, w39b12, w39b11, w39b10, w39b9, w39b8, w39b7, w39b6, w39b5, w39b4, w39b3, w39b2, w39b1, w39b0) - - // PASS 47 - w47b31, w47b30, w47b29, w47b28, w47b27, w47b26, w47b25, w47b24, w47b23, w47b22, w47b21, w47b20, w47b19, w47b18, w47b17, w47b16, w47b15, w47b14, w47b13, w47b12, w47b11, w47b10, w47b9, w47b8, w47b7, w47b6, w47b5, w47b4, w47b3, w47b2, w47b1, w47b0 = EXTEND(w32b31, w32b30, w32b29, w32b28, w32b27, w32b26, w32b25, w32b24, w32b23, w32b22, w32b21, w32b20, w32b19, w32b18, w32b17, w32b16, w32b15, w32b14, w32b13, w32b12, w32b11, w32b10, w32b9, w32b8, w32b7, w32b6, w32b5, w32b4, w32b3, w32b2, w32b1, w32b0, w45b31, w45b30, w45b29, w45b28, w45b27, w45b26, w45b25, w45b24, w45b23, w45b22, w45b21, w45b20, w45b19, w45b18, w45b17, w45b16, w45b15, w45b14, w45b13, w45b12, w45b11, w45b10, w45b9, w45b8, w45b7, w45b6, w45b5, w45b4, w45b3, w45b2, w45b1, w45b0, w31b31, w31b30, w31b29, w31b28, w31b27, w31b26, w31b25, w31b24, w31b23, w31b22, w31b21, w31b20, w31b19, w31b18, w31b17, w31b16, w31b15, w31b14, w31b13, w31b12, w31b11, w31b10, w31b9, w31b8, w31b7, w31b6, w31b5, w31b4, w31b3, w31b2, w31b1, w31b0, w40b31, w40b30, w40b29, w40b28, w40b27, w40b26, w40b25, w40b24, w40b23, w40b22, w40b21, w40b20, w40b19, w40b18, w40b17, w40b16, w40b15, w40b14, w40b13, w40b12, w40b11, w40b10, w40b9, w40b8, w40b7, w40b6, w40b5, w40b4, w40b3, w40b2, w40b1, w40b0) - - // PASS 48 - w48b31, w48b30, w48b29, w48b28, w48b27, w48b26, w48b25, w48b24, w48b23, w48b22, w48b21, w48b20, w48b19, w48b18, w48b17, w48b16, w48b15, w48b14, w48b13, w48b12, w48b11, w48b10, w48b9, w48b8, w48b7, w48b6, w48b5, w48b4, w48b3, w48b2, w48b1, w48b0 = EXTEND(w33b31, w33b30, w33b29, w33b28, w33b27, w33b26, w33b25, w33b24, w33b23, w33b22, w33b21, w33b20, w33b19, w33b18, w33b17, w33b16, w33b15, w33b14, w33b13, w33b12, w33b11, w33b10, w33b9, w33b8, w33b7, w33b6, w33b5, w33b4, w33b3, w33b2, w33b1, w33b0, w46b31, w46b30, w46b29, w46b28, w46b27, w46b26, w46b25, w46b24, w46b23, w46b22, w46b21, w46b20, w46b19, w46b18, w46b17, w46b16, w46b15, w46b14, w46b13, w46b12, w46b11, w46b10, w46b9, w46b8, w46b7, w46b6, w46b5, w46b4, w46b3, w46b2, w46b1, w46b0, w32b31, w32b30, w32b29, w32b28, w32b27, w32b26, w32b25, w32b24, w32b23, w32b22, w32b21, w32b20, w32b19, w32b18, w32b17, w32b16, w32b15, w32b14, w32b13, w32b12, w32b11, w32b10, w32b9, w32b8, w32b7, w32b6, w32b5, w32b4, w32b3, w32b2, w32b1, w32b0, w41b31, w41b30, w41b29, w41b28, w41b27, w41b26, w41b25, w41b24, w41b23, w41b22, w41b21, w41b20, w41b19, w41b18, w41b17, w41b16, w41b15, w41b14, w41b13, w41b12, w41b11, w41b10, w41b9, w41b8, w41b7, w41b6, w41b5, w41b4, w41b3, w41b2, w41b1, w41b0) - - // PASS 49 - w49b31, w49b30, w49b29, w49b28, w49b27, w49b26, w49b25, w49b24, w49b23, w49b22, w49b21, w49b20, w49b19, w49b18, w49b17, w49b16, w49b15, w49b14, w49b13, w49b12, w49b11, w49b10, w49b9, w49b8, w49b7, w49b6, w49b5, w49b4, w49b3, w49b2, w49b1, w49b0 = EXTEND(w34b31, w34b30, w34b29, w34b28, w34b27, w34b26, w34b25, w34b24, w34b23, w34b22, w34b21, w34b20, w34b19, w34b18, w34b17, w34b16, w34b15, w34b14, w34b13, w34b12, w34b11, w34b10, w34b9, w34b8, w34b7, w34b6, w34b5, w34b4, w34b3, w34b2, w34b1, w34b0, w47b31, w47b30, w47b29, w47b28, w47b27, w47b26, w47b25, w47b24, w47b23, w47b22, w47b21, w47b20, w47b19, w47b18, w47b17, w47b16, w47b15, w47b14, w47b13, w47b12, w47b11, w47b10, w47b9, w47b8, w47b7, w47b6, w47b5, w47b4, w47b3, w47b2, w47b1, w47b0, w33b31, w33b30, w33b29, w33b28, w33b27, w33b26, w33b25, w33b24, w33b23, w33b22, w33b21, w33b20, w33b19, w33b18, w33b17, w33b16, w33b15, w33b14, w33b13, w33b12, w33b11, w33b10, w33b9, w33b8, w33b7, w33b6, w33b5, w33b4, w33b3, w33b2, w33b1, w33b0, w42b31, w42b30, w42b29, w42b28, w42b27, w42b26, w42b25, w42b24, w42b23, w42b22, w42b21, w42b20, w42b19, w42b18, w42b17, w42b16, w42b15, w42b14, w42b13, w42b12, w42b11, w42b10, w42b9, w42b8, w42b7, w42b6, w42b5, w42b4, w42b3, w42b2, w42b1, w42b0) - - // PASS 50 - w50b31, w50b30, w50b29, w50b28, w50b27, w50b26, w50b25, w50b24, w50b23, w50b22, w50b21, w50b20, w50b19, w50b18, w50b17, w50b16, w50b15, w50b14, w50b13, w50b12, w50b11, w50b10, w50b9, w50b8, w50b7, w50b6, w50b5, w50b4, w50b3, w50b2, w50b1, w50b0 = EXTEND(w35b31, w35b30, w35b29, w35b28, w35b27, w35b26, w35b25, w35b24, w35b23, w35b22, w35b21, w35b20, w35b19, w35b18, w35b17, w35b16, w35b15, w35b14, w35b13, w35b12, w35b11, w35b10, w35b9, w35b8, w35b7, w35b6, w35b5, w35b4, w35b3, w35b2, w35b1, w35b0, w48b31, w48b30, w48b29, w48b28, w48b27, w48b26, w48b25, w48b24, w48b23, w48b22, w48b21, w48b20, w48b19, w48b18, w48b17, w48b16, w48b15, w48b14, w48b13, w48b12, w48b11, w48b10, w48b9, w48b8, w48b7, w48b6, w48b5, w48b4, w48b3, w48b2, w48b1, w48b0, w34b31, w34b30, w34b29, w34b28, w34b27, w34b26, w34b25, w34b24, w34b23, w34b22, w34b21, w34b20, w34b19, w34b18, w34b17, w34b16, w34b15, w34b14, w34b13, w34b12, w34b11, w34b10, w34b9, w34b8, w34b7, w34b6, w34b5, w34b4, w34b3, w34b2, w34b1, w34b0, w43b31, w43b30, w43b29, w43b28, w43b27, w43b26, w43b25, w43b24, w43b23, w43b22, w43b21, w43b20, w43b19, w43b18, w43b17, w43b16, w43b15, w43b14, w43b13, w43b12, w43b11, w43b10, w43b9, w43b8, w43b7, w43b6, w43b5, w43b4, w43b3, w43b2, w43b1, w43b0) - - // PASS 51 - w51b31, w51b30, w51b29, w51b28, w51b27, w51b26, w51b25, w51b24, w51b23, w51b22, w51b21, w51b20, w51b19, w51b18, w51b17, w51b16, w51b15, w51b14, w51b13, w51b12, w51b11, w51b10, w51b9, w51b8, w51b7, w51b6, w51b5, w51b4, w51b3, w51b2, w51b1, w51b0 = EXTEND(w36b31, w36b30, w36b29, w36b28, w36b27, w36b26, w36b25, w36b24, w36b23, w36b22, w36b21, w36b20, w36b19, w36b18, w36b17, w36b16, w36b15, w36b14, w36b13, w36b12, w36b11, w36b10, w36b9, w36b8, w36b7, w36b6, w36b5, w36b4, w36b3, w36b2, w36b1, w36b0, w49b31, w49b30, w49b29, w49b28, w49b27, w49b26, w49b25, w49b24, w49b23, w49b22, w49b21, w49b20, w49b19, w49b18, w49b17, w49b16, w49b15, w49b14, w49b13, w49b12, w49b11, w49b10, w49b9, w49b8, w49b7, w49b6, w49b5, w49b4, w49b3, w49b2, w49b1, w49b0, w35b31, w35b30, w35b29, w35b28, w35b27, w35b26, w35b25, w35b24, w35b23, w35b22, w35b21, w35b20, w35b19, w35b18, w35b17, w35b16, w35b15, w35b14, w35b13, w35b12, w35b11, w35b10, w35b9, w35b8, w35b7, w35b6, w35b5, w35b4, w35b3, w35b2, w35b1, w35b0, w44b31, w44b30, w44b29, w44b28, w44b27, w44b26, w44b25, w44b24, w44b23, w44b22, w44b21, w44b20, w44b19, w44b18, w44b17, w44b16, w44b15, w44b14, w44b13, w44b12, w44b11, w44b10, w44b9, w44b8, w44b7, w44b6, w44b5, w44b4, w44b3, w44b2, w44b1, w44b0) - - // PASS 52 - w52b31, w52b30, w52b29, w52b28, w52b27, w52b26, w52b25, w52b24, w52b23, w52b22, w52b21, w52b20, w52b19, w52b18, w52b17, w52b16, w52b15, w52b14, w52b13, w52b12, w52b11, w52b10, w52b9, w52b8, w52b7, w52b6, w52b5, w52b4, w52b3, w52b2, w52b1, w52b0 = EXTEND(w37b31, w37b30, w37b29, w37b28, w37b27, w37b26, w37b25, w37b24, w37b23, w37b22, w37b21, w37b20, w37b19, w37b18, w37b17, w37b16, w37b15, w37b14, w37b13, w37b12, w37b11, w37b10, w37b9, w37b8, w37b7, w37b6, w37b5, w37b4, w37b3, w37b2, w37b1, w37b0, w50b31, w50b30, w50b29, w50b28, w50b27, w50b26, w50b25, w50b24, w50b23, w50b22, w50b21, w50b20, w50b19, w50b18, w50b17, w50b16, w50b15, w50b14, w50b13, w50b12, w50b11, w50b10, w50b9, w50b8, w50b7, w50b6, w50b5, w50b4, w50b3, w50b2, w50b1, w50b0, w36b31, w36b30, w36b29, w36b28, w36b27, w36b26, w36b25, w36b24, w36b23, w36b22, w36b21, w36b20, w36b19, w36b18, w36b17, w36b16, w36b15, w36b14, w36b13, w36b12, w36b11, w36b10, w36b9, w36b8, w36b7, w36b6, w36b5, w36b4, w36b3, w36b2, w36b1, w36b0, w45b31, w45b30, w45b29, w45b28, w45b27, w45b26, w45b25, w45b24, w45b23, w45b22, w45b21, w45b20, w45b19, w45b18, w45b17, w45b16, w45b15, w45b14, w45b13, w45b12, w45b11, w45b10, w45b9, w45b8, w45b7, w45b6, w45b5, w45b4, w45b3, w45b2, w45b1, w45b0) - - // PASS 53 - w53b31, w53b30, w53b29, w53b28, w53b27, w53b26, w53b25, w53b24, w53b23, w53b22, w53b21, w53b20, w53b19, w53b18, w53b17, w53b16, w53b15, w53b14, w53b13, w53b12, w53b11, w53b10, w53b9, w53b8, w53b7, w53b6, w53b5, w53b4, w53b3, w53b2, w53b1, w53b0 = EXTEND(w38b31, w38b30, w38b29, w38b28, w38b27, w38b26, w38b25, w38b24, w38b23, w38b22, w38b21, w38b20, w38b19, w38b18, w38b17, w38b16, w38b15, w38b14, w38b13, w38b12, w38b11, w38b10, w38b9, w38b8, w38b7, w38b6, w38b5, w38b4, w38b3, w38b2, w38b1, w38b0, w51b31, w51b30, w51b29, w51b28, w51b27, w51b26, w51b25, w51b24, w51b23, w51b22, w51b21, w51b20, w51b19, w51b18, w51b17, w51b16, w51b15, w51b14, w51b13, w51b12, w51b11, w51b10, w51b9, w51b8, w51b7, w51b6, w51b5, w51b4, w51b3, w51b2, w51b1, w51b0, w37b31, w37b30, w37b29, w37b28, w37b27, w37b26, w37b25, w37b24, w37b23, w37b22, w37b21, w37b20, w37b19, w37b18, w37b17, w37b16, w37b15, w37b14, w37b13, w37b12, w37b11, w37b10, w37b9, w37b8, w37b7, w37b6, w37b5, w37b4, w37b3, w37b2, w37b1, w37b0, w46b31, w46b30, w46b29, w46b28, w46b27, w46b26, w46b25, w46b24, w46b23, w46b22, w46b21, w46b20, w46b19, w46b18, w46b17, w46b16, w46b15, w46b14, w46b13, w46b12, w46b11, w46b10, w46b9, w46b8, w46b7, w46b6, w46b5, w46b4, w46b3, w46b2, w46b1, w46b0) - - // PASS 54 - w54b31, w54b30, w54b29, w54b28, w54b27, w54b26, w54b25, w54b24, w54b23, w54b22, w54b21, w54b20, w54b19, w54b18, w54b17, w54b16, w54b15, w54b14, w54b13, w54b12, w54b11, w54b10, w54b9, w54b8, w54b7, w54b6, w54b5, w54b4, w54b3, w54b2, w54b1, w54b0 = EXTEND(w39b31, w39b30, w39b29, w39b28, w39b27, w39b26, w39b25, w39b24, w39b23, w39b22, w39b21, w39b20, w39b19, w39b18, w39b17, w39b16, w39b15, w39b14, w39b13, w39b12, w39b11, w39b10, w39b9, w39b8, w39b7, w39b6, w39b5, w39b4, w39b3, w39b2, w39b1, w39b0, w52b31, w52b30, w52b29, w52b28, w52b27, w52b26, w52b25, w52b24, w52b23, w52b22, w52b21, w52b20, w52b19, w52b18, w52b17, w52b16, w52b15, w52b14, w52b13, w52b12, w52b11, w52b10, w52b9, w52b8, w52b7, w52b6, w52b5, w52b4, w52b3, w52b2, w52b1, w52b0, w38b31, w38b30, w38b29, w38b28, w38b27, w38b26, w38b25, w38b24, w38b23, w38b22, w38b21, w38b20, w38b19, w38b18, w38b17, w38b16, w38b15, w38b14, w38b13, w38b12, w38b11, w38b10, w38b9, w38b8, w38b7, w38b6, w38b5, w38b4, w38b3, w38b2, w38b1, w38b0, w47b31, w47b30, w47b29, w47b28, w47b27, w47b26, w47b25, w47b24, w47b23, w47b22, w47b21, w47b20, w47b19, w47b18, w47b17, w47b16, w47b15, w47b14, w47b13, w47b12, w47b11, w47b10, w47b9, w47b8, w47b7, w47b6, w47b5, w47b4, w47b3, w47b2, w47b1, w47b0) - - // PASS 55 - w55b31, w55b30, w55b29, w55b28, w55b27, w55b26, w55b25, w55b24, w55b23, w55b22, w55b21, w55b20, w55b19, w55b18, w55b17, w55b16, w55b15, w55b14, w55b13, w55b12, w55b11, w55b10, w55b9, w55b8, w55b7, w55b6, w55b5, w55b4, w55b3, w55b2, w55b1, w55b0 = EXTEND(w40b31, w40b30, w40b29, w40b28, w40b27, w40b26, w40b25, w40b24, w40b23, w40b22, w40b21, w40b20, w40b19, w40b18, w40b17, w40b16, w40b15, w40b14, w40b13, w40b12, w40b11, w40b10, w40b9, w40b8, w40b7, w40b6, w40b5, w40b4, w40b3, w40b2, w40b1, w40b0, w53b31, w53b30, w53b29, w53b28, w53b27, w53b26, w53b25, w53b24, w53b23, w53b22, w53b21, w53b20, w53b19, w53b18, w53b17, w53b16, w53b15, w53b14, w53b13, w53b12, w53b11, w53b10, w53b9, w53b8, w53b7, w53b6, w53b5, w53b4, w53b3, w53b2, w53b1, w53b0, w39b31, w39b30, w39b29, w39b28, w39b27, w39b26, w39b25, w39b24, w39b23, w39b22, w39b21, w39b20, w39b19, w39b18, w39b17, w39b16, w39b15, w39b14, w39b13, w39b12, w39b11, w39b10, w39b9, w39b8, w39b7, w39b6, w39b5, w39b4, w39b3, w39b2, w39b1, w39b0, w48b31, w48b30, w48b29, w48b28, w48b27, w48b26, w48b25, w48b24, w48b23, w48b22, w48b21, w48b20, w48b19, w48b18, w48b17, w48b16, w48b15, w48b14, w48b13, w48b12, w48b11, w48b10, w48b9, w48b8, w48b7, w48b6, w48b5, w48b4, w48b3, w48b2, w48b1, w48b0) - - // PASS 56 - w56b31, w56b30, w56b29, w56b28, w56b27, w56b26, w56b25, w56b24, w56b23, w56b22, w56b21, w56b20, w56b19, w56b18, w56b17, w56b16, w56b15, w56b14, w56b13, w56b12, w56b11, w56b10, w56b9, w56b8, w56b7, w56b6, w56b5, w56b4, w56b3, w56b2, w56b1, w56b0 = EXTEND(w41b31, w41b30, w41b29, w41b28, w41b27, w41b26, w41b25, w41b24, w41b23, w41b22, w41b21, w41b20, w41b19, w41b18, w41b17, w41b16, w41b15, w41b14, w41b13, w41b12, w41b11, w41b10, w41b9, w41b8, w41b7, w41b6, w41b5, w41b4, w41b3, w41b2, w41b1, w41b0, w54b31, w54b30, w54b29, w54b28, w54b27, w54b26, w54b25, w54b24, w54b23, w54b22, w54b21, w54b20, w54b19, w54b18, w54b17, w54b16, w54b15, w54b14, w54b13, w54b12, w54b11, w54b10, w54b9, w54b8, w54b7, w54b6, w54b5, w54b4, w54b3, w54b2, w54b1, w54b0, w40b31, w40b30, w40b29, w40b28, w40b27, w40b26, w40b25, w40b24, w40b23, w40b22, w40b21, w40b20, w40b19, w40b18, w40b17, w40b16, w40b15, w40b14, w40b13, w40b12, w40b11, w40b10, w40b9, w40b8, w40b7, w40b6, w40b5, w40b4, w40b3, w40b2, w40b1, w40b0, w49b31, w49b30, w49b29, w49b28, w49b27, w49b26, w49b25, w49b24, w49b23, w49b22, w49b21, w49b20, w49b19, w49b18, w49b17, w49b16, w49b15, w49b14, w49b13, w49b12, w49b11, w49b10, w49b9, w49b8, w49b7, w49b6, w49b5, w49b4, w49b3, w49b2, w49b1, w49b0) - - // PASS 57 - w57b31, w57b30, w57b29, w57b28, w57b27, w57b26, w57b25, w57b24, w57b23, w57b22, w57b21, w57b20, w57b19, w57b18, w57b17, w57b16, w57b15, w57b14, w57b13, w57b12, w57b11, w57b10, w57b9, w57b8, w57b7, w57b6, w57b5, w57b4, w57b3, w57b2, w57b1, w57b0 = EXTEND(w42b31, w42b30, w42b29, w42b28, w42b27, w42b26, w42b25, w42b24, w42b23, w42b22, w42b21, w42b20, w42b19, w42b18, w42b17, w42b16, w42b15, w42b14, w42b13, w42b12, w42b11, w42b10, w42b9, w42b8, w42b7, w42b6, w42b5, w42b4, w42b3, w42b2, w42b1, w42b0, w55b31, w55b30, w55b29, w55b28, w55b27, w55b26, w55b25, w55b24, w55b23, w55b22, w55b21, w55b20, w55b19, w55b18, w55b17, w55b16, w55b15, w55b14, w55b13, w55b12, w55b11, w55b10, w55b9, w55b8, w55b7, w55b6, w55b5, w55b4, w55b3, w55b2, w55b1, w55b0, w41b31, w41b30, w41b29, w41b28, w41b27, w41b26, w41b25, w41b24, w41b23, w41b22, w41b21, w41b20, w41b19, w41b18, w41b17, w41b16, w41b15, w41b14, w41b13, w41b12, w41b11, w41b10, w41b9, w41b8, w41b7, w41b6, w41b5, w41b4, w41b3, w41b2, w41b1, w41b0, w50b31, w50b30, w50b29, w50b28, w50b27, w50b26, w50b25, w50b24, w50b23, w50b22, w50b21, w50b20, w50b19, w50b18, w50b17, w50b16, w50b15, w50b14, w50b13, w50b12, w50b11, w50b10, w50b9, w50b8, w50b7, w50b6, w50b5, w50b4, w50b3, w50b2, w50b1, w50b0) - - // PASS 58 - w58b31, w58b30, w58b29, w58b28, w58b27, w58b26, w58b25, w58b24, w58b23, w58b22, w58b21, w58b20, w58b19, w58b18, w58b17, w58b16, w58b15, w58b14, w58b13, w58b12, w58b11, w58b10, w58b9, w58b8, w58b7, w58b6, w58b5, w58b4, w58b3, w58b2, w58b1, w58b0 = EXTEND(w43b31, w43b30, w43b29, w43b28, w43b27, w43b26, w43b25, w43b24, w43b23, w43b22, w43b21, w43b20, w43b19, w43b18, w43b17, w43b16, w43b15, w43b14, w43b13, w43b12, w43b11, w43b10, w43b9, w43b8, w43b7, w43b6, w43b5, w43b4, w43b3, w43b2, w43b1, w43b0, w56b31, w56b30, w56b29, w56b28, w56b27, w56b26, w56b25, w56b24, w56b23, w56b22, w56b21, w56b20, w56b19, w56b18, w56b17, w56b16, w56b15, w56b14, w56b13, w56b12, w56b11, w56b10, w56b9, w56b8, w56b7, w56b6, w56b5, w56b4, w56b3, w56b2, w56b1, w56b0, w42b31, w42b30, w42b29, w42b28, w42b27, w42b26, w42b25, w42b24, w42b23, w42b22, w42b21, w42b20, w42b19, w42b18, w42b17, w42b16, w42b15, w42b14, w42b13, w42b12, w42b11, w42b10, w42b9, w42b8, w42b7, w42b6, w42b5, w42b4, w42b3, w42b2, w42b1, w42b0, w51b31, w51b30, w51b29, w51b28, w51b27, w51b26, w51b25, w51b24, w51b23, w51b22, w51b21, w51b20, w51b19, w51b18, w51b17, w51b16, w51b15, w51b14, w51b13, w51b12, w51b11, w51b10, w51b9, w51b8, w51b7, w51b6, w51b5, w51b4, w51b3, w51b2, w51b1, w51b0) - - // PASS 59 - w59b31, w59b30, w59b29, w59b28, w59b27, w59b26, w59b25, w59b24, w59b23, w59b22, w59b21, w59b20, w59b19, w59b18, w59b17, w59b16, w59b15, w59b14, w59b13, w59b12, w59b11, w59b10, w59b9, w59b8, w59b7, w59b6, w59b5, w59b4, w59b3, w59b2, w59b1, w59b0 = EXTEND(w44b31, w44b30, w44b29, w44b28, w44b27, w44b26, w44b25, w44b24, w44b23, w44b22, w44b21, w44b20, w44b19, w44b18, w44b17, w44b16, w44b15, w44b14, w44b13, w44b12, w44b11, w44b10, w44b9, w44b8, w44b7, w44b6, w44b5, w44b4, w44b3, w44b2, w44b1, w44b0, w57b31, w57b30, w57b29, w57b28, w57b27, w57b26, w57b25, w57b24, w57b23, w57b22, w57b21, w57b20, w57b19, w57b18, w57b17, w57b16, w57b15, w57b14, w57b13, w57b12, w57b11, w57b10, w57b9, w57b8, w57b7, w57b6, w57b5, w57b4, w57b3, w57b2, w57b1, w57b0, w43b31, w43b30, w43b29, w43b28, w43b27, w43b26, w43b25, w43b24, w43b23, w43b22, w43b21, w43b20, w43b19, w43b18, w43b17, w43b16, w43b15, w43b14, w43b13, w43b12, w43b11, w43b10, w43b9, w43b8, w43b7, w43b6, w43b5, w43b4, w43b3, w43b2, w43b1, w43b0, w52b31, w52b30, w52b29, w52b28, w52b27, w52b26, w52b25, w52b24, w52b23, w52b22, w52b21, w52b20, w52b19, w52b18, w52b17, w52b16, w52b15, w52b14, w52b13, w52b12, w52b11, w52b10, w52b9, w52b8, w52b7, w52b6, w52b5, w52b4, w52b3, w52b2, w52b1, w52b0) - - // PASS 60 - w60b31, w60b30, w60b29, w60b28, w60b27, w60b26, w60b25, w60b24, w60b23, w60b22, w60b21, w60b20, w60b19, w60b18, w60b17, w60b16, w60b15, w60b14, w60b13, w60b12, w60b11, w60b10, w60b9, w60b8, w60b7, w60b6, w60b5, w60b4, w60b3, w60b2, w60b1, w60b0 = EXTEND(w45b31, w45b30, w45b29, w45b28, w45b27, w45b26, w45b25, w45b24, w45b23, w45b22, w45b21, w45b20, w45b19, w45b18, w45b17, w45b16, w45b15, w45b14, w45b13, w45b12, w45b11, w45b10, w45b9, w45b8, w45b7, w45b6, w45b5, w45b4, w45b3, w45b2, w45b1, w45b0, w58b31, w58b30, w58b29, w58b28, w58b27, w58b26, w58b25, w58b24, w58b23, w58b22, w58b21, w58b20, w58b19, w58b18, w58b17, w58b16, w58b15, w58b14, w58b13, w58b12, w58b11, w58b10, w58b9, w58b8, w58b7, w58b6, w58b5, w58b4, w58b3, w58b2, w58b1, w58b0, w44b31, w44b30, w44b29, w44b28, w44b27, w44b26, w44b25, w44b24, w44b23, w44b22, w44b21, w44b20, w44b19, w44b18, w44b17, w44b16, w44b15, w44b14, w44b13, w44b12, w44b11, w44b10, w44b9, w44b8, w44b7, w44b6, w44b5, w44b4, w44b3, w44b2, w44b1, w44b0, w53b31, w53b30, w53b29, w53b28, w53b27, w53b26, w53b25, w53b24, w53b23, w53b22, w53b21, w53b20, w53b19, w53b18, w53b17, w53b16, w53b15, w53b14, w53b13, w53b12, w53b11, w53b10, w53b9, w53b8, w53b7, w53b6, w53b5, w53b4, w53b3, w53b2, w53b1, w53b0) - - // PASS 61 - w61b31, w61b30, w61b29, w61b28, w61b27, w61b26, w61b25, w61b24, w61b23, w61b22, w61b21, w61b20, w61b19, w61b18, w61b17, w61b16, w61b15, w61b14, w61b13, w61b12, w61b11, w61b10, w61b9, w61b8, w61b7, w61b6, w61b5, w61b4, w61b3, w61b2, w61b1, w61b0 = EXTEND(w46b31, w46b30, w46b29, w46b28, w46b27, w46b26, w46b25, w46b24, w46b23, w46b22, w46b21, w46b20, w46b19, w46b18, w46b17, w46b16, w46b15, w46b14, w46b13, w46b12, w46b11, w46b10, w46b9, w46b8, w46b7, w46b6, w46b5, w46b4, w46b3, w46b2, w46b1, w46b0, w59b31, w59b30, w59b29, w59b28, w59b27, w59b26, w59b25, w59b24, w59b23, w59b22, w59b21, w59b20, w59b19, w59b18, w59b17, w59b16, w59b15, w59b14, w59b13, w59b12, w59b11, w59b10, w59b9, w59b8, w59b7, w59b6, w59b5, w59b4, w59b3, w59b2, w59b1, w59b0, w45b31, w45b30, w45b29, w45b28, w45b27, w45b26, w45b25, w45b24, w45b23, w45b22, w45b21, w45b20, w45b19, w45b18, w45b17, w45b16, w45b15, w45b14, w45b13, w45b12, w45b11, w45b10, w45b9, w45b8, w45b7, w45b6, w45b5, w45b4, w45b3, w45b2, w45b1, w45b0, w54b31, w54b30, w54b29, w54b28, w54b27, w54b26, w54b25, w54b24, w54b23, w54b22, w54b21, w54b20, w54b19, w54b18, w54b17, w54b16, w54b15, w54b14, w54b13, w54b12, w54b11, w54b10, w54b9, w54b8, w54b7, w54b6, w54b5, w54b4, w54b3, w54b2, w54b1, w54b0) - - // PASS 62 - w62b31, w62b30, w62b29, w62b28, w62b27, w62b26, w62b25, w62b24, w62b23, w62b22, w62b21, w62b20, w62b19, w62b18, w62b17, w62b16, w62b15, w62b14, w62b13, w62b12, w62b11, w62b10, w62b9, w62b8, w62b7, w62b6, w62b5, w62b4, w62b3, w62b2, w62b1, w62b0 = EXTEND(w47b31, w47b30, w47b29, w47b28, w47b27, w47b26, w47b25, w47b24, w47b23, w47b22, w47b21, w47b20, w47b19, w47b18, w47b17, w47b16, w47b15, w47b14, w47b13, w47b12, w47b11, w47b10, w47b9, w47b8, w47b7, w47b6, w47b5, w47b4, w47b3, w47b2, w47b1, w47b0, w60b31, w60b30, w60b29, w60b28, w60b27, w60b26, w60b25, w60b24, w60b23, w60b22, w60b21, w60b20, w60b19, w60b18, w60b17, w60b16, w60b15, w60b14, w60b13, w60b12, w60b11, w60b10, w60b9, w60b8, w60b7, w60b6, w60b5, w60b4, w60b3, w60b2, w60b1, w60b0, w46b31, w46b30, w46b29, w46b28, w46b27, w46b26, w46b25, w46b24, w46b23, w46b22, w46b21, w46b20, w46b19, w46b18, w46b17, w46b16, w46b15, w46b14, w46b13, w46b12, w46b11, w46b10, w46b9, w46b8, w46b7, w46b6, w46b5, w46b4, w46b3, w46b2, w46b1, w46b0, w55b31, w55b30, w55b29, w55b28, w55b27, w55b26, w55b25, w55b24, w55b23, w55b22, w55b21, w55b20, w55b19, w55b18, w55b17, w55b16, w55b15, w55b14, w55b13, w55b12, w55b11, w55b10, w55b9, w55b8, w55b7, w55b6, w55b5, w55b4, w55b3, w55b2, w55b1, w55b0) - - // PASS 63 - w63b31, w63b30, w63b29, w63b28, w63b27, w63b26, w63b25, w63b24, w63b23, w63b22, w63b21, w63b20, w63b19, w63b18, w63b17, w63b16, w63b15, w63b14, w63b13, w63b12, w63b11, w63b10, w63b9, w63b8, w63b7, w63b6, w63b5, w63b4, w63b3, w63b2, w63b1, w63b0 = EXTEND(w48b31, w48b30, w48b29, w48b28, w48b27, w48b26, w48b25, w48b24, w48b23, w48b22, w48b21, w48b20, w48b19, w48b18, w48b17, w48b16, w48b15, w48b14, w48b13, w48b12, w48b11, w48b10, w48b9, w48b8, w48b7, w48b6, w48b5, w48b4, w48b3, w48b2, w48b1, w48b0, w61b31, w61b30, w61b29, w61b28, w61b27, w61b26, w61b25, w61b24, w61b23, w61b22, w61b21, w61b20, w61b19, w61b18, w61b17, w61b16, w61b15, w61b14, w61b13, w61b12, w61b11, w61b10, w61b9, w61b8, w61b7, w61b6, w61b5, w61b4, w61b3, w61b2, w61b1, w61b0, w47b31, w47b30, w47b29, w47b28, w47b27, w47b26, w47b25, w47b24, w47b23, w47b22, w47b21, w47b20, w47b19, w47b18, w47b17, w47b16, w47b15, w47b14, w47b13, w47b12, w47b11, w47b10, w47b9, w47b8, w47b7, w47b6, w47b5, w47b4, w47b3, w47b2, w47b1, w47b0, w56b31, w56b30, w56b29, w56b28, w56b27, w56b26, w56b25, w56b24, w56b23, w56b22, w56b21, w56b20, w56b19, w56b18, w56b17, w56b16, w56b15, w56b14, w56b13, w56b12, w56b11, w56b10, w56b9, w56b8, w56b7, w56b6, w56b5, w56b4, w56b3, w56b2, w56b1, w56b0) - - - // INIT H0,...,H7 - - H0b31, H0b30, H0b29, H0b28, H0b27, H0b26, H0b25, H0b24, H0b23, H0b22, H0b21, H0b20, H0b19, H0b18, H0b17, H0b16, H0b15, H0b14, H0b13, H0b12, H0b11, H0b10, H0b9, H0b8, H0b7, H0b6, H0b5, H0b4, H0b3, H0b2, H0b1, H0b0 = H0() - - H1b31, H1b30, H1b29, H1b28, H1b27, H1b26, H1b25, H1b24, H1b23, H1b22, H1b21, H1b20, H1b19, H1b18, H1b17, H1b16, H1b15, H1b14, H1b13, H1b12, H1b11, H1b10, H1b9, H1b8, H1b7, H1b6, H1b5, H1b4, H1b3, H1b2, H1b1, H1b0 = H1() - - H2b31, H2b30, H2b29, H2b28, H2b27, H2b26, H2b25, H2b24, H2b23, H2b22, H2b21, H2b20, H2b19, H2b18, H2b17, H2b16, H2b15, H2b14, H2b13, H2b12, H2b11, H2b10, H2b9, H2b8, H2b7, H2b6, H2b5, H2b4, H2b3, H2b2, H2b1, H2b0 = H2() - - H3b31, H3b30, H3b29, H3b28, H3b27, H3b26, H3b25, H3b24, H3b23, H3b22, H3b21, H3b20, H3b19, H3b18, H3b17, H3b16, H3b15, H3b14, H3b13, H3b12, H3b11, H3b10, H3b9, H3b8, H3b7, H3b6, H3b5, H3b4, H3b3, H3b2, H3b1, H3b0 = H3() - - H4b31, H4b30, H4b29, H4b28, H4b27, H4b26, H4b25, H4b24, H4b23, H4b22, H4b21, H4b20, H4b19, H4b18, H4b17, H4b16, H4b15, H4b14, H4b13, H4b12, H4b11, H4b10, H4b9, H4b8, H4b7, H4b6, H4b5, H4b4, H4b3, H4b2, H4b1, H4b0 = H4() - - H5b31, H5b30, H5b29, H5b28, H5b27, H5b26, H5b25, H5b24, H5b23, H5b22, H5b21, H5b20, H5b19, H5b18, H5b17, H5b16, H5b15, H5b14, H5b13, H5b12, H5b11, H5b10, H5b9, H5b8, H5b7, H5b6, H5b5, H5b4, H5b3, H5b2, H5b1, H5b0 = H5() - - H6b31, H6b30, H6b29, H6b28, H6b27, H6b26, H6b25, H6b24, H6b23, H6b22, H6b21, H6b20, H6b19, H6b18, H6b17, H6b16, H6b15, H6b14, H6b13, H6b12, H6b11, H6b10, H6b9, H6b8, H6b7, H6b6, H6b5, H6b4, H6b3, H6b2, H6b1, H6b0 = H6() - - H7b31, H7b30, H7b29, H7b28, H7b27, H7b26, H7b25, H7b24, H7b23, H7b22, H7b21, H7b20, H7b19, H7b18, H7b17, H7b16, H7b15, H7b14, H7b13, H7b12, H7b11, H7b10, H7b9, H7b8, H7b7, H7b6, H7b5, H7b4, H7b3, H7b2, H7b1, H7b0 = H7() - - // INIT a,b,c,d,e,f,g,h - - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0 = COPY(H0b31, H0b30, H0b29, H0b28, H0b27, H0b26, H0b25, H0b24, H0b23, H0b22, H0b21, H0b20, H0b19, H0b18, H0b17, H0b16, H0b15, H0b14, H0b13, H0b12, H0b11, H0b10, H0b9, H0b8, H0b7, H0b6, H0b5, H0b4, H0b3, H0b2, H0b1, H0b0) - b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0 = COPY(H1b31, H1b30, H1b29, H1b28, H1b27, H1b26, H1b25, H1b24, H1b23, H1b22, H1b21, H1b20, H1b19, H1b18, H1b17, H1b16, H1b15, H1b14, H1b13, H1b12, H1b11, H1b10, H1b9, H1b8, H1b7, H1b6, H1b5, H1b4, H1b3, H1b2, H1b1, H1b0) - c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0 = COPY(H2b31, H2b30, H2b29, H2b28, H2b27, H2b26, H2b25, H2b24, H2b23, H2b22, H2b21, H2b20, H2b19, H2b18, H2b17, H2b16, H2b15, H2b14, H2b13, H2b12, H2b11, H2b10, H2b9, H2b8, H2b7, H2b6, H2b5, H2b4, H2b3, H2b2, H2b1, H2b0) - d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0 = COPY(H3b31, H3b30, H3b29, H3b28, H3b27, H3b26, H3b25, H3b24, H3b23, H3b22, H3b21, H3b20, H3b19, H3b18, H3b17, H3b16, H3b15, H3b14, H3b13, H3b12, H3b11, H3b10, H3b9, H3b8, H3b7, H3b6, H3b5, H3b4, H3b3, H3b2, H3b1, H3b0) - e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0 = COPY(H4b31, H4b30, H4b29, H4b28, H4b27, H4b26, H4b25, H4b24, H4b23, H4b22, H4b21, H4b20, H4b19, H4b18, H4b17, H4b16, H4b15, H4b14, H4b13, H4b12, H4b11, H4b10, H4b9, H4b8, H4b7, H4b6, H4b5, H4b4, H4b3, H4b2, H4b1, H4b0) - f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0 = COPY(H5b31, H5b30, H5b29, H5b28, H5b27, H5b26, H5b25, H5b24, H5b23, H5b22, H5b21, H5b20, H5b19, H5b18, H5b17, H5b16, H5b15, H5b14, H5b13, H5b12, H5b11, H5b10, H5b9, H5b8, H5b7, H5b6, H5b5, H5b4, H5b3, H5b2, H5b1, H5b0) - g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0 = COPY(H6b31, H6b30, H6b29, H6b28, H6b27, H6b26, H6b25, H6b24, H6b23, H6b22, H6b21, H6b20, H6b19, H6b18, H6b17, H6b16, H6b15, H6b14, H6b13, H6b12, H6b11, H6b10, H6b9, H6b8, H6b7, H6b6, H6b5, H6b4, H6b3, H6b2, H6b1, H6b0) - h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COPY(H7b31, H7b30, H7b29, H7b28, H7b27, H7b26, H7b25, H7b24, H7b23, H7b22, H7b21, H7b20, H7b19, H7b18, H7b17, H7b16, H7b15, H7b14, H7b13, H7b12, H7b11, H7b10, H7b9, H7b8, H7b7, H7b6, H7b5, H7b4, H7b3, H7b2, H7b1, H7b0) - -// PASS 0 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, w0b31, w0b30, w0b29, w0b28, w0b27, w0b26, w0b25, w0b24, w0b23, w0b22, w0b21, w0b20, w0b19, w0b18, w0b17, w0b16, w0b15, w0b14, w0b13, w0b12, w0b11, w0b10, w0b9, w0b8, w0b7, w0b6, w0b5, w0b4, w0b3, w0b2, w0b1, w0b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 1 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, w1b31, w1b30, w1b29, w1b28, w1b27, w1b26, w1b25, w1b24, w1b23, w1b22, w1b21, w1b20, w1b19, w1b18, w1b17, w1b16, w1b15, w1b14, w1b13, w1b12, w1b11, w1b10, w1b9, w1b8, w1b7, w1b6, w1b5, w1b4, w1b3, w1b2, w1b1, w1b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 2 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, w2b31, w2b30, w2b29, w2b28, w2b27, w2b26, w2b25, w2b24, w2b23, w2b22, w2b21, w2b20, w2b19, w2b18, w2b17, w2b16, w2b15, w2b14, w2b13, w2b12, w2b11, w2b10, w2b9, w2b8, w2b7, w2b6, w2b5, w2b4, w2b3, w2b2, w2b1, w2b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 3 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, w3b31, w3b30, w3b29, w3b28, w3b27, w3b26, w3b25, w3b24, w3b23, w3b22, w3b21, w3b20, w3b19, w3b18, w3b17, w3b16, w3b15, w3b14, w3b13, w3b12, w3b11, w3b10, w3b9, w3b8, w3b7, w3b6, w3b5, w3b4, w3b3, w3b2, w3b1, w3b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 4 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, w4b31, w4b30, w4b29, w4b28, w4b27, w4b26, w4b25, w4b24, w4b23, w4b22, w4b21, w4b20, w4b19, w4b18, w4b17, w4b16, w4b15, w4b14, w4b13, w4b12, w4b11, w4b10, w4b9, w4b8, w4b7, w4b6, w4b5, w4b4, w4b3, w4b2, w4b1, w4b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 5 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, w5b31, w5b30, w5b29, w5b28, w5b27, w5b26, w5b25, w5b24, w5b23, w5b22, w5b21, w5b20, w5b19, w5b18, w5b17, w5b16, w5b15, w5b14, w5b13, w5b12, w5b11, w5b10, w5b9, w5b8, w5b7, w5b6, w5b5, w5b4, w5b3, w5b2, w5b1, w5b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 6 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, w6b31, w6b30, w6b29, w6b28, w6b27, w6b26, w6b25, w6b24, w6b23, w6b22, w6b21, w6b20, w6b19, w6b18, w6b17, w6b16, w6b15, w6b14, w6b13, w6b12, w6b11, w6b10, w6b9, w6b8, w6b7, w6b6, w6b5, w6b4, w6b3, w6b2, w6b1, w6b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 7 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, w7b31, w7b30, w7b29, w7b28, w7b27, w7b26, w7b25, w7b24, w7b23, w7b22, w7b21, w7b20, w7b19, w7b18, w7b17, w7b16, w7b15, w7b14, w7b13, w7b12, w7b11, w7b10, w7b9, w7b8, w7b7, w7b6, w7b5, w7b4, w7b3, w7b2, w7b1, w7b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 8 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, w8b31, w8b30, w8b29, w8b28, w8b27, w8b26, w8b25, w8b24, w8b23, w8b22, w8b21, w8b20, w8b19, w8b18, w8b17, w8b16, w8b15, w8b14, w8b13, w8b12, w8b11, w8b10, w8b9, w8b8, w8b7, w8b6, w8b5, w8b4, w8b3, w8b2, w8b1, w8b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 9 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, w9b31, w9b30, w9b29, w9b28, w9b27, w9b26, w9b25, w9b24, w9b23, w9b22, w9b21, w9b20, w9b19, w9b18, w9b17, w9b16, w9b15, w9b14, w9b13, w9b12, w9b11, w9b10, w9b9, w9b8, w9b7, w9b6, w9b5, w9b4, w9b3, w9b2, w9b1, w9b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 10 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, w10b31, w10b30, w10b29, w10b28, w10b27, w10b26, w10b25, w10b24, w10b23, w10b22, w10b21, w10b20, w10b19, w10b18, w10b17, w10b16, w10b15, w10b14, w10b13, w10b12, w10b11, w10b10, w10b9, w10b8, w10b7, w10b6, w10b5, w10b4, w10b3, w10b2, w10b1, w10b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 11 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, w11b31, w11b30, w11b29, w11b28, w11b27, w11b26, w11b25, w11b24, w11b23, w11b22, w11b21, w11b20, w11b19, w11b18, w11b17, w11b16, w11b15, w11b14, w11b13, w11b12, w11b11, w11b10, w11b9, w11b8, w11b7, w11b6, w11b5, w11b4, w11b3, w11b2, w11b1, w11b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 12 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, w12b31, w12b30, w12b29, w12b28, w12b27, w12b26, w12b25, w12b24, w12b23, w12b22, w12b21, w12b20, w12b19, w12b18, w12b17, w12b16, w12b15, w12b14, w12b13, w12b12, w12b11, w12b10, w12b9, w12b8, w12b7, w12b6, w12b5, w12b4, w12b3, w12b2, w12b1, w12b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 13 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, w13b31, w13b30, w13b29, w13b28, w13b27, w13b26, w13b25, w13b24, w13b23, w13b22, w13b21, w13b20, w13b19, w13b18, w13b17, w13b16, w13b15, w13b14, w13b13, w13b12, w13b11, w13b10, w13b9, w13b8, w13b7, w13b6, w13b5, w13b4, w13b3, w13b2, w13b1, w13b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 14 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, w14b31, w14b30, w14b29, w14b28, w14b27, w14b26, w14b25, w14b24, w14b23, w14b22, w14b21, w14b20, w14b19, w14b18, w14b17, w14b16, w14b15, w14b14, w14b13, w14b12, w14b11, w14b10, w14b9, w14b8, w14b7, w14b6, w14b5, w14b4, w14b3, w14b2, w14b1, w14b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 15 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, w15b31, w15b30, w15b29, w15b28, w15b27, w15b26, w15b25, w15b24, w15b23, w15b22, w15b21, w15b20, w15b19, w15b18, w15b17, w15b16, w15b15, w15b14, w15b13, w15b12, w15b11, w15b10, w15b9, w15b8, w15b7, w15b6, w15b5, w15b4, w15b3, w15b2, w15b1, w15b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 16 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, w16b31, w16b30, w16b29, w16b28, w16b27, w16b26, w16b25, w16b24, w16b23, w16b22, w16b21, w16b20, w16b19, w16b18, w16b17, w16b16, w16b15, w16b14, w16b13, w16b12, w16b11, w16b10, w16b9, w16b8, w16b7, w16b6, w16b5, w16b4, w16b3, w16b2, w16b1, w16b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 17 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, w17b31, w17b30, w17b29, w17b28, w17b27, w17b26, w17b25, w17b24, w17b23, w17b22, w17b21, w17b20, w17b19, w17b18, w17b17, w17b16, w17b15, w17b14, w17b13, w17b12, w17b11, w17b10, w17b9, w17b8, w17b7, w17b6, w17b5, w17b4, w17b3, w17b2, w17b1, w17b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 18 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, w18b31, w18b30, w18b29, w18b28, w18b27, w18b26, w18b25, w18b24, w18b23, w18b22, w18b21, w18b20, w18b19, w18b18, w18b17, w18b16, w18b15, w18b14, w18b13, w18b12, w18b11, w18b10, w18b9, w18b8, w18b7, w18b6, w18b5, w18b4, w18b3, w18b2, w18b1, w18b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 19 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, w19b31, w19b30, w19b29, w19b28, w19b27, w19b26, w19b25, w19b24, w19b23, w19b22, w19b21, w19b20, w19b19, w19b18, w19b17, w19b16, w19b15, w19b14, w19b13, w19b12, w19b11, w19b10, w19b9, w19b8, w19b7, w19b6, w19b5, w19b4, w19b3, w19b2, w19b1, w19b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 20 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, w20b31, w20b30, w20b29, w20b28, w20b27, w20b26, w20b25, w20b24, w20b23, w20b22, w20b21, w20b20, w20b19, w20b18, w20b17, w20b16, w20b15, w20b14, w20b13, w20b12, w20b11, w20b10, w20b9, w20b8, w20b7, w20b6, w20b5, w20b4, w20b3, w20b2, w20b1, w20b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 21 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, w21b31, w21b30, w21b29, w21b28, w21b27, w21b26, w21b25, w21b24, w21b23, w21b22, w21b21, w21b20, w21b19, w21b18, w21b17, w21b16, w21b15, w21b14, w21b13, w21b12, w21b11, w21b10, w21b9, w21b8, w21b7, w21b6, w21b5, w21b4, w21b3, w21b2, w21b1, w21b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 22 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, w22b31, w22b30, w22b29, w22b28, w22b27, w22b26, w22b25, w22b24, w22b23, w22b22, w22b21, w22b20, w22b19, w22b18, w22b17, w22b16, w22b15, w22b14, w22b13, w22b12, w22b11, w22b10, w22b9, w22b8, w22b7, w22b6, w22b5, w22b4, w22b3, w22b2, w22b1, w22b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 23 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, w23b31, w23b30, w23b29, w23b28, w23b27, w23b26, w23b25, w23b24, w23b23, w23b22, w23b21, w23b20, w23b19, w23b18, w23b17, w23b16, w23b15, w23b14, w23b13, w23b12, w23b11, w23b10, w23b9, w23b8, w23b7, w23b6, w23b5, w23b4, w23b3, w23b2, w23b1, w23b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 24 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, w24b31, w24b30, w24b29, w24b28, w24b27, w24b26, w24b25, w24b24, w24b23, w24b22, w24b21, w24b20, w24b19, w24b18, w24b17, w24b16, w24b15, w24b14, w24b13, w24b12, w24b11, w24b10, w24b9, w24b8, w24b7, w24b6, w24b5, w24b4, w24b3, w24b2, w24b1, w24b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 25 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, w25b31, w25b30, w25b29, w25b28, w25b27, w25b26, w25b25, w25b24, w25b23, w25b22, w25b21, w25b20, w25b19, w25b18, w25b17, w25b16, w25b15, w25b14, w25b13, w25b12, w25b11, w25b10, w25b9, w25b8, w25b7, w25b6, w25b5, w25b4, w25b3, w25b2, w25b1, w25b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 26 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, w26b31, w26b30, w26b29, w26b28, w26b27, w26b26, w26b25, w26b24, w26b23, w26b22, w26b21, w26b20, w26b19, w26b18, w26b17, w26b16, w26b15, w26b14, w26b13, w26b12, w26b11, w26b10, w26b9, w26b8, w26b7, w26b6, w26b5, w26b4, w26b3, w26b2, w26b1, w26b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 27 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, w27b31, w27b30, w27b29, w27b28, w27b27, w27b26, w27b25, w27b24, w27b23, w27b22, w27b21, w27b20, w27b19, w27b18, w27b17, w27b16, w27b15, w27b14, w27b13, w27b12, w27b11, w27b10, w27b9, w27b8, w27b7, w27b6, w27b5, w27b4, w27b3, w27b2, w27b1, w27b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 28 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, w28b31, w28b30, w28b29, w28b28, w28b27, w28b26, w28b25, w28b24, w28b23, w28b22, w28b21, w28b20, w28b19, w28b18, w28b17, w28b16, w28b15, w28b14, w28b13, w28b12, w28b11, w28b10, w28b9, w28b8, w28b7, w28b6, w28b5, w28b4, w28b3, w28b2, w28b1, w28b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 29 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, w29b31, w29b30, w29b29, w29b28, w29b27, w29b26, w29b25, w29b24, w29b23, w29b22, w29b21, w29b20, w29b19, w29b18, w29b17, w29b16, w29b15, w29b14, w29b13, w29b12, w29b11, w29b10, w29b9, w29b8, w29b7, w29b6, w29b5, w29b4, w29b3, w29b2, w29b1, w29b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 30 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, w30b31, w30b30, w30b29, w30b28, w30b27, w30b26, w30b25, w30b24, w30b23, w30b22, w30b21, w30b20, w30b19, w30b18, w30b17, w30b16, w30b15, w30b14, w30b13, w30b12, w30b11, w30b10, w30b9, w30b8, w30b7, w30b6, w30b5, w30b4, w30b3, w30b2, w30b1, w30b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 31 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, w31b31, w31b30, w31b29, w31b28, w31b27, w31b26, w31b25, w31b24, w31b23, w31b22, w31b21, w31b20, w31b19, w31b18, w31b17, w31b16, w31b15, w31b14, w31b13, w31b12, w31b11, w31b10, w31b9, w31b8, w31b7, w31b6, w31b5, w31b4, w31b3, w31b2, w31b1, w31b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 32 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, w32b31, w32b30, w32b29, w32b28, w32b27, w32b26, w32b25, w32b24, w32b23, w32b22, w32b21, w32b20, w32b19, w32b18, w32b17, w32b16, w32b15, w32b14, w32b13, w32b12, w32b11, w32b10, w32b9, w32b8, w32b7, w32b6, w32b5, w32b4, w32b3, w32b2, w32b1, w32b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 33 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, w33b31, w33b30, w33b29, w33b28, w33b27, w33b26, w33b25, w33b24, w33b23, w33b22, w33b21, w33b20, w33b19, w33b18, w33b17, w33b16, w33b15, w33b14, w33b13, w33b12, w33b11, w33b10, w33b9, w33b8, w33b7, w33b6, w33b5, w33b4, w33b3, w33b2, w33b1, w33b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 34 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, w34b31, w34b30, w34b29, w34b28, w34b27, w34b26, w34b25, w34b24, w34b23, w34b22, w34b21, w34b20, w34b19, w34b18, w34b17, w34b16, w34b15, w34b14, w34b13, w34b12, w34b11, w34b10, w34b9, w34b8, w34b7, w34b6, w34b5, w34b4, w34b3, w34b2, w34b1, w34b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 35 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, w35b31, w35b30, w35b29, w35b28, w35b27, w35b26, w35b25, w35b24, w35b23, w35b22, w35b21, w35b20, w35b19, w35b18, w35b17, w35b16, w35b15, w35b14, w35b13, w35b12, w35b11, w35b10, w35b9, w35b8, w35b7, w35b6, w35b5, w35b4, w35b3, w35b2, w35b1, w35b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 36 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, w36b31, w36b30, w36b29, w36b28, w36b27, w36b26, w36b25, w36b24, w36b23, w36b22, w36b21, w36b20, w36b19, w36b18, w36b17, w36b16, w36b15, w36b14, w36b13, w36b12, w36b11, w36b10, w36b9, w36b8, w36b7, w36b6, w36b5, w36b4, w36b3, w36b2, w36b1, w36b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 37 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, w37b31, w37b30, w37b29, w37b28, w37b27, w37b26, w37b25, w37b24, w37b23, w37b22, w37b21, w37b20, w37b19, w37b18, w37b17, w37b16, w37b15, w37b14, w37b13, w37b12, w37b11, w37b10, w37b9, w37b8, w37b7, w37b6, w37b5, w37b4, w37b3, w37b2, w37b1, w37b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 38 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, w38b31, w38b30, w38b29, w38b28, w38b27, w38b26, w38b25, w38b24, w38b23, w38b22, w38b21, w38b20, w38b19, w38b18, w38b17, w38b16, w38b15, w38b14, w38b13, w38b12, w38b11, w38b10, w38b9, w38b8, w38b7, w38b6, w38b5, w38b4, w38b3, w38b2, w38b1, w38b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 39 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, w39b31, w39b30, w39b29, w39b28, w39b27, w39b26, w39b25, w39b24, w39b23, w39b22, w39b21, w39b20, w39b19, w39b18, w39b17, w39b16, w39b15, w39b14, w39b13, w39b12, w39b11, w39b10, w39b9, w39b8, w39b7, w39b6, w39b5, w39b4, w39b3, w39b2, w39b1, w39b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 40 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, w40b31, w40b30, w40b29, w40b28, w40b27, w40b26, w40b25, w40b24, w40b23, w40b22, w40b21, w40b20, w40b19, w40b18, w40b17, w40b16, w40b15, w40b14, w40b13, w40b12, w40b11, w40b10, w40b9, w40b8, w40b7, w40b6, w40b5, w40b4, w40b3, w40b2, w40b1, w40b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 41 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, w41b31, w41b30, w41b29, w41b28, w41b27, w41b26, w41b25, w41b24, w41b23, w41b22, w41b21, w41b20, w41b19, w41b18, w41b17, w41b16, w41b15, w41b14, w41b13, w41b12, w41b11, w41b10, w41b9, w41b8, w41b7, w41b6, w41b5, w41b4, w41b3, w41b2, w41b1, w41b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 42 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, w42b31, w42b30, w42b29, w42b28, w42b27, w42b26, w42b25, w42b24, w42b23, w42b22, w42b21, w42b20, w42b19, w42b18, w42b17, w42b16, w42b15, w42b14, w42b13, w42b12, w42b11, w42b10, w42b9, w42b8, w42b7, w42b6, w42b5, w42b4, w42b3, w42b2, w42b1, w42b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 43 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, w43b31, w43b30, w43b29, w43b28, w43b27, w43b26, w43b25, w43b24, w43b23, w43b22, w43b21, w43b20, w43b19, w43b18, w43b17, w43b16, w43b15, w43b14, w43b13, w43b12, w43b11, w43b10, w43b9, w43b8, w43b7, w43b6, w43b5, w43b4, w43b3, w43b2, w43b1, w43b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 44 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, w44b31, w44b30, w44b29, w44b28, w44b27, w44b26, w44b25, w44b24, w44b23, w44b22, w44b21, w44b20, w44b19, w44b18, w44b17, w44b16, w44b15, w44b14, w44b13, w44b12, w44b11, w44b10, w44b9, w44b8, w44b7, w44b6, w44b5, w44b4, w44b3, w44b2, w44b1, w44b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 45 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, w45b31, w45b30, w45b29, w45b28, w45b27, w45b26, w45b25, w45b24, w45b23, w45b22, w45b21, w45b20, w45b19, w45b18, w45b17, w45b16, w45b15, w45b14, w45b13, w45b12, w45b11, w45b10, w45b9, w45b8, w45b7, w45b6, w45b5, w45b4, w45b3, w45b2, w45b1, w45b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 46 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, w46b31, w46b30, w46b29, w46b28, w46b27, w46b26, w46b25, w46b24, w46b23, w46b22, w46b21, w46b20, w46b19, w46b18, w46b17, w46b16, w46b15, w46b14, w46b13, w46b12, w46b11, w46b10, w46b9, w46b8, w46b7, w46b6, w46b5, w46b4, w46b3, w46b2, w46b1, w46b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 47 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, w47b31, w47b30, w47b29, w47b28, w47b27, w47b26, w47b25, w47b24, w47b23, w47b22, w47b21, w47b20, w47b19, w47b18, w47b17, w47b16, w47b15, w47b14, w47b13, w47b12, w47b11, w47b10, w47b9, w47b8, w47b7, w47b6, w47b5, w47b4, w47b3, w47b2, w47b1, w47b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 48 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, w48b31, w48b30, w48b29, w48b28, w48b27, w48b26, w48b25, w48b24, w48b23, w48b22, w48b21, w48b20, w48b19, w48b18, w48b17, w48b16, w48b15, w48b14, w48b13, w48b12, w48b11, w48b10, w48b9, w48b8, w48b7, w48b6, w48b5, w48b4, w48b3, w48b2, w48b1, w48b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 49 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, w49b31, w49b30, w49b29, w49b28, w49b27, w49b26, w49b25, w49b24, w49b23, w49b22, w49b21, w49b20, w49b19, w49b18, w49b17, w49b16, w49b15, w49b14, w49b13, w49b12, w49b11, w49b10, w49b9, w49b8, w49b7, w49b6, w49b5, w49b4, w49b3, w49b2, w49b1, w49b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 50 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, w50b31, w50b30, w50b29, w50b28, w50b27, w50b26, w50b25, w50b24, w50b23, w50b22, w50b21, w50b20, w50b19, w50b18, w50b17, w50b16, w50b15, w50b14, w50b13, w50b12, w50b11, w50b10, w50b9, w50b8, w50b7, w50b6, w50b5, w50b4, w50b3, w50b2, w50b1, w50b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 51 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, w51b31, w51b30, w51b29, w51b28, w51b27, w51b26, w51b25, w51b24, w51b23, w51b22, w51b21, w51b20, w51b19, w51b18, w51b17, w51b16, w51b15, w51b14, w51b13, w51b12, w51b11, w51b10, w51b9, w51b8, w51b7, w51b6, w51b5, w51b4, w51b3, w51b2, w51b1, w51b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 52 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, w52b31, w52b30, w52b29, w52b28, w52b27, w52b26, w52b25, w52b24, w52b23, w52b22, w52b21, w52b20, w52b19, w52b18, w52b17, w52b16, w52b15, w52b14, w52b13, w52b12, w52b11, w52b10, w52b9, w52b8, w52b7, w52b6, w52b5, w52b4, w52b3, w52b2, w52b1, w52b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 53 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, w53b31, w53b30, w53b29, w53b28, w53b27, w53b26, w53b25, w53b24, w53b23, w53b22, w53b21, w53b20, w53b19, w53b18, w53b17, w53b16, w53b15, w53b14, w53b13, w53b12, w53b11, w53b10, w53b9, w53b8, w53b7, w53b6, w53b5, w53b4, w53b3, w53b2, w53b1, w53b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 54 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, w54b31, w54b30, w54b29, w54b28, w54b27, w54b26, w54b25, w54b24, w54b23, w54b22, w54b21, w54b20, w54b19, w54b18, w54b17, w54b16, w54b15, w54b14, w54b13, w54b12, w54b11, w54b10, w54b9, w54b8, w54b7, w54b6, w54b5, w54b4, w54b3, w54b2, w54b1, w54b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 55 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, w55b31, w55b30, w55b29, w55b28, w55b27, w55b26, w55b25, w55b24, w55b23, w55b22, w55b21, w55b20, w55b19, w55b18, w55b17, w55b16, w55b15, w55b14, w55b13, w55b12, w55b11, w55b10, w55b9, w55b8, w55b7, w55b6, w55b5, w55b4, w55b3, w55b2, w55b1, w55b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 56 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, w56b31, w56b30, w56b29, w56b28, w56b27, w56b26, w56b25, w56b24, w56b23, w56b22, w56b21, w56b20, w56b19, w56b18, w56b17, w56b16, w56b15, w56b14, w56b13, w56b12, w56b11, w56b10, w56b9, w56b8, w56b7, w56b6, w56b5, w56b4, w56b3, w56b2, w56b1, w56b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 57 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, w57b31, w57b30, w57b29, w57b28, w57b27, w57b26, w57b25, w57b24, w57b23, w57b22, w57b21, w57b20, w57b19, w57b18, w57b17, w57b16, w57b15, w57b14, w57b13, w57b12, w57b11, w57b10, w57b9, w57b8, w57b7, w57b6, w57b5, w57b4, w57b3, w57b2, w57b1, w57b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 58 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, w58b31, w58b30, w58b29, w58b28, w58b27, w58b26, w58b25, w58b24, w58b23, w58b22, w58b21, w58b20, w58b19, w58b18, w58b17, w58b16, w58b15, w58b14, w58b13, w58b12, w58b11, w58b10, w58b9, w58b8, w58b7, w58b6, w58b5, w58b4, w58b3, w58b2, w58b1, w58b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 59 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, w59b31, w59b30, w59b29, w59b28, w59b27, w59b26, w59b25, w59b24, w59b23, w59b22, w59b21, w59b20, w59b19, w59b18, w59b17, w59b16, w59b15, w59b14, w59b13, w59b12, w59b11, w59b10, w59b9, w59b8, w59b7, w59b6, w59b5, w59b4, w59b3, w59b2, w59b1, w59b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 60 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, w60b31, w60b30, w60b29, w60b28, w60b27, w60b26, w60b25, w60b24, w60b23, w60b22, w60b21, w60b20, w60b19, w60b18, w60b17, w60b16, w60b15, w60b14, w60b13, w60b12, w60b11, w60b10, w60b9, w60b8, w60b7, w60b6, w60b5, w60b4, w60b3, w60b2, w60b1, w60b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 61 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, w61b31, w61b30, w61b29, w61b28, w61b27, w61b26, w61b25, w61b24, w61b23, w61b22, w61b21, w61b20, w61b19, w61b18, w61b17, w61b16, w61b15, w61b14, w61b13, w61b12, w61b11, w61b10, w61b9, w61b8, w61b7, w61b6, w61b5, w61b4, w61b3, w61b2, w61b1, w61b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 62 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, w62b31, w62b30, w62b29, w62b28, w62b27, w62b26, w62b25, w62b24, w62b23, w62b22, w62b21, w62b20, w62b19, w62b18, w62b17, w62b16, w62b15, w62b14, w62b13, w62b12, w62b11, w62b10, w62b9, w62b8, w62b7, w62b6, w62b5, w62b4, w62b3, w62b2, w62b1, w62b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - // PASS 63 - a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = COMPROUND(1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, w63b31, w63b30, w63b29, w63b28, w63b27, w63b26, w63b25, w63b24, w63b23, w63b22, w63b21, w63b20, w63b19, w63b18, w63b17, w63b16, w63b15, w63b14, w63b13, w63b12, w63b11, w63b10, w63b9, w63b8, w63b7, w63b6, w63b5, w63b4, w63b3, w63b2, w63b1, w63b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - - - - - // H := H + ai - H0b31, H0b30, H0b29, H0b28, H0b27, H0b26, H0b25, H0b24, H0b23, H0b22, H0b21, H0b20, H0b19, H0b18, H0b17, H0b16, H0b15, H0b14, H0b13, H0b12, H0b11, H0b10, H0b9, H0b8, H0b7, H0b6, H0b5, H0b4, H0b3, H0b2, H0b1, H0b0 = ADD(H0b31, H0b30, H0b29, H0b28, H0b27, H0b26, H0b25, H0b24, H0b23, H0b22, H0b21, H0b20, H0b19, H0b18, H0b17, H0b16, H0b15, H0b14, H0b13, H0b12, H0b11, H0b10, H0b9, H0b8, H0b7, H0b6, H0b5, H0b4, H0b3, H0b2, H0b1, H0b0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) - - H1b31, H1b30, H1b29, H1b28, H1b27, H1b26, H1b25, H1b24, H1b23, H1b22, H1b21, H1b20, H1b19, H1b18, H1b17, H1b16, H1b15, H1b14, H1b13, H1b12, H1b11, H1b10, H1b9, H1b8, H1b7, H1b6, H1b5, H1b4, H1b3, H1b2, H1b1, H1b0 = ADD(H1b31, H1b30, H1b29, H1b28, H1b27, H1b26, H1b25, H1b24, H1b23, H1b22, H1b21, H1b20, H1b19, H1b18, H1b17, H1b16, H1b15, H1b14, H1b13, H1b12, H1b11, H1b10, H1b9, H1b8, H1b7, H1b6, H1b5, H1b4, H1b3, H1b2, H1b1, H1b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0) - - H2b31, H2b30, H2b29, H2b28, H2b27, H2b26, H2b25, H2b24, H2b23, H2b22, H2b21, H2b20, H2b19, H2b18, H2b17, H2b16, H2b15, H2b14, H2b13, H2b12, H2b11, H2b10, H2b9, H2b8, H2b7, H2b6, H2b5, H2b4, H2b3, H2b2, H2b1, H2b0 = ADD(H2b31, H2b30, H2b29, H2b28, H2b27, H2b26, H2b25, H2b24, H2b23, H2b22, H2b21, H2b20, H2b19, H2b18, H2b17, H2b16, H2b15, H2b14, H2b13, H2b12, H2b11, H2b10, H2b9, H2b8, H2b7, H2b6, H2b5, H2b4, H2b3, H2b2, H2b1, H2b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0) - - H3b31, H3b30, H3b29, H3b28, H3b27, H3b26, H3b25, H3b24, H3b23, H3b22, H3b21, H3b20, H3b19, H3b18, H3b17, H3b16, H3b15, H3b14, H3b13, H3b12, H3b11, H3b10, H3b9, H3b8, H3b7, H3b6, H3b5, H3b4, H3b3, H3b2, H3b1, H3b0 = ADD(H3b31, H3b30, H3b29, H3b28, H3b27, H3b26, H3b25, H3b24, H3b23, H3b22, H3b21, H3b20, H3b19, H3b18, H3b17, H3b16, H3b15, H3b14, H3b13, H3b12, H3b11, H3b10, H3b9, H3b8, H3b7, H3b6, H3b5, H3b4, H3b3, H3b2, H3b1, H3b0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0) - - H4b31, H4b30, H4b29, H4b28, H4b27, H4b26, H4b25, H4b24, H4b23, H4b22, H4b21, H4b20, H4b19, H4b18, H4b17, H4b16, H4b15, H4b14, H4b13, H4b12, H4b11, H4b10, H4b9, H4b8, H4b7, H4b6, H4b5, H4b4, H4b3, H4b2, H4b1, H4b0 = ADD(H4b31, H4b30, H4b29, H4b28, H4b27, H4b26, H4b25, H4b24, H4b23, H4b22, H4b21, H4b20, H4b19, H4b18, H4b17, H4b16, H4b15, H4b14, H4b13, H4b12, H4b11, H4b10, H4b9, H4b8, H4b7, H4b6, H4b5, H4b4, H4b3, H4b2, H4b1, H4b0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0) - - H5b31, H5b30, H5b29, H5b28, H5b27, H5b26, H5b25, H5b24, H5b23, H5b22, H5b21, H5b20, H5b19, H5b18, H5b17, H5b16, H5b15, H5b14, H5b13, H5b12, H5b11, H5b10, H5b9, H5b8, H5b7, H5b6, H5b5, H5b4, H5b3, H5b2, H5b1, H5b0 = ADD(H5b31, H5b30, H5b29, H5b28, H5b27, H5b26, H5b25, H5b24, H5b23, H5b22, H5b21, H5b20, H5b19, H5b18, H5b17, H5b16, H5b15, H5b14, H5b13, H5b12, H5b11, H5b10, H5b9, H5b8, H5b7, H5b6, H5b5, H5b4, H5b3, H5b2, H5b1, H5b0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0) - - H6b31, H6b30, H6b29, H6b28, H6b27, H6b26, H6b25, H6b24, H6b23, H6b22, H6b21, H6b20, H6b19, H6b18, H6b17, H6b16, H6b15, H6b14, H6b13, H6b12, H6b11, H6b10, H6b9, H6b8, H6b7, H6b6, H6b5, H6b4, H6b3, H6b2, H6b1, H6b0 = ADD(H6b31, H6b30, H6b29, H6b28, H6b27, H6b26, H6b25, H6b24, H6b23, H6b22, H6b21, H6b20, H6b19, H6b18, H6b17, H6b16, H6b15, H6b14, H6b13, H6b12, H6b11, H6b10, H6b9, H6b8, H6b7, H6b6, H6b5, H6b4, H6b3, H6b2, H6b1, H6b0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0) - - H7b31, H7b30, H7b29, H7b28, H7b27, H7b26, H7b25, H7b24, H7b23, H7b22, H7b21, H7b20, H7b19, H7b18, H7b17, H7b16, H7b15, H7b14, H7b13, H7b12, H7b11, H7b10, H7b9, H7b8, H7b7, H7b6, H7b5, H7b4, H7b3, H7b2, H7b1, H7b0 = ADD(H7b31, H7b30, H7b29, H7b28, H7b27, H7b26, H7b25, H7b24, H7b23, H7b22, H7b21, H7b20, H7b19, H7b18, H7b17, H7b16, H7b15, H7b14, H7b13, H7b12, H7b11, H7b10, H7b9, H7b8, H7b7, H7b6, H7b5, H7b4, H7b3, H7b2, H7b1, H7b0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0) - - return H0b31, H0b30, H0b29, H0b28, H0b27, H0b26, H0b25, H0b24, H0b23, H0b22, H0b21, H0b20, H0b19, H0b18, H0b17, H0b16, H0b15, H0b14, H0b13, H0b12, H0b11, H0b10, H0b9, H0b8, H0b7, H0b6, H0b5, H0b4, H0b3, H0b2, H0b1, H0b0, H1b31, H1b30, H1b29, H1b28, H1b27, H1b26, H1b25, H1b24, H1b23, H1b22, H1b21, H1b20, H1b19, H1b18, H1b17, H1b16, H1b15, H1b14, H1b13, H1b12, H1b11, H1b10, H1b9, H1b8, H1b7, H1b6, H1b5, H1b4, H1b3, H1b2, H1b1, H1b0, H2b31, H2b30, H2b29, H2b28, H2b27, H2b26, H2b25, H2b24, H2b23, H2b22, H2b21, H2b20, H2b19, H2b18, H2b17, H2b16, H2b15, H2b14, H2b13, H2b12, H2b11, H2b10, H2b9, H2b8, H2b7, H2b6, H2b5, H2b4, H2b3, H2b2, H2b1, H2b0, H3b31, H3b30, H3b29, H3b28, H3b27, H3b26, H3b25, H3b24, H3b23, H3b22, H3b21, H3b20, H3b19, H3b18, H3b17, H3b16, H3b15, H3b14, H3b13, H3b12, H3b11, H3b10, H3b9, H3b8, H3b7, H3b6, H3b5, H3b4, H3b3, H3b2, H3b1, H3b0, H4b31, H4b30, H4b29, H4b28, H4b27, H4b26, H4b25, H4b24, H4b23, H4b22, H4b21, H4b20, H4b19, H4b18, H4b17, H4b16, H4b15, H4b14, H4b13, H4b12, H4b11, H4b10, H4b9, H4b8, H4b7, H4b6, H4b5, H4b4, H4b3, H4b2, H4b1, H4b0, H5b31, H5b30, H5b29, H5b28, H5b27, H5b26, H5b25, H5b24, H5b23, H5b22, H5b21, H5b20, H5b19, H5b18, H5b17, H5b16, H5b15, H5b14, H5b13, H5b12, H5b11, H5b10, H5b9, H5b8, H5b7, H5b6, H5b5, H5b4, H5b3, H5b2, H5b1, H5b0, H6b31, H6b30, H6b29, H6b28, H6b27, H6b26, H6b25, H6b24, H6b23, H6b22, H6b21, H6b20, H6b19, H6b18, H6b17, H6b16, H6b15, H6b14, H6b13, H6b12, H6b11, H6b10, H6b9, H6b8, H6b7, H6b6, H6b5, H6b4, H6b3, H6b2, H6b1, H6b0, H7b31, H7b30, H7b29, H7b28, H7b27, H7b26, H7b25, H7b24, H7b23, H7b22, H7b21, H7b20, H7b19, H7b18, H7b17, H7b16, H7b15, H7b14, H7b13, H7b12, H7b11, H7b10, H7b9, H7b8, H7b7, H7b6, H7b5, H7b4, H7b3, H7b2, H7b1, H7b0 - - -def main(private i511, private i510, private i509, private i508, private i507, private i506, private i505, private i504, private i503, private i502, private i501, private i500, private i499, private i498, private i497, private i496, private i495, private i494, private i493, private i492, private i491, private i490, private i489, private i488, private i487, private i486, private i485, private i484, private i483, private i482, private i481, private i480, private i479, private i478, private i477, private i476, private i475, private i474, private i473, private i472, private i471, private i470, private i469, private i468, private i467, private i466, private i465, private i464, private i463, private i462, private i461, private i460, private i459, private i458, private i457, private i456, private i455, private i454, private i453, private i452, private i451, private i450, private i449, private i448, private i447, private i446, private i445, private i444, private i443, private i442, private i441, private i440, private i439, private i438, private i437, private i436, private i435, private i434, private i433, private i432, private i431, private i430, private i429, private i428, private i427, private i426, private i425, private i424, private i423, private i422, private i421, private i420, private i419, private i418, private i417, private i416, private i415, private i414, private i413, private i412, private i411, private i410, private i409, private i408, private i407, private i406, private i405, private i404, private i403, private i402, private i401, private i400, private i399, private i398, private i397, private i396, private i395, private i394, private i393, private i392, private i391, private i390, private i389, private i388, private i387, private i386, private i385, private i384, private i383, private i382, private i381, private i380, private i379, private i378, private i377, private i376, private i375, private i374, private i373, private i372, private i371, private i370, private i369, private i368, private i367, private i366, private i365, private i364, private i363, private i362, private i361, private i360, private i359, private i358, private i357, private i356, private i355, private i354, private i353, private i352, private i351, private i350, private i349, private i348, private i347, private i346, private i345, private i344, private i343, private i342, private i341, private i340, private i339, private i338, private i337, private i336, private i335, private i334, private i333, private i332, private i331, private i330, private i329, private i328, private i327, private i326, private i325, private i324, private i323, private i322, private i321, private i320, private i319, private i318, private i317, private i316, private i315, private i314, private i313, private i312, private i311, private i310, private i309, private i308, private i307, private i306, private i305, private i304, private i303, private i302, private i301, private i300, private i299, private i298, private i297, private i296, private i295, private i294, private i293, private i292, private i291, private i290, private i289, private i288, private i287, private i286, private i285, private i284, private i283, private i282, private i281, private i280, private i279, private i278, private i277, private i276, private i275, private i274, private i273, private i272, private i271, private i270, private i269, private i268, private i267, private i266, private i265, private i264, private i263, private i262, private i261, private i260, private i259, private i258, private i257, private i256, private i255, private i254, private i253, private i252, private i251, private i250, private i249, private i248, private i247, private i246, private i245, private i244, private i243, private i242, private i241, private i240, private i239, private i238, private i237, private i236, private i235, private i234, private i233, private i232, private i231, private i230, private i229, private i228, private i227, private i226, private i225, private i224, private i223, private i222, private i221, private i220, private i219, private i218, private i217, private i216, private i215, private i214, private i213, private i212, private i211, private i210, private i209, private i208, private i207, private i206, private i205, private i204, private i203, private i202, private i201, private i200, private i199, private i198, private i197, private i196, private i195, private i194, private i193, private i192, private i191, private i190, private i189, private i188, private i187, private i186, private i185, private i184, private i183, private i182, private i181, private i180, private i179, private i178, private i177, private i176, private i175, private i174, private i173, private i172, private i171, private i170, private i169, private i168, private i167, private i166, private i165, private i164, private i163, private i162, private i161, private i160, private i159, private i158, private i157, private i156, private i155, private i154, private i153, private i152, private i151, private i150, private i149, private i148, private i147, private i146, private i145, private i144, private i143, private i142, private i141, private i140, private i139, private i138, private i137, private i136, private i135, private i134, private i133, private i132, private i131, private i130, private i129, private i128, private i127, private i126, private i125, private i124, private i123, private i122, private i121, private i120, private i119, private i118, private i117, private i116, private i115, private i114, private i113, private i112, private i111, private i110, private i109, private i108, private i107, private i106, private i105, private i104, private i103, private i102, private i101, private i100, private i99, private i98, private i97, private i96, private i95, private i94, private i93, private i92, private i91, private i90, private i89, private i88, private i87, private i86, private i85, private i84, private i83, private i82, private i81, private i80, private i79, private i78, private i77, private i76, private i75, private i74, private i73, private i72, private i71, private i70, private i69, private i68, private i67, private i66, private i65, private i64, private i63, private i62, private i61, private i60, private i59, private i58, private i57, private i56, private i55, private i54, private i53, private i52, private i51, private i50, private i49, private i48, private i47, private i46, private i45, private i44, private i43, private i42, private i41, private i40, private i39, private i38, private i37, private i36, private i35, private i34, private i33, private i32, private i31, private i30, private i29, private i28, private i27, private i26, private i25, private i24, private i23, private i22, private i21, private i20, private i19, private i18, private i17, private i16, private i15, private i14, private i13, private i12, private i11, private i10, private i9, private i8, private i7, private i6, private i5, private i4, private i3, private i2, private i1, private i0, private left255, private left254, private left253, private left252, private left251, private left250, private left249, private left248, private left247, private left246, private left245, private left244, private left243, private left242, private left241, private left240, private left239, private left238, private left237, private left236, private left235, private left234, private left233, private left232, private left231, private left230, private left229, private left228, private left227, private left226, private left225, private left224, private left223, private left222, private left221, private left220, private left219, private left218, private left217, private left216, private left215, private left214, private left213, private left212, private left211, private left210, private left209, private left208, private left207, private left206, private left205, private left204, private left203, private left202, private left201, private left200, private left199, private left198, private left197, private left196, private left195, private left194, private left193, private left192, private left191, private left190, private left189, private left188, private left187, private left186, private left185, private left184, private left183, private left182, private left181, private left180, private left179, private left178, private left177, private left176, private left175, private left174, private left173, private left172, private left171, private left170, private left169, private left168, private left167, private left166, private left165, private left164, private left163, private left162, private left161, private left160, private left159, private left158, private left157, private left156, private left155, private left154, private left153, private left152, private left151, private left150, private left149, private left148, private left147, private left146, private left145, private left144, private left143, private left142, private left141, private left140, private left139, private left138, private left137, private left136, private left135, private left134, private left133, private left132, private left131, private left130, private left129, private left128, private left127, private left126, private left125, private left124, private left123, private left122, private left121, private left120, private left119, private left118, private left117, private left116, private left115, private left114, private left113, private left112, private left111, private left110, private left109, private left108, private left107, private left106, private left105, private left104, private left103, private left102, private left101, private left100, private left99, private left98, private left97, private left96, private left95, private left94, private left93, private left92, private left91, private left90, private left89, private left88, private left87, private left86, private left85, private left84, private left83, private left82, private left81, private left80, private left79, private left78, private left77, private left76, private left75, private left74, private left73, private left72, private left71, private left70, private left69, private left68, private left67, private left66, private left65, private left64, private left63, private left62, private left61, private left60, private left59, private left58, private left57, private left56, private left55, private left54, private left53, private left52, private left51, private left50, private left49, private left48, private left47, private left46, private left45, private left44, private left43, private left42, private left41, private left40, private left39, private left38, private left37, private left36, private left35, private left34, private left33, private left32, private left31, private left30, private left29, private left28, private left27, private left26, private left25, private left24, private left23, private left22, private left21, private left20, private left19, private left18, private left17, private left16, private left15, private left14, private left13, private left12, private left11, private left10, private left9, private left8, private left7, private left6, private left5, private left4, private left3, private left2, private left1, private left0, root255, root254, root253, root252, root251, root250, root249, root248, root247, root246, root245, root244, root243, root242, root241, root240, root239, root238, root237, root236, root235, root234, root233, root232, root231, root230, root229, root228, root227, root226, root225, root224, root223, root222, root221, root220, root219, root218, root217, root216, root215, root214, root213, root212, root211, root210, root209, root208, root207, root206, root205, root204, root203, root202, root201, root200, root199, root198, root197, root196, root195, root194, root193, root192, root191, root190, root189, root188, root187, root186, root185, root184, root183, root182, root181, root180, root179, root178, root177, root176, root175, root174, root173, root172, root171, root170, root169, root168, root167, root166, root165, root164, root163, root162, root161, root160, root159, root158, root157, root156, root155, root154, root153, root152, root151, root150, root149, root148, root147, root146, root145, root144, root143, root142, root141, root140, root139, root138, root137, root136, root135, root134, root133, root132, root131, root130, root129, root128, root127, root126, root125, root124, root123, root122, root121, root120, root119, root118, root117, root116, root115, root114, root113, root112, root111, root110, root109, root108, root107, root106, root105, root104, root103, root102, root101, root100, root99, root98, root97, root96, root95, root94, root93, root92, root91, root90, root89, root88, root87, root86, root85, root84, root83, root82, root81, root80, root79, root78, root77, root76, root75, root74, root73, root72, root71, root70, root69, root68, root67, root66, root65, root64, root63, root62, root61, root60, root59, root58, root57, root56, root55, root54, root53, root52, root51, root50, root49, root48, root47, root46, root45, root44, root43, root42, root41, root40, root39, root38, root37, root36, root35, root34, root33, root32, root31, root30, root29, root28, root27, root26, root25, root24, root23, root22, root21, root20, root19, root18, root17, root16, root15, root14, root13, root12, root11, root10, root9, root8, root7, root6, root5, root4, root3, root2, root1, root0): - - // compute the hash of the private input - - r255, r254, r253, r252, r251, r250, r249, r248, r247, r246, r245, r244, r243, r242, r241, r240, r239, r238, r237, r236, r235, r234, r233, r232, r231, r230, r229, r228, r227, r226, r225, r224, r223, r222, r221, r220, r219, r218, r217, r216, r215, r214, r213, r212, r211, r210, r209, r208, r207, r206, r205, r204, r203, r202, r201, r200, r199, r198, r197, r196, r195, r194, r193, r192, r191, r190, r189, r188, r187, r186, r185, r184, r183, r182, r181, r180, r179, r178, r177, r176, r175, r174, r173, r172, r171, r170, r169, r168, r167, r166, r165, r164, r163, r162, r161, r160, r159, r158, r157, r156, r155, r154, r153, r152, r151, r150, r149, r148, r147, r146, r145, r144, r143, r142, r141, r140, r139, r138, r137, r136, r135, r134, r133, r132, r131, r130, r129, r128, r127, r126, r125, r124, r123, r122, r121, r120, r119, r118, r117, r116, r115, r114, r113, r112, r111, r110, r109, r108, r107, r106, r105, r104, r103, r102, r101, r100, r99, r98, r97, r96, r95, r94, r93, r92, r91, r90, r89, r88, r87, r86, r85, r84, r83, r82, r81, r80, r79, r78, r77, r76, r75, r74, r73, r72, r71, r70, r69, r68, r67, r66, r65, r64, r63, r62, r61, r60, r59, r58, r57, r56, r55, r54, r53, r52, r51, r50, r49, r48, r47, r46, r45, r44, r43, r42, r41, r40, r39, r38, r37, r36, r35, r34, r33, r32, r31, r30, r29, r28, r27, r26, r25, r24, r23, r22, r21, r20, r19, r18, r17, r16, r15, r14, r13, r12, r11, r10, r9, r8, r7, r6, r5, r4, r3, r2, r1, r0 = sha256compress(i511, i510, i509, i508, i507, i506, i505, i504, i503, i502, i501, i500, i499, i498, i497, i496, i495, i494, i493, i492, i491, i490, i489, i488, i487, i486, i485, i484, i483, i482, i481, i480, i479, i478, i477, i476, i475, i474, i473, i472, i471, i470, i469, i468, i467, i466, i465, i464, i463, i462, i461, i460, i459, i458, i457, i456, i455, i454, i453, i452, i451, i450, i449, i448, i447, i446, i445, i444, i443, i442, i441, i440, i439, i438, i437, i436, i435, i434, i433, i432, i431, i430, i429, i428, i427, i426, i425, i424, i423, i422, i421, i420, i419, i418, i417, i416, i415, i414, i413, i412, i411, i410, i409, i408, i407, i406, i405, i404, i403, i402, i401, i400, i399, i398, i397, i396, i395, i394, i393, i392, i391, i390, i389, i388, i387, i386, i385, i384, i383, i382, i381, i380, i379, i378, i377, i376, i375, i374, i373, i372, i371, i370, i369, i368, i367, i366, i365, i364, i363, i362, i361, i360, i359, i358, i357, i356, i355, i354, i353, i352, i351, i350, i349, i348, i347, i346, i345, i344, i343, i342, i341, i340, i339, i338, i337, i336, i335, i334, i333, i332, i331, i330, i329, i328, i327, i326, i325, i324, i323, i322, i321, i320, i319, i318, i317, i316, i315, i314, i313, i312, i311, i310, i309, i308, i307, i306, i305, i304, i303, i302, i301, i300, i299, i298, i297, i296, i295, i294, i293, i292, i291, i290, i289, i288, i287, i286, i285, i284, i283, i282, i281, i280, i279, i278, i277, i276, i275, i274, i273, i272, i271, i270, i269, i268, i267, i266, i265, i264, i263, i262, i261, i260, i259, i258, i257, i256, i255, i254, i253, i252, i251, i250, i249, i248, i247, i246, i245, i244, i243, i242, i241, i240, i239, i238, i237, i236, i235, i234, i233, i232, i231, i230, i229, i228, i227, i226, i225, i224, i223, i222, i221, i220, i219, i218, i217, i216, i215, i214, i213, i212, i211, i210, i209, i208, i207, i206, i205, i204, i203, i202, i201, i200, i199, i198, i197, i196, i195, i194, i193, i192, i191, i190, i189, i188, i187, i186, i185, i184, i183, i182, i181, i180, i179, i178, i177, i176, i175, i174, i173, i172, i171, i170, i169, i168, i167, i166, i165, i164, i163, i162, i161, i160, i159, i158, i157, i156, i155, i154, i153, i152, i151, i150, i149, i148, i147, i146, i145, i144, i143, i142, i141, i140, i139, i138, i137, i136, i135, i134, i133, i132, i131, i130, i129, i128, i127, i126, i125, i124, i123, i122, i121, i120, i119, i118, i117, i116, i115, i114, i113, i112, i111, i110, i109, i108, i107, i106, i105, i104, i103, i102, i101, i100, i99, i98, i97, i96, i95, i94, i93, i92, i91, i90, i89, i88, i87, i86, i85, i84, i83, i82, i81, i80, i79, i78, i77, i76, i75, i74, i73, i72, i71, i70, i69, i68, i67, i66, i65, i64, i63, i62, i61, i60, i59, i58, i57, i56, i55, i54, i53, i52, i51, i50, i49, i48, i47, i46, i45, i44, i43, i42, i41, i40, i39, i38, i37, i36, i35, i34, i33, i32, i31, i30, i29, i28, i27, i26, i25, i24, i23, i22, i21, i20, i19, i18, i17, i16, i15, i14, i13, i12, i11, i10, i9, i8, i7, i6, i5, i4, i3, i2, i1, i0) - - h255, h254, h253, h252, h251, h250, h249, h248, h247, h246, h245, h244, h243, h242, h241, h240, h239, h238, h237, h236, h235, h234, h233, h232, h231, h230, h229, h228, h227, h226, h225, h224, h223, h222, h221, h220, h219, h218, h217, h216, h215, h214, h213, h212, h211, h210, h209, h208, h207, h206, h205, h204, h203, h202, h201, h200, h199, h198, h197, h196, h195, h194, h193, h192, h191, h190, h189, h188, h187, h186, h185, h184, h183, h182, h181, h180, h179, h178, h177, h176, h175, h174, h173, h172, h171, h170, h169, h168, h167, h166, h165, h164, h163, h162, h161, h160, h159, h158, h157, h156, h155, h154, h153, h152, h151, h150, h149, h148, h147, h146, h145, h144, h143, h142, h141, h140, h139, h138, h137, h136, h135, h134, h133, h132, h131, h130, h129, h128, h127, h126, h125, h124, h123, h122, h121, h120, h119, h118, h117, h116, h115, h114, h113, h112, h111, h110, h109, h108, h107, h106, h105, h104, h103, h102, h101, h100, h99, h98, h97, h96, h95, h94, h93, h92, h91, h90, h89, h88, h87, h86, h85, h84, h83, h82, h81, h80, h79, h78, h77, h76, h75, h74, h73, h72, h71, h70, h69, h68, h67, h66, h65, h64, h63, h62, h61, h60, h59, h58, h57, h56, h55, h54, h53, h52, h51, h50, h49, h48, h47, h46, h45, h44, h43, h42, h41, h40, h39, h38, h37, h36, h35, h34, h33, h32, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = sha256compress(left255, left254, left253, left252, left251, left250, left249, left248, left247, left246, left245, left244, left243, left242, left241, left240, left239, left238, left237, left236, left235, left234, left233, left232, left231, left230, left229, left228, left227, left226, left225, left224, left223, left222, left221, left220, left219, left218, left217, left216, left215, left214, left213, left212, left211, left210, left209, left208, left207, left206, left205, left204, left203, left202, left201, left200, left199, left198, left197, left196, left195, left194, left193, left192, left191, left190, left189, left188, left187, left186, left185, left184, left183, left182, left181, left180, left179, left178, left177, left176, left175, left174, left173, left172, left171, left170, left169, left168, left167, left166, left165, left164, left163, left162, left161, left160, left159, left158, left157, left156, left155, left154, left153, left152, left151, left150, left149, left148, left147, left146, left145, left144, left143, left142, left141, left140, left139, left138, left137, left136, left135, left134, left133, left132, left131, left130, left129, left128, left127, left126, left125, left124, left123, left122, left121, left120, left119, left118, left117, left116, left115, left114, left113, left112, left111, left110, left109, left108, left107, left106, left105, left104, left103, left102, left101, left100, left99, left98, left97, left96, left95, left94, left93, left92, left91, left90, left89, left88, left87, left86, left85, left84, left83, left82, left81, left80, left79, left78, left77, left76, left75, left74, left73, left72, left71, left70, left69, left68, left67, left66, left65, left64, left63, left62, left61, left60, left59, left58, left57, left56, left55, left54, left53, left52, left51, left50, left49, left48, left47, left46, left45, left44, left43, left42, left41, left40, left39, left38, left37, left36, left35, left34, left33, left32, left31, left30, left29, left28, left27, left26, left25, left24, left23, left22, left21, left20, left19, left18, left17, left16, left15, left14, left13, left12, left11, left10, left9, left8, left7, left6, left5, left4, left3, left2, left1, left0, r255, r254, r253, r252, r251, r250, r249, r248, r247, r246, r245, r244, r243, r242, r241, r240, r239, r238, r237, r236, r235, r234, r233, r232, r231, r230, r229, r228, r227, r226, r225, r224, r223, r222, r221, r220, r219, r218, r217, r216, r215, r214, r213, r212, r211, r210, r209, r208, r207, r206, r205, r204, r203, r202, r201, r200, r199, r198, r197, r196, r195, r194, r193, r192, r191, r190, r189, r188, r187, r186, r185, r184, r183, r182, r181, r180, r179, r178, r177, r176, r175, r174, r173, r172, r171, r170, r169, r168, r167, r166, r165, r164, r163, r162, r161, r160, r159, r158, r157, r156, r155, r154, r153, r152, r151, r150, r149, r148, r147, r146, r145, r144, r143, r142, r141, r140, r139, r138, r137, r136, r135, r134, r133, r132, r131, r130, r129, r128, r127, r126, r125, r124, r123, r122, r121, r120, r119, r118, r117, r116, r115, r114, r113, r112, r111, r110, r109, r108, r107, r106, r105, r104, r103, r102, r101, r100, r99, r98, r97, r96, r95, r94, r93, r92, r91, r90, r89, r88, r87, r86, r85, r84, r83, r82, r81, r80, r79, r78, r77, r76, r75, r74, r73, r72, r71, r70, r69, r68, r67, r66, r65, r64, r63, r62, r61, r60, r59, r58, r57, r56, r55, r54, r53, r52, r51, r50, r49, r48, r47, r46, r45, r44, r43, r42, r41, r40, r39, r38, r37, r36, r35, r34, r33, r32, r31, r30, r29, r28, r27, r26, r25, r24, r23, r22, r21, r20, r19, r18, r17, r16, r15, r14, r13, r12, r11, r10, r9, r8, r7, r6, r5, r4, r3, r2, r1, r0) - - h0 == root0 - h1 == root1 - h2 == root2 - h3 == root3 - h4 == root4 - h5 == root5 - h6 == root6 - h7 == root7 - h8 == root8 - h9 == root9 - h10 == root10 - h11 == root11 - h12 == root12 - h13 == root13 - h14 == root14 - h15 == root15 - h16 == root16 - h17 == root17 - h18 == root18 - h19 == root19 - h20 == root20 - h21 == root21 - h22 == root22 - h23 == root23 - h24 == root24 - h25 == root25 - h26 == root26 - h27 == root27 - h28 == root28 - h29 == root29 - h30 == root30 - h31 == root31 - h32 == root32 - h33 == root33 - h34 == root34 - h35 == root35 - h36 == root36 - h37 == root37 - h38 == root38 - h39 == root39 - h40 == root40 - h41 == root41 - h42 == root42 - h43 == root43 - h44 == root44 - h45 == root45 - h46 == root46 - h47 == root47 - h48 == root48 - h49 == root49 - h50 == root50 - h51 == root51 - h52 == root52 - h53 == root53 - h54 == root54 - h55 == root55 - h56 == root56 - h57 == root57 - h58 == root58 - h59 == root59 - h60 == root60 - h61 == root61 - h62 == root62 - h63 == root63 - h64 == root64 - h65 == root65 - h66 == root66 - h67 == root67 - h68 == root68 - h69 == root69 - h70 == root70 - h71 == root71 - h72 == root72 - h73 == root73 - h74 == root74 - h75 == root75 - h76 == root76 - h77 == root77 - h78 == root78 - h79 == root79 - h80 == root80 - h81 == root81 - h82 == root82 - h83 == root83 - h84 == root84 - h85 == root85 - h86 == root86 - h87 == root87 - h88 == root88 - h89 == root89 - h90 == root90 - h91 == root91 - h92 == root92 - h93 == root93 - h94 == root94 - h95 == root95 - h96 == root96 - h97 == root97 - h98 == root98 - h99 == root99 - h100 == root100 - h101 == root101 - h102 == root102 - h103 == root103 - h104 == root104 - h105 == root105 - h106 == root106 - h107 == root107 - h108 == root108 - h109 == root109 - h110 == root110 - h111 == root111 - h112 == root112 - h113 == root113 - h114 == root114 - h115 == root115 - h116 == root116 - h117 == root117 - h118 == root118 - h119 == root119 - h120 == root120 - h121 == root121 - h122 == root122 - h123 == root123 - h124 == root124 - h125 == root125 - h126 == root126 - h127 == root127 - h128 == root128 - h129 == root129 - h130 == root130 - h131 == root131 - h132 == root132 - h133 == root133 - h134 == root134 - h135 == root135 - h136 == root136 - h137 == root137 - h138 == root138 - h139 == root139 - h140 == root140 - h141 == root141 - h142 == root142 - h143 == root143 - h144 == root144 - h145 == root145 - h146 == root146 - h147 == root147 - h148 == root148 - h149 == root149 - h150 == root150 - h151 == root151 - h152 == root152 - h153 == root153 - h154 == root154 - h155 == root155 - h156 == root156 - h157 == root157 - h158 == root158 - h159 == root159 - h160 == root160 - h161 == root161 - h162 == root162 - h163 == root163 - h164 == root164 - h165 == root165 - h166 == root166 - h167 == root167 - h168 == root168 - h169 == root169 - h170 == root170 - h171 == root171 - h172 == root172 - h173 == root173 - h174 == root174 - h175 == root175 - h176 == root176 - h177 == root177 - h178 == root178 - h179 == root179 - h180 == root180 - h181 == root181 - h182 == root182 - h183 == root183 - h184 == root184 - h185 == root185 - h186 == root186 - h187 == root187 - h188 == root188 - h189 == root189 - h190 == root190 - h191 == root191 - h192 == root192 - h193 == root193 - h194 == root194 - h195 == root195 - h196 == root196 - h197 == root197 - h198 == root198 - h199 == root199 - h200 == root200 - h201 == root201 - h202 == root202 - h203 == root203 - h204 == root204 - h205 == root205 - h206 == root206 - h207 == root207 - h208 == root208 - h209 == root209 - h210 == root210 - h211 == root211 - h212 == root212 - h213 == root213 - h214 == root214 - h215 == root215 - h216 == root216 - h217 == root217 - h218 == root218 - h219 == root219 - h220 == root220 - h221 == root221 - h222 == root222 - h223 == root223 - h224 == root224 - h225 == root225 - h226 == root226 - h227 == root227 - h228 == root228 - h229 == root229 - h230 == root230 - h231 == root231 - h232 == root232 - h233 == root233 - h234 == root234 - h235 == root235 - h236 == root236 - h237 == root237 - h238 == root238 - h239 == root239 - h240 == root240 - h241 == root241 - h242 == root242 - h243 == root243 - h244 == root244 - h245 == root245 - h246 == root246 - h247 == root247 - h248 == root248 - h249 == root249 - h250 == root250 - h251 == root251 - h252 == root252 - h253 == root253 - h254 == root254 - h255 == root255 - - return 1 - diff --git a/zokrates_cli/examples/sha256/preimage.code b/zokrates_cli/examples/sha256/preimage.code index 621077a3..044eb76f 100644 --- a/zokrates_cli/examples/sha256/preimage.code +++ b/zokrates_cli/examples/sha256/preimage.code @@ -3,7 +3,7 @@ import "./sha256.code" as SHA256COMPRESS -def main(private i511, private i510, private i509, private i508, private i507, private i506, private i505, private i504, private i503, private i502, private i501, private i500, private i499, private i498, private i497, private i496, private i495, private i494, private i493, private i492, private i491, private i490, private i489, private i488, private i487, private i486, private i485, private i484, private i483, private i482, private i481, private i480, private i479, private i478, private i477, private i476, private i475, private i474, private i473, private i472, private i471, private i470, private i469, private i468, private i467, private i466, private i465, private i464, private i463, private i462, private i461, private i460, private i459, private i458, private i457, private i456, private i455, private i454, private i453, private i452, private i451, private i450, private i449, private i448, private i447, private i446, private i445, private i444, private i443, private i442, private i441, private i440, private i439, private i438, private i437, private i436, private i435, private i434, private i433, private i432, private i431, private i430, private i429, private i428, private i427, private i426, private i425, private i424, private i423, private i422, private i421, private i420, private i419, private i418, private i417, private i416, private i415, private i414, private i413, private i412, private i411, private i410, private i409, private i408, private i407, private i406, private i405, private i404, private i403, private i402, private i401, private i400, private i399, private i398, private i397, private i396, private i395, private i394, private i393, private i392, private i391, private i390, private i389, private i388, private i387, private i386, private i385, private i384, private i383, private i382, private i381, private i380, private i379, private i378, private i377, private i376, private i375, private i374, private i373, private i372, private i371, private i370, private i369, private i368, private i367, private i366, private i365, private i364, private i363, private i362, private i361, private i360, private i359, private i358, private i357, private i356, private i355, private i354, private i353, private i352, private i351, private i350, private i349, private i348, private i347, private i346, private i345, private i344, private i343, private i342, private i341, private i340, private i339, private i338, private i337, private i336, private i335, private i334, private i333, private i332, private i331, private i330, private i329, private i328, private i327, private i326, private i325, private i324, private i323, private i322, private i321, private i320, private i319, private i318, private i317, private i316, private i315, private i314, private i313, private i312, private i311, private i310, private i309, private i308, private i307, private i306, private i305, private i304, private i303, private i302, private i301, private i300, private i299, private i298, private i297, private i296, private i295, private i294, private i293, private i292, private i291, private i290, private i289, private i288, private i287, private i286, private i285, private i284, private i283, private i282, private i281, private i280, private i279, private i278, private i277, private i276, private i275, private i274, private i273, private i272, private i271, private i270, private i269, private i268, private i267, private i266, private i265, private i264, private i263, private i262, private i261, private i260, private i259, private i258, private i257, private i256, private i255, private i254, private i253, private i252, private i251, private i250, private i249, private i248, private i247, private i246, private i245, private i244, private i243, private i242, private i241, private i240, private i239, private i238, private i237, private i236, private i235, private i234, private i233, private i232, private i231, private i230, private i229, private i228, private i227, private i226, private i225, private i224, private i223, private i222, private i221, private i220, private i219, private i218, private i217, private i216, private i215, private i214, private i213, private i212, private i211, private i210, private i209, private i208, private i207, private i206, private i205, private i204, private i203, private i202, private i201, private i200, private i199, private i198, private i197, private i196, private i195, private i194, private i193, private i192, private i191, private i190, private i189, private i188, private i187, private i186, private i185, private i184, private i183, private i182, private i181, private i180, private i179, private i178, private i177, private i176, private i175, private i174, private i173, private i172, private i171, private i170, private i169, private i168, private i167, private i166, private i165, private i164, private i163, private i162, private i161, private i160, private i159, private i158, private i157, private i156, private i155, private i154, private i153, private i152, private i151, private i150, private i149, private i148, private i147, private i146, private i145, private i144, private i143, private i142, private i141, private i140, private i139, private i138, private i137, private i136, private i135, private i134, private i133, private i132, private i131, private i130, private i129, private i128, private i127, private i126, private i125, private i124, private i123, private i122, private i121, private i120, private i119, private i118, private i117, private i116, private i115, private i114, private i113, private i112, private i111, private i110, private i109, private i108, private i107, private i106, private i105, private i104, private i103, private i102, private i101, private i100, private i99, private i98, private i97, private i96, private i95, private i94, private i93, private i92, private i91, private i90, private i89, private i88, private i87, private i86, private i85, private i84, private i83, private i82, private i81, private i80, private i79, private i78, private i77, private i76, private i75, private i74, private i73, private i72, private i71, private i70, private i69, private i68, private i67, private i66, private i65, private i64, private i63, private i62, private i61, private i60, private i59, private i58, private i57, private i56, private i55, private i54, private i53, private i52, private i51, private i50, private i49, private i48, private i47, private i46, private i45, private i44, private i43, private i42, private i41, private i40, private i39, private i38, private i37, private i36, private i35, private i34, private i33, private i32, private i31, private i30, private i29, private i28, private i27, private i26, private i25, private i24, private i23, private i22, private i21, private i20, private i19, private i18, private i17, private i16, private i15, private i14, private i13, private i12, private i11, private i10, private i9, private i8, private i7, private i6, private i5, private i4, private i3, private i2, private i1, private i0): +def main(private field i511, private field i510, private field i509, private field i508, private field i507, private field i506, private field i505, private field i504, private field i503, private field i502, private field i501, private field i500, private field i499, private field i498, private field i497, private field i496, private field i495, private field i494, private field i493, private field i492, private field i491, private field i490, private field i489, private field i488, private field i487, private field i486, private field i485, private field i484, private field i483, private field i482, private field i481, private field i480, private field i479, private field i478, private field i477, private field i476, private field i475, private field i474, private field i473, private field i472, private field i471, private field i470, private field i469, private field i468, private field i467, private field i466, private field i465, private field i464, private field i463, private field i462, private field i461, private field i460, private field i459, private field i458, private field i457, private field i456, private field i455, private field i454, private field i453, private field i452, private field i451, private field i450, private field i449, private field i448, private field i447, private field i446, private field i445, private field i444, private field i443, private field i442, private field i441, private field i440, private field i439, private field i438, private field i437, private field i436, private field i435, private field i434, private field i433, private field i432, private field i431, private field i430, private field i429, private field i428, private field i427, private field i426, private field i425, private field i424, private field i423, private field i422, private field i421, private field i420, private field i419, private field i418, private field i417, private field i416, private field i415, private field i414, private field i413, private field i412, private field i411, private field i410, private field i409, private field i408, private field i407, private field i406, private field i405, private field i404, private field i403, private field i402, private field i401, private field i400, private field i399, private field i398, private field i397, private field i396, private field i395, private field i394, private field i393, private field i392, private field i391, private field i390, private field i389, private field i388, private field i387, private field i386, private field i385, private field i384, private field i383, private field i382, private field i381, private field i380, private field i379, private field i378, private field i377, private field i376, private field i375, private field i374, private field i373, private field i372, private field i371, private field i370, private field i369, private field i368, private field i367, private field i366, private field i365, private field i364, private field i363, private field i362, private field i361, private field i360, private field i359, private field i358, private field i357, private field i356, private field i355, private field i354, private field i353, private field i352, private field i351, private field i350, private field i349, private field i348, private field i347, private field i346, private field i345, private field i344, private field i343, private field i342, private field i341, private field i340, private field i339, private field i338, private field i337, private field i336, private field i335, private field i334, private field i333, private field i332, private field i331, private field i330, private field i329, private field i328, private field i327, private field i326, private field i325, private field i324, private field i323, private field i322, private field i321, private field i320, private field i319, private field i318, private field i317, private field i316, private field i315, private field i314, private field i313, private field i312, private field i311, private field i310, private field i309, private field i308, private field i307, private field i306, private field i305, private field i304, private field i303, private field i302, private field i301, private field i300, private field i299, private field i298, private field i297, private field i296, private field i295, private field i294, private field i293, private field i292, private field i291, private field i290, private field i289, private field i288, private field i287, private field i286, private field i285, private field i284, private field i283, private field i282, private field i281, private field i280, private field i279, private field i278, private field i277, private field i276, private field i275, private field i274, private field i273, private field i272, private field i271, private field i270, private field i269, private field i268, private field i267, private field i266, private field i265, private field i264, private field i263, private field i262, private field i261, private field i260, private field i259, private field i258, private field i257, private field i256, private field i255, private field i254, private field i253, private field i252, private field i251, private field i250, private field i249, private field i248, private field i247, private field i246, private field i245, private field i244, private field i243, private field i242, private field i241, private field i240, private field i239, private field i238, private field i237, private field i236, private field i235, private field i234, private field i233, private field i232, private field i231, private field i230, private field i229, private field i228, private field i227, private field i226, private field i225, private field i224, private field i223, private field i222, private field i221, private field i220, private field i219, private field i218, private field i217, private field i216, private field i215, private field i214, private field i213, private field i212, private field i211, private field i210, private field i209, private field i208, private field i207, private field i206, private field i205, private field i204, private field i203, private field i202, private field i201, private field i200, private field i199, private field i198, private field i197, private field i196, private field i195, private field i194, private field i193, private field i192, private field i191, private field i190, private field i189, private field i188, private field i187, private field i186, private field i185, private field i184, private field i183, private field i182, private field i181, private field i180, private field i179, private field i178, private field i177, private field i176, private field i175, private field i174, private field i173, private field i172, private field i171, private field i170, private field i169, private field i168, private field i167, private field i166, private field i165, private field i164, private field i163, private field i162, private field i161, private field i160, private field i159, private field i158, private field i157, private field i156, private field i155, private field i154, private field i153, private field i152, private field i151, private field i150, private field i149, private field i148, private field i147, private field i146, private field i145, private field i144, private field i143, private field i142, private field i141, private field i140, private field i139, private field i138, private field i137, private field i136, private field i135, private field i134, private field i133, private field i132, private field i131, private field i130, private field i129, private field i128, private field i127, private field i126, private field i125, private field i124, private field i123, private field i122, private field i121, private field i120, private field i119, private field i118, private field i117, private field i116, private field i115, private field i114, private field i113, private field i112, private field i111, private field i110, private field i109, private field i108, private field i107, private field i106, private field i105, private field i104, private field i103, private field i102, private field i101, private field i100, private field i99, private field i98, private field i97, private field i96, private field i95, private field i94, private field i93, private field i92, private field i91, private field i90, private field i89, private field i88, private field i87, private field i86, private field i85, private field i84, private field i83, private field i82, private field i81, private field i80, private field i79, private field i78, private field i77, private field i76, private field i75, private field i74, private field i73, private field i72, private field i71, private field i70, private field i69, private field i68, private field i67, private field i66, private field i65, private field i64, private field i63, private field i62, private field i61, private field i60, private field i59, private field i58, private field i57, private field i56, private field i55, private field i54, private field i53, private field i52, private field i51, private field i50, private field i49, private field i48, private field i47, private field i46, private field i45, private field i44, private field i43, private field i42, private field i41, private field i40, private field i39, private field i38, private field i37, private field i36, private field i35, private field i34, private field i33, private field i32, private field i31, private field i30, private field i29, private field i28, private field i27, private field i26, private field i25, private field i24, private field i23, private field i22, private field i21, private field i20, private field i19, private field i18, private field i17, private field i16, private field i15, private field i14, private field i13, private field i12, private field i11, private field i10, private field i9, private field i8, private field i7, private field i6, private field i5, private field i4, private field i3, private field i2, private field i1, private field i0) -> (field): h255, h254, h253, h252, h251, h250, h249, h248, h247, h246, h245, h244, h243, h242, h241, h240, h239, h238, h237, h236, h235, h234, h233, h232, h231, h230, h229, h228, h227, h226, h225, h224, h223, h222, h221, h220, h219, h218, h217, h216, h215, h214, h213, h212, h211, h210, h209, h208, h207, h206, h205, h204, h203, h202, h201, h200, h199, h198, h197, h196, h195, h194, h193, h192, h191, h190, h189, h188, h187, h186, h185, h184, h183, h182, h181, h180, h179, h178, h177, h176, h175, h174, h173, h172, h171, h170, h169, h168, h167, h166, h165, h164, h163, h162, h161, h160, h159, h158, h157, h156, h155, h154, h153, h152, h151, h150, h149, h148, h147, h146, h145, h144, h143, h142, h141, h140, h139, h138, h137, h136, h135, h134, h133, h132, h131, h130, h129, h128, h127, h126, h125, h124, h123, h122, h121, h120, h119, h118, h117, h116, h115, h114, h113, h112, h111, h110, h109, h108, h107, h106, h105, h104, h103, h102, h101, h100, h99, h98, h97, h96, h95, h94, h93, h92, h91, h90, h89, h88, h87, h86, h85, h84, h83, h82, h81, h80, h79, h78, h77, h76, h75, h74, h73, h72, h71, h70, h69, h68, h67, h66, h65, h64, h63, h62, h61, h60, h59, h58, h57, h56, h55, h54, h53, h52, h51, h50, h49, h48, h47, h46, h45, h44, h43, h42, h41, h40, h39, h38, h37, h36, h35, h34, h33, h32, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0 = SHA256COMPRESS(i511, i510, i509, i508, i507, i506, i505, i504, i503, i502, i501, i500, i499, i498, i497, i496, i495, i494, i493, i492, i491, i490, i489, i488, i487, i486, i485, i484, i483, i482, i481, i480, i479, i478, i477, i476, i475, i474, i473, i472, i471, i470, i469, i468, i467, i466, i465, i464, i463, i462, i461, i460, i459, i458, i457, i456, i455, i454, i453, i452, i451, i450, i449, i448, i447, i446, i445, i444, i443, i442, i441, i440, i439, i438, i437, i436, i435, i434, i433, i432, i431, i430, i429, i428, i427, i426, i425, i424, i423, i422, i421, i420, i419, i418, i417, i416, i415, i414, i413, i412, i411, i410, i409, i408, i407, i406, i405, i404, i403, i402, i401, i400, i399, i398, i397, i396, i395, i394, i393, i392, i391, i390, i389, i388, i387, i386, i385, i384, i383, i382, i381, i380, i379, i378, i377, i376, i375, i374, i373, i372, i371, i370, i369, i368, i367, i366, i365, i364, i363, i362, i361, i360, i359, i358, i357, i356, i355, i354, i353, i352, i351, i350, i349, i348, i347, i346, i345, i344, i343, i342, i341, i340, i339, i338, i337, i336, i335, i334, i333, i332, i331, i330, i329, i328, i327, i326, i325, i324, i323, i322, i321, i320, i319, i318, i317, i316, i315, i314, i313, i312, i311, i310, i309, i308, i307, i306, i305, i304, i303, i302, i301, i300, i299, i298, i297, i296, i295, i294, i293, i292, i291, i290, i289, i288, i287, i286, i285, i284, i283, i282, i281, i280, i279, i278, i277, i276, i275, i274, i273, i272, i271, i270, i269, i268, i267, i266, i265, i264, i263, i262, i261, i260, i259, i258, i257, i256, i255, i254, i253, i252, i251, i250, i249, i248, i247, i246, i245, i244, i243, i242, i241, i240, i239, i238, i237, i236, i235, i234, i233, i232, i231, i230, i229, i228, i227, i226, i225, i224, i223, i222, i221, i220, i219, i218, i217, i216, i215, i214, i213, i212, i211, i210, i209, i208, i207, i206, i205, i204, i203, i202, i201, i200, i199, i198, i197, i196, i195, i194, i193, i192, i191, i190, i189, i188, i187, i186, i185, i184, i183, i182, i181, i180, i179, i178, i177, i176, i175, i174, i173, i172, i171, i170, i169, i168, i167, i166, i165, i164, i163, i162, i161, i160, i159, i158, i157, i156, i155, i154, i153, i152, i151, i150, i149, i148, i147, i146, i145, i144, i143, i142, i141, i140, i139, i138, i137, i136, i135, i134, i133, i132, i131, i130, i129, i128, i127, i126, i125, i124, i123, i122, i121, i120, i119, i118, i117, i116, i115, i114, i113, i112, i111, i110, i109, i108, i107, i106, i105, i104, i103, i102, i101, i100, i99, i98, i97, i96, i95, i94, i93, i92, i91, i90, i89, i88, i87, i86, i85, i84, i83, i82, i81, i80, i79, i78, i77, i76, i75, i74, i73, i72, i71, i70, i69, i68, i67, i66, i65, i64, i63, i62, i61, i60, i59, i58, i57, i56, i55, i54, i53, i52, i51, i50, i49, i48, i47, i46, i45, i44, i43, i42, i41, i40, i39, i38, i37, i36, i35, i34, i33, i32, i31, i30, i29, i28, i27, i26, i25, i24, i23, i22, i21, i20, i19, i18, i17, i16, i15, i14, i13, i12, i11, i10, i9, i8, i7, i6, i5, i4, i3, i2, i1, i0) diff --git a/zokrates_cli/examples/sha256/sha256.code b/zokrates_cli/examples/sha256/sha256.code index 4b58a69f..8aa7ea8e 100644 --- a/zokrates_cli/examples/sha256/sha256.code +++ b/zokrates_cli/examples/sha256/sha256.code @@ -3,24 +3,24 @@ import "./utils/32/add.code" as ADD import "./utils/32/compression_round.code" as COMPROUND import "./utils/32/extend.code" as EXTEND -def H0(): +def H0() -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return 0,1,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1 -def H1(): +def H1() -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return 1,0,1,1,1,0,1,1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1 -def H2(): +def H2() -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return 0,0,1,1,1,1,0,0,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,0,1,1,1,0,0,1,0 -def H3(): +def H3() -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return 1,0,1,0,0,1,0,1,0,1,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,0,1,1,1,0,1,0 -def H4(): +def H4() -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return 0,1,0,1,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,0,0,1,1,1,1,1,1,1 -def H5(): +def H5() -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return 1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,0,0 -def H6(): +def H6() -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return 0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1 -def H7(): +def H7() -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return 0,1,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,0,1,0,0,0,1,1,0,0,1 -def main(private i511, private i510, private i509, private i508, private i507, private i506, private i505, private i504, private i503, private i502, private i501, private i500, private i499, private i498, private i497, private i496, private i495, private i494, private i493, private i492, private i491, private i490, private i489, private i488, private i487, private i486, private i485, private i484, private i483, private i482, private i481, private i480, private i479, private i478, private i477, private i476, private i475, private i474, private i473, private i472, private i471, private i470, private i469, private i468, private i467, private i466, private i465, private i464, private i463, private i462, private i461, private i460, private i459, private i458, private i457, private i456, private i455, private i454, private i453, private i452, private i451, private i450, private i449, private i448, private i447, private i446, private i445, private i444, private i443, private i442, private i441, private i440, private i439, private i438, private i437, private i436, private i435, private i434, private i433, private i432, private i431, private i430, private i429, private i428, private i427, private i426, private i425, private i424, private i423, private i422, private i421, private i420, private i419, private i418, private i417, private i416, private i415, private i414, private i413, private i412, private i411, private i410, private i409, private i408, private i407, private i406, private i405, private i404, private i403, private i402, private i401, private i400, private i399, private i398, private i397, private i396, private i395, private i394, private i393, private i392, private i391, private i390, private i389, private i388, private i387, private i386, private i385, private i384, private i383, private i382, private i381, private i380, private i379, private i378, private i377, private i376, private i375, private i374, private i373, private i372, private i371, private i370, private i369, private i368, private i367, private i366, private i365, private i364, private i363, private i362, private i361, private i360, private i359, private i358, private i357, private i356, private i355, private i354, private i353, private i352, private i351, private i350, private i349, private i348, private i347, private i346, private i345, private i344, private i343, private i342, private i341, private i340, private i339, private i338, private i337, private i336, private i335, private i334, private i333, private i332, private i331, private i330, private i329, private i328, private i327, private i326, private i325, private i324, private i323, private i322, private i321, private i320, private i319, private i318, private i317, private i316, private i315, private i314, private i313, private i312, private i311, private i310, private i309, private i308, private i307, private i306, private i305, private i304, private i303, private i302, private i301, private i300, private i299, private i298, private i297, private i296, private i295, private i294, private i293, private i292, private i291, private i290, private i289, private i288, private i287, private i286, private i285, private i284, private i283, private i282, private i281, private i280, private i279, private i278, private i277, private i276, private i275, private i274, private i273, private i272, private i271, private i270, private i269, private i268, private i267, private i266, private i265, private i264, private i263, private i262, private i261, private i260, private i259, private i258, private i257, private i256, private i255, private i254, private i253, private i252, private i251, private i250, private i249, private i248, private i247, private i246, private i245, private i244, private i243, private i242, private i241, private i240, private i239, private i238, private i237, private i236, private i235, private i234, private i233, private i232, private i231, private i230, private i229, private i228, private i227, private i226, private i225, private i224, private i223, private i222, private i221, private i220, private i219, private i218, private i217, private i216, private i215, private i214, private i213, private i212, private i211, private i210, private i209, private i208, private i207, private i206, private i205, private i204, private i203, private i202, private i201, private i200, private i199, private i198, private i197, private i196, private i195, private i194, private i193, private i192, private i191, private i190, private i189, private i188, private i187, private i186, private i185, private i184, private i183, private i182, private i181, private i180, private i179, private i178, private i177, private i176, private i175, private i174, private i173, private i172, private i171, private i170, private i169, private i168, private i167, private i166, private i165, private i164, private i163, private i162, private i161, private i160, private i159, private i158, private i157, private i156, private i155, private i154, private i153, private i152, private i151, private i150, private i149, private i148, private i147, private i146, private i145, private i144, private i143, private i142, private i141, private i140, private i139, private i138, private i137, private i136, private i135, private i134, private i133, private i132, private i131, private i130, private i129, private i128, private i127, private i126, private i125, private i124, private i123, private i122, private i121, private i120, private i119, private i118, private i117, private i116, private i115, private i114, private i113, private i112, private i111, private i110, private i109, private i108, private i107, private i106, private i105, private i104, private i103, private i102, private i101, private i100, private i99, private i98, private i97, private i96, private i95, private i94, private i93, private i92, private i91, private i90, private i89, private i88, private i87, private i86, private i85, private i84, private i83, private i82, private i81, private i80, private i79, private i78, private i77, private i76, private i75, private i74, private i73, private i72, private i71, private i70, private i69, private i68, private i67, private i66, private i65, private i64, private i63, private i62, private i61, private i60, private i59, private i58, private i57, private i56, private i55, private i54, private i53, private i52, private i51, private i50, private i49, private i48, private i47, private i46, private i45, private i44, private i43, private i42, private i41, private i40, private i39, private i38, private i37, private i36, private i35, private i34, private i33, private i32, private i31, private i30, private i29, private i28, private i27, private i26, private i25, private i24, private i23, private i22, private i21, private i20, private i19, private i18, private i17, private i16, private i15, private i14, private i13, private i12, private i11, private i10, private i9, private i8, private i7, private i6, private i5, private i4, private i3, private i2, private i1, private i0): +def main(private field i511, private field i510, private field i509, private field i508, private field i507, private field i506, private field i505, private field i504, private field i503, private field i502, private field i501, private field i500, private field i499, private field i498, private field i497, private field i496, private field i495, private field i494, private field i493, private field i492, private field i491, private field i490, private field i489, private field i488, private field i487, private field i486, private field i485, private field i484, private field i483, private field i482, private field i481, private field i480, private field i479, private field i478, private field i477, private field i476, private field i475, private field i474, private field i473, private field i472, private field i471, private field i470, private field i469, private field i468, private field i467, private field i466, private field i465, private field i464, private field i463, private field i462, private field i461, private field i460, private field i459, private field i458, private field i457, private field i456, private field i455, private field i454, private field i453, private field i452, private field i451, private field i450, private field i449, private field i448, private field i447, private field i446, private field i445, private field i444, private field i443, private field i442, private field i441, private field i440, private field i439, private field i438, private field i437, private field i436, private field i435, private field i434, private field i433, private field i432, private field i431, private field i430, private field i429, private field i428, private field i427, private field i426, private field i425, private field i424, private field i423, private field i422, private field i421, private field i420, private field i419, private field i418, private field i417, private field i416, private field i415, private field i414, private field i413, private field i412, private field i411, private field i410, private field i409, private field i408, private field i407, private field i406, private field i405, private field i404, private field i403, private field i402, private field i401, private field i400, private field i399, private field i398, private field i397, private field i396, private field i395, private field i394, private field i393, private field i392, private field i391, private field i390, private field i389, private field i388, private field i387, private field i386, private field i385, private field i384, private field i383, private field i382, private field i381, private field i380, private field i379, private field i378, private field i377, private field i376, private field i375, private field i374, private field i373, private field i372, private field i371, private field i370, private field i369, private field i368, private field i367, private field i366, private field i365, private field i364, private field i363, private field i362, private field i361, private field i360, private field i359, private field i358, private field i357, private field i356, private field i355, private field i354, private field i353, private field i352, private field i351, private field i350, private field i349, private field i348, private field i347, private field i346, private field i345, private field i344, private field i343, private field i342, private field i341, private field i340, private field i339, private field i338, private field i337, private field i336, private field i335, private field i334, private field i333, private field i332, private field i331, private field i330, private field i329, private field i328, private field i327, private field i326, private field i325, private field i324, private field i323, private field i322, private field i321, private field i320, private field i319, private field i318, private field i317, private field i316, private field i315, private field i314, private field i313, private field i312, private field i311, private field i310, private field i309, private field i308, private field i307, private field i306, private field i305, private field i304, private field i303, private field i302, private field i301, private field i300, private field i299, private field i298, private field i297, private field i296, private field i295, private field i294, private field i293, private field i292, private field i291, private field i290, private field i289, private field i288, private field i287, private field i286, private field i285, private field i284, private field i283, private field i282, private field i281, private field i280, private field i279, private field i278, private field i277, private field i276, private field i275, private field i274, private field i273, private field i272, private field i271, private field i270, private field i269, private field i268, private field i267, private field i266, private field i265, private field i264, private field i263, private field i262, private field i261, private field i260, private field i259, private field i258, private field i257, private field i256, private field i255, private field i254, private field i253, private field i252, private field i251, private field i250, private field i249, private field i248, private field i247, private field i246, private field i245, private field i244, private field i243, private field i242, private field i241, private field i240, private field i239, private field i238, private field i237, private field i236, private field i235, private field i234, private field i233, private field i232, private field i231, private field i230, private field i229, private field i228, private field i227, private field i226, private field i225, private field i224, private field i223, private field i222, private field i221, private field i220, private field i219, private field i218, private field i217, private field i216, private field i215, private field i214, private field i213, private field i212, private field i211, private field i210, private field i209, private field i208, private field i207, private field i206, private field i205, private field i204, private field i203, private field i202, private field i201, private field i200, private field i199, private field i198, private field i197, private field i196, private field i195, private field i194, private field i193, private field i192, private field i191, private field i190, private field i189, private field i188, private field i187, private field i186, private field i185, private field i184, private field i183, private field i182, private field i181, private field i180, private field i179, private field i178, private field i177, private field i176, private field i175, private field i174, private field i173, private field i172, private field i171, private field i170, private field i169, private field i168, private field i167, private field i166, private field i165, private field i164, private field i163, private field i162, private field i161, private field i160, private field i159, private field i158, private field i157, private field i156, private field i155, private field i154, private field i153, private field i152, private field i151, private field i150, private field i149, private field i148, private field i147, private field i146, private field i145, private field i144, private field i143, private field i142, private field i141, private field i140, private field i139, private field i138, private field i137, private field i136, private field i135, private field i134, private field i133, private field i132, private field i131, private field i130, private field i129, private field i128, private field i127, private field i126, private field i125, private field i124, private field i123, private field i122, private field i121, private field i120, private field i119, private field i118, private field i117, private field i116, private field i115, private field i114, private field i113, private field i112, private field i111, private field i110, private field i109, private field i108, private field i107, private field i106, private field i105, private field i104, private field i103, private field i102, private field i101, private field i100, private field i99, private field i98, private field i97, private field i96, private field i95, private field i94, private field i93, private field i92, private field i91, private field i90, private field i89, private field i88, private field i87, private field i86, private field i85, private field i84, private field i83, private field i82, private field i81, private field i80, private field i79, private field i78, private field i77, private field i76, private field i75, private field i74, private field i73, private field i72, private field i71, private field i70, private field i69, private field i68, private field i67, private field i66, private field i65, private field i64, private field i63, private field i62, private field i61, private field i60, private field i59, private field i58, private field i57, private field i56, private field i55, private field i54, private field i53, private field i52, private field i51, private field i50, private field i49, private field i48, private field i47, private field i46, private field i45, private field i44, private field i43, private field i42, private field i41, private field i40, private field i39, private field i38, private field i37, private field i36, private field i35, private field i34, private field i33, private field i32, private field i31, private field i30, private field i29, private field i28, private field i27, private field i26, private field i25, private field i24, private field i23, private field i22, private field i21, private field i20, private field i19, private field i18, private field i17, private field i16, private field i15, private field i14, private field i13, private field i12, private field i11, private field i10, private field i9, private field i8, private field i7, private field i6, private field i5, private field i4, private field i3, private field i2, private field i1, private field i0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): // check all inputs are bits diff --git a/zokrates_cli/examples/sha256/testest b/zokrates_cli/examples/sha256/testest deleted file mode 100644 index 237db1ee..00000000 --- a/zokrates_cli/examples/sha256/testest +++ /dev/null @@ -1,71 +0,0 @@ -def NOT(x): - return 1 - x - -def AND(x, y): - return x * y - -def OR(x, y): - return NOT(AND(NOT(x), NOT(y))) - -def XOR(x, y): - return AND(OR(x, y), NOT(AND(x,y))) - -def XOR(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0): - return XOR(b31, c31), XOR(b30, c30), XOR(b29, c29), XOR(b28, c28), XOR(b27, c27), XOR(b26, c26), XOR(b25, c25), XOR(b24, c24), XOR(b23, c23), XOR(b22, c22), XOR(b21, c21), XOR(b20, c20), XOR(b19, c19), XOR(b18, c18), XOR(b17, c17), XOR(b16, c16), XOR(b15, c15), XOR(b14, c14), XOR(b13, c13), XOR(b12, c12), XOR(b11, c11), XOR(b10, c10), XOR(b9, c9), XOR(b8, c8), XOR(b7, c7), XOR(b6, c6), XOR(b5, c5), XOR(b4, c4), XOR(b3, c3), XOR(b2, c2), XOR(b1, c1), XOR(b0, c0) - -def RIGHTROTATE10(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): - return b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10 - -def RIGHTROTATE17(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): - return b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17 - -def RIGHTROTATE19(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): - return b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19 - -def AR17XORAR19XORAR10(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0): - u31, u30, u29, u28, u27, u26, u25, u24, u23, u22, u21, u20, u19, u18, u17, u16, u15, u14, u13, u12, u11, u10, u9, u8, u7, u6, u5, u4, u3, u2, u1, u0 = RIGHTROTATE17(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) - v31, v30, v29, v28, v27, v26, v25, v24, v23, v22, v21, v20, v19, v18, v17, v16, v15, v14, v13, v12, v11, v10, v9, v8, v7, v6, v5, v4, v3, v2, v1, v0 = RIGHTROTATE19(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) - w31, w30, w29, w28, w27, w26, w25, w24, w23, w22, w21, w20, w19, w18, w17, w16, w15, w14, w13, w12, w11, w10, w9, w8, w7, w6, w5, w4, w3, w2, w1, w0 = RIGHTROTATE10(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) - x31, x30, x29, x28, x27, x26, x25, x24, x23, x22, x21, x20, x19, x18, x17, x16, x15, x14, x13, x12, x11, x10, x9, x8, x7, x6, x5, x4, x3, x2, x1, x0 = XOR(u31, u30, u29, u28, u27, u26, u25, u24, u23, u22, u21, u20, u19, u18, u17, u16, u15, u14, u13, u12, u11, u10, u9, u8, u7, u6, u5, u4, u3, u2, u1, u0, v31, v30, v29, v28, v27, v26, v25, v24, v23, v22, v21, v20, v19, v18, v17, v16, v15, v14, v13, v12, v11, v10, v9, v8, v7, v6, v5, v4, v3, v2, v1, v0) - z31, z30, z29, z28, z27, z26, z25, z24, z23, z22, z21, z20, z19, z18, z17, z16, z15, z14, z13, z12, z11, z10, z9, z8, z7, z6, z5, z4, z3, z2, z1, z0 = XOR(w31, w30, w29, w28, w27, w26, w25, w24, w23, w22, w21, w20, w19, w18, w17, w16, w15, w14, w13, w12, w11, w10, w9, w8, w7, w6, w5, w4, w3, w2, w1, w0, x31, x30, x29, x28, x27, x26, x25, x24, x23, x22, x21, x20, x19, x18, x17, x16, x15, x14, x13, x12, x11, x10, x9, x8, x7, x6, x5, x4, x3, x2, x1, x0) - return z31, z30, z29, z28, z27, z26, z25, z24, z23, z22, z21, z20, z19, z18, z17, z16, z15, z14, z13, z12, z11, z10, z9, z8, z7, z6, z5, z4, z3, z2, z1, z0 - -def AR17XORAR19XORAR10test(): - b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0 = AR17XORAR19XORAR10(0,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1) - b31 == 0 - b30 == 1 - b29 == 0 - b28 == 0 - b27 == 1 - b26 == 1 - b25 == 1 - b24 == 0 - b23 == 0 - b22 == 0 - b21 == 1 - b20 == 0 - b19 == 1 - b18 == 1 - b17 == 1 - b16 == 0 - b15 == 0 - b14 == 0 - b13 == 0 - b12 == 1 - b11 == 0 - b10 == 1 - b9 == 0 - b8 == 1 - b7 == 0 - b6 == 0 - b5 == 1 - b4 == 0 - b3 == 1 - b2 == 0 - b1 == 0 - b0 == 1 - return 1 - -def main(): - k = AR17XORAR19XORAR10test() - return \ No newline at end of file diff --git a/zokrates_cli/examples/sha256/utils/32/add.code b/zokrates_cli/examples/sha256/utils/32/add.code index 05f3bea3..0fd1a1ac 100644 --- a/zokrates_cli/examples/sha256/utils/32/add.code +++ b/zokrates_cli/examples/sha256/utils/32/add.code @@ -2,7 +2,7 @@ import "./../../binary/fulladd.code" as FULLADD -def main(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0): +def main(field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0, field c31, field c30, field c29, field c28, field c27, field c26, field c25, field c24, field c23, field c22, field c21, field c20, field c19, field c18, field c17, field c16, field c15, field c14, field c13, field c12, field c11, field c10, field c9, field c8, field c7, field c6, field c5, field c4, field c3, field c2, field c1, field c0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): d0, car1 = FULLADD(b0, c0, 0) d1, car2 = FULLADD(b1, c1, car1) d2, car3 = FULLADD(b2, c2, car2) diff --git a/zokrates_cli/examples/sha256/utils/32/ar17xar19xars10.code b/zokrates_cli/examples/sha256/utils/32/ar17xar19xars10.code index f1795281..c4ea13bc 100644 --- a/zokrates_cli/examples/sha256/utils/32/ar17xar19xars10.code +++ b/zokrates_cli/examples/sha256/utils/32/ar17xar19xars10.code @@ -2,16 +2,16 @@ import "./../../bitwise/32/xor.code" as XOR -def RR17(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): +def RR17(field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17 -def RR19(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): +def RR19(field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19 -def RS10(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): +def RS10(field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10 -def main(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0): +def main(field a31, field a30, field a29, field a28, field a27, field a26, field a25, field a24, field a23, field a22, field a21, field a20, field a19, field a18, field a17, field a16, field a15, field a14, field a13, field a12, field a11, field a10, field a9, field a8, field a7, field a6, field a5, field a4, field a3, field a2, field a1, field a0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): u31, u30, u29, u28, u27, u26, u25, u24, u23, u22, u21, u20, u19, u18, u17, u16, u15, u14, u13, u12, u11, u10, u9, u8, u7, u6, u5, u4, u3, u2, u1, u0 = RR17(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) v31, v30, v29, v28, v27, v26, v25, v24, v23, v22, v21, v20, v19, v18, v17, v16, v15, v14, v13, v12, v11, v10, v9, v8, v7, v6, v5, v4, v3, v2, v1, v0 = RR19(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) w31, w30, w29, w28, w27, w26, w25, w24, w23, w22, w21, w20, w19, w18, w17, w16, w15, w14, w13, w12, w11, w10, w9, w8, w7, w6, w5, w4, w3, w2, w1, w0 = RS10(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) diff --git a/zokrates_cli/examples/sha256/utils/32/ar2xar13xar22.code b/zokrates_cli/examples/sha256/utils/32/ar2xar13xar22.code index e180a6cf..f87d8375 100644 --- a/zokrates_cli/examples/sha256/utils/32/ar2xar13xar22.code +++ b/zokrates_cli/examples/sha256/utils/32/ar2xar13xar22.code @@ -2,16 +2,16 @@ import "./../../bitwise/32/xor.code" as XOR -def RR2(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): +def RR2(field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2 -def RR13(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): +def RR13(field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13 -def RR22(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): +def RR22(field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22 -def main(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0): +def main(field a31, field a30, field a29, field a28, field a27, field a26, field a25, field a24, field a23, field a22, field a21, field a20, field a19, field a18, field a17, field a16, field a15, field a14, field a13, field a12, field a11, field a10, field a9, field a8, field a7, field a6, field a5, field a4, field a3, field a2, field a1, field a0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): u31, u30, u29, u28, u27, u26, u25, u24, u23, u22, u21, u20, u19, u18, u17, u16, u15, u14, u13, u12, u11, u10, u9, u8, u7, u6, u5, u4, u3, u2, u1, u0 = RR2(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) v31, v30, v29, v28, v27, v26, v25, v24, v23, v22, v21, v20, v19, v18, v17, v16, v15, v14, v13, v12, v11, v10, v9, v8, v7, v6, v5, v4, v3, v2, v1, v0 = RR13(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) w31, w30, w29, w28, w27, w26, w25, w24, w23, w22, w21, w20, w19, w18, w17, w16, w15, w14, w13, w12, w11, w10, w9, w8, w7, w6, w5, w4, w3, w2, w1, w0 = RR22(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) diff --git a/zokrates_cli/examples/sha256/utils/32/ar6xar11xar25.code b/zokrates_cli/examples/sha256/utils/32/ar6xar11xar25.code index 3e6f01c1..179a6e61 100644 --- a/zokrates_cli/examples/sha256/utils/32/ar6xar11xar25.code +++ b/zokrates_cli/examples/sha256/utils/32/ar6xar11xar25.code @@ -2,16 +2,16 @@ import "./../../bitwise/32/xor.code" as XOR -def RR6(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): +def RR6(field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6 -def RR11(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): +def RR11(field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11 -def RR25(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): +def RR25(field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25 -def main(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0): +def main(field a31, field a30, field a29, field a28, field a27, field a26, field a25, field a24, field a23, field a22, field a21, field a20, field a19, field a18, field a17, field a16, field a15, field a14, field a13, field a12, field a11, field a10, field a9, field a8, field a7, field a6, field a5, field a4, field a3, field a2, field a1, field a0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): u31, u30, u29, u28, u27, u26, u25, u24, u23, u22, u21, u20, u19, u18, u17, u16, u15, u14, u13, u12, u11, u10, u9, u8, u7, u6, u5, u4, u3, u2, u1, u0 = RR6(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) v31, v30, v29, v28, v27, v26, v25, v24, v23, v22, v21, v20, v19, v18, v17, v16, v15, v14, v13, v12, v11, v10, v9, v8, v7, v6, v5, v4, v3, v2, v1, v0 = RR11(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) w31, w30, w29, w28, w27, w26, w25, w24, w23, w22, w21, w20, w19, w18, w17, w16, w15, w14, w13, w12, w11, w10, w9, w8, w7, w6, w5, w4, w3, w2, w1, w0 = RR25(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) diff --git a/zokrates_cli/examples/sha256/utils/32/ar7xar18xars3.code b/zokrates_cli/examples/sha256/utils/32/ar7xar18xars3.code index ef65ca0a..76f0b1c3 100644 --- a/zokrates_cli/examples/sha256/utils/32/ar7xar18xars3.code +++ b/zokrates_cli/examples/sha256/utils/32/ar7xar18xars3.code @@ -2,16 +2,16 @@ import "./../../bitwise/32/xor.code" as XOR -def RR7(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): +def RR7(field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return b6, b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7 -def RR18(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): +def RR18(field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18 -def RS3(b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0): +def RS3(field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): return 0, 0, 0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3 -def main(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0): +def main(field a31, field a30, field a29, field a28, field a27, field a26, field a25, field a24, field a23, field a22, field a21, field a20, field a19, field a18, field a17, field a16, field a15, field a14, field a13, field a12, field a11, field a10, field a9, field a8, field a7, field a6, field a5, field a4, field a3, field a2, field a1, field a0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): u31, u30, u29, u28, u27, u26, u25, u24, u23, u22, u21, u20, u19, u18, u17, u16, u15, u14, u13, u12, u11, u10, u9, u8, u7, u6, u5, u4, u3, u2, u1, u0 = RR7(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) v31, v30, v29, v28, v27, v26, v25, v24, v23, v22, v21, v20, v19, v18, v17, v16, v15, v14, v13, v12, v11, v10, v9, v8, v7, v6, v5, v4, v3, v2, v1, v0 = RR18(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) w31, w30, w29, w28, w27, w26, w25, w24, w23, w22, w21, w20, w19, w18, w17, w16, w15, w14, w13, w12, w11, w10, w9, w8, w7, w6, w5, w4, w3, w2, w1, w0 = RS3(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0) diff --git a/zokrates_cli/examples/sha256/utils/32/compression_round.code b/zokrates_cli/examples/sha256/utils/32/compression_round.code index b470e9b7..3f3cdd31 100644 --- a/zokrates_cli/examples/sha256/utils/32/compression_round.code +++ b/zokrates_cli/examples/sha256/utils/32/compression_round.code @@ -6,14 +6,14 @@ import "./../../bitwise/32/andxornotand.code" as ANDXORNOTAND import "./../../bitwise/32/andxorandxorand.code" as ANDXORANDXORAND import "./add.code" as ADD2 -def ADD5(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0): +def ADD5(field a31, field a30, field a29, field a28, field a27, field a26, field a25, field a24, field a23, field a22, field a21, field a20, field a19, field a18, field a17, field a16, field a15, field a14, field a13, field a12, field a11, field a10, field a9, field a8, field a7, field a6, field a5, field a4, field a3, field a2, field a1, field a0, field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0, field c31, field c30, field c29, field c28, field c27, field c26, field c25, field c24, field c23, field c22, field c21, field c20, field c19, field c18, field c17, field c16, field c15, field c14, field c13, field c12, field c11, field c10, field c9, field c8, field c7, field c6, field c5, field c4, field c3, field c2, field c1, field c0, field d31, field d30, field d29, field d28, field d27, field d26, field d25, field d24, field d23, field d22, field d21, field d20, field d19, field d18, field d17, field d16, field d15, field d14, field d13, field d12, field d11, field d10, field d9, field d8, field d7, field d6, field d5, field d4, field d3, field d2, field d1, field d0, field e31, field e30, field e29, field e28, field e27, field e26, field e25, field e24, field e23, field e22, field e21, field e20, field e19, field e18, field e17, field e16, field e15, field e14, field e13, field e12, field e11, field e10, field e9, field e8, field e7, field e6, field e5, field e4, field e3, field e2, field e1, field e0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): ab31, ab30, ab29, ab28, ab27, ab26, ab25, ab24, ab23, ab22, ab21, ab20, ab19, ab18, ab17, ab16, ab15, ab14, ab13, ab12, ab11, ab10, ab9, ab8, ab7, ab6, ab5, ab4, ab3, ab2, ab1, ab0 = ADD2(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0) cd31, cd30, cd29, cd28, cd27, cd26, cd25, cd24, cd23, cd22, cd21, cd20, cd19, cd18, cd17, cd16, cd15, cd14, cd13, cd12, cd11, cd10, cd9, cd8, cd7, cd6, cd5, cd4, cd3, cd2, cd1, cd0 = ADD2(c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0) abcd31, abcd30, abcd29, abcd28, abcd27, abcd26, abcd25, abcd24, abcd23, abcd22, abcd21, abcd20, abcd19, abcd18, abcd17, abcd16, abcd15, abcd14, abcd13, abcd12, abcd11, abcd10, abcd9, abcd8, abcd7, abcd6, abcd5, abcd4, abcd3, abcd2, abcd1, abcd0 = ADD2(ab31, ab30, ab29, ab28, ab27, ab26, ab25, ab24, ab23, ab22, ab21, ab20, ab19, ab18, ab17, ab16, ab15, ab14, ab13, ab12, ab11, ab10, ab9, ab8, ab7, ab6, ab5, ab4, ab3, ab2, ab1, ab0, cd31, cd30, cd29, cd28, cd27, cd26, cd25, cd24, cd23, cd22, cd21, cd20, cd19, cd18, cd17, cd16, cd15, cd14, cd13, cd12, cd11, cd10, cd9, cd8, cd7, cd6, cd5, cd4, cd3, cd2, cd1, cd0) abcde31, abcde30, abcde29, abcde28, abcde27, abcde26, abcde25, abcde24, abcde23, abcde22, abcde21, abcde20, abcde19, abcde18, abcde17, abcde16, abcde15, abcde14, abcde13, abcde12, abcde11, abcde10, abcde9, abcde8, abcde7, abcde6, abcde5, abcde4, abcde3, abcde2, abcde1, abcde0 = ADD2(abcd31, abcd30, abcd29, abcd28, abcd27, abcd26, abcd25, abcd24, abcd23, abcd22, abcd21, abcd20, abcd19, abcd18, abcd17, abcd16, abcd15, abcd14, abcd13, abcd12, abcd11, abcd10, abcd9, abcd8, abcd7, abcd6, abcd5, abcd4, abcd3, abcd2, abcd1, abcd0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0) return abcde31, abcde30, abcde29, abcde28, abcde27, abcde26, abcde25, abcde24, abcde23, abcde22, abcde21, abcde20, abcde19, abcde18, abcde17, abcde16, abcde15, abcde14, abcde13, abcde12, abcde11, abcde10, abcde9, abcde8, abcde7, abcde6, abcde5, abcde4, abcde3, abcde2, abcde1, abcde0 -def main(k31, k30, k29, k28, k27, k26, k25, k24, k23, k22, k21, k20, k19, k18, k17, k16, k15, k14, k13, k12, k11, k10, k9, k8, k7, k6, k5, k4, k3, k2, k1, k0, w31, w30, w29, w28, w27, w26, w25, w24, w23, w22, w21, w20, w19, w18, w17, w16, w15, w14, w13, w12, w11, w10, w9, w8, w7, w6, w5, w4, w3, w2, w1, w0, a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0, f31, f30, f29, f28, f27, f26, f25, f24, f23, f22, f21, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0, g31, g30, g29, g28, g27, g26, g25, g24, g23, g22, g21, g20, g19, g18, g17, g16, g15, g14, g13, g12, g11, g10, g9, g8, g7, g6, g5, g4, g3, g2, g1, g0, h31, h30, h29, h28, h27, h26, h25, h24, h23, h22, h21, h20, h19, h18, h17, h16, h15, h14, h13, h12, h11, h10, h9, h8, h7, h6, h5, h4, h3, h2, h1, h0): +def main(field k31, field k30, field k29, field k28, field k27, field k26, field k25, field k24, field k23, field k22, field k21, field k20, field k19, field k18, field k17, field k16, field k15, field k14, field k13, field k12, field k11, field k10, field k9, field k8, field k7, field k6, field k5, field k4, field k3, field k2, field k1, field k0, field w31, field w30, field w29, field w28, field w27, field w26, field w25, field w24, field w23, field w22, field w21, field w20, field w19, field w18, field w17, field w16, field w15, field w14, field w13, field w12, field w11, field w10, field w9, field w8, field w7, field w6, field w5, field w4, field w3, field w2, field w1, field w0, field a31, field a30, field a29, field a28, field a27, field a26, field a25, field a24, field a23, field a22, field a21, field a20, field a19, field a18, field a17, field a16, field a15, field a14, field a13, field a12, field a11, field a10, field a9, field a8, field a7, field a6, field a5, field a4, field a3, field a2, field a1, field a0, field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0, field c31, field c30, field c29, field c28, field c27, field c26, field c25, field c24, field c23, field c22, field c21, field c20, field c19, field c18, field c17, field c16, field c15, field c14, field c13, field c12, field c11, field c10, field c9, field c8, field c7, field c6, field c5, field c4, field c3, field c2, field c1, field c0, field d31, field d30, field d29, field d28, field d27, field d26, field d25, field d24, field d23, field d22, field d21, field d20, field d19, field d18, field d17, field d16, field d15, field d14, field d13, field d12, field d11, field d10, field d9, field d8, field d7, field d6, field d5, field d4, field d3, field d2, field d1, field d0, field e31, field e30, field e29, field e28, field e27, field e26, field e25, field e24, field e23, field e22, field e21, field e20, field e19, field e18, field e17, field e16, field e15, field e14, field e13, field e12, field e11, field e10, field e9, field e8, field e7, field e6, field e5, field e4, field e3, field e2, field e1, field e0, field f31, field f30, field f29, field f28, field f27, field f26, field f25, field f24, field f23, field f22, field f21, field f20, field f19, field f18, field f17, field f16, field f15, field f14, field f13, field f12, field f11, field f10, field f9, field f8, field f7, field f6, field f5, field f4, field f3, field f2, field f1, field f0, field g31, field g30, field g29, field g28, field g27, field g26, field g25, field g24, field g23, field g22, field g21, field g20, field g19, field g18, field g17, field g16, field g15, field g14, field g13, field g12, field g11, field g10, field g9, field g8, field g7, field g6, field g5, field g4, field g3, field g2, field g1, field g0, field h31, field h30, field h29, field h28, field h27, field h26, field h25, field h24, field h23, field h22, field h21, field h20, field h19, field h18, field h17, field h16, field h15, field h14, field h13, field h12, field h11, field h10, field h9, field h8, field h7, field h6, field h5, field h4, field h3, field h2, field h1, field h0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): // S1 := (e rightrotate 6) xor (e rightrotate 11) xor (e rightrotate 25) SOne31, SOne30, SOne29, SOne28, SOne27, SOne26, SOne25, SOne24, SOne23, SOne22, SOne21, SOne20, SOne19, SOne18, SOne17, SOne16, SOne15, SOne14, SOne13, SOne12, SOne11, SOne10, SOne9, SOne8, SOne7, SOne6, SOne5, SOne4, SOne3, SOne2, SOne1, SOne0 = AR6XAR11XAR25(e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0) diff --git a/zokrates_cli/examples/sha256/utils/32/extend.code b/zokrates_cli/examples/sha256/utils/32/extend.code index db20c0e1..a77a592f 100644 --- a/zokrates_cli/examples/sha256/utils/32/extend.code +++ b/zokrates_cli/examples/sha256/utils/32/extend.code @@ -4,13 +4,13 @@ import "./ar7xar18xars3.code" as AR7XAR18XAR3 import "./ar17xar19xars10.code" as AR17XAR19XAR10 import "./add.code" as ADD -def ADD(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0): +def ADD(field a31, field a30, field a29, field a28, field a27, field a26, field a25, field a24, field a23, field a22, field a21, field a20, field a19, field a18, field a17, field a16, field a15, field a14, field a13, field a12, field a11, field a10, field a9, field a8, field a7, field a6, field a5, field a4, field a3, field a2, field a1, field a0, field b31, field b30, field b29, field b28, field b27, field b26, field b25, field b24, field b23, field b22, field b21, field b20, field b19, field b18, field b17, field b16, field b15, field b14, field b13, field b12, field b11, field b10, field b9, field b8, field b7, field b6, field b5, field b4, field b3, field b2, field b1, field b0, field c31, field c30, field c29, field c28, field c27, field c26, field c25, field c24, field c23, field c22, field c21, field c20, field c19, field c18, field c17, field c16, field c15, field c14, field c13, field c12, field c11, field c10, field c9, field c8, field c7, field c6, field c5, field c4, field c3, field c2, field c1, field c0, field d31, field d30, field d29, field d28, field d27, field d26, field d25, field d24, field d23, field d22, field d21, field d20, field d19, field d18, field d17, field d16, field d15, field d14, field d13, field d12, field d11, field d10, field d9, field d8, field d7, field d6, field d5, field d4, field d3, field d2, field d1, field d0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): ab31, ab30, ab29, ab28, ab27, ab26, ab25, ab24, ab23, ab22, ab21, ab20, ab19, ab18, ab17, ab16, ab15, ab14, ab13, ab12, ab11, ab10, ab9, ab8, ab7, ab6, ab5, ab4, ab3, ab2, ab1, ab0 = ADD(a31, a30, a29, a28, a27, a26, a25, a24, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0) cd31, cd30, cd29, cd28, cd27, cd26, cd25, cd24, cd23, cd22, cd21, cd20, cd19, cd18, cd17, cd16, cd15, cd14, cd13, cd12, cd11, cd10, cd9, cd8, cd7, cd6, cd5, cd4, cd3, cd2, cd1, cd0 = ADD(c31, c30, c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0, d31, d30, d29, d28, d27, d26, d25, d24, d23, d22, d21, d20, d19, d18, d17, d16, d15, d14, d13, d12, d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0) abcd31, abcd30, abcd29, abcd28, abcd27, abcd26, abcd25, abcd24, abcd23, abcd22, abcd21, abcd20, abcd19, abcd18, abcd17, abcd16, abcd15, abcd14, abcd13, abcd12, abcd11, abcd10, abcd9, abcd8, abcd7, abcd6, abcd5, abcd4, abcd3, abcd2, abcd1, abcd0 = ADD(ab31, ab30, ab29, ab28, ab27, ab26, ab25, ab24, ab23, ab22, ab21, ab20, ab19, ab18, ab17, ab16, ab15, ab14, ab13, ab12, ab11, ab10, ab9, ab8, ab7, ab6, ab5, ab4, ab3, ab2, ab1, ab0, cd31, cd30, cd29, cd28, cd27, cd26, cd25, cd24, cd23, cd22, cd21, cd20, cd19, cd18, cd17, cd16, cd15, cd14, cd13, cd12, cd11, cd10, cd9, cd8, cd7, cd6, cd5, cd4, cd3, cd2, cd1, cd0) return abcd31, abcd30, abcd29, abcd28, abcd27, abcd26, abcd25, abcd24, abcd23, abcd22, abcd21, abcd20, abcd19, abcd18, abcd17, abcd16, abcd15, abcd14, abcd13, abcd12, abcd11, abcd10, abcd9, abcd8, abcd7, abcd6, abcd5, abcd4, abcd3, abcd2, abcd1, abcd0 -def main(wm15b31, wm15b30, wm15b29, wm15b28, wm15b27, wm15b26, wm15b25, wm15b24, wm15b23, wm15b22, wm15b21, wm15b20, wm15b19, wm15b18, wm15b17, wm15b16, wm15b15, wm15b14, wm15b13, wm15b12, wm15b11, wm15b10, wm15b9, wm15b8, wm15b7, wm15b6, wm15b5, wm15b4, wm15b3, wm15b2, wm15b1, wm15b0, wm2b31, wm2b30, wm2b29, wm2b28, wm2b27, wm2b26, wm2b25, wm2b24, wm2b23, wm2b22, wm2b21, wm2b20, wm2b19, wm2b18, wm2b17, wm2b16, wm2b15, wm2b14, wm2b13, wm2b12, wm2b11, wm2b10, wm2b9, wm2b8, wm2b7, wm2b6, wm2b5, wm2b4, wm2b3, wm2b2, wm2b1, wm2b0, wm16b31, wm16b30, wm16b29, wm16b28, wm16b27, wm16b26, wm16b25, wm16b24, wm16b23, wm16b22, wm16b21, wm16b20, wm16b19, wm16b18, wm16b17, wm16b16, wm16b15, wm16b14, wm16b13, wm16b12, wm16b11, wm16b10, wm16b9, wm16b8, wm16b7, wm16b6, wm16b5, wm16b4, wm16b3, wm16b2, wm16b1, wm16b0, wm7b31, wm7b30, wm7b29, wm7b28, wm7b27, wm7b26, wm7b25, wm7b24, wm7b23, wm7b22, wm7b21, wm7b20, wm7b19, wm7b18, wm7b17, wm7b16, wm7b15, wm7b14, wm7b13, wm7b12, wm7b11, wm7b10, wm7b9, wm7b8, wm7b7, wm7b6, wm7b5, wm7b4, wm7b3, wm7b2, wm7b1, wm7b0): +def main(field wm15b31, field wm15b30, field wm15b29, field wm15b28, field wm15b27, field wm15b26, field wm15b25, field wm15b24, field wm15b23, field wm15b22, field wm15b21, field wm15b20, field wm15b19, field wm15b18, field wm15b17, field wm15b16, field wm15b15, field wm15b14, field wm15b13, field wm15b12, field wm15b11, field wm15b10, field wm15b9, field wm15b8, field wm15b7, field wm15b6, field wm15b5, field wm15b4, field wm15b3, field wm15b2, field wm15b1, field wm15b0, field wm2b31, field wm2b30, field wm2b29, field wm2b28, field wm2b27, field wm2b26, field wm2b25, field wm2b24, field wm2b23, field wm2b22, field wm2b21, field wm2b20, field wm2b19, field wm2b18, field wm2b17, field wm2b16, field wm2b15, field wm2b14, field wm2b13, field wm2b12, field wm2b11, field wm2b10, field wm2b9, field wm2b8, field wm2b7, field wm2b6, field wm2b5, field wm2b4, field wm2b3, field wm2b2, field wm2b1, field wm2b0, field wm16b31, field wm16b30, field wm16b29, field wm16b28, field wm16b27, field wm16b26, field wm16b25, field wm16b24, field wm16b23, field wm16b22, field wm16b21, field wm16b20, field wm16b19, field wm16b18, field wm16b17, field wm16b16, field wm16b15, field wm16b14, field wm16b13, field wm16b12, field wm16b11, field wm16b10, field wm16b9, field wm16b8, field wm16b7, field wm16b6, field wm16b5, field wm16b4, field wm16b3, field wm16b2, field wm16b1, field wm16b0, field wm7b31, field wm7b30, field wm7b29, field wm7b28, field wm7b27, field wm7b26, field wm7b25, field wm7b24, field wm7b23, field wm7b22, field wm7b21, field wm7b20, field wm7b19, field wm7b18, field wm7b17, field wm7b16, field wm7b15, field wm7b14, field wm7b13, field wm7b12, field wm7b11, field wm7b10, field wm7b9, field wm7b8, field wm7b7, field wm7b6, field wm7b5, field wm7b4, field wm7b3, field wm7b2, field wm7b1, field wm7b0) -> (field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field, field): // s0 := (w[i-15] rightrotate 7) xor (w[i-15] rightrotate 18) xor (w[i-15] rightshift 3) szero31, szero30, szero29, szero28, szero27, szero26, szero25, szero24, szero23, szero22, szero21, szero20, szero19, szero18, szero17, szero16, szero15, szero14, szero13, szero12, szero11, szero10, szero9, szero8, szero7, szero6, szero5, szero4, szero3, szero2, szero1, szero0 = AR7XAR18XAR3(wm15b31, wm15b30, wm15b29, wm15b28, wm15b27, wm15b26, wm15b25, wm15b24, wm15b23, wm15b22, wm15b21, wm15b20, wm15b19, wm15b18, wm15b17, wm15b16, wm15b15, wm15b14, wm15b13, wm15b12, wm15b11, wm15b10, wm15b9, wm15b8, wm15b7, wm15b6, wm15b5, wm15b4, wm15b3, wm15b2, wm15b1, wm15b0) // s1 := (w[i-2] rightrotate 17) xor (w[i-2] rightrotate 19) xor (w[i-2] rightshift 10) diff --git a/zokrates_cli/examples/sudokuchecker.code b/zokrates_cli/examples/sudokuchecker.code index 4b6300f6..8e5ae015 100644 --- a/zokrates_cli/examples/sudokuchecker.code +++ b/zokrates_cli/examples/sudokuchecker.code @@ -9,7 +9,7 @@ // | c21 | c22 || d21 | d22 | def checkEquality(field e11,field e12,field e21,field e22) -> (field): -counter = if e11 == e12 then 1 else 0 fi +field counter = if e11 == e12 then 1 else 0 fi counter = counter + if e11 == e21 then 1 else 0 fi counter = counter + if e11 == e22 then 1 else 0 fi counter = counter + if e12 == e21 then 1 else 0 fi diff --git a/zokrates_cli/examples/waldo.code b/zokrates_cli/examples/waldo.code index 90b6b922..6158dca0 100644 --- a/zokrates_cli/examples/waldo.code +++ b/zokrates_cli/examples/waldo.code @@ -16,7 +16,7 @@ def isWaldo(field a, field p, field q) -> (field): return 1 // define all -def main(field a0, field a1, field a2, field a3, private field index, private field p, private field q): +def main(field a0, field a1, field a2, field a3, private field index, private field p, private field q) -> (field): // prover provides the index of Waldo field waldo = if index == 0 then a0 else 0 fi waldo = waldo + if index == 1 then a1 else 0 fi diff --git a/zokrates_cli/src/bin.rs b/zokrates_cli/src/bin.rs index 9c372fad..2cbceea1 100644 --- a/zokrates_cli/src/bin.rs +++ b/zokrates_cli/src/bin.rs @@ -540,12 +540,16 @@ mod tests { #[test] fn examples() { - for p in glob("./examples/*.code").expect("Failed to read glob pattern") { + for p in glob("./examples/**/*.code").expect("Failed to read glob pattern") { let path = match p { Ok(x) => x, Err(why) => panic!("Error: {:?}", why), }; + if path.to_str().unwrap().contains("error") { + continue + } + println!("Testing {:?}", path); let file = File::open(path.clone()).unwrap(); @@ -553,7 +557,7 @@ mod tests { let mut reader = BufReader::new(file); let program_flattened: FlatProg = - compile(&mut reader, path, Some(fs_resolve), true, false).unwrap(); + compile(&mut reader, path.parent().unwrap().to_path_buf(), Some(fs_resolve), true, false).unwrap(); let (..) = r1cs_program(&program_flattened); } @@ -561,7 +565,7 @@ mod tests { #[test] fn examples_with_input_success() { - // these examples should compile and run + //these examples should compile and run for p in glob("./examples/test*.code").expect("Failed to read glob pattern") { let path = match p { Ok(x) => x, @@ -574,7 +578,7 @@ mod tests { let mut reader = BufReader::new(file); let program_flattened: FlatProg = - compile(&mut reader, path, Some(fs_resolve), true, false).unwrap(); + compile(&mut reader, path.parent().unwrap().to_path_buf(), Some(fs_resolve), true, false).unwrap(); let (..) = r1cs_program(&program_flattened); let _ = program_flattened.get_witness(vec![FieldPrime::from(0)]).unwrap(); @@ -583,7 +587,7 @@ mod tests { #[test] fn examples_with_input_failure() { - // these examples should compile but not run + //these examples should compile but not run for p in glob("./examples/runtime_errors/*.code").expect("Failed to read glob pattern") { let path = match p { Ok(x) => x, @@ -596,7 +600,7 @@ mod tests { let mut reader = BufReader::new(file); let program_flattened: FlatProg = - compile(&mut reader, path, Some(fs_resolve), true, false).unwrap(); + compile(&mut reader, path.parent().unwrap().to_path_buf(), Some(fs_resolve), true, false).unwrap(); let (..) = r1cs_program(&program_flattened); diff --git a/zokrates_core/src/absy/mod.rs b/zokrates_core/src/absy/mod.rs index ad043754..19f76a99 100644 --- a/zokrates_core/src/absy/mod.rs +++ b/zokrates_core/src/absy/mod.rs @@ -123,16 +123,18 @@ impl fmt::Debug for Function { #[derive(Clone, Serialize, Deserialize, PartialEq)] pub enum Statement { Return(ExpressionList), - Definition(Variable, Expression), + Declaration(Variable), + Definition(String, Expression), Condition(Expression, Expression), For(Variable, T, T, Vec>), - MultipleDefinition(Vec, Expression), + MultipleDefinition(Vec, Expression), } impl fmt::Display for Statement { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match *self { Statement::Return(ref expr) => write!(f, "return {}", expr), + Statement::Declaration(ref var) => write!(f, "{}", var), Statement::Definition(ref lhs, ref rhs) => write!(f, "{} = {}", lhs, rhs), Statement::Condition(ref lhs, ref rhs) => write!(f, "{} == {}", lhs, rhs), Statement::For(ref var, ref start, ref stop, ref list) => { @@ -159,6 +161,7 @@ impl fmt::Debug for Statement { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match *self { Statement::Return(ref expr) => write!(f, "Return({:?})", expr), + Statement::Declaration(ref var) => write!(f, "Declaration({:?})", var), Statement::Definition(ref lhs, ref rhs) => { write!(f, "Definition({:?}, {:?})", lhs, rhs) } diff --git a/zokrates_core/src/absy/parameter.rs b/zokrates_core/src/absy/parameter.rs index bdb088b4..417fc331 100644 --- a/zokrates_core/src/absy/parameter.rs +++ b/zokrates_core/src/absy/parameter.rs @@ -10,7 +10,7 @@ pub struct Parameter { impl fmt::Display for Parameter { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { let visibility = if self.private { "private " } else { "" }; - write!(f, "{}{} {}", visibility, self.id._type, self.id.id) + write!(f, "{}{} {}", visibility, self.id.get_type(), self.id.id) } } diff --git a/zokrates_core/src/compile.rs b/zokrates_core/src/compile.rs index 2ae09ff0..c750bdd9 100644 --- a/zokrates_core/src/compile.rs +++ b/zokrates_core/src/compile.rs @@ -85,6 +85,8 @@ fn compile_aux>(reader for import in program_ast_without_imports.imports.iter() { // find the absolute path for the import, based on the path of the file which imports it let absolute_import_path = location.join(import.get_source()); + println!("compile {:?}", absolute_import_path); + match resolve(&absolute_import_path) { Ok(mut res) => { let compiled = compile_aux(&mut res, absolute_import_path.parent().unwrap().to_path_buf(), resolve_option, should_include_gadgets)?; @@ -137,7 +139,7 @@ mod test { fn no_resolver_with_imports() { let mut r = BufReader::new(r#" import "./path/to/file" as foo - def main(): + def main() -> (field): return foo() "#.as_bytes()); let res: Result, CompileError> = compile(&mut r, PathBuf::from("./path/to/file"), None:: Result, io::Error>>, false, false); @@ -147,7 +149,7 @@ mod test { #[test] fn no_resolver_without_imports() { let mut r = BufReader::new(r#" - def main(): + def main() -> (field): return 1 "#.as_bytes()); let res: Result, CompileError> = compile(&mut r, PathBuf::from("./path/to/file"), None:: Result, io::Error>>, false, false); diff --git a/zokrates_core/src/flatten/mod.rs b/zokrates_core/src/flatten/mod.rs index 41eeb1f4..20cee8a2 100644 --- a/zokrates_core/src/flatten/mod.rs +++ b/zokrates_core/src/flatten/mod.rs @@ -738,6 +738,10 @@ impl Flattener { ) ); } + TypedStatement::Declaration(_) => { + // declarations have already been checked + () + } TypedStatement::Definition(ref v, ref expr) => { // define n variables with n the number of primitive types for v_type diff --git a/zokrates_core/src/parser/parse/function.rs b/zokrates_core/src/parser/parse/function.rs index 1d898a49..b80932c8 100644 --- a/zokrates_core/src/parser/parse/function.rs +++ b/zokrates_core/src/parser/parse/function.rs @@ -299,13 +299,18 @@ pub fn parse_function( col: 1, }, ) { - Ok((Statement::Return(list), ..)) => { - stats.push(Statement::Return(list)); - break; - } - Ok((statement, _, pos)) => { - stats.push(statement); - current_line = pos.line // update the interal line counter to continue where statement ended. + Ok((ref statements, _, ref pos)) => { + for stat in statements { + stats.push(stat.clone()); + } + match statements[0] { + Statement::Return(_) => { + break; + }, + _ => { + current_line = pos.line // update the interal line counter to continue where statement ended. + } + } } Err(err) => return Err(err), }, diff --git a/zokrates_core/src/parser/parse/import.rs b/zokrates_core/src/parser/parse/import.rs index 2f863c85..a1dc596b 100644 --- a/zokrates_core/src/parser/parse/import.rs +++ b/zokrates_core/src/parser/parse/import.rs @@ -87,7 +87,7 @@ mod tests { let string = String::from("import \"./foo.code\""); let import: Token = Token::Import; assert_eq!( - (import, "\"./foo.code\"".to_string(), pos.col(7 as isize)), + (import, " \"./foo.code\"".to_string(), pos.col(6 as isize)), next_token(&string, &pos) ) } diff --git a/zokrates_core/src/parser/parse/statement.rs b/zokrates_core/src/parser/parse/statement.rs index 9e764e23..e0c4b206 100644 --- a/zokrates_core/src/parser/parse/statement.rs +++ b/zokrates_core/src/parser/parse/statement.rs @@ -18,9 +18,9 @@ pub fn parse_statement( lines: &mut Lines, input: &String, pos: &Position, -) -> Result<(Statement, String, Position), Error> { +) -> Result<(Vec>, String, Position), Error> { match next_token::(input, pos) { - (Token::Type(t), s1, p1) => parse_definition(t, s1, p1), + (Token::Type(t), s1, p1) => parse_declaration_definition(t, s1, p1), (Token::Ide(x1), s1, p1) => parse_statement1(x1, s1, p1), (Token::If, ..) | (Token::Open, ..) | (Token::Num(_), ..) => match parse_expr(input, pos) { Ok((e2, s2, p2)) => match next_token(&s2, &p2) { @@ -28,11 +28,11 @@ pub fn parse_statement( Ok((e4, s4, p4)) => match next_token(&s4, &p4) { (Token::InlineComment(_), ref s5, _) => { assert_eq!(s5, ""); - Ok((Statement::Condition(e2, e4), s4, p4)) + Ok((vec![Statement::Condition(e2, e4)], s4, p4)) } (Token::Unknown(ref t5), ref s5, _) if t5 == "" => { assert_eq!(s5, ""); - Ok((Statement::Condition(e2, e4), s4, p4)) + Ok((vec![Statement::Condition(e2, e4)], s4, p4)) } (t5, _, p5) => Err(Error { expected: vec![Token::Unknown("".to_string())], @@ -52,120 +52,129 @@ pub fn parse_statement( }, (Token::For, s1, p1) => { match next_token(&s1, &p1) { - (Token::Ide(x2), s2, p2) => { - match next_token(&s2, &p2) { - (Token::In, s3, p3) => { - match next_token(&s3, &p3) { - (Token::Num(x4), s4, p4) => { - match next_token(&s4, &p4) { - (Token::Dotdot, s5, p5) => { - match next_token(&s5, &p5) { - (Token::Num(x6), s6, p6) => { - match next_token(&s6, &p6) { - (Token::Do, s7, p7) => { - match next_token(&s7, &p7) { - ( - Token::InlineComment(_), - ref s8, - _, - ) => { - assert_eq!(s8, ""); - } - ( - Token::Unknown(ref t8), - ref s8, - _, - ) - if t8 == "" => - { - assert_eq!(s8, ""); - } - (t8, _, p8) => { - return Err(Error { - expected: vec![ - Token::Unknown( - "".to_string(), - ), - ], - got: t8, - pos: p8, - }) - } + (Token::Type(t), s0, p0) => { + match next_token(&s0, &p0) { + (Token::Ide(x2), s2, p2) => { + match next_token(&s2, &p2) { + (Token::In, s3, p3) => { + match next_token(&s3, &p3) { + (Token::Num(x4), s4, p4) => { + match next_token(&s4, &p4) { + (Token::Dotdot, s5, p5) => { + match next_token(&s5, &p5) { + (Token::Num(x6), s6, p6) => { + match next_token(&s6, &p6) { + (Token::Do, s7, p7) => { + match next_token(&s7, &p7) { + ( + Token::InlineComment(_), + ref s8, + _, + ) => { + assert_eq!(s8, ""); + } + ( + Token::Unknown(ref t8), + ref s8, + _, + ) + if t8 == "" => + { + assert_eq!(s8, ""); + } + (t8, _, p8) => { + return Err(Error { + expected: vec![ + Token::Unknown( + "".to_string(), + ), + ], + got: t8, + pos: p8, + }) + } + } + let mut current_line = p7.line; + let mut statements = Vec::new(); + loop { + current_line += 1; + match lines.next() { + Some(Ok(ref x)) if x.trim().starts_with("//") || x.trim() == "" => {}, // skip + Some(Ok(ref x)) if x.trim().starts_with("endfor") => { + let offset = skip_whitespaces(x); + let s8 = x[offset + 6..].to_string(); + let p8 = Position{ line: current_line, col: offset + 7 }; + match next_token(&s8, &p8) { + (Token::InlineComment(_), ref s9, _) => { + assert_eq!(s9, ""); + return Ok((vec![Statement::For(Variable::new(x2, t), x4, x6, statements)], s8, p8)) } - let mut current_line = p7.line; - let mut statements = Vec::new(); - loop { - current_line += 1; - match lines.next() { - Some(Ok(ref x)) if x.trim().starts_with("//") || x.trim() == "" => {}, // skip - Some(Ok(ref x)) if x.trim().starts_with("endfor") => { - let offset = skip_whitespaces(x); - let s8 = x[offset + 6..].to_string(); - let p8 = Position{ line: current_line, col: offset + 7 }; - match next_token(&s8, &p8) { - (Token::InlineComment(_), ref s9, _) => { - assert_eq!(s9, ""); - return Ok((Statement::For(Variable::field_element(x2), x4, x6, statements), s8, p8)) - } - (Token::Unknown(ref t9), ref s9, _) if t9 == "" => { - assert_eq!(s9, ""); - return Ok((Statement::For(Variable::field_element(x2), x4, x6, statements), s8, p8)) + (Token::Unknown(ref t9), ref s9, _) if t9 == "" => { + assert_eq!(s9, ""); + return Ok((vec![Statement::For(Variable::new(x2, t), x4, x6, statements)], s8, p8)) + }, + (t9, _, p9) => return Err(Error { expected: vec![Token::Unknown("1432567iuhgvfc".to_string())], got: t9 , pos: p9 }), + } }, - (t9, _, p9) => return Err(Error { expected: vec![Token::Unknown("1432567iuhgvfc".to_string())], got: t9 , pos: p9 }), + Some(Ok(ref x)) if !x.trim().starts_with("return") => match parse_statement(lines, x, &Position { line: current_line, col: 1 }) { + Ok((statement, ..)) => statements.push(statement[0].clone()), + Err(err) => return Err(err), + }, + Some(Err(err)) => panic!("Error while reading Definitions: {}", err), + Some(Ok(ref x)) => { + let (t, ..) = next_token(x, &Position{ line: current_line, col: 1 }); + return Err(Error { expected: vec![Token::ErrIde, Token::ErrNum, Token::If, Token::Open, Token::Hash, Token::For, Token::Endfor], got: t , pos: Position{ line: current_line, col: 1 } }) + }, + None => return Err(Error { expected: vec![Token::ErrIde, Token::ErrNum, Token::If, Token::Open, Token::Hash, Token::For], got: Token::Unknown("".to_string()) , pos: Position{ line: current_line, col: 1 } }), } - }, - Some(Ok(ref x)) if !x.trim().starts_with("return") => match parse_statement(lines, x, &Position { line: current_line, col: 1 }) { - Ok((statement, ..)) => statements.push(statement), - Err(err) => return Err(err), - }, - Some(Err(err)) => panic!("Error while reading Definitions: {}", err), - Some(Ok(ref x)) => { - let (t, ..) = next_token(x, &Position{ line: current_line, col: 1 }); - return Err(Error { expected: vec![Token::ErrIde, Token::ErrNum, Token::If, Token::Open, Token::Hash, Token::For, Token::Endfor], got: t , pos: Position{ line: current_line, col: 1 } }) - }, - None => return Err(Error { expected: vec![Token::ErrIde, Token::ErrNum, Token::If, Token::Open, Token::Hash, Token::For], got: Token::Unknown("".to_string()) , pos: Position{ line: current_line, col: 1 } }), - } + } + } + (t7, _, p7) => Err(Error { + expected: vec![Token::Do], + got: t7, + pos: p7, + }), } } - (t7, _, p7) => Err(Error { - expected: vec![Token::Do], - got: t7, - pos: p7, + (t6, _, p6) => Err(Error { + expected: vec![Token::ErrNum], + got: t6, + pos: p6, }), } } - (t6, _, p6) => Err(Error { - expected: vec![Token::ErrNum], - got: t6, - pos: p6, + (t5, _, p5) => Err(Error { + expected: vec![Token::Dotdot], + got: t5, + pos: p5, }), } } - (t5, _, p5) => Err(Error { - expected: vec![Token::Dotdot], - got: t5, - pos: p5, + (t4, _, p4) => Err(Error { + expected: vec![Token::ErrNum], + got: t4, + pos: p4, }), } } - (t4, _, p4) => Err(Error { - expected: vec![Token::ErrNum], - got: t4, - pos: p4, + (t3, _, p3) => Err(Error { + expected: vec![Token::In], + got: t3, + pos: p3, }), } } - (t3, _, p3) => Err(Error { - expected: vec![Token::In], - got: t3, - pos: p3, + (t2, _, p2) => Err(Error { + expected: vec![Token::ErrIde], + got: t2, + pos: p2, }), } - } - (t2, _, p2) => Err(Error { - expected: vec![Token::ErrIde], - got: t2, - pos: p2, + }, + (t0, _, p0) => Err(Error { + expected: vec![Token::Type(Type::FieldElement)], + got: t0, + pos: p0, }), } } @@ -173,11 +182,11 @@ pub fn parse_statement( Ok((e2, s2, p2)) => match next_token(&s2, &p2) { (Token::InlineComment(_), ref s3, _) => { assert_eq!(s3, ""); - Ok((Statement::Return(e2), s2, p2)) + Ok((vec![Statement::Return(e2)], s2, p2)) } (Token::Unknown(ref t3), ref s3, _) if t3 == "" => { assert_eq!(s3, ""); - Ok((Statement::Return(e2), s2, p2)) + Ok((vec![Statement::Return(e2)], s2, p2)) } (t3, _, p3) => Err(Error { expected: vec![Token::Unknown("".to_string())], @@ -206,23 +215,49 @@ pub fn parse_statement( } } -// parse statement that starts with an identifier -fn parse_definition( +fn parse_definition1( + ide: String, + input: String, + pos: Position, +) -> Result<(Vec>, String, Position), Error> { + match parse_expr(&input, &pos) { + Ok((e1, s1, p1)) => match next_token(&s1, &p1) { + (Token::InlineComment(_), ref s2, _) => { + assert_eq!(s2, ""); + Ok((vec![Statement::Definition(ide, e1)], s1, p1)) + } + (Token::Unknown(ref t2), ref s2, _) if t2 == "" => { + assert_eq!(s2, ""); + Ok((vec![Statement::Definition(ide, e1)], s1, p1)) + } + (t2, _, p2) => Err(Error { + expected: vec![ + Token::Unknown("".to_string()), + ], + got: t2, + pos: p2, + }), + }, + Err(err) => Err(err), + } +} + +fn parse_declaration_definition( t: Type, input: String, pos: Position, -) -> Result<(Statement, String, Position), Error> { +) -> Result<(Vec>, String, Position), Error> { match next_token::(&input, &pos) { (Token::Ide(x), s0, p0) => match next_token(&s0, &p0) { (Token::Eq, s1, p1) => match parse_expr(&s1, &p1) { Ok((e2, s2, p2)) => match next_token(&s2, &p2) { (Token::InlineComment(_), ref s3, _) => { assert_eq!(s3, ""); - Ok((Statement::Definition(Variable::new(x, t), e2), s2, p2)) + Ok((vec![Statement::Declaration(Variable::new(x.clone(), t)), Statement::Definition(x, e2)], s2, p2)) } (Token::Unknown(ref t3), ref s3, _) if t3 == "" => { assert_eq!(s3, ""); - Ok((Statement::Definition(Variable::new(x, t), e2), s2, p2)) + Ok((vec![Statement::Declaration(Variable::new(x.clone(), t)), Statement::Definition(x, e2)], s2, p2)) } (t3, _, p3) => Err(Error { expected: vec![ @@ -239,8 +274,36 @@ fn parse_definition( }, Err(err) => Err(err), }, + (Token::Comma, s1, p1) => match parse_identifier_list1(x, Some(t.clone()), s1, p1) { + // if we find a comma, parse the rest of the destructure + Ok((e2, d2, s2, p2)) => match next_token(&s2, &p2) { + // then we should have an equal sign + (Token::Eq, s3, p3) => match parse_expr(&s3, &p3) { + Ok((e4, s4, p4)) => { + let mut statements: Vec> = d2.into_iter().map(|v| Statement::Declaration(v)).collect(); + statements.push(Statement::MultipleDefinition(e2, e4)); + Ok((statements, s4, p4)) // output a multipledefinition with the destructure and the expression + } + Err(err) => Err(err), + }, + (t3, _, p3) => Err(Error { + expected: vec![Token::Eq], + got: t3, + pos: p3, + }), + }, + Err(err) => Err(err), + }, + (Token::InlineComment(_), ref s1, _) => { + assert_eq!(s1, ""); + Ok((vec![Statement::Declaration(Variable::new(x.clone(), t))], s0, p0)) + }, + (Token::Unknown(ref t1), ref s1, _) if t1 == "" => { + assert_eq!(s1, ""); + Ok((vec![Statement::Declaration(Variable::new(x.clone(), t))], s0, p0)) + }, (t1, _, p1) => Err(Error { - expected: vec![Token::Eq], + expected: vec![Token::Eq, Token::Unknown("".to_string())], got: t1, pos: p1, }), @@ -258,15 +321,18 @@ fn parse_statement1( ide: String, input: String, pos: Position, -) -> Result<(Statement, String, Position), Error> { +) -> Result<(Vec>, String, Position), Error> { match next_token::(&input, &pos) { - (Token::Comma, s1, p1) => match parse_identifier_list1(ide, s1, p1) { + (Token::Eq, s1, p1) => parse_definition1(ide, s1, p1), + (Token::Comma, s1, p1) => match parse_identifier_list1(ide, None, s1, p1) { // if we find a comma, parse the rest of the destructure - Ok((e2, s2, p2)) => match next_token(&s2, &p2) { + Ok((e2, d2, s2, p2)) => match next_token(&s2, &p2) { // then we should have an equal sign (Token::Eq, s3, p3) => match parse_expr(&s3, &p3) { Ok((e4, s4, p4)) => { - Ok((Statement::MultipleDefinition(e2, e4), s4, p4)) // output a multipledefinition with the destructure and the expression + let mut statements: Vec> = d2.into_iter().map(|v| Statement::Declaration(v)).collect(); + statements.push(Statement::MultipleDefinition(e2, e4)); + Ok((statements, s4, p4)) // output a multipledefinition with the destructure and the expression } Err(err) => Err(err), }, @@ -284,11 +350,11 @@ fn parse_statement1( Ok((e5, s5, p5)) => match next_token(&s5, &p5) { (Token::InlineComment(_), ref s6, _) => { assert_eq!(s6, ""); - Ok((Statement::Condition(e3, e5), s5, p5)) + Ok((vec![Statement::Condition(e3, e5)], s5, p5)) } (Token::Unknown(ref t6), ref s6, _) if t6 == "" => { assert_eq!(s6, ""); - Ok((Statement::Condition(e3, e5), s5, p5)) + Ok((vec![Statement::Condition(e3, e5)], s5, p5)) } (t6, _, p6) => Err(Error { expected: vec![ @@ -320,11 +386,11 @@ fn parse_statement1( Ok((e5, s5, p5)) => match next_token(&s5, &p5) { (Token::InlineComment(_), ref s6, _) => { assert_eq!(s6, ""); - Ok((Statement::Condition(e3, e5), s5, p5)) + Ok((vec![Statement::Condition(e3, e5)], s5, p5)) } (Token::Unknown(ref t6), ref s6, _) if t6 == "" => { assert_eq!(s6, ""); - Ok((Statement::Condition(e3, e5), s5, p5)) + Ok((vec![Statement::Condition(e3, e5)], s5, p5)) } (t6, _, p6) => Err(Error { expected: vec![ @@ -357,29 +423,57 @@ fn parse_statement1( // parse an expression list starting with an identifier pub fn parse_identifier_list1( head: String, + _type: Option, input: String, pos: Position, -) -> Result<(Vec, String, Position), Error> { +) -> Result<(Vec, Vec, String, Position), Error> { let mut res = Vec::new(); - res.push(Variable::field_element(head)); - parse_comma_separated_identifier_list_rec(input, pos, &mut res) + let mut decl = Vec::new(); + res.push(head.clone()); + match _type { + Some(t) => { + decl.push(Variable::new(head, t)); + }, + _ => {} + }; + parse_comma_separated_identifier_list_rec(input, pos, &mut res, &mut decl) } fn parse_comma_separated_identifier_list_rec( input: String, pos: Position, - mut acc: &mut Vec, -) -> Result<(Vec, String, Position), Error> { + mut acc: &mut Vec, + mut decl: &mut Vec, +) -> Result<(Vec, Vec, String, Position), Error> { match next_token(&input, &pos) { + (Token::Type(t), s1, p1) => { + match next_token::(&s1, &p1) { + (Token::Ide(id), s2, p2) => { + acc.push(id.clone()); + decl.push(Variable::new(id, t)); + match next_token::(&s2, &p2) { + (Token::Comma, s3, p3) => { + parse_comma_separated_identifier_list_rec(s3, p3, &mut acc, &mut decl) + } + (..) => Ok((acc.to_vec(), decl.to_vec(), s2, p2)), + } + } + (t2, _, p2) => Err(Error { + expected: vec![Token::Ide(String::from("ide"))], + got: t2, + pos: p2, + }), + } + }, (Token::Ide(id), s1, p1) => { - acc.push(Variable::field_element(id)); + acc.push(id); match next_token::(&s1, &p1) { (Token::Comma, s2, p2) => { - parse_comma_separated_identifier_list_rec(s2, p2, &mut acc) + parse_comma_separated_identifier_list_rec(s2, p2, &mut acc, &mut decl) } - (..) => Ok((acc.to_vec(), s1, p1)), + (..) => Ok((acc.to_vec(), decl.to_vec(), s1, p1)), } - } + }, (t1, _, p1) => Err(Error { expected: vec![Token::Ide(String::from("ide"))], got: t1, @@ -404,7 +498,7 @@ mod tests { Expression::Number(FieldPrime::from(1)), ); assert_eq!( - Ok((cond, String::from(""), pos.col(string.len() as isize))), + Ok((vec![cond], String::from(""), pos.col(string.len() as isize))), parse_statement1(String::from("foo"), string, pos) ); } diff --git a/zokrates_core/src/semantics.rs b/zokrates_core/src/semantics.rs index e82aa94b..088c0a12 100644 --- a/zokrates_core/src/semantics.rs +++ b/zokrates_core/src/semantics.rs @@ -27,6 +27,39 @@ impl fmt::Display for Error { } } +pub struct FunctionQuery { + id: String, + inputs: Vec, + outputs: Vec> +} + +impl FunctionQuery { + fn new(id: String, inputs: &Vec, outputs: &Vec>) -> FunctionQuery { + FunctionQuery { + id, + inputs: inputs.clone(), + outputs: outputs.clone() + } + } + + fn match_func(&self, func: &FunctionDeclaration) -> bool { + self.id == func.id && + self.inputs == func.signature.inputs && + self.outputs.len() == func.signature.outputs.len() && + self.outputs + .iter() + .enumerate() + .all(|(index, t)| match t { + Some(ref t) => t == &func.signature.outputs[index], + _ => true + }) + } + + fn match_funcs(&self, funcs: Vec) -> Vec { + funcs.into_iter().filter(|func| self.match_func(func)).collect() + } +} + #[derive(Clone, PartialEq, Eq, Hash, Debug)] pub struct ScopedVariable { id: Variable, @@ -92,24 +125,31 @@ impl Checker { } } + fn check_for_var(&self, var: &Variable) -> Result<(), Error> { + match var.get_type() { + Type::FieldElement => Ok(()), + t => Err(Error { message: format!("Variable in for loop cannot have type {}", t) }) + } + } + fn check_function(&mut self, funct: &Function) -> Result, Error> { assert_eq!(funct.arguments.len(), funct.signature.inputs.len()); - match self.find_function(&funct.id, &funct.arguments.iter().map(|a| a.clone().id._type).collect()) { - Some(_) => { + let candidates = self.find_candidates(&funct.id, &funct.signature.inputs, &funct.signature.outputs.clone().into_iter().map(|o| Some(o)).collect()); + + match candidates.len() { + 1 => { return Err(Error { message: format!("Duplicate definition for function {} with {} arguments", funct.id, funct.arguments.len()) }) }, - None => { + 0 => { - } + }, + _ => panic!("dupllicate function declaration should have been caught") } self.level += 1; for arg in funct.arguments.clone() { - self.scope.insert(ScopedVariable { - id: arg.id, - level: self.level - }); + self.insert_scope(arg.id); } let mut statements_checked = vec![]; @@ -139,7 +179,7 @@ impl Checker { Statement::Return(ref list) => { let mut expression_list_checked = vec![]; for e in list.expressions.clone() { - let e_checked = self.check_expression(e)?; + let e_checked = self.check_expression(&e)?; expression_list_checked.push(e_checked); } @@ -150,24 +190,34 @@ impl Checker { false => Err( Error { message: format!("Expected {:?} in return statement, found {:?}", header_return_types, return_statement_types)}) } } - Statement::Definition(var, expr) => { - let checked_expr = self.check_expression(expr)?; - + Statement::Declaration(var) => { + self.insert_scope(var.clone()); + Ok(TypedStatement::Declaration(var)) + } + Statement::Definition(variable_name, expr) => { + // check the expression to be assigned + let checked_expr = self.check_expression(&expr)?; let expression_type = checked_expr.get_type(); - if expression_type != var._type { - return Err( Error { message: format!("cannot assign {:?} to {:?}", expression_type, var._type) }); - } + // check that the variable is defined + let var = match self.scope.iter().find(|v| v.id.id == variable_name) { + Some(var) => { + if expression_type != var.id.get_type() { + return Err( Error { message: format!("cannot assign {:?} to {:?}", expression_type, var.id.get_type()) }); + } - self.scope.insert(ScopedVariable { - id: var.clone(), - level: self.level - }); - Ok(TypedStatement::Definition(var, checked_expr)) + Ok(var) + }, + None => { + Err( Error { message: format!("Undeclared variable: {:?}", variable_name) }) + } + }?; + + Ok(TypedStatement::Definition(var.id.clone(), checked_expr)) } Statement::Condition(lhs, rhs) => { - let checked_lhs = self.check_expression(lhs)?; - let checked_rhs = self.check_expression(rhs)?; + let checked_lhs = self.check_expression(&lhs)?; + let checked_rhs = self.check_expression(&rhs)?; match (checked_lhs.clone(), checked_rhs.clone()) { (TypedExpression::FieldElement(_), TypedExpression::FieldElement(_)) => Ok(TypedStatement::Condition(checked_lhs, checked_rhs)), @@ -176,11 +226,10 @@ impl Checker { } Statement::For(var, from, to, statements) => { self.level += 1; - let index = ScopedVariable { - id: var.clone(), - level: self.level - }; - self.scope.insert(index.clone()); + + self.check_for_var(&var)?; + + self.insert_scope(var.clone()); let mut checked_statements = vec![]; @@ -188,46 +237,59 @@ impl Checker { let checked_stat = self.check_statement(stat, header_return_types)?; checked_statements.push(checked_stat); } - self.scope.remove(&index); + + let current_level = self.level.clone(); + let current_scope = self.scope.clone(); + let to_remove = current_scope.iter().filter(|symbol| symbol.level == current_level); + for symbol in to_remove { + self.scope.remove(symbol); + } self.level -= 1; + Ok(TypedStatement::For(var, from, to, checked_statements)) }, - Statement::MultipleDefinition(vars, rhs) => { - let vars_types: Vec = vars.iter().map(|var| var.clone()._type).collect(); - - // All elements of the left side have to be identifiers + Statement::MultipleDefinition(var_names, rhs) => { match rhs { // Right side has to be a function call Expression::FunctionCall(ref fun_id, ref arguments) => { - // check the arguments + + // find lhs types + let vars_types: Vec> = var_names.iter().map(|name| + match self.scope.clone().into_iter().find(|v| &v.id.id == name) { + None => None, + Some(sv) => Some(sv.id.get_type()) + } + ).collect(); + + // find arguments types let mut arguments_checked = vec![]; for arg in arguments { - let arg_checked = self.check_expression(arg.clone())?; + let arg_checked = self.check_expression(arg)?; arguments_checked.push(arg_checked); } + let arguments_types = arguments_checked.iter().map(|a| a.get_type()).collect(); - let mut arguments_types = vec![]; - for arg in arguments_checked.iter() { - arguments_types.push(arg.get_type()); - } + let candidates = self.find_candidates(fun_id, &arguments_types, &vars_types).clone(); - match self.find_function(fun_id, &arguments_types) { + match candidates.len() { // the function has to be defined - Some(f) => { - // the return count has to match the left side - if f.signature.outputs == vars_types { - for var in &vars { - self.scope.insert(ScopedVariable { - id: var.clone(), - level: self.level - }); - } - return Ok(TypedStatement::MultipleDefinition(vars, TypedExpressionList::FunctionCall(f.id, arguments_checked, f.signature.outputs))) + 1 => { + let f = &candidates[0]; + + let lhs = var_names.iter().enumerate().map(|(index, name)| + Variable::new(name.to_string(), f.signature.outputs[index].clone()) + ); + + // we can infer the left hand side to be typed as the return values + for var in lhs.clone() { + self.insert_scope(var); } - Err(Error { message: format!("{} returns {} values but left side is of size {}", f.id, f.signature.outputs.len(), vars.len()) }) + + Ok(TypedStatement::MultipleDefinition(lhs.collect(), TypedExpressionList::FunctionCall(f.id.clone(), arguments_checked, f.signature.outputs.clone()))) }, - None => Err(Error { message: format!("Function definition for function {} with arguments {:?} not found.", fun_id, arguments_types) }) + 0 => Err(Error { message: format!("Function definition for function {} with arguments {:?} not found.", fun_id, arguments_types) }), + _ => Err(Error { message: format!("Function call for function {} with arguments {:?} is ambiguous.", fun_id, arguments_types) }), } }, _ => Err(Error { message: format!("{} should be a FunctionCall", rhs) }) @@ -236,21 +298,21 @@ impl Checker { } } - fn check_expression(&mut self, expr: Expression) -> Result, Error> { + fn check_expression(&mut self, expr: &Expression) -> Result, Error> { match expr { - Expression::Identifier(variable) => { + &Expression::Identifier(ref variable) => { // check that `id` is defined in the scope - match self.scope.iter().find(|v| v.id.id == variable) { - Some(v) => match v.clone().id._type { - Type::Boolean => Ok(BooleanExpression::Identifier(variable).into()), - Type::FieldElement => Ok(FieldElementExpression::Identifier(variable).into()), + match self.scope.iter().find(|v| v.id.id == variable.to_string()) { + Some(v) => match v.clone().id.get_type() { + Type::Boolean => Ok(BooleanExpression::Identifier(variable.to_string()).into()), + Type::FieldElement => Ok(FieldElementExpression::Identifier(variable.to_string()).into()), }, None => Err(Error { message: format!("{} is undefined", variable.to_string()) }), } }, - Expression::Add(box e1, box e2) => { - let e1_checked = self.check_expression(e1)?; - let e2_checked = self.check_expression(e2)?; + &Expression::Add(ref e1, ref e2) => { + let e1_checked = self.check_expression(&e1)?; + let e2_checked = self.check_expression(&e2)?; match (e1_checked, e2_checked) { (TypedExpression::FieldElement(e1), TypedExpression::FieldElement(e2)) => { @@ -259,9 +321,9 @@ impl Checker { (t1, t2) => Err(Error { message: format!("Expected only field elements, found {:?}, {:?}", t1.get_type(), t2.get_type()) }), } }, - Expression::Sub(box e1, box e2) => { - let e1_checked = self.check_expression(e1)?; - let e2_checked = self.check_expression(e2)?; + &Expression::Sub(ref e1, ref e2) => { + let e1_checked = self.check_expression(&e1)?; + let e2_checked = self.check_expression(&e2)?; match (e1_checked, e2_checked) { (TypedExpression::FieldElement(e1), TypedExpression::FieldElement(e2)) => { @@ -270,9 +332,9 @@ impl Checker { (t1, t2) => Err(Error { message: format!("Expected only field elements, found {:?}, {:?}", t1.get_type(), t2.get_type()) }), } }, - Expression::Mult(box e1, box e2) => { - let e1_checked = self.check_expression(e1)?; - let e2_checked = self.check_expression(e2)?; + &Expression::Mult(ref e1, ref e2) => { + let e1_checked = self.check_expression(&e1)?; + let e2_checked = self.check_expression(&e2)?; match (e1_checked, e2_checked) { (TypedExpression::FieldElement(e1), TypedExpression::FieldElement(e2)) => { @@ -281,9 +343,9 @@ impl Checker { (t1, t2) => Err(Error { message: format!("Expected only field elements, found {:?}, {:?}", t1.get_type(), t2.get_type()) }), } }, - Expression::Div(box e1, box e2) => { - let e1_checked = self.check_expression(e1)?; - let e2_checked = self.check_expression(e2)?; + &Expression::Div(ref e1, ref e2) => { + let e1_checked = self.check_expression(&e1)?; + let e2_checked = self.check_expression(&e2)?; match (e1_checked, e2_checked) { (TypedExpression::FieldElement(e1), TypedExpression::FieldElement(e2)) => { @@ -292,9 +354,9 @@ impl Checker { (t1, t2) => Err(Error { message: format!("Expected only field elements, found {:?}, {:?}", t1.get_type(), t2.get_type()) }), } }, - Expression::Pow(box e1, box e2) => { - let e1_checked = self.check_expression(e1)?; - let e2_checked = self.check_expression(e2)?; + &Expression::Pow(ref e1, ref e2) => { + let e1_checked = self.check_expression(&e1)?; + let e2_checked = self.check_expression(&e2)?; match (e1_checked, e2_checked) { (TypedExpression::FieldElement(e1), TypedExpression::FieldElement(e2)) => { @@ -303,10 +365,10 @@ impl Checker { (t1, t2) => Err(Error { message: format!("Expected only field elements, found {:?}, {:?}", t1.get_type(), t2.get_type()) }), } }, - Expression::IfElse(box condition, box consequence, box alternative) => { + &Expression::IfElse(ref condition, ref consequence, ref alternative) => { let condition_checked = self.check_condition(&condition)?; - let consequence_checked = self.check_expression(consequence)?; - let alternative_checked = self.check_expression(alternative)?; + let consequence_checked = self.check_expression(&consequence)?; + let alternative_checked = self.check_expression(&alternative)?; match (condition_checked, consequence_checked, alternative_checked) { (condition, TypedExpression::FieldElement(consequence), TypedExpression::FieldElement(alternative)) => { @@ -315,12 +377,12 @@ impl Checker { _ => panic!("id else only for bool fe fe") } }, - Expression::Number(n) => Ok(FieldElementExpression::Number(n).into()), - Expression::FunctionCall(ref fun_id, ref arguments) => { + &Expression::Number(ref n) => Ok(FieldElementExpression::Number(n.clone()).into()), + &Expression::FunctionCall(ref fun_id, ref arguments) => { // check the arguments let mut arguments_checked = vec![]; for arg in arguments { - let arg_checked = self.check_expression(arg.clone())?; + let arg_checked = self.check_expression(&arg.clone())?; arguments_checked.push(arg_checked); } @@ -330,19 +392,25 @@ impl Checker { arguments_types.push(arg.get_type()); } - match self.find_function(fun_id, &arguments_types) { + // outside of multidef, function calls must have a single return value + // we use type inference to determine the type of the return, so we don't specify it + let candidates = self.find_candidates(fun_id, &arguments_types, &vec![None]); + + match candidates.len() { // the function has to be defined - Some(f) => { + 1 => { + let f = &candidates[0]; // the return count has to be 1 if f.signature.outputs.len() == 1 { match f.signature.outputs[0] { - Type::FieldElement => return Ok(FieldElementExpression::FunctionCall(f.id, arguments_checked).into()), + Type::FieldElement => return Ok(FieldElementExpression::FunctionCall(f.id.clone(), arguments_checked).into()), _ => panic!("cannot return booleans") } } Err(Error { message: format!("{} returns {} values but is called outside of a definition", f.id, f.signature.outputs.len()) }) }, - None => Err(Error { message: format!("Function definition for function {} with arguments {:?} not found.", fun_id, arguments_types) }) + 0 => Err(Error { message: format!("Function definition for function {} with arguments {:?} not found.", fun_id, arguments_types) }), + _ => panic!("duplicate definition should have been caught before the call") } }, } @@ -351,8 +419,8 @@ impl Checker { fn check_condition(&mut self, cond: &Condition) -> Result, Error> { match cond.clone() { Condition::Lt(e1, e2) => { - let e1_checked = self.check_expression(e1)?; - let e2_checked = self.check_expression(e2)?; + let e1_checked = self.check_expression(&e1)?; + let e2_checked = self.check_expression(&e2)?; match (e1_checked, e2_checked) { (TypedExpression::FieldElement(e1), TypedExpression::FieldElement(e2)) => { Ok(BooleanExpression::Lt(box e1, box e2)) @@ -361,8 +429,8 @@ impl Checker { } }, Condition::Le(e1, e2) => { - let e1_checked = self.check_expression(e1)?; - let e2_checked = self.check_expression(e2)?; + let e1_checked = self.check_expression(&e1)?; + let e2_checked = self.check_expression(&e2)?; match (e1_checked, e2_checked) { (TypedExpression::FieldElement(e1), TypedExpression::FieldElement(e2)) => { Ok(BooleanExpression::Le(box e1, box e2)) @@ -371,8 +439,8 @@ impl Checker { } }, Condition::Eq(e1, e2) => { - let e1_checked = self.check_expression(e1)?; - let e2_checked = self.check_expression(e2)?; + let e1_checked = self.check_expression(&e1)?; + let e2_checked = self.check_expression(&e2)?; match (e1_checked, e2_checked) { (TypedExpression::FieldElement(e1), TypedExpression::FieldElement(e2)) => { Ok(BooleanExpression::Eq(box e1, box e2)) @@ -381,8 +449,8 @@ impl Checker { } }, Condition::Ge(e1, e2) => { - let e1_checked = self.check_expression(e1)?; - let e2_checked = self.check_expression(e2)?; + let e1_checked = self.check_expression(&e1)?; + let e2_checked = self.check_expression(&e2)?; match (e1_checked, e2_checked) { (TypedExpression::FieldElement(e1), TypedExpression::FieldElement(e2)) => { Ok(BooleanExpression::Ge(box e1, box e2)) @@ -391,8 +459,8 @@ impl Checker { } }, Condition::Gt(e1, e2) => { - let e1_checked = self.check_expression(e1)?; - let e2_checked = self.check_expression(e2)?; + let e1_checked = self.check_expression(&e1)?; + let e2_checked = self.check_expression(&e2)?; match (e1_checked, e2_checked) { (TypedExpression::FieldElement(e1), TypedExpression::FieldElement(e2)) => { Ok(BooleanExpression::Gt(box e1, box e2)) @@ -403,11 +471,20 @@ impl Checker { } } - fn find_function(&mut self, id: &str, arg_types: &Vec) -> Option { - self.functions.clone().into_iter().find(|fun| { - fun.id == id && fun.signature.inputs.len() == arg_types.len() + fn insert_scope(&mut self, v: Variable) -> bool { + println!("var!"); + self.scope.insert(ScopedVariable { + id: v, + level: self.level }) } + + fn find_candidates(&self, id: &str, arg_types: &Vec, return_types: &Vec>) -> Vec { + + let query = FunctionQuery::new(String::from(id), arg_types, return_types); + + query.match_funcs(self.functions.clone().into_iter().collect()) + } } #[cfg(test)] @@ -429,7 +506,7 @@ mod tests { // a = b // b undefined let statement: Statement = Statement::Definition( - Variable::field_element("a"), + String::from("a"), Expression::Identifier(String::from("b")) ); let mut checker = Checker::new(); @@ -441,10 +518,14 @@ mod tests { // a = b // b defined let statement: Statement = Statement::Definition( - Variable::field_element("a"), + String::from("a"), Expression::Identifier(String::from("b")) ); let mut scope = HashSet::new(); + scope.insert(ScopedVariable { + id: Variable::field_element("a"), + level: 0 + }); scope.insert(ScopedVariable { id: Variable::field_element("b"), level: 0 @@ -463,14 +544,17 @@ mod tests { #[test] fn declared_in_other_function() { // def foo(): - // a = 1 + // field a = 1 // def bar(): // return a // should fail let foo_args = Vec::::new(); let mut foo_statements = Vec::>::new(); + foo_statements.push(Statement::Declaration( + Variable::field_element("a") + )); foo_statements.push(Statement::Definition( - Variable::field_element("a"), + String::from("a"), Expression::Number(FieldPrime::from(1))) ); let foo = Function { @@ -525,8 +609,11 @@ mod tests { // should pass let foo_args = vec![]; let foo_statements = vec![ + Statement::Declaration( + Variable::field_element("a") + ), Statement::Definition( - Variable::field_element("a"), + String::from("a"), Expression::Number(FieldPrime::from(1))) ]; @@ -542,8 +629,11 @@ mod tests { let bar_args = Vec::::new(); let bar_statements = vec![ + Statement::Declaration( + Variable::field_element("a") + ), Statement::Definition( - Variable::field_element("a"), + String::from("a"), Expression::Number(FieldPrime::from(2)) ), Statement::Return( @@ -597,7 +687,7 @@ mod tests { #[test] fn for_index_after_end() { // def foo(): - // for i in 0..10 do + // for field i in 0..10 do // endfor // return i // should fail @@ -636,8 +726,11 @@ mod tests { // should pass let mut foo_statements = Vec::>::new(); let mut for_statements = Vec::>::new(); + for_statements.push(Statement::Declaration( + Variable::field_element("a") + )); for_statements.push(Statement::Definition( - Variable::field_element("a"), + String::from("a"), Expression::Identifier(String::from("i")) )); foo_statements.push(Statement::For( @@ -650,6 +743,10 @@ mod tests { let mut foo_statements_checked = Vec::>::new(); let mut for_statements_checked = Vec::>::new(); + for_statements_checked.push(TypedStatement::Declaration( + Variable::field_element("a") + )); + for_statements_checked.push(TypedStatement::Definition( Variable::field_element("a"), FieldElementExpression::Identifier(String::from("i")).into() @@ -692,12 +789,16 @@ mod tests { // def foo(): // return 1, 2 // def bar(): - // c = foo() + // field c = foo() // should fail - let bar_statements: Vec> = vec![Statement::MultipleDefinition( - vec![Variable::field_element("a")], - Expression::FunctionCall("foo".to_string(), vec![]) - )]; + let bar_statements: Vec> = vec![ + Statement::Declaration( + Variable::field_element("a") + ), + Statement::MultipleDefinition( + vec![String::from("a")], + Expression::FunctionCall("foo".to_string(), vec![])) + ]; let foo = FunctionDeclaration { id: "foo".to_string(), @@ -764,12 +865,16 @@ mod tests { #[test] fn function_undefined_in_multidef() { // def bar(): - // c = foo() + // field a = foo() // should fail - let bar_statements: Vec> = vec![Statement::MultipleDefinition( - vec![Variable::field_element("a")], - Expression::FunctionCall("foo".to_string(), vec![]) - )]; + let bar_statements: Vec> = vec![ + Statement::Declaration( + Variable::field_element("a") + ), + Statement::MultipleDefinition( + vec![String::from("a")], + Expression::FunctionCall("foo".to_string(), vec![])) + ]; let bar = Function { id: "bar".to_string(), @@ -814,8 +919,14 @@ mod tests { }; let main_statements: Vec> = vec![ + Statement::Declaration( + Variable::field_element("a") + ), + Statement::Declaration( + Variable::field_element("b") + ), Statement::MultipleDefinition( - vec![Variable::field_element("a"), Variable::field_element("b")], + vec![String::from("a"), String::from("b")], Expression::FunctionCall("foo".to_string(), vec![ Expression::Identifier("x".to_string()) ]) @@ -902,13 +1013,19 @@ mod tests { // def foo(): // return 1, 2 // def bar(): - // a, b = foo() + // field a, field b = foo() // return a + b // // should pass let bar_statements: Vec> = vec![ + Statement::Declaration( + Variable::field_element("a") + ), + Statement::Declaration( + Variable::field_element("b") + ), Statement::MultipleDefinition( - vec![Variable::field_element("a"), Variable::field_element("b")], + vec![String::from("a"), String::from("b")], Expression::FunctionCall("foo".to_string(), vec![]) ), Statement::Return( diff --git a/zokrates_core/src/typed_absy/mod.rs b/zokrates_core/src/typed_absy/mod.rs index d954418b..a7b86598 100644 --- a/zokrates_core/src/typed_absy/mod.rs +++ b/zokrates_core/src/typed_absy/mod.rs @@ -123,6 +123,7 @@ impl fmt::Debug for TypedFunction { pub enum TypedStatement { Return(Vec>), Definition(Variable, TypedExpression), + Declaration(Variable), Condition(TypedExpression, TypedExpression), For(Variable, T, T, Vec>), MultipleDefinition(Vec, TypedExpressionList), @@ -141,6 +142,9 @@ impl fmt::Debug for TypedStatement { } write!(f, ")") }, + TypedStatement::Declaration(ref var) => { + write!(f, "Declaration({:?})", var) + } TypedStatement::Definition(ref lhs, ref rhs) => { write!(f, "Definition({:?}, {:?})", lhs, rhs) } @@ -173,6 +177,7 @@ impl fmt::Display for TypedStatement { } write!(f, "") }, + TypedStatement::Declaration(ref var) => write!(f, "{}", var), TypedStatement::Definition(ref lhs, ref rhs) => write!(f, "{} = {}", lhs, rhs), TypedStatement::Condition(ref lhs, ref rhs) => write!(f, "{} == {}", lhs, rhs), TypedStatement::For(ref var, ref start, ref stop, ref list) => {