[[block]]
struct buf0 {
  resolution : vec2<f32>;
};

[[group(0), binding(0)]] var<uniform> x_10 : buf0;

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn compute_value_f1_f1_(limit : ptr<function, f32>, thirty_two : ptr<function, f32>) -> f32 {
  var x_91 : f32;
  var x_91_phi : f32;
  var x_94_phi : i32;
  x_91_phi = -0.5;
  x_94_phi = 1;
  loop {
    var x_104 : f32;
    var x_113 : f32;
    var x_95 : i32;
    var x_92_phi : f32;
    x_91 = x_91_phi;
    let x_94 : i32 = x_94_phi;
    if ((x_94 < 800)) {
    } else {
      break;
    }
    var x_112 : f32;
    var x_113_phi : f32;
    if (((x_94 % 32) == 0)) {
      x_104 = (x_91 + 0.400000006);
      x_92_phi = x_104;
    } else {
      let x_106 : f32 = *(thirty_two);
      x_113_phi = x_91;
      if (((f32(x_94) - (round(x_106) * floor((f32(x_94) / round(x_106))))) <= 0.01)) {
        x_112 = (x_91 + 100.0);
        x_113_phi = x_112;
      }
      x_113 = x_113_phi;
      x_92_phi = x_113;
    }
    var x_92 : f32;
    x_92 = x_92_phi;
    let x_115 : f32 = *(limit);
    if ((f32(x_94) >= x_115)) {
      return x_92;
    }

    continuing {
      x_95 = (x_94 + 1);
      x_91_phi = x_92;
      x_94_phi = x_95;
    }
  }
  return x_91;
}

fn main_1() {
  var c : vec3<f32>;
  var param : f32;
  var param_1 : f32;
  var param_2 : f32;
  var param_3 : f32;
  var x_68_phi : i32;
  c = vec3<f32>(7.0, 8.0, 9.0);
  let x_52 : f32 = x_10.resolution.x;
  let x_54 : f32 = round((x_52 * 0.125));
  let x_56 : f32 = gl_FragCoord.x;
  param = x_56;
  param_1 = x_54;
  let x_57 : f32 = compute_value_f1_f1_(&(param), &(param_1));
  let x_58 : ptr<function, f32> = &(c.x);
  *(x_58) = x_57;
  let x_60 : f32 = gl_FragCoord.y;
  param_2 = x_60;
  param_3 = x_54;
  let x_61 : f32 = compute_value_f1_f1_(&(param_2), &(param_3));
  let x_62 : ptr<function, f32> = &(c.y);
  *(x_62) = x_61;
  let x_63 : f32 = *(x_58);
  let x_64 : f32 = *(x_62);
  c.z = (x_63 + x_64);
  x_68_phi = 0;
  loop {
    var x_69 : i32;
    let x_68 : i32 = x_68_phi;
    if ((x_68 < 3)) {
    } else {
      break;
    }
    let x_74 : ptr<function, f32> = &(c[x_68]);
    let x_75 : f32 = *(x_74);
    if ((x_75 >= 1.0)) {
      let x_79 : f32 = *(x_74);
      let x_80 : f32 = *(x_74);
      *(x_74) = (x_79 * x_80);
    }

    continuing {
      x_69 = (x_68 + 1);
      x_68_phi = x_69;
    }
  }
  let x_82 : vec3<f32> = c;
  let x_84 : vec3<f32> = normalize(abs(x_82));
  x_GLF_color = vec4<f32>(x_84.x, x_84.y, x_84.z, 1.0);
  return;
}

struct main_out {
  [[location(0)]]
  x_GLF_color_1 : vec4<f32>;
};

[[stage(fragment)]]
fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
  gl_FragCoord = gl_FragCoord_param;
  main_1();
  return main_out(x_GLF_color);
}
