protected static Nest findNestFor(Fauna fauna) {
    //
    //  If you're homeless, or if home is overcrowded, consider moving into a
    //  vacant lair, or building a new one.
    final World world = fauna.world() ;
    final float range = forageRange(fauna.species) ;
    if (crowdingFor(fauna) > 0.5f) {
      Nest bestNear = null ;
      float bestRating = 0 ;
      for (Object o : world.presences.sampleFromKey(
        fauna, world, 5, null, Nest.class
      )) {
        final Nest l = (Nest) o ;
        if (l.species != fauna.species) continue ;
        final float dist = Spacing.distance(l, fauna) ;
        if (dist > range) continue ;
        final float crowding = crowdingFor(l, l.species, world) ;
        if (crowding > 0.5f) continue ;
        float rating = (1 - crowding) * range / (range + dist) ;
        rating *= Rand.avgNums(2) * 4 ;
        if (rating > bestRating) { bestRating = rating ; bestNear = l ; }
      }
      if (bestNear != null) return bestNear ;
    }
    //
    //  If no existing lair is suitable, try establishing a new one-
    Tile toTry = Spacing.pickRandomTile(fauna, range * 2, world) ;
    toTry = Spacing.nearestOpenTile(toTry, fauna) ;
    if (toTry == null) return null ;
    return siteNewLair(fauna.species, toTry, world) ;
  }