#include <metal_stdlib>
using namespace metal;

kernel void v() {
  {
    uint2 tint_loop_idx = 0u;
    int i = 0;
    while(true) {
      if (all((tint_loop_idx == uint2(4294967295u)))) {
        break;
      }
      if ((i < 2)) {
      } else {
        break;
      }
      bool tint_continue = false;
      switch(i) {
        case 0:
        {
          {
            uint2 tint_loop_idx_1 = 0u;
            int j = 0;
            while(true) {
              if (all((tint_loop_idx_1 == uint2(4294967295u)))) {
                break;
              }
              if ((j < 2)) {
              } else {
                break;
              }
              bool tint_continue_1 = false;
              switch(j) {
                case 0:
                {
                  tint_continue_1 = true;
                  break;
                }
                default:
                {
                  break;
                }
              }
              if (tint_continue_1) {
                {
                  uint const tint_low_inc_1 = (tint_loop_idx_1.x + 1u);
                  tint_loop_idx_1.x = tint_low_inc_1;
                  uint const tint_carry_1 = uint((tint_low_inc_1 == 0u));
                  tint_loop_idx_1.y = (tint_loop_idx_1.y + tint_carry_1);
                  j = as_type<int>((as_type<uint>(j) + as_type<uint>(2)));
                }
                continue;
              }
              {
                uint const tint_low_inc_1 = (tint_loop_idx_1.x + 1u);
                tint_loop_idx_1.x = tint_low_inc_1;
                uint const tint_carry_1 = uint((tint_low_inc_1 == 0u));
                tint_loop_idx_1.y = (tint_loop_idx_1.y + tint_carry_1);
                j = as_type<int>((as_type<uint>(j) + as_type<uint>(2)));
              }
              continue;
            }
          }
          tint_continue = true;
          break;
        }
        default:
        {
          break;
        }
      }
      if (tint_continue) {
        {
          uint const tint_low_inc = (tint_loop_idx.x + 1u);
          tint_loop_idx.x = tint_low_inc;
          uint const tint_carry = uint((tint_low_inc == 0u));
          tint_loop_idx.y = (tint_loop_idx.y + tint_carry);
          i = as_type<int>((as_type<uint>(i) + as_type<uint>(2)));
        }
        continue;
      }
      {
        uint const tint_low_inc = (tint_loop_idx.x + 1u);
        tint_loop_idx.x = tint_low_inc;
        uint const tint_carry = uint((tint_low_inc == 0u));
        tint_loop_idx.y = (tint_loop_idx.y + tint_carry);
        i = as_type<int>((as_type<uint>(i) + as_type<uint>(2)));
      }
      continue;
    }
  }
}
