UNPKG

@pkt/utils

Version:

188 lines 18.3 kB
/** * Check if value is a function. */ export function isFunction(value) { return typeof value === 'function'; } /** * Check if value is a valid JSON. */ export function isJson(value) { try { JSON.parse(value); return true; } catch (e) { return false; } } /** * Check if value is a string primitive. */ export function isString(value) { return objToStr(value) === '[object String]'; } /** * Check if value is a type primitive */ export function is(value, type) { return objToStr(value) === `[object ${type}]`; } /** * Check if value is a string primitive. * * isNonEmptyString(''); // -> false */ export function isNonEmptyString(value) { return typeof value === 'string' && value !== ''; } /** * Check if value is undefined. * * isUndefined(void 0); // -> true */ export function isUndefined(value) { return value === undefined; } export function isUndefinedOrEmptyString(value) { return value === undefined || value === ''; } /** * Check if value is an Null. */ export function isNull(value) { return value === null; } /** * Check if value is null or undefined, the same as value == null. * * isNullOrUndefined(null); // -> true * isNullOrUndefined(undefined); // -> true * isNullOrUndefined(void 0); // -> true */ export function isNullOrUndefined(obj) { return obj === null || obj === undefined; } /** * Check if value is the language type of Object. * * isObject({}); // -> true * isObject([]); // -> true */ export function isObject(value) { return value instanceof Object; } export function isObjectAndNotArray(value) { return isObject(value) && !Array.isArray(value); } export function isObjectAndNotArrayNotNode(value) { return isObjectAndNotArray(value) && !isNode(value); } export function isNode(value) { return value instanceof Node; } /** * exists * @param obj * @returns boolean */ export function exists(obj) { return !isNullOrUndefined(obj); } /** * Check if value is classified as a Number primitive or object. */ export function isNum(value) { return /^((-?\d+\.\d+)|(-?\d+)|(-?\.\d+))$/.test(value.toString()); } /** * Checks if value is classified as a Integer. */ export function isInt(value) { return isNum(value) && value % 1 === 0; } /** * Checks if value is classified as a Decimal. */ export function isDecimal(value) { return isNum(value) && !isInt(value); } /** * Check if number is odd. */ export function isOdd(value) { if (!isInt(value)) { return false; } return value % 2 !== 0; } /** * Check if value is an IdCard. */ export function isIdCard(value) { return typeof value === 'string' && /(^\d{15}$)|(^\d{17}([0-9]|X)$)/i.test(value); } /** * Check if value is an Mobile. */ export function isMobile(value) { return (typeof value === 'string' && /^(0|\+?86|17951)?(13[0-9]|14[579]|15[0-9]|16[6]|17[1-3,5-8]|18[0-9]|19[189])[0-9]{8}$/.test(value)); } /** * Check if value is an url address. */ export function isUrl(value) { // eslint-disable-next-line no-useless-escape return /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/.test(value); } /** * Check if value is an IP address. */ export function isIp(value) { const v4 = '(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}'; const regV4 = new RegExp('^'.concat(v4, '$')); const v6seg = '[a-fA-F\\d]{1,4}'; const v6 = [ '(', '(?:'.concat(v6seg, ':){7}(?:').concat(v6seg, '|:)|'), '(?:'.concat(v6seg, ':){6}(?:').concat(v4, '|:').concat(v6seg, '|:)|'), '(?:'.concat(v6seg, ':){5}(?::').concat(v4, '|(:').concat(v6seg, '){1,2}|:)|'), '(?:' .concat(v6seg, ':){4}(?:(:') .concat(v6seg, '){0,1}:') .concat(v4, '|(:') .concat(v6seg, '){1,3}|:)|'), '(?:' .concat(v6seg, ':){3}(?:(:') .concat(v6seg, '){0,2}:') .concat(v4, '|(:') .concat(v6seg, '){1,4}|:)|'), '(?:' .concat(v6seg, ':){2}(?:(:') .concat(v6seg, '){0,3}:') .concat(v4, '|(:') .concat(v6seg, '){1,5}|:)|'), '(?:' .concat(v6seg, ':){1}(?:(:') .concat(v6seg, '){0,4}:') .concat(v4, '|(:') .concat(v6seg, '){1,6}|:)|'), '(?::((?::'.concat(v6seg, '){0,5}:').concat(v4, '|(?::').concat(v6seg, '){1,7}|:))'), ')(%[0-9a-zA-Z]{1,})?' ].join(''); const regV6 = new RegExp('^'.concat(v6, '$')); return regV4.test(value) || regV6.test(value); } /** * Loosely validate an email address. */ export function isEmail(value) { const regEmail = /.+@.+\..+/; return regEmail.test(value); } function objToStr(val) { const ObjToStr = Object.prototype.toString; return ObjToStr.call(val); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy91dGlscy9zcmMvdmFsaWRhdGUvdmFsaWRhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7O0dBRUc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQWM7SUFDdkMsT0FBTyxPQUFPLEtBQUssS0FBSyxVQUFVLENBQUM7QUFDckMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBQyxLQUFjO0lBQ25DLElBQUksQ0FBQztRQUNILElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBYztJQUNyQyxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxpQkFBaUIsQ0FBQztBQUMvQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsRUFBRSxDQUFDLEtBQWMsRUFBRSxJQUFZO0lBQzdDLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLFdBQVcsSUFBSSxHQUFHLENBQUM7QUFDaEQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsS0FBMEM7SUFDekUsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztBQUNuRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBMEI7SUFDcEQsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDO0FBQzdCLENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsS0FBbUM7SUFDMUUsT0FBTyxLQUFLLEtBQUssU0FBUyxJ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QU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDO2FBQ2pCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDO1FBQzlCLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUM7UUFDcEYsc0JBQXNCO0tBQ3ZCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ1gsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUU5QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLEtBQWE7SUFDbkMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDO0lBQzdCLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsR0FBWTtJQUM1QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUMzQyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2FmZUFueSB9IGZyb20gJ0Bwa3QvdXRpbHMvdHlwZXMnO1xuXG4vKipcbiAqIENoZWNrIGlmIHZhbHVlIGlzIGEgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlOiBTYWZlQW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFsdWUgaXMgYSB2YWxpZCBKU09OLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNKc29uKHZhbHVlOiBTYWZlQW55KTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBhIHN0cmluZyBwcmltaXRpdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZTogU2FmZUFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqVG9TdHIodmFsdWUpID09PSAnW29iamVjdCBTdHJpbmddJztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBhIHR5cGUgcHJpbWl0aXZlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpcyh2YWx1ZTogU2FmZUFueSwgdHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmpUb1N0cih2YWx1ZSkgPT09IGBbb2JqZWN0ICR7dHlwZX1dYDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBhIHN0cmluZyBwcmltaXRpdmUuXG4gKlxuICogaXNOb25FbXB0eVN0cmluZygnJyk7IC8vIC0+IGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vbkVtcHR5U3RyaW5nKHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIHwgU2FmZUFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSAhPT0gJyc7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFsdWUgaXMgdW5kZWZpbmVkLlxuICpcbiAqIGlzVW5kZWZpbmVkKHZvaWQgMCk7IC8vIC0+IHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlOiB1bmRlZmluZWQgfCBTYWZlQW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNVbmRlZmluZWRPckVtcHR5U3RyaW5nKHZhbHVlOiB1bmRlZmluZWQgfCBzdHJpbmcgfCBTYWZlQW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBhbiBOdWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsKHZhbHVlOiBudWxsIHwgU2FmZUFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGw7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZSBzYW1lIGFzIHZhbHVlID09IG51bGwuXG4gKlxuICogaXNOdWxsT3JVbmRlZmluZWQobnVsbCk7IC8vIC0+IHRydWVcbiAqIGlzTnVsbE9yVW5kZWZpbmVkKHVuZGVmaW5lZCk7IC8vIC0+IHRydWVcbiAqIGlzTnVsbE9yVW5kZWZpbmVkKHZvaWQgMCk7IC8vIC0+IHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKG9iajogbnVsbCB8IHVuZGVmaW5lZCB8IFNhZmVBbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyB0aGUgbGFuZ3VhZ2UgdHlwZSBvZiBPYmplY3QuXG4gKlxuICogaXNPYmplY3Qoe30pOyAvLyAtPiB0cnVlXG4gKiBpc09iamVjdChbXSk7IC8vIC0+IHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlOiBTYWZlQW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0QW5kTm90QXJyYXkodmFsdWU6IFNhZmVBbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHZhbHVlKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdEFuZE5vdEFycmF5Tm90Tm9kZSh2YWx1ZTogU2FmZUFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNPYmplY3RBbmROb3RBcnJheSh2YWx1ZSkgJiYgIWlzTm9kZSh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGUodmFsdWU6IFNhZmVBbnkpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgTm9kZTtcbn1cblxuLyoqXG4gKiBleGlzdHNcbiAqIEBwYXJhbSBvYmpcbiAqIEByZXR1cm5zIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4aXN0cyhvYmo6IFNhZmVBbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuICFpc051bGxPclVuZGVmaW5lZChvYmopO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHZhbHVlIGlzIGNsYXNzaWZpZWQgYXMgYSBOdW1iZXIgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtKHZhbHVlOiBzdHJpbmcgfCBTYWZlQW55KTogYm9vbGVhbiB7XG4gIHJldHVybiAvXigoLT9cXGQrXFwuXFxkKyl8KC0/XFxkKyl8KC0/XFwuXFxkKykpJC8udGVzdCh2YWx1ZS50b1N0cmluZygpKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdmFsdWUgaXMgY2xhc3NpZmllZCBhcyBhIEludGVnZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ludCh2YWx1ZTogbnVtYmVyIHwgU2FmZUFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNOdW0odmFsdWUpICYmIHZhbHVlICUgMSA9PT0gMDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdmFsdWUgaXMgY2xhc3NpZmllZCBhcyBhIERlY2ltYWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RlY2ltYWwodmFsdWU6IG51bWJlciB8IFNhZmVBbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzTnVtKHZhbHVlKSAmJiAhaXNJbnQodmFsdWUpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIG51bWJlciBpcyBvZGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc09kZCh2YWx1ZTogbnVtYmVyIHwgU2FmZUFueSk6IGJvb2xlYW4ge1xuICBpZiAoIWlzSW50KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWUgJSAyICE9PSAwO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHZhbHVlIGlzIGFuIElkQ2FyZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSWRDYXJkKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgLyheXFxkezE1fSQpfCheXFxkezE3fShbMC05XXxYKSQpL2kudGVzdCh2YWx1ZSk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFsdWUgaXMgYW4gTW9iaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNb2JpbGUodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiZcbiAgICAvXigwfFxcKz84NnwxNzk1MSk/KDEzWzAtOV18MTRbNTc5XXwxNVswLTldfDE2WzZdfDE3WzEtMyw1LThdfDE4WzAtOV18MTlbMTg5XSlbMC05XXs4fSQvLnRlc3QoXG4gICAgICB2YWx1ZVxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBhbiB1cmwgYWRkcmVzcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVXJsKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gIHJldHVybiAvKCgoXmh0dHBzPzooPzpcXC9cXC8pPykoPzpbLTs6Jj1cXCtcXCQsXFx3XStAKT9bQS1aYS16MC05Li1dKyg/OjpcXGQrKT98KD86d3d3LnxbLTs6Jj1cXCtcXCQsXFx3XStAKVtBLVphLXowLTkuLV0rKSgoPzpcXC9bXFwrfiVcXC8uXFx3LV9dKik/XFw/Pyg/OlstXFwrPSY7JUAuXFx3X10qKSM/KD86W1xcd10qKSk/KSQvLnRlc3QoXG4gICAgdmFsdWVcbiAgKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBhbiBJUCBhZGRyZXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJcCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHY0ID1cbiAgICAnKD86MjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XVxcXFxkfFxcXFxkKSg/OlxcXFwuKD86MjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XVxcXFxkfFxcXFxkKSl7M30nO1xuICBjb25zdCByZWdWNCA9IG5ldyBSZWdFeHAoJ14nLmNvbmNhdCh2NCwgJyQnKSk7XG4gIGNvbnN0IHY2c2VnID0gJ1thLWZBLUZcXFxcZF17MSw0fSc7XG4gIGNvbnN0IHY2ID0gW1xuICAgICcoJyxcbiAgICAnKD86Jy5jb25jYXQodjZzZWcsICc6KXs3fSg/OicpLmNvbmNhdCh2NnNlZywgJ3w6KXwnKSxcbiAgICAnKD86Jy5jb25jYXQodjZzZWcsICc6KXs2fSg/OicpLmNvbmNhdCh2NCwgJ3w6JykuY29uY2F0KHY2c2VnLCAnfDopfCcpLFxuICAgICcoPzonLmNvbmNhdCh2NnNlZywgJzopezV9KD86OicpLmNvbmNhdCh2NCwgJ3woOicpLmNvbmNhdCh2NnNlZywgJyl7MSwyfXw6KXwnKSxcbiAgICAnKD86J1xuICAgICAgLmNvbmNhdCh2NnNlZywgJzopezR9KD86KDonKVxuICAgICAgLmNvbmNhdCh2NnNlZywgJyl7MCwxfTonKVxuICAgICAgLmNvbmNhdCh2NCwgJ3woOicpXG4gICAgICAuY29uY2F0KHY2c2VnLCAnKXsxLDN9fDopfCcpLFxuICAgICcoPzonXG4gICAgICAuY29uY2F0KHY2c2VnLCAnOil7M30oPzooOicpXG4gICAgICAuY29uY2F0KHY2c2VnLCAnKXswLDJ9OicpXG4gICAgICAuY29uY2F0KHY0LCAnfCg6JylcbiAgICAgIC5jb25jYXQodjZzZWcsICcpezEsNH18Oil8JyksXG4gICAgJyg/OidcbiAgICAgIC5jb25jYXQodjZzZWcsICc6KXsyfSg/Oig6JylcbiAgICAgIC5jb25jYXQodjZzZWcsICcpezAsM306JylcbiAgICAgIC5jb25jYXQodjQsICd8KDonKVxuICAgICAgLmNvbmNhdCh2NnNlZywgJyl7MSw1fXw6KXwnKSxcbiAgICAnKD86J1xuICAgICAgLmNvbmNhdCh2NnNlZywgJzopezF9KD86KDonKVxuICAgICAgLmNvbmNhdCh2NnNlZywgJyl7MCw0fTonKVxuICAgICAgLmNvbmNhdCh2NCwgJ3woOicpXG4gICAgICAuY29uY2F0KHY2c2VnLCAnKXsxLDZ9fDopfCcpLFxuICAgICcoPzo6KCg/OjonLmNvbmNhdCh2NnNlZywgJyl7MCw1fTonKS5jb25jYXQodjQsICd8KD86OicpLmNvbmNhdCh2NnNlZywgJyl7MSw3fXw6KSknKSxcbiAgICAnKSglWzAtOWEtekEtWl17MSx9KT8nXG4gIF0uam9pbignJyk7XG4gIGNvbnN0IHJlZ1Y2ID0gbmV3IFJlZ0V4cCgnXicuY29uY2F0KHY2LCAnJCcpKTtcblxuICByZXR1cm4gcmVnVjQudGVzdCh2YWx1ZSkgfHwgcmVnVjYudGVzdCh2YWx1ZSk7XG59XG5cbi8qKlxuICogTG9vc2VseSB2YWxpZGF0ZSBhbiBlbWFpbCBhZGRyZXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbWFpbCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHJlZ0VtYWlsID0gLy4rQC4rXFwuLisvO1xuICByZXR1cm4gcmVnRW1haWwudGVzdCh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIG9ialRvU3RyKHZhbDogU2FmZUFueSk6IHN0cmluZyB7XG4gIGNvbnN0IE9ialRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbiAgcmV0dXJuIE9ialRvU3RyLmNhbGwodmFsKTtcbn1cbiJdfQ==