{"version":3,"file":"291.bundle.js","mappings":"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","sources":["webpack:///../node_modules/@paypalcorp/pp-react-alert/dist/@paypalcorp/pp-react-alert.esm.js","webpack:///../node_modules/@paypalcorp/pp-react-divider/dist/@paypalcorp/pp-react-divider.esm.js","webpack:///../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack:///../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack:///../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack:///../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack:///../node_modules/@paypalcorp/pp-react-dropdown/dist/@paypalcorp/pp-react-dropdown.esm.js","webpack:///../node_modules/@paypalcorp/pp-react-text-input/dist/@paypalcorp/pp-react-text-input.esm.js","webpack:///../node_modules/@paypalcorp/pp-react-masked-text-input/dist/@paypalcorp/pp-react-masked-text-input.esm.js","webpack:///../node_modules/@paypalcorp/pp-react-dropdown-menu/dist/@paypalcorp/pp-react-dropdown-menu.esm.js","webpack:///../node_modules/@paypalcorp/pp-react-phone-input/dist/@paypalcorp/pp-react-phone-input.esm.js","webpack:///../node_modules/@paypalcorp/pp-react-tile/dist/@paypalcorp/pp-react-tile.esm.js","webpack:///../node_modules/@paypalcorp/react-app-badges/dist/index.modern.js","webpack:///../node_modules/qr.js/lib/8BitByte.js","webpack:///../node_modules/qr.js/lib/BitBuffer.js","webpack:///../node_modules/qr.js/lib/ErrorCorrectLevel.js","webpack:///../node_modules/qr.js/lib/Polynomial.js","webpack:///../node_modules/qr.js/lib/QRCode.js","webpack:///../node_modules/qr.js/lib/RSBlock.js","webpack:///../node_modules/qr.js/lib/math.js","webpack:///../node_modules/qr.js/lib/mode.js","webpack:///../node_modules/qr.js/lib/util.js","webpack:///../node_modules/qrcode.react/lib/index.js","webpack:///../../server/node_modules/lodash/lodash.js","webpack:///../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack:///../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack:///../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack:///../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack:///../node_modules/@babel/runtime/helpers/esm/inherits.js","webpack:///../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack:///../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack:///../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack:///../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack:///../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack:///../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js"],"sourcesContent":["import _extends from '@babel/runtime/helpers/esm/extends';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport React from 'react';\nimport clsx from 'clsx';\nimport { IconButton } from '@paypalcorp/pp-react-icon-button';\nimport { V2InformationIcon, QuestionAltIcon, V2CloseIcon, CloseIcon, InfoAltIcon, CheckCircleAltIcon, WarningAltIcon, CriticalAltIcon, V2CheckmarkBackgroundIcon, V2WarningIcon, V2CriticalIcon } from '@paypalcorp/pp-react-icons';\nimport { useTheme } from '@paypalcorp/pp-react-theme';\nimport '../__generated__/styles/alert.css';\n\nvar styles = {\"ppvx_alert\":\"ppvx_alert___2-6-9-beta-0\",\"ppvx_alert__svg-icon\":\"ppvx_alert__svg-icon___2-6-9-beta-0\",\"ppvx_alert__close-btn--svg\":\"ppvx_alert__close-btn--svg___2-6-9-beta-0\",\"ppvx_alert__close-btn\":\"ppvx_alert__close-btn___2-6-9-beta-0\",\"ppvx_alert--type_attention\":\"ppvx_alert--type_attention___2-6-9-beta-0\",\"ppvx_alert--type_warning\":\"ppvx_alert--type_warning___2-6-9-beta-0\",\"ppvx_alert--type_info\":\"ppvx_alert--type_info___2-6-9-beta-0\",\"ppvx_alert--type_success\":\"ppvx_alert--type_success___2-6-9-beta-0\",\"ppvx_alert--type_error\":\"ppvx_alert--type_error___2-6-9-beta-0\",\"ppvx_alert--with-svg-icon\":\"ppvx_alert--with-svg-icon___2-6-9-beta-0\",\"ppvx_alert--no-close-btn\":\"ppvx_alert--no-close-btn___2-6-9-beta-0\",\"ppvx--v2\":\"ppvx--v2___2-6-9-beta-0\",\"ppvx--v1\":\"ppvx--v1___2-6-9-beta-0\"};\n\nvar icons = {\n info: InfoAltIcon,\n success: CheckCircleAltIcon,\n warning: WarningAltIcon,\n attention: WarningAltIcon,\n error: CriticalAltIcon\n};\nvar v2Icons = {\n info: V2InformationIcon,\n success: V2CheckmarkBackgroundIcon,\n warning: V2WarningIcon,\n attention: V2WarningIcon,\n error: V2CriticalIcon\n};\n\nvar Alert = function (_ref) {\n var _clsx;\n\n var className = _ref.className,\n type = _ref.type,\n closeButton = _ref.closeButton,\n _ref$closeButtonLabel = _ref.closeButtonLabel,\n closeButtonLabel = _ref$closeButtonLabel === void 0 ? 'close alert' : _ref$closeButtonLabel,\n children = _ref.children,\n theme = _ref.theme,\n rest = _objectWithoutProperties(_ref, [\"className\", \"type\", \"closeButton\", \"closeButtonLabel\", \"children\", \"theme\"]);\n\n var _theme = useTheme('Alert', theme);\n\n var isThemeV2 = _theme && _theme === 'v2';\n /* istanbul ignore next */\n\n var AlertStatusIcon = isThemeV2 ? v2Icons[type] || V2InformationIcon : icons[type] || QuestionAltIcon;\n var closeIcon, btnType, btnSize;\n\n if (isThemeV2) {\n closeIcon = V2CloseIcon;\n btnType = 'tertiary';\n btnSize = 'sm';\n } else {\n closeIcon = CloseIcon;\n btnType = 'primary';\n }\n\n var alertClasses = clsx(styles.ppvx_alert, styles['ppvx_alert--with-svg-icon'], (_clsx = {}, _defineProperty(_clsx, styles[\"ppvx_alert--type_\".concat(type)], type), _defineProperty(_clsx, styles[\"ppvx_alert--no-close-btn\"], !closeButton), _defineProperty(_clsx, styles['ppvx--v2'], isThemeV2), _clsx), className);\n var closeBtnEl;\n\n if (closeButton) {\n var closeButtonCls = closeButton.className,\n otherProps = _objectWithoutProperties(closeButton, [\"className\"]);\n\n var closeButtonClass = clsx(styles['ppvx_alert__close-btn--svg'], closeButtonCls);\n closeBtnEl = closeButton && /*#__PURE__*/React.createElement(\"span\", null, /*#__PURE__*/React.createElement(IconButton, _extends({\n buttonType: btnType,\n size: btnSize,\n theme: isThemeV2 && 'v2',\n svgIconComponent: closeIcon,\n className: closeButtonClass\n }, otherProps), closeButtonLabel));\n }\n\n var alertIconClass = styles['ppvx_alert__svg-icon'];\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n role: \"alert\",\n className: alertClasses\n }, rest), /*#__PURE__*/React.createElement(AlertStatusIcon, {\n size: \"sm\",\n className: alertIconClass\n }), children, closeBtnEl);\n};\n\nexport { Alert };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport React from 'react';\nimport { useTheme } from '@paypalcorp/pp-react-theme';\nimport clsx from 'clsx';\nimport '../__generated__/styles/divider.css';\n\nvar styles = {\"ppvx_divider\":\"ppvx_divider___3-5-12-beta-0\",\"ppvx_divider--inverse\":\"ppvx_divider--inverse___3-5-12-beta-0\",\"ppvx_divider--secondary\":\"ppvx_divider--secondary___3-5-12-beta-0\",\"ppvx--v2\":\"ppvx--v2___3-5-12-beta-0\",\"ppvx--v1\":\"ppvx--v1___3-5-12-beta-0\",\"pvx--v2\":\"pvx--v2___3-5-12-beta-0\"};\n\nvar Divider = function (_ref) {\n var _clsx;\n\n var secondary = _ref.secondary,\n inverse = _ref.inverse,\n className = _ref.className,\n theme = _ref.theme,\n rest = _objectWithoutProperties(_ref, [\"secondary\", \"inverse\", \"className\", \"theme\"]);\n\n var _theme = useTheme('Divider', theme);\n\n var finalClasses = clsx(styles.ppvx_divider, (_clsx = {}, _defineProperty(_clsx, styles['ppvx_divider--inverse'], inverse), _defineProperty(_clsx, styles['ppvx_divider--secondary'], secondary), _defineProperty(_clsx, styles['ppvx--v2'], _theme && _theme === 'v2'), _clsx), className);\n return /*#__PURE__*/React.createElement(\"hr\", _extends({\n className: finalClasses\n }, rest));\n};\n\nexport { Divider };\n","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport _toConsumableArray from '@babel/runtime/helpers/esm/toConsumableArray';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport React from 'react';\nimport clsx from 'clsx';\nimport '../__generated__/styles/dropdown.css';\n\nvar styles = {\"ppvx_dropdown__label\":\"ppvx_dropdown__label___3-4-29-beta-0\",\"ppvx_dropdown\":\"ppvx_dropdown___3-4-29-beta-0\",\"ppvx_dropdown__icon--left\":\"ppvx_dropdown__icon--left___3-4-29-beta-0\",\"ppvx_dropdown__icon--right\":\"ppvx_dropdown__icon--right___3-4-29-beta-0\",\"ppvx_dropdown__control\":\"ppvx_dropdown__control___3-4-29-beta-0\",\"ppvx_dropdown--nolabel\":\"ppvx_dropdown--nolabel___3-4-29-beta-0\",\"ppvx_field--error\":\"ppvx_field--error___3-4-29-beta-0\",\"ppvx_dropdown__control--icon-right\":\"ppvx_dropdown__control--icon-right___3-4-29-beta-0\",\"ppvx_dropdown__helper-text\":\"ppvx_dropdown__helper-text___3-4-29-beta-0\",\"ppvx_dropdown__error-text\":\"ppvx_dropdown__error-text___3-4-29-beta-0\"};\n\n/* istanbul ignore next */\nvar uniqueId = function (id) {\n var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '_';\n return id === undefined ? \"\".concat(prefix).concat(Math.random().toFixed(8).toString().replace('0.', '')) : id;\n};\n\nvar renderLabel = function (text, id) {\n return /*#__PURE__*/React.createElement(\"label\", {\n className: styles.ppvx_dropdown__label,\n htmlFor: id\n }, text);\n}; // Get either the error message or helper text or... nothing\n\n\nvar renderMessage = function (errorText, helperText, msgId) {\n return errorText && /*#__PURE__*/React.createElement(\"div\", {\n className: styles['ppvx_dropdown__error-text'],\n id: msgId\n }, errorText) || helperText && /*#__PURE__*/React.createElement(\"div\", {\n className: styles['ppvx_dropdown__helper-text'],\n id: msgId\n }, helperText) || null;\n};\n\nvar renderIcon = function (icon, side) {\n return icon ? React.cloneElement(icon, {\n className: clsx(icon.className, styles[\"ppvx_dropdown__icon--\".concat(side)])\n }) : null;\n};\n\nvar Dropdown = function (_ref) {\n var _clsx;\n\n var className = _ref.className,\n errorText = _ref.errorText,\n helperText = _ref.helperText,\n id = _ref.id,\n label = _ref.label,\n _ref$value = _ref.value,\n value = _ref$value === void 0 ? '' : _ref$value,\n leftIcon = _ref.leftIcon,\n rightIcon = _ref.rightIcon,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? [] : _ref$options,\n onChange = _ref.onChange,\n placeholder = _ref.placeholder,\n dir = _ref.dir,\n rest = _objectWithoutProperties(_ref, [\"className\", \"errorText\", \"helperText\", \"id\", \"label\", \"value\", \"leftIcon\", \"rightIcon\", \"options\", \"onChange\", \"placeholder\", \"dir\"]);\n\n var internalOptions = _toConsumableArray(options);\n\n var ddId = uniqueId(id, 'Dropdown_');\n var error = !!errorText;\n var msgId = \"message_\".concat(ddId);\n var hasOptions = options && options.length > 0;\n var containerClass = clsx(styles.ppvx_dropdown, className, (_clsx = {}, _defineProperty(_clsx, styles['ppvx_field--error'], error), _defineProperty(_clsx, styles['ppvx_dropdown--nolabel'], !label), _clsx)); // Add in placeholder selection option\n\n if (placeholder !== undefined) {\n internalOptions = [{\n label: placeholder,\n disabled: true,\n hidden: true,\n value: ''\n }].concat(_toConsumableArray(internalOptions));\n }\n\n var valueProps = onChange ? {\n onChange: onChange,\n value: value\n } : {\n defaultValue: value\n };\n var inputTagClasses = clsx(styles.ppvx_dropdown__control, _defineProperty({}, styles['ppvx_dropdown__control--icon-right'], rightIcon));\n return /*#__PURE__*/React.createElement(\"div\", {\n className: containerClass,\n dir: dir\n }, renderIcon(leftIcon, 'left'), /*#__PURE__*/React.createElement(\"select\", _extends({\n id: ddId,\n className: inputTagClasses,\n \"aria-invalid\": error,\n \"aria-describedby\": errorText || helperText ? msgId : null // This is gonna blow at some point, let's get rid of it when it does and remove a dropdown variant\n // Brian Cox is going to do this work.\n // I assert that the 'required' attribute is not useful in a react environment\n // So I am commandeering it for my own purposes. If someone can show me a\n // valid use case, I will solve this issue a different way... --BCC\n ,\n required: placeholder === ''\n }, valueProps, rest), hasOptions && internalOptions.map(function (_ref2, index) {\n var optionLabel = _ref2.label,\n opts = _objectWithoutProperties(_ref2, [\"label\"]);\n\n return /*#__PURE__*/React.createElement(\"option\", _extends({\n key: index\n }, opts), optionLabel);\n })), label && renderLabel(label, ddId), renderMessage(errorText, helperText, msgId), renderIcon(rightIcon, 'right'));\n};\n\nexport { Dropdown };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport React, { useEffect, useState, forwardRef, useRef, useContext } from 'react';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport { V2CriticalIcon, CriticalAltIcon, V2CheckmarkBackgroundIcon, CheckCircleAltIcon } from '@paypalcorp/pp-react-icons';\nimport clsx from 'clsx';\nimport { useTheme } from '@paypalcorp/pp-react-theme';\nimport _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';\nimport { IntlContext, getFormattedMessage } from '@paypalcorp/pp-react-intl';\nimport '../__generated__/styles/text-input.css';\n\nvar styles = {\"ppvx_text-input__label\":\"ppvx_text-input__label___3-12-11-beta-0\",\"ppvx_text-input__label--screenreader\":\"ppvx_text-input__label--screenreader___3-12-11-beta-0\",\"ppvx_text-input__helper-text\":\"ppvx_text-input__helper-text___3-12-11-beta-0\",\"ppvx_text-input\":\"ppvx_text-input___3-12-11-beta-0\",\"ppvx_text-input__icon--right\":\"ppvx_text-input__icon--right___3-12-11-beta-0\",\"ppvx_text-input__icon--left\":\"ppvx_text-input__icon--left___3-12-11-beta-0\",\"ppvx_text-input--layerfix\":\"ppvx_text-input--layerfix___3-12-11-beta-0\",\"ppvx_text-input__placemat\":\"ppvx_text-input__placemat___3-12-11-beta-0\",\"ppvx_text-input__control\":\"ppvx_text-input__control___3-12-11-beta-0\",\"ppvx_text-input--nolabel\":\"ppvx_text-input--nolabel___3-12-11-beta-0\",\"ppvx_field--error\":\"ppvx_field--error___3-12-11-beta-0\",\"ppvx_combo--open\":\"ppvx_combo--open___3-12-11-beta-0\",\"ppvx_text-input--combine-right\":\"ppvx_text-input--combine-right___3-12-11-beta-0\",\"ppvx_text-input--combine-both\":\"ppvx_text-input--combine-both___3-12-11-beta-0\",\"ppvx_text-input__prefix-wrapper\":\"ppvx_text-input__prefix-wrapper___3-12-11-beta-0\",\"ppvx_text-input__prefix-wrapper--focus\":\"ppvx_text-input__prefix-wrapper--focus___3-12-11-beta-0\",\"ppvx_text-input__control--icon-right\":\"ppvx_text-input__control--icon-right___3-12-11-beta-0\",\"ppvx_text-input--combine-left\":\"ppvx_text-input--combine-left___3-12-11-beta-0\",\"ppvx_text-input--permafocus\":\"ppvx_text-input--permafocus___3-12-11-beta-0\",\"ppvx_combo\":\"ppvx_combo___3-12-11-beta-0\",\"ppvx_text-input__error-text\":\"ppvx_text-input__error-text___3-12-11-beta-0\",\"ppvx_text-input__error-icon\":\"ppvx_text-input__error-icon___3-12-11-beta-0\",\"ppvx_text-input__success-icon\":\"ppvx_text-input__success-icon___3-12-11-beta-0\",\"ppvx_text-input__error-text--list\":\"ppvx_text-input__error-text--list___3-12-11-beta-0\",\"ppvx_text-input__prefix\":\"ppvx_text-input__prefix___3-12-11-beta-0\",\"ppvx_text-input__suffix\":\"ppvx_text-input__suffix___3-12-11-beta-0\",\"ppvx_text-input__control--prefix\":\"ppvx_text-input__control--prefix___3-12-11-beta-0\",\"ppvx_text-input__control--suffix\":\"ppvx_text-input__control--suffix___3-12-11-beta-0\",\"ppvx_text-input__error-text--with-svg-icon\":\"ppvx_text-input__error-text--with-svg-icon___3-12-11-beta-0\",\"ppvx--v2\":\"ppvx--v2___3-12-11-beta-0\",\"ppvx--v1\":\"ppvx--v1___3-12-11-beta-0\",\"ppvx_text-input--auto-grow\":\"ppvx_text-input--auto-grow___3-12-11-beta-0\",\"ppvx_text-input__counter-wrapper\":\"ppvx_text-input__counter-wrapper___3-12-11-beta-0\",\"ppvx_text-input__counter-text\":\"ppvx_text-input__counter-text___3-12-11-beta-0\",\"ppvx_text-input__counter-wrapper--focus\":\"ppvx_text-input__counter-wrapper--focus___3-12-11-beta-0\",\"ppvx_screenreader\":\"ppvx_screenreader___3-12-11-beta-0\",\"ppvx_body--no-scrolling\":\"ppvx_body--no-scrolling___3-12-11-beta-0\",\"ppvx_visible-only-in-context\":\"ppvx_visible-only-in-context___3-12-11-beta-0\",\"ppvx_text-ellipsis\":\"ppvx_text-ellipsis___3-12-11-beta-0\"};\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar FormMessage = function (_ref) {\n var messageId = _ref.messageId,\n helperText = _ref.helperText,\n errorText = _ref.errorText,\n successText = _ref.successText,\n theme = _ref.theme;\n\n // errorText takes higher priority over helperText\n if (errorText || successText) {\n var _errorIcon;\n\n var text = errorText ? errorText : successText;\n var processText = Array.isArray(text) ? /*#__PURE__*/React.createElement(\"ul\", {\n className: styles['ppvx_text-input__error-text--list']\n }, text.map(function (msg, index) {\n return /*#__PURE__*/React.createElement(\"li\", {\n key: \"msg\".concat(messageId, \"-\").concat(index)\n }, msg);\n })) : text;\n var errorIcon, successIcon;\n\n if (errorText) {\n errorIcon = theme === 'v2' ? /*#__PURE__*/React.createElement(V2CriticalIcon, {\n className: styles['ppvx_text-input__error-icon'],\n size: \"sm\"\n }) : /*#__PURE__*/React.createElement(CriticalAltIcon, {\n className: styles['ppvx_text-input__error-icon'],\n size: \"xs\"\n });\n }\n\n if (!errorText) {\n successIcon = theme === 'v2' ? /*#__PURE__*/React.createElement(V2CheckmarkBackgroundIcon, {\n className: styles['ppvx_text-input__success-icon'],\n size: \"sm\"\n }) : /*#__PURE__*/React.createElement(CheckCircleAltIcon, {\n className: styles['ppvx_text-input__success-icon'],\n size: \"xs\"\n });\n }\n\n return /*#__PURE__*/React.createElement(\"div\", {\n className: clsx(styles['ppvx_text-input__error-text'], styles['ppvx_text-input__error-text--with-svg-icon']),\n id: messageId,\n role: \"alert\"\n }, (_errorIcon = errorIcon) !== null && _errorIcon !== void 0 ? _errorIcon : successIcon, processText);\n }\n\n if (helperText) {\n var _processText = Array.isArray(helperText) ? /*#__PURE__*/React.createElement(\"ul\", {\n className: styles['ppvx_text-input__helper-text'],\n id: messageId\n }, helperText.map(function (msg, index) {\n return /*#__PURE__*/React.createElement(\"li\", {\n key: \"msg\".concat(messageId, \"-\").concat(index)\n }, msg);\n })) : /*#__PURE__*/React.createElement(\"div\", {\n className: styles['ppvx_text-input__helper-text'],\n id: messageId\n }, helperText);\n\n return _processText;\n }\n\n return null;\n};\n\nvar renderIcon = function (icon, side) {\n return icon ? React.cloneElement(icon, {\n className: clsx(icon.props.className, styles[\"ppvx_text-input__icon--\".concat(side)])\n }) : null;\n};\n\nvar TextInputWrapper = function (_ref2) {\n var _clsx;\n\n var setFocus = _ref2.setFocus,\n className = _ref2.className,\n inputClassName = _ref2.inputClassName,\n labelClassName = _ref2.labelClassName,\n successText = _ref2.successText,\n errorText = _ref2.errorText,\n _ref2$error = _ref2.error,\n error = _ref2$error === void 0 ? !!errorText : _ref2$error,\n helperText = _ref2.helperText,\n value = _ref2.value,\n name = _ref2.name,\n _ref2$id = _ref2.id,\n id = _ref2$id === void 0 ? \"text-input-\".concat(name) : _ref2$id,\n label = _ref2.label,\n isLabelHidden = _ref2.isLabelHidden,\n _ref2$multiline = _ref2.multiline,\n multiline = _ref2$multiline === void 0 ? false : _ref2$multiline,\n _ref2$placeholder = _ref2.placeholder,\n placeholder = _ref2$placeholder === void 0 ? ' ' : _ref2$placeholder,\n placemat = _ref2.placemat,\n _ref2$leftIcon = _ref2.leftIcon,\n leftIcon = _ref2$leftIcon === void 0 ? null : _ref2$leftIcon,\n _ref2$rightIcon = _ref2.rightIcon,\n rightIcon = _ref2$rightIcon === void 0 ? null : _ref2$rightIcon,\n onChange = _ref2.onChange,\n children = _ref2.children,\n renderContent = _ref2.renderContent,\n removeBorderRadiusLeft = _ref2.removeBorderRadiusLeft,\n removeBorderRadiusRight = _ref2.removeBorderRadiusRight,\n removeBorderRadiusBoth = _ref2.removeBorderRadiusBoth,\n dir = _ref2.dir,\n theme = _ref2.theme,\n rest = _objectWithoutProperties(_ref2, [\"setFocus\", \"className\", \"inputClassName\", \"labelClassName\", \"successText\", \"errorText\", \"error\", \"helperText\", \"value\", \"name\", \"id\", \"label\", \"isLabelHidden\", \"multiline\", \"placeholder\", \"placemat\", \"leftIcon\", \"rightIcon\", \"onChange\", \"children\", \"renderContent\", \"removeBorderRadiusLeft\", \"removeBorderRadiusRight\", \"removeBorderRadiusBoth\", \"dir\", \"theme\"]);\n\n var _theme = useTheme('TextInput', theme);\n\n var InputTag = multiline ? 'textarea' : 'input';\n var mainClasses = clsx(styles['ppvx_text-input'], (_clsx = {}, _defineProperty(_clsx, styles['ppvx_field--error'], error), _defineProperty(_clsx, styles['ppvx_text-input--nolabel'], !label || label === '' || isLabelHidden), _defineProperty(_clsx, styles['ppvx_text-input--textarea'], multiline), _defineProperty(_clsx, styles['ppvx_text-input--combine-left'], removeBorderRadiusLeft), _defineProperty(_clsx, styles['ppvx_text-input--combine-right'], removeBorderRadiusRight), _defineProperty(_clsx, styles['ppvx_text-input--combine-both'], removeBorderRadiusBoth), _defineProperty(_clsx, styles['ppvx--v2'], _theme === 'v2'), _clsx), className);\n var inputTagClasses = clsx(styles['ppvx_text-input__control'], _defineProperty({}, styles['ppvx_text-input__control--icon-right'], rightIcon), inputClassName);\n var labelClasses = clsx(styles['ppvx_text-input__label'], labelClassName);\n var msgId = \"message_\".concat(id);\n var valueProps = onChange ? {\n onChange: onChange,\n value: value\n } : {\n defaultValue: value\n };\n var ariaDescribedByProp = helperText || errorText ? {\n 'aria-describedby': msgId\n } : {};\n\n var otherProps = _objectSpread(_objectSpread(_objectSpread({}, ariaDescribedByProp), valueProps), rest);\n\n return /*#__PURE__*/React.createElement(\"div\", {\n className: mainClasses,\n dir: dir\n }, renderIcon(leftIcon, 'left'), renderContent(_objectSpread({\n inputClassName: inputTagClasses,\n name: name,\n id: id,\n setFocus: setFocus,\n isValid: error,\n placeholder: placeholder,\n placemat: placemat,\n label: label,\n labelClassName: labelClasses,\n isLabelHidden: isLabelHidden,\n inputTag: InputTag\n }, otherProps)), /*#__PURE__*/React.createElement(FormMessage, {\n errorText: errorText,\n successText: successText,\n helperText: helperText,\n messageId: msgId,\n theme: _theme\n }), renderIcon(rightIcon, 'right'));\n};\n\nvar overlayValue = function () {\n var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var mask = arguments.length > 1 ? arguments[1] : undefined;\n var vLen = value.length;\n var mLen = mask.length;\n\n if (vLen >= mLen) {\n return value;\n }\n\n return value.concat(mask.substring(vLen));\n};\n\nvar Placemat = function (_ref) {\n var placeholder = _ref.placeholder,\n _ref$value = _ref.value,\n value = _ref$value === void 0 ? '' : _ref$value;\n var combinedText = overlayValue(value, placeholder);\n return /*#__PURE__*/React.createElement(\"div\", {\n className: styles['ppvx_text-input__placemat']\n }, combinedText);\n};\n\nvar TextInputContent = function (_ref2) {\n var inputClassName = _ref2.inputClassName,\n inputTag = _ref2.inputTag,\n name = _ref2.name,\n id = _ref2.id,\n setFocus = _ref2.setFocus,\n inputRef = _ref2.inputRef,\n isValid = _ref2.isValid,\n placeholder = _ref2.placeholder,\n placemat = _ref2.placemat,\n label = _ref2.label,\n labelClassName = _ref2.labelClassName,\n isLabelHidden = _ref2.isLabelHidden,\n rest = _objectWithoutProperties(_ref2, [\"inputClassName\", \"inputTag\", \"name\", \"id\", \"setFocus\", \"inputRef\", \"isValid\", \"placeholder\", \"placemat\", \"label\", \"labelClassName\", \"isLabelHidden\"]);\n\n // @ts-ignore\n var value = rest.value;\n var labelClasses = clsx(_defineProperty({}, styles['ppvx_text-input__label--screenreader'], isLabelHidden), labelClassName);\n useEffect(function () {\n var elem = inputRef.current;\n\n if (setFocus && elem) {\n elem.focus();\n }\n }, [setFocus]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, !!placemat && /*#__PURE__*/React.createElement(Placemat, {\n placeholder: placemat,\n value: value\n }), /*#__PURE__*/React.createElement(inputTag, _extends({\n className: inputClassName,\n name: name,\n id: id,\n ref: inputRef,\n \"aria-invalid\": isValid,\n placeholder: placeholder\n }, rest)), /*#__PURE__*/React.createElement(\"label\", {\n htmlFor: id,\n id: \"\".concat(id, \"-label\"),\n className: labelClasses\n }, label));\n};\n\nvar TextInputContentWithPrefixSuffix = function (_ref) {\n var label = _ref.label,\n id = _ref.id,\n prefix = _ref.prefix,\n suffix = _ref.suffix,\n prefixClassName = _ref.prefixClassName,\n suffixClassName = _ref.suffixClassName,\n inputClassName = _ref.inputClassName,\n inputRef = _ref.inputRef,\n _ref$onBlur = _ref.onBlur,\n onBlur = _ref$onBlur === void 0 ? null : _ref$onBlur,\n _ref$onFocus = _ref.onFocus,\n onFocus = _ref$onFocus === void 0 ? null : _ref$onFocus,\n rest = _objectWithoutProperties(_ref, [\"label\", \"id\", \"prefix\", \"suffix\", \"prefixClassName\", \"suffixClassName\", \"inputClassName\", \"inputRef\", \"onBlur\", \"onFocus\"]);\n\n var textInputRef = inputRef;\n\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n textInputHasFocus = _useState2[0],\n setTextInputFocus = _useState2[1];\n\n var inputClass = clsx(inputClassName, _defineProperty({}, styles['ppvx_text-input__control--prefix'], prefix), _defineProperty({}, styles['ppvx_text-input__control--suffix'], suffix));\n var PrefixClass = clsx(styles['ppvx_text-input__prefix'], prefixClassName);\n var SuffixClass = clsx(styles['ppvx_text-input__suffix'], suffixClassName);\n var prefixWrapperClass = clsx(styles['ppvx_text-input__prefix-wrapper'], _defineProperty({}, styles['ppvx_text-input__prefix-wrapper--focus'], textInputHasFocus));\n var labelId = label ? \"\".concat(id, \"-label \") : '';\n var prefixEleId = prefix ? \"\".concat(id, \"-prefix \") : '';\n var suffixEleId = suffix ? \"\".concat(id, \"-suffix\") : '';\n var ariaLabelledByIds = \"\".concat(labelId).concat(prefixEleId).concat(suffixEleId);\n return /*#__PURE__*/React.createElement(\"div\", {\n className: prefixWrapperClass,\n onClick: function handlePrefixWrapperClick() {\n /* istanbul ignore else */\n if (textInputRef.current) {\n var textInputElm = textInputRef.current;\n textInputElm.focus();\n }\n }\n }, /*#__PURE__*/React.createElement(TextInputContent, _extends({\n label: label,\n id: id,\n inputClassName: inputClass,\n inputRef: inputRef,\n onFocus: function handleFocus(event) {\n setTextInputFocus(true);\n /* istanbul ignore else */\n\n if (onFocus) {\n onFocus(event);\n }\n },\n onBlur: function handleBlur(event) {\n setTextInputFocus(false);\n /* istanbul ignore else */\n\n if (onBlur) {\n onBlur(event);\n }\n },\n \"aria-labelledby\": ariaLabelledByIds.trim()\n }, rest)), prefix && /*#__PURE__*/React.createElement(\"div\", {\n id: prefixEleId.trim(),\n className: PrefixClass\n }, prefix), suffix && /*#__PURE__*/React.createElement(\"div\", {\n id: suffixEleId.trim(),\n className: SuffixClass\n }, suffix));\n};\n\nvar TextInput = forwardRef(function (_ref, ref) {\n var prefix = _ref.prefix,\n suffix = _ref.suffix,\n prefixClassName = _ref.prefixClassName,\n suffixClassName = _ref.suffixClassName,\n props = _objectWithoutProperties(_ref, [\"prefix\", \"suffix\", \"prefixClassName\", \"suffixClassName\"]);\n\n var internalRef = useRef();\n var textInputRef = ref || internalRef;\n return /*#__PURE__*/React.createElement(TextInputWrapper, _extends({\n renderContent: function renderContent(_ref2) {\n var inputClassName = _ref2.inputClassName,\n name = _ref2.name,\n id = _ref2.id,\n setFocus = _ref2.setFocus,\n isValid = _ref2.isValid,\n placeholder = _ref2.placeholder,\n placemat = _ref2.placemat,\n label = _ref2.label,\n labelClassName = _ref2.labelClassName,\n inputTag = _ref2.inputTag,\n otherProps = _objectWithoutProperties(_ref2, [\"inputClassName\", \"name\", \"id\", \"setFocus\", \"isValid\", \"placeholder\", \"placemat\", \"label\", \"labelClassName\", \"inputTag\"]);\n\n if (prefix || suffix) {\n return /*#__PURE__*/React.createElement(TextInputContentWithPrefixSuffix, _extends({\n inputClassName: inputClassName,\n inputTag: inputTag,\n name: name,\n id: id,\n setFocus: setFocus,\n inputRef: textInputRef,\n isValid: isValid,\n placeholder: placeholder\n /*placemat={placemat} placemat is currently not supported with prefix and suffix*/\n ,\n label: label,\n labelClassName: labelClassName,\n prefix: prefix,\n suffix: suffix,\n prefixClassName: prefixClassName,\n suffixClassName: suffixClassName\n }, otherProps));\n }\n\n return /*#__PURE__*/React.createElement(TextInputContent, _extends({\n inputClassName: inputClassName,\n inputTag: inputTag,\n name: name,\n id: id,\n setFocus: setFocus,\n inputRef: textInputRef,\n isValid: isValid,\n placeholder: placeholder,\n placemat: placemat,\n label: label,\n labelClassName: labelClassName\n }, otherProps));\n }\n }, props));\n});\n\nvar MIN_ROWS = 2;\nvar MAX_ROWS = 6;\nvar DEFAULT_LINE_HEIGHT = 24;\nvar TextArea = forwardRef(function (_ref, ref) {\n var className = _ref.className,\n _ref$minRows = _ref.minRows,\n minRows = _ref$minRows === void 0 ? MIN_ROWS : _ref$minRows,\n _ref$maxRows = _ref.maxRows,\n maxRows = _ref$maxRows === void 0 ? MAX_ROWS : _ref$maxRows,\n _ref$showCharacterCou = _ref.showCharacterCounter,\n showCharacterCounter = _ref$showCharacterCou === void 0 ? false : _ref$showCharacterCou,\n maxCharacters = _ref.maxCharacters,\n counterStatusText = _ref.counterStatusText,\n _ref$onChange = _ref.onChange,\n onChange = _ref$onChange === void 0 ? null : _ref$onChange,\n _ref$onBlur = _ref.onBlur,\n onBlur = _ref$onBlur === void 0 ? null : _ref$onBlur,\n _ref$onFocus = _ref.onFocus,\n onFocus = _ref$onFocus === void 0 ? null : _ref$onFocus,\n value = _ref.value,\n rest = _objectWithoutProperties(_ref, [\"className\", \"minRows\", \"maxRows\", \"showCharacterCounter\", \"maxCharacters\", \"counterStatusText\", \"onChange\", \"onBlur\", \"onFocus\", \"value\"]);\n\n var baseCls = clsx(styles['ppvx_text-input--auto-grow'], className);\n var maxAllowedRows = maxRows ? Math.max(maxRows, MIN_ROWS) : MAX_ROWS;\n var minAllowedRows = minRows ? Math.max(minRows, MIN_ROWS) : MIN_ROWS;\n\n var _useState = useState(value ? value.length : 0),\n _useState2 = _slicedToArray(_useState, 2),\n charCount = _useState2[0],\n setCharCount = _useState2[1];\n\n var _useState3 = useState(false),\n _useState4 = _slicedToArray(_useState3, 2),\n isRTL = _useState4[0],\n setRTL = _useState4[1];\n\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n textAreaHasFocus = _useState6[0],\n setTextAreaFocus = _useState6[1];\n\n var internalRef = useRef();\n var textAreaRef = ref || internalRef;\n var intlContext = useContext(IntlContext);\n var bordersOffset = useRef(0);\n var maxHeight = useRef(DEFAULT_LINE_HEIGHT * maxAllowedRows);\n var minHeight = useRef(DEFAULT_LINE_HEIGHT * minAllowedRows);\n useEffect(function () {\n /* istanbul ignore next */\n if (textAreaRef.current) {\n var textAreaElm = textAreaRef.current;\n var offsetHeight = textAreaElm.offsetHeight,\n clientHeight = textAreaElm.clientHeight;\n var computedStyle = window.getComputedStyle(textAreaElm);\n var lineHeightValue = Number(computedStyle.getPropertyValue('line-height').split('px')[0]);\n var paddingBottomValue = Number(computedStyle.getPropertyValue('padding-bottom').split('px')[0]);\n var paddingTopValue = Number(computedStyle.getPropertyValue('padding-top').split('px')[0]);\n var lineHeight = Number.isNaN(lineHeightValue) ? DEFAULT_LINE_HEIGHT : lineHeightValue;\n var paddingBottom = Number.isNaN(paddingBottomValue) ? 0 : paddingBottomValue;\n var paddingTop = Number.isNaN(paddingTopValue) ? 0 : paddingTopValue;\n bordersOffset.current = offsetHeight - clientHeight;\n maxHeight.current = bordersOffset.current + paddingTop + paddingBottom + lineHeight * maxAllowedRows;\n minHeight.current = bordersOffset.current + paddingTop + paddingBottom + lineHeight * minAllowedRows; // eslint-disable-next-line\n\n textAreaElm.style.height = \"\".concat(minHeight.current, \"px\");\n setRTL(computedStyle.direction === 'rtl');\n }\n }, []);\n\n var handleCounterWrapperClick = function () {\n /* istanbul ignore else */\n if (textAreaRef.current) {\n var textAreaElm = textAreaRef.current;\n textAreaElm.focus();\n }\n };\n\n return /*#__PURE__*/React.createElement(TextInputWrapper, _extends({\n className: baseCls,\n value: value,\n onChange: function handleChange(event) {\n var textAreaElm = event.target; // eslint-disable-next-line\n\n textAreaElm.style.height = 'auto';\n var newHeight = textAreaElm.scrollHeight + bordersOffset.current;\n\n if (newHeight > maxHeight.current) {\n // eslint-disable-next-line\n textAreaElm.style.height = \"\".concat(maxHeight.current, \"px\");\n } else if (newHeight > minHeight.current) {\n // eslint-disable-next-line\n textAreaElm.style.height = \"\".concat(newHeight, \"px\");\n } else {\n // eslint-disable-next-line\n textAreaElm.style.height = \"\".concat(minHeight.current, \"px\");\n }\n\n setCharCount(textAreaElm.value.length);\n /* istanbul ignore else */\n\n if (onChange) {\n onChange(event);\n }\n },\n onFocus: function handleFocus(event) {\n setTextAreaFocus(true);\n /* istanbul ignore else */\n\n if (onFocus) {\n onFocus(event);\n }\n },\n onBlur: function handleBlur(event) {\n setTextAreaFocus(false);\n /* istanbul ignore else */\n\n if (onBlur) {\n onBlur(event);\n }\n },\n renderContent: function renderContent(_ref2) {\n var inputClassName = _ref2.inputClassName,\n name = _ref2.name,\n id = _ref2.id,\n setFocus = _ref2.setFocus,\n isValid = _ref2.isValid,\n placeholder = _ref2.placeholder,\n label = _ref2.label,\n labelClassName = _ref2.labelClassName,\n inputTag = _ref2.inputTag,\n placemat = _ref2.placemat,\n otherProps = _objectWithoutProperties(_ref2, [\"inputClassName\", \"name\", \"id\", \"setFocus\", \"isValid\", \"placeholder\", \"label\", \"labelClassName\", \"inputTag\", \"placemat\"]);\n\n var textInputContent = /*#__PURE__*/React.createElement(TextInputContent, _extends({\n inputClassName: inputClassName,\n inputTag: \"textarea\",\n name: name,\n id: id,\n setFocus: setFocus,\n inputRef: textAreaRef,\n isValid: isValid,\n placeholder: placeholder,\n label: label,\n labelClassName: labelClassName\n }, otherProps));\n\n if (showCharacterCounter) {\n var maxCharsText = maxCharacters ? isRTL ? \"\".concat(maxCharacters, \"/\") : \"/\".concat(maxCharacters) : '';\n var counterText = isRTL ? \"\".concat(maxCharsText).concat(charCount) : \"\".concat(charCount).concat(maxCharsText);\n var counterStatusMessage = getFormattedMessage(intlContext, \"\".concat(charCount, \" out of \").concat(maxCharacters, \" characters used\"), counterStatusText, {\n charCount: charCount,\n maxCharacters: maxCharacters\n });\n var wrapperCls = clsx(styles['ppvx_text-input__counter-wrapper'], textAreaHasFocus && styles['ppvx_text-input__counter-wrapper--focus']);\n return /*#__PURE__*/React.createElement(\"div\", {\n className: wrapperCls,\n onClick: handleCounterWrapperClick\n }, textInputContent, /*#__PURE__*/React.createElement(\"div\", {\n className: styles['ppvx_text-input__counter-text'],\n role: \"status\",\n \"aria-live\": \"polite\",\n \"aria-atomic\": \"true\",\n \"aria-label\": counterStatusMessage\n }, counterText));\n }\n\n return textInputContent;\n }\n }, rest));\n});\n\nexport { TextArea, TextInput };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _objectWithoutProperties$1 from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport React, { useRef, useEffect } from 'react';\nimport { TextInput } from '@paypalcorp/pp-react-text-input';\nimport { useTheme } from '@paypalcorp/pp-react-theme';\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = _getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}\n\nfunction _get(target, property, receiver) {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = _superPropBase(target, property);\n\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get(target, property, receiver || target);\n}\n\nfunction set(target, property, value, receiver) {\n if (typeof Reflect !== \"undefined\" && Reflect.set) {\n set = Reflect.set;\n } else {\n set = function set(target, property, value, receiver) {\n var base = _superPropBase(target, property);\n\n var desc;\n\n if (base) {\n desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.set) {\n desc.set.call(receiver, value);\n return true;\n } else if (!desc.writable) {\n return false;\n }\n }\n\n desc = Object.getOwnPropertyDescriptor(receiver, property);\n\n if (desc) {\n if (!desc.writable) {\n return false;\n }\n\n desc.value = value;\n Object.defineProperty(receiver, property, desc);\n } else {\n _defineProperty(receiver, property, value);\n }\n\n return true;\n };\n }\n\n return set(target, property, value, receiver);\n}\n\nfunction _set(target, property, value, receiver, isStrict) {\n var s = set(target, property, value, receiver || target);\n\n if (!s && isStrict) {\n throw new Error('failed to set property');\n }\n\n return value;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\n/** Checks if value is string */\nfunction isString(str) {\n return typeof str === 'string' || str instanceof String;\n}\n/**\n Direction\n @prop {string} NONE\n @prop {string} LEFT\n @prop {string} FORCE_LEFT\n @prop {string} RIGHT\n @prop {string} FORCE_RIGHT\n*/\n\nvar DIRECTION = {\n NONE: 'NONE',\n LEFT: 'LEFT',\n FORCE_LEFT: 'FORCE_LEFT',\n RIGHT: 'RIGHT',\n FORCE_RIGHT: 'FORCE_RIGHT'\n};\n/** */\n\nfunction forceDirection(direction) {\n switch (direction) {\n case DIRECTION.LEFT:\n return DIRECTION.FORCE_LEFT;\n\n case DIRECTION.RIGHT:\n return DIRECTION.FORCE_RIGHT;\n\n default:\n return direction;\n }\n}\n/** Escapes regular expression control chars */\n\nfunction escapeRegExp(str) {\n return str.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1');\n} // cloned from https://github.com/epoberezkin/fast-deep-equal with small changes\n\nfunction objectIncludes(b, a) {\n if (a === b) return true;\n var arrA = Array.isArray(a),\n arrB = Array.isArray(b),\n i;\n\n if (arrA && arrB) {\n if (a.length != b.length) return false;\n\n for (i = 0; i < a.length; i++) {\n if (!objectIncludes(a[i], b[i])) return false;\n }\n\n return true;\n }\n\n if (arrA != arrB) return false;\n\n if (a && b && _typeof(a) === 'object' && _typeof(b) === 'object') {\n var dateA = a instanceof Date,\n dateB = b instanceof Date;\n if (dateA && dateB) return a.getTime() == b.getTime();\n if (dateA != dateB) return false;\n var regexpA = a instanceof RegExp,\n regexpB = b instanceof RegExp;\n if (regexpA && regexpB) return a.toString() == b.toString();\n if (regexpA != regexpB) return false;\n var keys = Object.keys(a); // if (keys.length !== Object.keys(b).length) return false;\n\n for (i = 0; i < keys.length; i++) {\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n }\n\n for (i = 0; i < keys.length; i++) {\n if (!objectIncludes(b[keys[i]], a[keys[i]])) return false;\n }\n\n return true;\n } else if (a && b && typeof a === 'function' && typeof b === 'function') {\n return a.toString() === b.toString();\n }\n\n return false;\n}\n\n/** Provides details of changing input */\n\nvar ActionDetails = /*#__PURE__*/function () {\n /** Current input value */\n\n /** Current cursor position */\n\n /** Old input value */\n\n /** Old selection */\n function ActionDetails(value, cursorPos, oldValue, oldSelection) {\n _classCallCheck(this, ActionDetails);\n\n this.value = value;\n this.cursorPos = cursorPos;\n this.oldValue = oldValue;\n this.oldSelection = oldSelection; // double check if left part was changed (autofilling, other non-standard input triggers)\n\n while (this.value.slice(0, this.startChangePos) !== this.oldValue.slice(0, this.startChangePos)) {\n --this.oldSelection.start;\n }\n }\n /**\n Start changing position\n @readonly\n */\n\n\n _createClass(ActionDetails, [{\n key: \"startChangePos\",\n get: function get() {\n return Math.min(this.cursorPos, this.oldSelection.start);\n }\n /**\n Inserted symbols count\n @readonly\n */\n\n }, {\n key: \"insertedCount\",\n get: function get() {\n return this.cursorPos - this.startChangePos;\n }\n /**\n Inserted symbols\n @readonly\n */\n\n }, {\n key: \"inserted\",\n get: function get() {\n return this.value.substr(this.startChangePos, this.insertedCount);\n }\n /**\n Removed symbols count\n @readonly\n */\n\n }, {\n key: \"removedCount\",\n get: function get() {\n // Math.max for opposite operation\n return Math.max(this.oldSelection.end - this.startChangePos || // for Delete\n this.oldValue.length - this.value.length, 0);\n }\n /**\n Removed symbols\n @readonly\n */\n\n }, {\n key: \"removed\",\n get: function get() {\n return this.oldValue.substr(this.startChangePos, this.removedCount);\n }\n /**\n Unchanged head symbols\n @readonly\n */\n\n }, {\n key: \"head\",\n get: function get() {\n return this.value.substring(0, this.startChangePos);\n }\n /**\n Unchanged tail symbols\n @readonly\n */\n\n }, {\n key: \"tail\",\n get: function get() {\n return this.value.substring(this.startChangePos + this.insertedCount);\n }\n /**\n Remove direction\n @readonly\n */\n\n }, {\n key: \"removeDirection\",\n get: function get() {\n if (!this.removedCount || this.insertedCount) return DIRECTION.NONE; // align right if delete at right or if range removed (event with backspace)\n\n return this.oldSelection.end === this.cursorPos || this.oldSelection.start === this.cursorPos ? DIRECTION.RIGHT : DIRECTION.LEFT;\n }\n }]);\n\n return ActionDetails;\n}();\n\n/**\n Provides details of changing model value\n @param {Object} [details]\n @param {string} [details.inserted] - Inserted symbols\n @param {boolean} [details.skip] - Can skip chars\n @param {number} [details.removeCount] - Removed symbols count\n @param {number} [details.tailShift] - Additional offset if any changes occurred before tail\n*/\nvar ChangeDetails = /*#__PURE__*/function () {\n /** Inserted symbols */\n\n /** Can skip chars */\n\n /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n function ChangeDetails(details) {\n _classCallCheck(this, ChangeDetails);\n\n Object.assign(this, {\n inserted: '',\n rawInserted: '',\n skip: false,\n tailShift: 0\n }, details);\n }\n /**\n Aggregate changes\n @returns {ChangeDetails} `this`\n */\n\n\n _createClass(ChangeDetails, [{\n key: \"aggregate\",\n value: function aggregate(details) {\n this.rawInserted += details.rawInserted;\n this.skip = this.skip || details.skip;\n this.inserted += details.inserted;\n this.tailShift += details.tailShift;\n return this;\n }\n /** Total offset considering all changes */\n\n }, {\n key: \"offset\",\n get: function get() {\n return this.tailShift + this.inserted.length;\n }\n }]);\n\n return ChangeDetails;\n}();\n\n/** Provides details of continuous extracted tail */\nvar ContinuousTailDetails = /*#__PURE__*/function () {\n /** Tail value as string */\n\n /** Tail start position */\n\n /** Start position */\n function ContinuousTailDetails() {\n var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var stop = arguments.length > 2 ? arguments[2] : undefined;\n\n _classCallCheck(this, ContinuousTailDetails);\n\n this.value = value;\n this.from = from;\n this.stop = stop;\n }\n\n _createClass(ContinuousTailDetails, [{\n key: \"toString\",\n value: function toString() {\n return this.value;\n }\n }, {\n key: \"extend\",\n value: function extend(tail) {\n this.value += String(tail);\n }\n }, {\n key: \"appendTo\",\n value: function appendTo(masked) {\n return masked.append(this.toString(), {\n tail: true\n }).aggregate(masked._appendPlaceholder());\n }\n }, {\n key: \"state\",\n get: function get() {\n return {\n value: this.value,\n from: this.from,\n stop: this.stop\n };\n },\n set: function set(state) {\n Object.assign(this, state);\n }\n }, {\n key: \"shiftBefore\",\n value: function shiftBefore(pos) {\n if (this.from >= pos || !this.value.length) return '';\n var shiftChar = this.value[0];\n this.value = this.value.slice(1);\n return shiftChar;\n }\n }]);\n\n return ContinuousTailDetails;\n}();\n\n/**\n * Applies mask on element.\n * @constructor\n * @param {HTMLInputElement|HTMLTextAreaElement|MaskElement} el - Element to apply mask\n * @param {Object} opts - Custom mask options\n * @return {InputMask}\n */\nfunction IMask(el) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n // currently available only for input-like elements\n return new IMask.InputMask(el, opts);\n}\n\n/** Supported mask type */\n\n/** Provides common masking stuff */\nvar Masked = /*#__PURE__*/function () {\n // $Shape; TODO after fix https://github.com/facebook/flow/issues/4773\n\n /** @type {Mask} */\n\n /** */\n // $FlowFixMe no ideas\n\n /** Transforms value before mask processing */\n\n /** Validates if value is acceptable */\n\n /** Does additional processing in the end of editing */\n\n /** Format typed value to string */\n\n /** Parse strgin to get typed value */\n\n /** Enable characters overwriting */\n\n /** */\n function Masked(opts) {\n _classCallCheck(this, Masked);\n\n this._value = '';\n\n this._update(Object.assign({}, Masked.DEFAULTS, opts));\n\n this.isInitialized = true;\n }\n /** Sets and applies new options */\n\n\n _createClass(Masked, [{\n key: \"updateOptions\",\n value: function updateOptions(opts) {\n if (!Object.keys(opts).length) return;\n this.withValueRefresh(this._update.bind(this, opts));\n }\n /**\n Sets new options\n @protected\n */\n\n }, {\n key: \"_update\",\n value: function _update(opts) {\n Object.assign(this, opts);\n }\n /** Mask state */\n\n }, {\n key: \"state\",\n get: function get() {\n return {\n _value: this.value\n };\n },\n set: function set(state) {\n this._value = state._value;\n }\n /** Resets value */\n\n }, {\n key: \"reset\",\n value: function reset() {\n this._value = '';\n }\n /** */\n\n }, {\n key: \"value\",\n get: function get() {\n return this._value;\n },\n set: function set(value) {\n this.resolve(value);\n }\n /** Resolve new value */\n\n }, {\n key: \"resolve\",\n value: function resolve(value) {\n this.reset();\n this.append(value, {\n input: true\n }, '');\n this.doCommit();\n return this.value;\n }\n /** */\n\n }, {\n key: \"unmaskedValue\",\n get: function get() {\n return this.value;\n },\n set: function set(value) {\n this.reset();\n this.append(value, {}, '');\n this.doCommit();\n }\n /** */\n\n }, {\n key: \"typedValue\",\n get: function get() {\n return this.doParse(this.value);\n },\n set: function set(value) {\n this.value = this.doFormat(value);\n }\n /** Value that includes raw user input */\n\n }, {\n key: \"rawInputValue\",\n get: function get() {\n return this.extractInput(0, this.value.length, {\n raw: true\n });\n },\n set: function set(value) {\n this.reset();\n this.append(value, {\n raw: true\n }, '');\n this.doCommit();\n }\n /** */\n\n }, {\n key: \"isComplete\",\n get: function get() {\n return true;\n }\n /** Finds nearest input position in direction */\n\n }, {\n key: \"nearestInputPos\",\n value: function nearestInputPos(cursorPos, direction) {\n return cursorPos;\n }\n /** Extracts value in range considering flags */\n\n }, {\n key: \"extractInput\",\n value: function extractInput() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n return this.value.slice(fromPos, toPos);\n }\n /** Extracts tail in range */\n\n }, {\n key: \"extractTail\",\n value: function extractTail() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n return new ContinuousTailDetails(this.extractInput(fromPos, toPos), fromPos);\n }\n /** Appends tail */\n // $FlowFixMe no ideas\n\n }, {\n key: \"appendTail\",\n value: function appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n /** Appends char */\n\n }, {\n key: \"_appendCharRaw\",\n value: function _appendCharRaw(ch) {\n if (!ch) return new ChangeDetails();\n this._value += ch;\n return new ChangeDetails({\n inserted: ch,\n rawInserted: ch\n });\n }\n /** Appends char */\n\n }, {\n key: \"_appendChar\",\n value: function _appendChar(ch) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var checkTail = arguments.length > 2 ? arguments[2] : undefined;\n var consistentState = this.state;\n\n var details = this._appendCharRaw(this.doPrepare(ch, flags), flags);\n\n if (details.inserted) {\n var consistentTail;\n var appended = this.doValidate(flags) !== false;\n\n if (appended && checkTail != null) {\n // validation ok, check tail\n var beforeTailState = this.state;\n\n if (this.overwrite) {\n consistentTail = checkTail.state;\n checkTail.shiftBefore(this.value.length);\n }\n\n var tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted === checkTail.toString(); // if ok, rollback state after tail\n\n if (appended && tailDetails.inserted) this.state = beforeTailState;\n } // revert all if something went wrong\n\n\n if (!appended) {\n details = new ChangeDetails();\n this.state = consistentState;\n if (checkTail && consistentTail) checkTail.state = consistentTail;\n }\n }\n\n return details;\n }\n /** Appends optional placeholder at end */\n\n }, {\n key: \"_appendPlaceholder\",\n value: function _appendPlaceholder() {\n return new ChangeDetails();\n }\n /** Appends symbols considering flags */\n // $FlowFixMe no ideas\n\n }, {\n key: \"append\",\n value: function append(str, flags, tail) {\n if (!isString(str)) throw new Error('value should be string');\n var details = new ChangeDetails();\n var checkTail = isString(tail) ? new ContinuousTailDetails(String(tail)) : tail;\n if (flags && flags.tail) flags._beforeTailState = this.state;\n\n for (var ci = 0; ci < str.length; ++ci) {\n details.aggregate(this._appendChar(str[ci], flags, checkTail));\n } // append tail but aggregate only tailShift\n\n\n if (checkTail != null) {\n details.tailShift += this.appendTail(checkTail).tailShift; // TODO it's a good idea to clear state after appending ends\n // but it causes bugs when one append calls another (when dynamic dispatch set rawInputValue)\n // this._resetBeforeTailState();\n }\n\n return details;\n }\n /** */\n\n }, {\n key: \"remove\",\n value: function remove() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n this._value = this.value.slice(0, fromPos) + this.value.slice(toPos);\n return new ChangeDetails();\n }\n /** Calls function and reapplies current value */\n\n }, {\n key: \"withValueRefresh\",\n value: function withValueRefresh(fn) {\n if (this._refreshing || !this.isInitialized) return fn();\n this._refreshing = true;\n var rawInput = this.rawInputValue;\n var value = this.value;\n var ret = fn();\n this.rawInputValue = rawInput; // append lost trailing chars at end\n\n if (this.value && this.value !== value && value.indexOf(this.value) === 0) {\n this.append(value.slice(this.value.length), {}, '');\n }\n\n delete this._refreshing;\n return ret;\n }\n /** */\n\n }, {\n key: \"runIsolated\",\n value: function runIsolated(fn) {\n if (this._isolated || !this.isInitialized) return fn(this);\n this._isolated = true;\n var state = this.state;\n var ret = fn(this);\n this.state = state;\n delete this._isolated;\n return ret;\n }\n /**\n Prepares string before mask processing\n @protected\n */\n\n }, {\n key: \"doPrepare\",\n value: function doPrepare(str) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return this.prepare ? this.prepare(str, this, flags) : str;\n }\n /**\n Validates if value is acceptable\n @protected\n */\n\n }, {\n key: \"doValidate\",\n value: function doValidate(flags) {\n return (!this.validate || this.validate(this.value, this, flags)) && (!this.parent || this.parent.doValidate(flags));\n }\n /**\n Does additional processing in the end of editing\n @protected\n */\n\n }, {\n key: \"doCommit\",\n value: function doCommit() {\n if (this.commit) this.commit(this.value, this);\n }\n /** */\n\n }, {\n key: \"doFormat\",\n value: function doFormat(value) {\n return this.format ? this.format(value, this) : value;\n }\n /** */\n\n }, {\n key: \"doParse\",\n value: function doParse(str) {\n return this.parse ? this.parse(str, this) : str;\n }\n /** */\n\n }, {\n key: \"splice\",\n value: function splice(start, deleteCount, inserted, removeDirection) {\n var tailPos = start + deleteCount;\n var tail = this.extractTail(tailPos);\n var startChangePos = this.nearestInputPos(start, removeDirection);\n var changeDetails = new ChangeDetails({\n tailShift: startChangePos - start // adjust tailShift if start was aligned\n\n }).aggregate(this.remove(startChangePos)).aggregate(this.append(inserted, {\n input: true\n }, tail));\n return changeDetails;\n }\n }]);\n\n return Masked;\n}();\nMasked.DEFAULTS = {\n format: function format(v) {\n return v;\n },\n parse: function parse(v) {\n return v;\n }\n};\nIMask.Masked = Masked;\n\n/** Get Masked class by mask type */\n\nfunction maskedClass(mask) {\n if (mask == null) {\n throw new Error('mask property should be defined');\n } // $FlowFixMe\n\n\n if (mask instanceof RegExp) return IMask.MaskedRegExp; // $FlowFixMe\n\n if (isString(mask)) return IMask.MaskedPattern; // $FlowFixMe\n\n if (mask instanceof Date || mask === Date) return IMask.MaskedDate; // $FlowFixMe\n\n if (mask instanceof Number || typeof mask === 'number' || mask === Number) return IMask.MaskedNumber; // $FlowFixMe\n\n if (Array.isArray(mask) || mask === Array) return IMask.MaskedDynamic; // $FlowFixMe\n\n if (IMask.Masked && mask.prototype instanceof IMask.Masked) return mask; // $FlowFixMe\n\n if (mask instanceof Function) return IMask.MaskedFunction; // $FlowFixMe\n\n if (mask instanceof IMask.Masked) return mask.constructor;\n console.warn('Mask not found for mask', mask); // eslint-disable-line no-console\n // $FlowFixMe\n\n return IMask.Masked;\n}\n/** Creates new {@link Masked} depending on mask type */\n\nfunction createMask(opts) {\n // $FlowFixMe\n if (IMask.Masked && opts instanceof IMask.Masked) return opts;\n opts = Object.assign({}, opts);\n var mask = opts.mask; // $FlowFixMe\n\n if (IMask.Masked && mask instanceof IMask.Masked) return mask;\n var MaskedClass = maskedClass(mask);\n if (!MaskedClass) throw new Error('Masked class is not found for provided mask, appropriate module needs to be import manually before creating mask.');\n return new MaskedClass(opts);\n}\nIMask.createMask = createMask;\n\nvar _excluded = [\"mask\"];\nvar DEFAULT_INPUT_DEFINITIONS = {\n '0': /\\d/,\n 'a': /[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/,\n // http://stackoverflow.com/a/22075070\n '*': /./\n};\n/** */\n\nvar PatternInputDefinition = /*#__PURE__*/function () {\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n function PatternInputDefinition(opts) {\n _classCallCheck(this, PatternInputDefinition);\n\n var mask = opts.mask,\n blockOpts = _objectWithoutProperties(opts, _excluded);\n\n this.masked = createMask({\n mask: mask\n });\n Object.assign(this, blockOpts);\n }\n\n _createClass(PatternInputDefinition, [{\n key: \"reset\",\n value: function reset() {\n this._isFilled = false;\n this.masked.reset();\n }\n }, {\n key: \"remove\",\n value: function remove() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n\n if (fromPos === 0 && toPos >= 1) {\n this._isFilled = false;\n return this.masked.remove(fromPos, toPos);\n }\n\n return new ChangeDetails();\n }\n }, {\n key: \"value\",\n get: function get() {\n return this.masked.value || (this._isFilled && !this.isOptional ? this.placeholderChar : '');\n }\n }, {\n key: \"unmaskedValue\",\n get: function get() {\n return this.masked.unmaskedValue;\n }\n }, {\n key: \"isComplete\",\n get: function get() {\n return Boolean(this.masked.value) || this.isOptional;\n }\n }, {\n key: \"_appendChar\",\n value: function _appendChar(str) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (this._isFilled) return new ChangeDetails();\n var state = this.masked.state; // simulate input\n\n var details = this.masked._appendChar(str, flags);\n\n if (details.inserted && this.doValidate(flags) === false) {\n details.inserted = details.rawInserted = '';\n this.masked.state = state;\n }\n\n if (!details.inserted && !this.isOptional && !this.lazy && !flags.input) {\n details.inserted = this.placeholderChar;\n }\n\n details.skip = !details.inserted && !this.isOptional;\n this._isFilled = Boolean(details.inserted);\n return details;\n }\n }, {\n key: \"append\",\n value: function append() {\n var _this$masked;\n\n return (_this$masked = this.masked).append.apply(_this$masked, arguments);\n }\n }, {\n key: \"_appendPlaceholder\",\n value: function _appendPlaceholder() {\n var details = new ChangeDetails();\n if (this._isFilled || this.isOptional) return details;\n this._isFilled = true;\n details.inserted = this.placeholderChar;\n return details;\n }\n }, {\n key: \"extractTail\",\n value: function extractTail() {\n var _this$masked2;\n\n return (_this$masked2 = this.masked).extractTail.apply(_this$masked2, arguments);\n }\n }, {\n key: \"appendTail\",\n value: function appendTail() {\n var _this$masked3;\n\n return (_this$masked3 = this.masked).appendTail.apply(_this$masked3, arguments);\n }\n }, {\n key: \"extractInput\",\n value: function extractInput() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n var flags = arguments.length > 2 ? arguments[2] : undefined;\n return this.masked.extractInput(fromPos, toPos, flags);\n }\n }, {\n key: \"nearestInputPos\",\n value: function nearestInputPos(cursorPos) {\n var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DIRECTION.NONE;\n var minPos = 0;\n var maxPos = this.value.length;\n var boundPos = Math.min(Math.max(cursorPos, minPos), maxPos);\n\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return this.isComplete ? boundPos : minPos;\n\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n return this.isComplete ? boundPos : maxPos;\n\n case DIRECTION.NONE:\n default:\n return boundPos;\n }\n }\n }, {\n key: \"doValidate\",\n value: function doValidate() {\n var _this$masked4, _this$parent;\n\n return (_this$masked4 = this.masked).doValidate.apply(_this$masked4, arguments) && (!this.parent || (_this$parent = this.parent).doValidate.apply(_this$parent, arguments));\n }\n }, {\n key: \"doCommit\",\n value: function doCommit() {\n this.masked.doCommit();\n }\n }, {\n key: \"state\",\n get: function get() {\n return {\n masked: this.masked.state,\n _isFilled: this._isFilled\n };\n },\n set: function set(state) {\n this.masked.state = state.masked;\n this._isFilled = state._isFilled;\n }\n }]);\n\n return PatternInputDefinition;\n}();\n\nvar PatternFixedDefinition = /*#__PURE__*/function () {\n /** */\n\n /** */\n\n /** */\n\n /** */\n function PatternFixedDefinition(opts) {\n _classCallCheck(this, PatternFixedDefinition);\n\n Object.assign(this, opts);\n this._value = '';\n }\n\n _createClass(PatternFixedDefinition, [{\n key: \"value\",\n get: function get() {\n return this._value;\n }\n }, {\n key: \"unmaskedValue\",\n get: function get() {\n return this.isUnmasking ? this.value : '';\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this._isRawInput = false;\n this._value = '';\n }\n }, {\n key: \"remove\",\n value: function remove() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._value.length;\n this._value = this._value.slice(0, fromPos) + this._value.slice(toPos);\n if (!this._value) this._isRawInput = false;\n return new ChangeDetails();\n }\n }, {\n key: \"nearestInputPos\",\n value: function nearestInputPos(cursorPos) {\n var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DIRECTION.NONE;\n var minPos = 0;\n var maxPos = this._value.length;\n\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return minPos;\n\n case DIRECTION.NONE:\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n default:\n return maxPos;\n }\n }\n }, {\n key: \"extractInput\",\n value: function extractInput() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._value.length;\n var flags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return flags.raw && this._isRawInput && this._value.slice(fromPos, toPos) || '';\n }\n }, {\n key: \"isComplete\",\n get: function get() {\n return true;\n }\n }, {\n key: \"_appendChar\",\n value: function _appendChar(str) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var details = new ChangeDetails();\n if (this._value) return details;\n var appended = this.char === str[0];\n var isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && !flags.tail;\n if (isResolved) details.rawInserted = this.char;\n this._value = details.inserted = this.char;\n this._isRawInput = isResolved && (flags.raw || flags.input);\n return details;\n }\n }, {\n key: \"_appendPlaceholder\",\n value: function _appendPlaceholder() {\n var details = new ChangeDetails();\n if (this._value) return details;\n this._value = details.inserted = this.char;\n return details;\n }\n }, {\n key: \"extractTail\",\n value: function extractTail() {\n arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n return new ContinuousTailDetails('');\n } // $FlowFixMe no ideas\n\n }, {\n key: \"appendTail\",\n value: function appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n }, {\n key: \"append\",\n value: function append(str, flags, tail) {\n var details = this._appendChar(str, flags);\n\n if (tail != null) {\n details.tailShift += this.appendTail(tail).tailShift;\n }\n\n return details;\n }\n }, {\n key: \"doCommit\",\n value: function doCommit() {}\n }, {\n key: \"state\",\n get: function get() {\n return {\n _value: this._value,\n _isRawInput: this._isRawInput\n };\n },\n set: function set(state) {\n Object.assign(this, state);\n }\n }]);\n\n return PatternFixedDefinition;\n}();\n\nvar _excluded$1 = [\"chunks\"];\n\nvar ChunksTailDetails = /*#__PURE__*/function () {\n /** */\n function ChunksTailDetails() {\n var chunks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n _classCallCheck(this, ChunksTailDetails);\n\n this.chunks = chunks;\n this.from = from;\n }\n\n _createClass(ChunksTailDetails, [{\n key: \"toString\",\n value: function toString() {\n return this.chunks.map(String).join('');\n } // $FlowFixMe no ideas\n\n }, {\n key: \"extend\",\n value: function extend(tailChunk) {\n if (!String(tailChunk)) return;\n if (isString(tailChunk)) tailChunk = new ContinuousTailDetails(String(tailChunk));\n var lastChunk = this.chunks[this.chunks.length - 1];\n var extendLast = lastChunk && (lastChunk.stop === tailChunk.stop || tailChunk.stop == null) && // if tail chunk goes just after last chunk\n tailChunk.from === lastChunk.from + lastChunk.toString().length;\n\n if (tailChunk instanceof ContinuousTailDetails) {\n // check the ability to extend previous chunk\n if (extendLast) {\n // extend previous chunk\n lastChunk.extend(tailChunk.toString());\n } else {\n // append new chunk\n this.chunks.push(tailChunk);\n }\n } else if (tailChunk instanceof ChunksTailDetails) {\n if (tailChunk.stop == null) {\n // unwrap floating chunks to parent, keeping `from` pos\n var firstTailChunk;\n\n while (tailChunk.chunks.length && tailChunk.chunks[0].stop == null) {\n firstTailChunk = tailChunk.chunks.shift();\n firstTailChunk.from += tailChunk.from;\n this.extend(firstTailChunk);\n }\n } // if tail chunk still has value\n\n\n if (tailChunk.toString()) {\n // if chunks contains stops, then popup stop to container\n tailChunk.stop = tailChunk.blockIndex;\n this.chunks.push(tailChunk);\n }\n }\n }\n }, {\n key: \"appendTo\",\n value: function appendTo(masked) {\n // $FlowFixMe\n if (!(masked instanceof IMask.MaskedPattern)) {\n var tail = new ContinuousTailDetails(this.toString());\n return tail.appendTo(masked);\n }\n\n var details = new ChangeDetails();\n\n for (var ci = 0; ci < this.chunks.length && !details.skip; ++ci) {\n var chunk = this.chunks[ci];\n\n var lastBlockIter = masked._mapPosToBlock(masked.value.length);\n\n var stop = chunk.stop;\n var chunkBlock = void 0;\n\n if (stop != null && (!lastBlockIter || lastBlockIter.index <= stop)) {\n if (chunk instanceof ChunksTailDetails || // for continuous block also check if stop is exist\n masked._stops.indexOf(stop) >= 0) {\n details.aggregate(masked._appendPlaceholder(stop));\n }\n\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n\n if (chunkBlock) {\n var tailDetails = chunkBlock.appendTail(chunk);\n tailDetails.skip = false; // always ignore skip, it will be set on last\n\n details.aggregate(tailDetails);\n masked._value += tailDetails.inserted; // get not inserted chars\n\n var remainChars = chunk.toString().slice(tailDetails.rawInserted.length);\n if (remainChars) details.aggregate(masked.append(remainChars, {\n tail: true\n }));\n } else {\n details.aggregate(masked.append(chunk.toString(), {\n tail: true\n }));\n }\n }\n return details;\n }\n }, {\n key: \"state\",\n get: function get() {\n return {\n chunks: this.chunks.map(function (c) {\n return c.state;\n }),\n from: this.from,\n stop: this.stop,\n blockIndex: this.blockIndex\n };\n },\n set: function set(state) {\n var chunks = state.chunks,\n props = _objectWithoutProperties(state, _excluded$1);\n\n Object.assign(this, props);\n this.chunks = chunks.map(function (cstate) {\n var chunk = \"chunks\" in cstate ? new ChunksTailDetails() : new ContinuousTailDetails(); // $FlowFixMe already checked above\n\n chunk.state = cstate;\n return chunk;\n });\n }\n }, {\n key: \"shiftBefore\",\n value: function shiftBefore(pos) {\n if (this.from >= pos || !this.chunks.length) return '';\n var chunkShiftPos = pos - this.from;\n var ci = 0;\n\n while (ci < this.chunks.length) {\n var chunk = this.chunks[ci];\n var shiftChar = chunk.shiftBefore(chunkShiftPos);\n\n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n ++ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n\n if (shiftChar) return shiftChar;\n }\n\n return '';\n }\n }]);\n\n return ChunksTailDetails;\n}();\n\n/** Masking by RegExp */\n\nvar MaskedRegExp = /*#__PURE__*/function (_Masked) {\n _inherits(MaskedRegExp, _Masked);\n\n var _super = _createSuper(MaskedRegExp);\n\n function MaskedRegExp() {\n _classCallCheck(this, MaskedRegExp);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(MaskedRegExp, [{\n key: \"_update\",\n value:\n /**\n @override\n @param {Object} opts\n */\n function _update(opts) {\n if (opts.mask) opts.validate = function (value) {\n return value.search(opts.mask) >= 0;\n };\n\n _get(_getPrototypeOf(MaskedRegExp.prototype), \"_update\", this).call(this, opts);\n }\n }]);\n\n return MaskedRegExp;\n}(Masked);\nIMask.MaskedRegExp = MaskedRegExp;\n\nvar _excluded$2 = [\"_blocks\"];\n\n/**\n Pattern mask\n @param {Object} opts\n @param {Object} opts.blocks\n @param {Object} opts.definitions\n @param {string} opts.placeholderChar\n @param {boolean} opts.lazy\n*/\nvar MaskedPattern = /*#__PURE__*/function (_Masked) {\n _inherits(MaskedPattern, _Masked);\n\n var _super = _createSuper(MaskedPattern);\n\n /** */\n\n /** */\n\n /** Single char for empty input */\n\n /** Show placeholder only when needed */\n function MaskedPattern() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, MaskedPattern);\n\n // TODO type $Shape={} does not work\n opts.definitions = Object.assign({}, DEFAULT_INPUT_DEFINITIONS, opts.definitions);\n return _super.call(this, Object.assign({}, MaskedPattern.DEFAULTS, opts));\n }\n /**\n @override\n @param {Object} opts\n */\n\n\n _createClass(MaskedPattern, [{\n key: \"_update\",\n value: function _update() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n opts.definitions = Object.assign({}, this.definitions, opts.definitions);\n\n _get(_getPrototypeOf(MaskedPattern.prototype), \"_update\", this).call(this, opts);\n\n this._rebuildMask();\n }\n /** */\n\n }, {\n key: \"_rebuildMask\",\n value: function _rebuildMask() {\n var _this = this;\n\n var defs = this.definitions;\n this._blocks = [];\n this._stops = [];\n this._maskedBlocks = {};\n var pattern = this.mask;\n if (!pattern || !defs) return;\n var unmaskingBlock = false;\n var optionalBlock = false;\n\n for (var i = 0; i < pattern.length; ++i) {\n if (this.blocks) {\n var _ret = function () {\n var p = pattern.slice(i);\n var bNames = Object.keys(_this.blocks).filter(function (bName) {\n return p.indexOf(bName) === 0;\n }); // order by key length\n\n bNames.sort(function (a, b) {\n return b.length - a.length;\n }); // use block name with max length\n\n var bName = bNames[0];\n\n if (bName) {\n // $FlowFixMe no ideas\n var maskedBlock = createMask(Object.assign({\n parent: _this,\n lazy: _this.lazy,\n placeholderChar: _this.placeholderChar,\n overwrite: _this.overwrite\n }, _this.blocks[bName]));\n\n if (maskedBlock) {\n _this._blocks.push(maskedBlock); // store block index\n\n\n if (!_this._maskedBlocks[bName]) _this._maskedBlocks[bName] = [];\n\n _this._maskedBlocks[bName].push(_this._blocks.length - 1);\n }\n\n i += bName.length - 1;\n return \"continue\";\n }\n }();\n\n if (_ret === \"continue\") continue;\n }\n\n var char = pattern[i];\n\n var _isInput = (char in defs);\n\n if (char === MaskedPattern.STOP_CHAR) {\n this._stops.push(this._blocks.length);\n\n continue;\n }\n\n if (char === '{' || char === '}') {\n unmaskingBlock = !unmaskingBlock;\n continue;\n }\n\n if (char === '[' || char === ']') {\n optionalBlock = !optionalBlock;\n continue;\n }\n\n if (char === MaskedPattern.ESCAPE_CHAR) {\n ++i;\n char = pattern[i];\n if (!char) break;\n _isInput = false;\n }\n\n var def = _isInput ? new PatternInputDefinition({\n parent: this,\n lazy: this.lazy,\n placeholderChar: this.placeholderChar,\n mask: defs[char],\n isOptional: optionalBlock\n }) : new PatternFixedDefinition({\n char: char,\n isUnmasking: unmaskingBlock\n });\n\n this._blocks.push(def);\n }\n }\n /**\n @override\n */\n\n }, {\n key: \"state\",\n get: function get() {\n return Object.assign({}, _get(_getPrototypeOf(MaskedPattern.prototype), \"state\", this), {\n _blocks: this._blocks.map(function (b) {\n return b.state;\n })\n });\n },\n set: function set(state) {\n var _blocks = state._blocks,\n maskedState = _objectWithoutProperties(state, _excluded$2);\n\n this._blocks.forEach(function (b, bi) {\n return b.state = _blocks[bi];\n });\n\n _set(_getPrototypeOf(MaskedPattern.prototype), \"state\", maskedState, this, true);\n }\n /**\n @override\n */\n\n }, {\n key: \"reset\",\n value: function reset() {\n _get(_getPrototypeOf(MaskedPattern.prototype), \"reset\", this).call(this);\n\n this._blocks.forEach(function (b) {\n return b.reset();\n });\n }\n /**\n @override\n */\n\n }, {\n key: \"isComplete\",\n get: function get() {\n return this._blocks.every(function (b) {\n return b.isComplete;\n });\n }\n /**\n @override\n */\n\n }, {\n key: \"doCommit\",\n value: function doCommit() {\n this._blocks.forEach(function (b) {\n return b.doCommit();\n });\n\n _get(_getPrototypeOf(MaskedPattern.prototype), \"doCommit\", this).call(this);\n }\n /**\n @override\n */\n\n }, {\n key: \"unmaskedValue\",\n get: function get() {\n return this._blocks.reduce(function (str, b) {\n return str += b.unmaskedValue;\n }, '');\n },\n set: function set(unmaskedValue) {\n _set(_getPrototypeOf(MaskedPattern.prototype), \"unmaskedValue\", unmaskedValue, this, true);\n }\n /**\n @override\n */\n\n }, {\n key: \"value\",\n get: function get() {\n // TODO return _value when not in change?\n return this._blocks.reduce(function (str, b) {\n return str += b.value;\n }, '');\n },\n set: function set(value) {\n _set(_getPrototypeOf(MaskedPattern.prototype), \"value\", value, this, true);\n }\n /**\n @override\n */\n\n }, {\n key: \"appendTail\",\n value: function appendTail(tail) {\n return _get(_getPrototypeOf(MaskedPattern.prototype), \"appendTail\", this).call(this, tail).aggregate(this._appendPlaceholder());\n }\n /**\n @override\n */\n\n }, {\n key: \"_appendCharRaw\",\n value: function _appendCharRaw(ch) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var blockIter = this._mapPosToBlock(this.value.length);\n\n var details = new ChangeDetails();\n if (!blockIter) return details;\n\n for (var bi = blockIter.index;; ++bi) {\n var _block = this._blocks[bi];\n if (!_block) break;\n\n var blockDetails = _block._appendChar(ch, flags);\n\n var skip = blockDetails.skip;\n details.aggregate(blockDetails);\n if (skip || blockDetails.rawInserted) break; // go next char\n }\n\n return details;\n }\n /**\n @override\n */\n\n }, {\n key: \"extractTail\",\n value: function extractTail() {\n var _this2 = this;\n\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n var chunkTail = new ChunksTailDetails();\n if (fromPos === toPos) return chunkTail;\n\n this._forEachBlocksInRange(fromPos, toPos, function (b, bi, bFromPos, bToPos) {\n var blockChunk = b.extractTail(bFromPos, bToPos);\n blockChunk.stop = _this2._findStopBefore(bi);\n blockChunk.from = _this2._blockStartPos(bi);\n if (blockChunk instanceof ChunksTailDetails) blockChunk.blockIndex = bi;\n chunkTail.extend(blockChunk);\n });\n\n return chunkTail;\n }\n /**\n @override\n */\n\n }, {\n key: \"extractInput\",\n value: function extractInput() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n var flags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n if (fromPos === toPos) return '';\n var input = '';\n\n this._forEachBlocksInRange(fromPos, toPos, function (b, _, fromPos, toPos) {\n input += b.extractInput(fromPos, toPos, flags);\n });\n\n return input;\n }\n }, {\n key: \"_findStopBefore\",\n value: function _findStopBefore(blockIndex) {\n var stopBefore;\n\n for (var si = 0; si < this._stops.length; ++si) {\n var stop = this._stops[si];\n if (stop <= blockIndex) stopBefore = stop;else break;\n }\n\n return stopBefore;\n }\n /** Appends placeholder depending on laziness */\n\n }, {\n key: \"_appendPlaceholder\",\n value: function _appendPlaceholder(toBlockIndex) {\n var _this3 = this;\n\n var details = new ChangeDetails();\n if (this.lazy && toBlockIndex == null) return details;\n\n var startBlockIter = this._mapPosToBlock(this.value.length);\n\n if (!startBlockIter) return details;\n var startBlockIndex = startBlockIter.index;\n var endBlockIndex = toBlockIndex != null ? toBlockIndex : this._blocks.length;\n\n this._blocks.slice(startBlockIndex, endBlockIndex).forEach(function (b) {\n if (!b.lazy || toBlockIndex != null) {\n // $FlowFixMe `_blocks` may not be present\n var args = b._blocks != null ? [b._blocks.length] : [];\n\n var bDetails = b._appendPlaceholder.apply(b, args);\n\n _this3._value += bDetails.inserted;\n details.aggregate(bDetails);\n }\n });\n\n return details;\n }\n /** Finds block in pos */\n\n }, {\n key: \"_mapPosToBlock\",\n value: function _mapPosToBlock(pos) {\n var accVal = '';\n\n for (var bi = 0; bi < this._blocks.length; ++bi) {\n var _block2 = this._blocks[bi];\n var blockStartPos = accVal.length;\n accVal += _block2.value;\n\n if (pos <= accVal.length) {\n return {\n index: bi,\n offset: pos - blockStartPos\n };\n }\n }\n }\n /** */\n\n }, {\n key: \"_blockStartPos\",\n value: function _blockStartPos(blockIndex) {\n return this._blocks.slice(0, blockIndex).reduce(function (pos, b) {\n return pos += b.value.length;\n }, 0);\n }\n /** */\n\n }, {\n key: \"_forEachBlocksInRange\",\n value: function _forEachBlocksInRange(fromPos) {\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n var fn = arguments.length > 2 ? arguments[2] : undefined;\n\n var fromBlockIter = this._mapPosToBlock(fromPos);\n\n if (fromBlockIter) {\n var toBlockIter = this._mapPosToBlock(toPos); // process first block\n\n\n var isSameBlock = toBlockIter && fromBlockIter.index === toBlockIter.index;\n var fromBlockStartPos = fromBlockIter.offset;\n var fromBlockEndPos = toBlockIter && isSameBlock ? toBlockIter.offset : this._blocks[fromBlockIter.index].value.length;\n fn(this._blocks[fromBlockIter.index], fromBlockIter.index, fromBlockStartPos, fromBlockEndPos);\n\n if (toBlockIter && !isSameBlock) {\n // process intermediate blocks\n for (var bi = fromBlockIter.index + 1; bi < toBlockIter.index; ++bi) {\n fn(this._blocks[bi], bi, 0, this._blocks[bi].value.length);\n } // process last block\n\n\n fn(this._blocks[toBlockIter.index], toBlockIter.index, 0, toBlockIter.offset);\n }\n }\n }\n /**\n @override\n */\n\n }, {\n key: \"remove\",\n value: function remove() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n\n var removeDetails = _get(_getPrototypeOf(MaskedPattern.prototype), \"remove\", this).call(this, fromPos, toPos);\n\n this._forEachBlocksInRange(fromPos, toPos, function (b, _, bFromPos, bToPos) {\n removeDetails.aggregate(b.remove(bFromPos, bToPos));\n });\n\n return removeDetails;\n }\n /**\n @override\n */\n\n }, {\n key: \"nearestInputPos\",\n value: function nearestInputPos(cursorPos) {\n var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DIRECTION.NONE;\n // TODO refactor - extract alignblock\n var beginBlockData = this._mapPosToBlock(cursorPos) || {\n index: 0,\n offset: 0\n };\n var beginBlockOffset = beginBlockData.offset,\n beginBlockIndex = beginBlockData.index;\n var beginBlock = this._blocks[beginBlockIndex];\n if (!beginBlock) return cursorPos;\n var beginBlockCursorPos = beginBlockOffset; // if position inside block - try to adjust it\n\n if (beginBlockCursorPos !== 0 && beginBlockCursorPos < beginBlock.value.length) {\n beginBlockCursorPos = beginBlock.nearestInputPos(beginBlockOffset, forceDirection(direction));\n }\n\n var cursorAtRight = beginBlockCursorPos === beginBlock.value.length;\n var cursorAtLeft = beginBlockCursorPos === 0; // cursor is INSIDE first block (not at bounds)\n\n if (!cursorAtLeft && !cursorAtRight) return this._blockStartPos(beginBlockIndex) + beginBlockCursorPos;\n var searchBlockIndex = cursorAtRight ? beginBlockIndex + 1 : beginBlockIndex;\n\n if (direction === DIRECTION.NONE) {\n // NONE direction used to calculate start input position if no chars were removed\n // FOR NONE:\n // -\n // input|any\n // ->\n // any|input\n // <-\n // filled-input|any\n // check if first block at left is input\n if (searchBlockIndex > 0) {\n var blockIndexAtLeft = searchBlockIndex - 1;\n var blockAtLeft = this._blocks[blockIndexAtLeft];\n var blockInputPos = blockAtLeft.nearestInputPos(0, DIRECTION.NONE); // is input\n\n if (!blockAtLeft.value.length || blockInputPos !== blockAtLeft.value.length) {\n return this._blockStartPos(searchBlockIndex);\n }\n } // ->\n\n\n var firstInputAtRight = searchBlockIndex;\n\n for (var bi = firstInputAtRight; bi < this._blocks.length; ++bi) {\n var blockAtRight = this._blocks[bi];\n\n var _blockInputPos = blockAtRight.nearestInputPos(0, DIRECTION.NONE);\n\n if (!blockAtRight.value.length || _blockInputPos !== blockAtRight.value.length) {\n return this._blockStartPos(bi) + _blockInputPos;\n }\n } // <-\n // find first non-fixed symbol\n\n\n for (var _bi = searchBlockIndex - 1; _bi >= 0; --_bi) {\n var _block3 = this._blocks[_bi];\n\n var _blockInputPos2 = _block3.nearestInputPos(0, DIRECTION.NONE); // is input\n\n\n if (!_block3.value.length || _blockInputPos2 !== _block3.value.length) {\n return this._blockStartPos(_bi) + _block3.value.length;\n }\n }\n\n return cursorPos;\n }\n\n if (direction === DIRECTION.LEFT || direction === DIRECTION.FORCE_LEFT) {\n // -\n // any|filled-input\n // <-\n // any|first not empty is not-len-aligned\n // not-0-aligned|any\n // ->\n // any|not-len-aligned or end\n // check if first block at right is filled input\n var firstFilledBlockIndexAtRight;\n\n for (var _bi2 = searchBlockIndex; _bi2 < this._blocks.length; ++_bi2) {\n if (this._blocks[_bi2].value) {\n firstFilledBlockIndexAtRight = _bi2;\n break;\n }\n }\n\n if (firstFilledBlockIndexAtRight != null) {\n var filledBlock = this._blocks[firstFilledBlockIndexAtRight];\n\n var _blockInputPos3 = filledBlock.nearestInputPos(0, DIRECTION.RIGHT);\n\n if (_blockInputPos3 === 0 && filledBlock.unmaskedValue.length) {\n // filled block is input\n return this._blockStartPos(firstFilledBlockIndexAtRight) + _blockInputPos3;\n }\n } // <-\n // find this vars\n\n\n var firstFilledInputBlockIndex = -1;\n var firstEmptyInputBlockIndex; // TODO consider nested empty inputs\n\n for (var _bi3 = searchBlockIndex - 1; _bi3 >= 0; --_bi3) {\n var _block4 = this._blocks[_bi3];\n\n var _blockInputPos4 = _block4.nearestInputPos(_block4.value.length, DIRECTION.FORCE_LEFT);\n\n if (!_block4.value || _blockInputPos4 !== 0) firstEmptyInputBlockIndex = _bi3;\n\n if (_blockInputPos4 !== 0) {\n if (_blockInputPos4 !== _block4.value.length) {\n // aligned inside block - return immediately\n return this._blockStartPos(_bi3) + _blockInputPos4;\n } else {\n // found filled\n firstFilledInputBlockIndex = _bi3;\n break;\n }\n }\n }\n\n if (direction === DIRECTION.LEFT) {\n // try find first empty input before start searching position only when not forced\n for (var _bi4 = firstFilledInputBlockIndex + 1; _bi4 <= Math.min(searchBlockIndex, this._blocks.length - 1); ++_bi4) {\n var _block5 = this._blocks[_bi4];\n\n var _blockInputPos5 = _block5.nearestInputPos(0, DIRECTION.NONE);\n\n var blockAlignedPos = this._blockStartPos(_bi4) + _blockInputPos5;\n\n if (blockAlignedPos > cursorPos) break; // if block is not lazy input\n\n if (_blockInputPos5 !== _block5.value.length) return blockAlignedPos;\n }\n } // process overflow\n\n\n if (firstFilledInputBlockIndex >= 0) {\n return this._blockStartPos(firstFilledInputBlockIndex) + this._blocks[firstFilledInputBlockIndex].value.length;\n } // for lazy if has aligned left inside fixed and has came to the start - use start position\n\n\n if (direction === DIRECTION.FORCE_LEFT || this.lazy && !this.extractInput() && !isInput(this._blocks[searchBlockIndex])) {\n return 0;\n }\n\n if (firstEmptyInputBlockIndex != null) {\n return this._blockStartPos(firstEmptyInputBlockIndex);\n } // find first input\n\n\n for (var _bi5 = searchBlockIndex; _bi5 < this._blocks.length; ++_bi5) {\n var _block6 = this._blocks[_bi5];\n\n var _blockInputPos6 = _block6.nearestInputPos(0, DIRECTION.NONE); // is input\n\n\n if (!_block6.value.length || _blockInputPos6 !== _block6.value.length) {\n return this._blockStartPos(_bi5) + _blockInputPos6;\n }\n }\n\n return 0;\n }\n\n if (direction === DIRECTION.RIGHT || direction === DIRECTION.FORCE_RIGHT) {\n // ->\n // any|not-len-aligned and filled\n // any|not-len-aligned\n // <-\n // not-0-aligned or start|any\n var firstInputBlockAlignedIndex;\n var firstInputBlockAlignedPos;\n\n for (var _bi6 = searchBlockIndex; _bi6 < this._blocks.length; ++_bi6) {\n var _block7 = this._blocks[_bi6];\n\n var _blockInputPos7 = _block7.nearestInputPos(0, DIRECTION.NONE);\n\n if (_blockInputPos7 !== _block7.value.length) {\n firstInputBlockAlignedPos = this._blockStartPos(_bi6) + _blockInputPos7;\n firstInputBlockAlignedIndex = _bi6;\n break;\n }\n }\n\n if (firstInputBlockAlignedIndex != null && firstInputBlockAlignedPos != null) {\n for (var _bi7 = firstInputBlockAlignedIndex; _bi7 < this._blocks.length; ++_bi7) {\n var _block8 = this._blocks[_bi7];\n\n var _blockInputPos8 = _block8.nearestInputPos(0, DIRECTION.FORCE_RIGHT);\n\n if (_blockInputPos8 !== _block8.value.length) {\n return this._blockStartPos(_bi7) + _blockInputPos8;\n }\n }\n\n return direction === DIRECTION.FORCE_RIGHT ? this.value.length : firstInputBlockAlignedPos;\n }\n\n for (var _bi8 = Math.min(searchBlockIndex, this._blocks.length - 1); _bi8 >= 0; --_bi8) {\n var _block9 = this._blocks[_bi8];\n\n var _blockInputPos9 = _block9.nearestInputPos(_block9.value.length, DIRECTION.LEFT);\n\n if (_blockInputPos9 !== 0) {\n var alignedPos = this._blockStartPos(_bi8) + _blockInputPos9;\n\n if (alignedPos >= cursorPos) return alignedPos;\n break;\n }\n }\n }\n\n return cursorPos;\n }\n /** Get block by name */\n\n }, {\n key: \"maskedBlock\",\n value: function maskedBlock(name) {\n return this.maskedBlocks(name)[0];\n }\n /** Get all blocks by name */\n\n }, {\n key: \"maskedBlocks\",\n value: function maskedBlocks(name) {\n var _this4 = this;\n\n var indices = this._maskedBlocks[name];\n if (!indices) return [];\n return indices.map(function (gi) {\n return _this4._blocks[gi];\n });\n }\n }]);\n\n return MaskedPattern;\n}(Masked);\nMaskedPattern.DEFAULTS = {\n lazy: true,\n placeholderChar: '_'\n};\nMaskedPattern.STOP_CHAR = '`';\nMaskedPattern.ESCAPE_CHAR = '\\\\';\nMaskedPattern.InputDefinition = PatternInputDefinition;\nMaskedPattern.FixedDefinition = PatternFixedDefinition;\n\nfunction isInput(block) {\n if (!block) return false;\n var value = block.value;\n return !value || block.nearestInputPos(0, DIRECTION.NONE) !== value.length;\n}\n\nIMask.MaskedPattern = MaskedPattern;\n\n/** Pattern which accepts ranges */\n\nvar MaskedRange = /*#__PURE__*/function (_MaskedPattern) {\n _inherits(MaskedRange, _MaskedPattern);\n\n var _super = _createSuper(MaskedRange);\n\n function MaskedRange() {\n _classCallCheck(this, MaskedRange);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(MaskedRange, [{\n key: \"_matchFrom\",\n get:\n /**\n Optionally sets max length of pattern.\n Used when pattern length is longer then `to` param length. Pads zeros at start in this case.\n */\n\n /** Min bound */\n\n /** Max bound */\n\n /** */\n function get() {\n return this.maxLength - String(this.from).length;\n }\n /**\n @override\n */\n\n }, {\n key: \"_update\",\n value: function _update(opts) {\n // TODO type\n opts = Object.assign({\n to: this.to || 0,\n from: this.from || 0\n }, opts);\n var maxLength = String(opts.to).length;\n if (opts.maxLength != null) maxLength = Math.max(maxLength, opts.maxLength);\n opts.maxLength = maxLength;\n var fromStr = String(opts.from).padStart(maxLength, '0');\n var toStr = String(opts.to).padStart(maxLength, '0');\n var sameCharsCount = 0;\n\n while (sameCharsCount < toStr.length && toStr[sameCharsCount] === fromStr[sameCharsCount]) {\n ++sameCharsCount;\n }\n\n opts.mask = toStr.slice(0, sameCharsCount).replace(/0/g, '\\\\0') + '0'.repeat(maxLength - sameCharsCount);\n\n _get(_getPrototypeOf(MaskedRange.prototype), \"_update\", this).call(this, opts);\n }\n /**\n @override\n */\n\n }, {\n key: \"isComplete\",\n get: function get() {\n return _get(_getPrototypeOf(MaskedRange.prototype), \"isComplete\", this) && Boolean(this.value);\n }\n }, {\n key: \"boundaries\",\n value: function boundaries(str) {\n var minstr = '';\n var maxstr = '';\n\n var _ref = str.match(/^(\\D*)(\\d*)(\\D*)/) || [],\n _ref2 = _slicedToArray(_ref, 3),\n placeholder = _ref2[1],\n num = _ref2[2];\n\n if (num) {\n minstr = '0'.repeat(placeholder.length) + num;\n maxstr = '9'.repeat(placeholder.length) + num;\n }\n\n minstr = minstr.padEnd(this.maxLength, '0');\n maxstr = maxstr.padEnd(this.maxLength, '9');\n return [minstr, maxstr];\n }\n /**\n @override\n */\n\n }, {\n key: \"doPrepare\",\n value: function doPrepare(str) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n str = _get(_getPrototypeOf(MaskedRange.prototype), \"doPrepare\", this).call(this, str, flags).replace(/\\D/g, '');\n if (!this.autofix) return str;\n var fromStr = String(this.from).padStart(this.maxLength, '0');\n var toStr = String(this.to).padStart(this.maxLength, '0');\n var val = this.value;\n var prepStr = '';\n\n for (var ci = 0; ci < str.length; ++ci) {\n var nextVal = val + prepStr + str[ci];\n\n var _this$boundaries = this.boundaries(nextVal),\n _this$boundaries2 = _slicedToArray(_this$boundaries, 2),\n minstr = _this$boundaries2[0],\n maxstr = _this$boundaries2[1];\n\n if (Number(maxstr) < this.from) prepStr += fromStr[nextVal.length - 1];else if (Number(minstr) > this.to) prepStr += toStr[nextVal.length - 1];else prepStr += str[ci];\n }\n\n return prepStr;\n }\n /**\n @override\n */\n\n }, {\n key: \"doValidate\",\n value: function doValidate() {\n var _get2;\n\n var str = this.value;\n var firstNonZero = str.search(/[^0]/);\n if (firstNonZero === -1 && str.length <= this._matchFrom) return true;\n\n var _this$boundaries3 = this.boundaries(str),\n _this$boundaries4 = _slicedToArray(_this$boundaries3, 2),\n minstr = _this$boundaries4[0],\n maxstr = _this$boundaries4[1];\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return this.from <= Number(maxstr) && Number(minstr) <= this.to && (_get2 = _get(_getPrototypeOf(MaskedRange.prototype), \"doValidate\", this)).call.apply(_get2, [this].concat(args));\n }\n }]);\n\n return MaskedRange;\n}(MaskedPattern);\nIMask.MaskedRange = MaskedRange;\n\n/** Date mask */\n\nvar MaskedDate = /*#__PURE__*/function (_MaskedPattern) {\n _inherits(MaskedDate, _MaskedPattern);\n\n var _super = _createSuper(MaskedDate);\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** */\n\n /**\n @param {Object} opts\n */\n function MaskedDate(opts) {\n _classCallCheck(this, MaskedDate);\n\n return _super.call(this, Object.assign({}, MaskedDate.DEFAULTS, opts));\n }\n /**\n @override\n */\n\n\n _createClass(MaskedDate, [{\n key: \"_update\",\n value: function _update(opts) {\n if (opts.mask === Date) delete opts.mask;\n if (opts.pattern) opts.mask = opts.pattern;\n var blocks = opts.blocks;\n opts.blocks = Object.assign({}, MaskedDate.GET_DEFAULT_BLOCKS()); // adjust year block\n\n if (opts.min) opts.blocks.Y.from = opts.min.getFullYear();\n if (opts.max) opts.blocks.Y.to = opts.max.getFullYear();\n\n if (opts.min && opts.max && opts.blocks.Y.from === opts.blocks.Y.to) {\n opts.blocks.m.from = opts.min.getMonth() + 1;\n opts.blocks.m.to = opts.max.getMonth() + 1;\n\n if (opts.blocks.m.from === opts.blocks.m.to) {\n opts.blocks.d.from = opts.min.getDate();\n opts.blocks.d.to = opts.max.getDate();\n }\n }\n\n Object.assign(opts.blocks, blocks); // add autofix\n\n Object.keys(opts.blocks).forEach(function (bk) {\n var b = opts.blocks[bk];\n if (!('autofix' in b)) b.autofix = opts.autofix;\n });\n\n _get(_getPrototypeOf(MaskedDate.prototype), \"_update\", this).call(this, opts);\n }\n /**\n @override\n */\n\n }, {\n key: \"doValidate\",\n value: function doValidate() {\n var _get2;\n\n var date = this.date;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return (_get2 = _get(_getPrototypeOf(MaskedDate.prototype), \"doValidate\", this)).call.apply(_get2, [this].concat(args)) && (!this.isComplete || this.isDateExist(this.value) && date != null && (this.min == null || this.min <= date) && (this.max == null || date <= this.max));\n }\n /** Checks if date is exists */\n\n }, {\n key: \"isDateExist\",\n value: function isDateExist(str) {\n return this.format(this.parse(str, this), this).indexOf(str) >= 0;\n }\n /** Parsed Date */\n\n }, {\n key: \"date\",\n get: function get() {\n return this.typedValue;\n },\n set: function set(date) {\n this.typedValue = date;\n }\n /**\n @override\n */\n\n }, {\n key: \"typedValue\",\n get: function get() {\n return this.isComplete ? _get(_getPrototypeOf(MaskedDate.prototype), \"typedValue\", this) : null;\n },\n set: function set(value) {\n _set(_getPrototypeOf(MaskedDate.prototype), \"typedValue\", value, this, true);\n }\n }]);\n\n return MaskedDate;\n}(MaskedPattern);\nMaskedDate.DEFAULTS = {\n pattern: 'd{.}`m{.}`Y',\n format: function format(date) {\n var day = String(date.getDate()).padStart(2, '0');\n var month = String(date.getMonth() + 1).padStart(2, '0');\n var year = date.getFullYear();\n return [day, month, year].join('.');\n },\n parse: function parse(str) {\n var _str$split = str.split('.'),\n _str$split2 = _slicedToArray(_str$split, 3),\n day = _str$split2[0],\n month = _str$split2[1],\n year = _str$split2[2];\n\n return new Date(year, month - 1, day);\n }\n};\n\nMaskedDate.GET_DEFAULT_BLOCKS = function () {\n return {\n d: {\n mask: MaskedRange,\n from: 1,\n to: 31,\n maxLength: 2\n },\n m: {\n mask: MaskedRange,\n from: 1,\n to: 12,\n maxLength: 2\n },\n Y: {\n mask: MaskedRange,\n from: 1900,\n to: 9999\n }\n };\n};\n\nIMask.MaskedDate = MaskedDate;\n\n/**\n Generic element API to use with mask\n @interface\n*/\nvar MaskElement = /*#__PURE__*/function () {\n function MaskElement() {\n _classCallCheck(this, MaskElement);\n }\n\n _createClass(MaskElement, [{\n key: \"selectionStart\",\n get:\n /** */\n\n /** */\n\n /** */\n\n /** Safely returns selection start */\n function get() {\n var start;\n\n try {\n start = this._unsafeSelectionStart;\n } catch (e) {}\n\n return start != null ? start : this.value.length;\n }\n /** Safely returns selection end */\n\n }, {\n key: \"selectionEnd\",\n get: function get() {\n var end;\n\n try {\n end = this._unsafeSelectionEnd;\n } catch (e) {}\n\n return end != null ? end : this.value.length;\n }\n /** Safely sets element selection */\n\n }, {\n key: \"select\",\n value: function select(start, end) {\n if (start == null || end == null || start === this.selectionStart && end === this.selectionEnd) return;\n\n try {\n this._unsafeSelect(start, end);\n } catch (e) {}\n }\n /** Should be overriden in subclasses */\n\n }, {\n key: \"_unsafeSelect\",\n value: function _unsafeSelect(start, end) {}\n /** Should be overriden in subclasses */\n\n }, {\n key: \"isActive\",\n get: function get() {\n return false;\n }\n /** Should be overriden in subclasses */\n\n }, {\n key: \"bindEvents\",\n value: function bindEvents(handlers) {}\n /** Should be overriden in subclasses */\n\n }, {\n key: \"unbindEvents\",\n value: function unbindEvents() {}\n }]);\n\n return MaskElement;\n}();\nIMask.MaskElement = MaskElement;\n\n/** Bridge between HTMLElement and {@link Masked} */\n\nvar HTMLMaskElement = /*#__PURE__*/function (_MaskElement) {\n _inherits(HTMLMaskElement, _MaskElement);\n\n var _super = _createSuper(HTMLMaskElement);\n\n /** Mapping between HTMLElement events and mask internal events */\n\n /** HTMLElement to use mask on */\n\n /**\n @param {HTMLInputElement|HTMLTextAreaElement} input\n */\n function HTMLMaskElement(input) {\n var _this;\n\n _classCallCheck(this, HTMLMaskElement);\n\n _this = _super.call(this);\n _this.input = input;\n _this._handlers = {};\n return _this;\n }\n /** */\n // $FlowFixMe https://github.com/facebook/flow/issues/2839\n\n\n _createClass(HTMLMaskElement, [{\n key: \"rootElement\",\n get: function get() {\n return this.input.getRootNode ? this.input.getRootNode() : document;\n }\n /**\n Is element in focus\n @readonly\n */\n\n }, {\n key: \"isActive\",\n get: function get() {\n //$FlowFixMe\n return this.input === this.rootElement.activeElement;\n }\n /**\n Returns HTMLElement selection start\n @override\n */\n\n }, {\n key: \"_unsafeSelectionStart\",\n get: function get() {\n return this.input.selectionStart;\n }\n /**\n Returns HTMLElement selection end\n @override\n */\n\n }, {\n key: \"_unsafeSelectionEnd\",\n get: function get() {\n return this.input.selectionEnd;\n }\n /**\n Sets HTMLElement selection\n @override\n */\n\n }, {\n key: \"_unsafeSelect\",\n value: function _unsafeSelect(start, end) {\n this.input.setSelectionRange(start, end);\n }\n /**\n HTMLElement value\n @override\n */\n\n }, {\n key: \"value\",\n get: function get() {\n return this.input.value;\n },\n set: function set(value) {\n this.input.value = value;\n }\n /**\n Binds HTMLElement events to mask internal events\n @override\n */\n\n }, {\n key: \"bindEvents\",\n value: function bindEvents(handlers) {\n var _this2 = this;\n\n Object.keys(handlers).forEach(function (event) {\n return _this2._toggleEventHandler(HTMLMaskElement.EVENTS_MAP[event], handlers[event]);\n });\n }\n /**\n Unbinds HTMLElement events to mask internal events\n @override\n */\n\n }, {\n key: \"unbindEvents\",\n value: function unbindEvents() {\n var _this3 = this;\n\n Object.keys(this._handlers).forEach(function (event) {\n return _this3._toggleEventHandler(event);\n });\n }\n /** */\n\n }, {\n key: \"_toggleEventHandler\",\n value: function _toggleEventHandler(event, handler) {\n if (this._handlers[event]) {\n this.input.removeEventListener(event, this._handlers[event]);\n delete this._handlers[event];\n }\n\n if (handler) {\n this.input.addEventListener(event, handler);\n this._handlers[event] = handler;\n }\n }\n }]);\n\n return HTMLMaskElement;\n}(MaskElement);\nHTMLMaskElement.EVENTS_MAP = {\n selectionChange: 'keydown',\n input: 'input',\n drop: 'drop',\n click: 'click',\n focus: 'focus',\n commit: 'blur'\n};\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nvar HTMLContenteditableMaskElement = /*#__PURE__*/function (_HTMLMaskElement) {\n _inherits(HTMLContenteditableMaskElement, _HTMLMaskElement);\n\n var _super = _createSuper(HTMLContenteditableMaskElement);\n\n function HTMLContenteditableMaskElement() {\n _classCallCheck(this, HTMLContenteditableMaskElement);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(HTMLContenteditableMaskElement, [{\n key: \"_unsafeSelectionStart\",\n get:\n /**\n Returns HTMLElement selection start\n @override\n */\n function get() {\n var root = this.rootElement;\n var selection = root.getSelection && root.getSelection();\n return selection && selection.anchorOffset;\n }\n /**\n Returns HTMLElement selection end\n @override\n */\n\n }, {\n key: \"_unsafeSelectionEnd\",\n get: function get() {\n var root = this.rootElement;\n var selection = root.getSelection && root.getSelection();\n return selection && this._unsafeSelectionStart + String(selection).length;\n }\n /**\n Sets HTMLElement selection\n @override\n */\n\n }, {\n key: \"_unsafeSelect\",\n value: function _unsafeSelect(start, end) {\n if (!this.rootElement.createRange) return;\n var range = this.rootElement.createRange();\n range.setStart(this.input.firstChild || this.input, start);\n range.setEnd(this.input.lastChild || this.input, end);\n var root = this.rootElement;\n var selection = root.getSelection && root.getSelection();\n\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n /**\n HTMLElement value\n @override\n */\n\n }, {\n key: \"value\",\n get: function get() {\n // $FlowFixMe\n return this.input.textContent;\n },\n set: function set(value) {\n this.input.textContent = value;\n }\n }]);\n\n return HTMLContenteditableMaskElement;\n}(HTMLMaskElement);\nIMask.HTMLContenteditableMaskElement = HTMLContenteditableMaskElement;\n\nvar _excluded$3 = [\"mask\"];\n/** Listens to element events and controls changes between element and {@link Masked} */\n\nvar InputMask = /*#__PURE__*/function () {\n /**\n View element\n @readonly\n */\n\n /**\n Internal {@link Masked} model\n @readonly\n */\n\n /**\n @param {MaskElement|HTMLInputElement|HTMLTextAreaElement} el\n @param {Object} opts\n */\n function InputMask(el, opts) {\n _classCallCheck(this, InputMask);\n\n this.el = el instanceof MaskElement ? el : el.isContentEditable && el.tagName !== 'INPUT' && el.tagName !== 'TEXTAREA' ? new HTMLContenteditableMaskElement(el) : new HTMLMaskElement(el);\n this.masked = createMask(opts);\n this._listeners = {};\n this._value = '';\n this._unmaskedValue = '';\n this._saveSelection = this._saveSelection.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onChange = this._onChange.bind(this);\n this._onDrop = this._onDrop.bind(this);\n this._onFocus = this._onFocus.bind(this);\n this._onClick = this._onClick.bind(this);\n this.alignCursor = this.alignCursor.bind(this);\n this.alignCursorFriendly = this.alignCursorFriendly.bind(this);\n\n this._bindEvents(); // refresh\n\n\n this.updateValue();\n\n this._onChange();\n }\n /** Read or update mask */\n\n\n _createClass(InputMask, [{\n key: \"mask\",\n get: function get() {\n return this.masked.mask;\n },\n set: function set(mask) {\n if (this.maskEquals(mask)) return;\n\n if (!(mask instanceof IMask.Masked) && this.masked.constructor === maskedClass(mask)) {\n this.masked.updateOptions({\n mask: mask\n });\n return;\n }\n\n var masked = createMask({\n mask: mask\n });\n masked.unmaskedValue = this.masked.unmaskedValue;\n this.masked = masked;\n }\n /** Raw value */\n\n }, {\n key: \"maskEquals\",\n value: function maskEquals(mask) {\n return mask == null || mask === this.masked.mask || mask === Date && this.masked instanceof MaskedDate;\n }\n }, {\n key: \"value\",\n get: function get() {\n return this._value;\n },\n set: function set(str) {\n this.masked.value = str;\n this.updateControl();\n this.alignCursor();\n }\n /** Unmasked value */\n\n }, {\n key: \"unmaskedValue\",\n get: function get() {\n return this._unmaskedValue;\n },\n set: function set(str) {\n this.masked.unmaskedValue = str;\n this.updateControl();\n this.alignCursor();\n }\n /** Typed unmasked value */\n\n }, {\n key: \"typedValue\",\n get: function get() {\n return this.masked.typedValue;\n },\n set: function set(val) {\n this.masked.typedValue = val;\n this.updateControl();\n this.alignCursor();\n }\n /**\n Starts listening to element events\n @protected\n */\n\n }, {\n key: \"_bindEvents\",\n value: function _bindEvents() {\n this.el.bindEvents({\n selectionChange: this._saveSelection,\n input: this._onInput,\n drop: this._onDrop,\n click: this._onClick,\n focus: this._onFocus,\n commit: this._onChange\n });\n }\n /**\n Stops listening to element events\n @protected\n */\n\n }, {\n key: \"_unbindEvents\",\n value: function _unbindEvents() {\n if (this.el) this.el.unbindEvents();\n }\n /**\n Fires custom event\n @protected\n */\n\n }, {\n key: \"_fireEvent\",\n value: function _fireEvent(ev) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var listeners = this._listeners[ev];\n if (!listeners) return;\n listeners.forEach(function (l) {\n return l.apply(void 0, args);\n });\n }\n /**\n Current selection start\n @readonly\n */\n\n }, {\n key: \"selectionStart\",\n get: function get() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionStart;\n }\n /** Current cursor position */\n\n }, {\n key: \"cursorPos\",\n get: function get() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionEnd;\n },\n set: function set(pos) {\n if (!this.el || !this.el.isActive) return;\n this.el.select(pos, pos);\n\n this._saveSelection();\n }\n /**\n Stores current selection\n @protected\n */\n\n }, {\n key: \"_saveSelection\",\n value: function _saveSelection() {\n if (this.value !== this.el.value) {\n console.warn('Element value was changed outside of mask. Syncronize mask using `mask.updateValue()` to work properly.'); // eslint-disable-line no-console\n }\n\n this._selection = {\n start: this.selectionStart,\n end: this.cursorPos\n };\n }\n /** Syncronizes model value from view */\n\n }, {\n key: \"updateValue\",\n value: function updateValue() {\n this.masked.value = this.el.value;\n this._value = this.masked.value;\n }\n /** Syncronizes view from model value, fires change events */\n\n }, {\n key: \"updateControl\",\n value: function updateControl() {\n var newUnmaskedValue = this.masked.unmaskedValue;\n var newValue = this.masked.value;\n var isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n if (this.el.value !== newValue) this.el.value = newValue;\n if (isChanged) this._fireChangeEvents();\n }\n /** Updates options with deep equal check, recreates @{link Masked} model if mask type changes */\n\n }, {\n key: \"updateOptions\",\n value: function updateOptions(opts) {\n var mask = opts.mask,\n restOpts = _objectWithoutProperties(opts, _excluded$3);\n\n var updateMask = !this.maskEquals(mask);\n var updateOpts = !objectIncludes(this.masked, restOpts);\n if (updateMask) this.mask = mask;\n if (updateOpts) this.masked.updateOptions(restOpts);\n if (updateMask || updateOpts) this.updateControl();\n }\n /** Updates cursor */\n\n }, {\n key: \"updateCursor\",\n value: function updateCursor(cursorPos) {\n if (cursorPos == null) return;\n this.cursorPos = cursorPos; // also queue change cursor for mobile browsers\n\n this._delayUpdateCursor(cursorPos);\n }\n /**\n Delays cursor update to support mobile browsers\n @private\n */\n\n }, {\n key: \"_delayUpdateCursor\",\n value: function _delayUpdateCursor(cursorPos) {\n var _this = this;\n\n this._abortUpdateCursor();\n\n this._changingCursorPos = cursorPos;\n this._cursorChanging = setTimeout(function () {\n if (!_this.el) return; // if was destroyed\n\n _this.cursorPos = _this._changingCursorPos;\n\n _this._abortUpdateCursor();\n }, 10);\n }\n /**\n Fires custom events\n @protected\n */\n\n }, {\n key: \"_fireChangeEvents\",\n value: function _fireChangeEvents() {\n this._fireEvent('accept', this._inputEvent);\n\n if (this.masked.isComplete) this._fireEvent('complete', this._inputEvent);\n }\n /**\n Aborts delayed cursor update\n @private\n */\n\n }, {\n key: \"_abortUpdateCursor\",\n value: function _abortUpdateCursor() {\n if (this._cursorChanging) {\n clearTimeout(this._cursorChanging);\n delete this._cursorChanging;\n }\n }\n /** Aligns cursor to nearest available position */\n\n }, {\n key: \"alignCursor\",\n value: function alignCursor() {\n this.cursorPos = this.masked.nearestInputPos(this.cursorPos, DIRECTION.LEFT);\n }\n /** Aligns cursor only if selection is empty */\n\n }, {\n key: \"alignCursorFriendly\",\n value: function alignCursorFriendly() {\n if (this.selectionStart !== this.cursorPos) return; // skip if range is selected\n\n this.alignCursor();\n }\n /** Adds listener on custom event */\n\n }, {\n key: \"on\",\n value: function on(ev, handler) {\n if (!this._listeners[ev]) this._listeners[ev] = [];\n\n this._listeners[ev].push(handler);\n\n return this;\n }\n /** Removes custom event listener */\n\n }, {\n key: \"off\",\n value: function off(ev, handler) {\n if (!this._listeners[ev]) return this;\n\n if (!handler) {\n delete this._listeners[ev];\n return this;\n }\n\n var hIndex = this._listeners[ev].indexOf(handler);\n\n if (hIndex >= 0) this._listeners[ev].splice(hIndex, 1);\n return this;\n }\n /** Handles view input event */\n\n }, {\n key: \"_onInput\",\n value: function _onInput(e) {\n this._inputEvent = e;\n\n this._abortUpdateCursor(); // fix strange IE behavior\n\n\n if (!this._selection) return this.updateValue();\n var details = new ActionDetails( // new state\n this.el.value, this.cursorPos, // old state\n this.value, this._selection);\n var oldRawValue = this.masked.rawInputValue;\n var offset = this.masked.splice(details.startChangePos, details.removed.length, details.inserted, details.removeDirection).offset; // force align in remove direction only if no input chars were removed\n // otherwise we still need to align with NONE (to get out from fixed symbols for instance)\n\n var removeDirection = oldRawValue === this.masked.rawInputValue ? details.removeDirection : DIRECTION.NONE;\n var cursorPos = this.masked.nearestInputPos(details.startChangePos + offset, removeDirection);\n this.updateControl();\n this.updateCursor(cursorPos);\n delete this._inputEvent;\n }\n /** Handles view change event and commits model value */\n\n }, {\n key: \"_onChange\",\n value: function _onChange() {\n if (this.value !== this.el.value) {\n this.updateValue();\n }\n\n this.masked.doCommit();\n this.updateControl();\n\n this._saveSelection();\n }\n /** Handles view drop event, prevents by default */\n\n }, {\n key: \"_onDrop\",\n value: function _onDrop(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n /** Restore last selection on focus */\n\n }, {\n key: \"_onFocus\",\n value: function _onFocus(ev) {\n this.alignCursorFriendly();\n }\n /** Restore last selection on focus */\n\n }, {\n key: \"_onClick\",\n value: function _onClick(ev) {\n this.alignCursorFriendly();\n }\n /** Unbind view events and removes element reference */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this._unbindEvents(); // $FlowFixMe why not do so?\n\n\n this._listeners.length = 0; // $FlowFixMe\n\n delete this.el;\n }\n }]);\n\n return InputMask;\n}();\nIMask.InputMask = InputMask;\n\n/**\n Number mask\n @param {Object} opts\n @param {string} opts.radix - Single char\n @param {string} opts.thousandsSeparator - Single char\n @param {Array} opts.mapToRadix - Array of single chars\n @param {number} opts.min\n @param {number} opts.max\n @param {number} opts.scale - Digits after point\n @param {boolean} opts.signed - Allow negative\n @param {boolean} opts.normalizeZeros - Flag to remove leading and trailing zeros in the end of editing\n @param {boolean} opts.padFractionalZeros - Flag to pad trailing zeros after point in the end of editing\n*/\nvar MaskedNumber = /*#__PURE__*/function (_Masked) {\n _inherits(MaskedNumber, _Masked);\n\n var _super = _createSuper(MaskedNumber);\n\n /** Single char */\n\n /** Single char */\n\n /** Array of single chars */\n\n /** */\n\n /** */\n\n /** Digits after point */\n\n /** */\n\n /** Flag to remove leading and trailing zeros in the end of editing */\n\n /** Flag to pad trailing zeros after point in the end of editing */\n function MaskedNumber(opts) {\n _classCallCheck(this, MaskedNumber);\n\n return _super.call(this, Object.assign({}, MaskedNumber.DEFAULTS, opts));\n }\n /**\n @override\n */\n\n\n _createClass(MaskedNumber, [{\n key: \"_update\",\n value: function _update(opts) {\n _get(_getPrototypeOf(MaskedNumber.prototype), \"_update\", this).call(this, opts);\n\n this._updateRegExps();\n }\n /** */\n\n }, {\n key: \"_updateRegExps\",\n value: function _updateRegExps() {\n // use different regexp to process user input (more strict, input suffix) and tail shifting\n var start = '^' + (this.allowNegative ? '[+|\\\\-]?' : '');\n var midInput = '(0|([1-9]+\\\\d*))?';\n var mid = '\\\\d*';\n var end = (this.scale ? '(' + escapeRegExp(this.radix) + '\\\\d{0,' + this.scale + '})?' : '') + '$';\n this._numberRegExpInput = new RegExp(start + midInput + end);\n this._numberRegExp = new RegExp(start + mid + end);\n this._mapToRadixRegExp = new RegExp('[' + this.mapToRadix.map(escapeRegExp).join('') + ']', 'g');\n this._thousandsSeparatorRegExp = new RegExp(escapeRegExp(this.thousandsSeparator), 'g');\n }\n /** */\n\n }, {\n key: \"_removeThousandsSeparators\",\n value: function _removeThousandsSeparators(value) {\n return value.replace(this._thousandsSeparatorRegExp, '');\n }\n /** */\n\n }, {\n key: \"_insertThousandsSeparators\",\n value: function _insertThousandsSeparators(value) {\n // https://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript\n var parts = value.split(this.radix);\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.thousandsSeparator);\n return parts.join(this.radix);\n }\n /**\n @override\n */\n\n }, {\n key: \"doPrepare\",\n value: function doPrepare(str) {\n var _get2;\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return (_get2 = _get(_getPrototypeOf(MaskedNumber.prototype), \"doPrepare\", this)).call.apply(_get2, [this, this._removeThousandsSeparators(str.replace(this._mapToRadixRegExp, this.radix))].concat(args));\n }\n /** */\n\n }, {\n key: \"_separatorsCount\",\n value: function _separatorsCount(to) {\n var extendOnSeparators = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var count = 0;\n\n for (var pos = 0; pos < to; ++pos) {\n if (this._value.indexOf(this.thousandsSeparator, pos) === pos) {\n ++count;\n if (extendOnSeparators) to += this.thousandsSeparator.length;\n }\n }\n\n return count;\n }\n /** */\n\n }, {\n key: \"_separatorsCountFromSlice\",\n value: function _separatorsCountFromSlice() {\n var slice = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._value;\n return this._separatorsCount(this._removeThousandsSeparators(slice).length, true);\n }\n /**\n @override\n */\n\n }, {\n key: \"extractInput\",\n value: function extractInput() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n var flags = arguments.length > 2 ? arguments[2] : undefined;\n\n var _this$_adjustRangeWit = this._adjustRangeWithSeparators(fromPos, toPos);\n\n var _this$_adjustRangeWit2 = _slicedToArray(_this$_adjustRangeWit, 2);\n\n fromPos = _this$_adjustRangeWit2[0];\n toPos = _this$_adjustRangeWit2[1];\n return this._removeThousandsSeparators(_get(_getPrototypeOf(MaskedNumber.prototype), \"extractInput\", this).call(this, fromPos, toPos, flags));\n }\n /**\n @override\n */\n\n }, {\n key: \"_appendCharRaw\",\n value: function _appendCharRaw(ch) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!this.thousandsSeparator) return _get(_getPrototypeOf(MaskedNumber.prototype), \"_appendCharRaw\", this).call(this, ch, flags);\n var prevBeforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n\n var prevBeforeTailSeparatorsCount = this._separatorsCountFromSlice(prevBeforeTailValue);\n\n this._value = this._removeThousandsSeparators(this.value);\n\n var appendDetails = _get(_getPrototypeOf(MaskedNumber.prototype), \"_appendCharRaw\", this).call(this, ch, flags);\n\n this._value = this._insertThousandsSeparators(this._value);\n var beforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n\n var beforeTailSeparatorsCount = this._separatorsCountFromSlice(beforeTailValue);\n\n appendDetails.tailShift += (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length;\n appendDetails.skip = !appendDetails.rawInserted && ch === this.thousandsSeparator;\n return appendDetails;\n }\n /** */\n\n }, {\n key: \"_findSeparatorAround\",\n value: function _findSeparatorAround(pos) {\n if (this.thousandsSeparator) {\n var searchFrom = pos - this.thousandsSeparator.length + 1;\n var separatorPos = this.value.indexOf(this.thousandsSeparator, searchFrom);\n if (separatorPos <= pos) return separatorPos;\n }\n\n return -1;\n }\n }, {\n key: \"_adjustRangeWithSeparators\",\n value: function _adjustRangeWithSeparators(from, to) {\n var separatorAroundFromPos = this._findSeparatorAround(from);\n\n if (separatorAroundFromPos >= 0) from = separatorAroundFromPos;\n\n var separatorAroundToPos = this._findSeparatorAround(to);\n\n if (separatorAroundToPos >= 0) to = separatorAroundToPos + this.thousandsSeparator.length;\n return [from, to];\n }\n /**\n @override\n */\n\n }, {\n key: \"remove\",\n value: function remove() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n\n var _this$_adjustRangeWit3 = this._adjustRangeWithSeparators(fromPos, toPos);\n\n var _this$_adjustRangeWit4 = _slicedToArray(_this$_adjustRangeWit3, 2);\n\n fromPos = _this$_adjustRangeWit4[0];\n toPos = _this$_adjustRangeWit4[1];\n var valueBeforePos = this.value.slice(0, fromPos);\n var valueAfterPos = this.value.slice(toPos);\n\n var prevBeforeTailSeparatorsCount = this._separatorsCount(valueBeforePos.length);\n\n this._value = this._insertThousandsSeparators(this._removeThousandsSeparators(valueBeforePos + valueAfterPos));\n\n var beforeTailSeparatorsCount = this._separatorsCountFromSlice(valueBeforePos);\n\n return new ChangeDetails({\n tailShift: (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length\n });\n }\n /**\n @override\n */\n\n }, {\n key: \"nearestInputPos\",\n value: function nearestInputPos(cursorPos, direction) {\n if (!this.thousandsSeparator) return cursorPos;\n\n switch (direction) {\n case DIRECTION.NONE:\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n {\n var separatorAtLeftPos = this._findSeparatorAround(cursorPos - 1);\n\n if (separatorAtLeftPos >= 0) {\n var separatorAtLeftEndPos = separatorAtLeftPos + this.thousandsSeparator.length;\n\n if (cursorPos < separatorAtLeftEndPos || this.value.length <= separatorAtLeftEndPos || direction === DIRECTION.FORCE_LEFT) {\n return separatorAtLeftPos;\n }\n }\n\n break;\n }\n\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n {\n var separatorAtRightPos = this._findSeparatorAround(cursorPos);\n\n if (separatorAtRightPos >= 0) {\n return separatorAtRightPos + this.thousandsSeparator.length;\n }\n }\n }\n\n return cursorPos;\n }\n /**\n @override\n */\n\n }, {\n key: \"doValidate\",\n value: function doValidate(flags) {\n var regexp = flags.input ? this._numberRegExpInput : this._numberRegExp; // validate as string\n\n var valid = regexp.test(this._removeThousandsSeparators(this.value));\n\n if (valid) {\n // validate as number\n var number = this.number;\n valid = valid && !isNaN(number) && (this.min == null || this.min >= 0 || this.min <= this.number) && (this.max == null || this.max <= 0 || this.number <= this.max);\n }\n\n return valid && _get(_getPrototypeOf(MaskedNumber.prototype), \"doValidate\", this).call(this, flags);\n }\n /**\n @override\n */\n\n }, {\n key: \"doCommit\",\n value: function doCommit() {\n if (this.value) {\n var number = this.number;\n var validnum = number; // check bounds\n\n if (this.min != null) validnum = Math.max(validnum, this.min);\n if (this.max != null) validnum = Math.min(validnum, this.max);\n if (validnum !== number) this.unmaskedValue = String(validnum);\n var formatted = this.value;\n if (this.normalizeZeros) formatted = this._normalizeZeros(formatted);\n if (this.padFractionalZeros) formatted = this._padFractionalZeros(formatted);\n this._value = formatted;\n }\n\n _get(_getPrototypeOf(MaskedNumber.prototype), \"doCommit\", this).call(this);\n }\n /** */\n\n }, {\n key: \"_normalizeZeros\",\n value: function _normalizeZeros(value) {\n var parts = this._removeThousandsSeparators(value).split(this.radix); // remove leading zeros\n\n\n parts[0] = parts[0].replace(/^(\\D*)(0*)(\\d*)/, function (match, sign, zeros, num) {\n return sign + num;\n }); // add leading zero\n\n if (value.length && !/\\d$/.test(parts[0])) parts[0] = parts[0] + '0';\n\n if (parts.length > 1) {\n parts[1] = parts[1].replace(/0*$/, ''); // remove trailing zeros\n\n if (!parts[1].length) parts.length = 1; // remove fractional\n }\n\n return this._insertThousandsSeparators(parts.join(this.radix));\n }\n /** */\n\n }, {\n key: \"_padFractionalZeros\",\n value: function _padFractionalZeros(value) {\n if (!value) return value;\n var parts = value.split(this.radix);\n if (parts.length < 2) parts.push('');\n parts[1] = parts[1].padEnd(this.scale, '0');\n return parts.join(this.radix);\n }\n /**\n @override\n */\n\n }, {\n key: \"unmaskedValue\",\n get: function get() {\n return this._removeThousandsSeparators(this._normalizeZeros(this.value)).replace(this.radix, '.');\n },\n set: function set(unmaskedValue) {\n _set(_getPrototypeOf(MaskedNumber.prototype), \"unmaskedValue\", unmaskedValue.replace('.', this.radix), this, true);\n }\n /**\n @override\n */\n\n }, {\n key: \"typedValue\",\n get: function get() {\n return Number(this.unmaskedValue);\n },\n set: function set(n) {\n _set(_getPrototypeOf(MaskedNumber.prototype), \"unmaskedValue\", String(n), this, true);\n }\n /** Parsed Number */\n\n }, {\n key: \"number\",\n get: function get() {\n return this.typedValue;\n },\n set: function set(number) {\n this.typedValue = number;\n }\n /**\n Is negative allowed\n @readonly\n */\n\n }, {\n key: \"allowNegative\",\n get: function get() {\n return this.signed || this.min != null && this.min < 0 || this.max != null && this.max < 0;\n }\n }]);\n\n return MaskedNumber;\n}(Masked);\nMaskedNumber.DEFAULTS = {\n radix: ',',\n thousandsSeparator: '',\n mapToRadix: ['.'],\n scale: 2,\n signed: false,\n normalizeZeros: true,\n padFractionalZeros: false\n};\nIMask.MaskedNumber = MaskedNumber;\n\nvar MaskType = {\n Range: IMask.MaskedRange\n};\n\nvar MaskedTextInput = function (_ref) {\n var name = _ref.name,\n _ref$maskOptions = _ref.maskOptions,\n maskOptions = _ref$maskOptions === void 0 ? {\n mask: Number\n } : _ref$maskOptions,\n onAccept = _ref.onAccept,\n onComplete = _ref.onComplete,\n value = _ref.value,\n theme = _ref.theme,\n rest = _objectWithoutProperties$1(_ref, [\"name\", \"maskOptions\", \"onAccept\", \"onComplete\", \"value\", \"theme\"]);\n\n var inputRef = useRef();\n var maskedRef = useRef(null);\n\n var _theme = useTheme('MaskedTextInput', theme);\n\n useEffect(function () {\n var masked = maskedRef.current;\n /* istanbul ignore else */\n\n if (masked) {\n masked.updateOptions(maskOptions);\n }\n }, [maskOptions]);\n useEffect(function () {\n var masked = maskedRef.current;\n /* istanbul ignore else */\n\n if (masked) {\n masked.unmaskedValue = value;\n }\n }, [value]);\n useEffect(function () {\n var elm = inputRef.current;\n /* istanbul ignore else */\n\n if (elm && !maskedRef.current) {\n // eslint-disable-next-line\n maskedRef.current = IMask(elm, maskOptions);\n var masked = maskedRef.current;\n masked.on('accept', function () {\n /* istanbul ignore else */\n if (onAccept) {\n onAccept(masked.value, masked.unmaskedValue, masked.typedValue);\n }\n });\n masked.on('complete', function () {\n /* istanbul ignore else */\n if (onComplete) {\n onComplete(masked.value, masked.unmaskedValue, masked.typedValue);\n }\n });\n }\n\n return function () {\n /* istanbul ignore else */\n if (maskedRef.current) {\n var _masked = maskedRef.current;\n\n _masked.off('accept');\n\n _masked.off('complete');\n\n _masked.destroy();\n\n maskedRef.current = null;\n }\n };\n }, []);\n return /*#__PURE__*/React.createElement(TextInput, _extends({\n name: name,\n value: value,\n ref: inputRef,\n theme: _theme\n }, rest));\n};\n\nexport { MaskType, MaskedTextInput };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport React, { useRef, useState, useEffect } from 'react';\nimport { useTheme } from '@paypalcorp/pp-react-theme';\nimport { SelectionMenu } from '@paypalcorp/pp-react-selection-menu';\nimport clsx from 'clsx';\nimport { V2CriticalIcon, CriticalAltIcon, ChevronUpAltIcon, ChevronDownAltIcon, V2ChevronUpIcon, V2ChevronDownIcon } from '@paypalcorp/pp-react-icons';\nimport '../__generated__/styles/dropdown-menu.css';\n\nvar styles = {\"ppvx_dropdown-menu\":\"ppvx_dropdown-menu___1-8-1-beta-0\",\"ppvx_dropdown-menu__label\":\"ppvx_dropdown-menu__label___1-8-1-beta-0\",\"ppvx_dropdown-menu__button\":\"ppvx_dropdown-menu__button___1-8-1-beta-0\",\"ppvx_dropdown-menu__affordance-icon\":\"ppvx_dropdown-menu__affordance-icon___1-8-1-beta-0\",\"ppvx_dropdown-menu__label--empty\":\"ppvx_dropdown-menu__label--empty___1-8-1-beta-0\",\"ppvx_dropdown-menu__button--active\":\"ppvx_dropdown-menu__button--active___1-8-1-beta-0\",\"ppvx_dropdown-menu__helper-text\":\"ppvx_dropdown-menu__helper-text___1-8-1-beta-0\",\"ppvx_dropdown-menu__error-text\":\"ppvx_dropdown-menu__error-text___1-8-1-beta-0\",\"ppvx_dropdown-menu__error-icon\":\"ppvx_dropdown-menu__error-icon___1-8-1-beta-0\",\"ppvx_field--error\":\"ppvx_field--error___1-8-1-beta-0\",\"ppvx_dropdown-menu--combine-right\":\"ppvx_dropdown-menu--combine-right___1-8-1-beta-0\",\"ppvx_dropdown-menu--combine-left\":\"ppvx_dropdown-menu--combine-left___1-8-1-beta-0\",\"ppvx_dropdown-menu--combine-both\":\"ppvx_dropdown-menu--combine-both___1-8-1-beta-0\",\"ppvx_dropdown-menu__button-with-svg-icon\":\"ppvx_dropdown-menu__button-with-svg-icon___1-8-1-beta-0\",\"ppvx_dropdown-menu__error-text-with-svg-icon\":\"ppvx_dropdown-menu__error-text-with-svg-icon___1-8-1-beta-0\",\"ppvx--v2\":\"ppvx--v2___1-8-1-beta-0\",\"ppvx--v1\":\"ppvx--v1___1-8-1-beta-0\"};\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar getRefCurrent = function (ref) {\n return (\n /* istanbul ignore next */\n ref && ref.current ? ref.current : null\n );\n}; // Get either the error message or helper text or... nothing\n\n\nvar renderMessage = function (errorText, helperText, msgId, theme) {\n if (errorText) {\n var dropdownErrorIcon = theme === 'v2' ? /*#__PURE__*/React.createElement(V2CriticalIcon, {\n className: styles['ppvx_dropdown-menu__error-icon'],\n size: \"sm\"\n }) : /*#__PURE__*/React.createElement(CriticalAltIcon, {\n className: styles['ppvx_dropdown-menu__error-icon'],\n size: \"xs\"\n });\n var errorClasses = clsx(styles['ppvx_dropdown-menu__error-text'], styles['ppvx_dropdown-menu__error-text-with-svg-icon']);\n return /*#__PURE__*/React.createElement(\"div\", {\n className: errorClasses,\n id: msgId\n }, dropdownErrorIcon, errorText);\n }\n\n if (helperText) {\n return /*#__PURE__*/React.createElement(\"div\", {\n className: styles['ppvx_dropdown-menu__helper-text'],\n id: msgId\n }, helperText);\n }\n\n return null;\n}; // eslint-disable-next-line complexity\n\n\nvar DropdownMenu = function (_ref) {\n var _clsx;\n\n var className = _ref.className,\n menuContainerClassName = _ref.menuContainerClassName,\n menuListClassName = _ref.menuListClassName,\n menuItemClassName = _ref.menuItemClassName,\n menuMobileHeaderClassName = _ref.menuMobileHeaderClassName,\n menuButtonClassName = _ref.menuButtonClassName,\n menuLabelClassName = _ref.menuLabelClassName,\n _ref$skipButtonFocus = _ref.skipButtonFocus,\n skipButtonFocus = _ref$skipButtonFocus === void 0 ? false : _ref$skipButtonFocus,\n sheetClassName = _ref.sheetClassName,\n sheetWrapperClassName = _ref.sheetWrapperClassName,\n id = _ref.id,\n label = _ref.label,\n errorText = _ref.errorText,\n helperText = _ref.helperText,\n selectedItemIndex = _ref.selectedItemIndex,\n options = _ref.options,\n ariaLabelledby = _ref.ariaLabelledby,\n removeBorderRadiusRight = _ref.removeBorderRadiusRight,\n removeBorderRadiusLeft = _ref.removeBorderRadiusLeft,\n removeBorderRadiusBoth = _ref.removeBorderRadiusBoth,\n renderButtonContent = _ref.renderButtonContent,\n onSelection = _ref.onSelection,\n onClose = _ref.onClose,\n theme = _ref.theme,\n isLoadingOptions = _ref.isLoadingOptions,\n rest = _objectWithoutProperties(_ref, [\"className\", \"menuContainerClassName\", \"menuListClassName\", \"menuItemClassName\", \"menuMobileHeaderClassName\", \"menuButtonClassName\", \"menuLabelClassName\", \"skipButtonFocus\", \"sheetClassName\", \"sheetWrapperClassName\", \"id\", \"label\", \"errorText\", \"helperText\", \"selectedItemIndex\", \"options\", \"ariaLabelledby\", \"removeBorderRadiusRight\", \"removeBorderRadiusLeft\", \"removeBorderRadiusBoth\", \"renderButtonContent\", \"onSelection\", \"onClose\", \"theme\", \"isLoadingOptions\"]);\n\n var _theme = useTheme('DropdownMenu', theme);\n\n var isThemeV2 = _theme && _theme === 'v2';\n var buttonId = id ? \"dropdownMenuButton_\".concat(id) : \"dropdownMenuButton_\".concat(label.replace(/\\s/g, ''));\n var buttonRef = useRef();\n\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n showMenu = _useState2[0],\n setShowMenu = _useState2[1];\n\n var _useState3 = useState(false),\n _useState4 = _slicedToArray(_useState3, 2),\n initialItemFocus = _useState4[0],\n setKeyboardActive = _useState4[1];\n\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n isRtl = _useState6[0],\n setRtl = _useState6[1];\n\n useEffect(function () {\n var btn = getRefCurrent(buttonRef);\n var computedStyle = window && window.getComputedStyle(btn);\n setRtl(computedStyle && computedStyle.direction === 'rtl');\n });\n var dropdownMenuClass = clsx(styles['ppvx_dropdown-menu'], (_clsx = {}, _defineProperty(_clsx, styles['ppvx--v2'], isThemeV2), _defineProperty(_clsx, styles['ppvx_field--error'], errorText), _defineProperty(_clsx, styles['ppvx_dropdown-menu--combine-right'], removeBorderRadiusRight), _defineProperty(_clsx, styles['ppvx_dropdown-menu--combine-left'], removeBorderRadiusLeft), _defineProperty(_clsx, styles['ppvx_dropdown-menu--combine-both'], removeBorderRadiusBoth), _clsx), className);\n var buttonClass = clsx(styles['ppvx_dropdown-menu__button'], styles['ppvx_dropdown-menu__button-with-svg-icon'], showMenu && styles['ppvx_dropdown-menu__button--active'], menuButtonClassName);\n var msgId = helperText && 'dropdown_helperText' || errorText && 'dropdown_errorText';\n var buttonText;\n\n if (selectedItemIndex >= 0 && selectedItemIndex < options.length) {\n if (renderButtonContent) {\n buttonText = renderButtonContent();\n } else {\n buttonText = options[selectedItemIndex].primaryText;\n }\n } else {\n buttonText = '';\n }\n\n var ariaLabelAttr = !buttonText && {\n 'aria-label': label\n };\n\n var otherButtonAttr = _objectSpread(_objectSpread(_objectSpread({}, msgId && {\n 'aria-describedby': msgId\n }), ariaLabelAttr), rest);\n\n var V1AffordanceIcon = showMenu ? ChevronUpAltIcon : ChevronDownAltIcon;\n var V2AffordanceIcon = showMenu ? V2ChevronUpIcon : V2ChevronDownIcon;\n var affordanceClass = styles['ppvx_dropdown-menu__affordance-icon'];\n var AffordanceIcon = isThemeV2 ? /*#__PURE__*/React.createElement(V2AffordanceIcon, {\n size: \"sm\",\n className: affordanceClass\n }) : /*#__PURE__*/React.createElement(V1AffordanceIcon, {\n size: \"xs\",\n className: affordanceClass\n });\n var labelClasses = clsx(styles['ppvx_dropdown-menu__label'], !buttonText && styles['ppvx_dropdown-menu__label--empty'], menuLabelClassName);\n var labelledBy = ariaLabelledby ? \"\".concat(buttonId, \"-label \").concat(ariaLabelledby) : \"\".concat(buttonId, \"-label\");\n return /*#__PURE__*/React.createElement(\"div\", {\n className: dropdownMenuClass,\n id: id\n }, /*#__PURE__*/React.createElement(\"button\", _extends({\n className: buttonClass,\n type: \"button\",\n id: buttonId,\n ref: buttonRef,\n \"aria-haspopup\": \"listbox\",\n \"aria-expanded\": showMenu,\n \"aria-labelledby\": labelledBy,\n onClick: function openMenu(evt) {\n setShowMenu(function (prevState) {\n return !prevState;\n });\n setKeyboardActive(!evt.detail);\n }\n }, otherButtonAttr), AffordanceIcon, buttonText), /*#__PURE__*/React.createElement(\"label\", {\n id: \"\".concat(buttonId, \"-label\"),\n htmlFor: buttonId,\n className: labelClasses\n }, label), /*#__PURE__*/React.createElement(SelectionMenu, {\n initialItemFocus: initialItemFocus,\n isOpen: showMenu,\n mobileTitle: label,\n onClose: function handleClose(evt) {\n setShowMenu(false);\n\n if (onClose) {\n onClose(evt);\n }\n },\n onSelection: function handleItemClick(index) {\n setShowMenu(false);\n var buttonCurrent = getRefCurrent(buttonRef);\n /* istanbul ignore next */\n\n if (buttonCurrent) {\n if (skipButtonFocus) {\n buttonCurrent.blur();\n } else {\n buttonCurrent.focus();\n }\n }\n /* istanbul ignore else */\n\n\n if (onSelection) {\n onSelection(index);\n }\n },\n selectedIndex: selectedItemIndex,\n triggerElementId: buttonId,\n options: options,\n className: menuListClassName,\n containerClassName: menuContainerClassName,\n itemClassName: menuItemClassName,\n mobileHeaderClassName: menuMobileHeaderClassName,\n sheetClassName: sheetClassName,\n sheetWrapperClassName: sheetWrapperClassName,\n rtl: isRtl,\n returnFocusToTrigger: !skipButtonFocus,\n theme: _theme,\n isLoadingOptions: isLoadingOptions,\n searchEnabled: true\n }), renderMessage(errorText, helperText, msgId, _theme));\n};\n\nexport { DropdownMenu };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport React, { useState, useCallback, useContext, useMemo } from 'react';\nimport clsx from 'clsx';\nimport { CombinedInput } from '@paypalcorp/pp-react-combined-input';\nimport { IntlContext } from '@paypalcorp/pp-react-intl';\nimport { Flag } from '@paypalcorp/pp-react-flag';\nimport { MaskedTextInput } from '@paypalcorp/pp-react-masked-text-input';\nimport { DropdownMenu } from '@paypalcorp/pp-react-dropdown-menu';\nimport '../__generated__/styles/phone-input.css';\nimport { useTheme } from '@paypalcorp/pp-react-theme';\n\n// 55 fixed line Countries with variable length\n// 38 mobile line Countries with variable length\n// 21 of those instersect\nvar VAR_LENGTH_COUNTRIES_FIXED_LINE = ['AT', 'AX', 'BD', 'BG', 'CD', 'CN', 'CU', 'CW', 'DE', 'DZ', 'EG', 'FI', 'GB', 'HR', 'ID', 'IE', 'IL', 'IQ', 'IR', 'IT', 'KE', 'KH', 'KI', 'KP', 'KR', 'LB', 'LR', 'LU', 'MM', 'MN', 'MU', 'MW', 'MY', 'NA', 'NG', 'PG', 'PH', 'PK', 'PL', 'PY', 'RO', 'RS', 'RW', 'SE', 'SH', 'SK', 'SO', 'SR', 'SY', 'TK', 'TW', 'VA', 'WS', 'YE', 'ZW'];\nvar VAR_LENGTH_COUNTRIES_MOBILE = ['AD', 'AR', 'AT', 'AX', 'BA', 'BG', 'BR', 'CD', 'CW', 'DE', 'EE', 'FI', 'GA', 'HR', 'ID', 'IS', 'IT', 'KH', 'KR', 'LB', 'LI', 'LR', 'MC', 'MM', 'MX', 'MY', 'NZ', 'PA', 'PN', 'RS', 'SB', 'SO', 'TK', 'TV', 'VA', 'WS', 'XK', 'ZA'];\n// Get phone format from IntlProvider\nfunction getPhoneFormat(intlContext, phoneRegion, formatType, isMobile) {\n var providedCountryCode = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n var providedPhoneFormat = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '';\n\n if (providedCountryCode && providedPhoneFormat) {\n return {\n countryCode: providedCountryCode,\n pattern: providedPhoneFormat\n };\n } else if (phoneRegion && intlContext && intlContext.phoneFormatter) {\n var phoneType = isMobile ? 'MOBILE' : 'FIXED_LINE';\n var phoneNumberFormat = intlContext.phoneFormatter({\n phoneRegion: phoneRegion,\n style: formatType\n });\n var phoneExampleGenerator = intlContext.exampleGenerator({\n feature: 'phone',\n region: phoneRegion,\n type: phoneType\n });\n var exampleNumberObj = phoneExampleGenerator.generate();\n var countryCode = exampleNumberObj.countryCode,\n nationalNumber = exampleNumberObj.nationalNumber;\n var formattedNumber = phoneNumberFormat.format({\n countryCode: countryCode,\n nationalNumber: nationalNumber\n });\n var phoneNumber = formattedNumber;\n\n if (formattedNumber.includes('+')) {\n phoneNumber = formattedNumber.split(\"+\".concat(countryCode))[1].trim();\n }\n\n var pattern = phoneNumber.replace(/\\d/g, '0');\n var varLengthCountries = isMobile ? VAR_LENGTH_COUNTRIES_MOBILE : VAR_LENGTH_COUNTRIES_FIXED_LINE;\n\n if (varLengthCountries.includes(phoneRegion)) {\n var patternLength = pattern.match(/0/g).length;\n var optionalDigits = '0'.repeat(20 - patternLength);\n pattern = pattern + \"[\".concat(optionalDigits, \"]\");\n }\n\n return {\n countryCode: countryCode,\n pattern: pattern\n };\n }\n\n return {\n countryCode: providedCountryCode || '',\n pattern: providedPhoneFormat || '00000000000000000000'\n };\n}\n\nvar styles = {\"ppvx_phone-input\":\"ppvx_phone-input___1-4-3-beta-0\",\"ppvx_combined-input\":\"ppvx_combined-input___1-4-3-beta-0\",\"ppvx_phone-input__combined-input\":\"ppvx_phone-input__combined-input___1-4-3-beta-0\",\"ppvx_phone-input__input-with-menu\":\"ppvx_phone-input__input-with-menu___1-4-3-beta-0\",\"ppvx_phone-input__input__control\":\"ppvx_phone-input__input__control___1-4-3-beta-0\",\"ppvx_text-input__control\":\"ppvx_text-input__control___1-4-3-beta-0\",\"ppvx_dropdown-menu\":\"ppvx_dropdown-menu___1-4-3-beta-0\",\"ppvx_phone-input__menu\":\"ppvx_phone-input__menu___1-4-3-beta-0\",\"ppvx_phone-input__menu__btn-thumbnail\":\"ppvx_phone-input__menu__btn-thumbnail___1-4-3-beta-0\",\"ppvx_phone-input__menu__list\":\"ppvx_phone-input__menu__list___1-4-3-beta-0\",\"ppvx_phone-input__menu__button\":\"ppvx_phone-input__menu__button___1-4-3-beta-0\",\"ppvx_text-input__prefix\":\"ppvx_text-input__prefix___1-4-3-beta-0\",\"ppvx_text-input__prefix-wrapper\":\"ppvx_text-input__prefix-wrapper___1-4-3-beta-0\",\"ppvx_text-input__control--prefix\":\"ppvx_text-input__control--prefix___1-4-3-beta-0\",\"ppvx--v2\":\"ppvx--v2___1-4-3-beta-0\",\"ppvx--v1\":\"ppvx--v1___1-4-3-beta-0\",\"ppvx_phone-input__menu__button__affordance\":\"ppvx_phone-input__menu__button__affordance___1-4-3-beta-0\",\"ppvx_phone-input__menu__button__contents\":\"ppvx_phone-input__menu__button__contents___1-4-3-beta-0\"};\n\nvar PhoneCodeDropdown = function (_ref) {\n var selectedItemIndex = _ref.selectedItemIndex,\n rtl = _ref.rtl,\n countryOptions = _ref.countryOptions,\n options = _ref.options,\n flagId = _ref.flagId,\n codeId = _ref.codeId,\n theme = _ref.theme,\n rest = _objectWithoutProperties(_ref, [\"selectedItemIndex\", \"rtl\", \"countryOptions\", \"options\", \"flagId\", \"codeId\", \"theme\"]);\n\n var isV2 = theme === 'v2';\n return /*#__PURE__*/React.createElement(DropdownMenu, _extends({\n renderButtonContent: function renderButtonContent() {\n var selectedOption = countryOptions[selectedItemIndex];\n var countryPhoneCode = '';\n\n if (selectedOption && selectedOption.countryPhoneCode) {\n //istanbul ignore next\n if (rtl) {\n countryPhoneCode = \"\".concat(selectedOption.countryPhoneCode, \"+\");\n } else {\n countryPhoneCode = \"+\".concat(selectedOption.countryPhoneCode);\n }\n }\n\n if (selectedOption && selectedOption.phoneRegion) {\n return /*#__PURE__*/React.createElement(\"span\", {\n className: clsx(isV2 && styles['ppvx_phone-input__menu__button__contents'])\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: styles['ppvx_phone-input__menu__btn-thumbnail']\n }, /*#__PURE__*/React.createElement(Flag, {\n id: flagId,\n countryCode: selectedOption.phoneRegion,\n size: isV2 ? 'md' : 'xs',\n \"aria-label\": selectedOption.countryName,\n theme: theme\n })), /*#__PURE__*/React.createElement(\"span\", {\n id: codeId\n }, countryPhoneCode));\n }\n\n return /*#__PURE__*/React.createElement(React.Fragment, null, countryPhoneCode);\n },\n options: options,\n selectedItemIndex: selectedItemIndex,\n ariaLabelledby: \"\".concat(flagId, \" \").concat(codeId),\n theme: theme\n }, rest));\n};\n\nvar PhoneInputWithMenu = function (_ref) {\n var name = _ref.name,\n countryOptions = _ref.countryOptions,\n _ref$inputLabel = _ref.inputLabel,\n inputLabel = _ref$inputLabel === void 0 ? 'Phone Number' : _ref$inputLabel,\n _ref$menuLabel = _ref.menuLabel,\n menuLabel = _ref$menuLabel === void 0 ? 'Code' : _ref$menuLabel,\n selectedIndex = _ref.selectedIndex,\n className = _ref.className,\n inputClassName = _ref.inputClassName,\n menuClassName = _ref.menuClassName,\n _ref$mobile = _ref.mobile,\n mobile = _ref$mobile === void 0 ? false : _ref$mobile,\n onSelection = _ref.onSelection,\n theme = _ref.theme,\n rest = _objectWithoutProperties(_ref, [\"name\", \"countryOptions\", \"inputLabel\", \"menuLabel\", \"selectedIndex\", \"className\", \"inputClassName\", \"menuClassName\", \"mobile\", \"onSelection\", \"theme\"]);\n\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n isRtl = _useState2[0],\n setRtl = _useState2[1];\n\n var _theme = useTheme('PhoneInputWithMenu', theme);\n\n var containerRef = useCallback(function (node) {\n if (node !== null && window && window.getComputedStyle(node)) {\n var computedStyle = window.getComputedStyle(node);\n setRtl(computedStyle && computedStyle.direction === 'rtl');\n }\n }, []);\n var wrapperClasses = clsx(styles['ppvx_phone-input'], _defineProperty({}, styles['ppvx--v2'], _theme && _theme === 'v2'), className);\n var optionText;\n var optionCode;\n var optionPattern;\n var optionCountryRegion;\n var optionCountryName;\n var menuOptions;\n var preselectedMask = '00000000000000000000';\n var intlContext = useContext(IntlContext);\n\n var constructOptionProps = function (countryName, countryPhoneCode, countryRegion, rtl, menuTheme) {\n /* istanbul ignore next */\n optionText = rtl ? \"\".concat(countryName, \" \").concat(countryPhoneCode, \"+\") : \"\".concat(countryName, \" +\").concat(countryPhoneCode);\n return {\n primaryText: optionText,\n decoration: /*#__PURE__*/React.createElement(Flag, {\n countryCode: countryRegion,\n size: \"md\",\n theme: menuTheme\n })\n };\n };\n\n menuOptions = useMemo(function () {\n return countryOptions.map(function (country, i) {\n var phoneParts = getPhoneFormat(intlContext, country.phoneRegion, 'international', mobile, country.countryPhoneCode, country.phoneFormat);\n /* istanbul ignore next */\n\n var displayNamesObj = intlContext && intlContext.getDisplayNamesObject && intlContext.getDisplayNamesObject({\n type: 'region'\n });\n var countryCode = phoneParts.countryCode,\n pattern = phoneParts.pattern;\n optionCountryRegion = country.phoneRegion; //this one must be provided\n\n optionCode = country.countryPhoneCode || countryCode; //if provided use that\n\n optionPattern = country.phoneFormat || pattern; //if provided use that\n\n /* istanbul ignore next */\n\n optionCountryName = country.countryName || displayNamesObj && displayNamesObj.select(country.phoneRegion); //if provided use that\n\n countryOptions[i].countryPhoneCode = optionCode;\n countryOptions[i].phoneFormat = optionPattern;\n countryOptions[i].countryName = optionCountryName;\n\n if (selectedIndex === i) {\n preselectedMask = optionPattern;\n }\n\n return constructOptionProps(optionCountryName, optionCode, optionCountryRegion, isRtl, _theme);\n });\n }, [countryOptions]);\n\n var _useState3 = useState(preselectedMask),\n _useState4 = _slicedToArray(_useState3, 2),\n currentMask = _useState4[0],\n setMask = _useState4[1];\n\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n hasFocus = _useState6[0],\n setFocus = _useState6[1];\n\n var menuClasses = clsx(styles['ppvx_phone-input__menu'], menuClassName);\n var inputClasses = clsx(styles['ppvx_phone-input__input-with-menu'], inputClassName);\n var generatedFlagId = \"phone-input-country-flag_\".concat(Math.random().toFixed(8).toString().replace('0.', ''));\n var generatedCodeId = \"phone-input-country-code_\".concat(Math.random().toFixed(8).toString().replace('0.', ''));\n var dropdownEl = /*#__PURE__*/React.createElement(PhoneCodeDropdown, {\n label: menuLabel,\n options: menuOptions,\n countryOptions: countryOptions,\n selectedItemIndex: selectedIndex,\n onSelection: function handleSelection(idx) {\n setMask(countryOptions[idx].phoneFormat);\n onSelection(idx);\n setFocus(true);\n },\n className: menuClasses,\n menuListClassName: styles['ppvx_phone-input__menu__list'],\n menuButtonClassName: styles['ppvx_phone-input__menu__button'],\n menuLabelClassName: styles['ppvx_phone-input__menu__label'],\n sheetClassName: styles['ppvx_phone-input__menu__list'],\n rtl: isRtl,\n skipButtonFocus: true,\n flagId: generatedFlagId,\n codeId: generatedCodeId,\n theme: _theme\n });\n var inputEl = /*#__PURE__*/React.createElement(MaskedTextInput, _extends({\n type: \"tel\",\n name: name,\n label: inputLabel,\n maskOptions: {\n mask: currentMask\n },\n className: inputClasses,\n inputClassName: styles['ppvx_phone-input__input__control'],\n setFocus: hasFocus,\n onBlur: function onBlur() {\n return setFocus(false);\n },\n \"aria-describedby\": \"\".concat(generatedFlagId, \" \").concat(generatedCodeId)\n }, rest));\n return /*#__PURE__*/React.createElement(\"div\", {\n ref: containerRef,\n className: wrapperClasses\n }, /*#__PURE__*/React.createElement(CombinedInput, {\n theme: _theme,\n className: styles['ppvx_phone-input__combined-input']\n }, dropdownEl, inputEl));\n};\n\nvar PhoneInput = function (_ref) {\n var name = _ref.name,\n _ref$label = _ref.label,\n label = _ref$label === void 0 ? 'Phone Number' : _ref$label,\n countryOptions = _ref.countryOptions,\n className = _ref.className,\n inputClassName = _ref.inputClassName,\n _ref$formatType = _ref.formatType,\n formatType = _ref$formatType === void 0 ? countryOptions.countryPhoneCode ? 'international' : 'national' : _ref$formatType,\n _ref$mobile = _ref.mobile,\n mobile = _ref$mobile === void 0 ? false : _ref$mobile,\n theme = _ref.theme,\n rest = _objectWithoutProperties(_ref, [\"name\", \"label\", \"countryOptions\", \"className\", \"inputClassName\", \"formatType\", \"mobile\", \"theme\"]);\n\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n isRtl = _useState2[0],\n setRtl = _useState2[1];\n\n var _theme = useTheme('PhoneInput', theme);\n\n var containerRef = useCallback(function (node) {\n if (node !== null && window && window.getComputedStyle(node)) {\n var computedStyle = window.getComputedStyle(node);\n setRtl(computedStyle && computedStyle.direction === 'rtl');\n }\n }, []);\n var phoneMask = '';\n var codePrefix = '';\n var intlContext = useContext(IntlContext);\n var phoneParts = useMemo(function () {\n return getPhoneFormat(intlContext, countryOptions.phoneRegion, formatType, mobile, countryOptions.countryPhoneCode, countryOptions.phoneFormat);\n }, [countryOptions.phoneRegion, formatType, mobile]);\n var countryCode = phoneParts.countryCode,\n pattern = phoneParts.pattern;\n phoneMask = pattern;\n codePrefix = formatType === 'international' ? countryCode : '';\n var wrapperClasses = clsx(styles['ppvx_phone-input'], _defineProperty({}, styles['ppvx--v2'], _theme && _theme === 'v2'), className);\n var codeSuffix = codePrefix;\n\n if (formatType === 'international') {\n //istanbul ignore next\n codePrefix = isRtl ? '' : \"+\".concat(codePrefix); //istanbul ignore next\n\n codeSuffix = isRtl ? \"\".concat(codeSuffix, \"+\") : '';\n }\n\n return /*#__PURE__*/React.createElement(\"div\", {\n ref: containerRef,\n className: wrapperClasses\n }, /*#__PURE__*/React.createElement(MaskedTextInput, _extends({\n type: \"tel\",\n name: \"phoneInput-\".concat(name),\n label: label,\n prefix: codePrefix,\n suffix: codeSuffix,\n maskOptions: {\n mask: phoneMask\n },\n className: inputClassName,\n inputClassName: styles['ppvx_phone-input__input__control'],\n theme: _theme\n }, rest)));\n};\n\nexport { PhoneInput, PhoneInputWithMenu };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport React from 'react';\nimport { useTheme } from '@paypalcorp/pp-react-theme';\nimport { Shimmer } from '@paypalcorp/pp-react-utils';\nimport clsx from 'clsx';\nimport '../__generated__/styles/tile.css';\n\nvar styles = {\"ppvx_tile\":\"ppvx_tile___2-9-0-beta-0\",\"ppvx_tile--card\":\"ppvx_tile--card___2-9-0-beta-0\",\"ppvx_tile--corner-radius_lg\":\"ppvx_tile--corner-radius_lg___2-9-0-beta-0\",\"ppvx_tile--divider\":\"ppvx_tile--divider___2-9-0-beta-0\",\"ppvx_tile__header\":\"ppvx_tile__header___2-9-0-beta-0\",\"ppvx_tile__header-title\":\"ppvx_tile__header-title___2-9-0-beta-0\",\"ppvx_tile__content\":\"ppvx_tile__content___2-9-0-beta-0\",\"ppvx_tile__content-text\":\"ppvx_tile__content-text___2-9-0-beta-0\",\"ppvx_tile__footer\":\"ppvx_tile__footer___2-9-0-beta-0\",\"ppvx--v2\":\"ppvx--v2___2-9-0-beta-0\",\"ppvx--v1\":\"ppvx--v1___2-9-0-beta-0\",\"ppvx_tile--card--size_xs\":\"ppvx_tile--card--size_xs___2-9-0-beta-0\",\"ppvx_tile--card--size_xs-long\":\"ppvx_tile--card--size_xs-long___2-9-0-beta-0\",\"ppvx_tile--card--size_sm\":\"ppvx_tile--card--size_sm___2-9-0-beta-0\",\"ppvx_tile--card--size_md\":\"ppvx_tile--card--size_md___2-9-0-beta-0\",\"ppvx_tile--card--size_lg\":\"ppvx_tile--card--size_lg___2-9-0-beta-0\"};\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar Tile = function (_ref) {\n var _clsx;\n\n var _ref$as = _ref.as,\n as = _ref$as === void 0 ? 'div' : _ref$as,\n card = _ref.card,\n children = _ref.children,\n className = _ref.className,\n divider = _ref.divider,\n cardRadius = _ref.cardRadius,\n theme = _ref.theme,\n isLoading = _ref.isLoading,\n isInverse = _ref.isInverse,\n size = _ref.size,\n rest = _objectWithoutProperties(_ref, [\"as\", \"card\", \"children\", \"className\", \"divider\", \"cardRadius\", \"theme\", \"isLoading\", \"isInverse\", \"size\"]);\n\n var _theme = useTheme('Tile', theme);\n\n var isThemeV2 = _theme && _theme === 'v2';\n\n if (isThemeV2 && isLoading) {\n return /*#__PURE__*/React.createElement(Shimmer, {\n isInverse: isInverse\n }, children);\n }\n\n var tileClasses = clsx(styles.ppvx_tile, (_clsx = {}, _defineProperty(_clsx, styles['ppvx_tile--divider'], divider), _defineProperty(_clsx, styles['ppvx_tile--card'], card || isThemeV2), _defineProperty(_clsx, styles[\"ppvx_tile--corner-radius_\".concat(cardRadius)], card && cardRadius === 'lg'), _defineProperty(_clsx, styles['ppvx--v2'], isThemeV2), _defineProperty(_clsx, styles[\"ppvx_tile--card--size_\".concat(size)], size), _clsx), className);\n return React.createElement(as, _objectSpread({\n className: tileClasses\n }, rest), children);\n};\n\nvar Header = function (_ref2) {\n var className = _ref2.className,\n children = _ref2.children,\n rest = _objectWithoutProperties(_ref2, [\"className\", \"children\"]);\n\n var headerClasses = clsx(styles.ppvx_tile__header, className);\n return /*#__PURE__*/React.createElement(\"header\", _extends({\n className: headerClasses\n }, rest), /*#__PURE__*/React.createElement(\"h3\", {\n className: styles['ppvx_tile__header-title']\n }, children));\n};\n\nvar Content = function (_ref3) {\n var className = _ref3.className,\n children = _ref3.children,\n rest = _objectWithoutProperties(_ref3, [\"className\", \"children\"]);\n\n var contentClasses = clsx(styles.ppvx_tile__content, className);\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n className: contentClasses\n }, rest), children);\n};\n\nvar Footer = function (_ref4) {\n var className = _ref4.className,\n children = _ref4.children,\n rest = _objectWithoutProperties(_ref4, [\"className\", \"children\"]);\n\n var footerClasses = clsx(styles.ppvx_tile__footer, className);\n return /*#__PURE__*/React.createElement(\"footer\", _extends({\n className: footerClasses\n }, rest), children);\n};\n\nTile.Header = Header;\nTile.Content = Content;\nTile.Footer = Footer;\n\nexport { Tile };\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nvar CDN_ENDPOINT = 'https://paypalobjects.com/appbadges';\nvar PLATFORMS = {\n IOS: 'ios',\n IOS_WHITE: 'ios_white',\n ANDROID: 'android'\n};\nvar fixAndroidSVGPadding = {\n transform: 'scale(1.3)',\n pointerEvents: 'none',\n margin: '0 0.5rem'\n};\nfunction AppBadge(_ref) {\n var url = _ref.url,\n _ref$platform = _ref.platform,\n platform = _ref$platform === void 0 ? PLATFORMS.IOS : _ref$platform,\n _ref$defaultLocale = _ref.defaultLocale,\n defaultLocale = _ref$defaultLocale === void 0 ? getBrowserLanguage() || 'en_US' : _ref$defaultLocale,\n _ref$locale = _ref.locale,\n locale = _ref$locale === void 0 ? defaultLocale : _ref$locale,\n _ref$fontSize = _ref.fontSize,\n fontSize = _ref$fontSize === void 0 ? '2.5rem' : _ref$fontSize,\n _ref$className = _ref.className,\n className = _ref$className === void 0 ? '' : _ref$className,\n _ref$onClick = _ref.onClick,\n onClick = _ref$onClick === void 0 ? function () {} : _ref$onClick,\n _ref$onLoad = _ref.onLoad,\n _onLoad = _ref$onLoad === void 0 ? function () {} : _ref$onLoad,\n _ref$onLoadError = _ref.onLoadError,\n onLoadError = _ref$onLoadError === void 0 ? function () {} : _ref$onLoadError,\n _ref$anchorProps = _ref.anchorProps,\n anchorProps = _ref$anchorProps === void 0 ? {} : _ref$anchorProps,\n _ref$imageProps = _ref.imageProps,\n imageProps = _ref$imageProps === void 0 ? {} : _ref$imageProps;\n\n var _React$useState = React.useState(getImageSources(locale)),\n image = _React$useState[0],\n setImage = _React$useState[1];\n\n var setDefaultImageSrc = function setDefaultImageSrc() {\n return setImage(getImageSources(defaultLocale));\n };\n\n React.useEffect(function () {\n setImage(getImageSources(locale));\n }, [locale, setImage]);\n var classNames = ['app-badge', \"app-badge--\" + platform, \"app-badge--\" + locale, className].join(' ');\n return /*#__PURE__*/React.createElement(\"a\", _extends({\n \"aria-label\": \"Download app in \" + platform + \" store\"\n }, anchorProps, {\n className: classNames,\n onClick: onClick,\n style: _extends({\n fontSize: fontSize,\n display: 'inline-block',\n width: 'fit-content',\n height: '1em'\n }, anchorProps.style),\n href: url\n }), /*#__PURE__*/React.createElement(\"img\", _extends({\n alt: platform + \" app download\"\n }, imageProps, {\n src: image[platform],\n className: \"app-badge__image\",\n onError: function onError(e) {\n onLoadError(e, {\n image: image,\n platform: platform,\n locale: locale\n });\n setDefaultImageSrc();\n },\n onLoad: function onLoad(e) {\n _onLoad(e, {\n image: image,\n platform: platform,\n locale: locale\n });\n },\n style: _extends({\n height: '100%',\n display: 'inherit'\n }, platform === PLATFORMS.ANDROID ? fixAndroidSVGPadding : {}, {}, imageProps.style)\n })));\n}\nAppBadge.propTypes = {\n url: PropTypes.string.isRequired,\n locale: PropTypes.string,\n defaultLocale: PropTypes.string,\n platform: PropTypes.oneOf(Object.values(PLATFORMS)),\n fontSize: PropTypes.string,\n className: PropTypes.string,\n onClick: PropTypes.func,\n onLoad: PropTypes.func,\n onLoadError: PropTypes.func,\n anchorProps: PropTypes.object,\n imageProps: PropTypes.object\n};\nfunction getImageSources(locale) {\n var parsedLocale = formatLocale(locale);\n return {\n locale: parsedLocale,\n ios: CDN_ENDPOINT + \"/badges/\" + parsedLocale + \"/ios.svg\",\n ios_white: CDN_ENDPOINT + \"/badges/\" + parsedLocale + \"/ios_white.svg\",\n android: CDN_ENDPOINT + \"/badges/\" + parsedLocale + \"/android.svg\"\n };\n}\nfunction formatLocale(locale) {\n var _locale$split = locale.split(/[_-]/),\n _locale$split$ = _locale$split[0],\n lang = _locale$split$ === void 0 ? 'en' : _locale$split$,\n _locale$split$2 = _locale$split[1],\n country = _locale$split$2 === void 0 ? 'US' : _locale$split$2;\n\n return lang.toLowerCase() + \"_\" + country.toUpperCase();\n}\nfunction getBrowserLanguage() {\n return navigator && navigator.language && formatLocale(navigator.language);\n}\n\nexport { AppBadge, PLATFORMS, formatLocale, getBrowserLanguage, getImageSources };\n//# sourceMappingURL=index.modern.js.map\n","var mode = require('./mode');\n\nfunction QR8bitByte(data) {\n\tthis.mode = mode.MODE_8BIT_BYTE;\n\tthis.data = data;\n}\n\nQR8bitByte.prototype = {\n\n\tgetLength : function(buffer) {\n\t\treturn this.data.length;\n\t},\n\t\n\twrite : function(buffer) {\n\t\tfor (var i = 0; i < this.data.length; i++) {\n\t\t\t// not JIS ...\n\t\t\tbuffer.put(this.data.charCodeAt(i), 8);\n\t\t}\n\t}\n};\n\nmodule.exports = QR8bitByte;\n\n","function QRBitBuffer() {\n\tthis.buffer = new Array();\n\tthis.length = 0;\n}\n\nQRBitBuffer.prototype = {\n\n\tget : function(index) {\n\t\tvar bufIndex = Math.floor(index / 8);\n\t\treturn ( (this.buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n\t},\n\t\n\tput : function(num, length) {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tthis.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n\t\t}\n\t},\n\t\n\tgetLengthInBits : function() {\n\t\treturn this.length;\n\t},\n\t\n\tputBit : function(bit) {\n\t\n\t\tvar bufIndex = Math.floor(this.length / 8);\n\t\tif (this.buffer.length <= bufIndex) {\n\t\t\tthis.buffer.push(0);\n\t\t}\n\t\n\t\tif (bit) {\n\t\t\tthis.buffer[bufIndex] |= (0x80 >>> (this.length % 8) );\n\t\t}\n\t\n\t\tthis.length++;\n\t}\n};\n\nmodule.exports = QRBitBuffer;\n","module.exports = {\n\tL : 1,\n\tM : 0,\n\tQ : 3,\n\tH : 2\n};\n\n","var math = require('./math');\n\nfunction QRPolynomial(num, shift) {\n\n\tif (num.length == undefined) {\n\t\tthrow new Error(num.length + \"/\" + shift);\n\t}\n\n\tvar offset = 0;\n\n\twhile (offset < num.length && num[offset] == 0) {\n\t\toffset++;\n\t}\n\n\tthis.num = new Array(num.length - offset + shift);\n\tfor (var i = 0; i < num.length - offset; i++) {\n\t\tthis.num[i] = num[i + offset];\n\t}\n}\n\nQRPolynomial.prototype = {\n\n\tget : function(index) {\n\t\treturn this.num[index];\n\t},\n\t\n\tgetLength : function() {\n\t\treturn this.num.length;\n\t},\n\t\n\tmultiply : function(e) {\n\t\n\t\tvar num = new Array(this.getLength() + e.getLength() - 1);\n\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tfor (var j = 0; j < e.getLength(); j++) {\n\t\t\t\tnum[i + j] ^= math.gexp(math.glog(this.get(i) ) + math.glog(e.get(j) ) );\n\t\t\t}\n\t\t}\n\t\n\t\treturn new QRPolynomial(num, 0);\n\t},\n\t\n\tmod : function(e) {\n\t\n\t\tif (this.getLength() - e.getLength() < 0) {\n\t\t\treturn this;\n\t\t}\n\t\n\t\tvar ratio = math.glog(this.get(0) ) - math.glog(e.get(0) );\n\t\n\t\tvar num = new Array(this.getLength() );\n\t\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tnum[i] = this.get(i);\n\t\t}\n\t\t\n\t\tfor (var i = 0; i < e.getLength(); i++) {\n\t\t\tnum[i] ^= math.gexp(math.glog(e.get(i) ) + ratio);\n\t\t}\n\t\n\t\t// recursive call\n\t\treturn new QRPolynomial(num, 0).mod(e);\n\t}\n};\n\nmodule.exports = QRPolynomial;\n","var BitByte = require('./8BitByte');\nvar RSBlock = require('./RSBlock');\nvar BitBuffer = require('./BitBuffer');\nvar util = require('./util');\nvar Polynomial = require('./Polynomial');\n\nfunction QRCode(typeNumber, errorCorrectLevel) {\n\tthis.typeNumber = typeNumber;\n\tthis.errorCorrectLevel = errorCorrectLevel;\n\tthis.modules = null;\n\tthis.moduleCount = 0;\n\tthis.dataCache = null;\n\tthis.dataList = [];\n}\n\n// for client side minification\nvar proto = QRCode.prototype;\n\nproto.addData = function(data) {\n\tvar newData = new BitByte(data);\n\tthis.dataList.push(newData);\n\tthis.dataCache = null;\n};\n\nproto.isDark = function(row, col) {\n\tif (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {\n\t\tthrow new Error(row + \",\" + col);\n\t}\n\treturn this.modules[row][col];\n};\n\nproto.getModuleCount = function() {\n\treturn this.moduleCount;\n};\n\nproto.make = function() {\n\t// Calculate automatically typeNumber if provided is < 1\n\tif (this.typeNumber < 1 ){\n\t\tvar typeNumber = 1;\n\t\tfor (typeNumber = 1; typeNumber < 40; typeNumber++) {\n\t\t\tvar rsBlocks = RSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);\n\n\t\t\tvar buffer = new BitBuffer();\n\t\t\tvar totalDataCount = 0;\n\t\t\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\t\t\ttotalDataCount += rsBlocks[i].dataCount;\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < this.dataList.length; i++) {\n\t\t\t\tvar data = this.dataList[i];\n\t\t\t\tbuffer.put(data.mode, 4);\n\t\t\t\tbuffer.put(data.getLength(), util.getLengthInBits(data.mode, typeNumber) );\n\t\t\t\tdata.write(buffer);\n\t\t\t}\n\t\t\tif (buffer.getLengthInBits() <= totalDataCount * 8)\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.typeNumber = typeNumber;\n\t}\n\tthis.makeImpl(false, this.getBestMaskPattern() );\n};\n\nproto.makeImpl = function(test, maskPattern) {\n\t\n\tthis.moduleCount = this.typeNumber * 4 + 17;\n\tthis.modules = new Array(this.moduleCount);\n\t\n\tfor (var row = 0; row < this.moduleCount; row++) {\n\t\t\n\t\tthis.modules[row] = new Array(this.moduleCount);\n\t\t\n\t\tfor (var col = 0; col < this.moduleCount; col++) {\n\t\t\tthis.modules[row][col] = null;//(col + row) % 3;\n\t\t}\n\t}\n\n\tthis.setupPositionProbePattern(0, 0);\n\tthis.setupPositionProbePattern(this.moduleCount - 7, 0);\n\tthis.setupPositionProbePattern(0, this.moduleCount - 7);\n\tthis.setupPositionAdjustPattern();\n\tthis.setupTimingPattern();\n\tthis.setupTypeInfo(test, maskPattern);\n\t\n\tif (this.typeNumber >= 7) {\n\t\tthis.setupTypeNumber(test);\n\t}\n\n\tif (this.dataCache == null) {\n\t\tthis.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);\n\t}\n\n\tthis.mapData(this.dataCache, maskPattern);\n};\n\nproto.setupPositionProbePattern = function(row, col) {\n\t\n\tfor (var r = -1; r <= 7; r++) {\n\t\t\n\t\tif (row + r <= -1 || this.moduleCount <= row + r) continue;\n\t\t\n\t\tfor (var c = -1; c <= 7; c++) {\n\t\t\t\n\t\t\tif (col + c <= -1 || this.moduleCount <= col + c) continue;\n\t\t\t\n\t\t\tif ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n\t\t\t\t\t|| (0 <= c && c <= 6 && (r == 0 || r == 6) )\n\t\t\t\t\t|| (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n\t\t\t\tthis.modules[row + r][col + c] = true;\n\t\t\t} else {\n\t\t\t\tthis.modules[row + r][col + c] = false;\n\t\t\t}\n\t\t}\t\t\n\t}\t\t\n};\n\nproto.getBestMaskPattern = function() {\n\n\tvar minLostPoint = 0;\n\tvar pattern = 0;\n\n\tfor (var i = 0; i < 8; i++) {\n\t\t\n\t\tthis.makeImpl(true, i);\n\n\t\tvar lostPoint = util.getLostPoint(this);\n\n\t\tif (i == 0 || minLostPoint > lostPoint) {\n\t\t\tminLostPoint = lostPoint;\n\t\t\tpattern = i;\n\t\t}\n\t}\n\n\treturn pattern;\n};\n\nproto.createMovieClip = function(target_mc, instance_name, depth) {\n\n\tvar qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);\n\tvar cs = 1;\n\n\tthis.make();\n\n\tfor (var row = 0; row < this.modules.length; row++) {\n\t\t\n\t\tvar y = row * cs;\n\t\t\n\t\tfor (var col = 0; col < this.modules[row].length; col++) {\n\n\t\t\tvar x = col * cs;\n\t\t\tvar dark = this.modules[row][col];\n\t\t\n\t\t\tif (dark) {\n\t\t\t\tqr_mc.beginFill(0, 100);\n\t\t\t\tqr_mc.moveTo(x, y);\n\t\t\t\tqr_mc.lineTo(x + cs, y);\n\t\t\t\tqr_mc.lineTo(x + cs, y + cs);\n\t\t\t\tqr_mc.lineTo(x, y + cs);\n\t\t\t\tqr_mc.endFill();\n\t\t\t}\n\t\t}\n\t}\n\t\n\treturn qr_mc;\n};\n\nproto.setupTimingPattern = function() {\n\t\n\tfor (var r = 8; r < this.moduleCount - 8; r++) {\n\t\tif (this.modules[r][6] != null) {\n\t\t\tcontinue;\n\t\t}\n\t\tthis.modules[r][6] = (r % 2 == 0);\n\t}\n\n\tfor (var c = 8; c < this.moduleCount - 8; c++) {\n\t\tif (this.modules[6][c] != null) {\n\t\t\tcontinue;\n\t\t}\n\t\tthis.modules[6][c] = (c % 2 == 0);\n\t}\n};\n\nproto.setupPositionAdjustPattern = function() {\n\n\tvar pos = util.getPatternPosition(this.typeNumber);\n\t\n\tfor (var i = 0; i < pos.length; i++) {\n\t\n\t\tfor (var j = 0; j < pos.length; j++) {\n\t\t\n\t\t\tvar row = pos[i];\n\t\t\tvar col = pos[j];\n\t\t\t\n\t\t\tif (this.modules[row][col] != null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t\n\t\t\tfor (var r = -2; r <= 2; r++) {\n\t\t\t\n\t\t\t\tfor (var c = -2; c <= 2; c++) {\n\t\t\t\t\n\t\t\t\t\tif (r == -2 || r == 2 || c == -2 || c == 2\n\t\t\t\t\t\t\t|| (r == 0 && c == 0) ) {\n\t\t\t\t\t\tthis.modules[row + r][col + c] = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.modules[row + r][col + c] = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nproto.setupTypeNumber = function(test) {\n\n\tvar bits = util.getBCHTypeNumber(this.typeNumber);\n\n\tfor (var i = 0; i < 18; i++) {\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\t\tthis.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;\n\t}\n\n\tfor (var i = 0; i < 18; i++) {\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\t\tthis.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n\t}\n};\n\nproto.setupTypeInfo = function(test, maskPattern) {\n\n\tvar data = (this.errorCorrectLevel << 3) | maskPattern;\n\tvar bits = util.getBCHTypeInfo(data);\n\n\t// vertical\t\t\n\tfor (var i = 0; i < 15; i++) {\n\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\n\t\tif (i < 6) {\n\t\t\tthis.modules[i][8] = mod;\n\t\t} else if (i < 8) {\n\t\t\tthis.modules[i + 1][8] = mod;\n\t\t} else {\n\t\t\tthis.modules[this.moduleCount - 15 + i][8] = mod;\n\t\t}\n\t}\n\n\t// horizontal\n\tfor (var i = 0; i < 15; i++) {\n\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\t\t\n\t\tif (i < 8) {\n\t\t\tthis.modules[8][this.moduleCount - i - 1] = mod;\n\t\t} else if (i < 9) {\n\t\t\tthis.modules[8][15 - i - 1 + 1] = mod;\n\t\t} else {\n\t\t\tthis.modules[8][15 - i - 1] = mod;\n\t\t}\n\t}\n\n\t// fixed module\n\tthis.modules[this.moduleCount - 8][8] = (!test);\n};\n\nproto.mapData = function(data, maskPattern) {\n\t\n\tvar inc = -1;\n\tvar row = this.moduleCount - 1;\n\tvar bitIndex = 7;\n\tvar byteIndex = 0;\n\t\n\tfor (var col = this.moduleCount - 1; col > 0; col -= 2) {\n\n\t\tif (col == 6) col--;\n\n\t\twhile (true) {\n\n\t\t\tfor (var c = 0; c < 2; c++) {\n\t\t\t\t\n\t\t\t\tif (this.modules[row][col - c] == null) {\n\t\t\t\t\t\n\t\t\t\t\tvar dark = false;\n\n\t\t\t\t\tif (byteIndex < data.length) {\n\t\t\t\t\t\tdark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar mask = util.getMask(maskPattern, row, col - c);\n\n\t\t\t\t\tif (mask) {\n\t\t\t\t\t\tdark = !dark;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.modules[row][col - c] = dark;\n\t\t\t\t\tbitIndex--;\n\n\t\t\t\t\tif (bitIndex == -1) {\n\t\t\t\t\t\tbyteIndex++;\n\t\t\t\t\t\tbitIndex = 7;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\trow += inc;\n\n\t\t\tif (row < 0 || this.moduleCount <= row) {\n\t\t\t\trow -= inc;\n\t\t\t\tinc = -inc;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n};\n\nQRCode.PAD0 = 0xEC;\nQRCode.PAD1 = 0x11;\n\nQRCode.createData = function(typeNumber, errorCorrectLevel, dataList) {\n\t\n\tvar rsBlocks = RSBlock.getRSBlocks(typeNumber, errorCorrectLevel);\n\t\n\tvar buffer = new BitBuffer();\n\t\n\tfor (var i = 0; i < dataList.length; i++) {\n\t\tvar data = dataList[i];\n\t\tbuffer.put(data.mode, 4);\n\t\tbuffer.put(data.getLength(), util.getLengthInBits(data.mode, typeNumber) );\n\t\tdata.write(buffer);\n\t}\n\n\t// calc num max data.\n\tvar totalDataCount = 0;\n\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\ttotalDataCount += rsBlocks[i].dataCount;\n\t}\n\n\tif (buffer.getLengthInBits() > totalDataCount * 8) {\n\t\tthrow new Error(\"code length overflow. (\"\n\t\t\t+ buffer.getLengthInBits()\n\t\t\t+ \">\"\n\t\t\t+ totalDataCount * 8\n\t\t\t+ \")\");\n\t}\n\n\t// end code\n\tif (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n\t\tbuffer.put(0, 4);\n\t}\n\n\t// padding\n\twhile (buffer.getLengthInBits() % 8 != 0) {\n\t\tbuffer.putBit(false);\n\t}\n\n\t// padding\n\twhile (true) {\n\t\t\n\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\tbreak;\n\t\t}\n\t\tbuffer.put(QRCode.PAD0, 8);\n\t\t\n\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\tbreak;\n\t\t}\n\t\tbuffer.put(QRCode.PAD1, 8);\n\t}\n\n\treturn QRCode.createBytes(buffer, rsBlocks);\n};\n\nQRCode.createBytes = function(buffer, rsBlocks) {\n\n\tvar offset = 0;\n\t\n\tvar maxDcCount = 0;\n\tvar maxEcCount = 0;\n\t\n\tvar dcdata = new Array(rsBlocks.length);\n\tvar ecdata = new Array(rsBlocks.length);\n\t\n\tfor (var r = 0; r < rsBlocks.length; r++) {\n\n\t\tvar dcCount = rsBlocks[r].dataCount;\n\t\tvar ecCount = rsBlocks[r].totalCount - dcCount;\n\n\t\tmaxDcCount = Math.max(maxDcCount, dcCount);\n\t\tmaxEcCount = Math.max(maxEcCount, ecCount);\n\t\t\n\t\tdcdata[r] = new Array(dcCount);\n\t\t\n\t\tfor (var i = 0; i < dcdata[r].length; i++) {\n\t\t\tdcdata[r][i] = 0xff & buffer.buffer[i + offset];\n\t\t}\n\t\toffset += dcCount;\n\t\t\n\t\tvar rsPoly = util.getErrorCorrectPolynomial(ecCount);\n\t\tvar rawPoly = new Polynomial(dcdata[r], rsPoly.getLength() - 1);\n\n\t\tvar modPoly = rawPoly.mod(rsPoly);\n\t\tecdata[r] = new Array(rsPoly.getLength() - 1);\n\t\tfor (var i = 0; i < ecdata[r].length; i++) {\n var modIndex = i + modPoly.getLength() - ecdata[r].length;\n\t\t\tecdata[r][i] = (modIndex >= 0)? modPoly.get(modIndex) : 0;\n\t\t}\n\n\t}\n\t\n\tvar totalCodeCount = 0;\n\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\ttotalCodeCount += rsBlocks[i].totalCount;\n\t}\n\n\tvar data = new Array(totalCodeCount);\n\tvar index = 0;\n\n\tfor (var i = 0; i < maxDcCount; i++) {\n\t\tfor (var r = 0; r < rsBlocks.length; r++) {\n\t\t\tif (i < dcdata[r].length) {\n\t\t\t\tdata[index++] = dcdata[r][i];\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (var i = 0; i < maxEcCount; i++) {\n\t\tfor (var r = 0; r < rsBlocks.length; r++) {\n\t\t\tif (i < ecdata[r].length) {\n\t\t\t\tdata[index++] = ecdata[r][i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn data;\n};\n\nmodule.exports = QRCode;\n\n","// ErrorCorrectLevel\nvar ECL = require('./ErrorCorrectLevel');\n\nfunction QRRSBlock(totalCount, dataCount) {\n\tthis.totalCount = totalCount;\n\tthis.dataCount = dataCount;\n}\n\nQRRSBlock.RS_BLOCK_TABLE = [\n\n\t// L\n\t// M\n\t// Q\n\t// H\n\n\t// 1\n\t[1, 26, 19],\n\t[1, 26, 16],\n\t[1, 26, 13],\n\t[1, 26, 9],\n\t\n\t// 2\n\t[1, 44, 34],\n\t[1, 44, 28],\n\t[1, 44, 22],\n\t[1, 44, 16],\n\n\t// 3\n\t[1, 70, 55],\n\t[1, 70, 44],\n\t[2, 35, 17],\n\t[2, 35, 13],\n\n\t// 4\t\t\n\t[1, 100, 80],\n\t[2, 50, 32],\n\t[2, 50, 24],\n\t[4, 25, 9],\n\t\n\t// 5\n\t[1, 134, 108],\n\t[2, 67, 43],\n\t[2, 33, 15, 2, 34, 16],\n\t[2, 33, 11, 2, 34, 12],\n\t\n\t// 6\n\t[2, 86, 68],\n\t[4, 43, 27],\n\t[4, 43, 19],\n\t[4, 43, 15],\n\t\n\t// 7\t\t\n\t[2, 98, 78],\n\t[4, 49, 31],\n\t[2, 32, 14, 4, 33, 15],\n\t[4, 39, 13, 1, 40, 14],\n\t\n\t// 8\n\t[2, 121, 97],\n\t[2, 60, 38, 2, 61, 39],\n\t[4, 40, 18, 2, 41, 19],\n\t[4, 40, 14, 2, 41, 15],\n\t\n\t// 9\n\t[2, 146, 116],\n\t[3, 58, 36, 2, 59, 37],\n\t[4, 36, 16, 4, 37, 17],\n\t[4, 36, 12, 4, 37, 13],\n\t\n\t// 10\t\t\n\t[2, 86, 68, 2, 87, 69],\n\t[4, 69, 43, 1, 70, 44],\n\t[6, 43, 19, 2, 44, 20],\n\t[6, 43, 15, 2, 44, 16],\n\n\t// 11\n\t[4, 101, 81],\n\t[1, 80, 50, 4, 81, 51],\n\t[4, 50, 22, 4, 51, 23],\n\t[3, 36, 12, 8, 37, 13],\n\n\t// 12\n\t[2, 116, 92, 2, 117, 93],\n\t[6, 58, 36, 2, 59, 37],\n\t[4, 46, 20, 6, 47, 21],\n\t[7, 42, 14, 4, 43, 15],\n\n\t// 13\n\t[4, 133, 107],\n\t[8, 59, 37, 1, 60, 38],\n\t[8, 44, 20, 4, 45, 21],\n\t[12, 33, 11, 4, 34, 12],\n\n\t// 14\n\t[3, 145, 115, 1, 146, 116],\n\t[4, 64, 40, 5, 65, 41],\n\t[11, 36, 16, 5, 37, 17],\n\t[11, 36, 12, 5, 37, 13],\n\n\t// 15\n\t[5, 109, 87, 1, 110, 88],\n\t[5, 65, 41, 5, 66, 42],\n\t[5, 54, 24, 7, 55, 25],\n\t[11, 36, 12],\n\n\t// 16\n\t[5, 122, 98, 1, 123, 99],\n\t[7, 73, 45, 3, 74, 46],\n\t[15, 43, 19, 2, 44, 20],\n\t[3, 45, 15, 13, 46, 16],\n\n\t// 17\n\t[1, 135, 107, 5, 136, 108],\n\t[10, 74, 46, 1, 75, 47],\n\t[1, 50, 22, 15, 51, 23],\n\t[2, 42, 14, 17, 43, 15],\n\n\t// 18\n\t[5, 150, 120, 1, 151, 121],\n\t[9, 69, 43, 4, 70, 44],\n\t[17, 50, 22, 1, 51, 23],\n\t[2, 42, 14, 19, 43, 15],\n\n\t// 19\n\t[3, 141, 113, 4, 142, 114],\n\t[3, 70, 44, 11, 71, 45],\n\t[17, 47, 21, 4, 48, 22],\n\t[9, 39, 13, 16, 40, 14],\n\n\t// 20\n\t[3, 135, 107, 5, 136, 108],\n\t[3, 67, 41, 13, 68, 42],\n\t[15, 54, 24, 5, 55, 25],\n\t[15, 43, 15, 10, 44, 16],\n\n\t// 21\n\t[4, 144, 116, 4, 145, 117],\n\t[17, 68, 42],\n\t[17, 50, 22, 6, 51, 23],\n\t[19, 46, 16, 6, 47, 17],\n\n\t// 22\n\t[2, 139, 111, 7, 140, 112],\n\t[17, 74, 46],\n\t[7, 54, 24, 16, 55, 25],\n\t[34, 37, 13],\n\n\t// 23\n\t[4, 151, 121, 5, 152, 122],\n\t[4, 75, 47, 14, 76, 48],\n\t[11, 54, 24, 14, 55, 25],\n\t[16, 45, 15, 14, 46, 16],\n\n\t// 24\n\t[6, 147, 117, 4, 148, 118],\n\t[6, 73, 45, 14, 74, 46],\n\t[11, 54, 24, 16, 55, 25],\n\t[30, 46, 16, 2, 47, 17],\n\n\t// 25\n\t[8, 132, 106, 4, 133, 107],\n\t[8, 75, 47, 13, 76, 48],\n\t[7, 54, 24, 22, 55, 25],\n\t[22, 45, 15, 13, 46, 16],\n\n\t// 26\n\t[10, 142, 114, 2, 143, 115],\n\t[19, 74, 46, 4, 75, 47],\n\t[28, 50, 22, 6, 51, 23],\n\t[33, 46, 16, 4, 47, 17],\n\n\t// 27\n\t[8, 152, 122, 4, 153, 123],\n\t[22, 73, 45, 3, 74, 46],\n\t[8, 53, 23, 26, 54, 24],\n\t[12, 45, 15, 28, 46, 16],\n\n\t// 28\n\t[3, 147, 117, 10, 148, 118],\n\t[3, 73, 45, 23, 74, 46],\n\t[4, 54, 24, 31, 55, 25],\n\t[11, 45, 15, 31, 46, 16],\n\n\t// 29\n\t[7, 146, 116, 7, 147, 117],\n\t[21, 73, 45, 7, 74, 46],\n\t[1, 53, 23, 37, 54, 24],\n\t[19, 45, 15, 26, 46, 16],\n\n\t// 30\n\t[5, 145, 115, 10, 146, 116],\n\t[19, 75, 47, 10, 76, 48],\n\t[15, 54, 24, 25, 55, 25],\n\t[23, 45, 15, 25, 46, 16],\n\n\t// 31\n\t[13, 145, 115, 3, 146, 116],\n\t[2, 74, 46, 29, 75, 47],\n\t[42, 54, 24, 1, 55, 25],\n\t[23, 45, 15, 28, 46, 16],\n\n\t// 32\n\t[17, 145, 115],\n\t[10, 74, 46, 23, 75, 47],\n\t[10, 54, 24, 35, 55, 25],\n\t[19, 45, 15, 35, 46, 16],\n\n\t// 33\n\t[17, 145, 115, 1, 146, 116],\n\t[14, 74, 46, 21, 75, 47],\n\t[29, 54, 24, 19, 55, 25],\n\t[11, 45, 15, 46, 46, 16],\n\n\t// 34\n\t[13, 145, 115, 6, 146, 116],\n\t[14, 74, 46, 23, 75, 47],\n\t[44, 54, 24, 7, 55, 25],\n\t[59, 46, 16, 1, 47, 17],\n\n\t// 35\n\t[12, 151, 121, 7, 152, 122],\n\t[12, 75, 47, 26, 76, 48],\n\t[39, 54, 24, 14, 55, 25],\n\t[22, 45, 15, 41, 46, 16],\n\n\t// 36\n\t[6, 151, 121, 14, 152, 122],\n\t[6, 75, 47, 34, 76, 48],\n\t[46, 54, 24, 10, 55, 25],\n\t[2, 45, 15, 64, 46, 16],\n\n\t// 37\n\t[17, 152, 122, 4, 153, 123],\n\t[29, 74, 46, 14, 75, 47],\n\t[49, 54, 24, 10, 55, 25],\n\t[24, 45, 15, 46, 46, 16],\n\n\t// 38\n\t[4, 152, 122, 18, 153, 123],\n\t[13, 74, 46, 32, 75, 47],\n\t[48, 54, 24, 14, 55, 25],\n\t[42, 45, 15, 32, 46, 16],\n\n\t// 39\n\t[20, 147, 117, 4, 148, 118],\n\t[40, 75, 47, 7, 76, 48],\n\t[43, 54, 24, 22, 55, 25],\n\t[10, 45, 15, 67, 46, 16],\n\n\t// 40\n\t[19, 148, 118, 6, 149, 119],\n\t[18, 75, 47, 31, 76, 48],\n\t[34, 54, 24, 34, 55, 25],\n\t[20, 45, 15, 61, 46, 16]\n];\n\nQRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) {\n\t\n\tvar rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);\n\t\n\tif (rsBlock == undefined) {\n\t\tthrow new Error(\"bad rs block @ typeNumber:\" + typeNumber + \"/errorCorrectLevel:\" + errorCorrectLevel);\n\t}\n\n\tvar length = rsBlock.length / 3;\n\t\n\tvar list = new Array();\n\t\n\tfor (var i = 0; i < length; i++) {\n\n\t\tvar count = rsBlock[i * 3 + 0];\n\t\tvar totalCount = rsBlock[i * 3 + 1];\n\t\tvar dataCount = rsBlock[i * 3 + 2];\n\n\t\tfor (var j = 0; j < count; j++) {\n\t\t\tlist.push(new QRRSBlock(totalCount, dataCount) );\t\n\t\t}\n\t}\n\t\n\treturn list;\n}\n\nQRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) {\n\n\tswitch(errorCorrectLevel) {\n\tcase ECL.L :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n\tcase ECL.M :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n\tcase ECL.Q :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n\tcase ECL.H :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n\tdefault :\n\t\treturn undefined;\n\t}\n}\n\nmodule.exports = QRRSBlock;\n","var QRMath = {\n\n\tglog : function(n) {\n\t\n\t\tif (n < 1) {\n\t\t\tthrow new Error(\"glog(\" + n + \")\");\n\t\t}\n\t\t\n\t\treturn QRMath.LOG_TABLE[n];\n\t},\n\t\n\tgexp : function(n) {\n\t\n\t\twhile (n < 0) {\n\t\t\tn += 255;\n\t\t}\n\t\n\t\twhile (n >= 256) {\n\t\t\tn -= 255;\n\t\t}\n\t\n\t\treturn QRMath.EXP_TABLE[n];\n\t},\n\t\n\tEXP_TABLE : new Array(256),\n\t\n\tLOG_TABLE : new Array(256)\n\n};\n\t\nfor (var i = 0; i < 8; i++) {\n\tQRMath.EXP_TABLE[i] = 1 << i;\n}\nfor (var i = 8; i < 256; i++) {\n\tQRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4]\n\t\t^ QRMath.EXP_TABLE[i - 5]\n\t\t^ QRMath.EXP_TABLE[i - 6]\n\t\t^ QRMath.EXP_TABLE[i - 8];\n}\nfor (var i = 0; i < 255; i++) {\n\tQRMath.LOG_TABLE[QRMath.EXP_TABLE[i] ] = i;\n}\n\nmodule.exports = QRMath;\n","module.exports = {\n\tMODE_NUMBER :\t\t1 << 0,\n\tMODE_ALPHA_NUM : \t1 << 1,\n\tMODE_8BIT_BYTE : \t1 << 2,\n\tMODE_KANJI :\t\t1 << 3\n};\n","var Mode = require('./mode');\nvar Polynomial = require('./Polynomial');\nvar math = require('./math');\n\nvar QRMaskPattern = {\n\tPATTERN000 : 0,\n\tPATTERN001 : 1,\n\tPATTERN010 : 2,\n\tPATTERN011 : 3,\n\tPATTERN100 : 4,\n\tPATTERN101 : 5,\n\tPATTERN110 : 6,\n\tPATTERN111 : 7\n};\n\nvar QRUtil = {\n\n PATTERN_POSITION_TABLE : [\n\t [],\n\t [6, 18],\n\t [6, 22],\n\t [6, 26],\n\t [6, 30],\n\t [6, 34],\n\t [6, 22, 38],\n\t [6, 24, 42],\n\t [6, 26, 46],\n\t [6, 28, 50],\n\t [6, 30, 54],\t\t\n\t [6, 32, 58],\n\t [6, 34, 62],\n\t [6, 26, 46, 66],\n\t [6, 26, 48, 70],\n\t [6, 26, 50, 74],\n\t [6, 30, 54, 78],\n\t [6, 30, 56, 82],\n\t [6, 30, 58, 86],\n\t [6, 34, 62, 90],\n\t [6, 28, 50, 72, 94],\n\t [6, 26, 50, 74, 98],\n\t [6, 30, 54, 78, 102],\n\t [6, 28, 54, 80, 106],\n\t [6, 32, 58, 84, 110],\n\t [6, 30, 58, 86, 114],\n\t [6, 34, 62, 90, 118],\n\t [6, 26, 50, 74, 98, 122],\n\t [6, 30, 54, 78, 102, 126],\n\t [6, 26, 52, 78, 104, 130],\n\t [6, 30, 56, 82, 108, 134],\n\t [6, 34, 60, 86, 112, 138],\n\t [6, 30, 58, 86, 114, 142],\n\t [6, 34, 62, 90, 118, 146],\n\t [6, 30, 54, 78, 102, 126, 150],\n\t [6, 24, 50, 76, 102, 128, 154],\n\t [6, 28, 54, 80, 106, 132, 158],\n\t [6, 32, 58, 84, 110, 136, 162],\n\t [6, 26, 54, 82, 110, 138, 166],\n\t [6, 30, 58, 86, 114, 142, 170]\n ],\n\n G15 : (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),\n G18 : (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0),\n G15_MASK : (1 << 14) | (1 << 12) | (1 << 10)\t| (1 << 4) | (1 << 1),\n\n getBCHTypeInfo : function(data) {\n\t var d = data << 10;\n\t while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {\n\t\t d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) ) ); \t\n\t }\n\t return ( (data << 10) | d) ^ QRUtil.G15_MASK;\n },\n\n getBCHTypeNumber : function(data) {\n\t var d = data << 12;\n\t while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {\n\t\t d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) ) ); \t\n\t }\n\t return (data << 12) | d;\n },\n\n getBCHDigit : function(data) {\n\n\t var digit = 0;\n\n\t while (data != 0) {\n\t\t digit++;\n\t\t data >>>= 1;\n\t }\n\n\t return digit;\n },\n\n getPatternPosition : function(typeNumber) {\n\t return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];\n },\n\n getMask : function(maskPattern, i, j) {\n\t \n\t switch (maskPattern) {\n\t\t \n\t case QRMaskPattern.PATTERN000 : return (i + j) % 2 == 0;\n\t case QRMaskPattern.PATTERN001 : return i % 2 == 0;\n\t case QRMaskPattern.PATTERN010 : return j % 3 == 0;\n\t case QRMaskPattern.PATTERN011 : return (i + j) % 3 == 0;\n\t case QRMaskPattern.PATTERN100 : return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0;\n\t case QRMaskPattern.PATTERN101 : return (i * j) % 2 + (i * j) % 3 == 0;\n\t case QRMaskPattern.PATTERN110 : return ( (i * j) % 2 + (i * j) % 3) % 2 == 0;\n\t case QRMaskPattern.PATTERN111 : return ( (i * j) % 3 + (i + j) % 2) % 2 == 0;\n\n\t default :\n\t\t throw new Error(\"bad maskPattern:\" + maskPattern);\n\t }\n },\n\n getErrorCorrectPolynomial : function(errorCorrectLength) {\n\n\t var a = new Polynomial([1], 0);\n\n\t for (var i = 0; i < errorCorrectLength; i++) {\n\t\t a = a.multiply(new Polynomial([1, math.gexp(i)], 0) );\n\t }\n\n\t return a;\n },\n\n getLengthInBits : function(mode, type) {\n\n\t if (1 <= type && type < 10) {\n\n\t\t // 1 - 9\n\n\t\t switch(mode) {\n\t\t case Mode.MODE_NUMBER \t: return 10;\n\t\t case Mode.MODE_ALPHA_NUM \t: return 9;\n\t\t case Mode.MODE_8BIT_BYTE\t: return 8;\n\t\t case Mode.MODE_KANJI \t: return 8;\n\t\t default :\n\t\t\t throw new Error(\"mode:\" + mode);\n\t\t }\n\n\t } else if (type < 27) {\n\n\t\t // 10 - 26\n\n\t\t switch(mode) {\n\t\t case Mode.MODE_NUMBER \t: return 12;\n\t\t case Mode.MODE_ALPHA_NUM \t: return 11;\n\t\t case Mode.MODE_8BIT_BYTE\t: return 16;\n\t\t case Mode.MODE_KANJI \t: return 10;\n\t\t default :\n\t\t\t throw new Error(\"mode:\" + mode);\n\t\t }\n\n\t } else if (type < 41) {\n\n\t\t // 27 - 40\n\n\t\t switch(mode) {\n\t\t case Mode.MODE_NUMBER \t: return 14;\n\t\t case Mode.MODE_ALPHA_NUM\t: return 13;\n\t\t case Mode.MODE_8BIT_BYTE\t: return 16;\n\t\t case Mode.MODE_KANJI \t: return 12;\n\t\t default :\n\t\t\t throw new Error(\"mode:\" + mode);\n\t\t }\n\n\t } else {\n\t\t throw new Error(\"type:\" + type);\n\t }\n },\n\n getLostPoint : function(qrCode) {\n\t \n\t var moduleCount = qrCode.getModuleCount();\n\t \n\t var lostPoint = 0;\n\t \n\t // LEVEL1\n\t \n\t for (var row = 0; row < moduleCount; row++) {\n\n\t\t for (var col = 0; col < moduleCount; col++) {\n\n\t\t\t var sameCount = 0;\n\t\t\t var dark = qrCode.isDark(row, col);\n\n\t\t\t\tfor (var r = -1; r <= 1; r++) {\n\n\t\t\t\t if (row + r < 0 || moduleCount <= row + r) {\n\t\t\t\t\t continue;\n\t\t\t\t }\n\n\t\t\t\t for (var c = -1; c <= 1; c++) {\n\n\t\t\t\t\t if (col + c < 0 || moduleCount <= col + c) {\n\t\t\t\t\t\t continue;\n\t\t\t\t\t }\n\n\t\t\t\t\t if (r == 0 && c == 0) {\n\t\t\t\t\t\t continue;\n\t\t\t\t\t }\n\n\t\t\t\t\t if (dark == qrCode.isDark(row + r, col + c) ) {\n\t\t\t\t\t\t sameCount++;\n\t\t\t\t\t }\n\t\t\t\t }\n\t\t\t }\n\n\t\t\t if (sameCount > 5) {\n\t\t\t\t lostPoint += (3 + sameCount - 5);\n\t\t\t }\n\t\t }\n\t }\n\n\t // LEVEL2\n\n\t for (var row = 0; row < moduleCount - 1; row++) {\n\t\t for (var col = 0; col < moduleCount - 1; col++) {\n\t\t\t var count = 0;\n\t\t\t if (qrCode.isDark(row, col ) ) count++;\n\t\t\t if (qrCode.isDark(row + 1, col ) ) count++;\n\t\t\t if (qrCode.isDark(row, col + 1) ) count++;\n\t\t\t if (qrCode.isDark(row + 1, col + 1) ) count++;\n\t\t\t if (count == 0 || count == 4) {\n\t\t\t\t lostPoint += 3;\n\t\t\t }\n\t\t }\n\t }\n\n\t // LEVEL3\n\n\t for (var row = 0; row < moduleCount; row++) {\n\t\t for (var col = 0; col < moduleCount - 6; col++) {\n\t\t\t if (qrCode.isDark(row, col)\n\t\t\t\t\t && !qrCode.isDark(row, col + 1)\n\t\t\t\t\t && qrCode.isDark(row, col + 2)\n\t\t\t\t\t && qrCode.isDark(row, col + 3)\n\t\t\t\t\t && qrCode.isDark(row, col + 4)\n\t\t\t\t\t && !qrCode.isDark(row, col + 5)\n\t\t\t\t\t && qrCode.isDark(row, col + 6) ) {\n\t\t\t\t lostPoint += 40;\n\t\t\t }\n\t\t }\n\t }\n\n\t for (var col = 0; col < moduleCount; col++) {\n\t\t for (var row = 0; row < moduleCount - 6; row++) {\n\t\t\t if (qrCode.isDark(row, col)\n\t\t\t\t\t && !qrCode.isDark(row + 1, col)\n\t\t\t\t\t && qrCode.isDark(row + 2, col)\n\t\t\t\t\t && qrCode.isDark(row + 3, col)\n\t\t\t\t\t && qrCode.isDark(row + 4, col)\n\t\t\t\t\t && !qrCode.isDark(row + 5, col)\n\t\t\t\t\t && qrCode.isDark(row + 6, col) ) {\n\t\t\t\t lostPoint += 40;\n\t\t\t }\n\t\t }\n\t }\n\n\t // LEVEL4\n\t \n\t var darkCount = 0;\n\n\t for (var col = 0; col < moduleCount; col++) {\n\t\t for (var row = 0; row < moduleCount; row++) {\n\t\t\t if (qrCode.isDark(row, col) ) {\n\t\t\t\t darkCount++;\n\t\t\t }\n\t\t }\n\t }\n\t \n\t var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n\t lostPoint += ratio * 10;\n\n\t return lostPoint;\t\t\n }\n};\n\nmodule.exports = QRUtil;\n","'use strict';\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _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; }; return _extends.apply(this, arguments); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _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\nvar React = require('react');\n\nvar PropTypes = require('prop-types'); // qr.js doesn't handle error level of zero (M) so we need to do it right,\n// thus the deep require.\n\n\nvar QRCodeImpl = require('qr.js/lib/QRCode');\n\nvar ErrorCorrectLevel = require('qr.js/lib/ErrorCorrectLevel'); // TODO: pull this off of the QRCode class type so it matches.\n\n\n// Convert from UTF-16, forcing the use of byte-mode encoding in our QR Code.\n// This allows us to encode Hanji, Kanji, emoji, etc. Ideally we'd do more\n// detection and not resort to byte-mode if possible, but we're trading off\n// a smaller library for a smaller amount of data we can potentially encode.\n// Based on http://jonisalonen.com/2012/from-utf-16-to-utf-8-in-javascript/\nfunction convertStr(str) {\n var out = '';\n\n for (var i = 0; i < str.length; i++) {\n var charcode = str.charCodeAt(i);\n\n if (charcode < 0x0080) {\n out += String.fromCharCode(charcode);\n } else if (charcode < 0x0800) {\n out += String.fromCharCode(0xc0 | charcode >> 6);\n out += String.fromCharCode(0x80 | charcode & 0x3f);\n } else if (charcode < 0xd800 || charcode >= 0xe000) {\n out += String.fromCharCode(0xe0 | charcode >> 12);\n out += String.fromCharCode(0x80 | charcode >> 6 & 0x3f);\n out += String.fromCharCode(0x80 | charcode & 0x3f);\n } else {\n // This is a surrogate pair, so we'll reconsitute the pieces and work\n // from that\n i++;\n charcode = 0x10000 + ((charcode & 0x3ff) << 10 | str.charCodeAt(i) & 0x3ff);\n out += String.fromCharCode(0xf0 | charcode >> 18);\n out += String.fromCharCode(0x80 | charcode >> 12 & 0x3f);\n out += String.fromCharCode(0x80 | charcode >> 6 & 0x3f);\n out += String.fromCharCode(0x80 | charcode & 0x3f);\n }\n }\n\n return out;\n}\n\nvar DEFAULT_PROPS = {\n size: 128,\n level: 'L',\n bgColor: '#FFFFFF',\n fgColor: '#000000',\n includeMargin: false\n};\nvar PROP_TYPES = process.env.NODE_ENV !== 'production' ? {\n value: PropTypes.string.isRequired,\n size: PropTypes.number,\n level: PropTypes.oneOf(['L', 'M', 'Q', 'H']),\n bgColor: PropTypes.string,\n fgColor: PropTypes.string,\n includeMargin: PropTypes.bool,\n imageSettings: PropTypes.shape({\n src: PropTypes.string.isRequired,\n height: PropTypes.number.isRequired,\n width: PropTypes.number.isRequired,\n excavate: PropTypes.bool,\n x: PropTypes.number,\n y: PropTypes.number\n })\n} : {};\nvar MARGIN_SIZE = 4; // This is *very* rough estimate of max amount of QRCode allowed to be covered.\n// It is \"wrong\" in a lot of ways (area is a terrible way to estimate, it\n// really should be number of modules covered), but if for some reason we don't\n// get an explicit height or width, I'd rather default to something than throw.\n\nvar DEFAULT_IMG_SCALE = 0.1;\n\nfunction generatePath(modules) {\n var margin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var ops = [];\n modules.forEach(function (row, y) {\n var start = null;\n row.forEach(function (cell, x) {\n if (!cell && start !== null) {\n // M0 0h7v1H0z injects the space with the move and drops the comma,\n // saving a char per operation\n ops.push(\"M\".concat(start + margin, \" \").concat(y + margin, \"h\").concat(x - start, \"v1H\").concat(start + margin, \"z\"));\n start = null;\n return;\n } // end of row, clean up or skip\n\n\n if (x === row.length - 1) {\n if (!cell) {\n // We would have closed the op above already so this can only mean\n // 2+ light modules in a row.\n return;\n }\n\n if (start === null) {\n // Just a single dark module.\n ops.push(\"M\".concat(x + margin, \",\").concat(y + margin, \" h1v1H\").concat(x + margin, \"z\"));\n } else {\n // Otherwise finish the current line.\n ops.push(\"M\".concat(start + margin, \",\").concat(y + margin, \" h\").concat(x + 1 - start, \"v1H\").concat(start + margin, \"z\"));\n }\n\n return;\n }\n\n if (cell && start === null) {\n start = x;\n }\n });\n });\n return ops.join('');\n} // We could just do this in generatePath, except that we want to support\n// non-Path2D canvas, so we need to keep it an explicit step.\n\n\nfunction excavateModules(modules, excavation) {\n return modules.slice().map(function (row, y) {\n if (y < excavation.y || y >= excavation.y + excavation.h) {\n return row;\n }\n\n return row.map(function (cell, x) {\n if (x < excavation.x || x >= excavation.x + excavation.w) {\n return cell;\n }\n\n return false;\n });\n });\n}\n\nfunction getImageSettings(props, cells) {\n var imageSettings = props.imageSettings,\n size = props.size,\n includeMargin = props.includeMargin;\n\n if (imageSettings == null) {\n return null;\n }\n\n var margin = includeMargin ? MARGIN_SIZE : 0;\n var numCells = cells.length + margin * 2;\n var defaultSize = Math.floor(size * DEFAULT_IMG_SCALE);\n var scale = numCells / size;\n var w = (imageSettings.width || defaultSize) * scale;\n var h = (imageSettings.height || defaultSize) * scale;\n var x = imageSettings.x == null ? cells.length / 2 - w / 2 : imageSettings.x * scale;\n var y = imageSettings.y == null ? cells.length / 2 - h / 2 : imageSettings.y * scale;\n var excavation = null;\n\n if (imageSettings.excavate) {\n var floorX = Math.floor(x);\n var floorY = Math.floor(y);\n var ceilW = Math.ceil(w + x - floorX);\n var ceilH = Math.ceil(h + y - floorY);\n excavation = {\n x: floorX,\n y: floorY,\n w: ceilW,\n h: ceilH\n };\n }\n\n return {\n x: x,\n y: y,\n h: h,\n w: w,\n excavation: excavation\n };\n} // For canvas we're going to switch our drawing mode based on whether or not\n// the environment supports Path2D. We only need the constructor to be\n// supported, but Edge doesn't actually support the path (string) type\n// argument. Luckily it also doesn't support the addPath() method. We can\n// treat that as the same thing.\n\n\nvar SUPPORTS_PATH2D = function () {\n try {\n new Path2D().addPath(new Path2D());\n } catch (e) {\n return false;\n }\n\n return true;\n}();\n\nvar QRCodeCanvas =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n _inherits(QRCodeCanvas, _React$PureComponent);\n\n function QRCodeCanvas() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, QRCodeCanvas);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(QRCodeCanvas)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"_canvas\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_image\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n imgLoaded: false\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleImageLoad\", function () {\n _this.setState({\n imgLoaded: true\n });\n });\n\n return _this;\n }\n\n _createClass(QRCodeCanvas, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (this._image && this._image.complete) {\n this.handleImageLoad();\n }\n\n this.update();\n }\n }, {\n key: \"componentWillReceiveProps\",\n value: function componentWillReceiveProps(nextProps) {\n var _this$props$imageSett, _nextProps$imageSetti;\n\n var currentSrc = (_this$props$imageSett = this.props.imageSettings) === null || _this$props$imageSett === void 0 ? void 0 : _this$props$imageSett.src;\n var nextSrc = (_nextProps$imageSetti = nextProps.imageSettings) === null || _nextProps$imageSetti === void 0 ? void 0 : _nextProps$imageSetti.src;\n\n if (currentSrc !== nextSrc) {\n this.setState({\n imgLoaded: false\n });\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this.update();\n }\n }, {\n key: \"update\",\n value: function update() {\n var _this$props = this.props,\n value = _this$props.value,\n size = _this$props.size,\n level = _this$props.level,\n bgColor = _this$props.bgColor,\n fgColor = _this$props.fgColor,\n includeMargin = _this$props.includeMargin,\n imageSettings = _this$props.imageSettings; // We'll use type===-1 to force QRCode to automatically pick the best type\n\n var qrcode = new QRCodeImpl(-1, ErrorCorrectLevel[level]);\n qrcode.addData(convertStr(value));\n qrcode.make();\n\n if (this._canvas != null) {\n var canvas = this._canvas;\n var ctx = canvas.getContext('2d');\n\n if (!ctx) {\n return;\n }\n\n var cells = qrcode.modules;\n\n if (cells === null) {\n return;\n }\n\n var margin = includeMargin ? MARGIN_SIZE : 0;\n var numCells = cells.length + margin * 2;\n var calculatedImageSettings = getImageSettings(this.props, cells);\n\n if (imageSettings != null && calculatedImageSettings != null) {\n if (calculatedImageSettings.excavation != null) {\n cells = excavateModules(cells, calculatedImageSettings.excavation);\n }\n } // We're going to scale this so that the number of drawable units\n // matches the number of cells. This avoids rounding issues, but does\n // result in some potentially unwanted single pixel issues between\n // blocks, only in environments that don't support Path2D.\n\n\n var pixelRatio = window.devicePixelRatio || 1;\n canvas.height = canvas.width = size * pixelRatio;\n var scale = size / numCells * pixelRatio;\n ctx.scale(scale, scale); // Draw solid background, only paint dark modules.\n\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, numCells, numCells);\n ctx.fillStyle = fgColor;\n\n if (SUPPORTS_PATH2D) {\n // $FlowFixMe: Path2D c'tor doesn't support args yet.\n ctx.fill(new Path2D(generatePath(cells, margin)));\n } else {\n cells.forEach(function (row, rdx) {\n row.forEach(function (cell, cdx) {\n if (cell) {\n ctx.fillRect(cdx + margin, rdx + margin, 1, 1);\n }\n });\n });\n }\n\n if (this.state.imgLoaded && this._image && calculatedImageSettings != null) {\n ctx.drawImage(this._image, calculatedImageSettings.x + margin, calculatedImageSettings.y + margin, calculatedImageSettings.w, calculatedImageSettings.h);\n }\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props2 = this.props,\n value = _this$props2.value,\n size = _this$props2.size,\n level = _this$props2.level,\n bgColor = _this$props2.bgColor,\n fgColor = _this$props2.fgColor,\n style = _this$props2.style,\n includeMargin = _this$props2.includeMargin,\n imageSettings = _this$props2.imageSettings,\n otherProps = _objectWithoutProperties(_this$props2, [\"value\", \"size\", \"level\", \"bgColor\", \"fgColor\", \"style\", \"includeMargin\", \"imageSettings\"]);\n\n var canvasStyle = _objectSpread({\n height: size,\n width: size\n }, style);\n\n var img = null;\n var imgSrc = imageSettings && imageSettings.src;\n\n if (imageSettings != null && imgSrc != null) {\n img = React.createElement(\"img\", {\n src: imgSrc,\n style: {\n display: 'none'\n },\n onLoad: this.handleImageLoad,\n ref: function ref(_ref) {\n return _this2._image = _ref;\n }\n });\n }\n\n return React.createElement(React.Fragment, null, React.createElement(\"canvas\", _extends({\n style: canvasStyle,\n height: size,\n width: size,\n ref: function ref(_ref2) {\n return _this2._canvas = _ref2;\n }\n }, otherProps)), img);\n }\n }]);\n\n return QRCodeCanvas;\n}(React.PureComponent);\n\n_defineProperty(QRCodeCanvas, \"defaultProps\", DEFAULT_PROPS);\n\nif (process.env.NODE_ENV !== 'production') {\n QRCodeCanvas.propTypes = PROP_TYPES;\n}\n\nvar QRCodeSVG =\n/*#__PURE__*/\nfunction (_React$PureComponent2) {\n _inherits(QRCodeSVG, _React$PureComponent2);\n\n function QRCodeSVG() {\n _classCallCheck(this, QRCodeSVG);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(QRCodeSVG).apply(this, arguments));\n }\n\n _createClass(QRCodeSVG, [{\n key: \"render\",\n value: function render() {\n var _this$props3 = this.props,\n value = _this$props3.value,\n size = _this$props3.size,\n level = _this$props3.level,\n bgColor = _this$props3.bgColor,\n fgColor = _this$props3.fgColor,\n includeMargin = _this$props3.includeMargin,\n imageSettings = _this$props3.imageSettings,\n otherProps = _objectWithoutProperties(_this$props3, [\"value\", \"size\", \"level\", \"bgColor\", \"fgColor\", \"includeMargin\", \"imageSettings\"]); // We'll use type===-1 to force QRCode to automatically pick the best type\n\n\n var qrcode = new QRCodeImpl(-1, ErrorCorrectLevel[level]);\n qrcode.addData(convertStr(value));\n qrcode.make();\n var cells = qrcode.modules;\n\n if (cells === null) {\n return null;\n }\n\n var margin = includeMargin ? MARGIN_SIZE : 0;\n var numCells = cells.length + margin * 2;\n var calculatedImageSettings = getImageSettings(this.props, cells);\n var image = null;\n\n if (imageSettings != null && calculatedImageSettings != null) {\n if (calculatedImageSettings.excavation != null) {\n cells = excavateModules(cells, calculatedImageSettings.excavation);\n }\n\n image = React.createElement(\"image\", {\n xlinkHref: imageSettings.src,\n height: calculatedImageSettings.h,\n width: calculatedImageSettings.w,\n x: calculatedImageSettings.x + margin,\n y: calculatedImageSettings.y + margin,\n preserveAspectRatio: \"none\"\n });\n } // Drawing strategy: instead of a rect per module, we're going to create a\n // single path for the dark modules and layer that on top of a light rect,\n // for a total of 2 DOM nodes. We pay a bit more in string concat but that's\n // way faster than DOM ops.\n // For level 1, 441 nodes -> 2\n // For level 40, 31329 -> 2\n\n\n var fgPath = generatePath(cells, margin);\n return React.createElement(\"svg\", _extends({\n shapeRendering: \"crispEdges\",\n height: size,\n width: size,\n viewBox: \"0 0 \".concat(numCells, \" \").concat(numCells)\n }, otherProps), React.createElement(\"path\", {\n fill: bgColor,\n d: \"M0,0 h\".concat(numCells, \"v\").concat(numCells, \"H0z\")\n }), React.createElement(\"path\", {\n fill: fgColor,\n d: fgPath\n }), image);\n }\n }]);\n\n return QRCodeSVG;\n}(React.PureComponent);\n\n_defineProperty(QRCodeSVG, \"defaultProps\", DEFAULT_PROPS);\n\nif (process.env.NODE_ENV !== 'production') {\n QRCodeSVG.propTypes = PROP_TYPES;\n}\n\nvar QRCode = function QRCode(props) {\n var renderAs = props.renderAs,\n otherProps = _objectWithoutProperties(props, [\"renderAs\"]);\n\n var Component = renderAs === 'svg' ? QRCodeSVG : QRCodeCanvas;\n return React.createElement(Component, otherProps);\n};\n\nQRCode.defaultProps = _objectSpread({\n renderAs: 'canvas'\n}, DEFAULT_PROPS);\nmodule.exports = QRCode;","/**\n * @license\n * Lodash \n * Copyright OpenJS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.21';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function',\n INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/;\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\n var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '

' + func(text) + '

';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '

fred, barney, & pebbles

'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<%- value %>');\n * compiled({ 'value': '