private boolean replaceEvents(String key, Faction.FactionChangeEvent event, boolean strict)
	 {
		 final Faction.FactionChangeEvent[] events=changes.get(key);
		 if(events==null) return false;
		 final Faction.FactionChangeEvent[] nevents=new Faction.FactionChangeEvent[events.length-1];
		 int ne1=0;
		 boolean done=false;
		 for (final FactionChangeEvent event2 : events)
		{
			 if((strict&&(event2 == event))||((!strict)&&(event2.toString().equals(event.toString()))))
			 {
				 if(nevents.length==0)
					 changes.remove(key);
				 else
					 changes.put(key,nevents);
				 done=true;
			 }
			 else
			 if(ne1<nevents.length)
				 nevents[ne1++]=event2;
		 }
		 if(done)
			 abilityChangesCache.clear();
		 return done;
	 }