UNPKG

@onereach/channel-transformer

Version:

Convert data model between different channels (Slack, Microsoft Teams, Generic...)

1,841 lines (1,694 loc) 506 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.channelTransformer = factory()); })(this, (function () { 'use strict'; var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; function getDefaultExportFromCjs (x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; } var nodeEmoji = {exports: {}}; /** Detect free variable `global` from Node.js. */ var freeGlobal$1 = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; var _freeGlobal = freeGlobal$1; var freeGlobal = _freeGlobal; /** Detect free variable `self`. */ var freeSelf = typeof self == 'object' && self && self.Object === Object && self; /** Used as a reference to the global object. */ var root$7 = freeGlobal || freeSelf || Function('return this')(); var _root = root$7; var root$6 = _root; /** Built-in value references. */ var Symbol$3 = root$6.Symbol; var _Symbol = Symbol$3; /** * Copies the values of `source` to `array`. * * @private * @param {Array} source The array to copy values from. * @param {Array} [array=[]] The array to copy values to. * @returns {Array} Returns `array`. */ function copyArray$1(source, array) { var index = -1, length = source.length; array || (array = Array(length)); while (++index < length) { array[index] = source[index]; } return array; } var _copyArray = copyArray$1; var Symbol$2 = _Symbol; /** Used for built-in method references. */ var objectProto$6 = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$4 = objectProto$6.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString$1 = objectProto$6.toString; /** Built-in value references. */ var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : undefined; /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * * @private * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */ function getRawTag$1(value) { var isOwn = hasOwnProperty$4.call(value, symToStringTag$1), tag = value[symToStringTag$1]; try { value[symToStringTag$1] = undefined; var unmasked = true; } catch (e) {} var result = nativeObjectToString$1.call(value); if (unmasked) { if (isOwn) { value[symToStringTag$1] = tag; } else { delete value[symToStringTag$1]; } } return result; } var _getRawTag = getRawTag$1; /** Used for built-in method references. */ var objectProto$5 = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto$5.toString; /** * Converts `value` to a string using `Object.prototype.toString`. * * @private * @param {*} value The value to convert. * @returns {string} Returns the converted string. */ function objectToString$1(value) { return nativeObjectToString.call(value); } var _objectToString = objectToString$1; var Symbol$1 = _Symbol, getRawTag = _getRawTag, objectToString = _objectToString; /** `Object#toString` result references. */ var nullTag = '[object Null]', undefinedTag = '[object Undefined]'; /** Built-in value references. */ var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined; /** * The base implementation of `getTag` without fallbacks for buggy environments. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ function baseGetTag$5(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); } var _baseGetTag = baseGetTag$5; /** * Checks if `value` is the * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an object, else `false`. * @example * * _.isObject({}); * // => true * * _.isObject([1, 2, 3]); * // => true * * _.isObject(_.noop); * // => true * * _.isObject(null); * // => false */ function isObject$2(value) { var type = typeof value; return value != null && (type == 'object' || type == 'function'); } var isObject_1 = isObject$2; var baseGetTag$4 = _baseGetTag, isObject$1 = isObject_1; /** `Object#toString` result references. */ var asyncTag = '[object AsyncFunction]', funcTag$1 = '[object Function]', genTag = '[object GeneratorFunction]', proxyTag = '[object Proxy]'; /** * Checks if `value` is classified as a `Function` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a function, else `false`. * @example * * _.isFunction(_); * // => true * * _.isFunction(/abc/); * // => false */ function isFunction$2(value) { if (!isObject$1(value)) { return false; } // The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 9 which returns 'object' for typed arrays and other constructors. var tag = baseGetTag$4(value); return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; } var isFunction_1 = isFunction$2; var root$5 = _root; /** Used to detect overreaching core-js shims. */ var coreJsData$1 = root$5['__core-js_shared__']; var _coreJsData = coreJsData$1; var coreJsData = _coreJsData; /** Used to detect methods masquerading as native. */ var maskSrcKey = function () { var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); return uid ? 'Symbol(src)_1.' + uid : ''; }(); /** * Checks if `func` has its source masked. * * @private * @param {Function} func The function to check. * @returns {boolean} Returns `true` if `func` is masked, else `false`. */ function isMasked$1(func) { return !!maskSrcKey && maskSrcKey in func; } var _isMasked = isMasked$1; /** Used for built-in method references. */ var funcProto$1 = Function.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString$1 = funcProto$1.toString; /** * Converts `func` to its source code. * * @private * @param {Function} func The function to convert. * @returns {string} Returns the source code. */ function toSource$2(func) { if (func != null) { try { return funcToString$1.call(func); } catch (e) {} try { return func + ''; } catch (e) {} } return ''; } var _toSource = toSource$2; var isFunction$1 = isFunction_1, isMasked = _isMasked, isObject = isObject_1, toSource$1 = _toSource; /** * Used to match `RegExp` * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). */ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; /** Used to detect host constructors (Safari). */ var reIsHostCtor = /^\[object .+?Constructor\]$/; /** Used for built-in method references. */ var funcProto = Function.prototype, objectProto$4 = Object.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** Used to check objects for own properties. */ var hasOwnProperty$3 = objectProto$4.hasOwnProperty; /** Used to detect if a method is native. */ var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty$3).replace(reRegExpChar, '\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'); /** * The base implementation of `_.isNative` without bad shim checks. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a native function, * else `false`. */ function baseIsNative$1(value) { if (!isObject(value) || isMasked(value)) { return false; } var pattern = isFunction$1(value) ? reIsNative : reIsHostCtor; return pattern.test(toSource$1(value)); } var _baseIsNative = baseIsNative$1; /** * Gets the value at `key` of `object`. * * @private * @param {Object} [object] The object to query. * @param {string} key The key of the property to get. * @returns {*} Returns the property value. */ function getValue$1(object, key) { return object == null ? undefined : object[key]; } var _getValue = getValue$1; var baseIsNative = _baseIsNative, getValue = _getValue; /** * Gets the native function at `key` of `object`. * * @private * @param {Object} object The object to query. * @param {string} key The key of the method to get. * @returns {*} Returns the function if it's native, else `undefined`. */ function getNative$5(object, key) { var value = getValue(object, key); return baseIsNative(value) ? value : undefined; } var _getNative = getNative$5; var getNative$4 = _getNative, root$4 = _root; /* Built-in method references that are verified to be native. */ var DataView$1 = getNative$4(root$4, 'DataView'); var _DataView = DataView$1; var getNative$3 = _getNative, root$3 = _root; /* Built-in method references that are verified to be native. */ var Map$2 = getNative$3(root$3, 'Map'); var _Map = Map$2; var getNative$2 = _getNative, root$2 = _root; /* Built-in method references that are verified to be native. */ var Promise$2 = getNative$2(root$2, 'Promise'); var _Promise = Promise$2; var getNative$1 = _getNative, root$1 = _root; /* Built-in method references that are verified to be native. */ var Set$1 = getNative$1(root$1, 'Set'); var _Set = Set$1; var getNative = _getNative, root = _root; /* Built-in method references that are verified to be native. */ var WeakMap$1 = getNative(root, 'WeakMap'); var _WeakMap = WeakMap$1; var DataView = _DataView, Map$1 = _Map, Promise$1 = _Promise, Set = _Set, WeakMap = _WeakMap, baseGetTag$3 = _baseGetTag, toSource = _toSource; /** `Object#toString` result references. */ var mapTag$2 = '[object Map]', objectTag$1 = '[object Object]', promiseTag = '[object Promise]', setTag$2 = '[object Set]', weakMapTag$1 = '[object WeakMap]'; var dataViewTag$1 = '[object DataView]'; /** Used to detect maps, sets, and weakmaps. */ var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map$1), promiseCtorString = toSource(Promise$1), setCtorString = toSource(Set), weakMapCtorString = toSource(WeakMap); /** * Gets the `toStringTag` of `value`. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ var getTag$1 = baseGetTag$3; // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. if (DataView && getTag$1(new DataView(new ArrayBuffer(1))) != dataViewTag$1 || Map$1 && getTag$1(new Map$1()) != mapTag$2 || Promise$1 && getTag$1(Promise$1.resolve()) != promiseTag || Set && getTag$1(new Set()) != setTag$2 || WeakMap && getTag$1(new WeakMap()) != weakMapTag$1) { getTag$1 = function (value) { var result = baseGetTag$3(value), Ctor = result == objectTag$1 ? value.constructor : undefined, ctorString = Ctor ? toSource(Ctor) : ''; if (ctorString) { switch (ctorString) { case dataViewCtorString: return dataViewTag$1; case mapCtorString: return mapTag$2; case promiseCtorString: return promiseTag; case setCtorString: return setTag$2; case weakMapCtorString: return weakMapTag$1; } } return result; }; } var _getTag = getTag$1; /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER$1 = 9007199254740991; /** * Checks if `value` is a valid array-like length. * * **Note:** This method is loosely based on * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. * @example * * _.isLength(3); * // => true * * _.isLength(Number.MIN_VALUE); * // => false * * _.isLength(Infinity); * // => false * * _.isLength('3'); * // => false */ function isLength$2(value) { return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1; } var isLength_1 = isLength$2; var isFunction = isFunction_1, isLength$1 = isLength_1; /** * Checks if `value` is array-like. A value is considered array-like if it's * not a function and has a `value.length` that's an integer greater than or * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is array-like, else `false`. * @example * * _.isArrayLike([1, 2, 3]); * // => true * * _.isArrayLike(document.body.children); * // => true * * _.isArrayLike('abc'); * // => true * * _.isArrayLike(_.noop); * // => false */ function isArrayLike$2(value) { return value != null && isLength$1(value.length) && !isFunction(value); } var isArrayLike_1 = isArrayLike$2; /** * Checks if `value` is classified as an `Array` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array, else `false`. * @example * * _.isArray([1, 2, 3]); * // => true * * _.isArray(document.body.children); * // => false * * _.isArray('abc'); * // => false * * _.isArray(_.noop); * // => false */ var isArray$2 = Array.isArray; var isArray_1 = isArray$2; /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */ function isObjectLike$4(value) { return value != null && typeof value == 'object'; } var isObjectLike_1 = isObjectLike$4; var baseGetTag$2 = _baseGetTag, isArray$1 = isArray_1, isObjectLike$3 = isObjectLike_1; /** `Object#toString` result references. */ var stringTag$1 = '[object String]'; /** * Checks if `value` is classified as a `String` primitive or object. * * @static * @since 0.1.0 * @memberOf _ * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a string, else `false`. * @example * * _.isString('abc'); * // => true * * _.isString(1); * // => false */ function isString$3(value) { return typeof value == 'string' || !isArray$1(value) && isObjectLike$3(value) && baseGetTag$2(value) == stringTag$1; } var isString_1 = isString$3; /** * Converts `iterator` to an array. * * @private * @param {Object} iterator The iterator to convert. * @returns {Array} Returns the converted array. */ function iteratorToArray$1(iterator) { var data, result = []; while (!(data = iterator.next()).done) { result.push(data.value); } return result; } var _iteratorToArray = iteratorToArray$1; /** * Converts `map` to its key-value pairs. * * @private * @param {Object} map The map to convert. * @returns {Array} Returns the key-value pairs. */ function mapToArray$1(map) { var index = -1, result = Array(map.size); map.forEach(function (value, key) { result[++index] = [key, value]; }); return result; } var _mapToArray = mapToArray$1; /** * Converts `set` to an array of its values. * * @private * @param {Object} set The set to convert. * @returns {Array} Returns the values. */ function setToArray$1(set) { var index = -1, result = Array(set.size); set.forEach(function (value) { result[++index] = value; }); return result; } var _setToArray = setToArray$1; /** * Converts an ASCII `string` to an array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the converted array. */ function asciiToArray$1(string) { return string.split(''); } var _asciiToArray = asciiToArray$1; /** Used to compose unicode character classes. */ var rsAstralRange$1 = '\\ud800-\\udfff', rsComboMarksRange$1 = '\\u0300-\\u036f', reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f', rsComboSymbolsRange$1 = '\\u20d0-\\u20ff', rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, rsVarRange$1 = '\\ufe0e\\ufe0f'; /** Used to compose unicode capture groups. */ var rsZWJ$1 = '\\u200d'; /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ var reHasUnicode = RegExp('[' + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + ']'); /** * Checks if `string` contains Unicode symbols. * * @private * @param {string} string The string to inspect. * @returns {boolean} Returns `true` if a symbol is found, else `false`. */ function hasUnicode$1(string) { return reHasUnicode.test(string); } var _hasUnicode = hasUnicode$1; /** Used to compose unicode character classes. */ var rsAstralRange = '\\ud800-\\udfff', rsComboMarksRange = '\\u0300-\\u036f', reComboHalfMarksRange = '\\ufe20-\\ufe2f', rsComboSymbolsRange = '\\u20d0-\\u20ff', rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsVarRange = '\\ufe0e\\ufe0f'; /** Used to compose unicode capture groups. */ var rsAstral = '[' + rsAstralRange + ']', rsCombo = '[' + rsComboRange + ']', rsFitz = '\\ud83c[\\udffb-\\udfff]', rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', rsNonAstral = '[^' + rsAstralRange + ']', rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', rsZWJ = '\\u200d'; /** Used to compose unicode regexes. */ var reOptMod = rsModifier + '?', rsOptVar = '[' + rsVarRange + ']?', rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', rsSeq = rsOptVar + reOptMod + rsOptJoin, rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); /** * Converts a Unicode `string` to an array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the converted array. */ function unicodeToArray$1(string) { return string.match(reUnicode) || []; } var _unicodeToArray = unicodeToArray$1; var asciiToArray = _asciiToArray, hasUnicode = _hasUnicode, unicodeToArray = _unicodeToArray; /** * Converts `string` to an array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the converted array. */ function stringToArray$1(string) { return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string); } var _stringToArray = stringToArray$1; /** * A specialized version of `_.map` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */ function arrayMap$1(array, iteratee) { var index = -1, length = array == null ? 0 : array.length, result = Array(length); while (++index < length) { result[index] = iteratee(array[index], index, array); } return result; } var _arrayMap = arrayMap$1; var arrayMap = _arrayMap; /** * The base implementation of `_.values` and `_.valuesIn` which creates an * array of `object` property values corresponding to the property names * of `props`. * * @private * @param {Object} object The object to query. * @param {Array} props The property names to get values for. * @returns {Object} Returns the array of property values. */ function baseValues$1(object, props) { return arrayMap(props, function (key) { return object[key]; }); } var _baseValues = baseValues$1; /** * The base implementation of `_.times` without support for iteratee shorthands * or max array length checks. * * @private * @param {number} n The number of times to invoke `iteratee`. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the array of results. */ function baseTimes$1(n, iteratee) { var index = -1, result = Array(n); while (++index < n) { result[index] = iteratee(index); } return result; } var _baseTimes = baseTimes$1; var baseGetTag$1 = _baseGetTag, isObjectLike$2 = isObjectLike_1; /** `Object#toString` result references. */ var argsTag$1 = '[object Arguments]'; /** * The base implementation of `_.isArguments`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, */ function baseIsArguments$1(value) { return isObjectLike$2(value) && baseGetTag$1(value) == argsTag$1; } var _baseIsArguments = baseIsArguments$1; var baseIsArguments = _baseIsArguments, isObjectLike$1 = isObjectLike_1; /** Used for built-in method references. */ var objectProto$3 = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$2 = objectProto$3.hasOwnProperty; /** Built-in value references. */ var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; /** * Checks if `value` is likely an `arguments` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, * else `false`. * @example * * _.isArguments(function() { return arguments; }()); * // => true * * _.isArguments([1, 2, 3]); * // => false */ var isArguments$1 = baseIsArguments(function () { return arguments; }()) ? baseIsArguments : function (value) { return isObjectLike$1(value) && hasOwnProperty$2.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); }; var isArguments_1 = isArguments$1; var isBuffer$1 = {exports: {}}; /** * This method returns `false`. * * @static * @memberOf _ * @since 4.13.0 * @category Util * @returns {boolean} Returns `false`. * @example * * _.times(2, _.stubFalse); * // => [false, false] */ function stubFalse() { return false; } var stubFalse_1 = stubFalse; (function (module, exports) { var root = _root, stubFalse = stubFalse_1; /** Detect free variable `exports`. */ var freeExports = exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Built-in value references. */ var Buffer = moduleExports ? root.Buffer : undefined; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; /** * Checks if `value` is a buffer. * * @static * @memberOf _ * @since 4.3.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. * @example * * _.isBuffer(new Buffer(2)); * // => true * * _.isBuffer(new Uint8Array(2)); * // => false */ var isBuffer = nativeIsBuffer || stubFalse; module.exports = isBuffer; })(isBuffer$1, isBuffer$1.exports); /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** Used to detect unsigned integer values. */ var reIsUint = /^(?:0|[1-9]\d*)$/; /** * Checks if `value` is a valid array-like index. * * @private * @param {*} value The value to check. * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. */ function isIndex$1(value, length) { var type = typeof value; length = length == null ? MAX_SAFE_INTEGER : length; return !!length && (type == 'number' || type != 'symbol' && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length; } var _isIndex = isIndex$1; var baseGetTag = _baseGetTag, isLength = isLength_1, isObjectLike = isObjectLike_1; /** `Object#toString` result references. */ var argsTag = '[object Arguments]', arrayTag = '[object Array]', boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', funcTag = '[object Function]', mapTag$1 = '[object Map]', numberTag = '[object Number]', objectTag = '[object Object]', regexpTag = '[object RegExp]', setTag$1 = '[object Set]', stringTag = '[object String]', weakMapTag = '[object WeakMap]'; var arrayBufferTag = '[object ArrayBuffer]', dataViewTag = '[object DataView]', float32Tag = '[object Float32Array]', float64Tag = '[object Float64Array]', int8Tag = '[object Int8Array]', int16Tag = '[object Int16Array]', int32Tag = '[object Int32Array]', uint8Tag = '[object Uint8Array]', uint8ClampedTag = '[object Uint8ClampedArray]', uint16Tag = '[object Uint16Array]', uint32Tag = '[object Uint32Array]'; /** Used to identify `toStringTag` values of typed arrays. */ var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag$1] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag$1] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; /** * The base implementation of `_.isTypedArray` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. */ function baseIsTypedArray$1(value) { return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; } var _baseIsTypedArray = baseIsTypedArray$1; /** * The base implementation of `_.unary` without support for storing metadata. * * @private * @param {Function} func The function to cap arguments for. * @returns {Function} Returns the new capped function. */ function baseUnary$1(func) { return function (value) { return func(value); }; } var _baseUnary = baseUnary$1; var _nodeUtil = {exports: {}}; (function (module, exports) { var freeGlobal = _freeGlobal; /** Detect free variable `exports`. */ var freeExports = exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Detect free variable `process` from Node.js. */ var freeProcess = moduleExports && freeGlobal.process; /** Used to access faster Node.js helpers. */ var nodeUtil = function () { try { // Use `util.types` for Node.js 10+. var types = freeModule && freeModule.require && freeModule.require('util').types; if (types) { return types; } // Legacy `process.binding('util')` for Node.js < 10. return freeProcess && freeProcess.binding && freeProcess.binding('util'); } catch (e) {} }(); module.exports = nodeUtil; })(_nodeUtil, _nodeUtil.exports); var baseIsTypedArray = _baseIsTypedArray, baseUnary = _baseUnary, nodeUtil = _nodeUtil.exports; /* Node.js helper references. */ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; /** * Checks if `value` is classified as a typed array. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. * @example * * _.isTypedArray(new Uint8Array); * // => true * * _.isTypedArray([]); * // => false */ var isTypedArray$1 = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; var isTypedArray_1 = isTypedArray$1; var baseTimes = _baseTimes, isArguments = isArguments_1, isArray = isArray_1, isBuffer = isBuffer$1.exports, isIndex = _isIndex, isTypedArray = isTypedArray_1; /** Used for built-in method references. */ var objectProto$2 = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$1 = objectProto$2.hasOwnProperty; /** * Creates an array of the enumerable property names of the array-like `value`. * * @private * @param {*} value The value to query. * @param {boolean} inherited Specify returning inherited property names. * @returns {Array} Returns the array of property names. */ function arrayLikeKeys$1(value, inherited) { var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; for (var key in value) { if ((inherited || hasOwnProperty$1.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode. key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers. isBuff && (key == 'offset' || key == 'parent') || // PhantomJS 2 has enumerable non-index properties on typed arrays. isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') || // Skip index properties. isIndex(key, length)))) { result.push(key); } } return result; } var _arrayLikeKeys = arrayLikeKeys$1; /** Used for built-in method references. */ var objectProto$1 = Object.prototype; /** * Checks if `value` is likely a prototype object. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. */ function isPrototype$1(value) { var Ctor = value && value.constructor, proto = typeof Ctor == 'function' && Ctor.prototype || objectProto$1; return value === proto; } var _isPrototype = isPrototype$1; /** * Creates a unary function that invokes `func` with its argument transformed. * * @private * @param {Function} func The function to wrap. * @param {Function} transform The argument transform. * @returns {Function} Returns the new function. */ function overArg$1(func, transform) { return function (arg) { return func(transform(arg)); }; } var _overArg = overArg$1; var overArg = _overArg; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeKeys$1 = overArg(Object.keys, Object); var _nativeKeys = nativeKeys$1; var isPrototype = _isPrototype, nativeKeys = _nativeKeys; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function baseKeys$1(object) { if (!isPrototype(object)) { return nativeKeys(object); } var result = []; for (var key in Object(object)) { if (hasOwnProperty.call(object, key) && key != 'constructor') { result.push(key); } } return result; } var _baseKeys = baseKeys$1; var arrayLikeKeys = _arrayLikeKeys, baseKeys = _baseKeys, isArrayLike$1 = isArrayLike_1; /** * Creates an array of the own enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. See the * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) * for more details. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keys(new Foo); * // => ['a', 'b'] (iteration order is not guaranteed) * * _.keys('hi'); * // => ['0', '1'] */ function keys$1(object) { return isArrayLike$1(object) ? arrayLikeKeys(object) : baseKeys(object); } var keys_1 = keys$1; var baseValues = _baseValues, keys = keys_1; /** * Creates an array of the own enumerable string keyed property values of `object`. * * **Note:** Non-object values are coerced to objects. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property values. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.values(new Foo); * // => [1, 2] (iteration order is not guaranteed) * * _.values('hi'); * // => ['h', 'i'] */ function values$1(object) { return object == null ? [] : baseValues(object, keys(object)); } var values_1 = values$1; var Symbol = _Symbol, copyArray = _copyArray, getTag = _getTag, isArrayLike = isArrayLike_1, isString$2 = isString_1, iteratorToArray = _iteratorToArray, mapToArray = _mapToArray, setToArray = _setToArray, stringToArray = _stringToArray, values = values_1; /** `Object#toString` result references. */ var mapTag = '[object Map]', setTag = '[object Set]'; /** Built-in value references. */ var symIterator = Symbol ? Symbol.iterator : undefined; /** * Converts `value` to an array. * * @static * @since 0.1.0 * @memberOf _ * @category Lang * @param {*} value The value to convert. * @returns {Array} Returns the converted array. * @example * * _.toArray({ 'a': 1, 'b': 2 }); * // => [1, 2] * * _.toArray('abc'); * // => ['a', 'b', 'c'] * * _.toArray(1); * // => [] * * _.toArray(null); * // => [] */ function toArray$1(value) { if (!value) { return []; } if (isArrayLike(value)) { return isString$2(value) ? stringToArray(value) : copyArray(value); } if (symIterator && value[symIterator]) { return iteratorToArray(value[symIterator]()); } var tag = getTag(value), func = tag == mapTag ? mapToArray : tag == setTag ? setToArray : values; return func(value); } var toArray_1 = toArray$1; var umbrella_with_rain_drops = "☔"; var coffee = "☕"; var aries = "♈"; var taurus = "♉"; var sagittarius = "♐"; var capricorn = "♑"; var aquarius = "♒"; var pisces = "♓"; var anchor = "⚓"; var white_check_mark = "✅"; var sparkles = "✨"; var question = "❓"; var grey_question = "❔"; var grey_exclamation = "❕"; var exclamation = "❗"; var heavy_exclamation_mark = "❗"; var heavy_plus_sign = "➕"; var heavy_minus_sign = "➖"; var heavy_division_sign = "➗"; var hash = "#️⃣"; var keycap_star = "*️⃣"; var zero = "0️⃣"; var one = "1️⃣"; var two = "2️⃣"; var three = "3️⃣"; var four = "4️⃣"; var five = "5️⃣"; var six = "6️⃣"; var seven = "7️⃣"; var eight = "8️⃣"; var nine = "9️⃣"; var copyright = "©️"; var registered = "®️"; var mahjong = "🀄"; var black_joker = "🃏"; var a = "🅰️"; var b = "🅱️"; var o2 = "🅾️"; var parking = "🅿️"; var ab = "🆎"; var cl = "🆑"; var cool = "🆒"; var free = "🆓"; var id = "🆔"; var ng = "🆖"; var ok = "🆗"; var sos = "🆘"; var up = "🆙"; var vs = "🆚"; var cn = "🇨🇳"; var de = "🇩🇪"; var es = "🇪🇸"; var fr = "🇫🇷"; var gb = "🇬🇧"; var uk = "🇬🇧"; var it = "🇮🇹"; var jp = "🇯🇵"; var kr = "🇰🇷"; var ru = "🇷🇺"; var us = "🇺🇸"; var koko = "🈁"; var sa = "🈂️"; var u7121 = "🈚"; var u6307 = "🈯"; var u7981 = "🈲"; var u7a7a = "🈳"; var u5408 = "🈴"; var u6e80 = "🈵"; var u6709 = "🈶"; var u6708 = "🈷️"; var u7533 = "🈸"; var u5272 = "🈹"; var u55b6 = "🈺"; var ideograph_advantage = "🉐"; var accept = "🉑"; var cyclone = "🌀"; var foggy = "🌁"; var closed_umbrella = "🌂"; var night_with_stars = "🌃"; var sunrise_over_mountains = "🌄"; var sunrise = "🌅"; var city_sunset = "🌆"; var city_sunrise = "🌇"; var rainbow = "🌈"; var bridge_at_night = "🌉"; var ocean = "🌊"; var volcano = "🌋"; var milky_way = "🌌"; var earth_africa = "🌍"; var earth_americas = "🌎"; var earth_asia = "🌏"; var globe_with_meridians = "🌐"; var new_moon = "🌑"; var waxing_crescent_moon = "🌒"; var first_quarter_moon = "🌓"; var moon = "🌔"; var waxing_gibbous_moon = "🌔"; var full_moon = "🌕"; var waning_gibbous_moon = "🌖"; var last_quarter_moon = "🌗"; var waning_crescent_moon = "🌘"; var crescent_moon = "🌙"; var new_moon_with_face = "🌚"; var first_quarter_moon_with_face = "🌛"; var last_quarter_moon_with_face = "🌜"; var full_moon_with_face = "🌝"; var sun_with_face = "🌞"; var star2 = "🌟"; var stars = "🌠"; var thermometer = "🌡️"; var mostly_sunny = "🌤️"; var sun_small_cloud = "🌤️"; var barely_sunny = "🌥️"; var sun_behind_cloud = "🌥️"; var partly_sunny_rain = "🌦️"; var sun_behind_rain_cloud = "🌦️"; var rain_cloud = "🌧️"; var snow_cloud = "🌨️"; var lightning = "🌩️"; var lightning_cloud = "🌩️"; var tornado = "🌪️"; var tornado_cloud = "🌪️"; var fog = "🌫️"; var wind_blowing_face = "🌬️"; var hotdog = "🌭"; var taco = "🌮"; var burrito = "🌯"; var chestnut = "🌰"; var seedling = "🌱"; var evergreen_tree = "🌲"; var deciduous_tree = "🌳"; var palm_tree = "🌴"; var cactus = "🌵"; var hot_pepper = "🌶️"; var tulip = "🌷"; var cherry_blossom = "🌸"; var rose = "🌹"; var hibiscus = "🌺"; var sunflower = "🌻"; var blossom = "🌼"; var corn = "🌽"; var ear_of_rice = "🌾"; var herb = "🌿"; var four_leaf_clover = "🍀"; var maple_leaf = "🍁"; var fallen_leaf = "🍂"; var leaves = "🍃"; var mushroom = "🍄"; var tomato = "🍅"; var eggplant = "🍆"; var grapes = "🍇"; var melon = "🍈"; var watermelon = "🍉"; var tangerine = "🍊"; var lemon = "🍋"; var banana = "🍌"; var pineapple = "🍍"; var apple = "🍎"; var green_apple = "🍏"; var pear = "🍐"; var peach = "🍑"; var cherries = "🍒"; var strawberry = "🍓"; var hamburger = "🍔"; var pizza = "🍕"; var meat_on_bone = "🍖"; var poultry_leg = "🍗"; var rice_cracker = "🍘"; var rice_ball = "🍙"; var rice = "🍚"; var curry = "🍛"; var ramen = "🍜"; var spaghetti = "🍝"; var bread = "🍞"; var fries = "🍟"; var sweet_potato = "🍠"; var dango = "🍡"; var oden = "🍢"; var sushi = "🍣"; var fried_shrimp = "🍤"; var fish_cake = "🍥"; var icecream = "🍦"; var shaved_ice = "🍧"; var ice_cream = "🍨"; var doughnut = "🍩"; var cookie = "🍪"; var chocolate_bar = "🍫"; var candy = "🍬"; var lollipop = "🍭"; var custard = "🍮"; var honey_pot = "🍯"; var cake = "🍰"; var bento = "🍱"; var stew = "🍲"; var fried_egg = "🍳"; var cooking = "🍳"; var fork_and_knife = "🍴"; var tea = "🍵"; var sake = "🍶"; var wine_glass = "🍷"; var cocktail = "🍸"; var tropical_drink = "🍹"; var beer = "🍺"; var beers = "🍻"; var baby_bottle = "🍼"; var knife_fork_plate = "🍽️"; var champagne = "🍾"; var popcorn = "🍿"; var ribbon = "🎀"; var gift = "🎁"; var birthday = "🎂"; var jack_o_lantern = "🎃"; var christmas_tree = "🎄"; var santa = "🎅"; var fireworks = "🎆"; var sparkler = "🎇"; var balloon = "🎈"; var tada = "🎉"; var confetti_ball = "🎊"; var tanabata_tree = "🎋"; var crossed_flags = "🎌"; var bamboo = "🎍"; var dolls = "🎎"; var flags = "🎏"; var wind_chime = "🎐"; var rice_scene = "🎑"; var school_satchel = "🎒"; var mortar_board = "🎓"; var medal = "🎖️"; var reminder_ribbon = "🎗️"; var studio_microphone = "🎙️"; var level_slider = "🎚️"; var control_knobs = "🎛️"; var film_frames = "🎞️"; var admission_tickets = "🎟️"; var carousel_horse = "🎠"; var ferris_wheel = "🎡"; var roller_coaster = "🎢"; var fishing_pole_and_fish = "🎣"; var microphone = "🎤"; var movie_camera = "🎥"; var cinema = "🎦"; var headphones = "🎧"; var art = "🎨"; var tophat = "🎩"; var circus_tent = "🎪"; var ticket = "🎫"; var clapper = "🎬"; var performing_arts = "🎭"; var video_game = "🎮"; var dart = "🎯"; var slot_machine = "🎰"; var game_die = "🎲"; var bowling = "🎳"; var flower_playing_cards = "🎴"; var musical_note = "🎵"; var notes = "🎶"; var saxophone = "🎷"; var guitar = "🎸"; var musical_keyboard = "🎹"; var trumpet = "🎺"; var violin = "🎻"; var musical_score = "🎼"; var running_shirt_with_sash = "🎽"; var tennis = "🎾"; var ski = "🎿"; var basketball = "🏀"; var checkered_flag = "🏁"; var snowboarder = "🏂"; var runner = "🏃‍♂️"; var running = "🏃‍♂️"; var surfer = "🏄‍♂️"; var sports_medal = "🏅"; var trophy = "🏆"; var horse_racing = "🏇"; var football = "🏈"; var rugby_football = "🏉"; var swimmer = "🏊‍♂️"; var weight_lifter = "🏋️‍♂️"; var golfer = "🏌️‍♂️"; var racing_motorcycle = "🏍️"; var racing_car = "🏎️"; var cricket_bat_and_ball = "🏏"; var volleyball = "🏐"; var field_hockey_stick_and_ball = "🏑"; var ice_hockey_stick_and_puck = "🏒"; var table_tennis_paddle_and_ball = "🏓"; var snow_capped_mountain = "🏔️"; var camping = "🏕️"; var beach_with_umbrella = "🏖️"; var building_construction = "🏗️"; var house_buildings = "🏘️"; var cityscape = "🏙️"; var derelict_house_building = "🏚️"; var classical_building = "🏛️"; var desert = "🏜️"; var desert_island = "🏝️"; var national_park = "🏞️"; var stadium = "🏟️"; var house = "🏠"; var house_with_garden = "🏡"; var office = "🏢"; var post_office = "🏣"; var european_post_office = "🏤"; var hospital = "🏥"; var bank = "🏦"; var atm = "🏧"; var hotel = "🏨"; var love_hotel = "🏩"; var convenience_store = "🏪"; var school = "🏫"; var department_store = "🏬"; var factory = "🏭"; var izakaya_lantern = "🏮"; var lantern = "🏮"; var japanese_castle = "🏯"; var european_castle = "🏰"; var transgender_flag = "🏳️‍⚧️"; var waving_white_flag = "🏳️"; var pirate_flag = "🏴‍☠️"; var waving_black_flag = "🏴"; var rosette = "🏵️"; var label = "🏷️"; var badminton_racquet_and_shuttlecock = "🏸"; var bow_and_arrow = "🏹"; var amphora = "🏺"; var rat = "🐀"; var mouse2 = "🐁"; var ox = "🐂"; var water_buffalo = "🐃"; var cow2 = "🐄"; var tiger2 = "🐅"; var leopard = "🐆"; var rabbit2 = "🐇"; var black_cat = "🐈‍⬛"; var cat2 = "🐈"; var dragon = "🐉"; var crocodile = "🐊"; var whale2 = "🐋"; var snail = "🐌"; var snake = "🐍"; var racehorse = "🐎"; var ram = "🐏"; var goat = "🐐"; var sheep = "🐑"; var monkey = "🐒"; var rooster = "🐓"; var chicken = "🐔"; var service_dog = "🐕‍🦺"; var dog2 = "🐕"; var pig2 = "🐖"; var boar = "🐗"; var elephant = "🐘"; var octopus = "🐙"; var shell = "🐚"; var bug = "🐛"; var ant = "🐜"; var bee = "🐝"; var honeybee = "🐝"; var ladybug = "🐞"; var lady_beetle = "🐞"; var fish = "🐟"; var tropical_fish = "🐠"; var blowfish = "🐡"; var turtle = "🐢"; var hatching_chick = "🐣"; var baby_chick = "🐤"; var hatched_chick = "🐥"; var bird = "🐦"; var penguin = "🐧"; var koala = "🐨"; var poodle = "🐩"; var dromedary_camel = "🐪"; var camel = "🐫"; var dolphin = "🐬"; var flipper = "🐬"; var mouse = "🐭"; var cow = "🐮"; var tiger = "🐯"; var rabbit = "🐰"; var cat = "🐱"; var dragon_face = "🐲"; var whale = "🐳"; var horse = "🐴"; var monkey_face = "🐵"; var dog = "🐶"; var pig = "🐷"; var frog = "🐸"; var hamster = "🐹"; var wolf = "🐺"; var polar_bear = "🐻‍❄️"; var bear = "🐻"; var panda_face = "🐼"; var pig_nose = "🐽"; var feet = "🐾"; var paw_prints = "🐾"; var chipmunk = "🐿️"; var eyes = "👀"; var eye = "👁️"; var ear = "👂"; var nose = "👃"; var lips = "👄"; var tongue = "👅"; var point_up_2 = "👆"; var point_down = "👇"; var point_left = "👈"; var point_right = "👉"; var facepunch = "👊"; var punch = "👊"; var wave = "👋"; var ok_hand = "👌"; var thumbsup = "👍"; var thumbsdown = "👎"; var clap = "👏"; var open_hands = "👐"; var crown = "👑"; var womans_hat = "👒"; var eyeglasses = "👓"; var necktie = "👔"; var shirt = "👕"; var tshirt = "👕"; var jeans = "👖"; var dress = "👗"; var kimono = "👘"; var bikini = "👙"; var womans_clothes = "👚"; var purse = "👛"; var handbag = "👜"; var pouch = "👝"; var mans_shoe = "👞"; var shoe = "👞"; var athletic_shoe = "👟"; var high_heel = "👠"; var sandal = "👡"; var boot = "👢"; var footprints = "👣"; var bust_in_silhouette = "👤"; var busts_in_silhouette = "👥"; var boy = "👦"; var girl = "👧"; var man_feeding_baby = "👨‍🍼"; var family = "👨‍👩‍👦"; var man_with_probing_cane = "👨‍🦯"; var red_haired_man = "👨‍🦰"; var curly_haired_man = "👨‍🦱"; var bald_man = "👨‍🦲"; var white_haired_man = "👨‍🦳"; var man_in_motorized_wheelchair = "👨‍🦼"; var man_in_manual_wheelchair = "👨‍🦽"; var man = "👨"; var woman_feeding_baby = "👩‍🍼"; var woman_with_probing_cane = "👩‍🦯"; var red_haired_woman = "👩‍🦰"; var curly_haired_woman = "👩‍🦱"; var bald_woman = "👩‍🦲"; var white_haired_woman = "👩‍🦳"; var woman_in_motorized_wheelchair = "👩‍🦼"; var woman_in_manual_wheelchair = "👩‍🦽"; var woman = "👩"; var man_and_woman_holding_hands = "👫"; var woman_and_man_holding_hands = "👫"; var couple = "👫"; var two_men_holding_hands = "👬"; var men_holding_hands = "👬"; var two_women_holding_hands = "👭"; var women_holding_hands = "👭"; var cop = "👮‍♂️"; var dancers = "👯‍♀️"; var woman_with_veil = "👰‍♀️"; var man_with_veil = "👰‍♂️"; var bride_with_veil = "👰"; var person_with_blond_hair = "👱‍♂️"; var man_with_gua_pi_mao = "👲"; var man_with_turban = "👳‍♂️"; var older_man = "👴"; var older_woman = "👵"; var baby = "👶"; var construction_worker = "👷‍♂️"; var princess = "👸"; var japanese_ogre = "👹"; var japanese_goblin = "👺"; var ghost = "👻"; var angel = "👼"; var alien = "👽"; var space_invader = "👾"; var imp = "👿"; var skull = "💀"; var information_desk_person = "💁‍♀️"; var guardsman = "💂‍♂️"; var dancer = "💃"; var lipstick = "💄"; var nail_care = "💅"; var massage = "💆‍♀️"; var haircut = "💇‍♀️"; var barber = "💈"; var syringe = "💉"; var pill = "💊"; var kiss = "💋"; var love_letter = "💌"; var ring = "💍"; var gem = "💎"; var couplekiss = "💏"; var bouquet = "💐"; var couple_with_heart = "💑"; var wedding = "💒"; var heartbeat = "💓"; var broken_heart = "💔"; var two_hearts = "💕"; var sparkling_heart = "💖"; var heartpulse = "💗"; var cupid = "💘"; var blue_heart = "💙"; var green_heart = "💚"; var yellow_heart = "💛"; var purple_heart = "💜"; var gift_heart = "💝"; var revolving_hearts = "💞"; var heart_decoration = "💟"; var diamond_shape_with_a_dot_inside = "💠"; var bulb = "💡"; var anger = "💢"; var bomb = "💣"; var zzz = "💤"; var boom = "💥"; var collision = "💥"; var sweat_drops = "💦"; var droplet = "💧"; var dash = "💨"; var hankey = "💩"; var poop = "💩"; var shit = "💩"; var muscle = "💪"; var dizzy = "💫"; var speech_balloon = "💬"; var thought_balloon = "💭"; var white_flower = "💮"; var moneybag = "💰"; var currency_exchange = "💱"; var heavy_dollar_sign = "💲"; var credit_card = "💳"; var yen = "💴"; var dollar = "💵"; var euro = "💶"; var pound = "💷"; var money_with_wings = "💸"; var chart = "💹"; var seat = "💺"; var computer = "💻"; var briefcase = "💼"; var minidisc = "💽"; var floppy_disk = "💾"; var cd = "💿"; var dvd = "📀"; var file_folder = "📁"; var open_file_folder = "📂"; var page_with_curl = "📃"; var page_facing_up = "📄"; var