#include <metal_stdlib>

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

float compute_value_f1_f1_(thread float* const limit, thread float* const thirty_two) {
  float x_91 = 0.0f;
  float x_91_phi = 0.0f;
  int x_94_phi = 0;
  x_91_phi = -0.5f;
  x_94_phi = 1;
  while (true) {
    float x_104 = 0.0f;
    float x_113 = 0.0f;
    int x_95 = 0;
    float x_92_phi = 0.0f;
    x_91 = x_91_phi;
    int const x_94 = x_94_phi;
    if ((x_94 < 800)) {
    } else {
      break;
    }
    float x_112 = 0.0f;
    float x_113_phi = 0.0f;
    if (((x_94 % 32) == 0)) {
      x_104 = (x_91 + 0.400000006f);
      x_92_phi = x_104;
    } else {
      float const x_106 = *(thirty_two);
      x_113_phi = x_91;
      if (((float(x_94) - (rint(x_106) * floor((float(x_94) / rint(x_106))))) <= 0.01f)) {
        x_112 = (x_91 + 100.0f);
        x_113_phi = x_112;
      }
      x_113 = x_113_phi;
      x_92_phi = x_113;
    }
    float x_92 = 0.0f;
    x_92 = x_92_phi;
    float const x_115 = *(limit);
    if ((float(x_94) >= x_115)) {
      return x_92;
    }
    {
      x_95 = (x_94 + 1);
      x_91_phi = x_92;
      x_94_phi = x_95;
    }
  }
  return x_91;
}

void main_1(constant buf0& x_10, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  float3 c = 0.0f;
  float param = 0.0f;
  float param_1 = 0.0f;
  float param_2 = 0.0f;
  float param_3 = 0.0f;
  int x_68_phi = 0;
  c = float3(7.0f, 8.0f, 9.0f);
  float const x_52 = x_10.resolution.x;
  float const x_54 = rint((x_52 * 0.125f));
  float const x_56 = (*(tint_symbol_5)).x;
  param = x_56;
  param_1 = x_54;
  float const x_57 = compute_value_f1_f1_(&(param), &(param_1));
  c.x = x_57;
  float const x_60 = (*(tint_symbol_5)).y;
  param_2 = x_60;
  param_3 = x_54;
  float const x_61 = compute_value_f1_f1_(&(param_2), &(param_3));
  c.y = x_61;
  float const x_63 = c.x;
  float const x_64 = c.y;
  c.z = (x_63 + x_64);
  x_68_phi = 0;
  while (true) {
    int x_69 = 0;
    int const x_68 = x_68_phi;
    if ((x_68 < 3)) {
    } else {
      break;
    }
    int const x_74_save = x_68;
    float const x_75 = c[x_74_save];
    if ((x_75 >= 1.0f)) {
      float const x_79 = c[x_74_save];
      float const x_80 = c[x_74_save];
      c[x_74_save] = (x_79 * x_80);
    }
    {
      x_69 = (x_68 + 1);
      x_68_phi = x_69;
    }
  }
  float3 const x_82 = c;
  float3 const x_84 = normalize(fabs(x_82));
  *(tint_symbol_6) = float4(x_84.x, x_84.y, x_84.z, 1.0f);
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_10 [[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_10, &(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;
}

