#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ float one;
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

void main_1(constant buf0& x_6, thread float4* const tint_symbol_4) {
  float f = 0.0f;
  int a = 0;
  int b = 0;
  int c = 0;
  int i = 0;
  float3 v = 0.0f;
  float const x_42 = x_6.one;
  f = x_42;
  a = 1;
  b = 0;
  c = 1;
  i = 0;
  while (true) {
    int const x_47 = i;
    if ((x_47 < 3)) {
    } else {
      break;
    }
    int const x_50 = i;
    float const x_51 = f;
    int const x_52 = i;
    v[x_50] = (x_51 + float(x_52));
    {
      int const x_56 = i;
      i = as_type<int>((as_type<uint>(x_56) + as_type<uint>(1)));
    }
  }
  float const x_59 = x_6.one;
  if ((x_59 == 1.0f)) {
    while (true) {
      *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
      {
        int const x_67 = c;
        int const x_68 = a;
        int const x_69 = b;
        if (((x_67 & (x_68 | x_69)) == 0)) {
        } else {
          break;
        }
      }
    }
    float const x_74 = x_6.one;
    if ((x_74 == 1.0f)) {
      *(tint_symbol_4) = float4(1.0f, 1.0f, 1.0f, 1.0f);
    }
  }
  float const x_79 = v.x;
  float const x_83 = v.y;
  float const x_87 = v.z;
  float3 const x_90 = float3(select(0.0f, 1.0f, (x_79 == 1.0f)), select(1.0f, 0.0f, (x_83 == 2.0f)), select(1.0f, 0.0f, (x_87 == 3.0f)));
  float4 const x_91 = *(tint_symbol_4);
  *(tint_symbol_4) = float4(x_90.x, x_90.y, x_90.z, x_91.w);
  (*(tint_symbol_4)).w = 1.0f;
  return;
}

fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
  thread float4 tint_symbol_5 = 0.0f;
  main_1(x_6, &(tint_symbol_5));
  main_out const tint_symbol_2 = {.x_GLF_color_1=tint_symbol_5};
  tint_symbol_1 const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_2.x_GLF_color_1};
  return tint_symbol_3;
}

