docs: static final synchronized CryptoSuiteFactory getDefault() throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
  
          if (null == theFACTORY) {
  
              String cf = config.getDefaultCryptoSuiteFactory();
              if (null == cf || cf.isEmpty() || cf.equals(HLSDKJCryptoSuiteFactory.class.getName())) { // Use this class as the factory.
  
                  theFACTORY = HLSDKJCryptoSuiteFactory.instance();
  
              } else {
  
                  // Invoke static method instance on factory class specified by config properties.
                  // In this case this class will no longer be used as the factory.
  
                  Class<?> aClass = Class.forName(cf);
  
                  Method method = aClass.getMethod("instance");
                  Object theFACTORYObject = method.invoke(null);
                  if (null == theFACTORYObject) {
                      throw new InstantiationException(String.format("Class specified by %s has instance method returning null.  Expected object implementing CryptoSuiteFactory interface.", cf));
                  }
  
                  if (!(theFACTORYObject instanceof CryptoSuiteFactory)) {
  
                      throw new InstantiationException(String.format("Class specified by %s has instance method returning a class %s which does not implement interface CryptoSuiteFactory ",
                              cf, theFACTORYObject.getClass().getName()));
  
                  }
  
                  theFACTORY = (CryptoSuiteFactory) theFACTORYObject;
  
              }
          }
  
          return theFACTORY;
      }