// Path: src/main/java/com/feedzai/fos/impl/weka/utils/pool/GenericObjectPoolConfig.java
// public class GenericObjectPoolConfig extends GenericObjectPool.Config {
//     public void setMinIdle(int minIdle) {
//         super.minIdle = minIdle;
//     }
// 
//     public void setLifo(boolean lifo) {
//         super.lifo = lifo;
//     }
// 
//     public void setMaxActive(int maxActive) {
//         super.maxActive = maxActive;
//     }
// 
//     public void setMaxIdle(int maxIdle) {
//         super.maxIdle = maxIdle;
//     }
// 
//     public void setMaxWait(long maxWait) {
//         super.maxWait = maxWait;
//     }
// 
//     public void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis) {
//         super.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
//     }
// 
//     public void setNumTestsPerEvictionRun(int numTestsPerEvictionRun) {
//         super.numTestsPerEvictionRun = numTestsPerEvictionRun;
//     }
// 
//     public void setSoftMinEvictableIdleTimeMillis(long softMinEvictableIdleTimeMillis) {
//         super.softMinEvictableIdleTimeMillis = softMinEvictableIdleTimeMillis;
//     }
// 
//     public void setTestOnBorrow(boolean testOnBorrow) {
//         super.testOnBorrow = testOnBorrow;
//     }
// 
//     public void setTestOnReturn(boolean testOnReturn) {
//         super.testOnReturn = testOnReturn;
//     }
// 
//     public void setTestWhileIdle(boolean testWhileIdle) {
//         super.testWhileIdle = testWhileIdle;
//     }
// 
//     public void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis) {
//         super.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
//     }
// 
//     public void setWhenExhaustedAction(byte whenExhaustedAction) {
//         super.whenExhaustedAction = whenExhaustedAction;
//     }
// }


import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import static com.google.common.base.Preconditions.checkNotNull;
import com.feedzai.fos.api.*;
import com.feedzai.fos.common.validation.NotNull;
import com.feedzai.fos.impl.weka.utils.pool.GenericObjectPoolConfig;
import com.google.common.collect.ImmutableList;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationConverter;
import org.apache.commons.configuration.MapConfiguration;
import java.io.File;
            classIndex = this.modelConfig.getAttributes().size() - 1;
        }

        String modelFile = configuration.getString(MODEL_FILE);
        if (modelFile != null) {
            this.model = new File(modelFile);
        }

        String formatValue = configuration.getString(CLASSIFIER_FORMAT);
        if (formatValue != null) {
            ModelDescriptor.Format format = ModelDescriptor.Format.valueOf(formatValue);
            this.modelDescriptor = new ModelDescriptor(format, modelFile);
        }

        classifierThreadSafe = configuration.getBoolean(IS_CLASSIFIER_THREAD_SAFE, false /* defaults to Pool implementation*/);

        String uuid = configuration.getString(ID);
        if (uuid != null) {
            this.id = UUID.fromString(uuid);
        }
    }


    /**
     * Returns the pool configuration of the scorer.
     *
     * @return a map from configuration key to configuration value
     */
    @NotNull
    public Map<Object, Object> getPoolConfiguration() {
// Path: src/main/java/com/feedzai/fos/impl/weka/utils/pool/GenericObjectPoolConfig.java
// public class GenericObjectPoolConfig extends GenericObjectPool.Config {
//     public void setMinIdle(int minIdle) {
//         super.minIdle = minIdle;
//     }
// 
//     public void setLifo(boolean lifo) {
//         super.lifo = lifo;
//     }
// 
//     public void setMaxActive(int maxActive) {
//         super.maxActive = maxActive;
//     }
// 
//     public void setMaxIdle(int maxIdle) {
//         super.maxIdle = maxIdle;
//     }
// 
//     public void setMaxWait(long maxWait) {
//         super.maxWait = maxWait;
//     }
// 
//     public void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis) {
//         super.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
//     }
// 
//     public void setNumTestsPerEvictionRun(int numTestsPerEvictionRun) {
//         super.numTestsPerEvictionRun = numTestsPerEvictionRun;
//     }
// 
//     public void setSoftMinEvictableIdleTimeMillis(long softMinEvictableIdleTimeMillis) {
//         super.softMinEvictableIdleTimeMillis = softMinEvictableIdleTimeMillis;
//     }
// 
//     public void setTestOnBorrow(boolean testOnBorrow) {
//         super.testOnBorrow = testOnBorrow;
//     }
// 
//     public void setTestOnReturn(boolean testOnReturn) {
//         super.testOnReturn = testOnReturn;
//     }
// 
//     public void setTestWhileIdle(boolean testWhileIdle) {
//         super.testWhileIdle = testWhileIdle;
//     }
// 
//     public void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis) {
//         super.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
//     }
// 
//     public void setWhenExhaustedAction(byte whenExhaustedAction) {
//         super.whenExhaustedAction = whenExhaustedAction;
//     }
// }


// Path: src/main/java/com/feedzai/fos/impl/weka/config/WekaModelConfig.java
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import static com.google.common.base.Preconditions.checkNotNull;
import com.feedzai.fos.api.*;
import com.feedzai.fos.common.validation.NotNull;
import com.feedzai.fos.impl.weka.utils.pool.GenericObjectPoolConfig;
import com.google.common.collect.ImmutableList;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationConverter;
import org.apache.commons.configuration.MapConfiguration;
import java.io.File;

            classIndex = this.modelConfig.getAttributes().size() - 1;
        }

        String modelFile = configuration.getString(MODEL_FILE);
        if (modelFile != null) {
            this.model = new File(modelFile);
        }

        String formatValue = configuration.getString(CLASSIFIER_FORMAT);
        if (formatValue != null) {
            ModelDescriptor.Format format = ModelDescriptor.Format.valueOf(formatValue);
            this.modelDescriptor = new ModelDescriptor(format, modelFile);
        }

        classifierThreadSafe = configuration.getBoolean(IS_CLASSIFIER_THREAD_SAFE, false /* defaults to Pool implementation*/);

        String uuid = configuration.getString(ID);
        if (uuid != null) {
            this.id = UUID.fromString(uuid);
        }
    }


    /**
     * Returns the pool configuration of the scorer.
     *
     * @return a map from configuration key to configuration value
     */
    @NotNull
    public Map<Object, Object> getPoolConfiguration() {
        return ConfigurationConverter.getMap(configuration.subset(GenericObjectPoolConfig.class.getName()));