@Override
 public Object process(
     Node nd, Stack<Node> stack, NodeProcessorCtx procCtx, Object... nodeOutputs)
     throws SemanticException {
   ReduceSinkDeduplicateProcCtx dedupCtx = (ReduceSinkDeduplicateProcCtx) procCtx;
   if (dedupCtx.hasBeenRemoved((Operator<?>) nd)) {
     return false;
   }
   ReduceSinkOperator cRS = (ReduceSinkOperator) nd;
   Operator<?> child = CorrelationUtilities.getSingleChild(cRS);
   if (child instanceof JoinOperator) {
     return false; // not supported
   }
   if (child instanceof GroupByOperator) {
     GroupByOperator cGBY = (GroupByOperator) child;
     if (!CorrelationUtilities.hasGroupingSet(cRS) && !cGBY.getConf().isGroupingSetsPresent()) {
       return process(cRS, cGBY, dedupCtx);
     }
     return false;
   }
   if (child instanceof SelectOperator) {
     return process(cRS, dedupCtx);
   }
   return false;
 }