anchor.diff:          .toList()
           .forEach(selections.remove);
     }
  +  
     void _checkAllPlayable() {
       print("Checking all playable for activePlayer: ${activePlayer}");
       print("Round Data: ${roundData}");
  
positive.code:     }
      
      //if the player has at least one card in the board, and not one
      //immediate connected neighbors of the same player, a path is required
      bool pathRequired = board.countByPlayer(player.playerNum) > 0 &&
        !CardUtil.allDirections.any((dir) => 
          CardUtil.exits(card,playedDir).contains(dir) && 
  
negative.code:       return;
      }
    }
    
    void _payConnectionFees(PaymentPath path, Player player) {
      if(path.length == 0 || 
        board.boardMap[path.first].playerNum == player.playerNum ||
        player.cash == 0) return;
      
      BoardLoc first = path.removeAt(0);
      int payment = 1;
      player.cash -= payment;
      //get player that owns the card in the payment path
      roundData[board.boardMap[first].playerNum].cash += payment;
      
      //recurse on rest of path
      _payConnectionFees(path, player);
    }
  
    void _checkDeferred() {
      //remove players that were deferred this round
  