// Path: winstone/src/main/java/net/winstone/util/SizeRestrictedHashtable.java
// public class SizeRestrictedHashtable<K, V> extends Hashtable<K, V> {
// 
// 	/**
// 	 * serialVersionUID:long
// 	 */
// 	private static final long serialVersionUID = -3783614228146621688L;
// 	/**
// 	 * maximum Capacity.
// 	 */
// 	private final int maximumCapacity;
// 
// 	public SizeRestrictedHashtable(final int initialCapacity, final float loadFactor, final int cap) {
// 		super(initialCapacity, loadFactor);
// 		this.maximumCapacity = cap;
// 	}
// 
// 	public SizeRestrictedHashtable(final int initialCapacity, final int cap) {
// 		super(initialCapacity);
// 		this.maximumCapacity = cap;
// 	}
// 
// 	public SizeRestrictedHashtable(final int cap) {
// 		this.maximumCapacity = cap;
// 	}
// 
// 	public SizeRestrictedHashtable(final Map<? extends K, ? extends V> t, final int cap) {
// 		super(t);
// 		this.maximumCapacity = cap;
// 	}
// 
// 	@Override
// 	public V put(final K key, final V value) {
// 		if (size() > maximumCapacity) {
// 			throw new IllegalStateException("Hash table size limit exceeded");
// 		}
// 		return super.put(key, value);
// 	}
// }


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import net.winstone.WinstoneException;
import net.winstone.core.ObjectPool;
import net.winstone.core.WinstoneInputStream;
import net.winstone.core.WinstoneRequest;
import net.winstone.util.SizeRestrictedHashMap;
import net.winstone.util.SizeRestrictedHashtable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
			parseRequestParameters();
			return Collections.enumeration(parsedParams.keySet());
		}
	}

	@Override
	public String[] getParameterValues(final String name) {
		if (hasBeenForwarded()) {
			return super.getParameterValues(name);
		} else {
			parseRequestParameters();
			final Object param = parsedParams.get(name);
			if (param == null) {
				return null;
			} else if (param instanceof String) {
				return new String[] { (String) param };
			} else if (param instanceof String[]) {
				return (String[]) param;
			} else {
				throw new WinstoneException("Unknown param type: " + name + " - " + param.getClass());
			}
		}
	}

	@Override
	@SuppressWarnings("rawtypes")
	public Map getParameterMap() {
		if (hasBeenForwarded()) {
			return super.getParameterMap();
		} else {
// Path: winstone/src/main/java/net/winstone/util/SizeRestrictedHashtable.java
// public class SizeRestrictedHashtable<K, V> extends Hashtable<K, V> {
// 
// 	/**
// 	 * serialVersionUID:long
// 	 */
// 	private static final long serialVersionUID = -3783614228146621688L;
// 	/**
// 	 * maximum Capacity.
// 	 */
// 	private final int maximumCapacity;
// 
// 	public SizeRestrictedHashtable(final int initialCapacity, final float loadFactor, final int cap) {
// 		super(initialCapacity, loadFactor);
// 		this.maximumCapacity = cap;
// 	}
// 
// 	public SizeRestrictedHashtable(final int initialCapacity, final int cap) {
// 		super(initialCapacity);
// 		this.maximumCapacity = cap;
// 	}
// 
// 	public SizeRestrictedHashtable(final int cap) {
// 		this.maximumCapacity = cap;
// 	}
// 
// 	public SizeRestrictedHashtable(final Map<? extends K, ? extends V> t, final int cap) {
// 		super(t);
// 		this.maximumCapacity = cap;
// 	}
// 
// 	@Override
// 	public V put(final K key, final V value) {
// 		if (size() > maximumCapacity) {
// 			throw new IllegalStateException("Hash table size limit exceeded");
// 		}
// 		return super.put(key, value);
// 	}
// }


// Path: winstone/src/main/java/net/winstone/core/authentication/RetryRequestWrapper.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import net.winstone.WinstoneException;
import net.winstone.core.ObjectPool;
import net.winstone.core.WinstoneInputStream;
import net.winstone.core.WinstoneRequest;
import net.winstone.util.SizeRestrictedHashMap;
import net.winstone.util.SizeRestrictedHashtable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

			parseRequestParameters();
			return Collections.enumeration(parsedParams.keySet());
		}
	}

	@Override
	public String[] getParameterValues(final String name) {
		if (hasBeenForwarded()) {
			return super.getParameterValues(name);
		} else {
			parseRequestParameters();
			final Object param = parsedParams.get(name);
			if (param == null) {
				return null;
			} else if (param instanceof String) {
				return new String[] { (String) param };
			} else if (param instanceof String[]) {
				return (String[]) param;
			} else {
				throw new WinstoneException("Unknown param type: " + name + " - " + param.getClass());
			}
		}
	}

	@Override
	@SuppressWarnings("rawtypes")
	public Map getParameterMap() {
		if (hasBeenForwarded()) {
			return super.getParameterMap();
		} else {
			final Map<String, String[]> paramMap = new SizeRestrictedHashtable<String, String[]>(ObjectPool.getMaximumAllowedParameter());