#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_2 {
  float4 x_GLF_color_1 [[color(0)]];
};

void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_83) {
  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_83)).numbers.arr[x_30_save];
  (*(tint_symbol_83)).numbers.arr[x_30_save] = 0;
  (*(tint_symbol_83)).numbers.arr[x_30_save] = x_936;
  int const x_31 = (*(tint_symbol_83)).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_83)).numbers.arr[x_30_save];
  (*(tint_symbol_83)).numbers.arr[x_30_save] = 0;
  (*(tint_symbol_83)).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_83)).numbers.arr[x_30_save];
  (*(tint_symbol_83)).numbers.arr[x_30_save] = 0;
  (*(tint_symbol_83)).numbers.arr[x_30_save] = x_942;
  int const x_34_save = x_33;
  int const x_35 = (*(tint_symbol_83)).numbers.arr[x_34_save];
  QuicksortObject const x_943 = *(tint_symbol_83);
  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_83) = tint_symbol_5;
  *(tint_symbol_83) = 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_83)).numbers.arr[x_36_save] = x_35;
  QuicksortObject const x_944 = *(tint_symbol_83);
  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_83) = tint_symbol_7;
  *(tint_symbol_83) = 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_83)).numbers.arr[x_34_save];
  (*(tint_symbol_83)).numbers.arr[x_34_save] = 0;
  (*(tint_symbol_83)).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_83)).numbers.arr[x_36_save];
  (*(tint_symbol_83)).numbers.arr[x_36_save] = 0;
  (*(tint_symbol_83)).numbers.arr[x_36_save] = x_949;
  QuicksortObject const x_950 = *(tint_symbol_83);
  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_83) = tint_symbol_9;
  *(tint_symbol_83) = x_950;
  float3 const x_532 = float3(x_528.x, x_528.y, x_528.x);
  int const x_951 = (*(tint_symbol_83)).numbers.arr[x_34_save];
  (*(tint_symbol_83)).numbers.arr[x_34_save] = 0;
  (*(tint_symbol_83)).numbers.arr[x_34_save] = x_951;
  (*(tint_symbol_83)).numbers.arr[x_37] = x_38;
  return;
}

int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_84) {
  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_84)).numbers.arr[x_42_save];
  (*(tint_symbol_84)).numbers.arr[x_42_save] = 0;
  (*(tint_symbol_84)).numbers.arr[x_42_save] = x_954;
  int const x_43 = (*(tint_symbol_84)).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 = (x_45 - 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_84);
  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_84) = tint_symbol_11;
  *(tint_symbol_84) = 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_84);
    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_84) = tint_symbol_13;
    *(tint_symbol_84) = 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 <= (x_56 - as_type<int>(1u)))) {
    } else {
      break;
    }
    int const x_60 = j_1;
    int const x_969 = (*(tint_symbol_84)).numbers.arr[x_42_save];
    (*(tint_symbol_84)).numbers.arr[x_42_save] = 0;
    (*(tint_symbol_84)).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_84)).numbers.arr[x_61_save];
    QuicksortObject const x_972 = *(tint_symbol_84);
    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_84) = tint_symbol_15;
    *(tint_symbol_84) = 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 = (x_67 + 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_84);
      int const x_985 = param_1;
      param_1 = 0;
      param_1 = x_985;
    }
    QuicksortObject const x_986 = *(tint_symbol_84);
    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_84) = tint_symbol_17;
    *(tint_symbol_84) = 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_84)).numbers.arr[x_61_save];
      (*(tint_symbol_84)).numbers.arr[x_61_save] = 0;
      (*(tint_symbol_84)).numbers.arr[x_61_save] = x_989;
      int const x_990 = param;
      param = 0;
      param = x_990;
      j_1 = (1 + 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_84)).numbers.arr[x_61_save];
      (*(tint_symbol_84)).numbers.arr[x_61_save] = 0;
      (*(tint_symbol_84)).numbers.arr[x_61_save] = x_992;
    }
  }
  int const x_76 = i_1;
  int const x_993 = (*(tint_symbol_84)).numbers.arr[x_42_save];
  (*(tint_symbol_84)).numbers.arr[x_42_save] = 0;
  (*(tint_symbol_84)).numbers.arr[x_42_save] = x_993;
  float2 const x_549 = float2(x_534.x, x_534.y);
  QuicksortObject const x_994 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_18 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_19 = {.numbers=tint_symbol_18};
  *(tint_symbol_84) = tint_symbol_19;
  *(tint_symbol_84) = x_994;
  int const x_995 = *(h);
  *(h) = 0;
  *(h) = x_995;
  i_1 = (1 + 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_84);
  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_85) {
  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_20 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  stack = tint_symbol_20;
  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 = (x_93 + 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_85);
  tint_array_wrapper const tint_symbol_21 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_22 = {.numbers=tint_symbol_21};
  *(tint_symbol_85) = tint_symbol_22;
  *(tint_symbol_85) = 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_23 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  stack = tint_symbol_23;
  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 = (x_97 + 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_24 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_24;
    stack = x_1029;
    int const x_106 = top;
    tint_array_wrapper const x_1030 = stack;
    tint_array_wrapper const tint_symbol_25 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_25;
    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_85);
    tint_array_wrapper const tint_symbol_26 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_27 = {.numbers=tint_symbol_26};
    *(tint_symbol_85) = tint_symbol_27;
    *(tint_symbol_85) = 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 = (x_108 - 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_28 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_28;
    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_29 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_29;
    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 = (x_112 - 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_85);
    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 (((x_122 - 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_30 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_30;
      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 = (1 + 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_31 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_31;
      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] = (x_134 - 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_85);
    tint_array_wrapper const tint_symbol_32 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_33 = {.numbers=tint_symbol_32};
    *(tint_symbol_85) = tint_symbol_33;
    *(tint_symbol_85) = 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 = (x_143 + 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_34 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_34;
      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_35 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_35;
      stack = x_1095;
      int const x_149 = (x_148 + 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_85);
      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_85) = tint_symbol_37;
      *(tint_symbol_85) = 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_86, thread float4* const tint_symbol_87, thread float4* const tint_symbol_88) {
  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_86);
  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_86) = tint_symbol_39;
  *(tint_symbol_86) = x_721;
  if (true) {
    QuicksortObject const x_722 = *(tint_symbol_86);
    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_86) = tint_symbol_41;
    *(tint_symbol_86) = 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_86);
    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_86) = tint_symbol_43;
    *(tint_symbol_86) = x_726;
  }
  QuicksortObject const x_756 = *(tint_symbol_86);
  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_86) = tint_symbol_45;
  *(tint_symbol_86) = 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_86);
  QuicksortObject const x_758 = *(tint_symbol_86);
  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_86) = tint_symbol_47;
  *(tint_symbol_86) = x_758;
  float4 const x_184 = *(tint_symbol_87);
  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_86);
  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_86) = tint_symbol_49;
  *(tint_symbol_86) = 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_86);
  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_86) = tint_symbol_51;
  *(tint_symbol_86) = 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_86);
  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_86) = tint_symbol_53;
  *(tint_symbol_86) = 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_86);
  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_86) = tint_symbol_55;
  *(tint_symbol_86) = x_769;
  int const x_770 = (*(tint_symbol_86)).numbers.arr[0u];
  (*(tint_symbol_86)).numbers.arr[0u] = 0;
  (*(tint_symbol_86)).numbers.arr[0u] = x_770;
  int const x_201 = (*(tint_symbol_86)).numbers.arr[0u];
  QuicksortObject const x_771 = *(tint_symbol_86);
  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_86) = tint_symbol_57;
  *(tint_symbol_86) = x_771;
  int const x_772 = (*(tint_symbol_86)).numbers.arr[0u];
  (*(tint_symbol_86)).numbers.arr[0u] = 0;
  (*(tint_symbol_86)).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_86);
  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_86) = tint_symbol_59;
  *(tint_symbol_86) = 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_86);
  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_86) = tint_symbol_61;
  *(tint_symbol_86) = 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_86)).numbers.arr[0u];
    (*(tint_symbol_86)).numbers.arr[0u] = 0;
    (*(tint_symbol_86)).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_86)).numbers.arr[1];
    QuicksortObject const x_783 = *(tint_symbol_86);
    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_86) = tint_symbol_63;
    *(tint_symbol_86) = 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_86);
    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_86) = tint_symbol_65;
    *(tint_symbol_86) = 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_86)).numbers.arr[0u];
    (*(tint_symbol_86)).numbers.arr[0u] = 0;
    (*(tint_symbol_86)).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_86)).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_86)).numbers.arr[2u];
    (*(tint_symbol_86)).numbers.arr[2u] = 0;
    (*(tint_symbol_86)).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_86)).numbers.arr[2u];
    (*(tint_symbol_86)).numbers.arr[2u] = 0;
    (*(tint_symbol_86)).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_86)).numbers.arr[3];
    float const x_816 = color.x;
    color.x = 0.0f;
    color.x = x_816;
    QuicksortObject const x_817 = *(tint_symbol_86);
    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_86) = tint_symbol_67;
    *(tint_symbol_86) = 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_86)).numbers.arr[0u];
    (*(tint_symbol_86)).numbers.arr[0u] = 0;
    (*(tint_symbol_86)).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_86)).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_86)).numbers.arr[4];
  (*(tint_symbol_86)).numbers.arr[4] = 0;
  (*(tint_symbol_86)).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_86)).numbers.arr[0u];
  (*(tint_symbol_86)).numbers.arr[0u] = 0;
  (*(tint_symbol_86)).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_86)).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_86);
    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_86) = tint_symbol_69;
    *(tint_symbol_86) = 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_86)).numbers.arr[4];
  (*(tint_symbol_86)).numbers.arr[4] = 0;
  (*(tint_symbol_86)).numbers.arr[4] = x_852;
  float const x_274 = uv.y;
  int const x_853 = (*(tint_symbol_86)).numbers.arr[0u];
  (*(tint_symbol_86)).numbers.arr[0u] = 0;
  (*(tint_symbol_86)).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_86)).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_86)).numbers.arr[4];
    (*(tint_symbol_86)).numbers.arr[4] = 0;
    (*(tint_symbol_86)).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_86)).numbers.arr[6u];
    (*(tint_symbol_86)).numbers.arr[6u] = 0;
    (*(tint_symbol_86)).numbers.arr[6u] = x_862;
    int const x_863 = (*(tint_symbol_86)).numbers.arr[6u];
    (*(tint_symbol_86)).numbers.arr[6u] = 0;
    (*(tint_symbol_86)).numbers.arr[6u] = x_863;
    float2 const x_490 = float2(x_480.z, x_480.z);
    QuicksortObject const x_864 = *(tint_symbol_86);
    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_86) = tint_symbol_71;
    *(tint_symbol_86) = 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_86);
  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_86) = tint_symbol_73;
  *(tint_symbol_86) = 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_86)).numbers.arr[4];
  (*(tint_symbol_86)).numbers.arr[4] = 0;
  (*(tint_symbol_86)).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_86)).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_86)).numbers.arr[0u];
    (*(tint_symbol_86)).numbers.arr[0u] = 0;
    (*(tint_symbol_86)).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_86)).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_86)).numbers.arr[8];
  (*(tint_symbol_86)).numbers.arr[8] = 0;
  (*(tint_symbol_86)).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_86)).numbers.arr[4];
  (*(tint_symbol_86)).numbers.arr[4] = 0;
  (*(tint_symbol_86)).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_86)).numbers.arr[4];
  (*(tint_symbol_86)).numbers.arr[4] = 0;
  (*(tint_symbol_86)).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_86);
    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_86) = tint_symbol_75;
    *(tint_symbol_86) = x_911;
    float3 const x_513 = float3(x_505.z, x_505.x, x_448.x);
    int const x_912 = (*(tint_symbol_86)).numbers.arr[8];
    (*(tint_symbol_86)).numbers.arr[8] = 0;
    (*(tint_symbol_86)).numbers.arr[8] = x_912;
    int const x_317 = (*(tint_symbol_86)).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_86);
  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_86) = tint_symbol_77;
  *(tint_symbol_86) = x_924;
  QuicksortObject const x_925 = *(tint_symbol_86);
  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_86) = tint_symbol_79;
  *(tint_symbol_86) = 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_88) = x_330;
  QuicksortObject const x_930 = *(tint_symbol_86);
  tint_array_wrapper const tint_symbol_80 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_81 = {.numbers=tint_symbol_80};
  *(tint_symbol_86) = tint_symbol_81;
  *(tint_symbol_86) = 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;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_188 [[buffer(0)]]) {
  thread float4 tint_symbol_89 = 0.0f;
  thread QuicksortObject tint_symbol_90 = {};
  thread float4 tint_symbol_91 = 0.0f;
  tint_symbol_89 = gl_FragCoord_param;
  main_1(x_188, &(tint_symbol_90), &(tint_symbol_89), &(tint_symbol_91));
  main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_91};
  tint_symbol_2 const tint_symbol_82 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
  return tint_symbol_82;
}

