docs: @Override
      public ConsumerManager chooseConsumerManager(SIBUuid12 gatheringTargetUuid,
                                                   SIBUuid8 fixedMEUuid,
                                                   HashSet<SIBUuid8> scopedMEs)
                      throws SIResourceException
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(tc, "chooseConsumerManager", new Object[] { gatheringTargetUuid,
                                                                     fixedMEUuid,
                                                                     scopedMEs });
  
          // We're an alias (or foreign destination) so we should never be called with a scoped ME set
          if (scopedMEs != null)
          {
              SIMPErrorException e = new SIMPErrorException("Alias called with scoped ME set");
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              {
                  SibTr.exception(tc, e);
              }
  
              e.setExceptionReason(SIRCConstants.SIRC0901_INTERNAL_MESSAGING_ERROR);
              e.setExceptionInserts(new String[] { "com.ibm.ws.sib.processor.impl.ProducerSessionImpl.handleMessage",
                                                  "1:837:1.71.2.6",
                                                  SIMPUtils.getStackTrace(e) });
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                  SibTr.exit(tc, "chooseConsumerManager", e);
              throw e;
          }
  
          boolean error = false;
          ConsumerManager consumerManager = null;
  
          // If the caller has fixed an ME, first check it's in our set
          if (fixedMEUuid != null)
          {
              if ((_singleScopedQueuePointME != null) && !fixedMEUuid.equals(_singleScopedQueuePointME))
                  error = true;
              else if ((_scopedQueuePointMEs != null) && !_scopedQueuePointMEs.contains(fixedMEUuid))
                  error = true;
          }
  
          if (!error)
          {
              // If we have a single ME scoped by this alias we may as well pass it to the target as
              // a fixed ME (which it must match as we've already checked that) to save
              // having to parse a HashSet everywhere for no need.
              if (_singleScopedQueuePointME != null)
                  fixedMEUuid = _singleScopedQueuePointME;
  
              // If a gatheringUuid was supplied, replace it with the alias uuid
              if (gatheringTargetUuid != null)
                  gatheringTargetUuid = _definition.getUUID();
              // Pass on any scoped queue points (this is a consumer on an alias)
              consumerManager = _targetDestinationHandler.chooseConsumerManager(gatheringTargetUuid, fixedMEUuid, _scopedQueuePointMEs);
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(tc, "chooseConsumerManager", consumerManager);
  
          return consumerManager;
      }