// Path: model/src/main/java/denominator/common/Util.java
// public static String join(char delim, Object... parts) {
//   if (parts == null || parts.length == 0) {
//     return "";
//   }
//   StringBuilder to = new StringBuilder();
//   for (int i = 0; i < parts.length; i++) {
//     to.append(parts[i]);
//     if (i + 1 < parts.length) {
//       to.append(delim);
//     }
//   }
//   return to.toString();
// }


import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import dagger.Module;
import dagger.Provides;
import denominator.Credentials.AnonymousCredentials;
import denominator.Credentials.ListCredentials;
import static denominator.common.Preconditions.checkNotNull;
import static denominator.common.Util.join;
    StringBuilder msg = new StringBuilder();
    if (input == null || input == AnonymousCredentials.INSTANCE) {
      msg.append("no credentials supplied. ");
    } else {
      msg.append("incorrect credentials supplied. ");
    }
    msg.append(provider.name()).append(" requires ");

    Map<String, Collection<String>>
        credentialTypeToParameterNames =
        provider.credentialTypeToParameterNames();
    if (credentialTypeToParameterNames.size() == 1) {
      msg.append(join(',', credentialTypeToParameterNames.values().iterator().next().toArray()));
    } else {
      msg.append("one of the following forms: when type is ");
      for (Entry<String, Collection<String>> entry : credentialTypeToParameterNames.entrySet()) {
        msg.append(entry.getKey()).append(": ").append(join(',', entry.getValue().toArray()))
            .append("; ");
      }
      msg.trimToSize();
      msg.setLength(msg.length() - 2);// remove last '; '
    }
    return msg.toString();
  }

  @Module(complete = false,
      // only used for dns services that authenticate
      library = true,
      // override any built-in credentials
      overrides = true)
// Path: model/src/main/java/denominator/common/Util.java
// public static String join(char delim, Object... parts) {
//   if (parts == null || parts.length == 0) {
//     return "";
//   }
//   StringBuilder to = new StringBuilder();
//   for (int i = 0; i < parts.length; i++) {
//     to.append(parts[i]);
//     if (i + 1 < parts.length) {
//       to.append(delim);
//     }
//   }
//   return to.toString();
// }


// Path: core/src/main/java/denominator/CredentialsConfiguration.java
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import dagger.Module;
import dagger.Provides;
import denominator.Credentials.AnonymousCredentials;
import denominator.Credentials.ListCredentials;
import static denominator.common.Preconditions.checkNotNull;
import static denominator.common.Util.join;

    StringBuilder msg = new StringBuilder();
    if (input == null || input == AnonymousCredentials.INSTANCE) {
      msg.append("no credentials supplied. ");
    } else {
      msg.append("incorrect credentials supplied. ");
    }
    msg.append(provider.name()).append(" requires ");

    Map<String, Collection<String>>
        credentialTypeToParameterNames =
        provider.credentialTypeToParameterNames();
    if (credentialTypeToParameterNames.size() == 1) {
      msg.append(join(',', credentialTypeToParameterNames.values().iterator().next().toArray()));
    } else {
      msg.append("one of the following forms: when type is ");
      for (Entry<String, Collection<String>> entry : credentialTypeToParameterNames.entrySet()) {
        msg.append(entry.getKey()).append(": ").append(join(',', entry.getValue().toArray()))
            .append("; ");
      }
      msg.trimToSize();
      msg.setLength(msg.length() - 2);// remove last '; '
    }
    return msg.toString();
  }

  @Module(complete = false,
      // only used for dns services that authenticate
      library = true,
      // override any built-in credentials
      overrides = true)
  static final class ConstantCredentials {