class CypherManager {

    private final String configurationFile;
    private YAMLConfiguration configuration;

    public static CypherManager configOf(String configurationFile) {
        E.checkArgument(configurationFile != null && !configurationFile.isEmpty(),
                        "The configurationFile parameter can't be null or empty");
        return new CypherManager(configurationFile);
    }

    private CypherManager(String configurationFile) {
        this.configurationFile = configurationFile;
    }

    public CypherClient getClient(String userName, String password) {
        E.checkArgument(userName != null && !userName.isEmpty(),
                        "The userName parameter can't be null or empty");
        E.checkArgument(password != null && !password.isEmpty(),
                        "The password parameter can't be null or empty");

        // TODO: Need to cache the client and make it hold the connection.
        return new CypherClient(userName, password, this::cloneConfig);
    }

    public CypherClient getClient(String token) {
        E.checkArgument(token != null && !token.isEmpty(),
                        "The token parameter can't be null or empty");

        // TODO: Need to cache the client and make it hold the connection.
        return new CypherClient(token, this::cloneConfig);
    }

    private Configuration cloneConfig() {
        if (this.configuration == null) {
            this.configuration = loadYaml(this.configurationFile);
        }
        return (Configuration) this.configuration.clone();
    }

    private static YAMLConfiguration loadYaml(String configurationFile) {<FILL_FUNCTION_BODY>}

    private static File getConfigFile(String configurationFile) {
        File systemFile = new File(configurationFile);
        if (!systemFile.exists()) {
            ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
            URL resource = currentClassLoader.getResource(configurationFile);
            assert resource != null;
            File resourceFile = new File(resource.getFile());
            if (!resourceFile.exists()) {
                throw new IllegalArgumentException(String.format("Configuration file at '%s' does" +
                                                                 " not exist", configurationFile));
            }
            return resourceFile;
        }
        return systemFile;
    }
}

        File yamlFile = getConfigFile(configurationFile);
        YAMLConfiguration yaml;
        try {
            Reader reader = new FileReader(yamlFile);
            yaml = new YAMLConfiguration();
            yaml.read(reader);
        } catch (Exception e) {
            throw new RuntimeException(String.format("Failed to load configuration file," +
                                                     " the file at '%s'.", configurationFile), e);
        }
        return yaml;
    
<no_super_class>