[[block]]
struct buf0 {
  injectionSwitch : vec2<f32>;
};

[[block]]
struct buf1 {
  resolution : vec2<f32>;
};

var<private> data : array<i32, 10>;

var<private> temp : array<i32, 10>;

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

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

[[group(0), binding(1)]] var<uniform> x_32 : buf1;

fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
  var k : i32;
  var i : i32;
  var j : i32;
  var i_1 : i32;
  let x_254 : i32 = *(from);
  k = x_254;
  let x_255 : i32 = *(from);
  i = x_255;
  let x_256 : i32 = *(mid);
  j = (x_256 + 1);
  loop {
    let x_262 : i32 = i;
    let x_263 : i32 = *(mid);
    let x_265 : i32 = j;
    let x_266 : i32 = *(to);
    if (((x_262 <= x_263) && (x_265 <= x_266))) {
    } else {
      break;
    }
    let x_270 : i32 = i;
    let x_272 : i32 = data[x_270];
    let x_273 : i32 = j;
    let x_275 : i32 = data[x_273];
    if ((x_272 < x_275)) {
      let x_280 : i32 = k;
      k = (x_280 + 1);
      let x_282 : i32 = i;
      i = (x_282 + 1);
      let x_285 : i32 = data[x_282];
      temp[x_280] = x_285;
    } else {
      let x_287 : i32 = k;
      k = (x_287 + 1);
      let x_289 : i32 = j;
      j = (x_289 + 1);
      let x_292 : i32 = data[x_289];
      temp[x_287] = x_292;
    }
  }
  loop {
    let x_298 : i32 = i;
    let x_300 : i32 = i;
    let x_301 : i32 = *(mid);
    if (((x_298 < 10) && (x_300 <= x_301))) {
    } else {
      break;
    }
    let x_305 : i32 = k;
    k = (x_305 + 1);
    let x_307 : i32 = i;
    i = (x_307 + 1);
    let x_310 : i32 = data[x_307];
    temp[x_305] = x_310;
  }
  let x_312 : i32 = *(from);
  i_1 = x_312;
  loop {
    let x_317 : i32 = i_1;
    let x_318 : i32 = *(to);
    if ((x_317 <= x_318)) {
    } else {
      break;
    }
    let x_321 : i32 = i_1;
    let x_322 : i32 = i_1;
    let x_324 : i32 = temp[x_322];
    data[x_321] = x_324;

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

fn mergeSort_() {
  var low : i32;
  var high : i32;
  var m : i32;
  var i_2 : i32;
  var from_1 : i32;
  var mid_1 : i32;
  var to_1 : i32;
  var param : i32;
  var param_1 : i32;
  var param_2 : i32;
  low = 0;
  high = 9;
  m = 1;
  loop {
    let x_333 : i32 = m;
    let x_334 : i32 = high;
    if ((x_333 <= x_334)) {
    } else {
      break;
    }
    let x_337 : i32 = low;
    i_2 = x_337;
    loop {
      let x_342 : i32 = i_2;
      let x_343 : i32 = high;
      if ((x_342 < x_343)) {
      } else {
        break;
      }
      let x_346 : i32 = i_2;
      from_1 = x_346;
      let x_347 : i32 = i_2;
      let x_348 : i32 = m;
      mid_1 = ((x_347 + x_348) - 1);
      let x_351 : i32 = i_2;
      let x_352 : i32 = m;
      let x_356 : i32 = high;
      to_1 = min(((x_351 + (2 * x_352)) - 1), x_356);
      let x_358 : i32 = from_1;
      param = x_358;
      let x_359 : i32 = mid_1;
      param_1 = x_359;
      let x_360 : i32 = to_1;
      param_2 = x_360;
      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));

      continuing {
        let x_362 : i32 = m;
        let x_364 : i32 = i_2;
        i_2 = (x_364 + (2 * x_362));
      }
    }

    continuing {
      let x_366 : i32 = m;
      m = (2 * x_366);
    }
  }
  return;
}

fn main_1() {
  var i_3 : i32;
  var j_1 : i32;
  var grey : f32;
  let x_87 : f32 = x_28.injectionSwitch.x;
  i_3 = i32(x_87);
  loop {
    let x_93 : i32 = i_3;
    switch(x_93) {
      case 9: {
        let x_123 : i32 = i_3;
        data[x_123] = -5;
      }
      case 8: {
        let x_121 : i32 = i_3;
        data[x_121] = -4;
      }
      case 7: {
        let x_119 : i32 = i_3;
        data[x_119] = -3;
      }
      case 6: {
        let x_117 : i32 = i_3;
        data[x_117] = -2;
      }
      case 5: {
        let x_115 : i32 = i_3;
        data[x_115] = -1;
      }
      case 4: {
        let x_113 : i32 = i_3;
        data[x_113] = 0;
      }
      case 3: {
        let x_111 : i32 = i_3;
        data[x_111] = 1;
      }
      case 2: {
        let x_109 : i32 = i_3;
        data[x_109] = 2;
      }
      case 1: {
        let x_107 : i32 = i_3;
        data[x_107] = 3;
      }
      case 0: {
        let x_105 : i32 = i_3;
        data[x_105] = 4;
      }
      default: {
      }
    }
    let x_125 : i32 = i_3;
    i_3 = (x_125 + 1);

    continuing {
      let x_127 : i32 = i_3;
      if ((x_127 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  loop {
    let x_133 : i32 = j_1;
    if ((x_133 < 10)) {
    } else {
      break;
    }
    let x_136 : i32 = j_1;
    let x_137 : i32 = j_1;
    let x_139 : i32 = data[x_137];
    temp[x_136] = x_139;

    continuing {
      let x_141 : i32 = j_1;
      j_1 = (x_141 + 1);
    }
  }
  mergeSort_();
  let x_145 : f32 = gl_FragCoord.y;
  if ((i32(x_145) < 30)) {
    let x_152 : i32 = data[0];
    grey = (0.5 + (f32(x_152) / 10.0));
  } else {
    let x_157 : f32 = gl_FragCoord.y;
    if ((i32(x_157) < 60)) {
      let x_164 : i32 = data[1];
      grey = (0.5 + (f32(x_164) / 10.0));
    } else {
      let x_169 : f32 = gl_FragCoord.y;
      if ((i32(x_169) < 90)) {
        let x_176 : i32 = data[2];
        grey = (0.5 + (f32(x_176) / 10.0));
      } else {
        let x_181 : f32 = gl_FragCoord.y;
        if ((i32(x_181) < 120)) {
          let x_188 : i32 = data[3];
          grey = (0.5 + (f32(x_188) / 10.0));
        } else {
          let x_193 : f32 = gl_FragCoord.y;
          if ((i32(x_193) < 150)) {
            discard;
          } else {
            let x_200 : f32 = gl_FragCoord.y;
            if ((i32(x_200) < 180)) {
              let x_207 : i32 = data[5];
              grey = (0.5 + (f32(x_207) / 10.0));
            } else {
              let x_212 : f32 = gl_FragCoord.y;
              if ((i32(x_212) < 210)) {
                let x_219 : i32 = data[6];
                grey = (0.5 + (f32(x_219) / 10.0));
              } else {
                let x_224 : f32 = gl_FragCoord.y;
                if ((i32(x_224) < 240)) {
                  let x_231 : i32 = data[7];
                  grey = (0.5 + (f32(x_231) / 10.0));
                } else {
                  let x_236 : f32 = gl_FragCoord.y;
                  if ((i32(x_236) < 270)) {
                    let x_243 : i32 = data[8];
                    grey = (0.5 + (f32(x_243) / 10.0));
                  } else {
                    discard;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  let x_247 : f32 = grey;
  let x_248 : vec3<f32> = vec3<f32>(x_247, x_247, x_247);
  x_GLF_color = vec4<f32>(x_248.x, x_248.y, x_248.z, 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);
}
