
  // IntelliJ API Decompiler stub source generated from a class file
  // Implementation of methods is not available

package pkg;

public abstract class KotlinFunList <T> {
    public static pkg.KotlinFunList.ClassObject$ $classobj;

    public KotlinFunList() { /* compiled code */ }

    public static final class ClassObject$ {
        public ClassObject$() { /* compiled code */ }

        public final class Standard <T> {
            final pkg.KotlinFunList.ClassObject$ this$0;

            public Standard() { /* compiled code */ }
        }

        public final class Empty <T> {
            final pkg.KotlinFunList.ClassObject$ this$0;

            public Empty() { /* compiled code */ }
        }
    }
}
