struct Mat4x4_ {
  float4 mx;
  float4 my;
  float4 mz;
  float4 mw;
};
struct Mat4x3_ {
  float4 mx;
  float4 my;
  float4 mz;
};
struct Mat4x2_ {
  float4 mx;
  float4 my;
};
struct VertexOutput {
  float4 v_Color;
  float2 v_TexCoord;
  float4 member;
};

cbuffer cbuffer_global : register(b0, space0) {
  uint4 global[4];
};
cbuffer cbuffer_global1 : register(b1, space0) {
  uint4 global1[3];
};
cbuffer cbuffer_global2 : register(b2, space0) {
  uint4 global2[96];
};
static float3 a_Position1 = float3(0.0f, 0.0f, 0.0f);
static float2 a_UV1 = float2(0.0f, 0.0f);
static float4 a_Color1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
static float3 a_Normal1 = float3(0.0f, 0.0f, 0.0f);
static float a_PosMtxIdx1 = 0.0f;
static float4 v_Color = float4(0.0f, 0.0f, 0.0f, 0.0f);
static float2 v_TexCoord = float2(0.0f, 0.0f);
static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);

float3 Mat4x3GetCol0_(Mat4x3_ m) {
  Mat4x3_ m1 = (Mat4x3_)0;
  m1 = m;
  const Mat4x3_ x_e2 = m1;
  const Mat4x3_ x_e5 = m1;
  const Mat4x3_ x_e8 = m1;
  return float3(x_e2.mx.x, x_e5.my.x, x_e8.mz.x);
}

float3 Mat4x3GetCol1_(Mat4x3_ m2) {
  Mat4x3_ m3 = (Mat4x3_)0;
  m3 = m2;
  const Mat4x3_ x_e2 = m3;
  const Mat4x3_ x_e5 = m3;
  const Mat4x3_ x_e8 = m3;
  return float3(x_e2.mx.y, x_e5.my.y, x_e8.mz.y);
}

float3 Mat4x3GetCol2_(Mat4x3_ m4) {
  Mat4x3_ m5 = (Mat4x3_)0;
  m5 = m4;
  const Mat4x3_ x_e2 = m5;
  const Mat4x3_ x_e5 = m5;
  const Mat4x3_ x_e8 = m5;
  return float3(x_e2.mx.z, x_e5.my.z, x_e8.mz.z);
}

float3 Mat4x3GetCol3_(Mat4x3_ m6) {
  Mat4x3_ m7 = (Mat4x3_)0;
  m7 = m6;
  const Mat4x3_ x_e2 = m7;
  const Mat4x3_ x_e5 = m7;
  const Mat4x3_ x_e8 = m7;
  return float3(x_e2.mx.w, x_e5.my.w, x_e8.mz.w);
}

float4 Mul(Mat4x4_ m8, float4 v) {
  Mat4x4_ m9 = (Mat4x4_)0;
  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
  m9 = m8;
  v1 = v;
  const Mat4x4_ x_e4 = m9;
  const float4 x_e6 = v1;
  const Mat4x4_ x_e8 = m9;
  const float4 x_e10 = v1;
  const Mat4x4_ x_e12 = m9;
  const float4 x_e14 = v1;
  const Mat4x4_ x_e16 = m9;
  const float4 x_e18 = v1;
  return float4(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10), dot(x_e12.mz, x_e14), dot(x_e16.mw, x_e18));
}

float3 Mul1(Mat4x3_ m10, float4 v2) {
  Mat4x3_ m11 = (Mat4x3_)0;
  float4 v3 = float4(0.0f, 0.0f, 0.0f, 0.0f);
  m11 = m10;
  v3 = v2;
  const Mat4x3_ x_e4 = m11;
  const float4 x_e6 = v3;
  const Mat4x3_ x_e8 = m11;
  const float4 x_e10 = v3;
  const Mat4x3_ x_e12 = m11;
  const float4 x_e14 = v3;
  return float3(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10), dot(x_e12.mz, x_e14));
}

float2 Mul2(Mat4x2_ m12, float4 v4) {
  Mat4x2_ m13 = (Mat4x2_)0;
  float4 v5 = float4(0.0f, 0.0f, 0.0f, 0.0f);
  m13 = m12;
  v5 = v4;
  const Mat4x2_ x_e4 = m13;
  const float4 x_e6 = v5;
  const Mat4x2_ x_e8 = m13;
  const float4 x_e10 = v5;
  return float2(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10));
}

float4 Mul3(float3 v6, Mat4x3_ m14) {
  float3 v7 = float3(0.0f, 0.0f, 0.0f);
  Mat4x3_ m15 = (Mat4x3_)0;
  v7 = v6;
  m15 = m14;
  const Mat4x3_ x_e5 = m15;
  const float3 x_e6 = Mat4x3GetCol0_(x_e5);
  const float3 x_e7 = v7;
  const Mat4x3_ x_e10 = m15;
  const float3 x_e11 = Mat4x3GetCol1_(x_e10);
  const float3 x_e12 = v7;
  const Mat4x3_ x_e15 = m15;
  const float3 x_e16 = Mat4x3GetCol2_(x_e15);
  const float3 x_e17 = v7;
  const Mat4x3_ x_e20 = m15;
  const float3 x_e21 = Mat4x3GetCol3_(x_e20);
  const float3 x_e22 = v7;
  return float4(dot(x_e6, x_e7), dot(x_e11, x_e12), dot(x_e16, x_e17), dot(x_e21, x_e22));
}

Mat4x4_ x_Mat4x4_(float n) {
  float n1 = 0.0f;
  Mat4x4_ o = (Mat4x4_)0;
  n1 = n;
  const float x_e4 = n1;
  o.mx = float4(x_e4, 0.0f, 0.0f, 0.0f);
  const float x_e11 = n1;
  o.my = float4(0.0f, x_e11, 0.0f, 0.0f);
  const float x_e18 = n1;
  o.mz = float4(0.0f, 0.0f, x_e18, 0.0f);
  const float x_e25 = n1;
  o.mw = float4(0.0f, 0.0f, 0.0f, x_e25);
  const Mat4x4_ x_e27 = o;
  return x_e27;
}

Mat4x4_ x_Mat4x4_1(Mat4x3_ m16) {
  Mat4x3_ m17 = (Mat4x3_)0;
  Mat4x4_ o1 = (Mat4x4_)0;
  m17 = m16;
  const Mat4x4_ x_e4 = x_Mat4x4_(1.0f);
  o1 = x_e4;
  const Mat4x3_ x_e7 = m17;
  o1.mx = x_e7.mx;
  const Mat4x3_ x_e10 = m17;
  o1.my = x_e10.my;
  const Mat4x3_ x_e13 = m17;
  o1.mz = x_e13.mz;
  const Mat4x4_ x_e15 = o1;
  return x_e15;
}

Mat4x4_ x_Mat4x4_2(Mat4x2_ m18) {
  Mat4x2_ m19 = (Mat4x2_)0;
  Mat4x4_ o2 = (Mat4x4_)0;
  m19 = m18;
  const Mat4x4_ x_e4 = x_Mat4x4_(1.0f);
  o2 = x_e4;
  const Mat4x2_ x_e7 = m19;
  o2.mx = x_e7.mx;
  const Mat4x2_ x_e10 = m19;
  o2.my = x_e10.my;
  const Mat4x4_ x_e12 = o2;
  return x_e12;
}

Mat4x3_ x_Mat4x3_(float n2) {
  float n3 = 0.0f;
  Mat4x3_ o3 = (Mat4x3_)0;
  n3 = n2;
  const float x_e4 = n3;
  o3.mx = float4(x_e4, 0.0f, 0.0f, 0.0f);
  const float x_e11 = n3;
  o3.my = float4(0.0f, x_e11, 0.0f, 0.0f);
  const float x_e18 = n3;
  o3.mz = float4(0.0f, 0.0f, x_e18, 0.0f);
  const Mat4x3_ x_e21 = o3;
  return x_e21;
}

Mat4x3_ x_Mat4x3_1(Mat4x4_ m20) {
  Mat4x4_ m21 = (Mat4x4_)0;
  Mat4x3_ o4 = (Mat4x3_)0;
  m21 = m20;
  const Mat4x4_ x_e4 = m21;
  o4.mx = x_e4.mx;
  const Mat4x4_ x_e7 = m21;
  o4.my = x_e7.my;
  const Mat4x4_ x_e10 = m21;
  o4.mz = x_e10.mz;
  const Mat4x3_ x_e12 = o4;
  return x_e12;
}

Mat4x3_ global2_load(uint offset) {
  const uint scalar_offset = ((offset + 0u)) / 4;
  const uint scalar_offset_1 = ((offset + 16u)) / 4;
  const uint scalar_offset_2 = ((offset + 32u)) / 4;
  const Mat4x3_ tint_symbol_3 = {asfloat(global2[scalar_offset / 4]), asfloat(global2[scalar_offset_1 / 4]), asfloat(global2[scalar_offset_2 / 4])};
  return tint_symbol_3;
}

Mat4x4_ global_load(uint offset) {
  const uint scalar_offset_3 = ((offset + 0u)) / 4;
  const uint scalar_offset_4 = ((offset + 16u)) / 4;
  const uint scalar_offset_5 = ((offset + 32u)) / 4;
  const uint scalar_offset_6 = ((offset + 48u)) / 4;
  const Mat4x4_ tint_symbol_4 = {asfloat(global[scalar_offset_3 / 4]), asfloat(global[scalar_offset_4 / 4]), asfloat(global[scalar_offset_5 / 4]), asfloat(global[scalar_offset_6 / 4])};
  return tint_symbol_4;
}

Mat4x2_ global1_load_1(uint offset) {
  const uint scalar_offset_7 = ((offset + 0u)) / 4;
  const uint scalar_offset_8 = ((offset + 16u)) / 4;
  const Mat4x2_ tint_symbol_5 = {asfloat(global1[scalar_offset_7 / 4]), asfloat(global1[scalar_offset_8 / 4])};
  return tint_symbol_5;
}

void main1() {
  Mat4x3_ t_PosMtx = (Mat4x3_)0;
  float2 t_TexSpaceCoord = float2(0.0f, 0.0f);
  const float x_e15 = a_PosMtxIdx1;
  const Mat4x3_ x_e18 = global2_load((48u * uint(int(x_e15))));
  t_PosMtx = x_e18;
  const Mat4x3_ x_e23 = t_PosMtx;
  const Mat4x4_ x_e24 = x_Mat4x4_1(x_e23);
  const float3 x_e25 = a_Position1;
  const Mat4x3_ x_e29 = t_PosMtx;
  const Mat4x4_ x_e30 = x_Mat4x4_1(x_e29);
  const float3 x_e31 = a_Position1;
  const float4 x_e34 = Mul(x_e30, float4(x_e31, 1.0f));
  const Mat4x4_ x_e35 = global_load(0u);
  const Mat4x3_ x_e37 = t_PosMtx;
  const Mat4x4_ x_e38 = x_Mat4x4_1(x_e37);
  const float3 x_e39 = a_Position1;
  const Mat4x3_ x_e43 = t_PosMtx;
  const Mat4x4_ x_e44 = x_Mat4x4_1(x_e43);
  const float3 x_e45 = a_Position1;
  const float4 x_e48 = Mul(x_e44, float4(x_e45, 1.0f));
  const float4 x_e49 = Mul(x_e35, x_e48);
  gl_Position = x_e49;
  const float4 x_e50 = a_Color1;
  v_Color = x_e50;
  const float4 x_e52 = asfloat(global1[2]);
  if ((x_e52.x == 2.0f)) {
    {
      const float3 x_e59 = a_Normal1;
      const Mat4x2_ x_e64 = global1_load_1(0u);
      const float3 x_e65 = a_Normal1;
      const float2 x_e68 = Mul2(x_e64, float4(x_e65, 1.0f));
      v_TexCoord = x_e68.xy;
      return;
    }
  } else {
    {
      const float2 x_e73 = a_UV1;
      const Mat4x2_ x_e79 = global1_load_1(0u);
      const float2 x_e80 = a_UV1;
      const float2 x_e84 = Mul2(x_e79, float4(x_e80, 1.0f, 1.0f));
      v_TexCoord = x_e84.xy;
      return;
    }
  }
}

struct tint_symbol_1 {
  float3 a_Position : TEXCOORD0;
  float2 a_UV : TEXCOORD1;
  float4 a_Color : TEXCOORD2;
  float3 a_Normal : TEXCOORD3;
  float a_PosMtxIdx : TEXCOORD4;
};
struct tint_symbol_2 {
  float4 v_Color : TEXCOORD0;
  float2 v_TexCoord : TEXCOORD1;
  float4 member : SV_Position;
};

VertexOutput main_inner(float3 a_Position, float2 a_UV, float4 a_Color, float3 a_Normal, float a_PosMtxIdx) {
  a_Position1 = a_Position;
  a_UV1 = a_UV;
  a_Color1 = a_Color;
  a_Normal1 = a_Normal;
  a_PosMtxIdx1 = a_PosMtxIdx;
  main1();
  const float4 x_e11 = v_Color;
  const float2 x_e13 = v_TexCoord;
  const float4 x_e15 = gl_Position;
  const VertexOutput tint_symbol_6 = {x_e11, x_e13, x_e15};
  return tint_symbol_6;
}

tint_symbol_2 main(tint_symbol_1 tint_symbol) {
  const VertexOutput inner_result = main_inner(tint_symbol.a_Position, tint_symbol.a_UV, tint_symbol.a_Color, tint_symbol.a_Normal, tint_symbol.a_PosMtxIdx);
  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
  wrapper_result.v_Color = inner_result.v_Color;
  wrapper_result.v_TexCoord = inner_result.v_TexCoord;
  wrapper_result.member = inner_result.member;
  return wrapper_result;
}
