{"version":3,"file":"js/113-77e556afc3fbf0ee65b5.js","mappings":"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","sources":["webpack:///./node_modules/intersection-observer/intersection-observer.js","webpack:///./node_modules/lazysizes/lazysizes.js","webpack:///./node_modules/lodash.debounce/index.js"],"sourcesContent":["/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n */\n(function() {\n'use strict';\n\n// Exit early if we're not running in a browser.\nif (typeof window !== 'object') {\n return;\n}\n\n// Exit early if all IntersectionObserver and IntersectionObserverEntry\n// features are natively supported.\nif ('IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype) {\n\n // Minimal polyfill for Edge 15's lack of `isIntersecting`\n // See: https://github.com/w3c/IntersectionObserver/issues/211\n if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\n Object.defineProperty(window.IntersectionObserverEntry.prototype,\n 'isIntersecting', {\n get: function () {\n return this.intersectionRatio > 0;\n }\n });\n }\n return;\n}\n\n/**\n * Returns the embedding frame element, if any.\n * @param {!Document} doc\n * @return {!Element}\n */\nfunction getFrameElement(doc) {\n try {\n return doc.defaultView && doc.defaultView.frameElement || null;\n } catch (e) {\n // Ignore the error.\n return null;\n }\n}\n\n/**\n * A local reference to the root document.\n */\nvar document = (function(startDoc) {\n var doc = startDoc;\n var frame = getFrameElement(doc);\n while (frame) {\n doc = frame.ownerDocument;\n frame = getFrameElement(doc);\n }\n return doc;\n})(window.document);\n\n/**\n * An IntersectionObserver registry. This registry exists to hold a strong\n * reference to IntersectionObserver instances currently observing a target\n * element. Without this registry, instances without another reference may be\n * garbage collected.\n */\nvar registry = [];\n\n/**\n * The signal updater for cross-origin intersection. When not null, it means\n * that the polyfill is configured to work in a cross-origin mode.\n * @type {function(DOMRect|ClientRect, DOMRect|ClientRect)}\n */\nvar crossOriginUpdater = null;\n\n/**\n * The current cross-origin intersection. Only used in the cross-origin mode.\n * @type {DOMRect|ClientRect}\n */\nvar crossOriginRect = null;\n\n\n/**\n * Creates the global IntersectionObserverEntry constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @param {Object} entry A dictionary of instance properties.\n * @constructor\n */\nfunction IntersectionObserverEntry(entry) {\n this.time = entry.time;\n this.target = entry.target;\n this.rootBounds = ensureDOMRect(entry.rootBounds);\n this.boundingClientRect = ensureDOMRect(entry.boundingClientRect);\n this.intersectionRect = ensureDOMRect(entry.intersectionRect || getEmptyRect());\n this.isIntersecting = !!entry.intersectionRect;\n\n // Calculates the intersection ratio.\n var targetRect = this.boundingClientRect;\n var targetArea = targetRect.width * targetRect.height;\n var intersectionRect = this.intersectionRect;\n var intersectionArea = intersectionRect.width * intersectionRect.height;\n\n // Sets intersection ratio.\n if (targetArea) {\n // Round the intersection ratio to avoid floating point math issues:\n // https://github.com/w3c/IntersectionObserver/issues/324\n this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4));\n } else {\n // If area is zero and is intersecting, sets to 1, otherwise to 0\n this.intersectionRatio = this.isIntersecting ? 1 : 0;\n }\n}\n\n\n/**\n * Creates the global IntersectionObserver constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {Function} callback The function to be invoked after intersection\n * changes have queued. The function is not invoked if the queue has\n * been emptied by calling the `takeRecords` method.\n * @param {Object=} opt_options Optional configuration options.\n * @constructor\n */\nfunction IntersectionObserver(callback, opt_options) {\n\n var options = opt_options || {};\n\n if (typeof callback != 'function') {\n throw new Error('callback must be a function');\n }\n\n if (\n options.root &&\n options.root.nodeType != 1 &&\n options.root.nodeType != 9\n ) {\n throw new Error('root must be a Document or Element');\n }\n\n // Binds and throttles `this._checkForIntersections`.\n this._checkForIntersections = throttle(\n this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT);\n\n // Private properties.\n this._callback = callback;\n this._observationTargets = [];\n this._queuedEntries = [];\n this._rootMarginValues = this._parseRootMargin(options.rootMargin);\n\n // Public properties.\n this.thresholds = this._initThresholds(options.threshold);\n this.root = options.root || null;\n this.rootMargin = this._rootMarginValues.map(function(margin) {\n return margin.value + margin.unit;\n }).join(' ');\n\n /** @private @const {!Array} */\n this._monitoringDocuments = [];\n /** @private @const {!Array} */\n this._monitoringUnsubscribes = [];\n}\n\n\n/**\n * The minimum interval within which the document will be checked for\n * intersection changes.\n */\nIntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;\n\n\n/**\n * The frequency in which the polyfill polls for intersection changes.\n * this can be updated on a per instance basis and must be set prior to\n * calling `observe` on the first target.\n */\nIntersectionObserver.prototype.POLL_INTERVAL = null;\n\n/**\n * Use a mutation observer on the root element\n * to detect intersection changes.\n */\nIntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;\n\n\n/**\n * Sets up the polyfill in the cross-origin mode. The result is the\n * updater function that accepts two arguments: `boundingClientRect` and\n * `intersectionRect` - just as these fields would be available to the\n * parent via `IntersectionObserverEntry`. This function should be called\n * each time the iframe receives intersection information from the parent\n * window, e.g. via messaging.\n * @return {function(DOMRect|ClientRect, DOMRect|ClientRect)}\n */\nIntersectionObserver._setupCrossOriginUpdater = function() {\n if (!crossOriginUpdater) {\n /**\n * @param {DOMRect|ClientRect} boundingClientRect\n * @param {DOMRect|ClientRect} intersectionRect\n */\n crossOriginUpdater = function(boundingClientRect, intersectionRect) {\n if (!boundingClientRect || !intersectionRect) {\n crossOriginRect = getEmptyRect();\n } else {\n crossOriginRect = convertFromParentRect(boundingClientRect, intersectionRect);\n }\n registry.forEach(function(observer) {\n observer._checkForIntersections();\n });\n };\n }\n return crossOriginUpdater;\n};\n\n\n/**\n * Resets the cross-origin mode.\n */\nIntersectionObserver._resetCrossOriginUpdater = function() {\n crossOriginUpdater = null;\n crossOriginRect = null;\n};\n\n\n/**\n * Starts observing a target element for intersection changes based on\n * the thresholds values.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.observe = function(target) {\n var isTargetAlreadyObserved = this._observationTargets.some(function(item) {\n return item.element == target;\n });\n\n if (isTargetAlreadyObserved) {\n return;\n }\n\n if (!(target && target.nodeType == 1)) {\n throw new Error('target must be an Element');\n }\n\n this._registerInstance();\n this._observationTargets.push({element: target, entry: null});\n this._monitorIntersections(target.ownerDocument);\n this._checkForIntersections();\n};\n\n\n/**\n * Stops observing a target element for intersection changes.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.unobserve = function(target) {\n this._observationTargets =\n this._observationTargets.filter(function(item) {\n return item.element != target;\n });\n this._unmonitorIntersections(target.ownerDocument);\n if (this._observationTargets.length == 0) {\n this._unregisterInstance();\n }\n};\n\n\n/**\n * Stops observing all target elements for intersection changes.\n */\nIntersectionObserver.prototype.disconnect = function() {\n this._observationTargets = [];\n this._unmonitorAllIntersections();\n this._unregisterInstance();\n};\n\n\n/**\n * Returns any queue entries that have not yet been reported to the\n * callback and clears the queue. This can be used in conjunction with the\n * callback to obtain the absolute most up-to-date intersection information.\n * @return {Array} The currently queued entries.\n */\nIntersectionObserver.prototype.takeRecords = function() {\n var records = this._queuedEntries.slice();\n this._queuedEntries = [];\n return records;\n};\n\n\n/**\n * Accepts the threshold value from the user configuration object and\n * returns a sorted array of unique threshold values. If a value is not\n * between 0 and 1 and error is thrown.\n * @private\n * @param {Array|number=} opt_threshold An optional threshold value or\n * a list of threshold values, defaulting to [0].\n * @return {Array} A sorted list of unique and valid threshold values.\n */\nIntersectionObserver.prototype._initThresholds = function(opt_threshold) {\n var threshold = opt_threshold || [0];\n if (!Array.isArray(threshold)) threshold = [threshold];\n\n return threshold.sort().filter(function(t, i, a) {\n if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {\n throw new Error('threshold must be a number between 0 and 1 inclusively');\n }\n return t !== a[i - 1];\n });\n};\n\n\n/**\n * Accepts the rootMargin value from the user configuration object\n * and returns an array of the four margin values as an object containing\n * the value and unit properties. If any of the values are not properly\n * formatted or use a unit other than px or %, and error is thrown.\n * @private\n * @param {string=} opt_rootMargin An optional rootMargin value,\n * defaulting to '0px'.\n * @return {Array} An array of margin objects with the keys\n * value and unit.\n */\nIntersectionObserver.prototype._parseRootMargin = function(opt_rootMargin) {\n var marginString = opt_rootMargin || '0px';\n var margins = marginString.split(/\\s+/).map(function(margin) {\n var parts = /^(-?\\d*\\.?\\d+)(px|%)$/.exec(margin);\n if (!parts) {\n throw new Error('rootMargin must be specified in pixels or percent');\n }\n return {value: parseFloat(parts[1]), unit: parts[2]};\n });\n\n // Handles shorthand.\n margins[1] = margins[1] || margins[0];\n margins[2] = margins[2] || margins[0];\n margins[3] = margins[3] || margins[1];\n\n return margins;\n};\n\n\n/**\n * Starts polling for intersection changes if the polling is not already\n * happening, and if the page's visibility state is visible.\n * @param {!Document} doc\n * @private\n */\nIntersectionObserver.prototype._monitorIntersections = function(doc) {\n var win = doc.defaultView;\n if (!win) {\n // Already destroyed.\n return;\n }\n if (this._monitoringDocuments.indexOf(doc) != -1) {\n // Already monitoring.\n return;\n }\n\n // Private state for monitoring.\n var callback = this._checkForIntersections;\n var monitoringInterval = null;\n var domObserver = null;\n\n // If a poll interval is set, use polling instead of listening to\n // resize and scroll events or DOM mutations.\n if (this.POLL_INTERVAL) {\n monitoringInterval = win.setInterval(callback, this.POLL_INTERVAL);\n } else {\n addEvent(win, 'resize', callback, true);\n addEvent(doc, 'scroll', callback, true);\n if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in win) {\n domObserver = new win.MutationObserver(callback);\n domObserver.observe(doc, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n }\n }\n\n this._monitoringDocuments.push(doc);\n this._monitoringUnsubscribes.push(function() {\n // Get the window object again. When a friendly iframe is destroyed, it\n // will be null.\n var win = doc.defaultView;\n\n if (win) {\n if (monitoringInterval) {\n win.clearInterval(monitoringInterval);\n }\n removeEvent(win, 'resize', callback, true);\n }\n\n removeEvent(doc, 'scroll', callback, true);\n if (domObserver) {\n domObserver.disconnect();\n }\n });\n\n // Also monitor the parent.\n var rootDoc =\n (this.root && (this.root.ownerDocument || this.root)) || document;\n if (doc != rootDoc) {\n var frame = getFrameElement(doc);\n if (frame) {\n this._monitorIntersections(frame.ownerDocument);\n }\n }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @param {!Document} doc\n * @private\n */\nIntersectionObserver.prototype._unmonitorIntersections = function(doc) {\n var index = this._monitoringDocuments.indexOf(doc);\n if (index == -1) {\n return;\n }\n\n var rootDoc =\n (this.root && (this.root.ownerDocument || this.root)) || document;\n\n // Check if any dependent targets are still remaining.\n var hasDependentTargets =\n this._observationTargets.some(function(item) {\n var itemDoc = item.element.ownerDocument;\n // Target is in this context.\n if (itemDoc == doc) {\n return true;\n }\n // Target is nested in this context.\n while (itemDoc && itemDoc != rootDoc) {\n var frame = getFrameElement(itemDoc);\n itemDoc = frame && frame.ownerDocument;\n if (itemDoc == doc) {\n return true;\n }\n }\n return false;\n });\n if (hasDependentTargets) {\n return;\n }\n\n // Unsubscribe.\n var unsubscribe = this._monitoringUnsubscribes[index];\n this._monitoringDocuments.splice(index, 1);\n this._monitoringUnsubscribes.splice(index, 1);\n unsubscribe();\n\n // Also unmonitor the parent.\n if (doc != rootDoc) {\n var frame = getFrameElement(doc);\n if (frame) {\n this._unmonitorIntersections(frame.ownerDocument);\n }\n }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @param {!Document} doc\n * @private\n */\nIntersectionObserver.prototype._unmonitorAllIntersections = function() {\n var unsubscribes = this._monitoringUnsubscribes.slice(0);\n this._monitoringDocuments.length = 0;\n this._monitoringUnsubscribes.length = 0;\n for (var i = 0; i < unsubscribes.length; i++) {\n unsubscribes[i]();\n }\n};\n\n\n/**\n * Scans each observation target for intersection changes and adds them\n * to the internal entries queue. If new entries are found, it\n * schedules the callback to be invoked.\n * @private\n */\nIntersectionObserver.prototype._checkForIntersections = function() {\n if (!this.root && crossOriginUpdater && !crossOriginRect) {\n // Cross origin monitoring, but no initial data available yet.\n return;\n }\n\n var rootIsInDom = this._rootIsInDom();\n var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();\n\n this._observationTargets.forEach(function(item) {\n var target = item.element;\n var targetRect = getBoundingClientRect(target);\n var rootContainsTarget = this._rootContainsTarget(target);\n var oldEntry = item.entry;\n var intersectionRect = rootIsInDom && rootContainsTarget &&\n this._computeTargetAndRootIntersection(target, targetRect, rootRect);\n\n var rootBounds = null;\n if (!this._rootContainsTarget(target)) {\n rootBounds = getEmptyRect();\n } else if (!crossOriginUpdater || this.root) {\n rootBounds = rootRect;\n }\n\n var newEntry = item.entry = new IntersectionObserverEntry({\n time: now(),\n target: target,\n boundingClientRect: targetRect,\n rootBounds: rootBounds,\n intersectionRect: intersectionRect\n });\n\n if (!oldEntry) {\n this._queuedEntries.push(newEntry);\n } else if (rootIsInDom && rootContainsTarget) {\n // If the new entry intersection ratio has crossed any of the\n // thresholds, add a new entry.\n if (this._hasCrossedThreshold(oldEntry, newEntry)) {\n this._queuedEntries.push(newEntry);\n }\n } else {\n // If the root is not in the DOM or target is not contained within\n // root but the previous entry for this target had an intersection,\n // add a new record indicating removal.\n if (oldEntry && oldEntry.isIntersecting) {\n this._queuedEntries.push(newEntry);\n }\n }\n }, this);\n\n if (this._queuedEntries.length) {\n this._callback(this.takeRecords(), this);\n }\n};\n\n\n/**\n * Accepts a target and root rect computes the intersection between then\n * following the algorithm in the spec.\n * TODO(philipwalton): at this time clip-path is not considered.\n * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo\n * @param {Element} target The target DOM element\n * @param {Object} targetRect The bounding rect of the target.\n * @param {Object} rootRect The bounding rect of the root after being\n * expanded by the rootMargin value.\n * @return {?Object} The final intersection rect object or undefined if no\n * intersection is found.\n * @private\n */\nIntersectionObserver.prototype._computeTargetAndRootIntersection =\n function(target, targetRect, rootRect) {\n // If the element isn't displayed, an intersection can't happen.\n if (window.getComputedStyle(target).display == 'none') return;\n\n var intersectionRect = targetRect;\n var parent = getParentNode(target);\n var atRoot = false;\n\n while (!atRoot && parent) {\n var parentRect = null;\n var parentComputedStyle = parent.nodeType == 1 ?\n window.getComputedStyle(parent) : {};\n\n // If the parent isn't displayed, an intersection can't happen.\n if (parentComputedStyle.display == 'none') return null;\n\n if (parent == this.root || parent.nodeType == /* DOCUMENT */ 9) {\n atRoot = true;\n if (parent == this.root || parent == document) {\n if (crossOriginUpdater && !this.root) {\n if (!crossOriginRect ||\n crossOriginRect.width == 0 && crossOriginRect.height == 0) {\n // A 0-size cross-origin intersection means no-intersection.\n parent = null;\n parentRect = null;\n intersectionRect = null;\n } else {\n parentRect = crossOriginRect;\n }\n } else {\n parentRect = rootRect;\n }\n } else {\n // Check if there's a frame that can be navigated to.\n var frame = getParentNode(parent);\n var frameRect = frame && getBoundingClientRect(frame);\n var frameIntersect =\n frame &&\n this._computeTargetAndRootIntersection(frame, frameRect, rootRect);\n if (frameRect && frameIntersect) {\n parent = frame;\n parentRect = convertFromParentRect(frameRect, frameIntersect);\n } else {\n parent = null;\n intersectionRect = null;\n }\n }\n } else {\n // If the element has a non-visible overflow, and it's not the \n // or element, update the intersection rect.\n // Note: and cannot be clipped to a rect that's not also\n // the document rect, so no need to compute a new intersection.\n var doc = parent.ownerDocument;\n if (parent != doc.body &&\n parent != doc.documentElement &&\n parentComputedStyle.overflow != 'visible') {\n parentRect = getBoundingClientRect(parent);\n }\n }\n\n // If either of the above conditionals set a new parentRect,\n // calculate new intersection data.\n if (parentRect) {\n intersectionRect = computeRectIntersection(parentRect, intersectionRect);\n }\n if (!intersectionRect) break;\n parent = parent && getParentNode(parent);\n }\n return intersectionRect;\n};\n\n\n/**\n * Returns the root rect after being expanded by the rootMargin value.\n * @return {ClientRect} The expanded root rect.\n * @private\n */\nIntersectionObserver.prototype._getRootRect = function() {\n var rootRect;\n if (this.root && !isDoc(this.root)) {\n rootRect = getBoundingClientRect(this.root);\n } else {\n // Use / instead of window since scroll bars affect size.\n var doc = isDoc(this.root) ? this.root : document;\n var html = doc.documentElement;\n var body = doc.body;\n rootRect = {\n top: 0,\n left: 0,\n right: html.clientWidth || body.clientWidth,\n width: html.clientWidth || body.clientWidth,\n bottom: html.clientHeight || body.clientHeight,\n height: html.clientHeight || body.clientHeight\n };\n }\n return this._expandRectByRootMargin(rootRect);\n};\n\n\n/**\n * Accepts a rect and expands it by the rootMargin value.\n * @param {DOMRect|ClientRect} rect The rect object to expand.\n * @return {ClientRect} The expanded rect.\n * @private\n */\nIntersectionObserver.prototype._expandRectByRootMargin = function(rect) {\n var margins = this._rootMarginValues.map(function(margin, i) {\n return margin.unit == 'px' ? margin.value :\n margin.value * (i % 2 ? rect.width : rect.height) / 100;\n });\n var newRect = {\n top: rect.top - margins[0],\n right: rect.right + margins[1],\n bottom: rect.bottom + margins[2],\n left: rect.left - margins[3]\n };\n newRect.width = newRect.right - newRect.left;\n newRect.height = newRect.bottom - newRect.top;\n\n return newRect;\n};\n\n\n/**\n * Accepts an old and new entry and returns true if at least one of the\n * threshold values has been crossed.\n * @param {?IntersectionObserverEntry} oldEntry The previous entry for a\n * particular target element or null if no previous entry exists.\n * @param {IntersectionObserverEntry} newEntry The current entry for a\n * particular target element.\n * @return {boolean} Returns true if a any threshold has been crossed.\n * @private\n */\nIntersectionObserver.prototype._hasCrossedThreshold =\n function(oldEntry, newEntry) {\n\n // To make comparing easier, an entry that has a ratio of 0\n // but does not actually intersect is given a value of -1\n var oldRatio = oldEntry && oldEntry.isIntersecting ?\n oldEntry.intersectionRatio || 0 : -1;\n var newRatio = newEntry.isIntersecting ?\n newEntry.intersectionRatio || 0 : -1;\n\n // Ignore unchanged ratios\n if (oldRatio === newRatio) return;\n\n for (var i = 0; i < this.thresholds.length; i++) {\n var threshold = this.thresholds[i];\n\n // Return true if an entry matches a threshold or if the new ratio\n // and the old ratio are on the opposite sides of a threshold.\n if (threshold == oldRatio || threshold == newRatio ||\n threshold < oldRatio !== threshold < newRatio) {\n return true;\n }\n }\n};\n\n\n/**\n * Returns whether or not the root element is an element and is in the DOM.\n * @return {boolean} True if the root element is an element and is in the DOM.\n * @private\n */\nIntersectionObserver.prototype._rootIsInDom = function() {\n return !this.root || containsDeep(document, this.root);\n};\n\n\n/**\n * Returns whether or not the target element is a child of root.\n * @param {Element} target The target element to check.\n * @return {boolean} True if the target element is a child of root.\n * @private\n */\nIntersectionObserver.prototype._rootContainsTarget = function(target) {\n var rootDoc =\n (this.root && (this.root.ownerDocument || this.root)) || document;\n return (\n containsDeep(rootDoc, target) &&\n (!this.root || rootDoc == target.ownerDocument)\n );\n};\n\n\n/**\n * Adds the instance to the global IntersectionObserver registry if it isn't\n * already present.\n * @private\n */\nIntersectionObserver.prototype._registerInstance = function() {\n if (registry.indexOf(this) < 0) {\n registry.push(this);\n }\n};\n\n\n/**\n * Removes the instance from the global IntersectionObserver registry.\n * @private\n */\nIntersectionObserver.prototype._unregisterInstance = function() {\n var index = registry.indexOf(this);\n if (index != -1) registry.splice(index, 1);\n};\n\n\n/**\n * Returns the result of the performance.now() method or null in browsers\n * that don't support the API.\n * @return {number} The elapsed time since the page was requested.\n */\nfunction now() {\n return window.performance && performance.now && performance.now();\n}\n\n\n/**\n * Throttles a function and delays its execution, so it's only called at most\n * once within a given time period.\n * @param {Function} fn The function to throttle.\n * @param {number} timeout The amount of time that must pass before the\n * function can be called again.\n * @return {Function} The throttled function.\n */\nfunction throttle(fn, timeout) {\n var timer = null;\n return function () {\n if (!timer) {\n timer = setTimeout(function() {\n fn();\n timer = null;\n }, timeout);\n }\n };\n}\n\n\n/**\n * Adds an event handler to a DOM node ensuring cross-browser compatibility.\n * @param {Node} node The DOM node to add the event handler to.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to add.\n * @param {boolean} opt_useCapture Optionally adds the even to the capture\n * phase. Note: this only works in modern browsers.\n */\nfunction addEvent(node, event, fn, opt_useCapture) {\n if (typeof node.addEventListener == 'function') {\n node.addEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.attachEvent == 'function') {\n node.attachEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Removes a previously added event handler from a DOM node.\n * @param {Node} node The DOM node to remove the event handler from.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to remove.\n * @param {boolean} opt_useCapture If the event handler was added with this\n * flag set to true, it should be set to true here in order to remove it.\n */\nfunction removeEvent(node, event, fn, opt_useCapture) {\n if (typeof node.removeEventListener == 'function') {\n node.removeEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.detachEvent == 'function') {\n node.detachEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Returns the intersection between two rect objects.\n * @param {Object} rect1 The first rect.\n * @param {Object} rect2 The second rect.\n * @return {?Object|?ClientRect} The intersection rect or undefined if no\n * intersection is found.\n */\nfunction computeRectIntersection(rect1, rect2) {\n var top = Math.max(rect1.top, rect2.top);\n var bottom = Math.min(rect1.bottom, rect2.bottom);\n var left = Math.max(rect1.left, rect2.left);\n var right = Math.min(rect1.right, rect2.right);\n var width = right - left;\n var height = bottom - top;\n\n return (width >= 0 && height >= 0) && {\n top: top,\n bottom: bottom,\n left: left,\n right: right,\n width: width,\n height: height\n } || null;\n}\n\n\n/**\n * Shims the native getBoundingClientRect for compatibility with older IE.\n * @param {Element} el The element whose bounding rect to get.\n * @return {DOMRect|ClientRect} The (possibly shimmed) rect of the element.\n */\nfunction getBoundingClientRect(el) {\n var rect;\n\n try {\n rect = el.getBoundingClientRect();\n } catch (err) {\n // Ignore Windows 7 IE11 \"Unspecified error\"\n // https://github.com/w3c/IntersectionObserver/pull/205\n }\n\n if (!rect) return getEmptyRect();\n\n // Older IE\n if (!(rect.width && rect.height)) {\n rect = {\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n }\n return rect;\n}\n\n\n/**\n * Returns an empty rect object. An empty rect is returned when an element\n * is not in the DOM.\n * @return {ClientRect} The empty rect.\n */\nfunction getEmptyRect() {\n return {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n width: 0,\n height: 0\n };\n}\n\n\n/**\n * Ensure that the result has all of the necessary fields of the DOMRect.\n * Specifically this ensures that `x` and `y` fields are set.\n *\n * @param {?DOMRect|?ClientRect} rect\n * @return {?DOMRect}\n */\nfunction ensureDOMRect(rect) {\n // A `DOMRect` object has `x` and `y` fields.\n if (!rect || 'x' in rect) {\n return rect;\n }\n // A IE's `ClientRect` type does not have `x` and `y`. The same is the case\n // for internally calculated Rect objects. For the purposes of\n // `IntersectionObserver`, it's sufficient to simply mirror `left` and `top`\n // for these fields.\n return {\n top: rect.top,\n y: rect.top,\n bottom: rect.bottom,\n left: rect.left,\n x: rect.left,\n right: rect.right,\n width: rect.width,\n height: rect.height\n };\n}\n\n\n/**\n * Inverts the intersection and bounding rect from the parent (frame) BCR to\n * the local BCR space.\n * @param {DOMRect|ClientRect} parentBoundingRect The parent's bound client rect.\n * @param {DOMRect|ClientRect} parentIntersectionRect The parent's own intersection rect.\n * @return {ClientRect} The local root bounding rect for the parent's children.\n */\nfunction convertFromParentRect(parentBoundingRect, parentIntersectionRect) {\n var top = parentIntersectionRect.top - parentBoundingRect.top;\n var left = parentIntersectionRect.left - parentBoundingRect.left;\n return {\n top: top,\n left: left,\n height: parentIntersectionRect.height,\n width: parentIntersectionRect.width,\n bottom: top + parentIntersectionRect.height,\n right: left + parentIntersectionRect.width\n };\n}\n\n\n/**\n * Checks to see if a parent element contains a child element (including inside\n * shadow DOM).\n * @param {Node} parent The parent element.\n * @param {Node} child The child element.\n * @return {boolean} True if the parent node contains the child node.\n */\nfunction containsDeep(parent, child) {\n var node = child;\n while (node) {\n if (node == parent) return true;\n\n node = getParentNode(node);\n }\n return false;\n}\n\n\n/**\n * Gets the parent node of an element or its host element if the parent node\n * is a shadow root.\n * @param {Node} node The node whose parent to get.\n * @return {Node|null} The parent node or null if no parent exists.\n */\nfunction getParentNode(node) {\n var parent = node.parentNode;\n\n if (node.nodeType == /* DOCUMENT */ 9 && node != document) {\n // If this node is a document node, look for the embedding frame.\n return getFrameElement(node);\n }\n\n // If the parent has element that is assigned through shadow root slot\n if (parent && parent.assignedSlot) {\n parent = parent.assignedSlot.parentNode\n }\n\n if (parent && parent.nodeType == 11 && parent.host) {\n // If the parent is a shadow root, return the host element.\n return parent.host;\n }\n\n return parent;\n}\n\n/**\n * Returns true if `node` is a Document.\n * @param {!Node} node\n * @returns {boolean}\n */\nfunction isDoc(node) {\n return node && node.nodeType === 9;\n}\n\n\n// Exposes the constructors globally.\nwindow.IntersectionObserver = IntersectionObserver;\nwindow.IntersectionObserverEntry = IntersectionObserverEntry;\n\n}());\n","(function(window, factory) {\n\tvar lazySizes = factory(window, window.document, Date);\n\twindow.lazySizes = lazySizes;\n\tif(typeof module == 'object' && module.exports){\n\t\tmodule.exports = lazySizes;\n\t}\n}(typeof window != 'undefined' ?\n window : {}, \n/**\n * import(\"./types/global\")\n * @typedef { import(\"./types/lazysizes-config\").LazySizesConfigPartial } LazySizesConfigPartial\n */\nfunction l(window, document, Date) { // Pass in the window Date function also for SSR because the Date class can be lost\n\t'use strict';\n\t/*jshint eqnull:true */\n\n\tvar lazysizes,\n\t\t/**\n\t\t * @type { LazySizesConfigPartial }\n\t\t */\n\t\tlazySizesCfg;\n\n\t(function(){\n\t\tvar prop;\n\n\t\tvar lazySizesDefaults = {\n\t\t\tlazyClass: 'lazyload',\n\t\t\tloadedClass: 'lazyloaded',\n\t\t\tloadingClass: 'lazyloading',\n\t\t\tpreloadClass: 'lazypreload',\n\t\t\terrorClass: 'lazyerror',\n\t\t\t//strictClass: 'lazystrict',\n\t\t\tautosizesClass: 'lazyautosizes',\n\t\t\tfastLoadedClass: 'ls-is-cached',\n\t\t\tiframeLoadMode: 0,\n\t\t\tsrcAttr: 'data-src',\n\t\t\tsrcsetAttr: 'data-srcset',\n\t\t\tsizesAttr: 'data-sizes',\n\t\t\t//preloadAfterLoad: false,\n\t\t\tminSize: 40,\n\t\t\tcustomMedia: {},\n\t\t\tinit: true,\n\t\t\texpFactor: 1.5,\n\t\t\thFac: 0.8,\n\t\t\tloadMode: 2,\n\t\t\tloadHidden: true,\n\t\t\tricTimeout: 0,\n\t\t\tthrottleDelay: 125,\n\t\t};\n\n\t\tlazySizesCfg = window.lazySizesConfig || window.lazysizesConfig || {};\n\n\t\tfor(prop in lazySizesDefaults){\n\t\t\tif(!(prop in lazySizesCfg)){\n\t\t\t\tlazySizesCfg[prop] = lazySizesDefaults[prop];\n\t\t\t}\n\t\t}\n\t})();\n\n\tif (!document || !document.getElementsByClassName) {\n\t\treturn {\n\t\t\tinit: function () {},\n\t\t\t/**\n\t\t\t * @type { LazySizesConfigPartial }\n\t\t\t */\n\t\t\tcfg: lazySizesCfg,\n\t\t\t/**\n\t\t\t * @type { true }\n\t\t\t */\n\t\t\tnoSupport: true,\n\t\t};\n\t}\n\n\tvar docElem = document.documentElement;\n\n\tvar supportPicture = window.HTMLPictureElement;\n\n\tvar _addEventListener = 'addEventListener';\n\n\tvar _getAttribute = 'getAttribute';\n\n\t/**\n\t * Update to bind to window because 'this' becomes null during SSR\n\t * builds.\n\t */\n\tvar addEventListener = window[_addEventListener].bind(window);\n\n\tvar setTimeout = window.setTimeout;\n\n\tvar requestAnimationFrame = window.requestAnimationFrame || setTimeout;\n\n\tvar requestIdleCallback = window.requestIdleCallback;\n\n\tvar regPicture = /^picture$/i;\n\n\tvar loadEvents = ['load', 'error', 'lazyincluded', '_lazyloaded'];\n\n\tvar regClassCache = {};\n\n\tvar forEach = Array.prototype.forEach;\n\n\t/**\n\t * @param ele {Element}\n\t * @param cls {string}\n\t */\n\tvar hasClass = function(ele, cls) {\n\t\tif(!regClassCache[cls]){\n\t\t\tregClassCache[cls] = new RegExp('(\\\\s|^)'+cls+'(\\\\s|$)');\n\t\t}\n\t\treturn regClassCache[cls].test(ele[_getAttribute]('class') || '') && regClassCache[cls];\n\t};\n\n\t/**\n\t * @param ele {Element}\n\t * @param cls {string}\n\t */\n\tvar addClass = function(ele, cls) {\n\t\tif (!hasClass(ele, cls)){\n\t\t\tele.setAttribute('class', (ele[_getAttribute]('class') || '').trim() + ' ' + cls);\n\t\t}\n\t};\n\n\t/**\n\t * @param ele {Element}\n\t * @param cls {string}\n\t */\n\tvar removeClass = function(ele, cls) {\n\t\tvar reg;\n\t\tif ((reg = hasClass(ele,cls))) {\n\t\t\tele.setAttribute('class', (ele[_getAttribute]('class') || '').replace(reg, ' '));\n\t\t}\n\t};\n\n\tvar addRemoveLoadEvents = function(dom, fn, add){\n\t\tvar action = add ? _addEventListener : 'removeEventListener';\n\t\tif(add){\n\t\t\taddRemoveLoadEvents(dom, fn);\n\t\t}\n\t\tloadEvents.forEach(function(evt){\n\t\t\tdom[action](evt, fn);\n\t\t});\n\t};\n\n\t/**\n\t * @param elem { Element }\n\t * @param name { string }\n\t * @param detail { any }\n\t * @param noBubbles { boolean }\n\t * @param noCancelable { boolean }\n\t * @returns { CustomEvent }\n\t */\n\tvar triggerEvent = function(elem, name, detail, noBubbles, noCancelable){\n\t\tvar event = document.createEvent('Event');\n\n\t\tif(!detail){\n\t\t\tdetail = {};\n\t\t}\n\n\t\tdetail.instance = lazysizes;\n\n\t\tevent.initEvent(name, !noBubbles, !noCancelable);\n\n\t\tevent.detail = detail;\n\n\t\telem.dispatchEvent(event);\n\t\treturn event;\n\t};\n\n\tvar updatePolyfill = function (el, full){\n\t\tvar polyfill;\n\t\tif( !supportPicture && ( polyfill = (window.picturefill || lazySizesCfg.pf) ) ){\n\t\t\tif(full && full.src && !el[_getAttribute]('srcset')){\n\t\t\t\tel.setAttribute('srcset', full.src);\n\t\t\t}\n\t\t\tpolyfill({reevaluate: true, elements: [el]});\n\t\t} else if(full && full.src){\n\t\t\tel.src = full.src;\n\t\t}\n\t};\n\n\tvar getCSS = function (elem, style){\n\t\treturn (getComputedStyle(elem, null) || {})[style];\n\t};\n\n\t/**\n\t *\n\t * @param elem { Element }\n\t * @param parent { Element }\n\t * @param [width] {number}\n\t * @returns {number}\n\t */\n\tvar getWidth = function(elem, parent, width){\n\t\twidth = width || elem.offsetWidth;\n\n\t\twhile(width < lazySizesCfg.minSize && parent && !elem._lazysizesWidth){\n\t\t\twidth = parent.offsetWidth;\n\t\t\tparent = parent.parentNode;\n\t\t}\n\n\t\treturn width;\n\t};\n\n\tvar rAF = (function(){\n\t\tvar running, waiting;\n\t\tvar firstFns = [];\n\t\tvar secondFns = [];\n\t\tvar fns = firstFns;\n\n\t\tvar run = function(){\n\t\t\tvar runFns = fns;\n\n\t\t\tfns = firstFns.length ? secondFns : firstFns;\n\n\t\t\trunning = true;\n\t\t\twaiting = false;\n\n\t\t\twhile(runFns.length){\n\t\t\t\trunFns.shift()();\n\t\t\t}\n\n\t\t\trunning = false;\n\t\t};\n\n\t\tvar rafBatch = function(fn, queue){\n\t\t\tif(running && !queue){\n\t\t\t\tfn.apply(this, arguments);\n\t\t\t} else {\n\t\t\t\tfns.push(fn);\n\n\t\t\t\tif(!waiting){\n\t\t\t\t\twaiting = true;\n\t\t\t\t\t(document.hidden ? setTimeout : requestAnimationFrame)(run);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\trafBatch._lsFlush = run;\n\n\t\treturn rafBatch;\n\t})();\n\n\tvar rAFIt = function(fn, simple){\n\t\treturn simple ?\n\t\t\tfunction() {\n\t\t\t\trAF(fn);\n\t\t\t} :\n\t\t\tfunction(){\n\t\t\t\tvar that = this;\n\t\t\t\tvar args = arguments;\n\t\t\t\trAF(function(){\n\t\t\t\t\tfn.apply(that, args);\n\t\t\t\t});\n\t\t\t}\n\t\t;\n\t};\n\n\tvar throttle = function(fn){\n\t\tvar running;\n\t\tvar lastTime = 0;\n\t\tvar gDelay = lazySizesCfg.throttleDelay;\n\t\tvar rICTimeout = lazySizesCfg.ricTimeout;\n\t\tvar run = function(){\n\t\t\trunning = false;\n\t\t\tlastTime = Date.now();\n\t\t\tfn();\n\t\t};\n\t\tvar idleCallback = requestIdleCallback && rICTimeout > 49 ?\n\t\t\tfunction(){\n\t\t\t\trequestIdleCallback(run, {timeout: rICTimeout});\n\n\t\t\t\tif(rICTimeout !== lazySizesCfg.ricTimeout){\n\t\t\t\t\trICTimeout = lazySizesCfg.ricTimeout;\n\t\t\t\t}\n\t\t\t} :\n\t\t\trAFIt(function(){\n\t\t\t\tsetTimeout(run);\n\t\t\t}, true)\n\t\t;\n\n\t\treturn function(isPriority){\n\t\t\tvar delay;\n\n\t\t\tif((isPriority = isPriority === true)){\n\t\t\t\trICTimeout = 33;\n\t\t\t}\n\n\t\t\tif(running){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\trunning = true;\n\n\t\t\tdelay = gDelay - (Date.now() - lastTime);\n\n\t\t\tif(delay < 0){\n\t\t\t\tdelay = 0;\n\t\t\t}\n\n\t\t\tif(isPriority || delay < 9){\n\t\t\t\tidleCallback();\n\t\t\t} else {\n\t\t\t\tsetTimeout(idleCallback, delay);\n\t\t\t}\n\t\t};\n\t};\n\n\t//based on http://modernjavascript.blogspot.de/2013/08/building-better-debounce.html\n\tvar debounce = function(func) {\n\t\tvar timeout, timestamp;\n\t\tvar wait = 99;\n\t\tvar run = function(){\n\t\t\ttimeout = null;\n\t\t\tfunc();\n\t\t};\n\t\tvar later = function() {\n\t\t\tvar last = Date.now() - timestamp;\n\n\t\t\tif (last < wait) {\n\t\t\t\tsetTimeout(later, wait - last);\n\t\t\t} else {\n\t\t\t\t(requestIdleCallback || run)(run);\n\t\t\t}\n\t\t};\n\n\t\treturn function() {\n\t\t\ttimestamp = Date.now();\n\n\t\t\tif (!timeout) {\n\t\t\t\ttimeout = setTimeout(later, wait);\n\t\t\t}\n\t\t};\n\t};\n\n\tvar loader = (function(){\n\t\tvar preloadElems, isCompleted, resetPreloadingTimer, loadMode, started;\n\n\t\tvar eLvW, elvH, eLtop, eLleft, eLright, eLbottom, isBodyHidden;\n\n\t\tvar regImg = /^img$/i;\n\t\tvar regIframe = /^iframe$/i;\n\n\t\tvar supportScroll = ('onscroll' in window) && !(/(gle|ing)bot/.test(navigator.userAgent));\n\n\t\tvar shrinkExpand = 0;\n\t\tvar currentExpand = 0;\n\n\t\tvar isLoading = 0;\n\t\tvar lowRuns = -1;\n\n\t\tvar resetPreloading = function(e){\n\t\t\tisLoading--;\n\t\t\tif(!e || isLoading < 0 || !e.target){\n\t\t\t\tisLoading = 0;\n\t\t\t}\n\t\t};\n\n\t\tvar isVisible = function (elem) {\n\t\t\tif (isBodyHidden == null) {\n\t\t\t\tisBodyHidden = getCSS(document.body, 'visibility') == 'hidden';\n\t\t\t}\n\n\t\t\treturn isBodyHidden || !(getCSS(elem.parentNode, 'visibility') == 'hidden' && getCSS(elem, 'visibility') == 'hidden');\n\t\t};\n\n\t\tvar isNestedVisible = function(elem, elemExpand){\n\t\t\tvar outerRect;\n\t\t\tvar parent = elem;\n\t\t\tvar visible = isVisible(elem);\n\n\t\t\teLtop -= elemExpand;\n\t\t\teLbottom += elemExpand;\n\t\t\teLleft -= elemExpand;\n\t\t\teLright += elemExpand;\n\n\t\t\twhile(visible && (parent = parent.offsetParent) && parent != document.body && parent != docElem){\n\t\t\t\tvisible = ((getCSS(parent, 'opacity') || 1) > 0);\n\n\t\t\t\tif(visible && getCSS(parent, 'overflow') != 'visible'){\n\t\t\t\t\touterRect = parent.getBoundingClientRect();\n\t\t\t\t\tvisible = eLright > outerRect.left &&\n\t\t\t\t\t\teLleft < outerRect.right &&\n\t\t\t\t\t\teLbottom > outerRect.top - 1 &&\n\t\t\t\t\t\teLtop < outerRect.bottom + 1\n\t\t\t\t\t;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn visible;\n\t\t};\n\n\t\tvar checkElements = function() {\n\t\t\tvar eLlen, i, rect, autoLoadElem, loadedSomething, elemExpand, elemNegativeExpand, elemExpandVal,\n\t\t\t\tbeforeExpandVal, defaultExpand, preloadExpand, hFac;\n\t\t\tvar lazyloadElems = lazysizes.elements;\n\n\t\t\tif((loadMode = lazySizesCfg.loadMode) && isLoading < 8 && (eLlen = lazyloadElems.length)){\n\n\t\t\t\ti = 0;\n\n\t\t\t\tlowRuns++;\n\n\t\t\t\tfor(; i < eLlen; i++){\n\n\t\t\t\t\tif(!lazyloadElems[i] || lazyloadElems[i]._lazyRace){continue;}\n\n\t\t\t\t\tif(!supportScroll || (lazysizes.prematureUnveil && lazysizes.prematureUnveil(lazyloadElems[i]))){unveilElement(lazyloadElems[i]);continue;}\n\n\t\t\t\t\tif(!(elemExpandVal = lazyloadElems[i][_getAttribute]('data-expand')) || !(elemExpand = elemExpandVal * 1)){\n\t\t\t\t\t\telemExpand = currentExpand;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!defaultExpand) {\n\t\t\t\t\t\tdefaultExpand = (!lazySizesCfg.expand || lazySizesCfg.expand < 1) ?\n\t\t\t\t\t\t\tdocElem.clientHeight > 500 && docElem.clientWidth > 500 ? 500 : 370 :\n\t\t\t\t\t\t\tlazySizesCfg.expand;\n\n\t\t\t\t\t\tlazysizes._defEx = defaultExpand;\n\n\t\t\t\t\t\tpreloadExpand = defaultExpand * lazySizesCfg.expFactor;\n\t\t\t\t\t\thFac = lazySizesCfg.hFac;\n\t\t\t\t\t\tisBodyHidden = null;\n\n\t\t\t\t\t\tif(currentExpand < preloadExpand && isLoading < 1 && lowRuns > 2 && loadMode > 2 && !document.hidden){\n\t\t\t\t\t\t\tcurrentExpand = preloadExpand;\n\t\t\t\t\t\t\tlowRuns = 0;\n\t\t\t\t\t\t} else if(loadMode > 1 && lowRuns > 1 && isLoading < 6){\n\t\t\t\t\t\t\tcurrentExpand = defaultExpand;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcurrentExpand = shrinkExpand;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif(beforeExpandVal !== elemExpand){\n\t\t\t\t\t\teLvW = innerWidth + (elemExpand * hFac);\n\t\t\t\t\t\telvH = innerHeight + elemExpand;\n\t\t\t\t\t\telemNegativeExpand = elemExpand * -1;\n\t\t\t\t\t\tbeforeExpandVal = elemExpand;\n\t\t\t\t\t}\n\n\t\t\t\t\trect = lazyloadElems[i].getBoundingClientRect();\n\n\t\t\t\t\tif ((eLbottom = rect.bottom) >= elemNegativeExpand &&\n\t\t\t\t\t\t(eLtop = rect.top) <= elvH &&\n\t\t\t\t\t\t(eLright = rect.right) >= elemNegativeExpand * hFac &&\n\t\t\t\t\t\t(eLleft = rect.left) <= eLvW &&\n\t\t\t\t\t\t(eLbottom || eLright || eLleft || eLtop) &&\n\t\t\t\t\t\t(lazySizesCfg.loadHidden || isVisible(lazyloadElems[i])) &&\n\t\t\t\t\t\t((isCompleted && isLoading < 3 && !elemExpandVal && (loadMode < 3 || lowRuns < 4)) || isNestedVisible(lazyloadElems[i], elemExpand))){\n\t\t\t\t\t\tunveilElement(lazyloadElems[i]);\n\t\t\t\t\t\tloadedSomething = true;\n\t\t\t\t\t\tif(isLoading > 9){break;}\n\t\t\t\t\t} else if(!loadedSomething && isCompleted && !autoLoadElem &&\n\t\t\t\t\t\tisLoading < 4 && lowRuns < 4 && loadMode > 2 &&\n\t\t\t\t\t\t(preloadElems[0] || lazySizesCfg.preloadAfterLoad) &&\n\t\t\t\t\t\t(preloadElems[0] || (!elemExpandVal && ((eLbottom || eLright || eLleft || eLtop) || lazyloadElems[i][_getAttribute](lazySizesCfg.sizesAttr) != 'auto')))){\n\t\t\t\t\t\tautoLoadElem = preloadElems[0] || lazyloadElems[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(autoLoadElem && !loadedSomething){\n\t\t\t\t\tunveilElement(autoLoadElem);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar throttledCheckElements = throttle(checkElements);\n\n\t\tvar switchLoadingClass = function(e){\n\t\t\tvar elem = e.target;\n\n\t\t\tif (elem._lazyCache) {\n\t\t\t\tdelete elem._lazyCache;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresetPreloading(e);\n\t\t\taddClass(elem, lazySizesCfg.loadedClass);\n\t\t\tremoveClass(elem, lazySizesCfg.loadingClass);\n\t\t\taddRemoveLoadEvents(elem, rafSwitchLoadingClass);\n\t\t\ttriggerEvent(elem, 'lazyloaded');\n\t\t};\n\t\tvar rafedSwitchLoadingClass = rAFIt(switchLoadingClass);\n\t\tvar rafSwitchLoadingClass = function(e){\n\t\t\trafedSwitchLoadingClass({target: e.target});\n\t\t};\n\n\t\tvar changeIframeSrc = function(elem, src){\n\t\t\tvar loadMode = elem.getAttribute('data-load-mode') || lazySizesCfg.iframeLoadMode;\n\n\t\t\t// loadMode can be also a string!\n\t\t\tif (loadMode == 0) {\n\t\t\t\telem.contentWindow.location.replace(src);\n\t\t\t} else if (loadMode == 1) {\n\t\t\t\telem.src = src;\n\t\t\t}\n\t\t};\n\n\t\tvar handleSources = function(source){\n\t\t\tvar customMedia;\n\n\t\t\tvar sourceSrcset = source[_getAttribute](lazySizesCfg.srcsetAttr);\n\n\t\t\tif( (customMedia = lazySizesCfg.customMedia[source[_getAttribute]('data-media') || source[_getAttribute]('media')]) ){\n\t\t\t\tsource.setAttribute('media', customMedia);\n\t\t\t}\n\n\t\t\tif(sourceSrcset){\n\t\t\t\tsource.setAttribute('srcset', sourceSrcset);\n\t\t\t}\n\t\t};\n\n\t\tvar lazyUnveil = rAFIt(function (elem, detail, isAuto, sizes, isImg){\n\t\t\tvar src, srcset, parent, isPicture, event, firesLoad;\n\n\t\t\tif(!(event = triggerEvent(elem, 'lazybeforeunveil', detail)).defaultPrevented){\n\n\t\t\t\tif(sizes){\n\t\t\t\t\tif(isAuto){\n\t\t\t\t\t\taddClass(elem, lazySizesCfg.autosizesClass);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem.setAttribute('sizes', sizes);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsrcset = elem[_getAttribute](lazySizesCfg.srcsetAttr);\n\t\t\t\tsrc = elem[_getAttribute](lazySizesCfg.srcAttr);\n\n\t\t\t\tif(isImg) {\n\t\t\t\t\tparent = elem.parentNode;\n\t\t\t\t\tisPicture = parent && regPicture.test(parent.nodeName || '');\n\t\t\t\t}\n\n\t\t\t\tfiresLoad = detail.firesLoad || (('src' in elem) && (srcset || src || isPicture));\n\n\t\t\t\tevent = {target: elem};\n\n\t\t\t\taddClass(elem, lazySizesCfg.loadingClass);\n\n\t\t\t\tif(firesLoad){\n\t\t\t\t\tclearTimeout(resetPreloadingTimer);\n\t\t\t\t\tresetPreloadingTimer = setTimeout(resetPreloading, 2500);\n\t\t\t\t\taddRemoveLoadEvents(elem, rafSwitchLoadingClass, true);\n\t\t\t\t}\n\n\t\t\t\tif(isPicture){\n\t\t\t\t\tforEach.call(parent.getElementsByTagName('source'), handleSources);\n\t\t\t\t}\n\n\t\t\t\tif(srcset){\n\t\t\t\t\telem.setAttribute('srcset', srcset);\n\t\t\t\t} else if(src && !isPicture){\n\t\t\t\t\tif(regIframe.test(elem.nodeName)){\n\t\t\t\t\t\tchangeIframeSrc(elem, src);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem.src = src;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(isImg && (srcset || isPicture)){\n\t\t\t\t\tupdatePolyfill(elem, {src: src});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(elem._lazyRace){\n\t\t\t\tdelete elem._lazyRace;\n\t\t\t}\n\t\t\tremoveClass(elem, lazySizesCfg.lazyClass);\n\n\t\t\trAF(function(){\n\t\t\t\t// Part of this can be removed as soon as this fix is older: https://bugs.chromium.org/p/chromium/issues/detail?id=7731 (2015)\n\t\t\t\tvar isLoaded = elem.complete && elem.naturalWidth > 1;\n\n\t\t\t\tif( !firesLoad || isLoaded){\n\t\t\t\t\tif (isLoaded) {\n\t\t\t\t\t\taddClass(elem, lazySizesCfg.fastLoadedClass);\n\t\t\t\t\t}\n\t\t\t\t\tswitchLoadingClass(event);\n\t\t\t\t\telem._lazyCache = true;\n\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\tif ('_lazyCache' in elem) {\n\t\t\t\t\t\t\tdelete elem._lazyCache;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 9);\n\t\t\t\t}\n\t\t\t\tif (elem.loading == 'lazy') {\n\t\t\t\t\tisLoading--;\n\t\t\t\t}\n\t\t\t}, true);\n\t\t});\n\n\t\t/**\n\t\t *\n\t\t * @param elem { Element }\n\t\t */\n\t\tvar unveilElement = function (elem){\n\t\t\tif (elem._lazyRace) {return;}\n\t\t\tvar detail;\n\n\t\t\tvar isImg = regImg.test(elem.nodeName);\n\n\t\t\t//allow using sizes=\"auto\", but don't use. it's invalid. Use data-sizes=\"auto\" or a valid value for sizes instead (i.e.: sizes=\"80vw\")\n\t\t\tvar sizes = isImg && (elem[_getAttribute](lazySizesCfg.sizesAttr) || elem[_getAttribute]('sizes'));\n\t\t\tvar isAuto = sizes == 'auto';\n\n\t\t\tif( (isAuto || !isCompleted) && isImg && (elem[_getAttribute]('src') || elem.srcset) && !elem.complete && !hasClass(elem, lazySizesCfg.errorClass) && hasClass(elem, lazySizesCfg.lazyClass)){return;}\n\n\t\t\tdetail = triggerEvent(elem, 'lazyunveilread').detail;\n\n\t\t\tif(isAuto){\n\t\t\t\t autoSizer.updateElem(elem, true, elem.offsetWidth);\n\t\t\t}\n\n\t\t\telem._lazyRace = true;\n\t\t\tisLoading++;\n\n\t\t\tlazyUnveil(elem, detail, isAuto, sizes, isImg);\n\t\t};\n\n\t\tvar afterScroll = debounce(function(){\n\t\t\tlazySizesCfg.loadMode = 3;\n\t\t\tthrottledCheckElements();\n\t\t});\n\n\t\tvar altLoadmodeScrollListner = function(){\n\t\t\tif(lazySizesCfg.loadMode == 3){\n\t\t\t\tlazySizesCfg.loadMode = 2;\n\t\t\t}\n\t\t\tafterScroll();\n\t\t};\n\n\t\tvar onload = function(){\n\t\t\tif(isCompleted){return;}\n\t\t\tif(Date.now() - started < 999){\n\t\t\t\tsetTimeout(onload, 999);\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\tisCompleted = true;\n\n\t\t\tlazySizesCfg.loadMode = 3;\n\n\t\t\tthrottledCheckElements();\n\n\t\t\taddEventListener('scroll', altLoadmodeScrollListner, true);\n\t\t};\n\n\t\treturn {\n\t\t\t_: function(){\n\t\t\t\tstarted = Date.now();\n\n\t\t\t\tlazysizes.elements = document.getElementsByClassName(lazySizesCfg.lazyClass);\n\t\t\t\tpreloadElems = document.getElementsByClassName(lazySizesCfg.lazyClass + ' ' + lazySizesCfg.preloadClass);\n\n\t\t\t\taddEventListener('scroll', throttledCheckElements, true);\n\n\t\t\t\taddEventListener('resize', throttledCheckElements, true);\n\n\t\t\t\taddEventListener('pageshow', function (e) {\n\t\t\t\t\tif (e.persisted) {\n\t\t\t\t\t\tvar loadingElements = document.querySelectorAll('.' + lazySizesCfg.loadingClass);\n\n\t\t\t\t\t\tif (loadingElements.length && loadingElements.forEach) {\n\t\t\t\t\t\t\trequestAnimationFrame(function () {\n\t\t\t\t\t\t\t\tloadingElements.forEach( function (img) {\n\t\t\t\t\t\t\t\t\tif (img.complete) {\n\t\t\t\t\t\t\t\t\t\tunveilElement(img);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif(window.MutationObserver){\n\t\t\t\t\tnew MutationObserver( throttledCheckElements ).observe( docElem, {childList: true, subtree: true, attributes: true} );\n\t\t\t\t} else {\n\t\t\t\t\tdocElem[_addEventListener]('DOMNodeInserted', throttledCheckElements, true);\n\t\t\t\t\tdocElem[_addEventListener]('DOMAttrModified', throttledCheckElements, true);\n\t\t\t\t\tsetInterval(throttledCheckElements, 999);\n\t\t\t\t}\n\n\t\t\t\taddEventListener('hashchange', throttledCheckElements, true);\n\n\t\t\t\t//, 'fullscreenchange'\n\t\t\t\t['focus', 'mouseover', 'click', 'load', 'transitionend', 'animationend'].forEach(function(name){\n\t\t\t\t\tdocument[_addEventListener](name, throttledCheckElements, true);\n\t\t\t\t});\n\n\t\t\t\tif((/d$|^c/.test(document.readyState))){\n\t\t\t\t\tonload();\n\t\t\t\t} else {\n\t\t\t\t\taddEventListener('load', onload);\n\t\t\t\t\tdocument[_addEventListener]('DOMContentLoaded', throttledCheckElements);\n\t\t\t\t\tsetTimeout(onload, 20000);\n\t\t\t\t}\n\n\t\t\t\tif(lazysizes.elements.length){\n\t\t\t\t\tcheckElements();\n\t\t\t\t\trAF._lsFlush();\n\t\t\t\t} else {\n\t\t\t\t\tthrottledCheckElements();\n\t\t\t\t}\n\t\t\t},\n\t\t\tcheckElems: throttledCheckElements,\n\t\t\tunveil: unveilElement,\n\t\t\t_aLSL: altLoadmodeScrollListner,\n\t\t};\n\t})();\n\n\n\tvar autoSizer = (function(){\n\t\tvar autosizesElems;\n\n\t\tvar sizeElement = rAFIt(function(elem, parent, event, width){\n\t\t\tvar sources, i, len;\n\t\t\telem._lazysizesWidth = width;\n\t\t\twidth += 'px';\n\n\t\t\telem.setAttribute('sizes', width);\n\n\t\t\tif(regPicture.test(parent.nodeName || '')){\n\t\t\t\tsources = parent.getElementsByTagName('source');\n\t\t\t\tfor(i = 0, len = sources.length; i < len; i++){\n\t\t\t\t\tsources[i].setAttribute('sizes', width);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!event.detail.dataAttr){\n\t\t\t\tupdatePolyfill(elem, event.detail);\n\t\t\t}\n\t\t});\n\t\t/**\n\t\t *\n\t\t * @param elem {Element}\n\t\t * @param dataAttr\n\t\t * @param [width] { number }\n\t\t */\n\t\tvar getSizeElement = function (elem, dataAttr, width){\n\t\t\tvar event;\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif(parent){\n\t\t\t\twidth = getWidth(elem, parent, width);\n\t\t\t\tevent = triggerEvent(elem, 'lazybeforesizes', {width: width, dataAttr: !!dataAttr});\n\n\t\t\t\tif(!event.defaultPrevented){\n\t\t\t\t\twidth = event.detail.width;\n\n\t\t\t\t\tif(width && width !== elem._lazysizesWidth){\n\t\t\t\t\t\tsizeElement(elem, parent, event, width);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar updateElementsSizes = function(){\n\t\t\tvar i;\n\t\t\tvar len = autosizesElems.length;\n\t\t\tif(len){\n\t\t\t\ti = 0;\n\n\t\t\t\tfor(; i < len; i++){\n\t\t\t\t\tgetSizeElement(autosizesElems[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar debouncedUpdateElementsSizes = debounce(updateElementsSizes);\n\n\t\treturn {\n\t\t\t_: function(){\n\t\t\t\tautosizesElems = document.getElementsByClassName(lazySizesCfg.autosizesClass);\n\t\t\t\taddEventListener('resize', debouncedUpdateElementsSizes);\n\t\t\t},\n\t\t\tcheckElems: debouncedUpdateElementsSizes,\n\t\t\tupdateElem: getSizeElement\n\t\t};\n\t})();\n\n\tvar init = function(){\n\t\tif(!init.i && document.getElementsByClassName){\n\t\t\tinit.i = true;\n\t\t\tautoSizer._();\n\t\t\tloader._();\n\t\t}\n\t};\n\n\tsetTimeout(function(){\n\t\tif(lazySizesCfg.init){\n\t\t\tinit();\n\t\t}\n\t});\n\n\tlazysizes = {\n\t\t/**\n\t\t * @type { LazySizesConfigPartial }\n\t\t */\n\t\tcfg: lazySizesCfg,\n\t\tautoSizer: autoSizer,\n\t\tloader: loader,\n\t\tinit: init,\n\t\tuP: updatePolyfill,\n\t\taC: addClass,\n\t\trC: removeClass,\n\t\thC: hasClass,\n\t\tfire: triggerEvent,\n\t\tgW: getWidth,\n\t\trAF: rAF,\n\t};\n\n\treturn lazysizes;\n}\n));\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery 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\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\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 */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\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 */\nvar now = function() {\n return root.Date.now();\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 */\nfunction 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 result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\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 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 * 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 */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (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 */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\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 */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\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 */\nfunction 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 = value.replace(reTrim, '');\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\nmodule.exports = debounce;\n"],"names":["window","IntersectionObserverEntry","prototype","Object","defineProperty","get","this","intersectionRatio","document","doc","frame","getFrameElement","ownerDocument","registry","crossOriginUpdater","crossOriginRect","IntersectionObserver","THROTTLE_TIMEOUT","POLL_INTERVAL","USE_MUTATION_OBSERVER","_setupCrossOriginUpdater","boundingClientRect","intersectionRect","convertFromParentRect","top","bottom","left","right","width","height","forEach","observer","_checkForIntersections","_resetCrossOriginUpdater","observe","target","_observationTargets","some","item","element","nodeType","Error","_registerInstance","push","entry","_monitorIntersections","unobserve","filter","_unmonitorIntersections","length","_unregisterInstance","disconnect","_unmonitorAllIntersections","takeRecords","records","_queuedEntries","slice","_initThresholds","opt_threshold","threshold","Array","isArray","sort","t","i","a","isNaN","_parseRootMargin","opt_rootMargin","margins","split","map","margin","parts","exec","value","parseFloat","unit","win","defaultView","_monitoringDocuments","indexOf","callback","monitoringInterval","domObserver","setInterval","addEvent","MutationObserver","attributes","childList","characterData","subtree","_monitoringUnsubscribes","clearInterval","removeEvent","rootDoc","root","index","hasDependentTargets","itemDoc","unsubscribe","splice","unsubscribes","rootIsInDom","_rootIsInDom","rootRect","_getRootRect","targetRect","getBoundingClientRect","rootContainsTarget","_rootContainsTarget","oldEntry","_computeTargetAndRootIntersection","rootBounds","newEntry","time","performance","now","_hasCrossedThreshold","isIntersecting","_callback","getComputedStyle","display","rect1","rect2","parent","getParentNode","atRoot","parentRect","parentComputedStyle","frameRect","frameIntersect","body","documentElement","overflow","Math","max","min","isDoc","html","clientWidth","clientHeight","_expandRectByRootMargin","rect","_rootMarginValues","newRect","oldRatio","newRatio","thresholds","containsDeep","frameElement","e","ensureDOMRect","targetArea","intersectionArea","Number","toFixed","opt_options","fn","timeout","timer","options","bind","setTimeout","rootMargin","join","node","event","opt_useCapture","addEventListener","attachEvent","removeEventListener","detachEvent","el","err","y","x","parentBoundingRect","parentIntersectionRect","child","parentNode","assignedSlot","host","lazySizes","Date","lazysizes","lazySizesCfg","prop","lazySizesDefaults","lazyClass","loadedClass","loadingClass","preloadClass","errorClass","autosizesClass","fastLoadedClass","iframeLoadMode","srcAttr","srcsetAttr","sizesAttr","minSize","customMedia","init","expFactor","hFac","loadMode","loadHidden","ricTimeout","throttleDelay","lazySizesConfig","lazysizesConfig","getElementsByClassName","cfg","noSupport","docElem","supportPicture","HTMLPictureElement","_addEventListener","_getAttribute","requestAnimationFrame","requestIdleCallback","regPicture","loadEvents","regClassCache","hasClass","ele","cls","RegExp","test","addClass","setAttribute","trim","removeClass","reg","replace","addRemoveLoadEvents","dom","add","action","evt","triggerEvent","elem","name","detail","noBubbles","noCancelable","createEvent","instance","initEvent","dispatchEvent","updatePolyfill","full","polyfill","picturefill","pf","src","reevaluate","elements","getCSS","style","getWidth","offsetWidth","_lazysizesWidth","rAF","firstFns","secondFns","fns","run","runFns","running","waiting","shift","rafBatch","queue","apply","arguments","hidden","_lsFlush","rAFIt","simple","that","args","throttle","lastTime","gDelay","rICTimeout","idleCallback","isPriority","delay","debounce","func","timestamp","wait","later","last","loader","regImg","regIframe","supportScroll","navigator","userAgent","shrinkExpand","currentExpand","isLoading","lowRuns","resetPreloading","isVisible","isBodyHidden","isNestedVisible","elemExpand","outerRect","visible","eLtop","eLbottom","eLleft","eLright","offsetParent","checkElements","eLlen","autoLoadElem","loadedSomething","elemNegativeExpand","elemExpandVal","beforeExpandVal","defaultExpand","preloadExpand","lazyloadElems","_lazyRace","prematureUnveil","unveilElement","expand","_defEx","eLvW","innerWidth","elvH","innerHeight","isCompleted","preloadElems","preloadAfterLoad","throttledCheckElements","switchLoadingClass","_lazyCache","rafSwitchLoadingClass","rafedSwitchLoadingClass","changeIframeSrc","getAttribute","contentWindow","location","handleSources","source","sourceSrcset","lazyUnveil","isAuto","sizes","isImg","srcset","isPicture","firesLoad","defaultPrevented","nodeName","clearTimeout","resetPreloadingTimer","call","getElementsByTagName","isLoaded","complete","naturalWidth","loading","autoSizer","updateElem","afterScroll","altLoadmodeScrollListner","onload","started","_","persisted","loadingElements","querySelectorAll","img","readyState","checkElems","unveil","_aLSL","sizeElement","sources","len","dataAttr","getSizeElement","debouncedUpdateElementsSizes","autosizesElems","uP","aC","rC","hC","fire","gW","factory","module","exports","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","freeGlobal","g","freeSelf","self","Function","objectToString","toString","nativeMax","nativeMin","isObject","type","toNumber","isObjectLike","isSymbol","other","valueOf","isBinary","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","thisArg","undefined","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","remainingWait","debounced","isInvoking","leadingEdge","cancel","flush"],"sourceRoot":""}