type Arr = [[stride(16)]] array<f32, 4>;

[[block]]
struct buf1 {
  x_GLF_uniform_float_values : Arr;
};

type Arr_1 = [[stride(16)]] array<i32, 2>;

[[block]]
struct buf0 {
  x_GLF_uniform_int_values : Arr_1;
};

var<private> gl_FragCoord : vec4<f32>;

[[group(0), binding(1)]] var<uniform> x_8 : buf1;

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

var<private> x_GLF_v1 : vec4<f32>;

fn main_1() {
  var uv : vec2<f32>;
  var v1 : vec4<f32>;
  var a : f32;
  var i : i32;
  let x_49 : vec4<f32> = gl_FragCoord;
  uv = vec2<f32>(x_49.x, x_49.y);
  let x_52 : f32 = x_8.x_GLF_uniform_float_values[0];
  v1 = vec4<f32>(x_52, x_52, x_52, x_52);
  let x_55 : f32 = uv.y;
  let x_57 : f32 = x_8.x_GLF_uniform_float_values[0];
  if ((x_55 >= x_57)) {
    let x_62 : f32 = x_8.x_GLF_uniform_float_values[2];
    v1.x = x_62;
    let x_65 : f32 = x_8.x_GLF_uniform_float_values[0];
    v1.y = x_65;
    let x_68 : f32 = x_8.x_GLF_uniform_float_values[0];
    v1.z = x_68;
    let x_71 : f32 = x_8.x_GLF_uniform_float_values[2];
    v1.w = x_71;
  }
  let x_74 : f32 = x_8.x_GLF_uniform_float_values[2];
  a = x_74;
  let x_15 : i32 = x_12.x_GLF_uniform_int_values[1];
  i = x_15;
  loop {
    let x_16 : i32 = i;
    let x_17 : i32 = x_12.x_GLF_uniform_int_values[0];
    if ((x_16 < x_17)) {
    } else {
      break;
    }
    let x_84 : f32 = x_8.x_GLF_uniform_float_values[2];
    let x_86 : f32 = x_8.x_GLF_uniform_float_values[0];
    if ((x_84 < x_86)) {
      discard;
    }
    let x_91 : f32 = v1.x;
    let x_93 : f32 = v1.y;
    let x_96 : f32 = v1.z;
    let x_99 : f32 = v1.w;
    let x_102 : f32 = x_8.x_GLF_uniform_float_values[3];
    a = pow((((x_91 + x_93) + x_96) + x_99), x_102);

    continuing {
      let x_18 : i32 = i;
      i = (x_18 + 1);
    }
  }
  let x_104 : f32 = a;
  let x_106 : f32 = x_8.x_GLF_uniform_float_values[1];
  if ((x_104 == x_106)) {
    let x_111 : vec4<f32> = v1;
    x_GLF_v1 = x_111;
  } else {
    let x_20 : i32 = x_12.x_GLF_uniform_int_values[1];
    let x_113 : f32 = f32(x_20);
    x_GLF_v1 = vec4<f32>(x_113, x_113, x_113, x_113);
  }
  return;
}

struct main_out {
  [[location(0)]]
  x_GLF_v1_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_v1);
}
