struct buf1 {
  resolution : vec2<f32>;
};

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

var<private> gl_FragCoord : vec4<f32>;

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

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var data : array<f32, 10>;
  var x_41_phi : i32;
  var x_53_phi : i32;
  x_41_phi = 0;
  loop {
    var x_42 : i32;
    let x_41 : i32 = x_41_phi;
    if ((x_41 < 10)) {
    } else {
      break;
    }

    continuing {
      let x_49 : f32 = x_9.injectionSwitch.y;
      data[x_41] = (f32((10 - x_41)) * x_49);
      x_42 = (x_41 + 1);
      x_41_phi = x_42;
    }
  }
  x_53_phi = 0;
  loop {
    var x_54 : i32;
    var x_60_phi : i32;
    let x_53 : i32 = x_53_phi;
    if ((x_53 < 9)) {
    } else {
      break;
    }
    x_60_phi = 0;
    loop {
      var x_83 : bool;
      var x_84 : bool;
      var x_61 : i32;
      var x_85_phi : bool;
      let x_60 : i32 = x_60_phi;
      if ((x_60 < 10)) {
      } else {
        break;
      }
      if ((x_60 < (x_53 + 1))) {
        continue;
      }
      let x_70 : ptr<function, f32> = &(data[x_53]);
      let x_71 : f32 = *(x_70);
      let x_72 : ptr<function, f32> = &(data[x_60]);
      let x_73 : f32 = *(x_72);
      let x_75 : f32 = gl_FragCoord.y;
      let x_77 : f32 = x_6.resolution.y;
      if ((x_75 < (x_77 * 0.5))) {
        x_83 = (x_71 > x_73);
        x_85_phi = x_83;
      } else {
        x_84 = (x_71 < x_73);
        x_85_phi = x_84;
      }
      let x_85 : bool = x_85_phi;
      if (x_85) {
        let x_88 : f32 = *(x_70);
        let x_89 : f32 = *(x_72);
        *(x_70) = x_89;
        *(x_72) = x_88;
      }

      continuing {
        x_61 = (x_60 + 1);
        x_60_phi = x_61;
      }
    }

    continuing {
      x_54 = (x_53 + 1);
      x_53_phi = x_54;
    }
  }
  let x_91 : f32 = gl_FragCoord.x;
  let x_93 : f32 = x_6.resolution.x;
  if ((x_91 < (x_93 * 0.5))) {
    let x_100 : f32 = data[0];
    let x_103 : f32 = data[5];
    let x_106 : f32 = data[9];
    x_GLF_color = vec4<f32>((x_100 * 0.100000001), (x_103 * 0.100000001), (x_106 * 0.100000001), 1.0);
  } else {
    let x_110 : f32 = data[5];
    let x_113 : f32 = data[9];
    let x_116 : f32 = data[0];
    x_GLF_color = vec4<f32>((x_110 * 0.100000001), (x_113 * 0.100000001), (x_116 * 0.100000001), 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);
}
