// Path: openqa.engine/src/main/java/org/aksw/openqa/component/object/IParams.java
// public interface IParams extends IObject {
// 	public IComponent getSource();
// }
// 
// Path: openqa.engine/src/main/java/org/aksw/openqa/component/object/IResult.java
// public interface IResult extends IParams {
// 	public IParams getInputParam();
// }
// 
// Path: openqa.engine/src/main/java/org/aksw/openqa/component/object/Result.java
// public class Result extends AbstractResult {
// 		
// 	protected IComponent source;
// 	protected IParams inputParam;
// 
// 	public Result() {
// 	}
// 	
// 	public Result(Map<String, Object> params, IParams inputParam, IComponent source) {
// 		// setting the source
// 		this.source = source;
// 		this.inputParam = inputParam;
// 		setProperties(params);
// 	}
// 	
// 	public Result(Map<String, Object> params) {
// 		// setting the source
// 		setProperties(params);
// 	}
// 	
// 	public Result(IParams inputParam, IComponent source) {
// 		// setting the source
// 		this.source = source;
// 		this.inputParam = inputParam;
// 	}
// 
// 	@Override
// 	public IComponent getSource() {
// 		return source;
// 	}
// 
// 	@Override
// 	public IParams getInputParam() {
// 		return inputParam;
// 	}
// }
// 
// Path: openqa.engine/src/main/java/org/aksw/openqa/component/providers/impl/ServiceProvider.java
// public class ServiceProvider extends AbstractPluginProvider<IService, IServiceFactory> {
// 	public ServiceProvider(List<? extends ClassLoader> classLoaders) {
// 		super(IServiceFactory.class, classLoaders, null);
// 	}
// 	
// 	public ServiceProvider() {
// 	}
// }


import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.aksw.openqa.Properties;
import org.aksw.openqa.component.answerformulation.AbstractInterpreter;
import org.aksw.openqa.component.context.IContext;
import org.aksw.openqa.component.object.IParams;
import org.aksw.openqa.component.object.IResult;
import org.aksw.openqa.component.object.Result;
import org.aksw.openqa.component.providers.impl.ServiceProvider;
import org.aksw.openqa.examples.HelloWorldParameters;
			// removing punctuation (.,!,?)
			while(
					you.charAt(you.length()-1) == '.' ||
					you.charAt(you.length()-1) == '!' ||
					you.charAt(you.length()-1) == '?'
					) {
				you = you.substring(0, you.length()-1);
			}
			
			// eliminating white spaces, again :)
			you.trim();
			
			int j = 0;
			while(response==0) {
				// always check the questions from the position j*2 of the allowedQuestions matrix
				if(inArray(you.toLowerCase(), allwedQuestions[j])) {
					response = j;
					break;
				}
				j++; // check next group of questions
				
				// check if the allowed questions array is finished
				if(j==(allwedQuestions.length) && response == 0) {
					response = j; // if it is, we did not find any match
				}
			}
		} else
			response = 2; // end of matrix
		
		List<IResult> results = new ArrayList<>();
// Path: openqa.engine/src/main/java/org/aksw/openqa/component/object/IParams.java
// public interface IParams extends IObject {
// 	public IComponent getSource();
// }
// 
// Path: openqa.engine/src/main/java/org/aksw/openqa/component/object/IResult.java
// public interface IResult extends IParams {
// 	public IParams getInputParam();
// }
// 
// Path: openqa.engine/src/main/java/org/aksw/openqa/component/object/Result.java
// public class Result extends AbstractResult {
// 		
// 	protected IComponent source;
// 	protected IParams inputParam;
// 
// 	public Result() {
// 	}
// 	
// 	public Result(Map<String, Object> params, IParams inputParam, IComponent source) {
// 		// setting the source
// 		this.source = source;
// 		this.inputParam = inputParam;
// 		setProperties(params);
// 	}
// 	
// 	public Result(Map<String, Object> params) {
// 		// setting the source
// 		setProperties(params);
// 	}
// 	
// 	public Result(IParams inputParam, IComponent source) {
// 		// setting the source
// 		this.source = source;
// 		this.inputParam = inputParam;
// 	}
// 
// 	@Override
// 	public IComponent getSource() {
// 		return source;
// 	}
// 
// 	@Override
// 	public IParams getInputParam() {
// 		return inputParam;
// 	}
// }
// 
// Path: openqa.engine/src/main/java/org/aksw/openqa/component/providers/impl/ServiceProvider.java
// public class ServiceProvider extends AbstractPluginProvider<IService, IServiceFactory> {
// 	public ServiceProvider(List<? extends ClassLoader> classLoaders) {
// 		super(IServiceFactory.class, classLoaders, null);
// 	}
// 	
// 	public ServiceProvider() {
// 	}
// }


// Path: openqa.engine.examples/src/main/java/org/aksw/openqa/examples/example3/HelloWorldInterpreter.java
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.aksw.openqa.Properties;
import org.aksw.openqa.component.answerformulation.AbstractInterpreter;
import org.aksw.openqa.component.context.IContext;
import org.aksw.openqa.component.object.IParams;
import org.aksw.openqa.component.object.IResult;
import org.aksw.openqa.component.object.Result;
import org.aksw.openqa.component.providers.impl.ServiceProvider;
import org.aksw.openqa.examples.HelloWorldParameters;

			// removing punctuation (.,!,?)
			while(
					you.charAt(you.length()-1) == '.' ||
					you.charAt(you.length()-1) == '!' ||
					you.charAt(you.length()-1) == '?'
					) {
				you = you.substring(0, you.length()-1);
			}
			
			// eliminating white spaces, again :)
			you.trim();
			
			int j = 0;
			while(response==0) {
				// always check the questions from the position j*2 of the allowedQuestions matrix
				if(inArray(you.toLowerCase(), allwedQuestions[j])) {
					response = j;
					break;
				}
				j++; // check next group of questions
				
				// check if the allowed questions array is finished
				if(j==(allwedQuestions.length) && response == 0) {
					response = j; // if it is, we did not find any match
				}
			}
		} else
			response = 2; // end of matrix
		
		List<IResult> results = new ArrayList<>();
		Result result = new Result();