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

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

[[block]]
struct buf1 {
  v1 : vec2<f32>;
};

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

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var m24 : mat2x2<f32>;
  var a : f32;
  var v2 : vec2<f32>;
  var v3 : vec2<f32>;
  let x_40 : f32 = x_6.x_GLF_uniform_float_values[0];
  let x_42 : f32 = x_6.x_GLF_uniform_float_values[0];
  let x_44 : f32 = x_8.v1.x;
  let x_47 : f32 = x_6.x_GLF_uniform_float_values[0];
  m24 = mat2x2<f32>(vec2<f32>(x_40, x_42), vec2<f32>((x_44 * 1.0), x_47));
  let x_51 : mat2x2<f32> = m24;
  a = x_51[0u].x;
  v2 = vec2<f32>(-0x1.8p+128, 1.0);
  let x_53 : vec2<f32> = v2;
  let x_54 : f32 = a;
  v3 = reflect(x_53, vec2<f32>(x_54, 1.0));
  let x_58 : f32 = x_6.x_GLF_uniform_float_values[0];
  let x_59 : vec2<f32> = v3;
  let x_61 : f32 = x_6.x_GLF_uniform_float_values[0];
  x_GLF_color = vec4<f32>(x_58, x_59.x, x_59.y, x_61);
  let x_66 : f32 = x_8.v1.y;
  let x_68 : f32 = x_6.x_GLF_uniform_float_values[0];
  if ((x_66 == x_68)) {
    let x_73 : vec4<f32> = x_GLF_color;
    x_GLF_color = vec4<f32>(x_73.x, vec2<f32>(0.0, 0.0).x, vec2<f32>(0.0, 0.0).y, x_73.w);
  } 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);
}
