var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var a : i32;
  var b : i32;
  var i : i32;
  var i_1 : i32;
  var i_2 : i32;
  var indexable : array<i32, 2>;
  a = 0;
  b = 1;
  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
  i = 0;
  loop {
    let x_38 : i32 = i;
    if ((x_38 < 10)) {
    } else {
      break;
    }
    let x_41 : i32 = i;
    if ((x_41 > 1)) {
      let x_45 : i32 = a;
      a = (x_45 + 1);
      if (false) {
        i_1 = 0;
        loop {
          let x_53 : i32 = i_1;
          if ((x_53 < 10)) {
          } else {
            break;
          }
          return;
        }
      }
    }

    continuing {
      let x_56 : i32 = i;
      i = (x_56 + 1);
    }
  }
  i_2 = 0;
  loop {
    let x_62 : i32 = i_2;
    if ((x_62 < 10)) {
    } else {
      break;
    }
    let x_65 : i32 = b;
    indexable = array<i32, 2>(1, 2);
    let x_67 : i32 = indexable[x_65];
    let x_68 : i32 = a;
    a = (x_68 + x_67);

    continuing {
      let x_70 : i32 = i_2;
      i_2 = (x_70 + 1);
    }
  }
  let x_72 : i32 = a;
  if ((x_72 == 28)) {
    x_GLF_color = vec4<f32>(1.0, 0.0, 0.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);
}
