package

package a {
    public fun </*0*/ T> either(/*0*/ t1: T, /*1*/ t2: T): T
    public fun </*0*/ T> exactBound(/*0*/ t: T, /*1*/ l: a.Inv<T>): T
    public fun </*0*/ T> id(/*0*/ t: T): T
    public fun </*0*/ T> lowerBound(/*0*/ t: T, /*1*/ l: a.Cov<T>): T
    public fun other(/*0*/ s: kotlin.String): kotlin.Unit
    public fun </*0*/ T> otherGeneric(/*0*/ l: kotlin.collections.List<T>): kotlin.Unit
    public fun test(): kotlin.Unit
    public fun testExactBound(/*0*/ invS: a.Inv<kotlin.String>, /*1*/ invI: a.Inv<kotlin.Int>, /*2*/ invB: a.Inv<kotlin.Byte>): kotlin.Unit
    public fun testLowerBound(/*0*/ cov: a.Cov<kotlin.String>, /*1*/ covN: a.Cov<kotlin.Number>): kotlin.Unit
    public fun testUpperBound(/*0*/ contrS: a.Contr<kotlin.String>, /*1*/ contrB: a.Contr<kotlin.Byte>, /*2*/ contrN: a.Contr<kotlin.Number>): kotlin.Unit
    public fun </*0*/ T> upperBound(/*0*/ t: T, /*1*/ l: a.Contr<T>): T
    public fun use(/*0*/ vararg a: kotlin.Any? /*kotlin.Array<out kotlin.Any?>*/): kotlin.Array<out kotlin.Any?>

    public interface Contr</*0*/ in T> {
        public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
        public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
        public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
    }

    public interface Cov</*0*/ out T> {
        public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
        public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
        public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
    }

    public interface Inv</*0*/ T> {
        public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
        public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
        public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
    }
}
