// New rng from existing rng
 public Sha1Generator(final Sha1Generator parent, final int spawnnumber) {
   final byte[] seedstate = new byte[4];
   seedstate[0] = (byte) (LOWBYTE & (spawnnumber >>> 24));
   seedstate[1] = (byte) (LOWBYTE & (spawnnumber >>> 16));
   seedstate[2] = (byte) (LOWBYTE & (spawnnumber >>> 8));
   seedstate[3] = (byte) (LOWBYTE & (spawnnumber));
   final Sha1Compiler sha1 = new Sha1Compiler();
   sha1.hash(parent.state, 20);
   sha1.hash(seedstate, 4);
   sha1.digest(state);
 }
 // Return next random number
 public final int nextrand() {
   int d;
   final Sha1Compiler sha1 = new Sha1Compiler();
   sha1.hash(state, 20);
   sha1.digest(state);
   return POS_MASK
       & (((LOWBYTE & (int) state[16]) << 24)
           | ((LOWBYTE & (int) state[17]) << 16)
           | ((LOWBYTE & (int) state[18]) << 8)
           | ((LOWBYTE & (int) state[19])));
 }
 // new rng from seed
 public Sha1Generator(final int seedarg) {
   final byte[] seedstate = new byte[20];
   for (int i = 0; i < 16; i++) {
     seedstate[i] = 0;
   }
   seedstate[16] = (byte) (LOWBYTE & (seedarg >>> 24));
   seedstate[17] = (byte) (LOWBYTE & (seedarg >>> 16));
   seedstate[18] = (byte) (LOWBYTE & (seedarg >>> 8));
   seedstate[19] = (byte) (LOWBYTE & (seedarg));
   final Sha1Compiler sha1 = new Sha1Compiler();
   sha1.hash(seedstate, 20);
   sha1.digest(state);
 }