#include <metal_stdlib>

using namespace metal;
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_2 {
  float4 x_GLF_color_1 [[color(0)]];
};

void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  float4 c = 0.0f;
  int a = 0;
  int i1 = 0;
  int i2 = 0;
  int i3 = 0;
  int i4 = 0;
  int i5 = 0;
  int i6 = 0;
  int i7 = 0;
  int i8_1 = 0;
  c = float4(0.0f, 0.0f, 0.0f, 1.0f);
  a = 0;
  while (true) {
    while (true) {
      int const x_46 = a;
      c[x_46] = 1.0f;
      i1 = 0;
      while (true) {
        int const x_52 = i1;
        if ((x_52 < 1)) {
        } else {
          break;
        }
        i2 = 0;
        while (true) {
          int const x_59 = i2;
          if ((x_59 < 1)) {
          } else {
            break;
          }
          i3 = 0;
          while (true) {
            int const x_66 = i3;
            if ((x_66 < 1)) {
            } else {
              break;
            }
            i4 = 0;
            while (true) {
              int const x_73 = i4;
              if ((x_73 < 1)) {
              } else {
                break;
              }
              i5 = 0;
              while (true) {
                int const x_80 = i5;
                if ((x_80 < 1)) {
                } else {
                  break;
                }
                i6 = 0;
                while (true) {
                  int const x_87 = i6;
                  if ((x_87 < 1)) {
                  } else {
                    break;
                  }
                  i7 = 0;
                  while (true) {
                    int const x_94 = i7;
                    if ((x_94 < 1)) {
                    } else {
                      break;
                    }
                    i8_1 = 0;
                    while (true) {
                      int const x_101 = i8_1;
                      if ((x_101 < 17)) {
                      } else {
                        break;
                      }
                      int const x_104 = a;
                      a = as_type<int>((as_type<uint>(x_104) + as_type<uint>(1)));
                      {
                        int const x_106 = i8_1;
                        i8_1 = as_type<int>((as_type<uint>(x_106) + as_type<uint>(1)));
                      }
                    }
                    {
                      int const x_108 = i7;
                      i7 = as_type<int>((as_type<uint>(x_108) + as_type<uint>(1)));
                    }
                  }
                  {
                    int const x_110 = i6;
                    i6 = as_type<int>((as_type<uint>(x_110) + as_type<uint>(1)));
                  }
                }
                {
                  int const x_112 = i5;
                  i5 = as_type<int>((as_type<uint>(x_112) + as_type<uint>(1)));
                }
              }
              {
                int const x_114 = i4;
                i4 = as_type<int>((as_type<uint>(x_114) + as_type<uint>(1)));
              }
            }
            {
              int const x_116 = i3;
              i3 = as_type<int>((as_type<uint>(x_116) + as_type<uint>(1)));
            }
          }
          {
            int const x_118 = i2;
            i2 = as_type<int>((as_type<uint>(x_118) + as_type<uint>(1)));
          }
        }
        {
          int const x_120 = i1;
          i1 = as_type<int>((as_type<uint>(x_120) + as_type<uint>(1)));
        }
      }
      {
        float const x_123 = (*(tint_symbol_5)).x;
        if ((x_123 < -1.0f)) {
        } else {
          break;
        }
      }
    }
    {
      float const x_126 = (*(tint_symbol_5)).y;
      if ((x_126 < -1.0f)) {
      } else {
        break;
      }
    }
  }
  float4 const x_128 = c;
  *(tint_symbol_6) = x_128;
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]]) {
  thread float4 tint_symbol_7 = 0.0f;
  thread float4 tint_symbol_8 = 0.0f;
  tint_symbol_7 = gl_FragCoord_param;
  main_1(&(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;
}

