#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  int arr[10];
};
struct QuicksortObject {
  tint_array_wrapper numbers;
};
struct buf0 {
  /* 0x0000 */ packed_float2 resolution;
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_81) {
  int temp = 0;
  int const x_932 = temp;
  temp = 0;
  temp = x_932;
  float3 const x_523 = float3(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
  int const x_933 = *(i);
  *(i) = 0;
  *(i) = x_933;
  int const x_28 = *(i);
  int const x_934 = *(j);
  *(j) = 0;
  *(j) = x_934;
  float3 const x_524 = float3(x_523.y, x_523.x, x_523.y);
  int const x_935 = temp;
  temp = 0;
  temp = x_935;
  int const x_30_save = x_28;
  int const x_936 = (*(tint_symbol_81)).numbers.arr[x_30_save];
  (*(tint_symbol_81)).numbers.arr[x_30_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_30_save] = x_936;
  int const x_31 = (*(tint_symbol_81)).numbers.arr[x_30_save];
  int const x_937 = temp;
  temp = 0;
  temp = x_937;
  temp = x_31;
  int const x_938 = *(j);
  *(j) = 0;
  *(j) = x_938;
  float3 const x_525 = float3(x_523.z, float3(1.0f, 2.0f, 3.0f).x, x_523.y);
  int const x_939 = *(i);
  *(i) = 0;
  *(i) = x_939;
  int const x_32 = *(i);
  int const x_940 = (*(tint_symbol_81)).numbers.arr[x_30_save];
  (*(tint_symbol_81)).numbers.arr[x_30_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_30_save] = x_940;
  int const x_33 = *(j);
  int const x_941 = *(i);
  *(i) = 0;
  *(i) = x_941;
  float3 const x_526 = float3(x_525.x, x_525.z, x_525.z);
  int const x_942 = (*(tint_symbol_81)).numbers.arr[x_30_save];
  (*(tint_symbol_81)).numbers.arr[x_30_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_30_save] = x_942;
  int const x_34_save = x_33;
  int const x_35 = (*(tint_symbol_81)).numbers.arr[x_34_save];
  QuicksortObject const x_943 = *(tint_symbol_81);
  tint_array_wrapper const tint_symbol_2 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_3 = {.numbers=tint_symbol_2};
  *(tint_symbol_81) = tint_symbol_3;
  *(tint_symbol_81) = x_943;
  float2 const x_527 = float2(x_526.x, x_526.x);
  int const x_36_save = x_32;
  float3 const x_528 = float3(x_524.x, x_524.z, x_524.x);
  (*(tint_symbol_81)).numbers.arr[x_36_save] = x_35;
  QuicksortObject const x_944 = *(tint_symbol_81);
  tint_array_wrapper const tint_symbol_4 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_5 = {.numbers=tint_symbol_4};
  *(tint_symbol_81) = tint_symbol_5;
  *(tint_symbol_81) = x_944;
  float3 const x_529 = float3(x_526.y, x_526.z, x_526.x);
  int const x_945 = *(i);
  *(i) = 0;
  *(i) = x_945;
  int const x_37 = *(j);
  int const x_946 = temp;
  temp = 0;
  temp = x_946;
  float2 const x_530 = float2(x_529.z, x_529.y);
  int const x_947 = (*(tint_symbol_81)).numbers.arr[x_34_save];
  (*(tint_symbol_81)).numbers.arr[x_34_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_34_save] = x_947;
  int const x_38 = temp;
  int const x_948 = *(j);
  *(j) = 0;
  *(j) = x_948;
  float3 const x_531 = float3(x_527.x, x_526.y, x_526.x);
  int const x_949 = (*(tint_symbol_81)).numbers.arr[x_36_save];
  (*(tint_symbol_81)).numbers.arr[x_36_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_36_save] = x_949;
  QuicksortObject const x_950 = *(tint_symbol_81);
  tint_array_wrapper const tint_symbol_6 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_7 = {.numbers=tint_symbol_6};
  *(tint_symbol_81) = tint_symbol_7;
  *(tint_symbol_81) = x_950;
  float3 const x_532 = float3(x_528.x, x_528.y, x_528.x);
  int const x_951 = (*(tint_symbol_81)).numbers.arr[x_34_save];
  (*(tint_symbol_81)).numbers.arr[x_34_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_34_save] = x_951;
  (*(tint_symbol_81)).numbers.arr[x_37] = x_38;
  return;
}

int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_82) {
  int param_3 = 0;
  int i_1 = 0;
  int j_1 = 0;
  int param_2 = 0;
  int param_1 = 0;
  int param = 0;
  int pivot = 0;
  float2 x_537 = 0.0f;
  float3 x_538 = 0.0f;
  int const x_952 = *(h);
  *(h) = 0;
  *(h) = x_952;
  int const x_41 = *(h);
  int const x_953 = *(l);
  *(l) = 0;
  *(l) = x_953;
  int const x_42_save = x_41;
  int const x_954 = (*(tint_symbol_82)).numbers.arr[x_42_save];
  (*(tint_symbol_82)).numbers.arr[x_42_save] = 0;
  (*(tint_symbol_82)).numbers.arr[x_42_save] = x_954;
  int const x_43 = (*(tint_symbol_82)).numbers.arr[x_42_save];
  int const x_955 = param_3;
  param_3 = 0;
  param_3 = x_955;
  float3 const x_534 = float3(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).z);
  int const x_956 = param_1;
  param_1 = 0;
  param_1 = x_956;
  pivot = x_43;
  int const x_45 = *(l);
  int const x_957 = *(h);
  *(h) = 0;
  *(h) = x_957;
  int const x_958 = j_1;
  j_1 = 0;
  j_1 = x_958;
  float3 const x_535 = float3(x_534.y, x_534.z, x_534.y);
  int const x_959 = *(l);
  *(l) = 0;
  *(l) = x_959;
  i_1 = as_type<int>((as_type<uint>(x_45) - as_type<uint>(as_type<int>(1u))));
  int const x_49 = *(l);
  float3 const x_536 = float3(x_534.x, x_534.z, x_535.x);
  j_1 = 10;
  QuicksortObject const x_960 = *(tint_symbol_82);
  tint_array_wrapper const tint_symbol_8 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_9 = {.numbers=tint_symbol_8};
  *(tint_symbol_82) = tint_symbol_9;
  *(tint_symbol_82) = x_960;
  while (true) {
    int const x_961 = pivot;
    pivot = 0;
    pivot = x_961;
    int const x_962 = param_1;
    param_1 = 0;
    param_1 = x_962;
    int const x_55 = j_1;
    int const x_963 = pivot;
    pivot = 0;
    pivot = x_963;
    x_537 = float2(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
    QuicksortObject const x_964 = *(tint_symbol_82);
    tint_array_wrapper const tint_symbol_10 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_11 = {.numbers=tint_symbol_10};
    *(tint_symbol_82) = tint_symbol_11;
    *(tint_symbol_82) = x_964;
    int const x_56 = *(h);
    int const x_965 = *(h);
    *(h) = 0;
    *(h) = x_965;
    int const x_966 = param;
    param = 0;
    param = x_966;
    int const x_967 = j_1;
    j_1 = 0;
    j_1 = x_967;
    x_538 = float3(x_534.x, x_537.y, x_534.z);
    int const x_968 = param;
    param = 0;
    param = x_968;
    if ((x_55 <= as_type<int>((as_type<uint>(x_56) - as_type<uint>(as_type<int>(1u)))))) {
    } else {
      break;
    }
    int const x_60 = j_1;
    int const x_969 = (*(tint_symbol_82)).numbers.arr[x_42_save];
    (*(tint_symbol_82)).numbers.arr[x_42_save] = 0;
    (*(tint_symbol_82)).numbers.arr[x_42_save] = x_969;
    int const x_61_save = x_60;
    int const x_970 = *(h);
    *(h) = 0;
    *(h) = x_970;
    float3 const x_539 = float3(x_537.x, x_535.z, x_537.x);
    int const x_971 = param_1;
    param_1 = 0;
    param_1 = x_971;
    int const x_62 = (*(tint_symbol_82)).numbers.arr[x_61_save];
    QuicksortObject const x_972 = *(tint_symbol_82);
    tint_array_wrapper const tint_symbol_12 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_13 = {.numbers=tint_symbol_12};
    *(tint_symbol_82) = tint_symbol_13;
    *(tint_symbol_82) = x_972;
    int const x_63 = pivot;
    float2 const x_540 = float2(float3(1.0f, 2.0f, 3.0f).y, x_534.z);
    int const x_973 = i_1;
    i_1 = 0;
    i_1 = x_973;
    int const x_974 = *(l);
    *(l) = 0;
    *(l) = x_974;
    float3 const x_541 = float3(x_534.y, x_534.x, x_534.y);
    int const x_975 = pivot;
    pivot = 0;
    pivot = x_975;
    if ((x_62 <= x_63)) {
      float3 const x_542 = float3(x_541.z, x_541.x, x_541.x);
      int const x_976 = param_3;
      param_3 = 0;
      param_3 = x_976;
      int const x_67 = i_1;
      int const x_977 = pivot;
      pivot = 0;
      pivot = x_977;
      float2 const x_543 = float2(x_539.x, x_541.y);
      int const x_978 = i_1;
      i_1 = 0;
      i_1 = x_978;
      int const x_979 = param;
      param = 0;
      param = x_979;
      i_1 = as_type<int>((as_type<uint>(x_67) + as_type<uint>(as_type<int>(1u))));
      int const x_980 = *(l);
      *(l) = 0;
      *(l) = x_980;
      float3 const x_544 = float3(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y, x_540.x);
      int const x_70 = i_1;
      float2 const x_545 = float2(x_537.y, x_538.x);
      int const x_981 = param;
      param = 0;
      param = x_981;
      param = x_70;
      int const x_982 = param;
      param = 0;
      param = x_982;
      float2 const x_546 = float2(x_545.x, x_545.x);
      int const x_983 = i_1;
      i_1 = 0;
      i_1 = x_983;
      int const x_72 = j_1;
      param_1 = x_72;
      int const x_984 = param_3;
      param_3 = 0;
      param_3 = x_984;
      swap_i1_i1_(&(param), &(param_1), tint_symbol_82);
      int const x_985 = param_1;
      param_1 = 0;
      param_1 = x_985;
    }
    QuicksortObject const x_986 = *(tint_symbol_82);
    tint_array_wrapper const tint_symbol_14 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_15 = {.numbers=tint_symbol_14};
    *(tint_symbol_82) = tint_symbol_15;
    *(tint_symbol_82) = x_986;
    {
      int const x_987 = *(h);
      *(h) = 0;
      *(h) = x_987;
      int const x_74 = j_1;
      int const x_988 = *(h);
      *(h) = 0;
      *(h) = x_988;
      float3 const x_547 = float3(x_539.x, x_541.z, x_541.z);
      int const x_989 = (*(tint_symbol_82)).numbers.arr[x_61_save];
      (*(tint_symbol_82)).numbers.arr[x_61_save] = 0;
      (*(tint_symbol_82)).numbers.arr[x_61_save] = x_989;
      int const x_990 = param;
      param = 0;
      param = x_990;
      j_1 = as_type<int>((as_type<uint>(1) + as_type<uint>(x_74)));
      int const x_991 = param_1;
      param_1 = 0;
      param_1 = x_991;
      float3 const x_548 = float3(x_541.y, x_541.z, x_541.x);
      int const x_992 = (*(tint_symbol_82)).numbers.arr[x_61_save];
      (*(tint_symbol_82)).numbers.arr[x_61_save] = 0;
      (*(tint_symbol_82)).numbers.arr[x_61_save] = x_992;
    }
  }
  int const x_76 = i_1;
  int const x_993 = (*(tint_symbol_82)).numbers.arr[x_42_save];
  (*(tint_symbol_82)).numbers.arr[x_42_save] = 0;
  (*(tint_symbol_82)).numbers.arr[x_42_save] = x_993;
  float2 const x_549 = float2(x_534.x, x_534.y);
  QuicksortObject const x_994 = *(tint_symbol_82);
  tint_array_wrapper const tint_symbol_16 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_17 = {.numbers=tint_symbol_16};
  *(tint_symbol_82) = tint_symbol_17;
  *(tint_symbol_82) = x_994;
  int const x_995 = *(h);
  *(h) = 0;
  *(h) = x_995;
  i_1 = as_type<int>((as_type<uint>(1) + as_type<uint>(x_76)));
  int const x_996 = param_1;
  param_1 = 0;
  param_1 = x_996;
  int const x_79 = i_1;
  int const x_997 = j_1;
  j_1 = 0;
  j_1 = x_997;
  float2 const x_550 = float2(x_534.x, x_534.x);
  int const x_998 = param_1;
  param_1 = 0;
  param_1 = x_998;
  param_2 = x_79;
  float2 const x_551 = float2(x_534.y, x_536.x);
  int const x_999 = pivot;
  pivot = 0;
  pivot = x_999;
  int const x_81 = *(h);
  float2 const x_552 = float2(x_550.x, x_549.y);
  int const x_1000 = *(h);
  *(h) = 0;
  *(h) = x_1000;
  param_3 = x_81;
  int const x_1001 = i_1;
  i_1 = 0;
  i_1 = x_1001;
  float2 const x_553 = float2(x_549.y, x_552.x);
  int const x_1002 = *(h);
  *(h) = 0;
  *(h) = x_1002;
  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_82);
  int const x_1003 = *(l);
  *(l) = 0;
  *(l) = x_1003;
  float2 const x_554 = float2(x_536.z, float3(1.0f, 2.0f, 3.0f).y);
  int const x_1004 = param_1;
  param_1 = 0;
  param_1 = x_1004;
  int const x_83 = i_1;
  int const x_1005 = param;
  param = 0;
  param = x_1005;
  float2 const x_555 = float2(x_534.y, x_534.x);
  int const x_1006 = j_1;
  j_1 = 0;
  j_1 = x_1006;
  return x_83;
}

void quicksort_(thread QuicksortObject* const tint_symbol_83) {
  int param_4 = 0;
  int h_1 = 0;
  int p = 0;
  int l_1 = 0;
  int top = 0;
  tint_array_wrapper stack = {};
  int param_5 = 0;
  l_1 = 0;
  int const x_1007 = param_5;
  param_5 = 0;
  param_5 = x_1007;
  h_1 = 9;
  tint_array_wrapper const x_1008 = stack;
  tint_array_wrapper const tint_symbol_18 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  stack = tint_symbol_18;
  stack = x_1008;
  float2 const x_556 = float2(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).y);
  int const x_1009 = param_5;
  param_5 = 0;
  param_5 = x_1009;
  top = -1;
  int const x_1010 = p;
  p = 0;
  p = x_1010;
  int const x_93 = top;
  float2 const x_557 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).x);
  int const x_1011 = p;
  p = 0;
  p = x_1011;
  int const x_94 = as_type<int>((as_type<uint>(x_93) + as_type<uint>(as_type<int>(1u))));
  int const x_1012 = top;
  top = 0;
  top = x_1012;
  float2 const x_558 = float2(x_556.y, x_557.y);
  int const x_1013 = param_4;
  param_4 = 0;
  param_4 = x_1013;
  top = x_94;
  int const x_1014 = h_1;
  h_1 = 0;
  h_1 = x_1014;
  float3 const x_559 = float3(x_557.y, x_557.x, x_557.x);
  int const x_1015 = param_4;
  param_4 = 0;
  param_4 = x_1015;
  int const x_95 = l_1;
  QuicksortObject const x_1016 = *(tint_symbol_83);
  tint_array_wrapper const tint_symbol_19 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_20 = {.numbers=tint_symbol_19};
  *(tint_symbol_83) = tint_symbol_20;
  *(tint_symbol_83) = x_1016;
  float3 const x_560 = float3(x_559.y, x_559.x, x_557.x);
  int const x_96_save = x_94;
  tint_array_wrapper const x_1017 = stack;
  tint_array_wrapper const tint_symbol_21 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  stack = tint_symbol_21;
  stack = x_1017;
  float3 const x_561 = float3(x_556.y, x_556.y, x_556.y);
  int const x_1018 = l_1;
  l_1 = 0;
  l_1 = 0;
  stack.arr[x_96_save] = x_95;
  int const x_1019 = param_5;
  param_5 = 0;
  param_5 = x_1019;
  int const x_97 = top;
  int const x_1020 = param_4;
  param_4 = 0;
  param_4 = x_1020;
  float3 const x_562 = float3(float3(1.0f, 2.0f, 3.0f).z, x_558.y, float3(1.0f, 2.0f, 3.0f).y);
  int const x_1021 = stack.arr[x_96_save];
  stack.arr[x_96_save] = 0;
  stack.arr[x_96_save] = x_1021;
  int const x_98 = as_type<int>((as_type<uint>(x_97) + as_type<uint>(1)));
  int const x_1022 = stack.arr[x_96_save];
  stack.arr[x_96_save] = 0;
  stack.arr[x_96_save] = x_1022;
  float3 const x_563 = float3(x_559.x, x_559.z, x_556.y);
  top = x_98;
  int const x_1023 = param_4;
  param_4 = 0;
  param_4 = x_1023;
  int const x_99 = h_1;
  int const x_1024 = param_4;
  param_4 = 0;
  param_4 = x_1024;
  float3 const x_564 = float3(x_558.x, x_561.x, x_558.y);
  int const x_1025 = l_1;
  l_1 = 0;
  l_1 = x_1025;
  int const x_100_save = x_98;
  int const x_1026 = param_5;
  param_5 = 0;
  param_5 = x_1026;
  float2 const x_565 = float2(x_564.z, x_564.z);
  int const x_1027 = p;
  p = 0;
  p = x_1027;
  stack.arr[x_100_save] = x_99;
  while (true) {
    float3 const x_566 = float3(x_563.x, x_563.x, x_563.x);
    int const x_1028 = h_1;
    h_1 = 0;
    h_1 = x_1028;
    tint_array_wrapper const x_1029 = stack;
    tint_array_wrapper const tint_symbol_22 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_22;
    stack = x_1029;
    int const x_106 = top;
    tint_array_wrapper const x_1030 = stack;
    tint_array_wrapper const tint_symbol_23 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_23;
    stack = x_1030;
    float2 const x_567 = float2(x_558.x, x_564.z);
    int const x_1031 = param_4;
    param_4 = 0;
    param_4 = x_1031;
    if ((x_106 >= as_type<int>(0u))) {
    } else {
      break;
    }
    QuicksortObject const x_1032 = *(tint_symbol_83);
    tint_array_wrapper const tint_symbol_24 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_25 = {.numbers=tint_symbol_24};
    *(tint_symbol_83) = tint_symbol_25;
    *(tint_symbol_83) = x_1032;
    float3 const x_568 = float3(x_559.y, x_559.x, x_563.y);
    int const x_1033 = param_4;
    param_4 = 0;
    param_4 = x_1033;
    int const x_108 = top;
    float3 const x_569 = float3(x_565.x, x_567.y, x_565.x);
    int const x_1034 = h_1;
    h_1 = 0;
    h_1 = x_1034;
    float2 const x_570 = float2(x_556.x, x_556.x);
    int const x_1035 = p;
    p = 0;
    p = x_1035;
    top = as_type<int>((as_type<uint>(x_108) - as_type<uint>(as_type<int>(1u))));
    int const x_1036 = p;
    p = 0;
    p = x_1036;
    int const x_110_save = x_108;
    int const x_1037 = stack.arr[x_96_save];
    stack.arr[x_96_save] = 0;
    stack.arr[x_96_save] = x_1037;
    int const x_111 = stack.arr[x_110_save];
    tint_array_wrapper const x_1038 = stack;
    tint_array_wrapper const tint_symbol_26 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_26;
    stack = x_1038;
    float3 const x_571 = float3(x_559.y, x_559.x, x_564.y);
    int const x_1039 = l_1;
    l_1 = 0;
    l_1 = x_1039;
    h_1 = x_111;
    tint_array_wrapper const x_1040 = stack;
    tint_array_wrapper const tint_symbol_27 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_27;
    stack = x_1040;
    float2 const x_572 = float2(x_562.y, x_561.y);
    int const x_1041 = p;
    p = 0;
    p = x_1041;
    int const x_112 = top;
    int const x_1042 = param_4;
    param_4 = 0;
    param_4 = x_1042;
    int const x_1043 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1043;
    float2 const x_573 = float2(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
    top = as_type<int>((as_type<uint>(x_112) - as_type<uint>(1)));
    int const x_1044 = param_5;
    param_5 = 0;
    param_5 = x_1044;
    float3 const x_574 = float3(x_570.y, x_565.x, x_570.y);
    int const x_1045 = h_1;
    h_1 = 0;
    h_1 = x_1045;
    int const x_114_save = x_112;
    float2 const x_575 = float2(x_564.y, x_564.z);
    int const x_1046 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1046;
    int const x_115 = stack.arr[x_114_save];
    int const x_1047 = p;
    p = 0;
    p = x_1047;
    float3 const x_576 = float3(x_573.y, x_573.y, x_565.x);
    int const x_1048 = param_5;
    param_5 = 0;
    param_5 = x_1048;
    l_1 = x_115;
    int const x_1049 = top;
    top = 0;
    top = x_1049;
    int const x_118 = l_1;
    param_4 = x_118;
    int const x_1050 = stack.arr[x_110_save];
    stack.arr[x_110_save] = 0;
    stack.arr[x_110_save] = x_1050;
    float2 const x_577 = float2(x_569.y, x_569.z);
    int const x_120 = h_1;
    float2 const x_578 = float2(x_558.x, float3(1.0f, 2.0f, 3.0f).y);
    param_5 = x_120;
    int const x_1051 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1051;
    int const x_121 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_83);
    float2 const x_579 = float2(x_567.x, x_568.x);
    int const x_1052 = param_5;
    param_5 = 0;
    param_5 = x_1052;
    p = x_121;
    int const x_1053 = param_4;
    param_4 = 0;
    param_4 = x_1053;
    int const x_122 = p;
    int const x_1054 = h_1;
    h_1 = 0;
    h_1 = x_1054;
    float2 const x_580 = float2(x_568.y, x_568.y);
    int const x_1055 = l_1;
    l_1 = 0;
    l_1 = x_1055;
    int const x_1056 = h_1;
    h_1 = 0;
    h_1 = x_1056;
    int const x_124 = l_1;
    int const x_1057 = stack.arr[x_110_save];
    stack.arr[x_110_save] = 0;
    stack.arr[x_110_save] = x_1057;
    int const x_1058 = h_1;
    h_1 = 0;
    h_1 = x_1058;
    float2 const x_582 = float2(x_567.y, x_573.x);
    int const x_1059 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1059;
    if ((as_type<int>((as_type<uint>(x_122) - as_type<uint>(as_type<int>(1u)))) > x_124)) {
      int const x_1060 = param_4;
      param_4 = 0;
      param_4 = x_1060;
      int const x_128 = top;
      float2 const x_583 = float2(x_571.y, x_556.y);
      int const x_1061 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1061;
      tint_array_wrapper const x_1062 = stack;
      tint_array_wrapper const tint_symbol_28 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_28;
      stack = x_1062;
      float2 const x_584 = float2(x_569.z, x_569.y);
      float3 const x_585 = float3(x_580.y, x_577.x, x_577.x);
      int const x_130 = l_1;
      int const x_1063 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1063;
      float2 const x_586 = float2(x_564.x, x_585.x);
      int const x_1064 = param_5;
      param_5 = 0;
      param_5 = x_1064;
      int const x_131_save = as_type<int>((as_type<uint>(1) + as_type<uint>(x_128)));
      int const x_1065 = stack.arr[x_110_save];
      stack.arr[x_110_save] = 0;
      stack.arr[x_110_save] = x_1065;
      float3 const x_587 = float3(x_566.y, x_566.y, x_563.x);
      int const x_1066 = param_5;
      param_5 = 0;
      param_5 = x_1066;
      stack.arr[x_131_save] = x_130;
      int const x_132 = top;
      int const x_1067 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1067;
      float2 const x_588 = float2(x_575.y, x_575.x);
      int const x_1068 = stack.arr[x_131_save];
      stack.arr[x_131_save] = 0;
      stack.arr[x_131_save] = x_1068;
      int const x_133 = as_type<int>((1u + as_type<uint>(x_132)));
      int const x_1069 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1069;
      float3 const x_589 = float3(x_576.z, x_588.y, x_576.z);
      int const x_1070 = h_1;
      h_1 = 0;
      h_1 = x_1070;
      top = x_133;
      tint_array_wrapper const x_1071 = stack;
      tint_array_wrapper const tint_symbol_29 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_29;
      stack = x_1071;
      int const x_134 = p;
      float2 const x_590 = float2(x_576.x, x_573.y);
      int const x_1072 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1072;
      int const x_136_save = x_133;
      int const x_1073 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1073;
      stack.arr[x_136_save] = as_type<int>((as_type<uint>(x_134) - as_type<uint>(as_type<int>(1u))));
      int const x_1074 = stack.arr[x_96_save];
      stack.arr[x_96_save] = 0;
      stack.arr[x_96_save] = x_1074;
      float2 const x_591 = float2(x_569.z, x_569.y);
      int const x_1075 = stack.arr[x_136_save];
      stack.arr[x_136_save] = 0;
      stack.arr[x_136_save] = x_1075;
    }
    int const x_1076 = stack.arr[x_96_save];
    stack.arr[x_96_save] = 0;
    stack.arr[x_96_save] = x_1076;
    float2 const x_592 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).y);
    QuicksortObject const x_1077 = *(tint_symbol_83);
    tint_array_wrapper const tint_symbol_30 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_31 = {.numbers=tint_symbol_30};
    *(tint_symbol_83) = tint_symbol_31;
    *(tint_symbol_83) = x_1077;
    int const x_137 = p;
    int const x_1078 = stack.arr[x_114_save];
    stack.arr[x_114_save] = 0;
    stack.arr[x_114_save] = x_1078;
    float3 const x_593 = float3(x_571.z, x_556.x, x_556.y);
    int const x_1079 = p;
    p = 0;
    p = x_1079;
    float3 const x_594 = float3(x_563.z, x_563.x, x_575.x);
    int const x_1080 = stack.arr[x_114_save];
    stack.arr[x_114_save] = 0;
    stack.arr[x_114_save] = x_1080;
    int const x_139 = h_1;
    int const x_1081 = top;
    top = 0;
    top = x_1081;
    float3 const x_595 = float3(x_560.z, x_568.x, x_560.x);
    int const x_1082 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1082;
    int const x_1083 = p;
    p = 0;
    p = x_1083;
    if ((as_type<int>((1u + as_type<uint>(x_137))) < x_139)) {
      int const x_1084 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1084;
      float2 const x_596 = float2(x_592.y, x_582.x);
      int const x_1085 = l_1;
      l_1 = 0;
      l_1 = x_1085;
      int const x_143 = top;
      int const x_1086 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1086;
      float3 const x_597 = float3(x_562.y, x_560.y, x_560.y);
      int const x_144 = as_type<int>((as_type<uint>(x_143) + as_type<uint>(1)));
      int const x_1087 = param_5;
      param_5 = 0;
      param_5 = x_1087;
      top = x_144;
      int const x_1088 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1088;
      int const x_145 = p;
      int const x_1089 = param_5;
      param_5 = 0;
      param_5 = x_1089;
      float3 const x_599 = float3(x_560.z, x_560.x, x_568.x);
      int const x_1090 = p;
      p = 0;
      p = x_1090;
      float3 const x_600 = float3(x_556.x, x_580.x, x_580.x);
      int const x_1091 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1091;
      int const x_147_save = x_144;
      int const x_1092 = stack.arr[x_110_save];
      stack.arr[x_110_save] = 0;
      stack.arr[x_110_save] = x_1092;
      float2 const x_601 = float2(x_563.x, x_563.y);
      stack.arr[x_147_save] = as_type<int>((1u + as_type<uint>(x_145)));
      tint_array_wrapper const x_1093 = stack;
      tint_array_wrapper const tint_symbol_32 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_32;
      stack = x_1093;
      int const x_148 = top;
      int const x_1094 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1094;
      float2 const x_602 = float2(x_565.y, x_599.y);
      tint_array_wrapper const x_1095 = stack;
      tint_array_wrapper const tint_symbol_33 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_33;
      stack = x_1095;
      int const x_149 = as_type<int>((as_type<uint>(x_148) + as_type<uint>(as_type<int>(1u))));
      int const x_1096 = stack.arr[x_147_save];
      stack.arr[x_147_save] = 0;
      stack.arr[x_147_save] = x_1096;
      top = x_149;
      int const x_1097 = param_4;
      param_4 = 0;
      param_4 = x_1097;
      int const x_150 = h_1;
      int const x_1098 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1098;
      int const x_1099 = stack.arr[x_96_save];
      stack.arr[x_96_save] = 0;
      stack.arr[x_96_save] = x_1099;
      stack.arr[x_149] = x_150;
      int const x_1100 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1100;
      float3 const x_603 = float3(x_568.y, x_564.x, x_564.x);
      int const x_1101 = l_1;
      l_1 = 0;
      l_1 = x_1101;
    }
    int const x_1102 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1102;
    {
      int const x_1103 = l_1;
      l_1 = 0;
      l_1 = x_1103;
      float2 const x_604 = float2(x_563.z, x_564.x);
      QuicksortObject const x_1104 = *(tint_symbol_83);
      tint_array_wrapper const tint_symbol_34 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      QuicksortObject const tint_symbol_35 = {.numbers=tint_symbol_34};
      *(tint_symbol_83) = tint_symbol_35;
      *(tint_symbol_83) = x_1104;
    }
  }
  int const x_1105 = h_1;
  h_1 = 0;
  h_1 = x_1105;
  return;
}

void main_1(constant buf0& x_188, thread QuicksortObject* const tint_symbol_84, thread float4* const tint_symbol_85, thread float4* const tint_symbol_86) {
  float3 color = 0.0f;
  int i_2 = 0;
  float2 uv = 0.0f;
  float2 const x_717 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_717;
  i_2 = 0;
  QuicksortObject const x_721 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_36 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_37 = {.numbers=tint_symbol_36};
  *(tint_symbol_84) = tint_symbol_37;
  *(tint_symbol_84) = x_721;
  if (true) {
    QuicksortObject const x_722 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_38 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_39 = {.numbers=tint_symbol_38};
    *(tint_symbol_84) = tint_symbol_39;
    *(tint_symbol_84) = x_722;
    float2 const x_431 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).x);
    int const x_158 = i_2;
    float2 const x_723 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_723;
    float3 const x_725 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_725;
    float2 const x_432 = float2(x_431.y, x_431.y);
    QuicksortObject const x_726 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_40 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_41 = {.numbers=tint_symbol_40};
    *(tint_symbol_84) = tint_symbol_41;
    *(tint_symbol_84) = x_726;
  }
  QuicksortObject const x_756 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_42 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_43 = {.numbers=tint_symbol_42};
  *(tint_symbol_84) = tint_symbol_43;
  *(tint_symbol_84) = x_756;
  float2 const x_446 = float2(float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).x);
  int const x_757 = i_2;
  i_2 = 0;
  i_2 = x_757;
  quicksort_(tint_symbol_84);
  QuicksortObject const x_758 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_44 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_45 = {.numbers=tint_symbol_44};
  *(tint_symbol_84) = tint_symbol_45;
  *(tint_symbol_84) = x_758;
  float4 const x_184 = *(tint_symbol_85);
  float2 const x_759 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_759;
  float2 const x_447 = float2(float2(0.0f, 0.0f).y, float2(0.0f, 0.0f).y);
  float2 const x_760 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_760;
  float2 const x_185 = float2(x_184.x, x_184.y);
  float3 const x_448 = float3(x_185.y, x_446.y, x_446.y);
  QuicksortObject const x_761 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_46 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_47 = {.numbers=tint_symbol_46};
  *(tint_symbol_84) = tint_symbol_47;
  *(tint_symbol_84) = x_761;
  float2 const x_762 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_762;
  float2 const x_191 = x_188.resolution;
  QuicksortObject const x_763 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_48 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_49 = {.numbers=tint_symbol_48};
  *(tint_symbol_84) = tint_symbol_49;
  *(tint_symbol_84) = x_763;
  float3 const x_449 = float3(x_184.y, float3(1.0f, 2.0f, 3.0f).z, x_184.w);
  float3 const x_764 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_764;
  float2 const x_192 = (x_185 / x_191);
  QuicksortObject const x_765 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_50 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_51 = {.numbers=tint_symbol_50};
  *(tint_symbol_84) = tint_symbol_51;
  *(tint_symbol_84) = x_765;
  float2 const x_450 = float2(x_447.x, x_185.y);
  float3 const x_766 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  float3 const x_767 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_767;
  color = x_766;
  uv = x_192;
  color = float3(1.0f, 2.0f, 3.0f);
  float3 const x_768 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_768;
  float3 const x_451 = float3(x_185.x, x_185.y, x_446.y);
  QuicksortObject const x_769 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_52 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_53 = {.numbers=tint_symbol_52};
  *(tint_symbol_84) = tint_symbol_53;
  *(tint_symbol_84) = x_769;
  int const x_770 = (*(tint_symbol_84)).numbers.arr[0u];
  (*(tint_symbol_84)).numbers.arr[0u] = 0;
  (*(tint_symbol_84)).numbers.arr[0u] = x_770;
  int const x_201 = (*(tint_symbol_84)).numbers.arr[0u];
  QuicksortObject const x_771 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_54 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_55 = {.numbers=tint_symbol_54};
  *(tint_symbol_84) = tint_symbol_55;
  *(tint_symbol_84) = x_771;
  int const x_772 = (*(tint_symbol_84)).numbers.arr[0u];
  (*(tint_symbol_84)).numbers.arr[0u] = 0;
  (*(tint_symbol_84)).numbers.arr[0u] = x_772;
  float const x_206 = color.x;
  float const x_773 = color.x;
  color.x = 0.0f;
  color.x = x_773;
  float2 const x_452 = float2(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y);
  int const x_774 = i_2;
  i_2 = 0;
  i_2 = x_774;
  QuicksortObject const x_775 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_56 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_57 = {.numbers=tint_symbol_56};
  *(tint_symbol_84) = tint_symbol_57;
  *(tint_symbol_84) = x_775;
  float3 const x_453 = float3(x_451.x, x_450.x, x_450.y);
  color.x = (x_206 + float(x_201));
  float2 const x_776 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_776;
  float2 const x_777 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_777;
  float2 const x_454 = float2(x_184.y, x_184.y);
  float const x_210 = uv.x;
  float2 const x_455 = float2(x_192.y, x_192.x);
  float const x_778 = uv.x;
  uv.x = 0.0f;
  uv.x = x_778;
  QuicksortObject const x_779 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_58 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_59 = {.numbers=tint_symbol_58};
  *(tint_symbol_84) = tint_symbol_59;
  *(tint_symbol_84) = x_779;
  if ((x_210 > 0.25f)) {
    int const x_780 = i_2;
    i_2 = 0;
    i_2 = x_780;
    int const x_781 = (*(tint_symbol_84)).numbers.arr[0u];
    (*(tint_symbol_84)).numbers.arr[0u] = 0;
    (*(tint_symbol_84)).numbers.arr[0u] = x_781;
    float3 const x_456 = float3(float2(0.0f, 0.0f).y, x_448.y, x_448.y);
    float const x_782 = uv.x;
    uv.x = 0.0f;
    uv.x = x_782;
    int const x_216 = (*(tint_symbol_84)).numbers.arr[1];
    QuicksortObject const x_783 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_60 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_61 = {.numbers=tint_symbol_60};
    *(tint_symbol_84) = tint_symbol_61;
    *(tint_symbol_84) = x_783;
    float2 const x_457 = float2(x_454.x, x_454.x);
    float2 const x_784 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_784;
    QuicksortObject const x_785 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_62 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_63 = {.numbers=tint_symbol_62};
    *(tint_symbol_84) = tint_symbol_63;
    *(tint_symbol_84) = x_785;
    float2 const x_458 = float2(float3(1.0f, 2.0f, 3.0f).z, float2(0.0f, 0.0f).y);
    int const x_786 = i_2;
    i_2 = 0;
    i_2 = x_786;
    float const x_219 = color[0];
    float const x_787 = color[0];
    color[0] = 0.0f;
    color[0] = x_787;
    float3 const x_788 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_788;
    float3 const x_789 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_789;
    float3 const x_459 = float3(x_454.y, x_454.y, x_447.y);
    float const x_790 = color[0];
    color[0] = 0.0f;
    color[0] = x_790;
    color.x = (float(x_216) + x_219);
    int const x_791 = (*(tint_symbol_84)).numbers.arr[0u];
    (*(tint_symbol_84)).numbers.arr[0u] = 0;
    (*(tint_symbol_84)).numbers.arr[0u] = x_791;
  }
  float const x_792 = uv.x;
  uv.x = 0.0f;
  uv.x = x_792;
  float const x_793 = uv.x;
  uv.x = 0.0f;
  uv.x = x_793;
  float const x_223 = uv.x;
  float const x_794 = uv.x;
  uv.x = 0.0f;
  uv.x = x_794;
  float3 const x_460 = float3(x_453.z, x_453.y, x_453.y);
  float2 const x_795 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_795;
  float const x_796 = uv.x;
  uv.x = 0.0f;
  uv.x = x_796;
  float2 const x_461 = float2(float2(0.0f, 0.0f).y, float2(0.0f, 0.0f).y);
  float const x_797 = uv.x;
  uv.x = 0.0f;
  uv.x = x_797;
  if ((x_223 > 0.5f)) {
    float const x_798 = uv.x;
    uv.x = 0.0f;
    uv.x = x_798;
    float2 const x_462 = float2(x_446.x, x_446.x);
    float const x_799 = color.x;
    color.x = 0.0f;
    color.x = x_799;
    float const x_800 = color.x;
    color.x = 0.0f;
    color.x = x_800;
    float3 const x_463 = float3(x_453.x, x_453.z, x_461.y);
    float const x_801 = color.x;
    color.x = 0.0f;
    color.x = x_801;
    int const x_230 = (*(tint_symbol_84)).numbers.arr[2u];
    float const x_802 = uv.x;
    uv.x = 0.0f;
    uv.x = x_802;
    float const x_803 = color.x;
    color.x = 0.0f;
    color.x = x_803;
    int const x_804 = (*(tint_symbol_84)).numbers.arr[2u];
    (*(tint_symbol_84)).numbers.arr[2u] = 0;
    (*(tint_symbol_84)).numbers.arr[2u] = x_804;
    float2 const x_464 = float2(x_450.y, x_191.x);
    float const x_805 = color.y;
    color.y = 0.0f;
    color.y = x_805;
    float const x_234 = color.y;
    int const x_806 = (*(tint_symbol_84)).numbers.arr[2u];
    (*(tint_symbol_84)).numbers.arr[2u] = 0;
    (*(tint_symbol_84)).numbers.arr[2u] = x_806;
    float2 const x_465 = float2(x_463.x, x_185.x);
    float const x_807 = color.x;
    color.x = 0.0f;
    color.x = x_807;
    int const x_808 = i_2;
    i_2 = 0;
    i_2 = x_808;
    float2 const x_466 = float2(x_455.y, float2(0.0f, 0.0f).y);
    int const x_809 = i_2;
    i_2 = 0;
    i_2 = x_809;
    color.y = (float(x_230) + x_234);
    float const x_810 = uv.x;
    uv.x = 0.0f;
    uv.x = x_810;
  }
  int const x_811 = i_2;
  i_2 = 0;
  i_2 = x_811;
  float2 const x_467 = float2(x_191.x, x_191.x);
  float const x_812 = uv.x;
  uv.x = 0.0f;
  uv.x = x_812;
  float const x_238 = uv[0];
  float3 const x_813 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_813;
  float const x_814 = color.x;
  color.x = 0.0f;
  color.x = x_814;
  if ((x_238 > 0.75f)) {
    float const x_815 = color.x;
    color.x = 0.0f;
    color.x = x_815;
    int const x_245 = (*(tint_symbol_84)).numbers.arr[3];
    float const x_816 = color.x;
    color.x = 0.0f;
    color.x = x_816;
    QuicksortObject const x_817 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_64 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_65 = {.numbers=tint_symbol_64};
    *(tint_symbol_84) = tint_symbol_65;
    *(tint_symbol_84) = x_817;
    float3 const x_468 = float3(x_467.x, x_467.x, x_467.x);
    float const x_818 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_818;
    float const x_819 = uv.x;
    uv.x = 0.0f;
    uv.x = x_819;
    float const x_249 = color.z;
    float3 const x_820 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_820;
    float3 const x_469 = float3(x_467.x, x_191.y, x_467.y);
    float const x_821 = color.z;
    color.z = 0.0f;
    color.z = x_821;
    int const x_822 = (*(tint_symbol_84)).numbers.arr[0u];
    (*(tint_symbol_84)).numbers.arr[0u] = 0;
    (*(tint_symbol_84)).numbers.arr[0u] = x_822;
    float2 const x_470 = float2(float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).y);
    float const x_823 = color.z;
    color.z = 0.0f;
    color.z = x_823;
    color.z = (x_249 + float(x_245));
    float2 const x_824 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_824;
    float2 const x_471 = float2(x_470.y, x_470.y);
  }
  float const x_825 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_825;
  float3 const x_472 = float3(x_454.x, x_454.y, x_454.y);
  int const x_254 = (*(tint_symbol_84)).numbers.arr[4];
  float const x_826 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_826;
  float3 const x_827 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_827;
  float3 const x_473 = float3(x_446.y, x_453.x, x_453.x);
  int const x_828 = (*(tint_symbol_84)).numbers.arr[4];
  (*(tint_symbol_84)).numbers.arr[4] = 0;
  (*(tint_symbol_84)).numbers.arr[4] = x_828;
  float2 const x_474 = float2(x_191.x, x_184.z);
  float const x_829 = uv.x;
  uv.x = 0.0f;
  uv.x = x_829;
  float const x_257 = color.y;
  float const x_830 = color.y;
  color.y = 0.0f;
  color.y = x_830;
  float2 const x_475 = float2(x_467.x, x_450.x);
  float const x_831 = uv.x;
  uv.x = 0.0f;
  uv.x = x_831;
  float const x_832 = color.x;
  color.x = 0.0f;
  color.x = x_832;
  float2 const x_476 = float2(x_451.z, x_460.y);
  color.y = (x_257 + float(x_254));
  float3 const x_477 = float3(float2(0.0f, 0.0f).x, x_472.x, float2(0.0f, 0.0f).y);
  float const x_833 = uv.x;
  uv.x = 0.0f;
  uv.x = x_833;
  float const x_834 = color.x;
  color.x = 0.0f;
  color.x = x_834;
  float2 const x_478 = float2(x_472.x, x_472.y);
  float const x_835 = uv.y;
  uv.y = 0.0f;
  uv.y = x_835;
  float const x_261 = uv.y;
  int const x_836 = i_2;
  i_2 = 0;
  i_2 = x_836;
  float3 const x_479 = float3(float2(0.0f, 0.0f).y, x_454.y, float2(0.0f, 0.0f).x);
  int const x_837 = (*(tint_symbol_84)).numbers.arr[0u];
  (*(tint_symbol_84)).numbers.arr[0u] = 0;
  (*(tint_symbol_84)).numbers.arr[0u] = x_837;
  float const x_838 = color.y;
  color.y = 0.0f;
  color.y = x_838;
  float3 const x_480 = float3(x_446.x, x_446.x, float2(0.0f, 0.0f).y);
  float const x_839 = uv.x;
  uv.x = 0.0f;
  uv.x = x_839;
  if ((x_261 > 0.25f)) {
    float2 const x_481 = float2(x_447.x, x_480.z);
    float3 const x_840 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_840;
    int const x_267 = (*(tint_symbol_84)).numbers.arr[5u];
    float const x_841 = color.x;
    color.x = 0.0f;
    color.x = x_841;
    int const x_842 = i_2;
    i_2 = 0;
    i_2 = x_842;
    int const x_843 = i_2;
    i_2 = 0;
    i_2 = x_843;
    float const x_270 = color.x;
    float const x_844 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_844;
    float3 const x_482 = float3(x_455.x, x_475.y, x_455.y);
    QuicksortObject const x_845 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_66 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_67 = {.numbers=tint_symbol_66};
    *(tint_symbol_84) = tint_symbol_67;
    *(tint_symbol_84) = x_845;
    float const x_846 = uv.y;
    uv.y = 0.0f;
    uv.y = x_846;
    int const x_847 = i_2;
    i_2 = 0;
    i_2 = x_847;
    float3 const x_483 = float3(x_184.w, x_184.w, x_192.x);
    float const x_848 = uv.x;
    uv.x = 0.0f;
    uv.x = x_848;
    color.x = (float(x_267) + x_270);
    float3 const x_484 = float3(x_454.y, x_450.x, x_454.y);
    float const x_849 = uv.x;
    uv.x = 0.0f;
    uv.x = x_849;
  }
  float const x_850 = color.x;
  color.x = 0.0f;
  color.x = x_850;
  float3 const x_485 = float3(x_467.x, x_450.y, x_450.x);
  float const x_851 = uv.y;
  uv.y = 0.0f;
  uv.y = x_851;
  int const x_852 = (*(tint_symbol_84)).numbers.arr[4];
  (*(tint_symbol_84)).numbers.arr[4] = 0;
  (*(tint_symbol_84)).numbers.arr[4] = x_852;
  float const x_274 = uv.y;
  int const x_853 = (*(tint_symbol_84)).numbers.arr[0u];
  (*(tint_symbol_84)).numbers.arr[0u] = 0;
  (*(tint_symbol_84)).numbers.arr[0u] = x_853;
  if ((x_274 > 0.5f)) {
    float const x_854 = uv.x;
    uv.x = 0.0f;
    uv.x = x_854;
    float2 const x_486 = float2(x_480.y, x_455.y);
    float const x_855 = color.y;
    color.y = 0.0f;
    color.y = x_855;
    float2 const x_487 = float2(x_449.z, x_449.y);
    float const x_856 = uv.y;
    uv.y = 0.0f;
    uv.y = x_856;
    int const x_280 = (*(tint_symbol_84)).numbers.arr[6u];
    float const x_857 = uv.y;
    uv.y = 0.0f;
    uv.y = x_857;
    int const x_858 = i_2;
    i_2 = 0;
    i_2 = x_858;
    int const x_859 = (*(tint_symbol_84)).numbers.arr[4];
    (*(tint_symbol_84)).numbers.arr[4] = 0;
    (*(tint_symbol_84)).numbers.arr[4] = x_859;
    float2 const x_488 = float2(x_473.z, x_473.y);
    float const x_283 = color.y;
    float2 const x_860 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_860;
    float const x_861 = color.x;
    color.x = 0.0f;
    color.x = x_861;
    float2 const x_489 = float2(x_475.y, x_475.x);
    int const x_862 = (*(tint_symbol_84)).numbers.arr[6u];
    (*(tint_symbol_84)).numbers.arr[6u] = 0;
    (*(tint_symbol_84)).numbers.arr[6u] = x_862;
    int const x_863 = (*(tint_symbol_84)).numbers.arr[6u];
    (*(tint_symbol_84)).numbers.arr[6u] = 0;
    (*(tint_symbol_84)).numbers.arr[6u] = x_863;
    float2 const x_490 = float2(x_480.z, x_480.z);
    QuicksortObject const x_864 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_68 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_69 = {.numbers=tint_symbol_68};
    *(tint_symbol_84) = tint_symbol_69;
    *(tint_symbol_84) = x_864;
    color.y = (float(x_280) + x_283);
    float const x_865 = color.x;
    color.x = 0.0f;
    color.x = x_865;
    float2 const x_491 = float2(float3(1.0f, 2.0f, 3.0f).y, x_454.x);
    float const x_866 = color.y;
    color.y = 0.0f;
    color.y = x_866;
  }
  float2 const x_492 = float2(x_455.y, x_455.y);
  float const x_867 = color.x;
  color.x = 0.0f;
  color.x = x_867;
  float const x_287 = uv.y;
  QuicksortObject const x_868 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_70 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_71 = {.numbers=tint_symbol_70};
  *(tint_symbol_84) = tint_symbol_71;
  *(tint_symbol_84) = x_868;
  float2 const x_493 = float2(x_475.x, x_475.y);
  float const x_869 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_869;
  float const x_870 = color.y;
  color.y = 0.0f;
  color.y = x_870;
  float3 const x_494 = float3(x_191.x, x_191.y, x_191.y);
  int const x_871 = (*(tint_symbol_84)).numbers.arr[4];
  (*(tint_symbol_84)).numbers.arr[4] = 0;
  (*(tint_symbol_84)).numbers.arr[4] = x_871;
  if ((x_287 > 0.75f)) {
    float3 const x_872 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_872;
    float const x_873 = color.x;
    color.x = 0.0f;
    color.x = x_873;
    float3 const x_495 = float3(x_192.y, x_192.x, x_192.y);
    float3 const x_874 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_874;
    int const x_293 = (*(tint_symbol_84)).numbers.arr[7];
    float const x_875 = uv.x;
    uv.x = 0.0f;
    uv.x = x_875;
    float3 const x_496 = float3(x_475.x, x_467.y, x_467.x);
    float const x_876 = color.y;
    color.y = 0.0f;
    color.y = x_876;
    float2 const x_497 = float2(x_477.x, x_461.y);
    int const x_877 = (*(tint_symbol_84)).numbers.arr[0u];
    (*(tint_symbol_84)).numbers.arr[0u] = 0;
    (*(tint_symbol_84)).numbers.arr[0u] = x_877;
    float const x_878 = color.y;
    color.y = 0.0f;
    color.y = x_878;
    float3 const x_498 = float3(x_478.x, x_478.y, x_478.x);
    float const x_879 = color.x;
    color.x = 0.0f;
    color.x = x_879;
    float const x_296 = color.z;
    float const x_880 = uv.y;
    uv.y = 0.0f;
    uv.y = x_880;
    float2 const x_499 = float2(x_184.x, x_184.y);
    float const x_881 = uv.x;
    uv.x = 0.0f;
    uv.x = x_881;
    float const x_882 = uv.y;
    uv.y = 0.0f;
    uv.y = x_882;
    float const x_883 = uv.y;
    uv.y = 0.0f;
    uv.y = x_883;
    float3 const x_500 = float3(x_499.y, x_499.y, x_494.z);
    float const x_884 = color.z;
    color.z = 0.0f;
    color.z = x_884;
    color.z = (float(x_293) + x_296);
    float const x_885 = color.y;
    color.y = 0.0f;
    color.y = x_885;
    float2 const x_501 = float2(x_453.x, x_453.z);
    float const x_886 = color.x;
    color.x = 0.0f;
    color.x = x_886;
  }
  int const x_887 = i_2;
  i_2 = 0;
  i_2 = x_887;
  float2 const x_502 = float2(x_451.y, x_192.y);
  float2 const x_888 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_888;
  int const x_301 = (*(tint_symbol_84)).numbers.arr[8];
  int const x_889 = i_2;
  i_2 = 0;
  i_2 = x_889;
  float2 const x_503 = float2(x_185.x, x_451.z);
  int const x_890 = (*(tint_symbol_84)).numbers.arr[8];
  (*(tint_symbol_84)).numbers.arr[8] = 0;
  (*(tint_symbol_84)).numbers.arr[8] = x_890;
  float const x_891 = color.y;
  color.y = 0.0f;
  color.y = x_891;
  float2 const x_504 = float2(x_453.y, float2(0.0f, 0.0f).x);
  float const x_892 = color.x;
  color.x = 0.0f;
  color.x = x_892;
  float3 const x_505 = float3(x_504.x, x_504.y, x_504.x);
  float const x_893 = color.z;
  color.z = 0.0f;
  color.z = x_893;
  float const x_304 = color.z;
  float const x_894 = color.x;
  color.x = 0.0f;
  color.x = x_894;
  float2 const x_506 = float2(x_493.x, x_492.x);
  int const x_895 = (*(tint_symbol_84)).numbers.arr[4];
  (*(tint_symbol_84)).numbers.arr[4] = 0;
  (*(tint_symbol_84)).numbers.arr[4] = x_895;
  float const x_896 = uv.y;
  uv.y = 0.0f;
  uv.y = x_896;
  float2 const x_507 = float2(x_461.x, x_447.x);
  float const x_897 = color.y;
  color.y = 0.0f;
  color.y = x_897;
  color.z = (x_304 + float(x_301));
  float2 const x_898 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_898;
  float const x_899 = uv.x;
  uv.x = 0.0f;
  uv.x = x_899;
  float3 const x_508 = float3(x_461.y, x_461.x, x_506.y);
  float const x_900 = uv.x;
  uv.x = 0.0f;
  uv.x = x_900;
  float const x_308 = uv.x;
  float const x_901 = color.y;
  color.y = 0.0f;
  color.y = x_901;
  float3 const x_509 = float3(x_503.y, x_503.x, x_448.z);
  float const x_902 = uv.y;
  uv.y = 0.0f;
  uv.y = x_902;
  float const x_310 = uv.y;
  float const x_903 = uv.y;
  uv.y = 0.0f;
  uv.y = x_903;
  float const x_904 = color.z;
  color.z = 0.0f;
  color.z = x_904;
  float3 const x_510 = float3(float3(1.0f, 2.0f, 3.0f).y, x_485.y, x_485.z);
  float const x_905 = color.z;
  color.z = 0.0f;
  color.z = x_905;
  int const x_906 = i_2;
  i_2 = 0;
  i_2 = x_906;
  float2 const x_511 = float2(x_485.z, x_485.y);
  float3 const x_907 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_907;
  float const x_908 = uv.y;
  uv.y = 0.0f;
  uv.y = x_908;
  float3 const x_512 = float3(x_455.y, x_455.y, x_455.y);
  int const x_909 = (*(tint_symbol_84)).numbers.arr[4];
  (*(tint_symbol_84)).numbers.arr[4] = 0;
  (*(tint_symbol_84)).numbers.arr[4] = x_909;
  if ((fabs((x_308 - x_310)) < 0.25f)) {
    float const x_910 = uv.x;
    uv.x = 0.0f;
    uv.x = x_910;
    QuicksortObject const x_911 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_72 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_73 = {.numbers=tint_symbol_72};
    *(tint_symbol_84) = tint_symbol_73;
    *(tint_symbol_84) = x_911;
    float3 const x_513 = float3(x_505.z, x_505.x, x_448.x);
    int const x_912 = (*(tint_symbol_84)).numbers.arr[8];
    (*(tint_symbol_84)).numbers.arr[8] = 0;
    (*(tint_symbol_84)).numbers.arr[8] = x_912;
    int const x_317 = (*(tint_symbol_84)).numbers.arr[9u];
    float3 const x_514 = float3(x_474.y, x_474.y, x_474.y);
    float const x_913 = uv.y;
    uv.y = 0.0f;
    uv.y = x_913;
    float const x_320 = color.x;
    float const x_914 = uv.y;
    uv.y = 0.0f;
    uv.y = x_914;
    float2 const x_515 = float2(x_502.x, x_502.y);
    float const x_915 = color.x;
    color.x = 0.0f;
    color.x = x_915;
    float3 const x_916 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_916;
    float2 const x_516 = float2(x_452.x, x_452.x);
    float2 const x_917 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_917;
    float const x_918 = uv.x;
    uv.x = 0.0f;
    uv.x = x_918;
    float3 const x_517 = float3(float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).y);
    color.x = (float(x_317) + x_320);
    float const x_919 = color.x;
    color.x = 0.0f;
    color.x = x_919;
    float3 const x_518 = float3(x_480.y, x_508.x, x_480.x);
    float const x_920 = color.x;
    color.x = 0.0f;
    color.x = x_920;
  }
  float const x_921 = uv.y;
  uv.y = 0.0f;
  uv.y = x_921;
  float3 const x_325 = color;
  float const x_922 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_922;
  float3 const x_519 = float3(x_447.x, x_446.x, x_446.y);
  float3 const x_326 = normalize(x_325);
  float const x_923 = uv.x;
  uv.x = 0.0f;
  uv.x = x_923;
  QuicksortObject const x_924 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_74 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_75 = {.numbers=tint_symbol_74};
  *(tint_symbol_84) = tint_symbol_75;
  *(tint_symbol_84) = x_924;
  QuicksortObject const x_925 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_76 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_77 = {.numbers=tint_symbol_76};
  *(tint_symbol_84) = tint_symbol_77;
  *(tint_symbol_84) = x_925;
  float const x_926 = color.y;
  color.y = 0.0f;
  color.y = x_926;
  float2 const x_520 = float2(x_506.y, x_519.y);
  float const x_927 = color.y;
  color.y = 0.0f;
  color.y = x_927;
  float4 const x_330 = float4(x_326.x, x_326.y, x_326.z, 1.0f);
  float const x_928 = uv.y;
  uv.y = 0.0f;
  uv.y = x_928;
  float3 const x_521 = float3(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).y, x_520.y);
  float const x_929 = uv.x;
  uv.x = 0.0f;
  uv.x = x_929;
  *(tint_symbol_86) = x_330;
  QuicksortObject const x_930 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_78 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_79 = {.numbers=tint_symbol_78};
  *(tint_symbol_84) = tint_symbol_79;
  *(tint_symbol_84) = x_930;
  float3 const x_522 = float3(x_330.w, x_330.y, x_493.x);
  float const x_931 = color.x;
  color.x = 0.0f;
  color.x = x_931;
  return;
}

main_out tint_symbol_inner(constant buf0& x_188, float4 gl_FragCoord_param, thread float4* const tint_symbol_87, thread QuicksortObject* const tint_symbol_88, thread float4* const tint_symbol_89) {
  *(tint_symbol_87) = gl_FragCoord_param;
  main_1(x_188, tint_symbol_88, tint_symbol_87, tint_symbol_89);
  main_out const tint_symbol_80 = {.x_GLF_color_1=*(tint_symbol_89)};
  return tint_symbol_80;
}

fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_188 [[buffer(0)]]) {
  thread float4 tint_symbol_90 = 0.0f;
  thread QuicksortObject tint_symbol_91 = {};
  thread float4 tint_symbol_92 = 0.0f;
  main_out const inner_result = tint_symbol_inner(x_188, gl_FragCoord_param, &(tint_symbol_90), &(tint_symbol_91), &(tint_symbol_92));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
  return wrapper_result;
}

