// Path: props-common/src/main/java/base/props4j/DefValKey.java
// public interface DefValKey {
// 	
// 	/**
// 	 * Key name for props
// 	 */
// 	String getName();
// 	
// 	/**
// 	 * Default value for props
// 	 */
// 	DefVal getDefVal();
// 	
// 	
// 	//
// 	//Useful Methods
// 	//
// 	
// 	default String strDef(){
// 		return getDefVal().strDef();
// 	}
// 	
// 	default Boolean boolDef(){
// 		return getDefVal().boolDef();
// 	}
// 	
// 	default Integer intDef(){
// 		return getDefVal().intDef();
// 	}
// 	
// 	default Long longDef(){
// 		return getDefVal().longDef();
// 	}
// 	
// 	default Double doubleDef(){
// 		return getDefVal().doubleDef();
// 	}
// 	
// 	default BigDecimal bigDecimalDef(){
// 		return getDefVal().bigDecimalDef();
// 	}
// 	
// 	
// 	default Integer intFrom(Props props){
// 		String key = getName();
// 		Integer defVal = getDefVal().intDef();
// 		return props == null? defVal : props.intVal(key, defVal);
// 	}
// 	
// 	default Long longFrom(Props props){
// 		String key = getName();
// 		Long defVal = getDefVal().longDef();
// 		return props == null? defVal : props.longVal(key, defVal);
// 	}
// 	
// 	default String strFrom(Props props){
// 		String key = getName();
// 		String defVal = getDefVal().strDef();
// 		return props == null? defVal : props.strVal(key, defVal);
// 	}
// 	
// 	default Boolean boolFrom(Props props){
// 		String key = getName();
// 		Boolean defVal = getDefVal().boolDef();
// 		return props == null? defVal : props.boolVal(key, defVal);
// 	}
// 	
// 	default Double doubleFrom(Props props){
// 		String key = getName();
// 		Double defVal = getDefVal().doubleDef();
// 		return props == null? defVal : props.doubleVal(key, defVal);
// 	}
// 
// }


import static java.util.Collections.*;
import base.props4j.DefValKey;
import java.io.Closeable;
import java.lang.reflect.Array;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.Callable;
import java.util.concurrent.locks.Lock;
import java.util.logging.Logger;
	public static boolean isEmpty(Object[] arr) {
		return arr == null || arr.length == 0;
	}
	
	public static boolean hasText(String str) {
        if (!hasLength(str)) {
            return false;
        }
        int strLen = str.length();
        for (int i = 0; i < strLen; i++) {
            if (!Character.isWhitespace(str.charAt(i))) {
                return true;
            }
        }
        return false;
    }
	
    public static boolean hasLength(String str) {
        return (str != null && str.length() > 0);
    }
	
	@SafeVarargs
	public static <T> ArrayList<T> list(T... elems) {

		if(elems == null){
			return null;
		}
		
		ArrayList<T> list = new ArrayList<T>(elems.length);
		for (T elem : elems) {
// Path: props-common/src/main/java/base/props4j/DefValKey.java
// public interface DefValKey {
// 	
// 	/**
// 	 * Key name for props
// 	 */
// 	String getName();
// 	
// 	/**
// 	 * Default value for props
// 	 */
// 	DefVal getDefVal();
// 	
// 	
// 	//
// 	//Useful Methods
// 	//
// 	
// 	default String strDef(){
// 		return getDefVal().strDef();
// 	}
// 	
// 	default Boolean boolDef(){
// 		return getDefVal().boolDef();
// 	}
// 	
// 	default Integer intDef(){
// 		return getDefVal().intDef();
// 	}
// 	
// 	default Long longDef(){
// 		return getDefVal().longDef();
// 	}
// 	
// 	default Double doubleDef(){
// 		return getDefVal().doubleDef();
// 	}
// 	
// 	default BigDecimal bigDecimalDef(){
// 		return getDefVal().bigDecimalDef();
// 	}
// 	
// 	
// 	default Integer intFrom(Props props){
// 		String key = getName();
// 		Integer defVal = getDefVal().intDef();
// 		return props == null? defVal : props.intVal(key, defVal);
// 	}
// 	
// 	default Long longFrom(Props props){
// 		String key = getName();
// 		Long defVal = getDefVal().longDef();
// 		return props == null? defVal : props.longVal(key, defVal);
// 	}
// 	
// 	default String strFrom(Props props){
// 		String key = getName();
// 		String defVal = getDefVal().strDef();
// 		return props == null? defVal : props.strVal(key, defVal);
// 	}
// 	
// 	default Boolean boolFrom(Props props){
// 		String key = getName();
// 		Boolean defVal = getDefVal().boolDef();
// 		return props == null? defVal : props.boolVal(key, defVal);
// 	}
// 	
// 	default Double doubleFrom(Props props){
// 		String key = getName();
// 		Double defVal = getDefVal().doubleDef();
// 		return props == null? defVal : props.doubleVal(key, defVal);
// 	}
// 
// }


// Path: props-common/src/main/java/base/props4j/util/Util.java
import static java.util.Collections.*;
import base.props4j.DefValKey;
import java.io.Closeable;
import java.lang.reflect.Array;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.Callable;
import java.util.concurrent.locks.Lock;
import java.util.logging.Logger;

	public static boolean isEmpty(Object[] arr) {
		return arr == null || arr.length == 0;
	}
	
	public static boolean hasText(String str) {
        if (!hasLength(str)) {
            return false;
        }
        int strLen = str.length();
        for (int i = 0; i < strLen; i++) {
            if (!Character.isWhitespace(str.charAt(i))) {
                return true;
            }
        }
        return false;
    }
	
    public static boolean hasLength(String str) {
        return (str != null && str.length() > 0);
    }
	
	@SafeVarargs
	public static <T> ArrayList<T> list(T... elems) {

		if(elems == null){
			return null;
		}
		
		ArrayList<T> list = new ArrayList<T>(elems.length);
		for (T elem : elems) {
			list.add(elem);