[gambit-list] Speed improvement of lib/digest.scm

Bradley Lucier lucier at math.purdue.edu
Wed Nov 18 14:12:46 EST 2009


On Wed, 2009-11-18 at 14:02 -0500, Taylor R Campbell wrote:
> Date: Wed, 18 Nov 2009 13:05:41 -0500
>    From: Bradley Lucier <lucier at math.purdue.edu>
> 
>    By the way this slowdown is due to the 16-bit algorithms which are  
>    used to perform the computations without overflowing the fixnums.  The  
>    C version probably does 32-bit operations, which is at least a factor  
>    of 2 faster, and probably more when shifts are involved.
> 
> Common Lisp systems are capable of open-coding modular arithmetic up
> to the machine word width; all you need to do is insert the occasional
> (LOGAND #xFFFF...) into your usual generic arithmetic expressions.
> It's unfortunate that no Scheme system -- to my knowledge -- does
> this.  Instead the extent of any abstraction for `fast integers'
> provided by Scheme systems is fixnums -- to the ridiculous point that
> they have been formalized in the R6RS.

Even this wouldn't be so bad except that the gambit compiler puts only
the first five WORD variables in registers (even locally-declared
variables are put on the stack after the first five) so you get code
like I include at the bottom from digest-update-sha-256.  It would help
to have a 32-bit version for use on 64-bit machines.

Brad

>From digest.i (using -cc-options "-save-temps"):

___L6_digest_23_digest_2d_update_2d_sha_2d_256:
   ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)]))));
   ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-9)]=(((long)((___fp[-(-9)])+(___fp[-(-3)]))));
   ___r1=(((long)((___r1)+(___fp[-(-7)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-9)]))));
   ___fp[-(-9)]=((((___fp[-(-9)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___r1=(((long)((___r1)+(___fp[-(-9)]))));
   ___r1=(((long)(((((long)(65535L))<<2))&(___r1))));
   ___fp[-(-15)]=(((long)((___fp[-(-15)])+(___fp[-(-5)]))));
   ___fp[-(-9)]=(((long)((___fp[-(-8)])+(___fp[-(-4)]))));
   ___fp[-(-8)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-15)]))));
   ___fp[-(-15)]=((((___fp[-(-15)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-15)]=(((long)((___fp[-(-9)])+(___fp[-(-15)]))));
   ___fp[-(-15)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-15)]))));
   ___fp[-(-17)]=(((long)((___fp[-(-7)])+(___fp[-(-17)]))));
   ___fp[-(-16)]=(((long)((___r1)+(___fp[-(-16)]))));
   ___fp[-(-9)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-17)]))));
   ___fp[-(-17)]=((((___fp[-(-17)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-17)]=(((long)((___fp[-(-16)])+(___fp[-(-17)]))));
   ___fp[-(-17)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-17)]))));
   ___fp[-(-16)]=(((long)((___fp[-(-7)])+(___fp[-(-8)]))));
   ___r1=(((long)((___r1)+(___fp[-(-15)]))));
   ___fp[-(-15)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-16)]))));
   ___fp[-(-16)]=((((___fp[-(-16)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___r1=(((long)((___r1)+(___fp[-(-16)]))));
   ___r1=(((long)(((((long)(65535L))<<2))&(___r1))));
   ___fp[-(-16)]=((((___fp[-(-15)])>>(((((long)(2L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-8)]=(((long)((___r1)&((((long)(3L))<<2)))));
   ___fp[-(-8)]=(((___fp[-(-8)])<<(((((long)(14L))<<2))>>2)));
   ___fp[-(-16)]=(((long)((___fp[-(-8)])|(___fp[-(-16)]))));
   ___fp[-(-8)]=((((___r1)>>(((((long)(2L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-15)])&((((long)(3L))<<2)))));
   ___fp[-(-7)]=(((___fp[-(-7)])<<(((((long)(14L))<<2))>>2)));
   ___fp[-(-8)]=(((long)((___fp[-(-7)])|(___fp[-(-8)]))));
   ___fp[-(-7)]=((((___fp[-(-15)])>>(((((long)(13L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-6)]=(((long)((___r1)&((((long)(8191L))<<2)))));
   ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(3L))<<2))>>2)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)]))));
   ___fp[-(-6)]=((((___r1)>>(((((long)(13L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-5)]=(((long)((___fp[-(-15)])&((((long)(8191L))<<2)))));
   ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(3L))<<2))>>2)));
   ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)]))));
   ___fp[-(-16)]=(((long)((___fp[-(-16)])^(___fp[-(-7)]))));
   ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)]))));
   ___fp[-(-7)]=((((___r1)>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-6)]=(((long)((___fp[-(-15)])&((((long)(63L))<<2)))));
   ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)]))));
   ___fp[-(-6)]=((((___fp[-(-15)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-5)]=(((long)((___r1)&((((long)(63L))<<2)))));
   ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)]))));
   ___fp[-(-16)]=(((long)((___fp[-(-16)])^(___fp[-(-7)]))));
   ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)]))));
   ___fp[-(-7)]=((((___fp[-(-9)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-6)]=(((long)((___fp[-(-17)])&((((long)(63L))<<2)))));
   ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)]))));
   ___fp[-(-6)]=((((___fp[-(-17)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-5)]=(((long)((___fp[-(-9)])&((((long)(63L))<<2)))));
   ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)]))));
   ___fp[-(-5)]=((((___fp[-(-9)])>>(((((long)(11L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-4)]=(((long)((___fp[-(-17)])&((((long)(2047L))<<2)))));
   ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(5L))<<2))>>2)));
   ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)]))));
   ___fp[-(-4)]=((((___fp[-(-17)])>>(((((long)(11L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-3)]=(((long)((___fp[-(-9)])&((((long)(2047L))<<2)))));
   ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(5L))<<2))>>2)));
   ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)]))));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)]))));
   ___fp[-(-5)]=((((___fp[-(-17)])>>(((((long)(9L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-4)]=(((long)((___fp[-(-9)])&((((long)(511L))<<2)))));
   ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(7L))<<2))>>2)));
   ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)]))));
   ___fp[-(-4)]=((((___fp[-(-9)])>>(((((long)(9L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-3)]=(((long)((___fp[-(-17)])&((((long)(511L))<<2)))));
   ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(7L))<<2))>>2)));
   ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)]))));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)]))));
   ___fp[-(-5)]=(((long)((___fp[-(-15)])|(___r3))));
   ___fp[-(-4)]=(((long)((___r1)|(___r2))));
   ___fp[-(-5)]=(((long)((___fp[-(-21)])&(___fp[-(-5)]))));
   ___fp[-(-4)]=(((long)((___fp[-(-20)])&(___fp[-(-4)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-15)])&(___r3))));
   ___fp[-(-2)]=(((long)((___r1)&(___r2))));
   ___fp[-(-5)]=(((long)((___fp[-(-5)])|(___fp[-(-3)]))));
   ___fp[-(-4)]=(((long)((___fp[-(-4)])|(___fp[-(-2)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-14)])^(___fp[-(-13)]))));
   ___fp[-(-2)]=(((long)((___r4)^(___fp[-(-12)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-9)])&(___fp[-(-3)]))));
   ___fp[-(-2)]=(((long)((___fp[-(-17)])&(___fp[-(-2)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-13)])^(___fp[-(-3)]))));
   ___fp[-(-2)]=(((long)((___fp[-(-12)])^(___fp[-(-2)]))));
   ___fp[-(-1)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(4L))<<2))<<(3 -2))));
   ___fp[-(0)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(5L))<<2))<<(3 -2))));
   ___fp[-(-7)]=(((long)((___fp[-(-1)])+(___fp[-(-7)]))));
   ___fp[-(-6)]=(((long)((___fp[-(0)])+(___fp[-(-6)]))));
   ___fp[-(-1)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-7)]=((((___fp[-(-7)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])+(___fp[-(-7)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-3)])+(___fp[-(-1)]))));
   ___fp[-(-7)]=(((long)((___fp[-(-2)])+(___fp[-(-7)]))));
   ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)]))));
   ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-3)])+((((long)(64463L))<<2)))));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])+((((long)(46528L))<<2)))));
   ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)]))));
   ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-11)]=(((long)((___fp[-(-11)])+(___fp[-(-3)]))));
   ___fp[-(-10)]=(((long)((___fp[-(-10)])+(___fp[-(-7)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-11)]))));
   ___fp[-(-11)]=((((___fp[-(-11)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-11)]=(((long)((___fp[-(-10)])+(___fp[-(-11)]))));
   ___fp[-(-11)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-11)]))));
   ___fp[-(-16)]=(((long)((___fp[-(-16)])+(___fp[-(-5)]))));
   ___fp[-(-10)]=(((long)((___fp[-(-8)])+(___fp[-(-4)]))));
   ___fp[-(-8)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-16)]))));
   ___fp[-(-16)]=((((___fp[-(-16)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-16)]=(((long)((___fp[-(-10)])+(___fp[-(-16)]))));
   ___fp[-(-16)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-16)]))));
   ___fp[-(-19)]=(((long)((___fp[-(-7)])+(___fp[-(-19)]))));
   ___fp[-(-18)]=(((long)((___fp[-(-11)])+(___fp[-(-18)]))));
   ___fp[-(-10)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-19)]))));
   ___fp[-(-19)]=((((___fp[-(-19)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-19)]=(((long)((___fp[-(-18)])+(___fp[-(-19)]))));
   ___fp[-(-19)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-19)]))));
   ___fp[-(-18)]=(((long)((___fp[-(-7)])+(___fp[-(-8)]))));
   ___fp[-(-16)]=(((long)((___fp[-(-11)])+(___fp[-(-16)]))));
   ___fp[-(-11)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-18)]))));
   ___fp[-(-18)]=((((___fp[-(-18)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-18)]=(((long)((___fp[-(-16)])+(___fp[-(-18)]))));
   ___fp[-(-18)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-18)]))));
   ___fp[-(-16)]=((((___fp[-(-11)])>>(((((long)(2L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-8)]=(((long)((___fp[-(-18)])&((((long)(3L))<<2)))));
   ___fp[-(-8)]=(((___fp[-(-8)])<<(((((long)(14L))<<2))>>2)));
   ___fp[-(-16)]=(((long)((___fp[-(-8)])|(___fp[-(-16)]))));
   ___fp[-(-8)]=((((___fp[-(-18)])>>(((((long)(2L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-11)])&((((long)(3L))<<2)))));
   ___fp[-(-7)]=(((___fp[-(-7)])<<(((((long)(14L))<<2))>>2)));
   ___fp[-(-8)]=(((long)((___fp[-(-7)])|(___fp[-(-8)]))));
   ___fp[-(-7)]=((((___fp[-(-11)])>>(((((long)(13L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-6)]=(((long)((___fp[-(-18)])&((((long)(8191L))<<2)))));
   ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(3L))<<2))>>2)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)]))));
   ___fp[-(-6)]=((((___fp[-(-18)])>>(((((long)(13L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-5)]=(((long)((___fp[-(-11)])&((((long)(8191L))<<2)))));
   ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(3L))<<2))>>2)));
   ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)]))));
   ___fp[-(-16)]=(((long)((___fp[-(-16)])^(___fp[-(-7)]))));
   ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)]))));
   ___fp[-(-7)]=((((___fp[-(-18)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-6)]=(((long)((___fp[-(-11)])&((((long)(63L))<<2)))));
   ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)]))));
   ___fp[-(-6)]=((((___fp[-(-11)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-5)]=(((long)((___fp[-(-18)])&((((long)(63L))<<2)))));
   ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)]))));
   ___fp[-(-16)]=(((long)((___fp[-(-16)])^(___fp[-(-7)]))));
   ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)]))));
   ___fp[-(-7)]=((((___fp[-(-10)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-6)]=(((long)((___fp[-(-19)])&((((long)(63L))<<2)))));
   ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)]))));
   ___fp[-(-6)]=((((___fp[-(-19)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-5)]=(((long)((___fp[-(-10)])&((((long)(63L))<<2)))));
   ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)]))));
   ___fp[-(-5)]=((((___fp[-(-10)])>>(((((long)(11L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-4)]=(((long)((___fp[-(-19)])&((((long)(2047L))<<2)))));
   ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(5L))<<2))>>2)));
   ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)]))));
   ___fp[-(-4)]=((((___fp[-(-19)])>>(((((long)(11L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-3)]=(((long)((___fp[-(-10)])&((((long)(2047L))<<2)))));
   ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(5L))<<2))>>2)));
   ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)]))));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)]))));
   ___fp[-(-5)]=((((___fp[-(-19)])>>(((((long)(9L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-4)]=(((long)((___fp[-(-10)])&((((long)(511L))<<2)))));
   ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(7L))<<2))>>2)));
   ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)]))));
   ___fp[-(-4)]=((((___fp[-(-10)])>>(((((long)(9L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-3)]=(((long)((___fp[-(-19)])&((((long)(511L))<<2)))));
   ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(7L))<<2))>>2)));
   ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)]))));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)]))));
   ___fp[-(-5)]=(((long)((___fp[-(-11)])|(___fp[-(-15)]))));
   ___fp[-(-4)]=(((long)((___fp[-(-18)])|(___r1))));
   ___fp[-(-5)]=(((long)((___r3)&(___fp[-(-5)]))));
   ___fp[-(-4)]=(((long)((___r2)&(___fp[-(-4)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-11)])&(___fp[-(-15)]))));
   ___fp[-(-2)]=(((long)((___fp[-(-18)])&(___r1))));
   ___fp[-(-5)]=(((long)((___fp[-(-5)])|(___fp[-(-3)]))));
   ___fp[-(-4)]=(((long)((___fp[-(-4)])|(___fp[-(-2)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-9)])^(___fp[-(-14)]))));
   ___fp[-(-2)]=(((long)((___fp[-(-17)])^(___r4))));
   ___fp[-(-3)]=(((long)((___fp[-(-10)])&(___fp[-(-3)]))));
   ___fp[-(-2)]=(((long)((___fp[-(-19)])&(___fp[-(-2)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-14)])^(___fp[-(-3)]))));
   ___fp[-(-2)]=(((long)((___r4)^(___fp[-(-2)]))));
   ___fp[-(-1)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(6L))<<2))<<(3 -2))));
   ___fp[-(0)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(7L))<<2))<<(3 -2))));
   ___fp[-(-7)]=(((long)((___fp[-(-1)])+(___fp[-(-7)]))));
   ___fp[-(-6)]=(((long)((___fp[-(0)])+(___fp[-(-6)]))));
   ___fp[-(-1)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-7)]=((((___fp[-(-7)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])+(___fp[-(-7)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-3)])+(___fp[-(-1)]))));
   ___fp[-(-7)]=(((long)((___fp[-(-2)])+(___fp[-(-7)]))));
   ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)]))));
   ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-3)])+((((long)(56229L))<<2)))));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])+((((long)(59829L))<<2)))));
   ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)]))));
   ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-13)]=(((long)((___fp[-(-13)])+(___fp[-(-3)]))));
   ___fp[-(-12)]=(((long)((___fp[-(-12)])+(___fp[-(-7)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-13)]))));
   ___fp[-(-13)]=((((___fp[-(-13)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-13)]=(((long)((___fp[-(-12)])+(___fp[-(-13)]))));
   ___fp[-(-13)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-13)]))));
   ___fp[-(-16)]=(((long)((___fp[-(-16)])+(___fp[-(-5)]))));
   ___fp[-(-12)]=(((long)((___fp[-(-8)])+(___fp[-(-4)]))));
   ___fp[-(-8)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-16)]))));
   ___fp[-(-16)]=((((___fp[-(-16)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-16)]=(((long)((___fp[-(-12)])+(___fp[-(-16)]))));
   ___fp[-(-16)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-16)]))));
   ___fp[-(-21)]=(((long)((___fp[-(-7)])+(___fp[-(-21)]))));
   ___fp[-(-20)]=(((long)((___fp[-(-13)])+(___fp[-(-20)]))));
   ___fp[-(-12)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-21)]))));
   ___fp[-(-21)]=((((___fp[-(-21)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-21)]=(((long)((___fp[-(-20)])+(___fp[-(-21)]))));
   ___fp[-(-21)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-21)]))));
   ___fp[-(-20)]=(((long)((___fp[-(-7)])+(___fp[-(-8)]))));
   ___fp[-(-16)]=(((long)((___fp[-(-13)])+(___fp[-(-16)]))));
   ___fp[-(-13)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-20)]))));
   ___fp[-(-20)]=((((___fp[-(-20)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-20)]=(((long)((___fp[-(-16)])+(___fp[-(-20)]))));
   ___fp[-(-20)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-20)]))));
   ___fp[-(-16)]=((((___fp[-(-13)])>>(((((long)(2L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-8)]=(((long)((___fp[-(-20)])&((((long)(3L))<<2)))));
   ___fp[-(-8)]=(((___fp[-(-8)])<<(((((long)(14L))<<2))>>2)));
   ___fp[-(-16)]=(((long)((___fp[-(-8)])|(___fp[-(-16)]))));
   ___fp[-(-8)]=((((___fp[-(-20)])>>(((((long)(2L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-13)])&((((long)(3L))<<2)))));
   ___fp[-(-7)]=(((___fp[-(-7)])<<(((((long)(14L))<<2))>>2)));
   ___fp[-(-8)]=(((long)((___fp[-(-7)])|(___fp[-(-8)]))));
   ___fp[-(-7)]=((((___fp[-(-13)])>>(((((long)(13L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-6)]=(((long)((___fp[-(-20)])&((((long)(8191L))<<2)))));
   ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(3L))<<2))>>2)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)]))));
   ___fp[-(-6)]=((((___fp[-(-20)])>>(((((long)(13L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-5)]=(((long)((___fp[-(-13)])&((((long)(8191L))<<2)))));
   ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(3L))<<2))>>2)));
   ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)]))));
   ___fp[-(-16)]=(((long)((___fp[-(-16)])^(___fp[-(-7)]))));
   ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)]))));
   ___fp[-(-7)]=((((___fp[-(-20)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-6)]=(((long)((___fp[-(-13)])&((((long)(63L))<<2)))));
   ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)]))));
   ___fp[-(-6)]=((((___fp[-(-13)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-5)]=(((long)((___fp[-(-20)])&((((long)(63L))<<2)))));
   ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)]))));
   ___fp[-(-16)]=(((long)((___fp[-(-16)])^(___fp[-(-7)]))));
   ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)]))));
   ___fp[-(-7)]=((((___fp[-(-12)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-6)]=(((long)((___fp[-(-21)])&((((long)(63L))<<2)))));
   ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)]))));
   ___fp[-(-6)]=((((___fp[-(-21)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-5)]=(((long)((___fp[-(-12)])&((((long)(63L))<<2)))));
   ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)]))));
   ___fp[-(-5)]=((((___fp[-(-12)])>>(((((long)(11L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-4)]=(((long)((___fp[-(-21)])&((((long)(2047L))<<2)))));
   ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(5L))<<2))>>2)));
   ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)]))));
   ___fp[-(-4)]=((((___fp[-(-21)])>>(((((long)(11L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-3)]=(((long)((___fp[-(-12)])&((((long)(2047L))<<2)))));
   ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(5L))<<2))>>2)));
   ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)]))));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)]))));
   ___fp[-(-5)]=((((___fp[-(-21)])>>(((((long)(9L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-4)]=(((long)((___fp[-(-12)])&((((long)(511L))<<2)))));
   ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(7L))<<2))>>2)));
   ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)]))));
   ___fp[-(-4)]=((((___fp[-(-12)])>>(((((long)(9L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-3)]=(((long)((___fp[-(-21)])&((((long)(511L))<<2)))));
   ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(7L))<<2))>>2)));
   ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)]))));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)]))));
   ___fp[-(-5)]=(((long)((___fp[-(-13)])|(___fp[-(-11)]))));
   ___fp[-(-4)]=(((long)((___fp[-(-20)])|(___fp[-(-18)]))));
   ___fp[-(-5)]=(((long)((___fp[-(-15)])&(___fp[-(-5)]))));
   ___fp[-(-4)]=(((long)((___r1)&(___fp[-(-4)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-13)])&(___fp[-(-11)]))));
   ___fp[-(-2)]=(((long)((___fp[-(-20)])&(___fp[-(-18)]))));
   ___fp[-(-5)]=(((long)((___fp[-(-5)])|(___fp[-(-3)]))));
   ___fp[-(-4)]=(((long)((___fp[-(-4)])|(___fp[-(-2)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-10)])^(___fp[-(-9)]))));
   ___fp[-(-2)]=(((long)((___fp[-(-19)])^(___fp[-(-17)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-12)])&(___fp[-(-3)]))));
   ___fp[-(-2)]=(((long)((___fp[-(-21)])&(___fp[-(-2)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-9)])^(___fp[-(-3)]))));
   ___fp[-(-2)]=(((long)((___fp[-(-17)])^(___fp[-(-2)]))));
   ___fp[-(-1)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(8L))<<2))<<(3 -2))));
   ___fp[-(0)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(9L))<<2))<<(3 -2))));
   ___fp[-(-7)]=(((long)((___fp[-(-1)])+(___fp[-(-7)]))));
   ___fp[-(-6)]=(((long)((___fp[-(0)])+(___fp[-(-6)]))));
   ___fp[-(-1)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-7)]=((((___fp[-(-7)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])+(___fp[-(-7)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-3)])+(___fp[-(-1)]))));
   ___fp[-(-7)]=(((long)((___fp[-(-2)])+(___fp[-(-7)]))));
   ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)]))));
   ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-3)])+((((long)(49755L))<<2)))));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])+((((long)(14678L))<<2)))));
   ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)]))));
   ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-14)]=(((long)((___fp[-(-14)])+(___fp[-(-3)]))));
   ___r4=(((long)((___r4)+(___fp[-(-7)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-14)]))));
   ___fp[-(-14)]=((((___fp[-(-14)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___r4=(((long)((___r4)+(___fp[-(-14)]))));
   ___r4=(((long)(((((long)(65535L))<<2))&(___r4))));
   ___fp[-(-16)]=(((long)((___fp[-(-16)])+(___fp[-(-5)]))));
   ___fp[-(-14)]=(((long)((___fp[-(-8)])+(___fp[-(-4)]))));
   ___fp[-(-8)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-16)]))));
   ___fp[-(-16)]=((((___fp[-(-16)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-16)]=(((long)((___fp[-(-14)])+(___fp[-(-16)]))));
   ___fp[-(-16)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-16)]))));
   ___r3=(((long)((___fp[-(-7)])+(___r3))));
   ___r2=(((long)((___r4)+(___r2))));
   ___fp[-(-14)]=(((long)(((((long)(65535L))<<2))&(___r3))));
   ___r3=((((___r3)>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___r2=(((long)((___r2)+(___r3))));
   ___r2=(((long)(((((long)(65535L))<<2))&(___r2))));
   ___r3=(((long)((___fp[-(-7)])+(___fp[-(-8)]))));
   ___r4=(((long)((___r4)+(___fp[-(-16)]))));
   ___fp[-(-16)]=(((long)(((((long)(65535L))<<2))&(___r3))));
   ___r3=((((___r3)>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___r3=(((long)((___r4)+(___r3))));
   ___r3=(((long)(((((long)(65535L))<<2))&(___r3))));
   ___r4=((((___fp[-(-16)])>>(((((long)(2L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-8)]=(((long)((___r3)&((((long)(3L))<<2)))));
   ___fp[-(-8)]=(((___fp[-(-8)])<<(((((long)(14L))<<2))>>2)));
   ___r4=(((long)((___fp[-(-8)])|(___r4))));
   ___fp[-(-8)]=((((___r3)>>(((((long)(2L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-16)])&((((long)(3L))<<2)))));
   ___fp[-(-7)]=(((___fp[-(-7)])<<(((((long)(14L))<<2))>>2)));
   ___fp[-(-8)]=(((long)((___fp[-(-7)])|(___fp[-(-8)]))));
   ___fp[-(-7)]=((((___fp[-(-16)])>>(((((long)(13L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-6)]=(((long)((___r3)&((((long)(8191L))<<2)))));
   ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(3L))<<2))>>2)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)]))));
   ___fp[-(-6)]=((((___r3)>>(((((long)(13L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-5)]=(((long)((___fp[-(-16)])&((((long)(8191L))<<2)))));
   ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(3L))<<2))>>2)));
   ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)]))));
   ___r4=(((long)((___r4)^(___fp[-(-7)]))));
   ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)]))));
   ___fp[-(-7)]=((((___r3)>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-6)]=(((long)((___fp[-(-16)])&((((long)(63L))<<2)))));
   ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)]))));
   ___fp[-(-6)]=((((___fp[-(-16)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-5)]=(((long)((___r3)&((((long)(63L))<<2)))));
   ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)]))));
   ___r4=(((long)((___r4)^(___fp[-(-7)]))));
   ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)]))));
   ___fp[-(-7)]=((((___fp[-(-14)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-6)]=(((long)((___r2)&((((long)(63L))<<2)))));
   ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)]))));
   ___fp[-(-6)]=((((___r2)>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-5)]=(((long)((___fp[-(-14)])&((((long)(63L))<<2)))));
   ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)]))));
   ___fp[-(-5)]=((((___fp[-(-14)])>>(((((long)(11L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-4)]=(((long)((___r2)&((((long)(2047L))<<2)))));
   ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(5L))<<2))>>2)));
   ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)]))));
   ___fp[-(-4)]=((((___r2)>>(((((long)(11L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-3)]=(((long)((___fp[-(-14)])&((((long)(2047L))<<2)))));
   ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(5L))<<2))>>2)));
   ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)]))));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)]))));
   ___fp[-(-5)]=((((___r2)>>(((((long)(9L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-4)]=(((long)((___fp[-(-14)])&((((long)(511L))<<2)))));
   ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(7L))<<2))>>2)));
   ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)]))));
   ___fp[-(-4)]=((((___fp[-(-14)])>>(((((long)(9L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-3)]=(((long)((___r2)&((((long)(511L))<<2)))));
   ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(7L))<<2))>>2)));
   ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)]))));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)]))));
   ___fp[-(-5)]=(((long)((___fp[-(-16)])|(___fp[-(-13)]))));
   ___fp[-(-4)]=(((long)((___r3)|(___fp[-(-20)]))));
   ___fp[-(-5)]=(((long)((___fp[-(-11)])&(___fp[-(-5)]))));
   ___fp[-(-4)]=(((long)((___fp[-(-18)])&(___fp[-(-4)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-16)])&(___fp[-(-13)]))));
   ___fp[-(-2)]=(((long)((___r3)&(___fp[-(-20)]))));
   ___fp[-(-5)]=(((long)((___fp[-(-5)])|(___fp[-(-3)]))));
   ___fp[-(-4)]=(((long)((___fp[-(-4)])|(___fp[-(-2)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-12)])^(___fp[-(-10)]))));
   ___fp[-(-2)]=(((long)((___fp[-(-21)])^(___fp[-(-19)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-14)])&(___fp[-(-3)]))));
   ___fp[-(-2)]=(((long)((___r2)&(___fp[-(-2)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-10)])^(___fp[-(-3)]))));
   ___fp[-(-2)]=(((long)((___fp[-(-19)])^(___fp[-(-2)]))));
   ___fp[-(-1)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(10L))<<2))<<(3 -2))));
   ___fp[-(0)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(11L))<<2))<<(3 -2))));
   ___fp[-(-7)]=(((long)((___fp[-(-1)])+(___fp[-(-7)]))));
   ___fp[-(-6)]=(((long)((___fp[-(0)])+(___fp[-(-6)]))));
   ___fp[-(-1)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-7)]=((((___fp[-(-7)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])+(___fp[-(-7)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-3)])+(___fp[-(-1)]))));
   ___fp[-(-7)]=(((long)((___fp[-(-2)])+(___fp[-(-7)]))));
   ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)]))));
   ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-3)])+((((long)(4593L))<<2)))));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])+((((long)(23025L))<<2)))));
   ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)]))));
   ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-9)]=(((long)((___fp[-(-9)])+(___fp[-(-3)]))));
   ___fp[-(-17)]=(((long)((___fp[-(-17)])+(___fp[-(-7)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-9)]))));
   ___fp[-(-9)]=((((___fp[-(-9)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-17)]=(((long)((___fp[-(-17)])+(___fp[-(-9)]))));
   ___fp[-(-17)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-17)]))));
   ___r4=(((long)((___r4)+(___fp[-(-5)]))));
   ___fp[-(-9)]=(((long)((___fp[-(-8)])+(___fp[-(-4)]))));
   ___fp[-(-8)]=(((long)(((((long)(65535L))<<2))&(___r4))));
   ___r4=((((___r4)>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___r4=(((long)((___fp[-(-9)])+(___r4))));
   ___r4=(((long)(((((long)(65535L))<<2))&(___r4))));
   ___fp[-(-15)]=(((long)((___fp[-(-7)])+(___fp[-(-15)]))));
   ___r1=(((long)((___fp[-(-17)])+(___r1))));
   ___fp[-(-9)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-15)]))));
   ___fp[-(-15)]=((((___fp[-(-15)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___r1=(((long)((___r1)+(___fp[-(-15)]))));
   ___r1=(((long)(((((long)(65535L))<<2))&(___r1))));
   ___fp[-(-15)]=(((long)((___fp[-(-7)])+(___fp[-(-8)]))));
   ___r4=(((long)((___fp[-(-17)])+(___r4))));
   ___fp[-(-17)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-15)]))));
   ___fp[-(-15)]=((((___fp[-(-15)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___r4=(((long)((___r4)+(___fp[-(-15)]))));
   ___r4=(((long)(((((long)(65535L))<<2))&(___r4))));
   ___fp[-(-15)]=((((___fp[-(-17)])>>(((((long)(2L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-8)]=(((long)((___r4)&((((long)(3L))<<2)))));
   ___fp[-(-8)]=(((___fp[-(-8)])<<(((((long)(14L))<<2))>>2)));
   ___fp[-(-15)]=(((long)((___fp[-(-8)])|(___fp[-(-15)]))));
   ___fp[-(-8)]=((((___r4)>>(((((long)(2L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-17)])&((((long)(3L))<<2)))));
   ___fp[-(-7)]=(((___fp[-(-7)])<<(((((long)(14L))<<2))>>2)));
   ___fp[-(-8)]=(((long)((___fp[-(-7)])|(___fp[-(-8)]))));
   ___fp[-(-7)]=((((___fp[-(-17)])>>(((((long)(13L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-6)]=(((long)((___r4)&((((long)(8191L))<<2)))));
   ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(3L))<<2))>>2)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)]))));
   ___fp[-(-6)]=((((___r4)>>(((((long)(13L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-5)]=(((long)((___fp[-(-17)])&((((long)(8191L))<<2)))));
   ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(3L))<<2))>>2)));
   ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)]))));
   ___fp[-(-15)]=(((long)((___fp[-(-15)])^(___fp[-(-7)]))));
   ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)]))));
   ___fp[-(-7)]=((((___r4)>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-6)]=(((long)((___fp[-(-17)])&((((long)(63L))<<2)))));
   ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)]))));
   ___fp[-(-6)]=((((___fp[-(-17)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-5)]=(((long)((___r4)&((((long)(63L))<<2)))));
   ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)]))));
   ___fp[-(-15)]=(((long)((___fp[-(-15)])^(___fp[-(-7)]))));
   ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)]))));
   ___fp[-(-7)]=((((___fp[-(-9)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-6)]=(((long)((___r1)&((((long)(63L))<<2)))));
   ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)]))));
   ___fp[-(-6)]=((((___r1)>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-5)]=(((long)((___fp[-(-9)])&((((long)(63L))<<2)))));
   ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)]))));
   ___fp[-(-5)]=((((___fp[-(-9)])>>(((((long)(11L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-4)]=(((long)((___r1)&((((long)(2047L))<<2)))));
   ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(5L))<<2))>>2)));
   ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)]))));
   ___fp[-(-4)]=((((___r1)>>(((((long)(11L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-3)]=(((long)((___fp[-(-9)])&((((long)(2047L))<<2)))));
   ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(5L))<<2))>>2)));
   ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)]))));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)]))));
   ___fp[-(-5)]=((((___r1)>>(((((long)(9L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-4)]=(((long)((___fp[-(-9)])&((((long)(511L))<<2)))));
   ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(7L))<<2))>>2)));
   ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)]))));
   ___fp[-(-4)]=((((___fp[-(-9)])>>(((((long)(9L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-3)]=(((long)((___r1)&((((long)(511L))<<2)))));
   ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(7L))<<2))>>2)));
   ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)]))));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)]))));
   ___fp[-(-5)]=(((long)((___fp[-(-17)])|(___fp[-(-16)]))));
   ___fp[-(-4)]=(((long)((___r4)|(___r3))));
   ___fp[-(-5)]=(((long)((___fp[-(-13)])&(___fp[-(-5)]))));
   ___fp[-(-4)]=(((long)((___fp[-(-20)])&(___fp[-(-4)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-17)])&(___fp[-(-16)]))));
   ___fp[-(-2)]=(((long)((___r4)&(___r3))));
   ___fp[-(-5)]=(((long)((___fp[-(-5)])|(___fp[-(-3)]))));
   ___fp[-(-4)]=(((long)((___fp[-(-4)])|(___fp[-(-2)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-14)])^(___fp[-(-12)]))));
   ___fp[-(-2)]=(((long)((___r2)^(___fp[-(-21)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-9)])&(___fp[-(-3)]))));
   ___fp[-(-2)]=(((long)((___r1)&(___fp[-(-2)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-12)])^(___fp[-(-3)]))));
   ___fp[-(-2)]=(((long)((___fp[-(-21)])^(___fp[-(-2)]))));
   ___fp[-(-1)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(12L))<<2))<<(3 -2))));
   ___fp[-(0)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(13L))<<2))<<(3 -2))));
   ___fp[-(-7)]=(((long)((___fp[-(-1)])+(___fp[-(-7)]))));
   ___fp[-(-6)]=(((long)((___fp[-(0)])+(___fp[-(-6)]))));
   ___fp[-(-1)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-7)]=((((___fp[-(-7)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])+(___fp[-(-7)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-3)])+(___fp[-(-1)]))));
   ___fp[-(-7)]=(((long)((___fp[-(-2)])+(___fp[-(-7)]))));
   ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)]))));
   ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-3)])+((((long)(33444L))<<2)))));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])+((((long)(37439L))<<2)))));
   ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)]))));
   ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-10)]=(((long)((___fp[-(-10)])+(___fp[-(-3)]))));
   ___fp[-(-19)]=(((long)((___fp[-(-19)])+(___fp[-(-7)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-10)]))));
   ___fp[-(-10)]=((((___fp[-(-10)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-19)]=(((long)((___fp[-(-19)])+(___fp[-(-10)]))));
   ___fp[-(-19)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-19)]))));
   ___fp[-(-15)]=(((long)((___fp[-(-15)])+(___fp[-(-5)]))));
   ___fp[-(-10)]=(((long)((___fp[-(-8)])+(___fp[-(-4)]))));
   ___fp[-(-8)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-15)]))));
   ___fp[-(-15)]=((((___fp[-(-15)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-15)]=(((long)((___fp[-(-10)])+(___fp[-(-15)]))));
   ___fp[-(-15)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-15)]))));
   ___fp[-(-11)]=(((long)((___fp[-(-7)])+(___fp[-(-11)]))));
   ___fp[-(-18)]=(((long)((___fp[-(-19)])+(___fp[-(-18)]))));
   ___fp[-(-10)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-11)]))));
   ___fp[-(-11)]=((((___fp[-(-11)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-18)]=(((long)((___fp[-(-18)])+(___fp[-(-11)]))));
   ___fp[-(-18)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-18)]))));
   ___fp[-(-11)]=(((long)((___fp[-(-7)])+(___fp[-(-8)]))));
   ___fp[-(-19)]=(((long)((___fp[-(-19)])+(___fp[-(-15)]))));
   ___fp[-(-15)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-11)]))));
   ___fp[-(-11)]=((((___fp[-(-11)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-19)]=(((long)((___fp[-(-19)])+(___fp[-(-11)]))));
   ___fp[-(-19)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-19)]))));
   ___fp[-(-11)]=((((___fp[-(-15)])>>(((((long)(2L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-8)]=(((long)((___fp[-(-19)])&((((long)(3L))<<2)))));
   ___fp[-(-8)]=(((___fp[-(-8)])<<(((((long)(14L))<<2))>>2)));
   ___fp[-(-11)]=(((long)((___fp[-(-8)])|(___fp[-(-11)]))));
   ___fp[-(-8)]=((((___fp[-(-19)])>>(((((long)(2L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-15)])&((((long)(3L))<<2)))));
   ___fp[-(-7)]=(((___fp[-(-7)])<<(((((long)(14L))<<2))>>2)));
   ___fp[-(-8)]=(((long)((___fp[-(-7)])|(___fp[-(-8)]))));
   ___fp[-(-7)]=((((___fp[-(-15)])>>(((((long)(13L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-6)]=(((long)((___fp[-(-19)])&((((long)(8191L))<<2)))));
   ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(3L))<<2))>>2)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)]))));
   ___fp[-(-6)]=((((___fp[-(-19)])>>(((((long)(13L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-5)]=(((long)((___fp[-(-15)])&((((long)(8191L))<<2)))));
   ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(3L))<<2))>>2)));
   ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)]))));
   ___fp[-(-11)]=(((long)((___fp[-(-11)])^(___fp[-(-7)]))));
   ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)]))));
   ___fp[-(-7)]=((((___fp[-(-19)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-6)]=(((long)((___fp[-(-15)])&((((long)(63L))<<2)))));
   ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)]))));
   ___fp[-(-6)]=((((___fp[-(-15)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-5)]=(((long)((___fp[-(-19)])&((((long)(63L))<<2)))));
   ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)]))));
   ___fp[-(-11)]=(((long)((___fp[-(-11)])^(___fp[-(-7)]))));
   ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)]))));
   ___fp[-(-7)]=((((___fp[-(-10)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-6)]=(((long)((___fp[-(-18)])&((((long)(63L))<<2)))));
   ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)]))));
   ___fp[-(-6)]=((((___fp[-(-18)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-5)]=(((long)((___fp[-(-10)])&((((long)(63L))<<2)))));
   ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2)));
   ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)]))));
   ___fp[-(-5)]=((((___fp[-(-10)])>>(((((long)(11L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-4)]=(((long)((___fp[-(-18)])&((((long)(2047L))<<2)))));
   ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(5L))<<2))>>2)));
   ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)]))));
   ___fp[-(-4)]=((((___fp[-(-18)])>>(((((long)(11L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-3)]=(((long)((___fp[-(-10)])&((((long)(2047L))<<2)))));
   ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(5L))<<2))>>2)));
   ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)]))));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)]))));
   ___fp[-(-5)]=((((___fp[-(-18)])>>(((((long)(9L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-4)]=(((long)((___fp[-(-10)])&((((long)(511L))<<2)))));
   ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(7L))<<2))>>2)));
   ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)]))));
   ___fp[-(-4)]=((((___fp[-(-10)])>>(((((long)(9L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-3)]=(((long)((___fp[-(-18)])&((((long)(511L))<<2)))));
   ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(7L))<<2))>>2)));
   ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)]))));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)]))));
   ___fp[-(-5)]=(((long)((___fp[-(-15)])|(___fp[-(-17)]))));
   ___fp[-(-4)]=(((long)((___fp[-(-19)])|(___r4))));
   ___fp[-(-5)]=(((long)((___fp[-(-16)])&(___fp[-(-5)]))));
   ___fp[-(-4)]=(((long)((___r3)&(___fp[-(-4)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-15)])&(___fp[-(-17)]))));
   ___fp[-(-2)]=(((long)((___fp[-(-19)])&(___r4))));
   ___fp[-(-5)]=(((long)((___fp[-(-5)])|(___fp[-(-3)]))));
   ___fp[-(-4)]=(((long)((___fp[-(-4)])|(___fp[-(-2)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-9)])^(___fp[-(-14)]))));
   ___fp[-(-2)]=(((long)((___r1)^(___r2))));
   ___fp[-(-3)]=(((long)((___fp[-(-10)])&(___fp[-(-3)]))));
   ___fp[-(-2)]=(((long)((___fp[-(-18)])&(___fp[-(-2)]))));
   ___fp[-(-3)]=(((long)((___fp[-(-14)])^(___fp[-(-3)]))));
   ___fp[-(-2)]=(((long)((___r2)^(___fp[-(-2)]))));
   ___fp[-(-1)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(14L))<<2))<<(3 -2))));
   ___fp[-(0)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(15L))<<2))<<(3 -2))));
   ___fp[-(-7)]=(((long)((___fp[-(-1)])+(___fp[-(-7)]))));
   ___fp[-(-6)]=(((long)((___fp[-(0)])+(___fp[-(-6)]))));
   ___fp[-(-1)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-7)]=((((___fp[-(-7)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-6)])+(___fp[-(-7)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-3)])+(___fp[-(-1)]))));
   ___fp[-(-7)]=(((long)((___fp[-(-2)])+(___fp[-(-7)]))));
   ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)]))));
   ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-6)]=(((long)((___fp[-(-3)])+((((long)(24277L))<<2)))));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])+((((long)(43804L))<<2)))));
   ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)]))));
   ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)]))));
   ___fp[-(-12)]=(((long)((___fp[-(-12)])+(___fp[-(-3)]))));
   ___fp[-(-21)]=(((long)((___fp[-(-21)])+(___fp[-(-7)]))));
   ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-12)]))));
   ___fp[-(-12)]=((((___fp[-(-12)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-21)]=(((long)((___fp[-(-21)])+(___fp[-(-12)]))));
   ___fp[-(-21)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-21)]))));
   ___fp[-(-12)]=(((long)((___fp[-(-11)])+(___fp[-(-5)]))));
   ___fp[-(-11)]=(((long)((___fp[-(-8)])+(___fp[-(-4)]))));
   ___fp[-(-8)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-12)]))));
   ___fp[-(-12)]=((((___fp[-(-12)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-12)]=(((long)((___fp[-(-11)])+(___fp[-(-12)]))));
   ___fp[-(-12)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-12)]))));
   ___fp[-(-13)]=(((long)((___fp[-(-7)])+(___fp[-(-13)]))));
   ___fp[-(-20)]=(((long)((___fp[-(-21)])+(___fp[-(-20)]))));
   ___fp[-(-11)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-13)]))));
   ___fp[-(-13)]=((((___fp[-(-13)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-20)]=(((long)((___fp[-(-20)])+(___fp[-(-13)]))));
   ___fp[-(-20)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-20)]))));
   ___fp[-(-13)]=(((long)((___fp[-(-7)])+(___fp[-(-8)]))));
   ___fp[-(-21)]=(((long)((___fp[-(-21)])+(___fp[-(-12)]))));
   ___fp[-(-12)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-13)]))));
   ___fp[-(-13)]=((((___fp[-(-13)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1)));
   ___fp[-(-21)]=(((long)((___fp[-(-21)])+(___fp[-(-13)]))));
   ___fp[-(-21)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-21)]))));
   ___fp[-(-13)]=(___fp[-(-21)]);
   ___fp[-(-21)]=(___fp[-(-12)]);
   ___fp[-(-12)]=(___fp[-(-20)]);
   ___fp[-(-20)]=(___fp[-(-13)]);
   ___fp[-(-13)]=(___fp[-(-19)]);
   ___fp[-(-19)]=(___fp[-(-15)]);
   ___fp[-(-15)]=(___fp[-(-18)]);
   ___fp[-(-18)]=(___fp[-(-13)]);
   ___fp[-(-13)]=(___fp[-(-16)]);
   ___fp[-(-16)]=(___r4);
   ___fp[-(-8)]=(___fp[-(-15)]);
   ___fp[-(-15)]=(___fp[-(-13)]);
   ___fp[-(-13)]=(___fp[-(-14)]);
   ___fp[-(-14)]=(___r3);
   ___fp[-(-7)]=(___fp[-(-13)]);
   ___fp[-(-13)]=(___fp[-(-11)]);
   ___fp[-(-11)]=(___fp[-(-10)]);
   ___fp[-(-10)]=(___fp[-(-8)]);
   ___r3=(___r2);
   ___r2=(___fp[-(-7)]);
   ___fp-=(-9);





More information about the Gambit-list mailing list