using System;
using nested_classNamespace;
#pragma warning disable 219

public class runme {
  static void Main() {

    Outer outer = new Outer();
    outer.a = 1;
		outer.b = 2;
    Outer.InnerStruct1 is1 = outer.makeInnerStruct1();
    Outer.InnerClass1 ic1 = outer.makeInnerClass1();
    Outer.InnerUnion1 iu1 = outer.makeInnerUnion1();

    Outer.InnerStruct2 is2 = outer.makeInnerStruct2();
    Outer.InnerClass2 ic2 = outer.makeInnerClass2();
    Outer.InnerUnion2 iu2 = outer.makeInnerUnion2();

    Outer.InnerClass4Typedef ic4 = outer.makeInnerClass4Typedef();
    Outer.InnerStruct4Typedef is4 = outer.makeInnerStruct4Typedef();
    Outer.InnerUnion4Typedef iu4 = outer.makeInnerUnion4Typedef();

    Outer.InnerClass5Typedef ic5 = outer.makeInnerClass5();
    Outer.InnerStruct5Typedef is5 = outer.makeInnerStruct5();
    Outer.InnerUnion5Typedef iu5 = outer.makeInnerUnion5();

    ic5 = outer.makeInnerClass5Typedef();
    is5 = outer.makeInnerStruct5Typedef();
    iu5 = outer.makeInnerUnion5Typedef();

    {
      Outer.InnerMultiple im1 = outer.MultipleInstance1;
      Outer.InnerMultiple im2 = outer.MultipleInstance2;
      Outer.InnerMultiple im3 = outer.MultipleInstance3;
      Outer.InnerMultiple im4 = outer.MultipleInstance4;
    }

    {
      Outer.InnerMultipleDerived im1 = outer.MultipleDerivedInstance1;
      Outer.InnerMultipleDerived im2 = outer.MultipleDerivedInstance2;
      Outer.InnerMultipleDerived im3 = outer.MultipleDerivedInstance3;
      Outer.InnerMultipleDerived im4 = outer.MultipleDerivedInstance4;
    }

    {
      Outer.InnerMultipleDerived im1 = outer.MultipleDerivedInstance1;
      Outer.InnerMultipleDerived im2 = outer.MultipleDerivedInstance2;
      Outer.InnerMultipleDerived im3 = outer.MultipleDerivedInstance3;
      Outer.InnerMultipleDerived im4 = outer.MultipleDerivedInstance4;
    }

    {
      Outer.InnerMultipleAnonTypedef1 mat1 = outer.makeInnerMultipleAnonTypedef1();
      Outer.InnerMultipleAnonTypedef1 mat2 = outer.makeInnerMultipleAnonTypedef2();
      SWIGTYPE_p_p_Outer__InnerMultipleAnonTypedef1 mat3 = outer.makeInnerMultipleAnonTypedef3();

      Outer.InnerMultipleNamedTypedef1 mnt = outer.makeInnerMultipleNamedTypedef();
      Outer.InnerMultipleNamedTypedef1 mnt1 = outer.makeInnerMultipleNamedTypedef1();
      Outer.InnerMultipleNamedTypedef1 mnt2 = outer.makeInnerMultipleNamedTypedef2();
      SWIGTYPE_p_p_Outer__InnerMultipleNamedTypedef mnt3 = outer.makeInnerMultipleNamedTypedef3();
    }
    {
      Outer.InnerSameName isn = outer.makeInnerSameName();
    }
  }
}
