type Arr = [[stride(16)]] array<i32, 4>;

struct buf0 {
  x_GLF_uniform_int_values : Arr;
};

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var x_28 : i32;
  var x_29 : i32;
  var x_28_phi : i32;
  var x_31_phi : i32;
  var x_42_phi : i32;
  let x_24 : i32 = min(1, reverseBits(1));
  let x_26 : i32 = x_5.x_GLF_uniform_int_values[3];
  x_28_phi = x_26;
  x_31_phi = 1;
  loop {
    var x_32 : i32;
    x_28 = x_28_phi;
    let x_31 : i32 = x_31_phi;
    x_42_phi = x_28;
    if ((x_31 <= (x_24 - 1))) {
    } else {
      break;
    }
    x_29 = bitcast<i32>((x_28 + bitcast<i32>(x_31)));
    let x_38 : i32 = x_5.x_GLF_uniform_int_values[0];
    if ((x_38 == 1)) {
      x_42_phi = x_29;
      break;
    }

    continuing {
      x_32 = (x_31 + 1);
      x_28_phi = x_29;
      x_31_phi = x_32;
    }
  }
  let x_42 : i32 = x_42_phi;
  let x_44 : i32 = x_5.x_GLF_uniform_int_values[2];
  if ((x_42 == x_44)) {
    let x_50 : i32 = x_5.x_GLF_uniform_int_values[0];
    let x_51 : f32 = f32(x_50);
    let x_53 : i32 = x_5.x_GLF_uniform_int_values[1];
    let x_54 : f32 = f32(x_53);
    x_GLF_color = vec4<f32>(x_51, x_54, x_54, x_51);
  } else {
    let x_57 : i32 = x_5.x_GLF_uniform_int_values[1];
    let x_58 : f32 = f32(x_57);
    x_GLF_color = vec4<f32>(x_58, x_58, x_58, x_58);
  }
  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);
}
