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

struct buf0 {
  x_GLF_uniform_int_values : Arr;
};

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

var<private> x_GLF_color : vec4<f32>;

fn f_i1_(a : ptr<function, i32>) -> i32 {
  var i : i32;
  let x_16 : i32 = x_8.x_GLF_uniform_int_values[0];
  i = x_16;
  loop {
    let x_17 : i32 = i;
    let x_18 : i32 = x_8.x_GLF_uniform_int_values[6];
    if ((x_17 < x_18)) {
    } else {
      break;
    }
    let x_19 : i32 = i;
    let x_20 : i32 = x_8.x_GLF_uniform_int_values[2];
    if ((x_19 > x_20)) {
      let x_21 : i32 = *(a);
      return x_21;
    }

    continuing {
      let x_22 : i32 = i;
      i = (x_22 + 1);
    }
  }
  let x_24 : i32 = x_8.x_GLF_uniform_int_values[0];
  return x_24;
}

fn main_1() {
  var ref : array<i32, 10>;
  var i_1 : i32;
  var a_1 : array<i32, 10>;
  var param : i32;
  var param_1 : i32;
  var i_2 : i32;
  let x_25 : i32 = x_8.x_GLF_uniform_int_values[0];
  let x_26 : i32 = x_8.x_GLF_uniform_int_values[1];
  ref[x_25] = x_26;
  let x_27 : i32 = x_8.x_GLF_uniform_int_values[11];
  let x_28 : i32 = x_8.x_GLF_uniform_int_values[2];
  ref[x_27] = x_28;
  let x_29 : i32 = x_8.x_GLF_uniform_int_values[1];
  let x_30 : i32 = x_8.x_GLF_uniform_int_values[3];
  ref[x_29] = x_30;
  let x_31 : i32 = x_8.x_GLF_uniform_int_values[2];
  let x_32 : i32 = x_8.x_GLF_uniform_int_values[4];
  ref[x_31] = x_32;
  let x_33 : i32 = x_8.x_GLF_uniform_int_values[3];
  let x_34 : i32 = x_8.x_GLF_uniform_int_values[5];
  ref[x_33] = x_34;
  let x_35 : i32 = x_8.x_GLF_uniform_int_values[4];
  let x_36 : i32 = x_8.x_GLF_uniform_int_values[6];
  ref[x_35] = x_36;
  let x_37 : i32 = x_8.x_GLF_uniform_int_values[5];
  let x_38 : i32 = x_8.x_GLF_uniform_int_values[7];
  ref[x_37] = x_38;
  let x_39 : i32 = x_8.x_GLF_uniform_int_values[8];
  let x_40 : i32 = x_8.x_GLF_uniform_int_values[8];
  ref[x_39] = x_40;
  let x_41 : i32 = x_8.x_GLF_uniform_int_values[9];
  let x_42 : i32 = x_8.x_GLF_uniform_int_values[9];
  ref[x_41] = x_42;
  let x_43 : i32 = x_8.x_GLF_uniform_int_values[10];
  let x_44 : i32 = x_8.x_GLF_uniform_int_values[10];
  ref[x_43] = x_44;
  let x_45 : i32 = x_8.x_GLF_uniform_int_values[0];
  i_1 = x_45;
  loop {
    let x_46 : i32 = i_1;
    let x_47 : i32 = x_8.x_GLF_uniform_int_values[6];
    if ((x_46 < x_47)) {
    } else {
      break;
    }
    let x_48 : i32 = i_1;
    let x_49 : i32 = i_1;
    a_1[x_48] = x_49;
    let x_50 : i32 = i_1;
    let x_51 : i32 = x_8.x_GLF_uniform_int_values[6];
    let x_52 : i32 = x_8.x_GLF_uniform_int_values[1];
    if ((x_50 < (x_51 / x_52))) {
      let x_54 : i32 = i_1;
      let x_55 : i32 = i_1;
      let x_56 : i32 = x_8.x_GLF_uniform_int_values[1];
      a_1[x_54] = (x_55 + x_56);
      let x_58 : i32 = i_1;
      let x_59 : i32 = x_8.x_GLF_uniform_int_values[6];
      if ((x_58 < x_59)) {
        continue;
      }
      let x_60 : i32 = i_1;
      let x_61 : i32 = i_1;
      let x_62 : i32 = x_8.x_GLF_uniform_int_values[8];
      a_1[x_60] = (x_61 + x_62);
      let x_64 : i32 = i_1;
      let x_65 : i32 = a_1[x_64];
      param = x_65;
      let x_66 : i32 = f_i1_(&(param));
      let x_67 : i32 = x_8.x_GLF_uniform_int_values[8];
      if ((x_66 < x_67)) {
        let x_68 : i32 = i_1;
        let x_182 : ptr<function, i32> = &(a_1[x_68]);
        let x_69 : i32 = *(x_182);
        *(x_182) = (x_69 - 1);
      }
    } else {
      let x_71 : i32 = i_1;
      let x_72 : i32 = a_1[x_71];
      param_1 = x_72;
      let x_73 : i32 = f_i1_(&(param_1));
      let x_74 : i32 = x_8.x_GLF_uniform_int_values[8];
      if ((x_73 < x_74)) {
        let x_75 : i32 = i_1;
        let x_76 : i32 = x_8.x_GLF_uniform_int_values[4];
        let x_77 : i32 = a_1[x_75];
        a_1[x_75] = (x_77 + x_76);
      }
    }

    continuing {
      let x_79 : i32 = i_1;
      i_1 = (x_79 + 1);
    }
  }
  let x_81 : i32 = x_8.x_GLF_uniform_int_values[0];
  i_2 = x_81;
  loop {
    let x_82 : i32 = i_2;
    let x_83 : i32 = x_8.x_GLF_uniform_int_values[6];
    if ((x_82 < x_83)) {
    } else {
      break;
    }
    let x_84 : i32 = i_2;
    let x_85 : i32 = a_1[x_84];
    let x_86 : i32 = i_2;
    let x_87 : i32 = ref[x_86];
    if ((x_85 != x_87)) {
      let x_88 : i32 = x_8.x_GLF_uniform_int_values[0];
      let x_205 : f32 = f32(x_88);
      x_GLF_color = vec4<f32>(x_205, x_205, x_205, x_205);
      return;
    }

    continuing {
      let x_89 : i32 = i_2;
      i_2 = (x_89 + 1);
    }
  }
  let x_91 : i32 = x_8.x_GLF_uniform_int_values[11];
  let x_92 : i32 = x_8.x_GLF_uniform_int_values[0];
  let x_93 : i32 = x_8.x_GLF_uniform_int_values[0];
  let x_94 : i32 = x_8.x_GLF_uniform_int_values[11];
  x_GLF_color = vec4<f32>(f32(x_91), f32(x_92), f32(x_93), f32(x_94));
  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);
}
