(function() { var exports = {}; exports.id = 660; exports.ids = [660]; exports.modules = { /***/ 792: /***/ (function(__unused_webpack_module, exports) { "use strict"; exports.__esModule = true; exports.default = initHeadManager; exports.DOMAttributeNames = void 0; const DOMAttributeNames = { acceptCharset: 'accept-charset', className: 'class', htmlFor: 'for', httpEquiv: 'http-equiv', noModule: 'noModule' }; exports.DOMAttributeNames = DOMAttributeNames; function reactElementToDOM({ type, props }) { const el = document.createElement(type); for (const p in props) { if (!props.hasOwnProperty(p)) continue; if (p === 'children' || p === 'dangerouslySetInnerHTML') continue; // we don't render undefined props to the DOM if (props[p] === undefined) continue; const attr = DOMAttributeNames[p] || p.toLowerCase(); if (type === 'script' && (attr === 'async' || attr === 'defer' || attr === 'noModule')) { ; el[attr] = !!props[p]; } else { el.setAttribute(attr, props[p]); } } const { children, dangerouslySetInnerHTML } = props; if (dangerouslySetInnerHTML) { el.innerHTML = dangerouslySetInnerHTML.__html || ''; } else if (children) { el.textContent = typeof children === 'string' ? children : Array.isArray(children) ? children.join('') : ''; } return el; } function updateElements(type, components) { const headEl = document.getElementsByTagName('head')[0]; const headCountEl = headEl.querySelector('meta[name=next-head-count]'); if (false) {} const headCount = Number(headCountEl.content); const oldTags = []; for (let i = 0, j = headCountEl.previousElementSibling; i < headCount; i++, j = j.previousElementSibling) { if (j.tagName.toLowerCase() === type) { oldTags.push(j); } } const newTags = components.map(reactElementToDOM).filter(newTag => { for (let k = 0, len = oldTags.length; k < len; k++) { const oldTag = oldTags[k]; if (oldTag.isEqualNode(newTag)) { oldTags.splice(k, 1); return false; } } return true; }); oldTags.forEach(t => t.parentNode.removeChild(t)); newTags.forEach(t => headEl.insertBefore(t, headCountEl)); headCountEl.content = (headCount - oldTags.length + newTags.length).toString(); } function initHeadManager() { let updatePromise = null; return { mountedInstances: new Set(), updateHead: head => { const promise = updatePromise = Promise.resolve().then(() => { if (promise !== updatePromise) return; updatePromise = null; const tags = {}; head.forEach(h => { if ( // If the font tag is loaded only on client navigation // it won't be inlined. In this case revert to the original behavior h.type === 'link' && h.props['data-optimized-fonts'] && !document.querySelector(`style[data-href="${h.props['data-href']}"]`)) { h.props.href = h.props['data-href']; h.props['data-href'] = undefined; } const components = tags[h.type] || []; components.push(h); tags[h.type] = components; }); const titleComponent = tags.title ? tags.title[0] : null; let title = ''; if (titleComponent) { const { children } = titleComponent.props; title = typeof children === 'string' ? children : Array.isArray(children) ? children.join('') : ''; } if (title !== document.title) document.title = title; ['meta', 'base', 'link', 'style', 'script'].forEach(type => { updateElements(type, tags[type] || []); }); }); } }; } /***/ }), /***/ 447: /***/ (function(__unused_webpack_module, exports) { "use strict"; exports.__esModule = true; exports.cancelIdleCallback = exports.requestIdleCallback = void 0; const requestIdleCallback = typeof self !== 'undefined' && self.requestIdleCallback || function (cb) { let start = Date.now(); return setTimeout(function () { cb({ didTimeout: false, timeRemaining: function () { return Math.max(0, 50 - (Date.now() - start)); } }); }, 1); }; exports.requestIdleCallback = requestIdleCallback; const cancelIdleCallback = typeof self !== 'undefined' && self.cancelIdleCallback || function (id) { return clearTimeout(id); }; exports.cancelIdleCallback = cancelIdleCallback; /***/ }), /***/ 926: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; var _interopRequireDefault = __webpack_require__(426); exports.__esModule = true; exports.initScriptLoader = initScriptLoader; exports.default = void 0; var _extends2 = _interopRequireDefault(__webpack_require__(566)); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(__webpack_require__(169)); var _react = __webpack_require__(297); var _headManagerContext = __webpack_require__(816); var _headManager = __webpack_require__(792); var _requestIdleCallback = __webpack_require__(447); const ScriptCache = new Map(); const LoadCache = new Set(); const ignoreProps = ['onLoad', 'dangerouslySetInnerHTML', 'children', 'onError', 'strategy']; const loadScript = props => { const { src, id, onLoad = () => {}, dangerouslySetInnerHTML, children = '', onError } = props; const cacheKey = id || src; if (ScriptCache.has(src)) { if (!LoadCache.has(cacheKey)) { LoadCache.add(cacheKey); // Execute onLoad since the script loading has begun ScriptCache.get(src).then(onLoad, onError); } return; } const el = document.createElement('script'); const loadPromise = new Promise((resolve, reject) => { el.addEventListener('load', function () { resolve(); if (onLoad) { onLoad.call(this); } }); el.addEventListener('error', function () { reject(); if (onError) { onError(); } }); }); if (src) { ScriptCache.set(src, loadPromise); LoadCache.add(cacheKey); } if (dangerouslySetInnerHTML) { el.innerHTML = dangerouslySetInnerHTML.__html || ''; } else if (children) { el.textContent = typeof children === 'string' ? children : Array.isArray(children) ? children.join('') : ''; } else if (src) { el.src = src; } for (const [k, value] of Object.entries(props)) { if (value === undefined || ignoreProps.includes(k)) { continue; } const attr = _headManager.DOMAttributeNames[k] || k.toLowerCase(); el.setAttribute(attr, value); } document.body.appendChild(el); }; function handleClientScriptLoad(props) { const { strategy = 'afterInteractive' } = props; if (strategy === 'afterInteractive') { loadScript(props); } else if (strategy === 'lazyOnload') { window.addEventListener('load', () => { (0, _requestIdleCallback.requestIdleCallback)(() => loadScript(props)); }); } } function loadLazyScript(props) { if (document.readyState === 'complete') { (0, _requestIdleCallback.requestIdleCallback)(() => loadScript(props)); } else { window.addEventListener('load', () => { (0, _requestIdleCallback.requestIdleCallback)(() => loadScript(props)); }); } } function initScriptLoader(scriptLoaderItems) { scriptLoaderItems.forEach(handleClientScriptLoad); } function Script(props) { const { src = '', onLoad = () => {}, strategy = 'afterInteractive', onError } = props, restProps = (0, _objectWithoutPropertiesLoose2.default)(props, ["src", "onLoad", "dangerouslySetInnerHTML", "strategy", "onError"]); // Context is available only during SSR const { updateScripts, scripts } = (0, _react.useContext)(_headManagerContext.HeadManagerContext); (0, _react.useEffect)(() => { if (strategy === 'afterInteractive') { loadScript(props); } else if (strategy === 'lazyOnload') { loadLazyScript(props); } }, [props, strategy]); if (strategy === 'beforeInteractive') { if (updateScripts) { scripts.beforeInteractive = (scripts.beforeInteractive || []).concat([(0, _extends2.default)({ src, onLoad, onError }, restProps)]); updateScripts(scripts); } } return null; } var _default = Script; exports.default = _default; /***/ }), /***/ 881: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; function 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; } function _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; } function _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; } function _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; } function _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; } exports.__esModule = true; exports.Html = Html; exports.Main = Main; exports.NextScript = exports.Head = exports.default = void 0; var _propTypes = _interopRequireDefault(__webpack_require__(229)); var _react = _interopRequireWildcard(__webpack_require__(297)); var _server = _interopRequireDefault(__webpack_require__(168)); var _constants = __webpack_require__(227); var _documentContext = __webpack_require__(932); var _utils = __webpack_require__(579); exports.DocumentContext = _utils.DocumentContext; exports.DocumentInitialProps = _utils.DocumentInitialProps; exports.DocumentProps = _utils.DocumentProps; var _getPageFiles = __webpack_require__(171); var _utils2 = __webpack_require__(105); var _htmlescape = __webpack_require__(630); var _script = _interopRequireDefault(__webpack_require__(926)); function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function getDocumentFiles(buildManifest, pathname, inAmpMode) { const sharedFiles = (0, _getPageFiles.getPageFiles)(buildManifest, '/_app'); const pageFiles = inAmpMode ? [] : (0, _getPageFiles.getPageFiles)(buildManifest, pathname); return { sharedFiles, pageFiles, allFiles: [...new Set([...sharedFiles, ...pageFiles])] }; } function getPolyfillScripts(context, props) { // polyfills.js has to be rendered as nomodule without async // It also has to be the first script to load const { assetPrefix, buildManifest, devOnlyCacheBusterQueryString, disableOptimizedLoading } = context; return buildManifest.polyfillFiles.filter(polyfill => polyfill.endsWith('.js') && !polyfill.endsWith('.module.js')).map(polyfill => /*#__PURE__*/_react.default.createElement("script", { key: polyfill, defer: !disableOptimizedLoading, nonce: props.nonce, crossOrigin: props.crossOrigin || undefined, noModule: true, src: `${assetPrefix}/_next/${polyfill}${devOnlyCacheBusterQueryString}` })); } function getPreNextScripts(context, props) { const { scriptLoader, disableOptimizedLoading } = context; return (scriptLoader.beforeInteractive || []).map(file => { const { strategy } = file, scriptProps = _objectWithoutProperties(file, ["strategy"]); return /*#__PURE__*/_react.default.createElement("script", Object.assign({}, scriptProps, { defer: !disableOptimizedLoading, nonce: props.nonce, crossOrigin: props.crossOrigin || undefined })); }); } function getDynamicChunks(context, props, files) { const { dynamicImports, assetPrefix, isDevelopment, devOnlyCacheBusterQueryString, disableOptimizedLoading } = context; return dynamicImports.map(file => { if (!file.endsWith('.js') || files.allFiles.includes(file)) return null; return /*#__PURE__*/_react.default.createElement("script", { async: !isDevelopment && disableOptimizedLoading, defer: !disableOptimizedLoading, key: file, src: `${assetPrefix}/_next/${encodeURI(file)}${devOnlyCacheBusterQueryString}`, nonce: props.nonce, crossOrigin: props.crossOrigin || undefined }); }); } function getScripts(context, props, files) { var _buildManifest$lowPri; const { assetPrefix, buildManifest, isDevelopment, devOnlyCacheBusterQueryString, disableOptimizedLoading } = context; const normalScripts = files.allFiles.filter(file => file.endsWith('.js')); const lowPriorityScripts = (_buildManifest$lowPri = buildManifest.lowPriorityFiles) == null ? void 0 : _buildManifest$lowPri.filter(file => file.endsWith('.js')); return [...normalScripts, ...lowPriorityScripts].map(file => { return /*#__PURE__*/_react.default.createElement("script", { key: file, src: `${assetPrefix}/_next/${encodeURI(file)}${devOnlyCacheBusterQueryString}`, nonce: props.nonce, async: !isDevelopment && disableOptimizedLoading, defer: !disableOptimizedLoading, crossOrigin: props.crossOrigin || undefined }); }); } /** * `Document` component handles the initial `document` markup and renders only on the server side. * Commonly used for implementing server side rendering for `css-in-js` libraries. */ class Document extends _react.Component { /** * `getInitialProps` hook returns the context object with the addition of `renderPage`. * `renderPage` callback executes `React` rendering logic synchronously to support server-rendering wrappers */ static async getInitialProps(ctx) { const enhanceApp = App => { return props => /*#__PURE__*/_react.default.createElement(App, props); }; const { html, head } = await ctx.renderPage({ enhanceApp }); const styles = [...(0, _server.default)()]; return { html, head, styles }; } static renderDocument(DocumentComponent, props) { return /*#__PURE__*/_react.default.createElement(_documentContext.DocumentContext.Provider, { value: props }, /*#__PURE__*/_react.default.createElement(DocumentComponent, props)); } render() { return /*#__PURE__*/_react.default.createElement(Html, null, /*#__PURE__*/_react.default.createElement(Head, null), /*#__PURE__*/_react.default.createElement("body", null, /*#__PURE__*/_react.default.createElement(Main, null), /*#__PURE__*/_react.default.createElement(NextScript, null))); } } exports.default = Document; function Html(props) { const { inAmpMode, docComponentsRendered, locale } = (0, _react.useContext)(_documentContext.DocumentContext); docComponentsRendered.Html = true; return /*#__PURE__*/_react.default.createElement("html", Object.assign({}, props, { lang: props.lang || locale || undefined, amp: inAmpMode ? '' : undefined, "data-ampdevmode": inAmpMode && false ? '' : undefined })); } class Head extends _react.Component { constructor(...args) { super(...args); this.context = void 0; } getCssLinks(files) { const { assetPrefix, devOnlyCacheBusterQueryString, dynamicImports } = this.context; const cssFiles = files.allFiles.filter(f => f.endsWith('.css')); const sharedFiles = new Set(files.sharedFiles); // Unmanaged files are CSS files that will be handled directly by the // webpack runtime (`mini-css-extract-plugin`). let unmangedFiles = new Set([]); let dynamicCssFiles = Array.from(new Set(dynamicImports.filter(file => file.endsWith('.css')))); if (dynamicCssFiles.length) { const existing = new Set(cssFiles); dynamicCssFiles = dynamicCssFiles.filter(f => !(existing.has(f) || sharedFiles.has(f))); unmangedFiles = new Set(dynamicCssFiles); cssFiles.push(...dynamicCssFiles); } let cssLinkElements = []; cssFiles.forEach(file => { const isSharedFile = sharedFiles.has(file); if (true) { cssLinkElements.push( /*#__PURE__*/_react.default.createElement("link", { key: `${file}-preload`, nonce: this.props.nonce, rel: "preload", href: `${assetPrefix}/_next/${encodeURI(file)}${devOnlyCacheBusterQueryString}`, as: "style", crossOrigin: this.props.crossOrigin || undefined })); } const isUnmanagedFile = unmangedFiles.has(file); cssLinkElements.push( /*#__PURE__*/_react.default.createElement("link", { key: file, nonce: this.props.nonce, rel: "stylesheet", href: `${assetPrefix}/_next/${encodeURI(file)}${devOnlyCacheBusterQueryString}`, crossOrigin: this.props.crossOrigin || undefined, "data-n-g": isUnmanagedFile ? undefined : isSharedFile ? '' : undefined, "data-n-p": isUnmanagedFile ? undefined : isSharedFile ? undefined : '' })); }); if (true) { cssLinkElements = this.makeStylesheetInert(cssLinkElements); } return cssLinkElements.length === 0 ? null : cssLinkElements; } getPreloadDynamicChunks() { const { dynamicImports, assetPrefix, devOnlyCacheBusterQueryString } = this.context; return dynamicImports.map(file => { if (!file.endsWith('.js')) { return null; } return /*#__PURE__*/_react.default.createElement("link", { rel: "preload", key: file, href: `${assetPrefix}/_next/${encodeURI(file)}${devOnlyCacheBusterQueryString}`, as: "script", nonce: this.props.nonce, crossOrigin: this.props.crossOrigin || undefined }); }) // Filter out nulled scripts .filter(Boolean); } getPreloadMainLinks(files) { const { assetPrefix, devOnlyCacheBusterQueryString, scriptLoader } = this.context; const preloadFiles = files.allFiles.filter(file => { return file.endsWith('.js'); }); return [...(scriptLoader.beforeInteractive || []).map(file => /*#__PURE__*/_react.default.createElement("link", { key: file.src, nonce: this.props.nonce, rel: "preload", href: file.src, as: "script", crossOrigin: this.props.crossOrigin || undefined })), ...preloadFiles.map(file => /*#__PURE__*/_react.default.createElement("link", { key: file, nonce: this.props.nonce, rel: "preload", href: `${assetPrefix}/_next/${encodeURI(file)}${devOnlyCacheBusterQueryString}`, as: "script", crossOrigin: this.props.crossOrigin || undefined }))]; } getDynamicChunks(files) { return getDynamicChunks(this.context, this.props, files); } getPreNextScripts() { return getPreNextScripts(this.context, this.props); } getScripts(files) { return getScripts(this.context, this.props, files); } getPolyfillScripts() { return getPolyfillScripts(this.context, this.props); } handleDocumentScriptLoaderItems(children) { const { scriptLoader } = this.context; const scriptLoaderItems = []; const filteredChildren = []; _react.default.Children.forEach(children, child => { if (child.type === _script.default) { if (child.props.strategy === 'beforeInteractive') { scriptLoader.beforeInteractive = (scriptLoader.beforeInteractive || []).concat([_objectSpread({}, child.props)]); return; } else if (['lazyOnload', 'afterInteractive'].includes(child.props.strategy)) { scriptLoaderItems.push(child.props); return; } } filteredChildren.push(child); }); this.context.__NEXT_DATA__.scriptLoader = scriptLoaderItems; return filteredChildren; } makeStylesheetInert(node) { return _react.default.Children.map(node, c => { if (c.type === 'link' && c.props['href'] && _constants.OPTIMIZED_FONT_PROVIDERS.some(({ url }) => c.props['href'].startsWith(url))) { const newProps = _objectSpread({}, c.props || {}); newProps['data-href'] = newProps['href']; newProps['href'] = undefined; return /*#__PURE__*/_react.default.cloneElement(c, newProps); } else if (c.props && c.props['children']) { c.props['children'] = this.makeStylesheetInert(c.props['children']); } return c; }); } render() { var _this$props$nonce, _this$props$nonce2; const { styles, ampPath, inAmpMode, hybridAmp, canonicalBase, __NEXT_DATA__, dangerousAsPath, headTags, unstable_runtimeJS, unstable_JsPreload, disableOptimizedLoading } = this.context; const disableRuntimeJS = unstable_runtimeJS === false; const disableJsPreload = unstable_JsPreload === false || !disableOptimizedLoading; this.context.docComponentsRendered.Head = true; let { head } = this.context; let cssPreloads = []; let otherHeadElements = []; if (head) { head.forEach(c => { if (c && c.type === 'link' && c.props['rel'] === 'preload' && c.props['as'] === 'style') { cssPreloads.push(c); } else { c && otherHeadElements.push(c); } }); head = cssPreloads.concat(otherHeadElements); } let children = _react.default.Children.toArray(this.props.children).filter(Boolean); // show a warning if Head contains