' + func(text) + '
';\n\t * });\n\t *\n\t * p('fred, barney, & pebbles');\n\t * // => 'fred, barney, & pebbles
'\n\t */\n\t function wrap(value, wrapper) {\n\t return partial(castFunction(wrapper), value);\n\t }\n\t\n\t /*------------------------------------------------------------------------*/\n\t\n\t /**\n\t * Casts `value` as an array if it's not one.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.4.0\n\t * @category Lang\n\t * @param {*} value The value to inspect.\n\t * @returns {Array} Returns the cast array.\n\t * @example\n\t *\n\t * _.castArray(1);\n\t * // => [1]\n\t *\n\t * _.castArray({ 'a': 1 });\n\t * // => [{ 'a': 1 }]\n\t *\n\t * _.castArray('abc');\n\t * // => ['abc']\n\t *\n\t * _.castArray(null);\n\t * // => [null]\n\t *\n\t * _.castArray(undefined);\n\t * // => [undefined]\n\t *\n\t * _.castArray();\n\t * // => []\n\t *\n\t * var array = [1, 2, 3];\n\t * console.log(_.castArray(array) === array);\n\t * // => true\n\t */\n\t function castArray() {\n\t if (!arguments.length) {\n\t return [];\n\t }\n\t var value = arguments[0];\n\t return isArray(value) ? value : [value];\n\t }\n\t\n\t /**\n\t * Creates a shallow clone of `value`.\n\t *\n\t * **Note:** This method is loosely based on the\n\t * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n\t * and supports cloning arrays, array buffers, booleans, date objects, maps,\n\t * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n\t * arrays. The own enumerable properties of `arguments` objects are cloned\n\t * as plain objects. An empty object is returned for uncloneable values such\n\t * as error objects, functions, DOM nodes, and WeakMaps.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to clone.\n\t * @returns {*} Returns the cloned value.\n\t * @see _.cloneDeep\n\t * @example\n\t *\n\t * var objects = [{ 'a': 1 }, { 'b': 2 }];\n\t *\n\t * var shallow = _.clone(objects);\n\t * console.log(shallow[0] === objects[0]);\n\t * // => true\n\t */\n\t function clone(value) {\n\t return baseClone(value, CLONE_SYMBOLS_FLAG);\n\t }\n\t\n\t /**\n\t * This method is like `_.clone` except that it accepts `customizer` which\n\t * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n\t * cloning is handled by the method instead. The `customizer` is invoked with\n\t * up to four arguments; (value [, index|key, object, stack]).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to clone.\n\t * @param {Function} [customizer] The function to customize cloning.\n\t * @returns {*} Returns the cloned value.\n\t * @see _.cloneDeepWith\n\t * @example\n\t *\n\t * function customizer(value) {\n\t * if (_.isElement(value)) {\n\t * return value.cloneNode(false);\n\t * }\n\t * }\n\t *\n\t * var el = _.cloneWith(document.body, customizer);\n\t *\n\t * console.log(el === document.body);\n\t * // => false\n\t * console.log(el.nodeName);\n\t * // => 'BODY'\n\t * console.log(el.childNodes.length);\n\t * // => 0\n\t */\n\t function cloneWith(value, customizer) {\n\t customizer = typeof customizer == 'function' ? customizer : undefined;\n\t return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n\t }\n\t\n\t /**\n\t * This method is like `_.clone` except that it recursively clones `value`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 1.0.0\n\t * @category Lang\n\t * @param {*} value The value to recursively clone.\n\t * @returns {*} Returns the deep cloned value.\n\t * @see _.clone\n\t * @example\n\t *\n\t * var objects = [{ 'a': 1 }, { 'b': 2 }];\n\t *\n\t * var deep = _.cloneDeep(objects);\n\t * console.log(deep[0] === objects[0]);\n\t * // => false\n\t */\n\t function cloneDeep(value) {\n\t return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n\t }\n\t\n\t /**\n\t * This method is like `_.cloneWith` except that it recursively clones `value`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to recursively clone.\n\t * @param {Function} [customizer] The function to customize cloning.\n\t * @returns {*} Returns the deep cloned value.\n\t * @see _.cloneWith\n\t * @example\n\t *\n\t * function customizer(value) {\n\t * if (_.isElement(value)) {\n\t * return value.cloneNode(true);\n\t * }\n\t * }\n\t *\n\t * var el = _.cloneDeepWith(document.body, customizer);\n\t *\n\t * console.log(el === document.body);\n\t * // => false\n\t * console.log(el.nodeName);\n\t * // => 'BODY'\n\t * console.log(el.childNodes.length);\n\t * // => 20\n\t */\n\t function cloneDeepWith(value, customizer) {\n\t customizer = typeof customizer == 'function' ? customizer : undefined;\n\t return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n\t }\n\t\n\t /**\n\t * Checks if `object` conforms to `source` by invoking the predicate\n\t * properties of `source` with the corresponding property values of `object`.\n\t *\n\t * **Note:** This method is equivalent to `_.conforms` when `source` is\n\t * partially applied.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.14.0\n\t * @category Lang\n\t * @param {Object} object The object to inspect.\n\t * @param {Object} source The object of property predicates to conform to.\n\t * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n\t * @example\n\t *\n\t * var object = { 'a': 1, 'b': 2 };\n\t *\n\t * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n\t * // => true\n\t *\n\t * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n\t * // => false\n\t */\n\t function conformsTo(object, source) {\n\t return source == null || baseConformsTo(object, source, keys(source));\n\t }\n\t\n\t /**\n\t * Performs a\n\t * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n\t * comparison between two values to determine if they are equivalent.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to compare.\n\t * @param {*} other The other value to compare.\n\t * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n\t * @example\n\t *\n\t * var object = { 'a': 1 };\n\t * var other = { 'a': 1 };\n\t *\n\t * _.eq(object, object);\n\t * // => true\n\t *\n\t * _.eq(object, other);\n\t * // => false\n\t *\n\t * _.eq('a', 'a');\n\t * // => true\n\t *\n\t * _.eq('a', Object('a'));\n\t * // => false\n\t *\n\t * _.eq(NaN, NaN);\n\t * // => true\n\t */\n\t function eq(value, other) {\n\t return value === other || (value !== value && other !== other);\n\t }\n\t\n\t /**\n\t * Checks if `value` is greater than `other`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.9.0\n\t * @category Lang\n\t * @param {*} value The value to compare.\n\t * @param {*} other The other value to compare.\n\t * @returns {boolean} Returns `true` if `value` is greater than `other`,\n\t * else `false`.\n\t * @see _.lt\n\t * @example\n\t *\n\t * _.gt(3, 1);\n\t * // => true\n\t *\n\t * _.gt(3, 3);\n\t * // => false\n\t *\n\t * _.gt(1, 3);\n\t * // => false\n\t */\n\t var gt = createRelationalOperation(baseGt);\n\t\n\t /**\n\t * Checks if `value` is greater than or equal to `other`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.9.0\n\t * @category Lang\n\t * @param {*} value The value to compare.\n\t * @param {*} other The other value to compare.\n\t * @returns {boolean} Returns `true` if `value` is greater than or equal to\n\t * `other`, else `false`.\n\t * @see _.lte\n\t * @example\n\t *\n\t * _.gte(3, 1);\n\t * // => true\n\t *\n\t * _.gte(3, 3);\n\t * // => true\n\t *\n\t * _.gte(1, 3);\n\t * // => false\n\t */\n\t var gte = createRelationalOperation(function(value, other) {\n\t return value >= other;\n\t });\n\t\n\t /**\n\t * Checks if `value` is likely an `arguments` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n\t * else `false`.\n\t * @example\n\t *\n\t * _.isArguments(function() { return arguments; }());\n\t * // => true\n\t *\n\t * _.isArguments([1, 2, 3]);\n\t * // => false\n\t */\n\t var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n\t return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n\t !propertyIsEnumerable.call(value, 'callee');\n\t };\n\t\n\t /**\n\t * Checks if `value` is classified as an `Array` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n\t * @example\n\t *\n\t * _.isArray([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isArray(document.body.children);\n\t * // => false\n\t *\n\t * _.isArray('abc');\n\t * // => false\n\t *\n\t * _.isArray(_.noop);\n\t * // => false\n\t */\n\t var isArray = Array.isArray;\n\t\n\t /**\n\t * Checks if `value` is classified as an `ArrayBuffer` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.3.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n\t * @example\n\t *\n\t * _.isArrayBuffer(new ArrayBuffer(2));\n\t * // => true\n\t *\n\t * _.isArrayBuffer(new Array(2));\n\t * // => false\n\t */\n\t var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\t\n\t /**\n\t * Checks if `value` is array-like. A value is considered array-like if it's\n\t * not a function and has a `value.length` that's an integer greater than or\n\t * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n\t * @example\n\t *\n\t * _.isArrayLike([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isArrayLike(document.body.children);\n\t * // => true\n\t *\n\t * _.isArrayLike('abc');\n\t * // => true\n\t *\n\t * _.isArrayLike(_.noop);\n\t * // => false\n\t */\n\t function isArrayLike(value) {\n\t return value != null && isLength(value.length) && !isFunction(value);\n\t }\n\t\n\t /**\n\t * This method is like `_.isArrayLike` except that it also checks if `value`\n\t * is an object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an array-like object,\n\t * else `false`.\n\t * @example\n\t *\n\t * _.isArrayLikeObject([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isArrayLikeObject(document.body.children);\n\t * // => true\n\t *\n\t * _.isArrayLikeObject('abc');\n\t * // => false\n\t *\n\t * _.isArrayLikeObject(_.noop);\n\t * // => false\n\t */\n\t function isArrayLikeObject(value) {\n\t return isObjectLike(value) && isArrayLike(value);\n\t }\n\t\n\t /**\n\t * Checks if `value` is classified as a boolean primitive or object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n\t * @example\n\t *\n\t * _.isBoolean(false);\n\t * // => true\n\t *\n\t * _.isBoolean(null);\n\t * // => false\n\t */\n\t function isBoolean(value) {\n\t return value === true || value === false ||\n\t (isObjectLike(value) && baseGetTag(value) == boolTag);\n\t }\n\t\n\t /**\n\t * Checks if `value` is a buffer.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.3.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n\t * @example\n\t *\n\t * _.isBuffer(new Buffer(2));\n\t * // => true\n\t *\n\t * _.isBuffer(new Uint8Array(2));\n\t * // => false\n\t */\n\t var isBuffer = nativeIsBuffer || stubFalse;\n\t\n\t /**\n\t * Checks if `value` is classified as a `Date` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n\t * @example\n\t *\n\t * _.isDate(new Date);\n\t * // => true\n\t *\n\t * _.isDate('Mon April 23 2012');\n\t * // => false\n\t */\n\t var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\t\n\t /**\n\t * Checks if `value` is likely a DOM element.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n\t * @example\n\t *\n\t * _.isElement(document.body);\n\t * // => true\n\t *\n\t * _.isElement('');\n\t * // => false\n\t */\n\t function isElement(value) {\n\t return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n\t }\n\t\n\t /**\n\t * Checks if `value` is an empty object, collection, map, or set.\n\t *\n\t * Objects are considered empty if they have no own enumerable string keyed\n\t * properties.\n\t *\n\t * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n\t * jQuery-like collections are considered empty if they have a `length` of `0`.\n\t * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n\t * @example\n\t *\n\t * _.isEmpty(null);\n\t * // => true\n\t *\n\t * _.isEmpty(true);\n\t * // => true\n\t *\n\t * _.isEmpty(1);\n\t * // => true\n\t *\n\t * _.isEmpty([1, 2, 3]);\n\t * // => false\n\t *\n\t * _.isEmpty({ 'a': 1 });\n\t * // => false\n\t */\n\t function isEmpty(value) {\n\t if (value == null) {\n\t return true;\n\t }\n\t if (isArrayLike(value) &&\n\t (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n\t isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n\t return !value.length;\n\t }\n\t var tag = getTag(value);\n\t if (tag == mapTag || tag == setTag) {\n\t return !value.size;\n\t }\n\t if (isPrototype(value)) {\n\t return !baseKeys(value).length;\n\t }\n\t for (var key in value) {\n\t if (hasOwnProperty.call(value, key)) {\n\t return false;\n\t }\n\t }\n\t return true;\n\t }\n\t\n\t /**\n\t * Performs a deep comparison between two values to determine if they are\n\t * equivalent.\n\t *\n\t * **Note:** This method supports comparing arrays, array buffers, booleans,\n\t * date objects, error objects, maps, numbers, `Object` objects, regexes,\n\t * sets, strings, symbols, and typed arrays. `Object` objects are compared\n\t * by their own, not inherited, enumerable properties. Functions and DOM\n\t * nodes are compared by strict equality, i.e. `===`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to compare.\n\t * @param {*} other The other value to compare.\n\t * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n\t * @example\n\t *\n\t * var object = { 'a': 1 };\n\t * var other = { 'a': 1 };\n\t *\n\t * _.isEqual(object, other);\n\t * // => true\n\t *\n\t * object === other;\n\t * // => false\n\t */\n\t function isEqual(value, other) {\n\t return baseIsEqual(value, other);\n\t }\n\t\n\t /**\n\t * This method is like `_.isEqual` except that it accepts `customizer` which\n\t * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n\t * are handled by the method instead. The `customizer` is invoked with up to\n\t * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to compare.\n\t * @param {*} other The other value to compare.\n\t * @param {Function} [customizer] The function to customize comparisons.\n\t * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n\t * @example\n\t *\n\t * function isGreeting(value) {\n\t * return /^h(?:i|ello)$/.test(value);\n\t * }\n\t *\n\t * function customizer(objValue, othValue) {\n\t * if (isGreeting(objValue) && isGreeting(othValue)) {\n\t * return true;\n\t * }\n\t * }\n\t *\n\t * var array = ['hello', 'goodbye'];\n\t * var other = ['hi', 'goodbye'];\n\t *\n\t * _.isEqualWith(array, other, customizer);\n\t * // => true\n\t */\n\t function isEqualWith(value, other, customizer) {\n\t customizer = typeof customizer == 'function' ? customizer : undefined;\n\t var result = customizer ? customizer(value, other) : undefined;\n\t return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n\t }\n\t\n\t /**\n\t * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n\t * `SyntaxError`, `TypeError`, or `URIError` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n\t * @example\n\t *\n\t * _.isError(new Error);\n\t * // => true\n\t *\n\t * _.isError(Error);\n\t * // => false\n\t */\n\t function isError(value) {\n\t if (!isObjectLike(value)) {\n\t return false;\n\t }\n\t var tag = baseGetTag(value);\n\t return tag == errorTag || tag == domExcTag ||\n\t (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n\t }\n\t\n\t /**\n\t * Checks if `value` is a finite primitive number.\n\t *\n\t * **Note:** This method is based on\n\t * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n\t * @example\n\t *\n\t * _.isFinite(3);\n\t * // => true\n\t *\n\t * _.isFinite(Number.MIN_VALUE);\n\t * // => true\n\t *\n\t * _.isFinite(Infinity);\n\t * // => false\n\t *\n\t * _.isFinite('3');\n\t * // => false\n\t */\n\t function isFinite(value) {\n\t return typeof value == 'number' && nativeIsFinite(value);\n\t }\n\t\n\t /**\n\t * Checks if `value` is classified as a `Function` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n\t * @example\n\t *\n\t * _.isFunction(_);\n\t * // => true\n\t *\n\t * _.isFunction(/abc/);\n\t * // => false\n\t */\n\t function isFunction(value) {\n\t if (!isObject(value)) {\n\t return false;\n\t }\n\t // The use of `Object#toString` avoids issues with the `typeof` operator\n\t // in Safari 9 which returns 'object' for typed arrays and other constructors.\n\t var tag = baseGetTag(value);\n\t return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n\t }\n\t\n\t /**\n\t * Checks if `value` is an integer.\n\t *\n\t * **Note:** This method is based on\n\t * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n\t * @example\n\t *\n\t * _.isInteger(3);\n\t * // => true\n\t *\n\t * _.isInteger(Number.MIN_VALUE);\n\t * // => false\n\t *\n\t * _.isInteger(Infinity);\n\t * // => false\n\t *\n\t * _.isInteger('3');\n\t * // => false\n\t */\n\t function isInteger(value) {\n\t return typeof value == 'number' && value == toInteger(value);\n\t }\n\t\n\t /**\n\t * Checks if `value` is a valid array-like length.\n\t *\n\t * **Note:** This method is loosely based on\n\t * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n\t * @example\n\t *\n\t * _.isLength(3);\n\t * // => true\n\t *\n\t * _.isLength(Number.MIN_VALUE);\n\t * // => false\n\t *\n\t * _.isLength(Infinity);\n\t * // => false\n\t *\n\t * _.isLength('3');\n\t * // => false\n\t */\n\t function isLength(value) {\n\t return typeof value == 'number' &&\n\t value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n\t }\n\t\n\t /**\n\t * Checks if `value` is the\n\t * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n\t * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n\t * @example\n\t *\n\t * _.isObject({});\n\t * // => true\n\t *\n\t * _.isObject([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isObject(_.noop);\n\t * // => true\n\t *\n\t * _.isObject(null);\n\t * // => false\n\t */\n\t function isObject(value) {\n\t var type = typeof value;\n\t return value != null && (type == 'object' || type == 'function');\n\t }\n\t\n\t /**\n\t * Checks if `value` is object-like. A value is object-like if it's not `null`\n\t * and has a `typeof` result of \"object\".\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n\t * @example\n\t *\n\t * _.isObjectLike({});\n\t * // => true\n\t *\n\t * _.isObjectLike([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isObjectLike(_.noop);\n\t * // => false\n\t *\n\t * _.isObjectLike(null);\n\t * // => false\n\t */\n\t function isObjectLike(value) {\n\t return value != null && typeof value == 'object';\n\t }\n\t\n\t /**\n\t * Checks if `value` is classified as a `Map` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.3.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n\t * @example\n\t *\n\t * _.isMap(new Map);\n\t * // => true\n\t *\n\t * _.isMap(new WeakMap);\n\t * // => false\n\t */\n\t var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\t\n\t /**\n\t * Performs a partial deep comparison between `object` and `source` to\n\t * determine if `object` contains equivalent property values.\n\t *\n\t * **Note:** This method is equivalent to `_.matches` when `source` is\n\t * partially applied.\n\t *\n\t * Partial comparisons will match empty array and empty object `source`\n\t * values against any array or object value, respectively. See `_.isEqual`\n\t * for a list of supported value comparisons.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.0.0\n\t * @category Lang\n\t * @param {Object} object The object to inspect.\n\t * @param {Object} source The object of property values to match.\n\t * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n\t * @example\n\t *\n\t * var object = { 'a': 1, 'b': 2 };\n\t *\n\t * _.isMatch(object, { 'b': 2 });\n\t * // => true\n\t *\n\t * _.isMatch(object, { 'b': 1 });\n\t * // => false\n\t */\n\t function isMatch(object, source) {\n\t return object === source || baseIsMatch(object, source, getMatchData(source));\n\t }\n\t\n\t /**\n\t * This method is like `_.isMatch` except that it accepts `customizer` which\n\t * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n\t * are handled by the method instead. The `customizer` is invoked with five\n\t * arguments: (objValue, srcValue, index|key, object, source).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {Object} object The object to inspect.\n\t * @param {Object} source The object of property values to match.\n\t * @param {Function} [customizer] The function to customize comparisons.\n\t * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n\t * @example\n\t *\n\t * function isGreeting(value) {\n\t * return /^h(?:i|ello)$/.test(value);\n\t * }\n\t *\n\t * function customizer(objValue, srcValue) {\n\t * if (isGreeting(objValue) && isGreeting(srcValue)) {\n\t * return true;\n\t * }\n\t * }\n\t *\n\t * var object = { 'greeting': 'hello' };\n\t * var source = { 'greeting': 'hi' };\n\t *\n\t * _.isMatchWith(object, source, customizer);\n\t * // => true\n\t */\n\t function isMatchWith(object, source, customizer) {\n\t customizer = typeof customizer == 'function' ? customizer : undefined;\n\t return baseIsMatch(object, source, getMatchData(source), customizer);\n\t }\n\t\n\t /**\n\t * Checks if `value` is `NaN`.\n\t *\n\t * **Note:** This method is based on\n\t * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n\t * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n\t * `undefined` and other non-number values.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n\t * @example\n\t *\n\t * _.isNaN(NaN);\n\t * // => true\n\t *\n\t * _.isNaN(new Number(NaN));\n\t * // => true\n\t *\n\t * isNaN(undefined);\n\t * // => true\n\t *\n\t * _.isNaN(undefined);\n\t * // => false\n\t */\n\t function isNaN(value) {\n\t // An `NaN` primitive is the only value that is not equal to itself.\n\t // Perform the `toStringTag` check first to avoid errors with some\n\t // ActiveX objects in IE.\n\t return isNumber(value) && value != +value;\n\t }\n\t\n\t /**\n\t * Checks if `value` is a pristine native function.\n\t *\n\t * **Note:** This method can't reliably detect native functions in the presence\n\t * of the core-js package because core-js circumvents this kind of detection.\n\t * Despite multiple requests, the core-js maintainer has made it clear: any\n\t * attempt to fix the detection will be obstructed. As a result, we're left\n\t * with little choice but to throw an error. Unfortunately, this also affects\n\t * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n\t * which rely on core-js.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a native function,\n\t * else `false`.\n\t * @example\n\t *\n\t * _.isNative(Array.prototype.push);\n\t * // => true\n\t *\n\t * _.isNative(_);\n\t * // => false\n\t */\n\t function isNative(value) {\n\t if (isMaskable(value)) {\n\t throw new Error(CORE_ERROR_TEXT);\n\t }\n\t return baseIsNative(value);\n\t }\n\t\n\t /**\n\t * Checks if `value` is `null`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n\t * @example\n\t *\n\t * _.isNull(null);\n\t * // => true\n\t *\n\t * _.isNull(void 0);\n\t * // => false\n\t */\n\t function isNull(value) {\n\t return value === null;\n\t }\n\t\n\t /**\n\t * Checks if `value` is `null` or `undefined`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n\t * @example\n\t *\n\t * _.isNil(null);\n\t * // => true\n\t *\n\t * _.isNil(void 0);\n\t * // => true\n\t *\n\t * _.isNil(NaN);\n\t * // => false\n\t */\n\t function isNil(value) {\n\t return value == null;\n\t }\n\t\n\t /**\n\t * Checks if `value` is classified as a `Number` primitive or object.\n\t *\n\t * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n\t * classified as numbers, use the `_.isFinite` method.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n\t * @example\n\t *\n\t * _.isNumber(3);\n\t * // => true\n\t *\n\t * _.isNumber(Number.MIN_VALUE);\n\t * // => true\n\t *\n\t * _.isNumber(Infinity);\n\t * // => true\n\t *\n\t * _.isNumber('3');\n\t * // => false\n\t */\n\t function isNumber(value) {\n\t return typeof value == 'number' ||\n\t (isObjectLike(value) && baseGetTag(value) == numberTag);\n\t }\n\t\n\t /**\n\t * Checks if `value` is a plain object, that is, an object created by the\n\t * `Object` constructor or one with a `[[Prototype]]` of `null`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.8.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * }\n\t *\n\t * _.isPlainObject(new Foo);\n\t * // => false\n\t *\n\t * _.isPlainObject([1, 2, 3]);\n\t * // => false\n\t *\n\t * _.isPlainObject({ 'x': 0, 'y': 0 });\n\t * // => true\n\t *\n\t * _.isPlainObject(Object.create(null));\n\t * // => true\n\t */\n\t function isPlainObject(value) {\n\t if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n\t return false;\n\t }\n\t var proto = getPrototype(value);\n\t if (proto === null) {\n\t return true;\n\t }\n\t var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n\t return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n\t funcToString.call(Ctor) == objectCtorString;\n\t }\n\t\n\t /**\n\t * Checks if `value` is classified as a `RegExp` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n\t * @example\n\t *\n\t * _.isRegExp(/abc/);\n\t * // => true\n\t *\n\t * _.isRegExp('/abc/');\n\t * // => false\n\t */\n\t var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\t\n\t /**\n\t * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n\t * double precision number which isn't the result of a rounded unsafe integer.\n\t *\n\t * **Note:** This method is based on\n\t * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n\t * @example\n\t *\n\t * _.isSafeInteger(3);\n\t * // => true\n\t *\n\t * _.isSafeInteger(Number.MIN_VALUE);\n\t * // => false\n\t *\n\t * _.isSafeInteger(Infinity);\n\t * // => false\n\t *\n\t * _.isSafeInteger('3');\n\t * // => false\n\t */\n\t function isSafeInteger(value) {\n\t return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n\t }\n\t\n\t /**\n\t * Checks if `value` is classified as a `Set` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.3.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n\t * @example\n\t *\n\t * _.isSet(new Set);\n\t * // => true\n\t *\n\t * _.isSet(new WeakSet);\n\t * // => false\n\t */\n\t var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\t\n\t /**\n\t * Checks if `value` is classified as a `String` primitive or object.\n\t *\n\t * @static\n\t * @since 0.1.0\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n\t * @example\n\t *\n\t * _.isString('abc');\n\t * // => true\n\t *\n\t * _.isString(1);\n\t * // => false\n\t */\n\t function isString(value) {\n\t return typeof value == 'string' ||\n\t (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n\t }\n\t\n\t /**\n\t * Checks if `value` is classified as a `Symbol` primitive or object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n\t * @example\n\t *\n\t * _.isSymbol(Symbol.iterator);\n\t * // => true\n\t *\n\t * _.isSymbol('abc');\n\t * // => false\n\t */\n\t function isSymbol(value) {\n\t return typeof value == 'symbol' ||\n\t (isObjectLike(value) && baseGetTag(value) == symbolTag);\n\t }\n\t\n\t /**\n\t * Checks if `value` is classified as a typed array.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n\t * @example\n\t *\n\t * _.isTypedArray(new Uint8Array);\n\t * // => true\n\t *\n\t * _.isTypedArray([]);\n\t * // => false\n\t */\n\t var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\t\n\t /**\n\t * Checks if `value` is `undefined`.\n\t *\n\t * @static\n\t * @since 0.1.0\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n\t * @example\n\t *\n\t * _.isUndefined(void 0);\n\t * // => true\n\t *\n\t * _.isUndefined(null);\n\t * // => false\n\t */\n\t function isUndefined(value) {\n\t return value === undefined;\n\t }\n\t\n\t /**\n\t * Checks if `value` is classified as a `WeakMap` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.3.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n\t * @example\n\t *\n\t * _.isWeakMap(new WeakMap);\n\t * // => true\n\t *\n\t * _.isWeakMap(new Map);\n\t * // => false\n\t */\n\t function isWeakMap(value) {\n\t return isObjectLike(value) && getTag(value) == weakMapTag;\n\t }\n\t\n\t /**\n\t * Checks if `value` is classified as a `WeakSet` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.3.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n\t * @example\n\t *\n\t * _.isWeakSet(new WeakSet);\n\t * // => true\n\t *\n\t * _.isWeakSet(new Set);\n\t * // => false\n\t */\n\t function isWeakSet(value) {\n\t return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n\t }\n\t\n\t /**\n\t * Checks if `value` is less than `other`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.9.0\n\t * @category Lang\n\t * @param {*} value The value to compare.\n\t * @param {*} other The other value to compare.\n\t * @returns {boolean} Returns `true` if `value` is less than `other`,\n\t * else `false`.\n\t * @see _.gt\n\t * @example\n\t *\n\t * _.lt(1, 3);\n\t * // => true\n\t *\n\t * _.lt(3, 3);\n\t * // => false\n\t *\n\t * _.lt(3, 1);\n\t * // => false\n\t */\n\t var lt = createRelationalOperation(baseLt);\n\t\n\t /**\n\t * Checks if `value` is less than or equal to `other`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.9.0\n\t * @category Lang\n\t * @param {*} value The value to compare.\n\t * @param {*} other The other value to compare.\n\t * @returns {boolean} Returns `true` if `value` is less than or equal to\n\t * `other`, else `false`.\n\t * @see _.gte\n\t * @example\n\t *\n\t * _.lte(1, 3);\n\t * // => true\n\t *\n\t * _.lte(3, 3);\n\t * // => true\n\t *\n\t * _.lte(3, 1);\n\t * // => false\n\t */\n\t var lte = createRelationalOperation(function(value, other) {\n\t return value <= other;\n\t });\n\t\n\t /**\n\t * Converts `value` to an array.\n\t *\n\t * @static\n\t * @since 0.1.0\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to convert.\n\t * @returns {Array} Returns the converted array.\n\t * @example\n\t *\n\t * _.toArray({ 'a': 1, 'b': 2 });\n\t * // => [1, 2]\n\t *\n\t * _.toArray('abc');\n\t * // => ['a', 'b', 'c']\n\t *\n\t * _.toArray(1);\n\t * // => []\n\t *\n\t * _.toArray(null);\n\t * // => []\n\t */\n\t function toArray(value) {\n\t if (!value) {\n\t return [];\n\t }\n\t if (isArrayLike(value)) {\n\t return isString(value) ? stringToArray(value) : copyArray(value);\n\t }\n\t if (symIterator && value[symIterator]) {\n\t return iteratorToArray(value[symIterator]());\n\t }\n\t var tag = getTag(value),\n\t func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\t\n\t return func(value);\n\t }\n\t\n\t /**\n\t * Converts `value` to a finite number.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.12.0\n\t * @category Lang\n\t * @param {*} value The value to convert.\n\t * @returns {number} Returns the converted number.\n\t * @example\n\t *\n\t * _.toFinite(3.2);\n\t * // => 3.2\n\t *\n\t * _.toFinite(Number.MIN_VALUE);\n\t * // => 5e-324\n\t *\n\t * _.toFinite(Infinity);\n\t * // => 1.7976931348623157e+308\n\t *\n\t * _.toFinite('3.2');\n\t * // => 3.2\n\t */\n\t function toFinite(value) {\n\t if (!value) {\n\t return value === 0 ? value : 0;\n\t }\n\t value = toNumber(value);\n\t if (value === INFINITY || value === -INFINITY) {\n\t var sign = (value < 0 ? -1 : 1);\n\t return sign * MAX_INTEGER;\n\t }\n\t return value === value ? value : 0;\n\t }\n\t\n\t /**\n\t * Converts `value` to an integer.\n\t *\n\t * **Note:** This method is loosely based on\n\t * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to convert.\n\t * @returns {number} Returns the converted integer.\n\t * @example\n\t *\n\t * _.toInteger(3.2);\n\t * // => 3\n\t *\n\t * _.toInteger(Number.MIN_VALUE);\n\t * // => 0\n\t *\n\t * _.toInteger(Infinity);\n\t * // => 1.7976931348623157e+308\n\t *\n\t * _.toInteger('3.2');\n\t * // => 3\n\t */\n\t function toInteger(value) {\n\t var result = toFinite(value),\n\t remainder = result % 1;\n\t\n\t return result === result ? (remainder ? result - remainder : result) : 0;\n\t }\n\t\n\t /**\n\t * Converts `value` to an integer suitable for use as the length of an\n\t * array-like object.\n\t *\n\t * **Note:** This method is based on\n\t * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to convert.\n\t * @returns {number} Returns the converted integer.\n\t * @example\n\t *\n\t * _.toLength(3.2);\n\t * // => 3\n\t *\n\t * _.toLength(Number.MIN_VALUE);\n\t * // => 0\n\t *\n\t * _.toLength(Infinity);\n\t * // => 4294967295\n\t *\n\t * _.toLength('3.2');\n\t * // => 3\n\t */\n\t function toLength(value) {\n\t return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n\t }\n\t\n\t /**\n\t * Converts `value` to a number.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to process.\n\t * @returns {number} Returns the number.\n\t * @example\n\t *\n\t * _.toNumber(3.2);\n\t * // => 3.2\n\t *\n\t * _.toNumber(Number.MIN_VALUE);\n\t * // => 5e-324\n\t *\n\t * _.toNumber(Infinity);\n\t * // => Infinity\n\t *\n\t * _.toNumber('3.2');\n\t * // => 3.2\n\t */\n\t function toNumber(value) {\n\t if (typeof value == 'number') {\n\t return value;\n\t }\n\t if (isSymbol(value)) {\n\t return NAN;\n\t }\n\t if (isObject(value)) {\n\t var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n\t value = isObject(other) ? (other + '') : other;\n\t }\n\t if (typeof value != 'string') {\n\t return value === 0 ? value : +value;\n\t }\n\t value = value.replace(reTrim, '');\n\t var isBinary = reIsBinary.test(value);\n\t return (isBinary || reIsOctal.test(value))\n\t ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n\t : (reIsBadHex.test(value) ? NAN : +value);\n\t }\n\t\n\t /**\n\t * Converts `value` to a plain object flattening inherited enumerable string\n\t * keyed properties of `value` to own properties of the plain object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.0.0\n\t * @category Lang\n\t * @param {*} value The value to convert.\n\t * @returns {Object} Returns the converted plain object.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.assign({ 'a': 1 }, new Foo);\n\t * // => { 'a': 1, 'b': 2 }\n\t *\n\t * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n\t * // => { 'a': 1, 'b': 2, 'c': 3 }\n\t */\n\t function toPlainObject(value) {\n\t return copyObject(value, keysIn(value));\n\t }\n\t\n\t /**\n\t * Converts `value` to a safe integer. A safe integer can be compared and\n\t * represented correctly.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to convert.\n\t * @returns {number} Returns the converted integer.\n\t * @example\n\t *\n\t * _.toSafeInteger(3.2);\n\t * // => 3\n\t *\n\t * _.toSafeInteger(Number.MIN_VALUE);\n\t * // => 0\n\t *\n\t * _.toSafeInteger(Infinity);\n\t * // => 9007199254740991\n\t *\n\t * _.toSafeInteger('3.2');\n\t * // => 3\n\t */\n\t function toSafeInteger(value) {\n\t return value\n\t ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n\t : (value === 0 ? value : 0);\n\t }\n\t\n\t /**\n\t * Converts `value` to a string. An empty string is returned for `null`\n\t * and `undefined` values. The sign of `-0` is preserved.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to convert.\n\t * @returns {string} Returns the converted string.\n\t * @example\n\t *\n\t * _.toString(null);\n\t * // => ''\n\t *\n\t * _.toString(-0);\n\t * // => '-0'\n\t *\n\t * _.toString([1, 2, 3]);\n\t * // => '1,2,3'\n\t */\n\t function toString(value) {\n\t return value == null ? '' : baseToString(value);\n\t }\n\t\n\t /*------------------------------------------------------------------------*/\n\t\n\t /**\n\t * Assigns own enumerable string keyed properties of source objects to the\n\t * destination object. Source objects are applied from left to right.\n\t * Subsequent sources overwrite property assignments of previous sources.\n\t *\n\t * **Note:** This method mutates `object` and is loosely based on\n\t * [`Object.assign`](https://mdn.io/Object/assign).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.10.0\n\t * @category Object\n\t * @param {Object} object The destination object.\n\t * @param {...Object} [sources] The source objects.\n\t * @returns {Object} Returns `object`.\n\t * @see _.assignIn\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * }\n\t *\n\t * function Bar() {\n\t * this.c = 3;\n\t * }\n\t *\n\t * Foo.prototype.b = 2;\n\t * Bar.prototype.d = 4;\n\t *\n\t * _.assign({ 'a': 0 }, new Foo, new Bar);\n\t * // => { 'a': 1, 'c': 3 }\n\t */\n\t var assign = createAssigner(function(object, source) {\n\t if (isPrototype(source) || isArrayLike(source)) {\n\t copyObject(source, keys(source), object);\n\t return;\n\t }\n\t for (var key in source) {\n\t if (hasOwnProperty.call(source, key)) {\n\t assignValue(object, key, source[key]);\n\t }\n\t }\n\t });\n\t\n\t /**\n\t * This method is like `_.assign` except that it iterates over own and\n\t * inherited source properties.\n\t *\n\t * **Note:** This method mutates `object`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @alias extend\n\t * @category Object\n\t * @param {Object} object The destination object.\n\t * @param {...Object} [sources] The source objects.\n\t * @returns {Object} Returns `object`.\n\t * @see _.assign\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * }\n\t *\n\t * function Bar() {\n\t * this.c = 3;\n\t * }\n\t *\n\t * Foo.prototype.b = 2;\n\t * Bar.prototype.d = 4;\n\t *\n\t * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n\t * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n\t */\n\t var assignIn = createAssigner(function(object, source) {\n\t copyObject(source, keysIn(source), object);\n\t });\n\t\n\t /**\n\t * This method is like `_.assignIn` except that it accepts `customizer`\n\t * which is invoked to produce the assigned values. If `customizer` returns\n\t * `undefined`, assignment is handled by the method instead. The `customizer`\n\t * is invoked with five arguments: (objValue, srcValue, key, object, source).\n\t *\n\t * **Note:** This method mutates `object`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @alias extendWith\n\t * @category Object\n\t * @param {Object} object The destination object.\n\t * @param {...Object} sources The source objects.\n\t * @param {Function} [customizer] The function to customize assigned values.\n\t * @returns {Object} Returns `object`.\n\t * @see _.assignWith\n\t * @example\n\t *\n\t * function customizer(objValue, srcValue) {\n\t * return _.isUndefined(objValue) ? srcValue : objValue;\n\t * }\n\t *\n\t * var defaults = _.partialRight(_.assignInWith, customizer);\n\t *\n\t * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n\t * // => { 'a': 1, 'b': 2 }\n\t */\n\t var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n\t copyObject(source, keysIn(source), object, customizer);\n\t });\n\t\n\t /**\n\t * This method is like `_.assign` except that it accepts `customizer`\n\t * which is invoked to produce the assigned values. If `customizer` returns\n\t * `undefined`, assignment is handled by the method instead. The `customizer`\n\t * is invoked with five arguments: (objValue, srcValue, key, object, source).\n\t *\n\t * **Note:** This method mutates `object`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Object\n\t * @param {Object} object The destination object.\n\t * @param {...Object} sources The source objects.\n\t * @param {Function} [customizer] The function to customize assigned values.\n\t * @returns {Object} Returns `object`.\n\t * @see _.assignInWith\n\t * @example\n\t *\n\t * function customizer(objValue, srcValue) {\n\t * return _.isUndefined(objValue) ? srcValue : objValue;\n\t * }\n\t *\n\t * var defaults = _.partialRight(_.assignWith, customizer);\n\t *\n\t * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n\t * // => { 'a': 1, 'b': 2 }\n\t */\n\t var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n\t copyObject(source, keys(source), object, customizer);\n\t });\n\t\n\t /**\n\t * Creates an array of values corresponding to `paths` of `object`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 1.0.0\n\t * @category Object\n\t * @param {Object} object The object to iterate over.\n\t * @param {...(string|string[])} [paths] The property paths to pick.\n\t * @returns {Array} Returns the picked values.\n\t * @example\n\t *\n\t * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n\t *\n\t * _.at(object, ['a[0].b.c', 'a[1]']);\n\t * // => [3, 4]\n\t */\n\t var at = flatRest(baseAt);\n\t\n\t /**\n\t * Creates an object that inherits from the `prototype` object. If a\n\t * `properties` object is given, its own enumerable string keyed properties\n\t * are assigned to the created object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 2.3.0\n\t * @category Object\n\t * @param {Object} prototype The object to inherit from.\n\t * @param {Object} [properties] The properties to assign to the object.\n\t * @returns {Object} Returns the new object.\n\t * @example\n\t *\n\t * function Shape() {\n\t * this.x = 0;\n\t * this.y = 0;\n\t * }\n\t *\n\t * function Circle() {\n\t * Shape.call(this);\n\t * }\n\t *\n\t * Circle.prototype = _.create(Shape.prototype, {\n\t * 'constructor': Circle\n\t * });\n\t *\n\t * var circle = new Circle;\n\t * circle instanceof Circle;\n\t * // => true\n\t *\n\t * circle instanceof Shape;\n\t * // => true\n\t */\n\t function create(prototype, properties) {\n\t var result = baseCreate(prototype);\n\t return properties == null ? result : baseAssign(result, properties);\n\t }\n\t\n\t /**\n\t * Assigns own and inherited enumerable string keyed properties of source\n\t * objects to the destination object for all destination properties that\n\t * resolve to `undefined`. Source objects are applied from left to right.\n\t * Once a property is set, additional values of the same property are ignored.\n\t *\n\t * **Note:** This method mutates `object`.\n\t *\n\t * @static\n\t * @since 0.1.0\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The destination object.\n\t * @param {...Object} [sources] The source objects.\n\t * @returns {Object} Returns `object`.\n\t * @see _.defaultsDeep\n\t * @example\n\t *\n\t * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n\t * // => { 'a': 1, 'b': 2 }\n\t */\n\t var defaults = baseRest(function(object, sources) {\n\t object = Object(object);\n\t\n\t var index = -1;\n\t var length = sources.length;\n\t var guard = length > 2 ? sources[2] : undefined;\n\t\n\t if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n\t length = 1;\n\t }\n\t\n\t while (++index < length) {\n\t var source = sources[index];\n\t var props = keysIn(source);\n\t var propsIndex = -1;\n\t var propsLength = props.length;\n\t\n\t while (++propsIndex < propsLength) {\n\t var key = props[propsIndex];\n\t var value = object[key];\n\t\n\t if (value === undefined ||\n\t (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n\t object[key] = source[key];\n\t }\n\t }\n\t }\n\t\n\t return object;\n\t });\n\t\n\t /**\n\t * This method is like `_.defaults` except that it recursively assigns\n\t * default properties.\n\t *\n\t * **Note:** This method mutates `object`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.10.0\n\t * @category Object\n\t * @param {Object} object The destination object.\n\t * @param {...Object} [sources] The source objects.\n\t * @returns {Object} Returns `object`.\n\t * @see _.defaults\n\t * @example\n\t *\n\t * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n\t * // => { 'a': { 'b': 2, 'c': 3 } }\n\t */\n\t var defaultsDeep = baseRest(function(args) {\n\t args.push(undefined, customDefaultsMerge);\n\t return apply(mergeWith, undefined, args);\n\t });\n\t\n\t /**\n\t * This method is like `_.find` except that it returns the key of the first\n\t * element `predicate` returns truthy for instead of the element itself.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 1.1.0\n\t * @category Object\n\t * @param {Object} object The object to inspect.\n\t * @param {Function} [predicate=_.identity] The function invoked per iteration.\n\t * @returns {string|undefined} Returns the key of the matched element,\n\t * else `undefined`.\n\t * @example\n\t *\n\t * var users = {\n\t * 'barney': { 'age': 36, 'active': true },\n\t * 'fred': { 'age': 40, 'active': false },\n\t * 'pebbles': { 'age': 1, 'active': true }\n\t * };\n\t *\n\t * _.findKey(users, function(o) { return o.age < 40; });\n\t * // => 'barney' (iteration order is not guaranteed)\n\t *\n\t * // The `_.matches` iteratee shorthand.\n\t * _.findKey(users, { 'age': 1, 'active': true });\n\t * // => 'pebbles'\n\t *\n\t * // The `_.matchesProperty` iteratee shorthand.\n\t * _.findKey(users, ['active', false]);\n\t * // => 'fred'\n\t *\n\t * // The `_.property` iteratee shorthand.\n\t * _.findKey(users, 'active');\n\t * // => 'barney'\n\t */\n\t function findKey(object, predicate) {\n\t return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n\t }\n\t\n\t /**\n\t * This method is like `_.findKey` except that it iterates over elements of\n\t * a collection in the opposite order.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 2.0.0\n\t * @category Object\n\t * @param {Object} object The object to inspect.\n\t * @param {Function} [predicate=_.identity] The function invoked per iteration.\n\t * @returns {string|undefined} Returns the key of the matched element,\n\t * else `undefined`.\n\t * @example\n\t *\n\t * var users = {\n\t * 'barney': { 'age': 36, 'active': true },\n\t * 'fred': { 'age': 40, 'active': false },\n\t * 'pebbles': { 'age': 1, 'active': true }\n\t * };\n\t *\n\t * _.findLastKey(users, function(o) { return o.age < 40; });\n\t * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n\t *\n\t * // The `_.matches` iteratee shorthand.\n\t * _.findLastKey(users, { 'age': 36, 'active': true });\n\t * // => 'barney'\n\t *\n\t * // The `_.matchesProperty` iteratee shorthand.\n\t * _.findLastKey(users, ['active', false]);\n\t * // => 'fred'\n\t *\n\t * // The `_.property` iteratee shorthand.\n\t * _.findLastKey(users, 'active');\n\t * // => 'pebbles'\n\t */\n\t function findLastKey(object, predicate) {\n\t return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n\t }\n\t\n\t /**\n\t * Iterates over own and inherited enumerable string keyed properties of an\n\t * object and invokes `iteratee` for each property. The iteratee is invoked\n\t * with three arguments: (value, key, object). Iteratee functions may exit\n\t * iteration early by explicitly returning `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.3.0\n\t * @category Object\n\t * @param {Object} object The object to iterate over.\n\t * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n\t * @returns {Object} Returns `object`.\n\t * @see _.forInRight\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.forIn(new Foo, function(value, key) {\n\t * console.log(key);\n\t * });\n\t * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n\t */\n\t function forIn(object, iteratee) {\n\t return object == null\n\t ? object\n\t : baseFor(object, getIteratee(iteratee, 3), keysIn);\n\t }\n\t\n\t /**\n\t * This method is like `_.forIn` except that it iterates over properties of\n\t * `object` in the opposite order.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 2.0.0\n\t * @category Object\n\t * @param {Object} object The object to iterate over.\n\t * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n\t * @returns {Object} Returns `object`.\n\t * @see _.forIn\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.forInRight(new Foo, function(value, key) {\n\t * console.log(key);\n\t * });\n\t * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n\t */\n\t function forInRight(object, iteratee) {\n\t return object == null\n\t ? object\n\t : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n\t }\n\t\n\t /**\n\t * Iterates over own enumerable string keyed properties of an object and\n\t * invokes `iteratee` for each property. The iteratee is invoked with three\n\t * arguments: (value, key, object). Iteratee functions may exit iteration\n\t * early by explicitly returning `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.3.0\n\t * @category Object\n\t * @param {Object} object The object to iterate over.\n\t * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n\t * @returns {Object} Returns `object`.\n\t * @see _.forOwnRight\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.forOwn(new Foo, function(value, key) {\n\t * console.log(key);\n\t * });\n\t * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n\t */\n\t function forOwn(object, iteratee) {\n\t return object && baseForOwn(object, getIteratee(iteratee, 3));\n\t }\n\t\n\t /**\n\t * This method is like `_.forOwn` except that it iterates over properties of\n\t * `object` in the opposite order.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 2.0.0\n\t * @category Object\n\t * @param {Object} object The object to iterate over.\n\t * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n\t * @returns {Object} Returns `object`.\n\t * @see _.forOwn\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.forOwnRight(new Foo, function(value, key) {\n\t * console.log(key);\n\t * });\n\t * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n\t */\n\t function forOwnRight(object, iteratee) {\n\t return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n\t }\n\t\n\t /**\n\t * Creates an array of function property names from own enumerable properties\n\t * of `object`.\n\t *\n\t * @static\n\t * @since 0.1.0\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to inspect.\n\t * @returns {Array} Returns the function names.\n\t * @see _.functionsIn\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = _.constant('a');\n\t * this.b = _.constant('b');\n\t * }\n\t *\n\t * Foo.prototype.c = _.constant('c');\n\t *\n\t * _.functions(new Foo);\n\t * // => ['a', 'b']\n\t */\n\t function functions(object) {\n\t return object == null ? [] : baseFunctions(object, keys(object));\n\t }\n\t\n\t /**\n\t * Creates an array of function property names from own and inherited\n\t * enumerable properties of `object`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Object\n\t * @param {Object} object The object to inspect.\n\t * @returns {Array} Returns the function names.\n\t * @see _.functions\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = _.constant('a');\n\t * this.b = _.constant('b');\n\t * }\n\t *\n\t * Foo.prototype.c = _.constant('c');\n\t *\n\t * _.functionsIn(new Foo);\n\t * // => ['a', 'b', 'c']\n\t */\n\t function functionsIn(object) {\n\t return object == null ? [] : baseFunctions(object, keysIn(object));\n\t }\n\t\n\t /**\n\t * Gets the value at `path` of `object`. If the resolved value is\n\t * `undefined`, the `defaultValue` is returned in its place.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.7.0\n\t * @category Object\n\t * @param {Object} object The object to query.\n\t * @param {Array|string} path The path of the property to get.\n\t * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n\t * @returns {*} Returns the resolved value.\n\t * @example\n\t *\n\t * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n\t *\n\t * _.get(object, 'a[0].b.c');\n\t * // => 3\n\t *\n\t * _.get(object, ['a', '0', 'b', 'c']);\n\t * // => 3\n\t *\n\t * _.get(object, 'a.b.c', 'default');\n\t * // => 'default'\n\t */\n\t function get(object, path, defaultValue) {\n\t var result = object == null ? undefined : baseGet(object, path);\n\t return result === undefined ? defaultValue : result;\n\t }\n\t\n\t /**\n\t * Checks if `path` is a direct property of `object`.\n\t *\n\t * @static\n\t * @since 0.1.0\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to query.\n\t * @param {Array|string} path The path to check.\n\t * @returns {boolean} Returns `true` if `path` exists, else `false`.\n\t * @example\n\t *\n\t * var object = { 'a': { 'b': 2 } };\n\t * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n\t *\n\t * _.has(object, 'a');\n\t * // => true\n\t *\n\t * _.has(object, 'a.b');\n\t * // => true\n\t *\n\t * _.has(object, ['a', 'b']);\n\t * // => true\n\t *\n\t * _.has(other, 'a');\n\t * // => false\n\t */\n\t function has(object, path) {\n\t return object != null && hasPath(object, path, baseHas);\n\t }\n\t\n\t /**\n\t * Checks if `path` is a direct or inherited property of `object`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Object\n\t * @param {Object} object The object to query.\n\t * @param {Array|string} path The path to check.\n\t * @returns {boolean} Returns `true` if `path` exists, else `false`.\n\t * @example\n\t *\n\t * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n\t *\n\t * _.hasIn(object, 'a');\n\t * // => true\n\t *\n\t * _.hasIn(object, 'a.b');\n\t * // => true\n\t *\n\t * _.hasIn(object, ['a', 'b']);\n\t * // => true\n\t *\n\t * _.hasIn(object, 'b');\n\t * // => false\n\t */\n\t function hasIn(object, path) {\n\t return object != null && hasPath(object, path, baseHasIn);\n\t }\n\t\n\t /**\n\t * Creates an object composed of the inverted keys and values of `object`.\n\t * If `object` contains duplicate values, subsequent values overwrite\n\t * property assignments of previous values.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.7.0\n\t * @category Object\n\t * @param {Object} object The object to invert.\n\t * @returns {Object} Returns the new inverted object.\n\t * @example\n\t *\n\t * var object = { 'a': 1, 'b': 2, 'c': 1 };\n\t *\n\t * _.invert(object);\n\t * // => { '1': 'c', '2': 'b' }\n\t */\n\t var invert = createInverter(function(result, value, key) {\n\t if (value != null &&\n\t typeof value.toString != 'function') {\n\t value = nativeObjectToString.call(value);\n\t }\n\t\n\t result[value] = key;\n\t }, constant(identity));\n\t\n\t /**\n\t * This method is like `_.invert` except that the inverted object is generated\n\t * from the results of running each element of `object` thru `iteratee`. The\n\t * corresponding inverted value of each inverted key is an array of keys\n\t * responsible for generating the inverted value. The iteratee is invoked\n\t * with one argument: (value).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.1.0\n\t * @category Object\n\t * @param {Object} object The object to invert.\n\t * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n\t * @returns {Object} Returns the new inverted object.\n\t * @example\n\t *\n\t * var object = { 'a': 1, 'b': 2, 'c': 1 };\n\t *\n\t * _.invertBy(object);\n\t * // => { '1': ['a', 'c'], '2': ['b'] }\n\t *\n\t * _.invertBy(object, function(value) {\n\t * return 'group' + value;\n\t * });\n\t * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n\t */\n\t var invertBy = createInverter(function(result, value, key) {\n\t if (value != null &&\n\t typeof value.toString != 'function') {\n\t value = nativeObjectToString.call(value);\n\t }\n\t\n\t if (hasOwnProperty.call(result, value)) {\n\t result[value].push(key);\n\t } else {\n\t result[value] = [key];\n\t }\n\t }, getIteratee);\n\t\n\t /**\n\t * Invokes the method at `path` of `object`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Object\n\t * @param {Object} object The object to query.\n\t * @param {Array|string} path The path of the method to invoke.\n\t * @param {...*} [args] The arguments to invoke the method with.\n\t * @returns {*} Returns the result of the invoked method.\n\t * @example\n\t *\n\t * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n\t *\n\t * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n\t * // => [2, 3]\n\t */\n\t var invoke = baseRest(baseInvoke);\n\t\n\t /**\n\t * Creates an array of the own enumerable property names of `object`.\n\t *\n\t * **Note:** Non-object values are coerced to objects. See the\n\t * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n\t * for more details.\n\t *\n\t * @static\n\t * @since 0.1.0\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to query.\n\t * @returns {Array} Returns the array of property names.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.keys(new Foo);\n\t * // => ['a', 'b'] (iteration order is not guaranteed)\n\t *\n\t * _.keys('hi');\n\t * // => ['0', '1']\n\t */\n\t function keys(object) {\n\t return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n\t }\n\t\n\t /**\n\t * Creates an array of the own and inherited enumerable property names of `object`.\n\t *\n\t * **Note:** Non-object values are coerced to objects.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.0.0\n\t * @category Object\n\t * @param {Object} object The object to query.\n\t * @returns {Array} Returns the array of property names.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.keysIn(new Foo);\n\t * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n\t */\n\t function keysIn(object) {\n\t return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n\t }\n\t\n\t /**\n\t * The opposite of `_.mapValues`; this method creates an object with the\n\t * same values as `object` and keys generated by running each own enumerable\n\t * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n\t * with three arguments: (value, key, object).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.8.0\n\t * @category Object\n\t * @param {Object} object The object to iterate over.\n\t * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n\t * @returns {Object} Returns the new mapped object.\n\t * @see _.mapValues\n\t * @example\n\t *\n\t * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n\t * return key + value;\n\t * });\n\t * // => { 'a1': 1, 'b2': 2 }\n\t */\n\t function mapKeys(object, iteratee) {\n\t var result = {};\n\t iteratee = getIteratee(iteratee, 3);\n\t\n\t baseForOwn(object, function(value, key, object) {\n\t baseAssignValue(result, iteratee(value, key, object), value);\n\t });\n\t return result;\n\t }\n\t\n\t /**\n\t * Creates an object with the same keys as `object` and values generated\n\t * by running each own enumerable string keyed property of `object` thru\n\t * `iteratee`. The iteratee is invoked with three arguments:\n\t * (value, key, object).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 2.4.0\n\t * @category Object\n\t * @param {Object} object The object to iterate over.\n\t * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n\t * @returns {Object} Returns the new mapped object.\n\t * @see _.mapKeys\n\t * @example\n\t *\n\t * var users = {\n\t * 'fred': { 'user': 'fred', 'age': 40 },\n\t * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n\t * };\n\t *\n\t * _.mapValues(users, function(o) { return o.age; });\n\t * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n\t *\n\t * // The `_.property` iteratee shorthand.\n\t * _.mapValues(users, 'age');\n\t * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n\t */\n\t function mapValues(object, iteratee) {\n\t var result = {};\n\t iteratee = getIteratee(iteratee, 3);\n\t\n\t baseForOwn(object, function(value, key, object) {\n\t baseAssignValue(result, key, iteratee(value, key, object));\n\t });\n\t return result;\n\t }\n\t\n\t /**\n\t * This method is like `_.assign` except that it recursively merges own and\n\t * inherited enumerable string keyed properties of source objects into the\n\t * destination object. Source properties that resolve to `undefined` are\n\t * skipped if a destination value exists. Array and plain object properties\n\t * are merged recursively. Other objects and value types are overridden by\n\t * assignment. Source objects are applied from left to right. Subsequent\n\t * sources overwrite property assignments of previous sources.\n\t *\n\t * **Note:** This method mutates `object`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.5.0\n\t * @category Object\n\t * @param {Object} object The destination object.\n\t * @param {...Object} [sources] The source objects.\n\t * @returns {Object} Returns `object`.\n\t * @example\n\t *\n\t * var object = {\n\t * 'a': [{ 'b': 2 }, { 'd': 4 }]\n\t * };\n\t *\n\t * var other = {\n\t * 'a': [{ 'c': 3 }, { 'e': 5 }]\n\t * };\n\t *\n\t * _.merge(object, other);\n\t * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n\t */\n\t var merge = createAssigner(function(object, source, srcIndex) {\n\t baseMerge(object, source, srcIndex);\n\t });\n\t\n\t /**\n\t * This method is like `_.merge` except that it accepts `customizer` which\n\t * is invoked to produce the merged values of the destination and source\n\t * properties. If `customizer` returns `undefined`, merging is handled by the\n\t * method instead. The `customizer` is invoked with six arguments:\n\t * (objValue, srcValue, key, object, source, stack).\n\t *\n\t * **Note:** This method mutates `object`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Object\n\t * @param {Object} object The destination object.\n\t * @param {...Object} sources The source objects.\n\t * @param {Function} customizer The function to customize assigned values.\n\t * @returns {Object} Returns `object`.\n\t * @example\n\t *\n\t * function customizer(objValue, srcValue) {\n\t * if (_.isArray(objValue)) {\n\t * return objValue.concat(srcValue);\n\t * }\n\t * }\n\t *\n\t * var object = { 'a': [1], 'b': [2] };\n\t * var other = { 'a': [3], 'b': [4] };\n\t *\n\t * _.mergeWith(object, other, customizer);\n\t * // => { 'a': [1, 3], 'b': [2, 4] }\n\t */\n\t var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n\t baseMerge(object, source, srcIndex, customizer);\n\t });\n\t\n\t /**\n\t * The opposite of `_.pick`; this method creates an object composed of the\n\t * own and inherited enumerable property paths of `object` that are not omitted.\n\t *\n\t * **Note:** This method is considerably slower than `_.pick`.\n\t *\n\t * @static\n\t * @since 0.1.0\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The source object.\n\t * @param {...(string|string[])} [paths] The property paths to omit.\n\t * @returns {Object} Returns the new object.\n\t * @example\n\t *\n\t * var object = { 'a': 1, 'b': '2', 'c': 3 };\n\t *\n\t * _.omit(object, ['a', 'c']);\n\t * // => { 'b': '2' }\n\t */\n\t var omit = flatRest(function(object, paths) {\n\t var result = {};\n\t if (object == null) {\n\t return result;\n\t }\n\t var isDeep = false;\n\t paths = arrayMap(paths, function(path) {\n\t path = castPath(path, object);\n\t isDeep || (isDeep = path.length > 1);\n\t return path;\n\t });\n\t copyObject(object, getAllKeysIn(object), result);\n\t if (isDeep) {\n\t result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n\t }\n\t var length = paths.length;\n\t while (length--) {\n\t baseUnset(result, paths[length]);\n\t }\n\t return result;\n\t });\n\t\n\t /**\n\t * The opposite of `_.pickBy`; this method creates an object composed of\n\t * the own and inherited enumerable string keyed properties of `object` that\n\t * `predicate` doesn't return truthy for. The predicate is invoked with two\n\t * arguments: (value, key).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Object\n\t * @param {Object} object The source object.\n\t * @param {Function} [predicate=_.identity] The function invoked per property.\n\t * @returns {Object} Returns the new object.\n\t * @example\n\t *\n\t * var object = { 'a': 1, 'b': '2', 'c': 3 };\n\t *\n\t * _.omitBy(object, _.isNumber);\n\t * // => { 'b': '2' }\n\t */\n\t function omitBy(object, predicate) {\n\t return pickBy(object, negate(getIteratee(predicate)));\n\t }\n\t\n\t /**\n\t * Creates an object composed of the picked `object` properties.\n\t *\n\t * @static\n\t * @since 0.1.0\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The source object.\n\t * @param {...(string|string[])} [paths] The property paths to pick.\n\t * @returns {Object} Returns the new object.\n\t * @example\n\t *\n\t * var object = { 'a': 1, 'b': '2', 'c': 3 };\n\t *\n\t * _.pick(object, ['a', 'c']);\n\t * // => { 'a': 1, 'c': 3 }\n\t */\n\t var pick = flatRest(function(object, paths) {\n\t return object == null ? {} : basePick(object, paths);\n\t });\n\t\n\t /**\n\t * Creates an object composed of the `object` properties `predicate` returns\n\t * truthy for. The predicate is invoked with two arguments: (value, key).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Object\n\t * @param {Object} object The source object.\n\t * @param {Function} [predicate=_.identity] The function invoked per property.\n\t * @returns {Object} Returns the new object.\n\t * @example\n\t *\n\t * var object = { 'a': 1, 'b': '2', 'c': 3 };\n\t *\n\t * _.pickBy(object, _.isNumber);\n\t * // => { 'a': 1, 'c': 3 }\n\t */\n\t function pickBy(object, predicate) {\n\t if (object == null) {\n\t return {};\n\t }\n\t var props = arrayMap(getAllKeysIn(object), function(prop) {\n\t return [prop];\n\t });\n\t predicate = getIteratee(predicate);\n\t return basePickBy(object, props, function(value, path) {\n\t return predicate(value, path[0]);\n\t });\n\t }\n\t\n\t /**\n\t * This method is like `_.get` except that if the resolved value is a\n\t * function it's invoked with the `this` binding of its parent object and\n\t * its result is returned.\n\t *\n\t * @static\n\t * @since 0.1.0\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to query.\n\t * @param {Array|string} path The path of the property to resolve.\n\t * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n\t * @returns {*} Returns the resolved value.\n\t * @example\n\t *\n\t * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n\t *\n\t * _.result(object, 'a[0].b.c1');\n\t * // => 3\n\t *\n\t * _.result(object, 'a[0].b.c2');\n\t * // => 4\n\t *\n\t * _.result(object, 'a[0].b.c3', 'default');\n\t * // => 'default'\n\t *\n\t * _.result(object, 'a[0].b.c3', _.constant('default'));\n\t * // => 'default'\n\t */\n\t function result(object, path, defaultValue) {\n\t path = castPath(path, object);\n\t\n\t var index = -1,\n\t length = path.length;\n\t\n\t // Ensure the loop is entered when path is empty.\n\t if (!length) {\n\t length = 1;\n\t object = undefined;\n\t }\n\t while (++index < length) {\n\t var value = object == null ? undefined : object[toKey(path[index])];\n\t if (value === undefined) {\n\t index = length;\n\t value = defaultValue;\n\t }\n\t object = isFunction(value) ? value.call(object) : value;\n\t }\n\t return object;\n\t }\n\t\n\t /**\n\t * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n\t * it's created. Arrays are created for missing index properties while objects\n\t * are created for all other missing properties. Use `_.setWith` to customize\n\t * `path` creation.\n\t *\n\t * **Note:** This method mutates `object`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.7.0\n\t * @category Object\n\t * @param {Object} object The object to modify.\n\t * @param {Array|string} path The path of the property to set.\n\t * @param {*} value The value to set.\n\t * @returns {Object} Returns `object`.\n\t * @example\n\t *\n\t * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n\t *\n\t * _.set(object, 'a[0].b.c', 4);\n\t * console.log(object.a[0].b.c);\n\t * // => 4\n\t *\n\t * _.set(object, ['x', '0', 'y', 'z'], 5);\n\t * console.log(object.x[0].y.z);\n\t * // => 5\n\t */\n\t function set(object, path, value) {\n\t return object == null ? object : baseSet(object, path, value);\n\t }\n\t\n\t /**\n\t * This method is like `_.set` except that it accepts `customizer` which is\n\t * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n\t * path creation is handled by the method instead. The `customizer` is invoked\n\t * with three arguments: (nsValue, key, nsObject).\n\t *\n\t * **Note:** This method mutates `object`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Object\n\t * @param {Object} object The object to modify.\n\t * @param {Array|string} path The path of the property to set.\n\t * @param {*} value The value to set.\n\t * @param {Function} [customizer] The function to customize assigned values.\n\t * @returns {Object} Returns `object`.\n\t * @example\n\t *\n\t * var object = {};\n\t *\n\t * _.setWith(object, '[0][1]', 'a', Object);\n\t * // => { '0': { '1': 'a' } }\n\t */\n\t function setWith(object, path, value, customizer) {\n\t customizer = typeof customizer == 'function' ? customizer : undefined;\n\t return object == null ? object : baseSet(object, path, value, customizer);\n\t }\n\t\n\t /**\n\t * Creates an array of own enumerable string keyed-value pairs for `object`\n\t * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n\t * entries are returned.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @alias entries\n\t * @category Object\n\t * @param {Object} object The object to query.\n\t * @returns {Array} Returns the key-value pairs.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.toPairs(new Foo);\n\t * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n\t */\n\t var toPairs = createToPairs(keys);\n\t\n\t /**\n\t * Creates an array of own and inherited enumerable string keyed-value pairs\n\t * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n\t * or set, its entries are returned.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @alias entriesIn\n\t * @category Object\n\t * @param {Object} object The object to query.\n\t * @returns {Array} Returns the key-value pairs.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.toPairsIn(new Foo);\n\t * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n\t */\n\t var toPairsIn = createToPairs(keysIn);\n\t\n\t /**\n\t * An alternative to `_.reduce`; this method transforms `object` to a new\n\t * `accumulator` object which is the result of running each of its own\n\t * enumerable string keyed properties thru `iteratee`, with each invocation\n\t * potentially mutating the `accumulator` object. If `accumulator` is not\n\t * provided, a new object with the same `[[Prototype]]` will be used. The\n\t * iteratee is invoked with four arguments: (accumulator, value, key, object).\n\t * Iteratee functions may exit iteration early by explicitly returning `false`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 1.3.0\n\t * @category Object\n\t * @param {Object} object The object to iterate over.\n\t * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n\t * @param {*} [accumulator] The custom accumulator value.\n\t * @returns {*} Returns the accumulated value.\n\t * @example\n\t *\n\t * _.transform([2, 3, 4], function(result, n) {\n\t * result.push(n *= n);\n\t * return n % 2 == 0;\n\t * }, []);\n\t * // => [4, 9]\n\t *\n\t * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n\t * (result[value] || (result[value] = [])).push(key);\n\t * }, {});\n\t * // => { '1': ['a', 'c'], '2': ['b'] }\n\t */\n\t function transform(object, iteratee, accumulator) {\n\t var isArr = isArray(object),\n\t isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\t\n\t iteratee = getIteratee(iteratee, 4);\n\t if (accumulator == null) {\n\t var Ctor = object && object.constructor;\n\t if (isArrLike) {\n\t accumulator = isArr ? new Ctor : [];\n\t }\n\t else if (isObject(object)) {\n\t accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n\t }\n\t else {\n\t accumulator = {};\n\t }\n\t }\n\t (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n\t return iteratee(accumulator, value, index, object);\n\t });\n\t return accumulator;\n\t }\n\t\n\t /**\n\t * Removes the property at `path` of `object`.\n\t *\n\t * **Note:** This method mutates `object`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Object\n\t * @param {Object} object The object to modify.\n\t * @param {Array|string} path The path of the property to unset.\n\t * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n\t * @example\n\t *\n\t * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n\t * _.unset(object, 'a[0].b.c');\n\t * // => true\n\t *\n\t * console.log(object);\n\t * // => { 'a': [{ 'b': {} }] };\n\t *\n\t * _.unset(object, ['a', '0', 'b', 'c']);\n\t * // => true\n\t *\n\t * console.log(object);\n\t * // => { 'a': [{ 'b': {} }] };\n\t */\n\t function unset(object, path) {\n\t return object == null ? true : baseUnset(object, path);\n\t }\n\t\n\t /**\n\t * This method is like `_.set` except that accepts `updater` to produce the\n\t * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n\t * is invoked with one argument: (value).\n\t *\n\t * **Note:** This method mutates `object`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.6.0\n\t * @category Object\n\t * @param {Object} object The object to modify.\n\t * @param {Array|string} path The path of the property to set.\n\t * @param {Function} updater The function to produce the updated value.\n\t * @returns {Object} Returns `object`.\n\t * @example\n\t *\n\t * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n\t *\n\t * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n\t * console.log(object.a[0].b.c);\n\t * // => 9\n\t *\n\t * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n\t * console.log(object.x[0].y.z);\n\t * // => 0\n\t */\n\t function update(object, path, updater) {\n\t return object == null ? object : baseUpdate(object, path, castFunction(updater));\n\t }\n\t\n\t /**\n\t * This method is like `_.update` except that it accepts `customizer` which is\n\t * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n\t * path creation is handled by the method instead. The `customizer` is invoked\n\t * with three arguments: (nsValue, key, nsObject).\n\t *\n\t * **Note:** This method mutates `object`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.6.0\n\t * @category Object\n\t * @param {Object} object The object to modify.\n\t * @param {Array|string} path The path of the property to set.\n\t * @param {Function} updater The function to produce the updated value.\n\t * @param {Function} [customizer] The function to customize assigned values.\n\t * @returns {Object} Returns `object`.\n\t * @example\n\t *\n\t * var object = {};\n\t *\n\t * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n\t * // => { '0': { '1': 'a' } }\n\t */\n\t function updateWith(object, path, updater, customizer) {\n\t customizer = typeof customizer == 'function' ? customizer : undefined;\n\t return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n\t }\n\t\n\t /**\n\t * Creates an array of the own enumerable string keyed property values of `object`.\n\t *\n\t * **Note:** Non-object values are coerced to objects.\n\t *\n\t * @static\n\t * @since 0.1.0\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to query.\n\t * @returns {Array} Returns the array of property values.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.values(new Foo);\n\t * // => [1, 2] (iteration order is not guaranteed)\n\t *\n\t * _.values('hi');\n\t * // => ['h', 'i']\n\t */\n\t function values(object) {\n\t return object == null ? [] : baseValues(object, keys(object));\n\t }\n\t\n\t /**\n\t * Creates an array of the own and inherited enumerable string keyed property\n\t * values of `object`.\n\t *\n\t * **Note:** Non-object values are coerced to objects.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.0.0\n\t * @category Object\n\t * @param {Object} object The object to query.\n\t * @returns {Array} Returns the array of property values.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.valuesIn(new Foo);\n\t * // => [1, 2, 3] (iteration order is not guaranteed)\n\t */\n\t function valuesIn(object) {\n\t return object == null ? [] : baseValues(object, keysIn(object));\n\t }\n\t\n\t /*------------------------------------------------------------------------*/\n\t\n\t /**\n\t * Clamps `number` within the inclusive `lower` and `upper` bounds.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Number\n\t * @param {number} number The number to clamp.\n\t * @param {number} [lower] The lower bound.\n\t * @param {number} upper The upper bound.\n\t * @returns {number} Returns the clamped number.\n\t * @example\n\t *\n\t * _.clamp(-10, -5, 5);\n\t * // => -5\n\t *\n\t * _.clamp(10, -5, 5);\n\t * // => 5\n\t */\n\t function clamp(number, lower, upper) {\n\t if (upper === undefined) {\n\t upper = lower;\n\t lower = undefined;\n\t }\n\t if (upper !== undefined) {\n\t upper = toNumber(upper);\n\t upper = upper === upper ? upper : 0;\n\t }\n\t if (lower !== undefined) {\n\t lower = toNumber(lower);\n\t lower = lower === lower ? lower : 0;\n\t }\n\t return baseClamp(toNumber(number), lower, upper);\n\t }\n\t\n\t /**\n\t * Checks if `n` is between `start` and up to, but not including, `end`. If\n\t * `end` is not specified, it's set to `start` with `start` then set to `0`.\n\t * If `start` is greater than `end` the params are swapped to support\n\t * negative ranges.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.3.0\n\t * @category Number\n\t * @param {number} number The number to check.\n\t * @param {number} [start=0] The start of the range.\n\t * @param {number} end The end of the range.\n\t * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n\t * @see _.range, _.rangeRight\n\t * @example\n\t *\n\t * _.inRange(3, 2, 4);\n\t * // => true\n\t *\n\t * _.inRange(4, 8);\n\t * // => true\n\t *\n\t * _.inRange(4, 2);\n\t * // => false\n\t *\n\t * _.inRange(2, 2);\n\t * // => false\n\t *\n\t * _.inRange(1.2, 2);\n\t * // => true\n\t *\n\t * _.inRange(5.2, 4);\n\t * // => false\n\t *\n\t * _.inRange(-3, -2, -6);\n\t * // => true\n\t */\n\t function inRange(number, start, end) {\n\t start = toFinite(start);\n\t if (end === undefined) {\n\t end = start;\n\t start = 0;\n\t } else {\n\t end = toFinite(end);\n\t }\n\t number = toNumber(number);\n\t return baseInRange(number, start, end);\n\t }\n\t\n\t /**\n\t * Produces a random number between the inclusive `lower` and `upper` bounds.\n\t * If only one argument is provided a number between `0` and the given number\n\t * is returned. If `floating` is `true`, or either `lower` or `upper` are\n\t * floats, a floating-point number is returned instead of an integer.\n\t *\n\t * **Note:** JavaScript follows the IEEE-754 standard for resolving\n\t * floating-point values which can produce unexpected results.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.7.0\n\t * @category Number\n\t * @param {number} [lower=0] The lower bound.\n\t * @param {number} [upper=1] The upper bound.\n\t * @param {boolean} [floating] Specify returning a floating-point number.\n\t * @returns {number} Returns the random number.\n\t * @example\n\t *\n\t * _.random(0, 5);\n\t * // => an integer between 0 and 5\n\t *\n\t * _.random(5);\n\t * // => also an integer between 0 and 5\n\t *\n\t * _.random(5, true);\n\t * // => a floating-point number between 0 and 5\n\t *\n\t * _.random(1.2, 5.2);\n\t * // => a floating-point number between 1.2 and 5.2\n\t */\n\t function random(lower, upper, floating) {\n\t if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n\t upper = floating = undefined;\n\t }\n\t if (floating === undefined) {\n\t if (typeof upper == 'boolean') {\n\t floating = upper;\n\t upper = undefined;\n\t }\n\t else if (typeof lower == 'boolean') {\n\t floating = lower;\n\t lower = undefined;\n\t }\n\t }\n\t if (lower === undefined && upper === undefined) {\n\t lower = 0;\n\t upper = 1;\n\t }\n\t else {\n\t lower = toFinite(lower);\n\t if (upper === undefined) {\n\t upper = lower;\n\t lower = 0;\n\t } else {\n\t upper = toFinite(upper);\n\t }\n\t }\n\t if (lower > upper) {\n\t var temp = lower;\n\t lower = upper;\n\t upper = temp;\n\t }\n\t if (floating || lower % 1 || upper % 1) {\n\t var rand = nativeRandom();\n\t return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n\t }\n\t return baseRandom(lower, upper);\n\t }\n\t\n\t /*------------------------------------------------------------------------*/\n\t\n\t /**\n\t * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.0.0\n\t * @category String\n\t * @param {string} [string=''] The string to convert.\n\t * @returns {string} Returns the camel cased string.\n\t * @example\n\t *\n\t * _.camelCase('Foo Bar');\n\t * // => 'fooBar'\n\t *\n\t * _.camelCase('--foo-bar--');\n\t * // => 'fooBar'\n\t *\n\t * _.camelCase('__FOO_BAR__');\n\t * // => 'fooBar'\n\t */\n\t var camelCase = createCompounder(function(result, word, index) {\n\t word = word.toLowerCase();\n\t return result + (index ? capitalize(word) : word);\n\t });\n\t\n\t /**\n\t * Converts the first character of `string` to upper case and the remaining\n\t * to lower case.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.0.0\n\t * @category String\n\t * @param {string} [string=''] The string to capitalize.\n\t * @returns {string} Returns the capitalized string.\n\t * @example\n\t *\n\t * _.capitalize('FRED');\n\t * // => 'Fred'\n\t */\n\t function capitalize(string) {\n\t return upperFirst(toString(string).toLowerCase());\n\t }\n\t\n\t /**\n\t * Deburrs `string` by converting\n\t * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n\t * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n\t * letters to basic Latin letters and removing\n\t * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.0.0\n\t * @category String\n\t * @param {string} [string=''] The string to deburr.\n\t * @returns {string} Returns the deburred string.\n\t * @example\n\t *\n\t * _.deburr('déjà vu');\n\t * // => 'deja vu'\n\t */\n\t function deburr(string) {\n\t string = toString(string);\n\t return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n\t }\n\t\n\t /**\n\t * Checks if `string` ends with the given target string.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.0.0\n\t * @category String\n\t * @param {string} [string=''] The string to inspect.\n\t * @param {string} [target] The string to search for.\n\t * @param {number} [position=string.length] The position to search up to.\n\t * @returns {boolean} Returns `true` if `string` ends with `target`,\n\t * else `false`.\n\t * @example\n\t *\n\t * _.endsWith('abc', 'c');\n\t * // => true\n\t *\n\t * _.endsWith('abc', 'b');\n\t * // => false\n\t *\n\t * _.endsWith('abc', 'b', 2);\n\t * // => true\n\t */\n\t function endsWith(string, target, position) {\n\t string = toString(string);\n\t target = baseToString(target);\n\t\n\t var length = string.length;\n\t position = position === undefined\n\t ? length\n\t : baseClamp(toInteger(position), 0, length);\n\t\n\t var end = position;\n\t position -= target.length;\n\t return position >= 0 && string.slice(position, end) == target;\n\t }\n\t\n\t /**\n\t * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n\t * corresponding HTML entities.\n\t *\n\t * **Note:** No other characters are escaped. To escape additional\n\t * characters use a third-party library like [_he_](https://mths.be/he).\n\t *\n\t * Though the \">\" character is escaped for symmetry, characters like\n\t * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n\t * unless they're part of a tag or unquoted attribute value. See\n\t * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n\t * (under \"semi-related fun fact\") for more details.\n\t *\n\t * When working with HTML you should always\n\t * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n\t * XSS vectors.\n\t *\n\t * @static\n\t * @since 0.1.0\n\t * @memberOf _\n\t * @category String\n\t * @param {string} [string=''] The string to escape.\n\t * @returns {string} Returns the escaped string.\n\t * @example\n\t *\n\t * _.escape('fred, barney, & pebbles');\n\t * // => 'fred, barney, & pebbles'\n\t */\n\t function escape(string) {\n\t string = toString(string);\n\t return (string && reHasUnescapedHtml.test(string))\n\t ? string.replace(reUnescapedHtml, escapeHtmlChar)\n\t : string;\n\t }\n\t\n\t /**\n\t * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n\t * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.0.0\n\t * @category String\n\t * @param {string} [string=''] The string to escape.\n\t * @returns {string} Returns the escaped string.\n\t * @example\n\t *\n\t * _.escapeRegExp('[lodash](https://lodash.com/)');\n\t * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n\t */\n\t function escapeRegExp(string) {\n\t string = toString(string);\n\t return (string && reHasRegExpChar.test(string))\n\t ? string.replace(reRegExpChar, '\\\\$&')\n\t : string;\n\t }\n\t\n\t /**\n\t * Converts `string` to\n\t * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.0.0\n\t * @category String\n\t * @param {string} [string=''] The string to convert.\n\t * @returns {string} Returns the kebab cased string.\n\t * @example\n\t *\n\t * _.kebabCase('Foo Bar');\n\t * // => 'foo-bar'\n\t *\n\t * _.kebabCase('fooBar');\n\t * // => 'foo-bar'\n\t *\n\t * _.kebabCase('__FOO_BAR__');\n\t * // => 'foo-bar'\n\t */\n\t var kebabCase = createCompounder(function(result, word, index) {\n\t return result + (index ? '-' : '') + word.toLowerCase();\n\t });\n\t\n\t /**\n\t * Converts `string`, as space separated words, to lower case.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category String\n\t * @param {string} [string=''] The string to convert.\n\t * @returns {string} Returns the lower cased string.\n\t * @example\n\t *\n\t * _.lowerCase('--Foo-Bar--');\n\t * // => 'foo bar'\n\t *\n\t * _.lowerCase('fooBar');\n\t * // => 'foo bar'\n\t *\n\t * _.lowerCase('__FOO_BAR__');\n\t * // => 'foo bar'\n\t */\n\t var lowerCase = createCompounder(function(result, word, index) {\n\t return result + (index ? ' ' : '') + word.toLowerCase();\n\t });\n\t\n\t /**\n\t * Converts the first character of `string` to lower case.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category String\n\t * @param {string} [string=''] The string to convert.\n\t * @returns {string} Returns the converted string.\n\t * @example\n\t *\n\t * _.lowerFirst('Fred');\n\t * // => 'fred'\n\t *\n\t * _.lowerFirst('FRED');\n\t * // => 'fRED'\n\t */\n\t var lowerFirst = createCaseFirst('toLowerCase');\n\t\n\t /**\n\t * Pads `string` on the left and right sides if it's shorter than `length`.\n\t * Padding characters are truncated if they can't be evenly divided by `length`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.0.0\n\t * @category String\n\t * @param {string} [string=''] The string to pad.\n\t * @param {number} [length=0] The padding length.\n\t * @param {string} [chars=' '] The string used as padding.\n\t * @returns {string} Returns the padded string.\n\t * @example\n\t *\n\t * _.pad('abc', 8);\n\t * // => ' abc '\n\t *\n\t * _.pad('abc', 8, '_-');\n\t * // => '_-abc_-_'\n\t *\n\t * _.pad('abc', 3);\n\t * // => 'abc'\n\t */\n\t function pad(string, length, chars) {\n\t string = toString(string);\n\t length = toInteger(length);\n\t\n\t var strLength = length ? stringSize(string) : 0;\n\t if (!length || strLength >= length) {\n\t return string;\n\t }\n\t var mid = (length - strLength) / 2;\n\t return (\n\t createPadding(nativeFloor(mid), chars) +\n\t string +\n\t createPadding(nativeCeil(mid), chars)\n\t );\n\t }\n\t\n\t /**\n\t * Pads `string` on the right side if it's shorter than `length`. Padding\n\t * characters are truncated if they exceed `length`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category String\n\t * @param {string} [string=''] The string to pad.\n\t * @param {number} [length=0] The padding length.\n\t * @param {string} [chars=' '] The string used as padding.\n\t * @returns {string} Returns the padded string.\n\t * @example\n\t *\n\t * _.padEnd('abc', 6);\n\t * // => 'abc '\n\t *\n\t * _.padEnd('abc', 6, '_-');\n\t * // => 'abc_-_'\n\t *\n\t * _.padEnd('abc', 3);\n\t * // => 'abc'\n\t */\n\t function padEnd(string, length, chars) {\n\t string = toString(string);\n\t length = toInteger(length);\n\t\n\t var strLength = length ? stringSize(string) : 0;\n\t return (length && strLength < length)\n\t ? (string + createPadding(length - strLength, chars))\n\t : string;\n\t }\n\t\n\t /**\n\t * Pads `string` on the left side if it's shorter than `length`. Padding\n\t * characters are truncated if they exceed `length`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category String\n\t * @param {string} [string=''] The string to pad.\n\t * @param {number} [length=0] The padding length.\n\t * @param {string} [chars=' '] The string used as padding.\n\t * @returns {string} Returns the padded string.\n\t * @example\n\t *\n\t * _.padStart('abc', 6);\n\t * // => ' abc'\n\t *\n\t * _.padStart('abc', 6, '_-');\n\t * // => '_-_abc'\n\t *\n\t * _.padStart('abc', 3);\n\t * // => 'abc'\n\t */\n\t function padStart(string, length, chars) {\n\t string = toString(string);\n\t length = toInteger(length);\n\t\n\t var strLength = length ? stringSize(string) : 0;\n\t return (length && strLength < length)\n\t ? (createPadding(length - strLength, chars) + string)\n\t : string;\n\t }\n\t\n\t /**\n\t * Converts `string` to an integer of the specified radix. If `radix` is\n\t * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n\t * hexadecimal, in which case a `radix` of `16` is used.\n\t *\n\t * **Note:** This method aligns with the\n\t * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 1.1.0\n\t * @category String\n\t * @param {string} string The string to convert.\n\t * @param {number} [radix=10] The radix to interpret `value` by.\n\t * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n\t * @returns {number} Returns the converted integer.\n\t * @example\n\t *\n\t * _.parseInt('08');\n\t * // => 8\n\t *\n\t * _.map(['6', '08', '10'], _.parseInt);\n\t * // => [6, 8, 10]\n\t */\n\t function parseInt(string, radix, guard) {\n\t if (guard || radix == null) {\n\t radix = 0;\n\t } else if (radix) {\n\t radix = +radix;\n\t }\n\t return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n\t }\n\t\n\t /**\n\t * Repeats the given string `n` times.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.0.0\n\t * @category String\n\t * @param {string} [string=''] The string to repeat.\n\t * @param {number} [n=1] The number of times to repeat the string.\n\t * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n\t * @returns {string} Returns the repeated string.\n\t * @example\n\t *\n\t * _.repeat('*', 3);\n\t * // => '***'\n\t *\n\t * _.repeat('abc', 2);\n\t * // => 'abcabc'\n\t *\n\t * _.repeat('abc', 0);\n\t * // => ''\n\t */\n\t function repeat(string, n, guard) {\n\t if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n\t n = 1;\n\t } else {\n\t n = toInteger(n);\n\t }\n\t return baseRepeat(toString(string), n);\n\t }\n\t\n\t /**\n\t * Replaces matches for `pattern` in `string` with `replacement`.\n\t *\n\t * **Note:** This method is based on\n\t * [`String#replace`](https://mdn.io/String/replace).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category String\n\t * @param {string} [string=''] The string to modify.\n\t * @param {RegExp|string} pattern The pattern to replace.\n\t * @param {Function|string} replacement The match replacement.\n\t * @returns {string} Returns the modified string.\n\t * @example\n\t *\n\t * _.replace('Hi Fred', 'Fred', 'Barney');\n\t * // => 'Hi Barney'\n\t */\n\t function replace() {\n\t var args = arguments,\n\t string = toString(args[0]);\n\t\n\t return args.length < 3 ? string : string.replace(args[1], args[2]);\n\t }\n\t\n\t /**\n\t * Converts `string` to\n\t * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.0.0\n\t * @category String\n\t * @param {string} [string=''] The string to convert.\n\t * @returns {string} Returns the snake cased string.\n\t * @example\n\t *\n\t * _.snakeCase('Foo Bar');\n\t * // => 'foo_bar'\n\t *\n\t * _.snakeCase('fooBar');\n\t * // => 'foo_bar'\n\t *\n\t * _.snakeCase('--FOO-BAR--');\n\t * // => 'foo_bar'\n\t */\n\t var snakeCase = createCompounder(function(result, word, index) {\n\t return result + (index ? '_' : '') + word.toLowerCase();\n\t });\n\t\n\t /**\n\t * Splits `string` by `separator`.\n\t *\n\t * **Note:** This method is based on\n\t * [`String#split`](https://mdn.io/String/split).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category String\n\t * @param {string} [string=''] The string to split.\n\t * @param {RegExp|string} separator The separator pattern to split by.\n\t * @param {number} [limit] The length to truncate results to.\n\t * @returns {Array} Returns the string segments.\n\t * @example\n\t *\n\t * _.split('a-b-c', '-', 2);\n\t * // => ['a', 'b']\n\t */\n\t function split(string, separator, limit) {\n\t if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n\t separator = limit = undefined;\n\t }\n\t limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n\t if (!limit) {\n\t return [];\n\t }\n\t string = toString(string);\n\t if (string && (\n\t typeof separator == 'string' ||\n\t (separator != null && !isRegExp(separator))\n\t )) {\n\t separator = baseToString(separator);\n\t if (!separator && hasUnicode(string)) {\n\t return castSlice(stringToArray(string), 0, limit);\n\t }\n\t }\n\t return string.split(separator, limit);\n\t }\n\t\n\t /**\n\t * Converts `string` to\n\t * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.1.0\n\t * @category String\n\t * @param {string} [string=''] The string to convert.\n\t * @returns {string} Returns the start cased string.\n\t * @example\n\t *\n\t * _.startCase('--foo-bar--');\n\t * // => 'Foo Bar'\n\t *\n\t * _.startCase('fooBar');\n\t * // => 'Foo Bar'\n\t *\n\t * _.startCase('__FOO_BAR__');\n\t * // => 'FOO BAR'\n\t */\n\t var startCase = createCompounder(function(result, word, index) {\n\t return result + (index ? ' ' : '') + upperFirst(word);\n\t });\n\t\n\t /**\n\t * Checks if `string` starts with the given target string.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.0.0\n\t * @category String\n\t * @param {string} [string=''] The string to inspect.\n\t * @param {string} [target] The string to search for.\n\t * @param {number} [position=0] The position to search from.\n\t * @returns {boolean} Returns `true` if `string` starts with `target`,\n\t * else `false`.\n\t * @example\n\t *\n\t * _.startsWith('abc', 'a');\n\t * // => true\n\t *\n\t * _.startsWith('abc', 'b');\n\t * // => false\n\t *\n\t * _.startsWith('abc', 'b', 1);\n\t * // => true\n\t */\n\t function startsWith(string, target, position) {\n\t string = toString(string);\n\t position = position == null\n\t ? 0\n\t : baseClamp(toInteger(position), 0, string.length);\n\t\n\t target = baseToString(target);\n\t return string.slice(position, position + target.length) == target;\n\t }\n\t\n\t /**\n\t * Creates a compiled template function that can interpolate data properties\n\t * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n\t * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n\t * properties may be accessed as free variables in the template. If a setting\n\t * object is given, it takes precedence over `_.templateSettings` values.\n\t *\n\t * **Note:** In the development build `_.template` utilizes\n\t * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n\t * for easier debugging.\n\t *\n\t * For more information on precompiling templates see\n\t * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n\t *\n\t * For more information on Chrome extension sandboxes see\n\t * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n\t *\n\t * @static\n\t * @since 0.1.0\n\t * @memberOf _\n\t * @category String\n\t * @param {string} [string=''] The template string.\n\t * @param {Object} [options={}] The options object.\n\t * @param {RegExp} [options.escape=_.templateSettings.escape]\n\t * The HTML \"escape\" delimiter.\n\t * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n\t * The \"evaluate\" delimiter.\n\t * @param {Object} [options.imports=_.templateSettings.imports]\n\t * An object to import into the template as free variables.\n\t * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n\t * The \"interpolate\" delimiter.\n\t * @param {string} [options.sourceURL='lodash.templateSources[n]']\n\t * The sourceURL of the compiled template.\n\t * @param {string} [options.variable='obj']\n\t * The data object variable name.\n\t * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n\t * @returns {Function} Returns the compiled template function.\n\t * @example\n\t *\n\t * // Use the \"interpolate\" delimiter to create a compiled template.\n\t * var compiled = _.template('hello <%= user %>!');\n\t * compiled({ 'user': 'fred' });\n\t * // => 'hello fred!'\n\t *\n\t * // Use the HTML \"escape\" delimiter to escape data property values.\n\t * var compiled = _.template('<%- value %>');\n\t * compiled({ 'value': '\n\t */\n\t $('.Page').append((0, _StringUtils.unescapeScript)(pageCustomScript));\n\t }\n\t\n\t // TODO: Deprecate this code block when CSS position: sticky is supported all browsers\n\t if (window && this._isStickyHeader() && this._hasHeader()) {\n\t if (!(0, _DOMUtils.isPositionStickySupported)()) {\n\t var header = document.getElementById('header');\n\t var page = document.getElementById('page');\n\t\n\t var onScrollForStickyHeader = function onScrollForStickyHeader() {\n\t var pageYOffset = window.pageYOffset;\n\t var paddingTop = header.getBoundingClientRect().top + header.offsetHeight - pageYOffset;\n\t\n\t if (getComputedStyle(header).position !== 'fixed') {\n\t header.style.position = 'fixed';\n\t if (paddingTop > 0) {\n\t page.style.paddingTop = paddingTop + 'px';\n\t }\n\t }\n\t };\n\t\n\t window.addEventListener('scroll', onScrollForStickyHeader);\n\t window.addEventListener('resize', onScrollForStickyHeader);\n\t\n\t this._stickyHeaderOnScrollListener = onScrollForStickyHeader;\n\t }\n\t }\n\t }\n\t }, {\n\t key: 'componentWillUnmount',\n\t value: function componentWillUnmount() {\n\t var flux = this.context.flux;\n\t\n\t flux.getActions('Helmet').update({ title: '' });\n\t\n\t this._setContentClassification(flux, '');\n\t this._setPageType(flux, '');\n\t\n\t // TODO: Deprecate this code block when CSS position: sticky is supported all browsers\n\t if (this.stickyHeaderOnScrollListener) {\n\t window.removeEventListener('scroll', this._stickyHeaderOnScrollListener);\n\t window.removeEventListener('resize', this._stickyHeaderOnScrollListener);\n\t }\n\t }\n\t }, {\n\t key: '_setContentClassification',\n\t value: function _setContentClassification(flux, contentClassification) {\n\t flux.getActions('ContentClassification').updateRouteContentClassification(contentClassification);\n\t }\n\t }, {\n\t key: '_setMetaTags',\n\t value: function _setMetaTags() {\n\t var configPath = this.props.configPath;\n\t var _context3 = this.context,\n\t flux = _context3.flux,\n\t config = _context3.config;\n\t\n\t var metaTags = _lodash2.default.get(config, configPath + '.meta', {});\n\t\n\t if (!_lodash2.default.isEmpty(metaTags)) {\n\t var title = metaTags.title,\n\t description = metaTags.description,\n\t keywords = metaTags.keywords,\n\t robots = metaTags.robots;\n\t\n\t\n\t var metas = (0, _SeoUtils.buildMetaTags)({ title: title, description: description, keywords: keywords, robots: robots });\n\t flux.getActions('Helmet').updateMetas({ metas: metas });\n\t }\n\t }\n\t }, {\n\t key: '_setPageType',\n\t value: function _setPageType(flux, pageType) {\n\t flux.getActions('Advertisement').updateRouteTargetingKeyValue('wnpt', pageType);\n\t }\n\t\n\t // TODO: Remove once the weather page no longer has to be in iframe.\n\t\n\t }, {\n\t key: '_isInIframe',\n\t value: function _isInIframe() {\n\t var ret = void 0;\n\t\n\t try {\n\t ret = window.self !== window.top;\n\t } catch (e) {\n\t ret = true;\n\t }\n\t\n\t return ret;\n\t }\n\t }, {\n\t key: '_setGlobalTrackingVar',\n\t value: function _setGlobalTrackingVar(affiliateName, affiliateId) {\n\t var wngPageInfo = typeof window !== 'undefined' && window[\"wng_pageInfo\"] || {};\n\t\n\t wngPageInfo.affiliateName = affiliateName;\n\t wngPageInfo.affiliateId = affiliateId;\n\t\n\t //Set the new wng_pageInfo variable for use by external parties\n\t return wngPageInfo;\n\t }\n\t }, {\n\t key: '_removeGlobalTrackingVar',\n\t value: function _removeGlobalTrackingVar() {\n\t var wngPageInfo = window && window[\"wng_pageInfo\"] || {};\n\t\n\t delete wngPageInfo.affiliateName;\n\t delete wngPageInfo.affiliateId;\n\t\n\t return wngPageInfo;\n\t }\n\t }, {\n\t key: '_isStickyHeader',\n\t value: function _isStickyHeader() {\n\t var configPath = this.props.configPath;\n\t var config = this.context.config;\n\t var _config$appOptions = config.appOptions;\n\t _config$appOptions = _config$appOptions === undefined ? {} : _config$appOptions;\n\t var appHeaderSticky = _config$appOptions.headerSticky;\n\t\n\t var pageHeaderSticky = _lodash2.default.get(config, configPath + '.headerSticky');\n\t\n\t return pageHeaderSticky === undefined ? appHeaderSticky : pageHeaderSticky;\n\t }\n\t }, {\n\t key: '_hasHeader',\n\t value: function _hasHeader() {\n\t var configPath = this.props.configPath;\n\t var config = this.context.config;\n\t\n\t var _$get = _lodash2.default.get(config, configPath, {}),\n\t header = _$get.header;\n\t\n\t return !(_lodash2.default.isArray(header) && header.length === 0);\n\t }\n\t }, {\n\t key: 'render',\n\t value: function render() {\n\t var _props = this.props,\n\t params = _props.params,\n\t configPath = _props.configPath,\n\t body = _props.body;\n\t var _context4 = this.context,\n\t _context4$config = _context4.config;\n\t _context4$config = _context4$config === undefined ? {} : _context4$config;\n\t var _context4$config$affi = _context4$config.affiliate;\n\t _context4$config$affi = _context4$config$affi === undefined ? {} : _context4$config$affi;\n\t var _context4$config$affi2 = _context4$config$affi.name,\n\t affiliateName = _context4$config$affi2 === undefined ? '' : _context4$config$affi2,\n\t config = _context4.config;\n\t\n\t\n\t var enableStickyHeader = this._isStickyHeader() && this._hasHeader();\n\t\n\t var _config$appOptions2 = config.appOptions;\n\t _config$appOptions2 = _config$appOptions2 === undefined ? {} : _config$appOptions2;\n\t var appGutterSpacing = _config$appOptions2.gutterSpacing;\n\t\n\t var pageGutterSpacing = _lodash2.default.get(config, configPath + '.gutterSpacing');\n\t var gutterSpacing = pageGutterSpacing || appGutterSpacing;\n\t\n\t var pageCustomStyle = _lodash2.default.get(config, configPath + '.customStyle');\n\t\n\t var _$get2 = _lodash2.default.get(config, configPath, {}),\n\t header = _$get2.header,\n\t footer = _$get2.footer;\n\t\n\t var headerConfigPath = 'header';\n\t var footerConfigPath = 'footer';\n\t\n\t if (header) {\n\t headerConfigPath = configPath + '.' + headerConfigPath;\n\t } else {\n\t header = _lodash2.default.get(config, headerConfigPath, []);\n\t }\n\t\n\t // WEB-4964: decode header menu\n\t header = decodeTextOfMenuItem(header, '[0].cols[0].components');\n\t\n\t if (footer) {\n\t footerConfigPath = configPath + '.' + footerConfigPath;\n\t } else {\n\t footer = _lodash2.default.get(config, footerConfigPath, []);\n\t }\n\t\n\t // WEB-4964: decode footer menu\n\t footer = decodeTextOfMenuItem(footer, '[0].cols[0].components');\n\t\n\t var children = [];\n\t\n\t if (_lodash2.default.isArray(header)) {\n\t var headerClassnames = (0, _classnames2.default)('PageHeader', {\n\t 'PageHeader--sticky': enableStickyHeader\n\t });\n\t\n\t children.push(_react2.default.createElement(_ConfigGrid2.default, { key: children.length, fullwidth: true, configPath: headerConfigPath, id: 'header', className: headerClassnames, params: params }));\n\t } else if (_lodash2.default.isObject(header)) {\n\t children.push(_react2.default.createElement(_Header2.default, header));\n\t }\n\t\n\t if (body) {\n\t children.push(body);\n\t } else {\n\t children.push(_react2.default.createElement(_ConfigGrid2.default, { key: children.length, configPath: configPath + '.body', gutterSpacing: gutterSpacing, className: 'PageBody', params: params }));\n\t }\n\t\n\t if (_lodash2.default.isArray(footer)) {\n\t children.push(_react2.default.createElement(_ConfigGrid2.default, { key: children.length, fullwidth: true, configPath: footerConfigPath, className: 'PageFooter', params: params }));\n\t } else if (_lodash2.default.isObject(footer)) {\n\t children.push(_react2.default.createElement(_Footer2.default, footer));\n\t }\n\t\n\t var className = (0, _classnames2.default)('Page', affiliateName ? 'affiliate--' + affiliateName.toLowerCase() : null, {\n\t 'is-inIframe': this._isInIframe()\n\t });\n\t\n\t return _react2.default.createElement(\n\t 'div',\n\t { id: 'page', className: className },\n\t pageCustomStyle && _react2.default.createElement('div', { dangerouslySetInnerHTML: { __html: pageCustomStyle } }),\n\t children\n\t );\n\t }\n\t }]);\n\t\n\t return Page;\n\t}(_react.Component), _class.propTypes = {\n\t params: _react.PropTypes.object,\n\t configPath: _react.PropTypes.string,\n\t body: _react.PropTypes.object\n\t}, _class.contextTypes = {\n\t flux: _react.PropTypes.object.isRequired,\n\t config: _react.PropTypes.object.isRequired\n\t}, _temp);\n\texports.default = Page;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 504 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tvar _class, _temp2, _class2, _temp3, _class3, _temp4; // Temporary implementation from https://github.com/franklyinc/frankly-platform/pull/830/files\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tvar _classnames = __webpack_require__(2);\n\t\n\tvar _classnames2 = _interopRequireDefault(_classnames);\n\t\n\tvar _reactBootstrap = __webpack_require__(22);\n\t\n\tvar _frankly = __webpack_require__(34);\n\t\n\tvar _DateUtils = __webpack_require__(51);\n\t\n\tvar _LocationSelector = __webpack_require__(1024);\n\t\n\tvar _LocationSelector2 = _interopRequireDefault(_LocationSelector);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\t\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\t\n\tvar DailyWeatherSummary = (_temp2 = _class = function (_Component) {\n\t _inherits(DailyWeatherSummary, _Component);\n\t\n\t function DailyWeatherSummary() {\n\t var _ref;\n\t\n\t var _temp, _this, _ret;\n\t\n\t _classCallCheck(this, DailyWeatherSummary);\n\t\n\t for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t args[_key] = arguments[_key];\n\t }\n\t\n\t return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = DailyWeatherSummary.__proto__ || Object.getPrototypeOf(DailyWeatherSummary)).call.apply(_ref, [this].concat(args))), _this), _this.state = {\n\t temperatureFormat: 'F'\n\t }, _this._weatherDataStoreDispatcher = null, _temp), _possibleConstructorReturn(_this, _ret);\n\t }\n\t\n\t _createClass(DailyWeatherSummary, [{\n\t key: 'componentWillMount',\n\t value: function componentWillMount() {\n\t var _this2 = this;\n\t\n\t this._weatherDataStoreDispatcher = new _frankly.DataStoreDispatcher('franklyinc.com/weather');\n\t\n\t this._weatherDataStoreDispatcher.onChange('temperatureFormat', function (val) {\n\t _this2.setState({\n\t temperatureFormat: val\n\t });\n\t });\n\t }\n\t }, {\n\t key: 'componentWillUnmount',\n\t value: function componentWillUnmount() {\n\t this._weatherDataStoreDispatcher.off();\n\t this._weatherDataStoreDispatcher = null;\n\t }\n\t }, {\n\t key: '_handleTemperatureFormatClick',\n\t value: function _handleTemperatureFormatClick(format) {\n\t this._weatherDataStoreDispatcher.set('temperatureFormat', format);\n\t }\n\t }, {\n\t key: '_setTemperatureFormat',\n\t value: function _setTemperatureFormat(newTempFormat) {\n\t this._handleTemperatureFormatClick(newTempFormat);\n\t }\n\t }, {\n\t key: 'render',\n\t value: function render() {\n\t var _props = this.props,\n\t _props$FRN_rawRespons = _props.FRN_rawResponses;\n\t _props$FRN_rawRespons = _props$FRN_rawRespons === undefined ? [] : _props$FRN_rawRespons;\n\t\n\t var _props$FRN_rawRespons2 = _slicedToArray(_props$FRN_rawRespons, 1),\n\t _props$FRN_rawRespons3 = _props$FRN_rawRespons2[0];\n\t\n\t _props$FRN_rawRespons3 = _props$FRN_rawRespons3 === undefined ? {} : _props$FRN_rawRespons3;\n\t var _props$FRN_rawRespons4 = _props$FRN_rawRespons3.data;\n\t _props$FRN_rawRespons4 = _props$FRN_rawRespons4 === undefined ? {} : _props$FRN_rawRespons4;\n\t var _props$FRN_rawRespons5 = _props$FRN_rawRespons4.data,\n\t weatherData = _props$FRN_rawRespons5 === undefined ? {} : _props$FRN_rawRespons5,\n\t enableStackView = _props.enableStackView,\n\t cardOptionValues = _props.cardOptionValues,\n\t _props$temperatureOpt = _props.temperatureOptions,\n\t hideHiTemp = _props$temperatureOpt.hideHiTemp,\n\t hideLoTemp = _props$temperatureOpt.hideLoTemp;\n\t var temperatureFormat = this.state.temperatureFormat;\n\t var _weatherData$Cities = weatherData.Cities;\n\t _weatherData$Cities = _weatherData$Cities === undefined ? {} : _weatherData$Cities;\n\t var _weatherData$Cities$C = _weatherData$Cities.City;\n\t _weatherData$Cities$C = _weatherData$Cities$C === undefined ? {} : _weatherData$Cities$C;\n\t var _weatherData$Cities$C2 = _weatherData$Cities$C.CurrentObservation,\n\t currentObservation = _weatherData$Cities$C2 === undefined ? null : _weatherData$Cities$C2,\n\t _weatherData$Cities$C3 = _weatherData$Cities$C.DailyForecast;\n\t _weatherData$Cities$C3 = _weatherData$Cities$C3 === undefined ? {} : _weatherData$Cities$C3;\n\t var _weatherData$Cities$C4 = _weatherData$Cities$C3.Day;\n\t _weatherData$Cities$C4 = _weatherData$Cities$C4 === undefined ? [] : _weatherData$Cities$C4;\n\t\n\t var _weatherData$Cities$C5 = _slicedToArray(_weatherData$Cities$C4, 1),\n\t _weatherData$Cities$C6 = _weatherData$Cities$C5[0],\n\t dailyForecast = _weatherData$Cities$C6 === undefined ? null : _weatherData$Cities$C6;\n\t\n\t if (!currentObservation || !dailyForecast) {\n\t return null;\n\t }\n\t\n\t var tempF = currentObservation['@TempF'],\n\t tempC = currentObservation['@TempC'],\n\t iconCode = currentObservation['@IconCode'],\n\t skyText = currentObservation['@Sky'],\n\t pressure = currentObservation['@Pressure'],\n\t humidity = currentObservation['@RelHumidity'],\n\t windSpeed = currentObservation['@WndSpdMph'],\n\t feelsLikeF = currentObservation['@FeelsLikeF'],\n\t feelsLikeC = currentObservation['@FeelsLikeC'];\n\t var HiTempF = dailyForecast['@HiTempF'],\n\t HiTempC = dailyForecast['@HiTempC'],\n\t loTempF = dailyForecast['@LoTempF'],\n\t loTempC = dailyForecast['@LoTempC'],\n\t precipitation = dailyForecast['@PrecipChance'],\n\t dateTime = dailyForecast['@ValidDateLocal'],\n\t sunrise = dailyForecast['@Sunrise'],\n\t sunset = dailyForecast['@Sunset'],\n\t moonrise = dailyForecast['@Moonrise'],\n\t moonset = dailyForecast['@Moonset'];\n\t\n\t\n\t var displayTemperature = temperatureFormat !== 'C' ? tempF : tempC;\n\t var highTemp = temperatureFormat !== \"C\" ? HiTempF : HiTempC;\n\t var lowTemp = temperatureFormat !== \"C\" ? loTempF : loTempC;\n\t\n\t var feelsLike = temperatureFormat !== 'C' ? feelsLikeF : feelsLikeC;\n\t\n\t var colSpans = {\n\t xs: 12,\n\t sm: 4\n\t };\n\t\n\t if (cardOptionValues) {\n\t colSpans['sm'] = 12 / cardOptionValues.length;\n\t }\n\t if (enableStackView) {\n\t colSpans['sm'] = 12;\n\t }\n\t\n\t var cardOptions = {};\n\t\n\t cardOptions['temperature'] = _react2.default.createElement(\n\t 'div',\n\t { className: 'DailyForecastKeyInformation' },\n\t _react2.default.createElement(\n\t 'div',\n\t { className: 'DailyForecastKeyInformation-tempDisplay' },\n\t _react2.default.createElement(\n\t 'span',\n\t { className: 'temperature' },\n\t displayTemperature\n\t ),\n\t _react2.default.createElement(\n\t 'div',\n\t { className: 'DailyForecastKeyInformation-temperatureChoice' },\n\t _react2.default.createElement('span', { className: 'temperature-choice-label line-after' + (temperatureFormat !== 'C' ? ' active' : ''),\n\t dangerouslySetInnerHTML: { __html: 'F °' },\n\t onClick: this._setTemperatureFormat.bind(this, 'F')\n\t }),\n\t _react2.default.createElement('span', { className: 'temperature-choice-label ' + (temperatureFormat === 'C' ? ' active' : ''),\n\t dangerouslySetInnerHTML: { __html: 'C °' },\n\t onClick: this._setTemperatureFormat.bind(this, 'C')\n\t })\n\t ),\n\t _react2.default.createElement('span', { className: 'weather-icon weather-icon-' + iconCode })\n\t ),\n\t _react2.default.createElement(\n\t 'div',\n\t { className: 'DailyForecastKeyInformation-tempDescription' },\n\t _react2.default.createElement(\n\t 'span',\n\t { className: 'DailyForecastKeyInformation-skyText' },\n\t skyText\n\t )\n\t ),\n\t _react2.default.createElement(\n\t 'div',\n\t { className: 'DailyForecastKeyInformation-generalValue' },\n\t !hideHiTemp && _react2.default.createElement(\n\t 'span',\n\t { className: 'generalTitle' },\n\t 'L ',\n\t _react2.default.createElement(\n\t 'span',\n\t { className: 'infoValue' },\n\t lowTemp + '°'\n\t )\n\t ),\n\t !hideLoTemp && _react2.default.createElement(\n\t 'span',\n\t { className: 'generalTitle' },\n\t 'H ',\n\t _react2.default.createElement(\n\t 'span',\n\t { className: 'infoValue' },\n\t highTemp + '°'\n\t )\n\t ),\n\t _react2.default.createElement(\n\t 'span',\n\t { className: 'weather-percentage weather-precipitation infoValue' },\n\t precipitation\n\t )\n\t )\n\t );\n\t cardOptions['meta'] = _react2.default.createElement(\n\t 'div',\n\t { className: 'DailyForecastDetailsBlock ' + (enableStackView ? 'DailyForecastDetailsBlock-marginReset' : null) },\n\t _react2.default.createElement(DetailRow, { title: 'Feels Like', value: feelsLike ? feelsLike + '°' : null }),\n\t _react2.default.createElement(DetailRow, { title: 'Humidity', value: humidity, valueClassName: (0, _classnames2.default)({ 'weather-percentage': humidity }) }),\n\t _react2.default.createElement(DetailRow, { title: 'Pressure', value: pressure, valueClassName: (0, _classnames2.default)({ 'weather-pressure': pressure }) }),\n\t _react2.default.createElement(DetailRow, { title: 'Windspeed', value: windSpeed ? windSpeed + ' mph' : null })\n\t );\n\t cardOptions['sunrise'] = _react2.default.createElement(\n\t 'div',\n\t { className: 'MeteorologistHourlyforecastMoonSun ' + (enableStackView ? 'MeteorologistHourlyforecastMoonSun-marginTopReset' : '') },\n\t _react2.default.createElement(\n\t _reactBootstrap.Row,\n\t null,\n\t _react2.default.createElement(\n\t _reactBootstrap.Col,\n\t { xs: 6, className: 'TimeWeatherSun' },\n\t _react2.default.createElement(TimeDetailRow, { title: 'sunrise', validDateLocal: dateTime, value: sunrise, valueClassName: 'weather-sun sunrise' }),\n\t _react2.default.createElement(TimeDetailRow, { title: 'sunset', validDateLocal: dateTime, value: sunset, valueClassName: 'weather-sun sunset' })\n\t ),\n\t _react2.default.createElement(\n\t _reactBootstrap.Col,\n\t { xs: 6, className: 'TimeWeatherMoon' },\n\t _react2.default.createElement(TimeDetailRow, { title: 'moonrise', validDateLocal: dateTime, value: moonrise, valueClassName: 'weather-moon moonrise' }),\n\t _react2.default.createElement(TimeDetailRow, { title: 'moonset', validDateLocal: dateTime, value: moonset, valueClassName: 'weather-moon moonset' })\n\t )\n\t )\n\t );\n\t\n\t var content = [];\n\t var cardOptionKeys = Object.keys(cardOptions);\n\t var componentClassNames = (0, _classnames2.default)('heartland-weather-DailyWeatherSummary', {\n\t 'heartland-weather-DailyWeatherSummary-stacked': enableStackView\n\t });\n\t\n\t var buildCards = function buildCards(index, item) {\n\t var colClass = void 0;\n\t\n\t if (index !== 0 && !enableStackView) {\n\t colClass = 'heartland-weather-DailyWeatherSummary-borderLeft heartland-weather-DailyWeatherSummary-marginTop';\n\t }if (index !== 0 && enableStackView) {\n\t colClass = 'heartland-weather-DailyWeatherSummary-marginTopStackView';\n\t }\n\t\n\t return _react2.default.createElement(\n\t _reactBootstrap.Col,\n\t _extends({ key: index }, colSpans, { className: colClass }),\n\t item\n\t );\n\t };\n\t\n\t if (cardOptionValues) {\n\t cardOptionValues.forEach(function (cardOptionValue, index) {\n\t return cardOptionKeys.forEach(function (cardOptionKey) {\n\t if (cardOptionValue === cardOptionKey) {\n\t content.push(buildCards(index, cardOptions[cardOptionKey]));\n\t }\n\t });\n\t });\n\t } else {\n\t content = cardOptionKeys.map(function (cardOptionKey, index) {\n\t return buildCards(index, cardOptions[cardOptionKey]);\n\t });\n\t }\n\t\n\t return _react2.default.createElement(\n\t 'div',\n\t { className: componentClassNames },\n\t _react2.default.createElement(\n\t _reactBootstrap.Row,\n\t null,\n\t _react2.default.createElement(_LocationSelector2.default, { backgroundColor: '#FFF', textColor: '#000', borderColor: '#E6E6E6' })\n\t ),\n\t _react2.default.createElement(\n\t _reactBootstrap.Row,\n\t { className: !enableStackView ? 'heartland-weather-DailyWeatherSummary-wrapper' : 'heartland-weather-DailyWeatherSummary-viewStack' },\n\t content\n\t )\n\t );\n\t }\n\t }]);\n\t\n\t return DailyWeatherSummary;\n\t}(_react.Component), _class.propTypes = {\n\t FRN_rawResponses: _react.PropTypes.array,\n\t enableStackView: _react.PropTypes.bool,\n\t cardOptionValues: _react.PropTypes.array,\n\t temperatureOptions: _react.PropTypes.shape({\n\t hideHiTemp: _react.PropTypes.bool,\n\t hideLoTemp: _react.PropTypes.bool\n\t })\n\t}, _class.defaultProps = {\n\t temperatureOptions: {\n\t hideHiTemp: false,\n\t hideLoTemp: false\n\t }\n\t}, _temp2);\n\tvar DetailRow = (_temp3 = _class2 = function (_Component2) {\n\t _inherits(DetailRow, _Component2);\n\t\n\t function DetailRow() {\n\t _classCallCheck(this, DetailRow);\n\t\n\t return _possibleConstructorReturn(this, (DetailRow.__proto__ || Object.getPrototypeOf(DetailRow)).apply(this, arguments));\n\t }\n\t\n\t _createClass(DetailRow, [{\n\t key: 'render',\n\t value: function render() {\n\t var _props2 = this.props,\n\t title = _props2.title,\n\t value = _props2.value,\n\t valueClassName = _props2.valueClassName,\n\t spans = _props2.spans,\n\t reverseContent = _props2.reverseContent;\n\t\n\t\n\t var content = [_react2.default.createElement(\n\t _reactBootstrap.Col,\n\t _extends({ key: 0 }, spans, { className: 'infoTitle' }),\n\t title\n\t )];\n\t\n\t var infoValue = _react2.default.createElement(\n\t _reactBootstrap.Col,\n\t _extends({ key: 1 }, spans, { className: (0, _classnames2.default)('infoValue', valueClassName) }),\n\t value || 'N/A'\n\t );\n\t\n\t if (reverseContent) {\n\t content.unshift(infoValue);\n\t } else {\n\t content.push(infoValue);\n\t }\n\t\n\t return _react2.default.createElement(\n\t _reactBootstrap.Row,\n\t { className: 'DetailRow' },\n\t content\n\t );\n\t }\n\t }]);\n\t\n\t return DetailRow;\n\t}(_react.Component), _class2.propTypes = {\n\t title: _react.PropTypes.string.isRequired,\n\t value: _react.PropTypes.string,\n\t valueClassName: _react.PropTypes.string,\n\t spans: _react.PropTypes.object,\n\t reverseContent: _react.PropTypes.bool\n\t}, _class2.defaultProps = {\n\t spans: {\n\t xs: 6\n\t },\n\t reverseContent: false\n\t}, _temp3);\n\tvar TimeDetailRow = (_temp4 = _class3 = function (_Component3) {\n\t _inherits(TimeDetailRow, _Component3);\n\t\n\t function TimeDetailRow() {\n\t _classCallCheck(this, TimeDetailRow);\n\t\n\t return _possibleConstructorReturn(this, (TimeDetailRow.__proto__ || Object.getPrototypeOf(TimeDetailRow)).apply(this, arguments));\n\t }\n\t\n\t _createClass(TimeDetailRow, [{\n\t key: 'render',\n\t value: function render() {\n\t var _props3 = this.props,\n\t validDateLocal = _props3.validDateLocal,\n\t value = _props3.value;\n\t\n\t\n\t return _react2.default.createElement(DetailRow, _extends({}, this.props, {\n\t spans: { xs: 12 }, reverseContent: true,\n\t value: value ? (0, _DateUtils.formatDate)(validDateLocal.split(' ')[0] + ' ' + value, 'h:mm A') : null }));\n\t }\n\t }]);\n\t\n\t return TimeDetailRow;\n\t}(_react.Component), _class3.propTypes = {\n\t title: _react.PropTypes.string.isRequired,\n\t value: _react.PropTypes.string,\n\t valueClassName: _react.PropTypes.string,\n\t validDateLocal: _react.PropTypes.string.isRequired\n\t}, _temp4);\n\texports.default = DailyWeatherSummary;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 505 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\t\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\t\n\tvar ToolTip = function (_Component) {\n\t _inherits(ToolTip, _Component);\n\t\n\t function ToolTip(props) {\n\t _classCallCheck(this, ToolTip);\n\t\n\t var _this = _possibleConstructorReturn(this, (ToolTip.__proto__ || Object.getPrototypeOf(ToolTip)).call(this, props));\n\t\n\t _this.toggle = function () {\n\t _this.setState({\n\t show: !_this.state.show\n\t });\n\t };\n\t\n\t _this.affiliate = props.affiliate;\n\t _this.iconClassName = props.iconClassName || 'fa fa-info-circle';\n\t _this.height = props.height;\n\t _this.width = props.width || 300;\n\t _this.title = props.title || '';\n\t _this.state = {\n\t show: false\n\t };\n\t return _this;\n\t }\n\t\n\t _createClass(ToolTip, [{\n\t key: 'render',\n\t value: function render() {\n\t return _react2.default.createElement(\n\t 'span',\n\t { className: 'gnm-tool-tip ' + this.iconClassName, onClick: this.toggle },\n\t _react2.default.createElement(\n\t 'div',\n\t { style: {\n\t display: this.state.show ? 'block' : 'none'\n\t } },\n\t _react2.default.createElement('div', { className: 'clickable-clear-background' }),\n\t _react2.default.createElement(\n\t 'div',\n\t { className: 'tool-tip', style: {\n\t left: -this.width / 2 + 'px',\n\t top: '25px'\n\t } },\n\t _react2.default.createElement(\n\t 'div',\n\t { className: 'title' },\n\t this.title\n\t ),\n\t _react2.default.createElement(\n\t 'div',\n\t { className: 'contents', style: {\n\t height: this.height ? this.height + 'px' : 'auto',\n\t width: this.width + 'px'\n\t } },\n\t this.props.children\n\t )\n\t )\n\t )\n\t );\n\t }\n\t }]);\n\t\n\t return ToolTip;\n\t}(_react.Component);\n\t\n\texports.default = ToolTip;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 506 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\tfunction params(FRN_page) {\n\t\n\t if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object') {\n\t return parse(window.location.search.substring(1));\n\t } else {\n\t //FRN_page is a variable that only means anything in the frankly environment\n\t if ((typeof FRN_page === 'undefined' ? 'undefined' : _typeof(FRN_page)) != 'object' || typeof FRN_page.uri !== 'string') return {};\n\t var searchString = FRN_page.uri.replace('http://www.newson6.com', '').replace('http://www.news9.com', '');\n\t var obj = parse(searchString.substring(1));\n\t return obj;\n\t }\n\t}\n\t\n\tfunction parse(searchString) {\n\t var arr = searchString.split('&');\n\t var obj = {};\n\t var i = arr.length;\n\t while (i--) {\n\t var pair = arr[i].split('=');\n\t if (pair.length != 2) return {};\n\t obj[pair[0]] = pair[1];\n\t }\n\t\n\t return obj;\n\t}\n\t\n\texports.default = {\n\t params: params\n\t};\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 507 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\tvar wallpaperChecker = null,\n\t wallpaperPresent = false,\n\t wallpaperCheckerCounter = 0,\n\t maxAttempts = 20,\n\t wallpaperCheckerInterval = 1000,\n\t registeredWallpaperCallbacks = [];\n\t\n\tif ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.location.pathname === '/') {\n\t console.log(\"wallpaperChecker has started, will check %s times max\", maxAttempts);\n\t wallpaperChecker = setInterval(checkForWallpaper, wallpaperCheckerInterval);\n\t}\n\t\n\tfunction checkForWallpaper() {\n\t if (document.getElementsByTagName('body')[0].id === 'WallpaperAd') wallpaperFound();\n\t\n\t wallpaperCheckerCounter++;\n\t if (wallpaperCheckerCounter >= maxAttempts) {\n\t clearInterval(wallpaperChecker); //stop checking\n\t console.log('wallPaperChecker timed out after %s', maxAttempts);\n\t }\n\t}\n\t\n\tfunction register(callback) {\n\t if (wallpaperPresent) {\n\t callback();\n\t return;\n\t }\n\t registeredWallpaperCallbacks.push(callback);\n\t}\n\t\n\tfunction wallpaperFound() {\n\t wallpaperPresent = true;\n\t\n\t clearInterval(wallpaperChecker);\n\t registeredWallpaperCallbacks.map(function (f, i, a) {\n\t console.log('wallpaper checker fired registered function # %s', i);\n\t f();\n\t });\n\t}\n\t\n\texports.default = {\n\t register: register,\n\t wallpaperPresent: wallpaperPresent\n\t};\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 508 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tvar _class, _temp;\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tvar _classnames = __webpack_require__(2);\n\t\n\tvar _classnames2 = _interopRequireDefault(_classnames);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\t\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\t\n\tvar Pause = (_temp = _class = function (_Component) {\n\t _inherits(Pause, _Component);\n\t\n\t function Pause() {\n\t _classCallCheck(this, Pause);\n\t\n\t return _possibleConstructorReturn(this, (Pause.__proto__ || Object.getPrototypeOf(Pause)).apply(this, arguments));\n\t }\n\t\n\t _createClass(Pause, [{\n\t key: 'render',\n\t value: function render() {\n\t var paused = this.props.paused;\n\t\n\t\n\t var componentClassNames = (0, _classnames2.default)('PauseIcon', { 'PauseIcon-paused': paused });\n\t\n\t return _react2.default.createElement(\n\t 'div',\n\t { className: componentClassNames },\n\t _react2.default.createElement('div', null),\n\t _react2.default.createElement('div', null)\n\t );\n\t }\n\t }]);\n\t\n\t return Pause;\n\t}(_react.Component), _class.propTypes = {\n\t paused: _react.PropTypes.bool\n\t}, _temp);\n\texports.default = Pause;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 509 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tvar _class, _temp2;\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tvar _reactBootstrap = __webpack_require__(22);\n\t\n\tvar _ComponentLoader = __webpack_require__(155);\n\t\n\tvar _ComponentLoader2 = _interopRequireDefault(_ComponentLoader);\n\t\n\tvar _classnames = __webpack_require__(2);\n\t\n\tvar _classnames2 = _interopRequireDefault(_classnames);\n\t\n\tvar _ComponentTitle = __webpack_require__(14);\n\t\n\tvar _ComponentTitle2 = _interopRequireDefault(_ComponentTitle);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\t\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\t\n\tvar CardContainer = (_temp2 = _class = function (_Component) {\n\t _inherits(CardContainer, _Component);\n\t\n\t function CardContainer() {\n\t var _ref;\n\t\n\t var _temp, _this, _ret;\n\t\n\t _classCallCheck(this, CardContainer);\n\t\n\t for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t args[_key] = arguments[_key];\n\t }\n\t\n\t return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = CardContainer.__proto__ || Object.getPrototypeOf(CardContainer)).call.apply(_ref, [this].concat(args))), _this), _this.state = {\n\t ComponentClassList: []\n\t }, _this.getComponentClassList = function () {\n\t var cards = _this.props.cards;\n\t\n\t var classList = cards.map(function (item) {\n\t return _ComponentLoader2.default._modules[item.id] ? _ComponentLoader2.default._modules[item.id] : _react2.default.createElement(\n\t 'h1',\n\t null,\n\t 'Module ',\n\t item.id,\n\t ' not loadable'\n\t );\n\t }).filter(function (item) {\n\t return item !== null;\n\t });\n\t\n\t return classList;\n\t }, _temp), _possibleConstructorReturn(_this, _ret);\n\t }\n\t\n\t _createClass(CardContainer, [{\n\t key: 'componentWillMount',\n\t value: function componentWillMount() {\n\t var _this2 = this;\n\t\n\t var ComponentClassList = this.state.ComponentClassList;\n\t\n\t\n\t if (!ComponentClassList && typeof window !== 'undefined') {\n\t var cards = this.props.cards;\n\t\n\t Promise.all(cards.map(function (item) {\n\t return _ComponentLoader2.default.importReactComponent(item.id);\n\t })).then(function (CompClassList) {\n\t return _this2.setState({ ComponentClassList: CompClassList });\n\t }).catch(function (error) {\n\t throw new Error(error);\n\t });\n\t }\n\t }\n\t }, {\n\t key: 'render',\n\t value: function render() {\n\t var _props = this.props,\n\t FRN_rawResponses = _props.FRN_rawResponses,\n\t _props$startArticleIn = _props.startArticleIndex,\n\t startArticleIndex = _props$startArticleIn === undefined ? 0 : _props$startArticleIn,\n\t gutterSpacing = _props.gutterSpacing,\n\t overflowBackground = _props.overflowBackground,\n\t backgroundColor = _props.backgroundColor,\n\t cards = _props.cards,\n\t edgeToEdge = _props.edgeToEdge,\n\t title = _props.title,\n\t titleType = _props.titleType,\n\t titleColor = _props.titleColor;\n\t var ComponentClassList = this.state.ComponentClassList;\n\t\n\t\n\t if (!ComponentClassList || ComponentClassList.length === 0) {\n\t ComponentClassList = this.getComponentClassList();\n\t }\n\t\n\t var offset = startArticleIndex;\n\t\n\t var content = ComponentClassList.map(function (ComponentClass, index) {\n\t var _cards$index = cards[index],\n\t _cards$index$props = _cards$index.props,\n\t props = _cards$index$props === undefined ? {} : _cards$index$props,\n\t _cards$index$spans = _cards$index.spans,\n\t spans = _cards$index$spans === undefined ? { xs: 12 } : _cards$index$spans;\n\t\n\t props.startArticleIndex = offset;\n\t offset += props.numberOfItems || 1;\n\t return _react2.default.createElement(\n\t _reactBootstrap.Col,\n\t _extends({ key: index }, spans, { className: 'CardContainer-gutterSpacing--' + gutterSpacing }),\n\t _react2.default.createElement(ComponentClass, _extends({ FRN_rawResponses: FRN_rawResponses }, props, { edgeToEdge: edgeToEdge, spans: spans }))\n\t );\n\t });\n\t var containerItemClassName = (0, _classnames2.default)('CardContainer', { 'CardContainer-edgeToEdge': edgeToEdge });\n\t return _react2.default.createElement(\n\t 'div',\n\t { className: containerItemClassName, style: { backgroundColor: backgroundColor } },\n\t title ? _react2.default.createElement(_ComponentTitle2.default, { titleType: titleType, color: titleColor, showArrow: false, title: title }) : null,\n\t content,\n\t backgroundColor && overflowBackground && _react2.default.createElement('span', { className: 'CardContainer-backgroundOverflow CardContainer-backgroundOverflow--' + gutterSpacing,\n\t style: { backgroundColor: backgroundColor } })\n\t );\n\t }\n\t }]);\n\t\n\t return CardContainer;\n\t}(_react.Component), _class.propTypes = {\n\t FRN_rawResponses: _react.PropTypes.array,\n\t gutterSpacing: _react.PropTypes.oneOf(['xxs', 'xs', 'sm', 'md', 'lg', 'xl']),\n\t backgroundColor: _react.PropTypes.string,\n\t overflowBackground: _react.PropTypes.bool,\n\t startArticleIndex: _react.PropTypes.number,\n\t edgeToEdge: _react.PropTypes.bool,\n\t cards: _react.PropTypes.arrayOf(_react.PropTypes.shape({\n\t id: _react.PropTypes.string.isRequired\n\t }).isRequired).isRequired,\n\t title: _react.PropTypes.string,\n\t titleColor: _react.PropTypes.string,\n\t titleType: _react.PropTypes.string\n\t}, _class.defaultProps = {\n\t gutterSpacing: 'md',\n\t edgeToEdge: false,\n\t title: '',\n\t titleType: 'Module Title'\n\t}, _temp2);\n\texports.default = CardContainer;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 510 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tvar _class, _temp;\n\t\n\tvar _lodash = __webpack_require__(12);\n\t\n\tvar _classnames = __webpack_require__(2);\n\t\n\tvar _classnames2 = _interopRequireDefault(_classnames);\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tvar _NewsUtils = __webpack_require__(65);\n\t\n\tvar _CategoryUtils = __webpack_require__(194);\n\t\n\tvar _ComponentTitle = __webpack_require__(14);\n\t\n\tvar _ComponentTitle2 = _interopRequireDefault(_ComponentTitle);\n\t\n\tvar _ReadMoreButton = __webpack_require__(191);\n\t\n\tvar _ReadMoreButton2 = _interopRequireDefault(_ReadMoreButton);\n\t\n\tvar _Timestamp = __webpack_require__(44);\n\t\n\tvar _Timestamp2 = _interopRequireDefault(_Timestamp);\n\t\n\tvar _Image = __webpack_require__(36);\n\t\n\tvar _Image2 = _interopRequireDefault(_Image);\n\t\n\tvar _UrlUtils = __webpack_require__(240);\n\t\n\tvar _WindowUtils = __webpack_require__(80);\n\t\n\tvar _FRNBaseStyles = __webpack_require__(17);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\t\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\t\n\tvar HERO_SLIDER_TYPE = 'hero';\n\t\n\tvar SliderArticleList = (_temp = _class = function (_Component) {\n\t _inherits(SliderArticleList, _Component);\n\t\n\t function SliderArticleList(props) {\n\t _classCallCheck(this, SliderArticleList);\n\t\n\t var _this = _possibleConstructorReturn(this, (SliderArticleList.__proto__ || Object.getPrototypeOf(SliderArticleList)).call(this, props));\n\t\n\t _this.sliderItemContainer = null;\n\t return _this;\n\t }\n\t\n\t _createClass(SliderArticleList, [{\n\t key: '_shiftLeft',\n\t value: function _shiftLeft(numberOfItems, direction) {\n\t var $ = window['$'];\n\t var $sliderContainer = $(this.sliderItemContainer);\n\t var sliderContainerLeftPos = $sliderContainer.scrollLeft();\n\t var sliderContainerWidth = $sliderContainer[0].scrollWidth;\n\t var newLeftPos = direction === 'left' ? sliderContainerLeftPos - sliderContainerWidth / numberOfItems : sliderContainerLeftPos + sliderContainerWidth / numberOfItems;\n\t\n\t $sliderContainer.animate({ scrollLeft: newLeftPos }, '250');\n\t }\n\t }, {\n\t key: '_onPlayVideo',\n\t value: function _onPlayVideo(e, index) {\n\t var onPlayVideo = this.props.onPlayVideo;\n\t\n\t if (onPlayVideo) {\n\t e.preventDefault();\n\t onPlayVideo(index);\n\t }\n\t }\n\t }, {\n\t key: 'render',\n\t value: function render() {\n\t var _this2 = this;\n\t\n\t var location = typeof window !== 'undefined' ? window.location : undefined;\n\t var _props = this.props,\n\t _props$FRN_rawRespons = _props.FRN_rawResponses;\n\t _props$FRN_rawRespons = _props$FRN_rawRespons === undefined ? [] : _props$FRN_rawRespons;\n\t\n\t var _props$FRN_rawRespons2 = _slicedToArray(_props$FRN_rawRespons, 1),\n\t _props$FRN_rawRespons3 = _props$FRN_rawRespons2[0];\n\t\n\t _props$FRN_rawRespons3 = _props$FRN_rawRespons3 === undefined ? {} : _props$FRN_rawRespons3;\n\t var _props$FRN_rawRespons4 = _props$FRN_rawRespons3.data;\n\t _props$FRN_rawRespons4 = _props$FRN_rawRespons4 === undefined ? {} : _props$FRN_rawRespons4;\n\t var _props$FRN_rawRespons5 = _props$FRN_rawRespons4.features,\n\t items = _props$FRN_rawRespons5 === undefined ? [] : _props$FRN_rawRespons5,\n\t _props$FRN_rawRespons6 = _props$FRN_rawRespons4.headline,\n\t headline = _props$FRN_rawRespons6 === undefined ? '' : _props$FRN_rawRespons6,\n\t _props$showHeroByline = _props.showHeroByline,\n\t showHeroByline = _props$showHeroByline === undefined ? true : _props$showHeroByline,\n\t _props$showListByline = _props.showListByline,\n\t showListByline = _props$showListByline === undefined ? true : _props$showListByline,\n\t showUpdatedDate = _props.showUpdatedDate,\n\t title = _props.title,\n\t titleColor = _props.titleColor,\n\t _props$showTitle = _props.showTitle,\n\t showTitle = _props$showTitle === undefined ? true : _props$showTitle,\n\t textColor = _props.textColor,\n\t numberOfItems = _props.numberOfItems,\n\t startArticleIndex = _props.startArticleIndex,\n\t types = _props.types,\n\t _props$displaySizes = _props.displaySizes,\n\t displaySizes = _props$displaySizes === undefined ? [] : _props$displaySizes,\n\t layout = _props.layout,\n\t heroTextColor = _props.heroTextColor,\n\t heroBackgroundColor = _props.heroBackgroundColor,\n\t maintainHeroImageAspectRatio = _props.maintainHeroImageAspectRatio,\n\t heroImageBackgroundColor = _props.heroImageBackgroundColor,\n\t backgroundColor = _props.backgroundColor,\n\t _props$timestampOptio = _props.timestampOptions;\n\t _props$timestampOptio = _props$timestampOptio === undefined ? {} : _props$timestampOptio;\n\t var showElapsedTime = _props$timestampOptio.showElapsedTime,\n\t displayShortDateTime = _props$timestampOptio.displayShortDateTime,\n\t showReadMore = _props.showReadMore,\n\t readMoreText = _props.readMoreText,\n\t readMoreBackgroundColor = _props.readMoreBackgroundColor,\n\t readMoreTextColor = _props.readMoreTextColor,\n\t _props$showArrows = _props.showArrows,\n\t showArrows = _props$showArrows === undefined ? true : _props$showArrows,\n\t showMoreArrow = _props.showMoreArrow,\n\t categoryUrl = _props.categoryUrl,\n\t videoIconPlacement = _props.videoIconPlacement,\n\t titleType = _props.titleType,\n\t currentIndexVideo = _props.currentIndexVideo;\n\t\n\t\n\t var offset = Math.max(startArticleIndex, 0);\n\t var filteredItems = (0, _CategoryUtils.filterItems)(items, { type: types, displaysize: displaySizes });\n\t var itemsToShow = filteredItems.slice(offset, numberOfItems + offset);\n\t\n\t if (!itemsToShow.length) {\n\t return null;\n\t }\n\t\n\t var componentTitle = title || headline;\n\t var heroComponent = void 0;\n\t\n\t if (layout === HERO_SLIDER_TYPE) {\n\t var _itemsToShow$ = itemsToShow[0],\n\t _itemsToShow$$id = _itemsToShow$.id,\n\t id = _itemsToShow$$id === undefined ? '' : _itemsToShow$$id,\n\t _itemsToShow$$url = _itemsToShow$.url,\n\t url = _itemsToShow$$url === undefined ? '' : _itemsToShow$$url,\n\t _itemsToShow$$type = _itemsToShow$.type,\n\t type = _itemsToShow$$type === undefined ? '' : _itemsToShow$$type,\n\t _itemsToShow$$link = _itemsToShow$.link,\n\t link = _itemsToShow$$link === undefined ? '' : _itemsToShow$$link,\n\t _itemsToShow$$updated = _itemsToShow$.updatedDate,\n\t updatedDate = _itemsToShow$$updated === undefined ? '' : _itemsToShow$$updated,\n\t _itemsToShow$$publish = _itemsToShow$.publishedDate,\n\t publishedDate = _itemsToShow$$publish === undefined ? '' : _itemsToShow$$publish,\n\t _itemsToShow$$layout = _itemsToShow$.layout,\n\t layoutFeed = _itemsToShow$$layout === undefined ? '' : _itemsToShow$$layout,\n\t _itemsToShow$$abstrac = _itemsToShow$.abstract,\n\t previewText = _itemsToShow$$abstrac === undefined ? '' : _itemsToShow$$abstrac,\n\t _itemsToShow$$headlin = _itemsToShow$.headline,\n\t smallHeadline = _itemsToShow$$headlin === undefined ? '' : _itemsToShow$$headlin,\n\t _itemsToShow$$bylines = _itemsToShow$.bylines,\n\t bylines = _itemsToShow$$bylines === undefined ? [] : _itemsToShow$$bylines,\n\t _itemsToShow$$seo = _itemsToShow$.seo;\n\t _itemsToShow$$seo = _itemsToShow$$seo === undefined ? {} : _itemsToShow$$seo;\n\t var _itemsToShow$$seo$pag = _itemsToShow$$seo.pageurl,\n\t slug = _itemsToShow$$seo$pag === undefined ? '' : _itemsToShow$$seo$pag,\n\t _itemsToShow$$surface = _itemsToShow$.surfaceable;\n\t _itemsToShow$$surface = _itemsToShow$$surface === undefined ? [] : _itemsToShow$$surface;\n\t\n\t var _itemsToShow$$surface2 = _slicedToArray(_itemsToShow$$surface, 1),\n\t _itemsToShow$$surface3 = _itemsToShow$$surface2[0];\n\t\n\t _itemsToShow$$surface3 = _itemsToShow$$surface3 === undefined ? {} : _itemsToShow$$surface3;\n\t var _itemsToShow$$surface4 = _itemsToShow$$surface3.type,\n\t featureType = _itemsToShow$$surface4 === undefined ? '' : _itemsToShow$$surface4,\n\t _itemsToShow$$abstrac2 = _itemsToShow$.abstractimage;\n\t _itemsToShow$$abstrac2 = _itemsToShow$$abstrac2 === undefined ? {} : _itemsToShow$$abstrac2;\n\t var _itemsToShow$$abstrac3 = _itemsToShow$$abstrac2.filename,\n\t image = _itemsToShow$$abstrac3 === undefined ? '' : _itemsToShow$$abstrac3,\n\t _itemsToShow$$abstrac4 = _itemsToShow$$abstrac2.lastEditedDate,\n\t lastEditedDate = _itemsToShow$$abstrac4 === undefined ? '' : _itemsToShow$$abstrac4,\n\t _itemsToShow$$images = _itemsToShow$.images,\n\t images = _itemsToShow$$images === undefined ? {} : _itemsToShow$$images,\n\t _itemsToShow$$window = _itemsToShow$.window;\n\t _itemsToShow$$window = _itemsToShow$$window === undefined ? {} : _itemsToShow$$window;\n\t var _itemsToShow$$window$ = _itemsToShow$$window.isnewwindow,\n\t isnewwindow = _itemsToShow$$window$ === undefined ? false : _itemsToShow$$window$,\n\t _itemsToShow$$window$2 = _itemsToShow$$window.height,\n\t height = _itemsToShow$$window$2 === undefined ? '500' : _itemsToShow$$window$2,\n\t _itemsToShow$$window$3 = _itemsToShow$$window.width,\n\t width = _itemsToShow$$window$3 === undefined ? '500' : _itemsToShow$$window$3,\n\t _itemsToShow$$window$4 = _itemsToShow$$window.showtoolbar,\n\t showtoolbar = _itemsToShow$$window$4 === undefined ? true : _itemsToShow$$window$4,\n\t _itemsToShow$$window$5 = _itemsToShow$$window.showscrollbar,\n\t showscrollbar = _itemsToShow$$window$5 === undefined ? true : _itemsToShow$$window$5,\n\t _itemsToShow$$window$6 = _itemsToShow$$window.showlocation,\n\t showlocation = _itemsToShow$$window$6 === undefined ? true : _itemsToShow$$window$6,\n\t _itemsToShow$$window$7 = _itemsToShow$$window.isresizable,\n\t isresizable = _itemsToShow$$window$7 === undefined ? true : _itemsToShow$$window$7,\n\t _itemsToShow$$options = _itemsToShow$.options;\n\t _itemsToShow$$options = _itemsToShow$$options === undefined ? {} : _itemsToShow$$options;\n\t var _itemsToShow$$options2 = _itemsToShow$$options.date;\n\t _itemsToShow$$options2 = _itemsToShow$$options2 === undefined ? {} : _itemsToShow$$options2;\n\t var _itemsToShow$$options3 = _itemsToShow$$options2.published;\n\t _itemsToShow$$options3 = _itemsToShow$$options3 === undefined ? {} : _itemsToShow$$options3;\n\t var _itemsToShow$$options4 = _itemsToShow$$options3.showonabstract,\n\t showPublished = _itemsToShow$$options4 === undefined ? true : _itemsToShow$$options4,\n\t _itemsToShow$$options5 = _itemsToShow$$options2.updated;\n\t _itemsToShow$$options5 = _itemsToShow$$options5 === undefined ? {} : _itemsToShow$$options5;\n\t var _itemsToShow$$options6 = _itemsToShow$$options5.showonabstract,\n\t showUpdated = _itemsToShow$$options6 === undefined ? true : _itemsToShow$$options6;\n\t\n\t\n\t var linkImage = (0, _lodash.get)(images, 'abstract.filename', '');\n\t var isVideoAttached = type.toLowerCase() === 'clip' || featureType.toLowerCase() === 'clip';\n\t var imageHeroThumbnailClassName = (0, _classnames2.default)('SliderArticleList-heroThumbnail', _defineProperty({}, 'VideoThumbnail VideoThumbnail-' + videoIconPlacement, isVideoAttached));\n\t\n\t var customBackgroundStyles = {};\n\t\n\t var scaledImage = linkImage || image ? (0, _UrlUtils.buildURLFingerprinting)({ url: (linkImage || image) + '?auto=webp&disable=upscale&width=1410', lastEditedDate: lastEditedDate, queryStr: '&' }) : null; // use the same src for background as img tag\n\t customBackgroundStyles['backgroundImage'] = 'url(' + scaledImage + ')';\n\t customBackgroundStyles['backgroundColor'] = heroImageBackgroundColor;\n\t\n\t if (maintainHeroImageAspectRatio) {\n\t customBackgroundStyles['backgroundSize'] = 'contain';\n\t } else {\n\t customBackgroundStyles['backgroundSize'] = 'cover';\n\t }\n\t\n\t var timestamp = void 0;\n\t\n\t var iframeImage = (0, _lodash.get)(images, 'graphic.filename', '');\n\t var isShowWindowLayout = isnewwindow && type === 'link';\n\t var urlIFrameOrUrlLoc = layoutFeed === 3 ? url || iframeImage : link;\n\t var dataOfWindowOpen = (0, _WindowUtils.getDataOfWindowOpen)(width, height, showtoolbar, showscrollbar, showlocation, isresizable);\n\t var classNameSliderArticleList = (0, _classnames2.default)('SliderArticleList-heroContainer', { 'SliderArticleList-hoverSliderArticleList': isShowWindowLayout });\n\t\n\t if (showHeroByline) {\n\t var publishedDateTimestamp = showPublished ? publishedDate : null;\n\t var updatedDateTimestamp = showUpdated ? updatedDate : null;\n\t\n\t var timestampDate = showUpdatedDate ? updatedDateTimestamp : publishedDateTimestamp;\n\t timestamp = _react2.default.createElement(\n\t 'div',\n\t { className: 'SliderArticleList-heroText--textByline' },\n\t _react2.default.createElement(_Timestamp2.default, { publishDate: timestampDate, authors: (0, _lodash.map)(bylines, _NewsUtils.bylineToString), showElapsedTime: showElapsedTime, displayShortDateTime: displayShortDateTime })\n\t );\n\t }\n\t\n\t heroComponent = _react2.default.createElement(\n\t 'div',\n\t { onClick: function onClick() {\n\t return isShowWindowLayout && (0, _WindowUtils.showWindow)(urlIFrameOrUrlLoc, '_blank', dataOfWindowOpen);\n\t }, className: classNameSliderArticleList, style: { color: textColor } },\n\t _react2.default.createElement(\n\t 'div',\n\t { className: 'SliderArticleList-heroText', style: { backgroundColor: heroBackgroundColor, color: heroTextColor } },\n\t _react2.default.createElement(\n\t 'a',\n\t { href: !isShowWindowLayout ? (0, _NewsUtils.getLocalLink)(location, { id: id, type: type, slug: slug, urlIFrameOrUrlLoc: urlIFrameOrUrlLoc }) : null, className: 'SliderArticleList-heroLink' },\n\t _react2.default.createElement(\n\t 'h1',\n\t { className: 'SliderArticleList-heroLinkTitle' },\n\t smallHeadline\n\t )\n\t ),\n\t _react2.default.createElement('p', { className: 'SliderArticleList-heroText--abstract', dangerouslySetInnerHTML: { __html: previewText } }),\n\t timestamp\n\t ),\n\t linkImage || image ? _react2.default.createElement(\n\t 'a',\n\t { href: !isShowWindowLayout ? (0, _NewsUtils.getLocalLink)(location, { id: id, type: type, slug: slug, urlIFrameOrUrlLoc: urlIFrameOrUrlLoc }) : null, className: imageHeroThumbnailClassName, style: customBackgroundStyles },\n\t _react2.default.createElement(_Image2.default, { src: scaledImage, enableImgOpt: false, alt: smallHeadline, imageClassNames: \"Hero-image--accessible\" })\n\t ) : null\n\t );\n\t\n\t itemsToShow.shift();\n\t }\n\t\n\t return _react2.default.createElement(\n\t 'div',\n\t { className: 'SliderArticleList' },\n\t showTitle && componentTitle ? _react2.default.createElement(_ComponentTitle2.default, { titleType: titleType, showArrow: showMoreArrow, color: titleColor, title: componentTitle, link: categoryUrl ? categoryUrl : undefined }) : null,\n\t heroComponent,\n\t showArrows ? _react2.default.createElement('div', { className: 'SliderArticleList-scrollButton SliderArticleList-scrollButton--left',\n\t onClick: this._shiftLeft.bind(this, itemsToShow.length, 'left'),\n\t style: { backgroundColor: backgroundColor } }) : null,\n\t showArrows ? _react2.default.createElement('div', { className: 'SliderArticleList-scrollButton SliderArticleList-scrollButton--right',\n\t onClick: this._shiftLeft.bind(this, itemsToShow.length, 'right'),\n\t style: { backgroundColor: backgroundColor } }) : null,\n\t _react2.default.createElement(\n\t 'div',\n\t { className: 'SliderArticleList-sliderItemsContainer',\n\t style: { backgroundColor: backgroundColor },\n\t ref: function ref(container) {\n\t return _this2.sliderItemContainer = container;\n\t }\n\t },\n\t _react2.default.createElement(\n\t 'div',\n\t { className: 'SliderArticleList-sliderItems' },\n\t itemsToShow.map(function (item, index) {\n\t var _item$id = item.id,\n\t id = _item$id === undefined ? '' : _item$id,\n\t _item$url = item.url,\n\t url = _item$url === undefined ? '' : _item$url,\n\t _item$type = item.type,\n\t type = _item$type === undefined ? '' : _item$type,\n\t _item$link = item.link,\n\t link = _item$link === undefined ? '' : _item$link,\n\t _item$updatedDate = item.updatedDate,\n\t updatedDate = _item$updatedDate === undefined ? '' : _item$updatedDate,\n\t _item$publishedDate = item.publishedDate,\n\t publishedDate = _item$publishedDate === undefined ? '' : _item$publishedDate,\n\t _item$layout = item.layout,\n\t layoutFeed = _item$layout === undefined ? '' : _item$layout,\n\t _item$headline = item.headline,\n\t smallHeadline = _item$headline === undefined ? '' : _item$headline,\n\t _item$bylines = item.bylines,\n\t bylines = _item$bylines === undefined ? [] : _item$bylines,\n\t _item$seo = item.seo;\n\t _item$seo = _item$seo === undefined ? {} : _item$seo;\n\t var _item$seo$pageurl = _item$seo.pageurl,\n\t slug = _item$seo$pageurl === undefined ? '' : _item$seo$pageurl,\n\t _item$surfaceable = item.surfaceable;\n\t _item$surfaceable = _item$surfaceable === undefined ? [] : _item$surfaceable;\n\t\n\t var _item$surfaceable2 = _slicedToArray(_item$surfaceable, 1),\n\t _item$surfaceable2$ = _item$surfaceable2[0];\n\t\n\t _item$surfaceable2$ = _item$surfaceable2$ === undefined ? {} : _item$surfaceable2$;\n\t var _item$surfaceable2$$t = _item$surfaceable2$.type,\n\t featureType = _item$surfaceable2$$t === undefined ? '' : _item$surfaceable2$$t,\n\t _item$abstractimage = item.abstractimage;\n\t _item$abstractimage = _item$abstractimage === undefined ? {} : _item$abstractimage;\n\t var _item$abstractimage$f = _item$abstractimage.filename,\n\t image = _item$abstractimage$f === undefined ? '' : _item$abstractimage$f,\n\t _item$abstractimage$l = _item$abstractimage.lastEditedDate,\n\t lastEditedDate = _item$abstractimage$l === undefined ? '' : _item$abstractimage$l,\n\t _item$images = item.images,\n\t images = _item$images === undefined ? {} : _item$images,\n\t _item$options = item.options;\n\t _item$options = _item$options === undefined ? {} : _item$options;\n\t var _item$options$date = _item$options.date;\n\t _item$options$date = _item$options$date === undefined ? {} : _item$options$date;\n\t var _item$options$date$pu = _item$options$date.published;\n\t _item$options$date$pu = _item$options$date$pu === undefined ? {} : _item$options$date$pu;\n\t var _item$options$date$pu2 = _item$options$date$pu.showonabstract,\n\t showPublished = _item$options$date$pu2 === undefined ? true : _item$options$date$pu2,\n\t _item$options$date$up = _item$options$date.updated;\n\t _item$options$date$up = _item$options$date$up === undefined ? {} : _item$options$date$up;\n\t var _item$options$date$up2 = _item$options$date$up.showonabstract,\n\t showUpdated = _item$options$date$up2 === undefined ? true : _item$options$date$up2,\n\t _item$window = item.window;\n\t _item$window = _item$window === undefined ? {} : _item$window;\n\t var _item$window$isnewwin = _item$window.isnewwindow,\n\t isnewwindow = _item$window$isnewwin === undefined ? false : _item$window$isnewwin,\n\t _item$window$height = _item$window.height,\n\t height = _item$window$height === undefined ? '500' : _item$window$height,\n\t _item$window$width = _item$window.width,\n\t width = _item$window$width === undefined ? '500' : _item$window$width,\n\t _item$window$showtool = _item$window.showtoolbar,\n\t showtoolbar = _item$window$showtool === undefined ? true : _item$window$showtool,\n\t _item$window$showscro = _item$window.showscrollbar,\n\t showscrollbar = _item$window$showscro === undefined ? true : _item$window$showscro,\n\t _item$window$showloca = _item$window.showlocation,\n\t showlocation = _item$window$showloca === undefined ? true : _item$window$showloca,\n\t _item$window$isresiza = _item$window.isresizable,\n\t isresizable = _item$window$isresiza === undefined ? true : _item$window$isresiza;\n\t\n\t var isVideoAttached = type.toLowerCase() === 'clip' || featureType.toLowerCase() === 'clip';\n\t var imageThumbnailClassName = (0, _classnames2.default)('SliderArticleList-sliderItemThumbnail', _defineProperty({}, 'VideoThumbnail VideoThumbnail-' + videoIconPlacement, isVideoAttached), _defineProperty({}, 'SliderArticleList-sliderItemThumbnail--active', index === currentIndexVideo));\n\t\n\t var dataOfWindowOpen = (0, _WindowUtils.getDataOfWindowOpen)(width, height, showtoolbar, showscrollbar, showlocation, isresizable);\n\t\n\t var iframeImage = (0, _lodash.get)(images, 'graphic.filename', '');\n\t var linkImage = (0, _lodash.get)(images, 'abstract.filename', '');\n\t\n\t var isShowWindowLayout = isnewwindow && type === 'link';\n\t var urlIFrameOrUrlLoc = layoutFeed === 3 ? url || iframeImage : link;\n\t\n\t var classNameSliderArticleList = (0, _classnames2.default)('SliderArticleList-sliderItem', { 'SliderArticleList-hoverSliderArticleList': isShowWindowLayout });\n\t\n\t var isOnClick = function isOnClick() {\n\t isShowWindowLayout && (0, _WindowUtils.showWindow)(urlIFrameOrUrlLoc, '_blank', dataOfWindowOpen);\n\t };\n\t\n\t var timestamp = void 0;\n\t var backgroundImage = linkImage || image ? 'url(\\'' + (0, _UrlUtils.buildURLFingerprinting)({ url: (linkImage || image) + '?auto=webp&disable=upscale&height=134', lastEditedDate: lastEditedDate, queryStr: '&' }) + '\\')' : null;\n\t\n\t if (showListByline) {\n\t var _publishedDateTimestamp = showPublished ? publishedDate : null;\n\t var _updatedDateTimestamp = showUpdated ? updatedDate : null;\n\t\n\t var _timestampDate = showUpdatedDate ? _updatedDateTimestamp : _publishedDateTimestamp;\n\t timestamp = _react2.default.createElement(_Timestamp2.default, { publishDate: _timestampDate, authors: (0, _lodash.map)(bylines, _NewsUtils.bylineToString), showElapsedTime: showElapsedTime, displayShortDateTime: displayShortDateTime });\n\t }\n\t\n\t var href = !isShowWindowLayout ? (0, _NewsUtils.getLocalLink)(location, { id: id, type: type, slug: slug, urlIFrameOrUrlLoc: urlIFrameOrUrlLoc }) : null;\n\t\n\t return _react2.default.createElement(\n\t 'div',\n\t { onClick: isOnClick, className: classNameSliderArticleList, key: index, ref: index === 0 ? 'firstItem' : null },\n\t _react2.default.createElement(\n\t 'a',\n\t { href: href, onClick: function onClick(e) {\n\t return _this2._onPlayVideo(e, index);\n\t } },\n\t _react2.default.createElement('div', { className: imageThumbnailClassName, style: { backgroundImage: backgroundImage } })\n\t ),\n\t _react2.default.createElement(\n\t 'div',\n\t { className: 'SliderArticleList-sliderItemTextContainer', style: { color: textColor } },\n\t _react2.default.createElement(\n\t 'div',\n\t { className: 'SliderArticleList-sliderItemText' },\n\t _react2.default.createElement(\n\t 'a',\n\t { href: href, onClick: function onClick(e) {\n\t return _this2._onPlayVideo(e, index);\n\t } },\n\t _react2.default.createElement(\n\t 'h1',\n\t { className: 'SliderArticleList-sliderItemHeadline' },\n\t smallHeadline\n\t )\n\t ),\n\t timestamp\n\t )\n\t )\n\t );\n\t })\n\t )\n\t ),\n\t showReadMore ? _react2.default.createElement(_ReadMoreButton2.default, {\n\t link: categoryUrl,\n\t textColor: readMoreTextColor,\n\t text: readMoreText,\n\t backgroundColor: readMoreBackgroundColor }) : null\n\t );\n\t }\n\t }]);\n\t\n\t return SliderArticleList;\n\t}(_react.Component), _class.propTypes = {\n\t FRN_rawResponses: _react.PropTypes.array,\n\t title: _react.PropTypes.string,\n\t titleColor: _react.PropTypes.string,\n\t textColor: _react.PropTypes.string,\n\t startArticleIndex: _react.PropTypes.number,\n\t types: _react.PropTypes.array,\n\t displaySizes: _react.PropTypes.array,\n\t showTitle: _react.PropTypes.bool,\n\t numberOfItems: _react.PropTypes.number,\n\t layout: _react.PropTypes.string,\n\t showHeroByline: _react.PropTypes.bool,\n\t showListByline: _react.PropTypes.bool,\n\t heroTextColor: _react.PropTypes.string,\n\t heroBackgroundColor: _react.PropTypes.string,\n\t maintainHeroImageAspectRatio: _react.PropTypes.bool,\n\t heroImageBackgroundColor: _react.PropTypes.string,\n\t backgroundColor: _react.PropTypes.string,\n\t showTimestamp: _react.PropTypes.bool,\n\t showUpdatedDate: _react.PropTypes.bool,\n\t timestampOptions: _react.PropTypes.shape({\n\t showElapsedTime: _react.PropTypes.bool,\n\t displayShortDateTime: _react.PropTypes.bool\n\t }),\n\t showArrows: _react.PropTypes.bool,\n\t showMoreArrow: _react.PropTypes.bool,\n\t categoryUrl: _react.PropTypes.string,\n\t showReadMore: _react.PropTypes.bool,\n\t readMoreText: _react.PropTypes.string,\n\t readMoreBackgroundColor: _react.PropTypes.string,\n\t readMoreTextColor: _react.PropTypes.string,\n\t videoIconPlacement: _react.PropTypes.string,\n\t titleType: _react.PropTypes.string,\n\t // only for VideoPlayer\n\t onPlayVideo: _react.PropTypes.func,\n\t currentIndexVideo: _react.PropTypes.number\n\t}, _class.defaultProps = {\n\t startArticleIndex: 0,\n\t numberOfItems: 7,\n\t heroTextColor: \"#FFFFFF\",\n\t heroBackgroundColor: \"#333333\",\n\t maintainHeroImageAspectRatio: false,\n\t heroImageBackgroundColor: '#FFF',\n\t showReadMore: false,\n\t showMoreArrow: true,\n\t videoIconPlacement: 'center',\n\t showUpdatedDate: false,\n\t titleType: _FRNBaseStyles.TITLE_TYPE.MODULE_TITLE,\n\t types: ['story', 'clip', 'link']\n\t}, _temp);\n\texports.default = SliderArticleList;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 511 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tvar _class, _temp;\n\t\n\tvar _classnames = __webpack_require__(2);\n\t\n\tvar _classnames2 = _interopRequireDefault(_classnames);\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\t\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\t\n\tvar DownArrow = (_temp = _class = function (_Component) {\n\t _inherits(DownArrow, _Component);\n\t\n\t function DownArrow() {\n\t _classCallCheck(this, DownArrow);\n\t\n\t return _possibleConstructorReturn(this, (DownArrow.__proto__ || Object.getPrototypeOf(DownArrow)).apply(this, arguments));\n\t }\n\t\n\t _createClass(DownArrow, [{\n\t key: 'componentWillMount',\n\t value: function componentWillMount() {\n\t this.setState({\n\t display: this.props.arrowState || 'arrow' //Display the arrow by default\n\t });\n\t }\n\t }, {\n\t key: '_setArrowState',\n\t value: function _setArrowState(state) {\n\t this.setState({\n\t display: state\n\t });\n\t }\n\t }, {\n\t key: '_onClick',\n\t value: function _onClick() {\n\t var newState = {};\n\t\n\t if (this.props.arrowState || this.state.display === 'arrow') {\n\t newState.display = 'cross';\n\t this.props.onOpenClick && this.props.onOpenClick();\n\t } else {\n\t newState.display = 'arrow';\n\t this.props.onCloseClick && this.props.onCloseClick();\n\t }\n\t\n\t this.setState(newState);\n\t }\n\t }, {\n\t key: 'render',\n\t value: function render() {\n\t var arrowState = this.props.arrowState || this.state.display;\n\t var classes = (0, _classnames2.default)(\"down-arrow\", { \"close-arrow\": arrowState !== \"arrow\" });\n\t\n\t return _react2.default.createElement(\n\t 'a',\n\t { className: classes, onClick: this._onClick.bind(this) },\n\t _react2.default.createElement('div', { className: 'down-arrow-lines' })\n\t );\n\t }\n\t }]);\n\t\n\t return DownArrow;\n\t}(_react.Component), _class.propTypes = {\n\t arrowState: _react.PropTypes.string,\n\t onOpenClick: _react.PropTypes.func,\n\t onCloseClick: _react.PropTypes.func\n\t}, _temp);\n\texports.default = DownArrow;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 512 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tvar _class, _temp2;\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tvar _ComponentTitle = __webpack_require__(14);\n\t\n\tvar _ComponentTitle2 = _interopRequireDefault(_ComponentTitle);\n\t\n\tvar _classnames = __webpack_require__(2);\n\t\n\tvar _classnames2 = _interopRequireDefault(_classnames);\n\t\n\tvar _DOMUtils = __webpack_require__(119);\n\t\n\tvar _FRNBaseStyles = __webpack_require__(17);\n\t\n\tvar _WindowUtils = __webpack_require__(80);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\t\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\t\n\tvar IFrame = (_temp2 = _class = function (_Component) {\n\t _inherits(IFrame, _Component);\n\t\n\t function IFrame() {\n\t var _ref;\n\t\n\t var _temp, _this, _ret;\n\t\n\t _classCallCheck(this, IFrame);\n\t\n\t for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t args[_key] = arguments[_key];\n\t }\n\t\n\t return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = IFrame.__proto__ || Object.getPrototypeOf(IFrame)).call.apply(_ref, [this].concat(args))), _this), _this.state = {\n\t width: null,\n\t hieght: null\n\t }, _temp), _possibleConstructorReturn(_this, _ret);\n\t }\n\t\n\t _createClass(IFrame, [{\n\t key: 'componentDidMount',\n\t value: function componentDidMount() {\n\t var _this2 = this;\n\t\n\t this._updateIFrameDimensions();\n\t\n\t window.addEventListener('resize', function () {\n\t return _this2._updateIFrameDimensions();\n\t });\n\t }\n\t }, {\n\t key: 'componentWillUnmount',\n\t value: function componentWillUnmount() {\n\t var _this3 = this;\n\t\n\t window.removeEventListener('resize', function () {\n\t return _this3._updateIFrameDimensions();\n\t });\n\t }\n\t }, {\n\t key: '_updateIFrameDimensions',\n\t value: function _updateIFrameDimensions() {\n\t var _props$dimensionsPerB = this.props.dimensionsPerBreakpoint,\n\t dimensionsPerBreakpoint = _props$dimensionsPerB === undefined ? {} : _props$dimensionsPerB;\n\t\n\t var currentWindowBreakpointSize = (0, _WindowUtils.getCurrentWindowBreakpointSize)();\n\t var height = void 0;\n\t var width = void 0;\n\t\n\t if (dimensionsPerBreakpoint[currentWindowBreakpointSize]) {\n\t width = dimensionsPerBreakpoint[currentWindowBreakpointSize].width;\n\t height = dimensionsPerBreakpoint[currentWindowBreakpointSize].height;\n\t }\n\t\n\t this.setState({\n\t width: width,\n\t height: height\n\t });\n\t }\n\t }, {\n\t key: 'render',\n\t value: function render() {\n\t var _props = this.props,\n\t title = _props.title,\n\t url = _props.url,\n\t showBorder = _props.showBorder,\n\t borderColor = _props.borderColor,\n\t enableFullScreen = _props.enableFullScreen,\n\t sandbox = _props.sandbox,\n\t titleType = _props.titleType,\n\t showScrollBar = _props.showScrollBar;\n\t var _state = this.state,\n\t width = _state.width,\n\t height = _state.height;\n\t\n\t\n\t var iframeStyles = {\n\t width: width ? width + 'px' : null,\n\t height: height ? height + 'px' : null\n\t };\n\t /**\n\t * Because the iframe isn't responsive in ios browsers\n\t * issue https://stackoverflow.com/questions/23083462/how-to-get-an-iframe-to-be-responsive-in-ios-safari#answer-23083463\n\t */\n\t var isIOSDevice = (0, _DOMUtils.checkIOSDevice)();\n\t var iframeClassName = (0, _classnames2.default)('embed-responsive-item', 'IFrame-item', { 'IFrame-item--iOS': isIOSDevice });\n\t var scrolling = showScrollBar ? 'yes' : 'no';\n\t\n\t if (isIOSDevice && scrolling === 'yes') {\n\t iframeStyles['overflow'] = 'auto';\n\t iframeStyles['-webkit-overflow-scrolling'] = 'touch';\n\t\n\t scrolling = 'no';\n\t }\n\t\n\t return _react2.default.createElement(\n\t 'div',\n\t { className: 'IFrame' },\n\t title ? _react2.default.createElement(_ComponentTitle2.default, { titleType: titleType, title: title }) : null,\n\t _react2.default.createElement(\n\t 'div',\n\t { className: 'embed-responsive ' + (!height ? 'embed-responsive-16by9' : ''), style: iframeStyles },\n\t _react2.default.createElement('iframe', { className: iframeClassName,\n\t scrolling: scrolling,\n\t src: url,\n\t allowFullScreen: enableFullScreen,\n\t sandbox: sandbox ? sandbox : null,\n\t style: { border: showBorder ? '1px solid ' + borderColor : 'none' }\n\t })\n\t )\n\t );\n\t }\n\t }]);\n\t\n\t return IFrame;\n\t}(_react.Component), _class.propTypes = {\n\t title: _react.PropTypes.string,\n\t url: _react.PropTypes.string.isRequired,\n\t dimensionsPerBreakpoint: _react.PropTypes.object,\n\t showBorder: _react.PropTypes.bool,\n\t borderColor: _react.PropTypes.string,\n\t enableFullScreen: _react.PropTypes.bool,\n\t sandbox: _react.PropTypes.string,\n\t titleType: _react.PropTypes.string,\n\t showScrollBar: _react.PropTypes.bool\n\t}, _class.defaultProps = {\n\t showBorder: false,\n\t showScrollBar: false,\n\t enableFullscreen: false,\n\t borderColor: '',\n\t titleType: _FRNBaseStyles.TITLE_TYPE.MODULE_TITLE\n\t}, _temp2);\n\texports.default = IFrame;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 513 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tvar _class, _temp;\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\t\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\t\n\t/**\n\t * Class representing a general sub menu that can be used across the site. The intention for this menu is to select\n\t * an option that will be displayed within the module itself (i.e. not intended for external links).\n\t *\n\t * The general format for usage is:\n\t *