struct buf0 {
  injectionSwitch : vec2<f32>;
};

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

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var temp : array<i32, 10>;
  var data : array<i32, 10>;
  var x_190 : f32;
  var x_262 : f32;
  var x_63_phi : i32;
  var x_103_phi : i32;
  var x_112_phi : i32;
  var x_263_phi : f32;
  let x_60 : f32 = x_8.injectionSwitch.x;
  let x_61 : i32 = i32(x_60);
  x_63_phi = x_61;
  loop {
    var x_100 : i32;
    var x_98 : i32;
    var x_96 : i32;
    var x_94 : i32;
    var x_92 : i32;
    var x_90 : i32;
    var x_88 : i32;
    var x_86 : i32;
    var x_84 : i32;
    var x_82 : i32;
    var x_64_phi : i32;
    let x_63 : i32 = x_63_phi;
    let x_68 : array<i32, 10> = data;
    data = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    data = x_68;
    let x_69 : i32 = (x_63 + 1);
    x_64_phi = x_69;
    switch(x_63) {
      case 9: {
        data[x_63] = -5;
        x_100 = (x_63 + 1);
        x_64_phi = x_100;
      }
      case 8: {
        data[x_63] = -4;
        x_98 = (x_63 + 1);
        x_64_phi = x_98;
      }
      case 7: {
        data[x_63] = -3;
        x_96 = (x_63 + 1);
        x_64_phi = x_96;
      }
      case 6: {
        data[x_63] = -2;
        x_94 = (x_63 + 1);
        x_64_phi = x_94;
      }
      case 5: {
        data[x_63] = -1;
        x_92 = (x_63 + 1);
        x_64_phi = x_92;
      }
      case 4: {
        data[x_63] = 0;
        x_90 = (x_63 + 1);
        x_64_phi = x_90;
      }
      case 3: {
        data[x_63] = 1;
        x_88 = (x_63 + 1);
        x_64_phi = x_88;
      }
      case 2: {
        data[x_63] = 2;
        x_86 = (x_63 + 1);
        x_64_phi = x_86;
      }
      case 1: {
        data[x_63] = 3;
        x_84 = (x_63 + 1);
        x_64_phi = x_84;
      }
      case 0: {
        data[x_63] = 4;
        x_82 = (x_63 + 1);
        x_64_phi = x_82;
      }
      default: {
      }
    }
    let x_64 : i32 = x_64_phi;

    continuing {
      x_63_phi = x_64;
      if ((x_64 < 10)) {
      } else {
        break;
      }
    }
  }
  x_103_phi = 0;
  loop {
    var x_104 : i32;
    let x_103 : i32 = x_103_phi;
    if ((x_103 < 10)) {
    } else {
      break;
    }

    continuing {
      let x_109 : i32 = data[x_103];
      temp[x_103] = x_109;
      x_104 = (x_103 + 1);
      x_103_phi = x_104;
    }
  }
  x_112_phi = 1;
  loop {
    var x_113 : i32;
    var x_119_phi : i32;
    let x_112 : i32 = x_112_phi;
    if ((x_112 <= 9)) {
    } else {
      break;
    }
    x_119_phi = 0;
    loop {
      var x_131 : i32;
      var x_136 : i32;
      var x_131_phi : i32;
      var x_134_phi : i32;
      var x_136_phi : i32;
      var x_158_phi : i32;
      var x_161_phi : i32;
      var x_171_phi : i32;
      let x_119 : i32 = x_119_phi;
      if ((x_119 < 9)) {
      } else {
        break;
      }
      let x_125 : i32 = (x_119 + x_112);
      let x_126 : i32 = (x_125 - 1);
      let x_120 : i32 = (x_119 + (2 * x_112));
      let x_129 : i32 = min((x_120 - 1), 9);
      x_131_phi = x_119;
      x_134_phi = x_125;
      x_136_phi = x_119;
      loop {
        var x_151 : i32;
        var x_154 : i32;
        var x_135_phi : i32;
        var x_137_phi : i32;
        x_131 = x_131_phi;
        let x_134 : i32 = x_134_phi;
        x_136 = x_136_phi;
        if (((x_136 <= x_126) && (x_134 <= x_129))) {
        } else {
          break;
        }
        let x_143 : ptr<function, i32> = &(data[x_136]);
        let x_144 : i32 = *(x_143);
        let x_145 : ptr<function, i32> = &(data[x_134]);
        let x_146 : i32 = *(x_145);
        let x_132 : i32 = bitcast<i32>((x_131 + bitcast<i32>(1)));
        if ((x_144 < x_146)) {
          x_151 = bitcast<i32>((x_136 + bitcast<i32>(1)));
          let x_152 : i32 = *(x_143);
          temp[x_131] = x_152;
          x_135_phi = x_134;
          x_137_phi = x_151;
        } else {
          x_154 = (x_134 + 1);
          let x_155 : i32 = *(x_145);
          temp[x_131] = x_155;
          x_135_phi = x_154;
          x_137_phi = x_136;
        }
        let x_135 : i32 = x_135_phi;
        let x_137 : i32 = x_137_phi;

        continuing {
          x_131_phi = x_132;
          x_134_phi = x_135;
          x_136_phi = x_137;
        }
      }
      x_158_phi = x_131;
      x_161_phi = x_136;
      loop {
        var x_159 : i32;
        var x_162 : i32;
        let x_158 : i32 = x_158_phi;
        let x_161 : i32 = x_161_phi;
        if (((x_161 < 10) && (x_161 <= x_126))) {
        } else {
          break;
        }

        continuing {
          x_159 = (x_158 + 1);
          x_162 = (x_161 + 1);
          let x_168 : i32 = data[x_161];
          temp[x_158] = x_168;
          x_158_phi = x_159;
          x_161_phi = x_162;
        }
      }
      x_171_phi = x_119;
      loop {
        var x_172 : i32;
        let x_171 : i32 = x_171_phi;
        if ((x_171 <= x_129)) {
        } else {
          break;
        }

        continuing {
          let x_177 : i32 = temp[x_171];
          data[x_171] = x_177;
          x_172 = (x_171 + 1);
          x_171_phi = x_172;
        }
      }

      continuing {
        x_119_phi = x_120;
      }
    }

    continuing {
      x_113 = (2 * x_112);
      x_112_phi = x_113;
    }
  }
  var x_181 : i32;
  var x_199 : f32;
  var x_261 : f32;
  var x_262_phi : f32;
  let x_180 : f32 = gl_FragCoord.y;
  x_181 = i32(x_180);
  if ((x_181 < 30)) {
    let x_187 : i32 = data[0];
    x_190 = (0.5 + (f32(x_187) * 0.100000001));
    x_263_phi = x_190;
  } else {
    var x_208 : f32;
    var x_260 : f32;
    var x_261_phi : f32;
    if ((x_181 < 60)) {
      let x_196 : i32 = data[1];
      x_199 = (0.5 + (f32(x_196) * 0.100000001));
      x_262_phi = x_199;
    } else {
      var x_217 : f32;
      var x_259 : f32;
      var x_260_phi : f32;
      if ((x_181 < 90)) {
        let x_205 : i32 = data[2];
        x_208 = (0.5 + (f32(x_205) * 0.100000001));
        x_261_phi = x_208;
      } else {
        if ((x_181 < 120)) {
          let x_214 : i32 = data[3];
          x_217 = (0.5 + (f32(x_214) * 0.100000001));
          x_260_phi = x_217;
        } else {
          var x_230 : f32;
          var x_258 : f32;
          var x_259_phi : f32;
          if ((x_181 < 150)) {
            discard;
          } else {
            var x_239 : f32;
            var x_257 : f32;
            var x_258_phi : f32;
            if ((x_181 < 180)) {
              let x_227 : i32 = data[5];
              x_230 = (0.5 + (f32(x_227) * 0.100000001));
              x_259_phi = x_230;
            } else {
              var x_248 : f32;
              var x_256 : f32;
              var x_257_phi : f32;
              if ((x_181 < 210)) {
                let x_236 : i32 = data[6];
                x_239 = (0.5 + (f32(x_236) * 0.100000001));
                x_258_phi = x_239;
              } else {
                if ((x_181 < 240)) {
                  let x_245 : i32 = data[7];
                  x_248 = (0.5 + (f32(x_245) * 0.100000001));
                  x_257_phi = x_248;
                } else {
                  if ((x_181 < 270)) {
                  } else {
                    discard;
                  }
                  let x_253 : i32 = data[8];
                  x_256 = (0.5 + (f32(x_253) * 0.100000001));
                  x_257_phi = x_256;
                }
                x_257 = x_257_phi;
                x_258_phi = x_257;
              }
              x_258 = x_258_phi;
              x_259_phi = x_258;
            }
            x_259 = x_259_phi;
          }
          x_260_phi = x_259;
        }
        x_260 = x_260_phi;
        x_261_phi = x_260;
      }
      x_261 = x_261_phi;
      x_262_phi = x_261;
    }
    x_262 = x_262_phi;
    x_263_phi = x_262;
  }
  let x_263 : f32 = x_263_phi;
  x_GLF_color = vec4<f32>(x_263, x_263, x_263, 1.0);
  return;
}

struct main_out {
  [[location(0)]]
  x_GLF_color_1 : vec4<f32>;
};

[[stage(fragment)]]
fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
  gl_FragCoord = gl_FragCoord_param;
  main_1();
  return main_out(x_GLF_color);
}
