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

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

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

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

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

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var f : f32;
  var i : i32;
  var a : f32;
  let x_37 : f32 = x_6.x_GLF_uniform_float_values[1];
  f = x_37;
  let x_39 : i32 = x_9.x_GLF_uniform_int_values[1];
  i = x_39;
  loop {
    let x_44 : i32 = i;
    let x_46 : i32 = x_9.x_GLF_uniform_int_values[0];
    if ((x_44 > x_46)) {
    } else {
      break;
    }
    let x_49 : i32 = i;
    a = (1.0 - max(1.0, f32(x_49)));
    let x_53 : f32 = a;
    f = min(max(x_53, 0.0), 0.0);

    continuing {
      let x_56 : i32 = i;
      i = (x_56 - 1);
    }
  }
  let x_58 : f32 = f;
  let x_60 : f32 = x_6.x_GLF_uniform_float_values[0];
  if ((x_58 == x_60)) {
    let x_66 : i32 = x_9.x_GLF_uniform_int_values[2];
    let x_68 : f32 = f;
    let x_70 : i32 = x_9.x_GLF_uniform_int_values[0];
    x_GLF_color = vec4<f32>(f32(x_66), x_68, f32(x_70), 1.0);
  } else {
    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
  }
  return;
}

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

[[stage(fragment)]]
fn main() -> main_out {
  main_1();
  return main_out(x_GLF_color);
}
