// Path: immibis/bon/ClassCollection.java
// public class ClassCollection implements Cloneable {
// 	public ClassCollection(NameSet nameSet, Collection<ClassNode> classes) {
// 		this.nameSet = nameSet;
// 		this.classes.addAll(classes);
// 	}
// 	
// 	private NameSet nameSet;
// 	private Collection<ClassNode> classes = new ArrayList<>();
// 	private Map<String, byte[]> extraFiles = new HashMap<>();
// 	
// 	public Collection<ClassNode> getAllClasses() {
// 		return classes;
// 	}
// 	
// 	public NameSet getNameSet() {
// 		return nameSet;
// 	}
// 	
// 	@Override
// 	public ClassCollection clone() {
// 		try {
// 			ClassCollection clone = (ClassCollection)super.clone();
// 			clone.classes = new ArrayList<>();
// 			
// 			for(ClassNode ocn : classes) {
// 				// clone the ClassNode
// 				ClassNode ncn = new ClassNode();
// 				ocn.accept(ncn);
// 				clone.classes.add(ncn);
// 			}
// 			
// 			// copy map, but don't copy data
// 			clone.extraFiles = new HashMap<>(extraFiles);
// 			
// 			return clone;
// 			
// 		} catch(CloneNotSupportedException e) {
// 			throw new RuntimeException("This can't happen", e);
// 		}
// 	}
// 	
// 	public ClassCollection cloneWithNameSet(NameSet newNS) {
// 		ClassCollection rv = clone();
// 		rv.nameSet = newNS;
// 		return rv;
// 	}
// 
// 	public Map<String, ClassNode> getClassMap() {
// 		Map<String, ClassNode> rv = new HashMap<String, ClassNode>();
// 		for(ClassNode cn : classes)
// 			rv.put(cn.name, cn);
// 		return rv;
// 	}
// 
// 	public Map<String, byte[]> getExtraFiles() {
// 		return extraFiles;
// 	}
// 
// 	
// }
// 
// Path: immibis/bon/ClassFormatException.java
// public class ClassFormatException extends Exception {
// 	private static final long serialVersionUID = 1L;
// 	
// 	public ClassFormatException(String message) {
// 		super(message);
// 	}
// 	
// 	public ClassFormatException(String message, Throwable cause) {
// 		super(message, cause);
// 	}
// }
// 
// Path: immibis/bon/IProgressListener.java
// public interface IProgressListener {
// 	public void start(int max, String text);
// 	public void set(int value);
// 	public void setMax(int max);
// }
// 
// Path: immibis/bon/NameSet.java
// public abstract class NameSet {
// 	public abstract boolean equals(Object o);
// 	public abstract int hashCode();
// 	public abstract String toString();
// }


import immibis.bon.ClassCollection;
import immibis.bon.ClassFormatException;
import immibis.bon.IProgressListener;
import immibis.bon.NameSet;
import java.io.File;
import java.io.IOException;
package immibis.bon.io;



@Deprecated
public class ClassCollectionFactory {
// Path: immibis/bon/ClassCollection.java
// public class ClassCollection implements Cloneable {
// 	public ClassCollection(NameSet nameSet, Collection<ClassNode> classes) {
// 		this.nameSet = nameSet;
// 		this.classes.addAll(classes);
// 	}
// 	
// 	private NameSet nameSet;
// 	private Collection<ClassNode> classes = new ArrayList<>();
// 	private Map<String, byte[]> extraFiles = new HashMap<>();
// 	
// 	public Collection<ClassNode> getAllClasses() {
// 		return classes;
// 	}
// 	
// 	public NameSet getNameSet() {
// 		return nameSet;
// 	}
// 	
// 	@Override
// 	public ClassCollection clone() {
// 		try {
// 			ClassCollection clone = (ClassCollection)super.clone();
// 			clone.classes = new ArrayList<>();
// 			
// 			for(ClassNode ocn : classes) {
// 				// clone the ClassNode
// 				ClassNode ncn = new ClassNode();
// 				ocn.accept(ncn);
// 				clone.classes.add(ncn);
// 			}
// 			
// 			// copy map, but don't copy data
// 			clone.extraFiles = new HashMap<>(extraFiles);
// 			
// 			return clone;
// 			
// 		} catch(CloneNotSupportedException e) {
// 			throw new RuntimeException("This can't happen", e);
// 		}
// 	}
// 	
// 	public ClassCollection cloneWithNameSet(NameSet newNS) {
// 		ClassCollection rv = clone();
// 		rv.nameSet = newNS;
// 		return rv;
// 	}
// 
// 	public Map<String, ClassNode> getClassMap() {
// 		Map<String, ClassNode> rv = new HashMap<String, ClassNode>();
// 		for(ClassNode cn : classes)
// 			rv.put(cn.name, cn);
// 		return rv;
// 	}
// 
// 	public Map<String, byte[]> getExtraFiles() {
// 		return extraFiles;
// 	}
// 
// 	
// }
// 
// Path: immibis/bon/ClassFormatException.java
// public class ClassFormatException extends Exception {
// 	private static final long serialVersionUID = 1L;
// 	
// 	public ClassFormatException(String message) {
// 		super(message);
// 	}
// 	
// 	public ClassFormatException(String message, Throwable cause) {
// 		super(message, cause);
// 	}
// }
// 
// Path: immibis/bon/IProgressListener.java
// public interface IProgressListener {
// 	public void start(int max, String text);
// 	public void set(int value);
// 	public void setMax(int max);
// }
// 
// Path: immibis/bon/NameSet.java
// public abstract class NameSet {
// 	public abstract boolean equals(Object o);
// 	public abstract int hashCode();
// 	public abstract String toString();
// }


// Path: immibis/bon/io/ClassCollectionFactory.java
import immibis.bon.ClassCollection;
import immibis.bon.ClassFormatException;
import immibis.bon.IProgressListener;
import immibis.bon.NameSet;
import java.io.File;
import java.io.IOException;

package immibis.bon.io;



@Deprecated
public class ClassCollectionFactory {
	public static ClassCollection loadClassCollection(NameSet ns, File from, IProgressListener progress) throws IOException, ClassFormatException {