From d1de1e357a889a350d682b03842ffca633bbf359 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sat, 17 Sep 2022 06:15:55 +1000 Subject: [PATCH 01/11] Fixes PromptFormatter import bug --- backend/server.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/server.py b/backend/server.py index 8dbbc65cb1..02fc0b487f 100644 --- a/backend/server.py +++ b/backend/server.py @@ -19,7 +19,8 @@ from uuid import uuid4 from ldm.gfpgan.gfpgan_tools import real_esrgan_upscale from ldm.gfpgan.gfpgan_tools import run_gfpgan from ldm.generate import Generate -from ldm.dream.pngwriter import PngWriter +from ldm.dream.pngwriter import PngWriter, retrieve_metadata + from modules.parameters import parameters_to_command, create_cmd_parser From f9feaac8c728162f43f917364b96203fee8071c9 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sat, 17 Sep 2022 06:16:16 +1000 Subject: [PATCH 02/11] Fixes metadata related to new args --- backend/server.py | 17 +++++++---------- ldm/dream/pngwriter.py | 8 +++++--- scripts/sd-metadata.py | 2 +- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/backend/server.py b/backend/server.py index 02fc0b487f..3d24656af0 100644 --- a/backend/server.py +++ b/backend/server.py @@ -147,15 +147,12 @@ def handle_request_all_images(): paths.sort(key=lambda x: os.path.getmtime(x)) image_array = [] for path in paths: - image = Image.open(path) - metadata = {} - if 'Dream' in image.info: - try: - metadata = vars(parser.parse_args(shlex.split(image.info['Dream']))) - except SystemExit: - # TODO: Unable to parse metadata, ignore it for now, - # this can happen when metadata is missing a prompt - pass + # image = Image.open(path) + all_metadata = retrieve_metadata(path) + if 'Dream' in all_metadata and not all_metadata['sd-metadata']: + metadata = vars(parser.parse_args(shlex.split(all_metadata['Dream']))) + else: + metadata = all_metadata['sd-metadata'] image_array.append({'path': path, 'metadata': metadata}) return make_response("OK", data=image_array) @@ -308,7 +305,7 @@ def save_image(image, parameters, output_dir, step_index=None, postprocessing=Fa command = parameters_to_command(parameters) - path = pngwriter.save_image_and_prompt_to_png(image, command, filename) + path = pngwriter.save_image_and_prompt_to_png(image, command, parameters, filename) return path diff --git a/ldm/dream/pngwriter.py b/ldm/dream/pngwriter.py index a8d2425b91..ecbc3c0e15 100644 --- a/ldm/dream/pngwriter.py +++ b/ldm/dream/pngwriter.py @@ -47,7 +47,8 @@ class PngWriter: metadata stored there, as a dict ''' path = os.path.join(self.outdir,img_basename) - return retrieve_metadata(path) + all_metadata = retrieve_metadata(path) + return all_metadata['sd-metadata'] def retrieve_metadata(img_path): ''' @@ -55,6 +56,7 @@ def retrieve_metadata(img_path): metadata stored there, as a dict ''' im = Image.open(img_path) - md = im.text.get('sd-metadata',{}) - return json.loads(md) + md = im.text.get('sd-metadata', '{}') + dream_prompt = im.text.get('Dream', '') + return {'sd-metadata': json.loads(md), 'Dream': dream_prompt} diff --git a/scripts/sd-metadata.py b/scripts/sd-metadata.py index a3438fa078..02d5002d60 100644 --- a/scripts/sd-metadata.py +++ b/scripts/sd-metadata.py @@ -13,7 +13,7 @@ filenames = sys.argv[1:] for f in filenames: try: metadata = retrieve_metadata(f) - print(f'{f}:\n',json.dumps(metadata, indent=4)) + print(f'{f}:\n',json.dumps(metadata['sd-metadata'], indent=4)) except FileNotFoundError: sys.stderr.write(f'{f} not found\n') continue From 67fbaa7c3106ee1c6461048cbff9111df5af0abc Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Fri, 16 Sep 2022 16:57:54 -0400 Subject: [PATCH 03/11] reconciled conflicting changes to pngwriter call --- backend/server.py | 2 +- ldm/dream/pngwriter.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/server.py b/backend/server.py index 3d24656af0..ef93c5b0d7 100644 --- a/backend/server.py +++ b/backend/server.py @@ -305,7 +305,7 @@ def save_image(image, parameters, output_dir, step_index=None, postprocessing=Fa command = parameters_to_command(parameters) - path = pngwriter.save_image_and_prompt_to_png(image, command, parameters, filename) + path = pngwriter.save_image_and_prompt_to_png(image, command, metadata=parameters, name=filename) return path diff --git a/ldm/dream/pngwriter.py b/ldm/dream/pngwriter.py index 5cda259357..9a2a8bc816 100644 --- a/ldm/dream/pngwriter.py +++ b/ldm/dream/pngwriter.py @@ -34,6 +34,7 @@ class PngWriter: # saves image named _image_ to outdir/name, writing metadata from prompt # returns full path of output def save_image_and_prompt_to_png(self, image, dream_prompt, name, metadata=None): + print(f'self.outdir={self.outdir}, name={name}') path = os.path.join(self.outdir, name) info = PngImagePlugin.PngInfo() info.add_text('Dream', dream_prompt) From e45f46d6731a6499871583bfa02a1739d969f06e Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sat, 17 Sep 2022 16:32:59 +1000 Subject: [PATCH 04/11] Improves code structure, comments, formatting, linting --- frontend/README.md | 88 +-- frontend/dist/assets/index.3d2e59c5.js | 694 +++++++++++++++++ frontend/dist/assets/index.cc5cde43.js | 695 ------------------ frontend/dist/index.html | 2 +- frontend/package.json | 3 +- frontend/src/App.tsx | 85 +-- frontend/src/app/parameterTranslation.ts | 8 +- frontend/src/components/SDButton.tsx | 19 +- frontend/src/components/SDNumberInput.tsx | 7 +- frontend/src/components/SDSelect.tsx | 95 ++- frontend/src/components/SDSwitch.tsx | 5 +- .../src/features/gallery/CurrentImage.tsx | 161 ---- .../features/gallery/CurrentImageButtons.tsx | 141 ++++ .../features/gallery/CurrentImageDisplay.tsx | 67 ++ .../src/features/gallery/DeleteImageModal.tsx | 121 +++ .../gallery/DeleteImageModalButton.tsx | 94 --- .../src/features/gallery/HoverableImage.tsx | 131 ++++ .../src/features/gallery/ImageGallery.tsx | 35 + .../features/gallery/ImageMetadataViewer.tsx | 222 +++--- frontend/src/features/gallery/ImageRoll.tsx | 150 ---- frontend/src/features/header/SiteHeader.tsx | 44 +- frontend/src/features/sd/ESRGANOptions.tsx | 111 +-- frontend/src/features/sd/GFPGANOptions.tsx | 79 +- .../src/features/sd/ImageToImageOptions.tsx | 79 +- frontend/src/features/sd/ImageUploader.tsx | 63 ++ .../{InitImage.css => InitAndMaskImage.css} | 0 frontend/src/features/sd/InitAndMaskImage.tsx | 57 ++ .../features/sd/InitAndMaskUploadButtons.tsx | 131 ++++ frontend/src/features/sd/InitImage.tsx | 155 ---- frontend/src/features/sd/MaskUploader.tsx | 61 -- frontend/src/features/sd/OptionsAccordion.tsx | 362 ++++----- frontend/src/features/sd/OutputOptions.tsx | 94 +-- frontend/src/features/sd/ProcessButtons.tsx | 84 ++- frontend/src/features/sd/PromptInput.tsx | 15 +- frontend/src/features/sd/SDSlider.tsx | 51 -- frontend/src/features/sd/SamplerOptions.tsx | 88 ++- .../src/features/sd/SeedVariationOptions.tsx | 257 ++++--- frontend/src/features/sd/Variant.tsx | 92 --- frontend/src/features/sd/sdSlice.ts | 18 +- frontend/src/features/system/LogViewer.tsx | 199 +++-- .../src/features/system/SettingsModal.tsx | 278 ++++--- .../src/features/system/useCheckParameters.ts | 158 ++-- 42 files changed, 2655 insertions(+), 2644 deletions(-) create mode 100644 frontend/dist/assets/index.3d2e59c5.js delete mode 100644 frontend/dist/assets/index.cc5cde43.js delete mode 100644 frontend/src/features/gallery/CurrentImage.tsx create mode 100644 frontend/src/features/gallery/CurrentImageButtons.tsx create mode 100644 frontend/src/features/gallery/CurrentImageDisplay.tsx create mode 100644 frontend/src/features/gallery/DeleteImageModal.tsx delete mode 100644 frontend/src/features/gallery/DeleteImageModalButton.tsx create mode 100644 frontend/src/features/gallery/HoverableImage.tsx create mode 100644 frontend/src/features/gallery/ImageGallery.tsx delete mode 100644 frontend/src/features/gallery/ImageRoll.tsx create mode 100644 frontend/src/features/sd/ImageUploader.tsx rename frontend/src/features/sd/{InitImage.css => InitAndMaskImage.css} (100%) create mode 100644 frontend/src/features/sd/InitAndMaskImage.tsx create mode 100644 frontend/src/features/sd/InitAndMaskUploadButtons.tsx delete mode 100644 frontend/src/features/sd/InitImage.tsx delete mode 100644 frontend/src/features/sd/MaskUploader.tsx delete mode 100644 frontend/src/features/sd/SDSlider.tsx delete mode 100644 frontend/src/features/sd/Variant.tsx diff --git a/frontend/README.md b/frontend/README.md index 6928e27b49..a611738808 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -1,85 +1,25 @@ # Stable Diffusion Web UI -Demo at https://peaceful-otter-7a427f.netlify.app/ (not connected to back end) - -much of this readme is just notes for myself during dev work - -numpy rand: 0 to 4294967295 - -## Test and Build +## Build from `frontend/`: -- `yarn dev` runs `tsc-watch`, which runs `vite build` on successful `tsc` transpilation +- `yarn dev` runs vite dev server +- `yarn build-dev` builds dev +- `yarn build` builds prod from `.`: -- `python backend/server.py` serves both frontend and backend at http://localhost:9090 - -## API - -`backend/server.py` serves the UI and provides a [socket.io](https://github.com/socketio/socket.io) API via [flask-socketio](https://github.com/miguelgrinberg/flask-socketio). - -### Server Listeners - -The server listens for these socket.io events: - -`cancel` - -- Cancels in-progress image generation -- Returns ack only - -`generateImage` - -- Accepts object of image parameters -- Generates an image -- Returns ack only (image generation function sends progress and result via separate events) - -`deleteImage` - -- Accepts file path to image -- Deletes image -- Returns ack only - -`deleteAllImages` WIP - -- Deletes all images in `outputs/` -- Returns ack only - -`requestAllImages` - -- Returns array of all images in `outputs/` - -`requestCapabilities` WIP - -- Returns capabilities of server (torch device, GFPGAN and ESRGAN availability, ???) - -`sendImage` WIP - -- Accepts a File and attributes -- Saves image -- Used to save init images which are not generated images - -### Server Emitters - -`progress` - -- Emitted during each step in generation -- Sends a number from 0 to 1 representing percentage of steps completed - -`result` WIP - -- Emitted when an image generation has completed -- Sends a object: - -``` -{ - url: relative_file_path, - metadata: image_metadata_object -} -``` +- `python backend/server.py` serves both frontend and backend at http://localhost:9090 ## TODO -- Search repo for "TODO" -- My one gripe with Chakra: no way to disable all animations right now and drop the dependence on `framer-motion`. I would prefer to save the ~30kb on bundle and have zero animations. This is on the Chakra roadmap. See https://github.com/chakra-ui/chakra-ui/pull/6368 for last discussion on this. Need to check in on this issue periodically. +- Search repo for "TODO" +- My one gripe with Chakra: no way to disable all animations right now and drop the dependence on + `framer-motion`. I would prefer to save the ~30kb on bundle and have zero animations. This is on + the Chakra roadmap. See https://github.com/chakra-ui/chakra-ui/pull/6368 for last discussion on + this. Need to check in on this issue periodically. +- More status info e.g. phase of processing, image we are on of the total count, etc +- Mobile friendly layout +- Proper image gallery/viewer/manager +- Instead of deleting images directly, use something like [send2trash](https://pypi.org/project/Send2Trash/) diff --git a/frontend/dist/assets/index.3d2e59c5.js b/frontend/dist/assets/index.3d2e59c5.js new file mode 100644 index 0000000000..ca609e8fa2 --- /dev/null +++ b/frontend/dist/assets/index.3d2e59c5.js @@ -0,0 +1,694 @@ +function WV(e,t){for(var r=0;ri[s]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))i(s);new MutationObserver(s=>{for(const c of s)if(c.type==="childList")for(const u of c.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&i(u)}).observe(document,{childList:!0,subtree:!0});function r(s){const c={};return s.integrity&&(c.integrity=s.integrity),s.referrerpolicy&&(c.referrerPolicy=s.referrerpolicy),s.crossorigin==="use-credentials"?c.credentials="include":s.crossorigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function i(s){if(s.ep)return;s.ep=!0;const c=r(s);fetch(s.href,c)}})();var lc=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function GV(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var D={exports:{}},OA={exports:{}};/** + * @license React + * react.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */(function(e,t){(function(){typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error);var r="18.2.0",i=Symbol.for("react.element"),s=Symbol.for("react.portal"),c=Symbol.for("react.fragment"),u=Symbol.for("react.strict_mode"),h=Symbol.for("react.profiler"),m=Symbol.for("react.provider"),v=Symbol.for("react.context"),b=Symbol.for("react.forward_ref"),x=Symbol.for("react.suspense"),C=Symbol.for("react.suspense_list"),_=Symbol.for("react.memo"),N=Symbol.for("react.lazy"),A=Symbol.for("react.offscreen"),I=Symbol.iterator,j="@@iterator";function M(S){if(S===null||typeof S!="object")return null;var R=I&&S[I]||S[j];return typeof R=="function"?R:null}var z={current:null},U={transition:null},V={current:null,isBatchingLegacy:!1,didScheduleLegacyUpdate:!1},K={current:null},X={},de=null;function ve(S){de=S}X.setExtraStackFrame=function(S){de=S},X.getCurrentStack=null,X.getStackAddendum=function(){var S="";de&&(S+=de);var R=X.getCurrentStack;return R&&(S+=R()||""),S};var se=!1,be=!1,Xe=!1,ie=!1,ce=!1,Re={ReactCurrentDispatcher:z,ReactCurrentBatchConfig:U,ReactCurrentOwner:K};Re.ReactDebugCurrentFrame=X,Re.ReactCurrentActQueue=V;function Ce(S){{for(var R=arguments.length,$=new Array(R>1?R-1:0),G=1;G1?R-1:0),G=1;G1){for(var Nt=Array(gt),pt=0;pt1){for(var Lt=Array(pt),wt=0;wt is not supported and will be removed in a future major release. Did you mean to render instead?")),R.Provider},set:function(xe){R.Provider=xe}},_currentValue:{get:function(){return R._currentValue},set:function(xe){R._currentValue=xe}},_currentValue2:{get:function(){return R._currentValue2},set:function(xe){R._currentValue2=xe}},_threadCount:{get:function(){return R._threadCount},set:function(xe){R._threadCount=xe}},Consumer:{get:function(){return $||($=!0,oe("Rendering is not supported and will be removed in a future major release. Did you mean to render instead?")),R.Consumer}},displayName:{get:function(){return R.displayName},set:function(xe){te||(Ce("Setting `displayName` on Context.Consumer has no effect. You should set it directly on the context with Context.displayName = '%s'.",xe),te=!0)}}}),R.Consumer=Fe}return R._currentRenderer=null,R._currentRenderer2=null,R}var cr=-1,Oa=0,Di=1,ka=2;function q(S){if(S._status===cr){var R=S._result,$=R();if($.then(function(Fe){if(S._status===Oa||S._status===cr){var xe=S;xe._status=Di,xe._result=Fe}},function(Fe){if(S._status===Oa||S._status===cr){var xe=S;xe._status=ka,xe._result=Fe}}),S._status===cr){var G=S;G._status=Oa,G._result=$}}if(S._status===Di){var te=S._result;return te===void 0&&oe(`lazy: Expected the result of a dynamic import() call. Instead received: %s + +Your code should look like: + const MyComponent = lazy(() => import('./MyComponent')) + +Did you accidentally put curly braces around the import?`,te),"default"in te||oe(`lazy: Expected the result of a dynamic import() call. Instead received: %s + +Your code should look like: + const MyComponent = lazy(() => import('./MyComponent'))`,te),te.default}else throw S._result}function Be(S){var R={_status:cr,_result:S},$={$$typeof:N,_payload:R,_init:q};{var G,te;Object.defineProperties($,{defaultProps:{configurable:!0,get:function(){return G},set:function(Fe){oe("React.lazy(...): It is not supported to assign `defaultProps` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),G=Fe,Object.defineProperty($,"defaultProps",{enumerable:!0})}},propTypes:{configurable:!0,get:function(){return te},set:function(Fe){oe("React.lazy(...): It is not supported to assign `propTypes` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),te=Fe,Object.defineProperty($,"propTypes",{enumerable:!0})}}})}return $}function qe(S){S!=null&&S.$$typeof===_?oe("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."):typeof S!="function"?oe("forwardRef requires a render function but was given %s.",S===null?"null":typeof S):S.length!==0&&S.length!==2&&oe("forwardRef render functions accept exactly two parameters: props and ref. %s",S.length===1?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined."),S!=null&&(S.defaultProps!=null||S.propTypes!=null)&&oe("forwardRef render functions do not support propTypes or defaultProps. Did you accidentally pass a React component?");var R={$$typeof:b,render:S};{var $;Object.defineProperty(R,"displayName",{enumerable:!1,configurable:!0,get:function(){return $},set:function(G){$=G,!S.name&&!S.displayName&&(S.displayName=G)}})}return R}var bt;bt=Symbol.for("react.module.reference");function nn(S){return!!(typeof S=="string"||typeof S=="function"||S===c||S===h||ce||S===u||S===x||S===C||ie||S===A||se||be||Xe||typeof S=="object"&&S!==null&&(S.$$typeof===N||S.$$typeof===_||S.$$typeof===m||S.$$typeof===v||S.$$typeof===b||S.$$typeof===bt||S.getModuleId!==void 0))}function gn(S,R){nn(S)||oe("memo: The first argument must be a component. Instead received: %s",S===null?"null":typeof S);var $={$$typeof:_,type:S,compare:R===void 0?null:R};{var G;Object.defineProperty($,"displayName",{enumerable:!1,configurable:!0,get:function(){return G},set:function(te){G=te,!S.name&&!S.displayName&&(S.displayName=te)}})}return $}function tt(){var S=z.current;return S===null&&oe(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons: +1. You might have mismatching versions of React and the renderer (such as React DOM) +2. You might be breaking the Rules of Hooks +3. You might have more than one copy of React in the same app +See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.`),S}function $t(S){var R=tt();if(S._context!==void 0){var $=S._context;$.Consumer===S?oe("Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be removed in a future major release. Did you mean to call useContext(Context) instead?"):$.Provider===S&&oe("Calling useContext(Context.Provider) is not supported. Did you mean to call useContext(Context) instead?")}return R.useContext(S)}function zn(S){var R=tt();return R.useState(S)}function In(S,R,$){var G=tt();return G.useReducer(S,R,$)}function an(S){var R=tt();return R.useRef(S)}function Lr(S,R){var $=tt();return $.useEffect(S,R)}function ci(S,R){var $=tt();return $.useInsertionEffect(S,R)}function _o(S,R){var $=tt();return $.useLayoutEffect(S,R)}function da(S,R){var $=tt();return $.useCallback(S,R)}function Qi(S,R){var $=tt();return $.useMemo(S,R)}function yu(S,R,$){var G=tt();return G.useImperativeHandle(S,R,$)}function fi(S,R){{var $=tt();return $.useDebugValue(S,R)}}function zs(){var S=tt();return S.useTransition()}function Pi(S){var R=tt();return R.useDeferredValue(S)}function Zt(){var S=tt();return S.useId()}function Mi(S,R,$){var G=tt();return G.useSyncExternalStore(S,R,$)}var pa=0,Eo,es,To,ts,ns,No,Ro;function rs(){}rs.__reactDisabledLog=!0;function Bs(){{if(pa===0){Eo=console.log,es=console.info,To=console.warn,ts=console.error,ns=console.group,No=console.groupCollapsed,Ro=console.groupEnd;var S={configurable:!0,enumerable:!0,value:rs,writable:!0};Object.defineProperties(console,{info:S,log:S,warn:S,error:S,group:S,groupCollapsed:S,groupEnd:S})}pa++}}function Us(){{if(pa--,pa===0){var S={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:Ie({},S,{value:Eo}),info:Ie({},S,{value:es}),warn:Ie({},S,{value:To}),error:Ie({},S,{value:ts}),group:Ie({},S,{value:ns}),groupCollapsed:Ie({},S,{value:No}),groupEnd:Ie({},S,{value:Ro})})}pa<0&&oe("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var di=Re.ReactCurrentDispatcher,Dr;function Da(S,R,$){{if(Dr===void 0)try{throw Error()}catch(te){var G=te.stack.trim().match(/\n( *(at )?)/);Dr=G&&G[1]||""}return` +`+Dr+S}}var ha=!1,Pa;{var as=typeof WeakMap=="function"?WeakMap:Map;Pa=new as}function Ao(S,R){if(!S||ha)return"";{var $=Pa.get(S);if($!==void 0)return $}var G;ha=!0;var te=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var Fe;Fe=di.current,di.current=null,Bs();try{if(R){var xe=function(){throw Error()};if(Object.defineProperty(xe.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(xe,[])}catch(Dt){G=Dt}Reflect.construct(S,[],xe)}else{try{xe.call()}catch(Dt){G=Dt}S.call(xe.prototype)}}else{try{throw Error()}catch(Dt){G=Dt}S()}}catch(Dt){if(Dt&&G&&typeof Dt.stack=="string"){for(var $e=Dt.stack.split(` +`),it=G.stack.split(` +`),gt=$e.length-1,Nt=it.length-1;gt>=1&&Nt>=0&&$e[gt]!==it[Nt];)Nt--;for(;gt>=1&&Nt>=0;gt--,Nt--)if($e[gt]!==it[Nt]){if(gt!==1||Nt!==1)do if(gt--,Nt--,Nt<0||$e[gt]!==it[Nt]){var pt=` +`+$e[gt].replace(" at new "," at ");return S.displayName&&pt.includes("")&&(pt=pt.replace("",S.displayName)),typeof S=="function"&&Pa.set(S,pt),pt}while(gt>=1&&Nt>=0);break}}}finally{ha=!1,di.current=Fe,Us(),Error.prepareStackTrace=te}var Lt=S?S.displayName||S.name:"",wt=Lt?Da(Lt):"";return typeof S=="function"&&Pa.set(S,wt),wt}function is(S,R,$){return Ao(S,!1)}function Nl(S){var R=S.prototype;return!!(R&&R.isReactComponent)}function ma(S,R,$){if(S==null)return"";if(typeof S=="function")return Ao(S,Nl(S));if(typeof S=="string")return Da(S);switch(S){case x:return Da("Suspense");case C:return Da("SuspenseList")}if(typeof S=="object")switch(S.$$typeof){case b:return is(S.render);case _:return ma(S.type,R,$);case N:{var G=S,te=G._payload,Fe=G._init;try{return ma(Fe(te),R,$)}catch{}}}return""}var Oo={},Ma=Re.ReactDebugCurrentFrame;function pi(S){if(S){var R=S._owner,$=ma(S.type,S._source,R?R.type:null);Ma.setExtraStackFrame($)}else Ma.setExtraStackFrame(null)}function js(S,R,$,G,te){{var Fe=Function.call.bind(fn);for(var xe in S)if(Fe(S,xe)){var $e=void 0;try{if(typeof S[xe]!="function"){var it=Error((G||"React class")+": "+$+" type `"+xe+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof S[xe]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw it.name="Invariant Violation",it}$e=S[xe](R,xe,G,$,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(gt){$e=gt}$e&&!($e instanceof Error)&&(pi(te),oe("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",G||"React class",$,xe,typeof $e),pi(null)),$e instanceof Error&&!($e.message in Oo)&&(Oo[$e.message]=!0,pi(te),oe("Failed %s type: %s",$,$e.message),pi(null))}}}function on(S){if(S){var R=S._owner,$=ma(S.type,S._source,R?R.type:null);ve($)}else ve(null)}var hi;hi=!1;function ko(){if(K.current){var S=Bt(K.current.type);if(S)return` + +Check the render method of \``+S+"`."}return""}function It(S){if(S!==void 0){var R=S.fileName.replace(/^.*[\\\/]/,""),$=S.lineNumber;return` + +Check your code at `+R+":"+$+"."}return""}function $s(S){return S!=null?It(S.__source):""}var yr={};function Ii(S){var R=ko();if(!R){var $=typeof S=="string"?S:S.displayName||S.name;$&&(R=` + +Check the top-level render call using <`+$+">.")}return R}function ja(S,R){if(!(!S._store||S._store.validated||S.key!=null)){S._store.validated=!0;var $=Ii(R);if(!yr[$]){yr[$]=!0;var G="";S&&S._owner&&S._owner!==K.current&&(G=" It was passed a child from "+Bt(S._owner.type)+"."),on(S),oe('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',$,G),on(null)}}}function Ji(S,R){if(typeof S=="object"){if(Yt(S))for(var $=0;$",te=" Did you accidentally export a JSX literal instead of a component?"):xe=typeof S,oe("React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",xe,te)}var $e=rt.apply(this,arguments);if($e==null)return $e;if(G)for(var it=2;it10&&Ce("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table."),G._updatedFibers.clear()}}}var eo=!1,mi=null;function Vs(S){if(mi===null)try{var R=("require"+Math.random()).slice(0,7),$=e&&e[R];mi=$.call(e,"timers").setImmediate}catch{mi=function(te){eo===!1&&(eo=!0,typeof MessageChannel>"u"&&oe("This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning."));var Fe=new MessageChannel;Fe.port1.onmessage=te,Fe.port2.postMessage(void 0)}}return mi(S)}var pn=0,Pn=!1;function Rl(S){{var R=pn;pn++,V.current===null&&(V.current=[]);var $=V.isBatchingLegacy,G;try{if(V.isBatchingLegacy=!0,G=S(),!$&&V.didScheduleLegacyUpdate){var te=V.current;te!==null&&(V.didScheduleLegacyUpdate=!1,fe(te))}}catch(Lt){throw Ia(R),Lt}finally{V.isBatchingLegacy=$}if(G!==null&&typeof G=="object"&&typeof G.then=="function"){var Fe=G,xe=!1,$e={then:function(Lt,wt){xe=!0,Fe.then(function(Dt){Ia(R),pn===0?W(Dt,Lt,wt):Lt(Dt)},function(Dt){Ia(R),wt(Dt)})}};return!Pn&&typeof Promise<"u"&&Promise.resolve().then(function(){}).then(function(){xe||(Pn=!0,oe("You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"))}),$e}else{var it=G;if(Ia(R),pn===0){var gt=V.current;gt!==null&&(fe(gt),V.current=null);var Nt={then:function(Lt,wt){V.current===null?(V.current=[],W(it,Lt,wt)):Lt(it)}};return Nt}else{var pt={then:function(Lt,wt){Lt(it)}};return pt}}}}function Ia(S){S!==pn-1&&oe("You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. "),pn=S}function W(S,R,$){{var G=V.current;if(G!==null)try{fe(G),Vs(function(){G.length===0?(V.current=null,R(S)):W(S,R,$)})}catch(te){$(te)}else R(S)}}var Q=!1;function fe(S){if(!Q){Q=!0;var R=0;try{for(;R0;){var Xt=dn-1>>>1,wn=je[Xt];if(v(wn,rt)>0)je[Xt]=rt,je[dn]=wn,dn=Xt;else return}}function m(je,rt,xt){for(var dn=xt,Xt=je.length,wn=Xt>>>1;dnxt&&(!je||ir()));){var dn=ie.callback;if(typeof dn=="function"){ie.callback=null,ce=ie.priorityLevel;var Xt=ie.expirationTime<=xt,wn=dn(Xt);xt=e.unstable_now(),typeof wn=="function"?ie.callback=wn:ie===c(se)&&u(se),we(xt)}else u(se);ie=c(se)}if(ie!==null)return!0;var Dn=c(be);return Dn!==null&&Tt(Ie,Dn.startTime-xt),!1}function st(je,rt){switch(je){case b:case x:case C:case _:case N:break;default:je=C}var xt=ce;ce=je;try{return rt()}finally{ce=xt}}function mt(je){var rt;switch(ce){case b:case x:case C:rt=C;break;default:rt=ce;break}var xt=ce;ce=rt;try{return je()}finally{ce=xt}}function Gt(je){var rt=ce;return function(){var xt=ce;ce=rt;try{return je.apply(this,arguments)}finally{ce=xt}}}function Qe(je,rt,xt){var dn=e.unstable_now(),Xt;if(typeof xt=="object"&&xt!==null){var wn=xt.delay;typeof wn=="number"&&wn>0?Xt=dn+wn:Xt=dn}else Xt=dn;var Dn;switch(je){case b:Dn=V;break;case x:Dn=K;break;case N:Dn=ve;break;case _:Dn=de;break;case C:default:Dn=X;break}var Nr=Xt+Dn,Tn={id:Xe++,callback:rt,priorityLevel:je,startTime:Xt,expirationTime:Nr,sortIndex:-1};return Xt>dn?(Tn.sortIndex=Xt,s(be,Tn),c(se)===null&&Tn===c(be)&&(oe?ke():oe=!0,Tt(Ie,Xt-dn))):(Tn.sortIndex=Nr,s(se,Tn),!Ce&&!Re&&(Ce=!0,Jt(Le))),Tn}function vt(){}function Et(){!Ce&&!Re&&(Ce=!0,Jt(Le))}function zt(){return c(se)}function We(je){je.callback=null}function Yt(){return ce}var ye=!1,Mt=null,Kt=-1,St=i,ar=-1;function ir(){var je=e.unstable_now()-ar;return!(je125){console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported");return}je>0?St=Math.floor(1e3/je):St=i}var kn=function(){if(Mt!==null){var je=e.unstable_now();ar=je;var rt=!0,xt=!0;try{xt=Mt(rt,je)}finally{xt?hn():(ye=!1,Mt=null)}}else ye=!1},hn;if(typeof pe=="function")hn=function(){pe(kn)};else if(typeof MessageChannel<"u"){var Ve=new MessageChannel,Ze=Ve.port2;Ve.port1.onmessage=kn,hn=function(){Ze.postMessage(null)}}else hn=function(){Se(kn,0)};function Jt(je){Mt=je,ye||(ye=!0,hn())}function Tt(je,rt){Kt=Se(function(){je(e.unstable_now())},rt)}function ke(){Te(Kt),Kt=-1}var jt=Bt,xn=null;e.unstable_IdlePriority=N,e.unstable_ImmediatePriority=b,e.unstable_LowPriority=_,e.unstable_NormalPriority=C,e.unstable_Profiling=xn,e.unstable_UserBlockingPriority=x,e.unstable_cancelCallback=We,e.unstable_continueExecution=Et,e.unstable_forceFrameRate=fn,e.unstable_getCurrentPriorityLevel=Yt,e.unstable_getFirstCallbackNode=zt,e.unstable_next=mt,e.unstable_pauseExecution=vt,e.unstable_requestPaint=jt,e.unstable_runWithPriority=st,e.unstable_scheduleCallback=Qe,e.unstable_shouldYield=ir,e.unstable_wrapCallback=Gt,typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error)})()})(v3);(function(e){e.exports=v3})(m3);/** + * @license React + * react-dom.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */(function(){typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error);var e=D.exports,t=m3.exports,r=e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,i=!1;function s(n){i=n}function c(n){if(!i){for(var a=arguments.length,o=new Array(a>1?a-1:0),f=1;f1?a-1:0),f=1;f2&&(n[0]==="o"||n[0]==="O")&&(n[1]==="n"||n[1]==="N")}function Nr(n,a,o,f){if(o!==null&&o.type===Ve)return!1;switch(typeof a){case"function":case"symbol":return!0;case"boolean":{if(f)return!1;if(o!==null)return!o.acceptsBooleans;var p=n.toLowerCase().slice(0,5);return p!=="data-"&&p!=="aria-"}default:return!1}}function Tn(n,a,o,f){if(a===null||typeof a>"u"||Nr(n,a,o,f))return!0;if(f)return!1;if(o!==null)switch(o.type){case Tt:return!a;case ke:return a===!1;case jt:return isNaN(a);case xn:return isNaN(a)||a<1}return!1}function ca(n){return Cn.hasOwnProperty(n)?Cn[n]:null}function Fn(n,a,o,f,p,y,w){this.acceptsBooleans=a===Jt||a===Tt||a===ke,this.attributeName=f,this.attributeNamespace=p,this.mustUseProperty=o,this.propertyName=n,this.type=a,this.sanitizeURL=y,this.removeEmptyString=w}var Cn={},fa=["children","dangerouslySetInnerHTML","defaultValue","defaultChecked","innerHTML","suppressContentEditableWarning","suppressHydrationWarning","style"];fa.forEach(function(n){Cn[n]=new Fn(n,Ve,!1,n,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(n){var a=n[0],o=n[1];Cn[a]=new Fn(a,Ze,!1,o,null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(n){Cn[n]=new Fn(n,Jt,!1,n.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(n){Cn[n]=new Fn(n,Jt,!1,n,null,!1,!1)}),["allowFullScreen","async","autoFocus","autoPlay","controls","default","defer","disabled","disablePictureInPicture","disableRemotePlayback","formNoValidate","hidden","loop","noModule","noValidate","open","playsInline","readOnly","required","reversed","scoped","seamless","itemScope"].forEach(function(n){Cn[n]=new Fn(n,Tt,!1,n.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(n){Cn[n]=new Fn(n,Tt,!0,n,null,!1,!1)}),["capture","download"].forEach(function(n){Cn[n]=new Fn(n,ke,!1,n,null,!1,!1)}),["cols","rows","size","span"].forEach(function(n){Cn[n]=new Fn(n,xn,!1,n,null,!1,!1)}),["rowSpan","start"].forEach(function(n){Cn[n]=new Fn(n,jt,!1,n.toLowerCase(),null,!1,!1)});var gr=/[\-\:]([a-z])/g,xo=function(n){return n[1].toUpperCase()};["accent-height","alignment-baseline","arabic-form","baseline-shift","cap-height","clip-path","clip-rule","color-interpolation","color-interpolation-filters","color-profile","color-rendering","dominant-baseline","enable-background","fill-opacity","fill-rule","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-name","glyph-orientation-horizontal","glyph-orientation-vertical","horiz-adv-x","horiz-origin-x","image-rendering","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","overline-position","overline-thickness","paint-order","panose-1","pointer-events","rendering-intent","shape-rendering","stop-color","stop-opacity","strikethrough-position","strikethrough-thickness","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-anchor","text-decoration","text-rendering","underline-position","underline-thickness","unicode-bidi","unicode-range","units-per-em","v-alphabetic","v-hanging","v-ideographic","v-mathematical","vector-effect","vert-adv-y","vert-origin-x","vert-origin-y","word-spacing","writing-mode","xmlns:xlink","x-height"].forEach(function(n){var a=n.replace(gr,xo);Cn[a]=new Fn(a,Ze,!1,n,null,!1,!1)}),["xlink:actuate","xlink:arcrole","xlink:role","xlink:show","xlink:title","xlink:type"].forEach(function(n){var a=n.replace(gr,xo);Cn[a]=new Fn(a,Ze,!1,n,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(n){var a=n.replace(gr,xo);Cn[a]=new Fn(a,Ze,!1,n,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(n){Cn[n]=new Fn(n,Ze,!1,n.toLowerCase(),null,!1,!1)});var Qo="xlinkHref";Cn[Qo]=new Fn("xlinkHref",Ze,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(n){Cn[n]=new Fn(n,Ze,!1,n.toLowerCase(),null,!0,!0)});var Jo=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*\:/i,wo=!1;function Co(n){!wo&&Jo.test(n)&&(wo=!0,u("A future version of React will block javascript: URLs as a security precaution. Use event handlers instead if you can. If you need to generate unsafe HTML try using dangerouslySetInnerHTML instead. React was passed %s.",JSON.stringify(n)))}function cr(n,a,o,f){if(f.mustUseProperty){var p=f.propertyName;return n[p]}else{ar(o,a),f.sanitizeURL&&Co(""+o);var y=f.attributeName,w=null;if(f.type===ke){if(n.hasAttribute(y)){var T=n.getAttribute(y);return T===""?!0:Tn(a,o,f,!1)?T:T===""+o?o:T}}else if(n.hasAttribute(y)){if(Tn(a,o,f,!1))return n.getAttribute(y);if(f.type===Tt)return o;w=n.getAttribute(y)}return Tn(a,o,f,!1)?w===null?o:w:w===""+o?o:w}}function Oa(n,a,o,f){{if(!wn(a))return;if(!n.hasAttribute(a))return o===void 0?void 0:null;var p=n.getAttribute(a);return ar(o,a),p===""+o?o:p}}function Di(n,a,o,f){var p=ca(a);if(!Dn(a,p,f)){if(Tn(a,o,p,f)&&(o=null),f||p===null){if(wn(a)){var y=a;o===null?n.removeAttribute(y):(ar(o,a),n.setAttribute(y,""+o))}return}var w=p.mustUseProperty;if(w){var T=p.propertyName;if(o===null){var O=p.type;n[T]=O===Tt?!1:""}else n[T]=o;return}var F=p.attributeName,H=p.attributeNamespace;if(o===null)n.removeAttribute(F);else{var ee=p.type,J;ee===Tt||ee===ke&&o===!0?J="":(ar(o,F),J=""+o,p.sanitizeURL&&Co(J.toString())),H?n.setAttributeNS(H,F,J):n.setAttribute(F,J)}}}var ka=Symbol.for("react.element"),q=Symbol.for("react.portal"),Be=Symbol.for("react.fragment"),qe=Symbol.for("react.strict_mode"),bt=Symbol.for("react.profiler"),nn=Symbol.for("react.provider"),gn=Symbol.for("react.context"),tt=Symbol.for("react.forward_ref"),$t=Symbol.for("react.suspense"),zn=Symbol.for("react.suspense_list"),In=Symbol.for("react.memo"),an=Symbol.for("react.lazy"),Lr=Symbol.for("react.scope"),ci=Symbol.for("react.debug_trace_mode"),_o=Symbol.for("react.offscreen"),da=Symbol.for("react.legacy_hidden"),Qi=Symbol.for("react.cache"),yu=Symbol.for("react.tracing_marker"),fi=Symbol.iterator,zs="@@iterator";function Pi(n){if(n===null||typeof n!="object")return null;var a=fi&&n[fi]||n[zs];return typeof a=="function"?a:null}var Zt=Object.assign,Mi=0,pa,Eo,es,To,ts,ns,No;function Ro(){}Ro.__reactDisabledLog=!0;function rs(){{if(Mi===0){pa=console.log,Eo=console.info,es=console.warn,To=console.error,ts=console.group,ns=console.groupCollapsed,No=console.groupEnd;var n={configurable:!0,enumerable:!0,value:Ro,writable:!0};Object.defineProperties(console,{info:n,log:n,warn:n,error:n,group:n,groupCollapsed:n,groupEnd:n})}Mi++}}function Bs(){{if(Mi--,Mi===0){var n={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:Zt({},n,{value:pa}),info:Zt({},n,{value:Eo}),warn:Zt({},n,{value:es}),error:Zt({},n,{value:To}),group:Zt({},n,{value:ts}),groupCollapsed:Zt({},n,{value:ns}),groupEnd:Zt({},n,{value:No})})}Mi<0&&u("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var Us=r.ReactCurrentDispatcher,di;function Dr(n,a,o){{if(di===void 0)try{throw Error()}catch(p){var f=p.stack.trim().match(/\n( *(at )?)/);di=f&&f[1]||""}return` +`+di+n}}var Da=!1,ha;{var Pa=typeof WeakMap=="function"?WeakMap:Map;ha=new Pa}function as(n,a){if(!n||Da)return"";{var o=ha.get(n);if(o!==void 0)return o}var f;Da=!0;var p=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var y;y=Us.current,Us.current=null,rs();try{if(a){var w=function(){throw Error()};if(Object.defineProperty(w.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(w,[])}catch(me){f=me}Reflect.construct(n,[],w)}else{try{w.call()}catch(me){f=me}n.call(w.prototype)}}else{try{throw Error()}catch(me){f=me}n()}}catch(me){if(me&&f&&typeof me.stack=="string"){for(var T=me.stack.split(` +`),O=f.stack.split(` +`),F=T.length-1,H=O.length-1;F>=1&&H>=0&&T[F]!==O[H];)H--;for(;F>=1&&H>=0;F--,H--)if(T[F]!==O[H]){if(F!==1||H!==1)do if(F--,H--,H<0||T[F]!==O[H]){var ee=` +`+T[F].replace(" at new "," at ");return n.displayName&&ee.includes("")&&(ee=ee.replace("",n.displayName)),typeof n=="function"&&ha.set(n,ee),ee}while(F>=1&&H>=0);break}}}finally{Da=!1,Us.current=y,Bs(),Error.prepareStackTrace=p}var J=n?n.displayName||n.name:"",he=J?Dr(J):"";return typeof n=="function"&&ha.set(n,he),he}function Ao(n,a,o){return as(n,!0)}function is(n,a,o){return as(n,!1)}function Nl(n){var a=n.prototype;return!!(a&&a.isReactComponent)}function ma(n,a,o){if(n==null)return"";if(typeof n=="function")return as(n,Nl(n));if(typeof n=="string")return Dr(n);switch(n){case $t:return Dr("Suspense");case zn:return Dr("SuspenseList")}if(typeof n=="object")switch(n.$$typeof){case tt:return is(n.render);case In:return ma(n.type,a,o);case an:{var f=n,p=f._payload,y=f._init;try{return ma(y(p),a,o)}catch{}}}return""}function Oo(n){switch(n._debugOwner&&n._debugOwner.type,n._debugSource,n.tag){case _:return Dr(n.type);case de:return Dr("Lazy");case V:return Dr("Suspense");case be:return Dr("SuspenseList");case m:case b:case X:return is(n.type);case z:return is(n.type.render);case v:return Ao(n.type);default:return""}}function Ma(n){try{var a="",o=n;do a+=Oo(o),o=o.return;while(o);return a}catch(f){return` +Error generating stack: `+f.message+` +`+f.stack}}function pi(n,a,o){var f=n.displayName;if(f)return f;var p=a.displayName||a.name||"";return p!==""?o+"("+p+")":o}function js(n){return n.displayName||"Context"}function on(n){if(n==null)return null;if(typeof n.tag=="number"&&u("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof n=="function")return n.displayName||n.name||null;if(typeof n=="string")return n;switch(n){case Be:return"Fragment";case q:return"Portal";case bt:return"Profiler";case qe:return"StrictMode";case $t:return"Suspense";case zn:return"SuspenseList"}if(typeof n=="object")switch(n.$$typeof){case gn:var a=n;return js(a)+".Consumer";case nn:var o=n;return js(o._context)+".Provider";case tt:return pi(n,n.render,"ForwardRef");case In:var f=n.displayName||null;return f!==null?f:on(n.type)||"Memo";case an:{var p=n,y=p._payload,w=p._init;try{return on(w(y))}catch{return null}}}return null}function hi(n,a,o){var f=a.displayName||a.name||"";return n.displayName||(f!==""?o+"("+f+")":o)}function ko(n){return n.displayName||"Context"}function It(n){var a=n.tag,o=n.type;switch(a){case Re:return"Cache";case j:var f=o;return ko(f)+".Consumer";case M:var p=o;return ko(p._context)+".Provider";case se:return"DehydratedFragment";case z:return hi(o,o.render,"ForwardRef");case A:return"Fragment";case _:return o;case C:return"Portal";case x:return"Root";case N:return"Text";case de:return on(o);case I:return o===qe?"StrictMode":"Mode";case ie:return"Offscreen";case U:return"Profiler";case Xe:return"Scope";case V:return"Suspense";case be:return"SuspenseList";case Ce:return"TracingMarker";case v:case m:case ve:case b:case K:case X:if(typeof o=="function")return o.displayName||o.name||null;if(typeof o=="string")return o;break}return null}var $s=r.ReactDebugCurrentFrame,yr=null,Ii=!1;function ja(){{if(yr===null)return null;var n=yr._debugOwner;if(n!==null&&typeof n<"u")return It(n)}return null}function Ji(){return yr===null?"":Ma(yr)}function Cr(){$s.getCurrentStack=null,yr=null,Ii=!1}function er(n){$s.getCurrentStack=n===null?null:Ji,yr=n,Ii=!1}function Do(){return yr}function Vr(n){Ii=n}function ur(n){return""+n}function ea(n){switch(typeof n){case"boolean":case"number":case"string":case"undefined":return n;case"object":return hn(n),n;default:return""}}var bu={button:!0,checkbox:!0,image:!0,hidden:!0,radio:!0,reset:!0,submit:!0};function eo(n,a){bu[a.type]||a.onChange||a.onInput||a.readOnly||a.disabled||a.value==null||u("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`."),a.onChange||a.readOnly||a.disabled||a.checked==null||u("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.")}function mi(n){var a=n.type,o=n.nodeName;return o&&o.toLowerCase()==="input"&&(a==="checkbox"||a==="radio")}function Vs(n){return n._valueTracker}function pn(n){n._valueTracker=null}function Pn(n){var a="";return n&&(mi(n)?a=n.checked?"true":"false":a=n.value),a}function Rl(n){var a=mi(n)?"checked":"value",o=Object.getOwnPropertyDescriptor(n.constructor.prototype,a);hn(n[a]);var f=""+n[a];if(!(n.hasOwnProperty(a)||typeof o>"u"||typeof o.get!="function"||typeof o.set!="function")){var p=o.get,y=o.set;Object.defineProperty(n,a,{configurable:!0,get:function(){return p.call(this)},set:function(T){hn(T),f=""+T,y.call(this,T)}}),Object.defineProperty(n,a,{enumerable:o.enumerable});var w={getValue:function(){return f},setValue:function(T){hn(T),f=""+T},stopTracking:function(){pn(n),delete n[a]}};return w}}function Ia(n){Vs(n)||(n._valueTracker=Rl(n))}function W(n){if(!n)return!1;var a=Vs(n);if(!a)return!0;var o=a.getValue(),f=Pn(n);return f!==o?(a.setValue(f),!0):!1}function Q(n){if(n=n||(typeof document<"u"?document:void 0),typeof n>"u")return null;try{return n.activeElement||n.body}catch{return n.body}}var fe=!1,at=!1,sn=!1,Mn=!1;function Vt(n){var a=n.type==="checkbox"||n.type==="radio";return a?n.checked!=null:n.value!=null}function S(n,a){var o=n,f=a.checked,p=Zt({},a,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:f??o._wrapperState.initialChecked});return p}function R(n,a){eo("input",a),a.checked!==void 0&&a.defaultChecked!==void 0&&!at&&(u("%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://reactjs.org/link/controlled-components",ja()||"A component",a.type),at=!0),a.value!==void 0&&a.defaultValue!==void 0&&!fe&&(u("%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://reactjs.org/link/controlled-components",ja()||"A component",a.type),fe=!0);var o=n,f=a.defaultValue==null?"":a.defaultValue;o._wrapperState={initialChecked:a.checked!=null?a.checked:a.defaultChecked,initialValue:ea(a.value!=null?a.value:f),controlled:Vt(a)}}function $(n,a){var o=n,f=a.checked;f!=null&&Di(o,"checked",f,!1)}function G(n,a){var o=n;{var f=Vt(a);!o._wrapperState.controlled&&f&&!Mn&&(u("A component is changing an uncontrolled input to be controlled. This is likely caused by the value changing from undefined to a defined value, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components"),Mn=!0),o._wrapperState.controlled&&!f&&!sn&&(u("A component is changing a controlled input to be uncontrolled. This is likely caused by the value changing from a defined to undefined, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components"),sn=!0)}$(n,a);var p=ea(a.value),y=a.type;if(p!=null)y==="number"?(p===0&&o.value===""||o.value!=p)&&(o.value=ur(p)):o.value!==ur(p)&&(o.value=ur(p));else if(y==="submit"||y==="reset"){o.removeAttribute("value");return}a.hasOwnProperty("value")?$e(o,a.type,p):a.hasOwnProperty("defaultValue")&&$e(o,a.type,ea(a.defaultValue)),a.checked==null&&a.defaultChecked!=null&&(o.defaultChecked=!!a.defaultChecked)}function te(n,a,o){var f=n;if(a.hasOwnProperty("value")||a.hasOwnProperty("defaultValue")){var p=a.type,y=p==="submit"||p==="reset";if(y&&(a.value===void 0||a.value===null))return;var w=ur(f._wrapperState.initialValue);o||w!==f.value&&(f.value=w),f.defaultValue=w}var T=f.name;T!==""&&(f.name=""),f.defaultChecked=!f.defaultChecked,f.defaultChecked=!!f._wrapperState.initialChecked,T!==""&&(f.name=T)}function Fe(n,a){var o=n;G(o,a),xe(o,a)}function xe(n,a){var o=a.name;if(a.type==="radio"&&o!=null){for(var f=n;f.parentNode;)f=f.parentNode;ar(o,"name");for(var p=f.querySelectorAll("input[name="+JSON.stringify(""+o)+'][type="radio"]'),y=0;y.")))}):a.dangerouslySetInnerHTML!=null&&(Nt||(Nt=!0,u("Pass a `value` prop if you set dangerouslyInnerHTML so React knows which value should be selected.")))),a.selected!=null&&!it&&(u("Use the `defaultValue` or `value` props on must be a scalar value if `multiple` is false.%s",o,va())}}}}function Nn(n,a,o,f){var p=n.options;if(a){for(var y=o,w={},T=0;T.");var f=Zt({},a,{value:void 0,defaultValue:void 0,children:ur(o._wrapperState.initialValue)});return f}function fv(n,a){var o=n;eo("textarea",a),a.value!==void 0&&a.defaultValue!==void 0&&!Ub&&(u("%s contains a textarea with both value and defaultValue props. Textarea elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled textarea and remove one of these props. More info: https://reactjs.org/link/controlled-components",ja()||"A component"),Ub=!0);var f=a.value;if(f==null){var p=a.children,y=a.defaultValue;if(p!=null){u("Use the `defaultValue` or `value` props instead of setting children on