private boolean evaluatePairing ()
  {
    int toprank = 0;
    int botrank = 0;
    int topind  = 0;
    int botind  = 0;
    
    for (int i=Rank.NUM_RANK-1; i>=0; i--)
      {
	//int rankhashi = _rankhash[i];
	int rankhashi = (int)((_Rankhash>>(4*i)) & 0xF);
	if (rankhashi > toprank)
	  {
	    botrank = toprank;
	    botind  = topind;
	    toprank = rankhashi;
	    topind  = i;
	  }
	else if (rankhashi > botrank)
	  {
	    botrank = rankhashi;
	    botind  = i;
	  }
      }

    switch (toprank)
      {
      case 4:
	_intval ^= FOUR_OF_A_KIND_MASK;
	_intval ^= FOUR_OF_A_KIND << 16;
	_intval ^= (topind << 4);
	_intval ^=  botind;
	//Debug.out ("fish " + this + " -r");
	return true;
	//break;

      case 3:
	if (botrank > 1)
	  {
	    _intval ^= FULL_HOUSE_MASK;
	    _intval ^= FULL_HOUSE << 16;
	    _intval ^= (topind << 4);
	    _intval ^=  botind;
	    return true;
	  }
	else
	  {
	    _intval ^= THREE_OF_A_KIND_MASK;
	    _intval ^= THREE_OF_A_KIND << 16;
	    _intval ^= (topind << 8);
	    //_rankhash[topind] = 0;  // hack so 3 pair works
	    _Rankhash -= (((_Rankhash>>(4*topind)) & 0xF)<<(4*topind));
	    fillHand (1,3);
	  }
	break;

      case 2:
	if (botrank > 1)
	  {
	    _intval ^= TWO_PAIR_MASK;
	    _intval ^= TWO_PAIR << 16;
	    _intval ^= (topind << 8);
	    _intval ^= (botind << 4);
	    //_rankhash[topind] = _rankhash[botind] = 0; // hack so 3 pr works
	    _Rankhash -= (((_Rankhash>>(4*topind)) & 0xF)<<(4*topind));
	    _Rankhash -= (((_Rankhash>>(4*botind)) & 0xF)<<(4*botind));
	    fillHand (2,3);
	  }
	else
	  {
	    _intval ^= ONE_PAIR_MASK;
	    _intval ^= ONE_PAIR << 16;
	    _intval ^= (topind << 12);
	    //_rankhash[topind] = 0;  // hack so 3 pair works
	    _Rankhash -= (((_Rankhash>>(4*topind)) & 0xF)<<(4*topind));
	    fillHand(1,4);
	  }
	break;

      default:
	_intval ^= NO_PAIR_MASK;
	_intval ^= NO_PAIR << 16;
	fillHand(0,5);
	return false;
      }
    return false;

  }