#include <metal_stdlib>

using namespace metal;
struct Input {
  float4 position;
};
struct Output {
  float4 position;
};
struct tint_symbol_2 {
  float4 position [[attribute(0)]];
};
struct tint_symbol_3 {
  float4 position [[position]];
};

Output tint_symbol_inner(Input in) {
  Output const tint_symbol_4 = {.position=in.position};
  return tint_symbol_4;
}

vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  Input const tint_symbol_5 = {.position=tint_symbol_1.position};
  Output const inner_result = tint_symbol_inner(tint_symbol_5);
  tint_symbol_3 wrapper_result = {};
  wrapper_result.position = inner_result.position;
  return wrapper_result;
}

