code: public static <S extends ScopeType<S>> SharedResourcesBrokerImpl<S> createDefaultTopLevelBroker(Config config,
        ScopeInstance<S> globalScope) {
  
      if (!globalScope.getType().equals(globalScope.getType().rootScope())) {
        throw new IllegalArgumentException(String.format("The top level broker must be created at the root scope type. "
            + "%s is not a root scope type.", globalScope.getType()));
      }
  
      ScopeWrapper<S> scopeWrapper = new ScopeWrapper<>(globalScope.getType(), globalScope, Lists.<ScopeWrapper<S>>newArrayList());
  
      return new SharedResourcesBrokerImpl<>(new DefaultBrokerCache<S>(),
          scopeWrapper,
          Lists.newArrayList(new SharedResourcesBrokerImpl.ScopedConfig<>(globalScope.getType(),
              getBrokerConfig(addSystemConfigurationToConfig(config)))),
          ImmutableMap.of(globalScope.getType(), scopeWrapper));
    }
docs: Create a root {@link SharedResourcesBroker}. Subscoped brokers should be built using
  {@link SharedResourcesBroker#newSubscopedBuilder(ScopeInstance)}.
  
  In general, this method will be called only once per application, and all other brokers will Nbe children of the root
  application broker.
  
  @param config The global configuration of the broker.
  @param globalScope The scope of the root broker.
  @param <S> The {@link ScopeType} DAG used for this broker tree.