#include <metal_stdlib>

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

void main_1(constant buf0& x_7, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  float f = 0.0f;
  bool x_49 = false;
  bool x_50_phi = false;
  float const x_31 = (*(tint_symbol_5)).x;
  f = x_31;
  float const x_32 = f;
  f = (x_32 + -INFINITY);
  float const x_34 = f;
  if (((5.0f / x_34) == 0.0f)) {
    float const x_39 = f;
    f = (x_39 + 1.0f);
  }
  float const x_41 = f;
  bool const x_42 = isnan(x_41);
  x_50_phi = x_42;
  if (!(x_42)) {
    float const x_46 = f;
    float const x_48 = x_7.zero;
    x_49 = (x_46 != x_48);
    x_50_phi = x_49;
  }
  bool const x_50 = x_50_phi;
  if (x_50) {
    f = 0.0f;
  }
  float const x_53 = f;
  if ((x_53 == 0.0f)) {
    *(tint_symbol_6) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    *(tint_symbol_6) = float4(0.0f, 0.0f, 0.0f, 0.0f);
  }
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
  thread float4 tint_symbol_7 = 0.0f;
  thread float4 tint_symbol_8 = 0.0f;
  tint_symbol_7 = gl_FragCoord_param;
  main_1(x_7, &(tint_symbol_7), &(tint_symbol_8));
  main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_8};
  tint_symbol_2 const tint_symbol_4 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
  return tint_symbol_4;
}

