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

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

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

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

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

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var A1 : array<f32, 3>;
  var a : i32;
  var b : f32;
  var c : bool;
  var x_36 : bool;
  let x_38 : f32 = x_6.x_GLF_uniform_float_values[2];
  let x_40 : f32 = x_6.x_GLF_uniform_float_values[0];
  let x_42 : f32 = x_6.x_GLF_uniform_float_values[1];
  A1 = array<f32, 3>(x_38, x_40, x_42);
  let x_45 : i32 = x_9.x_GLF_uniform_int_values[0];
  let x_47 : i32 = x_9.x_GLF_uniform_int_values[0];
  let x_49 : i32 = x_9.x_GLF_uniform_int_values[1];
  a = clamp(x_45, x_47, x_49);
  let x_51 : i32 = a;
  let x_53 : i32 = x_9.x_GLF_uniform_int_values[1];
  let x_55 : i32 = x_9.x_GLF_uniform_int_values[0];
  let x_58 : f32 = A1[clamp(x_51, x_53, x_55)];
  b = x_58;
  let x_59 : f32 = b;
  let x_61 : i32 = x_9.x_GLF_uniform_int_values[1];
  let x_63 : f32 = A1[x_61];
  if ((x_59 < x_63)) {
    let x_69 : f32 = x_6.x_GLF_uniform_float_values[0];
    let x_71 : f32 = x_6.x_GLF_uniform_float_values[2];
    x_36 = (x_69 > x_71);
  } else {
    let x_74 : f32 = x_6.x_GLF_uniform_float_values[0];
    let x_76 : i32 = x_9.x_GLF_uniform_int_values[2];
    let x_78 : f32 = A1[x_76];
    x_36 = (x_74 < x_78);
  }
  let x_80 : bool = x_36;
  c = x_80;
  let x_81 : bool = c;
  if (x_81) {
    let x_86 : i32 = x_9.x_GLF_uniform_int_values[0];
    let x_89 : i32 = x_9.x_GLF_uniform_int_values[1];
    let x_92 : i32 = x_9.x_GLF_uniform_int_values[1];
    let x_95 : i32 = x_9.x_GLF_uniform_int_values[0];
    x_GLF_color = vec4<f32>(f32(x_86), f32(x_89), f32(x_92), f32(x_95));
  } else {
    let x_99 : f32 = x_6.x_GLF_uniform_float_values[0];
    x_GLF_color = vec4<f32>(x_99, x_99, x_99, x_99);
  }
  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);
}
