#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  float2x4 arr[2];
};
struct main_out {
  float4 x_2_1;
};
struct tint_symbol_2 {
  float4 x_1_param [[attribute(7)]];
  float4 x_1_param_1 [[attribute(8)]];
  float4 x_1_param_2 [[attribute(9)]];
  float4 x_1_param_3 [[attribute(10)]];
};
struct tint_symbol_3 {
  float4 x_2_1 [[position]];
};

void main_1() {
  return;
}

main_out tint_symbol_inner(float4 x_1_param, float4 x_1_param_1, float4 x_1_param_2, float4 x_1_param_3, thread tint_array_wrapper* const tint_symbol_5, thread float4* const tint_symbol_6) {
  (*(tint_symbol_5)).arr[0][0] = x_1_param;
  (*(tint_symbol_5)).arr[0][1] = x_1_param_1;
  (*(tint_symbol_5)).arr[1][0] = x_1_param_2;
  (*(tint_symbol_5)).arr[1][1] = x_1_param_3;
  main_1();
  main_out const tint_symbol_4 = {.x_2_1=*(tint_symbol_6)};
  return tint_symbol_4;
}

vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  thread tint_array_wrapper tint_symbol_7 = {};
  thread float4 tint_symbol_8 = 0.0f;
  main_out const inner_result = tint_symbol_inner(tint_symbol_1.x_1_param, tint_symbol_1.x_1_param_1, tint_symbol_1.x_1_param_2, tint_symbol_1.x_1_param_3, &(tint_symbol_7), &(tint_symbol_8));
  tint_symbol_3 wrapper_result = {};
  wrapper_result.x_2_1 = inner_result.x_2_1;
  return wrapper_result;
}

