public static void Carry(int[] z)
{
int z0 = z[0], z1 = z[1], z2 = z[2], z3 = z[3], z4 = z[4];
int z5 = z[5], z6 = z[6], z7 = z[7], z8 = z[8], z9 = z[9];
z2 += (z1 >> 26); z1 &= M26;
z4 += (z3 >> 26); z3 &= M26;
z7 += (z6 >> 26); z6 &= M26;
z9 += (z8 >> 26); z8 &= M26;
z3 += (z2 >> 25); z2 &= M25;
z5 += (z4 >> 25); z4 &= M25;
z8 += (z7 >> 25); z7 &= M25;
//z0 += (z9 >> 24) * 19; z9 &= M24;
z0 += (z9 >> 25) * 38; z9 &= M25;
z1 += (z0 >> 26); z0 &= M26;
z6 += (z5 >> 26); z5 &= M26;
z2 += (z1 >> 26); z1 &= M26;
z4 += (z3 >> 26); z3 &= M26;
z7 += (z6 >> 26); z6 &= M26;
z9 += (z8 >> 26); z8 &= M26;
z[0] = z0; z[1] = z1; z[2] = z2; z[3] = z3; z[4] = z4;
z[5] = z5; z[6] = z6; z[7] = z7; z[8] = z8; z[9] = z9;
}