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

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

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var a : i32;
  var b : i32;
  var c : i32;
  var x_76 : bool;
  var x_83 : bool;
  var x_77_phi : bool;
  var x_84_phi : bool;
  let x_31 : i32 = x_6.x_GLF_uniform_int_values[0];
  a = x_31;
  let x_33 : i32 = x_6.x_GLF_uniform_int_values[2];
  b = x_33;
  c = 1;
  loop {
    let x_38 : i32 = b;
    let x_40 : i32 = x_6.x_GLF_uniform_int_values[4];
    let x_42 : i32 = a;
    if (((x_38 < x_40) && (x_42 < 10))) {
    } else {
      break;
    }
    let x_46 : i32 = c;
    if ((x_46 > 5)) {
      break;
    }
    let x_50 : i32 = a;
    a = (x_50 + 1);
    let x_52 : i32 = c;
    c = (x_52 + 1);
    let x_54 : i32 = b;
    b = (x_54 + 1);
  }
  loop {
    let x_60 : i32 = a;
    let x_62 : i32 = x_6.x_GLF_uniform_int_values[1];
    if ((x_60 < x_62)) {
    } else {
      break;
    }

    continuing {
      let x_65 : i32 = a;
      a = (x_65 + 1);
    }
  }
  let x_67 : i32 = a;
  let x_69 : i32 = x_6.x_GLF_uniform_int_values[1];
  let x_70 : bool = (x_67 == x_69);
  x_77_phi = x_70;
  if (x_70) {
    let x_73 : i32 = b;
    let x_75 : i32 = x_6.x_GLF_uniform_int_values[3];
    x_76 = (x_73 == x_75);
    x_77_phi = x_76;
  }
  let x_77 : bool = x_77_phi;
  x_84_phi = x_77;
  if (x_77) {
    let x_80 : i32 = c;
    let x_82 : i32 = x_6.x_GLF_uniform_int_values[3];
    x_83 = (x_80 == x_82);
    x_84_phi = x_83;
  }
  let x_84 : bool = x_84_phi;
  if (x_84) {
    let x_89 : i32 = x_6.x_GLF_uniform_int_values[2];
    let x_92 : i32 = x_6.x_GLF_uniform_int_values[0];
    let x_95 : i32 = x_6.x_GLF_uniform_int_values[0];
    let x_98 : i32 = x_6.x_GLF_uniform_int_values[2];
    x_GLF_color = vec4<f32>(f32(x_89), f32(x_92), f32(x_95), f32(x_98));
  } else {
    let x_102 : i32 = x_6.x_GLF_uniform_int_values[0];
    let x_103 : f32 = f32(x_102);
    x_GLF_color = vec4<f32>(x_103, x_103, x_103, x_103);
  }
  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);
}
