struct strided_arr {
  @size(16)
  el : f32,
}

type Arr = array<strided_arr, 3u>;

struct buf0 {
  x_GLF_uniform_float_values : Arr,
}

struct strided_arr_1 {
  @size(16)
  el : i32,
}

type Arr_1 = array<strided_arr_1, 4u>;

struct buf1 {
  x_GLF_uniform_int_values : Arr_1,
}

var<private> x_GLF_global_loop_count : i32;

@group(0) @binding(0) var<uniform> x_7 : buf0;

@group(0) @binding(1) var<uniform> x_10 : buf1;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var f : f32;
  var i : i32;
  var i_1 : i32;
  var i_2 : i32;
  var i_3 : i32;
  var i_4 : i32;
  var i_5 : i32;
  var i_6 : i32;
  var i_7 : i32;
  var i_8 : i32;
  var i_9 : i32;
  var i_10 : i32;
  var i_11 : i32;
  var i_12 : i32;
  var i_13 : i32;
  var i_14 : i32;
  var sum : f32;
  var r : i32;
  x_GLF_global_loop_count = 0;
  let x_53 : f32 = x_7.x_GLF_uniform_float_values[1].el;
  f = x_53;
  let x_55 : i32 = x_10.x_GLF_uniform_int_values[1].el;
  i = x_55;
  loop {
    let x_60 : i32 = i;
    let x_62 : i32 = x_10.x_GLF_uniform_int_values[0].el;
    if ((x_60 < x_62)) {
    } else {
      break;
    }
    let x_66 : i32 = x_10.x_GLF_uniform_int_values[1].el;
    i_1 = x_66;
    loop {
      let x_71 : i32 = i_1;
      let x_73 : i32 = x_10.x_GLF_uniform_int_values[0].el;
      if ((x_71 < x_73)) {
      } else {
        break;
      }
      let x_77 : i32 = x_10.x_GLF_uniform_int_values[1].el;
      i_2 = x_77;
      loop {
        let x_82 : i32 = i_2;
        let x_84 : i32 = x_10.x_GLF_uniform_int_values[0].el;
        if ((x_82 < x_84)) {
        } else {
          break;
        }
        let x_88 : i32 = x_10.x_GLF_uniform_int_values[1].el;
        i_3 = x_88;
        loop {
          let x_93 : i32 = i_3;
          let x_95 : i32 = x_10.x_GLF_uniform_int_values[0].el;
          if ((x_93 < x_95)) {
          } else {
            break;
          }
          let x_99 : i32 = x_10.x_GLF_uniform_int_values[1].el;
          i_4 = x_99;
          loop {
            let x_104 : i32 = i_4;
            let x_106 : i32 = x_10.x_GLF_uniform_int_values[0].el;
            if ((x_104 < x_106)) {
            } else {
              break;
            }
            let x_110 : i32 = x_10.x_GLF_uniform_int_values[1].el;
            i_5 = x_110;
            loop {
              let x_115 : i32 = i_5;
              let x_117 : i32 = x_10.x_GLF_uniform_int_values[0].el;
              if ((x_115 < x_117)) {
              } else {
                break;
              }
              let x_121 : i32 = x_10.x_GLF_uniform_int_values[1].el;
              i_6 = x_121;
              loop {
                let x_126 : i32 = i_6;
                let x_128 : i32 = x_10.x_GLF_uniform_int_values[0].el;
                if ((x_126 < x_128)) {
                } else {
                  break;
                }
                let x_132 : i32 = x_10.x_GLF_uniform_int_values[1].el;
                i_7 = x_132;
                loop {
                  let x_137 : i32 = i_7;
                  let x_139 : i32 = x_10.x_GLF_uniform_int_values[0].el;
                  if ((x_137 < x_139)) {
                  } else {
                    break;
                  }
                  let x_143 : i32 = x_10.x_GLF_uniform_int_values[1].el;
                  i_8 = x_143;
                  loop {
                    let x_148 : i32 = i_8;
                    let x_150 : i32 = x_10.x_GLF_uniform_int_values[0].el;
                    if ((x_148 < x_150)) {
                    } else {
                      break;
                    }
                    let x_154 : i32 = x_10.x_GLF_uniform_int_values[1].el;
                    i_9 = x_154;
                    loop {
                      let x_159 : i32 = i_9;
                      let x_161 : i32 = x_10.x_GLF_uniform_int_values[0].el;
                      if ((x_159 < x_161)) {
                      } else {
                        break;
                      }
                      let x_165 : i32 = x_10.x_GLF_uniform_int_values[1].el;
                      i_10 = x_165;
                      loop {
                        let x_170 : i32 = i_10;
                        let x_172 : i32 = x_10.x_GLF_uniform_int_values[0].el;
                        if ((x_170 < x_172)) {
                        } else {
                          break;
                        }
                        let x_176 : i32 = x_10.x_GLF_uniform_int_values[1].el;
                        i_11 = x_176;
                        loop {
                          let x_181 : i32 = i_11;
                          let x_183 : i32 = x_10.x_GLF_uniform_int_values[2].el;
                          if ((x_181 < x_183)) {
                          } else {
                            break;
                          }
                          let x_187 : i32 = x_10.x_GLF_uniform_int_values[1].el;
                          i_12 = x_187;
                          loop {
                            let x_192 : i32 = i_12;
                            let x_194 : i32 = x_10.x_GLF_uniform_int_values[0].el;
                            if ((x_192 < x_194)) {
                            } else {
                              break;
                            }
                            let x_198 : i32 = x_10.x_GLF_uniform_int_values[1].el;
                            i_13 = x_198;
                            loop {
                              let x_203 : i32 = i_13;
                              let x_205 : i32 = x_10.x_GLF_uniform_int_values[0].el;
                              if ((x_203 < x_205)) {
                              } else {
                                break;
                              }
                              let x_209 : i32 = x_10.x_GLF_uniform_int_values[1].el;
                              i_14 = x_209;
                              loop {
                                let x_214 : i32 = i_14;
                                let x_216 : i32 = x_10.x_GLF_uniform_int_values[2].el;
                                if ((x_214 < x_216)) {
                                } else {
                                  break;
                                }
                                loop {
                                  let x_223 : i32 = x_GLF_global_loop_count;
                                  x_GLF_global_loop_count = (x_223 + 1);

                                  continuing {
                                    let x_225 : i32 = x_GLF_global_loop_count;
                                    let x_227 : i32 = x_10.x_GLF_uniform_int_values[3].el;
                                    if ((x_225 < (100 - x_227))) {
                                    } else {
                                      break;
                                    }
                                  }
                                }
                                let x_231 : f32 = x_7.x_GLF_uniform_float_values[0].el;
                                let x_232 : f32 = f;
                                f = (x_232 + x_231);

                                continuing {
                                  let x_234 : i32 = i_14;
                                  i_14 = (x_234 + 1);
                                }
                              }

                              continuing {
                                let x_236 : i32 = i_13;
                                i_13 = (x_236 + 1);
                              }
                            }

                            continuing {
                              let x_238 : i32 = i_12;
                              i_12 = (x_238 + 1);
                            }
                          }

                          continuing {
                            let x_240 : i32 = i_11;
                            i_11 = (x_240 + 1);
                          }
                        }

                        continuing {
                          let x_242 : i32 = i_10;
                          i_10 = (x_242 + 1);
                        }
                      }

                      continuing {
                        let x_244 : i32 = i_9;
                        i_9 = (x_244 + 1);
                      }
                    }

                    continuing {
                      let x_246 : i32 = i_8;
                      i_8 = (x_246 + 1);
                    }
                  }

                  continuing {
                    let x_248 : i32 = i_7;
                    i_7 = (x_248 + 1);
                  }
                }

                continuing {
                  let x_250 : i32 = i_6;
                  i_6 = (x_250 + 1);
                }
              }

              continuing {
                let x_252 : i32 = i_5;
                i_5 = (x_252 + 1);
              }
            }

            continuing {
              let x_254 : i32 = i_4;
              i_4 = (x_254 + 1);
            }
          }

          continuing {
            let x_256 : i32 = i_3;
            i_3 = (x_256 + 1);
          }
        }

        continuing {
          let x_258 : i32 = i_2;
          i_2 = (x_258 + 1);
        }
      }

      continuing {
        let x_260 : i32 = i_1;
        i_1 = (x_260 + 1);
      }
    }

    continuing {
      let x_262 : i32 = i;
      i = (x_262 + 1);
    }
  }
  let x_265 : f32 = x_7.x_GLF_uniform_float_values[1].el;
  sum = x_265;
  let x_267 : i32 = x_10.x_GLF_uniform_int_values[1].el;
  r = x_267;
  loop {
    let x_272 : i32 = x_GLF_global_loop_count;
    if ((x_272 < 100)) {
    } else {
      break;
    }
    let x_275 : i32 = x_GLF_global_loop_count;
    x_GLF_global_loop_count = (x_275 + 1);
    let x_277 : f32 = f;
    let x_278 : f32 = sum;
    sum = (x_278 + x_277);

    continuing {
      let x_280 : i32 = r;
      r = (x_280 + 1);
    }
  }
  let x_282 : f32 = sum;
  let x_284 : f32 = x_7.x_GLF_uniform_float_values[2].el;
  if ((x_282 == x_284)) {
    let x_290 : i32 = x_10.x_GLF_uniform_int_values[0].el;
    let x_293 : i32 = x_10.x_GLF_uniform_int_values[1].el;
    let x_296 : i32 = x_10.x_GLF_uniform_int_values[1].el;
    let x_299 : i32 = x_10.x_GLF_uniform_int_values[0].el;
    x_GLF_color = vec4<f32>(f32(x_290), f32(x_293), f32(x_296), f32(x_299));
  } else {
    let x_303 : i32 = x_10.x_GLF_uniform_int_values[1].el;
    let x_304 : f32 = f32(x_303);
    x_GLF_color = vec4<f32>(x_304, x_304, x_304, x_304);
  }
  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);
}
