data class Test1<T : Any?> {
  constructor(x: T) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  val x: T
    field = x
    get

  operator fun component1(): T {
    return <this>.#x
  }

  fun copy(x: T = <this>.#x): Test1<T> {
    return Test1<T>(x = x)
  }

  override fun toString(): String {
    return "Test1(" + "x=" + <this>.#x + ")"
  }

  override fun hashCode(): Int {
    return when {
      EQEQ(arg0 = <this>.#x, arg1 = null) -> 0
      else -> <this>.#x.hashCode()
    }
  }

  override operator fun equals(other: Any?): Boolean {
    when {
      EQEQEQ(arg0 = <this>, arg1 = other) -> return true
    }
    when {
      other !is Test1<T> -> return false
    }
    val tmp0_other_with_cast: Test1<T> = other as Test1<T>
    when {
      EQEQ(arg0 = <this>.#x, arg1 = tmp0_other_with_cast.#x).not() -> return false
    }
    return true
  }

}

data class Test2<T : Number> {
  constructor(x: T) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  val x: T
    field = x
    get

  operator fun component1(): T {
    return <this>.#x
  }

  fun copy(x: T = <this>.#x): Test2<T> {
    return Test2<T>(x = x)
  }

  override fun toString(): String {
    return "Test2(" + "x=" + <this>.#x + ")"
  }

  override fun hashCode(): Int {
    return <this>.#x.hashCode()
  }

  override operator fun equals(other: Any?): Boolean {
    when {
      EQEQEQ(arg0 = <this>, arg1 = other) -> return true
    }
    when {
      other !is Test2<T> -> return false
    }
    val tmp0_other_with_cast: Test2<T> = other as Test2<T>
    when {
      EQEQ(arg0 = <this>.#x, arg1 = tmp0_other_with_cast.#x).not() -> return false
    }
    return true
  }

}

data class Test3<T : Any?> {
  constructor(x: List<T>) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  val x: List<T>
    field = x
    get

  operator fun component1(): List<T> {
    return <this>.#x
  }

  fun copy(x: List<T> = <this>.#x): Test3<T> {
    return Test3<T>(x = x)
  }

  override fun toString(): String {
    return "Test3(" + "x=" + <this>.#x + ")"
  }

  override fun hashCode(): Int {
    return <this>.#x.hashCode()
  }

  override operator fun equals(other: Any?): Boolean {
    when {
      EQEQEQ(arg0 = <this>, arg1 = other) -> return true
    }
    when {
      other !is Test3<T> -> return false
    }
    val tmp0_other_with_cast: Test3<T> = other as Test3<T>
    when {
      EQEQ(arg0 = <this>.#x, arg1 = tmp0_other_with_cast.#x).not() -> return false
    }
    return true
  }

}

data class Test4 {
  constructor(x: List<String>) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  val x: List<String>
    field = x
    get

  operator fun component1(): List<String> {
    return <this>.#x
  }

  fun copy(x: List<String> = <this>.#x): Test4 {
    return Test4(x = x)
  }

  override fun toString(): String {
    return "Test4(" + "x=" + <this>.#x + ")"
  }

  override fun hashCode(): Int {
    return <this>.#x.hashCode()
  }

  override operator fun equals(other: Any?): Boolean {
    when {
      EQEQEQ(arg0 = <this>, arg1 = other) -> return true
    }
    when {
      other !is Test4 -> return false
    }
    val tmp0_other_with_cast: Test4 = other as Test4
    when {
      EQEQ(arg0 = <this>.#x, arg1 = tmp0_other_with_cast.#x).not() -> return false
    }
    return true
  }

}
