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 i : i32;
  var A : array<i32, 4>;
  var x_77 : bool;
  var x_87 : bool;
  var x_97 : bool;
  var x_78_phi : bool;
  var x_88_phi : bool;
  var x_98_phi : bool;
  let x_33 : i32 = x_6.x_GLF_uniform_int_values[0];
  i = x_33;
  loop {
    let x_38 : i32 = i;
    let x_40 : i32 = x_6.x_GLF_uniform_int_values[4];
    if ((x_38 < x_40)) {
    } else {
      break;
    }
    let x_43 : i32 = i;
    let x_45 : i32 = x_6.x_GLF_uniform_int_values[0];
    A[x_43] = x_45;
    let x_47 : i32 = i;
    let x_50 : i32 = x_6.x_GLF_uniform_int_values[3];
    let x_54 : i32 = x_6.x_GLF_uniform_int_values[1];
    if ((max((2 * x_47), (2 * x_50)) == x_54)) {
      let x_58 : i32 = i;
      A[x_58] = 1;
    }

    continuing {
      let x_60 : i32 = i;
      i = (x_60 + 1);
    }
  }
  let x_63 : i32 = x_6.x_GLF_uniform_int_values[0];
  let x_65 : i32 = A[x_63];
  let x_67 : i32 = x_6.x_GLF_uniform_int_values[3];
  let x_68 : bool = (x_65 == x_67);
  x_78_phi = x_68;
  if (x_68) {
    let x_72 : i32 = x_6.x_GLF_uniform_int_values[3];
    let x_74 : i32 = A[x_72];
    let x_76 : i32 = x_6.x_GLF_uniform_int_values[3];
    x_77 = (x_74 == x_76);
    x_78_phi = x_77;
  }
  let x_78 : bool = x_78_phi;
  x_88_phi = x_78;
  if (x_78) {
    let x_82 : i32 = x_6.x_GLF_uniform_int_values[1];
    let x_84 : i32 = A[x_82];
    let x_86 : i32 = x_6.x_GLF_uniform_int_values[0];
    x_87 = (x_84 == x_86);
    x_88_phi = x_87;
  }
  let x_88 : bool = x_88_phi;
  x_98_phi = x_88;
  if (x_88) {
    let x_92 : i32 = x_6.x_GLF_uniform_int_values[2];
    let x_94 : i32 = A[x_92];
    let x_96 : i32 = x_6.x_GLF_uniform_int_values[0];
    x_97 = (x_94 == x_96);
    x_98_phi = x_97;
  }
  let x_98 : bool = x_98_phi;
  if (x_98) {
    let x_103 : i32 = x_6.x_GLF_uniform_int_values[3];
    let x_106 : i32 = x_6.x_GLF_uniform_int_values[0];
    let x_109 : i32 = x_6.x_GLF_uniform_int_values[0];
    let x_112 : i32 = x_6.x_GLF_uniform_int_values[3];
    x_GLF_color = vec4<f32>(f32(x_103), f32(x_106), f32(x_109), f32(x_112));
  } else {
    x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.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);
}
