struct buf0 {
  quarter : f32,
}

@group(0) @binding(0) var<uniform> x_7 : buf0;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var N : vec4<f32>;
  var I : vec4<f32>;
  var Nref : vec4<f32>;
  var v : vec4<f32>;
  N = vec4<f32>(1.0, 2.0, 3.0, 4.0);
  let x_44 : f32 = x_7.quarter;
  I = vec4<f32>(4.0, 87.589996338, x_44, 92.510002136);
  Nref = vec4<f32>(17.049999237, -6.099999905, 4329.370605469, 2.700000048);
  let x_46 : vec4<f32> = N;
  let x_47 : vec4<f32> = I;
  let x_48 : vec4<f32> = Nref;
  v = faceForward(x_46, x_47, x_48);
  let x_50 : vec4<f32> = v;
  if (all((x_50 == vec4<f32>(-1.0, -2.0, -3.0, -4.0)))) {
    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 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);
}
