// Path: src/main/java/net/minecraftforge/fml/common/ProgressManager.java
// @Deprecated
// public static class ProgressBar
// {
//     private final String title;
//     private final int steps;
//     private volatile int step = 0;
//     private volatile String message = "";
// 
//     private ProgressBar(String title, int steps)
//     {
//         this.title = title;
//         this.steps = steps;
//     }
// 
//     public void step(Class<?> classToName, String... extra)
//     {
//         step(ClassNameUtils.shortName(classToName)+Joiner.on(' ').join(extra));
//     }
// 
//     public void step(String message)
//     {
//         if(step >= steps) throw new IllegalStateException("too much steps for ProgressBar " + title);
//         step++;
//         this.message = message;
//         FMLCommonHandler.instance().processWindowMessages();
//     }
// 
//     public String getTitle()
//     {
//         return title;
//     }
// 
//     public int getSteps()
//     {
//         return steps;
//     }
// 
//     public int getStep()
//     {
//         return step;
//     }
// 
//     public String getMessage()
//     {
//         return message;
//     }
// }
// 
// Path: src/main/java/net/minecraftforge/fml/common/event/FMLLoadEvent.java
// public class FMLLoadEvent
// {
// 
// }


import java.lang.reflect.InvocationTargetException;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
import net.minecraftforge.fml.common.LoaderState.ModState;
import net.minecraftforge.fml.common.ProgressManager.ProgressBar;
import net.minecraftforge.fml.common.event.FMLEvent;
import net.minecraftforge.fml.common.event.FMLLoadEvent;
import net.minecraftforge.fml.common.event.FMLModDisabledEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.FMLStateEvent;
import net.minecraftforge.fml.common.functions.ArtifactVersionNameFunction;
import net.minecraftforge.fml.common.versioning.ArtifactVersion;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.ThreadContext;
import com.google.common.base.Joiner;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.BiMap;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableBiMap;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMap.Builder;
import com.google.common.collect.Iterables;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
            }
            if (toThrow != null && toThrow instanceof RuntimeException)
            {
                throw (RuntimeException)toThrow;
            }
            else
            {
                throw new LoaderException(toThrow);
            }
        }
        else if (state != desiredState && forceState)
        {
            FMLLog.info("The state engine was in incorrect state %s and forced into state %s. Errors may have been discarded.", state, desiredState);
            forceState(desiredState);
        }

    }

    public ModContainer activeContainer()
    {
        return activeContainer != null ? activeContainer : findActiveContainerFromStack();
    }

    @Subscribe
    public void propogateStateMessage(FMLEvent stateEvent)
    {
        if (stateEvent instanceof FMLPreInitializationEvent)
        {
            modObjectList = buildModObjectList();
        }
// Path: src/main/java/net/minecraftforge/fml/common/ProgressManager.java
// @Deprecated
// public static class ProgressBar
// {
//     private final String title;
//     private final int steps;
//     private volatile int step = 0;
//     private volatile String message = "";
// 
//     private ProgressBar(String title, int steps)
//     {
//         this.title = title;
//         this.steps = steps;
//     }
// 
//     public void step(Class<?> classToName, String... extra)
//     {
//         step(ClassNameUtils.shortName(classToName)+Joiner.on(' ').join(extra));
//     }
// 
//     public void step(String message)
//     {
//         if(step >= steps) throw new IllegalStateException("too much steps for ProgressBar " + title);
//         step++;
//         this.message = message;
//         FMLCommonHandler.instance().processWindowMessages();
//     }
// 
//     public String getTitle()
//     {
//         return title;
//     }
// 
//     public int getSteps()
//     {
//         return steps;
//     }
// 
//     public int getStep()
//     {
//         return step;
//     }
// 
//     public String getMessage()
//     {
//         return message;
//     }
// }
// 
// Path: src/main/java/net/minecraftforge/fml/common/event/FMLLoadEvent.java
// public class FMLLoadEvent
// {
// 
// }


// Path: src/main/java/net/minecraftforge/fml/common/LoadController.java
import java.lang.reflect.InvocationTargetException;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
import net.minecraftforge.fml.common.LoaderState.ModState;
import net.minecraftforge.fml.common.ProgressManager.ProgressBar;
import net.minecraftforge.fml.common.event.FMLEvent;
import net.minecraftforge.fml.common.event.FMLLoadEvent;
import net.minecraftforge.fml.common.event.FMLModDisabledEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.FMLStateEvent;
import net.minecraftforge.fml.common.functions.ArtifactVersionNameFunction;
import net.minecraftforge.fml.common.versioning.ArtifactVersion;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.ThreadContext;
import com.google.common.base.Joiner;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.BiMap;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableBiMap;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMap.Builder;
import com.google.common.collect.Iterables;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;

            }
            if (toThrow != null && toThrow instanceof RuntimeException)
            {
                throw (RuntimeException)toThrow;
            }
            else
            {
                throw new LoaderException(toThrow);
            }
        }
        else if (state != desiredState && forceState)
        {
            FMLLog.info("The state engine was in incorrect state %s and forced into state %s. Errors may have been discarded.", state, desiredState);
            forceState(desiredState);
        }

    }

    public ModContainer activeContainer()
    {
        return activeContainer != null ? activeContainer : findActiveContainerFromStack();
    }

    @Subscribe
    public void propogateStateMessage(FMLEvent stateEvent)
    {
        if (stateEvent instanceof FMLPreInitializationEvent)
        {
            modObjectList = buildModObjectList();
        }
        ProgressBar bar = ProgressManager.push(stateEvent.description(), activeModList.size());