#include <metal_stdlib>

using namespace metal;
struct Mat4x4_ {
  /* 0x0000 */ float4 mx;
  /* 0x0010 */ float4 my;
  /* 0x0020 */ float4 mz;
  /* 0x0030 */ float4 mw;
};

struct Mat4x3_ {
  /* 0x0000 */ float4 mx;
  /* 0x0010 */ float4 my;
  /* 0x0020 */ float4 mz;
};

struct Mat4x2_ {
  /* 0x0000 */ float4 mx;
  /* 0x0010 */ float4 my;
};

struct ub_SceneParams {
  /* 0x0000 */ Mat4x4_ u_Projection;
};

struct tint_array_wrapper {
  /* 0x0000 */ Mat4x2_ arr[1];
};

struct ub_MaterialParams {
  /* 0x0000 */ tint_array_wrapper u_TexMtx;
  /* 0x0020 */ float4 u_Misc0_;
};

struct tint_array_wrapper_1 {
  /* 0x0000 */ Mat4x3_ arr[32];
};

struct ub_PacketParams {
  /* 0x0000 */ tint_array_wrapper_1 u_PosMtx;
};

struct VertexOutput {
  float4 v_Color;
  float2 v_TexCoord;
  float4 member;
};

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

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

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

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

float4 Mul(Mat4x4_ m8, float4 v) {
  Mat4x4_ m9 = {};
  float4 v1 = 0.0f;
  m9 = m8;
  v1 = v;
  Mat4x4_ const x_e4 = m9;
  float4 const x_e6 = v1;
  Mat4x4_ const x_e8 = m9;
  float4 const x_e10 = v1;
  Mat4x4_ const x_e12 = m9;
  float4 const x_e14 = v1;
  Mat4x4_ const x_e16 = m9;
  float4 const 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 = {};
  float4 v3 = 0.0f;
  m11 = m10;
  v3 = v2;
  Mat4x3_ const x_e4 = m11;
  float4 const x_e6 = v3;
  Mat4x3_ const x_e8 = m11;
  float4 const x_e10 = v3;
  Mat4x3_ const x_e12 = m11;
  float4 const 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 = {};
  float4 v5 = 0.0f;
  m13 = m12;
  v5 = v4;
  Mat4x2_ const x_e4 = m13;
  float4 const x_e6 = v5;
  Mat4x2_ const x_e8 = m13;
  float4 const 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 = 0.0f;
  Mat4x3_ m15 = {};
  v7 = v6;
  m15 = m14;
  Mat4x3_ const x_e5 = m15;
  float3 const x_e6 = Mat4x3GetCol0_(x_e5);
  float3 const x_e7 = v7;
  Mat4x3_ const x_e10 = m15;
  float3 const x_e11 = Mat4x3GetCol1_(x_e10);
  float3 const x_e12 = v7;
  Mat4x3_ const x_e15 = m15;
  float3 const x_e16 = Mat4x3GetCol2_(x_e15);
  float3 const x_e17 = v7;
  Mat4x3_ const x_e20 = m15;
  float3 const x_e21 = Mat4x3GetCol3_(x_e20);
  float3 const 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 = {};
  n1 = n;
  float const x_e4 = n1;
  o.mx = float4(x_e4, 0.0f, 0.0f, 0.0f);
  float const x_e11 = n1;
  o.my = float4(0.0f, x_e11, 0.0f, 0.0f);
  float const x_e18 = n1;
  o.mz = float4(0.0f, 0.0f, x_e18, 0.0f);
  float const x_e25 = n1;
  o.mw = float4(0.0f, 0.0f, 0.0f, x_e25);
  Mat4x4_ const x_e27 = o;
  return x_e27;
}

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

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

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

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

void main1(thread float* const tint_symbol_5, const constant ub_PacketParams* const tint_symbol_6, thread float3* const tint_symbol_7, const constant ub_SceneParams* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10, thread float4* const tint_symbol_11, const constant ub_MaterialParams* const tint_symbol_12, thread float3* const tint_symbol_13, thread float2* const tint_symbol_14, thread float2* const tint_symbol_15) {
  Mat4x3_ t_PosMtx = {};
  float2 t_TexSpaceCoord = 0.0f;
  float const x_e15 = *(tint_symbol_5);
  Mat4x3_ const x_e18 = (*(tint_symbol_6)).u_PosMtx.arr[int(x_e15)];
  t_PosMtx = x_e18;
  Mat4x3_ const x_e23 = t_PosMtx;
  Mat4x4_ const x_e24 = x_Mat4x4_1(x_e23);
  float3 const x_e25 = *(tint_symbol_7);
  Mat4x3_ const x_e29 = t_PosMtx;
  Mat4x4_ const x_e30 = x_Mat4x4_1(x_e29);
  float3 const x_e31 = *(tint_symbol_7);
  float4 const x_e34 = Mul(x_e30, float4(x_e31, 1.0f));
  Mat4x4_ const x_e35 = (*(tint_symbol_8)).u_Projection;
  Mat4x3_ const x_e37 = t_PosMtx;
  Mat4x4_ const x_e38 = x_Mat4x4_1(x_e37);
  float3 const x_e39 = *(tint_symbol_7);
  Mat4x3_ const x_e43 = t_PosMtx;
  Mat4x4_ const x_e44 = x_Mat4x4_1(x_e43);
  float3 const x_e45 = *(tint_symbol_7);
  float4 const x_e48 = Mul(x_e44, float4(x_e45, 1.0f));
  float4 const x_e49 = Mul(x_e35, x_e48);
  *(tint_symbol_9) = x_e49;
  float4 const x_e50 = *(tint_symbol_10);
  *(tint_symbol_11) = x_e50;
  float4 const x_e52 = (*(tint_symbol_12)).u_Misc0_;
  if ((x_e52[0] == 2.0f)) {
    {
      float3 const x_e59 = *(tint_symbol_13);
      Mat4x2_ const x_e64 = (*(tint_symbol_12)).u_TexMtx.arr[0];
      float3 const x_e65 = *(tint_symbol_13);
      float2 const x_e68 = Mul2(x_e64, float4(x_e65, 1.0f));
      *(tint_symbol_14) = float2(x_e68).xy;
      return;
    }
  } else {
    {
      float2 const x_e73 = *(tint_symbol_15);
      Mat4x2_ const x_e79 = (*(tint_symbol_12)).u_TexMtx.arr[0];
      float2 const x_e80 = *(tint_symbol_15);
      float2 const x_e84 = Mul2(x_e79, float4(x_e80, 1.0f, 1.0f));
      *(tint_symbol_14) = float2(x_e84).xy;
      return;
    }
  }
}

struct tint_symbol_2 {
  float3 a_Position [[attribute(0)]];
  float2 a_UV [[attribute(1)]];
  float4 a_Color [[attribute(2)]];
  float3 a_Normal [[attribute(3)]];
  float a_PosMtxIdx [[attribute(4)]];
};

struct tint_symbol_3 {
  float4 v_Color [[user(locn0)]];
  float2 v_TexCoord [[user(locn1)]];
  float4 member [[position]];
};

VertexOutput tint_symbol_inner(float3 a_Position, float2 a_UV, float4 a_Color, float3 a_Normal, float a_PosMtxIdx, thread float3* const tint_symbol_16, thread float2* const tint_symbol_17, thread float4* const tint_symbol_18, thread float3* const tint_symbol_19, thread float* const tint_symbol_20, const constant ub_PacketParams* const tint_symbol_21, const constant ub_SceneParams* const tint_symbol_22, thread float4* const tint_symbol_23, thread float4* const tint_symbol_24, const constant ub_MaterialParams* const tint_symbol_25, thread float2* const tint_symbol_26) {
  *(tint_symbol_16) = a_Position;
  *(tint_symbol_17) = a_UV;
  *(tint_symbol_18) = a_Color;
  *(tint_symbol_19) = a_Normal;
  *(tint_symbol_20) = a_PosMtxIdx;
  main1(tint_symbol_20, tint_symbol_21, tint_symbol_16, tint_symbol_22, tint_symbol_23, tint_symbol_18, tint_symbol_24, tint_symbol_25, tint_symbol_19, tint_symbol_26, tint_symbol_17);
  float4 const x_e11 = *(tint_symbol_24);
  float2 const x_e13 = *(tint_symbol_26);
  float4 const x_e15 = *(tint_symbol_23);
  VertexOutput const tint_symbol_4 = {.v_Color=x_e11, .v_TexCoord=x_e13, .member=x_e15};
  return tint_symbol_4;
}

vertex tint_symbol_3 tint_symbol(const constant ub_PacketParams* tint_symbol_32 [[buffer(0)]], const constant ub_SceneParams* tint_symbol_33 [[buffer(1)]], const constant ub_MaterialParams* tint_symbol_36 [[buffer(2)]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  thread float3 tint_symbol_27 = 0.0f;
  thread float2 tint_symbol_28 = 0.0f;
  thread float4 tint_symbol_29 = 0.0f;
  thread float3 tint_symbol_30 = 0.0f;
  thread float tint_symbol_31 = 0.0f;
  thread float4 tint_symbol_34 = 0.0f;
  thread float4 tint_symbol_35 = 0.0f;
  thread float2 tint_symbol_37 = 0.0f;
  VertexOutput const inner_result = tint_symbol_inner(tint_symbol_1.a_Position, tint_symbol_1.a_UV, tint_symbol_1.a_Color, tint_symbol_1.a_Normal, tint_symbol_1.a_PosMtxIdx, &(tint_symbol_27), &(tint_symbol_28), &(tint_symbol_29), &(tint_symbol_30), &(tint_symbol_31), tint_symbol_32, tint_symbol_33, &(tint_symbol_34), &(tint_symbol_35), tint_symbol_36, &(tint_symbol_37));
  tint_symbol_3 wrapper_result = {};
  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;
}

