template XOR() { signal input a; signal input b; signal output out; out <== a + b - 2*a*b; } template AND() { signal input a; signal input b; signal output out; out <== a*b; } template OR() { signal input a; signal input b; signal output out; out <== a + b - a*b; } template NOT() { signal input in; signal output out; out <== 1 + in - 2*in; } template NAND() { signal input a; signal input b; signal output out; out <== 1 - a*b; } template NOR() { signal input a; signal input b; signal output out; out <== a*b + 1 - a - b; } template Xor3(n) { signal input a[n]; signal input b[n]; signal input c[n]; signal output out[n]; component xor1[n] = XOR(); component xor2[n] = XOR(); for (var k=0; k