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

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

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var v1 : vec4<f32>;
  var v2 : vec4<f32>;
  var v3 : vec4<f32>;
  var v4 : vec4<f32>;
  var x_69 : bool;
  var x_77 : bool;
  var x_85 : bool;
  var x_93 : bool;
  var x_70_phi : bool;
  var x_78_phi : bool;
  var x_86_phi : bool;
  var x_94_phi : bool;
  let x_41 : f32 = x_6.x_GLF_uniform_float_values[2];
  let x_43 : f32 = x_6.x_GLF_uniform_float_values[2];
  let x_45 : f32 = x_6.x_GLF_uniform_float_values[0];
  let x_47 : f32 = x_6.x_GLF_uniform_float_values[2];
  v1 = vec4<f32>(x_41, x_43, x_45, x_47);
  v2 = vec4<f32>(1.570796371, 1.119769573, 0x1.8p+128, 0.927295208);
  let x_50 : f32 = x_6.x_GLF_uniform_float_values[0];
  v3 = vec4<f32>(x_50, x_50, x_50, x_50);
  let x_52 : vec4<f32> = v1;
  let x_53 : vec4<f32> = v2;
  let x_54 : vec4<f32> = v3;
  v4 = smoothStep(x_52, x_53, x_54);
  let x_56 : vec4<f32> = v4;
  x_GLF_color = vec4<f32>(x_56.x, x_56.y, x_56.w, x_56.x);
  let x_59 : f32 = v4.x;
  let x_61 : f32 = x_6.x_GLF_uniform_float_values[4];
  let x_62 : bool = (x_59 > x_61);
  x_70_phi = x_62;
  if (x_62) {
    let x_66 : f32 = v4.x;
    let x_68 : f32 = x_6.x_GLF_uniform_float_values[5];
    x_69 = (x_66 < x_68);
    x_70_phi = x_69;
  }
  let x_70 : bool = x_70_phi;
  x_78_phi = x_70;
  if (x_70) {
    let x_74 : f32 = v4.y;
    let x_76 : f32 = x_6.x_GLF_uniform_float_values[3];
    x_77 = (x_74 > x_76);
    x_78_phi = x_77;
  }
  let x_78 : bool = x_78_phi;
  x_86_phi = x_78;
  if (x_78) {
    let x_82 : f32 = v4.y;
    let x_84 : f32 = x_6.x_GLF_uniform_float_values[6];
    x_85 = (x_82 < x_84);
    x_86_phi = x_85;
  }
  let x_86 : bool = x_86_phi;
  x_94_phi = x_86;
  if (x_86) {
    let x_90 : f32 = v4.w;
    let x_92 : f32 = x_6.x_GLF_uniform_float_values[0];
    x_93 = (x_90 == x_92);
    x_94_phi = x_93;
  }
  let x_94 : bool = x_94_phi;
  if (x_94) {
    let x_99 : f32 = x_6.x_GLF_uniform_float_values[0];
    let x_101 : f32 = x_6.x_GLF_uniform_float_values[1];
    let x_103 : f32 = x_6.x_GLF_uniform_float_values[1];
    let x_105 : f32 = x_6.x_GLF_uniform_float_values[0];
    x_GLF_color = vec4<f32>(x_99, x_101, x_103, x_105);
  } else {
    let x_108 : f32 = x_6.x_GLF_uniform_float_values[1];
    x_GLF_color = vec4<f32>(x_108, x_108, x_108, x_108);
  }
  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);
}
