{"version":3,"file":"main.6c598c6eafdd80b2.js","sources":["webpack:///../node_modules/@anttikissa/fisher-yates-shuffle/index.js","webpack:///../node_modules/ahooks/es/useLatest/index.js","webpack:///../node_modules/ahooks/es/createUpdateEffect/index.js","webpack:///../node_modules/ahooks/es/useThrottleFn/index.js","webpack:///../node_modules/ahooks/es/useUpdateEffect/index.js","webpack:///../node_modules/ahooks/es/useThrottleEffect/index.js","webpack:///../node_modules/ahooks/es/useUnmount/index.js","webpack:///../node_modules/ahooks/es/utils/index.js","webpack:///../node_modules/ahooks/es/utils/isDev.js","webpack:///../node_modules/cookie/dist/index.js","webpack:///../node_modules/detect-collisions/dist/base-system.js","webpack:///../node_modules/detect-collisions/dist/bodies/box.js","webpack:///../node_modules/detect-collisions/dist/bodies/circle.js","webpack:///../node_modules/detect-collisions/dist/bodies/ellipse.js","webpack:///../node_modules/detect-collisions/dist/bodies/line.js","webpack:///../node_modules/detect-collisions/dist/bodies/point.js","webpack:///../node_modules/detect-collisions/dist/bodies/polygon.js","webpack:///../node_modules/detect-collisions/dist/external/quickselect.js","webpack:///../node_modules/detect-collisions/dist/external/rbush.js","webpack:///../node_modules/detect-collisions/dist/index.js","webpack:///../node_modules/detect-collisions/dist/intersect.js","webpack:///../node_modules/detect-collisions/dist/model.js","webpack:///../node_modules/detect-collisions/dist/optimized.js","webpack:///../node_modules/detect-collisions/dist/system.js","webpack:///../node_modules/detect-collisions/dist/utils.js","webpack:///../node_modules/fast-deep-equal/index.js","webpack:///../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack:///../node_modules/invariant/browser.js","webpack:///../node_modules/lodash.throttle/index.js","webpack:///../node_modules/lodash/_Symbol.js","webpack:///../node_modules/lodash/_baseGetTag.js","webpack:///../node_modules/lodash/_baseTrim.js","webpack:///../node_modules/lodash/_freeGlobal.js","webpack:///../node_modules/lodash/_getRawTag.js","webpack:///../node_modules/lodash/_objectToString.js","webpack:///../node_modules/lodash/_root.js","webpack:///../node_modules/lodash/_trimmedEndIndex.js","webpack:///../node_modules/lodash/debounce.js","webpack:///../node_modules/lodash/isObject.js","webpack:///../node_modules/lodash/isObjectLike.js","webpack:///../node_modules/lodash/isSymbol.js","webpack:///../node_modules/lodash/now.js","webpack:///../node_modules/lodash/throttle.js","webpack:///../node_modules/lodash/toNumber.js","webpack:///../node_modules/performance-now/lib/performance-now.js","webpack:///../node_modules/poly-decomp-es/dist/poly-decomp-es.js","webpack:///../node_modules/prop-types/factoryWithThrowingShims.js","webpack:///../node_modules/prop-types/index.js","webpack:///../node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///../node_modules/raf/index.js","webpack:///../node_modules/react-dom/cjs/react-dom-client.production.js","webpack:///../node_modules/react-dom/cjs/react-dom.production.js","webpack:///../node_modules/react-dom/client.js","webpack:///../node_modules/react-dom/index.js","webpack:///../node_modules/react-fast-compare/index.js","webpack:///../node_modules/react-is/cjs/react-is.production.min.js","webpack:///../node_modules/react-is/index.js","webpack:///../node_modules/react/cjs/react-jsx-runtime.production.js","webpack:///../node_modules/react/cjs/react.production.js","webpack:///../node_modules/react/index.js","webpack:///../node_modules/react/jsx-runtime.js","webpack:///../node_modules/sat/SAT.js","webpack:///../node_modules/scheduler/cjs/scheduler.production.js","webpack:///../node_modules/scheduler/index.js","webpack:///../node_modules/shallowequal/index.js","webpack:///../node_modules/use-error-boundary/lib/index.module.js","webpack:///../node_modules/react-dnd-html5-backend/dist/getEmptyImage.js","webpack:///../node_modules/dnd-core/dist/interfaces.js","webpack:///../node_modules/react-dnd-html5-backend/dist/utils/js_utils.js","webpack:///../node_modules/react-dnd-html5-backend/dist/EnterLeaveCounter.js","webpack:///../node_modules/react-dnd-html5-backend/dist/NativeDragSources/NativeDragSource.js","webpack:///../node_modules/react-dnd-html5-backend/dist/NativeTypes.js","webpack:///../node_modules/react-dnd-html5-backend/dist/NativeDragSources/getDataFromDataTransfer.js","webpack:///../node_modules/react-dnd-html5-backend/dist/NativeDragSources/nativeTypesConfig.js","webpack:///../node_modules/react-dnd-html5-backend/dist/NativeDragSources/index.js","webpack:///../node_modules/react-dnd-html5-backend/dist/BrowserDetector.js","webpack:///../node_modules/react-dnd-html5-backend/dist/MonotonicInterpolant.js","webpack:///../node_modules/react-dnd-html5-backend/dist/OffsetUtils.js","webpack:///../node_modules/react-dnd-html5-backend/dist/OptionsReader.js","webpack:///../node_modules/react-dnd-html5-backend/dist/HTML5BackendImpl.js","webpack:///../node_modules/@react-dnd/invariant/dist/index.js","webpack:///../node_modules/react-dnd-touch-backend/dist/interfaces.js","webpack:///../node_modules/react-dnd-touch-backend/dist/OptionsReader.js","webpack:///../node_modules/react-dnd-touch-backend/dist/utils/predicates.js","webpack:///../node_modules/react-dnd-touch-backend/dist/utils/offsets.js","webpack:///../node_modules/react-dnd-touch-backend/dist/utils/supportsPassive.js","webpack:///../node_modules/react-dnd-touch-backend/dist/TouchBackendImpl.js","webpack:///../node_modules/react-dnd-touch-backend/dist/utils/math.js","webpack:///../node_modules/dnd-multi-backend/dist/index.js","webpack:///../node_modules/rdndmb-html5-to-touch/dist/index.js","webpack:///../node_modules/react-dnd-html5-backend/dist/index.js","webpack:///../node_modules/react-dnd-touch-backend/dist/index.js","webpack:///../node_modules/react-dnd/dist/hooks/useIsomorphicLayoutEffect.js","webpack:///../node_modules/react-dnd/dist/hooks/useCollector.js","webpack:///../node_modules/react-dnd/dist/hooks/useDragDropManager.js","webpack:///../node_modules/react-dnd/dist/hooks/useDragLayer.js","webpack:///../node_modules/react-dnd/dist/hooks/useCollectedProps.js","webpack:///../node_modules/react-dnd/dist/hooks/useMonitorOutput.js","webpack:///../node_modules/react-dnd/dist/hooks/useOptionalFactory.js","webpack:///../node_modules/@react-dnd/shallowequal/dist/index.js","webpack:///../node_modules/react-dnd/dist/internals/isRef.js","webpack:///../node_modules/react-dnd/dist/internals/wrapConnectorHooks.js","webpack:///../node_modules/react-dnd/dist/internals/SourceConnector.js","webpack:///../node_modules/react-dnd/dist/internals/DragSourceMonitorImpl.js","webpack:///../node_modules/react-dnd/dist/hooks/useDrag/DragSourceImpl.js","webpack:///../node_modules/redux/es/redux.js","webpack:///../node_modules/dnd-core/dist/utils/js_utils.js","webpack:///../node_modules/dnd-core/dist/actions/dragDrop/types.js","webpack:///../node_modules/dnd-core/dist/actions/dragDrop/local/setClientOffset.js","webpack:///../node_modules/dnd-core/dist/actions/dragDrop/beginDrag.js","webpack:///../node_modules/dnd-core/dist/utils/matchesType.js","webpack:///../node_modules/dnd-core/dist/classes/DragDropManagerImpl.js","webpack:///../node_modules/dnd-core/dist/actions/dragDrop/publishDragSource.js","webpack:///../node_modules/dnd-core/dist/actions/dragDrop/hover.js","webpack:///../node_modules/dnd-core/dist/actions/dragDrop/drop.js","webpack:///../node_modules/dnd-core/dist/actions/dragDrop/endDrag.js","webpack:///../node_modules/dnd-core/dist/actions/dragDrop/index.js","webpack:///../node_modules/dnd-core/dist/utils/coords.js","webpack:///../node_modules/dnd-core/dist/utils/dirtiness.js","webpack:///../node_modules/dnd-core/dist/classes/DragDropMonitorImpl.js","webpack:///../node_modules/@react-dnd/asap/dist/makeRequestCall.js","webpack:///../node_modules/@react-dnd/asap/dist/RawTask.js","webpack:///../node_modules/@react-dnd/asap/dist/asap.js","webpack:///../node_modules/@react-dnd/asap/dist/AsapQueue.js","webpack:///../node_modules/@react-dnd/asap/dist/TaskFactory.js","webpack:///../node_modules/dnd-core/dist/actions/registry.js","webpack:///../node_modules/dnd-core/dist/contracts.js","webpack:///../node_modules/dnd-core/dist/utils/getNextUniqueId.js","webpack:///../node_modules/dnd-core/dist/classes/HandlerRegistryImpl.js","webpack:///../node_modules/dnd-core/dist/utils/equality.js","webpack:///../node_modules/dnd-core/dist/reducers/dragOffset.js","webpack:///../node_modules/dnd-core/dist/reducers/dragOperation.js","webpack:///../node_modules/dnd-core/dist/reducers/index.js","webpack:///../node_modules/dnd-core/dist/reducers/dirtyHandlerIds.js","webpack:///../node_modules/dnd-core/dist/reducers/refCount.js","webpack:///../node_modules/dnd-core/dist/reducers/stateId.js","webpack:///../node_modules/react-dnd/dist/core/DndProvider.js","webpack:///../node_modules/dnd-core/dist/createDragDropManager.js","webpack:///../node_modules/react-dnd-preview/dist/index.js","webpack:///../node_modules/react-dnd-multi-backend/dist/index.js","webpack:///../node_modules/react-dnd/dist/internals/TargetConnector.js","webpack:///../node_modules/react-dnd/dist/internals/DropTargetMonitorImpl.js","webpack:///../node_modules/react-dnd/dist/hooks/useDrop/DropTargetImpl.js","webpack:///../node_modules/react-dnd/dist/hooks/useDrop/useDrop.js","webpack:///../node_modules/react-dnd/dist/hooks/useDrop/useDropTargetMonitor.js","webpack:///../node_modules/react-dnd/dist/hooks/useDrop/useDropTargetConnector.js","webpack:///../node_modules/react-dnd/dist/hooks/useDrop/useRegisteredDropTarget.js","webpack:///../node_modules/react-dnd/dist/hooks/useDrop/useDropTarget.js","webpack:///../node_modules/react-dnd/dist/hooks/useDrop/useAccept.js","webpack:///../node_modules/react-dnd/dist/internals/registration.js","webpack:///../node_modules/react-dnd/dist/hooks/useDrop/connectors.js","webpack:///./world/dnd.js","webpack:///../node_modules/react-dnd/dist/hooks/useDrag/useDrag.js","webpack:///../node_modules/react-dnd/dist/hooks/useDrag/useDragSourceMonitor.js","webpack:///../node_modules/react-dnd/dist/hooks/useDrag/useDragSourceConnector.js","webpack:///../node_modules/react-dnd/dist/hooks/useDrag/useRegisteredDragSource.js","webpack:///../node_modules/react-dnd/dist/hooks/useDrag/useDragSource.js","webpack:///../node_modules/react-dnd/dist/hooks/useDrag/useDragType.js","webpack:///../node_modules/react-dnd/dist/hooks/useDrag/connectors.js","webpack:///./world/exercises/Timer.js","webpack:///./world/exercises/base.js","webpack:///./world/fetch.js","webpack:///../node_modules/fscreen/dist/fscreen.esm.js","webpack:///./world/fullscreen.js","webpack:///./world/i18n.js","webpack:///./world/saving.js","webpack:///./world/utils.js","webpack:///./world/world.js","webpack:///../node_modules/@swc/helpers/esm/_array_like_to_array.js","webpack:///../node_modules/@swc/helpers/esm/_array_with_holes.js","webpack:///../node_modules/@swc/helpers/esm/_array_without_holes.js","webpack:///../node_modules/@swc/helpers/esm/_async_to_generator.js","webpack:///../node_modules/@swc/helpers/esm/_define_property.js","webpack:///../node_modules/@swc/helpers/esm/_iterable_to_array.js","webpack:///../node_modules/@swc/helpers/esm/_iterable_to_array_limit.js","webpack:///../node_modules/@swc/helpers/esm/_non_iterable_rest.js","webpack:///../node_modules/@swc/helpers/esm/_non_iterable_spread.js","webpack:///../node_modules/@swc/helpers/esm/_object_spread.js","webpack:///../node_modules/@swc/helpers/esm/_object_spread_props.js","webpack:///../node_modules/@swc/helpers/esm/_object_without_properties.js","webpack:///../node_modules/@swc/helpers/esm/_object_without_properties_loose.js","webpack:///../node_modules/@swc/helpers/esm/_sliced_to_array.js","webpack:///../node_modules/@swc/helpers/esm/_to_consumable_array.js","webpack:///../node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js","webpack:///../node_modules/react-dnd/dist/core/DndContext.js","webpack:///../node_modules/tslib/tslib.es6.mjs","webpack:///./utils.js","webpack:///../node_modules/react-helmet-async/lib/index.esm.js","webpack:///./world/exercises/textpuzzle.js","webpack:///../node_modules/react-router/dist/development/chunk-IR6S3I6Y.mjs","webpack:///./world/CityName.js","webpack:///./world/floatingLink.js","webpack:///../node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js","webpack:///../node_modules/ahooks/es/useRafState/index.js","webpack:///../node_modules/ahooks/es/utils/isBrowser.js","webpack:///../node_modules/ahooks/es/utils/domTarget.js","webpack:///../node_modules/ahooks/es/utils/depsAreSame.js","webpack:///../node_modules/ahooks/es/utils/createEffectWithTarget.js","webpack:///../node_modules/ahooks/es/utils/useEffectWithTarget.js","webpack:///../node_modules/ahooks/es/utils/useLayoutEffectWithTarget.js","webpack:///../node_modules/ahooks/es/utils/useIsomorphicLayoutEffectWithTarget.js","webpack:///../node_modules/ahooks/es/useSize/index.js","webpack:///./world/pannable.js","webpack:///./world/routes.js","webpack:///./world/sealedFloatingLink.js","webpack:///./world/city.js","webpack:///./world/assets.js","webpack:///./world/heroes.js","webpack:///./world/classbook.js","webpack:///./world/districtCollisions.js","webpack:///./world/exercises/OddOne.js","webpack:///../node_modules/react-dnd-scrolling/dist/index.js","webpack:///./world/exercises/calculation.js","webpack:///./world/exercises/categorization.js","webpack:///./world/exercises/memory.js","webpack:///./world/exercises/multipleChoice.js","webpack:///./world/exercises/quiz.js","webpack:///./world/exercises/text.js","webpack:///./world/exercises/hlc-video.js","webpack:///./world/exercises/resolution.js","webpack:///./world/exercises/index.js","webpack:///./world/ExerciseLoader.js","webpack:///./world/challenge.js","webpack:///./world/district.js","webpack:///./world/RandomHeroes.js","webpack:///./world/notFound.js","webpack:///./world/onboarding.js","webpack:///./world/profile.js","webpack:///./world/reflectionbook.js","webpack:///./world/start.js","webpack:///./main.js","webpack:///./scrollToTop.js","webpack:///./cardGame.js"],"sourcesContent":["function swap(a, i, j) {\n\tlet tmp = a[i]\n\ta[i] = a[j]\n\ta[j] = tmp\n}\n\n// Math.random, or a drop-in replacement\nlet mathRandom = Math.random\n\nfunction setRandom(random) {\n\tmathRandom = random\n}\n\n// Returns an integer in [0, n[\nfunction random(n) {\n\treturn (mathRandom() * n) | 0\n}\n\nfunction shuffle(a, options = { inPlace: false }) {\n\tlet result = options.inPlace ? a : [...a]\n\n\t// Fisher-Yates-Knuth-etc in-place sorting algorithm\n\tfor (let i = a.length - 1; i >= 0; i--) {\n\t\tlet randomIndex = random(i + 1)\n\t\tswap(result, i, randomIndex)\n\t}\n\n\t// This does it in the opposite order.\n\t// You see why the original algorithm chose to do it from end to beginning,\n\t// since the computation of randomIndex seems complicated in this version.\n\t// for (let i = 0; i < a.length; i++) {\n\t// \tlet randomIndex = a.length - 1 - random(a.length - i)\n\t// \tswap(result, i, randomIndex)\n\t// }\n\n\treturn result\n}\n\n/* globals module */\nmodule.exports = shuffle\nmodule.exports.setRandom = setRandom\n","import { useRef } from 'react';\nfunction useLatest(value) {\n var ref = useRef(value);\n ref.current = value;\n return ref;\n}\nexport default useLatest;","import { useRef } from 'react';\nexport var createUpdateEffect = function (hook) {\n return function (effect, deps) {\n var isMounted = useRef(false);\n // for react-refresh\n hook(function () {\n return function () {\n isMounted.current = false;\n };\n }, []);\n hook(function () {\n if (!isMounted.current) {\n isMounted.current = true;\n } else {\n return effect();\n }\n }, deps);\n };\n};\nexport default createUpdateEffect;","import { __read, __spreadArray } from \"tslib\";\nimport throttle from 'lodash/throttle';\nimport { useMemo } from 'react';\nimport useLatest from '../useLatest';\nimport useUnmount from '../useUnmount';\nimport { isFunction } from '../utils';\nimport isDev from '../utils/isDev';\nfunction useThrottleFn(fn, options) {\n var _a;\n if (isDev) {\n if (!isFunction(fn)) {\n console.error(\"useThrottleFn expected parameter is a function, got \".concat(typeof fn));\n }\n }\n var fnRef = useLatest(fn);\n var wait = (_a = options === null || options === void 0 ? void 0 : options.wait) !== null && _a !== void 0 ? _a : 1000;\n var throttled = useMemo(function () {\n return throttle(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fnRef.current.apply(fnRef, __spreadArray([], __read(args), false));\n }, wait, options);\n }, []);\n useUnmount(function () {\n throttled.cancel();\n });\n return {\n run: throttled,\n cancel: throttled.cancel,\n flush: throttled.flush\n };\n}\nexport default useThrottleFn;","import { useEffect } from 'react';\nimport { createUpdateEffect } from '../createUpdateEffect';\nexport default createUpdateEffect(useEffect);","import { __read } from \"tslib\";\nimport { useEffect, useState } from 'react';\nimport useThrottleFn from '../useThrottleFn';\nimport useUpdateEffect from '../useUpdateEffect';\nfunction useThrottleEffect(effect, deps, options) {\n var _a = __read(useState({}), 2),\n flag = _a[0],\n setFlag = _a[1];\n var run = useThrottleFn(function () {\n setFlag({});\n }, options).run;\n useEffect(function () {\n return run();\n }, deps);\n useUpdateEffect(effect, [flag]);\n}\nexport default useThrottleEffect;","import { useEffect } from 'react';\nimport useLatest from '../useLatest';\nimport { isFunction } from '../utils';\nimport isDev from '../utils/isDev';\nvar useUnmount = function (fn) {\n if (isDev) {\n if (!isFunction(fn)) {\n console.error(\"useUnmount expected parameter is a function, got \".concat(typeof fn));\n }\n }\n var fnRef = useLatest(fn);\n useEffect(function () {\n return function () {\n fnRef.current();\n };\n }, []);\n};\nexport default useUnmount;","export var isObject = function (value) {\n return value !== null && typeof value === 'object';\n};\nexport var isFunction = function (value) {\n return typeof value === 'function';\n};\nexport var isString = function (value) {\n return typeof value === 'string';\n};\nexport var isBoolean = function (value) {\n return typeof value === 'boolean';\n};\nexport var isNumber = function (value) {\n return typeof value === 'number';\n};\nexport var isUndef = function (value) {\n return typeof value === 'undefined';\n};","var isDev = process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test';\nexport default isDev;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parse = parse;\nexports.serialize = serialize;\n/**\n * RegExp to match cookie-name in RFC 6265 sec 4.1.1\n * This refers out to the obsoleted definition of token in RFC 2616 sec 2.2\n * which has been replaced by the token definition in RFC 7230 appendix B.\n *\n * cookie-name = token\n * token = 1*tchar\n * tchar = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" /\n * \"*\" / \"+\" / \"-\" / \".\" / \"^\" / \"_\" /\n * \"`\" / \"|\" / \"~\" / DIGIT / ALPHA\n *\n * Note: Allowing more characters - https://github.com/jshttp/cookie/issues/191\n * Allow same range as cookie value, except `=`, which delimits end of name.\n */\nconst cookieNameRegExp = /^[\\u0021-\\u003A\\u003C\\u003E-\\u007E]+$/;\n/**\n * RegExp to match cookie-value in RFC 6265 sec 4.1.1\n *\n * cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )\n * cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E\n * ; US-ASCII characters excluding CTLs,\n * ; whitespace DQUOTE, comma, semicolon,\n * ; and backslash\n *\n * Allowing more characters: https://github.com/jshttp/cookie/issues/191\n * Comma, backslash, and DQUOTE are not part of the parsing algorithm.\n */\nconst cookieValueRegExp = /^[\\u0021-\\u003A\\u003C-\\u007E]*$/;\n/**\n * RegExp to match domain-value in RFC 6265 sec 4.1.1\n *\n * domain-value = \n * ; defined in [RFC1034], Section 3.5, as\n * ; enhanced by [RFC1123], Section 2.1\n * =