// CHECK:
//   Mangled name: Outer
//   Public signature: /Outer|null[0]
class Outer {
  // CHECK:
  //   Mangled name: Outer.Inner
  //   Public signature: /Outer.Inner|null[0]
  open inner class Inner {
    // CHECK:
    //   Mangled name: Outer.Inner#<init>(){}
    //   Public signature: /Outer.Inner.<init>|-5645683436151566731[0]
    //   Public signature debug description: <init>(){}
    constructor() /* primary */

  }

  // CHECK:
  //   Mangled name: Outer.InnerDerived0
  //   Public signature: /Outer.InnerDerived0|null[0]
  inner class InnerDerived0 : Inner {
    // CHECK:
    //   Mangled name: Outer.InnerDerived0#<init>(){}
    //   Public signature: /Outer.InnerDerived0.<init>|-5645683436151566731[0]
    //   Public signature debug description: <init>(){}
    constructor() /* primary */

  }

  // CHECK:
  //   Mangled name: Outer.InnerDerived1
  //   Public signature: /Outer.InnerDerived1|null[0]
  inner class InnerDerived1 : Inner {
    // CHECK:
    //   Mangled name: Outer.InnerDerived1#<init>(){}
    //   Public signature: /Outer.InnerDerived1.<init>|-5645683436151566731[0]
    //   Public signature debug description: <init>(){}
    constructor() /* primary */

  }

  // CHECK:
  //   Mangled name: Outer#<init>(){}
  //   Public signature: /Outer.<init>|-5645683436151566731[0]
  //   Public signature debug description: <init>(){}
  constructor() /* primary */

}

// CHECK JVM_IR:
//   Mangled name: #test(){}Outer.Inner
//   Public signature: /test|8585667894850483787[0]
//   Public signature debug description: test(){}Outer.Inner
// CHECK JS_IR NATIVE:
//   Mangled name: #test(){}
//   Public signature: /test|6620506149988718649[0]
//   Public signature debug description: test(){}
fun test(): Inner

// CHECK:
//   Mangled name: OI
//   Public signature: /OI|null[0]
typealias OI = Inner
