#include "fmpz.h"
#include "aprcl.h"
void
unity_zp_ar1(fmpz_t * t)
{
fmpz_mul(t[6], t[0], t[3]);
fmpz_mul(t[13], t[1], t[4]);
fmpz_mul(t[10], t[2], t[5]);
fmpz_add(t[11], t[0], t[1]);
fmpz_add(t[12], t[3], t[4]);
fmpz_mul(t[15], t[11], t[12]);
fmpz_add(t[11], t[0], t[2]);
fmpz_add(t[12], t[3], t[5]);
fmpz_mul(t[16], t[11], t[12]);
fmpz_add(t[11], t[1], t[2]);
fmpz_add(t[12], t[4], t[5]);
fmpz_mul(t[17], t[11], t[12]);
fmpz_add(t[14], t[6], t[13]);
fmpz_sub(t[7], t[15], t[14]);
fmpz_add(t[14], t[16], t[13]);
fmpz_add(t[16], t[6], t[10]);
fmpz_sub(t[8], t[14], t[16]);
fmpz_add(t[14], t[13], t[10]);
fmpz_sub(t[9], t[17], t[14]);
}
void
unity_zp_ar2(fmpz_t * t)
{
fmpz_mul(t[8], t[0], t[4]);
fmpz_mul(t[20], t[1], t[5]);
fmpz_mul(t[21], t[2], t[6]);
fmpz_mul(t[14], t[3], t[7]);
fmpz_add(t[15], t[0], t[1]);
fmpz_add(t[16], t[4], t[5]);
fmpz_mul(t[22], t[15], t[16]);
fmpz_add(t[15], t[0], t[2]);
fmpz_add(t[16], t[4], t[6]);
fmpz_mul(t[23], t[15], t[16]);
fmpz_add(t[17], t[2], t[3]);
fmpz_add(t[18], t[6], t[7]);
fmpz_mul(t[24], t[17], t[18]);
fmpz_add(t[17], t[1], t[3]);
fmpz_add(t[18], t[5], t[7]);
fmpz_mul(t[25], t[17], t[18]);
fmpz_add(t[26], t[8], t[20]);
fmpz_sub(t[9], t[22], t[26]);
fmpz_add(t[26], t[8], t[21]);
fmpz_add(t[27], t[20], t[23]);
fmpz_sub(t[10], t[27], t[26]);
fmpz_add(t[19], t[15], t[17]);
fmpz_add(t[17], t[16], t[18]);
fmpz_add(t[26], t[21], t[14]);
fmpz_sub(t[13], t[24], t[26]);
fmpz_mul(t[26], t[17], t[19]);
fmpz_add(t[27], t[9], t[13]);
fmpz_add(t[28], t[27], t[25]);
fmpz_add(t[27], t[28], t[23]);
fmpz_sub(t[11], t[26], t[27]);
fmpz_add(t[26], t[25], t[21]);
fmpz_add(t[27], t[20], t[14]);
fmpz_sub(t[12], t[26], t[27]);
}
void
unity_zp_ar3(fmpz_t * t)
{
fmpz_set(t[20], t[0]);
fmpz_set(t[21], t[1]);
fmpz_set(t[22], t[2]);
fmpz_set(t[23], t[3]);
fmpz_set(t[24], t[4]);
fmpz_set(t[25], t[5]);
fmpz_set(t[26], t[6]);
fmpz_set(t[27], t[7]);
fmpz_set(t[28], t[8]);
fmpz_set(t[29], t[9]);
fmpz_set(t[3], t[25]);
fmpz_set(t[4], t[26]);
fmpz_set(t[5], t[27]);
unity_zp_ar1(t);
fmpz_set(t[30], t[6]);
fmpz_set(t[31], t[7]);
fmpz_set(t[32], t[8]);
fmpz_set(t[33], t[9]);
fmpz_set(t[34], t[10]);
fmpz_add(t[0], t[20], t[23]);
fmpz_add(t[1], t[21], t[24]);
fmpz_add(t[3], t[25], t[28]);
fmpz_add(t[4], t[26], t[29]);
unity_zp_ar1(t);
fmpz_add(t[15], t[23], t[24]);
fmpz_add(t[16], t[28], t[29]);
fmpz_mul(t[11], t[23], t[28]);
fmpz_mul(t[38], t[24], t[29]);
fmpz_mul(t[12], t[15], t[16]);
fmpz_add(t[13], t[11], t[38]);
fmpz_sub(t[37], t[12], t[13]);
fmpz_add(t[12], t[9], t[11]);
fmpz_sub(t[36], t[12], t[33]);
fmpz_add(t[12], t[30], t[11]);
fmpz_add(t[13], t[33], t[6]);
fmpz_sub(t[33], t[13], t[12]);
fmpz_add(t[12], t[31], t[37]);
fmpz_add(t[13], t[34], t[7]);
fmpz_sub(t[34], t[13], t[12]);
fmpz_add(t[12], t[32], t[38]);
fmpz_sub(t[35], t[8], t[12]);
fmpz_set(t[10], t[30]);
fmpz_set(t[11], t[31]);
fmpz_set(t[12], t[32]);
fmpz_set(t[13], t[33]);
fmpz_set(t[14], t[34]);
fmpz_set(t[15], t[35]);
fmpz_set(t[16], t[36]);
fmpz_set(t[17], t[37]);
fmpz_set(t[18], t[38]);
}
void
unity_zp_ar4(fmpz_t * t)
{
fmpz_add(t[14], t[2], t[2]);
fmpz_add(t[15], t[0], t[1]);
fmpz_add(t[16], t[1], t[14]);
fmpz_add(t[17], t[3], t[4]);
fmpz_add(t[18], t[3], t[14]);
fmpz_add(t[19], t[0], t[0]);
fmpz_add(t[19], t[19], t[14]);
fmpz_add(t[20], t[1], t[3]);
fmpz_add(t[21], t[4], t[4]);
fmpz_add(t[21], t[21], t[14]);
fmpz_add(t[22], t[0], t[3]);
fmpz_add(t[23], t[1], t[4]);
fmpz_mul(t[5], t[0], t[0]);
fmpz_mul(t[24], t[0], t[1]);
fmpz_mul(t[13], t[4], t[4]);
fmpz_mul(t[25], t[3], t[4]);
fmpz_mul(t[26], t[1], t[14]);
fmpz_mul(t[27], t[3], t[14]);
fmpz_add(t[6], t[24], t[24]);
fmpz_add(t[12], t[25], t[25]);
fmpz_mul(t[28], t[15], t[16]);
fmpz_add(t[29], t[24], t[26]);
fmpz_sub(t[7], t[28], t[29]);
fmpz_mul(t[28], t[17], t[18]);
fmpz_add(t[29], t[25], t[27]);
fmpz_sub(t[11], t[28], t[29]);
fmpz_mul(t[28], t[19], t[20]);
fmpz_add(t[29], t[6], t[27]);
fmpz_sub(t[8], t[28], t[29]);
fmpz_mul(t[28], t[20], t[21]);
fmpz_add(t[29], t[12], t[26]);
fmpz_sub(t[10], t[28], t[29]);
fmpz_mul(t[28], t[22], t[23]);
fmpz_add(t[29], t[24], t[25]);
fmpz_sub(t[28], t[28], t[29]);
fmpz_add(t[29], t[28], t[28]);
fmpz_mul(t[28], t[2], t[2]);
fmpz_add(t[9], t[28], t[29]);
}