@albi_scando/as-design-system-threejs-lib 1.0.7 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/as-design-system-threejs-lib.es.js +5425 -5347
- package/dist/as-design-system-threejs-lib.umd.js +152 -152
- package/dist/types/mappers/flags.mapper.d.ts +2 -0
- package/package.json +9 -9
- package/dist/textures/flags/br-BR.png +0 -0
- package/dist/textures/flags/de-CH.png +0 -0
- package/dist/textures/flags/de-DE.png +0 -0
- package/dist/textures/flags/en-AU.png +0 -0
- package/dist/textures/flags/en-UK.png +0 -0
- package/dist/textures/flags/en-US.png +0 -0
- package/dist/textures/flags/es-ES.png +0 -0
- package/dist/textures/flags/fr-FR.png +0 -0
- package/dist/textures/flags/hi-IN.png +0 -0
- package/dist/textures/flags/it-IT.png +0 -0
- package/dist/textures/flags/ja-JP.png +0 -0
- package/dist/textures/flags/pt-PT.png +0 -0
- package/dist/textures/flags/ru-RU.png +0 -0
- package/dist/textures/flags/zh-CN.png +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(Mi,ws){typeof exports=="object"&&typeof module<"u"?ws(exports):typeof define=="function"&&define.amd?define(["exports"],ws):(Mi=typeof globalThis<"u"?globalThis:Mi||self,ws(Mi["as-design-system-threejs-lib"]={}))})(this,(function(Mi){"use strict";const ws="as-design-system-threejs-lib";class nc{constructor(t=new Map){this.registerAllComponents(t)}registerAllComponents(t){Array.from(t.entries()).forEach(([e,i])=>{this.registerComponent(e,i)})}registerComponent(t,e){customElements.get(t)===void 0?(customElements.define(t,e),console.log(`Registered Web Component: ${t}`)):console.warn(`Web Component "${t}" is already registered.`)}}const IA={LANGUAGE_CHANGE_CONFIRMED:"language-change-confirmed"},Le={ENGLISH_UNITED_KINGDOM:"English",ENGLISH_UNITED_STATES:"English",ENGLISH_AUSTRALIA:"English",FRENCH:"French",GERMAN_GERMANY:"German",GERMAN_SWITZERLAND:"German",HINDI_INDIA:"Hindi",ITALIAN:"Italian",JAPANESE_JAPAN:"Japanese",PORTUGUESE_BRAZILIAN:"Portuguese",PORTUGUESE_PORTUGAL:"Portuguese",RUSSIAN:"Russian",SPANISH_SPAIN:"Spanish",CHINESE_CHINA:"Chinese"},Ne={ENGLISH_UNITED_KINGDOM:"English",ENGLISH_UNITED_STATES:"English",ENGLISH_AUSTRALIA:"English",FRENCH:"Français",GERMAN_GERMANY:"Deutsch",GERMAN_SWITZERLAND:"Deutsch",HINDI_INDIA:"हिन्दी",ITALIAN:"Italiano",JAPANESE_JAPAN:"日本語",PORTUGUESE_BRAZILIAN:"Português",PORTUGUESE_PORTUGAL:"Português",RUSSIAN:"Русский",SPANISH_SPAIN:"Español",CHINESE_CHINA:"中文"},Lt={ENGLISH_UNITED_KINGDOM:"en-UK",ENGLISH_UNITED_STATES:"en-US",ENGLISH_AUSTRALIA:"en-AU",FRENCH:"fr-FR",GERMAN_GERMANY:"de-DE",GERMAN_SWITZERLAND:"de-CH",HINDI_INDIA:"hi-IN",ITALIAN:"it-IT",JAPANESE_JAPAN:"ja-JP",PORTUGUESE_BRAZILIAN:"br-BR",PORTUGUESE_PORTUGAL:"pt-PT",RUSSIAN:"ru-RU",SPANISH_SPAIN:"es-ES",CHINESE_CHINA:"zh-CN"},Be={ENGLISH_UNITED_KINGDOM:"English (United Kingdom)",ENGLISH_UNITED_STATES:"English (United States)",ENGLISH_AUSTRALIA:"English (Australia)",FRENCH:"French",GERMAN_GERMANY:"German (Germany)",GERMAN_SWITZERLAND:"German (Switzerland)",HINDI_INDIA:"Hindi (India)",ITALIAN:"Italian",JAPANESE_JAPAN:"Japanese (Japan)",PORTUGUESE_BRAZILIAN:"Portuguese (Brazil)",PORTUGUESE_PORTUGAL:"Portuguese (Portugal)",RUSSIAN:"Russian",SPANISH_SPAIN:"Spanish (Spain)",CHINESE_CHINA:"Chinese (China)"},Qt={ENGLISH_UNITED_KINGDOM:"ENGLISH_UNITED_KINGDOM",ENGLISH_UNITED_STATES:"ENGLISH_UNITED_STATES",ENGLISH_AUSTRALIA:"ENGLISH_AUSTRALIA",FRENCH:"FRENCH",GERMAN_GERMANY:"GERMAN_GERMANY",GERMAN_SWITZERLAND:"GERMAN_SWITZERLAND",HINDI_INDIA:"HINDI_INDIA",ITALIAN:"ITALIAN",JAPANESE_JAPAN:"JAPANESE_JAPAN",PORTUGUESE_BRAZILIAN:"PORTUGUESE_BRAZILIAN",PORTUGUESE_PORTUGAL:"PORTUGUESE_PORTUGAL",RUSSIAN:"RUSSIAN",SPANISH_SPAIN:"SPANISH_SPAIN",CHINESE_CHINA:"CHINESE_CHINA"},Aa=new Map([[Qt.ENGLISH_UNITED_KINGDOM,{autonyms:Ne.ENGLISH_UNITED_KINGDOM,id:Qt.ENGLISH_UNITED_KINGDOM,isoCode:Lt.ENGLISH_UNITED_KINGDOM,language:Le.ENGLISH_UNITED_KINGDOM,name:Be.ENGLISH_UNITED_KINGDOM,value:Lt.ENGLISH_UNITED_KINGDOM}],[Qt.ENGLISH_UNITED_STATES,{autonyms:Ne.ENGLISH_UNITED_STATES,id:Qt.ENGLISH_UNITED_STATES,isoCode:Lt.ENGLISH_UNITED_STATES,language:Le.ENGLISH_UNITED_STATES,name:Be.ENGLISH_UNITED_STATES,value:Lt.ENGLISH_UNITED_STATES}],[Qt.ENGLISH_AUSTRALIA,{autonyms:Ne.ENGLISH_AUSTRALIA,id:Qt.ENGLISH_AUSTRALIA,isoCode:Lt.ENGLISH_AUSTRALIA,language:Le.ENGLISH_AUSTRALIA,name:Be.ENGLISH_AUSTRALIA,value:Lt.ENGLISH_AUSTRALIA}],[Qt.FRENCH,{autonyms:Ne.FRENCH,id:Qt.FRENCH,isoCode:Lt.FRENCH,language:Le.FRENCH,name:Be.FRENCH,value:Lt.FRENCH}],[Qt.GERMAN_GERMANY,{autonyms:Ne.GERMAN_GERMANY,id:Qt.GERMAN_GERMANY,isoCode:Lt.GERMAN_GERMANY,language:Le.GERMAN_GERMANY,name:Be.GERMAN_GERMANY,value:Lt.GERMAN_GERMANY}],[Qt.GERMAN_SWITZERLAND,{autonyms:Ne.GERMAN_SWITZERLAND,id:Qt.GERMAN_SWITZERLAND,isoCode:Lt.GERMAN_SWITZERLAND,language:Le.GERMAN_SWITZERLAND,name:Be.GERMAN_SWITZERLAND,value:Lt.GERMAN_SWITZERLAND}],[Qt.HINDI_INDIA,{autonyms:Ne.HINDI_INDIA,id:Qt.HINDI_INDIA,isoCode:Lt.HINDI_INDIA,language:Le.HINDI_INDIA,name:Be.HINDI_INDIA,value:Lt.HINDI_INDIA}],[Qt.ITALIAN,{autonyms:Ne.ITALIAN,id:Qt.ITALIAN,isoCode:Lt.ITALIAN,language:Le.ITALIAN,name:Be.ITALIAN,value:Lt.ITALIAN}],[Qt.JAPANESE_JAPAN,{autonyms:Ne.JAPANESE_JAPAN,id:Qt.JAPANESE_JAPAN,isoCode:Lt.JAPANESE_JAPAN,language:Le.JAPANESE_JAPAN,name:Be.JAPANESE_JAPAN,value:Lt.JAPANESE_JAPAN}],[Qt.PORTUGUESE_BRAZILIAN,{autonyms:Ne.PORTUGUESE_BRAZILIAN,id:Qt.PORTUGUESE_BRAZILIAN,isoCode:Lt.PORTUGUESE_BRAZILIAN,language:Le.PORTUGUESE_BRAZILIAN,name:Be.PORTUGUESE_BRAZILIAN,value:Lt.PORTUGUESE_BRAZILIAN}],[Qt.PORTUGUESE_PORTUGAL,{autonyms:Ne.PORTUGUESE_PORTUGAL,id:Qt.PORTUGUESE_PORTUGAL,isoCode:Lt.PORTUGUESE_PORTUGAL,language:Le.PORTUGUESE_PORTUGAL,name:Be.PORTUGUESE_PORTUGAL,value:Lt.PORTUGUESE_PORTUGAL}],[Qt.RUSSIAN,{autonyms:Ne.RUSSIAN,id:Qt.RUSSIAN,isoCode:Lt.RUSSIAN,language:Le.RUSSIAN,name:Be.RUSSIAN,value:Lt.RUSSIAN}],[Qt.SPANISH_SPAIN,{autonyms:Ne.SPANISH_SPAIN,id:Qt.SPANISH_SPAIN,isoCode:Lt.SPANISH_SPAIN,language:Le.SPANISH_SPAIN,name:Be.SPANISH_SPAIN,value:Lt.SPANISH_SPAIN}],[Qt.CHINESE_CHINA,{autonyms:Ne.CHINESE_CHINA,id:Qt.CHINESE_CHINA,isoCode:Lt.CHINESE_CHINA,language:Le.CHINESE_CHINA,name:Be.CHINESE_CHINA,value:Lt.CHINESE_CHINA}]]);`${btoa({CUSTOM_CROSSHAIR:`<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
2
2
|
<!-- White border (underneath) -->
|
|
3
3
|
<line x1="16" y1="2" x2="16" y2="30" stroke="white" stroke-width="5"/>
|
|
4
4
|
<line x1="2" y1="16" x2="30" y2="16" stroke="white" stroke-width="5"/>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<!-- Black crosshair lines (on top) -->
|
|
7
7
|
<line x1="16" y1="2" x2="16" y2="30" stroke="black" stroke-width="2"/>
|
|
8
8
|
<line x1="2" y1="16" x2="30" y2="16" stroke="black" stroke-width="2"/>
|
|
9
|
-
</svg>`}.CUSTOM_CROSSHAIR)}`;const
|
|
9
|
+
</svg>`}.CUSTOM_CROSSHAIR)}`;const sc={CLICK:"click"},xA={CONFIRMATION_DIALOG_CONFIRM:"confirmation-dialog-confirm"},rc="base-button",le="",vA={SHOW_MODAL:"show-modal",CLOSE:"close"};`${btoa({CUSTOM_CROSSHAIR:`<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
10
10
|
<!-- White border (underneath) -->
|
|
11
11
|
<line x1="16" y1="2" x2="16" y2="30" stroke="white" stroke-width="5"/>
|
|
12
12
|
<line x1="2" y1="16" x2="30" y2="16" stroke="white" stroke-width="5"/>
|
|
@@ -14,13 +14,13 @@
|
|
|
14
14
|
<!-- Black crosshair lines (on top) -->
|
|
15
15
|
<line x1="16" y1="2" x2="16" y2="30" stroke="black" stroke-width="2"/>
|
|
16
16
|
<line x1="2" y1="16" x2="30" y2="16" stroke="black" stroke-width="2"/>
|
|
17
|
-
</svg>`}.CUSTOM_CROSSHAIR)}`;const
|
|
17
|
+
</svg>`}.CUSTOM_CROSSHAIR)}`;const la={ANY:"any",NONE:"none"},EA={KEY_DOWN:"keydown"},zn={CLICK:"click"},ac=`<button part="button">
|
|
18
18
|
<slot></slot>
|
|
19
19
|
</button>
|
|
20
|
-
`,
|
|
20
|
+
`,oc=":where(button,input[type=button],input[type=submit],input[type=reset]),:where(input[type=file])::file-selector-button{cursor:pointer;-webkit-user-select:none;user-select:none;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);font-family:var(--font-family-base);letter-spacing:var(--letter-spacing-normal);line-height:var(--line-height-normal);padding-block:var(--button-padding-block-md);padding-inline:var(--button-padding-inline-md);display:inline-flex;justify-content:center;align-items:center;text-align:center;gap:var(--gap-sm);background:var(--color-bg-secondary);color:var(--color-text-primary);border:var(--border-width-1) solid var(--color-border-primary);border-radius:var(--border-radius-lg);transition:all var(--transition-base)}:where(button,input[type=button],input[type=submit],input[type=reset])>.material-symbols-outlined{font-size:var(--font-size-xl);font-family:Material Symbols Outlined;line-height:1}:where(button,input[type=button],input[type=submit],input[type=reset])[disabled]{opacity:.3;cursor:not-allowed}:where(button,input[type=button],input[type=submit],input[type=reset]):where(:not(:disabled):hover),:where(button,input[type=button],input[type=submit],input[type=reset]):where(:not(:disabled):active){background:var(--color-hover-bg-secondary);border-color:var(--color-hover-border-secondary)}:where(input[type=file]){inline-size:100%;max-inline-size:max-content;background-color:var(--color-bg-secondary)}",yA=new CSSStyleSheet;yA.replaceSync(oc);class Vt extends HTMLElement{static autofocusAttribute="autofocus";static commandAttribute="command";static commandforAttribute="commandfor";static disabledAttribute="disabled";static nameAttribute="name";static titleAttribute="title";static typeAttribute="type";static valueAttribute="value";constructor(){super(),this.attachShadow({mode:"open"}),this.shadowRoot?.adoptedStyleSheets.push(yA)}static get observedAttributes(){return[Vt.autofocusAttribute,Vt.commandAttribute,Vt.commandforAttribute,Vt.disabledAttribute,Vt.nameAttribute,Vt.titleAttribute,Vt.typeAttribute,Vt.valueAttribute]}get buttonElement(){return this.shadowRoot?.querySelector("button")}get autofocus(){return this.hasAttribute(Vt.autofocusAttribute)}set autofocus(t){t?this.setAttribute(Vt.autofocusAttribute,le):this.removeAttribute(Vt.autofocusAttribute)}get command(){return this.getAttribute(Vt.commandAttribute)??le}set command(t){this.setAttribute(Vt.commandAttribute,t)}get commandfor(){return this.getAttribute(Vt.commandforAttribute)??le}set commandfor(t){t!==le?this.setAttribute(Vt.commandforAttribute,t):this.removeAttribute(Vt.commandforAttribute)}get disabled(){return this.hasAttribute(Vt.disabledAttribute)}set disabled(t){t?this.setAttribute(Vt.disabledAttribute,le):this.removeAttribute(Vt.disabledAttribute)}get name(){return this.getAttribute(Vt.nameAttribute)??le}set name(t){t!==le?this.setAttribute(Vt.nameAttribute,t):this.removeAttribute(Vt.nameAttribute)}get headline(){return this.getAttribute(Vt.titleAttribute)??le}set headline(t){t!==le?this.setAttribute(Vt.titleAttribute,t):this.removeAttribute(Vt.titleAttribute)}get type(){return this.getAttribute(Vt.typeAttribute)??"button"}set type(t){t!==le?this.setAttribute(Vt.typeAttribute,t):this.removeAttribute(Vt.typeAttribute)}get value(){return this.getAttribute(Vt.valueAttribute)??"button"}set value(t){t!==le?this.setAttribute(Vt.valueAttribute,t):this.removeAttribute(Vt.valueAttribute)}connectedCallback(){this._render(),this._addEventListeners()}disconnectedCallback(){this._removeEventListeners()}attributeChangedCallback(t,e,i){i!==e&&this._syncAttribute(t)}_render(){this.shadowRoot!==null&&(this.shadowRoot.innerHTML=ac,this._syncAttributes())}_addEventListeners(){this.buttonElement.addEventListener(zn.CLICK,this._handleClick)}_removeEventListeners(){this.buttonElement.addEventListener(zn.CLICK,this._handleClick)}_handleClick=()=>{if(this.command===le||this.commandfor===le)return;let t=document.getElementById(this.commandfor);if(t??=this._findElementInShadowDOM(this.commandfor),t===null)return;const e=t;switch(this.command){case vA.SHOW_MODAL:e.showModal?.();break;case vA.CLOSE:e.close?.();break}};_findElementInShadowDOM(t){const e=`#${CSS.escape(t)}`;let i=this.querySelector(e);if(i!==null||(i=this._searchInShadowRootsOfChildren(this,e),i!==null))return i;let n=this.parentElement;for(;n!==null;){if(i=n.querySelector(e),i!==null||(i=this._searchInShadowRootsOfChildren(n,e),i!==null))return i;const r=n.parentElement;if(r!==null)n=r;else{const a=n.getRootNode();if(a instanceof ShadowRoot&&a.host!==null)n=a.host;else break}}return null}_searchInShadowRootsOfChildren(t,e){const i=t.children;for(const n of i){if(n.shadowRoot!==null){const a=n.shadowRoot.querySelector(e);if(a!==null)return a;const o=this._searchInShadowRootsOfChildren(n.shadowRoot,e);if(o!==null)return o}const r=this._searchInShadowRootsOfChildren(n,e);if(r!==null)return r}return null}_syncAttribute(t){const e=this.buttonElement;this.hasAttribute(t)?e.setAttribute(t,this.getAttribute(t)??le):e.removeAttribute(t)}_syncAttributes(){Vt.observedAttributes.forEach(t=>{this._syncAttribute(t)})}}const Ac=Object.freeze(Object.defineProperty({__proto__:null,BaseButtonComponent:Vt,selector:rc},Symbol.toStringTag,{value:"Module"}));new CSSStyleSheet().replaceSync("button[part=button]{background:var(--color-warning);font-weight:var(--font-weight-medium);padding-block:var(--button-padding-block-md);padding-inline:var(--button-padding-inline-md);border-radius:var(--border-radius-lg);border:none;box-shadow:var(--shadow-md);transition:all var(--transition-base);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:var(--gap-sm)}button[part=button]:hover{filter:brightness(1.2)}"),new CSSStyleSheet().replaceSync("button[part=button]{background:var(--color-success);font-weight:var(--font-weight-medium);padding-block:var(--button-padding-block-md);padding-inline:var(--button-padding-inline-md);border-radius:var(--border-radius-lg);border:none;box-shadow:var(--shadow-md);transition:all var(--transition-base);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:var(--gap-sm)}button[part=button]:hover{filter:brightness(1.2)}");const SA="confirm-button";new CSSStyleSheet().replaceSync("button[part=button]{border:none;background:transparent}button[part=button]:not(:disabled):hover{transform:scale(1.2)}"),new CSSStyleSheet().replaceSync("button[part=button]{border:none;background:transparent}button[part=button]:not(:disabled):hover{transform:scale(1.2)}");const lc=`<dialog part="dialog">
|
|
21
21
|
<slot></slot>
|
|
22
22
|
</dialog>
|
|
23
|
-
`,
|
|
23
|
+
`,hc="dialog{background-color:var(--color-bg-primary);color:var(--color-text-primary);border:var(--border-width-1) solid var(--color-border-secondary);border-radius:var(--border-radius-xl);padding:var(--spacing-4);max-width:90vw;max-height:90vh;font-family:var(--font-family-base);line-height:var(--line-height-normal);font-size:var(--font-size-sm);box-shadow:var(--shadow-2xl);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);animation:slideIn var(--transition-base) cubic-bezier(.34,1.56,.64,1) forwards}dialog.closing{animation:slideOut var(--transition-base) cubic-bezier(.34,1.56,.64,1) forwards}dialog::backdrop{background:var(--window-backdrop);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);animation:fadeIn var(--transition-base) ease-out forwards}dialog.closing::backdrop{animation:fadeOut var(--transition-base) ease-out forwards}@keyframes slideIn{0%{opacity:0;transform:scale(.95) translateY(-20px)}to{opacity:1;transform:scale(1) translateY(0)}}@keyframes slideOut{0%{opacity:1;transform:scale(1) translateY(0)}to{opacity:0;transform:scale(.95) translateY(-20px)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}",MA=new CSSStyleSheet;MA.replaceSync(hc);class hn extends HTMLElement{static closedByAttribute="closedby";_closedBy=la.ANY;constructor(){super(),this.attachShadow({mode:"open"}),this.shadowRoot?.adoptedStyleSheets.push(MA)}static get observedAttributes(){return[hn.closedByAttribute]}get dialogElement(){return this.shadowRoot?.querySelector("dialog")}get command(){return this.getAttribute(hn.closedByAttribute)??la.ANY}get closedBy(){return this._closedBy}set closedBy(t){this._closedBy=t,this.setAttribute(hn.closedByAttribute,t)}connectedCallback(){this._render(),this._addEventListeners()}disconnectedCallback(){this._removeEventListeners()}attributeChangedCallback(t,e,i){this.dialogElement!=null&&i!==e&&this._syncAttribute(t)}_addEventListeners(){}_removeEventListeners(){}_render(){this.shadowRoot!==null&&(this.shadowRoot.innerHTML=lc,this._syncAttributes())}_syncAttribute(t){const e=this.dialogElement;e!=null&&(this.hasAttribute(t)===!0?e.setAttribute(t,this.getAttribute(t)??le):e.removeAttribute(t))}_syncAttributes(){hn.observedAttributes.forEach(t=>{this._syncAttribute(t)})}show(){this.dialogElement.show()}showModal(){this.dialogElement.showModal()}close(t){const e=this.dialogElement;e.classList.add("closing"),setTimeout(()=>{e.close(t),e.classList.remove("closing")},300)}}const cc=`<dialog part="dialog">
|
|
24
24
|
<header part="header">
|
|
25
25
|
<h2></h2>
|
|
26
26
|
</header>
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
<undo-button></undo-button>
|
|
33
33
|
</footer>
|
|
34
34
|
</dialog>
|
|
35
|
-
`,
|
|
35
|
+
`,uc="dialog header[part=header] h2{margin:0;padding:0}dialog div[part=body] p{margin:0;padding:0}dialog footer[part=footer]{display:flex;gap:var(--gap-md);justify-content:flex-end}",dc=`<dialog part="dialog">
|
|
36
36
|
<header part="header">
|
|
37
37
|
<slot name="header"></slot>
|
|
38
38
|
</header>
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
<slot name="footer"></slot>
|
|
44
44
|
</footer>
|
|
45
45
|
</dialog>
|
|
46
|
-
`,
|
|
46
|
+
`,fc="dialog header[part=header]{border-bottom:var(--border-width-1) solid var(--color-neutral-600);padding-bottom:var(--spacing-4)}dialog header[part=header]:empty{display:none}dialog div[part=body]{padding:var(--spacing-4) 0}dialog div[part=body]:empty{display:none}dialog footer[part=footer]{border-top:var(--border-width-1) solid var(--color-neutral-600);padding-top:var(--spacing-4)}dialog footer[part=footer]:empty{display:none}",bA=new CSSStyleSheet;bA.replaceSync(fc);class TA extends hn{constructor(){super(),this.shadowRoot?.adoptedStyleSheets.push(bA)}static get observedAttributes(){return hn.observedAttributes}_render(){this.shadowRoot!==null&&(this.shadowRoot.innerHTML=dc,this._syncAttributes())}}const wA=new CSSStyleSheet;wA.replaceSync(uc);class Qe extends TA{_headline=le;_text=le;_value;static textAttribute="text";static headlineAttribute="headline";static valueAttribute="value";constructor(){super(),this.shadowRoot?.adoptedStyleSheets.push(wA)}static get observedAttributes(){return[...TA.observedAttributes,Qe.textAttribute,Qe.headlineAttribute,Qe.valueAttribute]}get headline(){return this._headline}set headline(t){this._headline=t,this.setAttribute(Qe.headlineAttribute,t)}get text(){return this._text}set text(t){this._text=t,this.setAttribute(Qe.textAttribute,t)}get value(){return this._value}set value(t){this._value=t}connectedCallback(){this._render(),this._addEventListeners(),this.closedBy=la.NONE}_render(){this.shadowRoot!==null&&(this.shadowRoot.innerHTML=cc,this._syncAttributes())}_syncAttribute(t){if(Qe.observedAttributes.includes(t))switch(t){case Qe.headlineAttribute:{this._headline=this.getAttribute(t)??le;const e=this.shadowRoot?.querySelector("h2");e!=null&&(e.textContent=this._headline);break}case Qe.textAttribute:{this._text=this.getAttribute(t)??le;const e=this.shadowRoot?.querySelector("p");e!=null&&(e.textContent=this._text);break}case Qe.valueAttribute:{this._value=this.getAttribute(t);break}default:super._syncAttribute(t)}else super._syncAttribute(t)}_syncAttributes(){super._syncAttributes(),Qe.observedAttributes.forEach(t=>{this._syncAttribute(t)})}_addEventListeners(){super._addEventListeners(),this.shadowRoot?.querySelector(SA)?.addEventListener(zn.CLICK,this._handleConfirm)}_removeEventListeners(){super._removeEventListeners(),this.shadowRoot?.querySelector(SA)?.removeEventListener(zn.CLICK,this._handleConfirm)}_handleConfirm=()=>{const t=new CustomEvent(xA.CONFIRMATION_DIALOG_CONFIRM,{bubbles:!0,composed:!0,detail:{value:this._value}});this.dispatchEvent(t)}}const gc="confirmation-dialog",pc={CONFIRMATION_DIALOG_CONFIRM:xA.CONFIRMATION_DIALOG_CONFIRM},_A=Object.freeze(Object.defineProperty({__proto__:null,COMPONENT_CUSTOM_MESSAGES:pc,ConfirmationDialogComponent:Qe,selector:gc},Symbol.toStringTag,{value:"Module"})),mc=`<div class="bar-menu-container">
|
|
47
47
|
<previous-button class="nav-prev" part="nav-prev-button"></previous-button>
|
|
48
48
|
|
|
49
49
|
<div class="buttons-wrapper" part="buttons-wrapper">
|
|
@@ -52,11 +52,11 @@
|
|
|
52
52
|
|
|
53
53
|
<next-button class="nav-next" part="nav-next-button"></next-button>
|
|
54
54
|
</div>
|
|
55
|
-
`,xu=":host{display:block;width:100%}.bar-menu-container{display:flex;align-items:center;justify-content:space-between;height:100%;gap:var(--gap-sm);padding:var(--spacing-1);background:var(--color-bg-primary);border-radius:var(--border-radius-full);border:var(--border-width-2) solid var(--color-border-secondary);box-shadow:var(--shadow-sm);margin:0 auto}.bar-menu-container .nav-prev,.bar-menu-container .nav-next{flex-shrink:0;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .2s ease-in-out,visibility .2s ease-in-out}.bar-menu-container .nav-prev.visible,.bar-menu-container .nav-next.visible{opacity:1;visibility:visible;pointer-events:auto}.bar-menu-container .nav-prev::part(button),.bar-menu-container .nav-next::part(button){background-color:transparent;box-shadow:none}.bar-menu-container .buttons-wrapper{display:grid;grid-template-columns:repeat(var(--bar-menu-visible-count, 3),1fr);grid-auto-rows:max-content;align-items:center;justify-items:center;gap:var(--gap-sm);overflow:hidden;position:relative;width:auto}::slotted(*){display:none;flex-shrink:0;will-change:opacity,transform;contain:layout style paint;opacity:0;transform:scale(.8)}::slotted(.animating){transition:opacity .4s cubic-bezier(.34,1.56,.64,1),transform .4s cubic-bezier(.34,1.56,.64,1)}::slotted(.visible-button){display:inline-flex!important;pointer-events:auto;opacity:1;transform:scale(1)}",Pl=new CSSStyleSheet;Pl.replaceSync(xu);class ti extends HTMLElement{static _visibleCountAttribute="visible-count";static _cyclicalNavigationAttribute="cyclical-navigation";_currentIndex=0;_visibleCount=3;_cyclicalNavigation=!1;_MIN_VISIBLE=1;_MAX_VISIBLE=5;_slotElement=null;_navPrevButton=null;_navNextButton=null;_buttonsWrapper=null;_slotChangeListener=null;_keyDownListener=null;constructor(){super(),this.attachShadow({mode:"open"}),this.shadowRoot?.adoptedStyleSheets.push(Pl)}static get observedAttributes(){return[ti._visibleCountAttribute,ti._cyclicalNavigationAttribute]}get visibleButtons(){const t=this.getAttribute(ti._visibleCountAttribute);if(t!==null&&t!==oe){const e=parseInt(t,10);return Math.max(this._MIN_VISIBLE,Math.min(this._MAX_VISIBLE,e))}return this._visibleCount}set visibleButtons(t){const e=Math.max(this._MIN_VISIBLE,Math.min(this._MAX_VISIBLE,t));this.setAttribute(ti._visibleCountAttribute,String(e))}get cyclicalNavigation(){return this.hasAttribute(ti._cyclicalNavigationAttribute)}set cyclicalNavigation(t){t?this.setAttribute(ti._cyclicalNavigationAttribute,oe):this.removeAttribute(ti._cyclicalNavigationAttribute)}connectedCallback(){this._render(),this._cacheElements(),this._setupSlotListener(),this._setupKeyboardListener(),this._updateButtonVisibility()}disconnectedCallback(){this._removeSlotListener(),this._removeKeyboardListener()}attributeChangedCallback(t,e,i){t===ti._visibleCountAttribute?(this._visibleCount=this.visibleButtons,this._buttonsWrapper!==null&&this._buttonsWrapper.style.setProperty("--bar-menu-visible-count",String(this.visibleButtons)),this._updateButtonVisibility()):t===ti._cyclicalNavigationAttribute&&(this._cyclicalNavigation=this.cyclicalNavigation,this._updateButtonVisibility())}_render(){this.shadowRoot!==null&&(this.shadowRoot.innerHTML=_u)}_cacheElements(){this._slotElement=this.shadowRoot?.querySelector("slot")??null,this._navPrevButton=this.shadowRoot?.querySelector(".nav-prev")??null,this._navNextButton=this.shadowRoot?.querySelector(".nav-next")??null,this._buttonsWrapper=this.shadowRoot?.querySelector(".buttons-wrapper")??null,this._buttonsWrapper!==null&&this._buttonsWrapper.style.setProperty("--bar-menu-visible-count",String(this.visibleButtons)),this._navPrevButton!==null&&(this._navPrevButton.setAttribute("aria-label","Previous"),this._navPrevButton.addEventListener(Bn.CLICK,()=>{this._scrollPrevious()})),this._navNextButton!==null&&(this._navNextButton.setAttribute("aria-label","Next"),this._navNextButton.addEventListener(Bn.CLICK,()=>{this._scrollNext()}))}_setupSlotListener(){this._slotElement!==null&&(this._slotChangeListener=()=>{this._currentIndex=0,this._updateButtonVisibility()},this._slotElement.addEventListener("slotchange",this._slotChangeListener))}_removeSlotListener(){this._slotElement!==null&&this._slotChangeListener!==null&&this._slotElement.removeEventListener("slotchange",this._slotChangeListener)}_setupKeyboardListener(){this._keyDownListener=t=>{t.key==="ArrowLeft"?(t.preventDefault(),this._scrollPrevious()):t.key==="ArrowRight"&&(t.preventDefault(),this._scrollNext())},this.addEventListener(Sl.KEY_DOWN,this._keyDownListener)}_removeKeyboardListener(){this._keyDownListener!==null&&this.removeEventListener(Sl.KEY_DOWN,this._keyDownListener)}_getSlottedButtons(){return this._slotElement===null?[]:this._slotElement.assignedElements()}_updateButtonVisibility(t){const e=this._getSlottedButtons(),i=e.length,n=this.visibleButtons,r=this._currentIndex,a=Math.min(r+n,i);e.forEach((o,h)=>{const l=h>=r&&h<a,c=o;l||(o.classList.remove("visible-button"),o.classList.remove("animating"),c.style.display="none")}),t!==void 0?(e[0]?.offsetHeight,e.forEach((o,h)=>{if(h>=r&&h<a){const l=o;l.style.display="inline-flex",o.classList.add("animating");const c=h%this.visibleButtons*50;l.style.transitionDelay=`${c}ms`}}),e[0]?.offsetHeight,e.forEach((o,h)=>{h>=r&&h<a&&o.classList.add("visible-button")}),setTimeout(()=>{e.forEach(o=>{o.classList.remove("animating"),o.style.transitionDelay=oe})},400)):e.forEach((o,h)=>{const l=h>=r&&h<a,c=o;l&&(c.style.display="inline-flex",o.classList.add("visible-button"))}),this._updateNavigationButtons(i,n)}_updateNavigationButtons(t,e){const i=t>e,n=this._currentIndex+e<t,r=this._currentIndex===0,a=!n;this._navPrevButton!==null&&(i?(this._navPrevButton.classList.add("visible"),this._navPrevButton.disabled=!this._cyclicalNavigation&&r):this._navPrevButton.classList.remove("visible")),this._navNextButton!==null&&(i?(this._navNextButton.classList.add("visible"),this._navNextButton.disabled=!this._cyclicalNavigation&&a):this._navNextButton.classList.remove("visible"))}_scrollPrevious(){const t=this._getSlottedButtons().length,e=this.visibleButtons;this._currentIndex>0?(this._currentIndex=Math.max(0,this._currentIndex-e),this._updateButtonVisibility("previous")):this._cyclicalNavigation&&t>e&&(this._currentIndex=Math.max(0,t-e),this._updateButtonVisibility("previous"))}_scrollNext(){const t=this._getSlottedButtons().length,e=this.visibleButtons,i=this._currentIndex+e;i<t?(this._currentIndex=i,this._updateButtonVisibility("next")):this._cyclicalNavigation&&t>e&&(this._currentIndex=0,this._updateButtonVisibility("next"))}scrollToButton(t){const e=this._getSlottedButtons().length,i=this.visibleButtons;t>=0&&t<e&&(this._currentIndex=Math.max(0,Math.min(t,e-i)),this._updateButtonVisibility())}getVisibleButtons(){return this._getSlottedButtons().filter(t=>t.classList.contains("visible-button"))}getAllButtons(){return this._getSlottedButtons()}getCurrentIndex(){return this._currentIndex}}const vu="bar-menu",yu=Object.freeze(Object.defineProperty({__proto__:null,BarMenuComponent:ti,selector:vu},Symbol.toStringTag,{value:"Module"})),ze="srgb",Il="srgb-linear",Ll="linear",ca="srgb";function Mu(s){for(let t=s.length-1;t>=0;--t)if(s[t]>=65535)return!0;return!1}function Dl(s){return document.createElementNS("http://www.w3.org/1999/xhtml",s)}const Ul={};function Nl(s){const t=s[0];if(typeof t=="string"&&t.startsWith("TSL:")){const e=s[1];e&&e.isStackTrace?s[0]+=" "+e.getLocation():s[1]='Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.'}return s}function Te(...s){s=Nl(s);const t="THREE."+s.shift();{const e=s[0];e&&e.isStackTrace?console.warn(e.getError(t)):console.warn(t,...s)}}function un(...s){s=Nl(s);const t="THREE."+s.shift();{const e=s[0];e&&e.isStackTrace?console.error(e.getError(t)):console.error(t,...s)}}function Fl(...s){const t=s.join(" ");t in Ul||(Ul[t]=!0,Te(...s))}class rr{addEventListener(t,e){this._listeners===void 0&&(this._listeners={});const i=this._listeners;i[t]===void 0&&(i[t]=[]),i[t].indexOf(e)===-1&&i[t].push(e)}hasEventListener(t,e){const i=this._listeners;return i===void 0?!1:i[t]!==void 0&&i[t].indexOf(e)!==-1}removeEventListener(t,e){const i=this._listeners;if(i===void 0)return;const n=i[t];if(n!==void 0){const r=n.indexOf(e);r!==-1&&n.splice(r,1)}}dispatchEvent(t){const e=this._listeners;if(e===void 0)return;const i=e[t.type];if(i!==void 0){t.target=this;const n=i.slice(0);for(let r=0,a=n.length;r<a;r++)n[r].call(this,t);t.target=null}}}const Ae=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];function Cs(){const s=Math.random()*4294967295|0,t=Math.random()*4294967295|0,e=Math.random()*4294967295|0,i=Math.random()*4294967295|0;return(Ae[s&255]+Ae[s>>8&255]+Ae[s>>16&255]+Ae[s>>24&255]+"-"+Ae[t&255]+Ae[t>>8&255]+"-"+Ae[t>>16&15|64]+Ae[t>>24&255]+"-"+Ae[e&63|128]+Ae[e>>8&255]+"-"+Ae[e>>16&255]+Ae[e>>24&255]+Ae[i&255]+Ae[i>>8&255]+Ae[i>>16&255]+Ae[i>>24&255]).toLowerCase()}function Gt(s,t,e){return Math.max(t,Math.min(e,s))}function Su(s,t){return(s%t+t)%t}function ua(s,t,e){return(1-e)*s+e*t}function Ps(s,t){switch(t.constructor){case Float32Array:return s;case Uint32Array:return s/4294967295;case Uint16Array:return s/65535;case Uint8Array:return s/255;case Int32Array:return Math.max(s/2147483647,-1);case Int16Array:return Math.max(s/32767,-1);case Int8Array:return Math.max(s/127,-1);default:throw new Error("Invalid component type.")}}function De(s,t){switch(t.constructor){case Float32Array:return s;case Uint32Array:return Math.round(s*4294967295);case Uint16Array:return Math.round(s*65535);case Uint8Array:return Math.round(s*255);case Int32Array:return Math.round(s*2147483647);case Int16Array:return Math.round(s*32767);case Int8Array:return Math.round(s*127);default:throw new Error("Invalid component type.")}}class Be{constructor(t=0,e=0){Be.prototype.isVector2=!0,this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,i=this.y,n=t.elements;return this.x=n[0]*e+n[3]*i+n[6],this.y=n[1]*e+n[4]*i+n[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Gt(this.x,t.x,e.x),this.y=Gt(this.y,t.y,e.y),this}clampScalar(t,e){return this.x=Gt(this.x,t,e),this.y=Gt(this.y,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Gt(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(Gt(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y;return e*e+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const i=Math.cos(e),n=Math.sin(e),r=this.x-t.x,a=this.y-t.y;return this.x=r*i-a*n+t.x,this.y=r*n+a*i+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class Is{constructor(t=0,e=0,i=0,n=1){this.isQuaternion=!0,this._x=t,this._y=e,this._z=i,this._w=n}static slerpFlat(t,e,i,n,r,a,o){let h=i[n+0],l=i[n+1],c=i[n+2],u=i[n+3],d=r[a+0],f=r[a+1],g=r[a+2],_=r[a+3];if(u!==_||h!==d||l!==f||c!==g){let m=h*d+l*f+c*g+u*_;m<0&&(d=-d,f=-f,g=-g,_=-_,m=-m);let p=1-o;if(m<.9995){const T=Math.acos(m),b=Math.sin(T);p=Math.sin(p*T)/b,o=Math.sin(o*T)/b,h=h*p+d*o,l=l*p+f*o,c=c*p+g*o,u=u*p+_*o}else{h=h*p+d*o,l=l*p+f*o,c=c*p+g*o,u=u*p+_*o;const T=1/Math.sqrt(h*h+l*l+c*c+u*u);h*=T,l*=T,c*=T,u*=T}}t[e]=h,t[e+1]=l,t[e+2]=c,t[e+3]=u}static multiplyQuaternionsFlat(t,e,i,n,r,a){const o=i[n],h=i[n+1],l=i[n+2],c=i[n+3],u=r[a],d=r[a+1],f=r[a+2],g=r[a+3];return t[e]=o*g+c*u+h*f-l*d,t[e+1]=h*g+c*d+l*u-o*f,t[e+2]=l*g+c*f+o*d-h*u,t[e+3]=c*g-o*u-h*d-l*f,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,i,n){return this._x=t,this._y=e,this._z=i,this._w=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e=!0){const i=t._x,n=t._y,r=t._z,a=t._order,o=Math.cos,h=Math.sin,l=o(i/2),c=o(n/2),u=o(r/2),d=h(i/2),f=h(n/2),g=h(r/2);switch(a){case"XYZ":this._x=d*c*u+l*f*g,this._y=l*f*u-d*c*g,this._z=l*c*g+d*f*u,this._w=l*c*u-d*f*g;break;case"YXZ":this._x=d*c*u+l*f*g,this._y=l*f*u-d*c*g,this._z=l*c*g-d*f*u,this._w=l*c*u+d*f*g;break;case"ZXY":this._x=d*c*u-l*f*g,this._y=l*f*u+d*c*g,this._z=l*c*g+d*f*u,this._w=l*c*u-d*f*g;break;case"ZYX":this._x=d*c*u-l*f*g,this._y=l*f*u+d*c*g,this._z=l*c*g-d*f*u,this._w=l*c*u+d*f*g;break;case"YZX":this._x=d*c*u+l*f*g,this._y=l*f*u+d*c*g,this._z=l*c*g-d*f*u,this._w=l*c*u-d*f*g;break;case"XZY":this._x=d*c*u-l*f*g,this._y=l*f*u-d*c*g,this._z=l*c*g+d*f*u,this._w=l*c*u+d*f*g;break;default:Te("Quaternion: .setFromEuler() encountered an unknown order: "+a)}return e===!0&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const i=e/2,n=Math.sin(i);return this._x=t.x*n,this._y=t.y*n,this._z=t.z*n,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,i=e[0],n=e[4],r=e[8],a=e[1],o=e[5],h=e[9],l=e[2],c=e[6],u=e[10],d=i+o+u;if(d>0){const f=.5/Math.sqrt(d+1);this._w=.25/f,this._x=(c-h)*f,this._y=(r-l)*f,this._z=(a-n)*f}else if(i>o&&i>u){const f=2*Math.sqrt(1+i-o-u);this._w=(c-h)/f,this._x=.25*f,this._y=(n+a)/f,this._z=(r+l)/f}else if(o>u){const f=2*Math.sqrt(1+o-i-u);this._w=(r-l)/f,this._x=(n+a)/f,this._y=.25*f,this._z=(h+c)/f}else{const f=2*Math.sqrt(1+u-i-o);this._w=(a-n)/f,this._x=(r+l)/f,this._y=(h+c)/f,this._z=.25*f}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let i=t.dot(e)+1;return i<1e-8?(i=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=i):(this._x=0,this._y=-t.z,this._z=t.y,this._w=i)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=i),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(Gt(this.dot(t),-1,1)))}rotateTowards(t,e){const i=this.angleTo(t);if(i===0)return this;const n=Math.min(1,e/i);return this.slerp(t,n),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return t===0?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const i=t._x,n=t._y,r=t._z,a=t._w,o=e._x,h=e._y,l=e._z,c=e._w;return this._x=i*c+a*o+n*l-r*h,this._y=n*c+a*h+r*o-i*l,this._z=r*c+a*l+i*h-n*o,this._w=a*c-i*o-n*h-r*l,this._onChangeCallback(),this}slerp(t,e){let i=t._x,n=t._y,r=t._z,a=t._w,o=this.dot(t);o<0&&(i=-i,n=-n,r=-r,a=-a,o=-o);let h=1-e;if(o<.9995){const l=Math.acos(o),c=Math.sin(l);h=Math.sin(h*l)/c,e=Math.sin(e*l)/c,this._x=this._x*h+i*e,this._y=this._y*h+n*e,this._z=this._z*h+r*e,this._w=this._w*h+a*e,this._onChangeCallback()}else this._x=this._x*h+i*e,this._y=this._y*h+n*e,this._z=this._z*h+r*e,this._w=this._w*h+a*e,this.normalize();return this}slerpQuaternions(t,e,i){return this.copy(t).slerp(e,i)}random(){const t=2*Math.PI*Math.random(),e=2*Math.PI*Math.random(),i=Math.random(),n=Math.sqrt(1-i),r=Math.sqrt(i);return this.set(n*Math.sin(t),n*Math.cos(t),r*Math.sin(e),r*Math.cos(e))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class V{constructor(t=0,e=0,i=0){V.prototype.isVector3=!0,this.x=t,this.y=e,this.z=i}set(t,e,i){return i===void 0&&(i=this.z),this.x=t,this.y=e,this.z=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(Ol.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(Ol.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,i=this.y,n=this.z,r=t.elements;return this.x=r[0]*e+r[3]*i+r[6]*n,this.y=r[1]*e+r[4]*i+r[7]*n,this.z=r[2]*e+r[5]*i+r[8]*n,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,i=this.y,n=this.z,r=t.elements,a=1/(r[3]*e+r[7]*i+r[11]*n+r[15]);return this.x=(r[0]*e+r[4]*i+r[8]*n+r[12])*a,this.y=(r[1]*e+r[5]*i+r[9]*n+r[13])*a,this.z=(r[2]*e+r[6]*i+r[10]*n+r[14])*a,this}applyQuaternion(t){const e=this.x,i=this.y,n=this.z,r=t.x,a=t.y,o=t.z,h=t.w,l=2*(a*n-o*i),c=2*(o*e-r*n),u=2*(r*i-a*e);return this.x=e+h*l+a*u-o*c,this.y=i+h*c+o*l-r*u,this.z=n+h*u+r*c-a*l,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,i=this.y,n=this.z,r=t.elements;return this.x=r[0]*e+r[4]*i+r[8]*n,this.y=r[1]*e+r[5]*i+r[9]*n,this.z=r[2]*e+r[6]*i+r[10]*n,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Gt(this.x,t.x,e.x),this.y=Gt(this.y,t.y,e.y),this.z=Gt(this.z,t.z,e.z),this}clampScalar(t,e){return this.x=Gt(this.x,t,e),this.y=Gt(this.y,t,e),this.z=Gt(this.z,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Gt(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this.z=t.z+(e.z-t.z)*i,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){const i=t.x,n=t.y,r=t.z,a=e.x,o=e.y,h=e.z;return this.x=n*h-r*o,this.y=r*a-i*h,this.z=i*o-n*a,this}projectOnVector(t){const e=t.lengthSq();if(e===0)return this.set(0,0,0);const i=t.dot(this)/e;return this.copy(t).multiplyScalar(i)}projectOnPlane(t){return da.copy(this).projectOnVector(t),this.sub(da)}reflect(t){return this.sub(da.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(Gt(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y,n=this.z-t.z;return e*e+i*i+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,i){const n=Math.sin(e)*t;return this.x=n*Math.sin(i),this.y=Math.cos(e)*t,this.z=n*Math.cos(i),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,i){return this.x=t*Math.sin(e),this.y=i,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),i=this.setFromMatrixColumn(t,1).length(),n=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=i,this.z=n,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,e*4)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,e*3)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=Math.random()*Math.PI*2,e=Math.random()*2-1,i=Math.sqrt(1-e*e);return this.x=i*Math.cos(t),this.y=e,this.z=i*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const da=new V,Ol=new Is;class Wi{constructor(t,e,i,n,r,a,o,h,l){Wi.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],t!==void 0&&this.set(t,e,i,n,r,a,o,h,l)}set(t,e,i,n,r,a,o,h,l){const c=this.elements;return c[0]=t,c[1]=n,c[2]=o,c[3]=e,c[4]=r,c[5]=h,c[6]=i,c[7]=a,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],this}extractBasis(t,e,i){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,n=e.elements,r=this.elements,a=i[0],o=i[3],h=i[6],l=i[1],c=i[4],u=i[7],d=i[2],f=i[5],g=i[8],_=n[0],m=n[3],p=n[6],T=n[1],b=n[4],y=n[7],R=n[2],w=n[5],C=n[8];return r[0]=a*_+o*T+h*R,r[3]=a*m+o*b+h*w,r[6]=a*p+o*y+h*C,r[1]=l*_+c*T+u*R,r[4]=l*m+c*b+u*w,r[7]=l*p+c*y+u*C,r[2]=d*_+f*T+g*R,r[5]=d*m+f*b+g*w,r[8]=d*p+f*y+g*C,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],a=t[4],o=t[5],h=t[6],l=t[7],c=t[8];return e*a*c-e*o*l-i*r*c+i*o*h+n*r*l-n*a*h}invert(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],a=t[4],o=t[5],h=t[6],l=t[7],c=t[8],u=c*a-o*l,d=o*h-c*r,f=l*r-a*h,g=e*u+i*d+n*f;if(g===0)return this.set(0,0,0,0,0,0,0,0,0);const _=1/g;return t[0]=u*_,t[1]=(n*l-c*i)*_,t[2]=(o*i-n*a)*_,t[3]=d*_,t[4]=(c*e-n*h)*_,t[5]=(n*r-o*e)*_,t[6]=f*_,t[7]=(i*h-l*e)*_,t[8]=(a*e-i*r)*_,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,i,n,r,a,o){const h=Math.cos(r),l=Math.sin(r);return this.set(i*h,i*l,-i*(h*a+l*o)+a+t,-n*l,n*h,-n*(-l*a+h*o)+o+e,0,0,1),this}scale(t,e){return this.premultiply(fa.makeScale(t,e)),this}rotate(t){return this.premultiply(fa.makeRotation(-t)),this}translate(t,e){return this.premultiply(fa.makeTranslation(t,e)),this}makeTranslation(t,e){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,i,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){const e=this.elements,i=t.elements;for(let n=0;n<9;n++)if(e[n]!==i[n])return!1;return!0}fromArray(t,e=0){for(let i=0;i<9;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t}clone(){return new this.constructor().fromArray(this.elements)}}const fa=new Wi,zl=new Wi().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Bl=new Wi().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function bu(){const s={enabled:!0,workingColorSpace:Il,spaces:{},convert:function(n,r,a){return this.enabled===!1||r===a||!r||!a||(this.spaces[r].transfer===ca&&(n.r=Ai(n.r),n.g=Ai(n.g),n.b=Ai(n.b)),this.spaces[r].primaries!==this.spaces[a].primaries&&(n.applyMatrix3(this.spaces[r].toXYZ),n.applyMatrix3(this.spaces[a].fromXYZ)),this.spaces[a].transfer===ca&&(n.r=kn(n.r),n.g=kn(n.g),n.b=kn(n.b))),n},workingToColorSpace:function(n,r){return this.convert(n,this.workingColorSpace,r)},colorSpaceToWorking:function(n,r){return this.convert(n,r,this.workingColorSpace)},getPrimaries:function(n){return this.spaces[n].primaries},getTransfer:function(n){return n===""?Ll:this.spaces[n].transfer},getToneMappingMode:function(n){return this.spaces[n].outputColorSpaceConfig.toneMappingMode||"standard"},getLuminanceCoefficients:function(n,r=this.workingColorSpace){return n.fromArray(this.spaces[r].luminanceCoefficients)},define:function(n){Object.assign(this.spaces,n)},_getMatrix:function(n,r,a){return n.copy(this.spaces[r].toXYZ).multiply(this.spaces[a].fromXYZ)},_getDrawingBufferColorSpace:function(n){return this.spaces[n].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(n=this.workingColorSpace){return this.spaces[n].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(n,r){return Fl("ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),s.workingToColorSpace(n,r)},toWorkingColorSpace:function(n,r){return Fl("ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),s.colorSpaceToWorking(n,r)}},t=[.64,.33,.3,.6,.15,.06],e=[.2126,.7152,.0722],i=[.3127,.329];return s.define({[Il]:{primaries:t,whitePoint:i,transfer:Ll,toXYZ:zl,fromXYZ:Bl,luminanceCoefficients:e,workingColorSpaceConfig:{unpackColorSpace:ze},outputColorSpaceConfig:{drawingBufferColorSpace:ze}},[ze]:{primaries:t,whitePoint:i,transfer:ca,toXYZ:zl,fromXYZ:Bl,luminanceCoefficients:e,outputColorSpaceConfig:{drawingBufferColorSpace:ze}}}),s}const ei=bu();function Ai(s){return s<.04045?s*.0773993808:Math.pow(s*.9478672986+.0521327014,2.4)}function kn(s){return s<.0031308?s*12.92:1.055*Math.pow(s,.41666)-.055}let Gn;class Eu{static getDataURL(t,e="image/png"){if(/^data:/i.test(t.src)||typeof HTMLCanvasElement>"u")return t.src;let i;if(t instanceof HTMLCanvasElement)i=t;else{Gn===void 0&&(Gn=Dl("canvas")),Gn.width=t.width,Gn.height=t.height;const n=Gn.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),i=Gn}return i.toDataURL(e)}static sRGBToLinear(t){if(typeof HTMLImageElement<"u"&&t instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&t instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&t instanceof ImageBitmap){const e=Dl("canvas");e.width=t.width,e.height=t.height;const i=e.getContext("2d");i.drawImage(t,0,0,t.width,t.height);const n=i.getImageData(0,0,t.width,t.height),r=n.data;for(let a=0;a<r.length;a++)r[a]=Ai(r[a]/255)*255;return i.putImageData(n,0,0),e}else if(t.data){const e=t.data.slice(0);for(let i=0;i<e.length;i++)e instanceof Uint8Array||e instanceof Uint8ClampedArray?e[i]=Math.floor(Ai(e[i]/255)*255):e[i]=Ai(e[i]);return{data:e,width:t.width,height:t.height}}else return Te("ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."),t}}let Tu=0;class Au{constructor(t=null){this.isSource=!0,Object.defineProperty(this,"id",{value:Tu++}),this.uuid=Cs(),this.data=t,this.dataReady=!0,this.version=0}getSize(t){const e=this.data;return typeof HTMLVideoElement<"u"&&e instanceof HTMLVideoElement?t.set(e.videoWidth,e.videoHeight,0):typeof VideoFrame<"u"&&e instanceof VideoFrame?t.set(e.displayHeight,e.displayWidth,0):e!==null?t.set(e.width,e.height,e.depth||0):t.set(0,0,0),t}set needsUpdate(t){t===!0&&this.version++}toJSON(t){const e=t===void 0||typeof t=="string";if(!e&&t.images[this.uuid]!==void 0)return t.images[this.uuid];const i={uuid:this.uuid,url:""},n=this.data;if(n!==null){let r;if(Array.isArray(n)){r=[];for(let a=0,o=n.length;a<o;a++)n[a].isDataTexture?r.push(pa(n[a].image)):r.push(pa(n[a]))}else r=pa(n);i.url=r}return e||(t.images[this.uuid]=i),i}}function pa(s){return typeof HTMLImageElement<"u"&&s instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&s instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&s instanceof ImageBitmap?Eu.getDataURL(s):s.data?{data:Array.from(s.data),width:s.width,height:s.height,type:s.data.constructor.name}:(Te("Texture: Unable to serialize Texture."),{})}let wu=0;const ma=new V;class gi extends rr{constructor(t=gi.DEFAULT_IMAGE,e=gi.DEFAULT_MAPPING,i=1001,n=1001,r=1006,a=1008,o=1023,h=1009,l=gi.DEFAULT_ANISOTROPY,c=""){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:wu++}),this.uuid=Cs(),this.name="",this.source=new Au(t),this.mipmaps=[],this.mapping=e,this.channel=0,this.wrapS=i,this.wrapT=n,this.magFilter=r,this.minFilter=a,this.anisotropy=l,this.format=o,this.internalFormat=null,this.type=h,this.offset=new Be(0,0),this.repeat=new Be(1,1),this.center=new Be(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Wi,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=c,this.userData={},this.updateRanges=[],this.version=0,this.onUpdate=null,this.renderTarget=null,this.isRenderTargetTexture=!1,this.isArrayTexture=!!(t&&t.depth&&t.depth>1),this.pmremVersion=0}get width(){return this.source.getSize(ma).x}get height(){return this.source.getSize(ma).y}get depth(){return this.source.getSize(ma).z}get image(){return this.source.data}set image(t=null){this.source.data=t}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(t){return this.name=t.name,this.source=t.source,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.channel=t.channel,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.colorSpace=t.colorSpace,this.renderTarget=t.renderTarget,this.isRenderTargetTexture=t.isRenderTargetTexture,this.isArrayTexture=t.isArrayTexture,this.userData=JSON.parse(JSON.stringify(t.userData)),this.needsUpdate=!0,this}setValues(t){for(const e in t){const i=t[e];if(i===void 0){Te(`Texture.setValues(): parameter '${e}' has value of undefined.`);continue}const n=this[e];if(n===void 0){Te(`Texture.setValues(): property '${e}' does not exist.`);continue}n&&i&&n.isVector2&&i.isVector2||n&&i&&n.isVector3&&i.isVector3||n&&i&&n.isMatrix3&&i.isMatrix3?n.copy(i):this[e]=i}}toJSON(t){const e=t===void 0||typeof t=="string";if(!e&&t.textures[this.uuid]!==void 0)return t.textures[this.uuid];const i={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(t).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),e||(t.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(this.mapping!==300)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case 1e3:t.x=t.x-Math.floor(t.x);break;case 1001:t.x=t.x<0?0:1;break;case 1002:Math.abs(Math.floor(t.x)%2)===1?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x);break}if(t.y<0||t.y>1)switch(this.wrapT){case 1e3:t.y=t.y-Math.floor(t.y);break;case 1001:t.y=t.y<0?0:1;break;case 1002:Math.abs(Math.floor(t.y)%2)===1?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y);break}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){t===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(t){t===!0&&this.pmremVersion++}}gi.DEFAULT_IMAGE=null,gi.DEFAULT_MAPPING=300,gi.DEFAULT_ANISOTROPY=1;class Ls{constructor(t=0,e=0,i=0,n=1){Ls.prototype.isVector4=!0,this.x=t,this.y=e,this.z=i,this.w=n}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,i,n){return this.x=t,this.y=e,this.z=i,this.w=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w!==void 0?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,i=this.y,n=this.z,r=this.w,a=t.elements;return this.x=a[0]*e+a[4]*i+a[8]*n+a[12]*r,this.y=a[1]*e+a[5]*i+a[9]*n+a[13]*r,this.z=a[2]*e+a[6]*i+a[10]*n+a[14]*r,this.w=a[3]*e+a[7]*i+a[11]*n+a[15]*r,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,i,n,r;const a=t.elements,o=a[0],h=a[4],l=a[8],c=a[1],u=a[5],d=a[9],f=a[2],g=a[6],_=a[10];if(Math.abs(h-c)<.01&&Math.abs(l-f)<.01&&Math.abs(d-g)<.01){if(Math.abs(h+c)<.1&&Math.abs(l+f)<.1&&Math.abs(d+g)<.1&&Math.abs(o+u+_-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;const p=(o+1)/2,T=(u+1)/2,b=(_+1)/2,y=(h+c)/4,R=(l+f)/4,w=(d+g)/4;return p>T&&p>b?p<.01?(i=0,n=.707106781,r=.707106781):(i=Math.sqrt(p),n=y/i,r=R/i):T>b?T<.01?(i=.707106781,n=0,r=.707106781):(n=Math.sqrt(T),i=y/n,r=w/n):b<.01?(i=.707106781,n=.707106781,r=0):(r=Math.sqrt(b),i=R/r,n=w/r),this.set(i,n,r,e),this}let m=Math.sqrt((g-d)*(g-d)+(l-f)*(l-f)+(c-h)*(c-h));return Math.abs(m)<.001&&(m=1),this.x=(g-d)/m,this.y=(l-f)/m,this.z=(c-h)/m,this.w=Math.acos((o+u+_-1)/2),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this.w=e[15],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Gt(this.x,t.x,e.x),this.y=Gt(this.y,t.y,e.y),this.z=Gt(this.z,t.z,e.z),this.w=Gt(this.w,t.w,e.w),this}clampScalar(t,e){return this.x=Gt(this.x,t,e),this.y=Gt(this.y,t,e),this.z=Gt(this.z,t,e),this.w=Gt(this.w,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Gt(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this.z=t.z+(e.z-t.z)*i,this.w=t.w+(e.w-t.w)*i,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class ii{constructor(t,e,i,n,r,a,o,h,l,c,u,d,f,g,_,m){ii.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!==void 0&&this.set(t,e,i,n,r,a,o,h,l,c,u,d,f,g,_,m)}set(t,e,i,n,r,a,o,h,l,c,u,d,f,g,_,m){const p=this.elements;return p[0]=t,p[4]=e,p[8]=i,p[12]=n,p[1]=r,p[5]=a,p[9]=o,p[13]=h,p[2]=l,p[6]=c,p[10]=u,p[14]=d,p[3]=f,p[7]=g,p[11]=_,p[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new ii().fromArray(this.elements)}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],e[9]=i[9],e[10]=i[10],e[11]=i[11],e[12]=i[12],e[13]=i[13],e[14]=i[14],e[15]=i[15],this}copyPosition(t){const e=this.elements,i=t.elements;return e[12]=i[12],e[13]=i[13],e[14]=i[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,i){return this.determinant()===0?(t.set(1,0,0),e.set(0,1,0),i.set(0,0,1),this):(t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this)}makeBasis(t,e,i){return this.set(t.x,e.x,i.x,0,t.y,e.y,i.y,0,t.z,e.z,i.z,0,0,0,0,1),this}extractRotation(t){if(t.determinant()===0)return this.identity();const e=this.elements,i=t.elements,n=1/Hn.setFromMatrixColumn(t,0).length(),r=1/Hn.setFromMatrixColumn(t,1).length(),a=1/Hn.setFromMatrixColumn(t,2).length();return e[0]=i[0]*n,e[1]=i[1]*n,e[2]=i[2]*n,e[3]=0,e[4]=i[4]*r,e[5]=i[5]*r,e[6]=i[6]*r,e[7]=0,e[8]=i[8]*a,e[9]=i[9]*a,e[10]=i[10]*a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){const e=this.elements,i=t.x,n=t.y,r=t.z,a=Math.cos(i),o=Math.sin(i),h=Math.cos(n),l=Math.sin(n),c=Math.cos(r),u=Math.sin(r);if(t.order==="XYZ"){const d=a*c,f=a*u,g=o*c,_=o*u;e[0]=h*c,e[4]=-h*u,e[8]=l,e[1]=f+g*l,e[5]=d-_*l,e[9]=-o*h,e[2]=_-d*l,e[6]=g+f*l,e[10]=a*h}else if(t.order==="YXZ"){const d=h*c,f=h*u,g=l*c,_=l*u;e[0]=d+_*o,e[4]=g*o-f,e[8]=a*l,e[1]=a*u,e[5]=a*c,e[9]=-o,e[2]=f*o-g,e[6]=_+d*o,e[10]=a*h}else if(t.order==="ZXY"){const d=h*c,f=h*u,g=l*c,_=l*u;e[0]=d-_*o,e[4]=-a*u,e[8]=g+f*o,e[1]=f+g*o,e[5]=a*c,e[9]=_-d*o,e[2]=-a*l,e[6]=o,e[10]=a*h}else if(t.order==="ZYX"){const d=a*c,f=a*u,g=o*c,_=o*u;e[0]=h*c,e[4]=g*l-f,e[8]=d*l+_,e[1]=h*u,e[5]=_*l+d,e[9]=f*l-g,e[2]=-l,e[6]=o*h,e[10]=a*h}else if(t.order==="YZX"){const d=a*h,f=a*l,g=o*h,_=o*l;e[0]=h*c,e[4]=_-d*u,e[8]=g*u+f,e[1]=u,e[5]=a*c,e[9]=-o*c,e[2]=-l*c,e[6]=f*u+g,e[10]=d-_*u}else if(t.order==="XZY"){const d=a*h,f=a*l,g=o*h,_=o*l;e[0]=h*c,e[4]=-u,e[8]=l*c,e[1]=d*u+_,e[5]=a*c,e[9]=f*u-g,e[2]=g*u-f,e[6]=o*c,e[10]=_*u+d}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Ru,t,Cu)}lookAt(t,e,i){const n=this.elements;return ke.subVectors(t,e),ke.lengthSq()===0&&(ke.z=1),ke.normalize(),Xi.crossVectors(i,ke),Xi.lengthSq()===0&&(Math.abs(i.z)===1?ke.x+=1e-4:ke.z+=1e-4,ke.normalize(),Xi.crossVectors(i,ke)),Xi.normalize(),ar.crossVectors(ke,Xi),n[0]=Xi.x,n[4]=ar.x,n[8]=ke.x,n[1]=Xi.y,n[5]=ar.y,n[9]=ke.y,n[2]=Xi.z,n[6]=ar.z,n[10]=ke.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,n=e.elements,r=this.elements,a=i[0],o=i[4],h=i[8],l=i[12],c=i[1],u=i[5],d=i[9],f=i[13],g=i[2],_=i[6],m=i[10],p=i[14],T=i[3],b=i[7],y=i[11],R=i[15],w=n[0],C=n[4],I=n[8],S=n[12],M=n[1],A=n[5],B=n[9],F=n[13],z=n[2],W=n[6],X=n[10],Q=n[14],H=n[3],rt=n[7],ht=n[11],_t=n[15];return r[0]=a*w+o*M+h*z+l*H,r[4]=a*C+o*A+h*W+l*rt,r[8]=a*I+o*B+h*X+l*ht,r[12]=a*S+o*F+h*Q+l*_t,r[1]=c*w+u*M+d*z+f*H,r[5]=c*C+u*A+d*W+f*rt,r[9]=c*I+u*B+d*X+f*ht,r[13]=c*S+u*F+d*Q+f*_t,r[2]=g*w+_*M+m*z+p*H,r[6]=g*C+_*A+m*W+p*rt,r[10]=g*I+_*B+m*X+p*ht,r[14]=g*S+_*F+m*Q+p*_t,r[3]=T*w+b*M+y*z+R*H,r[7]=T*C+b*A+y*W+R*rt,r[11]=T*I+b*B+y*X+R*ht,r[15]=T*S+b*F+y*Q+R*_t,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],i=t[4],n=t[8],r=t[12],a=t[1],o=t[5],h=t[9],l=t[13],c=t[2],u=t[6],d=t[10],f=t[14],g=t[3],_=t[7],m=t[11],p=t[15],T=h*f-l*d,b=o*f-l*u,y=o*d-h*u,R=a*f-l*c,w=a*d-h*c,C=a*u-o*c;return e*(_*T-m*b+p*y)-i*(g*T-m*R+p*w)+n*(g*b-_*R+p*C)-r*(g*y-_*w+m*C)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,i){const n=this.elements;return t.isVector3?(n[12]=t.x,n[13]=t.y,n[14]=t.z):(n[12]=t,n[13]=e,n[14]=i),this}invert(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],a=t[4],o=t[5],h=t[6],l=t[7],c=t[8],u=t[9],d=t[10],f=t[11],g=t[12],_=t[13],m=t[14],p=t[15],T=e*o-i*a,b=e*h-n*a,y=e*l-r*a,R=i*h-n*o,w=i*l-r*o,C=n*l-r*h,I=c*_-u*g,S=c*m-d*g,M=c*p-f*g,A=u*m-d*_,B=u*p-f*_,F=d*p-f*m,z=T*F-b*B+y*A+R*M-w*S+C*I;if(z===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const W=1/z;return t[0]=(o*F-h*B+l*A)*W,t[1]=(n*B-i*F-r*A)*W,t[2]=(_*C-m*w+p*R)*W,t[3]=(d*w-u*C-f*R)*W,t[4]=(h*M-a*F-l*S)*W,t[5]=(e*F-n*M+r*S)*W,t[6]=(m*y-g*C-p*b)*W,t[7]=(c*C-d*y+f*b)*W,t[8]=(a*B-o*M+l*I)*W,t[9]=(i*M-e*B-r*I)*W,t[10]=(g*w-_*y+p*T)*W,t[11]=(u*y-c*w-f*T)*W,t[12]=(o*S-a*A-h*I)*W,t[13]=(e*A-i*S+n*I)*W,t[14]=(_*b-g*R-m*T)*W,t[15]=(c*R-u*b+d*T)*W,this}scale(t){const e=this.elements,i=t.x,n=t.y,r=t.z;return e[0]*=i,e[4]*=n,e[8]*=r,e[1]*=i,e[5]*=n,e[9]*=r,e[2]*=i,e[6]*=n,e[10]*=r,e[3]*=i,e[7]*=n,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],i=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],n=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,i,n))}makeTranslation(t,e,i){return t.isVector3?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,e,0,0,1,i,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),i=Math.sin(t);return this.set(1,0,0,0,0,e,-i,0,0,i,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,0,i,0,0,1,0,0,-i,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,0,i,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const i=Math.cos(e),n=Math.sin(e),r=1-i,a=t.x,o=t.y,h=t.z,l=r*a,c=r*o;return this.set(l*a+i,l*o-n*h,l*h+n*o,0,l*o+n*h,c*o+i,c*h-n*a,0,l*h-n*o,c*h+n*a,r*h*h+i,0,0,0,0,1),this}makeScale(t,e,i){return this.set(t,0,0,0,0,e,0,0,0,0,i,0,0,0,0,1),this}makeShear(t,e,i,n,r,a){return this.set(1,i,r,0,t,1,a,0,e,n,1,0,0,0,0,1),this}compose(t,e,i){const n=this.elements,r=e._x,a=e._y,o=e._z,h=e._w,l=r+r,c=a+a,u=o+o,d=r*l,f=r*c,g=r*u,_=a*c,m=a*u,p=o*u,T=h*l,b=h*c,y=h*u,R=i.x,w=i.y,C=i.z;return n[0]=(1-(_+p))*R,n[1]=(f+y)*R,n[2]=(g-b)*R,n[3]=0,n[4]=(f-y)*w,n[5]=(1-(d+p))*w,n[6]=(m+T)*w,n[7]=0,n[8]=(g+b)*C,n[9]=(m-T)*C,n[10]=(1-(d+_))*C,n[11]=0,n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=1,this}decompose(t,e,i){const n=this.elements;t.x=n[12],t.y=n[13],t.z=n[14];const r=this.determinant();if(r===0)return i.set(1,1,1),e.identity(),this;let a=Hn.set(n[0],n[1],n[2]).length();const o=Hn.set(n[4],n[5],n[6]).length(),h=Hn.set(n[8],n[9],n[10]).length();r<0&&(a=-a),ni.copy(this);const l=1/a,c=1/o,u=1/h;return ni.elements[0]*=l,ni.elements[1]*=l,ni.elements[2]*=l,ni.elements[4]*=c,ni.elements[5]*=c,ni.elements[6]*=c,ni.elements[8]*=u,ni.elements[9]*=u,ni.elements[10]*=u,e.setFromRotationMatrix(ni),i.x=a,i.y=o,i.z=h,this}makePerspective(t,e,i,n,r,a,o=2e3,h=!1){const l=this.elements,c=2*r/(e-t),u=2*r/(i-n),d=(e+t)/(e-t),f=(i+n)/(i-n);let g,_;if(h)g=r/(a-r),_=a*r/(a-r);else if(o===2e3)g=-(a+r)/(a-r),_=-2*a*r/(a-r);else if(o===2001)g=-a/(a-r),_=-a*r/(a-r);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+o);return l[0]=c,l[4]=0,l[8]=d,l[12]=0,l[1]=0,l[5]=u,l[9]=f,l[13]=0,l[2]=0,l[6]=0,l[10]=g,l[14]=_,l[3]=0,l[7]=0,l[11]=-1,l[15]=0,this}makeOrthographic(t,e,i,n,r,a,o=2e3,h=!1){const l=this.elements,c=2/(e-t),u=2/(i-n),d=-(e+t)/(e-t),f=-(i+n)/(i-n);let g,_;if(h)g=1/(a-r),_=a/(a-r);else if(o===2e3)g=-2/(a-r),_=-(a+r)/(a-r);else if(o===2001)g=-1/(a-r),_=-r/(a-r);else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+o);return l[0]=c,l[4]=0,l[8]=0,l[12]=d,l[1]=0,l[5]=u,l[9]=0,l[13]=f,l[2]=0,l[6]=0,l[10]=g,l[14]=_,l[3]=0,l[7]=0,l[11]=0,l[15]=1,this}equals(t){const e=this.elements,i=t.elements;for(let n=0;n<16;n++)if(e[n]!==i[n])return!1;return!0}fromArray(t,e=0){for(let i=0;i<16;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t[e+9]=i[9],t[e+10]=i[10],t[e+11]=i[11],t[e+12]=i[12],t[e+13]=i[13],t[e+14]=i[14],t[e+15]=i[15],t}}const Hn=new V,ni=new ii,Ru=new V(0,0,0),Cu=new V(1,1,1),Xi=new V,ar=new V,ke=new V,kl=new ii,Gl=new Is;class Vn{constructor(t=0,e=0,i=0,n=Vn.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=e,this._z=i,this._order=n}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,i,n=this._order){return this._x=t,this._y=e,this._z=i,this._order=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,i=!0){const n=t.elements,r=n[0],a=n[4],o=n[8],h=n[1],l=n[5],c=n[9],u=n[2],d=n[6],f=n[10];switch(e){case"XYZ":this._y=Math.asin(Gt(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-c,f),this._z=Math.atan2(-a,r)):(this._x=Math.atan2(d,l),this._z=0);break;case"YXZ":this._x=Math.asin(-Gt(c,-1,1)),Math.abs(c)<.9999999?(this._y=Math.atan2(o,f),this._z=Math.atan2(h,l)):(this._y=Math.atan2(-u,r),this._z=0);break;case"ZXY":this._x=Math.asin(Gt(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,f),this._z=Math.atan2(-a,l)):(this._y=0,this._z=Math.atan2(h,r));break;case"ZYX":this._y=Math.asin(-Gt(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,f),this._z=Math.atan2(h,r)):(this._x=0,this._z=Math.atan2(-a,l));break;case"YZX":this._z=Math.asin(Gt(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(-c,l),this._y=Math.atan2(-u,r)):(this._x=0,this._y=Math.atan2(o,f));break;case"XZY":this._z=Math.asin(-Gt(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(d,l),this._y=Math.atan2(o,r)):(this._x=Math.atan2(-c,f),this._y=0);break;default:Te("Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,i===!0&&this._onChangeCallback(),this}setFromQuaternion(t,e,i){return kl.makeRotationFromQuaternion(t),this.setFromRotationMatrix(kl,e,i)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return Gl.setFromEuler(this),this.setFromQuaternion(Gl,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],t[3]!==void 0&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}Vn.DEFAULT_ORDER="XYZ";class Pu{constructor(){this.mask=1}set(t){this.mask=(1<<t|0)>>>0}enable(t){this.mask|=1<<t|0}enableAll(){this.mask=-1}toggle(t){this.mask^=1<<t|0}disable(t){this.mask&=~(1<<t|0)}disableAll(){this.mask=0}test(t){return(this.mask&t.mask)!==0}isEnabled(t){return(this.mask&(1<<t|0))!==0}}let Iu=0;const Hl=new V,Wn=new Is,wi=new ii,or=new V,Ds=new V,Lu=new V,Du=new Is,Vl=new V(1,0,0),Wl=new V(0,1,0),Xl=new V(0,0,1),ql={type:"added"},Uu={type:"removed"},Xn={type:"childadded",child:null},ga={type:"childremoved",child:null};class je extends rr{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:Iu++}),this.uuid=Cs(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=je.DEFAULT_UP.clone();const t=new V,e=new Vn,i=new Is,n=new V(1,1,1);function r(){i.setFromEuler(e,!1)}function a(){e.setFromQuaternion(i,void 0,!1)}e._onChange(r),i._onChange(a),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:i},scale:{configurable:!0,enumerable:!0,value:n},modelViewMatrix:{value:new ii},normalMatrix:{value:new Wi}}),this.matrix=new ii,this.matrixWorld=new ii,this.matrixAutoUpdate=je.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=je.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new Pu,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.customDepthMaterial=void 0,this.customDistanceMaterial=void 0,this.static=!1,this.userData={},this.pivot=null}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,e){return Wn.setFromAxisAngle(t,e),this.quaternion.multiply(Wn),this}rotateOnWorldAxis(t,e){return Wn.setFromAxisAngle(t,e),this.quaternion.premultiply(Wn),this}rotateX(t){return this.rotateOnAxis(Vl,t)}rotateY(t){return this.rotateOnAxis(Wl,t)}rotateZ(t){return this.rotateOnAxis(Xl,t)}translateOnAxis(t,e){return Hl.copy(t).applyQuaternion(this.quaternion),this.position.add(Hl.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis(Vl,t)}translateY(t){return this.translateOnAxis(Wl,t)}translateZ(t){return this.translateOnAxis(Xl,t)}localToWorld(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(wi.copy(this.matrixWorld).invert())}lookAt(t,e,i){t.isVector3?or.copy(t):or.set(t,e,i);const n=this.parent;this.updateWorldMatrix(!0,!1),Ds.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?wi.lookAt(Ds,or,this.up):wi.lookAt(or,Ds,this.up),this.quaternion.setFromRotationMatrix(wi),n&&(wi.extractRotation(n.matrixWorld),Wn.setFromRotationMatrix(wi),this.quaternion.premultiply(Wn.invert()))}add(t){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return t===this?(un("Object3D.add: object can't be added as a child of itself.",t),this):(t&&t.isObject3D?(t.removeFromParent(),t.parent=this,this.children.push(t),t.dispatchEvent(ql),Xn.child=t,this.dispatchEvent(Xn),Xn.child=null):un("Object3D.add: object not an instance of THREE.Object3D.",t),this)}remove(t){if(arguments.length>1){for(let i=0;i<arguments.length;i++)this.remove(arguments[i]);return this}const e=this.children.indexOf(t);return e!==-1&&(t.parent=null,this.children.splice(e,1),t.dispatchEvent(Uu),ga.child=t,this.dispatchEvent(ga),ga.child=null),this}removeFromParent(){const t=this.parent;return t!==null&&t.remove(this),this}clear(){return this.remove(...this.children)}attach(t){return this.updateWorldMatrix(!0,!1),wi.copy(this.matrixWorld).invert(),t.parent!==null&&(t.parent.updateWorldMatrix(!0,!1),wi.multiply(t.parent.matrixWorld)),t.applyMatrix4(wi),t.removeFromParent(),t.parent=this,this.children.push(t),t.updateWorldMatrix(!1,!0),t.dispatchEvent(ql),Xn.child=t,this.dispatchEvent(Xn),Xn.child=null,this}getObjectById(t){return this.getObjectByProperty("id",t)}getObjectByName(t){return this.getObjectByProperty("name",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let i=0,n=this.children.length;i<n;i++){const r=this.children[i].getObjectByProperty(t,e);if(r!==void 0)return r}}getObjectsByProperty(t,e,i=[]){this[t]===e&&i.push(this);const n=this.children;for(let r=0,a=n.length;r<a;r++)n[r].getObjectsByProperty(t,e,i);return i}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(Ds,t,Lu),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(Ds,Du,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].traverse(t)}traverseVisible(t){if(this.visible===!1)return;t(this);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].traverseVisible(t)}traverseAncestors(t){const e=this.parent;e!==null&&(t(e),e.traverseAncestors(t))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale);const t=this.pivot;if(t!==null){const e=t.x,i=t.y,n=t.z,r=this.matrix.elements;r[12]+=e-r[0]*e-r[4]*i-r[8]*n,r[13]+=i-r[1]*e-r[5]*i-r[9]*n,r[14]+=n-r[2]*e-r[6]*i-r[10]*n}this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,t=!0);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].updateMatrixWorld(t)}updateWorldMatrix(t,e){const i=this.parent;if(t===!0&&i!==null&&i.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),e===!0){const n=this.children;for(let r=0,a=n.length;r<a;r++)n[r].updateWorldMatrix(!1,!0)}}toJSON(t){const e=t===void 0||typeof t=="string",i={};e&&(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},i.metadata={version:4.7,type:"Object",generator:"Object3D.toJSON"});const n={};n.uuid=this.uuid,n.type=this.type,this.name!==""&&(n.name=this.name),this.castShadow===!0&&(n.castShadow=!0),this.receiveShadow===!0&&(n.receiveShadow=!0),this.visible===!1&&(n.visible=!1),this.frustumCulled===!1&&(n.frustumCulled=!1),this.renderOrder!==0&&(n.renderOrder=this.renderOrder),this.static!==!1&&(n.static=this.static),Object.keys(this.userData).length>0&&(n.userData=this.userData),n.layers=this.layers.mask,n.matrix=this.matrix.toArray(),n.up=this.up.toArray(),this.pivot!==null&&(n.pivot=this.pivot.toArray()),this.matrixAutoUpdate===!1&&(n.matrixAutoUpdate=!1),this.morphTargetDictionary!==void 0&&(n.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(n.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(n.type="InstancedMesh",n.count=this.count,n.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(n.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(n.type="BatchedMesh",n.perObjectFrustumCulled=this.perObjectFrustumCulled,n.sortObjects=this.sortObjects,n.drawRanges=this._drawRanges,n.reservedRanges=this._reservedRanges,n.geometryInfo=this._geometryInfo.map(o=>({...o,boundingBox:o.boundingBox?o.boundingBox.toJSON():void 0,boundingSphere:o.boundingSphere?o.boundingSphere.toJSON():void 0})),n.instanceInfo=this._instanceInfo.map(o=>({...o})),n.availableInstanceIds=this._availableInstanceIds.slice(),n.availableGeometryIds=this._availableGeometryIds.slice(),n.nextIndexStart=this._nextIndexStart,n.nextVertexStart=this._nextVertexStart,n.geometryCount=this._geometryCount,n.maxInstanceCount=this._maxInstanceCount,n.maxVertexCount=this._maxVertexCount,n.maxIndexCount=this._maxIndexCount,n.geometryInitialized=this._geometryInitialized,n.matricesTexture=this._matricesTexture.toJSON(t),n.indirectTexture=this._indirectTexture.toJSON(t),this._colorsTexture!==null&&(n.colorsTexture=this._colorsTexture.toJSON(t)),this.boundingSphere!==null&&(n.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(n.boundingBox=this.boundingBox.toJSON()));function r(o,h){return o[h.uuid]===void 0&&(o[h.uuid]=h.toJSON(t)),h.uuid}if(this.isScene)this.background&&(this.background.isColor?n.background=this.background.toJSON():this.background.isTexture&&(n.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(n.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){n.geometry=r(t.geometries,this.geometry);const o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){const h=o.shapes;if(Array.isArray(h))for(let l=0,c=h.length;l<c;l++){const u=h[l];r(t.shapes,u)}else r(t.shapes,h)}}if(this.isSkinnedMesh&&(n.bindMode=this.bindMode,n.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(r(t.skeletons,this.skeleton),n.skeleton=this.skeleton.uuid)),this.material!==void 0)if(Array.isArray(this.material)){const o=[];for(let h=0,l=this.material.length;h<l;h++)o.push(r(t.materials,this.material[h]));n.material=o}else n.material=r(t.materials,this.material);if(this.children.length>0){n.children=[];for(let o=0;o<this.children.length;o++)n.children.push(this.children[o].toJSON(t).object)}if(this.animations.length>0){n.animations=[];for(let o=0;o<this.animations.length;o++){const h=this.animations[o];n.animations.push(r(t.animations,h))}}if(e){const o=a(t.geometries),h=a(t.materials),l=a(t.textures),c=a(t.images),u=a(t.shapes),d=a(t.skeletons),f=a(t.animations),g=a(t.nodes);o.length>0&&(i.geometries=o),h.length>0&&(i.materials=h),l.length>0&&(i.textures=l),c.length>0&&(i.images=c),u.length>0&&(i.shapes=u),d.length>0&&(i.skeletons=d),f.length>0&&(i.animations=f),g.length>0&&(i.nodes=g)}return i.object=n,i;function a(o){const h=[];for(const l in o){const c=o[l];delete c.metadata,h.push(c)}return h}}clone(t){return new this.constructor().copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),t.pivot!==null&&(this.pivot=t.pivot.clone()),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.static=t.static,this.animations=t.animations.slice(),this.userData=JSON.parse(JSON.stringify(t.userData)),e===!0)for(let i=0;i<t.children.length;i++){const n=t.children[i];this.add(n.clone())}return this}}je.DEFAULT_UP=new V(0,1,0),je.DEFAULT_MATRIX_AUTO_UPDATE=!0,je.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;const Yl={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},qi={h:0,s:0,l:0},lr={h:0,s:0,l:0};function _a(s,t,e){return e<0&&(e+=1),e>1&&(e-=1),e<1/6?s+(t-s)*6*e:e<1/2?t:e<2/3?s+(t-s)*6*(2/3-e):s}class Yi{constructor(t,e,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(t,e,i)}set(t,e,i){if(e===void 0&&i===void 0){const n=t;n&&n.isColor?this.copy(n):typeof n=="number"?this.setHex(n):typeof n=="string"&&this.setStyle(n)}else this.setRGB(t,e,i);return this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=ze){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(t&255)/255,ei.colorSpaceToWorking(this,e),this}setRGB(t,e,i,n=ei.workingColorSpace){return this.r=t,this.g=e,this.b=i,ei.colorSpaceToWorking(this,n),this}setHSL(t,e,i,n=ei.workingColorSpace){if(t=Su(t,1),e=Gt(e,0,1),i=Gt(i,0,1),e===0)this.r=this.g=this.b=i;else{const r=i<=.5?i*(1+e):i+e-i*e,a=2*i-r;this.r=_a(a,r,t+1/3),this.g=_a(a,r,t),this.b=_a(a,r,t-1/3)}return ei.colorSpaceToWorking(this,n),this}setStyle(t,e=ze){function i(r){r!==void 0&&parseFloat(r)<1&&Te("Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^(\w+)\(([^\)]*)\)/.exec(t)){let r;const a=n[1],o=n[2];switch(a){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setRGB(Math.min(255,parseInt(r[1],10))/255,Math.min(255,parseInt(r[2],10))/255,Math.min(255,parseInt(r[3],10))/255,e);if(r=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setRGB(Math.min(100,parseInt(r[1],10))/100,Math.min(100,parseInt(r[2],10))/100,Math.min(100,parseInt(r[3],10))/100,e);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setHSL(parseFloat(r[1])/360,parseFloat(r[2])/100,parseFloat(r[3])/100,e);break;default:Te("Color: Unknown color model "+t)}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(t)){const r=n[1],a=r.length;if(a===3)return this.setRGB(parseInt(r.charAt(0),16)/15,parseInt(r.charAt(1),16)/15,parseInt(r.charAt(2),16)/15,e);if(a===6)return this.setHex(parseInt(r,16),e);Te("Color: Invalid hex color "+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=ze){const i=Yl[t.toLowerCase()];return i!==void 0?this.setHex(i,e):Te("Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=Ai(t.r),this.g=Ai(t.g),this.b=Ai(t.b),this}copyLinearToSRGB(t){return this.r=kn(t.r),this.g=kn(t.g),this.b=kn(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=ze){return ei.workingToColorSpace(we.copy(this),t),Math.round(Gt(we.r*255,0,255))*65536+Math.round(Gt(we.g*255,0,255))*256+Math.round(Gt(we.b*255,0,255))}getHexString(t=ze){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=ei.workingColorSpace){ei.workingToColorSpace(we.copy(this),e);const i=we.r,n=we.g,r=we.b,a=Math.max(i,n,r),o=Math.min(i,n,r);let h,l;const c=(o+a)/2;if(o===a)h=0,l=0;else{const u=a-o;switch(l=c<=.5?u/(a+o):u/(2-a-o),a){case i:h=(n-r)/u+(n<r?6:0);break;case n:h=(r-i)/u+2;break;case r:h=(i-n)/u+4;break}h/=6}return t.h=h,t.s=l,t.l=c,t}getRGB(t,e=ei.workingColorSpace){return ei.workingToColorSpace(we.copy(this),e),t.r=we.r,t.g=we.g,t.b=we.b,t}getStyle(t=ze){ei.workingToColorSpace(we.copy(this),t);const e=we.r,i=we.g,n=we.b;return t!==ze?`color(${t} ${e.toFixed(3)} ${i.toFixed(3)} ${n.toFixed(3)})`:`rgb(${Math.round(e*255)},${Math.round(i*255)},${Math.round(n*255)})`}offsetHSL(t,e,i){return this.getHSL(qi),this.setHSL(qi.h+t,qi.s+e,qi.l+i)}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,i){return this.r=t.r+(e.r-t.r)*i,this.g=t.g+(e.g-t.g)*i,this.b=t.b+(e.b-t.b)*i,this}lerpHSL(t,e){this.getHSL(qi),t.getHSL(lr);const i=ua(qi.h,lr.h,e),n=ua(qi.s,lr.s,e),r=ua(qi.l,lr.l,e);return this.setHSL(i,n,r),this}setFromVector3(t){return this.r=t.x,this.g=t.y,this.b=t.z,this}applyMatrix3(t){const e=this.r,i=this.g,n=this.b,r=t.elements;return this.r=r[0]*e+r[3]*i+r[6]*n,this.g=r[1]*e+r[4]*i+r[7]*n,this.b=r[2]*e+r[5]*i+r[8]*n,this}equals(t){return t.r===this.r&&t.g===this.g&&t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}}const we=new Yi;Yi.NAMES=Yl;const si=new V,Ri=new V,xa=new V,Ci=new V,qn=new V,Yn=new V,jl=new V,va=new V,ya=new V,Ma=new V,Sa=new Ls,ba=new Ls,Ea=new Ls;class ri{constructor(t=new V,e=new V,i=new V){this.a=t,this.b=e,this.c=i}static getNormal(t,e,i,n){n.subVectors(i,e),si.subVectors(t,e),n.cross(si);const r=n.lengthSq();return r>0?n.multiplyScalar(1/Math.sqrt(r)):n.set(0,0,0)}static getBarycoord(t,e,i,n,r){si.subVectors(n,e),Ri.subVectors(i,e),xa.subVectors(t,e);const a=si.dot(si),o=si.dot(Ri),h=si.dot(xa),l=Ri.dot(Ri),c=Ri.dot(xa),u=a*l-o*o;if(u===0)return r.set(0,0,0),null;const d=1/u,f=(l*h-o*c)*d,g=(a*c-o*h)*d;return r.set(1-f-g,g,f)}static containsPoint(t,e,i,n){return this.getBarycoord(t,e,i,n,Ci)===null?!1:Ci.x>=0&&Ci.y>=0&&Ci.x+Ci.y<=1}static getInterpolation(t,e,i,n,r,a,o,h){return this.getBarycoord(t,e,i,n,Ci)===null?(h.x=0,h.y=0,"z"in h&&(h.z=0),"w"in h&&(h.w=0),null):(h.setScalar(0),h.addScaledVector(r,Ci.x),h.addScaledVector(a,Ci.y),h.addScaledVector(o,Ci.z),h)}static getInterpolatedAttribute(t,e,i,n,r,a){return Sa.setScalar(0),ba.setScalar(0),Ea.setScalar(0),Sa.fromBufferAttribute(t,e),ba.fromBufferAttribute(t,i),Ea.fromBufferAttribute(t,n),a.setScalar(0),a.addScaledVector(Sa,r.x),a.addScaledVector(ba,r.y),a.addScaledVector(Ea,r.z),a}static isFrontFacing(t,e,i,n){return si.subVectors(i,e),Ri.subVectors(t,e),si.cross(Ri).dot(n)<0}set(t,e,i){return this.a.copy(t),this.b.copy(e),this.c.copy(i),this}setFromPointsAndIndices(t,e,i,n){return this.a.copy(t[e]),this.b.copy(t[i]),this.c.copy(t[n]),this}setFromAttributeAndIndices(t,e,i,n){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,i),this.c.fromBufferAttribute(t,n),this}clone(){return new this.constructor().copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return si.subVectors(this.c,this.b),Ri.subVectors(this.a,this.b),si.cross(Ri).length()*.5}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return ri.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return ri.getBarycoord(t,this.a,this.b,this.c,e)}getInterpolation(t,e,i,n,r){return ri.getInterpolation(t,this.a,this.b,this.c,e,i,n,r)}containsPoint(t){return ri.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return ri.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const i=this.a,n=this.b,r=this.c;let a,o;qn.subVectors(n,i),Yn.subVectors(r,i),va.subVectors(t,i);const h=qn.dot(va),l=Yn.dot(va);if(h<=0&&l<=0)return e.copy(i);ya.subVectors(t,n);const c=qn.dot(ya),u=Yn.dot(ya);if(c>=0&&u<=c)return e.copy(n);const d=h*u-c*l;if(d<=0&&h>=0&&c<=0)return a=h/(h-c),e.copy(i).addScaledVector(qn,a);Ma.subVectors(t,r);const f=qn.dot(Ma),g=Yn.dot(Ma);if(g>=0&&f<=g)return e.copy(r);const _=f*l-h*g;if(_<=0&&l>=0&&g<=0)return o=l/(l-g),e.copy(i).addScaledVector(Yn,o);const m=c*g-f*u;if(m<=0&&u-c>=0&&f-g>=0)return jl.subVectors(r,n),o=(u-c)/(u-c+(f-g)),e.copy(n).addScaledVector(jl,o);const p=1/(m+_+d);return a=_*p,o=d*p,e.copy(i).addScaledVector(qn,a).addScaledVector(Yn,o)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}class Us{constructor(t=new V(1/0,1/0,1/0),e=new V(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){this.makeEmpty();for(let e=0,i=t.length;e<i;e+=3)this.expandByPoint(ai.fromArray(t,e));return this}setFromBufferAttribute(t){this.makeEmpty();for(let e=0,i=t.count;e<i;e++)this.expandByPoint(ai.fromBufferAttribute(t,e));return this}setFromPoints(t){this.makeEmpty();for(let e=0,i=t.length;e<i;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const i=ai.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(i),this.max.copy(t).add(i),this}setFromObject(t,e=!1){return this.makeEmpty(),this.expandByObject(t,e)}clone(){return new this.constructor().copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t,e=!1){t.updateWorldMatrix(!1,!1);const i=t.geometry;if(i!==void 0){const r=i.getAttribute("position");if(e===!0&&r!==void 0&&t.isInstancedMesh!==!0)for(let a=0,o=r.count;a<o;a++)t.isMesh===!0?t.getVertexPosition(a,ai):ai.fromBufferAttribute(r,a),ai.applyMatrix4(t.matrixWorld),this.expandByPoint(ai);else t.boundingBox!==void 0?(t.boundingBox===null&&t.computeBoundingBox(),hr.copy(t.boundingBox)):(i.boundingBox===null&&i.computeBoundingBox(),hr.copy(i.boundingBox)),hr.applyMatrix4(t.matrixWorld),this.union(hr)}const n=t.children;for(let r=0,a=n.length;r<a;r++)this.expandByObject(n[r],e);return this}containsPoint(t){return t.x>=this.min.x&&t.x<=this.max.x&&t.y>=this.min.y&&t.y<=this.max.y&&t.z>=this.min.z&&t.z<=this.max.z}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return t.max.x>=this.min.x&&t.min.x<=this.max.x&&t.max.y>=this.min.y&&t.min.y<=this.max.y&&t.max.z>=this.min.z&&t.min.z<=this.max.z}intersectsSphere(t){return this.clampPoint(t.center,ai),ai.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,i;return t.normal.x>0?(e=t.normal.x*this.min.x,i=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,i=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,i+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,i+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,i+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,i+=t.normal.z*this.min.z),e<=-t.constant&&i>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(Ns),cr.subVectors(this.max,Ns),jn.subVectors(t.a,Ns),Zn.subVectors(t.b,Ns),Kn.subVectors(t.c,Ns),ji.subVectors(Zn,jn),Zi.subVectors(Kn,Zn),dn.subVectors(jn,Kn);let e=[0,-ji.z,ji.y,0,-Zi.z,Zi.y,0,-dn.z,dn.y,ji.z,0,-ji.x,Zi.z,0,-Zi.x,dn.z,0,-dn.x,-ji.y,ji.x,0,-Zi.y,Zi.x,0,-dn.y,dn.x,0];return!Ta(e,jn,Zn,Kn,cr)||(e=[1,0,0,0,1,0,0,0,1],!Ta(e,jn,Zn,Kn,cr))?!1:(ur.crossVectors(ji,Zi),e=[ur.x,ur.y,ur.z],Ta(e,jn,Zn,Kn,cr))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,ai).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=this.getSize(ai).length()*.5),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()?this:(Pi[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),Pi[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),Pi[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),Pi[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),Pi[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),Pi[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),Pi[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),Pi[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(Pi),this)}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(t){return this.min.fromArray(t.min),this.max.fromArray(t.max),this}}const Pi=[new V,new V,new V,new V,new V,new V,new V,new V],ai=new V,hr=new Us,jn=new V,Zn=new V,Kn=new V,ji=new V,Zi=new V,dn=new V,Ns=new V,cr=new V,ur=new V,fn=new V;function Ta(s,t,e,i,n){for(let r=0,a=s.length-3;r<=a;r+=3){fn.fromArray(s,r);const o=n.x*Math.abs(fn.x)+n.y*Math.abs(fn.y)+n.z*Math.abs(fn.z),h=t.dot(fn),l=e.dot(fn),c=i.dot(fn);if(Math.max(-Math.max(h,l,c),Math.min(h,l,c))>o)return!1}return!0}const ge=new V,dr=new Be;let Nu=0;class pn{constructor(t,e,i=!1){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:Nu++}),this.name="",this.array=t,this.itemSize=e,this.count=t!==void 0?t.length/e:0,this.normalized=i,this.usage=35044,this.updateRanges=[],this.gpuType=1015,this.version=0}onUploadCallback(){}set needsUpdate(t){t===!0&&this.version++}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this.gpuType=t.gpuType,this}copyAt(t,e,i){t*=this.itemSize,i*=e.itemSize;for(let n=0,r=this.itemSize;n<r;n++)this.array[t+n]=e.array[i+n];return this}copyArray(t){return this.array.set(t),this}applyMatrix3(t){if(this.itemSize===2)for(let e=0,i=this.count;e<i;e++)dr.fromBufferAttribute(this,e),dr.applyMatrix3(t),this.setXY(e,dr.x,dr.y);else if(this.itemSize===3)for(let e=0,i=this.count;e<i;e++)ge.fromBufferAttribute(this,e),ge.applyMatrix3(t),this.setXYZ(e,ge.x,ge.y,ge.z);return this}applyMatrix4(t){for(let e=0,i=this.count;e<i;e++)ge.fromBufferAttribute(this,e),ge.applyMatrix4(t),this.setXYZ(e,ge.x,ge.y,ge.z);return this}applyNormalMatrix(t){for(let e=0,i=this.count;e<i;e++)ge.fromBufferAttribute(this,e),ge.applyNormalMatrix(t),this.setXYZ(e,ge.x,ge.y,ge.z);return this}transformDirection(t){for(let e=0,i=this.count;e<i;e++)ge.fromBufferAttribute(this,e),ge.transformDirection(t),this.setXYZ(e,ge.x,ge.y,ge.z);return this}set(t,e=0){return this.array.set(t,e),this}getComponent(t,e){let i=this.array[t*this.itemSize+e];return this.normalized&&(i=Ps(i,this.array)),i}setComponent(t,e,i){return this.normalized&&(i=De(i,this.array)),this.array[t*this.itemSize+e]=i,this}getX(t){let e=this.array[t*this.itemSize];return this.normalized&&(e=Ps(e,this.array)),e}setX(t,e){return this.normalized&&(e=De(e,this.array)),this.array[t*this.itemSize]=e,this}getY(t){let e=this.array[t*this.itemSize+1];return this.normalized&&(e=Ps(e,this.array)),e}setY(t,e){return this.normalized&&(e=De(e,this.array)),this.array[t*this.itemSize+1]=e,this}getZ(t){let e=this.array[t*this.itemSize+2];return this.normalized&&(e=Ps(e,this.array)),e}setZ(t,e){return this.normalized&&(e=De(e,this.array)),this.array[t*this.itemSize+2]=e,this}getW(t){let e=this.array[t*this.itemSize+3];return this.normalized&&(e=Ps(e,this.array)),e}setW(t,e){return this.normalized&&(e=De(e,this.array)),this.array[t*this.itemSize+3]=e,this}setXY(t,e,i){return t*=this.itemSize,this.normalized&&(e=De(e,this.array),i=De(i,this.array)),this.array[t+0]=e,this.array[t+1]=i,this}setXYZ(t,e,i,n){return t*=this.itemSize,this.normalized&&(e=De(e,this.array),i=De(i,this.array),n=De(n,this.array)),this.array[t+0]=e,this.array[t+1]=i,this.array[t+2]=n,this}setXYZW(t,e,i,n,r){return t*=this.itemSize,this.normalized&&(e=De(e,this.array),i=De(i,this.array),n=De(n,this.array),r=De(r,this.array)),this.array[t+0]=e,this.array[t+1]=i,this.array[t+2]=n,this.array[t+3]=r,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){const t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return this.name!==""&&(t.name=this.name),this.usage!==35044&&(t.usage=this.usage),t}}class Fu extends pn{constructor(t,e,i){super(new Uint16Array(t),e,i)}}class Ou extends pn{constructor(t,e,i){super(new Uint32Array(t),e,i)}}class mn extends pn{constructor(t,e,i){super(new Float32Array(t),e,i)}}const zu=new Us,Fs=new V,Aa=new V;class Zl{constructor(t=new V,e=-1){this.isSphere=!0,this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const i=this.center;e!==void 0?i.copy(e):zu.setFromPoints(t).getCenter(i);let n=0;for(let r=0,a=t.length;r<a;r++)n=Math.max(n,i.distanceToSquared(t[r]));return this.radius=Math.sqrt(n),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){const e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))<=this.radius}clampPoint(t,e){const i=this.center.distanceToSquared(t);return e.copy(t),i>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;Fs.subVectors(t,this.center);const e=Fs.lengthSq();if(e>this.radius*this.radius){const i=Math.sqrt(e),n=(i-this.radius)*.5;this.center.addScaledVector(Fs,n/i),this.radius+=n}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(this.center.equals(t.center)===!0?this.radius=Math.max(this.radius,t.radius):(Aa.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(Fs.copy(t.center).add(Aa)),this.expandByPoint(Fs.copy(t.center).sub(Aa))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(t){return this.radius=t.radius,this.center.fromArray(t.center),this}}let Bu=0;const Ze=new ii,wa=new je,$n=new V,Ge=new Us,Os=new Us,Me=new V;class Jn extends rr{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:Bu++}),this.uuid=Cs(),this.name="",this.type="BufferGeometry",this.index=null,this.indirect=null,this.indirectOffset=0,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(Mu(t)?Ou:Fu)(t,1):this.index=t,this}setIndirect(t,e=0){return this.indirect=t,this.indirectOffset=e,this}getIndirect(){return this.indirect}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return this.attributes[t]!==void 0}addGroup(t,e,i=0){this.groups.push({start:t,count:e,materialIndex:i})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;e!==void 0&&(e.applyMatrix4(t),e.needsUpdate=!0);const i=this.attributes.normal;if(i!==void 0){const r=new Wi().getNormalMatrix(t);i.applyNormalMatrix(r),i.needsUpdate=!0}const n=this.attributes.tangent;return n!==void 0&&(n.transformDirection(t),n.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}applyQuaternion(t){return Ze.makeRotationFromQuaternion(t),this.applyMatrix4(Ze),this}rotateX(t){return Ze.makeRotationX(t),this.applyMatrix4(Ze),this}rotateY(t){return Ze.makeRotationY(t),this.applyMatrix4(Ze),this}rotateZ(t){return Ze.makeRotationZ(t),this.applyMatrix4(Ze),this}translate(t,e,i){return Ze.makeTranslation(t,e,i),this.applyMatrix4(Ze),this}scale(t,e,i){return Ze.makeScale(t,e,i),this.applyMatrix4(Ze),this}lookAt(t){return wa.lookAt(t),wa.updateMatrix(),this.applyMatrix4(wa.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter($n).negate(),this.translate($n.x,$n.y,$n.z),this}setFromPoints(t){const e=this.getAttribute("position");if(e===void 0){const i=[];for(let n=0,r=t.length;n<r;n++){const a=t[n];i.push(a.x,a.y,a.z||0)}this.setAttribute("position",new mn(i,3))}else{const i=Math.min(t.length,e.count);for(let n=0;n<i;n++){const r=t[n];e.setXYZ(n,r.x,r.y,r.z||0)}t.length>e.count&&Te("BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),e.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new Us);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){un("BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new V(-1/0,-1/0,-1/0),new V(1/0,1/0,1/0));return}if(t!==void 0){if(this.boundingBox.setFromBufferAttribute(t),e)for(let i=0,n=e.length;i<n;i++){const r=e[i];Ge.setFromBufferAttribute(r),this.morphTargetsRelative?(Me.addVectors(this.boundingBox.min,Ge.min),this.boundingBox.expandByPoint(Me),Me.addVectors(this.boundingBox.max,Ge.max),this.boundingBox.expandByPoint(Me)):(this.boundingBox.expandByPoint(Ge.min),this.boundingBox.expandByPoint(Ge.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&un('BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new Zl);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){un("BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.",this),this.boundingSphere.set(new V,1/0);return}if(t){const i=this.boundingSphere.center;if(Ge.setFromBufferAttribute(t),e)for(let r=0,a=e.length;r<a;r++){const o=e[r];Os.setFromBufferAttribute(o),this.morphTargetsRelative?(Me.addVectors(Ge.min,Os.min),Ge.expandByPoint(Me),Me.addVectors(Ge.max,Os.max),Ge.expandByPoint(Me)):(Ge.expandByPoint(Os.min),Ge.expandByPoint(Os.max))}Ge.getCenter(i);let n=0;for(let r=0,a=t.count;r<a;r++)Me.fromBufferAttribute(t,r),n=Math.max(n,i.distanceToSquared(Me));if(e)for(let r=0,a=e.length;r<a;r++){const o=e[r],h=this.morphTargetsRelative;for(let l=0,c=o.count;l<c;l++)Me.fromBufferAttribute(o,l),h&&($n.fromBufferAttribute(t,l),Me.add($n)),n=Math.max(n,i.distanceToSquared(Me))}this.boundingSphere.radius=Math.sqrt(n),isNaN(this.boundingSphere.radius)&&un('BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}computeTangents(){const t=this.index,e=this.attributes;if(t===null||e.position===void 0||e.normal===void 0||e.uv===void 0){un("BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)");return}const i=e.position,n=e.normal,r=e.uv;this.hasAttribute("tangent")===!1&&this.setAttribute("tangent",new pn(new Float32Array(4*i.count),4));const a=this.getAttribute("tangent"),o=[],h=[];for(let I=0;I<i.count;I++)o[I]=new V,h[I]=new V;const l=new V,c=new V,u=new V,d=new Be,f=new Be,g=new Be,_=new V,m=new V;function p(I,S,M){l.fromBufferAttribute(i,I),c.fromBufferAttribute(i,S),u.fromBufferAttribute(i,M),d.fromBufferAttribute(r,I),f.fromBufferAttribute(r,S),g.fromBufferAttribute(r,M),c.sub(l),u.sub(l),f.sub(d),g.sub(d);const A=1/(f.x*g.y-g.x*f.y);isFinite(A)&&(_.copy(c).multiplyScalar(g.y).addScaledVector(u,-f.y).multiplyScalar(A),m.copy(u).multiplyScalar(f.x).addScaledVector(c,-g.x).multiplyScalar(A),o[I].add(_),o[S].add(_),o[M].add(_),h[I].add(m),h[S].add(m),h[M].add(m))}let T=this.groups;T.length===0&&(T=[{start:0,count:t.count}]);for(let I=0,S=T.length;I<S;++I){const M=T[I],A=M.start,B=M.count;for(let F=A,z=A+B;F<z;F+=3)p(t.getX(F+0),t.getX(F+1),t.getX(F+2))}const b=new V,y=new V,R=new V,w=new V;function C(I){R.fromBufferAttribute(n,I),w.copy(R);const S=o[I];b.copy(S),b.sub(R.multiplyScalar(R.dot(S))).normalize(),y.crossVectors(w,S);const M=y.dot(h[I])<0?-1:1;a.setXYZW(I,b.x,b.y,b.z,M)}for(let I=0,S=T.length;I<S;++I){const M=T[I],A=M.start,B=M.count;for(let F=A,z=A+B;F<z;F+=3)C(t.getX(F+0)),C(t.getX(F+1)),C(t.getX(F+2))}}computeVertexNormals(){const t=this.index,e=this.getAttribute("position");if(e!==void 0){let i=this.getAttribute("normal");if(i===void 0)i=new pn(new Float32Array(e.count*3),3),this.setAttribute("normal",i);else for(let d=0,f=i.count;d<f;d++)i.setXYZ(d,0,0,0);const n=new V,r=new V,a=new V,o=new V,h=new V,l=new V,c=new V,u=new V;if(t)for(let d=0,f=t.count;d<f;d+=3){const g=t.getX(d+0),_=t.getX(d+1),m=t.getX(d+2);n.fromBufferAttribute(e,g),r.fromBufferAttribute(e,_),a.fromBufferAttribute(e,m),c.subVectors(a,r),u.subVectors(n,r),c.cross(u),o.fromBufferAttribute(i,g),h.fromBufferAttribute(i,_),l.fromBufferAttribute(i,m),o.add(c),h.add(c),l.add(c),i.setXYZ(g,o.x,o.y,o.z),i.setXYZ(_,h.x,h.y,h.z),i.setXYZ(m,l.x,l.y,l.z)}else for(let d=0,f=e.count;d<f;d+=3)n.fromBufferAttribute(e,d+0),r.fromBufferAttribute(e,d+1),a.fromBufferAttribute(e,d+2),c.subVectors(a,r),u.subVectors(n,r),c.cross(u),i.setXYZ(d+0,c.x,c.y,c.z),i.setXYZ(d+1,c.x,c.y,c.z),i.setXYZ(d+2,c.x,c.y,c.z);this.normalizeNormals(),i.needsUpdate=!0}}normalizeNormals(){const t=this.attributes.normal;for(let e=0,i=t.count;e<i;e++)Me.fromBufferAttribute(t,e),Me.normalize(),t.setXYZ(e,Me.x,Me.y,Me.z)}toNonIndexed(){function t(o,h){const l=o.array,c=o.itemSize,u=o.normalized,d=new l.constructor(h.length*c);let f=0,g=0;for(let _=0,m=h.length;_<m;_++){o.isInterleavedBufferAttribute?f=h[_]*o.data.stride+o.offset:f=h[_]*c;for(let p=0;p<c;p++)d[g++]=l[f++]}return new pn(d,c,u)}if(this.index===null)return Te("BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."),this;const e=new Jn,i=this.index.array,n=this.attributes;for(const o in n){const h=n[o],l=t(h,i);e.setAttribute(o,l)}const r=this.morphAttributes;for(const o in r){const h=[],l=r[o];for(let c=0,u=l.length;c<u;c++){const d=l[c],f=t(d,i);h.push(f)}e.morphAttributes[o]=h}e.morphTargetsRelative=this.morphTargetsRelative;const a=this.groups;for(let o=0,h=a.length;o<h;o++){const l=a[o];e.addGroup(l.start,l.count,l.materialIndex)}return e}toJSON(){const t={metadata:{version:4.7,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};if(t.uuid=this.uuid,t.type=this.type,this.name!==""&&(t.name=this.name),Object.keys(this.userData).length>0&&(t.userData=this.userData),this.parameters!==void 0){const h=this.parameters;for(const l in h)h[l]!==void 0&&(t[l]=h[l]);return t}t.data={attributes:{}};const e=this.index;e!==null&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const i=this.attributes;for(const h in i){const l=i[h];t.data.attributes[h]=l.toJSON(t.data)}const n={};let r=!1;for(const h in this.morphAttributes){const l=this.morphAttributes[h],c=[];for(let u=0,d=l.length;u<d;u++){const f=l[u];c.push(f.toJSON(t.data))}c.length>0&&(n[h]=c,r=!0)}r&&(t.data.morphAttributes=n,t.data.morphTargetsRelative=this.morphTargetsRelative);const a=this.groups;a.length>0&&(t.data.groups=JSON.parse(JSON.stringify(a)));const o=this.boundingSphere;return o!==null&&(t.data.boundingSphere=o.toJSON()),t}clone(){return new this.constructor().copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const i=t.index;i!==null&&this.setIndex(i.clone());const n=t.attributes;for(const l in n){const c=n[l];this.setAttribute(l,c.clone(e))}const r=t.morphAttributes;for(const l in r){const c=[],u=r[l];for(let d=0,f=u.length;d<f;d++)c.push(u[d].clone(e));this.morphAttributes[l]=c}this.morphTargetsRelative=t.morphTargetsRelative;const a=t.groups;for(let l=0,c=a.length;l<c;l++){const u=a[l];this.addGroup(u.start,u.count,u.materialIndex)}const o=t.boundingBox;o!==null&&(this.boundingBox=o.clone());const h=t.boundingSphere;return h!==null&&(this.boundingSphere=h.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,this}dispose(){this.dispatchEvent({type:"dispose"})}}let ku=0;class Ra extends rr{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:ku++}),this.uuid=Cs(),this.name="",this.type="Material",this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.alphaHash=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=100,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.blendColor=new Yi(0,0,0),this.blendAlpha=0,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=7680,this.stencilZFail=7680,this.stencilZPass=7680,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.allowOverride=!0,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(t){this._alphaTest>0!=t>0&&this.version++,this._alphaTest=t}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(t!==void 0)for(const e in t){const i=t[e];if(i===void 0){Te(`Material: parameter '${e}' has value of undefined.`);continue}const n=this[e];if(n===void 0){Te(`Material: '${e}' is not a property of THREE.${this.type}.`);continue}n&&n.isColor?n.set(i):n&&n.isVector3&&i&&i.isVector3?n.copy(i):this[e]=i}}toJSON(t){const e=t===void 0||typeof t=="string";e&&(t={textures:{},images:{}});const i={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};i.uuid=this.uuid,i.type=this.type,this.name!==""&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),this.roughness!==void 0&&(i.roughness=this.roughness),this.metalness!==void 0&&(i.metalness=this.metalness),this.sheen!==void 0&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(i.shininess=this.shininess),this.clearcoat!==void 0&&(i.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(i.sheenColorMap=this.sheenColorMap.toJSON(t).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(i.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(t).uuid),this.dispersion!==void 0&&(i.dispersion=this.dispersion),this.iridescence!==void 0&&(i.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(i.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(t).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(t).uuid),this.anisotropy!==void 0&&(i.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(i.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(i.anisotropyMap=this.anisotropyMap.toJSON(t).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(t).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(t).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(t).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(t).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(t).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(t).uuid,this.combine!==void 0&&(i.combine=this.combine)),this.envMapRotation!==void 0&&(i.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(i.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(i.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(t).uuid),this.transmission!==void 0&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(t).uuid),this.thickness!==void 0&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(t).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(i.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(i.size=this.size),this.shadowSide!==null&&(i.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(i.sizeAttenuation=this.sizeAttenuation),this.blending!==1&&(i.blending=this.blending),this.side!==0&&(i.side=this.side),this.vertexColors===!0&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),this.transparent===!0&&(i.transparent=!0),this.blendSrc!==204&&(i.blendSrc=this.blendSrc),this.blendDst!==205&&(i.blendDst=this.blendDst),this.blendEquation!==100&&(i.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(i.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(i.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(i.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(i.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(i.blendAlpha=this.blendAlpha),this.depthFunc!==3&&(i.depthFunc=this.depthFunc),this.depthTest===!1&&(i.depthTest=this.depthTest),this.depthWrite===!1&&(i.depthWrite=this.depthWrite),this.colorWrite===!1&&(i.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(i.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==519&&(i.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(i.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==7680&&(i.stencilFail=this.stencilFail),this.stencilZFail!==7680&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==7680&&(i.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(i.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(i.rotation=this.rotation),this.polygonOffset===!0&&(i.polygonOffset=!0),this.polygonOffsetFactor!==0&&(i.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(i.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(i.linewidth=this.linewidth),this.dashSize!==void 0&&(i.dashSize=this.dashSize),this.gapSize!==void 0&&(i.gapSize=this.gapSize),this.scale!==void 0&&(i.scale=this.scale),this.dithering===!0&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),this.alphaHash===!0&&(i.alphaHash=!0),this.alphaToCoverage===!0&&(i.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(i.premultipliedAlpha=!0),this.forceSinglePass===!0&&(i.forceSinglePass=!0),this.allowOverride===!1&&(i.allowOverride=!1),this.wireframe===!0&&(i.wireframe=!0),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(i.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(i.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(i.flatShading=!0),this.visible===!1&&(i.visible=!1),this.toneMapped===!1&&(i.toneMapped=!1),this.fog===!1&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData);function n(r){const a=[];for(const o in r){const h=r[o];delete h.metadata,a.push(h)}return a}if(e){const r=n(t.textures),a=n(t.images);r.length>0&&(i.textures=r),a.length>0&&(i.images=a)}return i}clone(){return new this.constructor().copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.blendColor.copy(t.blendColor),this.blendAlpha=t.blendAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let i=null;if(e!==null){const n=e.length;i=new Array(n);for(let r=0;r!==n;++r)i[r]=e[r].clone()}return this.clippingPlanes=i,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaHash=t.alphaHash,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.forceSinglePass=t.forceSinglePass,this.allowOverride=t.allowOverride,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){t===!0&&this.version++}}const Ii=new V,Ca=new V,fr=new V,Ki=new V,Pa=new V,pr=new V,Ia=new V;class Gu{constructor(t=new V,e=new V(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.origin).addScaledVector(this.direction,t)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Ii)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const i=e.dot(this.direction);return i<0?e.copy(this.origin):e.copy(this.origin).addScaledVector(this.direction,i)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Ii.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Ii.copy(this.origin).addScaledVector(this.direction,e),Ii.distanceToSquared(t))}distanceSqToSegment(t,e,i,n){Ca.copy(t).add(e).multiplyScalar(.5),fr.copy(e).sub(t).normalize(),Ki.copy(this.origin).sub(Ca);const r=t.distanceTo(e)*.5,a=-this.direction.dot(fr),o=Ki.dot(this.direction),h=-Ki.dot(fr),l=Ki.lengthSq(),c=Math.abs(1-a*a);let u,d,f,g;if(c>0)if(u=a*h-o,d=a*o-h,g=r*c,u>=0)if(d>=-g)if(d<=g){const _=1/c;u*=_,d*=_,f=u*(u+a*d+2*o)+d*(a*u+d+2*h)+l}else d=r,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*h)+l;else d=-r,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*h)+l;else d<=-g?(u=Math.max(0,-(-a*r+o)),d=u>0?-r:Math.min(Math.max(-r,-h),r),f=-u*u+d*(d+2*h)+l):d<=g?(u=0,d=Math.min(Math.max(-r,-h),r),f=d*(d+2*h)+l):(u=Math.max(0,-(a*r+o)),d=u>0?r:Math.min(Math.max(-r,-h),r),f=-u*u+d*(d+2*h)+l);else d=a>0?-r:r,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*h)+l;return i&&i.copy(this.origin).addScaledVector(this.direction,u),n&&n.copy(Ca).addScaledVector(fr,d),f}intersectSphere(t,e){Ii.subVectors(t.center,this.origin);const i=Ii.dot(this.direction),n=Ii.dot(Ii)-i*i,r=t.radius*t.radius;if(n>r)return null;const a=Math.sqrt(r-n),o=i-a,h=i+a;return h<0?null:o<0?this.at(h,e):this.at(o,e)}intersectsSphere(t){return t.radius<0?!1:this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(e===0)return t.distanceToPoint(this.origin)===0?0:null;const i=-(this.origin.dot(t.normal)+t.constant)/e;return i>=0?i:null}intersectPlane(t,e){const i=this.distanceToPlane(t);return i===null?null:this.at(i,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);return e===0||t.normal.dot(this.direction)*e<0}intersectBox(t,e){let i,n,r,a,o,h;const l=1/this.direction.x,c=1/this.direction.y,u=1/this.direction.z,d=this.origin;return l>=0?(i=(t.min.x-d.x)*l,n=(t.max.x-d.x)*l):(i=(t.max.x-d.x)*l,n=(t.min.x-d.x)*l),c>=0?(r=(t.min.y-d.y)*c,a=(t.max.y-d.y)*c):(r=(t.max.y-d.y)*c,a=(t.min.y-d.y)*c),i>a||r>n||((r>i||isNaN(i))&&(i=r),(a<n||isNaN(n))&&(n=a),u>=0?(o=(t.min.z-d.z)*u,h=(t.max.z-d.z)*u):(o=(t.max.z-d.z)*u,h=(t.min.z-d.z)*u),i>h||o>n)||((o>i||i!==i)&&(i=o),(h<n||n!==n)&&(n=h),n<0)?null:this.at(i>=0?i:n,e)}intersectsBox(t){return this.intersectBox(t,Ii)!==null}intersectTriangle(t,e,i,n,r){Pa.subVectors(e,t),pr.subVectors(i,t),Ia.crossVectors(Pa,pr);let a=this.direction.dot(Ia),o;if(a>0){if(n)return null;o=1}else if(a<0)o=-1,a=-a;else return null;Ki.subVectors(this.origin,t);const h=o*this.direction.dot(pr.crossVectors(Ki,pr));if(h<0)return null;const l=o*this.direction.dot(Pa.cross(Ki));if(l<0||h+l>a)return null;const c=-o*Ki.dot(Ia);return c<0?null:this.at(c/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class Hu extends Ra{constructor(t){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new Yi(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Vn,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}const Kl=new ii,gn=new Gu,mr=new Zl,$l=new V,gr=new V,_r=new V,xr=new V,La=new V,vr=new V,Jl=new V,yr=new V;class Ql extends je{constructor(t=new Jn,e=new Hu){super(),this.isMesh=!0,this.type="Mesh",this.geometry=t,this.material=e,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.count=1,this.updateMorphTargets()}copy(t,e){return super.copy(t,e),t.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),t.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=Array.isArray(t.material)?t.material.slice():t.material,this.geometry=t.geometry,this}updateMorphTargets(){const t=this.geometry.morphAttributes,e=Object.keys(t);if(e.length>0){const i=t[e[0]];if(i!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let n=0,r=i.length;n<r;n++){const a=i[n].name||String(n);this.morphTargetInfluences.push(0),this.morphTargetDictionary[a]=n}}}}getVertexPosition(t,e){const i=this.geometry,n=i.attributes.position,r=i.morphAttributes.position,a=i.morphTargetsRelative;e.fromBufferAttribute(n,t);const o=this.morphTargetInfluences;if(r&&o){vr.set(0,0,0);for(let h=0,l=r.length;h<l;h++){const c=o[h],u=r[h];c!==0&&(La.fromBufferAttribute(u,t),a?vr.addScaledVector(La,c):vr.addScaledVector(La.sub(e),c))}e.add(vr)}return e}raycast(t,e){const i=this.geometry,n=this.material,r=this.matrixWorld;n!==void 0&&(i.boundingSphere===null&&i.computeBoundingSphere(),mr.copy(i.boundingSphere),mr.applyMatrix4(r),gn.copy(t.ray).recast(t.near),!(mr.containsPoint(gn.origin)===!1&&(gn.intersectSphere(mr,$l)===null||gn.origin.distanceToSquared($l)>(t.far-t.near)**2))&&(Kl.copy(r).invert(),gn.copy(t.ray).applyMatrix4(Kl),!(i.boundingBox!==null&&gn.intersectsBox(i.boundingBox)===!1)&&this._computeIntersections(t,e,gn)))}_computeIntersections(t,e,i){let n;const r=this.geometry,a=this.material,o=r.index,h=r.attributes.position,l=r.attributes.uv,c=r.attributes.uv1,u=r.attributes.normal,d=r.groups,f=r.drawRange;if(o!==null)if(Array.isArray(a))for(let g=0,_=d.length;g<_;g++){const m=d[g],p=a[m.materialIndex],T=Math.max(m.start,f.start),b=Math.min(o.count,Math.min(m.start+m.count,f.start+f.count));for(let y=T,R=b;y<R;y+=3){const w=o.getX(y),C=o.getX(y+1),I=o.getX(y+2);n=Mr(this,p,t,i,l,c,u,w,C,I),n&&(n.faceIndex=Math.floor(y/3),n.face.materialIndex=m.materialIndex,e.push(n))}}else{const g=Math.max(0,f.start),_=Math.min(o.count,f.start+f.count);for(let m=g,p=_;m<p;m+=3){const T=o.getX(m),b=o.getX(m+1),y=o.getX(m+2);n=Mr(this,a,t,i,l,c,u,T,b,y),n&&(n.faceIndex=Math.floor(m/3),e.push(n))}}else if(h!==void 0)if(Array.isArray(a))for(let g=0,_=d.length;g<_;g++){const m=d[g],p=a[m.materialIndex],T=Math.max(m.start,f.start),b=Math.min(h.count,Math.min(m.start+m.count,f.start+f.count));for(let y=T,R=b;y<R;y+=3){const w=y,C=y+1,I=y+2;n=Mr(this,p,t,i,l,c,u,w,C,I),n&&(n.faceIndex=Math.floor(y/3),n.face.materialIndex=m.materialIndex,e.push(n))}}else{const g=Math.max(0,f.start),_=Math.min(h.count,f.start+f.count);for(let m=g,p=_;m<p;m+=3){const T=m,b=m+1,y=m+2;n=Mr(this,a,t,i,l,c,u,T,b,y),n&&(n.faceIndex=Math.floor(m/3),e.push(n))}}}}function Vu(s,t,e,i,n,r,a,o){let h;if(t.side===1?h=i.intersectTriangle(a,r,n,!0,o):h=i.intersectTriangle(n,r,a,t.side===0,o),h===null)return null;yr.copy(o),yr.applyMatrix4(s.matrixWorld);const l=e.ray.origin.distanceTo(yr);return l<e.near||l>e.far?null:{distance:l,point:yr.clone(),object:s}}function Mr(s,t,e,i,n,r,a,o,h,l){s.getVertexPosition(o,gr),s.getVertexPosition(h,_r),s.getVertexPosition(l,xr);const c=Vu(s,t,e,i,gr,_r,xr,Jl);if(c){const u=new V;ri.getBarycoord(Jl,gr,_r,xr,u),n&&(c.uv=ri.getInterpolatedAttribute(n,o,h,l,u,new Be)),r&&(c.uv1=ri.getInterpolatedAttribute(r,o,h,l,u,new Be)),a&&(c.normal=ri.getInterpolatedAttribute(a,o,h,l,u,new V),c.normal.dot(i.direction)>0&&c.normal.multiplyScalar(-1));const d={a:o,b:h,c:l,normal:new V,materialIndex:0};ri.getNormal(gr,_r,xr,d.normal),c.face=d,c.barycoord=u}return c}class Wu extends gi{constructor(t=null,e=1,i=1,n,r,a,o,h,l=1003,c=1003,u,d){super(null,a,o,h,l,c,n,r,u,d),this.isDataTexture=!0,this.image={data:t,width:e,height:i},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}class _n extends Jn{constructor(t=1,e=1,i=1,n=32,r=1,a=!1,o=0,h=Math.PI*2){super(),this.type="CylinderGeometry",this.parameters={radiusTop:t,radiusBottom:e,height:i,radialSegments:n,heightSegments:r,openEnded:a,thetaStart:o,thetaLength:h};const l=this;n=Math.floor(n),r=Math.floor(r);const c=[],u=[],d=[],f=[];let g=0;const _=[],m=i/2;let p=0;T(),a===!1&&(t>0&&b(!0),e>0&&b(!1)),this.setIndex(c),this.setAttribute("position",new mn(u,3)),this.setAttribute("normal",new mn(d,3)),this.setAttribute("uv",new mn(f,2));function T(){const y=new V,R=new V;let w=0;const C=(e-t)/i;for(let I=0;I<=r;I++){const S=[],M=I/r,A=M*(e-t)+t;for(let B=0;B<=n;B++){const F=B/n,z=F*h+o,W=Math.sin(z),X=Math.cos(z);R.x=A*W,R.y=-M*i+m,R.z=A*X,u.push(R.x,R.y,R.z),y.set(W,C,X).normalize(),d.push(y.x,y.y,y.z),f.push(F,1-M),S.push(g++)}_.push(S)}for(let I=0;I<n;I++)for(let S=0;S<r;S++){const M=_[S][I],A=_[S+1][I],B=_[S+1][I+1],F=_[S][I+1];(t>0||S!==0)&&(c.push(M,A,F),w+=3),(e>0||S!==r-1)&&(c.push(A,B,F),w+=3)}l.addGroup(p,w,0),p+=w}function b(y){const R=g,w=new Be,C=new V;let I=0;const S=y===!0?t:e,M=y===!0?1:-1;for(let B=1;B<=n;B++)u.push(0,m*M,0),d.push(0,M,0),f.push(.5,.5),g++;const A=g;for(let B=0;B<=n;B++){const F=B/n*h+o,z=Math.cos(F),W=Math.sin(F);C.x=S*W,C.y=m*M,C.z=S*z,u.push(C.x,C.y,C.z),d.push(0,M,0),w.x=z*.5+.5,w.y=W*.5*M+.5,f.push(w.x,w.y),g++}for(let B=0;B<n;B++){const F=R+B,z=A+B;y===!0?c.push(z,z+1,F):c.push(z+1,z,F),I+=3}l.addGroup(p,I,y===!0?1:2),p+=I}}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new _n(t.radiusTop,t.radiusBottom,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}function Xu(s){const t={};for(const e in s){t[e]={};for(const i in s[e]){const n=s[e][i];n&&(n.isColor||n.isMatrix3||n.isMatrix4||n.isVector2||n.isVector3||n.isVector4||n.isTexture||n.isQuaternion)?n.isRenderTargetTexture?(Te("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."),t[e][i]=null):t[e][i]=n.clone():Array.isArray(n)?t[e][i]=n.slice():t[e][i]=n}}return t}function qu(s){const t=[];for(let e=0;e<s.length;e++)t.push(s[e].clone());return t}var Yu=`void main() {
|
|
55
|
+
`,Cc=":host{display:block;width:100%}.bar-menu-container{display:flex;align-items:center;justify-content:space-between;height:100%;gap:var(--gap-sm);padding:var(--spacing-1);background:var(--color-bg-primary);border-radius:var(--border-radius-full);border:var(--border-width-2) solid var(--color-border-secondary);box-shadow:var(--shadow-sm);margin:0 auto}.bar-menu-container .nav-prev,.bar-menu-container .nav-next{flex-shrink:0;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .2s ease-in-out,visibility .2s ease-in-out}.bar-menu-container .nav-prev.visible,.bar-menu-container .nav-next.visible{opacity:1;visibility:visible;pointer-events:auto}.bar-menu-container .nav-prev::part(button),.bar-menu-container .nav-next::part(button){background-color:transparent;box-shadow:none}.bar-menu-container .buttons-wrapper{display:grid;grid-template-columns:repeat(var(--bar-menu-visible-count, 3),1fr);grid-auto-rows:max-content;align-items:center;justify-items:center;gap:var(--gap-sm);overflow:hidden;position:relative;width:auto}::slotted(*){display:none;flex-shrink:0;will-change:opacity,transform;contain:layout style paint;opacity:0;transform:scale(.8)}::slotted(.animating){transition:opacity .4s cubic-bezier(.34,1.56,.64,1),transform .4s cubic-bezier(.34,1.56,.64,1)}::slotted(.visible-button){display:inline-flex!important;pointer-events:auto;opacity:1;transform:scale(1)}",RA=new CSSStyleSheet;RA.replaceSync(Cc);class ni extends HTMLElement{static _visibleCountAttribute="visible-count";static _cyclicalNavigationAttribute="cyclical-navigation";_currentIndex=0;_visibleCount=3;_cyclicalNavigation=!1;_MIN_VISIBLE=1;_MAX_VISIBLE=5;_slotElement=null;_navPrevButton=null;_navNextButton=null;_buttonsWrapper=null;_slotChangeListener=null;_keyDownListener=null;constructor(){super(),this.attachShadow({mode:"open"}),this.shadowRoot?.adoptedStyleSheets.push(RA)}static get observedAttributes(){return[ni._visibleCountAttribute,ni._cyclicalNavigationAttribute]}get visibleButtons(){const t=this.getAttribute(ni._visibleCountAttribute);if(t!==null&&t!==le){const e=parseInt(t,10);return Math.max(this._MIN_VISIBLE,Math.min(this._MAX_VISIBLE,e))}return this._visibleCount}set visibleButtons(t){const e=Math.max(this._MIN_VISIBLE,Math.min(this._MAX_VISIBLE,t));this.setAttribute(ni._visibleCountAttribute,String(e))}get cyclicalNavigation(){return this.hasAttribute(ni._cyclicalNavigationAttribute)}set cyclicalNavigation(t){t?this.setAttribute(ni._cyclicalNavigationAttribute,le):this.removeAttribute(ni._cyclicalNavigationAttribute)}connectedCallback(){this._render(),this._cacheElements(),this._setupSlotListener(),this._setupKeyboardListener(),this._updateButtonVisibility()}disconnectedCallback(){this._removeSlotListener(),this._removeKeyboardListener()}attributeChangedCallback(t,e,i){t===ni._visibleCountAttribute?(this._visibleCount=this.visibleButtons,this._buttonsWrapper!==null&&this._buttonsWrapper.style.setProperty("--bar-menu-visible-count",String(this.visibleButtons)),this._updateButtonVisibility()):t===ni._cyclicalNavigationAttribute&&(this._cyclicalNavigation=this.cyclicalNavigation,this._updateButtonVisibility())}_render(){this.shadowRoot!==null&&(this.shadowRoot.innerHTML=mc)}_cacheElements(){this._slotElement=this.shadowRoot?.querySelector("slot")??null,this._navPrevButton=this.shadowRoot?.querySelector(".nav-prev")??null,this._navNextButton=this.shadowRoot?.querySelector(".nav-next")??null,this._buttonsWrapper=this.shadowRoot?.querySelector(".buttons-wrapper")??null,this._buttonsWrapper!==null&&this._buttonsWrapper.style.setProperty("--bar-menu-visible-count",String(this.visibleButtons)),this._navPrevButton!==null&&(this._navPrevButton.setAttribute("aria-label","Previous"),this._navPrevButton.addEventListener(zn.CLICK,()=>{this._scrollPrevious()})),this._navNextButton!==null&&(this._navNextButton.setAttribute("aria-label","Next"),this._navNextButton.addEventListener(zn.CLICK,()=>{this._scrollNext()}))}_setupSlotListener(){this._slotElement!==null&&(this._slotChangeListener=()=>{this._currentIndex=0,this._updateButtonVisibility()},this._slotElement.addEventListener("slotchange",this._slotChangeListener))}_removeSlotListener(){this._slotElement!==null&&this._slotChangeListener!==null&&this._slotElement.removeEventListener("slotchange",this._slotChangeListener)}_setupKeyboardListener(){this._keyDownListener=t=>{t.key==="ArrowLeft"?(t.preventDefault(),this._scrollPrevious()):t.key==="ArrowRight"&&(t.preventDefault(),this._scrollNext())},this.addEventListener(EA.KEY_DOWN,this._keyDownListener)}_removeKeyboardListener(){this._keyDownListener!==null&&this.removeEventListener(EA.KEY_DOWN,this._keyDownListener)}_getSlottedButtons(){return this._slotElement===null?[]:this._slotElement.assignedElements()}_updateButtonVisibility(t){const e=this._getSlottedButtons(),i=e.length,n=this.visibleButtons,r=this._currentIndex,a=Math.min(r+n,i);e.forEach((o,l)=>{const A=l>=r&&l<a,h=o;A||(o.classList.remove("visible-button"),o.classList.remove("animating"),h.style.display="none")}),t!==void 0?(e[0]?.offsetHeight,e.forEach((o,l)=>{if(l>=r&&l<a){const A=o;A.style.display="inline-flex",o.classList.add("animating");const h=l%this.visibleButtons*50;A.style.transitionDelay=`${h}ms`}}),e[0]?.offsetHeight,e.forEach((o,l)=>{l>=r&&l<a&&o.classList.add("visible-button")}),setTimeout(()=>{e.forEach(o=>{o.classList.remove("animating"),o.style.transitionDelay=le})},400)):e.forEach((o,l)=>{const A=l>=r&&l<a,h=o;A&&(h.style.display="inline-flex",o.classList.add("visible-button"))}),this._updateNavigationButtons(i,n)}_updateNavigationButtons(t,e){const i=t>e,n=this._currentIndex+e<t,r=this._currentIndex===0,a=!n;this._navPrevButton!==null&&(i?(this._navPrevButton.classList.add("visible"),this._navPrevButton.disabled=!this._cyclicalNavigation&&r):this._navPrevButton.classList.remove("visible")),this._navNextButton!==null&&(i?(this._navNextButton.classList.add("visible"),this._navNextButton.disabled=!this._cyclicalNavigation&&a):this._navNextButton.classList.remove("visible"))}_scrollPrevious(){const t=this._getSlottedButtons().length,e=this.visibleButtons;this._currentIndex>0?(this._currentIndex=Math.max(0,this._currentIndex-e),this._updateButtonVisibility("previous")):this._cyclicalNavigation&&t>e&&(this._currentIndex=Math.max(0,t-e),this._updateButtonVisibility("previous"))}_scrollNext(){const t=this._getSlottedButtons().length,e=this.visibleButtons,i=this._currentIndex+e;i<t?(this._currentIndex=i,this._updateButtonVisibility("next")):this._cyclicalNavigation&&t>e&&(this._currentIndex=0,this._updateButtonVisibility("next"))}scrollToButton(t){const e=this._getSlottedButtons().length,i=this.visibleButtons;t>=0&&t<e&&(this._currentIndex=Math.max(0,Math.min(t,e-i)),this._updateButtonVisibility())}getVisibleButtons(){return this._getSlottedButtons().filter(t=>t.classList.contains("visible-button"))}getAllButtons(){return this._getSlottedButtons()}getCurrentIndex(){return this._currentIndex}}const Ic="bar-menu",xc=Object.freeze(Object.defineProperty({__proto__:null,BarMenuComponent:ni,selector:Ic},Symbol.toStringTag,{value:"Module"})),Ge="srgb",PA="srgb-linear",DA="linear",ha="srgb";function vc(s){for(let t=s.length-1;t>=0;--t)if(s[t]>=65535)return!0;return!1}function LA(s){return document.createElementNS("http://www.w3.org/1999/xhtml",s)}const NA={};function BA(s){const t=s[0];if(typeof t=="string"&&t.startsWith("TSL:")){const e=s[1];e&&e.isStackTrace?s[0]+=" "+e.getLocation():s[1]='Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.'}return s}function Me(...s){s=BA(s);const t="THREE."+s.shift();{const e=s[0];e&&e.isStackTrace?console.warn(e.getError(t)):console.warn(t,...s)}}function cn(...s){s=BA(s);const t="THREE."+s.shift();{const e=s[0];e&&e.isStackTrace?console.error(e.getError(t)):console.error(t,...s)}}function FA(...s){const t=s.join(" ");t in NA||(NA[t]=!0,Me(...s))}class rr{addEventListener(t,e){this._listeners===void 0&&(this._listeners={});const i=this._listeners;i[t]===void 0&&(i[t]=[]),i[t].indexOf(e)===-1&&i[t].push(e)}hasEventListener(t,e){const i=this._listeners;return i===void 0?!1:i[t]!==void 0&&i[t].indexOf(e)!==-1}removeEventListener(t,e){const i=this._listeners;if(i===void 0)return;const n=i[t];if(n!==void 0){const r=n.indexOf(e);r!==-1&&n.splice(r,1)}}dispatchEvent(t){const e=this._listeners;if(e===void 0)return;const i=e[t.type];if(i!==void 0){t.target=this;const n=i.slice(0);for(let r=0,a=n.length;r<a;r++)n[r].call(this,t);t.target=null}}}const be=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];function _s(){const s=Math.random()*4294967295|0,t=Math.random()*4294967295|0,e=Math.random()*4294967295|0,i=Math.random()*4294967295|0;return(be[s&255]+be[s>>8&255]+be[s>>16&255]+be[s>>24&255]+"-"+be[t&255]+be[t>>8&255]+"-"+be[t>>16&15|64]+be[t>>24&255]+"-"+be[e&63|128]+be[e>>8&255]+"-"+be[e>>16&255]+be[e>>24&255]+be[i&255]+be[i>>8&255]+be[i>>16&255]+be[i>>24&255]).toLowerCase()}function Ht(s,t,e){return Math.max(t,Math.min(e,s))}function Ec(s,t){return(s%t+t)%t}function ca(s,t,e){return(1-e)*s+e*t}function Rs(s,t){switch(t.constructor){case Float32Array:return s;case Uint32Array:return s/4294967295;case Uint16Array:return s/65535;case Uint8Array:return s/255;case Int32Array:return Math.max(s/2147483647,-1);case Int16Array:return Math.max(s/32767,-1);case Int8Array:return Math.max(s/127,-1);default:throw new Error("Invalid component type.")}}function Fe(s,t){switch(t.constructor){case Float32Array:return s;case Uint32Array:return Math.round(s*4294967295);case Uint16Array:return Math.round(s*65535);case Uint8Array:return Math.round(s*255);case Int32Array:return Math.round(s*2147483647);case Int16Array:return Math.round(s*32767);case Int8Array:return Math.round(s*127);default:throw new Error("Invalid component type.")}}class He{constructor(t=0,e=0){He.prototype.isVector2=!0,this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,i=this.y,n=t.elements;return this.x=n[0]*e+n[3]*i+n[6],this.y=n[1]*e+n[4]*i+n[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Ht(this.x,t.x,e.x),this.y=Ht(this.y,t.y,e.y),this}clampScalar(t,e){return this.x=Ht(this.x,t,e),this.y=Ht(this.y,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Ht(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(Ht(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y;return e*e+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const i=Math.cos(e),n=Math.sin(e),r=this.x-t.x,a=this.y-t.y;return this.x=r*i-a*n+t.x,this.y=r*n+a*i+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class Ps{constructor(t=0,e=0,i=0,n=1){this.isQuaternion=!0,this._x=t,this._y=e,this._z=i,this._w=n}static slerpFlat(t,e,i,n,r,a,o){let l=i[n+0],A=i[n+1],h=i[n+2],c=i[n+3],u=r[a+0],d=r[a+1],p=r[a+2],m=r[a+3];if(c!==m||l!==u||A!==d||h!==p){let g=l*u+A*d+h*p+c*m;g<0&&(u=-u,d=-d,p=-p,m=-m,g=-g);let f=1-o;if(g<.9995){const M=Math.acos(g),y=Math.sin(M);f=Math.sin(f*M)/y,o=Math.sin(o*M)/y,l=l*f+u*o,A=A*f+d*o,h=h*f+p*o,c=c*f+m*o}else{l=l*f+u*o,A=A*f+d*o,h=h*f+p*o,c=c*f+m*o;const M=1/Math.sqrt(l*l+A*A+h*h+c*c);l*=M,A*=M,h*=M,c*=M}}t[e]=l,t[e+1]=A,t[e+2]=h,t[e+3]=c}static multiplyQuaternionsFlat(t,e,i,n,r,a){const o=i[n],l=i[n+1],A=i[n+2],h=i[n+3],c=r[a],u=r[a+1],d=r[a+2],p=r[a+3];return t[e]=o*p+h*c+l*d-A*u,t[e+1]=l*p+h*u+A*c-o*d,t[e+2]=A*p+h*d+o*u-l*c,t[e+3]=h*p-o*c-l*u-A*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,i,n){return this._x=t,this._y=e,this._z=i,this._w=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e=!0){const i=t._x,n=t._y,r=t._z,a=t._order,o=Math.cos,l=Math.sin,A=o(i/2),h=o(n/2),c=o(r/2),u=l(i/2),d=l(n/2),p=l(r/2);switch(a){case"XYZ":this._x=u*h*c+A*d*p,this._y=A*d*c-u*h*p,this._z=A*h*p+u*d*c,this._w=A*h*c-u*d*p;break;case"YXZ":this._x=u*h*c+A*d*p,this._y=A*d*c-u*h*p,this._z=A*h*p-u*d*c,this._w=A*h*c+u*d*p;break;case"ZXY":this._x=u*h*c-A*d*p,this._y=A*d*c+u*h*p,this._z=A*h*p+u*d*c,this._w=A*h*c-u*d*p;break;case"ZYX":this._x=u*h*c-A*d*p,this._y=A*d*c+u*h*p,this._z=A*h*p-u*d*c,this._w=A*h*c+u*d*p;break;case"YZX":this._x=u*h*c+A*d*p,this._y=A*d*c+u*h*p,this._z=A*h*p-u*d*c,this._w=A*h*c-u*d*p;break;case"XZY":this._x=u*h*c-A*d*p,this._y=A*d*c-u*h*p,this._z=A*h*p+u*d*c,this._w=A*h*c+u*d*p;break;default:Me("Quaternion: .setFromEuler() encountered an unknown order: "+a)}return e===!0&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const i=e/2,n=Math.sin(i);return this._x=t.x*n,this._y=t.y*n,this._z=t.z*n,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,i=e[0],n=e[4],r=e[8],a=e[1],o=e[5],l=e[9],A=e[2],h=e[6],c=e[10],u=i+o+c;if(u>0){const d=.5/Math.sqrt(u+1);this._w=.25/d,this._x=(h-l)*d,this._y=(r-A)*d,this._z=(a-n)*d}else if(i>o&&i>c){const d=2*Math.sqrt(1+i-o-c);this._w=(h-l)/d,this._x=.25*d,this._y=(n+a)/d,this._z=(r+A)/d}else if(o>c){const d=2*Math.sqrt(1+o-i-c);this._w=(r-A)/d,this._x=(n+a)/d,this._y=.25*d,this._z=(l+h)/d}else{const d=2*Math.sqrt(1+c-i-o);this._w=(a-n)/d,this._x=(r+A)/d,this._y=(l+h)/d,this._z=.25*d}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let i=t.dot(e)+1;return i<1e-8?(i=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=i):(this._x=0,this._y=-t.z,this._z=t.y,this._w=i)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=i),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(Ht(this.dot(t),-1,1)))}rotateTowards(t,e){const i=this.angleTo(t);if(i===0)return this;const n=Math.min(1,e/i);return this.slerp(t,n),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return t===0?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const i=t._x,n=t._y,r=t._z,a=t._w,o=e._x,l=e._y,A=e._z,h=e._w;return this._x=i*h+a*o+n*A-r*l,this._y=n*h+a*l+r*o-i*A,this._z=r*h+a*A+i*l-n*o,this._w=a*h-i*o-n*l-r*A,this._onChangeCallback(),this}slerp(t,e){let i=t._x,n=t._y,r=t._z,a=t._w,o=this.dot(t);o<0&&(i=-i,n=-n,r=-r,a=-a,o=-o);let l=1-e;if(o<.9995){const A=Math.acos(o),h=Math.sin(A);l=Math.sin(l*A)/h,e=Math.sin(e*A)/h,this._x=this._x*l+i*e,this._y=this._y*l+n*e,this._z=this._z*l+r*e,this._w=this._w*l+a*e,this._onChangeCallback()}else this._x=this._x*l+i*e,this._y=this._y*l+n*e,this._z=this._z*l+r*e,this._w=this._w*l+a*e,this.normalize();return this}slerpQuaternions(t,e,i){return this.copy(t).slerp(e,i)}random(){const t=2*Math.PI*Math.random(),e=2*Math.PI*Math.random(),i=Math.random(),n=Math.sqrt(1-i),r=Math.sqrt(i);return this.set(n*Math.sin(t),n*Math.cos(t),r*Math.sin(e),r*Math.cos(e))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class V{constructor(t=0,e=0,i=0){V.prototype.isVector3=!0,this.x=t,this.y=e,this.z=i}set(t,e,i){return i===void 0&&(i=this.z),this.x=t,this.y=e,this.z=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(OA.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(OA.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,i=this.y,n=this.z,r=t.elements;return this.x=r[0]*e+r[3]*i+r[6]*n,this.y=r[1]*e+r[4]*i+r[7]*n,this.z=r[2]*e+r[5]*i+r[8]*n,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,i=this.y,n=this.z,r=t.elements,a=1/(r[3]*e+r[7]*i+r[11]*n+r[15]);return this.x=(r[0]*e+r[4]*i+r[8]*n+r[12])*a,this.y=(r[1]*e+r[5]*i+r[9]*n+r[13])*a,this.z=(r[2]*e+r[6]*i+r[10]*n+r[14])*a,this}applyQuaternion(t){const e=this.x,i=this.y,n=this.z,r=t.x,a=t.y,o=t.z,l=t.w,A=2*(a*n-o*i),h=2*(o*e-r*n),c=2*(r*i-a*e);return this.x=e+l*A+a*c-o*h,this.y=i+l*h+o*A-r*c,this.z=n+l*c+r*h-a*A,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,i=this.y,n=this.z,r=t.elements;return this.x=r[0]*e+r[4]*i+r[8]*n,this.y=r[1]*e+r[5]*i+r[9]*n,this.z=r[2]*e+r[6]*i+r[10]*n,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Ht(this.x,t.x,e.x),this.y=Ht(this.y,t.y,e.y),this.z=Ht(this.z,t.z,e.z),this}clampScalar(t,e){return this.x=Ht(this.x,t,e),this.y=Ht(this.y,t,e),this.z=Ht(this.z,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Ht(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this.z=t.z+(e.z-t.z)*i,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){const i=t.x,n=t.y,r=t.z,a=e.x,o=e.y,l=e.z;return this.x=n*l-r*o,this.y=r*a-i*l,this.z=i*o-n*a,this}projectOnVector(t){const e=t.lengthSq();if(e===0)return this.set(0,0,0);const i=t.dot(this)/e;return this.copy(t).multiplyScalar(i)}projectOnPlane(t){return ua.copy(this).projectOnVector(t),this.sub(ua)}reflect(t){return this.sub(ua.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(Ht(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y,n=this.z-t.z;return e*e+i*i+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,i){const n=Math.sin(e)*t;return this.x=n*Math.sin(i),this.y=Math.cos(e)*t,this.z=n*Math.cos(i),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,i){return this.x=t*Math.sin(e),this.y=i,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),i=this.setFromMatrixColumn(t,1).length(),n=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=i,this.z=n,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,e*4)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,e*3)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=Math.random()*Math.PI*2,e=Math.random()*2-1,i=Math.sqrt(1-e*e);return this.x=i*Math.cos(t),this.y=e,this.z=i*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const ua=new V,OA=new Ps;class Wi{constructor(t,e,i,n,r,a,o,l,A){Wi.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],t!==void 0&&this.set(t,e,i,n,r,a,o,l,A)}set(t,e,i,n,r,a,o,l,A){const h=this.elements;return h[0]=t,h[1]=n,h[2]=o,h[3]=e,h[4]=r,h[5]=l,h[6]=i,h[7]=a,h[8]=A,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],this}extractBasis(t,e,i){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,n=e.elements,r=this.elements,a=i[0],o=i[3],l=i[6],A=i[1],h=i[4],c=i[7],u=i[2],d=i[5],p=i[8],m=n[0],g=n[3],f=n[6],M=n[1],y=n[4],x=n[7],w=n[2],T=n[5],_=n[8];return r[0]=a*m+o*M+l*w,r[3]=a*g+o*y+l*T,r[6]=a*f+o*x+l*_,r[1]=A*m+h*M+c*w,r[4]=A*g+h*y+c*T,r[7]=A*f+h*x+c*_,r[2]=u*m+d*M+p*w,r[5]=u*g+d*y+p*T,r[8]=u*f+d*x+p*_,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],a=t[4],o=t[5],l=t[6],A=t[7],h=t[8];return e*a*h-e*o*A-i*r*h+i*o*l+n*r*A-n*a*l}invert(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],a=t[4],o=t[5],l=t[6],A=t[7],h=t[8],c=h*a-o*A,u=o*l-h*r,d=A*r-a*l,p=e*c+i*u+n*d;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);const m=1/p;return t[0]=c*m,t[1]=(n*A-h*i)*m,t[2]=(o*i-n*a)*m,t[3]=u*m,t[4]=(h*e-n*l)*m,t[5]=(n*r-o*e)*m,t[6]=d*m,t[7]=(i*l-A*e)*m,t[8]=(a*e-i*r)*m,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,i,n,r,a,o){const l=Math.cos(r),A=Math.sin(r);return this.set(i*l,i*A,-i*(l*a+A*o)+a+t,-n*A,n*l,-n*(-A*a+l*o)+o+e,0,0,1),this}scale(t,e){return this.premultiply(da.makeScale(t,e)),this}rotate(t){return this.premultiply(da.makeRotation(-t)),this}translate(t,e){return this.premultiply(da.makeTranslation(t,e)),this}makeTranslation(t,e){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,i,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){const e=this.elements,i=t.elements;for(let n=0;n<9;n++)if(e[n]!==i[n])return!1;return!0}fromArray(t,e=0){for(let i=0;i<9;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t}clone(){return new this.constructor().fromArray(this.elements)}}const da=new Wi,UA=new Wi().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),zA=new Wi().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function yc(){const s={enabled:!0,workingColorSpace:PA,spaces:{},convert:function(n,r,a){return this.enabled===!1||r===a||!r||!a||(this.spaces[r].transfer===ha&&(n.r=bi(n.r),n.g=bi(n.g),n.b=bi(n.b)),this.spaces[r].primaries!==this.spaces[a].primaries&&(n.applyMatrix3(this.spaces[r].toXYZ),n.applyMatrix3(this.spaces[a].fromXYZ)),this.spaces[a].transfer===ha&&(n.r=kn(n.r),n.g=kn(n.g),n.b=kn(n.b))),n},workingToColorSpace:function(n,r){return this.convert(n,this.workingColorSpace,r)},colorSpaceToWorking:function(n,r){return this.convert(n,r,this.workingColorSpace)},getPrimaries:function(n){return this.spaces[n].primaries},getTransfer:function(n){return n===""?DA:this.spaces[n].transfer},getToneMappingMode:function(n){return this.spaces[n].outputColorSpaceConfig.toneMappingMode||"standard"},getLuminanceCoefficients:function(n,r=this.workingColorSpace){return n.fromArray(this.spaces[r].luminanceCoefficients)},define:function(n){Object.assign(this.spaces,n)},_getMatrix:function(n,r,a){return n.copy(this.spaces[r].toXYZ).multiply(this.spaces[a].fromXYZ)},_getDrawingBufferColorSpace:function(n){return this.spaces[n].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(n=this.workingColorSpace){return this.spaces[n].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(n,r){return FA("ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),s.workingToColorSpace(n,r)},toWorkingColorSpace:function(n,r){return FA("ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),s.colorSpaceToWorking(n,r)}},t=[.64,.33,.3,.6,.15,.06],e=[.2126,.7152,.0722],i=[.3127,.329];return s.define({[PA]:{primaries:t,whitePoint:i,transfer:DA,toXYZ:UA,fromXYZ:zA,luminanceCoefficients:e,workingColorSpaceConfig:{unpackColorSpace:Ge},outputColorSpaceConfig:{drawingBufferColorSpace:Ge}},[Ge]:{primaries:t,whitePoint:i,transfer:ha,toXYZ:UA,fromXYZ:zA,luminanceCoefficients:e,outputColorSpaceConfig:{drawingBufferColorSpace:Ge}}}),s}const si=yc();function bi(s){return s<.04045?s*.0773993808:Math.pow(s*.9478672986+.0521327014,2.4)}function kn(s){return s<.0031308?s*12.92:1.055*Math.pow(s,.41666)-.055}let Gn;class Sc{static getDataURL(t,e="image/png"){if(/^data:/i.test(t.src)||typeof HTMLCanvasElement>"u")return t.src;let i;if(t instanceof HTMLCanvasElement)i=t;else{Gn===void 0&&(Gn=LA("canvas")),Gn.width=t.width,Gn.height=t.height;const n=Gn.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),i=Gn}return i.toDataURL(e)}static sRGBToLinear(t){if(typeof HTMLImageElement<"u"&&t instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&t instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&t instanceof ImageBitmap){const e=LA("canvas");e.width=t.width,e.height=t.height;const i=e.getContext("2d");i.drawImage(t,0,0,t.width,t.height);const n=i.getImageData(0,0,t.width,t.height),r=n.data;for(let a=0;a<r.length;a++)r[a]=bi(r[a]/255)*255;return i.putImageData(n,0,0),e}else if(t.data){const e=t.data.slice(0);for(let i=0;i<e.length;i++)e instanceof Uint8Array||e instanceof Uint8ClampedArray?e[i]=Math.floor(bi(e[i]/255)*255):e[i]=bi(e[i]);return{data:e,width:t.width,height:t.height}}else return Me("ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."),t}}let Mc=0;class bc{constructor(t=null){this.isSource=!0,Object.defineProperty(this,"id",{value:Mc++}),this.uuid=_s(),this.data=t,this.dataReady=!0,this.version=0}getSize(t){const e=this.data;return typeof HTMLVideoElement<"u"&&e instanceof HTMLVideoElement?t.set(e.videoWidth,e.videoHeight,0):typeof VideoFrame<"u"&&e instanceof VideoFrame?t.set(e.displayHeight,e.displayWidth,0):e!==null?t.set(e.width,e.height,e.depth||0):t.set(0,0,0),t}set needsUpdate(t){t===!0&&this.version++}toJSON(t){const e=t===void 0||typeof t=="string";if(!e&&t.images[this.uuid]!==void 0)return t.images[this.uuid];const i={uuid:this.uuid,url:""},n=this.data;if(n!==null){let r;if(Array.isArray(n)){r=[];for(let a=0,o=n.length;a<o;a++)n[a].isDataTexture?r.push(fa(n[a].image)):r.push(fa(n[a]))}else r=fa(n);i.url=r}return e||(t.images[this.uuid]=i),i}}function fa(s){return typeof HTMLImageElement<"u"&&s instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&s instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&s instanceof ImageBitmap?Sc.getDataURL(s):s.data?{data:Array.from(s.data),width:s.width,height:s.height,type:s.data.constructor.name}:(Me("Texture: Unable to serialize Texture."),{})}let Tc=0;const ga=new V;class pi extends rr{constructor(t=pi.DEFAULT_IMAGE,e=pi.DEFAULT_MAPPING,i=1001,n=1001,r=1006,a=1008,o=1023,l=1009,A=pi.DEFAULT_ANISOTROPY,h=""){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:Tc++}),this.uuid=_s(),this.name="",this.source=new bc(t),this.mipmaps=[],this.mapping=e,this.channel=0,this.wrapS=i,this.wrapT=n,this.magFilter=r,this.minFilter=a,this.anisotropy=A,this.format=o,this.internalFormat=null,this.type=l,this.offset=new He(0,0),this.repeat=new He(1,1),this.center=new He(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Wi,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=h,this.userData={},this.updateRanges=[],this.version=0,this.onUpdate=null,this.renderTarget=null,this.isRenderTargetTexture=!1,this.isArrayTexture=!!(t&&t.depth&&t.depth>1),this.pmremVersion=0}get width(){return this.source.getSize(ga).x}get height(){return this.source.getSize(ga).y}get depth(){return this.source.getSize(ga).z}get image(){return this.source.data}set image(t=null){this.source.data=t}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(t){return this.name=t.name,this.source=t.source,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.channel=t.channel,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.colorSpace=t.colorSpace,this.renderTarget=t.renderTarget,this.isRenderTargetTexture=t.isRenderTargetTexture,this.isArrayTexture=t.isArrayTexture,this.userData=JSON.parse(JSON.stringify(t.userData)),this.needsUpdate=!0,this}setValues(t){for(const e in t){const i=t[e];if(i===void 0){Me(`Texture.setValues(): parameter '${e}' has value of undefined.`);continue}const n=this[e];if(n===void 0){Me(`Texture.setValues(): property '${e}' does not exist.`);continue}n&&i&&n.isVector2&&i.isVector2||n&&i&&n.isVector3&&i.isVector3||n&&i&&n.isMatrix3&&i.isMatrix3?n.copy(i):this[e]=i}}toJSON(t){const e=t===void 0||typeof t=="string";if(!e&&t.textures[this.uuid]!==void 0)return t.textures[this.uuid];const i={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(t).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),e||(t.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(this.mapping!==300)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case 1e3:t.x=t.x-Math.floor(t.x);break;case 1001:t.x=t.x<0?0:1;break;case 1002:Math.abs(Math.floor(t.x)%2)===1?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x);break}if(t.y<0||t.y>1)switch(this.wrapT){case 1e3:t.y=t.y-Math.floor(t.y);break;case 1001:t.y=t.y<0?0:1;break;case 1002:Math.abs(Math.floor(t.y)%2)===1?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y);break}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){t===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(t){t===!0&&this.pmremVersion++}}pi.DEFAULT_IMAGE=null,pi.DEFAULT_MAPPING=300,pi.DEFAULT_ANISOTROPY=1;class Ds{constructor(t=0,e=0,i=0,n=1){Ds.prototype.isVector4=!0,this.x=t,this.y=e,this.z=i,this.w=n}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,i,n){return this.x=t,this.y=e,this.z=i,this.w=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w!==void 0?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,i=this.y,n=this.z,r=this.w,a=t.elements;return this.x=a[0]*e+a[4]*i+a[8]*n+a[12]*r,this.y=a[1]*e+a[5]*i+a[9]*n+a[13]*r,this.z=a[2]*e+a[6]*i+a[10]*n+a[14]*r,this.w=a[3]*e+a[7]*i+a[11]*n+a[15]*r,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,i,n,r;const a=t.elements,o=a[0],l=a[4],A=a[8],h=a[1],c=a[5],u=a[9],d=a[2],p=a[6],m=a[10];if(Math.abs(l-h)<.01&&Math.abs(A-d)<.01&&Math.abs(u-p)<.01){if(Math.abs(l+h)<.1&&Math.abs(A+d)<.1&&Math.abs(u+p)<.1&&Math.abs(o+c+m-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;const f=(o+1)/2,M=(c+1)/2,y=(m+1)/2,x=(l+h)/4,w=(A+d)/4,T=(u+p)/4;return f>M&&f>y?f<.01?(i=0,n=.707106781,r=.707106781):(i=Math.sqrt(f),n=x/i,r=w/i):M>y?M<.01?(i=.707106781,n=0,r=.707106781):(n=Math.sqrt(M),i=x/n,r=T/n):y<.01?(i=.707106781,n=.707106781,r=0):(r=Math.sqrt(y),i=w/r,n=T/r),this.set(i,n,r,e),this}let g=Math.sqrt((p-u)*(p-u)+(A-d)*(A-d)+(h-l)*(h-l));return Math.abs(g)<.001&&(g=1),this.x=(p-u)/g,this.y=(A-d)/g,this.z=(h-l)/g,this.w=Math.acos((o+c+m-1)/2),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this.w=e[15],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Ht(this.x,t.x,e.x),this.y=Ht(this.y,t.y,e.y),this.z=Ht(this.z,t.z,e.z),this.w=Ht(this.w,t.w,e.w),this}clampScalar(t,e){return this.x=Ht(this.x,t,e),this.y=Ht(this.y,t,e),this.z=Ht(this.z,t,e),this.w=Ht(this.w,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Ht(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this.z=t.z+(e.z-t.z)*i,this.w=t.w+(e.w-t.w)*i,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class ri{constructor(t,e,i,n,r,a,o,l,A,h,c,u,d,p,m,g){ri.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!==void 0&&this.set(t,e,i,n,r,a,o,l,A,h,c,u,d,p,m,g)}set(t,e,i,n,r,a,o,l,A,h,c,u,d,p,m,g){const f=this.elements;return f[0]=t,f[4]=e,f[8]=i,f[12]=n,f[1]=r,f[5]=a,f[9]=o,f[13]=l,f[2]=A,f[6]=h,f[10]=c,f[14]=u,f[3]=d,f[7]=p,f[11]=m,f[15]=g,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new ri().fromArray(this.elements)}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],e[9]=i[9],e[10]=i[10],e[11]=i[11],e[12]=i[12],e[13]=i[13],e[14]=i[14],e[15]=i[15],this}copyPosition(t){const e=this.elements,i=t.elements;return e[12]=i[12],e[13]=i[13],e[14]=i[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,i){return this.determinant()===0?(t.set(1,0,0),e.set(0,1,0),i.set(0,0,1),this):(t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this)}makeBasis(t,e,i){return this.set(t.x,e.x,i.x,0,t.y,e.y,i.y,0,t.z,e.z,i.z,0,0,0,0,1),this}extractRotation(t){if(t.determinant()===0)return this.identity();const e=this.elements,i=t.elements,n=1/Hn.setFromMatrixColumn(t,0).length(),r=1/Hn.setFromMatrixColumn(t,1).length(),a=1/Hn.setFromMatrixColumn(t,2).length();return e[0]=i[0]*n,e[1]=i[1]*n,e[2]=i[2]*n,e[3]=0,e[4]=i[4]*r,e[5]=i[5]*r,e[6]=i[6]*r,e[7]=0,e[8]=i[8]*a,e[9]=i[9]*a,e[10]=i[10]*a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){const e=this.elements,i=t.x,n=t.y,r=t.z,a=Math.cos(i),o=Math.sin(i),l=Math.cos(n),A=Math.sin(n),h=Math.cos(r),c=Math.sin(r);if(t.order==="XYZ"){const u=a*h,d=a*c,p=o*h,m=o*c;e[0]=l*h,e[4]=-l*c,e[8]=A,e[1]=d+p*A,e[5]=u-m*A,e[9]=-o*l,e[2]=m-u*A,e[6]=p+d*A,e[10]=a*l}else if(t.order==="YXZ"){const u=l*h,d=l*c,p=A*h,m=A*c;e[0]=u+m*o,e[4]=p*o-d,e[8]=a*A,e[1]=a*c,e[5]=a*h,e[9]=-o,e[2]=d*o-p,e[6]=m+u*o,e[10]=a*l}else if(t.order==="ZXY"){const u=l*h,d=l*c,p=A*h,m=A*c;e[0]=u-m*o,e[4]=-a*c,e[8]=p+d*o,e[1]=d+p*o,e[5]=a*h,e[9]=m-u*o,e[2]=-a*A,e[6]=o,e[10]=a*l}else if(t.order==="ZYX"){const u=a*h,d=a*c,p=o*h,m=o*c;e[0]=l*h,e[4]=p*A-d,e[8]=u*A+m,e[1]=l*c,e[5]=m*A+u,e[9]=d*A-p,e[2]=-A,e[6]=o*l,e[10]=a*l}else if(t.order==="YZX"){const u=a*l,d=a*A,p=o*l,m=o*A;e[0]=l*h,e[4]=m-u*c,e[8]=p*c+d,e[1]=c,e[5]=a*h,e[9]=-o*h,e[2]=-A*h,e[6]=d*c+p,e[10]=u-m*c}else if(t.order==="XZY"){const u=a*l,d=a*A,p=o*l,m=o*A;e[0]=l*h,e[4]=-c,e[8]=A*h,e[1]=u*c+m,e[5]=a*h,e[9]=d*c-p,e[2]=p*c-d,e[6]=o*h,e[10]=m*c+u}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(wc,t,_c)}lookAt(t,e,i){const n=this.elements;return Ve.subVectors(t,e),Ve.lengthSq()===0&&(Ve.z=1),Ve.normalize(),Yi.crossVectors(i,Ve),Yi.lengthSq()===0&&(Math.abs(i.z)===1?Ve.x+=1e-4:Ve.z+=1e-4,Ve.normalize(),Yi.crossVectors(i,Ve)),Yi.normalize(),ar.crossVectors(Ve,Yi),n[0]=Yi.x,n[4]=ar.x,n[8]=Ve.x,n[1]=Yi.y,n[5]=ar.y,n[9]=Ve.y,n[2]=Yi.z,n[6]=ar.z,n[10]=Ve.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,n=e.elements,r=this.elements,a=i[0],o=i[4],l=i[8],A=i[12],h=i[1],c=i[5],u=i[9],d=i[13],p=i[2],m=i[6],g=i[10],f=i[14],M=i[3],y=i[7],x=i[11],w=i[15],T=n[0],_=n[4],P=n[8],E=n[12],v=n[1],b=n[5],z=n[9],F=n[13],U=n[2],W=n[6],Y=n[10],$=n[14],H=n[3],rt=n[7],lt=n[11],mt=n[15];return r[0]=a*T+o*v+l*U+A*H,r[4]=a*_+o*b+l*W+A*rt,r[8]=a*P+o*z+l*Y+A*lt,r[12]=a*E+o*F+l*$+A*mt,r[1]=h*T+c*v+u*U+d*H,r[5]=h*_+c*b+u*W+d*rt,r[9]=h*P+c*z+u*Y+d*lt,r[13]=h*E+c*F+u*$+d*mt,r[2]=p*T+m*v+g*U+f*H,r[6]=p*_+m*b+g*W+f*rt,r[10]=p*P+m*z+g*Y+f*lt,r[14]=p*E+m*F+g*$+f*mt,r[3]=M*T+y*v+x*U+w*H,r[7]=M*_+y*b+x*W+w*rt,r[11]=M*P+y*z+x*Y+w*lt,r[15]=M*E+y*F+x*$+w*mt,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],i=t[4],n=t[8],r=t[12],a=t[1],o=t[5],l=t[9],A=t[13],h=t[2],c=t[6],u=t[10],d=t[14],p=t[3],m=t[7],g=t[11],f=t[15],M=l*d-A*u,y=o*d-A*c,x=o*u-l*c,w=a*d-A*h,T=a*u-l*h,_=a*c-o*h;return e*(m*M-g*y+f*x)-i*(p*M-g*w+f*T)+n*(p*y-m*w+f*_)-r*(p*x-m*T+g*_)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,i){const n=this.elements;return t.isVector3?(n[12]=t.x,n[13]=t.y,n[14]=t.z):(n[12]=t,n[13]=e,n[14]=i),this}invert(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],a=t[4],o=t[5],l=t[6],A=t[7],h=t[8],c=t[9],u=t[10],d=t[11],p=t[12],m=t[13],g=t[14],f=t[15],M=e*o-i*a,y=e*l-n*a,x=e*A-r*a,w=i*l-n*o,T=i*A-r*o,_=n*A-r*l,P=h*m-c*p,E=h*g-u*p,v=h*f-d*p,b=c*g-u*m,z=c*f-d*m,F=u*f-d*g,U=M*F-y*z+x*b+w*v-T*E+_*P;if(U===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const W=1/U;return t[0]=(o*F-l*z+A*b)*W,t[1]=(n*z-i*F-r*b)*W,t[2]=(m*_-g*T+f*w)*W,t[3]=(u*T-c*_-d*w)*W,t[4]=(l*v-a*F-A*E)*W,t[5]=(e*F-n*v+r*E)*W,t[6]=(g*x-p*_-f*y)*W,t[7]=(h*_-u*x+d*y)*W,t[8]=(a*z-o*v+A*P)*W,t[9]=(i*v-e*z-r*P)*W,t[10]=(p*T-m*x+f*M)*W,t[11]=(c*x-h*T-d*M)*W,t[12]=(o*E-a*b-l*P)*W,t[13]=(e*b-i*E+n*P)*W,t[14]=(m*y-p*w-g*M)*W,t[15]=(h*w-c*y+u*M)*W,this}scale(t){const e=this.elements,i=t.x,n=t.y,r=t.z;return e[0]*=i,e[4]*=n,e[8]*=r,e[1]*=i,e[5]*=n,e[9]*=r,e[2]*=i,e[6]*=n,e[10]*=r,e[3]*=i,e[7]*=n,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],i=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],n=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,i,n))}makeTranslation(t,e,i){return t.isVector3?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,e,0,0,1,i,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),i=Math.sin(t);return this.set(1,0,0,0,0,e,-i,0,0,i,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,0,i,0,0,1,0,0,-i,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,0,i,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const i=Math.cos(e),n=Math.sin(e),r=1-i,a=t.x,o=t.y,l=t.z,A=r*a,h=r*o;return this.set(A*a+i,A*o-n*l,A*l+n*o,0,A*o+n*l,h*o+i,h*l-n*a,0,A*l-n*o,h*l+n*a,r*l*l+i,0,0,0,0,1),this}makeScale(t,e,i){return this.set(t,0,0,0,0,e,0,0,0,0,i,0,0,0,0,1),this}makeShear(t,e,i,n,r,a){return this.set(1,i,r,0,t,1,a,0,e,n,1,0,0,0,0,1),this}compose(t,e,i){const n=this.elements,r=e._x,a=e._y,o=e._z,l=e._w,A=r+r,h=a+a,c=o+o,u=r*A,d=r*h,p=r*c,m=a*h,g=a*c,f=o*c,M=l*A,y=l*h,x=l*c,w=i.x,T=i.y,_=i.z;return n[0]=(1-(m+f))*w,n[1]=(d+x)*w,n[2]=(p-y)*w,n[3]=0,n[4]=(d-x)*T,n[5]=(1-(u+f))*T,n[6]=(g+M)*T,n[7]=0,n[8]=(p+y)*_,n[9]=(g-M)*_,n[10]=(1-(u+m))*_,n[11]=0,n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=1,this}decompose(t,e,i){const n=this.elements;t.x=n[12],t.y=n[13],t.z=n[14];const r=this.determinant();if(r===0)return i.set(1,1,1),e.identity(),this;let a=Hn.set(n[0],n[1],n[2]).length();const o=Hn.set(n[4],n[5],n[6]).length(),l=Hn.set(n[8],n[9],n[10]).length();r<0&&(a=-a),ai.copy(this);const A=1/a,h=1/o,c=1/l;return ai.elements[0]*=A,ai.elements[1]*=A,ai.elements[2]*=A,ai.elements[4]*=h,ai.elements[5]*=h,ai.elements[6]*=h,ai.elements[8]*=c,ai.elements[9]*=c,ai.elements[10]*=c,e.setFromRotationMatrix(ai),i.x=a,i.y=o,i.z=l,this}makePerspective(t,e,i,n,r,a,o=2e3,l=!1){const A=this.elements,h=2*r/(e-t),c=2*r/(i-n),u=(e+t)/(e-t),d=(i+n)/(i-n);let p,m;if(l)p=r/(a-r),m=a*r/(a-r);else if(o===2e3)p=-(a+r)/(a-r),m=-2*a*r/(a-r);else if(o===2001)p=-a/(a-r),m=-a*r/(a-r);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+o);return A[0]=h,A[4]=0,A[8]=u,A[12]=0,A[1]=0,A[5]=c,A[9]=d,A[13]=0,A[2]=0,A[6]=0,A[10]=p,A[14]=m,A[3]=0,A[7]=0,A[11]=-1,A[15]=0,this}makeOrthographic(t,e,i,n,r,a,o=2e3,l=!1){const A=this.elements,h=2/(e-t),c=2/(i-n),u=-(e+t)/(e-t),d=-(i+n)/(i-n);let p,m;if(l)p=1/(a-r),m=a/(a-r);else if(o===2e3)p=-2/(a-r),m=-(a+r)/(a-r);else if(o===2001)p=-1/(a-r),m=-r/(a-r);else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+o);return A[0]=h,A[4]=0,A[8]=0,A[12]=u,A[1]=0,A[5]=c,A[9]=0,A[13]=d,A[2]=0,A[6]=0,A[10]=p,A[14]=m,A[3]=0,A[7]=0,A[11]=0,A[15]=1,this}equals(t){const e=this.elements,i=t.elements;for(let n=0;n<16;n++)if(e[n]!==i[n])return!1;return!0}fromArray(t,e=0){for(let i=0;i<16;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t[e+9]=i[9],t[e+10]=i[10],t[e+11]=i[11],t[e+12]=i[12],t[e+13]=i[13],t[e+14]=i[14],t[e+15]=i[15],t}}const Hn=new V,ai=new ri,wc=new V(0,0,0),_c=new V(1,1,1),Yi=new V,ar=new V,Ve=new V,kA=new ri,GA=new Ps;class Vn{constructor(t=0,e=0,i=0,n=Vn.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=e,this._z=i,this._order=n}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,i,n=this._order){return this._x=t,this._y=e,this._z=i,this._order=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,i=!0){const n=t.elements,r=n[0],a=n[4],o=n[8],l=n[1],A=n[5],h=n[9],c=n[2],u=n[6],d=n[10];switch(e){case"XYZ":this._y=Math.asin(Ht(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-h,d),this._z=Math.atan2(-a,r)):(this._x=Math.atan2(u,A),this._z=0);break;case"YXZ":this._x=Math.asin(-Ht(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(o,d),this._z=Math.atan2(l,A)):(this._y=Math.atan2(-c,r),this._z=0);break;case"ZXY":this._x=Math.asin(Ht(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(-c,d),this._z=Math.atan2(-a,A)):(this._y=0,this._z=Math.atan2(l,r));break;case"ZYX":this._y=Math.asin(-Ht(c,-1,1)),Math.abs(c)<.9999999?(this._x=Math.atan2(u,d),this._z=Math.atan2(l,r)):(this._x=0,this._z=Math.atan2(-a,A));break;case"YZX":this._z=Math.asin(Ht(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-h,A),this._y=Math.atan2(-c,r)):(this._x=0,this._y=Math.atan2(o,d));break;case"XZY":this._z=Math.asin(-Ht(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(u,A),this._y=Math.atan2(o,r)):(this._x=Math.atan2(-h,d),this._y=0);break;default:Me("Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,i===!0&&this._onChangeCallback(),this}setFromQuaternion(t,e,i){return kA.makeRotationFromQuaternion(t),this.setFromRotationMatrix(kA,e,i)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return GA.setFromEuler(this),this.setFromQuaternion(GA,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],t[3]!==void 0&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}Vn.DEFAULT_ORDER="XYZ";class Rc{constructor(){this.mask=1}set(t){this.mask=(1<<t|0)>>>0}enable(t){this.mask|=1<<t|0}enableAll(){this.mask=-1}toggle(t){this.mask^=1<<t|0}disable(t){this.mask&=~(1<<t|0)}disableAll(){this.mask=0}test(t){return(this.mask&t.mask)!==0}isEnabled(t){return(this.mask&(1<<t|0))!==0}}let Pc=0;const HA=new V,Wn=new Ps,Ti=new ri,or=new V,Ls=new V,Dc=new V,Lc=new Ps,VA=new V(1,0,0),WA=new V(0,1,0),YA=new V(0,0,1),XA={type:"added"},Nc={type:"removed"},Yn={type:"childadded",child:null},pa={type:"childremoved",child:null};class qe extends rr{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:Pc++}),this.uuid=_s(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=qe.DEFAULT_UP.clone();const t=new V,e=new Vn,i=new Ps,n=new V(1,1,1);function r(){i.setFromEuler(e,!1)}function a(){e.setFromQuaternion(i,void 0,!1)}e._onChange(r),i._onChange(a),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:i},scale:{configurable:!0,enumerable:!0,value:n},modelViewMatrix:{value:new ri},normalMatrix:{value:new Wi}}),this.matrix=new ri,this.matrixWorld=new ri,this.matrixAutoUpdate=qe.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=qe.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new Rc,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.customDepthMaterial=void 0,this.customDistanceMaterial=void 0,this.static=!1,this.userData={},this.pivot=null}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,e){return Wn.setFromAxisAngle(t,e),this.quaternion.multiply(Wn),this}rotateOnWorldAxis(t,e){return Wn.setFromAxisAngle(t,e),this.quaternion.premultiply(Wn),this}rotateX(t){return this.rotateOnAxis(VA,t)}rotateY(t){return this.rotateOnAxis(WA,t)}rotateZ(t){return this.rotateOnAxis(YA,t)}translateOnAxis(t,e){return HA.copy(t).applyQuaternion(this.quaternion),this.position.add(HA.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis(VA,t)}translateY(t){return this.translateOnAxis(WA,t)}translateZ(t){return this.translateOnAxis(YA,t)}localToWorld(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(Ti.copy(this.matrixWorld).invert())}lookAt(t,e,i){t.isVector3?or.copy(t):or.set(t,e,i);const n=this.parent;this.updateWorldMatrix(!0,!1),Ls.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?Ti.lookAt(Ls,or,this.up):Ti.lookAt(or,Ls,this.up),this.quaternion.setFromRotationMatrix(Ti),n&&(Ti.extractRotation(n.matrixWorld),Wn.setFromRotationMatrix(Ti),this.quaternion.premultiply(Wn.invert()))}add(t){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return t===this?(cn("Object3D.add: object can't be added as a child of itself.",t),this):(t&&t.isObject3D?(t.removeFromParent(),t.parent=this,this.children.push(t),t.dispatchEvent(XA),Yn.child=t,this.dispatchEvent(Yn),Yn.child=null):cn("Object3D.add: object not an instance of THREE.Object3D.",t),this)}remove(t){if(arguments.length>1){for(let i=0;i<arguments.length;i++)this.remove(arguments[i]);return this}const e=this.children.indexOf(t);return e!==-1&&(t.parent=null,this.children.splice(e,1),t.dispatchEvent(Nc),pa.child=t,this.dispatchEvent(pa),pa.child=null),this}removeFromParent(){const t=this.parent;return t!==null&&t.remove(this),this}clear(){return this.remove(...this.children)}attach(t){return this.updateWorldMatrix(!0,!1),Ti.copy(this.matrixWorld).invert(),t.parent!==null&&(t.parent.updateWorldMatrix(!0,!1),Ti.multiply(t.parent.matrixWorld)),t.applyMatrix4(Ti),t.removeFromParent(),t.parent=this,this.children.push(t),t.updateWorldMatrix(!1,!0),t.dispatchEvent(XA),Yn.child=t,this.dispatchEvent(Yn),Yn.child=null,this}getObjectById(t){return this.getObjectByProperty("id",t)}getObjectByName(t){return this.getObjectByProperty("name",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let i=0,n=this.children.length;i<n;i++){const r=this.children[i].getObjectByProperty(t,e);if(r!==void 0)return r}}getObjectsByProperty(t,e,i=[]){this[t]===e&&i.push(this);const n=this.children;for(let r=0,a=n.length;r<a;r++)n[r].getObjectsByProperty(t,e,i);return i}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(Ls,t,Dc),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(Ls,Lc,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].traverse(t)}traverseVisible(t){if(this.visible===!1)return;t(this);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].traverseVisible(t)}traverseAncestors(t){const e=this.parent;e!==null&&(t(e),e.traverseAncestors(t))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale);const t=this.pivot;if(t!==null){const e=t.x,i=t.y,n=t.z,r=this.matrix.elements;r[12]+=e-r[0]*e-r[4]*i-r[8]*n,r[13]+=i-r[1]*e-r[5]*i-r[9]*n,r[14]+=n-r[2]*e-r[6]*i-r[10]*n}this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,t=!0);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].updateMatrixWorld(t)}updateWorldMatrix(t,e){const i=this.parent;if(t===!0&&i!==null&&i.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),e===!0){const n=this.children;for(let r=0,a=n.length;r<a;r++)n[r].updateWorldMatrix(!1,!0)}}toJSON(t){const e=t===void 0||typeof t=="string",i={};e&&(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},i.metadata={version:4.7,type:"Object",generator:"Object3D.toJSON"});const n={};n.uuid=this.uuid,n.type=this.type,this.name!==""&&(n.name=this.name),this.castShadow===!0&&(n.castShadow=!0),this.receiveShadow===!0&&(n.receiveShadow=!0),this.visible===!1&&(n.visible=!1),this.frustumCulled===!1&&(n.frustumCulled=!1),this.renderOrder!==0&&(n.renderOrder=this.renderOrder),this.static!==!1&&(n.static=this.static),Object.keys(this.userData).length>0&&(n.userData=this.userData),n.layers=this.layers.mask,n.matrix=this.matrix.toArray(),n.up=this.up.toArray(),this.pivot!==null&&(n.pivot=this.pivot.toArray()),this.matrixAutoUpdate===!1&&(n.matrixAutoUpdate=!1),this.morphTargetDictionary!==void 0&&(n.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(n.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(n.type="InstancedMesh",n.count=this.count,n.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(n.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(n.type="BatchedMesh",n.perObjectFrustumCulled=this.perObjectFrustumCulled,n.sortObjects=this.sortObjects,n.drawRanges=this._drawRanges,n.reservedRanges=this._reservedRanges,n.geometryInfo=this._geometryInfo.map(o=>({...o,boundingBox:o.boundingBox?o.boundingBox.toJSON():void 0,boundingSphere:o.boundingSphere?o.boundingSphere.toJSON():void 0})),n.instanceInfo=this._instanceInfo.map(o=>({...o})),n.availableInstanceIds=this._availableInstanceIds.slice(),n.availableGeometryIds=this._availableGeometryIds.slice(),n.nextIndexStart=this._nextIndexStart,n.nextVertexStart=this._nextVertexStart,n.geometryCount=this._geometryCount,n.maxInstanceCount=this._maxInstanceCount,n.maxVertexCount=this._maxVertexCount,n.maxIndexCount=this._maxIndexCount,n.geometryInitialized=this._geometryInitialized,n.matricesTexture=this._matricesTexture.toJSON(t),n.indirectTexture=this._indirectTexture.toJSON(t),this._colorsTexture!==null&&(n.colorsTexture=this._colorsTexture.toJSON(t)),this.boundingSphere!==null&&(n.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(n.boundingBox=this.boundingBox.toJSON()));function r(o,l){return o[l.uuid]===void 0&&(o[l.uuid]=l.toJSON(t)),l.uuid}if(this.isScene)this.background&&(this.background.isColor?n.background=this.background.toJSON():this.background.isTexture&&(n.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(n.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){n.geometry=r(t.geometries,this.geometry);const o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){const l=o.shapes;if(Array.isArray(l))for(let A=0,h=l.length;A<h;A++){const c=l[A];r(t.shapes,c)}else r(t.shapes,l)}}if(this.isSkinnedMesh&&(n.bindMode=this.bindMode,n.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(r(t.skeletons,this.skeleton),n.skeleton=this.skeleton.uuid)),this.material!==void 0)if(Array.isArray(this.material)){const o=[];for(let l=0,A=this.material.length;l<A;l++)o.push(r(t.materials,this.material[l]));n.material=o}else n.material=r(t.materials,this.material);if(this.children.length>0){n.children=[];for(let o=0;o<this.children.length;o++)n.children.push(this.children[o].toJSON(t).object)}if(this.animations.length>0){n.animations=[];for(let o=0;o<this.animations.length;o++){const l=this.animations[o];n.animations.push(r(t.animations,l))}}if(e){const o=a(t.geometries),l=a(t.materials),A=a(t.textures),h=a(t.images),c=a(t.shapes),u=a(t.skeletons),d=a(t.animations),p=a(t.nodes);o.length>0&&(i.geometries=o),l.length>0&&(i.materials=l),A.length>0&&(i.textures=A),h.length>0&&(i.images=h),c.length>0&&(i.shapes=c),u.length>0&&(i.skeletons=u),d.length>0&&(i.animations=d),p.length>0&&(i.nodes=p)}return i.object=n,i;function a(o){const l=[];for(const A in o){const h=o[A];delete h.metadata,l.push(h)}return l}}clone(t){return new this.constructor().copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),t.pivot!==null&&(this.pivot=t.pivot.clone()),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.static=t.static,this.animations=t.animations.slice(),this.userData=JSON.parse(JSON.stringify(t.userData)),e===!0)for(let i=0;i<t.children.length;i++){const n=t.children[i];this.add(n.clone())}return this}}qe.DEFAULT_UP=new V(0,1,0),qe.DEFAULT_MATRIX_AUTO_UPDATE=!0,qe.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;const ZA={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Xi={h:0,s:0,l:0},Ar={h:0,s:0,l:0};function ma(s,t,e){return e<0&&(e+=1),e>1&&(e-=1),e<1/6?s+(t-s)*6*e:e<1/2?t:e<2/3?s+(t-s)*6*(2/3-e):s}class Zi{constructor(t,e,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(t,e,i)}set(t,e,i){if(e===void 0&&i===void 0){const n=t;n&&n.isColor?this.copy(n):typeof n=="number"?this.setHex(n):typeof n=="string"&&this.setStyle(n)}else this.setRGB(t,e,i);return this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=Ge){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(t&255)/255,si.colorSpaceToWorking(this,e),this}setRGB(t,e,i,n=si.workingColorSpace){return this.r=t,this.g=e,this.b=i,si.colorSpaceToWorking(this,n),this}setHSL(t,e,i,n=si.workingColorSpace){if(t=Ec(t,1),e=Ht(e,0,1),i=Ht(i,0,1),e===0)this.r=this.g=this.b=i;else{const r=i<=.5?i*(1+e):i+e-i*e,a=2*i-r;this.r=ma(a,r,t+1/3),this.g=ma(a,r,t),this.b=ma(a,r,t-1/3)}return si.colorSpaceToWorking(this,n),this}setStyle(t,e=Ge){function i(r){r!==void 0&&parseFloat(r)<1&&Me("Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^(\w+)\(([^\)]*)\)/.exec(t)){let r;const a=n[1],o=n[2];switch(a){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setRGB(Math.min(255,parseInt(r[1],10))/255,Math.min(255,parseInt(r[2],10))/255,Math.min(255,parseInt(r[3],10))/255,e);if(r=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setRGB(Math.min(100,parseInt(r[1],10))/100,Math.min(100,parseInt(r[2],10))/100,Math.min(100,parseInt(r[3],10))/100,e);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setHSL(parseFloat(r[1])/360,parseFloat(r[2])/100,parseFloat(r[3])/100,e);break;default:Me("Color: Unknown color model "+t)}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(t)){const r=n[1],a=r.length;if(a===3)return this.setRGB(parseInt(r.charAt(0),16)/15,parseInt(r.charAt(1),16)/15,parseInt(r.charAt(2),16)/15,e);if(a===6)return this.setHex(parseInt(r,16),e);Me("Color: Invalid hex color "+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=Ge){const i=ZA[t.toLowerCase()];return i!==void 0?this.setHex(i,e):Me("Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=bi(t.r),this.g=bi(t.g),this.b=bi(t.b),this}copyLinearToSRGB(t){return this.r=kn(t.r),this.g=kn(t.g),this.b=kn(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=Ge){return si.workingToColorSpace(Te.copy(this),t),Math.round(Ht(Te.r*255,0,255))*65536+Math.round(Ht(Te.g*255,0,255))*256+Math.round(Ht(Te.b*255,0,255))}getHexString(t=Ge){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=si.workingColorSpace){si.workingToColorSpace(Te.copy(this),e);const i=Te.r,n=Te.g,r=Te.b,a=Math.max(i,n,r),o=Math.min(i,n,r);let l,A;const h=(o+a)/2;if(o===a)l=0,A=0;else{const c=a-o;switch(A=h<=.5?c/(a+o):c/(2-a-o),a){case i:l=(n-r)/c+(n<r?6:0);break;case n:l=(r-i)/c+2;break;case r:l=(i-n)/c+4;break}l/=6}return t.h=l,t.s=A,t.l=h,t}getRGB(t,e=si.workingColorSpace){return si.workingToColorSpace(Te.copy(this),e),t.r=Te.r,t.g=Te.g,t.b=Te.b,t}getStyle(t=Ge){si.workingToColorSpace(Te.copy(this),t);const e=Te.r,i=Te.g,n=Te.b;return t!==Ge?`color(${t} ${e.toFixed(3)} ${i.toFixed(3)} ${n.toFixed(3)})`:`rgb(${Math.round(e*255)},${Math.round(i*255)},${Math.round(n*255)})`}offsetHSL(t,e,i){return this.getHSL(Xi),this.setHSL(Xi.h+t,Xi.s+e,Xi.l+i)}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,i){return this.r=t.r+(e.r-t.r)*i,this.g=t.g+(e.g-t.g)*i,this.b=t.b+(e.b-t.b)*i,this}lerpHSL(t,e){this.getHSL(Xi),t.getHSL(Ar);const i=ca(Xi.h,Ar.h,e),n=ca(Xi.s,Ar.s,e),r=ca(Xi.l,Ar.l,e);return this.setHSL(i,n,r),this}setFromVector3(t){return this.r=t.x,this.g=t.y,this.b=t.z,this}applyMatrix3(t){const e=this.r,i=this.g,n=this.b,r=t.elements;return this.r=r[0]*e+r[3]*i+r[6]*n,this.g=r[1]*e+r[4]*i+r[7]*n,this.b=r[2]*e+r[5]*i+r[8]*n,this}equals(t){return t.r===this.r&&t.g===this.g&&t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}}const Te=new Zi;Zi.NAMES=ZA;const oi=new V,wi=new V,Ca=new V,_i=new V,Xn=new V,Zn=new V,jA=new V,Ia=new V,xa=new V,va=new V,Ea=new Ds,ya=new Ds,Sa=new Ds;class Ai{constructor(t=new V,e=new V,i=new V){this.a=t,this.b=e,this.c=i}static getNormal(t,e,i,n){n.subVectors(i,e),oi.subVectors(t,e),n.cross(oi);const r=n.lengthSq();return r>0?n.multiplyScalar(1/Math.sqrt(r)):n.set(0,0,0)}static getBarycoord(t,e,i,n,r){oi.subVectors(n,e),wi.subVectors(i,e),Ca.subVectors(t,e);const a=oi.dot(oi),o=oi.dot(wi),l=oi.dot(Ca),A=wi.dot(wi),h=wi.dot(Ca),c=a*A-o*o;if(c===0)return r.set(0,0,0),null;const u=1/c,d=(A*l-o*h)*u,p=(a*h-o*l)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,i,n){return this.getBarycoord(t,e,i,n,_i)===null?!1:_i.x>=0&&_i.y>=0&&_i.x+_i.y<=1}static getInterpolation(t,e,i,n,r,a,o,l){return this.getBarycoord(t,e,i,n,_i)===null?(l.x=0,l.y=0,"z"in l&&(l.z=0),"w"in l&&(l.w=0),null):(l.setScalar(0),l.addScaledVector(r,_i.x),l.addScaledVector(a,_i.y),l.addScaledVector(o,_i.z),l)}static getInterpolatedAttribute(t,e,i,n,r,a){return Ea.setScalar(0),ya.setScalar(0),Sa.setScalar(0),Ea.fromBufferAttribute(t,e),ya.fromBufferAttribute(t,i),Sa.fromBufferAttribute(t,n),a.setScalar(0),a.addScaledVector(Ea,r.x),a.addScaledVector(ya,r.y),a.addScaledVector(Sa,r.z),a}static isFrontFacing(t,e,i,n){return oi.subVectors(i,e),wi.subVectors(t,e),oi.cross(wi).dot(n)<0}set(t,e,i){return this.a.copy(t),this.b.copy(e),this.c.copy(i),this}setFromPointsAndIndices(t,e,i,n){return this.a.copy(t[e]),this.b.copy(t[i]),this.c.copy(t[n]),this}setFromAttributeAndIndices(t,e,i,n){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,i),this.c.fromBufferAttribute(t,n),this}clone(){return new this.constructor().copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return oi.subVectors(this.c,this.b),wi.subVectors(this.a,this.b),oi.cross(wi).length()*.5}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return Ai.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return Ai.getBarycoord(t,this.a,this.b,this.c,e)}getInterpolation(t,e,i,n,r){return Ai.getInterpolation(t,this.a,this.b,this.c,e,i,n,r)}containsPoint(t){return Ai.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return Ai.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const i=this.a,n=this.b,r=this.c;let a,o;Xn.subVectors(n,i),Zn.subVectors(r,i),Ia.subVectors(t,i);const l=Xn.dot(Ia),A=Zn.dot(Ia);if(l<=0&&A<=0)return e.copy(i);xa.subVectors(t,n);const h=Xn.dot(xa),c=Zn.dot(xa);if(h>=0&&c<=h)return e.copy(n);const u=l*c-h*A;if(u<=0&&l>=0&&h<=0)return a=l/(l-h),e.copy(i).addScaledVector(Xn,a);va.subVectors(t,r);const d=Xn.dot(va),p=Zn.dot(va);if(p>=0&&d<=p)return e.copy(r);const m=d*A-l*p;if(m<=0&&A>=0&&p<=0)return o=A/(A-p),e.copy(i).addScaledVector(Zn,o);const g=h*p-d*c;if(g<=0&&c-h>=0&&d-p>=0)return jA.subVectors(r,n),o=(c-h)/(c-h+(d-p)),e.copy(n).addScaledVector(jA,o);const f=1/(g+m+u);return a=m*f,o=u*f,e.copy(i).addScaledVector(Xn,a).addScaledVector(Zn,o)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}class Ns{constructor(t=new V(1/0,1/0,1/0),e=new V(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){this.makeEmpty();for(let e=0,i=t.length;e<i;e+=3)this.expandByPoint(li.fromArray(t,e));return this}setFromBufferAttribute(t){this.makeEmpty();for(let e=0,i=t.count;e<i;e++)this.expandByPoint(li.fromBufferAttribute(t,e));return this}setFromPoints(t){this.makeEmpty();for(let e=0,i=t.length;e<i;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const i=li.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(i),this.max.copy(t).add(i),this}setFromObject(t,e=!1){return this.makeEmpty(),this.expandByObject(t,e)}clone(){return new this.constructor().copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t,e=!1){t.updateWorldMatrix(!1,!1);const i=t.geometry;if(i!==void 0){const r=i.getAttribute("position");if(e===!0&&r!==void 0&&t.isInstancedMesh!==!0)for(let a=0,o=r.count;a<o;a++)t.isMesh===!0?t.getVertexPosition(a,li):li.fromBufferAttribute(r,a),li.applyMatrix4(t.matrixWorld),this.expandByPoint(li);else t.boundingBox!==void 0?(t.boundingBox===null&&t.computeBoundingBox(),lr.copy(t.boundingBox)):(i.boundingBox===null&&i.computeBoundingBox(),lr.copy(i.boundingBox)),lr.applyMatrix4(t.matrixWorld),this.union(lr)}const n=t.children;for(let r=0,a=n.length;r<a;r++)this.expandByObject(n[r],e);return this}containsPoint(t){return t.x>=this.min.x&&t.x<=this.max.x&&t.y>=this.min.y&&t.y<=this.max.y&&t.z>=this.min.z&&t.z<=this.max.z}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return t.max.x>=this.min.x&&t.min.x<=this.max.x&&t.max.y>=this.min.y&&t.min.y<=this.max.y&&t.max.z>=this.min.z&&t.min.z<=this.max.z}intersectsSphere(t){return this.clampPoint(t.center,li),li.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,i;return t.normal.x>0?(e=t.normal.x*this.min.x,i=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,i=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,i+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,i+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,i+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,i+=t.normal.z*this.min.z),e<=-t.constant&&i>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(Bs),hr.subVectors(this.max,Bs),jn.subVectors(t.a,Bs),Jn.subVectors(t.b,Bs),Qn.subVectors(t.c,Bs),ji.subVectors(Jn,jn),Ji.subVectors(Qn,Jn),un.subVectors(jn,Qn);let e=[0,-ji.z,ji.y,0,-Ji.z,Ji.y,0,-un.z,un.y,ji.z,0,-ji.x,Ji.z,0,-Ji.x,un.z,0,-un.x,-ji.y,ji.x,0,-Ji.y,Ji.x,0,-un.y,un.x,0];return!Ma(e,jn,Jn,Qn,hr)||(e=[1,0,0,0,1,0,0,0,1],!Ma(e,jn,Jn,Qn,hr))?!1:(cr.crossVectors(ji,Ji),e=[cr.x,cr.y,cr.z],Ma(e,jn,Jn,Qn,hr))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,li).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=this.getSize(li).length()*.5),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()?this:(Ri[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),Ri[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),Ri[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),Ri[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),Ri[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),Ri[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),Ri[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),Ri[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(Ri),this)}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(t){return this.min.fromArray(t.min),this.max.fromArray(t.max),this}}const Ri=[new V,new V,new V,new V,new V,new V,new V,new V],li=new V,lr=new Ns,jn=new V,Jn=new V,Qn=new V,ji=new V,Ji=new V,un=new V,Bs=new V,hr=new V,cr=new V,dn=new V;function Ma(s,t,e,i,n){for(let r=0,a=s.length-3;r<=a;r+=3){dn.fromArray(s,r);const o=n.x*Math.abs(dn.x)+n.y*Math.abs(dn.y)+n.z*Math.abs(dn.z),l=t.dot(dn),A=e.dot(dn),h=i.dot(dn);if(Math.max(-Math.max(l,A,h),Math.min(l,A,h))>o)return!1}return!0}const pe=new V,ur=new He;let Bc=0;class fn{constructor(t,e,i=!1){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:Bc++}),this.name="",this.array=t,this.itemSize=e,this.count=t!==void 0?t.length/e:0,this.normalized=i,this.usage=35044,this.updateRanges=[],this.gpuType=1015,this.version=0}onUploadCallback(){}set needsUpdate(t){t===!0&&this.version++}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this.gpuType=t.gpuType,this}copyAt(t,e,i){t*=this.itemSize,i*=e.itemSize;for(let n=0,r=this.itemSize;n<r;n++)this.array[t+n]=e.array[i+n];return this}copyArray(t){return this.array.set(t),this}applyMatrix3(t){if(this.itemSize===2)for(let e=0,i=this.count;e<i;e++)ur.fromBufferAttribute(this,e),ur.applyMatrix3(t),this.setXY(e,ur.x,ur.y);else if(this.itemSize===3)for(let e=0,i=this.count;e<i;e++)pe.fromBufferAttribute(this,e),pe.applyMatrix3(t),this.setXYZ(e,pe.x,pe.y,pe.z);return this}applyMatrix4(t){for(let e=0,i=this.count;e<i;e++)pe.fromBufferAttribute(this,e),pe.applyMatrix4(t),this.setXYZ(e,pe.x,pe.y,pe.z);return this}applyNormalMatrix(t){for(let e=0,i=this.count;e<i;e++)pe.fromBufferAttribute(this,e),pe.applyNormalMatrix(t),this.setXYZ(e,pe.x,pe.y,pe.z);return this}transformDirection(t){for(let e=0,i=this.count;e<i;e++)pe.fromBufferAttribute(this,e),pe.transformDirection(t),this.setXYZ(e,pe.x,pe.y,pe.z);return this}set(t,e=0){return this.array.set(t,e),this}getComponent(t,e){let i=this.array[t*this.itemSize+e];return this.normalized&&(i=Rs(i,this.array)),i}setComponent(t,e,i){return this.normalized&&(i=Fe(i,this.array)),this.array[t*this.itemSize+e]=i,this}getX(t){let e=this.array[t*this.itemSize];return this.normalized&&(e=Rs(e,this.array)),e}setX(t,e){return this.normalized&&(e=Fe(e,this.array)),this.array[t*this.itemSize]=e,this}getY(t){let e=this.array[t*this.itemSize+1];return this.normalized&&(e=Rs(e,this.array)),e}setY(t,e){return this.normalized&&(e=Fe(e,this.array)),this.array[t*this.itemSize+1]=e,this}getZ(t){let e=this.array[t*this.itemSize+2];return this.normalized&&(e=Rs(e,this.array)),e}setZ(t,e){return this.normalized&&(e=Fe(e,this.array)),this.array[t*this.itemSize+2]=e,this}getW(t){let e=this.array[t*this.itemSize+3];return this.normalized&&(e=Rs(e,this.array)),e}setW(t,e){return this.normalized&&(e=Fe(e,this.array)),this.array[t*this.itemSize+3]=e,this}setXY(t,e,i){return t*=this.itemSize,this.normalized&&(e=Fe(e,this.array),i=Fe(i,this.array)),this.array[t+0]=e,this.array[t+1]=i,this}setXYZ(t,e,i,n){return t*=this.itemSize,this.normalized&&(e=Fe(e,this.array),i=Fe(i,this.array),n=Fe(n,this.array)),this.array[t+0]=e,this.array[t+1]=i,this.array[t+2]=n,this}setXYZW(t,e,i,n,r){return t*=this.itemSize,this.normalized&&(e=Fe(e,this.array),i=Fe(i,this.array),n=Fe(n,this.array),r=Fe(r,this.array)),this.array[t+0]=e,this.array[t+1]=i,this.array[t+2]=n,this.array[t+3]=r,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){const t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return this.name!==""&&(t.name=this.name),this.usage!==35044&&(t.usage=this.usage),t}}class Fc extends fn{constructor(t,e,i){super(new Uint16Array(t),e,i)}}class Oc extends fn{constructor(t,e,i){super(new Uint32Array(t),e,i)}}class gn extends fn{constructor(t,e,i){super(new Float32Array(t),e,i)}}const Uc=new Ns,Fs=new V,ba=new V;class JA{constructor(t=new V,e=-1){this.isSphere=!0,this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const i=this.center;e!==void 0?i.copy(e):Uc.setFromPoints(t).getCenter(i);let n=0;for(let r=0,a=t.length;r<a;r++)n=Math.max(n,i.distanceToSquared(t[r]));return this.radius=Math.sqrt(n),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){const e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))<=this.radius}clampPoint(t,e){const i=this.center.distanceToSquared(t);return e.copy(t),i>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;Fs.subVectors(t,this.center);const e=Fs.lengthSq();if(e>this.radius*this.radius){const i=Math.sqrt(e),n=(i-this.radius)*.5;this.center.addScaledVector(Fs,n/i),this.radius+=n}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(this.center.equals(t.center)===!0?this.radius=Math.max(this.radius,t.radius):(ba.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(Fs.copy(t.center).add(ba)),this.expandByPoint(Fs.copy(t.center).sub(ba))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(t){return this.radius=t.radius,this.center.fromArray(t.center),this}}let zc=0;const Ke=new ri,Ta=new qe,qn=new V,We=new Ns,Os=new Ns,ve=new V;class Kn extends rr{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:zc++}),this.uuid=_s(),this.name="",this.type="BufferGeometry",this.index=null,this.indirect=null,this.indirectOffset=0,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(vc(t)?Oc:Fc)(t,1):this.index=t,this}setIndirect(t,e=0){return this.indirect=t,this.indirectOffset=e,this}getIndirect(){return this.indirect}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return this.attributes[t]!==void 0}addGroup(t,e,i=0){this.groups.push({start:t,count:e,materialIndex:i})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;e!==void 0&&(e.applyMatrix4(t),e.needsUpdate=!0);const i=this.attributes.normal;if(i!==void 0){const r=new Wi().getNormalMatrix(t);i.applyNormalMatrix(r),i.needsUpdate=!0}const n=this.attributes.tangent;return n!==void 0&&(n.transformDirection(t),n.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}applyQuaternion(t){return Ke.makeRotationFromQuaternion(t),this.applyMatrix4(Ke),this}rotateX(t){return Ke.makeRotationX(t),this.applyMatrix4(Ke),this}rotateY(t){return Ke.makeRotationY(t),this.applyMatrix4(Ke),this}rotateZ(t){return Ke.makeRotationZ(t),this.applyMatrix4(Ke),this}translate(t,e,i){return Ke.makeTranslation(t,e,i),this.applyMatrix4(Ke),this}scale(t,e,i){return Ke.makeScale(t,e,i),this.applyMatrix4(Ke),this}lookAt(t){return Ta.lookAt(t),Ta.updateMatrix(),this.applyMatrix4(Ta.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(qn).negate(),this.translate(qn.x,qn.y,qn.z),this}setFromPoints(t){const e=this.getAttribute("position");if(e===void 0){const i=[];for(let n=0,r=t.length;n<r;n++){const a=t[n];i.push(a.x,a.y,a.z||0)}this.setAttribute("position",new gn(i,3))}else{const i=Math.min(t.length,e.count);for(let n=0;n<i;n++){const r=t[n];e.setXYZ(n,r.x,r.y,r.z||0)}t.length>e.count&&Me("BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),e.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new Ns);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){cn("BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new V(-1/0,-1/0,-1/0),new V(1/0,1/0,1/0));return}if(t!==void 0){if(this.boundingBox.setFromBufferAttribute(t),e)for(let i=0,n=e.length;i<n;i++){const r=e[i];We.setFromBufferAttribute(r),this.morphTargetsRelative?(ve.addVectors(this.boundingBox.min,We.min),this.boundingBox.expandByPoint(ve),ve.addVectors(this.boundingBox.max,We.max),this.boundingBox.expandByPoint(ve)):(this.boundingBox.expandByPoint(We.min),this.boundingBox.expandByPoint(We.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&cn('BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new JA);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){cn("BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.",this),this.boundingSphere.set(new V,1/0);return}if(t){const i=this.boundingSphere.center;if(We.setFromBufferAttribute(t),e)for(let r=0,a=e.length;r<a;r++){const o=e[r];Os.setFromBufferAttribute(o),this.morphTargetsRelative?(ve.addVectors(We.min,Os.min),We.expandByPoint(ve),ve.addVectors(We.max,Os.max),We.expandByPoint(ve)):(We.expandByPoint(Os.min),We.expandByPoint(Os.max))}We.getCenter(i);let n=0;for(let r=0,a=t.count;r<a;r++)ve.fromBufferAttribute(t,r),n=Math.max(n,i.distanceToSquared(ve));if(e)for(let r=0,a=e.length;r<a;r++){const o=e[r],l=this.morphTargetsRelative;for(let A=0,h=o.count;A<h;A++)ve.fromBufferAttribute(o,A),l&&(qn.fromBufferAttribute(t,A),ve.add(qn)),n=Math.max(n,i.distanceToSquared(ve))}this.boundingSphere.radius=Math.sqrt(n),isNaN(this.boundingSphere.radius)&&cn('BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}computeTangents(){const t=this.index,e=this.attributes;if(t===null||e.position===void 0||e.normal===void 0||e.uv===void 0){cn("BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)");return}const i=e.position,n=e.normal,r=e.uv;this.hasAttribute("tangent")===!1&&this.setAttribute("tangent",new fn(new Float32Array(4*i.count),4));const a=this.getAttribute("tangent"),o=[],l=[];for(let P=0;P<i.count;P++)o[P]=new V,l[P]=new V;const A=new V,h=new V,c=new V,u=new He,d=new He,p=new He,m=new V,g=new V;function f(P,E,v){A.fromBufferAttribute(i,P),h.fromBufferAttribute(i,E),c.fromBufferAttribute(i,v),u.fromBufferAttribute(r,P),d.fromBufferAttribute(r,E),p.fromBufferAttribute(r,v),h.sub(A),c.sub(A),d.sub(u),p.sub(u);const b=1/(d.x*p.y-p.x*d.y);isFinite(b)&&(m.copy(h).multiplyScalar(p.y).addScaledVector(c,-d.y).multiplyScalar(b),g.copy(c).multiplyScalar(d.x).addScaledVector(h,-p.x).multiplyScalar(b),o[P].add(m),o[E].add(m),o[v].add(m),l[P].add(g),l[E].add(g),l[v].add(g))}let M=this.groups;M.length===0&&(M=[{start:0,count:t.count}]);for(let P=0,E=M.length;P<E;++P){const v=M[P],b=v.start,z=v.count;for(let F=b,U=b+z;F<U;F+=3)f(t.getX(F+0),t.getX(F+1),t.getX(F+2))}const y=new V,x=new V,w=new V,T=new V;function _(P){w.fromBufferAttribute(n,P),T.copy(w);const E=o[P];y.copy(E),y.sub(w.multiplyScalar(w.dot(E))).normalize(),x.crossVectors(T,E);const v=x.dot(l[P])<0?-1:1;a.setXYZW(P,y.x,y.y,y.z,v)}for(let P=0,E=M.length;P<E;++P){const v=M[P],b=v.start,z=v.count;for(let F=b,U=b+z;F<U;F+=3)_(t.getX(F+0)),_(t.getX(F+1)),_(t.getX(F+2))}}computeVertexNormals(){const t=this.index,e=this.getAttribute("position");if(e!==void 0){let i=this.getAttribute("normal");if(i===void 0)i=new fn(new Float32Array(e.count*3),3),this.setAttribute("normal",i);else for(let u=0,d=i.count;u<d;u++)i.setXYZ(u,0,0,0);const n=new V,r=new V,a=new V,o=new V,l=new V,A=new V,h=new V,c=new V;if(t)for(let u=0,d=t.count;u<d;u+=3){const p=t.getX(u+0),m=t.getX(u+1),g=t.getX(u+2);n.fromBufferAttribute(e,p),r.fromBufferAttribute(e,m),a.fromBufferAttribute(e,g),h.subVectors(a,r),c.subVectors(n,r),h.cross(c),o.fromBufferAttribute(i,p),l.fromBufferAttribute(i,m),A.fromBufferAttribute(i,g),o.add(h),l.add(h),A.add(h),i.setXYZ(p,o.x,o.y,o.z),i.setXYZ(m,l.x,l.y,l.z),i.setXYZ(g,A.x,A.y,A.z)}else for(let u=0,d=e.count;u<d;u+=3)n.fromBufferAttribute(e,u+0),r.fromBufferAttribute(e,u+1),a.fromBufferAttribute(e,u+2),h.subVectors(a,r),c.subVectors(n,r),h.cross(c),i.setXYZ(u+0,h.x,h.y,h.z),i.setXYZ(u+1,h.x,h.y,h.z),i.setXYZ(u+2,h.x,h.y,h.z);this.normalizeNormals(),i.needsUpdate=!0}}normalizeNormals(){const t=this.attributes.normal;for(let e=0,i=t.count;e<i;e++)ve.fromBufferAttribute(t,e),ve.normalize(),t.setXYZ(e,ve.x,ve.y,ve.z)}toNonIndexed(){function t(o,l){const A=o.array,h=o.itemSize,c=o.normalized,u=new A.constructor(l.length*h);let d=0,p=0;for(let m=0,g=l.length;m<g;m++){o.isInterleavedBufferAttribute?d=l[m]*o.data.stride+o.offset:d=l[m]*h;for(let f=0;f<h;f++)u[p++]=A[d++]}return new fn(u,h,c)}if(this.index===null)return Me("BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."),this;const e=new Kn,i=this.index.array,n=this.attributes;for(const o in n){const l=n[o],A=t(l,i);e.setAttribute(o,A)}const r=this.morphAttributes;for(const o in r){const l=[],A=r[o];for(let h=0,c=A.length;h<c;h++){const u=A[h],d=t(u,i);l.push(d)}e.morphAttributes[o]=l}e.morphTargetsRelative=this.morphTargetsRelative;const a=this.groups;for(let o=0,l=a.length;o<l;o++){const A=a[o];e.addGroup(A.start,A.count,A.materialIndex)}return e}toJSON(){const t={metadata:{version:4.7,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};if(t.uuid=this.uuid,t.type=this.type,this.name!==""&&(t.name=this.name),Object.keys(this.userData).length>0&&(t.userData=this.userData),this.parameters!==void 0){const l=this.parameters;for(const A in l)l[A]!==void 0&&(t[A]=l[A]);return t}t.data={attributes:{}};const e=this.index;e!==null&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const i=this.attributes;for(const l in i){const A=i[l];t.data.attributes[l]=A.toJSON(t.data)}const n={};let r=!1;for(const l in this.morphAttributes){const A=this.morphAttributes[l],h=[];for(let c=0,u=A.length;c<u;c++){const d=A[c];h.push(d.toJSON(t.data))}h.length>0&&(n[l]=h,r=!0)}r&&(t.data.morphAttributes=n,t.data.morphTargetsRelative=this.morphTargetsRelative);const a=this.groups;a.length>0&&(t.data.groups=JSON.parse(JSON.stringify(a)));const o=this.boundingSphere;return o!==null&&(t.data.boundingSphere=o.toJSON()),t}clone(){return new this.constructor().copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const i=t.index;i!==null&&this.setIndex(i.clone());const n=t.attributes;for(const A in n){const h=n[A];this.setAttribute(A,h.clone(e))}const r=t.morphAttributes;for(const A in r){const h=[],c=r[A];for(let u=0,d=c.length;u<d;u++)h.push(c[u].clone(e));this.morphAttributes[A]=h}this.morphTargetsRelative=t.morphTargetsRelative;const a=t.groups;for(let A=0,h=a.length;A<h;A++){const c=a[A];this.addGroup(c.start,c.count,c.materialIndex)}const o=t.boundingBox;o!==null&&(this.boundingBox=o.clone());const l=t.boundingSphere;return l!==null&&(this.boundingSphere=l.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,this}dispose(){this.dispatchEvent({type:"dispose"})}}let kc=0;class wa extends rr{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:kc++}),this.uuid=_s(),this.name="",this.type="Material",this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.alphaHash=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=100,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.blendColor=new Zi(0,0,0),this.blendAlpha=0,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=7680,this.stencilZFail=7680,this.stencilZPass=7680,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.allowOverride=!0,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(t){this._alphaTest>0!=t>0&&this.version++,this._alphaTest=t}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(t!==void 0)for(const e in t){const i=t[e];if(i===void 0){Me(`Material: parameter '${e}' has value of undefined.`);continue}const n=this[e];if(n===void 0){Me(`Material: '${e}' is not a property of THREE.${this.type}.`);continue}n&&n.isColor?n.set(i):n&&n.isVector3&&i&&i.isVector3?n.copy(i):this[e]=i}}toJSON(t){const e=t===void 0||typeof t=="string";e&&(t={textures:{},images:{}});const i={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};i.uuid=this.uuid,i.type=this.type,this.name!==""&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),this.roughness!==void 0&&(i.roughness=this.roughness),this.metalness!==void 0&&(i.metalness=this.metalness),this.sheen!==void 0&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(i.shininess=this.shininess),this.clearcoat!==void 0&&(i.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(i.sheenColorMap=this.sheenColorMap.toJSON(t).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(i.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(t).uuid),this.dispersion!==void 0&&(i.dispersion=this.dispersion),this.iridescence!==void 0&&(i.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(i.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(t).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(t).uuid),this.anisotropy!==void 0&&(i.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(i.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(i.anisotropyMap=this.anisotropyMap.toJSON(t).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(t).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(t).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(t).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(t).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(t).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(t).uuid,this.combine!==void 0&&(i.combine=this.combine)),this.envMapRotation!==void 0&&(i.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(i.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(i.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(t).uuid),this.transmission!==void 0&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(t).uuid),this.thickness!==void 0&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(t).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(i.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(i.size=this.size),this.shadowSide!==null&&(i.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(i.sizeAttenuation=this.sizeAttenuation),this.blending!==1&&(i.blending=this.blending),this.side!==0&&(i.side=this.side),this.vertexColors===!0&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),this.transparent===!0&&(i.transparent=!0),this.blendSrc!==204&&(i.blendSrc=this.blendSrc),this.blendDst!==205&&(i.blendDst=this.blendDst),this.blendEquation!==100&&(i.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(i.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(i.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(i.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(i.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(i.blendAlpha=this.blendAlpha),this.depthFunc!==3&&(i.depthFunc=this.depthFunc),this.depthTest===!1&&(i.depthTest=this.depthTest),this.depthWrite===!1&&(i.depthWrite=this.depthWrite),this.colorWrite===!1&&(i.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(i.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==519&&(i.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(i.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==7680&&(i.stencilFail=this.stencilFail),this.stencilZFail!==7680&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==7680&&(i.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(i.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(i.rotation=this.rotation),this.polygonOffset===!0&&(i.polygonOffset=!0),this.polygonOffsetFactor!==0&&(i.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(i.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(i.linewidth=this.linewidth),this.dashSize!==void 0&&(i.dashSize=this.dashSize),this.gapSize!==void 0&&(i.gapSize=this.gapSize),this.scale!==void 0&&(i.scale=this.scale),this.dithering===!0&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),this.alphaHash===!0&&(i.alphaHash=!0),this.alphaToCoverage===!0&&(i.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(i.premultipliedAlpha=!0),this.forceSinglePass===!0&&(i.forceSinglePass=!0),this.allowOverride===!1&&(i.allowOverride=!1),this.wireframe===!0&&(i.wireframe=!0),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(i.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(i.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(i.flatShading=!0),this.visible===!1&&(i.visible=!1),this.toneMapped===!1&&(i.toneMapped=!1),this.fog===!1&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData);function n(r){const a=[];for(const o in r){const l=r[o];delete l.metadata,a.push(l)}return a}if(e){const r=n(t.textures),a=n(t.images);r.length>0&&(i.textures=r),a.length>0&&(i.images=a)}return i}clone(){return new this.constructor().copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.blendColor.copy(t.blendColor),this.blendAlpha=t.blendAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let i=null;if(e!==null){const n=e.length;i=new Array(n);for(let r=0;r!==n;++r)i[r]=e[r].clone()}return this.clippingPlanes=i,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaHash=t.alphaHash,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.forceSinglePass=t.forceSinglePass,this.allowOverride=t.allowOverride,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){t===!0&&this.version++}}const Pi=new V,_a=new V,dr=new V,Qi=new V,Ra=new V,fr=new V,Pa=new V;class Gc{constructor(t=new V,e=new V(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.origin).addScaledVector(this.direction,t)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Pi)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const i=e.dot(this.direction);return i<0?e.copy(this.origin):e.copy(this.origin).addScaledVector(this.direction,i)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Pi.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Pi.copy(this.origin).addScaledVector(this.direction,e),Pi.distanceToSquared(t))}distanceSqToSegment(t,e,i,n){_a.copy(t).add(e).multiplyScalar(.5),dr.copy(e).sub(t).normalize(),Qi.copy(this.origin).sub(_a);const r=t.distanceTo(e)*.5,a=-this.direction.dot(dr),o=Qi.dot(this.direction),l=-Qi.dot(dr),A=Qi.lengthSq(),h=Math.abs(1-a*a);let c,u,d,p;if(h>0)if(c=a*l-o,u=a*o-l,p=r*h,c>=0)if(u>=-p)if(u<=p){const m=1/h;c*=m,u*=m,d=c*(c+a*u+2*o)+u*(a*c+u+2*l)+A}else u=r,c=Math.max(0,-(a*u+o)),d=-c*c+u*(u+2*l)+A;else u=-r,c=Math.max(0,-(a*u+o)),d=-c*c+u*(u+2*l)+A;else u<=-p?(c=Math.max(0,-(-a*r+o)),u=c>0?-r:Math.min(Math.max(-r,-l),r),d=-c*c+u*(u+2*l)+A):u<=p?(c=0,u=Math.min(Math.max(-r,-l),r),d=u*(u+2*l)+A):(c=Math.max(0,-(a*r+o)),u=c>0?r:Math.min(Math.max(-r,-l),r),d=-c*c+u*(u+2*l)+A);else u=a>0?-r:r,c=Math.max(0,-(a*u+o)),d=-c*c+u*(u+2*l)+A;return i&&i.copy(this.origin).addScaledVector(this.direction,c),n&&n.copy(_a).addScaledVector(dr,u),d}intersectSphere(t,e){Pi.subVectors(t.center,this.origin);const i=Pi.dot(this.direction),n=Pi.dot(Pi)-i*i,r=t.radius*t.radius;if(n>r)return null;const a=Math.sqrt(r-n),o=i-a,l=i+a;return l<0?null:o<0?this.at(l,e):this.at(o,e)}intersectsSphere(t){return t.radius<0?!1:this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(e===0)return t.distanceToPoint(this.origin)===0?0:null;const i=-(this.origin.dot(t.normal)+t.constant)/e;return i>=0?i:null}intersectPlane(t,e){const i=this.distanceToPlane(t);return i===null?null:this.at(i,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);return e===0||t.normal.dot(this.direction)*e<0}intersectBox(t,e){let i,n,r,a,o,l;const A=1/this.direction.x,h=1/this.direction.y,c=1/this.direction.z,u=this.origin;return A>=0?(i=(t.min.x-u.x)*A,n=(t.max.x-u.x)*A):(i=(t.max.x-u.x)*A,n=(t.min.x-u.x)*A),h>=0?(r=(t.min.y-u.y)*h,a=(t.max.y-u.y)*h):(r=(t.max.y-u.y)*h,a=(t.min.y-u.y)*h),i>a||r>n||((r>i||isNaN(i))&&(i=r),(a<n||isNaN(n))&&(n=a),c>=0?(o=(t.min.z-u.z)*c,l=(t.max.z-u.z)*c):(o=(t.max.z-u.z)*c,l=(t.min.z-u.z)*c),i>l||o>n)||((o>i||i!==i)&&(i=o),(l<n||n!==n)&&(n=l),n<0)?null:this.at(i>=0?i:n,e)}intersectsBox(t){return this.intersectBox(t,Pi)!==null}intersectTriangle(t,e,i,n,r){Ra.subVectors(e,t),fr.subVectors(i,t),Pa.crossVectors(Ra,fr);let a=this.direction.dot(Pa),o;if(a>0){if(n)return null;o=1}else if(a<0)o=-1,a=-a;else return null;Qi.subVectors(this.origin,t);const l=o*this.direction.dot(fr.crossVectors(Qi,fr));if(l<0)return null;const A=o*this.direction.dot(Ra.cross(Qi));if(A<0||l+A>a)return null;const h=-o*Qi.dot(Pa);return h<0?null:this.at(h/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class Hc extends wa{constructor(t){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new Zi(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Vn,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}const QA=new ri,pn=new Gc,gr=new JA,qA=new V,pr=new V,mr=new V,Cr=new V,Da=new V,Ir=new V,KA=new V,xr=new V;class $A extends qe{constructor(t=new Kn,e=new Hc){super(),this.isMesh=!0,this.type="Mesh",this.geometry=t,this.material=e,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.count=1,this.updateMorphTargets()}copy(t,e){return super.copy(t,e),t.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),t.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=Array.isArray(t.material)?t.material.slice():t.material,this.geometry=t.geometry,this}updateMorphTargets(){const t=this.geometry.morphAttributes,e=Object.keys(t);if(e.length>0){const i=t[e[0]];if(i!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let n=0,r=i.length;n<r;n++){const a=i[n].name||String(n);this.morphTargetInfluences.push(0),this.morphTargetDictionary[a]=n}}}}getVertexPosition(t,e){const i=this.geometry,n=i.attributes.position,r=i.morphAttributes.position,a=i.morphTargetsRelative;e.fromBufferAttribute(n,t);const o=this.morphTargetInfluences;if(r&&o){Ir.set(0,0,0);for(let l=0,A=r.length;l<A;l++){const h=o[l],c=r[l];h!==0&&(Da.fromBufferAttribute(c,t),a?Ir.addScaledVector(Da,h):Ir.addScaledVector(Da.sub(e),h))}e.add(Ir)}return e}raycast(t,e){const i=this.geometry,n=this.material,r=this.matrixWorld;n!==void 0&&(i.boundingSphere===null&&i.computeBoundingSphere(),gr.copy(i.boundingSphere),gr.applyMatrix4(r),pn.copy(t.ray).recast(t.near),!(gr.containsPoint(pn.origin)===!1&&(pn.intersectSphere(gr,qA)===null||pn.origin.distanceToSquared(qA)>(t.far-t.near)**2))&&(QA.copy(r).invert(),pn.copy(t.ray).applyMatrix4(QA),!(i.boundingBox!==null&&pn.intersectsBox(i.boundingBox)===!1)&&this._computeIntersections(t,e,pn)))}_computeIntersections(t,e,i){let n;const r=this.geometry,a=this.material,o=r.index,l=r.attributes.position,A=r.attributes.uv,h=r.attributes.uv1,c=r.attributes.normal,u=r.groups,d=r.drawRange;if(o!==null)if(Array.isArray(a))for(let p=0,m=u.length;p<m;p++){const g=u[p],f=a[g.materialIndex],M=Math.max(g.start,d.start),y=Math.min(o.count,Math.min(g.start+g.count,d.start+d.count));for(let x=M,w=y;x<w;x+=3){const T=o.getX(x),_=o.getX(x+1),P=o.getX(x+2);n=vr(this,f,t,i,A,h,c,T,_,P),n&&(n.faceIndex=Math.floor(x/3),n.face.materialIndex=g.materialIndex,e.push(n))}}else{const p=Math.max(0,d.start),m=Math.min(o.count,d.start+d.count);for(let g=p,f=m;g<f;g+=3){const M=o.getX(g),y=o.getX(g+1),x=o.getX(g+2);n=vr(this,a,t,i,A,h,c,M,y,x),n&&(n.faceIndex=Math.floor(g/3),e.push(n))}}else if(l!==void 0)if(Array.isArray(a))for(let p=0,m=u.length;p<m;p++){const g=u[p],f=a[g.materialIndex],M=Math.max(g.start,d.start),y=Math.min(l.count,Math.min(g.start+g.count,d.start+d.count));for(let x=M,w=y;x<w;x+=3){const T=x,_=x+1,P=x+2;n=vr(this,f,t,i,A,h,c,T,_,P),n&&(n.faceIndex=Math.floor(x/3),n.face.materialIndex=g.materialIndex,e.push(n))}}else{const p=Math.max(0,d.start),m=Math.min(l.count,d.start+d.count);for(let g=p,f=m;g<f;g+=3){const M=g,y=g+1,x=g+2;n=vr(this,a,t,i,A,h,c,M,y,x),n&&(n.faceIndex=Math.floor(g/3),e.push(n))}}}}function Vc(s,t,e,i,n,r,a,o){let l;if(t.side===1?l=i.intersectTriangle(a,r,n,!0,o):l=i.intersectTriangle(n,r,a,t.side===0,o),l===null)return null;xr.copy(o),xr.applyMatrix4(s.matrixWorld);const A=e.ray.origin.distanceTo(xr);return A<e.near||A>e.far?null:{distance:A,point:xr.clone(),object:s}}function vr(s,t,e,i,n,r,a,o,l,A){s.getVertexPosition(o,pr),s.getVertexPosition(l,mr),s.getVertexPosition(A,Cr);const h=Vc(s,t,e,i,pr,mr,Cr,KA);if(h){const c=new V;Ai.getBarycoord(KA,pr,mr,Cr,c),n&&(h.uv=Ai.getInterpolatedAttribute(n,o,l,A,c,new He)),r&&(h.uv1=Ai.getInterpolatedAttribute(r,o,l,A,c,new He)),a&&(h.normal=Ai.getInterpolatedAttribute(a,o,l,A,c,new V),h.normal.dot(i.direction)>0&&h.normal.multiplyScalar(-1));const u={a:o,b:l,c:A,normal:new V,materialIndex:0};Ai.getNormal(pr,mr,Cr,u.normal),h.face=u,h.barycoord=c}return h}class Wc extends pi{constructor(t=null,e=1,i=1,n,r,a,o,l,A=1003,h=1003,c,u){super(null,a,o,l,A,h,n,r,c,u),this.isDataTexture=!0,this.image={data:t,width:e,height:i},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}class mn extends Kn{constructor(t=1,e=1,i=1,n=32,r=1,a=!1,o=0,l=Math.PI*2){super(),this.type="CylinderGeometry",this.parameters={radiusTop:t,radiusBottom:e,height:i,radialSegments:n,heightSegments:r,openEnded:a,thetaStart:o,thetaLength:l};const A=this;n=Math.floor(n),r=Math.floor(r);const h=[],c=[],u=[],d=[];let p=0;const m=[],g=i/2;let f=0;M(),a===!1&&(t>0&&y(!0),e>0&&y(!1)),this.setIndex(h),this.setAttribute("position",new gn(c,3)),this.setAttribute("normal",new gn(u,3)),this.setAttribute("uv",new gn(d,2));function M(){const x=new V,w=new V;let T=0;const _=(e-t)/i;for(let P=0;P<=r;P++){const E=[],v=P/r,b=v*(e-t)+t;for(let z=0;z<=n;z++){const F=z/n,U=F*l+o,W=Math.sin(U),Y=Math.cos(U);w.x=b*W,w.y=-v*i+g,w.z=b*Y,c.push(w.x,w.y,w.z),x.set(W,_,Y).normalize(),u.push(x.x,x.y,x.z),d.push(F,1-v),E.push(p++)}m.push(E)}for(let P=0;P<n;P++)for(let E=0;E<r;E++){const v=m[E][P],b=m[E+1][P],z=m[E+1][P+1],F=m[E][P+1];(t>0||E!==0)&&(h.push(v,b,F),T+=3),(e>0||E!==r-1)&&(h.push(b,z,F),T+=3)}A.addGroup(f,T,0),f+=T}function y(x){const w=p,T=new He,_=new V;let P=0;const E=x===!0?t:e,v=x===!0?1:-1;for(let z=1;z<=n;z++)c.push(0,g*v,0),u.push(0,v,0),d.push(.5,.5),p++;const b=p;for(let z=0;z<=n;z++){const F=z/n*l+o,U=Math.cos(F),W=Math.sin(F);_.x=E*W,_.y=g*v,_.z=E*U,c.push(_.x,_.y,_.z),u.push(0,v,0),T.x=U*.5+.5,T.y=W*.5*v+.5,d.push(T.x,T.y),p++}for(let z=0;z<n;z++){const F=w+z,U=b+z;x===!0?h.push(U,U+1,F):h.push(U+1,U,F),P+=3}A.addGroup(f,P,x===!0?1:2),f+=P}}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new mn(t.radiusTop,t.radiusBottom,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}function Yc(s){const t={};for(const e in s){t[e]={};for(const i in s[e]){const n=s[e][i];n&&(n.isColor||n.isMatrix3||n.isMatrix4||n.isVector2||n.isVector3||n.isVector4||n.isTexture||n.isQuaternion)?n.isRenderTargetTexture?(Me("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."),t[e][i]=null):t[e][i]=n.clone():Array.isArray(n)?t[e][i]=n.slice():t[e][i]=n}}return t}function Xc(s){const t=[];for(let e=0;e<s.length;e++)t.push(s[e].clone());return t}var Zc=`void main() {
|
|
56
56
|
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
57
|
-
}`,
|
|
57
|
+
}`,jc=`void main() {
|
|
58
58
|
gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );
|
|
59
|
-
}`;class
|
|
59
|
+
}`;class Jc extends wa{constructor(t){super(),this.isShaderMaterial=!0,this.type="ShaderMaterial",this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=Zc,this.fragmentShader=jc,this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.forceSinglePass=!0,this.extensions={clipCullDistance:!1,multiDraw:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv1:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,t!==void 0&&this.setValues(t)}copy(t){return super.copy(t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=Yc(t.uniforms),this.uniformsGroups=Xc(t.uniformsGroups),this.defines=Object.assign({},t.defines),this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.fog=t.fog,this.lights=t.lights,this.clipping=t.clipping,this.extensions=Object.assign({},t.extensions),this.glslVersion=t.glslVersion,this.defaultAttributeValues=Object.assign({},t.defaultAttributeValues),this.index0AttributeName=t.index0AttributeName,this.uniformsNeedUpdate=t.uniformsNeedUpdate,this}toJSON(t){const e=super.toJSON(t);e.glslVersion=this.glslVersion,e.uniforms={};for(const n in this.uniforms){const r=this.uniforms[n].value;r&&r.isTexture?e.uniforms[n]={type:"t",value:r.toJSON(t).uuid}:r&&r.isColor?e.uniforms[n]={type:"c",value:r.getHex()}:r&&r.isVector2?e.uniforms[n]={type:"v2",value:r.toArray()}:r&&r.isVector3?e.uniforms[n]={type:"v3",value:r.toArray()}:r&&r.isVector4?e.uniforms[n]={type:"v4",value:r.toArray()}:r&&r.isMatrix3?e.uniforms[n]={type:"m3",value:r.toArray()}:r&&r.isMatrix4?e.uniforms[n]={type:"m4",value:r.toArray()}:e.uniforms[n]={value:r}}Object.keys(this.defines).length>0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e.lights=this.lights,e.clipping=this.clipping;const i={};for(const n in this.extensions)this.extensions[n]===!0&&(i[n]=!0);return Object.keys(i).length>0&&(e.extensions=i),e}}class tl extends wa{constructor(t){super(),this.isMeshStandardMaterial=!0,this.type="MeshStandardMaterial",this.defines={STANDARD:""},this.color=new Zi(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Zi(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new He(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Vn,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.defines={STANDARD:""},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.envMapIntensity=t.envMapIntensity,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:"183"}})),typeof window<"u"&&(window.__THREE__?Me("WARNING: Multiple instances of Three.js being imported."):window.__THREE__="183");const Qc=`#include <common>
|
|
60
60
|
#include <batching_pars_vertex>
|
|
61
61
|
#include <uv_pars_vertex>
|
|
62
62
|
#include <displacementmap_pars_vertex>
|
|
@@ -83,7 +83,7 @@ void main() {
|
|
|
83
83
|
#include <logdepthbuf_vertex>
|
|
84
84
|
#include <clipping_planes_vertex>
|
|
85
85
|
vHighPrecisionZW = gl_Position.zw;
|
|
86
|
-
}
|
|
86
|
+
}`,qc=`#if DEPTH_PACKING == 3200
|
|
87
87
|
uniform float opacity;
|
|
88
88
|
#endif
|
|
89
89
|
#include <common>
|
|
@@ -121,11 +121,11 @@ void main() {
|
|
|
121
121
|
#elif DEPTH_PACKING == 3203
|
|
122
122
|
gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );
|
|
123
123
|
#endif
|
|
124
|
-
}`,eh={depth_vert:Ku,depth_frag:$u};class Ju extends Jn{constructor(t=(n,r,a)=>a.set(n,r,Math.cos(n)*Math.sin(r)),e=8,i=8){super(),this.type="ParametricGeometry",this.parameters={func:t,slices:e,stacks:i};const n=[],r=[],a=[],o=[],h=1e-5,l=new V,c=new V,u=new V,d=new V,f=new V,g=e+1;for(let _=0;_<=i;_++){const m=_/i;for(let p=0;p<=e;p++){const T=p/e;t(T,m,c),r.push(c.x,c.y,c.z),T-h>=0?(t(T-h,m,u),d.subVectors(c,u)):(t(T+h,m,u),d.subVectors(u,c)),m-h>=0?(t(T,m-h,u),f.subVectors(c,u)):(t(T,m+h,u),f.subVectors(u,c)),l.crossVectors(d,f).normalize(),a.push(l.x,l.y,l.z),o.push(T,m)}}for(let _=0;_<i;_++)for(let m=0;m<e;m++){const p=_*g+m,T=_*g+m+1,b=(_+1)*g+m+1,y=(_+1)*g+m;n.push(p,T,y),n.push(T,b,y)}this.setIndex(n),this.setAttribute("position",new mn(r,3)),this.setAttribute("normal",new mn(a,3)),this.setAttribute("uv",new mn(o,2))}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}}const Da=new V;class xn{p1;p2;restDistance;constructor(t,e,i){this.p1=t,this.p2=e,this.restDistance=i}resolve(){const t=this.p1,e=this.p2,i=this.restDistance;Da.subVectors(e.position,t.position);const n=Da.length();if(n===0)return;const r=Da.multiplyScalar((1-i/n)/2);t.position.add(r),e.position.sub(r)}}const ih=2,Qu=.03,td=1-Qu,ed=.12,id=1.225;class nd{position;previous;original;mass;inverseMass;acceleration;tmp;constructor(t,e){this.position=t.clone(),this.previous=t.clone(),this.original=t.clone(),this.mass=e,this.inverseMass=1/e,this.acceleration=new V,this.tmp=new V}applyForce(t){this.acceleration.addScaledVector(t,this.inverseMass)}integrate(t){const e=this.tmp.subVectors(this.position,this.previous).multiplyScalar(td).add(this.position).addScaledVector(this.acceleration,t);this.tmp=this.previous,this.previous=this.position,this.position=e,this.acceleration.set(0,0,0)}}class sd{xSegments;ySegments;restDistance;width;height;particles;constraints;particleAt;geometry;constructor(t,e,i,n){const r=i*t,a=i*e,o=[],h=[],l=(_,m)=>o[_+m*(t+1)],c=(_,m,p)=>{p.set(_*r,m*a,0)},u=new V,d=n/((e+1)*(t+1));for(let _=0;_<=e;_++)for(let m=0;m<=t;m++)c(m/t,_/e,u),o.push(new nd(u,d));for(let _=0;_<e;_++)for(let m=0;m<t;m++)h.push(new xn(l(m,_),l(m,_+1),i),new xn(l(m,_),l(m+1,_),i));for(let _=t,m=0;m<e;m++)h.push(new xn(l(_,m),l(_,m+1),i));for(let _=e,m=0;m<t;m++)h.push(new xn(l(m,_),l(m+1,_),i));const f=Math.sqrt(i*i*2);for(let _=0;_<e;_++)for(let m=0;m<t;m++)h.push(new xn(l(m,_),l(m+1,_+1),f),new xn(l(m+1,_),l(m,_+1),f));const g=new Ju(c,t,e);g.getAttribute("position").setUsage(35040),this.xSegments=t,this.ySegments=e,this.restDistance=i,this.width=r,this.height=a,this.particles=o,this.constraints=h,this.particleAt=l,this.geometry=g}reset(){for(const t of this.particles)t.previous.copy(t.position.copy(t.original))}simulate(t){const e=this.particles,i=this.constraints,n=Math.pow(t,2);for(let r=0,a=e.length;r<a;r++)e[r].integrate(n);for(let r=0,a=ih;r<a;r++)for(let o=0,h=i.length;o<h;o++)i[o].resolve()}render(){const t=this.particles,e=this.geometry,i=e.getAttribute("position"),n=i.array;for(let r=0,a=t.length;r<a;r++){const o=t[r].position,h=r*3;n[h]=o.x,n[h+1]=o.y,n[h+2]=o.z}i.needsUpdate=!0,e.computeVertexNormals()}}function rd(s){const{width:t,height:e,mass:i,restDistance:n}=s;return new sd(Math.max(1,Math.round(t/n)),Math.max(1,Math.round(e/n)),n,i*t*e)}function nh(s,t,e){const i=s*t,n=new Uint8Array(4*i),r=Math.floor(e.r*255),a=Math.floor(e.g*255),o=Math.floor(e.b*255),h=255;for(let c=0;c<i;c++){const u=c*4;n[u]=r,n[u+1]=a,n[u+2]=o,n[u+3]=h}const l=new Wu(n,s,t,1023,1009);return l.needsUpdate=!0,l}const ad=nh(1,1,new Yi(16777215));function od(s,t){const e=s.geometry;let i=ad,n;const r=o=>(o.needsUpdate=!0,o.anisotropy=16,o.minFilter=1006,o.magFilter=1006,o.wrapS=1001,o.wrapT=1001,o),a=(o,h)=>{o.colorSpace=ze;const l=new th({alphaTest:.5,color:16777215,metalness:.08,roughness:.86,side:h,map:o}),c=new Ql(e,l);return c.castShadow=!0,c.customDepthMaterial=new Zu({uniforms:{textureMap:{value:o}},vertexShader:eh.depth_vert,fragmentShader:eh.depth_frag,side:h,lights:!1,defines:{DEPTH_PACKING:"3200"}}),c.position.set(0,-s.height,0),c};return t?.texture instanceof gi?(i=r(t.texture),t.backSideTexture instanceof gi&&(n=r(t.backSideTexture))):t?.texture!==void 0&&console.error("FlagWaver.Flag: options.texture must be an instance of THREE.Texture."),[a(i,n!==void 0?0:2),n!==void 0?a(n,1):null]}const le={TOP:"top",LEFT:"left",BOTTOM:"bottom",RIGHT:"right"},ld=(()=>{const s={edges:[],spacing:1};function t(e,i,n,r){const{xSegments:a,ySegments:o,particleAt:h}=e,{spacing:l}=r;switch(n){case le.TOP:for(let c=0;c<=a;c+=l)i.push(h(c,o));break;case le.LEFT:for(let c=0;c<=o;c+=l)i.push(h(0,c));break;case le.BOTTOM:for(let c=0;c<=a;c+=l)i.push(h(c,0));break;case le.RIGHT:for(let c=0;c<=o;c+=l)i.push(h(a,c));break}}return function(e,i,n={}){const r={...s,...n},{edges:a}=r;if(typeof a=="string")t(e,i,a,r);else if(Array.isArray(a)&&a.length>0)for(let o=0,h=a.length;o<h;o++)t(e,i,a[o],r)}})(),sh=1.2,Sr=new V;class rh extends xn{resolve(){const t=this.p1,e=this.p2,i=this.restDistance*sh;Sr.subVectors(t.position,e.position);const n=Sr.length()/sh;Sr.normalize();const r=Sr.multiplyScalar(n-i);n>i&&e.position.add(r)}}function ah(s){if(Array.isArray(s))for(const t of s)oh(t);else oh(s)}function oh(s){s.map?.dispose(),s.dispose()}const hd=nh(1,1,new Yi(16777215));class zs{cloth;pins;lengthConstraints;mesh;mesh2;object;static defaults={width:1.8,height:1.2,mass:.11,restDistance:1.2/10,rigidness:1,texture:hd,backSideTexture:void 0,pin:{edges:[le.LEFT],spacing:1}};constructor(t={}){const e={...zs.defaults,...t};this.cloth=rd(e),this.pins=[],this.lengthConstraints=[];const[i,n]=od(this.cloth,e);this.mesh=i,this.mesh2=n,this.object=new je,this.object.add(this.mesh),this.mesh2!==null&&this.object.add(this.mesh2),this.pin(e.pin)}destroy(){ah(this.mesh.material),this.mesh.geometry.dispose(),this.mesh.customDepthMaterial?.dispose(),this.mesh2!==null&&(ah(this.mesh2.material),this.mesh2.customDepthMaterial?.dispose())}pin(t){ld(this.cloth,this.pins,t)}unpin(){this.pins=[]}setLengthConstraints(t){const{xSegments:e,ySegments:i,restDistance:n,particleAt:r}=this.cloth,a=[];if(t===le.LEFT)for(let o=0;o<=i;o++)for(let h=0;h<e;h++)a.push(new rh(r(h,o),r(h+1,o),n));else if(t===le.TOP)for(let o=0;o<=e;o++)for(let h=i;h>0;h--)a.push(new rh(r(o,h),r(o,h-1),n));this.lengthConstraints=a}reset(){this.cloth.reset()}simulate(t){const e=this.pins,i=this.lengthConstraints;this.cloth.simulate(t);for(const n of e)n.previous.copy(n.position.copy(n.original));for(let n=0;n<ih;n++)for(const r of i)r.resolve()}render(){this.cloth.render()}setTexture(t){t.needsUpdate=!0,t.anisotropy=16,t.minFilter=1006,t.magFilter=1006,t.wrapS=1001,t.wrapT=1001,t.colorSpace=ze;const e=this.mesh.material;e.map!==null&&e.map!==void 0&&(e.map=t,e.needsUpdate=!0);const i=this.mesh.customDepthMaterial;if(i!=null){const n=i;n.uniforms!=null&&n.uniforms.textureMap!=null&&(n.uniforms.textureMap.value=t)}if(this.mesh2!=null){const n=this.mesh2.material;n.map!=null&&(n.map=t,n.needsUpdate=!0);const r=this.mesh2.customDepthMaterial;if(r!=null){const a=r;a.uniforms?.textureMap!=null&&(a.uniforms.textureMap.value=t)}}}}const vn={CROSSBAR:"CROSSBAR",GALLERY:"GALLERY",HORIZONTAL:"HORIZONTAL",OUTRIGGER:"OUTRIGGER",VERTICAL:"VERTICAL"},Bs={NONE:"none",TOP_RIGHT:"topright",TOP_LEFT:"topleft"};class Li{top;mesh;object;constructor(t){this.create(t)}static defaults={flagpoleType:vn.VERTICAL,poleWidth:.076,poleLength:6,poleCapSize:.076*4/3,crossbarWidth:.076*2/3,crossbarLength:1.2,crossbarCapSize:.076*2/3*3/2,poleTopOffset:.1,verticalHoisting:Bs.TOP_RIGHT};destroy(){this.mesh!==void 0&&((Array.isArray(this.mesh.material)?this.mesh.material:[this.mesh.material]).forEach(t=>{t.dispose()}),this.mesh.geometry.dispose())}create(t){this.destroy();const e=Object.assign({},Li.defaults,t),i=this.buildGeometry(e),n=new th({color:16711422,metalness:.98,roughness:.55}),r=new Ql(i,n);r.receiveShadow=!0,r.castShadow=!0,this.top=new V(0,e.poleLength,0),this.mesh=r,this.object=this.mesh}addFlag(t){t.unpin(),t.pin({edges:[le.LEFT]}),t.setLengthConstraints(le.LEFT),t.object.position.add(this.top)}}function Ua(s,t=!1){const e=s[0].index!==null,i=new Set(Object.keys(s[0].attributes)),n=new Set(Object.keys(s[0].morphAttributes)),r={},a={},o=s[0].morphTargetsRelative,h=new Jn;let l=0;for(let c=0;c<s.length;++c){const u=s[c];let d=0;if(e!==(u.index!==null))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+c+". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."),null;for(const f in u.attributes){if(!i.has(f))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+c+'. All geometries must have compatible attributes; make sure "'+f+'" attribute exists among all geometries, or in none of them.'),null;r[f]===void 0&&(r[f]=[]),r[f].push(u.attributes[f]),d++}if(d!==i.size)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+c+". Make sure all geometries have the same number of attributes."),null;if(o!==u.morphTargetsRelative)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+c+". .morphTargetsRelative must be consistent throughout all geometries."),null;for(const f in u.morphAttributes){if(!n.has(f))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+c+". .morphAttributes must be consistent throughout all geometries."),null;a[f]===void 0&&(a[f]=[]),a[f].push(u.morphAttributes[f])}if(t){let f;if(e)f=u.index.count;else if(u.attributes.position!==void 0)f=u.attributes.position.count;else return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+c+". The geometry must have either an index or a position attribute"),null;h.addGroup(l,f,c),l+=f}}if(e){let c=0;const u=[];for(let d=0;d<s.length;++d){const f=s[d].index;for(let g=0;g<f.count;++g)u.push(f.getX(g)+c);c+=s[d].attributes.position.count}h.setIndex(u)}for(const c in r){const u=lh(r[c]);if(!u)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+c+" attribute."),null;h.setAttribute(c,u)}for(const c in a){const u=a[c][0].length;if(u===0)break;h.morphAttributes=h.morphAttributes||{},h.morphAttributes[c]=[];for(let d=0;d<u;++d){const f=[];for(let _=0;_<a[c].length;++_)f.push(a[c][_][d]);const g=lh(f);if(!g)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+c+" morphAttribute."),null;h.morphAttributes[c].push(g)}}return h}function lh(s){let t,e,i,n=-1,r=0;for(let l=0;l<s.length;++l){const c=s[l];if(t===void 0&&(t=c.array.constructor),t!==c.array.constructor)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."),null;if(e===void 0&&(e=c.itemSize),e!==c.itemSize)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."),null;if(i===void 0&&(i=c.normalized),i!==c.normalized)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."),null;if(n===-1&&(n=c.gpuType),n!==c.gpuType)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes."),null;r+=c.count*e}const a=new t(r),o=new pn(a,e,i);let h=0;for(let l=0;l<s.length;++l){const c=s[l];if(c.isInterleavedBufferAttribute){const u=h/e;for(let d=0,f=c.count;d<f;d++)for(let g=0;g<e;g++){const _=c.getComponent(d,g);o.setComponent(d+u,g,_)}}else a.set(c.array,h);h+=c.count*e}return n!==void 0&&(o.gpuType=n),o}function ks(s){const t=s.poleWidth/2,e=s.poleLength,i=32,n=s.poleCapSize/2,r=new _n(t,t,e,i);r.translate(0,s.poleLength/2,0);const a=new _n(n,n,n,i);return a.translate(0,e+n/2,0),Ua([r,a])}function cd(s){const t=ks(s),e=s.poleWidth/2,i=s.poleLength,n=s.crossbarWidth/2,r=s.crossbarLength,a=16,o=s.crossbarCapSize/2,h=s.poleTopOffset,l=new _n(n,n,r,a);l.rotateZ(Math.PI/2);const c=new _n(o,o,o,a),u=c.clone(),d=i-h,f=e+n;return c.rotateZ(Math.PI/2),c.translate(-r/2,d,f),u.rotateZ(-Math.PI/2),u.translate(r/2,d,f),l.translate(0,d,f),Ua([t,l,c,u])}function ud(s){const t=ks(s),e=s.poleLength,i=s.poleCapSize/2,n=s.crossbarWidth/2,r=s.crossbarLength,a=16,o=new _n(n,n,r,a);return o.rotateZ(Math.PI/2),o.translate(r/2,e+i-n,0),Ua([t,o])}class hh extends Li{constructor(t={}){super(t)}buildGeometry(t){return ks(t)}}class dd{flagpole;flag;object;constructor(t={}){const e={...t},{flagpole:i,flag:n}=e;this.flagpole=i??new hh,this.flag=n??new zs,this.flagpole.addFlag(this.flag),this.object=new je,this.object.add(this.flagpole.object),this.object.add(this.flag.object)}destroy(){this.destroyChildSubject(this.flagpole),this.destroyChildSubject(this.flag)}destroyChildSubject(t){t!=null&&(this.object.remove(t.object),t.destroy())}reset(){this.flag.reset()}simulate(t){this.flag.simulate(t)}render(){this.flag.render()}setTexture(t){this.flag.setTexture(t)}}function fd(s){return s===0?.001:s}function pd(s){return s.x===0&&(s.x=.001),s.y===0&&(s.y=.001),s.z===0&&(s.z=.001),s}const ch={blowFromLeftDirection:s=>s.set(2e3,0,1e3),constantSpeed:s=>s};function md(s){return .5*id*Math.pow(s,2)}class Na{direction;speed;directionFn;speedFn;pressure;static defaults={direction:new V(1,0,0),speed:10,directionFn:ch.blowFromLeftDirection,speedFn:ch.constantSpeed};constructor(t={}){const e={...Na.defaults,...t};this.direction=e.direction.clone(),this.speed=e.speed,this.directionFn=e.directionFn,this.speedFn=e.speedFn,this.pressure=new V}update(){const t=Date.now();this.directionFn(pd(this.pressure.copy(this.direction)),t).normalize().multiplyScalar(md(this.speedFn(fd(this.speed),t)))}}const br=new V,uh=new V;function dh(s,t){return br.copy(s),t instanceof je&&(uh.setFromMatrixPosition(t.matrixWorld),br.add(uh),t.worldToLocal(br)),br}const gd=new V(0,-9.80665,0);function _d(s,t){const e=s.particles,i=dh(gd,t);for(let n=0,r=e.length;n<r;n++)e[n].acceleration.add(i)}const Er=new V,fh=new V;function xd(s){return s<0?0:s>1?1:s}function ph(s){const t=Math.sin(s*12.9898)*43758.5453;return t-Math.floor(t)}function vd(s,t){const e=xd(t?.randomizeAmount??0);if(e===0)return 1;const i=t?.randomSeed??s?.id??0,n=t?.time??0,r=.5+ph(i)*2,a=ph(i+1e3)*Math.PI*2;return 1+(Math.sin(n*r+a)*.5+Math.sin(n*r*1.7+a*.3)*.3)*e}function yd(s,t,e){return Er.subVectors(e,t),fh.subVectors(s,t),Er.cross(fh),Er.normalize(),Er}function Md(s,t,e,i){const n=s.particles,r=s.geometry.getIndex();if(t==null||r==null)return;const a=s.restDistance*s.restDistance/2,o=vd(e,i),h=dh(t.pressure,e).multiplyScalar(ed*a/3*o);for(let l=0,c=r.count;l<c;l+=3){const u=r.getX(l),d=r.getX(l+1),f=r.getX(l+2),g=n[u],_=n[d],m=n[f],p=yd(g.position,_.position,m.position);p.multiplyScalar(p.dot(h)),g.applyForce(p),_.applyForce(p),m.applyForce(p)}}function Sd(s){return new zs(s)}function bd(s,t){const e={...s};return Object.entries(t).forEach(([i,n])=>{n!==void 0&&(e[i]=n)}),e}class Ed extends Li{verticalHoisting;constructor(t={}){super(t);const e=bd(Li.defaults,t);this.top.set(0,e.poleLength-e.poleTopOffset,e.poleWidth/2+e.crossbarWidth/2),this.verticalHoisting=e.verticalHoisting}buildGeometry(t){return cd(t)}addFlag(t){switch(t.unpin(),this.verticalHoisting){case Bs.NONE:t.pin({edges:[le.TOP]}),t.setLengthConstraints(le.TOP),t.object.position.add(this.top),t.object.position.x=-t.cloth.width/2;break;case Bs.TOP_LEFT:t.pin({edges:[le.LEFT]}),t.setLengthConstraints(le.LEFT),t.object.position.add(this.top),t.object.position.x=-t.cloth.height/2,t.object.rotateZ(Math.PI*3/2),t.object.rotateX(Math.PI);break;case Bs.TOP_RIGHT:default:t.pin({edges:[le.LEFT]}),t.setLengthConstraints(le.LEFT),t.object.position.add(this.top),t.object.position.x=t.cloth.height/2,t.object.rotateZ(Math.PI*3/2);break}}}class Td extends Li{buildGeometry(t){return ud(t)}addFlag(t){t.unpin(),t.pin({edges:[le.LEFT,le.TOP]}),t.setLengthConstraints(le.LEFT),t.object.position.add(this.top)}}const Ad=new V(0,0,1);class wd extends Li{constructor(t={}){super(t),this.top.applyAxisAngle(Ad,Math.PI*3/2)}buildGeometry(t){const e=ks(t);return e.rotateZ(Math.PI*3/2),e}addFlag(t){t.unpin(),t.pin({edges:[le.LEFT]}),t.setLengthConstraints(le.LEFT),t.object.position.add(this.top),t.object.rotateZ(Math.PI*3/2)}}const Rd=new V(0,0,1);class Cd extends Li{constructor(t={}){super(t),this.top.applyAxisAngle(Rd,Math.PI*7/4)}buildGeometry(t){const e=ks(t);return e.rotateZ(Math.PI*7/4),e}addFlag(t){t.unpin(),t.pin({edges:[le.LEFT]}),t.setLengthConstraints(le.LEFT),t.object.position.add(this.top),t.object.rotateZ(Math.PI*7/4)}}function Pd(s,t){const e=Object.assign({},s);let i;switch(e.flagpoleType){case vn.HORIZONTAL:i=new wd(e);break;case vn.OUTRIGGER:i=new Cd(e);break;case vn.CROSSBAR:e.crossbarLength=e.verticalHoisting===Bs.NONE?t.cloth.width:t.cloth.height,i=new Ed(e);break;case vn.GALLERY:e.crossbarLength=t.cloth.width,i=new Td(e);break;case vn.VERTICAL:default:i=new hh(e);break}return i}const Di=Object.freeze(Object.defineProperty({__proto__:null,FLAG_POLE_TYPE:vn,Flag:zs,FlagGroup:dd,Flagpole:Li,Wind:Na,applyGravityToCloth:_d,applyWindForceToCloth:Md,buildFlag:Sd,buildFlagpole:Pd},Symbol.toStringTag,{value:"Module"}));const Fa="179",Qn={ROTATE:0,DOLLY:1,PAN:2},ts={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},Id=0,mh=1,Ld=2,gh=1,Dd=2,Ui=3,$i=0,Ue=1,Ni=2,Ji=0,es=1,_h=2,xh=3,vh=4,Ud=5,yn=100,Nd=101,Fd=102,Od=103,zd=104,Bd=200,kd=201,Gd=202,Hd=203,Oa=204,za=205,Vd=206,Wd=207,Xd=208,qd=209,Yd=210,jd=211,Zd=212,Kd=213,$d=214,Ba=0,ka=1,Ga=2,is=3,Ha=4,Va=5,Wa=6,Xa=7,yh=0,Jd=1,Qd=2,Qi=0,tf=1,ef=2,nf=3,sf=4,rf=5,af=6,of=7,Mh=300,ns=301,ss=302,qa=303,Ya=304,Tr=306,ja=1e3,Mn=1001,Za=1002,oi=1003,lf=1004,Ar=1005,_i=1006,Ka=1007,Sn=1008,xi=1009,Sh=1010,bh=1011,Gs=1012,$a=1013,bn=1014,Fi=1015,Hs=1016,Ja=1017,Qa=1018,Vs=1020,Eh=35902,Th=1021,Ah=1022,li=1023,Ws=1026,Xs=1027,wh=1028,to=1029,Rh=1030,eo=1031,io=1033,wr=33776,Rr=33777,Cr=33778,Pr=33779,no=35840,so=35841,ro=35842,ao=35843,oo=36196,lo=37492,ho=37496,co=37808,uo=37809,fo=37810,po=37811,mo=37812,go=37813,_o=37814,xo=37815,vo=37816,yo=37817,Mo=37818,So=37819,bo=37820,Eo=37821,Ir=36492,To=36494,Ao=36495,Ch=36283,wo=36284,Ro=36285,Co=36286,hf=3200,cf=3201,Ph=0,uf=1,tn="",Ke="srgb",rs="srgb-linear",Lr="linear",Zt="srgb",as=7680,Ih=519,df=512,ff=513,pf=514,Lh=515,mf=516,gf=517,_f=518,xf=519,Dh=35044,Uh="300 es",vi=2e3,Dr=2001;class En{addEventListener(t,e){this._listeners===void 0&&(this._listeners={});const i=this._listeners;i[t]===void 0&&(i[t]=[]),i[t].indexOf(e)===-1&&i[t].push(e)}hasEventListener(t,e){const i=this._listeners;return i===void 0?!1:i[t]!==void 0&&i[t].indexOf(e)!==-1}removeEventListener(t,e){const i=this._listeners;if(i===void 0)return;const n=i[t];if(n!==void 0){const r=n.indexOf(e);r!==-1&&n.splice(r,1)}}dispatchEvent(t){const e=this._listeners;if(e===void 0)return;const i=e[t.type];if(i!==void 0){t.target=this;const n=i.slice(0);for(let r=0,a=n.length;r<a;r++)n[r].call(this,t);t.target=null}}}const Re=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"],Ur=Math.PI/180,Nr=180/Math.PI;function qs(){const s=Math.random()*4294967295|0,t=Math.random()*4294967295|0,e=Math.random()*4294967295|0,i=Math.random()*4294967295|0;return(Re[s&255]+Re[s>>8&255]+Re[s>>16&255]+Re[s>>24&255]+"-"+Re[t&255]+Re[t>>8&255]+"-"+Re[t>>16&15|64]+Re[t>>24&255]+"-"+Re[e&63|128]+Re[e>>8&255]+"-"+Re[e>>16&255]+Re[e>>24&255]+Re[i&255]+Re[i>>8&255]+Re[i>>16&255]+Re[i>>24&255]).toLowerCase()}function Bt(s,t,e){return Math.max(t,Math.min(e,s))}function vf(s,t){return(s%t+t)%t}function Po(s,t,e){return(1-e)*s+e*t}function Ys(s,t){switch(t.constructor){case Float32Array:return s;case Uint32Array:return s/4294967295;case Uint16Array:return s/65535;case Uint8Array:return s/255;case Int32Array:return Math.max(s/2147483647,-1);case Int16Array:return Math.max(s/32767,-1);case Int8Array:return Math.max(s/127,-1);default:throw new Error("Invalid component type.")}}function Ne(s,t){switch(t.constructor){case Float32Array:return s;case Uint32Array:return Math.round(s*4294967295);case Uint16Array:return Math.round(s*65535);case Uint8Array:return Math.round(s*255);case Int32Array:return Math.round(s*2147483647);case Int16Array:return Math.round(s*32767);case Int8Array:return Math.round(s*127);default:throw new Error("Invalid component type.")}}const yf={DEG2RAD:Ur};class Dt{constructor(t=0,e=0){Dt.prototype.isVector2=!0,this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,i=this.y,n=t.elements;return this.x=n[0]*e+n[3]*i+n[6],this.y=n[1]*e+n[4]*i+n[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Bt(this.x,t.x,e.x),this.y=Bt(this.y,t.y,e.y),this}clampScalar(t,e){return this.x=Bt(this.x,t,e),this.y=Bt(this.y,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Bt(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(Bt(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y;return e*e+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const i=Math.cos(e),n=Math.sin(e),r=this.x-t.x,a=this.y-t.y;return this.x=r*i-a*n+t.x,this.y=r*n+a*i+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class Tn{constructor(t=0,e=0,i=0,n=1){this.isQuaternion=!0,this._x=t,this._y=e,this._z=i,this._w=n}static slerpFlat(t,e,i,n,r,a,o){let h=i[n+0],l=i[n+1],c=i[n+2],u=i[n+3];const d=r[a+0],f=r[a+1],g=r[a+2],_=r[a+3];if(o===0){t[e+0]=h,t[e+1]=l,t[e+2]=c,t[e+3]=u;return}if(o===1){t[e+0]=d,t[e+1]=f,t[e+2]=g,t[e+3]=_;return}if(u!==_||h!==d||l!==f||c!==g){let m=1-o;const p=h*d+l*f+c*g+u*_,T=p>=0?1:-1,b=1-p*p;if(b>Number.EPSILON){const R=Math.sqrt(b),w=Math.atan2(R,p*T);m=Math.sin(m*w)/R,o=Math.sin(o*w)/R}const y=o*T;if(h=h*m+d*y,l=l*m+f*y,c=c*m+g*y,u=u*m+_*y,m===1-o){const R=1/Math.sqrt(h*h+l*l+c*c+u*u);h*=R,l*=R,c*=R,u*=R}}t[e]=h,t[e+1]=l,t[e+2]=c,t[e+3]=u}static multiplyQuaternionsFlat(t,e,i,n,r,a){const o=i[n],h=i[n+1],l=i[n+2],c=i[n+3],u=r[a],d=r[a+1],f=r[a+2],g=r[a+3];return t[e]=o*g+c*u+h*f-l*d,t[e+1]=h*g+c*d+l*u-o*f,t[e+2]=l*g+c*f+o*d-h*u,t[e+3]=c*g-o*u-h*d-l*f,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,i,n){return this._x=t,this._y=e,this._z=i,this._w=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e=!0){const i=t._x,n=t._y,r=t._z,a=t._order,o=Math.cos,h=Math.sin,l=o(i/2),c=o(n/2),u=o(r/2),d=h(i/2),f=h(n/2),g=h(r/2);switch(a){case"XYZ":this._x=d*c*u+l*f*g,this._y=l*f*u-d*c*g,this._z=l*c*g+d*f*u,this._w=l*c*u-d*f*g;break;case"YXZ":this._x=d*c*u+l*f*g,this._y=l*f*u-d*c*g,this._z=l*c*g-d*f*u,this._w=l*c*u+d*f*g;break;case"ZXY":this._x=d*c*u-l*f*g,this._y=l*f*u+d*c*g,this._z=l*c*g+d*f*u,this._w=l*c*u-d*f*g;break;case"ZYX":this._x=d*c*u-l*f*g,this._y=l*f*u+d*c*g,this._z=l*c*g-d*f*u,this._w=l*c*u+d*f*g;break;case"YZX":this._x=d*c*u+l*f*g,this._y=l*f*u+d*c*g,this._z=l*c*g-d*f*u,this._w=l*c*u-d*f*g;break;case"XZY":this._x=d*c*u-l*f*g,this._y=l*f*u-d*c*g,this._z=l*c*g+d*f*u,this._w=l*c*u+d*f*g;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}return e===!0&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const i=e/2,n=Math.sin(i);return this._x=t.x*n,this._y=t.y*n,this._z=t.z*n,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,i=e[0],n=e[4],r=e[8],a=e[1],o=e[5],h=e[9],l=e[2],c=e[6],u=e[10],d=i+o+u;if(d>0){const f=.5/Math.sqrt(d+1);this._w=.25/f,this._x=(c-h)*f,this._y=(r-l)*f,this._z=(a-n)*f}else if(i>o&&i>u){const f=2*Math.sqrt(1+i-o-u);this._w=(c-h)/f,this._x=.25*f,this._y=(n+a)/f,this._z=(r+l)/f}else if(o>u){const f=2*Math.sqrt(1+o-i-u);this._w=(r-l)/f,this._x=(n+a)/f,this._y=.25*f,this._z=(h+c)/f}else{const f=2*Math.sqrt(1+u-i-o);this._w=(a-n)/f,this._x=(r+l)/f,this._y=(h+c)/f,this._z=.25*f}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let i=t.dot(e)+1;return i<1e-8?(i=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=i):(this._x=0,this._y=-t.z,this._z=t.y,this._w=i)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=i),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(Bt(this.dot(t),-1,1)))}rotateTowards(t,e){const i=this.angleTo(t);if(i===0)return this;const n=Math.min(1,e/i);return this.slerp(t,n),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return t===0?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const i=t._x,n=t._y,r=t._z,a=t._w,o=e._x,h=e._y,l=e._z,c=e._w;return this._x=i*c+a*o+n*l-r*h,this._y=n*c+a*h+r*o-i*l,this._z=r*c+a*l+i*h-n*o,this._w=a*c-i*o-n*h-r*l,this._onChangeCallback(),this}slerp(t,e){if(e===0)return this;if(e===1)return this.copy(t);const i=this._x,n=this._y,r=this._z,a=this._w;let o=a*t._w+i*t._x+n*t._y+r*t._z;if(o<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,o=-o):this.copy(t),o>=1)return this._w=a,this._x=i,this._y=n,this._z=r,this;const h=1-o*o;if(h<=Number.EPSILON){const f=1-e;return this._w=f*a+e*this._w,this._x=f*i+e*this._x,this._y=f*n+e*this._y,this._z=f*r+e*this._z,this.normalize(),this}const l=Math.sqrt(h),c=Math.atan2(l,o),u=Math.sin((1-e)*c)/l,d=Math.sin(e*c)/l;return this._w=a*u+this._w*d,this._x=i*u+this._x*d,this._y=n*u+this._y*d,this._z=r*u+this._z*d,this._onChangeCallback(),this}slerpQuaternions(t,e,i){return this.copy(t).slerp(e,i)}random(){const t=2*Math.PI*Math.random(),e=2*Math.PI*Math.random(),i=Math.random(),n=Math.sqrt(1-i),r=Math.sqrt(i);return this.set(n*Math.sin(t),n*Math.cos(t),r*Math.sin(e),r*Math.cos(e))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class N{constructor(t=0,e=0,i=0){N.prototype.isVector3=!0,this.x=t,this.y=e,this.z=i}set(t,e,i){return i===void 0&&(i=this.z),this.x=t,this.y=e,this.z=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(Nh.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(Nh.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,i=this.y,n=this.z,r=t.elements;return this.x=r[0]*e+r[3]*i+r[6]*n,this.y=r[1]*e+r[4]*i+r[7]*n,this.z=r[2]*e+r[5]*i+r[8]*n,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,i=this.y,n=this.z,r=t.elements,a=1/(r[3]*e+r[7]*i+r[11]*n+r[15]);return this.x=(r[0]*e+r[4]*i+r[8]*n+r[12])*a,this.y=(r[1]*e+r[5]*i+r[9]*n+r[13])*a,this.z=(r[2]*e+r[6]*i+r[10]*n+r[14])*a,this}applyQuaternion(t){const e=this.x,i=this.y,n=this.z,r=t.x,a=t.y,o=t.z,h=t.w,l=2*(a*n-o*i),c=2*(o*e-r*n),u=2*(r*i-a*e);return this.x=e+h*l+a*u-o*c,this.y=i+h*c+o*l-r*u,this.z=n+h*u+r*c-a*l,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,i=this.y,n=this.z,r=t.elements;return this.x=r[0]*e+r[4]*i+r[8]*n,this.y=r[1]*e+r[5]*i+r[9]*n,this.z=r[2]*e+r[6]*i+r[10]*n,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Bt(this.x,t.x,e.x),this.y=Bt(this.y,t.y,e.y),this.z=Bt(this.z,t.z,e.z),this}clampScalar(t,e){return this.x=Bt(this.x,t,e),this.y=Bt(this.y,t,e),this.z=Bt(this.z,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Bt(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this.z=t.z+(e.z-t.z)*i,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){const i=t.x,n=t.y,r=t.z,a=e.x,o=e.y,h=e.z;return this.x=n*h-r*o,this.y=r*a-i*h,this.z=i*o-n*a,this}projectOnVector(t){const e=t.lengthSq();if(e===0)return this.set(0,0,0);const i=t.dot(this)/e;return this.copy(t).multiplyScalar(i)}projectOnPlane(t){return Io.copy(this).projectOnVector(t),this.sub(Io)}reflect(t){return this.sub(Io.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(Bt(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y,n=this.z-t.z;return e*e+i*i+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,i){const n=Math.sin(e)*t;return this.x=n*Math.sin(i),this.y=Math.cos(e)*t,this.z=n*Math.cos(i),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,i){return this.x=t*Math.sin(e),this.y=i,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),i=this.setFromMatrixColumn(t,1).length(),n=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=i,this.z=n,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,e*4)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,e*3)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=Math.random()*Math.PI*2,e=Math.random()*2-1,i=Math.sqrt(1-e*e);return this.x=i*Math.cos(t),this.y=e,this.z=i*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const Io=new N,Nh=new Tn;class Ut{constructor(t,e,i,n,r,a,o,h,l){Ut.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],t!==void 0&&this.set(t,e,i,n,r,a,o,h,l)}set(t,e,i,n,r,a,o,h,l){const c=this.elements;return c[0]=t,c[1]=n,c[2]=o,c[3]=e,c[4]=r,c[5]=h,c[6]=i,c[7]=a,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],this}extractBasis(t,e,i){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,n=e.elements,r=this.elements,a=i[0],o=i[3],h=i[6],l=i[1],c=i[4],u=i[7],d=i[2],f=i[5],g=i[8],_=n[0],m=n[3],p=n[6],T=n[1],b=n[4],y=n[7],R=n[2],w=n[5],C=n[8];return r[0]=a*_+o*T+h*R,r[3]=a*m+o*b+h*w,r[6]=a*p+o*y+h*C,r[1]=l*_+c*T+u*R,r[4]=l*m+c*b+u*w,r[7]=l*p+c*y+u*C,r[2]=d*_+f*T+g*R,r[5]=d*m+f*b+g*w,r[8]=d*p+f*y+g*C,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],a=t[4],o=t[5],h=t[6],l=t[7],c=t[8];return e*a*c-e*o*l-i*r*c+i*o*h+n*r*l-n*a*h}invert(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],a=t[4],o=t[5],h=t[6],l=t[7],c=t[8],u=c*a-o*l,d=o*h-c*r,f=l*r-a*h,g=e*u+i*d+n*f;if(g===0)return this.set(0,0,0,0,0,0,0,0,0);const _=1/g;return t[0]=u*_,t[1]=(n*l-c*i)*_,t[2]=(o*i-n*a)*_,t[3]=d*_,t[4]=(c*e-n*h)*_,t[5]=(n*r-o*e)*_,t[6]=f*_,t[7]=(i*h-l*e)*_,t[8]=(a*e-i*r)*_,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,i,n,r,a,o){const h=Math.cos(r),l=Math.sin(r);return this.set(i*h,i*l,-i*(h*a+l*o)+a+t,-n*l,n*h,-n*(-l*a+h*o)+o+e,0,0,1),this}scale(t,e){return this.premultiply(Lo.makeScale(t,e)),this}rotate(t){return this.premultiply(Lo.makeRotation(-t)),this}translate(t,e){return this.premultiply(Lo.makeTranslation(t,e)),this}makeTranslation(t,e){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,i,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){const e=this.elements,i=t.elements;for(let n=0;n<9;n++)if(e[n]!==i[n])return!1;return!0}fromArray(t,e=0){for(let i=0;i<9;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t}clone(){return new this.constructor().fromArray(this.elements)}}const Lo=new Ut;function Fh(s){for(let t=s.length-1;t>=0;--t)if(s[t]>=65535)return!0;return!1}function js(s){return document.createElementNS("http://www.w3.org/1999/xhtml",s)}function Mf(){const s=js("canvas");return s.style.display="block",s}const Oh={};function os(s){s in Oh||(Oh[s]=!0,console.warn(s))}function Sf(s,t,e){return new Promise(function(i,n){function r(){switch(s.clientWaitSync(t,s.SYNC_FLUSH_COMMANDS_BIT,0)){case s.WAIT_FAILED:n();break;case s.TIMEOUT_EXPIRED:setTimeout(r,e);break;default:i()}}setTimeout(r,e)})}const zh=new Ut().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Bh=new Ut().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function bf(){const s={enabled:!0,workingColorSpace:rs,spaces:{},convert:function(n,r,a){return this.enabled===!1||r===a||!r||!a||(this.spaces[r].transfer===Zt&&(n.r=Oi(n.r),n.g=Oi(n.g),n.b=Oi(n.b)),this.spaces[r].primaries!==this.spaces[a].primaries&&(n.applyMatrix3(this.spaces[r].toXYZ),n.applyMatrix3(this.spaces[a].fromXYZ)),this.spaces[a].transfer===Zt&&(n.r=ls(n.r),n.g=ls(n.g),n.b=ls(n.b))),n},workingToColorSpace:function(n,r){return this.convert(n,this.workingColorSpace,r)},colorSpaceToWorking:function(n,r){return this.convert(n,r,this.workingColorSpace)},getPrimaries:function(n){return this.spaces[n].primaries},getTransfer:function(n){return n===tn?Lr:this.spaces[n].transfer},getLuminanceCoefficients:function(n,r=this.workingColorSpace){return n.fromArray(this.spaces[r].luminanceCoefficients)},define:function(n){Object.assign(this.spaces,n)},_getMatrix:function(n,r,a){return n.copy(this.spaces[r].toXYZ).multiply(this.spaces[a].fromXYZ)},_getDrawingBufferColorSpace:function(n){return this.spaces[n].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(n=this.workingColorSpace){return this.spaces[n].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(n,r){return os("THREE.ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),s.workingToColorSpace(n,r)},toWorkingColorSpace:function(n,r){return os("THREE.ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),s.colorSpaceToWorking(n,r)}},t=[.64,.33,.3,.6,.15,.06],e=[.2126,.7152,.0722],i=[.3127,.329];return s.define({[rs]:{primaries:t,whitePoint:i,transfer:Lr,toXYZ:zh,fromXYZ:Bh,luminanceCoefficients:e,workingColorSpaceConfig:{unpackColorSpace:Ke},outputColorSpaceConfig:{drawingBufferColorSpace:Ke}},[Ke]:{primaries:t,whitePoint:i,transfer:Zt,toXYZ:zh,fromXYZ:Bh,luminanceCoefficients:e,outputColorSpaceConfig:{drawingBufferColorSpace:Ke}}}),s}const Xt=bf();function Oi(s){return s<.04045?s*.0773993808:Math.pow(s*.9478672986+.0521327014,2.4)}function ls(s){return s<.0031308?s*12.92:1.055*Math.pow(s,.41666)-.055}let hs;class Ef{static getDataURL(t,e="image/png"){if(/^data:/i.test(t.src)||typeof HTMLCanvasElement>"u")return t.src;let i;if(t instanceof HTMLCanvasElement)i=t;else{hs===void 0&&(hs=js("canvas")),hs.width=t.width,hs.height=t.height;const n=hs.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),i=hs}return i.toDataURL(e)}static sRGBToLinear(t){if(typeof HTMLImageElement<"u"&&t instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&t instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&t instanceof ImageBitmap){const e=js("canvas");e.width=t.width,e.height=t.height;const i=e.getContext("2d");i.drawImage(t,0,0,t.width,t.height);const n=i.getImageData(0,0,t.width,t.height),r=n.data;for(let a=0;a<r.length;a++)r[a]=Oi(r[a]/255)*255;return i.putImageData(n,0,0),e}else if(t.data){const e=t.data.slice(0);for(let i=0;i<e.length;i++)e instanceof Uint8Array||e instanceof Uint8ClampedArray?e[i]=Math.floor(Oi(e[i]/255)*255):e[i]=Oi(e[i]);return{data:e,width:t.width,height:t.height}}else return console.warn("THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."),t}}let Tf=0;class Do{constructor(t=null){this.isSource=!0,Object.defineProperty(this,"id",{value:Tf++}),this.uuid=qs(),this.data=t,this.dataReady=!0,this.version=0}getSize(t){const e=this.data;return e instanceof HTMLVideoElement?t.set(e.videoWidth,e.videoHeight,0):e instanceof VideoFrame?t.set(e.displayHeight,e.displayWidth,0):e!==null?t.set(e.width,e.height,e.depth||0):t.set(0,0,0),t}set needsUpdate(t){t===!0&&this.version++}toJSON(t){const e=t===void 0||typeof t=="string";if(!e&&t.images[this.uuid]!==void 0)return t.images[this.uuid];const i={uuid:this.uuid,url:""},n=this.data;if(n!==null){let r;if(Array.isArray(n)){r=[];for(let a=0,o=n.length;a<o;a++)n[a].isDataTexture?r.push(Uo(n[a].image)):r.push(Uo(n[a]))}else r=Uo(n);i.url=r}return e||(t.images[this.uuid]=i),i}}function Uo(s){return typeof HTMLImageElement<"u"&&s instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&s instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&s instanceof ImageBitmap?Ef.getDataURL(s):s.data?{data:Array.from(s.data),width:s.width,height:s.height,type:s.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}let Af=0;const No=new N;class Pe extends En{constructor(t=Pe.DEFAULT_IMAGE,e=Pe.DEFAULT_MAPPING,i=Mn,n=Mn,r=_i,a=Sn,o=li,h=xi,l=Pe.DEFAULT_ANISOTROPY,c=tn){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:Af++}),this.uuid=qs(),this.name="",this.source=new Do(t),this.mipmaps=[],this.mapping=e,this.channel=0,this.wrapS=i,this.wrapT=n,this.magFilter=r,this.minFilter=a,this.anisotropy=l,this.format=o,this.internalFormat=null,this.type=h,this.offset=new Dt(0,0),this.repeat=new Dt(1,1),this.center=new Dt(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Ut,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=c,this.userData={},this.updateRanges=[],this.version=0,this.onUpdate=null,this.renderTarget=null,this.isRenderTargetTexture=!1,this.isArrayTexture=!!(t&&t.depth&&t.depth>1),this.pmremVersion=0}get width(){return this.source.getSize(No).x}get height(){return this.source.getSize(No).y}get depth(){return this.source.getSize(No).z}get image(){return this.source.data}set image(t=null){this.source.data=t}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(t){return this.name=t.name,this.source=t.source,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.channel=t.channel,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.colorSpace=t.colorSpace,this.renderTarget=t.renderTarget,this.isRenderTargetTexture=t.isRenderTargetTexture,this.isArrayTexture=t.isArrayTexture,this.userData=JSON.parse(JSON.stringify(t.userData)),this.needsUpdate=!0,this}setValues(t){for(const e in t){const i=t[e];if(i===void 0){console.warn(`THREE.Texture.setValues(): parameter '${e}' has value of undefined.`);continue}const n=this[e];if(n===void 0){console.warn(`THREE.Texture.setValues(): property '${e}' does not exist.`);continue}n&&i&&n.isVector2&&i.isVector2||n&&i&&n.isVector3&&i.isVector3||n&&i&&n.isMatrix3&&i.isMatrix3?n.copy(i):this[e]=i}}toJSON(t){const e=t===void 0||typeof t=="string";if(!e&&t.textures[this.uuid]!==void 0)return t.textures[this.uuid];const i={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(t).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),e||(t.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(this.mapping!==Mh)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case ja:t.x=t.x-Math.floor(t.x);break;case Mn:t.x=t.x<0?0:1;break;case Za:Math.abs(Math.floor(t.x)%2)===1?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x);break}if(t.y<0||t.y>1)switch(this.wrapT){case ja:t.y=t.y-Math.floor(t.y);break;case Mn:t.y=t.y<0?0:1;break;case Za:Math.abs(Math.floor(t.y)%2)===1?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y);break}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){t===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(t){t===!0&&this.pmremVersion++}}Pe.DEFAULT_IMAGE=null,Pe.DEFAULT_MAPPING=Mh,Pe.DEFAULT_ANISOTROPY=1;class he{constructor(t=0,e=0,i=0,n=1){he.prototype.isVector4=!0,this.x=t,this.y=e,this.z=i,this.w=n}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,i,n){return this.x=t,this.y=e,this.z=i,this.w=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w!==void 0?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,i=this.y,n=this.z,r=this.w,a=t.elements;return this.x=a[0]*e+a[4]*i+a[8]*n+a[12]*r,this.y=a[1]*e+a[5]*i+a[9]*n+a[13]*r,this.z=a[2]*e+a[6]*i+a[10]*n+a[14]*r,this.w=a[3]*e+a[7]*i+a[11]*n+a[15]*r,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,i,n,r;const h=t.elements,l=h[0],c=h[4],u=h[8],d=h[1],f=h[5],g=h[9],_=h[2],m=h[6],p=h[10];if(Math.abs(c-d)<.01&&Math.abs(u-_)<.01&&Math.abs(g-m)<.01){if(Math.abs(c+d)<.1&&Math.abs(u+_)<.1&&Math.abs(g+m)<.1&&Math.abs(l+f+p-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;const b=(l+1)/2,y=(f+1)/2,R=(p+1)/2,w=(c+d)/4,C=(u+_)/4,I=(g+m)/4;return b>y&&b>R?b<.01?(i=0,n=.707106781,r=.707106781):(i=Math.sqrt(b),n=w/i,r=C/i):y>R?y<.01?(i=.707106781,n=0,r=.707106781):(n=Math.sqrt(y),i=w/n,r=I/n):R<.01?(i=.707106781,n=.707106781,r=0):(r=Math.sqrt(R),i=C/r,n=I/r),this.set(i,n,r,e),this}let T=Math.sqrt((m-g)*(m-g)+(u-_)*(u-_)+(d-c)*(d-c));return Math.abs(T)<.001&&(T=1),this.x=(m-g)/T,this.y=(u-_)/T,this.z=(d-c)/T,this.w=Math.acos((l+f+p-1)/2),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this.w=e[15],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Bt(this.x,t.x,e.x),this.y=Bt(this.y,t.y,e.y),this.z=Bt(this.z,t.z,e.z),this.w=Bt(this.w,t.w,e.w),this}clampScalar(t,e){return this.x=Bt(this.x,t,e),this.y=Bt(this.y,t,e),this.z=Bt(this.z,t,e),this.w=Bt(this.w,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Bt(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this.z=t.z+(e.z-t.z)*i,this.w=t.w+(e.w-t.w)*i,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class wf extends En{constructor(t=1,e=1,i={}){super(),i=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:_i,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1,depth:1,multiview:!1},i),this.isRenderTarget=!0,this.width=t,this.height=e,this.depth=i.depth,this.scissor=new he(0,0,t,e),this.scissorTest=!1,this.viewport=new he(0,0,t,e);const n={width:t,height:e,depth:i.depth},r=new Pe(n);this.textures=[];const a=i.count;for(let o=0;o<a;o++)this.textures[o]=r.clone(),this.textures[o].isRenderTargetTexture=!0,this.textures[o].renderTarget=this;this._setTextureOptions(i),this.depthBuffer=i.depthBuffer,this.stencilBuffer=i.stencilBuffer,this.resolveDepthBuffer=i.resolveDepthBuffer,this.resolveStencilBuffer=i.resolveStencilBuffer,this._depthTexture=null,this.depthTexture=i.depthTexture,this.samples=i.samples,this.multiview=i.multiview}_setTextureOptions(t={}){const e={minFilter:_i,generateMipmaps:!1,flipY:!1,internalFormat:null};t.mapping!==void 0&&(e.mapping=t.mapping),t.wrapS!==void 0&&(e.wrapS=t.wrapS),t.wrapT!==void 0&&(e.wrapT=t.wrapT),t.wrapR!==void 0&&(e.wrapR=t.wrapR),t.magFilter!==void 0&&(e.magFilter=t.magFilter),t.minFilter!==void 0&&(e.minFilter=t.minFilter),t.format!==void 0&&(e.format=t.format),t.type!==void 0&&(e.type=t.type),t.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t.colorSpace!==void 0&&(e.colorSpace=t.colorSpace),t.flipY!==void 0&&(e.flipY=t.flipY),t.generateMipmaps!==void 0&&(e.generateMipmaps=t.generateMipmaps),t.internalFormat!==void 0&&(e.internalFormat=t.internalFormat);for(let i=0;i<this.textures.length;i++)this.textures[i].setValues(e)}get texture(){return this.textures[0]}set texture(t){this.textures[0]=t}set depthTexture(t){this._depthTexture!==null&&(this._depthTexture.renderTarget=null),t!==null&&(t.renderTarget=this),this._depthTexture=t}get depthTexture(){return this._depthTexture}setSize(t,e,i=1){if(this.width!==t||this.height!==e||this.depth!==i){this.width=t,this.height=e,this.depth=i;for(let n=0,r=this.textures.length;n<r;n++)this.textures[n].image.width=t,this.textures[n].image.height=e,this.textures[n].image.depth=i,this.textures[n].isArrayTexture=this.textures[n].image.depth>1;this.dispose()}this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return new this.constructor().copy(this)}copy(t){this.width=t.width,this.height=t.height,this.depth=t.depth,this.scissor.copy(t.scissor),this.scissorTest=t.scissorTest,this.viewport.copy(t.viewport),this.textures.length=0;for(let e=0,i=t.textures.length;e<i;e++){this.textures[e]=t.textures[e].clone(),this.textures[e].isRenderTargetTexture=!0,this.textures[e].renderTarget=this;const n=Object.assign({},t.textures[e].image);this.textures[e].source=new Do(n)}return this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.resolveDepthBuffer=t.resolveDepthBuffer,this.resolveStencilBuffer=t.resolveStencilBuffer,t.depthTexture!==null&&(this.depthTexture=t.depthTexture.clone()),this.samples=t.samples,this}dispose(){this.dispatchEvent({type:"dispose"})}}class An extends wf{constructor(t=1,e=1,i={}){super(t,e,i),this.isWebGLRenderTarget=!0}}class kh extends Pe{constructor(t=null,e=1,i=1,n=1){super(null),this.isDataArrayTexture=!0,this.image={data:t,width:e,height:i,depth:n},this.magFilter=oi,this.minFilter=oi,this.wrapR=Mn,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.layerUpdates=new Set}addLayerUpdate(t){this.layerUpdates.add(t)}clearLayerUpdates(){this.layerUpdates.clear()}}class Rf extends Pe{constructor(t=null,e=1,i=1,n=1){super(null),this.isData3DTexture=!0,this.image={data:t,width:e,height:i,depth:n},this.magFilter=oi,this.minFilter=oi,this.wrapR=Mn,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}class cs{constructor(t=new N(1/0,1/0,1/0),e=new N(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){this.makeEmpty();for(let e=0,i=t.length;e<i;e+=3)this.expandByPoint(hi.fromArray(t,e));return this}setFromBufferAttribute(t){this.makeEmpty();for(let e=0,i=t.count;e<i;e++)this.expandByPoint(hi.fromBufferAttribute(t,e));return this}setFromPoints(t){this.makeEmpty();for(let e=0,i=t.length;e<i;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const i=hi.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(i),this.max.copy(t).add(i),this}setFromObject(t,e=!1){return this.makeEmpty(),this.expandByObject(t,e)}clone(){return new this.constructor().copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t,e=!1){t.updateWorldMatrix(!1,!1);const i=t.geometry;if(i!==void 0){const r=i.getAttribute("position");if(e===!0&&r!==void 0&&t.isInstancedMesh!==!0)for(let a=0,o=r.count;a<o;a++)t.isMesh===!0?t.getVertexPosition(a,hi):hi.fromBufferAttribute(r,a),hi.applyMatrix4(t.matrixWorld),this.expandByPoint(hi);else t.boundingBox!==void 0?(t.boundingBox===null&&t.computeBoundingBox(),Fr.copy(t.boundingBox)):(i.boundingBox===null&&i.computeBoundingBox(),Fr.copy(i.boundingBox)),Fr.applyMatrix4(t.matrixWorld),this.union(Fr)}const n=t.children;for(let r=0,a=n.length;r<a;r++)this.expandByObject(n[r],e);return this}containsPoint(t){return t.x>=this.min.x&&t.x<=this.max.x&&t.y>=this.min.y&&t.y<=this.max.y&&t.z>=this.min.z&&t.z<=this.max.z}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return t.max.x>=this.min.x&&t.min.x<=this.max.x&&t.max.y>=this.min.y&&t.min.y<=this.max.y&&t.max.z>=this.min.z&&t.min.z<=this.max.z}intersectsSphere(t){return this.clampPoint(t.center,hi),hi.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,i;return t.normal.x>0?(e=t.normal.x*this.min.x,i=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,i=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,i+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,i+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,i+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,i+=t.normal.z*this.min.z),e<=-t.constant&&i>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(Zs),Or.subVectors(this.max,Zs),us.subVectors(t.a,Zs),ds.subVectors(t.b,Zs),fs.subVectors(t.c,Zs),en.subVectors(ds,us),nn.subVectors(fs,ds),wn.subVectors(us,fs);let e=[0,-en.z,en.y,0,-nn.z,nn.y,0,-wn.z,wn.y,en.z,0,-en.x,nn.z,0,-nn.x,wn.z,0,-wn.x,-en.y,en.x,0,-nn.y,nn.x,0,-wn.y,wn.x,0];return!Fo(e,us,ds,fs,Or)||(e=[1,0,0,0,1,0,0,0,1],!Fo(e,us,ds,fs,Or))?!1:(zr.crossVectors(en,nn),e=[zr.x,zr.y,zr.z],Fo(e,us,ds,fs,Or))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,hi).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=this.getSize(hi).length()*.5),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()?this:(zi[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),zi[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),zi[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),zi[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),zi[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),zi[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),zi[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),zi[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(zi),this)}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(t){return this.min.fromArray(t.min),this.max.fromArray(t.max),this}}const zi=[new N,new N,new N,new N,new N,new N,new N,new N],hi=new N,Fr=new cs,us=new N,ds=new N,fs=new N,en=new N,nn=new N,wn=new N,Zs=new N,Or=new N,zr=new N,Rn=new N;function Fo(s,t,e,i,n){for(let r=0,a=s.length-3;r<=a;r+=3){Rn.fromArray(s,r);const o=n.x*Math.abs(Rn.x)+n.y*Math.abs(Rn.y)+n.z*Math.abs(Rn.z),h=t.dot(Rn),l=e.dot(Rn),c=i.dot(Rn);if(Math.max(-Math.max(h,l,c),Math.min(h,l,c))>o)return!1}return!0}const Cf=new cs,Ks=new N,Oo=new N;class zo{constructor(t=new N,e=-1){this.isSphere=!0,this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const i=this.center;e!==void 0?i.copy(e):Cf.setFromPoints(t).getCenter(i);let n=0;for(let r=0,a=t.length;r<a;r++)n=Math.max(n,i.distanceToSquared(t[r]));return this.radius=Math.sqrt(n),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){const e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))<=this.radius}clampPoint(t,e){const i=this.center.distanceToSquared(t);return e.copy(t),i>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;Ks.subVectors(t,this.center);const e=Ks.lengthSq();if(e>this.radius*this.radius){const i=Math.sqrt(e),n=(i-this.radius)*.5;this.center.addScaledVector(Ks,n/i),this.radius+=n}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(this.center.equals(t.center)===!0?this.radius=Math.max(this.radius,t.radius):(Oo.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(Ks.copy(t.center).add(Oo)),this.expandByPoint(Ks.copy(t.center).sub(Oo))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(t){return this.radius=t.radius,this.center.fromArray(t.center),this}}const Bi=new N,Bo=new N,Br=new N,sn=new N,ko=new N,kr=new N,Go=new N;class Gh{constructor(t=new N,e=new N(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.origin).addScaledVector(this.direction,t)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Bi)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const i=e.dot(this.direction);return i<0?e.copy(this.origin):e.copy(this.origin).addScaledVector(this.direction,i)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Bi.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Bi.copy(this.origin).addScaledVector(this.direction,e),Bi.distanceToSquared(t))}distanceSqToSegment(t,e,i,n){Bo.copy(t).add(e).multiplyScalar(.5),Br.copy(e).sub(t).normalize(),sn.copy(this.origin).sub(Bo);const r=t.distanceTo(e)*.5,a=-this.direction.dot(Br),o=sn.dot(this.direction),h=-sn.dot(Br),l=sn.lengthSq(),c=Math.abs(1-a*a);let u,d,f,g;if(c>0)if(u=a*h-o,d=a*o-h,g=r*c,u>=0)if(d>=-g)if(d<=g){const _=1/c;u*=_,d*=_,f=u*(u+a*d+2*o)+d*(a*u+d+2*h)+l}else d=r,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*h)+l;else d=-r,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*h)+l;else d<=-g?(u=Math.max(0,-(-a*r+o)),d=u>0?-r:Math.min(Math.max(-r,-h),r),f=-u*u+d*(d+2*h)+l):d<=g?(u=0,d=Math.min(Math.max(-r,-h),r),f=d*(d+2*h)+l):(u=Math.max(0,-(a*r+o)),d=u>0?r:Math.min(Math.max(-r,-h),r),f=-u*u+d*(d+2*h)+l);else d=a>0?-r:r,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*h)+l;return i&&i.copy(this.origin).addScaledVector(this.direction,u),n&&n.copy(Bo).addScaledVector(Br,d),f}intersectSphere(t,e){Bi.subVectors(t.center,this.origin);const i=Bi.dot(this.direction),n=Bi.dot(Bi)-i*i,r=t.radius*t.radius;if(n>r)return null;const a=Math.sqrt(r-n),o=i-a,h=i+a;return h<0?null:o<0?this.at(h,e):this.at(o,e)}intersectsSphere(t){return t.radius<0?!1:this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(e===0)return t.distanceToPoint(this.origin)===0?0:null;const i=-(this.origin.dot(t.normal)+t.constant)/e;return i>=0?i:null}intersectPlane(t,e){const i=this.distanceToPlane(t);return i===null?null:this.at(i,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);return e===0||t.normal.dot(this.direction)*e<0}intersectBox(t,e){let i,n,r,a,o,h;const l=1/this.direction.x,c=1/this.direction.y,u=1/this.direction.z,d=this.origin;return l>=0?(i=(t.min.x-d.x)*l,n=(t.max.x-d.x)*l):(i=(t.max.x-d.x)*l,n=(t.min.x-d.x)*l),c>=0?(r=(t.min.y-d.y)*c,a=(t.max.y-d.y)*c):(r=(t.max.y-d.y)*c,a=(t.min.y-d.y)*c),i>a||r>n||((r>i||isNaN(i))&&(i=r),(a<n||isNaN(n))&&(n=a),u>=0?(o=(t.min.z-d.z)*u,h=(t.max.z-d.z)*u):(o=(t.max.z-d.z)*u,h=(t.min.z-d.z)*u),i>h||o>n)||((o>i||i!==i)&&(i=o),(h<n||n!==n)&&(n=h),n<0)?null:this.at(i>=0?i:n,e)}intersectsBox(t){return this.intersectBox(t,Bi)!==null}intersectTriangle(t,e,i,n,r){ko.subVectors(e,t),kr.subVectors(i,t),Go.crossVectors(ko,kr);let a=this.direction.dot(Go),o;if(a>0){if(n)return null;o=1}else if(a<0)o=-1,a=-a;else return null;sn.subVectors(this.origin,t);const h=o*this.direction.dot(kr.crossVectors(sn,kr));if(h<0)return null;const l=o*this.direction.dot(ko.cross(sn));if(l<0||h+l>a)return null;const c=-o*sn.dot(Go);return c<0?null:this.at(c/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class ue{constructor(t,e,i,n,r,a,o,h,l,c,u,d,f,g,_,m){ue.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!==void 0&&this.set(t,e,i,n,r,a,o,h,l,c,u,d,f,g,_,m)}set(t,e,i,n,r,a,o,h,l,c,u,d,f,g,_,m){const p=this.elements;return p[0]=t,p[4]=e,p[8]=i,p[12]=n,p[1]=r,p[5]=a,p[9]=o,p[13]=h,p[2]=l,p[6]=c,p[10]=u,p[14]=d,p[3]=f,p[7]=g,p[11]=_,p[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new ue().fromArray(this.elements)}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],e[9]=i[9],e[10]=i[10],e[11]=i[11],e[12]=i[12],e[13]=i[13],e[14]=i[14],e[15]=i[15],this}copyPosition(t){const e=this.elements,i=t.elements;return e[12]=i[12],e[13]=i[13],e[14]=i[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,i){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this}makeBasis(t,e,i){return this.set(t.x,e.x,i.x,0,t.y,e.y,i.y,0,t.z,e.z,i.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,i=t.elements,n=1/ps.setFromMatrixColumn(t,0).length(),r=1/ps.setFromMatrixColumn(t,1).length(),a=1/ps.setFromMatrixColumn(t,2).length();return e[0]=i[0]*n,e[1]=i[1]*n,e[2]=i[2]*n,e[3]=0,e[4]=i[4]*r,e[5]=i[5]*r,e[6]=i[6]*r,e[7]=0,e[8]=i[8]*a,e[9]=i[9]*a,e[10]=i[10]*a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){const e=this.elements,i=t.x,n=t.y,r=t.z,a=Math.cos(i),o=Math.sin(i),h=Math.cos(n),l=Math.sin(n),c=Math.cos(r),u=Math.sin(r);if(t.order==="XYZ"){const d=a*c,f=a*u,g=o*c,_=o*u;e[0]=h*c,e[4]=-h*u,e[8]=l,e[1]=f+g*l,e[5]=d-_*l,e[9]=-o*h,e[2]=_-d*l,e[6]=g+f*l,e[10]=a*h}else if(t.order==="YXZ"){const d=h*c,f=h*u,g=l*c,_=l*u;e[0]=d+_*o,e[4]=g*o-f,e[8]=a*l,e[1]=a*u,e[5]=a*c,e[9]=-o,e[2]=f*o-g,e[6]=_+d*o,e[10]=a*h}else if(t.order==="ZXY"){const d=h*c,f=h*u,g=l*c,_=l*u;e[0]=d-_*o,e[4]=-a*u,e[8]=g+f*o,e[1]=f+g*o,e[5]=a*c,e[9]=_-d*o,e[2]=-a*l,e[6]=o,e[10]=a*h}else if(t.order==="ZYX"){const d=a*c,f=a*u,g=o*c,_=o*u;e[0]=h*c,e[4]=g*l-f,e[8]=d*l+_,e[1]=h*u,e[5]=_*l+d,e[9]=f*l-g,e[2]=-l,e[6]=o*h,e[10]=a*h}else if(t.order==="YZX"){const d=a*h,f=a*l,g=o*h,_=o*l;e[0]=h*c,e[4]=_-d*u,e[8]=g*u+f,e[1]=u,e[5]=a*c,e[9]=-o*c,e[2]=-l*c,e[6]=f*u+g,e[10]=d-_*u}else if(t.order==="XZY"){const d=a*h,f=a*l,g=o*h,_=o*l;e[0]=h*c,e[4]=-u,e[8]=l*c,e[1]=d*u+_,e[5]=a*c,e[9]=f*u-g,e[2]=g*u-f,e[6]=o*c,e[10]=_*u+d}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Pf,t,If)}lookAt(t,e,i){const n=this.elements;return He.subVectors(t,e),He.lengthSq()===0&&(He.z=1),He.normalize(),rn.crossVectors(i,He),rn.lengthSq()===0&&(Math.abs(i.z)===1?He.x+=1e-4:He.z+=1e-4,He.normalize(),rn.crossVectors(i,He)),rn.normalize(),Gr.crossVectors(He,rn),n[0]=rn.x,n[4]=Gr.x,n[8]=He.x,n[1]=rn.y,n[5]=Gr.y,n[9]=He.y,n[2]=rn.z,n[6]=Gr.z,n[10]=He.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,n=e.elements,r=this.elements,a=i[0],o=i[4],h=i[8],l=i[12],c=i[1],u=i[5],d=i[9],f=i[13],g=i[2],_=i[6],m=i[10],p=i[14],T=i[3],b=i[7],y=i[11],R=i[15],w=n[0],C=n[4],I=n[8],S=n[12],M=n[1],A=n[5],B=n[9],F=n[13],z=n[2],W=n[6],X=n[10],Q=n[14],H=n[3],rt=n[7],ht=n[11],_t=n[15];return r[0]=a*w+o*M+h*z+l*H,r[4]=a*C+o*A+h*W+l*rt,r[8]=a*I+o*B+h*X+l*ht,r[12]=a*S+o*F+h*Q+l*_t,r[1]=c*w+u*M+d*z+f*H,r[5]=c*C+u*A+d*W+f*rt,r[9]=c*I+u*B+d*X+f*ht,r[13]=c*S+u*F+d*Q+f*_t,r[2]=g*w+_*M+m*z+p*H,r[6]=g*C+_*A+m*W+p*rt,r[10]=g*I+_*B+m*X+p*ht,r[14]=g*S+_*F+m*Q+p*_t,r[3]=T*w+b*M+y*z+R*H,r[7]=T*C+b*A+y*W+R*rt,r[11]=T*I+b*B+y*X+R*ht,r[15]=T*S+b*F+y*Q+R*_t,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],i=t[4],n=t[8],r=t[12],a=t[1],o=t[5],h=t[9],l=t[13],c=t[2],u=t[6],d=t[10],f=t[14],g=t[3],_=t[7],m=t[11],p=t[15];return g*(+r*h*u-n*l*u-r*o*d+i*l*d+n*o*f-i*h*f)+_*(+e*h*f-e*l*d+r*a*d-n*a*f+n*l*c-r*h*c)+m*(+e*l*u-e*o*f-r*a*u+i*a*f+r*o*c-i*l*c)+p*(-n*o*c-e*h*u+e*o*d+n*a*u-i*a*d+i*h*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,i){const n=this.elements;return t.isVector3?(n[12]=t.x,n[13]=t.y,n[14]=t.z):(n[12]=t,n[13]=e,n[14]=i),this}invert(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],a=t[4],o=t[5],h=t[6],l=t[7],c=t[8],u=t[9],d=t[10],f=t[11],g=t[12],_=t[13],m=t[14],p=t[15],T=u*m*l-_*d*l+_*h*f-o*m*f-u*h*p+o*d*p,b=g*d*l-c*m*l-g*h*f+a*m*f+c*h*p-a*d*p,y=c*_*l-g*u*l+g*o*f-a*_*f-c*o*p+a*u*p,R=g*u*h-c*_*h-g*o*d+a*_*d+c*o*m-a*u*m,w=e*T+i*b+n*y+r*R;if(w===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const C=1/w;return t[0]=T*C,t[1]=(_*d*r-u*m*r-_*n*f+i*m*f+u*n*p-i*d*p)*C,t[2]=(o*m*r-_*h*r+_*n*l-i*m*l-o*n*p+i*h*p)*C,t[3]=(u*h*r-o*d*r-u*n*l+i*d*l+o*n*f-i*h*f)*C,t[4]=b*C,t[5]=(c*m*r-g*d*r+g*n*f-e*m*f-c*n*p+e*d*p)*C,t[6]=(g*h*r-a*m*r-g*n*l+e*m*l+a*n*p-e*h*p)*C,t[7]=(a*d*r-c*h*r+c*n*l-e*d*l-a*n*f+e*h*f)*C,t[8]=y*C,t[9]=(g*u*r-c*_*r-g*i*f+e*_*f+c*i*p-e*u*p)*C,t[10]=(a*_*r-g*o*r+g*i*l-e*_*l-a*i*p+e*o*p)*C,t[11]=(c*o*r-a*u*r-c*i*l+e*u*l+a*i*f-e*o*f)*C,t[12]=R*C,t[13]=(c*_*n-g*u*n+g*i*d-e*_*d-c*i*m+e*u*m)*C,t[14]=(g*o*n-a*_*n-g*i*h+e*_*h+a*i*m-e*o*m)*C,t[15]=(a*u*n-c*o*n+c*i*h-e*u*h-a*i*d+e*o*d)*C,this}scale(t){const e=this.elements,i=t.x,n=t.y,r=t.z;return e[0]*=i,e[4]*=n,e[8]*=r,e[1]*=i,e[5]*=n,e[9]*=r,e[2]*=i,e[6]*=n,e[10]*=r,e[3]*=i,e[7]*=n,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],i=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],n=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,i,n))}makeTranslation(t,e,i){return t.isVector3?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,e,0,0,1,i,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),i=Math.sin(t);return this.set(1,0,0,0,0,e,-i,0,0,i,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,0,i,0,0,1,0,0,-i,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,0,i,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const i=Math.cos(e),n=Math.sin(e),r=1-i,a=t.x,o=t.y,h=t.z,l=r*a,c=r*o;return this.set(l*a+i,l*o-n*h,l*h+n*o,0,l*o+n*h,c*o+i,c*h-n*a,0,l*h-n*o,c*h+n*a,r*h*h+i,0,0,0,0,1),this}makeScale(t,e,i){return this.set(t,0,0,0,0,e,0,0,0,0,i,0,0,0,0,1),this}makeShear(t,e,i,n,r,a){return this.set(1,i,r,0,t,1,a,0,e,n,1,0,0,0,0,1),this}compose(t,e,i){const n=this.elements,r=e._x,a=e._y,o=e._z,h=e._w,l=r+r,c=a+a,u=o+o,d=r*l,f=r*c,g=r*u,_=a*c,m=a*u,p=o*u,T=h*l,b=h*c,y=h*u,R=i.x,w=i.y,C=i.z;return n[0]=(1-(_+p))*R,n[1]=(f+y)*R,n[2]=(g-b)*R,n[3]=0,n[4]=(f-y)*w,n[5]=(1-(d+p))*w,n[6]=(m+T)*w,n[7]=0,n[8]=(g+b)*C,n[9]=(m-T)*C,n[10]=(1-(d+_))*C,n[11]=0,n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=1,this}decompose(t,e,i){const n=this.elements;let r=ps.set(n[0],n[1],n[2]).length();const a=ps.set(n[4],n[5],n[6]).length(),o=ps.set(n[8],n[9],n[10]).length();this.determinant()<0&&(r=-r),t.x=n[12],t.y=n[13],t.z=n[14],ci.copy(this);const l=1/r,c=1/a,u=1/o;return ci.elements[0]*=l,ci.elements[1]*=l,ci.elements[2]*=l,ci.elements[4]*=c,ci.elements[5]*=c,ci.elements[6]*=c,ci.elements[8]*=u,ci.elements[9]*=u,ci.elements[10]*=u,e.setFromRotationMatrix(ci),i.x=r,i.y=a,i.z=o,this}makePerspective(t,e,i,n,r,a,o=vi,h=!1){const l=this.elements,c=2*r/(e-t),u=2*r/(i-n),d=(e+t)/(e-t),f=(i+n)/(i-n);let g,_;if(h)g=r/(a-r),_=a*r/(a-r);else if(o===vi)g=-(a+r)/(a-r),_=-2*a*r/(a-r);else if(o===Dr)g=-a/(a-r),_=-a*r/(a-r);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+o);return l[0]=c,l[4]=0,l[8]=d,l[12]=0,l[1]=0,l[5]=u,l[9]=f,l[13]=0,l[2]=0,l[6]=0,l[10]=g,l[14]=_,l[3]=0,l[7]=0,l[11]=-1,l[15]=0,this}makeOrthographic(t,e,i,n,r,a,o=vi,h=!1){const l=this.elements,c=2/(e-t),u=2/(i-n),d=-(e+t)/(e-t),f=-(i+n)/(i-n);let g,_;if(h)g=1/(a-r),_=a/(a-r);else if(o===vi)g=-2/(a-r),_=-(a+r)/(a-r);else if(o===Dr)g=-1/(a-r),_=-r/(a-r);else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+o);return l[0]=c,l[4]=0,l[8]=0,l[12]=d,l[1]=0,l[5]=u,l[9]=0,l[13]=f,l[2]=0,l[6]=0,l[10]=g,l[14]=_,l[3]=0,l[7]=0,l[11]=0,l[15]=1,this}equals(t){const e=this.elements,i=t.elements;for(let n=0;n<16;n++)if(e[n]!==i[n])return!1;return!0}fromArray(t,e=0){for(let i=0;i<16;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t[e+9]=i[9],t[e+10]=i[10],t[e+11]=i[11],t[e+12]=i[12],t[e+13]=i[13],t[e+14]=i[14],t[e+15]=i[15],t}}const ps=new N,ci=new ue,Pf=new N(0,0,0),If=new N(1,1,1),rn=new N,Gr=new N,He=new N,Hh=new ue,Vh=new Tn;class yi{constructor(t=0,e=0,i=0,n=yi.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=e,this._z=i,this._order=n}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,i,n=this._order){return this._x=t,this._y=e,this._z=i,this._order=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,i=!0){const n=t.elements,r=n[0],a=n[4],o=n[8],h=n[1],l=n[5],c=n[9],u=n[2],d=n[6],f=n[10];switch(e){case"XYZ":this._y=Math.asin(Bt(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-c,f),this._z=Math.atan2(-a,r)):(this._x=Math.atan2(d,l),this._z=0);break;case"YXZ":this._x=Math.asin(-Bt(c,-1,1)),Math.abs(c)<.9999999?(this._y=Math.atan2(o,f),this._z=Math.atan2(h,l)):(this._y=Math.atan2(-u,r),this._z=0);break;case"ZXY":this._x=Math.asin(Bt(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,f),this._z=Math.atan2(-a,l)):(this._y=0,this._z=Math.atan2(h,r));break;case"ZYX":this._y=Math.asin(-Bt(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,f),this._z=Math.atan2(h,r)):(this._x=0,this._z=Math.atan2(-a,l));break;case"YZX":this._z=Math.asin(Bt(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(-c,l),this._y=Math.atan2(-u,r)):(this._x=0,this._y=Math.atan2(o,f));break;case"XZY":this._z=Math.asin(-Bt(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(d,l),this._y=Math.atan2(o,r)):(this._x=Math.atan2(-c,f),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,i===!0&&this._onChangeCallback(),this}setFromQuaternion(t,e,i){return Hh.makeRotationFromQuaternion(t),this.setFromRotationMatrix(Hh,e,i)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return Vh.setFromEuler(this),this.setFromQuaternion(Vh,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],t[3]!==void 0&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}yi.DEFAULT_ORDER="XYZ";class Wh{constructor(){this.mask=1}set(t){this.mask=(1<<t|0)>>>0}enable(t){this.mask|=1<<t|0}enableAll(){this.mask=-1}toggle(t){this.mask^=1<<t|0}disable(t){this.mask&=~(1<<t|0)}disableAll(){this.mask=0}test(t){return(this.mask&t.mask)!==0}isEnabled(t){return(this.mask&(1<<t|0))!==0}}let Lf=0;const Xh=new N,ms=new Tn,ki=new ue,Hr=new N,$s=new N,Df=new N,Uf=new Tn,qh=new N(1,0,0),Yh=new N(0,1,0),jh=new N(0,0,1),Zh={type:"added"},Nf={type:"removed"},gs={type:"childadded",child:null},Ho={type:"childremoved",child:null};class Se extends En{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:Lf++}),this.uuid=qs(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=Se.DEFAULT_UP.clone();const t=new N,e=new yi,i=new Tn,n=new N(1,1,1);function r(){i.setFromEuler(e,!1)}function a(){e.setFromQuaternion(i,void 0,!1)}e._onChange(r),i._onChange(a),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:i},scale:{configurable:!0,enumerable:!0,value:n},modelViewMatrix:{value:new ue},normalMatrix:{value:new Ut}}),this.matrix=new ue,this.matrixWorld=new ue,this.matrixAutoUpdate=Se.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=Se.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new Wh,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.customDepthMaterial=void 0,this.customDistanceMaterial=void 0,this.userData={}}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,e){return ms.setFromAxisAngle(t,e),this.quaternion.multiply(ms),this}rotateOnWorldAxis(t,e){return ms.setFromAxisAngle(t,e),this.quaternion.premultiply(ms),this}rotateX(t){return this.rotateOnAxis(qh,t)}rotateY(t){return this.rotateOnAxis(Yh,t)}rotateZ(t){return this.rotateOnAxis(jh,t)}translateOnAxis(t,e){return Xh.copy(t).applyQuaternion(this.quaternion),this.position.add(Xh.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis(qh,t)}translateY(t){return this.translateOnAxis(Yh,t)}translateZ(t){return this.translateOnAxis(jh,t)}localToWorld(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(ki.copy(this.matrixWorld).invert())}lookAt(t,e,i){t.isVector3?Hr.copy(t):Hr.set(t,e,i);const n=this.parent;this.updateWorldMatrix(!0,!1),$s.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?ki.lookAt($s,Hr,this.up):ki.lookAt(Hr,$s,this.up),this.quaternion.setFromRotationMatrix(ki),n&&(ki.extractRotation(n.matrixWorld),ms.setFromRotationMatrix(ki),this.quaternion.premultiply(ms.invert()))}add(t){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return t===this?(console.error("THREE.Object3D.add: object can't be added as a child of itself.",t),this):(t&&t.isObject3D?(t.removeFromParent(),t.parent=this,this.children.push(t),t.dispatchEvent(Zh),gs.child=t,this.dispatchEvent(gs),gs.child=null):console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",t),this)}remove(t){if(arguments.length>1){for(let i=0;i<arguments.length;i++)this.remove(arguments[i]);return this}const e=this.children.indexOf(t);return e!==-1&&(t.parent=null,this.children.splice(e,1),t.dispatchEvent(Nf),Ho.child=t,this.dispatchEvent(Ho),Ho.child=null),this}removeFromParent(){const t=this.parent;return t!==null&&t.remove(this),this}clear(){return this.remove(...this.children)}attach(t){return this.updateWorldMatrix(!0,!1),ki.copy(this.matrixWorld).invert(),t.parent!==null&&(t.parent.updateWorldMatrix(!0,!1),ki.multiply(t.parent.matrixWorld)),t.applyMatrix4(ki),t.removeFromParent(),t.parent=this,this.children.push(t),t.updateWorldMatrix(!1,!0),t.dispatchEvent(Zh),gs.child=t,this.dispatchEvent(gs),gs.child=null,this}getObjectById(t){return this.getObjectByProperty("id",t)}getObjectByName(t){return this.getObjectByProperty("name",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let i=0,n=this.children.length;i<n;i++){const a=this.children[i].getObjectByProperty(t,e);if(a!==void 0)return a}}getObjectsByProperty(t,e,i=[]){this[t]===e&&i.push(this);const n=this.children;for(let r=0,a=n.length;r<a;r++)n[r].getObjectsByProperty(t,e,i);return i}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose($s,t,Df),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose($s,Uf,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].traverse(t)}traverseVisible(t){if(this.visible===!1)return;t(this);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].traverseVisible(t)}traverseAncestors(t){const e=this.parent;e!==null&&(t(e),e.traverseAncestors(t))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,t=!0);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].updateMatrixWorld(t)}updateWorldMatrix(t,e){const i=this.parent;if(t===!0&&i!==null&&i.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),e===!0){const n=this.children;for(let r=0,a=n.length;r<a;r++)n[r].updateWorldMatrix(!1,!0)}}toJSON(t){const e=t===void 0||typeof t=="string",i={};e&&(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},i.metadata={version:4.7,type:"Object",generator:"Object3D.toJSON"});const n={};n.uuid=this.uuid,n.type=this.type,this.name!==""&&(n.name=this.name),this.castShadow===!0&&(n.castShadow=!0),this.receiveShadow===!0&&(n.receiveShadow=!0),this.visible===!1&&(n.visible=!1),this.frustumCulled===!1&&(n.frustumCulled=!1),this.renderOrder!==0&&(n.renderOrder=this.renderOrder),Object.keys(this.userData).length>0&&(n.userData=this.userData),n.layers=this.layers.mask,n.matrix=this.matrix.toArray(),n.up=this.up.toArray(),this.matrixAutoUpdate===!1&&(n.matrixAutoUpdate=!1),this.isInstancedMesh&&(n.type="InstancedMesh",n.count=this.count,n.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(n.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(n.type="BatchedMesh",n.perObjectFrustumCulled=this.perObjectFrustumCulled,n.sortObjects=this.sortObjects,n.drawRanges=this._drawRanges,n.reservedRanges=this._reservedRanges,n.geometryInfo=this._geometryInfo.map(o=>({...o,boundingBox:o.boundingBox?o.boundingBox.toJSON():void 0,boundingSphere:o.boundingSphere?o.boundingSphere.toJSON():void 0})),n.instanceInfo=this._instanceInfo.map(o=>({...o})),n.availableInstanceIds=this._availableInstanceIds.slice(),n.availableGeometryIds=this._availableGeometryIds.slice(),n.nextIndexStart=this._nextIndexStart,n.nextVertexStart=this._nextVertexStart,n.geometryCount=this._geometryCount,n.maxInstanceCount=this._maxInstanceCount,n.maxVertexCount=this._maxVertexCount,n.maxIndexCount=this._maxIndexCount,n.geometryInitialized=this._geometryInitialized,n.matricesTexture=this._matricesTexture.toJSON(t),n.indirectTexture=this._indirectTexture.toJSON(t),this._colorsTexture!==null&&(n.colorsTexture=this._colorsTexture.toJSON(t)),this.boundingSphere!==null&&(n.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(n.boundingBox=this.boundingBox.toJSON()));function r(o,h){return o[h.uuid]===void 0&&(o[h.uuid]=h.toJSON(t)),h.uuid}if(this.isScene)this.background&&(this.background.isColor?n.background=this.background.toJSON():this.background.isTexture&&(n.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(n.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){n.geometry=r(t.geometries,this.geometry);const o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){const h=o.shapes;if(Array.isArray(h))for(let l=0,c=h.length;l<c;l++){const u=h[l];r(t.shapes,u)}else r(t.shapes,h)}}if(this.isSkinnedMesh&&(n.bindMode=this.bindMode,n.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(r(t.skeletons,this.skeleton),n.skeleton=this.skeleton.uuid)),this.material!==void 0)if(Array.isArray(this.material)){const o=[];for(let h=0,l=this.material.length;h<l;h++)o.push(r(t.materials,this.material[h]));n.material=o}else n.material=r(t.materials,this.material);if(this.children.length>0){n.children=[];for(let o=0;o<this.children.length;o++)n.children.push(this.children[o].toJSON(t).object)}if(this.animations.length>0){n.animations=[];for(let o=0;o<this.animations.length;o++){const h=this.animations[o];n.animations.push(r(t.animations,h))}}if(e){const o=a(t.geometries),h=a(t.materials),l=a(t.textures),c=a(t.images),u=a(t.shapes),d=a(t.skeletons),f=a(t.animations),g=a(t.nodes);o.length>0&&(i.geometries=o),h.length>0&&(i.materials=h),l.length>0&&(i.textures=l),c.length>0&&(i.images=c),u.length>0&&(i.shapes=u),d.length>0&&(i.skeletons=d),f.length>0&&(i.animations=f),g.length>0&&(i.nodes=g)}return i.object=n,i;function a(o){const h=[];for(const l in o){const c=o[l];delete c.metadata,h.push(c)}return h}}clone(t){return new this.constructor().copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.animations=t.animations.slice(),this.userData=JSON.parse(JSON.stringify(t.userData)),e===!0)for(let i=0;i<t.children.length;i++){const n=t.children[i];this.add(n.clone())}return this}}Se.DEFAULT_UP=new N(0,1,0),Se.DEFAULT_MATRIX_AUTO_UPDATE=!0,Se.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;const ui=new N,Gi=new N,Vo=new N,Hi=new N,_s=new N,xs=new N,Kh=new N,Wo=new N,Xo=new N,qo=new N,Yo=new he,jo=new he,Zo=new he;class di{constructor(t=new N,e=new N,i=new N){this.a=t,this.b=e,this.c=i}static getNormal(t,e,i,n){n.subVectors(i,e),ui.subVectors(t,e),n.cross(ui);const r=n.lengthSq();return r>0?n.multiplyScalar(1/Math.sqrt(r)):n.set(0,0,0)}static getBarycoord(t,e,i,n,r){ui.subVectors(n,e),Gi.subVectors(i,e),Vo.subVectors(t,e);const a=ui.dot(ui),o=ui.dot(Gi),h=ui.dot(Vo),l=Gi.dot(Gi),c=Gi.dot(Vo),u=a*l-o*o;if(u===0)return r.set(0,0,0),null;const d=1/u,f=(l*h-o*c)*d,g=(a*c-o*h)*d;return r.set(1-f-g,g,f)}static containsPoint(t,e,i,n){return this.getBarycoord(t,e,i,n,Hi)===null?!1:Hi.x>=0&&Hi.y>=0&&Hi.x+Hi.y<=1}static getInterpolation(t,e,i,n,r,a,o,h){return this.getBarycoord(t,e,i,n,Hi)===null?(h.x=0,h.y=0,"z"in h&&(h.z=0),"w"in h&&(h.w=0),null):(h.setScalar(0),h.addScaledVector(r,Hi.x),h.addScaledVector(a,Hi.y),h.addScaledVector(o,Hi.z),h)}static getInterpolatedAttribute(t,e,i,n,r,a){return Yo.setScalar(0),jo.setScalar(0),Zo.setScalar(0),Yo.fromBufferAttribute(t,e),jo.fromBufferAttribute(t,i),Zo.fromBufferAttribute(t,n),a.setScalar(0),a.addScaledVector(Yo,r.x),a.addScaledVector(jo,r.y),a.addScaledVector(Zo,r.z),a}static isFrontFacing(t,e,i,n){return ui.subVectors(i,e),Gi.subVectors(t,e),ui.cross(Gi).dot(n)<0}set(t,e,i){return this.a.copy(t),this.b.copy(e),this.c.copy(i),this}setFromPointsAndIndices(t,e,i,n){return this.a.copy(t[e]),this.b.copy(t[i]),this.c.copy(t[n]),this}setFromAttributeAndIndices(t,e,i,n){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,i),this.c.fromBufferAttribute(t,n),this}clone(){return new this.constructor().copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return ui.subVectors(this.c,this.b),Gi.subVectors(this.a,this.b),ui.cross(Gi).length()*.5}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return di.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return di.getBarycoord(t,this.a,this.b,this.c,e)}getInterpolation(t,e,i,n,r){return di.getInterpolation(t,this.a,this.b,this.c,e,i,n,r)}containsPoint(t){return di.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return di.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const i=this.a,n=this.b,r=this.c;let a,o;_s.subVectors(n,i),xs.subVectors(r,i),Wo.subVectors(t,i);const h=_s.dot(Wo),l=xs.dot(Wo);if(h<=0&&l<=0)return e.copy(i);Xo.subVectors(t,n);const c=_s.dot(Xo),u=xs.dot(Xo);if(c>=0&&u<=c)return e.copy(n);const d=h*u-c*l;if(d<=0&&h>=0&&c<=0)return a=h/(h-c),e.copy(i).addScaledVector(_s,a);qo.subVectors(t,r);const f=_s.dot(qo),g=xs.dot(qo);if(g>=0&&f<=g)return e.copy(r);const _=f*l-h*g;if(_<=0&&l>=0&&g<=0)return o=l/(l-g),e.copy(i).addScaledVector(xs,o);const m=c*g-f*u;if(m<=0&&u-c>=0&&f-g>=0)return Kh.subVectors(r,n),o=(u-c)/(u-c+(f-g)),e.copy(n).addScaledVector(Kh,o);const p=1/(m+_+d);return a=_*p,o=d*p,e.copy(i).addScaledVector(_s,a).addScaledVector(xs,o)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}const $h={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},an={h:0,s:0,l:0},Vr={h:0,s:0,l:0};function Ko(s,t,e){return e<0&&(e+=1),e>1&&(e-=1),e<1/6?s+(t-s)*6*e:e<1/2?t:e<2/3?s+(t-s)*6*(2/3-e):s}class Vt{constructor(t,e,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(t,e,i)}set(t,e,i){if(e===void 0&&i===void 0){const n=t;n&&n.isColor?this.copy(n):typeof n=="number"?this.setHex(n):typeof n=="string"&&this.setStyle(n)}else this.setRGB(t,e,i);return this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=Ke){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(t&255)/255,Xt.colorSpaceToWorking(this,e),this}setRGB(t,e,i,n=Xt.workingColorSpace){return this.r=t,this.g=e,this.b=i,Xt.colorSpaceToWorking(this,n),this}setHSL(t,e,i,n=Xt.workingColorSpace){if(t=vf(t,1),e=Bt(e,0,1),i=Bt(i,0,1),e===0)this.r=this.g=this.b=i;else{const r=i<=.5?i*(1+e):i+e-i*e,a=2*i-r;this.r=Ko(a,r,t+1/3),this.g=Ko(a,r,t),this.b=Ko(a,r,t-1/3)}return Xt.colorSpaceToWorking(this,n),this}setStyle(t,e=Ke){function i(r){r!==void 0&&parseFloat(r)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^(\w+)\(([^\)]*)\)/.exec(t)){let r;const a=n[1],o=n[2];switch(a){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setRGB(Math.min(255,parseInt(r[1],10))/255,Math.min(255,parseInt(r[2],10))/255,Math.min(255,parseInt(r[3],10))/255,e);if(r=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setRGB(Math.min(100,parseInt(r[1],10))/100,Math.min(100,parseInt(r[2],10))/100,Math.min(100,parseInt(r[3],10))/100,e);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setHSL(parseFloat(r[1])/360,parseFloat(r[2])/100,parseFloat(r[3])/100,e);break;default:console.warn("THREE.Color: Unknown color model "+t)}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(t)){const r=n[1],a=r.length;if(a===3)return this.setRGB(parseInt(r.charAt(0),16)/15,parseInt(r.charAt(1),16)/15,parseInt(r.charAt(2),16)/15,e);if(a===6)return this.setHex(parseInt(r,16),e);console.warn("THREE.Color: Invalid hex color "+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=Ke){const i=$h[t.toLowerCase()];return i!==void 0?this.setHex(i,e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=Oi(t.r),this.g=Oi(t.g),this.b=Oi(t.b),this}copyLinearToSRGB(t){return this.r=ls(t.r),this.g=ls(t.g),this.b=ls(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=Ke){return Xt.workingToColorSpace(Ce.copy(this),t),Math.round(Bt(Ce.r*255,0,255))*65536+Math.round(Bt(Ce.g*255,0,255))*256+Math.round(Bt(Ce.b*255,0,255))}getHexString(t=Ke){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=Xt.workingColorSpace){Xt.workingToColorSpace(Ce.copy(this),e);const i=Ce.r,n=Ce.g,r=Ce.b,a=Math.max(i,n,r),o=Math.min(i,n,r);let h,l;const c=(o+a)/2;if(o===a)h=0,l=0;else{const u=a-o;switch(l=c<=.5?u/(a+o):u/(2-a-o),a){case i:h=(n-r)/u+(n<r?6:0);break;case n:h=(r-i)/u+2;break;case r:h=(i-n)/u+4;break}h/=6}return t.h=h,t.s=l,t.l=c,t}getRGB(t,e=Xt.workingColorSpace){return Xt.workingToColorSpace(Ce.copy(this),e),t.r=Ce.r,t.g=Ce.g,t.b=Ce.b,t}getStyle(t=Ke){Xt.workingToColorSpace(Ce.copy(this),t);const e=Ce.r,i=Ce.g,n=Ce.b;return t!==Ke?`color(${t} ${e.toFixed(3)} ${i.toFixed(3)} ${n.toFixed(3)})`:`rgb(${Math.round(e*255)},${Math.round(i*255)},${Math.round(n*255)})`}offsetHSL(t,e,i){return this.getHSL(an),this.setHSL(an.h+t,an.s+e,an.l+i)}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,i){return this.r=t.r+(e.r-t.r)*i,this.g=t.g+(e.g-t.g)*i,this.b=t.b+(e.b-t.b)*i,this}lerpHSL(t,e){this.getHSL(an),t.getHSL(Vr);const i=Po(an.h,Vr.h,e),n=Po(an.s,Vr.s,e),r=Po(an.l,Vr.l,e);return this.setHSL(i,n,r),this}setFromVector3(t){return this.r=t.x,this.g=t.y,this.b=t.z,this}applyMatrix3(t){const e=this.r,i=this.g,n=this.b,r=t.elements;return this.r=r[0]*e+r[3]*i+r[6]*n,this.g=r[1]*e+r[4]*i+r[7]*n,this.b=r[2]*e+r[5]*i+r[8]*n,this}equals(t){return t.r===this.r&&t.g===this.g&&t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}}const Ce=new Vt;Vt.NAMES=$h;let Ff=0;class Js extends En{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:Ff++}),this.uuid=qs(),this.name="",this.type="Material",this.blending=es,this.side=$i,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.alphaHash=!1,this.blendSrc=Oa,this.blendDst=za,this.blendEquation=yn,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.blendColor=new Vt(0,0,0),this.blendAlpha=0,this.depthFunc=is,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=Ih,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=as,this.stencilZFail=as,this.stencilZPass=as,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.allowOverride=!0,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(t){this._alphaTest>0!=t>0&&this.version++,this._alphaTest=t}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(t!==void 0)for(const e in t){const i=t[e];if(i===void 0){console.warn(`THREE.Material: parameter '${e}' has value of undefined.`);continue}const n=this[e];if(n===void 0){console.warn(`THREE.Material: '${e}' is not a property of THREE.${this.type}.`);continue}n&&n.isColor?n.set(i):n&&n.isVector3&&i&&i.isVector3?n.copy(i):this[e]=i}}toJSON(t){const e=t===void 0||typeof t=="string";e&&(t={textures:{},images:{}});const i={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};i.uuid=this.uuid,i.type=this.type,this.name!==""&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),this.roughness!==void 0&&(i.roughness=this.roughness),this.metalness!==void 0&&(i.metalness=this.metalness),this.sheen!==void 0&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(i.shininess=this.shininess),this.clearcoat!==void 0&&(i.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.dispersion!==void 0&&(i.dispersion=this.dispersion),this.iridescence!==void 0&&(i.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(i.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(t).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(t).uuid),this.anisotropy!==void 0&&(i.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(i.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(i.anisotropyMap=this.anisotropyMap.toJSON(t).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(t).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(t).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(t).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(t).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(t).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(t).uuid,this.combine!==void 0&&(i.combine=this.combine)),this.envMapRotation!==void 0&&(i.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(i.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(i.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(t).uuid),this.transmission!==void 0&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(t).uuid),this.thickness!==void 0&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(t).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(i.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(i.size=this.size),this.shadowSide!==null&&(i.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(i.sizeAttenuation=this.sizeAttenuation),this.blending!==es&&(i.blending=this.blending),this.side!==$i&&(i.side=this.side),this.vertexColors===!0&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),this.transparent===!0&&(i.transparent=!0),this.blendSrc!==Oa&&(i.blendSrc=this.blendSrc),this.blendDst!==za&&(i.blendDst=this.blendDst),this.blendEquation!==yn&&(i.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(i.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(i.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(i.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(i.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(i.blendAlpha=this.blendAlpha),this.depthFunc!==is&&(i.depthFunc=this.depthFunc),this.depthTest===!1&&(i.depthTest=this.depthTest),this.depthWrite===!1&&(i.depthWrite=this.depthWrite),this.colorWrite===!1&&(i.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(i.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==Ih&&(i.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(i.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==as&&(i.stencilFail=this.stencilFail),this.stencilZFail!==as&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==as&&(i.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(i.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(i.rotation=this.rotation),this.polygonOffset===!0&&(i.polygonOffset=!0),this.polygonOffsetFactor!==0&&(i.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(i.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(i.linewidth=this.linewidth),this.dashSize!==void 0&&(i.dashSize=this.dashSize),this.gapSize!==void 0&&(i.gapSize=this.gapSize),this.scale!==void 0&&(i.scale=this.scale),this.dithering===!0&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),this.alphaHash===!0&&(i.alphaHash=!0),this.alphaToCoverage===!0&&(i.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(i.premultipliedAlpha=!0),this.forceSinglePass===!0&&(i.forceSinglePass=!0),this.wireframe===!0&&(i.wireframe=!0),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(i.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(i.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(i.flatShading=!0),this.visible===!1&&(i.visible=!1),this.toneMapped===!1&&(i.toneMapped=!1),this.fog===!1&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData);function n(r){const a=[];for(const o in r){const h=r[o];delete h.metadata,a.push(h)}return a}if(e){const r=n(t.textures),a=n(t.images);r.length>0&&(i.textures=r),a.length>0&&(i.images=a)}return i}clone(){return new this.constructor().copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.blendColor.copy(t.blendColor),this.blendAlpha=t.blendAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let i=null;if(e!==null){const n=e.length;i=new Array(n);for(let r=0;r!==n;++r)i[r]=e[r].clone()}return this.clippingPlanes=i,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaHash=t.alphaHash,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.forceSinglePass=t.forceSinglePass,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){t===!0&&this.version++}}class Jh extends Js{constructor(t){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new Vt(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new yi,this.combine=yh,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}const _e=new N,Wr=new Dt;let Of=0;class Mi{constructor(t,e,i=!1){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:Of++}),this.name="",this.array=t,this.itemSize=e,this.count=t!==void 0?t.length/e:0,this.normalized=i,this.usage=Dh,this.updateRanges=[],this.gpuType=Fi,this.version=0}onUploadCallback(){}set needsUpdate(t){t===!0&&this.version++}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this.gpuType=t.gpuType,this}copyAt(t,e,i){t*=this.itemSize,i*=e.itemSize;for(let n=0,r=this.itemSize;n<r;n++)this.array[t+n]=e.array[i+n];return this}copyArray(t){return this.array.set(t),this}applyMatrix3(t){if(this.itemSize===2)for(let e=0,i=this.count;e<i;e++)Wr.fromBufferAttribute(this,e),Wr.applyMatrix3(t),this.setXY(e,Wr.x,Wr.y);else if(this.itemSize===3)for(let e=0,i=this.count;e<i;e++)_e.fromBufferAttribute(this,e),_e.applyMatrix3(t),this.setXYZ(e,_e.x,_e.y,_e.z);return this}applyMatrix4(t){for(let e=0,i=this.count;e<i;e++)_e.fromBufferAttribute(this,e),_e.applyMatrix4(t),this.setXYZ(e,_e.x,_e.y,_e.z);return this}applyNormalMatrix(t){for(let e=0,i=this.count;e<i;e++)_e.fromBufferAttribute(this,e),_e.applyNormalMatrix(t),this.setXYZ(e,_e.x,_e.y,_e.z);return this}transformDirection(t){for(let e=0,i=this.count;e<i;e++)_e.fromBufferAttribute(this,e),_e.transformDirection(t),this.setXYZ(e,_e.x,_e.y,_e.z);return this}set(t,e=0){return this.array.set(t,e),this}getComponent(t,e){let i=this.array[t*this.itemSize+e];return this.normalized&&(i=Ys(i,this.array)),i}setComponent(t,e,i){return this.normalized&&(i=Ne(i,this.array)),this.array[t*this.itemSize+e]=i,this}getX(t){let e=this.array[t*this.itemSize];return this.normalized&&(e=Ys(e,this.array)),e}setX(t,e){return this.normalized&&(e=Ne(e,this.array)),this.array[t*this.itemSize]=e,this}getY(t){let e=this.array[t*this.itemSize+1];return this.normalized&&(e=Ys(e,this.array)),e}setY(t,e){return this.normalized&&(e=Ne(e,this.array)),this.array[t*this.itemSize+1]=e,this}getZ(t){let e=this.array[t*this.itemSize+2];return this.normalized&&(e=Ys(e,this.array)),e}setZ(t,e){return this.normalized&&(e=Ne(e,this.array)),this.array[t*this.itemSize+2]=e,this}getW(t){let e=this.array[t*this.itemSize+3];return this.normalized&&(e=Ys(e,this.array)),e}setW(t,e){return this.normalized&&(e=Ne(e,this.array)),this.array[t*this.itemSize+3]=e,this}setXY(t,e,i){return t*=this.itemSize,this.normalized&&(e=Ne(e,this.array),i=Ne(i,this.array)),this.array[t+0]=e,this.array[t+1]=i,this}setXYZ(t,e,i,n){return t*=this.itemSize,this.normalized&&(e=Ne(e,this.array),i=Ne(i,this.array),n=Ne(n,this.array)),this.array[t+0]=e,this.array[t+1]=i,this.array[t+2]=n,this}setXYZW(t,e,i,n,r){return t*=this.itemSize,this.normalized&&(e=Ne(e,this.array),i=Ne(i,this.array),n=Ne(n,this.array),r=Ne(r,this.array)),this.array[t+0]=e,this.array[t+1]=i,this.array[t+2]=n,this.array[t+3]=r,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){const t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return this.name!==""&&(t.name=this.name),this.usage!==Dh&&(t.usage=this.usage),t}}class Qh extends Mi{constructor(t,e,i){super(new Uint16Array(t),e,i)}}class tc extends Mi{constructor(t,e,i){super(new Uint32Array(t),e,i)}}class Cn extends Mi{constructor(t,e,i){super(new Float32Array(t),e,i)}}let zf=0;const $e=new ue,$o=new Se,vs=new N,Ve=new cs,Qs=new cs,be=new N;class Pn extends En{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:zf++}),this.uuid=qs(),this.name="",this.type="BufferGeometry",this.index=null,this.indirect=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(Fh(t)?tc:Qh)(t,1):this.index=t,this}setIndirect(t){return this.indirect=t,this}getIndirect(){return this.indirect}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return this.attributes[t]!==void 0}addGroup(t,e,i=0){this.groups.push({start:t,count:e,materialIndex:i})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;e!==void 0&&(e.applyMatrix4(t),e.needsUpdate=!0);const i=this.attributes.normal;if(i!==void 0){const r=new Ut().getNormalMatrix(t);i.applyNormalMatrix(r),i.needsUpdate=!0}const n=this.attributes.tangent;return n!==void 0&&(n.transformDirection(t),n.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}applyQuaternion(t){return $e.makeRotationFromQuaternion(t),this.applyMatrix4($e),this}rotateX(t){return $e.makeRotationX(t),this.applyMatrix4($e),this}rotateY(t){return $e.makeRotationY(t),this.applyMatrix4($e),this}rotateZ(t){return $e.makeRotationZ(t),this.applyMatrix4($e),this}translate(t,e,i){return $e.makeTranslation(t,e,i),this.applyMatrix4($e),this}scale(t,e,i){return $e.makeScale(t,e,i),this.applyMatrix4($e),this}lookAt(t){return $o.lookAt(t),$o.updateMatrix(),this.applyMatrix4($o.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(vs).negate(),this.translate(vs.x,vs.y,vs.z),this}setFromPoints(t){const e=this.getAttribute("position");if(e===void 0){const i=[];for(let n=0,r=t.length;n<r;n++){const a=t[n];i.push(a.x,a.y,a.z||0)}this.setAttribute("position",new Cn(i,3))}else{const i=Math.min(t.length,e.count);for(let n=0;n<i;n++){const r=t[n];e.setXYZ(n,r.x,r.y,r.z||0)}t.length>e.count&&console.warn("THREE.BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),e.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new cs);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new N(-1/0,-1/0,-1/0),new N(1/0,1/0,1/0));return}if(t!==void 0){if(this.boundingBox.setFromBufferAttribute(t),e)for(let i=0,n=e.length;i<n;i++){const r=e[i];Ve.setFromBufferAttribute(r),this.morphTargetsRelative?(be.addVectors(this.boundingBox.min,Ve.min),this.boundingBox.expandByPoint(be),be.addVectors(this.boundingBox.max,Ve.max),this.boundingBox.expandByPoint(be)):(this.boundingBox.expandByPoint(Ve.min),this.boundingBox.expandByPoint(Ve.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new zo);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.",this),this.boundingSphere.set(new N,1/0);return}if(t){const i=this.boundingSphere.center;if(Ve.setFromBufferAttribute(t),e)for(let r=0,a=e.length;r<a;r++){const o=e[r];Qs.setFromBufferAttribute(o),this.morphTargetsRelative?(be.addVectors(Ve.min,Qs.min),Ve.expandByPoint(be),be.addVectors(Ve.max,Qs.max),Ve.expandByPoint(be)):(Ve.expandByPoint(Qs.min),Ve.expandByPoint(Qs.max))}Ve.getCenter(i);let n=0;for(let r=0,a=t.count;r<a;r++)be.fromBufferAttribute(t,r),n=Math.max(n,i.distanceToSquared(be));if(e)for(let r=0,a=e.length;r<a;r++){const o=e[r],h=this.morphTargetsRelative;for(let l=0,c=o.count;l<c;l++)be.fromBufferAttribute(o,l),h&&(vs.fromBufferAttribute(t,l),be.add(vs)),n=Math.max(n,i.distanceToSquared(be))}this.boundingSphere.radius=Math.sqrt(n),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}computeTangents(){const t=this.index,e=this.attributes;if(t===null||e.position===void 0||e.normal===void 0||e.uv===void 0){console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)");return}const i=e.position,n=e.normal,r=e.uv;this.hasAttribute("tangent")===!1&&this.setAttribute("tangent",new Mi(new Float32Array(4*i.count),4));const a=this.getAttribute("tangent"),o=[],h=[];for(let I=0;I<i.count;I++)o[I]=new N,h[I]=new N;const l=new N,c=new N,u=new N,d=new Dt,f=new Dt,g=new Dt,_=new N,m=new N;function p(I,S,M){l.fromBufferAttribute(i,I),c.fromBufferAttribute(i,S),u.fromBufferAttribute(i,M),d.fromBufferAttribute(r,I),f.fromBufferAttribute(r,S),g.fromBufferAttribute(r,M),c.sub(l),u.sub(l),f.sub(d),g.sub(d);const A=1/(f.x*g.y-g.x*f.y);isFinite(A)&&(_.copy(c).multiplyScalar(g.y).addScaledVector(u,-f.y).multiplyScalar(A),m.copy(u).multiplyScalar(f.x).addScaledVector(c,-g.x).multiplyScalar(A),o[I].add(_),o[S].add(_),o[M].add(_),h[I].add(m),h[S].add(m),h[M].add(m))}let T=this.groups;T.length===0&&(T=[{start:0,count:t.count}]);for(let I=0,S=T.length;I<S;++I){const M=T[I],A=M.start,B=M.count;for(let F=A,z=A+B;F<z;F+=3)p(t.getX(F+0),t.getX(F+1),t.getX(F+2))}const b=new N,y=new N,R=new N,w=new N;function C(I){R.fromBufferAttribute(n,I),w.copy(R);const S=o[I];b.copy(S),b.sub(R.multiplyScalar(R.dot(S))).normalize(),y.crossVectors(w,S);const A=y.dot(h[I])<0?-1:1;a.setXYZW(I,b.x,b.y,b.z,A)}for(let I=0,S=T.length;I<S;++I){const M=T[I],A=M.start,B=M.count;for(let F=A,z=A+B;F<z;F+=3)C(t.getX(F+0)),C(t.getX(F+1)),C(t.getX(F+2))}}computeVertexNormals(){const t=this.index,e=this.getAttribute("position");if(e!==void 0){let i=this.getAttribute("normal");if(i===void 0)i=new Mi(new Float32Array(e.count*3),3),this.setAttribute("normal",i);else for(let d=0,f=i.count;d<f;d++)i.setXYZ(d,0,0,0);const n=new N,r=new N,a=new N,o=new N,h=new N,l=new N,c=new N,u=new N;if(t)for(let d=0,f=t.count;d<f;d+=3){const g=t.getX(d+0),_=t.getX(d+1),m=t.getX(d+2);n.fromBufferAttribute(e,g),r.fromBufferAttribute(e,_),a.fromBufferAttribute(e,m),c.subVectors(a,r),u.subVectors(n,r),c.cross(u),o.fromBufferAttribute(i,g),h.fromBufferAttribute(i,_),l.fromBufferAttribute(i,m),o.add(c),h.add(c),l.add(c),i.setXYZ(g,o.x,o.y,o.z),i.setXYZ(_,h.x,h.y,h.z),i.setXYZ(m,l.x,l.y,l.z)}else for(let d=0,f=e.count;d<f;d+=3)n.fromBufferAttribute(e,d+0),r.fromBufferAttribute(e,d+1),a.fromBufferAttribute(e,d+2),c.subVectors(a,r),u.subVectors(n,r),c.cross(u),i.setXYZ(d+0,c.x,c.y,c.z),i.setXYZ(d+1,c.x,c.y,c.z),i.setXYZ(d+2,c.x,c.y,c.z);this.normalizeNormals(),i.needsUpdate=!0}}normalizeNormals(){const t=this.attributes.normal;for(let e=0,i=t.count;e<i;e++)be.fromBufferAttribute(t,e),be.normalize(),t.setXYZ(e,be.x,be.y,be.z)}toNonIndexed(){function t(o,h){const l=o.array,c=o.itemSize,u=o.normalized,d=new l.constructor(h.length*c);let f=0,g=0;for(let _=0,m=h.length;_<m;_++){o.isInterleavedBufferAttribute?f=h[_]*o.data.stride+o.offset:f=h[_]*c;for(let p=0;p<c;p++)d[g++]=l[f++]}return new Mi(d,c,u)}if(this.index===null)return console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."),this;const e=new Pn,i=this.index.array,n=this.attributes;for(const o in n){const h=n[o],l=t(h,i);e.setAttribute(o,l)}const r=this.morphAttributes;for(const o in r){const h=[],l=r[o];for(let c=0,u=l.length;c<u;c++){const d=l[c],f=t(d,i);h.push(f)}e.morphAttributes[o]=h}e.morphTargetsRelative=this.morphTargetsRelative;const a=this.groups;for(let o=0,h=a.length;o<h;o++){const l=a[o];e.addGroup(l.start,l.count,l.materialIndex)}return e}toJSON(){const t={metadata:{version:4.7,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};if(t.uuid=this.uuid,t.type=this.type,this.name!==""&&(t.name=this.name),Object.keys(this.userData).length>0&&(t.userData=this.userData),this.parameters!==void 0){const h=this.parameters;for(const l in h)h[l]!==void 0&&(t[l]=h[l]);return t}t.data={attributes:{}};const e=this.index;e!==null&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const i=this.attributes;for(const h in i){const l=i[h];t.data.attributes[h]=l.toJSON(t.data)}const n={};let r=!1;for(const h in this.morphAttributes){const l=this.morphAttributes[h],c=[];for(let u=0,d=l.length;u<d;u++){const f=l[u];c.push(f.toJSON(t.data))}c.length>0&&(n[h]=c,r=!0)}r&&(t.data.morphAttributes=n,t.data.morphTargetsRelative=this.morphTargetsRelative);const a=this.groups;a.length>0&&(t.data.groups=JSON.parse(JSON.stringify(a)));const o=this.boundingSphere;return o!==null&&(t.data.boundingSphere=o.toJSON()),t}clone(){return new this.constructor().copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const i=t.index;i!==null&&this.setIndex(i.clone());const n=t.attributes;for(const l in n){const c=n[l];this.setAttribute(l,c.clone(e))}const r=t.morphAttributes;for(const l in r){const c=[],u=r[l];for(let d=0,f=u.length;d<f;d++)c.push(u[d].clone(e));this.morphAttributes[l]=c}this.morphTargetsRelative=t.morphTargetsRelative;const a=t.groups;for(let l=0,c=a.length;l<c;l++){const u=a[l];this.addGroup(u.start,u.count,u.materialIndex)}const o=t.boundingBox;o!==null&&(this.boundingBox=o.clone());const h=t.boundingSphere;return h!==null&&(this.boundingSphere=h.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,this}dispose(){this.dispatchEvent({type:"dispose"})}}const ec=new ue,In=new Gh,Xr=new zo,ic=new N,qr=new N,Yr=new N,jr=new N,Jo=new N,Zr=new N,nc=new N,Kr=new N;class Si extends Se{constructor(t=new Pn,e=new Jh){super(),this.isMesh=!0,this.type="Mesh",this.geometry=t,this.material=e,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.count=1,this.updateMorphTargets()}copy(t,e){return super.copy(t,e),t.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),t.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=Array.isArray(t.material)?t.material.slice():t.material,this.geometry=t.geometry,this}updateMorphTargets(){const e=this.geometry.morphAttributes,i=Object.keys(e);if(i.length>0){const n=e[i[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,a=n.length;r<a;r++){const o=n[r].name||String(r);this.morphTargetInfluences.push(0),this.morphTargetDictionary[o]=r}}}}getVertexPosition(t,e){const i=this.geometry,n=i.attributes.position,r=i.morphAttributes.position,a=i.morphTargetsRelative;e.fromBufferAttribute(n,t);const o=this.morphTargetInfluences;if(r&&o){Zr.set(0,0,0);for(let h=0,l=r.length;h<l;h++){const c=o[h],u=r[h];c!==0&&(Jo.fromBufferAttribute(u,t),a?Zr.addScaledVector(Jo,c):Zr.addScaledVector(Jo.sub(e),c))}e.add(Zr)}return e}raycast(t,e){const i=this.geometry,n=this.material,r=this.matrixWorld;n!==void 0&&(i.boundingSphere===null&&i.computeBoundingSphere(),Xr.copy(i.boundingSphere),Xr.applyMatrix4(r),In.copy(t.ray).recast(t.near),!(Xr.containsPoint(In.origin)===!1&&(In.intersectSphere(Xr,ic)===null||In.origin.distanceToSquared(ic)>(t.far-t.near)**2))&&(ec.copy(r).invert(),In.copy(t.ray).applyMatrix4(ec),!(i.boundingBox!==null&&In.intersectsBox(i.boundingBox)===!1)&&this._computeIntersections(t,e,In)))}_computeIntersections(t,e,i){let n;const r=this.geometry,a=this.material,o=r.index,h=r.attributes.position,l=r.attributes.uv,c=r.attributes.uv1,u=r.attributes.normal,d=r.groups,f=r.drawRange;if(o!==null)if(Array.isArray(a))for(let g=0,_=d.length;g<_;g++){const m=d[g],p=a[m.materialIndex],T=Math.max(m.start,f.start),b=Math.min(o.count,Math.min(m.start+m.count,f.start+f.count));for(let y=T,R=b;y<R;y+=3){const w=o.getX(y),C=o.getX(y+1),I=o.getX(y+2);n=$r(this,p,t,i,l,c,u,w,C,I),n&&(n.faceIndex=Math.floor(y/3),n.face.materialIndex=m.materialIndex,e.push(n))}}else{const g=Math.max(0,f.start),_=Math.min(o.count,f.start+f.count);for(let m=g,p=_;m<p;m+=3){const T=o.getX(m),b=o.getX(m+1),y=o.getX(m+2);n=$r(this,a,t,i,l,c,u,T,b,y),n&&(n.faceIndex=Math.floor(m/3),e.push(n))}}else if(h!==void 0)if(Array.isArray(a))for(let g=0,_=d.length;g<_;g++){const m=d[g],p=a[m.materialIndex],T=Math.max(m.start,f.start),b=Math.min(h.count,Math.min(m.start+m.count,f.start+f.count));for(let y=T,R=b;y<R;y+=3){const w=y,C=y+1,I=y+2;n=$r(this,p,t,i,l,c,u,w,C,I),n&&(n.faceIndex=Math.floor(y/3),n.face.materialIndex=m.materialIndex,e.push(n))}}else{const g=Math.max(0,f.start),_=Math.min(h.count,f.start+f.count);for(let m=g,p=_;m<p;m+=3){const T=m,b=m+1,y=m+2;n=$r(this,a,t,i,l,c,u,T,b,y),n&&(n.faceIndex=Math.floor(m/3),e.push(n))}}}}function Bf(s,t,e,i,n,r,a,o){let h;if(t.side===Ue?h=i.intersectTriangle(a,r,n,!0,o):h=i.intersectTriangle(n,r,a,t.side===$i,o),h===null)return null;Kr.copy(o),Kr.applyMatrix4(s.matrixWorld);const l=e.ray.origin.distanceTo(Kr);return l<e.near||l>e.far?null:{distance:l,point:Kr.clone(),object:s}}function $r(s,t,e,i,n,r,a,o,h,l){s.getVertexPosition(o,qr),s.getVertexPosition(h,Yr),s.getVertexPosition(l,jr);const c=Bf(s,t,e,i,qr,Yr,jr,nc);if(c){const u=new N;di.getBarycoord(nc,qr,Yr,jr,u),n&&(c.uv=di.getInterpolatedAttribute(n,o,h,l,u,new Dt)),r&&(c.uv1=di.getInterpolatedAttribute(r,o,h,l,u,new Dt)),a&&(c.normal=di.getInterpolatedAttribute(a,o,h,l,u,new N),c.normal.dot(i.direction)>0&&c.normal.multiplyScalar(-1));const d={a:o,b:h,c:l,normal:new N,materialIndex:0};di.getNormal(qr,Yr,jr,d.normal),c.face=d,c.barycoord=u}return c}class tr extends Pn{constructor(t=1,e=1,i=1,n=1,r=1,a=1){super(),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:i,widthSegments:n,heightSegments:r,depthSegments:a};const o=this;n=Math.floor(n),r=Math.floor(r),a=Math.floor(a);const h=[],l=[],c=[],u=[];let d=0,f=0;g("z","y","x",-1,-1,i,e,t,a,r,0),g("z","y","x",1,-1,i,e,-t,a,r,1),g("x","z","y",1,1,t,i,e,n,a,2),g("x","z","y",1,-1,t,i,-e,n,a,3),g("x","y","z",1,-1,t,e,i,n,r,4),g("x","y","z",-1,-1,t,e,-i,n,r,5),this.setIndex(h),this.setAttribute("position",new Cn(l,3)),this.setAttribute("normal",new Cn(c,3)),this.setAttribute("uv",new Cn(u,2));function g(_,m,p,T,b,y,R,w,C,I,S){const M=y/C,A=R/I,B=y/2,F=R/2,z=w/2,W=C+1,X=I+1;let Q=0,H=0;const rt=new N;for(let ht=0;ht<X;ht++){const _t=ht*A-F;for(let Ot=0;Ot<W;Ot++){const ne=Ot*M-B;rt[_]=ne*T,rt[m]=_t*b,rt[p]=z,l.push(rt.x,rt.y,rt.z),rt[_]=0,rt[m]=0,rt[p]=w>0?1:-1,c.push(rt.x,rt.y,rt.z),u.push(Ot/C),u.push(1-ht/I),Q+=1}}for(let ht=0;ht<I;ht++)for(let _t=0;_t<C;_t++){const Ot=d+_t+W*ht,ne=d+_t+W*(ht+1),Jt=d+(_t+1)+W*(ht+1),j=d+(_t+1)+W*ht;h.push(Ot,ne,j),h.push(ne,Jt,j),H+=6}o.addGroup(f,H,S),f+=H,d+=Q}}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new tr(t.width,t.height,t.depth,t.widthSegments,t.heightSegments,t.depthSegments)}}function ys(s){const t={};for(const e in s){t[e]={};for(const i in s[e]){const n=s[e][i];n&&(n.isColor||n.isMatrix3||n.isMatrix4||n.isVector2||n.isVector3||n.isVector4||n.isTexture||n.isQuaternion)?n.isRenderTargetTexture?(console.warn("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."),t[e][i]=null):t[e][i]=n.clone():Array.isArray(n)?t[e][i]=n.slice():t[e][i]=n}}return t}function Ie(s){const t={};for(let e=0;e<s.length;e++){const i=ys(s[e]);for(const n in i)t[n]=i[n]}return t}function kf(s){const t=[];for(let e=0;e<s.length;e++)t.push(s[e].clone());return t}function sc(s){const t=s.getRenderTarget();return t===null?s.outputColorSpace:t.isXRRenderTarget===!0?t.texture.colorSpace:Xt.workingColorSpace}const Gf={clone:ys,merge:Ie};var Hf=`void main() {
|
|
124
|
+
}`,el={depth_vert:Qc,depth_frag:qc};class Kc extends Kn{constructor(t=(n,r,a)=>a.set(n,r,Math.cos(n)*Math.sin(r)),e=8,i=8){super(),this.type="ParametricGeometry",this.parameters={func:t,slices:e,stacks:i};const n=[],r=[],a=[],o=[],l=1e-5,A=new V,h=new V,c=new V,u=new V,d=new V,p=e+1;for(let m=0;m<=i;m++){const g=m/i;for(let f=0;f<=e;f++){const M=f/e;t(M,g,h),r.push(h.x,h.y,h.z),M-l>=0?(t(M-l,g,c),u.subVectors(h,c)):(t(M+l,g,c),u.subVectors(c,h)),g-l>=0?(t(M,g-l,c),d.subVectors(h,c)):(t(M,g+l,c),d.subVectors(c,h)),A.crossVectors(u,d).normalize(),a.push(A.x,A.y,A.z),o.push(M,g)}}for(let m=0;m<i;m++)for(let g=0;g<e;g++){const f=m*p+g,M=m*p+g+1,y=(m+1)*p+g+1,x=(m+1)*p+g;n.push(f,M,x),n.push(M,y,x)}this.setIndex(n),this.setAttribute("position",new gn(r,3)),this.setAttribute("normal",new gn(a,3)),this.setAttribute("uv",new gn(o,2))}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}}const La=new V;class Cn{p1;p2;restDistance;constructor(t,e,i){this.p1=t,this.p2=e,this.restDistance=i}resolve(){const t=this.p1,e=this.p2,i=this.restDistance;La.subVectors(e.position,t.position);const n=La.length();if(n===0)return;const r=La.multiplyScalar((1-i/n)/2);t.position.add(r),e.position.sub(r)}}const il=2,$c=.03,tu=1-$c,eu=.12,iu=1.225;class nu{position;previous;original;mass;inverseMass;acceleration;tmp;constructor(t,e){this.position=t.clone(),this.previous=t.clone(),this.original=t.clone(),this.mass=e,this.inverseMass=1/e,this.acceleration=new V,this.tmp=new V}applyForce(t){this.acceleration.addScaledVector(t,this.inverseMass)}integrate(t){const e=this.tmp.subVectors(this.position,this.previous).multiplyScalar(tu).add(this.position).addScaledVector(this.acceleration,t);this.tmp=this.previous,this.previous=this.position,this.position=e,this.acceleration.set(0,0,0)}}class su{xSegments;ySegments;restDistance;width;height;particles;constraints;particleAt;geometry;constructor(t,e,i,n){const r=i*t,a=i*e,o=[],l=[],A=(m,g)=>o[m+g*(t+1)],h=(m,g,f)=>{f.set(m*r,g*a,0)},c=new V,u=n/((e+1)*(t+1));for(let m=0;m<=e;m++)for(let g=0;g<=t;g++)h(g/t,m/e,c),o.push(new nu(c,u));for(let m=0;m<e;m++)for(let g=0;g<t;g++)l.push(new Cn(A(g,m),A(g,m+1),i),new Cn(A(g,m),A(g+1,m),i));for(let m=t,g=0;g<e;g++)l.push(new Cn(A(m,g),A(m,g+1),i));for(let m=e,g=0;g<t;g++)l.push(new Cn(A(g,m),A(g+1,m),i));const d=Math.sqrt(i*i*2);for(let m=0;m<e;m++)for(let g=0;g<t;g++)l.push(new Cn(A(g,m),A(g+1,m+1),d),new Cn(A(g+1,m),A(g,m+1),d));const p=new Kc(h,t,e);p.getAttribute("position").setUsage(35040),this.xSegments=t,this.ySegments=e,this.restDistance=i,this.width=r,this.height=a,this.particles=o,this.constraints=l,this.particleAt=A,this.geometry=p}reset(){for(const t of this.particles)t.previous.copy(t.position.copy(t.original))}simulate(t){const e=this.particles,i=this.constraints,n=Math.pow(t,2);for(let r=0,a=e.length;r<a;r++)e[r].integrate(n);for(let r=0,a=il;r<a;r++)for(let o=0,l=i.length;o<l;o++)i[o].resolve()}render(){const t=this.particles,e=this.geometry,i=e.getAttribute("position"),n=i.array;for(let r=0,a=t.length;r<a;r++){const o=t[r].position,l=r*3;n[l]=o.x,n[l+1]=o.y,n[l+2]=o.z}i.needsUpdate=!0,e.computeVertexNormals()}}function ru(s){const{width:t,height:e,mass:i,restDistance:n}=s;return new su(Math.max(1,Math.round(t/n)),Math.max(1,Math.round(e/n)),n,i*t*e)}function nl(s,t,e){const i=s*t,n=new Uint8Array(4*i),r=Math.floor(e.r*255),a=Math.floor(e.g*255),o=Math.floor(e.b*255),l=255;for(let h=0;h<i;h++){const c=h*4;n[c]=r,n[c+1]=a,n[c+2]=o,n[c+3]=l}const A=new Wc(n,s,t,1023,1009);return A.needsUpdate=!0,A}const au=nl(1,1,new Zi(16777215));function ou(s,t){const e=s.geometry;let i=au,n;const r=o=>(o.needsUpdate=!0,o.anisotropy=16,o.minFilter=1006,o.magFilter=1006,o.wrapS=1001,o.wrapT=1001,o),a=(o,l)=>{o.colorSpace=Ge;const A=new tl({alphaTest:.5,color:16777215,metalness:.08,roughness:.86,side:l,map:o}),h=new $A(e,A);return h.castShadow=!0,h.customDepthMaterial=new Jc({uniforms:{textureMap:{value:o}},vertexShader:el.depth_vert,fragmentShader:el.depth_frag,side:l,lights:!1,defines:{DEPTH_PACKING:"3200"}}),h.position.set(0,-s.height,0),h};return t?.texture instanceof pi?(i=r(t.texture),t.backSideTexture instanceof pi&&(n=r(t.backSideTexture))):t?.texture!==void 0&&console.error("FlagWaver.Flag: options.texture must be an instance of THREE.Texture."),[a(i,n!==void 0?0:2),n!==void 0?a(n,1):null]}const he={TOP:"top",LEFT:"left",BOTTOM:"bottom",RIGHT:"right"},Au=(()=>{const s={edges:[],spacing:1};function t(e,i,n,r){const{xSegments:a,ySegments:o,particleAt:l}=e,{spacing:A}=r;switch(n){case he.TOP:for(let h=0;h<=a;h+=A)i.push(l(h,o));break;case he.LEFT:for(let h=0;h<=o;h+=A)i.push(l(0,h));break;case he.BOTTOM:for(let h=0;h<=a;h+=A)i.push(l(h,0));break;case he.RIGHT:for(let h=0;h<=o;h+=A)i.push(l(a,h));break}}return function(e,i,n={}){const r={...s,...n},{edges:a}=r;if(typeof a=="string")t(e,i,a,r);else if(Array.isArray(a)&&a.length>0)for(let o=0,l=a.length;o<l;o++)t(e,i,a[o],r)}})(),sl=1.2,Er=new V;class rl extends Cn{resolve(){const t=this.p1,e=this.p2,i=this.restDistance*sl;Er.subVectors(t.position,e.position);const n=Er.length()/sl;Er.normalize();const r=Er.multiplyScalar(n-i);n>i&&e.position.add(r)}}function al(s){if(Array.isArray(s))for(const t of s)ol(t);else ol(s)}function ol(s){s.map?.dispose(),s.dispose()}const lu=nl(1,1,new Zi(16777215));class Us{cloth;pins;lengthConstraints;mesh;mesh2;object;static defaults={width:1.8,height:1.2,mass:.11,restDistance:1.2/10,rigidness:1,texture:lu,backSideTexture:void 0,pin:{edges:[he.LEFT],spacing:1}};constructor(t={}){const e={...Us.defaults,...t};this.cloth=ru(e),this.pins=[],this.lengthConstraints=[];const[i,n]=ou(this.cloth,e);this.mesh=i,this.mesh2=n,this.object=new qe,this.object.add(this.mesh),this.mesh2!==null&&this.object.add(this.mesh2),this.pin(e.pin)}destroy(){al(this.mesh.material),this.mesh.geometry.dispose(),this.mesh.customDepthMaterial?.dispose(),this.mesh2!==null&&(al(this.mesh2.material),this.mesh2.customDepthMaterial?.dispose())}pin(t){Au(this.cloth,this.pins,t)}unpin(){this.pins=[]}setLengthConstraints(t){const{xSegments:e,ySegments:i,restDistance:n,particleAt:r}=this.cloth,a=[];if(t===he.LEFT)for(let o=0;o<=i;o++)for(let l=0;l<e;l++)a.push(new rl(r(l,o),r(l+1,o),n));else if(t===he.TOP)for(let o=0;o<=e;o++)for(let l=i;l>0;l--)a.push(new rl(r(o,l),r(o,l-1),n));this.lengthConstraints=a}reset(){this.cloth.reset()}simulate(t){const e=this.pins,i=this.lengthConstraints;this.cloth.simulate(t);for(const n of e)n.previous.copy(n.position.copy(n.original));for(let n=0;n<il;n++)for(const r of i)r.resolve()}render(){this.cloth.render()}setTexture(t){t.needsUpdate=!0,t.anisotropy=16,t.minFilter=1006,t.magFilter=1006,t.wrapS=1001,t.wrapT=1001,t.colorSpace=Ge;const e=this.mesh.material;e.map!==null&&e.map!==void 0&&(e.map=t,e.needsUpdate=!0);const i=this.mesh.customDepthMaterial;if(i!=null){const n=i;n.uniforms!=null&&n.uniforms.textureMap!=null&&(n.uniforms.textureMap.value=t)}if(this.mesh2!=null){const n=this.mesh2.material;n.map!=null&&(n.map=t,n.needsUpdate=!0);const r=this.mesh2.customDepthMaterial;if(r!=null){const a=r;a.uniforms?.textureMap!=null&&(a.uniforms.textureMap.value=t)}}}}const In={CROSSBAR:"CROSSBAR",GALLERY:"GALLERY",HORIZONTAL:"HORIZONTAL",OUTRIGGER:"OUTRIGGER",VERTICAL:"VERTICAL"},zs={NONE:"none",TOP_RIGHT:"topright",TOP_LEFT:"topleft"};class Di{top;mesh;object;constructor(t){this.create(t)}static defaults={flagpoleType:In.VERTICAL,poleWidth:.076,poleLength:6,poleCapSize:.076*4/3,crossbarWidth:.076*2/3,crossbarLength:1.2,crossbarCapSize:.076*2/3*3/2,poleTopOffset:.1,verticalHoisting:zs.TOP_RIGHT};destroy(){this.mesh!==void 0&&((Array.isArray(this.mesh.material)?this.mesh.material:[this.mesh.material]).forEach(t=>{t.dispose()}),this.mesh.geometry.dispose())}create(t){this.destroy();const e=Object.assign({},Di.defaults,t),i=this.buildGeometry(e),n=new tl({color:16711422,metalness:.98,roughness:.55}),r=new $A(i,n);r.receiveShadow=!0,r.castShadow=!0,this.top=new V(0,e.poleLength,0),this.mesh=r,this.object=this.mesh}addFlag(t){t.unpin(),t.pin({edges:[he.LEFT]}),t.setLengthConstraints(he.LEFT),t.object.position.add(this.top)}}function Na(s,t=!1){const e=s[0].index!==null,i=new Set(Object.keys(s[0].attributes)),n=new Set(Object.keys(s[0].morphAttributes)),r={},a={},o=s[0].morphTargetsRelative,l=new Kn;let A=0;for(let h=0;h<s.length;++h){const c=s[h];let u=0;if(e!==(c.index!==null))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+h+". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."),null;for(const d in c.attributes){if(!i.has(d))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+h+'. All geometries must have compatible attributes; make sure "'+d+'" attribute exists among all geometries, or in none of them.'),null;r[d]===void 0&&(r[d]=[]),r[d].push(c.attributes[d]),u++}if(u!==i.size)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+h+". Make sure all geometries have the same number of attributes."),null;if(o!==c.morphTargetsRelative)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+h+". .morphTargetsRelative must be consistent throughout all geometries."),null;for(const d in c.morphAttributes){if(!n.has(d))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+h+". .morphAttributes must be consistent throughout all geometries."),null;a[d]===void 0&&(a[d]=[]),a[d].push(c.morphAttributes[d])}if(t){let d;if(e)d=c.index.count;else if(c.attributes.position!==void 0)d=c.attributes.position.count;else return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+h+". The geometry must have either an index or a position attribute"),null;l.addGroup(A,d,h),A+=d}}if(e){let h=0;const c=[];for(let u=0;u<s.length;++u){const d=s[u].index;for(let p=0;p<d.count;++p)c.push(d.getX(p)+h);h+=s[u].attributes.position.count}l.setIndex(c)}for(const h in r){const c=Al(r[h]);if(!c)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+h+" attribute."),null;l.setAttribute(h,c)}for(const h in a){const c=a[h][0].length;if(c===0)break;l.morphAttributes=l.morphAttributes||{},l.morphAttributes[h]=[];for(let u=0;u<c;++u){const d=[];for(let m=0;m<a[h].length;++m)d.push(a[h][m][u]);const p=Al(d);if(!p)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+h+" morphAttribute."),null;l.morphAttributes[h].push(p)}}return l}function Al(s){let t,e,i,n=-1,r=0;for(let A=0;A<s.length;++A){const h=s[A];if(t===void 0&&(t=h.array.constructor),t!==h.array.constructor)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."),null;if(e===void 0&&(e=h.itemSize),e!==h.itemSize)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."),null;if(i===void 0&&(i=h.normalized),i!==h.normalized)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."),null;if(n===-1&&(n=h.gpuType),n!==h.gpuType)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes."),null;r+=h.count*e}const a=new t(r),o=new fn(a,e,i);let l=0;for(let A=0;A<s.length;++A){const h=s[A];if(h.isInterleavedBufferAttribute){const c=l/e;for(let u=0,d=h.count;u<d;u++)for(let p=0;p<e;p++){const m=h.getComponent(u,p);o.setComponent(u+c,p,m)}}else a.set(h.array,l);l+=h.count*e}return n!==void 0&&(o.gpuType=n),o}function ks(s){const t=s.poleWidth/2,e=s.poleLength,i=32,n=s.poleCapSize/2,r=new mn(t,t,e,i);r.translate(0,s.poleLength/2,0);const a=new mn(n,n,n,i);return a.translate(0,e+n/2,0),Na([r,a])}function hu(s){const t=ks(s),e=s.poleWidth/2,i=s.poleLength,n=s.crossbarWidth/2,r=s.crossbarLength,a=16,o=s.crossbarCapSize/2,l=s.poleTopOffset,A=new mn(n,n,r,a);A.rotateZ(Math.PI/2);const h=new mn(o,o,o,a),c=h.clone(),u=i-l,d=e+n;return h.rotateZ(Math.PI/2),h.translate(-r/2,u,d),c.rotateZ(-Math.PI/2),c.translate(r/2,u,d),A.translate(0,u,d),Na([t,A,h,c])}function cu(s){const t=ks(s),e=s.poleLength,i=s.poleCapSize/2,n=s.crossbarWidth/2,r=s.crossbarLength,a=16,o=new mn(n,n,r,a);return o.rotateZ(Math.PI/2),o.translate(r/2,e+i-n,0),Na([t,o])}class ll extends Di{constructor(t={}){super(t)}buildGeometry(t){return ks(t)}}class uu{flagpole;flag;object;constructor(t={}){const e={...t},{flagpole:i,flag:n}=e;this.flagpole=i??new ll,this.flag=n??new Us,this.flagpole.addFlag(this.flag),this.object=new qe,this.object.add(this.flagpole.object),this.object.add(this.flag.object)}destroy(){this.destroyChildSubject(this.flagpole),this.destroyChildSubject(this.flag)}destroyChildSubject(t){t!=null&&(this.object.remove(t.object),t.destroy())}reset(){this.flag.reset()}simulate(t){this.flag.simulate(t)}render(){this.flag.render()}setTexture(t){this.flag.setTexture(t)}}function du(s){return s===0?.001:s}function fu(s){return s.x===0&&(s.x=.001),s.y===0&&(s.y=.001),s.z===0&&(s.z=.001),s}const hl={blowFromLeftDirection:s=>s.set(2e3,0,1e3),constantSpeed:s=>s};function gu(s){return .5*iu*Math.pow(s,2)}class Ba{direction;speed;directionFn;speedFn;pressure;static defaults={direction:new V(1,0,0),speed:10,directionFn:hl.blowFromLeftDirection,speedFn:hl.constantSpeed};constructor(t={}){const e={...Ba.defaults,...t};this.direction=e.direction.clone(),this.speed=e.speed,this.directionFn=e.directionFn,this.speedFn=e.speedFn,this.pressure=new V}update(){const t=Date.now();this.directionFn(fu(this.pressure.copy(this.direction)),t).normalize().multiplyScalar(gu(this.speedFn(du(this.speed),t)))}}const yr=new V,cl=new V;function ul(s,t){return yr.copy(s),t instanceof qe&&(cl.setFromMatrixPosition(t.matrixWorld),yr.add(cl),t.worldToLocal(yr)),yr}const pu=new V(0,-9.80665,0);function mu(s,t){const e=s.particles,i=ul(pu,t);for(let n=0,r=e.length;n<r;n++)e[n].acceleration.add(i)}const Sr=new V,dl=new V;function Cu(s){return s<0?0:s>1?1:s}function fl(s){const t=Math.sin(s*12.9898)*43758.5453;return t-Math.floor(t)}function Iu(s,t){const e=Cu(t?.randomizeAmount??0);if(e===0)return 1;const i=t?.randomSeed??s?.id??0,n=t?.time??0,r=.5+fl(i)*2,a=fl(i+1e3)*Math.PI*2;return 1+(Math.sin(n*r+a)*.5+Math.sin(n*r*1.7+a*.3)*.3)*e}function xu(s,t,e){return Sr.subVectors(e,t),dl.subVectors(s,t),Sr.cross(dl),Sr.normalize(),Sr}function vu(s,t,e,i){const n=s.particles,r=s.geometry.getIndex();if(t==null||r==null)return;const a=s.restDistance*s.restDistance/2,o=Iu(e,i),l=ul(t.pressure,e).multiplyScalar(eu*a/3*o);for(let A=0,h=r.count;A<h;A+=3){const c=r.getX(A),u=r.getX(A+1),d=r.getX(A+2),p=n[c],m=n[u],g=n[d],f=xu(p.position,m.position,g.position);f.multiplyScalar(f.dot(l)),p.applyForce(f),m.applyForce(f),g.applyForce(f)}}function Eu(s){return new Us(s)}function yu(s,t){const e={...s};return Object.entries(t).forEach(([i,n])=>{n!==void 0&&(e[i]=n)}),e}class Su extends Di{verticalHoisting;constructor(t={}){super(t);const e=yu(Di.defaults,t);this.top.set(0,e.poleLength-e.poleTopOffset,e.poleWidth/2+e.crossbarWidth/2),this.verticalHoisting=e.verticalHoisting}buildGeometry(t){return hu(t)}addFlag(t){switch(t.unpin(),this.verticalHoisting){case zs.NONE:t.pin({edges:[he.TOP]}),t.setLengthConstraints(he.TOP),t.object.position.add(this.top),t.object.position.x=-t.cloth.width/2;break;case zs.TOP_LEFT:t.pin({edges:[he.LEFT]}),t.setLengthConstraints(he.LEFT),t.object.position.add(this.top),t.object.position.x=-t.cloth.height/2,t.object.rotateZ(Math.PI*3/2),t.object.rotateX(Math.PI);break;case zs.TOP_RIGHT:default:t.pin({edges:[he.LEFT]}),t.setLengthConstraints(he.LEFT),t.object.position.add(this.top),t.object.position.x=t.cloth.height/2,t.object.rotateZ(Math.PI*3/2);break}}}class Mu extends Di{buildGeometry(t){return cu(t)}addFlag(t){t.unpin(),t.pin({edges:[he.LEFT,he.TOP]}),t.setLengthConstraints(he.LEFT),t.object.position.add(this.top)}}const bu=new V(0,0,1);class Tu extends Di{constructor(t={}){super(t),this.top.applyAxisAngle(bu,Math.PI*3/2)}buildGeometry(t){const e=ks(t);return e.rotateZ(Math.PI*3/2),e}addFlag(t){t.unpin(),t.pin({edges:[he.LEFT]}),t.setLengthConstraints(he.LEFT),t.object.position.add(this.top),t.object.rotateZ(Math.PI*3/2)}}const wu=new V(0,0,1);class _u extends Di{constructor(t={}){super(t),this.top.applyAxisAngle(wu,Math.PI*7/4)}buildGeometry(t){const e=ks(t);return e.rotateZ(Math.PI*7/4),e}addFlag(t){t.unpin(),t.pin({edges:[he.LEFT]}),t.setLengthConstraints(he.LEFT),t.object.position.add(this.top),t.object.rotateZ(Math.PI*7/4)}}function Ru(s,t){const e=Object.assign({},s);let i;switch(e.flagpoleType){case In.HORIZONTAL:i=new Tu(e);break;case In.OUTRIGGER:i=new _u(e);break;case In.CROSSBAR:e.crossbarLength=e.verticalHoisting===zs.NONE?t.cloth.width:t.cloth.height,i=new Su(e);break;case In.GALLERY:e.crossbarLength=t.cloth.width,i=new Mu(e);break;case In.VERTICAL:default:i=new ll(e);break}return i}const Li=Object.freeze(Object.defineProperty({__proto__:null,FLAG_POLE_TYPE:In,Flag:Us,FlagGroup:uu,Flagpole:Di,Wind:Ba,applyGravityToCloth:mu,applyWindForceToCloth:vu,buildFlag:Eu,buildFlagpole:Ru},Symbol.toStringTag,{value:"Module"}));const Fa="179",$n={ROTATE:0,DOLLY:1,PAN:2},ts={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},Pu=0,gl=1,Du=2,pl=1,Lu=2,Ni=3,qi=0,Oe=1,Bi=2,Ki=0,es=1,ml=2,Cl=3,Il=4,Nu=5,xn=100,Bu=101,Fu=102,Ou=103,Uu=104,zu=200,ku=201,Gu=202,Hu=203,Oa=204,Ua=205,Vu=206,Wu=207,Yu=208,Xu=209,Zu=210,ju=211,Ju=212,Qu=213,qu=214,za=0,ka=1,Ga=2,is=3,Ha=4,Va=5,Wa=6,Ya=7,xl=0,Ku=1,$u=2,$i=0,td=1,ed=2,id=3,nd=4,sd=5,rd=6,ad=7,vl=300,ns=301,ss=302,Xa=303,Za=304,Mr=306,ja=1e3,vn=1001,Ja=1002,hi=1003,od=1004,br=1005,mi=1006,Qa=1007,En=1008,Ci=1009,El=1010,yl=1011,Gs=1012,qa=1013,yn=1014,Fi=1015,Hs=1016,Ka=1017,$a=1018,Vs=1020,Sl=35902,Ml=1021,bl=1022,ci=1023,Ws=1026,Ys=1027,Tl=1028,to=1029,wl=1030,eo=1031,io=1033,Tr=33776,wr=33777,_r=33778,Rr=33779,no=35840,so=35841,ro=35842,ao=35843,oo=36196,Ao=37492,lo=37496,ho=37808,co=37809,uo=37810,fo=37811,go=37812,po=37813,mo=37814,Co=37815,Io=37816,xo=37817,vo=37818,Eo=37819,yo=37820,So=37821,Pr=36492,Mo=36494,bo=36495,_l=36283,To=36284,wo=36285,_o=36286,Ad=3200,ld=3201,Rl=0,hd=1,tn="",$e="srgb",rs="srgb-linear",Dr="linear",qt="srgb",as=7680,Pl=519,cd=512,ud=513,dd=514,Dl=515,fd=516,gd=517,pd=518,md=519,Ll=35044,Nl="300 es",Ii=2e3,Lr=2001;class Sn{addEventListener(t,e){this._listeners===void 0&&(this._listeners={});const i=this._listeners;i[t]===void 0&&(i[t]=[]),i[t].indexOf(e)===-1&&i[t].push(e)}hasEventListener(t,e){const i=this._listeners;return i===void 0?!1:i[t]!==void 0&&i[t].indexOf(e)!==-1}removeEventListener(t,e){const i=this._listeners;if(i===void 0)return;const n=i[t];if(n!==void 0){const r=n.indexOf(e);r!==-1&&n.splice(r,1)}}dispatchEvent(t){const e=this._listeners;if(e===void 0)return;const i=e[t.type];if(i!==void 0){t.target=this;const n=i.slice(0);for(let r=0,a=n.length;r<a;r++)n[r].call(this,t);t.target=null}}}const we=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"],Nr=Math.PI/180,Br=180/Math.PI;function Xs(){const s=Math.random()*4294967295|0,t=Math.random()*4294967295|0,e=Math.random()*4294967295|0,i=Math.random()*4294967295|0;return(we[s&255]+we[s>>8&255]+we[s>>16&255]+we[s>>24&255]+"-"+we[t&255]+we[t>>8&255]+"-"+we[t>>16&15|64]+we[t>>24&255]+"-"+we[e&63|128]+we[e>>8&255]+"-"+we[e>>16&255]+we[e>>24&255]+we[i&255]+we[i>>8&255]+we[i>>16&255]+we[i>>24&255]).toLowerCase()}function kt(s,t,e){return Math.max(t,Math.min(e,s))}function Cd(s,t){return(s%t+t)%t}function Ro(s,t,e){return(1-e)*s+e*t}function Zs(s,t){switch(t.constructor){case Float32Array:return s;case Uint32Array:return s/4294967295;case Uint16Array:return s/65535;case Uint8Array:return s/255;case Int32Array:return Math.max(s/2147483647,-1);case Int16Array:return Math.max(s/32767,-1);case Int8Array:return Math.max(s/127,-1);default:throw new Error("Invalid component type.")}}function Ue(s,t){switch(t.constructor){case Float32Array:return s;case Uint32Array:return Math.round(s*4294967295);case Uint16Array:return Math.round(s*65535);case Uint8Array:return Math.round(s*255);case Int32Array:return Math.round(s*2147483647);case Int16Array:return Math.round(s*32767);case Int8Array:return Math.round(s*127);default:throw new Error("Invalid component type.")}}const Id={DEG2RAD:Nr};class Nt{constructor(t=0,e=0){Nt.prototype.isVector2=!0,this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,i=this.y,n=t.elements;return this.x=n[0]*e+n[3]*i+n[6],this.y=n[1]*e+n[4]*i+n[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=kt(this.x,t.x,e.x),this.y=kt(this.y,t.y,e.y),this}clampScalar(t,e){return this.x=kt(this.x,t,e),this.y=kt(this.y,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(kt(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(kt(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y;return e*e+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const i=Math.cos(e),n=Math.sin(e),r=this.x-t.x,a=this.y-t.y;return this.x=r*i-a*n+t.x,this.y=r*n+a*i+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class Mn{constructor(t=0,e=0,i=0,n=1){this.isQuaternion=!0,this._x=t,this._y=e,this._z=i,this._w=n}static slerpFlat(t,e,i,n,r,a,o){let l=i[n+0],A=i[n+1],h=i[n+2],c=i[n+3];const u=r[a+0],d=r[a+1],p=r[a+2],m=r[a+3];if(o===0){t[e+0]=l,t[e+1]=A,t[e+2]=h,t[e+3]=c;return}if(o===1){t[e+0]=u,t[e+1]=d,t[e+2]=p,t[e+3]=m;return}if(c!==m||l!==u||A!==d||h!==p){let g=1-o;const f=l*u+A*d+h*p+c*m,M=f>=0?1:-1,y=1-f*f;if(y>Number.EPSILON){const w=Math.sqrt(y),T=Math.atan2(w,f*M);g=Math.sin(g*T)/w,o=Math.sin(o*T)/w}const x=o*M;if(l=l*g+u*x,A=A*g+d*x,h=h*g+p*x,c=c*g+m*x,g===1-o){const w=1/Math.sqrt(l*l+A*A+h*h+c*c);l*=w,A*=w,h*=w,c*=w}}t[e]=l,t[e+1]=A,t[e+2]=h,t[e+3]=c}static multiplyQuaternionsFlat(t,e,i,n,r,a){const o=i[n],l=i[n+1],A=i[n+2],h=i[n+3],c=r[a],u=r[a+1],d=r[a+2],p=r[a+3];return t[e]=o*p+h*c+l*d-A*u,t[e+1]=l*p+h*u+A*c-o*d,t[e+2]=A*p+h*d+o*u-l*c,t[e+3]=h*p-o*c-l*u-A*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,i,n){return this._x=t,this._y=e,this._z=i,this._w=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e=!0){const i=t._x,n=t._y,r=t._z,a=t._order,o=Math.cos,l=Math.sin,A=o(i/2),h=o(n/2),c=o(r/2),u=l(i/2),d=l(n/2),p=l(r/2);switch(a){case"XYZ":this._x=u*h*c+A*d*p,this._y=A*d*c-u*h*p,this._z=A*h*p+u*d*c,this._w=A*h*c-u*d*p;break;case"YXZ":this._x=u*h*c+A*d*p,this._y=A*d*c-u*h*p,this._z=A*h*p-u*d*c,this._w=A*h*c+u*d*p;break;case"ZXY":this._x=u*h*c-A*d*p,this._y=A*d*c+u*h*p,this._z=A*h*p+u*d*c,this._w=A*h*c-u*d*p;break;case"ZYX":this._x=u*h*c-A*d*p,this._y=A*d*c+u*h*p,this._z=A*h*p-u*d*c,this._w=A*h*c+u*d*p;break;case"YZX":this._x=u*h*c+A*d*p,this._y=A*d*c+u*h*p,this._z=A*h*p-u*d*c,this._w=A*h*c-u*d*p;break;case"XZY":this._x=u*h*c-A*d*p,this._y=A*d*c-u*h*p,this._z=A*h*p+u*d*c,this._w=A*h*c+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}return e===!0&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const i=e/2,n=Math.sin(i);return this._x=t.x*n,this._y=t.y*n,this._z=t.z*n,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,i=e[0],n=e[4],r=e[8],a=e[1],o=e[5],l=e[9],A=e[2],h=e[6],c=e[10],u=i+o+c;if(u>0){const d=.5/Math.sqrt(u+1);this._w=.25/d,this._x=(h-l)*d,this._y=(r-A)*d,this._z=(a-n)*d}else if(i>o&&i>c){const d=2*Math.sqrt(1+i-o-c);this._w=(h-l)/d,this._x=.25*d,this._y=(n+a)/d,this._z=(r+A)/d}else if(o>c){const d=2*Math.sqrt(1+o-i-c);this._w=(r-A)/d,this._x=(n+a)/d,this._y=.25*d,this._z=(l+h)/d}else{const d=2*Math.sqrt(1+c-i-o);this._w=(a-n)/d,this._x=(r+A)/d,this._y=(l+h)/d,this._z=.25*d}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let i=t.dot(e)+1;return i<1e-8?(i=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=i):(this._x=0,this._y=-t.z,this._z=t.y,this._w=i)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=i),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(kt(this.dot(t),-1,1)))}rotateTowards(t,e){const i=this.angleTo(t);if(i===0)return this;const n=Math.min(1,e/i);return this.slerp(t,n),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return t===0?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const i=t._x,n=t._y,r=t._z,a=t._w,o=e._x,l=e._y,A=e._z,h=e._w;return this._x=i*h+a*o+n*A-r*l,this._y=n*h+a*l+r*o-i*A,this._z=r*h+a*A+i*l-n*o,this._w=a*h-i*o-n*l-r*A,this._onChangeCallback(),this}slerp(t,e){if(e===0)return this;if(e===1)return this.copy(t);const i=this._x,n=this._y,r=this._z,a=this._w;let o=a*t._w+i*t._x+n*t._y+r*t._z;if(o<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,o=-o):this.copy(t),o>=1)return this._w=a,this._x=i,this._y=n,this._z=r,this;const l=1-o*o;if(l<=Number.EPSILON){const d=1-e;return this._w=d*a+e*this._w,this._x=d*i+e*this._x,this._y=d*n+e*this._y,this._z=d*r+e*this._z,this.normalize(),this}const A=Math.sqrt(l),h=Math.atan2(A,o),c=Math.sin((1-e)*h)/A,u=Math.sin(e*h)/A;return this._w=a*c+this._w*u,this._x=i*c+this._x*u,this._y=n*c+this._y*u,this._z=r*c+this._z*u,this._onChangeCallback(),this}slerpQuaternions(t,e,i){return this.copy(t).slerp(e,i)}random(){const t=2*Math.PI*Math.random(),e=2*Math.PI*Math.random(),i=Math.random(),n=Math.sqrt(1-i),r=Math.sqrt(i);return this.set(n*Math.sin(t),n*Math.cos(t),r*Math.sin(e),r*Math.cos(e))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class B{constructor(t=0,e=0,i=0){B.prototype.isVector3=!0,this.x=t,this.y=e,this.z=i}set(t,e,i){return i===void 0&&(i=this.z),this.x=t,this.y=e,this.z=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(Bl.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(Bl.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,i=this.y,n=this.z,r=t.elements;return this.x=r[0]*e+r[3]*i+r[6]*n,this.y=r[1]*e+r[4]*i+r[7]*n,this.z=r[2]*e+r[5]*i+r[8]*n,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,i=this.y,n=this.z,r=t.elements,a=1/(r[3]*e+r[7]*i+r[11]*n+r[15]);return this.x=(r[0]*e+r[4]*i+r[8]*n+r[12])*a,this.y=(r[1]*e+r[5]*i+r[9]*n+r[13])*a,this.z=(r[2]*e+r[6]*i+r[10]*n+r[14])*a,this}applyQuaternion(t){const e=this.x,i=this.y,n=this.z,r=t.x,a=t.y,o=t.z,l=t.w,A=2*(a*n-o*i),h=2*(o*e-r*n),c=2*(r*i-a*e);return this.x=e+l*A+a*c-o*h,this.y=i+l*h+o*A-r*c,this.z=n+l*c+r*h-a*A,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,i=this.y,n=this.z,r=t.elements;return this.x=r[0]*e+r[4]*i+r[8]*n,this.y=r[1]*e+r[5]*i+r[9]*n,this.z=r[2]*e+r[6]*i+r[10]*n,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=kt(this.x,t.x,e.x),this.y=kt(this.y,t.y,e.y),this.z=kt(this.z,t.z,e.z),this}clampScalar(t,e){return this.x=kt(this.x,t,e),this.y=kt(this.y,t,e),this.z=kt(this.z,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(kt(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this.z=t.z+(e.z-t.z)*i,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){const i=t.x,n=t.y,r=t.z,a=e.x,o=e.y,l=e.z;return this.x=n*l-r*o,this.y=r*a-i*l,this.z=i*o-n*a,this}projectOnVector(t){const e=t.lengthSq();if(e===0)return this.set(0,0,0);const i=t.dot(this)/e;return this.copy(t).multiplyScalar(i)}projectOnPlane(t){return Po.copy(this).projectOnVector(t),this.sub(Po)}reflect(t){return this.sub(Po.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(kt(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y,n=this.z-t.z;return e*e+i*i+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,i){const n=Math.sin(e)*t;return this.x=n*Math.sin(i),this.y=Math.cos(e)*t,this.z=n*Math.cos(i),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,i){return this.x=t*Math.sin(e),this.y=i,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),i=this.setFromMatrixColumn(t,1).length(),n=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=i,this.z=n,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,e*4)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,e*3)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=Math.random()*Math.PI*2,e=Math.random()*2-1,i=Math.sqrt(1-e*e);return this.x=i*Math.cos(t),this.y=e,this.z=i*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const Po=new B,Bl=new Mn;class Bt{constructor(t,e,i,n,r,a,o,l,A){Bt.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],t!==void 0&&this.set(t,e,i,n,r,a,o,l,A)}set(t,e,i,n,r,a,o,l,A){const h=this.elements;return h[0]=t,h[1]=n,h[2]=o,h[3]=e,h[4]=r,h[5]=l,h[6]=i,h[7]=a,h[8]=A,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],this}extractBasis(t,e,i){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,n=e.elements,r=this.elements,a=i[0],o=i[3],l=i[6],A=i[1],h=i[4],c=i[7],u=i[2],d=i[5],p=i[8],m=n[0],g=n[3],f=n[6],M=n[1],y=n[4],x=n[7],w=n[2],T=n[5],_=n[8];return r[0]=a*m+o*M+l*w,r[3]=a*g+o*y+l*T,r[6]=a*f+o*x+l*_,r[1]=A*m+h*M+c*w,r[4]=A*g+h*y+c*T,r[7]=A*f+h*x+c*_,r[2]=u*m+d*M+p*w,r[5]=u*g+d*y+p*T,r[8]=u*f+d*x+p*_,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],a=t[4],o=t[5],l=t[6],A=t[7],h=t[8];return e*a*h-e*o*A-i*r*h+i*o*l+n*r*A-n*a*l}invert(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],a=t[4],o=t[5],l=t[6],A=t[7],h=t[8],c=h*a-o*A,u=o*l-h*r,d=A*r-a*l,p=e*c+i*u+n*d;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);const m=1/p;return t[0]=c*m,t[1]=(n*A-h*i)*m,t[2]=(o*i-n*a)*m,t[3]=u*m,t[4]=(h*e-n*l)*m,t[5]=(n*r-o*e)*m,t[6]=d*m,t[7]=(i*l-A*e)*m,t[8]=(a*e-i*r)*m,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,i,n,r,a,o){const l=Math.cos(r),A=Math.sin(r);return this.set(i*l,i*A,-i*(l*a+A*o)+a+t,-n*A,n*l,-n*(-A*a+l*o)+o+e,0,0,1),this}scale(t,e){return this.premultiply(Do.makeScale(t,e)),this}rotate(t){return this.premultiply(Do.makeRotation(-t)),this}translate(t,e){return this.premultiply(Do.makeTranslation(t,e)),this}makeTranslation(t,e){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,i,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){const e=this.elements,i=t.elements;for(let n=0;n<9;n++)if(e[n]!==i[n])return!1;return!0}fromArray(t,e=0){for(let i=0;i<9;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t}clone(){return new this.constructor().fromArray(this.elements)}}const Do=new Bt;function Fl(s){for(let t=s.length-1;t>=0;--t)if(s[t]>=65535)return!0;return!1}function js(s){return document.createElementNS("http://www.w3.org/1999/xhtml",s)}function xd(){const s=js("canvas");return s.style.display="block",s}const Ol={};function os(s){s in Ol||(Ol[s]=!0,console.warn(s))}function vd(s,t,e){return new Promise(function(i,n){function r(){switch(s.clientWaitSync(t,s.SYNC_FLUSH_COMMANDS_BIT,0)){case s.WAIT_FAILED:n();break;case s.TIMEOUT_EXPIRED:setTimeout(r,e);break;default:i()}}setTimeout(r,e)})}const Ul=new Bt().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),zl=new Bt().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function Ed(){const s={enabled:!0,workingColorSpace:rs,spaces:{},convert:function(n,r,a){return this.enabled===!1||r===a||!r||!a||(this.spaces[r].transfer===qt&&(n.r=Oi(n.r),n.g=Oi(n.g),n.b=Oi(n.b)),this.spaces[r].primaries!==this.spaces[a].primaries&&(n.applyMatrix3(this.spaces[r].toXYZ),n.applyMatrix3(this.spaces[a].fromXYZ)),this.spaces[a].transfer===qt&&(n.r=As(n.r),n.g=As(n.g),n.b=As(n.b))),n},workingToColorSpace:function(n,r){return this.convert(n,this.workingColorSpace,r)},colorSpaceToWorking:function(n,r){return this.convert(n,r,this.workingColorSpace)},getPrimaries:function(n){return this.spaces[n].primaries},getTransfer:function(n){return n===tn?Dr:this.spaces[n].transfer},getLuminanceCoefficients:function(n,r=this.workingColorSpace){return n.fromArray(this.spaces[r].luminanceCoefficients)},define:function(n){Object.assign(this.spaces,n)},_getMatrix:function(n,r,a){return n.copy(this.spaces[r].toXYZ).multiply(this.spaces[a].fromXYZ)},_getDrawingBufferColorSpace:function(n){return this.spaces[n].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(n=this.workingColorSpace){return this.spaces[n].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(n,r){return os("THREE.ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),s.workingToColorSpace(n,r)},toWorkingColorSpace:function(n,r){return os("THREE.ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),s.colorSpaceToWorking(n,r)}},t=[.64,.33,.3,.6,.15,.06],e=[.2126,.7152,.0722],i=[.3127,.329];return s.define({[rs]:{primaries:t,whitePoint:i,transfer:Dr,toXYZ:Ul,fromXYZ:zl,luminanceCoefficients:e,workingColorSpaceConfig:{unpackColorSpace:$e},outputColorSpaceConfig:{drawingBufferColorSpace:$e}},[$e]:{primaries:t,whitePoint:i,transfer:qt,toXYZ:Ul,fromXYZ:zl,luminanceCoefficients:e,outputColorSpaceConfig:{drawingBufferColorSpace:$e}}}),s}const Xt=Ed();function Oi(s){return s<.04045?s*.0773993808:Math.pow(s*.9478672986+.0521327014,2.4)}function As(s){return s<.0031308?s*12.92:1.055*Math.pow(s,.41666)-.055}let ls;class yd{static getDataURL(t,e="image/png"){if(/^data:/i.test(t.src)||typeof HTMLCanvasElement>"u")return t.src;let i;if(t instanceof HTMLCanvasElement)i=t;else{ls===void 0&&(ls=js("canvas")),ls.width=t.width,ls.height=t.height;const n=ls.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),i=ls}return i.toDataURL(e)}static sRGBToLinear(t){if(typeof HTMLImageElement<"u"&&t instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&t instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&t instanceof ImageBitmap){const e=js("canvas");e.width=t.width,e.height=t.height;const i=e.getContext("2d");i.drawImage(t,0,0,t.width,t.height);const n=i.getImageData(0,0,t.width,t.height),r=n.data;for(let a=0;a<r.length;a++)r[a]=Oi(r[a]/255)*255;return i.putImageData(n,0,0),e}else if(t.data){const e=t.data.slice(0);for(let i=0;i<e.length;i++)e instanceof Uint8Array||e instanceof Uint8ClampedArray?e[i]=Math.floor(Oi(e[i]/255)*255):e[i]=Oi(e[i]);return{data:e,width:t.width,height:t.height}}else return console.warn("THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."),t}}let Sd=0;class Lo{constructor(t=null){this.isSource=!0,Object.defineProperty(this,"id",{value:Sd++}),this.uuid=Xs(),this.data=t,this.dataReady=!0,this.version=0}getSize(t){const e=this.data;return e instanceof HTMLVideoElement?t.set(e.videoWidth,e.videoHeight,0):e instanceof VideoFrame?t.set(e.displayHeight,e.displayWidth,0):e!==null?t.set(e.width,e.height,e.depth||0):t.set(0,0,0),t}set needsUpdate(t){t===!0&&this.version++}toJSON(t){const e=t===void 0||typeof t=="string";if(!e&&t.images[this.uuid]!==void 0)return t.images[this.uuid];const i={uuid:this.uuid,url:""},n=this.data;if(n!==null){let r;if(Array.isArray(n)){r=[];for(let a=0,o=n.length;a<o;a++)n[a].isDataTexture?r.push(No(n[a].image)):r.push(No(n[a]))}else r=No(n);i.url=r}return e||(t.images[this.uuid]=i),i}}function No(s){return typeof HTMLImageElement<"u"&&s instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&s instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&s instanceof ImageBitmap?yd.getDataURL(s):s.data?{data:Array.from(s.data),width:s.width,height:s.height,type:s.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}let Md=0;const Bo=new B;class Re extends Sn{constructor(t=Re.DEFAULT_IMAGE,e=Re.DEFAULT_MAPPING,i=vn,n=vn,r=mi,a=En,o=ci,l=Ci,A=Re.DEFAULT_ANISOTROPY,h=tn){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:Md++}),this.uuid=Xs(),this.name="",this.source=new Lo(t),this.mipmaps=[],this.mapping=e,this.channel=0,this.wrapS=i,this.wrapT=n,this.magFilter=r,this.minFilter=a,this.anisotropy=A,this.format=o,this.internalFormat=null,this.type=l,this.offset=new Nt(0,0),this.repeat=new Nt(1,1),this.center=new Nt(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Bt,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=h,this.userData={},this.updateRanges=[],this.version=0,this.onUpdate=null,this.renderTarget=null,this.isRenderTargetTexture=!1,this.isArrayTexture=!!(t&&t.depth&&t.depth>1),this.pmremVersion=0}get width(){return this.source.getSize(Bo).x}get height(){return this.source.getSize(Bo).y}get depth(){return this.source.getSize(Bo).z}get image(){return this.source.data}set image(t=null){this.source.data=t}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(t){return this.name=t.name,this.source=t.source,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.channel=t.channel,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.colorSpace=t.colorSpace,this.renderTarget=t.renderTarget,this.isRenderTargetTexture=t.isRenderTargetTexture,this.isArrayTexture=t.isArrayTexture,this.userData=JSON.parse(JSON.stringify(t.userData)),this.needsUpdate=!0,this}setValues(t){for(const e in t){const i=t[e];if(i===void 0){console.warn(`THREE.Texture.setValues(): parameter '${e}' has value of undefined.`);continue}const n=this[e];if(n===void 0){console.warn(`THREE.Texture.setValues(): property '${e}' does not exist.`);continue}n&&i&&n.isVector2&&i.isVector2||n&&i&&n.isVector3&&i.isVector3||n&&i&&n.isMatrix3&&i.isMatrix3?n.copy(i):this[e]=i}}toJSON(t){const e=t===void 0||typeof t=="string";if(!e&&t.textures[this.uuid]!==void 0)return t.textures[this.uuid];const i={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(t).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),e||(t.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(this.mapping!==vl)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case ja:t.x=t.x-Math.floor(t.x);break;case vn:t.x=t.x<0?0:1;break;case Ja:Math.abs(Math.floor(t.x)%2)===1?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x);break}if(t.y<0||t.y>1)switch(this.wrapT){case ja:t.y=t.y-Math.floor(t.y);break;case vn:t.y=t.y<0?0:1;break;case Ja:Math.abs(Math.floor(t.y)%2)===1?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y);break}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){t===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(t){t===!0&&this.pmremVersion++}}Re.DEFAULT_IMAGE=null,Re.DEFAULT_MAPPING=vl,Re.DEFAULT_ANISOTROPY=1;class ce{constructor(t=0,e=0,i=0,n=1){ce.prototype.isVector4=!0,this.x=t,this.y=e,this.z=i,this.w=n}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,i,n){return this.x=t,this.y=e,this.z=i,this.w=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w!==void 0?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,i=this.y,n=this.z,r=this.w,a=t.elements;return this.x=a[0]*e+a[4]*i+a[8]*n+a[12]*r,this.y=a[1]*e+a[5]*i+a[9]*n+a[13]*r,this.z=a[2]*e+a[6]*i+a[10]*n+a[14]*r,this.w=a[3]*e+a[7]*i+a[11]*n+a[15]*r,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,i,n,r;const l=t.elements,A=l[0],h=l[4],c=l[8],u=l[1],d=l[5],p=l[9],m=l[2],g=l[6],f=l[10];if(Math.abs(h-u)<.01&&Math.abs(c-m)<.01&&Math.abs(p-g)<.01){if(Math.abs(h+u)<.1&&Math.abs(c+m)<.1&&Math.abs(p+g)<.1&&Math.abs(A+d+f-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;const y=(A+1)/2,x=(d+1)/2,w=(f+1)/2,T=(h+u)/4,_=(c+m)/4,P=(p+g)/4;return y>x&&y>w?y<.01?(i=0,n=.707106781,r=.707106781):(i=Math.sqrt(y),n=T/i,r=_/i):x>w?x<.01?(i=.707106781,n=0,r=.707106781):(n=Math.sqrt(x),i=T/n,r=P/n):w<.01?(i=.707106781,n=.707106781,r=0):(r=Math.sqrt(w),i=_/r,n=P/r),this.set(i,n,r,e),this}let M=Math.sqrt((g-p)*(g-p)+(c-m)*(c-m)+(u-h)*(u-h));return Math.abs(M)<.001&&(M=1),this.x=(g-p)/M,this.y=(c-m)/M,this.z=(u-h)/M,this.w=Math.acos((A+d+f-1)/2),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this.w=e[15],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=kt(this.x,t.x,e.x),this.y=kt(this.y,t.y,e.y),this.z=kt(this.z,t.z,e.z),this.w=kt(this.w,t.w,e.w),this}clampScalar(t,e){return this.x=kt(this.x,t,e),this.y=kt(this.y,t,e),this.z=kt(this.z,t,e),this.w=kt(this.w,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(kt(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this.z=t.z+(e.z-t.z)*i,this.w=t.w+(e.w-t.w)*i,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class bd extends Sn{constructor(t=1,e=1,i={}){super(),i=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:mi,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1,depth:1,multiview:!1},i),this.isRenderTarget=!0,this.width=t,this.height=e,this.depth=i.depth,this.scissor=new ce(0,0,t,e),this.scissorTest=!1,this.viewport=new ce(0,0,t,e);const n={width:t,height:e,depth:i.depth},r=new Re(n);this.textures=[];const a=i.count;for(let o=0;o<a;o++)this.textures[o]=r.clone(),this.textures[o].isRenderTargetTexture=!0,this.textures[o].renderTarget=this;this._setTextureOptions(i),this.depthBuffer=i.depthBuffer,this.stencilBuffer=i.stencilBuffer,this.resolveDepthBuffer=i.resolveDepthBuffer,this.resolveStencilBuffer=i.resolveStencilBuffer,this._depthTexture=null,this.depthTexture=i.depthTexture,this.samples=i.samples,this.multiview=i.multiview}_setTextureOptions(t={}){const e={minFilter:mi,generateMipmaps:!1,flipY:!1,internalFormat:null};t.mapping!==void 0&&(e.mapping=t.mapping),t.wrapS!==void 0&&(e.wrapS=t.wrapS),t.wrapT!==void 0&&(e.wrapT=t.wrapT),t.wrapR!==void 0&&(e.wrapR=t.wrapR),t.magFilter!==void 0&&(e.magFilter=t.magFilter),t.minFilter!==void 0&&(e.minFilter=t.minFilter),t.format!==void 0&&(e.format=t.format),t.type!==void 0&&(e.type=t.type),t.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t.colorSpace!==void 0&&(e.colorSpace=t.colorSpace),t.flipY!==void 0&&(e.flipY=t.flipY),t.generateMipmaps!==void 0&&(e.generateMipmaps=t.generateMipmaps),t.internalFormat!==void 0&&(e.internalFormat=t.internalFormat);for(let i=0;i<this.textures.length;i++)this.textures[i].setValues(e)}get texture(){return this.textures[0]}set texture(t){this.textures[0]=t}set depthTexture(t){this._depthTexture!==null&&(this._depthTexture.renderTarget=null),t!==null&&(t.renderTarget=this),this._depthTexture=t}get depthTexture(){return this._depthTexture}setSize(t,e,i=1){if(this.width!==t||this.height!==e||this.depth!==i){this.width=t,this.height=e,this.depth=i;for(let n=0,r=this.textures.length;n<r;n++)this.textures[n].image.width=t,this.textures[n].image.height=e,this.textures[n].image.depth=i,this.textures[n].isArrayTexture=this.textures[n].image.depth>1;this.dispose()}this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return new this.constructor().copy(this)}copy(t){this.width=t.width,this.height=t.height,this.depth=t.depth,this.scissor.copy(t.scissor),this.scissorTest=t.scissorTest,this.viewport.copy(t.viewport),this.textures.length=0;for(let e=0,i=t.textures.length;e<i;e++){this.textures[e]=t.textures[e].clone(),this.textures[e].isRenderTargetTexture=!0,this.textures[e].renderTarget=this;const n=Object.assign({},t.textures[e].image);this.textures[e].source=new Lo(n)}return this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.resolveDepthBuffer=t.resolveDepthBuffer,this.resolveStencilBuffer=t.resolveStencilBuffer,t.depthTexture!==null&&(this.depthTexture=t.depthTexture.clone()),this.samples=t.samples,this}dispose(){this.dispatchEvent({type:"dispose"})}}class bn extends bd{constructor(t=1,e=1,i={}){super(t,e,i),this.isWebGLRenderTarget=!0}}class kl extends Re{constructor(t=null,e=1,i=1,n=1){super(null),this.isDataArrayTexture=!0,this.image={data:t,width:e,height:i,depth:n},this.magFilter=hi,this.minFilter=hi,this.wrapR=vn,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.layerUpdates=new Set}addLayerUpdate(t){this.layerUpdates.add(t)}clearLayerUpdates(){this.layerUpdates.clear()}}class Td extends Re{constructor(t=null,e=1,i=1,n=1){super(null),this.isData3DTexture=!0,this.image={data:t,width:e,height:i,depth:n},this.magFilter=hi,this.minFilter=hi,this.wrapR=vn,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}class hs{constructor(t=new B(1/0,1/0,1/0),e=new B(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){this.makeEmpty();for(let e=0,i=t.length;e<i;e+=3)this.expandByPoint(ui.fromArray(t,e));return this}setFromBufferAttribute(t){this.makeEmpty();for(let e=0,i=t.count;e<i;e++)this.expandByPoint(ui.fromBufferAttribute(t,e));return this}setFromPoints(t){this.makeEmpty();for(let e=0,i=t.length;e<i;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const i=ui.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(i),this.max.copy(t).add(i),this}setFromObject(t,e=!1){return this.makeEmpty(),this.expandByObject(t,e)}clone(){return new this.constructor().copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t,e=!1){t.updateWorldMatrix(!1,!1);const i=t.geometry;if(i!==void 0){const r=i.getAttribute("position");if(e===!0&&r!==void 0&&t.isInstancedMesh!==!0)for(let a=0,o=r.count;a<o;a++)t.isMesh===!0?t.getVertexPosition(a,ui):ui.fromBufferAttribute(r,a),ui.applyMatrix4(t.matrixWorld),this.expandByPoint(ui);else t.boundingBox!==void 0?(t.boundingBox===null&&t.computeBoundingBox(),Fr.copy(t.boundingBox)):(i.boundingBox===null&&i.computeBoundingBox(),Fr.copy(i.boundingBox)),Fr.applyMatrix4(t.matrixWorld),this.union(Fr)}const n=t.children;for(let r=0,a=n.length;r<a;r++)this.expandByObject(n[r],e);return this}containsPoint(t){return t.x>=this.min.x&&t.x<=this.max.x&&t.y>=this.min.y&&t.y<=this.max.y&&t.z>=this.min.z&&t.z<=this.max.z}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return t.max.x>=this.min.x&&t.min.x<=this.max.x&&t.max.y>=this.min.y&&t.min.y<=this.max.y&&t.max.z>=this.min.z&&t.min.z<=this.max.z}intersectsSphere(t){return this.clampPoint(t.center,ui),ui.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,i;return t.normal.x>0?(e=t.normal.x*this.min.x,i=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,i=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,i+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,i+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,i+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,i+=t.normal.z*this.min.z),e<=-t.constant&&i>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(Js),Or.subVectors(this.max,Js),cs.subVectors(t.a,Js),us.subVectors(t.b,Js),ds.subVectors(t.c,Js),en.subVectors(us,cs),nn.subVectors(ds,us),Tn.subVectors(cs,ds);let e=[0,-en.z,en.y,0,-nn.z,nn.y,0,-Tn.z,Tn.y,en.z,0,-en.x,nn.z,0,-nn.x,Tn.z,0,-Tn.x,-en.y,en.x,0,-nn.y,nn.x,0,-Tn.y,Tn.x,0];return!Fo(e,cs,us,ds,Or)||(e=[1,0,0,0,1,0,0,0,1],!Fo(e,cs,us,ds,Or))?!1:(Ur.crossVectors(en,nn),e=[Ur.x,Ur.y,Ur.z],Fo(e,cs,us,ds,Or))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,ui).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=this.getSize(ui).length()*.5),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()?this:(Ui[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),Ui[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),Ui[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),Ui[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),Ui[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),Ui[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),Ui[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),Ui[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(Ui),this)}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(t){return this.min.fromArray(t.min),this.max.fromArray(t.max),this}}const Ui=[new B,new B,new B,new B,new B,new B,new B,new B],ui=new B,Fr=new hs,cs=new B,us=new B,ds=new B,en=new B,nn=new B,Tn=new B,Js=new B,Or=new B,Ur=new B,wn=new B;function Fo(s,t,e,i,n){for(let r=0,a=s.length-3;r<=a;r+=3){wn.fromArray(s,r);const o=n.x*Math.abs(wn.x)+n.y*Math.abs(wn.y)+n.z*Math.abs(wn.z),l=t.dot(wn),A=e.dot(wn),h=i.dot(wn);if(Math.max(-Math.max(l,A,h),Math.min(l,A,h))>o)return!1}return!0}const wd=new hs,Qs=new B,Oo=new B;class Uo{constructor(t=new B,e=-1){this.isSphere=!0,this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const i=this.center;e!==void 0?i.copy(e):wd.setFromPoints(t).getCenter(i);let n=0;for(let r=0,a=t.length;r<a;r++)n=Math.max(n,i.distanceToSquared(t[r]));return this.radius=Math.sqrt(n),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){const e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))<=this.radius}clampPoint(t,e){const i=this.center.distanceToSquared(t);return e.copy(t),i>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;Qs.subVectors(t,this.center);const e=Qs.lengthSq();if(e>this.radius*this.radius){const i=Math.sqrt(e),n=(i-this.radius)*.5;this.center.addScaledVector(Qs,n/i),this.radius+=n}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(this.center.equals(t.center)===!0?this.radius=Math.max(this.radius,t.radius):(Oo.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(Qs.copy(t.center).add(Oo)),this.expandByPoint(Qs.copy(t.center).sub(Oo))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(t){return this.radius=t.radius,this.center.fromArray(t.center),this}}const zi=new B,zo=new B,zr=new B,sn=new B,ko=new B,kr=new B,Go=new B;class Gl{constructor(t=new B,e=new B(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.origin).addScaledVector(this.direction,t)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,zi)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const i=e.dot(this.direction);return i<0?e.copy(this.origin):e.copy(this.origin).addScaledVector(this.direction,i)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=zi.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(zi.copy(this.origin).addScaledVector(this.direction,e),zi.distanceToSquared(t))}distanceSqToSegment(t,e,i,n){zo.copy(t).add(e).multiplyScalar(.5),zr.copy(e).sub(t).normalize(),sn.copy(this.origin).sub(zo);const r=t.distanceTo(e)*.5,a=-this.direction.dot(zr),o=sn.dot(this.direction),l=-sn.dot(zr),A=sn.lengthSq(),h=Math.abs(1-a*a);let c,u,d,p;if(h>0)if(c=a*l-o,u=a*o-l,p=r*h,c>=0)if(u>=-p)if(u<=p){const m=1/h;c*=m,u*=m,d=c*(c+a*u+2*o)+u*(a*c+u+2*l)+A}else u=r,c=Math.max(0,-(a*u+o)),d=-c*c+u*(u+2*l)+A;else u=-r,c=Math.max(0,-(a*u+o)),d=-c*c+u*(u+2*l)+A;else u<=-p?(c=Math.max(0,-(-a*r+o)),u=c>0?-r:Math.min(Math.max(-r,-l),r),d=-c*c+u*(u+2*l)+A):u<=p?(c=0,u=Math.min(Math.max(-r,-l),r),d=u*(u+2*l)+A):(c=Math.max(0,-(a*r+o)),u=c>0?r:Math.min(Math.max(-r,-l),r),d=-c*c+u*(u+2*l)+A);else u=a>0?-r:r,c=Math.max(0,-(a*u+o)),d=-c*c+u*(u+2*l)+A;return i&&i.copy(this.origin).addScaledVector(this.direction,c),n&&n.copy(zo).addScaledVector(zr,u),d}intersectSphere(t,e){zi.subVectors(t.center,this.origin);const i=zi.dot(this.direction),n=zi.dot(zi)-i*i,r=t.radius*t.radius;if(n>r)return null;const a=Math.sqrt(r-n),o=i-a,l=i+a;return l<0?null:o<0?this.at(l,e):this.at(o,e)}intersectsSphere(t){return t.radius<0?!1:this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(e===0)return t.distanceToPoint(this.origin)===0?0:null;const i=-(this.origin.dot(t.normal)+t.constant)/e;return i>=0?i:null}intersectPlane(t,e){const i=this.distanceToPlane(t);return i===null?null:this.at(i,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);return e===0||t.normal.dot(this.direction)*e<0}intersectBox(t,e){let i,n,r,a,o,l;const A=1/this.direction.x,h=1/this.direction.y,c=1/this.direction.z,u=this.origin;return A>=0?(i=(t.min.x-u.x)*A,n=(t.max.x-u.x)*A):(i=(t.max.x-u.x)*A,n=(t.min.x-u.x)*A),h>=0?(r=(t.min.y-u.y)*h,a=(t.max.y-u.y)*h):(r=(t.max.y-u.y)*h,a=(t.min.y-u.y)*h),i>a||r>n||((r>i||isNaN(i))&&(i=r),(a<n||isNaN(n))&&(n=a),c>=0?(o=(t.min.z-u.z)*c,l=(t.max.z-u.z)*c):(o=(t.max.z-u.z)*c,l=(t.min.z-u.z)*c),i>l||o>n)||((o>i||i!==i)&&(i=o),(l<n||n!==n)&&(n=l),n<0)?null:this.at(i>=0?i:n,e)}intersectsBox(t){return this.intersectBox(t,zi)!==null}intersectTriangle(t,e,i,n,r){ko.subVectors(e,t),kr.subVectors(i,t),Go.crossVectors(ko,kr);let a=this.direction.dot(Go),o;if(a>0){if(n)return null;o=1}else if(a<0)o=-1,a=-a;else return null;sn.subVectors(this.origin,t);const l=o*this.direction.dot(kr.crossVectors(sn,kr));if(l<0)return null;const A=o*this.direction.dot(ko.cross(sn));if(A<0||l+A>a)return null;const h=-o*sn.dot(Go);return h<0?null:this.at(h/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class de{constructor(t,e,i,n,r,a,o,l,A,h,c,u,d,p,m,g){de.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!==void 0&&this.set(t,e,i,n,r,a,o,l,A,h,c,u,d,p,m,g)}set(t,e,i,n,r,a,o,l,A,h,c,u,d,p,m,g){const f=this.elements;return f[0]=t,f[4]=e,f[8]=i,f[12]=n,f[1]=r,f[5]=a,f[9]=o,f[13]=l,f[2]=A,f[6]=h,f[10]=c,f[14]=u,f[3]=d,f[7]=p,f[11]=m,f[15]=g,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new de().fromArray(this.elements)}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],e[9]=i[9],e[10]=i[10],e[11]=i[11],e[12]=i[12],e[13]=i[13],e[14]=i[14],e[15]=i[15],this}copyPosition(t){const e=this.elements,i=t.elements;return e[12]=i[12],e[13]=i[13],e[14]=i[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,i){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this}makeBasis(t,e,i){return this.set(t.x,e.x,i.x,0,t.y,e.y,i.y,0,t.z,e.z,i.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,i=t.elements,n=1/fs.setFromMatrixColumn(t,0).length(),r=1/fs.setFromMatrixColumn(t,1).length(),a=1/fs.setFromMatrixColumn(t,2).length();return e[0]=i[0]*n,e[1]=i[1]*n,e[2]=i[2]*n,e[3]=0,e[4]=i[4]*r,e[5]=i[5]*r,e[6]=i[6]*r,e[7]=0,e[8]=i[8]*a,e[9]=i[9]*a,e[10]=i[10]*a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){const e=this.elements,i=t.x,n=t.y,r=t.z,a=Math.cos(i),o=Math.sin(i),l=Math.cos(n),A=Math.sin(n),h=Math.cos(r),c=Math.sin(r);if(t.order==="XYZ"){const u=a*h,d=a*c,p=o*h,m=o*c;e[0]=l*h,e[4]=-l*c,e[8]=A,e[1]=d+p*A,e[5]=u-m*A,e[9]=-o*l,e[2]=m-u*A,e[6]=p+d*A,e[10]=a*l}else if(t.order==="YXZ"){const u=l*h,d=l*c,p=A*h,m=A*c;e[0]=u+m*o,e[4]=p*o-d,e[8]=a*A,e[1]=a*c,e[5]=a*h,e[9]=-o,e[2]=d*o-p,e[6]=m+u*o,e[10]=a*l}else if(t.order==="ZXY"){const u=l*h,d=l*c,p=A*h,m=A*c;e[0]=u-m*o,e[4]=-a*c,e[8]=p+d*o,e[1]=d+p*o,e[5]=a*h,e[9]=m-u*o,e[2]=-a*A,e[6]=o,e[10]=a*l}else if(t.order==="ZYX"){const u=a*h,d=a*c,p=o*h,m=o*c;e[0]=l*h,e[4]=p*A-d,e[8]=u*A+m,e[1]=l*c,e[5]=m*A+u,e[9]=d*A-p,e[2]=-A,e[6]=o*l,e[10]=a*l}else if(t.order==="YZX"){const u=a*l,d=a*A,p=o*l,m=o*A;e[0]=l*h,e[4]=m-u*c,e[8]=p*c+d,e[1]=c,e[5]=a*h,e[9]=-o*h,e[2]=-A*h,e[6]=d*c+p,e[10]=u-m*c}else if(t.order==="XZY"){const u=a*l,d=a*A,p=o*l,m=o*A;e[0]=l*h,e[4]=-c,e[8]=A*h,e[1]=u*c+m,e[5]=a*h,e[9]=d*c-p,e[2]=p*c-d,e[6]=o*h,e[10]=m*c+u}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(_d,t,Rd)}lookAt(t,e,i){const n=this.elements;return Ye.subVectors(t,e),Ye.lengthSq()===0&&(Ye.z=1),Ye.normalize(),rn.crossVectors(i,Ye),rn.lengthSq()===0&&(Math.abs(i.z)===1?Ye.x+=1e-4:Ye.z+=1e-4,Ye.normalize(),rn.crossVectors(i,Ye)),rn.normalize(),Gr.crossVectors(Ye,rn),n[0]=rn.x,n[4]=Gr.x,n[8]=Ye.x,n[1]=rn.y,n[5]=Gr.y,n[9]=Ye.y,n[2]=rn.z,n[6]=Gr.z,n[10]=Ye.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,n=e.elements,r=this.elements,a=i[0],o=i[4],l=i[8],A=i[12],h=i[1],c=i[5],u=i[9],d=i[13],p=i[2],m=i[6],g=i[10],f=i[14],M=i[3],y=i[7],x=i[11],w=i[15],T=n[0],_=n[4],P=n[8],E=n[12],v=n[1],b=n[5],z=n[9],F=n[13],U=n[2],W=n[6],Y=n[10],$=n[14],H=n[3],rt=n[7],lt=n[11],mt=n[15];return r[0]=a*T+o*v+l*U+A*H,r[4]=a*_+o*b+l*W+A*rt,r[8]=a*P+o*z+l*Y+A*lt,r[12]=a*E+o*F+l*$+A*mt,r[1]=h*T+c*v+u*U+d*H,r[5]=h*_+c*b+u*W+d*rt,r[9]=h*P+c*z+u*Y+d*lt,r[13]=h*E+c*F+u*$+d*mt,r[2]=p*T+m*v+g*U+f*H,r[6]=p*_+m*b+g*W+f*rt,r[10]=p*P+m*z+g*Y+f*lt,r[14]=p*E+m*F+g*$+f*mt,r[3]=M*T+y*v+x*U+w*H,r[7]=M*_+y*b+x*W+w*rt,r[11]=M*P+y*z+x*Y+w*lt,r[15]=M*E+y*F+x*$+w*mt,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],i=t[4],n=t[8],r=t[12],a=t[1],o=t[5],l=t[9],A=t[13],h=t[2],c=t[6],u=t[10],d=t[14],p=t[3],m=t[7],g=t[11],f=t[15];return p*(+r*l*c-n*A*c-r*o*u+i*A*u+n*o*d-i*l*d)+m*(+e*l*d-e*A*u+r*a*u-n*a*d+n*A*h-r*l*h)+g*(+e*A*c-e*o*d-r*a*c+i*a*d+r*o*h-i*A*h)+f*(-n*o*h-e*l*c+e*o*u+n*a*c-i*a*u+i*l*h)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,i){const n=this.elements;return t.isVector3?(n[12]=t.x,n[13]=t.y,n[14]=t.z):(n[12]=t,n[13]=e,n[14]=i),this}invert(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],a=t[4],o=t[5],l=t[6],A=t[7],h=t[8],c=t[9],u=t[10],d=t[11],p=t[12],m=t[13],g=t[14],f=t[15],M=c*g*A-m*u*A+m*l*d-o*g*d-c*l*f+o*u*f,y=p*u*A-h*g*A-p*l*d+a*g*d+h*l*f-a*u*f,x=h*m*A-p*c*A+p*o*d-a*m*d-h*o*f+a*c*f,w=p*c*l-h*m*l-p*o*u+a*m*u+h*o*g-a*c*g,T=e*M+i*y+n*x+r*w;if(T===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const _=1/T;return t[0]=M*_,t[1]=(m*u*r-c*g*r-m*n*d+i*g*d+c*n*f-i*u*f)*_,t[2]=(o*g*r-m*l*r+m*n*A-i*g*A-o*n*f+i*l*f)*_,t[3]=(c*l*r-o*u*r-c*n*A+i*u*A+o*n*d-i*l*d)*_,t[4]=y*_,t[5]=(h*g*r-p*u*r+p*n*d-e*g*d-h*n*f+e*u*f)*_,t[6]=(p*l*r-a*g*r-p*n*A+e*g*A+a*n*f-e*l*f)*_,t[7]=(a*u*r-h*l*r+h*n*A-e*u*A-a*n*d+e*l*d)*_,t[8]=x*_,t[9]=(p*c*r-h*m*r-p*i*d+e*m*d+h*i*f-e*c*f)*_,t[10]=(a*m*r-p*o*r+p*i*A-e*m*A-a*i*f+e*o*f)*_,t[11]=(h*o*r-a*c*r-h*i*A+e*c*A+a*i*d-e*o*d)*_,t[12]=w*_,t[13]=(h*m*n-p*c*n+p*i*u-e*m*u-h*i*g+e*c*g)*_,t[14]=(p*o*n-a*m*n-p*i*l+e*m*l+a*i*g-e*o*g)*_,t[15]=(a*c*n-h*o*n+h*i*l-e*c*l-a*i*u+e*o*u)*_,this}scale(t){const e=this.elements,i=t.x,n=t.y,r=t.z;return e[0]*=i,e[4]*=n,e[8]*=r,e[1]*=i,e[5]*=n,e[9]*=r,e[2]*=i,e[6]*=n,e[10]*=r,e[3]*=i,e[7]*=n,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],i=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],n=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,i,n))}makeTranslation(t,e,i){return t.isVector3?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,e,0,0,1,i,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),i=Math.sin(t);return this.set(1,0,0,0,0,e,-i,0,0,i,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,0,i,0,0,1,0,0,-i,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,0,i,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const i=Math.cos(e),n=Math.sin(e),r=1-i,a=t.x,o=t.y,l=t.z,A=r*a,h=r*o;return this.set(A*a+i,A*o-n*l,A*l+n*o,0,A*o+n*l,h*o+i,h*l-n*a,0,A*l-n*o,h*l+n*a,r*l*l+i,0,0,0,0,1),this}makeScale(t,e,i){return this.set(t,0,0,0,0,e,0,0,0,0,i,0,0,0,0,1),this}makeShear(t,e,i,n,r,a){return this.set(1,i,r,0,t,1,a,0,e,n,1,0,0,0,0,1),this}compose(t,e,i){const n=this.elements,r=e._x,a=e._y,o=e._z,l=e._w,A=r+r,h=a+a,c=o+o,u=r*A,d=r*h,p=r*c,m=a*h,g=a*c,f=o*c,M=l*A,y=l*h,x=l*c,w=i.x,T=i.y,_=i.z;return n[0]=(1-(m+f))*w,n[1]=(d+x)*w,n[2]=(p-y)*w,n[3]=0,n[4]=(d-x)*T,n[5]=(1-(u+f))*T,n[6]=(g+M)*T,n[7]=0,n[8]=(p+y)*_,n[9]=(g-M)*_,n[10]=(1-(u+m))*_,n[11]=0,n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=1,this}decompose(t,e,i){const n=this.elements;let r=fs.set(n[0],n[1],n[2]).length();const a=fs.set(n[4],n[5],n[6]).length(),o=fs.set(n[8],n[9],n[10]).length();this.determinant()<0&&(r=-r),t.x=n[12],t.y=n[13],t.z=n[14],di.copy(this);const A=1/r,h=1/a,c=1/o;return di.elements[0]*=A,di.elements[1]*=A,di.elements[2]*=A,di.elements[4]*=h,di.elements[5]*=h,di.elements[6]*=h,di.elements[8]*=c,di.elements[9]*=c,di.elements[10]*=c,e.setFromRotationMatrix(di),i.x=r,i.y=a,i.z=o,this}makePerspective(t,e,i,n,r,a,o=Ii,l=!1){const A=this.elements,h=2*r/(e-t),c=2*r/(i-n),u=(e+t)/(e-t),d=(i+n)/(i-n);let p,m;if(l)p=r/(a-r),m=a*r/(a-r);else if(o===Ii)p=-(a+r)/(a-r),m=-2*a*r/(a-r);else if(o===Lr)p=-a/(a-r),m=-a*r/(a-r);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+o);return A[0]=h,A[4]=0,A[8]=u,A[12]=0,A[1]=0,A[5]=c,A[9]=d,A[13]=0,A[2]=0,A[6]=0,A[10]=p,A[14]=m,A[3]=0,A[7]=0,A[11]=-1,A[15]=0,this}makeOrthographic(t,e,i,n,r,a,o=Ii,l=!1){const A=this.elements,h=2/(e-t),c=2/(i-n),u=-(e+t)/(e-t),d=-(i+n)/(i-n);let p,m;if(l)p=1/(a-r),m=a/(a-r);else if(o===Ii)p=-2/(a-r),m=-(a+r)/(a-r);else if(o===Lr)p=-1/(a-r),m=-r/(a-r);else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+o);return A[0]=h,A[4]=0,A[8]=0,A[12]=u,A[1]=0,A[5]=c,A[9]=0,A[13]=d,A[2]=0,A[6]=0,A[10]=p,A[14]=m,A[3]=0,A[7]=0,A[11]=0,A[15]=1,this}equals(t){const e=this.elements,i=t.elements;for(let n=0;n<16;n++)if(e[n]!==i[n])return!1;return!0}fromArray(t,e=0){for(let i=0;i<16;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t[e+9]=i[9],t[e+10]=i[10],t[e+11]=i[11],t[e+12]=i[12],t[e+13]=i[13],t[e+14]=i[14],t[e+15]=i[15],t}}const fs=new B,di=new de,_d=new B(0,0,0),Rd=new B(1,1,1),rn=new B,Gr=new B,Ye=new B,Hl=new de,Vl=new Mn;class xi{constructor(t=0,e=0,i=0,n=xi.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=e,this._z=i,this._order=n}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,i,n=this._order){return this._x=t,this._y=e,this._z=i,this._order=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,i=!0){const n=t.elements,r=n[0],a=n[4],o=n[8],l=n[1],A=n[5],h=n[9],c=n[2],u=n[6],d=n[10];switch(e){case"XYZ":this._y=Math.asin(kt(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-h,d),this._z=Math.atan2(-a,r)):(this._x=Math.atan2(u,A),this._z=0);break;case"YXZ":this._x=Math.asin(-kt(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(o,d),this._z=Math.atan2(l,A)):(this._y=Math.atan2(-c,r),this._z=0);break;case"ZXY":this._x=Math.asin(kt(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(-c,d),this._z=Math.atan2(-a,A)):(this._y=0,this._z=Math.atan2(l,r));break;case"ZYX":this._y=Math.asin(-kt(c,-1,1)),Math.abs(c)<.9999999?(this._x=Math.atan2(u,d),this._z=Math.atan2(l,r)):(this._x=0,this._z=Math.atan2(-a,A));break;case"YZX":this._z=Math.asin(kt(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-h,A),this._y=Math.atan2(-c,r)):(this._x=0,this._y=Math.atan2(o,d));break;case"XZY":this._z=Math.asin(-kt(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(u,A),this._y=Math.atan2(o,r)):(this._x=Math.atan2(-h,d),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,i===!0&&this._onChangeCallback(),this}setFromQuaternion(t,e,i){return Hl.makeRotationFromQuaternion(t),this.setFromRotationMatrix(Hl,e,i)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return Vl.setFromEuler(this),this.setFromQuaternion(Vl,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],t[3]!==void 0&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}xi.DEFAULT_ORDER="XYZ";class Wl{constructor(){this.mask=1}set(t){this.mask=(1<<t|0)>>>0}enable(t){this.mask|=1<<t|0}enableAll(){this.mask=-1}toggle(t){this.mask^=1<<t|0}disable(t){this.mask&=~(1<<t|0)}disableAll(){this.mask=0}test(t){return(this.mask&t.mask)!==0}isEnabled(t){return(this.mask&(1<<t|0))!==0}}let Pd=0;const Yl=new B,gs=new Mn,ki=new de,Hr=new B,qs=new B,Dd=new B,Ld=new Mn,Xl=new B(1,0,0),Zl=new B(0,1,0),jl=new B(0,0,1),Jl={type:"added"},Nd={type:"removed"},ps={type:"childadded",child:null},Ho={type:"childremoved",child:null};class Ee extends Sn{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:Pd++}),this.uuid=Xs(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=Ee.DEFAULT_UP.clone();const t=new B,e=new xi,i=new Mn,n=new B(1,1,1);function r(){i.setFromEuler(e,!1)}function a(){e.setFromQuaternion(i,void 0,!1)}e._onChange(r),i._onChange(a),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:i},scale:{configurable:!0,enumerable:!0,value:n},modelViewMatrix:{value:new de},normalMatrix:{value:new Bt}}),this.matrix=new de,this.matrixWorld=new de,this.matrixAutoUpdate=Ee.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=Ee.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new Wl,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.customDepthMaterial=void 0,this.customDistanceMaterial=void 0,this.userData={}}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,e){return gs.setFromAxisAngle(t,e),this.quaternion.multiply(gs),this}rotateOnWorldAxis(t,e){return gs.setFromAxisAngle(t,e),this.quaternion.premultiply(gs),this}rotateX(t){return this.rotateOnAxis(Xl,t)}rotateY(t){return this.rotateOnAxis(Zl,t)}rotateZ(t){return this.rotateOnAxis(jl,t)}translateOnAxis(t,e){return Yl.copy(t).applyQuaternion(this.quaternion),this.position.add(Yl.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis(Xl,t)}translateY(t){return this.translateOnAxis(Zl,t)}translateZ(t){return this.translateOnAxis(jl,t)}localToWorld(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(ki.copy(this.matrixWorld).invert())}lookAt(t,e,i){t.isVector3?Hr.copy(t):Hr.set(t,e,i);const n=this.parent;this.updateWorldMatrix(!0,!1),qs.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?ki.lookAt(qs,Hr,this.up):ki.lookAt(Hr,qs,this.up),this.quaternion.setFromRotationMatrix(ki),n&&(ki.extractRotation(n.matrixWorld),gs.setFromRotationMatrix(ki),this.quaternion.premultiply(gs.invert()))}add(t){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return t===this?(console.error("THREE.Object3D.add: object can't be added as a child of itself.",t),this):(t&&t.isObject3D?(t.removeFromParent(),t.parent=this,this.children.push(t),t.dispatchEvent(Jl),ps.child=t,this.dispatchEvent(ps),ps.child=null):console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",t),this)}remove(t){if(arguments.length>1){for(let i=0;i<arguments.length;i++)this.remove(arguments[i]);return this}const e=this.children.indexOf(t);return e!==-1&&(t.parent=null,this.children.splice(e,1),t.dispatchEvent(Nd),Ho.child=t,this.dispatchEvent(Ho),Ho.child=null),this}removeFromParent(){const t=this.parent;return t!==null&&t.remove(this),this}clear(){return this.remove(...this.children)}attach(t){return this.updateWorldMatrix(!0,!1),ki.copy(this.matrixWorld).invert(),t.parent!==null&&(t.parent.updateWorldMatrix(!0,!1),ki.multiply(t.parent.matrixWorld)),t.applyMatrix4(ki),t.removeFromParent(),t.parent=this,this.children.push(t),t.updateWorldMatrix(!1,!0),t.dispatchEvent(Jl),ps.child=t,this.dispatchEvent(ps),ps.child=null,this}getObjectById(t){return this.getObjectByProperty("id",t)}getObjectByName(t){return this.getObjectByProperty("name",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let i=0,n=this.children.length;i<n;i++){const a=this.children[i].getObjectByProperty(t,e);if(a!==void 0)return a}}getObjectsByProperty(t,e,i=[]){this[t]===e&&i.push(this);const n=this.children;for(let r=0,a=n.length;r<a;r++)n[r].getObjectsByProperty(t,e,i);return i}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(qs,t,Dd),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(qs,Ld,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].traverse(t)}traverseVisible(t){if(this.visible===!1)return;t(this);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].traverseVisible(t)}traverseAncestors(t){const e=this.parent;e!==null&&(t(e),e.traverseAncestors(t))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,t=!0);const e=this.children;for(let i=0,n=e.length;i<n;i++)e[i].updateMatrixWorld(t)}updateWorldMatrix(t,e){const i=this.parent;if(t===!0&&i!==null&&i.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),e===!0){const n=this.children;for(let r=0,a=n.length;r<a;r++)n[r].updateWorldMatrix(!1,!0)}}toJSON(t){const e=t===void 0||typeof t=="string",i={};e&&(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},i.metadata={version:4.7,type:"Object",generator:"Object3D.toJSON"});const n={};n.uuid=this.uuid,n.type=this.type,this.name!==""&&(n.name=this.name),this.castShadow===!0&&(n.castShadow=!0),this.receiveShadow===!0&&(n.receiveShadow=!0),this.visible===!1&&(n.visible=!1),this.frustumCulled===!1&&(n.frustumCulled=!1),this.renderOrder!==0&&(n.renderOrder=this.renderOrder),Object.keys(this.userData).length>0&&(n.userData=this.userData),n.layers=this.layers.mask,n.matrix=this.matrix.toArray(),n.up=this.up.toArray(),this.matrixAutoUpdate===!1&&(n.matrixAutoUpdate=!1),this.isInstancedMesh&&(n.type="InstancedMesh",n.count=this.count,n.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(n.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(n.type="BatchedMesh",n.perObjectFrustumCulled=this.perObjectFrustumCulled,n.sortObjects=this.sortObjects,n.drawRanges=this._drawRanges,n.reservedRanges=this._reservedRanges,n.geometryInfo=this._geometryInfo.map(o=>({...o,boundingBox:o.boundingBox?o.boundingBox.toJSON():void 0,boundingSphere:o.boundingSphere?o.boundingSphere.toJSON():void 0})),n.instanceInfo=this._instanceInfo.map(o=>({...o})),n.availableInstanceIds=this._availableInstanceIds.slice(),n.availableGeometryIds=this._availableGeometryIds.slice(),n.nextIndexStart=this._nextIndexStart,n.nextVertexStart=this._nextVertexStart,n.geometryCount=this._geometryCount,n.maxInstanceCount=this._maxInstanceCount,n.maxVertexCount=this._maxVertexCount,n.maxIndexCount=this._maxIndexCount,n.geometryInitialized=this._geometryInitialized,n.matricesTexture=this._matricesTexture.toJSON(t),n.indirectTexture=this._indirectTexture.toJSON(t),this._colorsTexture!==null&&(n.colorsTexture=this._colorsTexture.toJSON(t)),this.boundingSphere!==null&&(n.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(n.boundingBox=this.boundingBox.toJSON()));function r(o,l){return o[l.uuid]===void 0&&(o[l.uuid]=l.toJSON(t)),l.uuid}if(this.isScene)this.background&&(this.background.isColor?n.background=this.background.toJSON():this.background.isTexture&&(n.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(n.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){n.geometry=r(t.geometries,this.geometry);const o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){const l=o.shapes;if(Array.isArray(l))for(let A=0,h=l.length;A<h;A++){const c=l[A];r(t.shapes,c)}else r(t.shapes,l)}}if(this.isSkinnedMesh&&(n.bindMode=this.bindMode,n.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(r(t.skeletons,this.skeleton),n.skeleton=this.skeleton.uuid)),this.material!==void 0)if(Array.isArray(this.material)){const o=[];for(let l=0,A=this.material.length;l<A;l++)o.push(r(t.materials,this.material[l]));n.material=o}else n.material=r(t.materials,this.material);if(this.children.length>0){n.children=[];for(let o=0;o<this.children.length;o++)n.children.push(this.children[o].toJSON(t).object)}if(this.animations.length>0){n.animations=[];for(let o=0;o<this.animations.length;o++){const l=this.animations[o];n.animations.push(r(t.animations,l))}}if(e){const o=a(t.geometries),l=a(t.materials),A=a(t.textures),h=a(t.images),c=a(t.shapes),u=a(t.skeletons),d=a(t.animations),p=a(t.nodes);o.length>0&&(i.geometries=o),l.length>0&&(i.materials=l),A.length>0&&(i.textures=A),h.length>0&&(i.images=h),c.length>0&&(i.shapes=c),u.length>0&&(i.skeletons=u),d.length>0&&(i.animations=d),p.length>0&&(i.nodes=p)}return i.object=n,i;function a(o){const l=[];for(const A in o){const h=o[A];delete h.metadata,l.push(h)}return l}}clone(t){return new this.constructor().copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.animations=t.animations.slice(),this.userData=JSON.parse(JSON.stringify(t.userData)),e===!0)for(let i=0;i<t.children.length;i++){const n=t.children[i];this.add(n.clone())}return this}}Ee.DEFAULT_UP=new B(0,1,0),Ee.DEFAULT_MATRIX_AUTO_UPDATE=!0,Ee.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;const fi=new B,Gi=new B,Vo=new B,Hi=new B,ms=new B,Cs=new B,Ql=new B,Wo=new B,Yo=new B,Xo=new B,Zo=new ce,jo=new ce,Jo=new ce;class gi{constructor(t=new B,e=new B,i=new B){this.a=t,this.b=e,this.c=i}static getNormal(t,e,i,n){n.subVectors(i,e),fi.subVectors(t,e),n.cross(fi);const r=n.lengthSq();return r>0?n.multiplyScalar(1/Math.sqrt(r)):n.set(0,0,0)}static getBarycoord(t,e,i,n,r){fi.subVectors(n,e),Gi.subVectors(i,e),Vo.subVectors(t,e);const a=fi.dot(fi),o=fi.dot(Gi),l=fi.dot(Vo),A=Gi.dot(Gi),h=Gi.dot(Vo),c=a*A-o*o;if(c===0)return r.set(0,0,0),null;const u=1/c,d=(A*l-o*h)*u,p=(a*h-o*l)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,i,n){return this.getBarycoord(t,e,i,n,Hi)===null?!1:Hi.x>=0&&Hi.y>=0&&Hi.x+Hi.y<=1}static getInterpolation(t,e,i,n,r,a,o,l){return this.getBarycoord(t,e,i,n,Hi)===null?(l.x=0,l.y=0,"z"in l&&(l.z=0),"w"in l&&(l.w=0),null):(l.setScalar(0),l.addScaledVector(r,Hi.x),l.addScaledVector(a,Hi.y),l.addScaledVector(o,Hi.z),l)}static getInterpolatedAttribute(t,e,i,n,r,a){return Zo.setScalar(0),jo.setScalar(0),Jo.setScalar(0),Zo.fromBufferAttribute(t,e),jo.fromBufferAttribute(t,i),Jo.fromBufferAttribute(t,n),a.setScalar(0),a.addScaledVector(Zo,r.x),a.addScaledVector(jo,r.y),a.addScaledVector(Jo,r.z),a}static isFrontFacing(t,e,i,n){return fi.subVectors(i,e),Gi.subVectors(t,e),fi.cross(Gi).dot(n)<0}set(t,e,i){return this.a.copy(t),this.b.copy(e),this.c.copy(i),this}setFromPointsAndIndices(t,e,i,n){return this.a.copy(t[e]),this.b.copy(t[i]),this.c.copy(t[n]),this}setFromAttributeAndIndices(t,e,i,n){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,i),this.c.fromBufferAttribute(t,n),this}clone(){return new this.constructor().copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return fi.subVectors(this.c,this.b),Gi.subVectors(this.a,this.b),fi.cross(Gi).length()*.5}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return gi.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return gi.getBarycoord(t,this.a,this.b,this.c,e)}getInterpolation(t,e,i,n,r){return gi.getInterpolation(t,this.a,this.b,this.c,e,i,n,r)}containsPoint(t){return gi.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return gi.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const i=this.a,n=this.b,r=this.c;let a,o;ms.subVectors(n,i),Cs.subVectors(r,i),Wo.subVectors(t,i);const l=ms.dot(Wo),A=Cs.dot(Wo);if(l<=0&&A<=0)return e.copy(i);Yo.subVectors(t,n);const h=ms.dot(Yo),c=Cs.dot(Yo);if(h>=0&&c<=h)return e.copy(n);const u=l*c-h*A;if(u<=0&&l>=0&&h<=0)return a=l/(l-h),e.copy(i).addScaledVector(ms,a);Xo.subVectors(t,r);const d=ms.dot(Xo),p=Cs.dot(Xo);if(p>=0&&d<=p)return e.copy(r);const m=d*A-l*p;if(m<=0&&A>=0&&p<=0)return o=A/(A-p),e.copy(i).addScaledVector(Cs,o);const g=h*p-d*c;if(g<=0&&c-h>=0&&d-p>=0)return Ql.subVectors(r,n),o=(c-h)/(c-h+(d-p)),e.copy(n).addScaledVector(Ql,o);const f=1/(g+m+u);return a=m*f,o=u*f,e.copy(i).addScaledVector(ms,a).addScaledVector(Cs,o)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}const ql={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},an={h:0,s:0,l:0},Vr={h:0,s:0,l:0};function Qo(s,t,e){return e<0&&(e+=1),e>1&&(e-=1),e<1/6?s+(t-s)*6*e:e<1/2?t:e<2/3?s+(t-s)*6*(2/3-e):s}class Wt{constructor(t,e,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(t,e,i)}set(t,e,i){if(e===void 0&&i===void 0){const n=t;n&&n.isColor?this.copy(n):typeof n=="number"?this.setHex(n):typeof n=="string"&&this.setStyle(n)}else this.setRGB(t,e,i);return this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=$e){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(t&255)/255,Xt.colorSpaceToWorking(this,e),this}setRGB(t,e,i,n=Xt.workingColorSpace){return this.r=t,this.g=e,this.b=i,Xt.colorSpaceToWorking(this,n),this}setHSL(t,e,i,n=Xt.workingColorSpace){if(t=Cd(t,1),e=kt(e,0,1),i=kt(i,0,1),e===0)this.r=this.g=this.b=i;else{const r=i<=.5?i*(1+e):i+e-i*e,a=2*i-r;this.r=Qo(a,r,t+1/3),this.g=Qo(a,r,t),this.b=Qo(a,r,t-1/3)}return Xt.colorSpaceToWorking(this,n),this}setStyle(t,e=$e){function i(r){r!==void 0&&parseFloat(r)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^(\w+)\(([^\)]*)\)/.exec(t)){let r;const a=n[1],o=n[2];switch(a){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setRGB(Math.min(255,parseInt(r[1],10))/255,Math.min(255,parseInt(r[2],10))/255,Math.min(255,parseInt(r[3],10))/255,e);if(r=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setRGB(Math.min(100,parseInt(r[1],10))/100,Math.min(100,parseInt(r[2],10))/100,Math.min(100,parseInt(r[3],10))/100,e);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setHSL(parseFloat(r[1])/360,parseFloat(r[2])/100,parseFloat(r[3])/100,e);break;default:console.warn("THREE.Color: Unknown color model "+t)}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(t)){const r=n[1],a=r.length;if(a===3)return this.setRGB(parseInt(r.charAt(0),16)/15,parseInt(r.charAt(1),16)/15,parseInt(r.charAt(2),16)/15,e);if(a===6)return this.setHex(parseInt(r,16),e);console.warn("THREE.Color: Invalid hex color "+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=$e){const i=ql[t.toLowerCase()];return i!==void 0?this.setHex(i,e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=Oi(t.r),this.g=Oi(t.g),this.b=Oi(t.b),this}copyLinearToSRGB(t){return this.r=As(t.r),this.g=As(t.g),this.b=As(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=$e){return Xt.workingToColorSpace(_e.copy(this),t),Math.round(kt(_e.r*255,0,255))*65536+Math.round(kt(_e.g*255,0,255))*256+Math.round(kt(_e.b*255,0,255))}getHexString(t=$e){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=Xt.workingColorSpace){Xt.workingToColorSpace(_e.copy(this),e);const i=_e.r,n=_e.g,r=_e.b,a=Math.max(i,n,r),o=Math.min(i,n,r);let l,A;const h=(o+a)/2;if(o===a)l=0,A=0;else{const c=a-o;switch(A=h<=.5?c/(a+o):c/(2-a-o),a){case i:l=(n-r)/c+(n<r?6:0);break;case n:l=(r-i)/c+2;break;case r:l=(i-n)/c+4;break}l/=6}return t.h=l,t.s=A,t.l=h,t}getRGB(t,e=Xt.workingColorSpace){return Xt.workingToColorSpace(_e.copy(this),e),t.r=_e.r,t.g=_e.g,t.b=_e.b,t}getStyle(t=$e){Xt.workingToColorSpace(_e.copy(this),t);const e=_e.r,i=_e.g,n=_e.b;return t!==$e?`color(${t} ${e.toFixed(3)} ${i.toFixed(3)} ${n.toFixed(3)})`:`rgb(${Math.round(e*255)},${Math.round(i*255)},${Math.round(n*255)})`}offsetHSL(t,e,i){return this.getHSL(an),this.setHSL(an.h+t,an.s+e,an.l+i)}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,i){return this.r=t.r+(e.r-t.r)*i,this.g=t.g+(e.g-t.g)*i,this.b=t.b+(e.b-t.b)*i,this}lerpHSL(t,e){this.getHSL(an),t.getHSL(Vr);const i=Ro(an.h,Vr.h,e),n=Ro(an.s,Vr.s,e),r=Ro(an.l,Vr.l,e);return this.setHSL(i,n,r),this}setFromVector3(t){return this.r=t.x,this.g=t.y,this.b=t.z,this}applyMatrix3(t){const e=this.r,i=this.g,n=this.b,r=t.elements;return this.r=r[0]*e+r[3]*i+r[6]*n,this.g=r[1]*e+r[4]*i+r[7]*n,this.b=r[2]*e+r[5]*i+r[8]*n,this}equals(t){return t.r===this.r&&t.g===this.g&&t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}}const _e=new Wt;Wt.NAMES=ql;let Bd=0;class Ks extends Sn{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:Bd++}),this.uuid=Xs(),this.name="",this.type="Material",this.blending=es,this.side=qi,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.alphaHash=!1,this.blendSrc=Oa,this.blendDst=Ua,this.blendEquation=xn,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.blendColor=new Wt(0,0,0),this.blendAlpha=0,this.depthFunc=is,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=Pl,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=as,this.stencilZFail=as,this.stencilZPass=as,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.allowOverride=!0,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(t){this._alphaTest>0!=t>0&&this.version++,this._alphaTest=t}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(t!==void 0)for(const e in t){const i=t[e];if(i===void 0){console.warn(`THREE.Material: parameter '${e}' has value of undefined.`);continue}const n=this[e];if(n===void 0){console.warn(`THREE.Material: '${e}' is not a property of THREE.${this.type}.`);continue}n&&n.isColor?n.set(i):n&&n.isVector3&&i&&i.isVector3?n.copy(i):this[e]=i}}toJSON(t){const e=t===void 0||typeof t=="string";e&&(t={textures:{},images:{}});const i={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};i.uuid=this.uuid,i.type=this.type,this.name!==""&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),this.roughness!==void 0&&(i.roughness=this.roughness),this.metalness!==void 0&&(i.metalness=this.metalness),this.sheen!==void 0&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(i.shininess=this.shininess),this.clearcoat!==void 0&&(i.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.dispersion!==void 0&&(i.dispersion=this.dispersion),this.iridescence!==void 0&&(i.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(i.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(t).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(t).uuid),this.anisotropy!==void 0&&(i.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(i.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(i.anisotropyMap=this.anisotropyMap.toJSON(t).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(t).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(t).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(t).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(t).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(t).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(t).uuid,this.combine!==void 0&&(i.combine=this.combine)),this.envMapRotation!==void 0&&(i.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(i.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(i.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(t).uuid),this.transmission!==void 0&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(t).uuid),this.thickness!==void 0&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(t).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(i.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(i.size=this.size),this.shadowSide!==null&&(i.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(i.sizeAttenuation=this.sizeAttenuation),this.blending!==es&&(i.blending=this.blending),this.side!==qi&&(i.side=this.side),this.vertexColors===!0&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),this.transparent===!0&&(i.transparent=!0),this.blendSrc!==Oa&&(i.blendSrc=this.blendSrc),this.blendDst!==Ua&&(i.blendDst=this.blendDst),this.blendEquation!==xn&&(i.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(i.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(i.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(i.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(i.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(i.blendAlpha=this.blendAlpha),this.depthFunc!==is&&(i.depthFunc=this.depthFunc),this.depthTest===!1&&(i.depthTest=this.depthTest),this.depthWrite===!1&&(i.depthWrite=this.depthWrite),this.colorWrite===!1&&(i.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(i.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==Pl&&(i.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(i.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==as&&(i.stencilFail=this.stencilFail),this.stencilZFail!==as&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==as&&(i.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(i.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(i.rotation=this.rotation),this.polygonOffset===!0&&(i.polygonOffset=!0),this.polygonOffsetFactor!==0&&(i.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(i.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(i.linewidth=this.linewidth),this.dashSize!==void 0&&(i.dashSize=this.dashSize),this.gapSize!==void 0&&(i.gapSize=this.gapSize),this.scale!==void 0&&(i.scale=this.scale),this.dithering===!0&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),this.alphaHash===!0&&(i.alphaHash=!0),this.alphaToCoverage===!0&&(i.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(i.premultipliedAlpha=!0),this.forceSinglePass===!0&&(i.forceSinglePass=!0),this.wireframe===!0&&(i.wireframe=!0),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(i.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(i.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(i.flatShading=!0),this.visible===!1&&(i.visible=!1),this.toneMapped===!1&&(i.toneMapped=!1),this.fog===!1&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData);function n(r){const a=[];for(const o in r){const l=r[o];delete l.metadata,a.push(l)}return a}if(e){const r=n(t.textures),a=n(t.images);r.length>0&&(i.textures=r),a.length>0&&(i.images=a)}return i}clone(){return new this.constructor().copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.blendColor.copy(t.blendColor),this.blendAlpha=t.blendAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let i=null;if(e!==null){const n=e.length;i=new Array(n);for(let r=0;r!==n;++r)i[r]=e[r].clone()}return this.clippingPlanes=i,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaHash=t.alphaHash,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.forceSinglePass=t.forceSinglePass,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){t===!0&&this.version++}}class Kl extends Ks{constructor(t){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new Wt(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new xi,this.combine=xl,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}const me=new B,Wr=new Nt;let Fd=0;class vi{constructor(t,e,i=!1){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:Fd++}),this.name="",this.array=t,this.itemSize=e,this.count=t!==void 0?t.length/e:0,this.normalized=i,this.usage=Ll,this.updateRanges=[],this.gpuType=Fi,this.version=0}onUploadCallback(){}set needsUpdate(t){t===!0&&this.version++}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this.gpuType=t.gpuType,this}copyAt(t,e,i){t*=this.itemSize,i*=e.itemSize;for(let n=0,r=this.itemSize;n<r;n++)this.array[t+n]=e.array[i+n];return this}copyArray(t){return this.array.set(t),this}applyMatrix3(t){if(this.itemSize===2)for(let e=0,i=this.count;e<i;e++)Wr.fromBufferAttribute(this,e),Wr.applyMatrix3(t),this.setXY(e,Wr.x,Wr.y);else if(this.itemSize===3)for(let e=0,i=this.count;e<i;e++)me.fromBufferAttribute(this,e),me.applyMatrix3(t),this.setXYZ(e,me.x,me.y,me.z);return this}applyMatrix4(t){for(let e=0,i=this.count;e<i;e++)me.fromBufferAttribute(this,e),me.applyMatrix4(t),this.setXYZ(e,me.x,me.y,me.z);return this}applyNormalMatrix(t){for(let e=0,i=this.count;e<i;e++)me.fromBufferAttribute(this,e),me.applyNormalMatrix(t),this.setXYZ(e,me.x,me.y,me.z);return this}transformDirection(t){for(let e=0,i=this.count;e<i;e++)me.fromBufferAttribute(this,e),me.transformDirection(t),this.setXYZ(e,me.x,me.y,me.z);return this}set(t,e=0){return this.array.set(t,e),this}getComponent(t,e){let i=this.array[t*this.itemSize+e];return this.normalized&&(i=Zs(i,this.array)),i}setComponent(t,e,i){return this.normalized&&(i=Ue(i,this.array)),this.array[t*this.itemSize+e]=i,this}getX(t){let e=this.array[t*this.itemSize];return this.normalized&&(e=Zs(e,this.array)),e}setX(t,e){return this.normalized&&(e=Ue(e,this.array)),this.array[t*this.itemSize]=e,this}getY(t){let e=this.array[t*this.itemSize+1];return this.normalized&&(e=Zs(e,this.array)),e}setY(t,e){return this.normalized&&(e=Ue(e,this.array)),this.array[t*this.itemSize+1]=e,this}getZ(t){let e=this.array[t*this.itemSize+2];return this.normalized&&(e=Zs(e,this.array)),e}setZ(t,e){return this.normalized&&(e=Ue(e,this.array)),this.array[t*this.itemSize+2]=e,this}getW(t){let e=this.array[t*this.itemSize+3];return this.normalized&&(e=Zs(e,this.array)),e}setW(t,e){return this.normalized&&(e=Ue(e,this.array)),this.array[t*this.itemSize+3]=e,this}setXY(t,e,i){return t*=this.itemSize,this.normalized&&(e=Ue(e,this.array),i=Ue(i,this.array)),this.array[t+0]=e,this.array[t+1]=i,this}setXYZ(t,e,i,n){return t*=this.itemSize,this.normalized&&(e=Ue(e,this.array),i=Ue(i,this.array),n=Ue(n,this.array)),this.array[t+0]=e,this.array[t+1]=i,this.array[t+2]=n,this}setXYZW(t,e,i,n,r){return t*=this.itemSize,this.normalized&&(e=Ue(e,this.array),i=Ue(i,this.array),n=Ue(n,this.array),r=Ue(r,this.array)),this.array[t+0]=e,this.array[t+1]=i,this.array[t+2]=n,this.array[t+3]=r,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){const t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return this.name!==""&&(t.name=this.name),this.usage!==Ll&&(t.usage=this.usage),t}}class $l extends vi{constructor(t,e,i){super(new Uint16Array(t),e,i)}}class th extends vi{constructor(t,e,i){super(new Uint32Array(t),e,i)}}class _n extends vi{constructor(t,e,i){super(new Float32Array(t),e,i)}}let Od=0;const ti=new de,qo=new Ee,Is=new B,Xe=new hs,$s=new hs,ye=new B;class Rn extends Sn{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:Od++}),this.uuid=Xs(),this.name="",this.type="BufferGeometry",this.index=null,this.indirect=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(Fl(t)?th:$l)(t,1):this.index=t,this}setIndirect(t){return this.indirect=t,this}getIndirect(){return this.indirect}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return this.attributes[t]!==void 0}addGroup(t,e,i=0){this.groups.push({start:t,count:e,materialIndex:i})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;e!==void 0&&(e.applyMatrix4(t),e.needsUpdate=!0);const i=this.attributes.normal;if(i!==void 0){const r=new Bt().getNormalMatrix(t);i.applyNormalMatrix(r),i.needsUpdate=!0}const n=this.attributes.tangent;return n!==void 0&&(n.transformDirection(t),n.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}applyQuaternion(t){return ti.makeRotationFromQuaternion(t),this.applyMatrix4(ti),this}rotateX(t){return ti.makeRotationX(t),this.applyMatrix4(ti),this}rotateY(t){return ti.makeRotationY(t),this.applyMatrix4(ti),this}rotateZ(t){return ti.makeRotationZ(t),this.applyMatrix4(ti),this}translate(t,e,i){return ti.makeTranslation(t,e,i),this.applyMatrix4(ti),this}scale(t,e,i){return ti.makeScale(t,e,i),this.applyMatrix4(ti),this}lookAt(t){return qo.lookAt(t),qo.updateMatrix(),this.applyMatrix4(qo.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Is).negate(),this.translate(Is.x,Is.y,Is.z),this}setFromPoints(t){const e=this.getAttribute("position");if(e===void 0){const i=[];for(let n=0,r=t.length;n<r;n++){const a=t[n];i.push(a.x,a.y,a.z||0)}this.setAttribute("position",new _n(i,3))}else{const i=Math.min(t.length,e.count);for(let n=0;n<i;n++){const r=t[n];e.setXYZ(n,r.x,r.y,r.z||0)}t.length>e.count&&console.warn("THREE.BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),e.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new hs);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new B(-1/0,-1/0,-1/0),new B(1/0,1/0,1/0));return}if(t!==void 0){if(this.boundingBox.setFromBufferAttribute(t),e)for(let i=0,n=e.length;i<n;i++){const r=e[i];Xe.setFromBufferAttribute(r),this.morphTargetsRelative?(ye.addVectors(this.boundingBox.min,Xe.min),this.boundingBox.expandByPoint(ye),ye.addVectors(this.boundingBox.max,Xe.max),this.boundingBox.expandByPoint(ye)):(this.boundingBox.expandByPoint(Xe.min),this.boundingBox.expandByPoint(Xe.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new Uo);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.",this),this.boundingSphere.set(new B,1/0);return}if(t){const i=this.boundingSphere.center;if(Xe.setFromBufferAttribute(t),e)for(let r=0,a=e.length;r<a;r++){const o=e[r];$s.setFromBufferAttribute(o),this.morphTargetsRelative?(ye.addVectors(Xe.min,$s.min),Xe.expandByPoint(ye),ye.addVectors(Xe.max,$s.max),Xe.expandByPoint(ye)):(Xe.expandByPoint($s.min),Xe.expandByPoint($s.max))}Xe.getCenter(i);let n=0;for(let r=0,a=t.count;r<a;r++)ye.fromBufferAttribute(t,r),n=Math.max(n,i.distanceToSquared(ye));if(e)for(let r=0,a=e.length;r<a;r++){const o=e[r],l=this.morphTargetsRelative;for(let A=0,h=o.count;A<h;A++)ye.fromBufferAttribute(o,A),l&&(Is.fromBufferAttribute(t,A),ye.add(Is)),n=Math.max(n,i.distanceToSquared(ye))}this.boundingSphere.radius=Math.sqrt(n),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}computeTangents(){const t=this.index,e=this.attributes;if(t===null||e.position===void 0||e.normal===void 0||e.uv===void 0){console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)");return}const i=e.position,n=e.normal,r=e.uv;this.hasAttribute("tangent")===!1&&this.setAttribute("tangent",new vi(new Float32Array(4*i.count),4));const a=this.getAttribute("tangent"),o=[],l=[];for(let P=0;P<i.count;P++)o[P]=new B,l[P]=new B;const A=new B,h=new B,c=new B,u=new Nt,d=new Nt,p=new Nt,m=new B,g=new B;function f(P,E,v){A.fromBufferAttribute(i,P),h.fromBufferAttribute(i,E),c.fromBufferAttribute(i,v),u.fromBufferAttribute(r,P),d.fromBufferAttribute(r,E),p.fromBufferAttribute(r,v),h.sub(A),c.sub(A),d.sub(u),p.sub(u);const b=1/(d.x*p.y-p.x*d.y);isFinite(b)&&(m.copy(h).multiplyScalar(p.y).addScaledVector(c,-d.y).multiplyScalar(b),g.copy(c).multiplyScalar(d.x).addScaledVector(h,-p.x).multiplyScalar(b),o[P].add(m),o[E].add(m),o[v].add(m),l[P].add(g),l[E].add(g),l[v].add(g))}let M=this.groups;M.length===0&&(M=[{start:0,count:t.count}]);for(let P=0,E=M.length;P<E;++P){const v=M[P],b=v.start,z=v.count;for(let F=b,U=b+z;F<U;F+=3)f(t.getX(F+0),t.getX(F+1),t.getX(F+2))}const y=new B,x=new B,w=new B,T=new B;function _(P){w.fromBufferAttribute(n,P),T.copy(w);const E=o[P];y.copy(E),y.sub(w.multiplyScalar(w.dot(E))).normalize(),x.crossVectors(T,E);const b=x.dot(l[P])<0?-1:1;a.setXYZW(P,y.x,y.y,y.z,b)}for(let P=0,E=M.length;P<E;++P){const v=M[P],b=v.start,z=v.count;for(let F=b,U=b+z;F<U;F+=3)_(t.getX(F+0)),_(t.getX(F+1)),_(t.getX(F+2))}}computeVertexNormals(){const t=this.index,e=this.getAttribute("position");if(e!==void 0){let i=this.getAttribute("normal");if(i===void 0)i=new vi(new Float32Array(e.count*3),3),this.setAttribute("normal",i);else for(let u=0,d=i.count;u<d;u++)i.setXYZ(u,0,0,0);const n=new B,r=new B,a=new B,o=new B,l=new B,A=new B,h=new B,c=new B;if(t)for(let u=0,d=t.count;u<d;u+=3){const p=t.getX(u+0),m=t.getX(u+1),g=t.getX(u+2);n.fromBufferAttribute(e,p),r.fromBufferAttribute(e,m),a.fromBufferAttribute(e,g),h.subVectors(a,r),c.subVectors(n,r),h.cross(c),o.fromBufferAttribute(i,p),l.fromBufferAttribute(i,m),A.fromBufferAttribute(i,g),o.add(h),l.add(h),A.add(h),i.setXYZ(p,o.x,o.y,o.z),i.setXYZ(m,l.x,l.y,l.z),i.setXYZ(g,A.x,A.y,A.z)}else for(let u=0,d=e.count;u<d;u+=3)n.fromBufferAttribute(e,u+0),r.fromBufferAttribute(e,u+1),a.fromBufferAttribute(e,u+2),h.subVectors(a,r),c.subVectors(n,r),h.cross(c),i.setXYZ(u+0,h.x,h.y,h.z),i.setXYZ(u+1,h.x,h.y,h.z),i.setXYZ(u+2,h.x,h.y,h.z);this.normalizeNormals(),i.needsUpdate=!0}}normalizeNormals(){const t=this.attributes.normal;for(let e=0,i=t.count;e<i;e++)ye.fromBufferAttribute(t,e),ye.normalize(),t.setXYZ(e,ye.x,ye.y,ye.z)}toNonIndexed(){function t(o,l){const A=o.array,h=o.itemSize,c=o.normalized,u=new A.constructor(l.length*h);let d=0,p=0;for(let m=0,g=l.length;m<g;m++){o.isInterleavedBufferAttribute?d=l[m]*o.data.stride+o.offset:d=l[m]*h;for(let f=0;f<h;f++)u[p++]=A[d++]}return new vi(u,h,c)}if(this.index===null)return console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."),this;const e=new Rn,i=this.index.array,n=this.attributes;for(const o in n){const l=n[o],A=t(l,i);e.setAttribute(o,A)}const r=this.morphAttributes;for(const o in r){const l=[],A=r[o];for(let h=0,c=A.length;h<c;h++){const u=A[h],d=t(u,i);l.push(d)}e.morphAttributes[o]=l}e.morphTargetsRelative=this.morphTargetsRelative;const a=this.groups;for(let o=0,l=a.length;o<l;o++){const A=a[o];e.addGroup(A.start,A.count,A.materialIndex)}return e}toJSON(){const t={metadata:{version:4.7,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};if(t.uuid=this.uuid,t.type=this.type,this.name!==""&&(t.name=this.name),Object.keys(this.userData).length>0&&(t.userData=this.userData),this.parameters!==void 0){const l=this.parameters;for(const A in l)l[A]!==void 0&&(t[A]=l[A]);return t}t.data={attributes:{}};const e=this.index;e!==null&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const i=this.attributes;for(const l in i){const A=i[l];t.data.attributes[l]=A.toJSON(t.data)}const n={};let r=!1;for(const l in this.morphAttributes){const A=this.morphAttributes[l],h=[];for(let c=0,u=A.length;c<u;c++){const d=A[c];h.push(d.toJSON(t.data))}h.length>0&&(n[l]=h,r=!0)}r&&(t.data.morphAttributes=n,t.data.morphTargetsRelative=this.morphTargetsRelative);const a=this.groups;a.length>0&&(t.data.groups=JSON.parse(JSON.stringify(a)));const o=this.boundingSphere;return o!==null&&(t.data.boundingSphere=o.toJSON()),t}clone(){return new this.constructor().copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const i=t.index;i!==null&&this.setIndex(i.clone());const n=t.attributes;for(const A in n){const h=n[A];this.setAttribute(A,h.clone(e))}const r=t.morphAttributes;for(const A in r){const h=[],c=r[A];for(let u=0,d=c.length;u<d;u++)h.push(c[u].clone(e));this.morphAttributes[A]=h}this.morphTargetsRelative=t.morphTargetsRelative;const a=t.groups;for(let A=0,h=a.length;A<h;A++){const c=a[A];this.addGroup(c.start,c.count,c.materialIndex)}const o=t.boundingBox;o!==null&&(this.boundingBox=o.clone());const l=t.boundingSphere;return l!==null&&(this.boundingSphere=l.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,this}dispose(){this.dispatchEvent({type:"dispose"})}}const eh=new de,Pn=new Gl,Yr=new Uo,ih=new B,Xr=new B,Zr=new B,jr=new B,Ko=new B,Jr=new B,nh=new B,Qr=new B;class Ei extends Ee{constructor(t=new Rn,e=new Kl){super(),this.isMesh=!0,this.type="Mesh",this.geometry=t,this.material=e,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.count=1,this.updateMorphTargets()}copy(t,e){return super.copy(t,e),t.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),t.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=Array.isArray(t.material)?t.material.slice():t.material,this.geometry=t.geometry,this}updateMorphTargets(){const e=this.geometry.morphAttributes,i=Object.keys(e);if(i.length>0){const n=e[i[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,a=n.length;r<a;r++){const o=n[r].name||String(r);this.morphTargetInfluences.push(0),this.morphTargetDictionary[o]=r}}}}getVertexPosition(t,e){const i=this.geometry,n=i.attributes.position,r=i.morphAttributes.position,a=i.morphTargetsRelative;e.fromBufferAttribute(n,t);const o=this.morphTargetInfluences;if(r&&o){Jr.set(0,0,0);for(let l=0,A=r.length;l<A;l++){const h=o[l],c=r[l];h!==0&&(Ko.fromBufferAttribute(c,t),a?Jr.addScaledVector(Ko,h):Jr.addScaledVector(Ko.sub(e),h))}e.add(Jr)}return e}raycast(t,e){const i=this.geometry,n=this.material,r=this.matrixWorld;n!==void 0&&(i.boundingSphere===null&&i.computeBoundingSphere(),Yr.copy(i.boundingSphere),Yr.applyMatrix4(r),Pn.copy(t.ray).recast(t.near),!(Yr.containsPoint(Pn.origin)===!1&&(Pn.intersectSphere(Yr,ih)===null||Pn.origin.distanceToSquared(ih)>(t.far-t.near)**2))&&(eh.copy(r).invert(),Pn.copy(t.ray).applyMatrix4(eh),!(i.boundingBox!==null&&Pn.intersectsBox(i.boundingBox)===!1)&&this._computeIntersections(t,e,Pn)))}_computeIntersections(t,e,i){let n;const r=this.geometry,a=this.material,o=r.index,l=r.attributes.position,A=r.attributes.uv,h=r.attributes.uv1,c=r.attributes.normal,u=r.groups,d=r.drawRange;if(o!==null)if(Array.isArray(a))for(let p=0,m=u.length;p<m;p++){const g=u[p],f=a[g.materialIndex],M=Math.max(g.start,d.start),y=Math.min(o.count,Math.min(g.start+g.count,d.start+d.count));for(let x=M,w=y;x<w;x+=3){const T=o.getX(x),_=o.getX(x+1),P=o.getX(x+2);n=qr(this,f,t,i,A,h,c,T,_,P),n&&(n.faceIndex=Math.floor(x/3),n.face.materialIndex=g.materialIndex,e.push(n))}}else{const p=Math.max(0,d.start),m=Math.min(o.count,d.start+d.count);for(let g=p,f=m;g<f;g+=3){const M=o.getX(g),y=o.getX(g+1),x=o.getX(g+2);n=qr(this,a,t,i,A,h,c,M,y,x),n&&(n.faceIndex=Math.floor(g/3),e.push(n))}}else if(l!==void 0)if(Array.isArray(a))for(let p=0,m=u.length;p<m;p++){const g=u[p],f=a[g.materialIndex],M=Math.max(g.start,d.start),y=Math.min(l.count,Math.min(g.start+g.count,d.start+d.count));for(let x=M,w=y;x<w;x+=3){const T=x,_=x+1,P=x+2;n=qr(this,f,t,i,A,h,c,T,_,P),n&&(n.faceIndex=Math.floor(x/3),n.face.materialIndex=g.materialIndex,e.push(n))}}else{const p=Math.max(0,d.start),m=Math.min(l.count,d.start+d.count);for(let g=p,f=m;g<f;g+=3){const M=g,y=g+1,x=g+2;n=qr(this,a,t,i,A,h,c,M,y,x),n&&(n.faceIndex=Math.floor(g/3),e.push(n))}}}}function Ud(s,t,e,i,n,r,a,o){let l;if(t.side===Oe?l=i.intersectTriangle(a,r,n,!0,o):l=i.intersectTriangle(n,r,a,t.side===qi,o),l===null)return null;Qr.copy(o),Qr.applyMatrix4(s.matrixWorld);const A=e.ray.origin.distanceTo(Qr);return A<e.near||A>e.far?null:{distance:A,point:Qr.clone(),object:s}}function qr(s,t,e,i,n,r,a,o,l,A){s.getVertexPosition(o,Xr),s.getVertexPosition(l,Zr),s.getVertexPosition(A,jr);const h=Ud(s,t,e,i,Xr,Zr,jr,nh);if(h){const c=new B;gi.getBarycoord(nh,Xr,Zr,jr,c),n&&(h.uv=gi.getInterpolatedAttribute(n,o,l,A,c,new Nt)),r&&(h.uv1=gi.getInterpolatedAttribute(r,o,l,A,c,new Nt)),a&&(h.normal=gi.getInterpolatedAttribute(a,o,l,A,c,new B),h.normal.dot(i.direction)>0&&h.normal.multiplyScalar(-1));const u={a:o,b:l,c:A,normal:new B,materialIndex:0};gi.getNormal(Xr,Zr,jr,u.normal),h.face=u,h.barycoord=c}return h}class tr extends Rn{constructor(t=1,e=1,i=1,n=1,r=1,a=1){super(),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:i,widthSegments:n,heightSegments:r,depthSegments:a};const o=this;n=Math.floor(n),r=Math.floor(r),a=Math.floor(a);const l=[],A=[],h=[],c=[];let u=0,d=0;p("z","y","x",-1,-1,i,e,t,a,r,0),p("z","y","x",1,-1,i,e,-t,a,r,1),p("x","z","y",1,1,t,i,e,n,a,2),p("x","z","y",1,-1,t,i,-e,n,a,3),p("x","y","z",1,-1,t,e,i,n,r,4),p("x","y","z",-1,-1,t,e,-i,n,r,5),this.setIndex(l),this.setAttribute("position",new _n(A,3)),this.setAttribute("normal",new _n(h,3)),this.setAttribute("uv",new _n(c,2));function p(m,g,f,M,y,x,w,T,_,P,E){const v=x/_,b=w/P,z=x/2,F=w/2,U=T/2,W=_+1,Y=P+1;let $=0,H=0;const rt=new B;for(let lt=0;lt<Y;lt++){const mt=lt*b-F;for(let Ut=0;Ut<W;Ut++){const re=Ut*v-z;rt[m]=re*M,rt[g]=mt*y,rt[f]=U,A.push(rt.x,rt.y,rt.z),rt[m]=0,rt[g]=0,rt[f]=T>0?1:-1,h.push(rt.x,rt.y,rt.z),c.push(Ut/_),c.push(1-lt/P),$+=1}}for(let lt=0;lt<P;lt++)for(let mt=0;mt<_;mt++){const Ut=u+mt+W*lt,re=u+mt+W*(lt+1),te=u+(mt+1)+W*(lt+1),j=u+(mt+1)+W*lt;l.push(Ut,re,j),l.push(re,te,j),H+=6}o.addGroup(d,H,E),d+=H,u+=$}}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new tr(t.width,t.height,t.depth,t.widthSegments,t.heightSegments,t.depthSegments)}}function xs(s){const t={};for(const e in s){t[e]={};for(const i in s[e]){const n=s[e][i];n&&(n.isColor||n.isMatrix3||n.isMatrix4||n.isVector2||n.isVector3||n.isVector4||n.isTexture||n.isQuaternion)?n.isRenderTargetTexture?(console.warn("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."),t[e][i]=null):t[e][i]=n.clone():Array.isArray(n)?t[e][i]=n.slice():t[e][i]=n}}return t}function Pe(s){const t={};for(let e=0;e<s.length;e++){const i=xs(s[e]);for(const n in i)t[n]=i[n]}return t}function zd(s){const t=[];for(let e=0;e<s.length;e++)t.push(s[e].clone());return t}function sh(s){const t=s.getRenderTarget();return t===null?s.outputColorSpace:t.isXRRenderTarget===!0?t.texture.colorSpace:Xt.workingColorSpace}const kd={clone:xs,merge:Pe};var Gd=`void main() {
|
|
125
125
|
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
126
|
-
}`,
|
|
126
|
+
}`,Hd=`void main() {
|
|
127
127
|
gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );
|
|
128
|
-
}`;class on extends
|
|
128
|
+
}`;class on extends Ks{constructor(t){super(),this.isShaderMaterial=!0,this.type="ShaderMaterial",this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=Gd,this.fragmentShader=Hd,this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.forceSinglePass=!0,this.extensions={clipCullDistance:!1,multiDraw:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv1:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,t!==void 0&&this.setValues(t)}copy(t){return super.copy(t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=xs(t.uniforms),this.uniformsGroups=zd(t.uniformsGroups),this.defines=Object.assign({},t.defines),this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.fog=t.fog,this.lights=t.lights,this.clipping=t.clipping,this.extensions=Object.assign({},t.extensions),this.glslVersion=t.glslVersion,this}toJSON(t){const e=super.toJSON(t);e.glslVersion=this.glslVersion,e.uniforms={};for(const n in this.uniforms){const a=this.uniforms[n].value;a&&a.isTexture?e.uniforms[n]={type:"t",value:a.toJSON(t).uuid}:a&&a.isColor?e.uniforms[n]={type:"c",value:a.getHex()}:a&&a.isVector2?e.uniforms[n]={type:"v2",value:a.toArray()}:a&&a.isVector3?e.uniforms[n]={type:"v3",value:a.toArray()}:a&&a.isVector4?e.uniforms[n]={type:"v4",value:a.toArray()}:a&&a.isMatrix3?e.uniforms[n]={type:"m3",value:a.toArray()}:a&&a.isMatrix4?e.uniforms[n]={type:"m4",value:a.toArray()}:e.uniforms[n]={value:a}}Object.keys(this.defines).length>0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e.lights=this.lights,e.clipping=this.clipping;const i={};for(const n in this.extensions)this.extensions[n]===!0&&(i[n]=!0);return Object.keys(i).length>0&&(e.extensions=i),e}}class rh extends Ee{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new de,this.projectionMatrix=new de,this.projectionMatrixInverse=new de,this.coordinateSystem=Ii,this._reversedDepth=!1}get reversedDepth(){return this._reversedDepth}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this.coordinateSystem=t.coordinateSystem,this}getWorldDirection(t){return super.getWorldDirection(t).negate()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}}const An=new B,ah=new Nt,oh=new Nt;class Ze extends rh{constructor(t=50,e=1,i=.1,n=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=t,this.zoom=1,this.near=i,this.far=n,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=t.view===null?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=Br*2*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(Nr*.5*this.fov);return .5*this.getFilmHeight()/t}getEffectiveFOV(){return Br*2*Math.atan(Math.tan(Nr*.5*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(t,e,i){An.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),e.set(An.x,An.y).multiplyScalar(-t/An.z),An.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),i.set(An.x,An.y).multiplyScalar(-t/An.z)}getViewSize(t,e){return this.getViewBounds(t,ah,oh),e.subVectors(oh,ah)}setViewOffset(t,e,i,n,r,a){this.aspect=t/e,this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=i,this.view.offsetY=n,this.view.width=r,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(Nr*.5*this.fov)/this.zoom,i=2*e,n=this.aspect*i,r=-.5*n;const a=this.view;if(this.view!==null&&this.view.enabled){const l=a.fullWidth,A=a.fullHeight;r+=a.offsetX*n/l,e-=a.offsetY*i/A,n*=a.width/l,i*=a.height/A}const o=this.filmOffset;o!==0&&(r+=t*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+n,e,e-i,t,this.far,this.coordinateSystem,this.reversedDepth),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,this.view!==null&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}const vs=-90,Es=1;class Vd extends Ee{constructor(t,e,i){super(),this.type="CubeCamera",this.renderTarget=i,this.coordinateSystem=null,this.activeMipmapLevel=0;const n=new Ze(vs,Es,t,e);n.layers=this.layers,this.add(n);const r=new Ze(vs,Es,t,e);r.layers=this.layers,this.add(r);const a=new Ze(vs,Es,t,e);a.layers=this.layers,this.add(a);const o=new Ze(vs,Es,t,e);o.layers=this.layers,this.add(o);const l=new Ze(vs,Es,t,e);l.layers=this.layers,this.add(l);const A=new Ze(vs,Es,t,e);A.layers=this.layers,this.add(A)}updateCoordinateSystem(){const t=this.coordinateSystem,e=this.children.concat(),[i,n,r,a,o,l]=e;for(const A of e)this.remove(A);if(t===Ii)i.up.set(0,1,0),i.lookAt(1,0,0),n.up.set(0,1,0),n.lookAt(-1,0,0),r.up.set(0,0,-1),r.lookAt(0,1,0),a.up.set(0,0,1),a.lookAt(0,-1,0),o.up.set(0,1,0),o.lookAt(0,0,1),l.up.set(0,1,0),l.lookAt(0,0,-1);else if(t===Lr)i.up.set(0,-1,0),i.lookAt(-1,0,0),n.up.set(0,-1,0),n.lookAt(1,0,0),r.up.set(0,0,1),r.lookAt(0,1,0),a.up.set(0,0,-1),a.lookAt(0,-1,0),o.up.set(0,-1,0),o.lookAt(0,0,1),l.up.set(0,-1,0),l.lookAt(0,0,-1);else throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+t);for(const A of e)this.add(A),A.updateMatrixWorld()}update(t,e){this.parent===null&&this.updateMatrixWorld();const{renderTarget:i,activeMipmapLevel:n}=this;this.coordinateSystem!==t.coordinateSystem&&(this.coordinateSystem=t.coordinateSystem,this.updateCoordinateSystem());const[r,a,o,l,A,h]=this.children,c=t.getRenderTarget(),u=t.getActiveCubeFace(),d=t.getActiveMipmapLevel(),p=t.xr.enabled;t.xr.enabled=!1;const m=i.texture.generateMipmaps;i.texture.generateMipmaps=!1,t.setRenderTarget(i,0,n),t.render(e,r),t.setRenderTarget(i,1,n),t.render(e,a),t.setRenderTarget(i,2,n),t.render(e,o),t.setRenderTarget(i,3,n),t.render(e,l),t.setRenderTarget(i,4,n),t.render(e,A),i.texture.generateMipmaps=m,t.setRenderTarget(i,5,n),t.render(e,h),t.setRenderTarget(c,u,d),t.xr.enabled=p,i.texture.needsPMREMUpdate=!0}}class Ah extends Re{constructor(t=[],e=ns,i,n,r,a,o,l,A,h){super(t,e,i,n,r,a,o,l,A,h),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}class Wd extends bn{constructor(t=1,e={}){super(t,t,e),this.isWebGLCubeRenderTarget=!0;const i={width:t,height:t,depth:1},n=[i,i,i,i,i,i];this.texture=new Ah(n),this._setTextureOptions(e),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.colorSpace=e.colorSpace,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const i={uniforms:{tEquirect:{value:null}},vertexShader:`
|
|
129
129
|
|
|
130
130
|
varying vec3 vWorldDirection;
|
|
131
131
|
|
|
@@ -160,9 +160,9 @@ void main() {
|
|
|
160
160
|
gl_FragColor = texture2D( tEquirect, sampleUV );
|
|
161
161
|
|
|
162
162
|
}
|
|
163
|
-
`},n=new tr(5,5,5),r=new on({name:"CubemapFromEquirect",uniforms:ys(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:Ue,blending:Ji});r.uniforms.tEquirect.value=e;const a=new Si(n,r),o=e.minFilter;return e.minFilter===Sn&&(e.minFilter=_i),new Wf(1,10,this).update(t,a),e.minFilter=o,a.geometry.dispose(),a.material.dispose(),this}clear(t,e=!0,i=!0,n=!0){const r=t.getRenderTarget();for(let a=0;a<6;a++)t.setRenderTarget(this,a),t.clear(e,i,n);t.setRenderTarget(r)}}class er extends Se{constructor(){super(),this.isGroup=!0,this.type="Group"}}const qf={type:"move"};class Qo{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return this._hand===null&&(this._hand=new er,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new er,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new N,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new N),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new er,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new N,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new N),this._grip}dispatchEvent(t){return this._targetRay!==null&&this._targetRay.dispatchEvent(t),this._grip!==null&&this._grip.dispatchEvent(t),this._hand!==null&&this._hand.dispatchEvent(t),this}connect(t){if(t&&t.hand){const e=this._hand;if(e)for(const i of t.hand.values())this._getHandJoint(e,i)}return this.dispatchEvent({type:"connected",data:t}),this}disconnect(t){return this.dispatchEvent({type:"disconnected",data:t}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}update(t,e,i){let n=null,r=null,a=null;const o=this._targetRay,h=this._grip,l=this._hand;if(t&&e.session.visibilityState!=="visible-blurred"){if(l&&t.hand){a=!0;for(const _ of t.hand.values()){const m=e.getJointPose(_,i),p=this._getHandJoint(l,_);m!==null&&(p.matrix.fromArray(m.transform.matrix),p.matrix.decompose(p.position,p.rotation,p.scale),p.matrixWorldNeedsUpdate=!0,p.jointRadius=m.radius),p.visible=m!==null}const c=l.joints["index-finger-tip"],u=l.joints["thumb-tip"],d=c.position.distanceTo(u.position),f=.02,g=.005;l.inputState.pinching&&d>f+g?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!l.inputState.pinching&&d<=f-g&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else h!==null&&t.gripSpace&&(r=e.getPose(t.gripSpace,i),r!==null&&(h.matrix.fromArray(r.transform.matrix),h.matrix.decompose(h.position,h.rotation,h.scale),h.matrixWorldNeedsUpdate=!0,r.linearVelocity?(h.hasLinearVelocity=!0,h.linearVelocity.copy(r.linearVelocity)):h.hasLinearVelocity=!1,r.angularVelocity?(h.hasAngularVelocity=!0,h.angularVelocity.copy(r.angularVelocity)):h.hasAngularVelocity=!1));o!==null&&(n=e.getPose(t.targetRaySpace,i),n===null&&r!==null&&(n=r),n!==null&&(o.matrix.fromArray(n.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,n.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(n.linearVelocity)):o.hasLinearVelocity=!1,n.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(n.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(qf)))}return o!==null&&(o.visible=n!==null),h!==null&&(h.visible=r!==null),l!==null&&(l.visible=a!==null),this}_getHandJoint(t,e){if(t.joints[e.jointName]===void 0){const i=new er;i.matrixAutoUpdate=!1,i.visible=!1,t.joints[e.jointName]=i,t.add(i)}return t.joints[e.jointName]}}class tl{constructor(t,e=1,i=1e3){this.isFog=!0,this.name="",this.color=new Vt(t),this.near=e,this.far=i}clone(){return new tl(this.color,this.near,this.far)}toJSON(){return{type:"Fog",name:this.name,color:this.color.getHex(),near:this.near,far:this.far}}}class Yf extends Se{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new yi,this.environmentIntensity=1,this.environmentRotation=new yi,this.overrideMaterial=null,typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),t.background!==null&&(this.background=t.background.clone()),t.environment!==null&&(this.environment=t.environment.clone()),t.fog!==null&&(this.fog=t.fog.clone()),this.backgroundBlurriness=t.backgroundBlurriness,this.backgroundIntensity=t.backgroundIntensity,this.backgroundRotation.copy(t.backgroundRotation),this.environmentIntensity=t.environmentIntensity,this.environmentRotation.copy(t.environmentRotation),t.overrideMaterial!==null&&(this.overrideMaterial=t.overrideMaterial.clone()),this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return this.fog!==null&&(e.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(e.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(e.object.backgroundIntensity=this.backgroundIntensity),e.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1&&(e.object.environmentIntensity=this.environmentIntensity),e.object.environmentRotation=this.environmentRotation.toArray(),e}}const el=new N,jf=new N,Zf=new Ut;class hn{constructor(t=new N(1,0,0),e=0){this.isPlane=!0,this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,i,n){return this.normal.set(t,e,i),this.constant=n,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,i){const n=el.subVectors(i,e).cross(jf.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(n,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(t).addScaledVector(this.normal,-this.distanceToPoint(t))}intersectLine(t,e){const i=t.delta(el),n=this.normal.dot(i);if(n===0)return this.distanceToPoint(t.start)===0?e.copy(t.start):null;const r=-(t.start.dot(this.normal)+this.constant)/n;return r<0||r>1?null:e.copy(t.start).addScaledVector(i,r)}intersectsLine(t){const e=this.distanceToPoint(t.start),i=this.distanceToPoint(t.end);return e<0&&i>0||i<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const i=e||Zf.getNormalMatrix(t),n=this.coplanarPoint(el).applyMatrix4(t),r=this.normal.applyMatrix3(i).normalize();return this.constant=-n.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return new this.constructor().copy(this)}}const Ln=new zo,Kf=new Dt(.5,.5),Jr=new N;class il{constructor(t=new hn,e=new hn,i=new hn,n=new hn,r=new hn,a=new hn){this.planes=[t,e,i,n,r,a]}set(t,e,i,n,r,a){const o=this.planes;return o[0].copy(t),o[1].copy(e),o[2].copy(i),o[3].copy(n),o[4].copy(r),o[5].copy(a),this}copy(t){const e=this.planes;for(let i=0;i<6;i++)e[i].copy(t.planes[i]);return this}setFromProjectionMatrix(t,e=vi,i=!1){const n=this.planes,r=t.elements,a=r[0],o=r[1],h=r[2],l=r[3],c=r[4],u=r[5],d=r[6],f=r[7],g=r[8],_=r[9],m=r[10],p=r[11],T=r[12],b=r[13],y=r[14],R=r[15];if(n[0].setComponents(l-a,f-c,p-g,R-T).normalize(),n[1].setComponents(l+a,f+c,p+g,R+T).normalize(),n[2].setComponents(l+o,f+u,p+_,R+b).normalize(),n[3].setComponents(l-o,f-u,p-_,R-b).normalize(),i)n[4].setComponents(h,d,m,y).normalize(),n[5].setComponents(l-h,f-d,p-m,R-y).normalize();else if(n[4].setComponents(l-h,f-d,p-m,R-y).normalize(),e===vi)n[5].setComponents(l+h,f+d,p+m,R+y).normalize();else if(e===Dr)n[5].setComponents(h,d,m,y).normalize();else throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+e);return this}intersectsObject(t){if(t.boundingSphere!==void 0)t.boundingSphere===null&&t.computeBoundingSphere(),Ln.copy(t.boundingSphere).applyMatrix4(t.matrixWorld);else{const e=t.geometry;e.boundingSphere===null&&e.computeBoundingSphere(),Ln.copy(e.boundingSphere).applyMatrix4(t.matrixWorld)}return this.intersectsSphere(Ln)}intersectsSprite(t){Ln.center.set(0,0,0);const e=Kf.distanceTo(t.center);return Ln.radius=.7071067811865476+e,Ln.applyMatrix4(t.matrixWorld),this.intersectsSphere(Ln)}intersectsSphere(t){const e=this.planes,i=t.center,n=-t.radius;for(let r=0;r<6;r++)if(e[r].distanceToPoint(i)<n)return!1;return!0}intersectsBox(t){const e=this.planes;for(let i=0;i<6;i++){const n=e[i];if(Jr.x=n.normal.x>0?t.max.x:t.min.x,Jr.y=n.normal.y>0?t.max.y:t.min.y,Jr.z=n.normal.z>0?t.max.z:t.min.z,n.distanceToPoint(Jr)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let i=0;i<6;i++)if(e[i].distanceToPoint(t)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}}class hc extends Pe{constructor(t,e,i=bn,n,r,a,o=oi,h=oi,l,c=Ws,u=1){if(c!==Ws&&c!==Xs)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");const d={width:t,height:e,depth:u};super(d,n,r,a,o,h,c,i,l),this.isDepthTexture=!0,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(t){return super.copy(t),this.source=new Do(Object.assign({},t.image)),this.compareFunction=t.compareFunction,this}toJSON(t){const e=super.toJSON(t);return this.compareFunction!==null&&(e.compareFunction=this.compareFunction),e}}class ir extends Pn{constructor(t=1,e=1,i=1,n=1){super(),this.type="PlaneGeometry",this.parameters={width:t,height:e,widthSegments:i,heightSegments:n};const r=t/2,a=e/2,o=Math.floor(i),h=Math.floor(n),l=o+1,c=h+1,u=t/o,d=e/h,f=[],g=[],_=[],m=[];for(let p=0;p<c;p++){const T=p*d-a;for(let b=0;b<l;b++){const y=b*u-r;g.push(y,-T,0),_.push(0,0,1),m.push(b/o),m.push(1-p/h)}}for(let p=0;p<h;p++)for(let T=0;T<o;T++){const b=T+l*p,y=T+l*(p+1),R=T+1+l*(p+1),w=T+1+l*p;f.push(b,y,w),f.push(y,R,w)}this.setIndex(f),this.setAttribute("position",new Cn(g,3)),this.setAttribute("normal",new Cn(_,3)),this.setAttribute("uv",new Cn(m,2))}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new ir(t.width,t.height,t.widthSegments,t.heightSegments)}}class $f extends Js{constructor(t){super(),this.isMeshStandardMaterial=!0,this.type="MeshStandardMaterial",this.defines={STANDARD:""},this.color=new Vt(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Vt(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Ph,this.normalScale=new Dt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new yi,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.defines={STANDARD:""},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.envMapIntensity=t.envMapIntensity,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}class Jf extends Js{constructor(t){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=hf,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}class Qf extends Js{constructor(t){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(t)}copy(t){return super.copy(t),this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}const nl={enabled:!1,files:{},add:function(s,t){this.enabled!==!1&&(this.files[s]=t)},get:function(s){if(this.enabled!==!1)return this.files[s]},remove:function(s){delete this.files[s]},clear:function(){this.files={}}};class tp{constructor(t,e,i){const n=this;let r=!1,a=0,o=0,h;const l=[];this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=i,this.abortController=new AbortController,this.itemStart=function(c){o++,r===!1&&n.onStart!==void 0&&n.onStart(c,a,o),r=!0},this.itemEnd=function(c){a++,n.onProgress!==void 0&&n.onProgress(c,a,o),a===o&&(r=!1,n.onLoad!==void 0&&n.onLoad())},this.itemError=function(c){n.onError!==void 0&&n.onError(c)},this.resolveURL=function(c){return h?h(c):c},this.setURLModifier=function(c){return h=c,this},this.addHandler=function(c,u){return l.push(c,u),this},this.removeHandler=function(c){const u=l.indexOf(c);return u!==-1&&l.splice(u,2),this},this.getHandler=function(c){for(let u=0,d=l.length;u<d;u+=2){const f=l[u],g=l[u+1];if(f.global&&(f.lastIndex=0),f.test(c))return g}return null},this.abort=function(){return this.abortController.abort(),this.abortController=new AbortController,this}}}const ep=new tp;class sl{constructor(t){this.manager=t!==void 0?t:ep,this.crossOrigin="anonymous",this.withCredentials=!1,this.path="",this.resourcePath="",this.requestHeader={}}load(){}loadAsync(t,e){const i=this;return new Promise(function(n,r){i.load(t,n,e,r)})}parse(){}setCrossOrigin(t){return this.crossOrigin=t,this}setWithCredentials(t){return this.withCredentials=t,this}setPath(t){return this.path=t,this}setResourcePath(t){return this.resourcePath=t,this}setRequestHeader(t){return this.requestHeader=t,this}abort(){return this}}sl.DEFAULT_MATERIAL_NAME="__DEFAULT";const bs=new WeakMap;class ip extends sl{constructor(t){super(t)}load(t,e,i,n){this.path!==void 0&&(t=this.path+t),t=this.manager.resolveURL(t);const r=this,a=nl.get(`image:${t}`);if(a!==void 0){if(a.complete===!0)r.manager.itemStart(t),setTimeout(function(){e&&e(a),r.manager.itemEnd(t)},0);else{let u=bs.get(a);u===void 0&&(u=[],bs.set(a,u)),u.push({onLoad:e,onError:n})}return a}const o=js("img");function h(){c(),e&&e(this);const u=bs.get(this)||[];for(let d=0;d<u.length;d++){const f=u[d];f.onLoad&&f.onLoad(this)}bs.delete(this),r.manager.itemEnd(t)}function l(u){c(),n&&n(u),nl.remove(`image:${t}`);const d=bs.get(this)||[];for(let f=0;f<d.length;f++){const g=d[f];g.onError&&g.onError(u)}bs.delete(this),r.manager.itemError(t),r.manager.itemEnd(t)}function c(){o.removeEventListener("load",h,!1),o.removeEventListener("error",l,!1)}return o.addEventListener("load",h,!1),o.addEventListener("error",l,!1),t.slice(0,5)!=="data:"&&this.crossOrigin!==void 0&&(o.crossOrigin=this.crossOrigin),nl.add(`image:${t}`,o),r.manager.itemStart(t),o.src=t,o}}class np extends sl{constructor(t){super(t)}load(t,e,i,n){const r=new Pe,a=new ip(this.manager);return a.setCrossOrigin(this.crossOrigin),a.setPath(this.path),a.load(t,function(o){r.image=o,r.needsUpdate=!0,e!==void 0&&e(r)},i,n),r}}class rl extends Se{constructor(t,e=1){super(),this.isLight=!0,this.type="Light",this.color=new Vt(t),this.intensity=e}dispose(){}copy(t,e){return super.copy(t,e),this.color.copy(t.color),this.intensity=t.intensity,this}toJSON(t){const e=super.toJSON(t);return e.object.color=this.color.getHex(),e.object.intensity=this.intensity,this.groundColor!==void 0&&(e.object.groundColor=this.groundColor.getHex()),this.distance!==void 0&&(e.object.distance=this.distance),this.angle!==void 0&&(e.object.angle=this.angle),this.decay!==void 0&&(e.object.decay=this.decay),this.penumbra!==void 0&&(e.object.penumbra=this.penumbra),this.shadow!==void 0&&(e.object.shadow=this.shadow.toJSON()),this.target!==void 0&&(e.object.target=this.target.uuid),e}}const al=new ue,cc=new N,uc=new N;class dc{constructor(t){this.camera=t,this.intensity=1,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new Dt(512,512),this.mapType=xi,this.map=null,this.mapPass=null,this.matrix=new ue,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new il,this._frameExtents=new Dt(1,1),this._viewportCount=1,this._viewports=[new he(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(t){const e=this.camera,i=this.matrix;cc.setFromMatrixPosition(t.matrixWorld),e.position.copy(cc),uc.setFromMatrixPosition(t.target.matrixWorld),e.lookAt(uc),e.updateMatrixWorld(),al.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),this._frustum.setFromProjectionMatrix(al,e.coordinateSystem,e.reversedDepth),e.reversedDepth?i.set(.5,0,0,.5,0,.5,0,.5,0,0,1,0,0,0,0,1):i.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),i.multiply(al)}getViewport(t){return this._viewports[t]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(t){return this.camera=t.camera.clone(),this.intensity=t.intensity,this.bias=t.bias,this.radius=t.radius,this.autoUpdate=t.autoUpdate,this.needsUpdate=t.needsUpdate,this.normalBias=t.normalBias,this.blurSamples=t.blurSamples,this.mapSize.copy(t.mapSize),this}clone(){return new this.constructor().copy(this)}toJSON(){const t={};return this.intensity!==1&&(t.intensity=this.intensity),this.bias!==0&&(t.bias=this.bias),this.normalBias!==0&&(t.normalBias=this.normalBias),this.radius!==1&&(t.radius=this.radius),(this.mapSize.x!==512||this.mapSize.y!==512)&&(t.mapSize=this.mapSize.toArray()),t.camera=this.camera.toJSON(!1).object,delete t.camera.matrix,t}}class sp extends dc{constructor(){super(new We(50,1,.5,500)),this.isSpotLightShadow=!0,this.focus=1,this.aspect=1}updateMatrices(t){const e=this.camera,i=Nr*2*t.angle*this.focus,n=this.mapSize.width/this.mapSize.height*this.aspect,r=t.distance||e.far;(i!==e.fov||n!==e.aspect||r!==e.far)&&(e.fov=i,e.aspect=n,e.far=r,e.updateProjectionMatrix()),super.updateMatrices(t)}copy(t){return super.copy(t),this.focus=t.focus,this}}class rp extends rl{constructor(t,e,i=0,n=Math.PI/3,r=0,a=2){super(t,e),this.isSpotLight=!0,this.type="SpotLight",this.position.copy(Se.DEFAULT_UP),this.updateMatrix(),this.target=new Se,this.distance=i,this.angle=n,this.penumbra=r,this.decay=a,this.map=null,this.shadow=new sp}get power(){return this.intensity*Math.PI}set power(t){this.intensity=t/Math.PI}dispose(){this.shadow.dispose()}copy(t,e){return super.copy(t,e),this.distance=t.distance,this.angle=t.angle,this.penumbra=t.penumbra,this.decay=t.decay,this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}class fc extends rc{constructor(t=-1,e=1,i=1,n=-1,r=.1,a=2e3){super(),this.isOrthographicCamera=!0,this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=i,this.bottom=n,this.near=r,this.far=a,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=t.view===null?null:Object.assign({},t.view),this}setViewOffset(t,e,i,n,r,a){this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=i,this.view.offsetY=n,this.view.width=r,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),i=(this.right+this.left)/2,n=(this.top+this.bottom)/2;let r=i-t,a=i+t,o=n+e,h=n-e;if(this.view!==null&&this.view.enabled){const l=(this.right-this.left)/this.view.fullWidth/this.zoom,c=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=l*this.view.offsetX,a=r+l*this.view.width,o-=c*this.view.offsetY,h=o-c*this.view.height}this.projectionMatrix.makeOrthographic(r,a,o,h,this.near,this.far,this.coordinateSystem,this.reversedDepth),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,this.view!==null&&(e.object.view=Object.assign({},this.view)),e}}class ap extends dc{constructor(){super(new fc(-5,5,5,-5,.5,500)),this.isDirectionalLightShadow=!0}}class pc extends rl{constructor(t,e){super(t,e),this.isDirectionalLight=!0,this.type="DirectionalLight",this.position.copy(Se.DEFAULT_UP),this.updateMatrix(),this.target=new Se,this.shadow=new ap}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}class op extends rl{constructor(t,e){super(t,e),this.isAmbientLight=!0,this.type="AmbientLight"}}class lp extends We{constructor(t=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=t}}class hp{constructor(t=!0){this.autoStart=t,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=performance.now(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let t=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){const e=performance.now();t=(e-this.oldTime)/1e3,this.oldTime=e,this.elapsedTime+=t}return t}}class mc{constructor(t=1,e=0,i=0){this.radius=t,this.phi=e,this.theta=i}set(t,e,i){return this.radius=t,this.phi=e,this.theta=i,this}copy(t){return this.radius=t.radius,this.phi=t.phi,this.theta=t.theta,this}makeSafe(){return this.phi=Bt(this.phi,1e-6,Math.PI-1e-6),this}setFromVector3(t){return this.setFromCartesianCoords(t.x,t.y,t.z)}setFromCartesianCoords(t,e,i){return this.radius=Math.sqrt(t*t+e*e+i*i),this.radius===0?(this.theta=0,this.phi=0):(this.theta=Math.atan2(t,i),this.phi=Math.acos(Bt(e/this.radius,-1,1))),this}clone(){return new this.constructor().copy(this)}}class cp extends En{constructor(t,e=null){super(),this.object=t,this.domElement=e,this.enabled=!0,this.state=-1,this.keys={},this.mouseButtons={LEFT:null,MIDDLE:null,RIGHT:null},this.touches={ONE:null,TWO:null}}connect(t){if(t===void 0){console.warn("THREE.Controls: connect() now requires an element.");return}this.domElement!==null&&this.disconnect(),this.domElement=t}disconnect(){}dispose(){}update(){}}function gc(s,t,e,i){const n=up(i);switch(e){case Th:return s*t;case wh:return s*t/n.components*n.byteLength;case to:return s*t/n.components*n.byteLength;case Rh:return s*t*2/n.components*n.byteLength;case eo:return s*t*2/n.components*n.byteLength;case Ah:return s*t*3/n.components*n.byteLength;case li:return s*t*4/n.components*n.byteLength;case io:return s*t*4/n.components*n.byteLength;case wr:case Rr:return Math.floor((s+3)/4)*Math.floor((t+3)/4)*8;case Cr:case Pr:return Math.floor((s+3)/4)*Math.floor((t+3)/4)*16;case so:case ao:return Math.max(s,16)*Math.max(t,8)/4;case no:case ro:return Math.max(s,8)*Math.max(t,8)/2;case oo:case lo:return Math.floor((s+3)/4)*Math.floor((t+3)/4)*8;case ho:return Math.floor((s+3)/4)*Math.floor((t+3)/4)*16;case co:return Math.floor((s+3)/4)*Math.floor((t+3)/4)*16;case uo:return Math.floor((s+4)/5)*Math.floor((t+3)/4)*16;case fo:return Math.floor((s+4)/5)*Math.floor((t+4)/5)*16;case po:return Math.floor((s+5)/6)*Math.floor((t+4)/5)*16;case mo:return Math.floor((s+5)/6)*Math.floor((t+5)/6)*16;case go:return Math.floor((s+7)/8)*Math.floor((t+4)/5)*16;case _o:return Math.floor((s+7)/8)*Math.floor((t+5)/6)*16;case xo:return Math.floor((s+7)/8)*Math.floor((t+7)/8)*16;case vo:return Math.floor((s+9)/10)*Math.floor((t+4)/5)*16;case yo:return Math.floor((s+9)/10)*Math.floor((t+5)/6)*16;case Mo:return Math.floor((s+9)/10)*Math.floor((t+7)/8)*16;case So:return Math.floor((s+9)/10)*Math.floor((t+9)/10)*16;case bo:return Math.floor((s+11)/12)*Math.floor((t+9)/10)*16;case Eo:return Math.floor((s+11)/12)*Math.floor((t+11)/12)*16;case Ir:case To:case Ao:return Math.ceil(s/4)*Math.ceil(t/4)*16;case Ch:case wo:return Math.ceil(s/4)*Math.ceil(t/4)*8;case Ro:case Co:return Math.ceil(s/4)*Math.ceil(t/4)*16}throw new Error(`Unable to determine texture byte length for ${e} format.`)}function up(s){switch(s){case xi:case Sh:return{byteLength:1,components:1};case Gs:case bh:case Hs:return{byteLength:2,components:1};case Ja:case Qa:return{byteLength:2,components:4};case bn:case $a:case Fi:return{byteLength:4,components:1};case Eh:return{byteLength:4,components:3}}throw new Error(`Unknown texture type ${s}.`)}typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:Fa}})),typeof window<"u"&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=Fa);function _c(){let s=null,t=!1,e=null,i=null;function n(r,a){e(r,a),i=s.requestAnimationFrame(n)}return{start:function(){t!==!0&&e!==null&&(i=s.requestAnimationFrame(n),t=!0)},stop:function(){s.cancelAnimationFrame(i),t=!1},setAnimationLoop:function(r){e=r},setContext:function(r){s=r}}}function dp(s){const t=new WeakMap;function e(o,h){const l=o.array,c=o.usage,u=l.byteLength,d=s.createBuffer();s.bindBuffer(h,d),s.bufferData(h,l,c),o.onUploadCallback();let f;if(l instanceof Float32Array)f=s.FLOAT;else if(typeof Float16Array<"u"&&l instanceof Float16Array)f=s.HALF_FLOAT;else if(l instanceof Uint16Array)o.isFloat16BufferAttribute?f=s.HALF_FLOAT:f=s.UNSIGNED_SHORT;else if(l instanceof Int16Array)f=s.SHORT;else if(l instanceof Uint32Array)f=s.UNSIGNED_INT;else if(l instanceof Int32Array)f=s.INT;else if(l instanceof Int8Array)f=s.BYTE;else if(l instanceof Uint8Array)f=s.UNSIGNED_BYTE;else if(l instanceof Uint8ClampedArray)f=s.UNSIGNED_BYTE;else throw new Error("THREE.WebGLAttributes: Unsupported buffer data format: "+l);return{buffer:d,type:f,bytesPerElement:l.BYTES_PER_ELEMENT,version:o.version,size:u}}function i(o,h,l){const c=h.array,u=h.updateRanges;if(s.bindBuffer(l,o),u.length===0)s.bufferSubData(l,0,c);else{u.sort((f,g)=>f.start-g.start);let d=0;for(let f=1;f<u.length;f++){const g=u[d],_=u[f];_.start<=g.start+g.count+1?g.count=Math.max(g.count,_.start+_.count-g.start):(++d,u[d]=_)}u.length=d+1;for(let f=0,g=u.length;f<g;f++){const _=u[f];s.bufferSubData(l,_.start*c.BYTES_PER_ELEMENT,c,_.start,_.count)}h.clearUpdateRanges()}h.onUploadCallback()}function n(o){return o.isInterleavedBufferAttribute&&(o=o.data),t.get(o)}function r(o){o.isInterleavedBufferAttribute&&(o=o.data);const h=t.get(o);h&&(s.deleteBuffer(h.buffer),t.delete(o))}function a(o,h){if(o.isInterleavedBufferAttribute&&(o=o.data),o.isGLBufferAttribute){const c=t.get(o);(!c||c.version<o.version)&&t.set(o,{buffer:o.buffer,type:o.type,bytesPerElement:o.elementSize,version:o.version});return}const l=t.get(o);if(l===void 0)t.set(o,e(o,h));else if(l.version<o.version){if(l.size!==o.array.byteLength)throw new Error("THREE.WebGLAttributes: The size of the buffer attribute's array buffer does not match the original size. Resizing buffer attributes is not supported.");i(l.buffer,o,h),l.version=o.version}}return{get:n,remove:r,update:a}}var fp=`#ifdef USE_ALPHAHASH
|
|
163
|
+
`},n=new tr(5,5,5),r=new on({name:"CubemapFromEquirect",uniforms:xs(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:Oe,blending:Ki});r.uniforms.tEquirect.value=e;const a=new Ei(n,r),o=e.minFilter;return e.minFilter===En&&(e.minFilter=mi),new Vd(1,10,this).update(t,a),e.minFilter=o,a.geometry.dispose(),a.material.dispose(),this}clear(t,e=!0,i=!0,n=!0){const r=t.getRenderTarget();for(let a=0;a<6;a++)t.setRenderTarget(this,a),t.clear(e,i,n);t.setRenderTarget(r)}}class er extends Ee{constructor(){super(),this.isGroup=!0,this.type="Group"}}const Yd={type:"move"};class $o{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return this._hand===null&&(this._hand=new er,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new er,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new B,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new B),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new er,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new B,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new B),this._grip}dispatchEvent(t){return this._targetRay!==null&&this._targetRay.dispatchEvent(t),this._grip!==null&&this._grip.dispatchEvent(t),this._hand!==null&&this._hand.dispatchEvent(t),this}connect(t){if(t&&t.hand){const e=this._hand;if(e)for(const i of t.hand.values())this._getHandJoint(e,i)}return this.dispatchEvent({type:"connected",data:t}),this}disconnect(t){return this.dispatchEvent({type:"disconnected",data:t}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}update(t,e,i){let n=null,r=null,a=null;const o=this._targetRay,l=this._grip,A=this._hand;if(t&&e.session.visibilityState!=="visible-blurred"){if(A&&t.hand){a=!0;for(const m of t.hand.values()){const g=e.getJointPose(m,i),f=this._getHandJoint(A,m);g!==null&&(f.matrix.fromArray(g.transform.matrix),f.matrix.decompose(f.position,f.rotation,f.scale),f.matrixWorldNeedsUpdate=!0,f.jointRadius=g.radius),f.visible=g!==null}const h=A.joints["index-finger-tip"],c=A.joints["thumb-tip"],u=h.position.distanceTo(c.position),d=.02,p=.005;A.inputState.pinching&&u>d+p?(A.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!A.inputState.pinching&&u<=d-p&&(A.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else l!==null&&t.gripSpace&&(r=e.getPose(t.gripSpace,i),r!==null&&(l.matrix.fromArray(r.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),l.matrixWorldNeedsUpdate=!0,r.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(r.linearVelocity)):l.hasLinearVelocity=!1,r.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(r.angularVelocity)):l.hasAngularVelocity=!1));o!==null&&(n=e.getPose(t.targetRaySpace,i),n===null&&r!==null&&(n=r),n!==null&&(o.matrix.fromArray(n.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,n.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(n.linearVelocity)):o.hasLinearVelocity=!1,n.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(n.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(Yd)))}return o!==null&&(o.visible=n!==null),l!==null&&(l.visible=r!==null),A!==null&&(A.visible=a!==null),this}_getHandJoint(t,e){if(t.joints[e.jointName]===void 0){const i=new er;i.matrixAutoUpdate=!1,i.visible=!1,t.joints[e.jointName]=i,t.add(i)}return t.joints[e.jointName]}}class tA{constructor(t,e=1,i=1e3){this.isFog=!0,this.name="",this.color=new Wt(t),this.near=e,this.far=i}clone(){return new tA(this.color,this.near,this.far)}toJSON(){return{type:"Fog",name:this.name,color:this.color.getHex(),near:this.near,far:this.far}}}class Xd extends Ee{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new xi,this.environmentIntensity=1,this.environmentRotation=new xi,this.overrideMaterial=null,typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),t.background!==null&&(this.background=t.background.clone()),t.environment!==null&&(this.environment=t.environment.clone()),t.fog!==null&&(this.fog=t.fog.clone()),this.backgroundBlurriness=t.backgroundBlurriness,this.backgroundIntensity=t.backgroundIntensity,this.backgroundRotation.copy(t.backgroundRotation),this.environmentIntensity=t.environmentIntensity,this.environmentRotation.copy(t.environmentRotation),t.overrideMaterial!==null&&(this.overrideMaterial=t.overrideMaterial.clone()),this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return this.fog!==null&&(e.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(e.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(e.object.backgroundIntensity=this.backgroundIntensity),e.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1&&(e.object.environmentIntensity=this.environmentIntensity),e.object.environmentRotation=this.environmentRotation.toArray(),e}}const eA=new B,Zd=new B,jd=new Bt;class ln{constructor(t=new B(1,0,0),e=0){this.isPlane=!0,this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,i,n){return this.normal.set(t,e,i),this.constant=n,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,i){const n=eA.subVectors(i,e).cross(Zd.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(n,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(t).addScaledVector(this.normal,-this.distanceToPoint(t))}intersectLine(t,e){const i=t.delta(eA),n=this.normal.dot(i);if(n===0)return this.distanceToPoint(t.start)===0?e.copy(t.start):null;const r=-(t.start.dot(this.normal)+this.constant)/n;return r<0||r>1?null:e.copy(t.start).addScaledVector(i,r)}intersectsLine(t){const e=this.distanceToPoint(t.start),i=this.distanceToPoint(t.end);return e<0&&i>0||i<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const i=e||jd.getNormalMatrix(t),n=this.coplanarPoint(eA).applyMatrix4(t),r=this.normal.applyMatrix3(i).normalize();return this.constant=-n.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return new this.constructor().copy(this)}}const Dn=new Uo,Jd=new Nt(.5,.5),Kr=new B;class iA{constructor(t=new ln,e=new ln,i=new ln,n=new ln,r=new ln,a=new ln){this.planes=[t,e,i,n,r,a]}set(t,e,i,n,r,a){const o=this.planes;return o[0].copy(t),o[1].copy(e),o[2].copy(i),o[3].copy(n),o[4].copy(r),o[5].copy(a),this}copy(t){const e=this.planes;for(let i=0;i<6;i++)e[i].copy(t.planes[i]);return this}setFromProjectionMatrix(t,e=Ii,i=!1){const n=this.planes,r=t.elements,a=r[0],o=r[1],l=r[2],A=r[3],h=r[4],c=r[5],u=r[6],d=r[7],p=r[8],m=r[9],g=r[10],f=r[11],M=r[12],y=r[13],x=r[14],w=r[15];if(n[0].setComponents(A-a,d-h,f-p,w-M).normalize(),n[1].setComponents(A+a,d+h,f+p,w+M).normalize(),n[2].setComponents(A+o,d+c,f+m,w+y).normalize(),n[3].setComponents(A-o,d-c,f-m,w-y).normalize(),i)n[4].setComponents(l,u,g,x).normalize(),n[5].setComponents(A-l,d-u,f-g,w-x).normalize();else if(n[4].setComponents(A-l,d-u,f-g,w-x).normalize(),e===Ii)n[5].setComponents(A+l,d+u,f+g,w+x).normalize();else if(e===Lr)n[5].setComponents(l,u,g,x).normalize();else throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+e);return this}intersectsObject(t){if(t.boundingSphere!==void 0)t.boundingSphere===null&&t.computeBoundingSphere(),Dn.copy(t.boundingSphere).applyMatrix4(t.matrixWorld);else{const e=t.geometry;e.boundingSphere===null&&e.computeBoundingSphere(),Dn.copy(e.boundingSphere).applyMatrix4(t.matrixWorld)}return this.intersectsSphere(Dn)}intersectsSprite(t){Dn.center.set(0,0,0);const e=Jd.distanceTo(t.center);return Dn.radius=.7071067811865476+e,Dn.applyMatrix4(t.matrixWorld),this.intersectsSphere(Dn)}intersectsSphere(t){const e=this.planes,i=t.center,n=-t.radius;for(let r=0;r<6;r++)if(e[r].distanceToPoint(i)<n)return!1;return!0}intersectsBox(t){const e=this.planes;for(let i=0;i<6;i++){const n=e[i];if(Kr.x=n.normal.x>0?t.max.x:t.min.x,Kr.y=n.normal.y>0?t.max.y:t.min.y,Kr.z=n.normal.z>0?t.max.z:t.min.z,n.distanceToPoint(Kr)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let i=0;i<6;i++)if(e[i].distanceToPoint(t)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}}class lh extends Re{constructor(t,e,i=yn,n,r,a,o=hi,l=hi,A,h=Ws,c=1){if(h!==Ws&&h!==Ys)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");const u={width:t,height:e,depth:c};super(u,n,r,a,o,l,h,i,A),this.isDepthTexture=!0,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(t){return super.copy(t),this.source=new Lo(Object.assign({},t.image)),this.compareFunction=t.compareFunction,this}toJSON(t){const e=super.toJSON(t);return this.compareFunction!==null&&(e.compareFunction=this.compareFunction),e}}class ir extends Rn{constructor(t=1,e=1,i=1,n=1){super(),this.type="PlaneGeometry",this.parameters={width:t,height:e,widthSegments:i,heightSegments:n};const r=t/2,a=e/2,o=Math.floor(i),l=Math.floor(n),A=o+1,h=l+1,c=t/o,u=e/l,d=[],p=[],m=[],g=[];for(let f=0;f<h;f++){const M=f*u-a;for(let y=0;y<A;y++){const x=y*c-r;p.push(x,-M,0),m.push(0,0,1),g.push(y/o),g.push(1-f/l)}}for(let f=0;f<l;f++)for(let M=0;M<o;M++){const y=M+A*f,x=M+A*(f+1),w=M+1+A*(f+1),T=M+1+A*f;d.push(y,x,T),d.push(x,w,T)}this.setIndex(d),this.setAttribute("position",new _n(p,3)),this.setAttribute("normal",new _n(m,3)),this.setAttribute("uv",new _n(g,2))}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new ir(t.width,t.height,t.widthSegments,t.heightSegments)}}class Qd extends Ks{constructor(t){super(),this.isMeshStandardMaterial=!0,this.type="MeshStandardMaterial",this.defines={STANDARD:""},this.color=new Wt(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Wt(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Rl,this.normalScale=new Nt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new xi,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.defines={STANDARD:""},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.envMapIntensity=t.envMapIntensity,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}class qd extends Ks{constructor(t){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=Ad,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}class Kd extends Ks{constructor(t){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(t)}copy(t){return super.copy(t),this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}const nA={enabled:!1,files:{},add:function(s,t){this.enabled!==!1&&(this.files[s]=t)},get:function(s){if(this.enabled!==!1)return this.files[s]},remove:function(s){delete this.files[s]},clear:function(){this.files={}}};class $d{constructor(t,e,i){const n=this;let r=!1,a=0,o=0,l;const A=[];this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=i,this.abortController=new AbortController,this.itemStart=function(h){o++,r===!1&&n.onStart!==void 0&&n.onStart(h,a,o),r=!0},this.itemEnd=function(h){a++,n.onProgress!==void 0&&n.onProgress(h,a,o),a===o&&(r=!1,n.onLoad!==void 0&&n.onLoad())},this.itemError=function(h){n.onError!==void 0&&n.onError(h)},this.resolveURL=function(h){return l?l(h):h},this.setURLModifier=function(h){return l=h,this},this.addHandler=function(h,c){return A.push(h,c),this},this.removeHandler=function(h){const c=A.indexOf(h);return c!==-1&&A.splice(c,2),this},this.getHandler=function(h){for(let c=0,u=A.length;c<u;c+=2){const d=A[c],p=A[c+1];if(d.global&&(d.lastIndex=0),d.test(h))return p}return null},this.abort=function(){return this.abortController.abort(),this.abortController=new AbortController,this}}}const tf=new $d;class sA{constructor(t){this.manager=t!==void 0?t:tf,this.crossOrigin="anonymous",this.withCredentials=!1,this.path="",this.resourcePath="",this.requestHeader={}}load(){}loadAsync(t,e){const i=this;return new Promise(function(n,r){i.load(t,n,e,r)})}parse(){}setCrossOrigin(t){return this.crossOrigin=t,this}setWithCredentials(t){return this.withCredentials=t,this}setPath(t){return this.path=t,this}setResourcePath(t){return this.resourcePath=t,this}setRequestHeader(t){return this.requestHeader=t,this}abort(){return this}}sA.DEFAULT_MATERIAL_NAME="__DEFAULT";const ys=new WeakMap;class ef extends sA{constructor(t){super(t)}load(t,e,i,n){this.path!==void 0&&(t=this.path+t),t=this.manager.resolveURL(t);const r=this,a=nA.get(`image:${t}`);if(a!==void 0){if(a.complete===!0)r.manager.itemStart(t),setTimeout(function(){e&&e(a),r.manager.itemEnd(t)},0);else{let c=ys.get(a);c===void 0&&(c=[],ys.set(a,c)),c.push({onLoad:e,onError:n})}return a}const o=js("img");function l(){h(),e&&e(this);const c=ys.get(this)||[];for(let u=0;u<c.length;u++){const d=c[u];d.onLoad&&d.onLoad(this)}ys.delete(this),r.manager.itemEnd(t)}function A(c){h(),n&&n(c),nA.remove(`image:${t}`);const u=ys.get(this)||[];for(let d=0;d<u.length;d++){const p=u[d];p.onError&&p.onError(c)}ys.delete(this),r.manager.itemError(t),r.manager.itemEnd(t)}function h(){o.removeEventListener("load",l,!1),o.removeEventListener("error",A,!1)}return o.addEventListener("load",l,!1),o.addEventListener("error",A,!1),t.slice(0,5)!=="data:"&&this.crossOrigin!==void 0&&(o.crossOrigin=this.crossOrigin),nA.add(`image:${t}`,o),r.manager.itemStart(t),o.src=t,o}}class nf extends sA{constructor(t){super(t)}load(t,e,i,n){const r=new Re,a=new ef(this.manager);return a.setCrossOrigin(this.crossOrigin),a.setPath(this.path),a.load(t,function(o){r.image=o,r.needsUpdate=!0,e!==void 0&&e(r)},i,n),r}}class rA extends Ee{constructor(t,e=1){super(),this.isLight=!0,this.type="Light",this.color=new Wt(t),this.intensity=e}dispose(){}copy(t,e){return super.copy(t,e),this.color.copy(t.color),this.intensity=t.intensity,this}toJSON(t){const e=super.toJSON(t);return e.object.color=this.color.getHex(),e.object.intensity=this.intensity,this.groundColor!==void 0&&(e.object.groundColor=this.groundColor.getHex()),this.distance!==void 0&&(e.object.distance=this.distance),this.angle!==void 0&&(e.object.angle=this.angle),this.decay!==void 0&&(e.object.decay=this.decay),this.penumbra!==void 0&&(e.object.penumbra=this.penumbra),this.shadow!==void 0&&(e.object.shadow=this.shadow.toJSON()),this.target!==void 0&&(e.object.target=this.target.uuid),e}}const aA=new de,hh=new B,ch=new B;class uh{constructor(t){this.camera=t,this.intensity=1,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new Nt(512,512),this.mapType=Ci,this.map=null,this.mapPass=null,this.matrix=new de,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new iA,this._frameExtents=new Nt(1,1),this._viewportCount=1,this._viewports=[new ce(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(t){const e=this.camera,i=this.matrix;hh.setFromMatrixPosition(t.matrixWorld),e.position.copy(hh),ch.setFromMatrixPosition(t.target.matrixWorld),e.lookAt(ch),e.updateMatrixWorld(),aA.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),this._frustum.setFromProjectionMatrix(aA,e.coordinateSystem,e.reversedDepth),e.reversedDepth?i.set(.5,0,0,.5,0,.5,0,.5,0,0,1,0,0,0,0,1):i.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),i.multiply(aA)}getViewport(t){return this._viewports[t]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(t){return this.camera=t.camera.clone(),this.intensity=t.intensity,this.bias=t.bias,this.radius=t.radius,this.autoUpdate=t.autoUpdate,this.needsUpdate=t.needsUpdate,this.normalBias=t.normalBias,this.blurSamples=t.blurSamples,this.mapSize.copy(t.mapSize),this}clone(){return new this.constructor().copy(this)}toJSON(){const t={};return this.intensity!==1&&(t.intensity=this.intensity),this.bias!==0&&(t.bias=this.bias),this.normalBias!==0&&(t.normalBias=this.normalBias),this.radius!==1&&(t.radius=this.radius),(this.mapSize.x!==512||this.mapSize.y!==512)&&(t.mapSize=this.mapSize.toArray()),t.camera=this.camera.toJSON(!1).object,delete t.camera.matrix,t}}class sf extends uh{constructor(){super(new Ze(50,1,.5,500)),this.isSpotLightShadow=!0,this.focus=1,this.aspect=1}updateMatrices(t){const e=this.camera,i=Br*2*t.angle*this.focus,n=this.mapSize.width/this.mapSize.height*this.aspect,r=t.distance||e.far;(i!==e.fov||n!==e.aspect||r!==e.far)&&(e.fov=i,e.aspect=n,e.far=r,e.updateProjectionMatrix()),super.updateMatrices(t)}copy(t){return super.copy(t),this.focus=t.focus,this}}class rf extends rA{constructor(t,e,i=0,n=Math.PI/3,r=0,a=2){super(t,e),this.isSpotLight=!0,this.type="SpotLight",this.position.copy(Ee.DEFAULT_UP),this.updateMatrix(),this.target=new Ee,this.distance=i,this.angle=n,this.penumbra=r,this.decay=a,this.map=null,this.shadow=new sf}get power(){return this.intensity*Math.PI}set power(t){this.intensity=t/Math.PI}dispose(){this.shadow.dispose()}copy(t,e){return super.copy(t,e),this.distance=t.distance,this.angle=t.angle,this.penumbra=t.penumbra,this.decay=t.decay,this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}class dh extends rh{constructor(t=-1,e=1,i=1,n=-1,r=.1,a=2e3){super(),this.isOrthographicCamera=!0,this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=i,this.bottom=n,this.near=r,this.far=a,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=t.view===null?null:Object.assign({},t.view),this}setViewOffset(t,e,i,n,r,a){this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=i,this.view.offsetY=n,this.view.width=r,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),i=(this.right+this.left)/2,n=(this.top+this.bottom)/2;let r=i-t,a=i+t,o=n+e,l=n-e;if(this.view!==null&&this.view.enabled){const A=(this.right-this.left)/this.view.fullWidth/this.zoom,h=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=A*this.view.offsetX,a=r+A*this.view.width,o-=h*this.view.offsetY,l=o-h*this.view.height}this.projectionMatrix.makeOrthographic(r,a,o,l,this.near,this.far,this.coordinateSystem,this.reversedDepth),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,this.view!==null&&(e.object.view=Object.assign({},this.view)),e}}class af extends uh{constructor(){super(new dh(-5,5,5,-5,.5,500)),this.isDirectionalLightShadow=!0}}class fh extends rA{constructor(t,e){super(t,e),this.isDirectionalLight=!0,this.type="DirectionalLight",this.position.copy(Ee.DEFAULT_UP),this.updateMatrix(),this.target=new Ee,this.shadow=new af}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}class of extends rA{constructor(t,e){super(t,e),this.isAmbientLight=!0,this.type="AmbientLight"}}class Af extends Ze{constructor(t=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=t}}class lf{constructor(t=!0){this.autoStart=t,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=performance.now(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let t=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){const e=performance.now();t=(e-this.oldTime)/1e3,this.oldTime=e,this.elapsedTime+=t}return t}}class gh{constructor(t=1,e=0,i=0){this.radius=t,this.phi=e,this.theta=i}set(t,e,i){return this.radius=t,this.phi=e,this.theta=i,this}copy(t){return this.radius=t.radius,this.phi=t.phi,this.theta=t.theta,this}makeSafe(){return this.phi=kt(this.phi,1e-6,Math.PI-1e-6),this}setFromVector3(t){return this.setFromCartesianCoords(t.x,t.y,t.z)}setFromCartesianCoords(t,e,i){return this.radius=Math.sqrt(t*t+e*e+i*i),this.radius===0?(this.theta=0,this.phi=0):(this.theta=Math.atan2(t,i),this.phi=Math.acos(kt(e/this.radius,-1,1))),this}clone(){return new this.constructor().copy(this)}}class hf extends Sn{constructor(t,e=null){super(),this.object=t,this.domElement=e,this.enabled=!0,this.state=-1,this.keys={},this.mouseButtons={LEFT:null,MIDDLE:null,RIGHT:null},this.touches={ONE:null,TWO:null}}connect(t){if(t===void 0){console.warn("THREE.Controls: connect() now requires an element.");return}this.domElement!==null&&this.disconnect(),this.domElement=t}disconnect(){}dispose(){}update(){}}function ph(s,t,e,i){const n=cf(i);switch(e){case Ml:return s*t;case Tl:return s*t/n.components*n.byteLength;case to:return s*t/n.components*n.byteLength;case wl:return s*t*2/n.components*n.byteLength;case eo:return s*t*2/n.components*n.byteLength;case bl:return s*t*3/n.components*n.byteLength;case ci:return s*t*4/n.components*n.byteLength;case io:return s*t*4/n.components*n.byteLength;case Tr:case wr:return Math.floor((s+3)/4)*Math.floor((t+3)/4)*8;case _r:case Rr:return Math.floor((s+3)/4)*Math.floor((t+3)/4)*16;case so:case ao:return Math.max(s,16)*Math.max(t,8)/4;case no:case ro:return Math.max(s,8)*Math.max(t,8)/2;case oo:case Ao:return Math.floor((s+3)/4)*Math.floor((t+3)/4)*8;case lo:return Math.floor((s+3)/4)*Math.floor((t+3)/4)*16;case ho:return Math.floor((s+3)/4)*Math.floor((t+3)/4)*16;case co:return Math.floor((s+4)/5)*Math.floor((t+3)/4)*16;case uo:return Math.floor((s+4)/5)*Math.floor((t+4)/5)*16;case fo:return Math.floor((s+5)/6)*Math.floor((t+4)/5)*16;case go:return Math.floor((s+5)/6)*Math.floor((t+5)/6)*16;case po:return Math.floor((s+7)/8)*Math.floor((t+4)/5)*16;case mo:return Math.floor((s+7)/8)*Math.floor((t+5)/6)*16;case Co:return Math.floor((s+7)/8)*Math.floor((t+7)/8)*16;case Io:return Math.floor((s+9)/10)*Math.floor((t+4)/5)*16;case xo:return Math.floor((s+9)/10)*Math.floor((t+5)/6)*16;case vo:return Math.floor((s+9)/10)*Math.floor((t+7)/8)*16;case Eo:return Math.floor((s+9)/10)*Math.floor((t+9)/10)*16;case yo:return Math.floor((s+11)/12)*Math.floor((t+9)/10)*16;case So:return Math.floor((s+11)/12)*Math.floor((t+11)/12)*16;case Pr:case Mo:case bo:return Math.ceil(s/4)*Math.ceil(t/4)*16;case _l:case To:return Math.ceil(s/4)*Math.ceil(t/4)*8;case wo:case _o:return Math.ceil(s/4)*Math.ceil(t/4)*16}throw new Error(`Unable to determine texture byte length for ${e} format.`)}function cf(s){switch(s){case Ci:case El:return{byteLength:1,components:1};case Gs:case yl:case Hs:return{byteLength:2,components:1};case Ka:case $a:return{byteLength:2,components:4};case yn:case qa:case Fi:return{byteLength:4,components:1};case Sl:return{byteLength:4,components:3}}throw new Error(`Unknown texture type ${s}.`)}typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:Fa}})),typeof window<"u"&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=Fa);function mh(){let s=null,t=!1,e=null,i=null;function n(r,a){e(r,a),i=s.requestAnimationFrame(n)}return{start:function(){t!==!0&&e!==null&&(i=s.requestAnimationFrame(n),t=!0)},stop:function(){s.cancelAnimationFrame(i),t=!1},setAnimationLoop:function(r){e=r},setContext:function(r){s=r}}}function uf(s){const t=new WeakMap;function e(o,l){const A=o.array,h=o.usage,c=A.byteLength,u=s.createBuffer();s.bindBuffer(l,u),s.bufferData(l,A,h),o.onUploadCallback();let d;if(A instanceof Float32Array)d=s.FLOAT;else if(typeof Float16Array<"u"&&A instanceof Float16Array)d=s.HALF_FLOAT;else if(A instanceof Uint16Array)o.isFloat16BufferAttribute?d=s.HALF_FLOAT:d=s.UNSIGNED_SHORT;else if(A instanceof Int16Array)d=s.SHORT;else if(A instanceof Uint32Array)d=s.UNSIGNED_INT;else if(A instanceof Int32Array)d=s.INT;else if(A instanceof Int8Array)d=s.BYTE;else if(A instanceof Uint8Array)d=s.UNSIGNED_BYTE;else if(A instanceof Uint8ClampedArray)d=s.UNSIGNED_BYTE;else throw new Error("THREE.WebGLAttributes: Unsupported buffer data format: "+A);return{buffer:u,type:d,bytesPerElement:A.BYTES_PER_ELEMENT,version:o.version,size:c}}function i(o,l,A){const h=l.array,c=l.updateRanges;if(s.bindBuffer(A,o),c.length===0)s.bufferSubData(A,0,h);else{c.sort((d,p)=>d.start-p.start);let u=0;for(let d=1;d<c.length;d++){const p=c[u],m=c[d];m.start<=p.start+p.count+1?p.count=Math.max(p.count,m.start+m.count-p.start):(++u,c[u]=m)}c.length=u+1;for(let d=0,p=c.length;d<p;d++){const m=c[d];s.bufferSubData(A,m.start*h.BYTES_PER_ELEMENT,h,m.start,m.count)}l.clearUpdateRanges()}l.onUploadCallback()}function n(o){return o.isInterleavedBufferAttribute&&(o=o.data),t.get(o)}function r(o){o.isInterleavedBufferAttribute&&(o=o.data);const l=t.get(o);l&&(s.deleteBuffer(l.buffer),t.delete(o))}function a(o,l){if(o.isInterleavedBufferAttribute&&(o=o.data),o.isGLBufferAttribute){const h=t.get(o);(!h||h.version<o.version)&&t.set(o,{buffer:o.buffer,type:o.type,bytesPerElement:o.elementSize,version:o.version});return}const A=t.get(o);if(A===void 0)t.set(o,e(o,l));else if(A.version<o.version){if(A.size!==o.array.byteLength)throw new Error("THREE.WebGLAttributes: The size of the buffer attribute's array buffer does not match the original size. Resizing buffer attributes is not supported.");i(A.buffer,o,l),A.version=o.version}}return{get:n,remove:r,update:a}}var df=`#ifdef USE_ALPHAHASH
|
|
164
164
|
if ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;
|
|
165
|
-
#endif`,
|
|
165
|
+
#endif`,ff=`#ifdef USE_ALPHAHASH
|
|
166
166
|
const float ALPHA_HASH_SCALE = 0.05;
|
|
167
167
|
float hash2D( vec2 value ) {
|
|
168
168
|
return fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );
|
|
@@ -197,20 +197,20 @@ void main() {
|
|
|
197
197
|
: cases.z;
|
|
198
198
|
return clamp( threshold , 1.0e-6, 1.0 );
|
|
199
199
|
}
|
|
200
|
-
#endif`,
|
|
200
|
+
#endif`,gf=`#ifdef USE_ALPHAMAP
|
|
201
201
|
diffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;
|
|
202
|
-
#endif`,
|
|
202
|
+
#endif`,pf=`#ifdef USE_ALPHAMAP
|
|
203
203
|
uniform sampler2D alphaMap;
|
|
204
|
-
#endif`,
|
|
204
|
+
#endif`,mf=`#ifdef USE_ALPHATEST
|
|
205
205
|
#ifdef ALPHA_TO_COVERAGE
|
|
206
206
|
diffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a );
|
|
207
207
|
if ( diffuseColor.a == 0.0 ) discard;
|
|
208
208
|
#else
|
|
209
209
|
if ( diffuseColor.a < alphaTest ) discard;
|
|
210
210
|
#endif
|
|
211
|
-
#endif`,
|
|
211
|
+
#endif`,Cf=`#ifdef USE_ALPHATEST
|
|
212
212
|
uniform float alphaTest;
|
|
213
|
-
#endif`,
|
|
213
|
+
#endif`,If=`#ifdef USE_AOMAP
|
|
214
214
|
float ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;
|
|
215
215
|
reflectedLight.indirectDiffuse *= ambientOcclusion;
|
|
216
216
|
#if defined( USE_CLEARCOAT )
|
|
@@ -223,10 +223,10 @@ void main() {
|
|
|
223
223
|
float dotNV = saturate( dot( geometryNormal, geometryViewDir ) );
|
|
224
224
|
reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );
|
|
225
225
|
#endif
|
|
226
|
-
#endif`,
|
|
226
|
+
#endif`,xf=`#ifdef USE_AOMAP
|
|
227
227
|
uniform sampler2D aoMap;
|
|
228
228
|
uniform float aoMapIntensity;
|
|
229
|
-
#endif`,
|
|
229
|
+
#endif`,vf=`#ifdef USE_BATCHING
|
|
230
230
|
#if ! defined( GL_ANGLE_multi_draw )
|
|
231
231
|
#define gl_DrawID _gl_DrawID
|
|
232
232
|
uniform int _gl_DrawID;
|
|
@@ -260,15 +260,15 @@ void main() {
|
|
|
260
260
|
int y = j / size;
|
|
261
261
|
return texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb;
|
|
262
262
|
}
|
|
263
|
-
#endif`,
|
|
263
|
+
#endif`,Ef=`#ifdef USE_BATCHING
|
|
264
264
|
mat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) );
|
|
265
|
-
#endif`,
|
|
265
|
+
#endif`,yf=`vec3 transformed = vec3( position );
|
|
266
266
|
#ifdef USE_ALPHAHASH
|
|
267
267
|
vPosition = vec3( position );
|
|
268
|
-
#endif`,
|
|
268
|
+
#endif`,Sf=`vec3 objectNormal = vec3( normal );
|
|
269
269
|
#ifdef USE_TANGENT
|
|
270
270
|
vec3 objectTangent = vec3( tangent.xyz );
|
|
271
|
-
#endif`,
|
|
271
|
+
#endif`,Mf=`float G_BlinnPhong_Implicit( ) {
|
|
272
272
|
return 0.25;
|
|
273
273
|
}
|
|
274
274
|
float D_BlinnPhong( const in float shininess, const in float dotNH ) {
|
|
@@ -282,7 +282,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve
|
|
|
282
282
|
float G = G_BlinnPhong_Implicit( );
|
|
283
283
|
float D = D_BlinnPhong( shininess, dotNH );
|
|
284
284
|
return F * ( G * D );
|
|
285
|
-
} // validated`,
|
|
285
|
+
} // validated`,bf=`#ifdef USE_IRIDESCENCE
|
|
286
286
|
const mat3 XYZ_TO_REC709 = mat3(
|
|
287
287
|
3.2404542, -0.9692660, 0.0556434,
|
|
288
288
|
-1.5371385, 1.8760108, -0.2040259,
|
|
@@ -345,7 +345,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve
|
|
|
345
345
|
}
|
|
346
346
|
return max( I, vec3( 0.0 ) );
|
|
347
347
|
}
|
|
348
|
-
#endif`,
|
|
348
|
+
#endif`,Tf=`#ifdef USE_BUMPMAP
|
|
349
349
|
uniform sampler2D bumpMap;
|
|
350
350
|
uniform float bumpScale;
|
|
351
351
|
vec2 dHdxy_fwd() {
|
|
@@ -366,7 +366,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve
|
|
|
366
366
|
vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );
|
|
367
367
|
return normalize( abs( fDet ) * surf_norm - vGrad );
|
|
368
368
|
}
|
|
369
|
-
#endif`,
|
|
369
|
+
#endif`,wf=`#if NUM_CLIPPING_PLANES > 0
|
|
370
370
|
vec4 plane;
|
|
371
371
|
#ifdef ALPHA_TO_COVERAGE
|
|
372
372
|
float distanceToPlane, distanceGradient;
|
|
@@ -412,26 +412,26 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve
|
|
|
412
412
|
if ( clipped ) discard;
|
|
413
413
|
#endif
|
|
414
414
|
#endif
|
|
415
|
-
#endif`,
|
|
415
|
+
#endif`,_f=`#if NUM_CLIPPING_PLANES > 0
|
|
416
416
|
varying vec3 vClipPosition;
|
|
417
417
|
uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];
|
|
418
|
-
#endif`,
|
|
418
|
+
#endif`,Rf=`#if NUM_CLIPPING_PLANES > 0
|
|
419
419
|
varying vec3 vClipPosition;
|
|
420
|
-
#endif`,
|
|
420
|
+
#endif`,Pf=`#if NUM_CLIPPING_PLANES > 0
|
|
421
421
|
vClipPosition = - mvPosition.xyz;
|
|
422
|
-
#endif`,
|
|
422
|
+
#endif`,Df=`#if defined( USE_COLOR_ALPHA )
|
|
423
423
|
diffuseColor *= vColor;
|
|
424
424
|
#elif defined( USE_COLOR )
|
|
425
425
|
diffuseColor.rgb *= vColor;
|
|
426
|
-
#endif`,
|
|
426
|
+
#endif`,Lf=`#if defined( USE_COLOR_ALPHA )
|
|
427
427
|
varying vec4 vColor;
|
|
428
428
|
#elif defined( USE_COLOR )
|
|
429
429
|
varying vec3 vColor;
|
|
430
|
-
#endif`,
|
|
430
|
+
#endif`,Nf=`#if defined( USE_COLOR_ALPHA )
|
|
431
431
|
varying vec4 vColor;
|
|
432
432
|
#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )
|
|
433
433
|
varying vec3 vColor;
|
|
434
|
-
#endif`,
|
|
434
|
+
#endif`,Bf=`#if defined( USE_COLOR_ALPHA )
|
|
435
435
|
vColor = vec4( 1.0 );
|
|
436
436
|
#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )
|
|
437
437
|
vColor = vec3( 1.0 );
|
|
@@ -445,7 +445,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve
|
|
|
445
445
|
#ifdef USE_BATCHING_COLOR
|
|
446
446
|
vec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) );
|
|
447
447
|
vColor.xyz *= batchingColor.xyz;
|
|
448
|
-
#endif`,
|
|
448
|
+
#endif`,Ff=`#define PI 3.141592653589793
|
|
449
449
|
#define PI2 6.283185307179586
|
|
450
450
|
#define PI_HALF 1.5707963267948966
|
|
451
451
|
#define RECIPROCAL_PI 0.3183098861837907
|
|
@@ -519,7 +519,7 @@ vec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {
|
|
|
519
519
|
float F_Schlick( const in float f0, const in float f90, const in float dotVH ) {
|
|
520
520
|
float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );
|
|
521
521
|
return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );
|
|
522
|
-
} // validated`,
|
|
522
|
+
} // validated`,Of=`#ifdef ENVMAP_TYPE_CUBE_UV
|
|
523
523
|
#define cubeUV_minMipLevel 4.0
|
|
524
524
|
#define cubeUV_minTileSize 16.0
|
|
525
525
|
float getFace( vec3 direction ) {
|
|
@@ -612,7 +612,7 @@ float F_Schlick( const in float f0, const in float f90, const in float dotVH ) {
|
|
|
612
612
|
return vec4( mix( color0, color1, mipF ), 1.0 );
|
|
613
613
|
}
|
|
614
614
|
}
|
|
615
|
-
#endif`,
|
|
615
|
+
#endif`,Uf=`vec3 transformedNormal = objectNormal;
|
|
616
616
|
#ifdef USE_TANGENT
|
|
617
617
|
vec3 transformedTangent = objectTangent;
|
|
618
618
|
#endif
|
|
@@ -641,21 +641,21 @@ transformedNormal = normalMatrix * transformedNormal;
|
|
|
641
641
|
#ifdef FLIP_SIDED
|
|
642
642
|
transformedTangent = - transformedTangent;
|
|
643
643
|
#endif
|
|
644
|
-
#endif`,
|
|
644
|
+
#endif`,zf=`#ifdef USE_DISPLACEMENTMAP
|
|
645
645
|
uniform sampler2D displacementMap;
|
|
646
646
|
uniform float displacementScale;
|
|
647
647
|
uniform float displacementBias;
|
|
648
|
-
#endif`,
|
|
648
|
+
#endif`,kf=`#ifdef USE_DISPLACEMENTMAP
|
|
649
649
|
transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );
|
|
650
|
-
#endif`,
|
|
650
|
+
#endif`,Gf=`#ifdef USE_EMISSIVEMAP
|
|
651
651
|
vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );
|
|
652
652
|
#ifdef DECODE_VIDEO_TEXTURE_EMISSIVE
|
|
653
653
|
emissiveColor = sRGBTransferEOTF( emissiveColor );
|
|
654
654
|
#endif
|
|
655
655
|
totalEmissiveRadiance *= emissiveColor.rgb;
|
|
656
|
-
#endif`,
|
|
656
|
+
#endif`,Hf=`#ifdef USE_EMISSIVEMAP
|
|
657
657
|
uniform sampler2D emissiveMap;
|
|
658
|
-
#endif`,
|
|
658
|
+
#endif`,Vf="gl_FragColor = linearToOutputTexel( gl_FragColor );",Wf=`vec4 LinearTransferOETF( in vec4 value ) {
|
|
659
659
|
return value;
|
|
660
660
|
}
|
|
661
661
|
vec4 sRGBTransferEOTF( in vec4 value ) {
|
|
@@ -663,7 +663,7 @@ vec4 sRGBTransferEOTF( in vec4 value ) {
|
|
|
663
663
|
}
|
|
664
664
|
vec4 sRGBTransferOETF( in vec4 value ) {
|
|
665
665
|
return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );
|
|
666
|
-
}`,
|
|
666
|
+
}`,Yf=`#ifdef USE_ENVMAP
|
|
667
667
|
#ifdef ENV_WORLDPOS
|
|
668
668
|
vec3 cameraToFrag;
|
|
669
669
|
if ( isOrthographic ) {
|
|
@@ -692,7 +692,7 @@ vec4 sRGBTransferOETF( in vec4 value ) {
|
|
|
692
692
|
#elif defined( ENVMAP_BLENDING_ADD )
|
|
693
693
|
outgoingLight += envColor.xyz * specularStrength * reflectivity;
|
|
694
694
|
#endif
|
|
695
|
-
#endif`,
|
|
695
|
+
#endif`,Xf=`#ifdef USE_ENVMAP
|
|
696
696
|
uniform float envMapIntensity;
|
|
697
697
|
uniform float flipEnvMap;
|
|
698
698
|
uniform mat3 envMapRotation;
|
|
@@ -702,7 +702,7 @@ vec4 sRGBTransferOETF( in vec4 value ) {
|
|
|
702
702
|
uniform sampler2D envMap;
|
|
703
703
|
#endif
|
|
704
704
|
|
|
705
|
-
#endif`,
|
|
705
|
+
#endif`,Zf=`#ifdef USE_ENVMAP
|
|
706
706
|
uniform float reflectivity;
|
|
707
707
|
#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )
|
|
708
708
|
#define ENV_WORLDPOS
|
|
@@ -713,7 +713,7 @@ vec4 sRGBTransferOETF( in vec4 value ) {
|
|
|
713
713
|
#else
|
|
714
714
|
varying vec3 vReflect;
|
|
715
715
|
#endif
|
|
716
|
-
#endif`,
|
|
716
|
+
#endif`,jf=`#ifdef USE_ENVMAP
|
|
717
717
|
#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )
|
|
718
718
|
#define ENV_WORLDPOS
|
|
719
719
|
#endif
|
|
@@ -724,7 +724,7 @@ vec4 sRGBTransferOETF( in vec4 value ) {
|
|
|
724
724
|
varying vec3 vReflect;
|
|
725
725
|
uniform float refractionRatio;
|
|
726
726
|
#endif
|
|
727
|
-
#endif`,
|
|
727
|
+
#endif`,Jf=`#ifdef USE_ENVMAP
|
|
728
728
|
#ifdef ENV_WORLDPOS
|
|
729
729
|
vWorldPosition = worldPosition.xyz;
|
|
730
730
|
#else
|
|
@@ -741,18 +741,18 @@ vec4 sRGBTransferOETF( in vec4 value ) {
|
|
|
741
741
|
vReflect = refract( cameraToVertex, worldNormal, refractionRatio );
|
|
742
742
|
#endif
|
|
743
743
|
#endif
|
|
744
|
-
#endif`,
|
|
744
|
+
#endif`,Qf=`#ifdef USE_FOG
|
|
745
745
|
vFogDepth = - mvPosition.z;
|
|
746
|
-
#endif
|
|
746
|
+
#endif`,qf=`#ifdef USE_FOG
|
|
747
747
|
varying float vFogDepth;
|
|
748
|
-
#endif`,
|
|
748
|
+
#endif`,Kf=`#ifdef USE_FOG
|
|
749
749
|
#ifdef FOG_EXP2
|
|
750
750
|
float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );
|
|
751
751
|
#else
|
|
752
752
|
float fogFactor = smoothstep( fogNear, fogFar, vFogDepth );
|
|
753
753
|
#endif
|
|
754
754
|
gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );
|
|
755
|
-
#endif
|
|
755
|
+
#endif`,$f=`#ifdef USE_FOG
|
|
756
756
|
uniform vec3 fogColor;
|
|
757
757
|
varying float vFogDepth;
|
|
758
758
|
#ifdef FOG_EXP2
|
|
@@ -761,7 +761,7 @@ vec4 sRGBTransferOETF( in vec4 value ) {
|
|
|
761
761
|
uniform float fogNear;
|
|
762
762
|
uniform float fogFar;
|
|
763
763
|
#endif
|
|
764
|
-
#endif`,
|
|
764
|
+
#endif`,tg=`#ifdef USE_GRADIENTMAP
|
|
765
765
|
uniform sampler2D gradientMap;
|
|
766
766
|
#endif
|
|
767
767
|
vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {
|
|
@@ -773,12 +773,12 @@ vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {
|
|
|
773
773
|
vec2 fw = fwidth( coord ) * 0.5;
|
|
774
774
|
return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );
|
|
775
775
|
#endif
|
|
776
|
-
}`,
|
|
776
|
+
}`,eg=`#ifdef USE_LIGHTMAP
|
|
777
777
|
uniform sampler2D lightMap;
|
|
778
778
|
uniform float lightMapIntensity;
|
|
779
|
-
#endif`,
|
|
779
|
+
#endif`,ig=`LambertMaterial material;
|
|
780
780
|
material.diffuseColor = diffuseColor.rgb;
|
|
781
|
-
material.specularStrength = specularStrength;`,
|
|
781
|
+
material.specularStrength = specularStrength;`,ng=`varying vec3 vViewPosition;
|
|
782
782
|
struct LambertMaterial {
|
|
783
783
|
vec3 diffuseColor;
|
|
784
784
|
float specularStrength;
|
|
@@ -792,7 +792,7 @@ void RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometr
|
|
|
792
792
|
reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
|
|
793
793
|
}
|
|
794
794
|
#define RE_Direct RE_Direct_Lambert
|
|
795
|
-
#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,
|
|
795
|
+
#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,sg=`uniform bool receiveShadow;
|
|
796
796
|
uniform vec3 ambientLightColor;
|
|
797
797
|
#if defined( USE_LIGHT_PROBES )
|
|
798
798
|
uniform vec3 lightProbe[ 9 ];
|
|
@@ -908,7 +908,7 @@ float getSpotAttenuation( const in float coneCosine, const in float penumbraCosi
|
|
|
908
908
|
vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );
|
|
909
909
|
return irradiance;
|
|
910
910
|
}
|
|
911
|
-
#endif`,
|
|
911
|
+
#endif`,rg=`#ifdef USE_ENVMAP
|
|
912
912
|
vec3 getIBLIrradiance( const in vec3 normal ) {
|
|
913
913
|
#ifdef ENVMAP_TYPE_CUBE_UV
|
|
914
914
|
vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );
|
|
@@ -941,8 +941,8 @@ float getSpotAttenuation( const in float coneCosine, const in float penumbraCosi
|
|
|
941
941
|
#endif
|
|
942
942
|
}
|
|
943
943
|
#endif
|
|
944
|
-
#endif`,
|
|
945
|
-
material.diffuseColor = diffuseColor.rgb;`,
|
|
944
|
+
#endif`,ag=`ToonMaterial material;
|
|
945
|
+
material.diffuseColor = diffuseColor.rgb;`,og=`varying vec3 vViewPosition;
|
|
946
946
|
struct ToonMaterial {
|
|
947
947
|
vec3 diffuseColor;
|
|
948
948
|
};
|
|
@@ -954,11 +954,11 @@ void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPo
|
|
|
954
954
|
reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
|
|
955
955
|
}
|
|
956
956
|
#define RE_Direct RE_Direct_Toon
|
|
957
|
-
#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,
|
|
957
|
+
#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,Ag=`BlinnPhongMaterial material;
|
|
958
958
|
material.diffuseColor = diffuseColor.rgb;
|
|
959
959
|
material.specularColor = specular;
|
|
960
960
|
material.specularShininess = shininess;
|
|
961
|
-
material.specularStrength = specularStrength;`,
|
|
961
|
+
material.specularStrength = specularStrength;`,lg=`varying vec3 vViewPosition;
|
|
962
962
|
struct BlinnPhongMaterial {
|
|
963
963
|
vec3 diffuseColor;
|
|
964
964
|
vec3 specularColor;
|
|
@@ -975,7 +975,7 @@ void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geom
|
|
|
975
975
|
reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
|
|
976
976
|
}
|
|
977
977
|
#define RE_Direct RE_Direct_BlinnPhong
|
|
978
|
-
#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,
|
|
978
|
+
#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,hg=`PhysicalMaterial material;
|
|
979
979
|
material.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );
|
|
980
980
|
vec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );
|
|
981
981
|
float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );
|
|
@@ -1061,7 +1061,7 @@ material.roughness = min( material.roughness, 1.0 );
|
|
|
1061
1061
|
material.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );
|
|
1062
1062
|
material.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;
|
|
1063
1063
|
material.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;
|
|
1064
|
-
#endif`,
|
|
1064
|
+
#endif`,cg=`struct PhysicalMaterial {
|
|
1065
1065
|
vec3 diffuseColor;
|
|
1066
1066
|
float roughness;
|
|
1067
1067
|
vec3 specularColor;
|
|
@@ -1362,7 +1362,7 @@ void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradia
|
|
|
1362
1362
|
#define RE_IndirectSpecular RE_IndirectSpecular_Physical
|
|
1363
1363
|
float computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {
|
|
1364
1364
|
return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );
|
|
1365
|
-
}`,
|
|
1365
|
+
}`,ug=`
|
|
1366
1366
|
vec3 geometryPosition = - vViewPosition;
|
|
1367
1367
|
vec3 geometryNormal = normal;
|
|
1368
1368
|
vec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );
|
|
@@ -1477,7 +1477,7 @@ IncidentLight directLight;
|
|
|
1477
1477
|
#if defined( RE_IndirectSpecular )
|
|
1478
1478
|
vec3 radiance = vec3( 0.0 );
|
|
1479
1479
|
vec3 clearcoatRadiance = vec3( 0.0 );
|
|
1480
|
-
#endif`,
|
|
1480
|
+
#endif`,dg=`#if defined( RE_IndirectDiffuse )
|
|
1481
1481
|
#ifdef USE_LIGHTMAP
|
|
1482
1482
|
vec4 lightMapTexel = texture2D( lightMap, vLightMapUv );
|
|
1483
1483
|
vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;
|
|
@@ -1496,32 +1496,32 @@ IncidentLight directLight;
|
|
|
1496
1496
|
#ifdef USE_CLEARCOAT
|
|
1497
1497
|
clearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );
|
|
1498
1498
|
#endif
|
|
1499
|
-
#endif`,
|
|
1499
|
+
#endif`,fg=`#if defined( RE_IndirectDiffuse )
|
|
1500
1500
|
RE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
|
|
1501
1501
|
#endif
|
|
1502
1502
|
#if defined( RE_IndirectSpecular )
|
|
1503
1503
|
RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
|
|
1504
|
-
#endif`,
|
|
1504
|
+
#endif`,gg=`#if defined( USE_LOGDEPTHBUF )
|
|
1505
1505
|
gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;
|
|
1506
|
-
#endif`,
|
|
1506
|
+
#endif`,pg=`#if defined( USE_LOGDEPTHBUF )
|
|
1507
1507
|
uniform float logDepthBufFC;
|
|
1508
1508
|
varying float vFragDepth;
|
|
1509
1509
|
varying float vIsPerspective;
|
|
1510
|
-
#endif`,
|
|
1510
|
+
#endif`,mg=`#ifdef USE_LOGDEPTHBUF
|
|
1511
1511
|
varying float vFragDepth;
|
|
1512
1512
|
varying float vIsPerspective;
|
|
1513
|
-
#endif`,
|
|
1513
|
+
#endif`,Cg=`#ifdef USE_LOGDEPTHBUF
|
|
1514
1514
|
vFragDepth = 1.0 + gl_Position.w;
|
|
1515
1515
|
vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );
|
|
1516
|
-
#endif`,
|
|
1516
|
+
#endif`,Ig=`#ifdef USE_MAP
|
|
1517
1517
|
vec4 sampledDiffuseColor = texture2D( map, vMapUv );
|
|
1518
1518
|
#ifdef DECODE_VIDEO_TEXTURE
|
|
1519
1519
|
sampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor );
|
|
1520
1520
|
#endif
|
|
1521
1521
|
diffuseColor *= sampledDiffuseColor;
|
|
1522
|
-
#endif`,
|
|
1522
|
+
#endif`,xg=`#ifdef USE_MAP
|
|
1523
1523
|
uniform sampler2D map;
|
|
1524
|
-
#endif`,
|
|
1524
|
+
#endif`,vg=`#if defined( USE_MAP ) || defined( USE_ALPHAMAP )
|
|
1525
1525
|
#if defined( USE_POINTS_UV )
|
|
1526
1526
|
vec2 uv = vUv;
|
|
1527
1527
|
#else
|
|
@@ -1533,7 +1533,7 @@ IncidentLight directLight;
|
|
|
1533
1533
|
#endif
|
|
1534
1534
|
#ifdef USE_ALPHAMAP
|
|
1535
1535
|
diffuseColor.a *= texture2D( alphaMap, uv ).g;
|
|
1536
|
-
#endif`,
|
|
1536
|
+
#endif`,Eg=`#if defined( USE_POINTS_UV )
|
|
1537
1537
|
varying vec2 vUv;
|
|
1538
1538
|
#else
|
|
1539
1539
|
#if defined( USE_MAP ) || defined( USE_ALPHAMAP )
|
|
@@ -1545,19 +1545,19 @@ IncidentLight directLight;
|
|
|
1545
1545
|
#endif
|
|
1546
1546
|
#ifdef USE_ALPHAMAP
|
|
1547
1547
|
uniform sampler2D alphaMap;
|
|
1548
|
-
#endif`,
|
|
1548
|
+
#endif`,yg=`float metalnessFactor = metalness;
|
|
1549
1549
|
#ifdef USE_METALNESSMAP
|
|
1550
1550
|
vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );
|
|
1551
1551
|
metalnessFactor *= texelMetalness.b;
|
|
1552
|
-
#endif`,
|
|
1552
|
+
#endif`,Sg=`#ifdef USE_METALNESSMAP
|
|
1553
1553
|
uniform sampler2D metalnessMap;
|
|
1554
|
-
#endif`,
|
|
1554
|
+
#endif`,Mg=`#ifdef USE_INSTANCING_MORPH
|
|
1555
1555
|
float morphTargetInfluences[ MORPHTARGETS_COUNT ];
|
|
1556
1556
|
float morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;
|
|
1557
1557
|
for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
|
|
1558
1558
|
morphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;
|
|
1559
1559
|
}
|
|
1560
|
-
#endif`,
|
|
1560
|
+
#endif`,bg=`#if defined( USE_MORPHCOLORS )
|
|
1561
1561
|
vColor *= morphTargetBaseInfluence;
|
|
1562
1562
|
for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
|
|
1563
1563
|
#if defined( USE_COLOR_ALPHA )
|
|
@@ -1566,12 +1566,12 @@ IncidentLight directLight;
|
|
|
1566
1566
|
if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];
|
|
1567
1567
|
#endif
|
|
1568
1568
|
}
|
|
1569
|
-
#endif`,
|
|
1569
|
+
#endif`,Tg=`#ifdef USE_MORPHNORMALS
|
|
1570
1570
|
objectNormal *= morphTargetBaseInfluence;
|
|
1571
1571
|
for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
|
|
1572
1572
|
if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];
|
|
1573
1573
|
}
|
|
1574
|
-
#endif`,
|
|
1574
|
+
#endif`,wg=`#ifdef USE_MORPHTARGETS
|
|
1575
1575
|
#ifndef USE_INSTANCING_MORPH
|
|
1576
1576
|
uniform float morphTargetBaseInfluence;
|
|
1577
1577
|
uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];
|
|
@@ -1585,12 +1585,12 @@ IncidentLight directLight;
|
|
|
1585
1585
|
ivec3 morphUV = ivec3( x, y, morphTargetIndex );
|
|
1586
1586
|
return texelFetch( morphTargetsTexture, morphUV, 0 );
|
|
1587
1587
|
}
|
|
1588
|
-
#endif`,
|
|
1588
|
+
#endif`,_g=`#ifdef USE_MORPHTARGETS
|
|
1589
1589
|
transformed *= morphTargetBaseInfluence;
|
|
1590
1590
|
for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
|
|
1591
1591
|
if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];
|
|
1592
1592
|
}
|
|
1593
|
-
#endif`,
|
|
1593
|
+
#endif`,Rg=`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;
|
|
1594
1594
|
#ifdef FLAT_SHADED
|
|
1595
1595
|
vec3 fdx = dFdx( vViewPosition );
|
|
1596
1596
|
vec3 fdy = dFdy( vViewPosition );
|
|
@@ -1631,7 +1631,7 @@ IncidentLight directLight;
|
|
|
1631
1631
|
tbn2[1] *= faceDirection;
|
|
1632
1632
|
#endif
|
|
1633
1633
|
#endif
|
|
1634
|
-
vec3 nonPerturbedNormal = normal;`,
|
|
1634
|
+
vec3 nonPerturbedNormal = normal;`,Pg=`#ifdef USE_NORMALMAP_OBJECTSPACE
|
|
1635
1635
|
normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;
|
|
1636
1636
|
#ifdef FLIP_SIDED
|
|
1637
1637
|
normal = - normal;
|
|
@@ -1646,25 +1646,25 @@ vec3 nonPerturbedNormal = normal;`,Im=`#ifdef USE_NORMALMAP_OBJECTSPACE
|
|
|
1646
1646
|
normal = normalize( tbn * mapN );
|
|
1647
1647
|
#elif defined( USE_BUMPMAP )
|
|
1648
1648
|
normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );
|
|
1649
|
-
#endif`,
|
|
1649
|
+
#endif`,Dg=`#ifndef FLAT_SHADED
|
|
1650
1650
|
varying vec3 vNormal;
|
|
1651
1651
|
#ifdef USE_TANGENT
|
|
1652
1652
|
varying vec3 vTangent;
|
|
1653
1653
|
varying vec3 vBitangent;
|
|
1654
1654
|
#endif
|
|
1655
|
-
#endif`,
|
|
1655
|
+
#endif`,Lg=`#ifndef FLAT_SHADED
|
|
1656
1656
|
varying vec3 vNormal;
|
|
1657
1657
|
#ifdef USE_TANGENT
|
|
1658
1658
|
varying vec3 vTangent;
|
|
1659
1659
|
varying vec3 vBitangent;
|
|
1660
1660
|
#endif
|
|
1661
|
-
#endif`,
|
|
1661
|
+
#endif`,Ng=`#ifndef FLAT_SHADED
|
|
1662
1662
|
vNormal = normalize( transformedNormal );
|
|
1663
1663
|
#ifdef USE_TANGENT
|
|
1664
1664
|
vTangent = normalize( transformedTangent );
|
|
1665
1665
|
vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );
|
|
1666
1666
|
#endif
|
|
1667
|
-
#endif`,
|
|
1667
|
+
#endif`,Bg=`#ifdef USE_NORMALMAP
|
|
1668
1668
|
uniform sampler2D normalMap;
|
|
1669
1669
|
uniform vec2 normalScale;
|
|
1670
1670
|
#endif
|
|
@@ -1686,13 +1686,13 @@ vec3 nonPerturbedNormal = normal;`,Im=`#ifdef USE_NORMALMAP_OBJECTSPACE
|
|
|
1686
1686
|
float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );
|
|
1687
1687
|
return mat3( T * scale, B * scale, N );
|
|
1688
1688
|
}
|
|
1689
|
-
#endif`,
|
|
1689
|
+
#endif`,Fg=`#ifdef USE_CLEARCOAT
|
|
1690
1690
|
vec3 clearcoatNormal = nonPerturbedNormal;
|
|
1691
|
-
#endif`,
|
|
1691
|
+
#endif`,Og=`#ifdef USE_CLEARCOAT_NORMALMAP
|
|
1692
1692
|
vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;
|
|
1693
1693
|
clearcoatMapN.xy *= clearcoatNormalScale;
|
|
1694
1694
|
clearcoatNormal = normalize( tbn2 * clearcoatMapN );
|
|
1695
|
-
#endif`,
|
|
1695
|
+
#endif`,Ug=`#ifdef USE_CLEARCOATMAP
|
|
1696
1696
|
uniform sampler2D clearcoatMap;
|
|
1697
1697
|
#endif
|
|
1698
1698
|
#ifdef USE_CLEARCOAT_NORMALMAP
|
|
@@ -1701,18 +1701,18 @@ vec3 nonPerturbedNormal = normal;`,Im=`#ifdef USE_NORMALMAP_OBJECTSPACE
|
|
|
1701
1701
|
#endif
|
|
1702
1702
|
#ifdef USE_CLEARCOAT_ROUGHNESSMAP
|
|
1703
1703
|
uniform sampler2D clearcoatRoughnessMap;
|
|
1704
|
-
#endif`,
|
|
1704
|
+
#endif`,zg=`#ifdef USE_IRIDESCENCEMAP
|
|
1705
1705
|
uniform sampler2D iridescenceMap;
|
|
1706
1706
|
#endif
|
|
1707
1707
|
#ifdef USE_IRIDESCENCE_THICKNESSMAP
|
|
1708
1708
|
uniform sampler2D iridescenceThicknessMap;
|
|
1709
|
-
#endif`,
|
|
1709
|
+
#endif`,kg=`#ifdef OPAQUE
|
|
1710
1710
|
diffuseColor.a = 1.0;
|
|
1711
1711
|
#endif
|
|
1712
1712
|
#ifdef USE_TRANSMISSION
|
|
1713
1713
|
diffuseColor.a *= material.transmissionAlpha;
|
|
1714
1714
|
#endif
|
|
1715
|
-
gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,
|
|
1715
|
+
gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,Gg=`vec3 packNormalToRGB( const in vec3 normal ) {
|
|
1716
1716
|
return normalize( normal ) * 0.5 + 0.5;
|
|
1717
1717
|
}
|
|
1718
1718
|
vec3 unpackRGBToNormal( const in vec3 rgb ) {
|
|
@@ -1781,9 +1781,9 @@ float viewZToPerspectiveDepth( const in float viewZ, const in float near, const
|
|
|
1781
1781
|
}
|
|
1782
1782
|
float perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {
|
|
1783
1783
|
return ( near * far ) / ( ( far - near ) * depth - far );
|
|
1784
|
-
}`,
|
|
1784
|
+
}`,Hg=`#ifdef PREMULTIPLIED_ALPHA
|
|
1785
1785
|
gl_FragColor.rgb *= gl_FragColor.a;
|
|
1786
|
-
#endif`,
|
|
1786
|
+
#endif`,Vg=`vec4 mvPosition = vec4( transformed, 1.0 );
|
|
1787
1787
|
#ifdef USE_BATCHING
|
|
1788
1788
|
mvPosition = batchingMatrix * mvPosition;
|
|
1789
1789
|
#endif
|
|
@@ -1791,22 +1791,22 @@ float perspectiveDepthToViewZ( const in float depth, const in float near, const
|
|
|
1791
1791
|
mvPosition = instanceMatrix * mvPosition;
|
|
1792
1792
|
#endif
|
|
1793
1793
|
mvPosition = modelViewMatrix * mvPosition;
|
|
1794
|
-
gl_Position = projectionMatrix * mvPosition;`,
|
|
1794
|
+
gl_Position = projectionMatrix * mvPosition;`,Wg=`#ifdef DITHERING
|
|
1795
1795
|
gl_FragColor.rgb = dithering( gl_FragColor.rgb );
|
|
1796
|
-
#endif`,
|
|
1796
|
+
#endif`,Yg=`#ifdef DITHERING
|
|
1797
1797
|
vec3 dithering( vec3 color ) {
|
|
1798
1798
|
float grid_position = rand( gl_FragCoord.xy );
|
|
1799
1799
|
vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );
|
|
1800
1800
|
dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );
|
|
1801
1801
|
return color + dither_shift_RGB;
|
|
1802
1802
|
}
|
|
1803
|
-
#endif`,
|
|
1803
|
+
#endif`,Xg=`float roughnessFactor = roughness;
|
|
1804
1804
|
#ifdef USE_ROUGHNESSMAP
|
|
1805
1805
|
vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );
|
|
1806
1806
|
roughnessFactor *= texelRoughness.g;
|
|
1807
|
-
#endif`,
|
|
1807
|
+
#endif`,Zg=`#ifdef USE_ROUGHNESSMAP
|
|
1808
1808
|
uniform sampler2D roughnessMap;
|
|
1809
|
-
#endif`,
|
|
1809
|
+
#endif`,jg=`#if NUM_SPOT_LIGHT_COORDS > 0
|
|
1810
1810
|
varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];
|
|
1811
1811
|
#endif
|
|
1812
1812
|
#if NUM_SPOT_LIGHT_MAPS > 0
|
|
@@ -2001,7 +2001,7 @@ gl_Position = projectionMatrix * mvPosition;`,Wm=`#ifdef DITHERING
|
|
|
2001
2001
|
}
|
|
2002
2002
|
return mix( 1.0, shadow, shadowIntensity );
|
|
2003
2003
|
}
|
|
2004
|
-
#endif`,
|
|
2004
|
+
#endif`,Jg=`#if NUM_SPOT_LIGHT_COORDS > 0
|
|
2005
2005
|
uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];
|
|
2006
2006
|
varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];
|
|
2007
2007
|
#endif
|
|
@@ -2042,7 +2042,7 @@ gl_Position = projectionMatrix * mvPosition;`,Wm=`#ifdef DITHERING
|
|
|
2042
2042
|
};
|
|
2043
2043
|
uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];
|
|
2044
2044
|
#endif
|
|
2045
|
-
#endif`,
|
|
2045
|
+
#endif`,Qg=`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )
|
|
2046
2046
|
vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );
|
|
2047
2047
|
vec4 shadowWorldPosition;
|
|
2048
2048
|
#endif
|
|
@@ -2074,7 +2074,7 @@ gl_Position = projectionMatrix * mvPosition;`,Wm=`#ifdef DITHERING
|
|
|
2074
2074
|
vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;
|
|
2075
2075
|
}
|
|
2076
2076
|
#pragma unroll_loop_end
|
|
2077
|
-
#endif
|
|
2077
|
+
#endif`,qg=`float getShadowMask() {
|
|
2078
2078
|
float shadow = 1.0;
|
|
2079
2079
|
#ifdef USE_SHADOWMAP
|
|
2080
2080
|
#if NUM_DIR_LIGHT_SHADOWS > 0
|
|
@@ -2106,12 +2106,12 @@ gl_Position = projectionMatrix * mvPosition;`,Wm=`#ifdef DITHERING
|
|
|
2106
2106
|
#endif
|
|
2107
2107
|
#endif
|
|
2108
2108
|
return shadow;
|
|
2109
|
-
}`,
|
|
2109
|
+
}`,Kg=`#ifdef USE_SKINNING
|
|
2110
2110
|
mat4 boneMatX = getBoneMatrix( skinIndex.x );
|
|
2111
2111
|
mat4 boneMatY = getBoneMatrix( skinIndex.y );
|
|
2112
2112
|
mat4 boneMatZ = getBoneMatrix( skinIndex.z );
|
|
2113
2113
|
mat4 boneMatW = getBoneMatrix( skinIndex.w );
|
|
2114
|
-
#endif
|
|
2114
|
+
#endif`,$g=`#ifdef USE_SKINNING
|
|
2115
2115
|
uniform mat4 bindMatrix;
|
|
2116
2116
|
uniform mat4 bindMatrixInverse;
|
|
2117
2117
|
uniform highp sampler2D boneTexture;
|
|
@@ -2126,7 +2126,7 @@ gl_Position = projectionMatrix * mvPosition;`,Wm=`#ifdef DITHERING
|
|
|
2126
2126
|
vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );
|
|
2127
2127
|
return mat4( v1, v2, v3, v4 );
|
|
2128
2128
|
}
|
|
2129
|
-
#endif`,
|
|
2129
|
+
#endif`,tp=`#ifdef USE_SKINNING
|
|
2130
2130
|
vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );
|
|
2131
2131
|
vec4 skinned = vec4( 0.0 );
|
|
2132
2132
|
skinned += boneMatX * skinVertex * skinWeight.x;
|
|
@@ -2134,7 +2134,7 @@ gl_Position = projectionMatrix * mvPosition;`,Wm=`#ifdef DITHERING
|
|
|
2134
2134
|
skinned += boneMatZ * skinVertex * skinWeight.z;
|
|
2135
2135
|
skinned += boneMatW * skinVertex * skinWeight.w;
|
|
2136
2136
|
transformed = ( bindMatrixInverse * skinned ).xyz;
|
|
2137
|
-
#endif`,
|
|
2137
|
+
#endif`,ep=`#ifdef USE_SKINNING
|
|
2138
2138
|
mat4 skinMatrix = mat4( 0.0 );
|
|
2139
2139
|
skinMatrix += skinWeight.x * boneMatX;
|
|
2140
2140
|
skinMatrix += skinWeight.y * boneMatY;
|
|
@@ -2145,17 +2145,17 @@ gl_Position = projectionMatrix * mvPosition;`,Wm=`#ifdef DITHERING
|
|
|
2145
2145
|
#ifdef USE_TANGENT
|
|
2146
2146
|
objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;
|
|
2147
2147
|
#endif
|
|
2148
|
-
#endif`,
|
|
2148
|
+
#endif`,ip=`float specularStrength;
|
|
2149
2149
|
#ifdef USE_SPECULARMAP
|
|
2150
2150
|
vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );
|
|
2151
2151
|
specularStrength = texelSpecular.r;
|
|
2152
2152
|
#else
|
|
2153
2153
|
specularStrength = 1.0;
|
|
2154
|
-
#endif`,
|
|
2154
|
+
#endif`,np=`#ifdef USE_SPECULARMAP
|
|
2155
2155
|
uniform sampler2D specularMap;
|
|
2156
|
-
#endif`,
|
|
2156
|
+
#endif`,sp=`#if defined( TONE_MAPPING )
|
|
2157
2157
|
gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );
|
|
2158
|
-
#endif`,
|
|
2158
|
+
#endif`,rp=`#ifndef saturate
|
|
2159
2159
|
#define saturate( a ) clamp( a, 0.0, 1.0 )
|
|
2160
2160
|
#endif
|
|
2161
2161
|
uniform float toneMappingExposure;
|
|
@@ -2252,7 +2252,7 @@ vec3 NeutralToneMapping( vec3 color ) {
|
|
|
2252
2252
|
float g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );
|
|
2253
2253
|
return mix( color, vec3( newPeak ), g );
|
|
2254
2254
|
}
|
|
2255
|
-
vec3 CustomToneMapping( vec3 color ) { return color; }`,
|
|
2255
|
+
vec3 CustomToneMapping( vec3 color ) { return color; }`,ap=`#ifdef USE_TRANSMISSION
|
|
2256
2256
|
material.transmission = transmission;
|
|
2257
2257
|
material.transmissionAlpha = 1.0;
|
|
2258
2258
|
material.thickness = thickness;
|
|
@@ -2273,7 +2273,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,ag=`#ifdef USE_TRANSMISS
|
|
|
2273
2273
|
material.attenuationColor, material.attenuationDistance );
|
|
2274
2274
|
material.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );
|
|
2275
2275
|
totalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );
|
|
2276
|
-
#endif`,
|
|
2276
|
+
#endif`,op=`#ifdef USE_TRANSMISSION
|
|
2277
2277
|
uniform float transmission;
|
|
2278
2278
|
uniform float thickness;
|
|
2279
2279
|
uniform float attenuationDistance;
|
|
@@ -2399,7 +2399,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,ag=`#ifdef USE_TRANSMISS
|
|
|
2399
2399
|
float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;
|
|
2400
2400
|
return vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );
|
|
2401
2401
|
}
|
|
2402
|
-
#endif`,
|
|
2402
|
+
#endif`,Ap=`#if defined( USE_UV ) || defined( USE_ANISOTROPY )
|
|
2403
2403
|
varying vec2 vUv;
|
|
2404
2404
|
#endif
|
|
2405
2405
|
#ifdef USE_MAP
|
|
@@ -2469,7 +2469,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,ag=`#ifdef USE_TRANSMISS
|
|
|
2469
2469
|
#ifdef USE_THICKNESSMAP
|
|
2470
2470
|
uniform mat3 thicknessMapTransform;
|
|
2471
2471
|
varying vec2 vThicknessMapUv;
|
|
2472
|
-
#endif`,
|
|
2472
|
+
#endif`,lp=`#if defined( USE_UV ) || defined( USE_ANISOTROPY )
|
|
2473
2473
|
varying vec2 vUv;
|
|
2474
2474
|
#endif
|
|
2475
2475
|
#ifdef USE_MAP
|
|
@@ -2563,7 +2563,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,ag=`#ifdef USE_TRANSMISS
|
|
|
2563
2563
|
#ifdef USE_THICKNESSMAP
|
|
2564
2564
|
uniform mat3 thicknessMapTransform;
|
|
2565
2565
|
varying vec2 vThicknessMapUv;
|
|
2566
|
-
#endif`,
|
|
2566
|
+
#endif`,hp=`#if defined( USE_UV ) || defined( USE_ANISOTROPY )
|
|
2567
2567
|
vUv = vec3( uv, 1 ).xy;
|
|
2568
2568
|
#endif
|
|
2569
2569
|
#ifdef USE_MAP
|
|
@@ -2634,7 +2634,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,ag=`#ifdef USE_TRANSMISS
|
|
|
2634
2634
|
#endif
|
|
2635
2635
|
#ifdef USE_THICKNESSMAP
|
|
2636
2636
|
vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;
|
|
2637
|
-
#endif`,
|
|
2637
|
+
#endif`,cp=`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0
|
|
2638
2638
|
vec4 worldPosition = vec4( transformed, 1.0 );
|
|
2639
2639
|
#ifdef USE_BATCHING
|
|
2640
2640
|
worldPosition = batchingMatrix * worldPosition;
|
|
@@ -2643,7 +2643,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,ag=`#ifdef USE_TRANSMISS
|
|
|
2643
2643
|
worldPosition = instanceMatrix * worldPosition;
|
|
2644
2644
|
#endif
|
|
2645
2645
|
worldPosition = modelMatrix * worldPosition;
|
|
2646
|
-
#endif`;const
|
|
2646
|
+
#endif`;const Ot={alphahash_fragment:df,alphahash_pars_fragment:ff,alphamap_fragment:gf,alphamap_pars_fragment:pf,alphatest_fragment:mf,alphatest_pars_fragment:Cf,aomap_fragment:If,aomap_pars_fragment:xf,batching_pars_vertex:vf,batching_vertex:Ef,begin_vertex:yf,beginnormal_vertex:Sf,bsdfs:Mf,iridescence_fragment:bf,bumpmap_pars_fragment:Tf,clipping_planes_fragment:wf,clipping_planes_pars_fragment:_f,clipping_planes_pars_vertex:Rf,clipping_planes_vertex:Pf,color_fragment:Df,color_pars_fragment:Lf,color_pars_vertex:Nf,color_vertex:Bf,common:Ff,cube_uv_reflection_fragment:Of,defaultnormal_vertex:Uf,displacementmap_pars_vertex:zf,displacementmap_vertex:kf,emissivemap_fragment:Gf,emissivemap_pars_fragment:Hf,colorspace_fragment:Vf,colorspace_pars_fragment:Wf,envmap_fragment:Yf,envmap_common_pars_fragment:Xf,envmap_pars_fragment:Zf,envmap_pars_vertex:jf,envmap_physical_pars_fragment:rg,envmap_vertex:Jf,fog_vertex:Qf,fog_pars_vertex:qf,fog_fragment:Kf,fog_pars_fragment:$f,gradientmap_pars_fragment:tg,lightmap_pars_fragment:eg,lights_lambert_fragment:ig,lights_lambert_pars_fragment:ng,lights_pars_begin:sg,lights_toon_fragment:ag,lights_toon_pars_fragment:og,lights_phong_fragment:Ag,lights_phong_pars_fragment:lg,lights_physical_fragment:hg,lights_physical_pars_fragment:cg,lights_fragment_begin:ug,lights_fragment_maps:dg,lights_fragment_end:fg,logdepthbuf_fragment:gg,logdepthbuf_pars_fragment:pg,logdepthbuf_pars_vertex:mg,logdepthbuf_vertex:Cg,map_fragment:Ig,map_pars_fragment:xg,map_particle_fragment:vg,map_particle_pars_fragment:Eg,metalnessmap_fragment:yg,metalnessmap_pars_fragment:Sg,morphinstance_vertex:Mg,morphcolor_vertex:bg,morphnormal_vertex:Tg,morphtarget_pars_vertex:wg,morphtarget_vertex:_g,normal_fragment_begin:Rg,normal_fragment_maps:Pg,normal_pars_fragment:Dg,normal_pars_vertex:Lg,normal_vertex:Ng,normalmap_pars_fragment:Bg,clearcoat_normal_fragment_begin:Fg,clearcoat_normal_fragment_maps:Og,clearcoat_pars_fragment:Ug,iridescence_pars_fragment:zg,opaque_fragment:kg,packing:Gg,premultiplied_alpha_fragment:Hg,project_vertex:Vg,dithering_fragment:Wg,dithering_pars_fragment:Yg,roughnessmap_fragment:Xg,roughnessmap_pars_fragment:Zg,shadowmap_pars_fragment:jg,shadowmap_pars_vertex:Jg,shadowmap_vertex:Qg,shadowmask_pars_fragment:qg,skinbase_vertex:Kg,skinning_pars_vertex:$g,skinning_vertex:tp,skinnormal_vertex:ep,specularmap_fragment:ip,specularmap_pars_fragment:np,tonemapping_fragment:sp,tonemapping_pars_fragment:rp,transmission_fragment:ap,transmission_pars_fragment:op,uv_pars_fragment:Ap,uv_pars_vertex:lp,uv_vertex:hp,worldpos_vertex:cp,background_vert:`varying vec2 vUv;
|
|
2647
2647
|
uniform mat3 uvTransform;
|
|
2648
2648
|
void main() {
|
|
2649
2649
|
vUv = ( uvTransform * vec3( uv, 1 ) ).xy;
|
|
@@ -3699,7 +3699,7 @@ void main() {
|
|
|
3699
3699
|
#include <tonemapping_fragment>
|
|
3700
3700
|
#include <colorspace_fragment>
|
|
3701
3701
|
#include <fog_fragment>
|
|
3702
|
-
}`},at={common:{diffuse:{value:new Vt(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new Ut},alphaMap:{value:null},alphaMapTransform:{value:new Ut},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new Ut}},envmap:{envMap:{value:null},envMapRotation:{value:new Ut},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new Ut}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new Ut}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new Ut},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new Ut},normalScale:{value:new Dt(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new Ut},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new Ut}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new Ut}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new Ut}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Vt(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Vt(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new Ut},alphaTest:{value:0},uvTransform:{value:new Ut}},sprite:{diffuse:{value:new Vt(16777215)},opacity:{value:1},center:{value:new Dt(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new Ut},alphaMap:{value:null},alphaMapTransform:{value:new Ut},alphaTest:{value:0}}},bi={basic:{uniforms:Ie([at.common,at.specularmap,at.envmap,at.aomap,at.lightmap,at.fog]),vertexShader:Ft.meshbasic_vert,fragmentShader:Ft.meshbasic_frag},lambert:{uniforms:Ie([at.common,at.specularmap,at.envmap,at.aomap,at.lightmap,at.emissivemap,at.bumpmap,at.normalmap,at.displacementmap,at.fog,at.lights,{emissive:{value:new Vt(0)}}]),vertexShader:Ft.meshlambert_vert,fragmentShader:Ft.meshlambert_frag},phong:{uniforms:Ie([at.common,at.specularmap,at.envmap,at.aomap,at.lightmap,at.emissivemap,at.bumpmap,at.normalmap,at.displacementmap,at.fog,at.lights,{emissive:{value:new Vt(0)},specular:{value:new Vt(1118481)},shininess:{value:30}}]),vertexShader:Ft.meshphong_vert,fragmentShader:Ft.meshphong_frag},standard:{uniforms:Ie([at.common,at.envmap,at.aomap,at.lightmap,at.emissivemap,at.bumpmap,at.normalmap,at.displacementmap,at.roughnessmap,at.metalnessmap,at.fog,at.lights,{emissive:{value:new Vt(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Ft.meshphysical_vert,fragmentShader:Ft.meshphysical_frag},toon:{uniforms:Ie([at.common,at.aomap,at.lightmap,at.emissivemap,at.bumpmap,at.normalmap,at.displacementmap,at.gradientmap,at.fog,at.lights,{emissive:{value:new Vt(0)}}]),vertexShader:Ft.meshtoon_vert,fragmentShader:Ft.meshtoon_frag},matcap:{uniforms:Ie([at.common,at.bumpmap,at.normalmap,at.displacementmap,at.fog,{matcap:{value:null}}]),vertexShader:Ft.meshmatcap_vert,fragmentShader:Ft.meshmatcap_frag},points:{uniforms:Ie([at.points,at.fog]),vertexShader:Ft.points_vert,fragmentShader:Ft.points_frag},dashed:{uniforms:Ie([at.common,at.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Ft.linedashed_vert,fragmentShader:Ft.linedashed_frag},depth:{uniforms:Ie([at.common,at.displacementmap]),vertexShader:Ft.depth_vert,fragmentShader:Ft.depth_frag},normal:{uniforms:Ie([at.common,at.bumpmap,at.normalmap,at.displacementmap,{opacity:{value:1}}]),vertexShader:Ft.meshnormal_vert,fragmentShader:Ft.meshnormal_frag},sprite:{uniforms:Ie([at.sprite,at.fog]),vertexShader:Ft.sprite_vert,fragmentShader:Ft.sprite_frag},background:{uniforms:{uvTransform:{value:new Ut},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:Ft.background_vert,fragmentShader:Ft.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new Ut}},vertexShader:Ft.backgroundCube_vert,fragmentShader:Ft.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:Ft.cube_vert,fragmentShader:Ft.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Ft.equirect_vert,fragmentShader:Ft.equirect_frag},distanceRGBA:{uniforms:Ie([at.common,at.displacementmap,{referencePosition:{value:new N},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Ft.distanceRGBA_vert,fragmentShader:Ft.distanceRGBA_frag},shadow:{uniforms:Ie([at.lights,at.fog,{color:{value:new Vt(0)},opacity:{value:1}}]),vertexShader:Ft.shadow_vert,fragmentShader:Ft.shadow_frag}};bi.physical={uniforms:Ie([bi.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new Ut},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new Ut},clearcoatNormalScale:{value:new Dt(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new Ut},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new Ut},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new Ut},sheen:{value:0},sheenColor:{value:new Vt(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new Ut},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new Ut},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new Ut},transmissionSamplerSize:{value:new Dt},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new Ut},attenuationDistance:{value:0},attenuationColor:{value:new Vt(0)},specularColor:{value:new Vt(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new Ut},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new Ut},anisotropyVector:{value:new Dt},anisotropyMap:{value:null},anisotropyMapTransform:{value:new Ut}}]),vertexShader:Ft.meshphysical_vert,fragmentShader:Ft.meshphysical_frag};const Qr={r:0,b:0,g:0},Dn=new yi,dg=new ue;function fg(s,t,e,i,n,r,a){const o=new Vt(0);let h=r===!0?0:1,l,c,u=null,d=0,f=null;function g(b){let y=b.isScene===!0?b.background:null;return y&&y.isTexture&&(y=(b.backgroundBlurriness>0?e:t).get(y)),y}function _(b){let y=!1;const R=g(b);R===null?p(o,h):R&&R.isColor&&(p(R,1),y=!0);const w=s.xr.getEnvironmentBlendMode();w==="additive"?i.buffers.color.setClear(0,0,0,1,a):w==="alpha-blend"&&i.buffers.color.setClear(0,0,0,0,a),(s.autoClear||y)&&(i.buffers.depth.setTest(!0),i.buffers.depth.setMask(!0),i.buffers.color.setMask(!0),s.clear(s.autoClearColor,s.autoClearDepth,s.autoClearStencil))}function m(b,y){const R=g(y);R&&(R.isCubeTexture||R.mapping===Tr)?(c===void 0&&(c=new Si(new tr(1,1,1),new on({name:"BackgroundCubeMaterial",uniforms:ys(bi.backgroundCube.uniforms),vertexShader:bi.backgroundCube.vertexShader,fragmentShader:bi.backgroundCube.fragmentShader,side:Ue,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),c.geometry.deleteAttribute("normal"),c.geometry.deleteAttribute("uv"),c.onBeforeRender=function(w,C,I){this.matrixWorld.copyPosition(I.matrixWorld)},Object.defineProperty(c.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),n.update(c)),Dn.copy(y.backgroundRotation),Dn.x*=-1,Dn.y*=-1,Dn.z*=-1,R.isCubeTexture&&R.isRenderTargetTexture===!1&&(Dn.y*=-1,Dn.z*=-1),c.material.uniforms.envMap.value=R,c.material.uniforms.flipEnvMap.value=R.isCubeTexture&&R.isRenderTargetTexture===!1?-1:1,c.material.uniforms.backgroundBlurriness.value=y.backgroundBlurriness,c.material.uniforms.backgroundIntensity.value=y.backgroundIntensity,c.material.uniforms.backgroundRotation.value.setFromMatrix4(dg.makeRotationFromEuler(Dn)),c.material.toneMapped=Xt.getTransfer(R.colorSpace)!==Zt,(u!==R||d!==R.version||f!==s.toneMapping)&&(c.material.needsUpdate=!0,u=R,d=R.version,f=s.toneMapping),c.layers.enableAll(),b.unshift(c,c.geometry,c.material,0,0,null)):R&&R.isTexture&&(l===void 0&&(l=new Si(new ir(2,2),new on({name:"BackgroundMaterial",uniforms:ys(bi.background.uniforms),vertexShader:bi.background.vertexShader,fragmentShader:bi.background.fragmentShader,side:$i,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),l.geometry.deleteAttribute("normal"),Object.defineProperty(l.material,"map",{get:function(){return this.uniforms.t2D.value}}),n.update(l)),l.material.uniforms.t2D.value=R,l.material.uniforms.backgroundIntensity.value=y.backgroundIntensity,l.material.toneMapped=Xt.getTransfer(R.colorSpace)!==Zt,R.matrixAutoUpdate===!0&&R.updateMatrix(),l.material.uniforms.uvTransform.value.copy(R.matrix),(u!==R||d!==R.version||f!==s.toneMapping)&&(l.material.needsUpdate=!0,u=R,d=R.version,f=s.toneMapping),l.layers.enableAll(),b.unshift(l,l.geometry,l.material,0,0,null))}function p(b,y){b.getRGB(Qr,sc(s)),i.buffers.color.setClear(Qr.r,Qr.g,Qr.b,y,a)}function T(){c!==void 0&&(c.geometry.dispose(),c.material.dispose(),c=void 0),l!==void 0&&(l.geometry.dispose(),l.material.dispose(),l=void 0)}return{getClearColor:function(){return o},setClearColor:function(b,y=1){o.set(b),h=y,p(o,h)},getClearAlpha:function(){return h},setClearAlpha:function(b){h=b,p(o,h)},render:_,addToRenderList:m,dispose:T}}function pg(s,t){const e=s.getParameter(s.MAX_VERTEX_ATTRIBS),i={},n=d(null);let r=n,a=!1;function o(M,A,B,F,z){let W=!1;const X=u(F,B,A);r!==X&&(r=X,l(r.object)),W=f(M,F,B,z),W&&g(M,F,B,z),z!==null&&t.update(z,s.ELEMENT_ARRAY_BUFFER),(W||a)&&(a=!1,y(M,A,B,F),z!==null&&s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,t.get(z).buffer))}function h(){return s.createVertexArray()}function l(M){return s.bindVertexArray(M)}function c(M){return s.deleteVertexArray(M)}function u(M,A,B){const F=B.wireframe===!0;let z=i[M.id];z===void 0&&(z={},i[M.id]=z);let W=z[A.id];W===void 0&&(W={},z[A.id]=W);let X=W[F];return X===void 0&&(X=d(h()),W[F]=X),X}function d(M){const A=[],B=[],F=[];for(let z=0;z<e;z++)A[z]=0,B[z]=0,F[z]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:A,enabledAttributes:B,attributeDivisors:F,object:M,attributes:{},index:null}}function f(M,A,B,F){const z=r.attributes,W=A.attributes;let X=0;const Q=B.getAttributes();for(const H in Q)if(Q[H].location>=0){const ht=z[H];let _t=W[H];if(_t===void 0&&(H==="instanceMatrix"&&M.instanceMatrix&&(_t=M.instanceMatrix),H==="instanceColor"&&M.instanceColor&&(_t=M.instanceColor)),ht===void 0||ht.attribute!==_t||_t&&ht.data!==_t.data)return!0;X++}return r.attributesNum!==X||r.index!==F}function g(M,A,B,F){const z={},W=A.attributes;let X=0;const Q=B.getAttributes();for(const H in Q)if(Q[H].location>=0){let ht=W[H];ht===void 0&&(H==="instanceMatrix"&&M.instanceMatrix&&(ht=M.instanceMatrix),H==="instanceColor"&&M.instanceColor&&(ht=M.instanceColor));const _t={};_t.attribute=ht,ht&&ht.data&&(_t.data=ht.data),z[H]=_t,X++}r.attributes=z,r.attributesNum=X,r.index=F}function _(){const M=r.newAttributes;for(let A=0,B=M.length;A<B;A++)M[A]=0}function m(M){p(M,0)}function p(M,A){const B=r.newAttributes,F=r.enabledAttributes,z=r.attributeDivisors;B[M]=1,F[M]===0&&(s.enableVertexAttribArray(M),F[M]=1),z[M]!==A&&(s.vertexAttribDivisor(M,A),z[M]=A)}function T(){const M=r.newAttributes,A=r.enabledAttributes;for(let B=0,F=A.length;B<F;B++)A[B]!==M[B]&&(s.disableVertexAttribArray(B),A[B]=0)}function b(M,A,B,F,z,W,X){X===!0?s.vertexAttribIPointer(M,A,B,z,W):s.vertexAttribPointer(M,A,B,F,z,W)}function y(M,A,B,F){_();const z=F.attributes,W=B.getAttributes(),X=A.defaultAttributeValues;for(const Q in W){const H=W[Q];if(H.location>=0){let rt=z[Q];if(rt===void 0&&(Q==="instanceMatrix"&&M.instanceMatrix&&(rt=M.instanceMatrix),Q==="instanceColor"&&M.instanceColor&&(rt=M.instanceColor)),rt!==void 0){const ht=rt.normalized,_t=rt.itemSize,Ot=t.get(rt);if(Ot===void 0)continue;const ne=Ot.buffer,Jt=Ot.type,j=Ot.bytesPerElement,ot=Jt===s.INT||Jt===s.UNSIGNED_INT||rt.gpuType===$a;if(rt.isInterleavedBufferAttribute){const nt=rt.data,At=nt.stride,wt=rt.offset;if(nt.isInstancedInterleavedBuffer){for(let It=0;It<H.locationSize;It++)p(H.location+It,nt.meshPerAttribute);M.isInstancedMesh!==!0&&F._maxInstanceCount===void 0&&(F._maxInstanceCount=nt.meshPerAttribute*nt.count)}else for(let It=0;It<H.locationSize;It++)m(H.location+It);s.bindBuffer(s.ARRAY_BUFFER,ne);for(let It=0;It<H.locationSize;It++)b(H.location+It,_t/H.locationSize,Jt,ht,At*j,(wt+_t/H.locationSize*It)*j,ot)}else{if(rt.isInstancedBufferAttribute){for(let nt=0;nt<H.locationSize;nt++)p(H.location+nt,rt.meshPerAttribute);M.isInstancedMesh!==!0&&F._maxInstanceCount===void 0&&(F._maxInstanceCount=rt.meshPerAttribute*rt.count)}else for(let nt=0;nt<H.locationSize;nt++)m(H.location+nt);s.bindBuffer(s.ARRAY_BUFFER,ne);for(let nt=0;nt<H.locationSize;nt++)b(H.location+nt,_t/H.locationSize,Jt,ht,_t*j,_t/H.locationSize*nt*j,ot)}}else if(X!==void 0){const ht=X[Q];if(ht!==void 0)switch(ht.length){case 2:s.vertexAttrib2fv(H.location,ht);break;case 3:s.vertexAttrib3fv(H.location,ht);break;case 4:s.vertexAttrib4fv(H.location,ht);break;default:s.vertexAttrib1fv(H.location,ht)}}}}T()}function R(){I();for(const M in i){const A=i[M];for(const B in A){const F=A[B];for(const z in F)c(F[z].object),delete F[z];delete A[B]}delete i[M]}}function w(M){if(i[M.id]===void 0)return;const A=i[M.id];for(const B in A){const F=A[B];for(const z in F)c(F[z].object),delete F[z];delete A[B]}delete i[M.id]}function C(M){for(const A in i){const B=i[A];if(B[M.id]===void 0)continue;const F=B[M.id];for(const z in F)c(F[z].object),delete F[z];delete B[M.id]}}function I(){S(),a=!0,r!==n&&(r=n,l(r.object))}function S(){n.geometry=null,n.program=null,n.wireframe=!1}return{setup:o,reset:I,resetDefaultState:S,dispose:R,releaseStatesOfGeometry:w,releaseStatesOfProgram:C,initAttributes:_,enableAttribute:m,disableUnusedAttributes:T}}function mg(s,t,e){let i;function n(l){i=l}function r(l,c){s.drawArrays(i,l,c),e.update(c,i,1)}function a(l,c,u){u!==0&&(s.drawArraysInstanced(i,l,c,u),e.update(c,i,u))}function o(l,c,u){if(u===0)return;t.get("WEBGL_multi_draw").multiDrawArraysWEBGL(i,l,0,c,0,u);let f=0;for(let g=0;g<u;g++)f+=c[g];e.update(f,i,1)}function h(l,c,u,d){if(u===0)return;const f=t.get("WEBGL_multi_draw");if(f===null)for(let g=0;g<l.length;g++)a(l[g],c[g],d[g]);else{f.multiDrawArraysInstancedWEBGL(i,l,0,c,0,d,0,u);let g=0;for(let _=0;_<u;_++)g+=c[_]*d[_];e.update(g,i,1)}}this.setMode=n,this.render=r,this.renderInstances=a,this.renderMultiDraw=o,this.renderMultiDrawInstances=h}function gg(s,t,e,i){let n;function r(){if(n!==void 0)return n;if(t.has("EXT_texture_filter_anisotropic")===!0){const C=t.get("EXT_texture_filter_anisotropic");n=s.getParameter(C.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else n=0;return n}function a(C){return!(C!==li&&i.convert(C)!==s.getParameter(s.IMPLEMENTATION_COLOR_READ_FORMAT))}function o(C){const I=C===Hs&&(t.has("EXT_color_buffer_half_float")||t.has("EXT_color_buffer_float"));return!(C!==xi&&i.convert(C)!==s.getParameter(s.IMPLEMENTATION_COLOR_READ_TYPE)&&C!==Fi&&!I)}function h(C){if(C==="highp"){if(s.getShaderPrecisionFormat(s.VERTEX_SHADER,s.HIGH_FLOAT).precision>0&&s.getShaderPrecisionFormat(s.FRAGMENT_SHADER,s.HIGH_FLOAT).precision>0)return"highp";C="mediump"}return C==="mediump"&&s.getShaderPrecisionFormat(s.VERTEX_SHADER,s.MEDIUM_FLOAT).precision>0&&s.getShaderPrecisionFormat(s.FRAGMENT_SHADER,s.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let l=e.precision!==void 0?e.precision:"highp";const c=h(l);c!==l&&(console.warn("THREE.WebGLRenderer:",l,"not supported, using",c,"instead."),l=c);const u=e.logarithmicDepthBuffer===!0,d=e.reversedDepthBuffer===!0&&t.has("EXT_clip_control"),f=s.getParameter(s.MAX_TEXTURE_IMAGE_UNITS),g=s.getParameter(s.MAX_VERTEX_TEXTURE_IMAGE_UNITS),_=s.getParameter(s.MAX_TEXTURE_SIZE),m=s.getParameter(s.MAX_CUBE_MAP_TEXTURE_SIZE),p=s.getParameter(s.MAX_VERTEX_ATTRIBS),T=s.getParameter(s.MAX_VERTEX_UNIFORM_VECTORS),b=s.getParameter(s.MAX_VARYING_VECTORS),y=s.getParameter(s.MAX_FRAGMENT_UNIFORM_VECTORS),R=g>0,w=s.getParameter(s.MAX_SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:r,getMaxPrecision:h,textureFormatReadable:a,textureTypeReadable:o,precision:l,logarithmicDepthBuffer:u,reversedDepthBuffer:d,maxTextures:f,maxVertexTextures:g,maxTextureSize:_,maxCubemapSize:m,maxAttributes:p,maxVertexUniforms:T,maxVaryings:b,maxFragmentUniforms:y,vertexTextures:R,maxSamples:w}}function _g(s){const t=this;let e=null,i=0,n=!1,r=!1;const a=new hn,o=new Ut,h={value:null,needsUpdate:!1};this.uniform=h,this.numPlanes=0,this.numIntersection=0,this.init=function(u,d){const f=u.length!==0||d||i!==0||n;return n=d,i=u.length,f},this.beginShadows=function(){r=!0,c(null)},this.endShadows=function(){r=!1},this.setGlobalState=function(u,d){e=c(u,d,0)},this.setState=function(u,d,f){const g=u.clippingPlanes,_=u.clipIntersection,m=u.clipShadows,p=s.get(u);if(!n||g===null||g.length===0||r&&!m)r?c(null):l();else{const T=r?0:i,b=T*4;let y=p.clippingState||null;h.value=y,y=c(g,d,b,f);for(let R=0;R!==b;++R)y[R]=e[R];p.clippingState=y,this.numIntersection=_?this.numPlanes:0,this.numPlanes+=T}};function l(){h.value!==e&&(h.value=e,h.needsUpdate=i>0),t.numPlanes=i,t.numIntersection=0}function c(u,d,f,g){const _=u!==null?u.length:0;let m=null;if(_!==0){if(m=h.value,g!==!0||m===null){const p=f+_*4,T=d.matrixWorldInverse;o.getNormalMatrix(T),(m===null||m.length<p)&&(m=new Float32Array(p));for(let b=0,y=f;b!==_;++b,y+=4)a.copy(u[b]).applyMatrix4(T,o),a.normal.toArray(m,y),m[y+3]=a.constant}h.value=m,h.needsUpdate=!0}return t.numPlanes=_,t.numIntersection=0,m}}function xg(s){let t=new WeakMap;function e(a,o){return o===qa?a.mapping=ns:o===Ya&&(a.mapping=ss),a}function i(a){if(a&&a.isTexture){const o=a.mapping;if(o===qa||o===Ya)if(t.has(a)){const h=t.get(a).texture;return e(h,a.mapping)}else{const h=a.image;if(h&&h.height>0){const l=new Xf(h.height);return l.fromEquirectangularTexture(s,a),t.set(a,l),a.addEventListener("dispose",n),e(l.texture,a.mapping)}else return null}}return a}function n(a){const o=a.target;o.removeEventListener("dispose",n);const h=t.get(o);h!==void 0&&(t.delete(o),h.dispose())}function r(){t=new WeakMap}return{get:i,dispose:r}}const Es=4,xc=[.125,.215,.35,.446,.526,.582],Un=20,ol=new fc,vc=new Vt;let ll=null,hl=0,cl=0,ul=!1;const Nn=(1+Math.sqrt(5))/2,Ts=1/Nn,yc=[new N(-Nn,Ts,0),new N(Nn,Ts,0),new N(-Ts,0,Nn),new N(Ts,0,Nn),new N(0,Nn,-Ts),new N(0,Nn,Ts),new N(-1,1,-1),new N(1,1,-1),new N(-1,1,1),new N(1,1,1)],vg=new N;class Mc{constructor(t){this._renderer=t,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,i=.1,n=100,r={}){const{size:a=256,position:o=vg}=r;ll=this._renderer.getRenderTarget(),hl=this._renderer.getActiveCubeFace(),cl=this._renderer.getActiveMipmapLevel(),ul=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(a);const h=this._allocateTargets();return h.depthBuffer=!0,this._sceneToCubeUV(t,i,n,h,o),e>0&&this._blur(h,0,0,e),this._applyPMREM(h),this._cleanup(h),h}fromEquirectangular(t,e=null){return this._fromTexture(t,e)}fromCubemap(t,e=null){return this._fromTexture(t,e)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=Ec(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=bc(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose()}_setSize(t){this._lodMax=Math.floor(Math.log2(t)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let t=0;t<this._lodPlanes.length;t++)this._lodPlanes[t].dispose()}_cleanup(t){this._renderer.setRenderTarget(ll,hl,cl),this._renderer.xr.enabled=ul,t.scissorTest=!1,ta(t,0,0,t.width,t.height)}_fromTexture(t,e){t.mapping===ns||t.mapping===ss?this._setSize(t.image.length===0?16:t.image[0].width||t.image[0].image.width):this._setSize(t.image.width/4),ll=this._renderer.getRenderTarget(),hl=this._renderer.getActiveCubeFace(),cl=this._renderer.getActiveMipmapLevel(),ul=this._renderer.xr.enabled,this._renderer.xr.enabled=!1;const i=e||this._allocateTargets();return this._textureToCubeUV(t,i),this._applyPMREM(i),this._cleanup(i),i}_allocateTargets(){const t=3*Math.max(this._cubeSize,112),e=4*this._cubeSize,i={magFilter:_i,minFilter:_i,generateMipmaps:!1,type:Hs,format:li,colorSpace:rs,depthBuffer:!1},n=Sc(t,e,i);if(this._pingPongRenderTarget===null||this._pingPongRenderTarget.width!==t||this._pingPongRenderTarget.height!==e){this._pingPongRenderTarget!==null&&this._dispose(),this._pingPongRenderTarget=Sc(t,e,i);const{_lodMax:r}=this;({sizeLods:this._sizeLods,lodPlanes:this._lodPlanes,sigmas:this._sigmas}=yg(r)),this._blurMaterial=Mg(r,t,e)}return n}_compileMaterial(t){const e=new Si(this._lodPlanes[0],t);this._renderer.compile(e,ol)}_sceneToCubeUV(t,e,i,n,r){const h=new We(90,1,e,i),l=[1,-1,1,1,1,1],c=[1,1,1,-1,-1,-1],u=this._renderer,d=u.autoClear,f=u.toneMapping;u.getClearColor(vc),u.toneMapping=Qi,u.autoClear=!1,u.state.buffers.depth.getReversed()&&(u.setRenderTarget(n),u.clearDepth(),u.setRenderTarget(null));const _=new Jh({name:"PMREM.Background",side:Ue,depthWrite:!1,depthTest:!1}),m=new Si(new tr,_);let p=!1;const T=t.background;T?T.isColor&&(_.color.copy(T),t.background=null,p=!0):(_.color.copy(vc),p=!0);for(let b=0;b<6;b++){const y=b%3;y===0?(h.up.set(0,l[b],0),h.position.set(r.x,r.y,r.z),h.lookAt(r.x+c[b],r.y,r.z)):y===1?(h.up.set(0,0,l[b]),h.position.set(r.x,r.y,r.z),h.lookAt(r.x,r.y+c[b],r.z)):(h.up.set(0,l[b],0),h.position.set(r.x,r.y,r.z),h.lookAt(r.x,r.y,r.z+c[b]));const R=this._cubeSize;ta(n,y*R,b>2?R:0,R,R),u.setRenderTarget(n),p&&u.render(m,h),u.render(t,h)}m.geometry.dispose(),m.material.dispose(),u.toneMapping=f,u.autoClear=d,t.background=T}_textureToCubeUV(t,e){const i=this._renderer,n=t.mapping===ns||t.mapping===ss;n?(this._cubemapMaterial===null&&(this._cubemapMaterial=Ec()),this._cubemapMaterial.uniforms.flipEnvMap.value=t.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=bc());const r=n?this._cubemapMaterial:this._equirectMaterial,a=new Si(this._lodPlanes[0],r),o=r.uniforms;o.envMap.value=t;const h=this._cubeSize;ta(e,0,0,3*h,2*h),i.setRenderTarget(e),i.render(a,ol)}_applyPMREM(t){const e=this._renderer,i=e.autoClear;e.autoClear=!1;const n=this._lodPlanes.length;for(let r=1;r<n;r++){const a=Math.sqrt(this._sigmas[r]*this._sigmas[r]-this._sigmas[r-1]*this._sigmas[r-1]),o=yc[(n-r-1)%yc.length];this._blur(t,r-1,r,a,o)}e.autoClear=i}_blur(t,e,i,n,r){const a=this._pingPongRenderTarget;this._halfBlur(t,a,e,i,n,"latitudinal",r),this._halfBlur(a,t,i,i,n,"longitudinal",r)}_halfBlur(t,e,i,n,r,a,o){const h=this._renderer,l=this._blurMaterial;a!=="latitudinal"&&a!=="longitudinal"&&console.error("blur direction must be either latitudinal or longitudinal!");const c=3,u=new Si(this._lodPlanes[n],l),d=l.uniforms,f=this._sizeLods[i]-1,g=isFinite(r)?Math.PI/(2*f):2*Math.PI/(2*Un-1),_=r/g,m=isFinite(r)?1+Math.floor(c*_):Un;m>Un&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${m} samples when the maximum is set to ${Un}`);const p=[];let T=0;for(let C=0;C<Un;++C){const I=C/_,S=Math.exp(-I*I/2);p.push(S),C===0?T+=S:C<m&&(T+=2*S)}for(let C=0;C<p.length;C++)p[C]=p[C]/T;d.envMap.value=t.texture,d.samples.value=m,d.weights.value=p,d.latitudinal.value=a==="latitudinal",o&&(d.poleAxis.value=o);const{_lodMax:b}=this;d.dTheta.value=g,d.mipInt.value=b-i;const y=this._sizeLods[n],R=3*y*(n>b-Es?n-b+Es:0),w=4*(this._cubeSize-y);ta(e,R,w,3*y,2*y),h.setRenderTarget(e),h.render(u,ol)}}function yg(s){const t=[],e=[],i=[];let n=s;const r=s-Es+1+xc.length;for(let a=0;a<r;a++){const o=Math.pow(2,n);e.push(o);let h=1/o;a>s-Es?h=xc[a-s+Es-1]:a===0&&(h=0),i.push(h);const l=1/(o-2),c=-l,u=1+l,d=[c,c,u,c,u,u,c,c,u,u,c,u],f=6,g=6,_=3,m=2,p=1,T=new Float32Array(_*g*f),b=new Float32Array(m*g*f),y=new Float32Array(p*g*f);for(let w=0;w<f;w++){const C=w%3*2/3-1,I=w>2?0:-1,S=[C,I,0,C+2/3,I,0,C+2/3,I+1,0,C,I,0,C+2/3,I+1,0,C,I+1,0];T.set(S,_*g*w),b.set(d,m*g*w);const M=[w,w,w,w,w,w];y.set(M,p*g*w)}const R=new Pn;R.setAttribute("position",new Mi(T,_)),R.setAttribute("uv",new Mi(b,m)),R.setAttribute("faceIndex",new Mi(y,p)),t.push(R),n>Es&&n--}return{lodPlanes:t,sizeLods:e,sigmas:i}}function Sc(s,t,e){const i=new An(s,t,e);return i.texture.mapping=Tr,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function ta(s,t,e,i,n){s.viewport.set(t,e,i,n),s.scissor.set(t,e,i,n)}function Mg(s,t,e){const i=new Float32Array(Un),n=new N(0,1,0);return new on({name:"SphericalGaussianBlur",defines:{n:Un,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/e,CUBEUV_MAX_MIP:`${s}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:n}},vertexShader:dl(),fragmentShader:`
|
|
3702
|
+
}`},at={common:{diffuse:{value:new Wt(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new Bt},alphaMap:{value:null},alphaMapTransform:{value:new Bt},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new Bt}},envmap:{envMap:{value:null},envMapRotation:{value:new Bt},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new Bt}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new Bt}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new Bt},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new Bt},normalScale:{value:new Nt(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new Bt},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new Bt}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new Bt}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new Bt}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Wt(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Wt(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new Bt},alphaTest:{value:0},uvTransform:{value:new Bt}},sprite:{diffuse:{value:new Wt(16777215)},opacity:{value:1},center:{value:new Nt(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new Bt},alphaMap:{value:null},alphaMapTransform:{value:new Bt},alphaTest:{value:0}}},yi={basic:{uniforms:Pe([at.common,at.specularmap,at.envmap,at.aomap,at.lightmap,at.fog]),vertexShader:Ot.meshbasic_vert,fragmentShader:Ot.meshbasic_frag},lambert:{uniforms:Pe([at.common,at.specularmap,at.envmap,at.aomap,at.lightmap,at.emissivemap,at.bumpmap,at.normalmap,at.displacementmap,at.fog,at.lights,{emissive:{value:new Wt(0)}}]),vertexShader:Ot.meshlambert_vert,fragmentShader:Ot.meshlambert_frag},phong:{uniforms:Pe([at.common,at.specularmap,at.envmap,at.aomap,at.lightmap,at.emissivemap,at.bumpmap,at.normalmap,at.displacementmap,at.fog,at.lights,{emissive:{value:new Wt(0)},specular:{value:new Wt(1118481)},shininess:{value:30}}]),vertexShader:Ot.meshphong_vert,fragmentShader:Ot.meshphong_frag},standard:{uniforms:Pe([at.common,at.envmap,at.aomap,at.lightmap,at.emissivemap,at.bumpmap,at.normalmap,at.displacementmap,at.roughnessmap,at.metalnessmap,at.fog,at.lights,{emissive:{value:new Wt(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Ot.meshphysical_vert,fragmentShader:Ot.meshphysical_frag},toon:{uniforms:Pe([at.common,at.aomap,at.lightmap,at.emissivemap,at.bumpmap,at.normalmap,at.displacementmap,at.gradientmap,at.fog,at.lights,{emissive:{value:new Wt(0)}}]),vertexShader:Ot.meshtoon_vert,fragmentShader:Ot.meshtoon_frag},matcap:{uniforms:Pe([at.common,at.bumpmap,at.normalmap,at.displacementmap,at.fog,{matcap:{value:null}}]),vertexShader:Ot.meshmatcap_vert,fragmentShader:Ot.meshmatcap_frag},points:{uniforms:Pe([at.points,at.fog]),vertexShader:Ot.points_vert,fragmentShader:Ot.points_frag},dashed:{uniforms:Pe([at.common,at.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Ot.linedashed_vert,fragmentShader:Ot.linedashed_frag},depth:{uniforms:Pe([at.common,at.displacementmap]),vertexShader:Ot.depth_vert,fragmentShader:Ot.depth_frag},normal:{uniforms:Pe([at.common,at.bumpmap,at.normalmap,at.displacementmap,{opacity:{value:1}}]),vertexShader:Ot.meshnormal_vert,fragmentShader:Ot.meshnormal_frag},sprite:{uniforms:Pe([at.sprite,at.fog]),vertexShader:Ot.sprite_vert,fragmentShader:Ot.sprite_frag},background:{uniforms:{uvTransform:{value:new Bt},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:Ot.background_vert,fragmentShader:Ot.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new Bt}},vertexShader:Ot.backgroundCube_vert,fragmentShader:Ot.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:Ot.cube_vert,fragmentShader:Ot.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Ot.equirect_vert,fragmentShader:Ot.equirect_frag},distanceRGBA:{uniforms:Pe([at.common,at.displacementmap,{referencePosition:{value:new B},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Ot.distanceRGBA_vert,fragmentShader:Ot.distanceRGBA_frag},shadow:{uniforms:Pe([at.lights,at.fog,{color:{value:new Wt(0)},opacity:{value:1}}]),vertexShader:Ot.shadow_vert,fragmentShader:Ot.shadow_frag}};yi.physical={uniforms:Pe([yi.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new Bt},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new Bt},clearcoatNormalScale:{value:new Nt(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new Bt},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new Bt},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new Bt},sheen:{value:0},sheenColor:{value:new Wt(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new Bt},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new Bt},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new Bt},transmissionSamplerSize:{value:new Nt},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new Bt},attenuationDistance:{value:0},attenuationColor:{value:new Wt(0)},specularColor:{value:new Wt(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new Bt},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new Bt},anisotropyVector:{value:new Nt},anisotropyMap:{value:null},anisotropyMapTransform:{value:new Bt}}]),vertexShader:Ot.meshphysical_vert,fragmentShader:Ot.meshphysical_frag};const $r={r:0,b:0,g:0},Ln=new xi,up=new de;function dp(s,t,e,i,n,r,a){const o=new Wt(0);let l=r===!0?0:1,A,h,c=null,u=0,d=null;function p(y){let x=y.isScene===!0?y.background:null;return x&&x.isTexture&&(x=(y.backgroundBlurriness>0?e:t).get(x)),x}function m(y){let x=!1;const w=p(y);w===null?f(o,l):w&&w.isColor&&(f(w,1),x=!0);const T=s.xr.getEnvironmentBlendMode();T==="additive"?i.buffers.color.setClear(0,0,0,1,a):T==="alpha-blend"&&i.buffers.color.setClear(0,0,0,0,a),(s.autoClear||x)&&(i.buffers.depth.setTest(!0),i.buffers.depth.setMask(!0),i.buffers.color.setMask(!0),s.clear(s.autoClearColor,s.autoClearDepth,s.autoClearStencil))}function g(y,x){const w=p(x);w&&(w.isCubeTexture||w.mapping===Mr)?(h===void 0&&(h=new Ei(new tr(1,1,1),new on({name:"BackgroundCubeMaterial",uniforms:xs(yi.backgroundCube.uniforms),vertexShader:yi.backgroundCube.vertexShader,fragmentShader:yi.backgroundCube.fragmentShader,side:Oe,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),h.geometry.deleteAttribute("normal"),h.geometry.deleteAttribute("uv"),h.onBeforeRender=function(T,_,P){this.matrixWorld.copyPosition(P.matrixWorld)},Object.defineProperty(h.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),n.update(h)),Ln.copy(x.backgroundRotation),Ln.x*=-1,Ln.y*=-1,Ln.z*=-1,w.isCubeTexture&&w.isRenderTargetTexture===!1&&(Ln.y*=-1,Ln.z*=-1),h.material.uniforms.envMap.value=w,h.material.uniforms.flipEnvMap.value=w.isCubeTexture&&w.isRenderTargetTexture===!1?-1:1,h.material.uniforms.backgroundBlurriness.value=x.backgroundBlurriness,h.material.uniforms.backgroundIntensity.value=x.backgroundIntensity,h.material.uniforms.backgroundRotation.value.setFromMatrix4(up.makeRotationFromEuler(Ln)),h.material.toneMapped=Xt.getTransfer(w.colorSpace)!==qt,(c!==w||u!==w.version||d!==s.toneMapping)&&(h.material.needsUpdate=!0,c=w,u=w.version,d=s.toneMapping),h.layers.enableAll(),y.unshift(h,h.geometry,h.material,0,0,null)):w&&w.isTexture&&(A===void 0&&(A=new Ei(new ir(2,2),new on({name:"BackgroundMaterial",uniforms:xs(yi.background.uniforms),vertexShader:yi.background.vertexShader,fragmentShader:yi.background.fragmentShader,side:qi,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),A.geometry.deleteAttribute("normal"),Object.defineProperty(A.material,"map",{get:function(){return this.uniforms.t2D.value}}),n.update(A)),A.material.uniforms.t2D.value=w,A.material.uniforms.backgroundIntensity.value=x.backgroundIntensity,A.material.toneMapped=Xt.getTransfer(w.colorSpace)!==qt,w.matrixAutoUpdate===!0&&w.updateMatrix(),A.material.uniforms.uvTransform.value.copy(w.matrix),(c!==w||u!==w.version||d!==s.toneMapping)&&(A.material.needsUpdate=!0,c=w,u=w.version,d=s.toneMapping),A.layers.enableAll(),y.unshift(A,A.geometry,A.material,0,0,null))}function f(y,x){y.getRGB($r,sh(s)),i.buffers.color.setClear($r.r,$r.g,$r.b,x,a)}function M(){h!==void 0&&(h.geometry.dispose(),h.material.dispose(),h=void 0),A!==void 0&&(A.geometry.dispose(),A.material.dispose(),A=void 0)}return{getClearColor:function(){return o},setClearColor:function(y,x=1){o.set(y),l=x,f(o,l)},getClearAlpha:function(){return l},setClearAlpha:function(y){l=y,f(o,l)},render:m,addToRenderList:g,dispose:M}}function fp(s,t){const e=s.getParameter(s.MAX_VERTEX_ATTRIBS),i={},n=u(null);let r=n,a=!1;function o(v,b,z,F,U){let W=!1;const Y=c(F,z,b);r!==Y&&(r=Y,A(r.object)),W=d(v,F,z,U),W&&p(v,F,z,U),U!==null&&t.update(U,s.ELEMENT_ARRAY_BUFFER),(W||a)&&(a=!1,x(v,b,z,F),U!==null&&s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,t.get(U).buffer))}function l(){return s.createVertexArray()}function A(v){return s.bindVertexArray(v)}function h(v){return s.deleteVertexArray(v)}function c(v,b,z){const F=z.wireframe===!0;let U=i[v.id];U===void 0&&(U={},i[v.id]=U);let W=U[b.id];W===void 0&&(W={},U[b.id]=W);let Y=W[F];return Y===void 0&&(Y=u(l()),W[F]=Y),Y}function u(v){const b=[],z=[],F=[];for(let U=0;U<e;U++)b[U]=0,z[U]=0,F[U]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:b,enabledAttributes:z,attributeDivisors:F,object:v,attributes:{},index:null}}function d(v,b,z,F){const U=r.attributes,W=b.attributes;let Y=0;const $=z.getAttributes();for(const H in $)if($[H].location>=0){const lt=U[H];let mt=W[H];if(mt===void 0&&(H==="instanceMatrix"&&v.instanceMatrix&&(mt=v.instanceMatrix),H==="instanceColor"&&v.instanceColor&&(mt=v.instanceColor)),lt===void 0||lt.attribute!==mt||mt&<.data!==mt.data)return!0;Y++}return r.attributesNum!==Y||r.index!==F}function p(v,b,z,F){const U={},W=b.attributes;let Y=0;const $=z.getAttributes();for(const H in $)if($[H].location>=0){let lt=W[H];lt===void 0&&(H==="instanceMatrix"&&v.instanceMatrix&&(lt=v.instanceMatrix),H==="instanceColor"&&v.instanceColor&&(lt=v.instanceColor));const mt={};mt.attribute=lt,lt&<.data&&(mt.data=lt.data),U[H]=mt,Y++}r.attributes=U,r.attributesNum=Y,r.index=F}function m(){const v=r.newAttributes;for(let b=0,z=v.length;b<z;b++)v[b]=0}function g(v){f(v,0)}function f(v,b){const z=r.newAttributes,F=r.enabledAttributes,U=r.attributeDivisors;z[v]=1,F[v]===0&&(s.enableVertexAttribArray(v),F[v]=1),U[v]!==b&&(s.vertexAttribDivisor(v,b),U[v]=b)}function M(){const v=r.newAttributes,b=r.enabledAttributes;for(let z=0,F=b.length;z<F;z++)b[z]!==v[z]&&(s.disableVertexAttribArray(z),b[z]=0)}function y(v,b,z,F,U,W,Y){Y===!0?s.vertexAttribIPointer(v,b,z,U,W):s.vertexAttribPointer(v,b,z,F,U,W)}function x(v,b,z,F){m();const U=F.attributes,W=z.getAttributes(),Y=b.defaultAttributeValues;for(const $ in W){const H=W[$];if(H.location>=0){let rt=U[$];if(rt===void 0&&($==="instanceMatrix"&&v.instanceMatrix&&(rt=v.instanceMatrix),$==="instanceColor"&&v.instanceColor&&(rt=v.instanceColor)),rt!==void 0){const lt=rt.normalized,mt=rt.itemSize,Ut=t.get(rt);if(Ut===void 0)continue;const re=Ut.buffer,te=Ut.type,j=Ut.bytesPerElement,ot=te===s.INT||te===s.UNSIGNED_INT||rt.gpuType===qa;if(rt.isInterleavedBufferAttribute){const nt=rt.data,bt=nt.stride,Tt=rt.offset;if(nt.isInstancedInterleavedBuffer){for(let Pt=0;Pt<H.locationSize;Pt++)f(H.location+Pt,nt.meshPerAttribute);v.isInstancedMesh!==!0&&F._maxInstanceCount===void 0&&(F._maxInstanceCount=nt.meshPerAttribute*nt.count)}else for(let Pt=0;Pt<H.locationSize;Pt++)g(H.location+Pt);s.bindBuffer(s.ARRAY_BUFFER,re);for(let Pt=0;Pt<H.locationSize;Pt++)y(H.location+Pt,mt/H.locationSize,te,lt,bt*j,(Tt+mt/H.locationSize*Pt)*j,ot)}else{if(rt.isInstancedBufferAttribute){for(let nt=0;nt<H.locationSize;nt++)f(H.location+nt,rt.meshPerAttribute);v.isInstancedMesh!==!0&&F._maxInstanceCount===void 0&&(F._maxInstanceCount=rt.meshPerAttribute*rt.count)}else for(let nt=0;nt<H.locationSize;nt++)g(H.location+nt);s.bindBuffer(s.ARRAY_BUFFER,re);for(let nt=0;nt<H.locationSize;nt++)y(H.location+nt,mt/H.locationSize,te,lt,mt*j,mt/H.locationSize*nt*j,ot)}}else if(Y!==void 0){const lt=Y[$];if(lt!==void 0)switch(lt.length){case 2:s.vertexAttrib2fv(H.location,lt);break;case 3:s.vertexAttrib3fv(H.location,lt);break;case 4:s.vertexAttrib4fv(H.location,lt);break;default:s.vertexAttrib1fv(H.location,lt)}}}}M()}function w(){P();for(const v in i){const b=i[v];for(const z in b){const F=b[z];for(const U in F)h(F[U].object),delete F[U];delete b[z]}delete i[v]}}function T(v){if(i[v.id]===void 0)return;const b=i[v.id];for(const z in b){const F=b[z];for(const U in F)h(F[U].object),delete F[U];delete b[z]}delete i[v.id]}function _(v){for(const b in i){const z=i[b];if(z[v.id]===void 0)continue;const F=z[v.id];for(const U in F)h(F[U].object),delete F[U];delete z[v.id]}}function P(){E(),a=!0,r!==n&&(r=n,A(r.object))}function E(){n.geometry=null,n.program=null,n.wireframe=!1}return{setup:o,reset:P,resetDefaultState:E,dispose:w,releaseStatesOfGeometry:T,releaseStatesOfProgram:_,initAttributes:m,enableAttribute:g,disableUnusedAttributes:M}}function gp(s,t,e){let i;function n(A){i=A}function r(A,h){s.drawArrays(i,A,h),e.update(h,i,1)}function a(A,h,c){c!==0&&(s.drawArraysInstanced(i,A,h,c),e.update(h,i,c))}function o(A,h,c){if(c===0)return;t.get("WEBGL_multi_draw").multiDrawArraysWEBGL(i,A,0,h,0,c);let d=0;for(let p=0;p<c;p++)d+=h[p];e.update(d,i,1)}function l(A,h,c,u){if(c===0)return;const d=t.get("WEBGL_multi_draw");if(d===null)for(let p=0;p<A.length;p++)a(A[p],h[p],u[p]);else{d.multiDrawArraysInstancedWEBGL(i,A,0,h,0,u,0,c);let p=0;for(let m=0;m<c;m++)p+=h[m]*u[m];e.update(p,i,1)}}this.setMode=n,this.render=r,this.renderInstances=a,this.renderMultiDraw=o,this.renderMultiDrawInstances=l}function pp(s,t,e,i){let n;function r(){if(n!==void 0)return n;if(t.has("EXT_texture_filter_anisotropic")===!0){const _=t.get("EXT_texture_filter_anisotropic");n=s.getParameter(_.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else n=0;return n}function a(_){return!(_!==ci&&i.convert(_)!==s.getParameter(s.IMPLEMENTATION_COLOR_READ_FORMAT))}function o(_){const P=_===Hs&&(t.has("EXT_color_buffer_half_float")||t.has("EXT_color_buffer_float"));return!(_!==Ci&&i.convert(_)!==s.getParameter(s.IMPLEMENTATION_COLOR_READ_TYPE)&&_!==Fi&&!P)}function l(_){if(_==="highp"){if(s.getShaderPrecisionFormat(s.VERTEX_SHADER,s.HIGH_FLOAT).precision>0&&s.getShaderPrecisionFormat(s.FRAGMENT_SHADER,s.HIGH_FLOAT).precision>0)return"highp";_="mediump"}return _==="mediump"&&s.getShaderPrecisionFormat(s.VERTEX_SHADER,s.MEDIUM_FLOAT).precision>0&&s.getShaderPrecisionFormat(s.FRAGMENT_SHADER,s.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let A=e.precision!==void 0?e.precision:"highp";const h=l(A);h!==A&&(console.warn("THREE.WebGLRenderer:",A,"not supported, using",h,"instead."),A=h);const c=e.logarithmicDepthBuffer===!0,u=e.reversedDepthBuffer===!0&&t.has("EXT_clip_control"),d=s.getParameter(s.MAX_TEXTURE_IMAGE_UNITS),p=s.getParameter(s.MAX_VERTEX_TEXTURE_IMAGE_UNITS),m=s.getParameter(s.MAX_TEXTURE_SIZE),g=s.getParameter(s.MAX_CUBE_MAP_TEXTURE_SIZE),f=s.getParameter(s.MAX_VERTEX_ATTRIBS),M=s.getParameter(s.MAX_VERTEX_UNIFORM_VECTORS),y=s.getParameter(s.MAX_VARYING_VECTORS),x=s.getParameter(s.MAX_FRAGMENT_UNIFORM_VECTORS),w=p>0,T=s.getParameter(s.MAX_SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:r,getMaxPrecision:l,textureFormatReadable:a,textureTypeReadable:o,precision:A,logarithmicDepthBuffer:c,reversedDepthBuffer:u,maxTextures:d,maxVertexTextures:p,maxTextureSize:m,maxCubemapSize:g,maxAttributes:f,maxVertexUniforms:M,maxVaryings:y,maxFragmentUniforms:x,vertexTextures:w,maxSamples:T}}function mp(s){const t=this;let e=null,i=0,n=!1,r=!1;const a=new ln,o=new Bt,l={value:null,needsUpdate:!1};this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(c,u){const d=c.length!==0||u||i!==0||n;return n=u,i=c.length,d},this.beginShadows=function(){r=!0,h(null)},this.endShadows=function(){r=!1},this.setGlobalState=function(c,u){e=h(c,u,0)},this.setState=function(c,u,d){const p=c.clippingPlanes,m=c.clipIntersection,g=c.clipShadows,f=s.get(c);if(!n||p===null||p.length===0||r&&!g)r?h(null):A();else{const M=r?0:i,y=M*4;let x=f.clippingState||null;l.value=x,x=h(p,u,y,d);for(let w=0;w!==y;++w)x[w]=e[w];f.clippingState=x,this.numIntersection=m?this.numPlanes:0,this.numPlanes+=M}};function A(){l.value!==e&&(l.value=e,l.needsUpdate=i>0),t.numPlanes=i,t.numIntersection=0}function h(c,u,d,p){const m=c!==null?c.length:0;let g=null;if(m!==0){if(g=l.value,p!==!0||g===null){const f=d+m*4,M=u.matrixWorldInverse;o.getNormalMatrix(M),(g===null||g.length<f)&&(g=new Float32Array(f));for(let y=0,x=d;y!==m;++y,x+=4)a.copy(c[y]).applyMatrix4(M,o),a.normal.toArray(g,x),g[x+3]=a.constant}l.value=g,l.needsUpdate=!0}return t.numPlanes=m,t.numIntersection=0,g}}function Cp(s){let t=new WeakMap;function e(a,o){return o===Xa?a.mapping=ns:o===Za&&(a.mapping=ss),a}function i(a){if(a&&a.isTexture){const o=a.mapping;if(o===Xa||o===Za)if(t.has(a)){const l=t.get(a).texture;return e(l,a.mapping)}else{const l=a.image;if(l&&l.height>0){const A=new Wd(l.height);return A.fromEquirectangularTexture(s,a),t.set(a,A),a.addEventListener("dispose",n),e(A.texture,a.mapping)}else return null}}return a}function n(a){const o=a.target;o.removeEventListener("dispose",n);const l=t.get(o);l!==void 0&&(t.delete(o),l.dispose())}function r(){t=new WeakMap}return{get:i,dispose:r}}const Ss=4,Ch=[.125,.215,.35,.446,.526,.582],Nn=20,oA=new dh,Ih=new Wt;let AA=null,lA=0,hA=0,cA=!1;const Bn=(1+Math.sqrt(5))/2,Ms=1/Bn,xh=[new B(-Bn,Ms,0),new B(Bn,Ms,0),new B(-Ms,0,Bn),new B(Ms,0,Bn),new B(0,Bn,-Ms),new B(0,Bn,Ms),new B(-1,1,-1),new B(1,1,-1),new B(-1,1,1),new B(1,1,1)],Ip=new B;class vh{constructor(t){this._renderer=t,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,i=.1,n=100,r={}){const{size:a=256,position:o=Ip}=r;AA=this._renderer.getRenderTarget(),lA=this._renderer.getActiveCubeFace(),hA=this._renderer.getActiveMipmapLevel(),cA=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(a);const l=this._allocateTargets();return l.depthBuffer=!0,this._sceneToCubeUV(t,i,n,l,o),e>0&&this._blur(l,0,0,e),this._applyPMREM(l),this._cleanup(l),l}fromEquirectangular(t,e=null){return this._fromTexture(t,e)}fromCubemap(t,e=null){return this._fromTexture(t,e)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=Sh(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=yh(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose()}_setSize(t){this._lodMax=Math.floor(Math.log2(t)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let t=0;t<this._lodPlanes.length;t++)this._lodPlanes[t].dispose()}_cleanup(t){this._renderer.setRenderTarget(AA,lA,hA),this._renderer.xr.enabled=cA,t.scissorTest=!1,ta(t,0,0,t.width,t.height)}_fromTexture(t,e){t.mapping===ns||t.mapping===ss?this._setSize(t.image.length===0?16:t.image[0].width||t.image[0].image.width):this._setSize(t.image.width/4),AA=this._renderer.getRenderTarget(),lA=this._renderer.getActiveCubeFace(),hA=this._renderer.getActiveMipmapLevel(),cA=this._renderer.xr.enabled,this._renderer.xr.enabled=!1;const i=e||this._allocateTargets();return this._textureToCubeUV(t,i),this._applyPMREM(i),this._cleanup(i),i}_allocateTargets(){const t=3*Math.max(this._cubeSize,112),e=4*this._cubeSize,i={magFilter:mi,minFilter:mi,generateMipmaps:!1,type:Hs,format:ci,colorSpace:rs,depthBuffer:!1},n=Eh(t,e,i);if(this._pingPongRenderTarget===null||this._pingPongRenderTarget.width!==t||this._pingPongRenderTarget.height!==e){this._pingPongRenderTarget!==null&&this._dispose(),this._pingPongRenderTarget=Eh(t,e,i);const{_lodMax:r}=this;({sizeLods:this._sizeLods,lodPlanes:this._lodPlanes,sigmas:this._sigmas}=xp(r)),this._blurMaterial=vp(r,t,e)}return n}_compileMaterial(t){const e=new Ei(this._lodPlanes[0],t);this._renderer.compile(e,oA)}_sceneToCubeUV(t,e,i,n,r){const l=new Ze(90,1,e,i),A=[1,-1,1,1,1,1],h=[1,1,1,-1,-1,-1],c=this._renderer,u=c.autoClear,d=c.toneMapping;c.getClearColor(Ih),c.toneMapping=$i,c.autoClear=!1,c.state.buffers.depth.getReversed()&&(c.setRenderTarget(n),c.clearDepth(),c.setRenderTarget(null));const m=new Kl({name:"PMREM.Background",side:Oe,depthWrite:!1,depthTest:!1}),g=new Ei(new tr,m);let f=!1;const M=t.background;M?M.isColor&&(m.color.copy(M),t.background=null,f=!0):(m.color.copy(Ih),f=!0);for(let y=0;y<6;y++){const x=y%3;x===0?(l.up.set(0,A[y],0),l.position.set(r.x,r.y,r.z),l.lookAt(r.x+h[y],r.y,r.z)):x===1?(l.up.set(0,0,A[y]),l.position.set(r.x,r.y,r.z),l.lookAt(r.x,r.y+h[y],r.z)):(l.up.set(0,A[y],0),l.position.set(r.x,r.y,r.z),l.lookAt(r.x,r.y,r.z+h[y]));const w=this._cubeSize;ta(n,x*w,y>2?w:0,w,w),c.setRenderTarget(n),f&&c.render(g,l),c.render(t,l)}g.geometry.dispose(),g.material.dispose(),c.toneMapping=d,c.autoClear=u,t.background=M}_textureToCubeUV(t,e){const i=this._renderer,n=t.mapping===ns||t.mapping===ss;n?(this._cubemapMaterial===null&&(this._cubemapMaterial=Sh()),this._cubemapMaterial.uniforms.flipEnvMap.value=t.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=yh());const r=n?this._cubemapMaterial:this._equirectMaterial,a=new Ei(this._lodPlanes[0],r),o=r.uniforms;o.envMap.value=t;const l=this._cubeSize;ta(e,0,0,3*l,2*l),i.setRenderTarget(e),i.render(a,oA)}_applyPMREM(t){const e=this._renderer,i=e.autoClear;e.autoClear=!1;const n=this._lodPlanes.length;for(let r=1;r<n;r++){const a=Math.sqrt(this._sigmas[r]*this._sigmas[r]-this._sigmas[r-1]*this._sigmas[r-1]),o=xh[(n-r-1)%xh.length];this._blur(t,r-1,r,a,o)}e.autoClear=i}_blur(t,e,i,n,r){const a=this._pingPongRenderTarget;this._halfBlur(t,a,e,i,n,"latitudinal",r),this._halfBlur(a,t,i,i,n,"longitudinal",r)}_halfBlur(t,e,i,n,r,a,o){const l=this._renderer,A=this._blurMaterial;a!=="latitudinal"&&a!=="longitudinal"&&console.error("blur direction must be either latitudinal or longitudinal!");const h=3,c=new Ei(this._lodPlanes[n],A),u=A.uniforms,d=this._sizeLods[i]-1,p=isFinite(r)?Math.PI/(2*d):2*Math.PI/(2*Nn-1),m=r/p,g=isFinite(r)?1+Math.floor(h*m):Nn;g>Nn&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${g} samples when the maximum is set to ${Nn}`);const f=[];let M=0;for(let _=0;_<Nn;++_){const P=_/m,E=Math.exp(-P*P/2);f.push(E),_===0?M+=E:_<g&&(M+=2*E)}for(let _=0;_<f.length;_++)f[_]=f[_]/M;u.envMap.value=t.texture,u.samples.value=g,u.weights.value=f,u.latitudinal.value=a==="latitudinal",o&&(u.poleAxis.value=o);const{_lodMax:y}=this;u.dTheta.value=p,u.mipInt.value=y-i;const x=this._sizeLods[n],w=3*x*(n>y-Ss?n-y+Ss:0),T=4*(this._cubeSize-x);ta(e,w,T,3*x,2*x),l.setRenderTarget(e),l.render(c,oA)}}function xp(s){const t=[],e=[],i=[];let n=s;const r=s-Ss+1+Ch.length;for(let a=0;a<r;a++){const o=Math.pow(2,n);e.push(o);let l=1/o;a>s-Ss?l=Ch[a-s+Ss-1]:a===0&&(l=0),i.push(l);const A=1/(o-2),h=-A,c=1+A,u=[h,h,c,h,c,c,h,h,c,c,h,c],d=6,p=6,m=3,g=2,f=1,M=new Float32Array(m*p*d),y=new Float32Array(g*p*d),x=new Float32Array(f*p*d);for(let T=0;T<d;T++){const _=T%3*2/3-1,P=T>2?0:-1,E=[_,P,0,_+2/3,P,0,_+2/3,P+1,0,_,P,0,_+2/3,P+1,0,_,P+1,0];M.set(E,m*p*T),y.set(u,g*p*T);const v=[T,T,T,T,T,T];x.set(v,f*p*T)}const w=new Rn;w.setAttribute("position",new vi(M,m)),w.setAttribute("uv",new vi(y,g)),w.setAttribute("faceIndex",new vi(x,f)),t.push(w),n>Ss&&n--}return{lodPlanes:t,sizeLods:e,sigmas:i}}function Eh(s,t,e){const i=new bn(s,t,e);return i.texture.mapping=Mr,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function ta(s,t,e,i,n){s.viewport.set(t,e,i,n),s.scissor.set(t,e,i,n)}function vp(s,t,e){const i=new Float32Array(Nn),n=new B(0,1,0);return new on({name:"SphericalGaussianBlur",defines:{n:Nn,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/e,CUBEUV_MAX_MIP:`${s}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:n}},vertexShader:uA(),fragmentShader:`
|
|
3703
3703
|
|
|
3704
3704
|
precision mediump float;
|
|
3705
3705
|
precision mediump int;
|
|
@@ -3759,7 +3759,7 @@ void main() {
|
|
|
3759
3759
|
}
|
|
3760
3760
|
|
|
3761
3761
|
}
|
|
3762
|
-
`,blending:
|
|
3762
|
+
`,blending:Ki,depthTest:!1,depthWrite:!1})}function yh(){return new on({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:uA(),fragmentShader:`
|
|
3763
3763
|
|
|
3764
3764
|
precision mediump float;
|
|
3765
3765
|
precision mediump int;
|
|
@@ -3778,7 +3778,7 @@ void main() {
|
|
|
3778
3778
|
gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );
|
|
3779
3779
|
|
|
3780
3780
|
}
|
|
3781
|
-
`,blending:
|
|
3781
|
+
`,blending:Ki,depthTest:!1,depthWrite:!1})}function Sh(){return new on({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:uA(),fragmentShader:`
|
|
3782
3782
|
|
|
3783
3783
|
precision mediump float;
|
|
3784
3784
|
precision mediump int;
|
|
@@ -3794,7 +3794,7 @@ void main() {
|
|
|
3794
3794
|
gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );
|
|
3795
3795
|
|
|
3796
3796
|
}
|
|
3797
|
-
`,blending:
|
|
3797
|
+
`,blending:Ki,depthTest:!1,depthWrite:!1})}function uA(){return`
|
|
3798
3798
|
|
|
3799
3799
|
precision mediump float;
|
|
3800
3800
|
precision mediump int;
|
|
@@ -3849,17 +3849,17 @@ void main() {
|
|
|
3849
3849
|
gl_Position = vec4( position, 1.0 );
|
|
3850
3850
|
|
|
3851
3851
|
}
|
|
3852
|
-
`}function Sg(s){let t=new WeakMap,e=null;function i(o){if(o&&o.isTexture){const h=o.mapping,l=h===qa||h===Ya,c=h===ns||h===ss;if(l||c){let u=t.get(o);const d=u!==void 0?u.texture.pmremVersion:0;if(o.isRenderTargetTexture&&o.pmremVersion!==d)return e===null&&(e=new Mc(s)),u=l?e.fromEquirectangular(o,u):e.fromCubemap(o,u),u.texture.pmremVersion=o.pmremVersion,t.set(o,u),u.texture;if(u!==void 0)return u.texture;{const f=o.image;return l&&f&&f.height>0||c&&f&&n(f)?(e===null&&(e=new Mc(s)),u=l?e.fromEquirectangular(o):e.fromCubemap(o),u.texture.pmremVersion=o.pmremVersion,t.set(o,u),o.addEventListener("dispose",r),u.texture):null}}}return o}function n(o){let h=0;const l=6;for(let c=0;c<l;c++)o[c]!==void 0&&h++;return h===l}function r(o){const h=o.target;h.removeEventListener("dispose",r);const l=t.get(h);l!==void 0&&(t.delete(h),l.dispose())}function a(){t=new WeakMap,e!==null&&(e.dispose(),e=null)}return{get:i,dispose:a}}function bg(s){const t={};function e(i){if(t[i]!==void 0)return t[i];let n;switch(i){case"WEBGL_depth_texture":n=s.getExtension("WEBGL_depth_texture")||s.getExtension("MOZ_WEBGL_depth_texture")||s.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":n=s.getExtension("EXT_texture_filter_anisotropic")||s.getExtension("MOZ_EXT_texture_filter_anisotropic")||s.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":n=s.getExtension("WEBGL_compressed_texture_s3tc")||s.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||s.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":n=s.getExtension("WEBGL_compressed_texture_pvrtc")||s.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:n=s.getExtension(i)}return t[i]=n,n}return{has:function(i){return e(i)!==null},init:function(){e("EXT_color_buffer_float"),e("WEBGL_clip_cull_distance"),e("OES_texture_float_linear"),e("EXT_color_buffer_half_float"),e("WEBGL_multisampled_render_to_texture"),e("WEBGL_render_shared_exponent")},get:function(i){const n=e(i);return n===null&&os("THREE.WebGLRenderer: "+i+" extension not supported."),n}}}function Eg(s,t,e,i){const n={},r=new WeakMap;function a(u){const d=u.target;d.index!==null&&t.remove(d.index);for(const g in d.attributes)t.remove(d.attributes[g]);d.removeEventListener("dispose",a),delete n[d.id];const f=r.get(d);f&&(t.remove(f),r.delete(d)),i.releaseStatesOfGeometry(d),d.isInstancedBufferGeometry===!0&&delete d._maxInstanceCount,e.memory.geometries--}function o(u,d){return n[d.id]===!0||(d.addEventListener("dispose",a),n[d.id]=!0,e.memory.geometries++),d}function h(u){const d=u.attributes;for(const f in d)t.update(d[f],s.ARRAY_BUFFER)}function l(u){const d=[],f=u.index,g=u.attributes.position;let _=0;if(f!==null){const T=f.array;_=f.version;for(let b=0,y=T.length;b<y;b+=3){const R=T[b+0],w=T[b+1],C=T[b+2];d.push(R,w,w,C,C,R)}}else if(g!==void 0){const T=g.array;_=g.version;for(let b=0,y=T.length/3-1;b<y;b+=3){const R=b+0,w=b+1,C=b+2;d.push(R,w,w,C,C,R)}}else return;const m=new(Fh(d)?tc:Qh)(d,1);m.version=_;const p=r.get(u);p&&t.remove(p),r.set(u,m)}function c(u){const d=r.get(u);if(d){const f=u.index;f!==null&&d.version<f.version&&l(u)}else l(u);return r.get(u)}return{get:o,update:h,getWireframeAttribute:c}}function Tg(s,t,e){let i;function n(d){i=d}let r,a;function o(d){r=d.type,a=d.bytesPerElement}function h(d,f){s.drawElements(i,f,r,d*a),e.update(f,i,1)}function l(d,f,g){g!==0&&(s.drawElementsInstanced(i,f,r,d*a,g),e.update(f,i,g))}function c(d,f,g){if(g===0)return;t.get("WEBGL_multi_draw").multiDrawElementsWEBGL(i,f,0,r,d,0,g);let m=0;for(let p=0;p<g;p++)m+=f[p];e.update(m,i,1)}function u(d,f,g,_){if(g===0)return;const m=t.get("WEBGL_multi_draw");if(m===null)for(let p=0;p<d.length;p++)l(d[p]/a,f[p],_[p]);else{m.multiDrawElementsInstancedWEBGL(i,f,0,r,d,0,_,0,g);let p=0;for(let T=0;T<g;T++)p+=f[T]*_[T];e.update(p,i,1)}}this.setMode=n,this.setIndex=o,this.render=h,this.renderInstances=l,this.renderMultiDraw=c,this.renderMultiDrawInstances=u}function Ag(s){const t={geometries:0,textures:0},e={frame:0,calls:0,triangles:0,points:0,lines:0};function i(r,a,o){switch(e.calls++,a){case s.TRIANGLES:e.triangles+=o*(r/3);break;case s.LINES:e.lines+=o*(r/2);break;case s.LINE_STRIP:e.lines+=o*(r-1);break;case s.LINE_LOOP:e.lines+=o*r;break;case s.POINTS:e.points+=o*r;break;default:console.error("THREE.WebGLInfo: Unknown draw mode:",a);break}}function n(){e.calls=0,e.triangles=0,e.points=0,e.lines=0}return{memory:t,render:e,programs:null,autoReset:!0,reset:n,update:i}}function wg(s,t,e){const i=new WeakMap,n=new he;function r(a,o,h){const l=a.morphTargetInfluences,c=o.morphAttributes.position||o.morphAttributes.normal||o.morphAttributes.color,u=c!==void 0?c.length:0;let d=i.get(o);if(d===void 0||d.count!==u){let S=function(){C.dispose(),i.delete(o),o.removeEventListener("dispose",S)};d!==void 0&&d.texture.dispose();const f=o.morphAttributes.position!==void 0,g=o.morphAttributes.normal!==void 0,_=o.morphAttributes.color!==void 0,m=o.morphAttributes.position||[],p=o.morphAttributes.normal||[],T=o.morphAttributes.color||[];let b=0;f===!0&&(b=1),g===!0&&(b=2),_===!0&&(b=3);let y=o.attributes.position.count*b,R=1;y>t.maxTextureSize&&(R=Math.ceil(y/t.maxTextureSize),y=t.maxTextureSize);const w=new Float32Array(y*R*4*u),C=new kh(w,y,R,u);C.type=Fi,C.needsUpdate=!0;const I=b*4;for(let M=0;M<u;M++){const A=m[M],B=p[M],F=T[M],z=y*R*4*M;for(let W=0;W<A.count;W++){const X=W*I;f===!0&&(n.fromBufferAttribute(A,W),w[z+X+0]=n.x,w[z+X+1]=n.y,w[z+X+2]=n.z,w[z+X+3]=0),g===!0&&(n.fromBufferAttribute(B,W),w[z+X+4]=n.x,w[z+X+5]=n.y,w[z+X+6]=n.z,w[z+X+7]=0),_===!0&&(n.fromBufferAttribute(F,W),w[z+X+8]=n.x,w[z+X+9]=n.y,w[z+X+10]=n.z,w[z+X+11]=F.itemSize===4?n.w:1)}}d={count:u,texture:C,size:new Dt(y,R)},i.set(o,d),o.addEventListener("dispose",S)}if(a.isInstancedMesh===!0&&a.morphTexture!==null)h.getUniforms().setValue(s,"morphTexture",a.morphTexture,e);else{let f=0;for(let _=0;_<l.length;_++)f+=l[_];const g=o.morphTargetsRelative?1:1-f;h.getUniforms().setValue(s,"morphTargetBaseInfluence",g),h.getUniforms().setValue(s,"morphTargetInfluences",l)}h.getUniforms().setValue(s,"morphTargetsTexture",d.texture,e),h.getUniforms().setValue(s,"morphTargetsTextureSize",d.size)}return{update:r}}function Rg(s,t,e,i){let n=new WeakMap;function r(h){const l=i.render.frame,c=h.geometry,u=t.get(h,c);if(n.get(u)!==l&&(t.update(u),n.set(u,l)),h.isInstancedMesh&&(h.hasEventListener("dispose",o)===!1&&h.addEventListener("dispose",o),n.get(h)!==l&&(e.update(h.instanceMatrix,s.ARRAY_BUFFER),h.instanceColor!==null&&e.update(h.instanceColor,s.ARRAY_BUFFER),n.set(h,l))),h.isSkinnedMesh){const d=h.skeleton;n.get(d)!==l&&(d.update(),n.set(d,l))}return u}function a(){n=new WeakMap}function o(h){const l=h.target;l.removeEventListener("dispose",o),e.remove(l.instanceMatrix),l.instanceColor!==null&&e.remove(l.instanceColor)}return{update:r,dispose:a}}const Tc=new Pe,Ac=new hc(1,1),wc=new kh,Rc=new Rf,Cc=new lc,Pc=[],Ic=[],Lc=new Float32Array(16),Dc=new Float32Array(9),Uc=new Float32Array(4);function As(s,t,e){const i=s[0];if(i<=0||i>0)return s;const n=t*e;let r=Pc[n];if(r===void 0&&(r=new Float32Array(n),Pc[n]=r),t!==0){i.toArray(r,0);for(let a=1,o=0;a!==t;++a)o+=e,s[a].toArray(r,o)}return r}function xe(s,t){if(s.length!==t.length)return!1;for(let e=0,i=s.length;e<i;e++)if(s[e]!==t[e])return!1;return!0}function ve(s,t){for(let e=0,i=t.length;e<i;e++)s[e]=t[e]}function ea(s,t){let e=Ic[t];e===void 0&&(e=new Int32Array(t),Ic[t]=e);for(let i=0;i!==t;++i)e[i]=s.allocateTextureUnit();return e}function Cg(s,t){const e=this.cache;e[0]!==t&&(s.uniform1f(this.addr,t),e[0]=t)}function Pg(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y)&&(s.uniform2f(this.addr,t.x,t.y),e[0]=t.x,e[1]=t.y);else{if(xe(e,t))return;s.uniform2fv(this.addr,t),ve(e,t)}}function Ig(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z)&&(s.uniform3f(this.addr,t.x,t.y,t.z),e[0]=t.x,e[1]=t.y,e[2]=t.z);else if(t.r!==void 0)(e[0]!==t.r||e[1]!==t.g||e[2]!==t.b)&&(s.uniform3f(this.addr,t.r,t.g,t.b),e[0]=t.r,e[1]=t.g,e[2]=t.b);else{if(xe(e,t))return;s.uniform3fv(this.addr,t),ve(e,t)}}function Lg(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z||e[3]!==t.w)&&(s.uniform4f(this.addr,t.x,t.y,t.z,t.w),e[0]=t.x,e[1]=t.y,e[2]=t.z,e[3]=t.w);else{if(xe(e,t))return;s.uniform4fv(this.addr,t),ve(e,t)}}function Dg(s,t){const e=this.cache,i=t.elements;if(i===void 0){if(xe(e,t))return;s.uniformMatrix2fv(this.addr,!1,t),ve(e,t)}else{if(xe(e,i))return;Uc.set(i),s.uniformMatrix2fv(this.addr,!1,Uc),ve(e,i)}}function Ug(s,t){const e=this.cache,i=t.elements;if(i===void 0){if(xe(e,t))return;s.uniformMatrix3fv(this.addr,!1,t),ve(e,t)}else{if(xe(e,i))return;Dc.set(i),s.uniformMatrix3fv(this.addr,!1,Dc),ve(e,i)}}function Ng(s,t){const e=this.cache,i=t.elements;if(i===void 0){if(xe(e,t))return;s.uniformMatrix4fv(this.addr,!1,t),ve(e,t)}else{if(xe(e,i))return;Lc.set(i),s.uniformMatrix4fv(this.addr,!1,Lc),ve(e,i)}}function Fg(s,t){const e=this.cache;e[0]!==t&&(s.uniform1i(this.addr,t),e[0]=t)}function Og(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y)&&(s.uniform2i(this.addr,t.x,t.y),e[0]=t.x,e[1]=t.y);else{if(xe(e,t))return;s.uniform2iv(this.addr,t),ve(e,t)}}function zg(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z)&&(s.uniform3i(this.addr,t.x,t.y,t.z),e[0]=t.x,e[1]=t.y,e[2]=t.z);else{if(xe(e,t))return;s.uniform3iv(this.addr,t),ve(e,t)}}function Bg(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z||e[3]!==t.w)&&(s.uniform4i(this.addr,t.x,t.y,t.z,t.w),e[0]=t.x,e[1]=t.y,e[2]=t.z,e[3]=t.w);else{if(xe(e,t))return;s.uniform4iv(this.addr,t),ve(e,t)}}function kg(s,t){const e=this.cache;e[0]!==t&&(s.uniform1ui(this.addr,t),e[0]=t)}function Gg(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y)&&(s.uniform2ui(this.addr,t.x,t.y),e[0]=t.x,e[1]=t.y);else{if(xe(e,t))return;s.uniform2uiv(this.addr,t),ve(e,t)}}function Hg(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z)&&(s.uniform3ui(this.addr,t.x,t.y,t.z),e[0]=t.x,e[1]=t.y,e[2]=t.z);else{if(xe(e,t))return;s.uniform3uiv(this.addr,t),ve(e,t)}}function Vg(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z||e[3]!==t.w)&&(s.uniform4ui(this.addr,t.x,t.y,t.z,t.w),e[0]=t.x,e[1]=t.y,e[2]=t.z,e[3]=t.w);else{if(xe(e,t))return;s.uniform4uiv(this.addr,t),ve(e,t)}}function Wg(s,t,e){const i=this.cache,n=e.allocateTextureUnit();i[0]!==n&&(s.uniform1i(this.addr,n),i[0]=n);let r;this.type===s.SAMPLER_2D_SHADOW?(Ac.compareFunction=Lh,r=Ac):r=Tc,e.setTexture2D(t||r,n)}function Xg(s,t,e){const i=this.cache,n=e.allocateTextureUnit();i[0]!==n&&(s.uniform1i(this.addr,n),i[0]=n),e.setTexture3D(t||Rc,n)}function qg(s,t,e){const i=this.cache,n=e.allocateTextureUnit();i[0]!==n&&(s.uniform1i(this.addr,n),i[0]=n),e.setTextureCube(t||Cc,n)}function Yg(s,t,e){const i=this.cache,n=e.allocateTextureUnit();i[0]!==n&&(s.uniform1i(this.addr,n),i[0]=n),e.setTexture2DArray(t||wc,n)}function jg(s){switch(s){case 5126:return Cg;case 35664:return Pg;case 35665:return Ig;case 35666:return Lg;case 35674:return Dg;case 35675:return Ug;case 35676:return Ng;case 5124:case 35670:return Fg;case 35667:case 35671:return Og;case 35668:case 35672:return zg;case 35669:case 35673:return Bg;case 5125:return kg;case 36294:return Gg;case 36295:return Hg;case 36296:return Vg;case 35678:case 36198:case 36298:case 36306:case 35682:return Wg;case 35679:case 36299:case 36307:return Xg;case 35680:case 36300:case 36308:case 36293:return qg;case 36289:case 36303:case 36311:case 36292:return Yg}}function Zg(s,t){s.uniform1fv(this.addr,t)}function Kg(s,t){const e=As(t,this.size,2);s.uniform2fv(this.addr,e)}function $g(s,t){const e=As(t,this.size,3);s.uniform3fv(this.addr,e)}function Jg(s,t){const e=As(t,this.size,4);s.uniform4fv(this.addr,e)}function Qg(s,t){const e=As(t,this.size,4);s.uniformMatrix2fv(this.addr,!1,e)}function t_(s,t){const e=As(t,this.size,9);s.uniformMatrix3fv(this.addr,!1,e)}function e_(s,t){const e=As(t,this.size,16);s.uniformMatrix4fv(this.addr,!1,e)}function i_(s,t){s.uniform1iv(this.addr,t)}function n_(s,t){s.uniform2iv(this.addr,t)}function s_(s,t){s.uniform3iv(this.addr,t)}function r_(s,t){s.uniform4iv(this.addr,t)}function a_(s,t){s.uniform1uiv(this.addr,t)}function o_(s,t){s.uniform2uiv(this.addr,t)}function l_(s,t){s.uniform3uiv(this.addr,t)}function h_(s,t){s.uniform4uiv(this.addr,t)}function c_(s,t,e){const i=this.cache,n=t.length,r=ea(e,n);xe(i,r)||(s.uniform1iv(this.addr,r),ve(i,r));for(let a=0;a!==n;++a)e.setTexture2D(t[a]||Tc,r[a])}function u_(s,t,e){const i=this.cache,n=t.length,r=ea(e,n);xe(i,r)||(s.uniform1iv(this.addr,r),ve(i,r));for(let a=0;a!==n;++a)e.setTexture3D(t[a]||Rc,r[a])}function d_(s,t,e){const i=this.cache,n=t.length,r=ea(e,n);xe(i,r)||(s.uniform1iv(this.addr,r),ve(i,r));for(let a=0;a!==n;++a)e.setTextureCube(t[a]||Cc,r[a])}function f_(s,t,e){const i=this.cache,n=t.length,r=ea(e,n);xe(i,r)||(s.uniform1iv(this.addr,r),ve(i,r));for(let a=0;a!==n;++a)e.setTexture2DArray(t[a]||wc,r[a])}function p_(s){switch(s){case 5126:return Zg;case 35664:return Kg;case 35665:return $g;case 35666:return Jg;case 35674:return Qg;case 35675:return t_;case 35676:return e_;case 5124:case 35670:return i_;case 35667:case 35671:return n_;case 35668:case 35672:return s_;case 35669:case 35673:return r_;case 5125:return a_;case 36294:return o_;case 36295:return l_;case 36296:return h_;case 35678:case 36198:case 36298:case 36306:case 35682:return c_;case 35679:case 36299:case 36307:return u_;case 35680:case 36300:case 36308:case 36293:return d_;case 36289:case 36303:case 36311:case 36292:return f_}}class m_{constructor(t,e,i){this.id=t,this.addr=i,this.cache=[],this.type=e.type,this.setValue=jg(e.type)}}class g_{constructor(t,e,i){this.id=t,this.addr=i,this.cache=[],this.type=e.type,this.size=e.size,this.setValue=p_(e.type)}}class __{constructor(t){this.id=t,this.seq=[],this.map={}}setValue(t,e,i){const n=this.seq;for(let r=0,a=n.length;r!==a;++r){const o=n[r];o.setValue(t,e[o.id],i)}}}const fl=/(\w+)(\])?(\[|\.)?/g;function Nc(s,t){s.seq.push(t),s.map[t.id]=t}function x_(s,t,e){const i=s.name,n=i.length;for(fl.lastIndex=0;;){const r=fl.exec(i),a=fl.lastIndex;let o=r[1];const h=r[2]==="]",l=r[3];if(h&&(o=o|0),l===void 0||l==="["&&a+2===n){Nc(e,l===void 0?new m_(o,s,t):new g_(o,s,t));break}else{let u=e.map[o];u===void 0&&(u=new __(o),Nc(e,u)),e=u}}}class ia{constructor(t,e){this.seq=[],this.map={};const i=t.getProgramParameter(e,t.ACTIVE_UNIFORMS);for(let n=0;n<i;++n){const r=t.getActiveUniform(e,n),a=t.getUniformLocation(e,r.name);x_(r,a,this)}}setValue(t,e,i,n){const r=this.map[e];r!==void 0&&r.setValue(t,i,n)}setOptional(t,e,i){const n=e[i];n!==void 0&&this.setValue(t,i,n)}static upload(t,e,i,n){for(let r=0,a=e.length;r!==a;++r){const o=e[r],h=i[o.id];h.needsUpdate!==!1&&o.setValue(t,h.value,n)}}static seqWithValue(t,e){const i=[];for(let n=0,r=t.length;n!==r;++n){const a=t[n];a.id in e&&i.push(a)}return i}}function Fc(s,t,e){const i=s.createShader(t);return s.shaderSource(i,e),s.compileShader(i),i}const v_=37297;let y_=0;function M_(s,t){const e=s.split(`
|
|
3852
|
+
`}function Ep(s){let t=new WeakMap,e=null;function i(o){if(o&&o.isTexture){const l=o.mapping,A=l===Xa||l===Za,h=l===ns||l===ss;if(A||h){let c=t.get(o);const u=c!==void 0?c.texture.pmremVersion:0;if(o.isRenderTargetTexture&&o.pmremVersion!==u)return e===null&&(e=new vh(s)),c=A?e.fromEquirectangular(o,c):e.fromCubemap(o,c),c.texture.pmremVersion=o.pmremVersion,t.set(o,c),c.texture;if(c!==void 0)return c.texture;{const d=o.image;return A&&d&&d.height>0||h&&d&&n(d)?(e===null&&(e=new vh(s)),c=A?e.fromEquirectangular(o):e.fromCubemap(o),c.texture.pmremVersion=o.pmremVersion,t.set(o,c),o.addEventListener("dispose",r),c.texture):null}}}return o}function n(o){let l=0;const A=6;for(let h=0;h<A;h++)o[h]!==void 0&&l++;return l===A}function r(o){const l=o.target;l.removeEventListener("dispose",r);const A=t.get(l);A!==void 0&&(t.delete(l),A.dispose())}function a(){t=new WeakMap,e!==null&&(e.dispose(),e=null)}return{get:i,dispose:a}}function yp(s){const t={};function e(i){if(t[i]!==void 0)return t[i];let n;switch(i){case"WEBGL_depth_texture":n=s.getExtension("WEBGL_depth_texture")||s.getExtension("MOZ_WEBGL_depth_texture")||s.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":n=s.getExtension("EXT_texture_filter_anisotropic")||s.getExtension("MOZ_EXT_texture_filter_anisotropic")||s.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":n=s.getExtension("WEBGL_compressed_texture_s3tc")||s.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||s.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":n=s.getExtension("WEBGL_compressed_texture_pvrtc")||s.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:n=s.getExtension(i)}return t[i]=n,n}return{has:function(i){return e(i)!==null},init:function(){e("EXT_color_buffer_float"),e("WEBGL_clip_cull_distance"),e("OES_texture_float_linear"),e("EXT_color_buffer_half_float"),e("WEBGL_multisampled_render_to_texture"),e("WEBGL_render_shared_exponent")},get:function(i){const n=e(i);return n===null&&os("THREE.WebGLRenderer: "+i+" extension not supported."),n}}}function Sp(s,t,e,i){const n={},r=new WeakMap;function a(c){const u=c.target;u.index!==null&&t.remove(u.index);for(const p in u.attributes)t.remove(u.attributes[p]);u.removeEventListener("dispose",a),delete n[u.id];const d=r.get(u);d&&(t.remove(d),r.delete(u)),i.releaseStatesOfGeometry(u),u.isInstancedBufferGeometry===!0&&delete u._maxInstanceCount,e.memory.geometries--}function o(c,u){return n[u.id]===!0||(u.addEventListener("dispose",a),n[u.id]=!0,e.memory.geometries++),u}function l(c){const u=c.attributes;for(const d in u)t.update(u[d],s.ARRAY_BUFFER)}function A(c){const u=[],d=c.index,p=c.attributes.position;let m=0;if(d!==null){const M=d.array;m=d.version;for(let y=0,x=M.length;y<x;y+=3){const w=M[y+0],T=M[y+1],_=M[y+2];u.push(w,T,T,_,_,w)}}else if(p!==void 0){const M=p.array;m=p.version;for(let y=0,x=M.length/3-1;y<x;y+=3){const w=y+0,T=y+1,_=y+2;u.push(w,T,T,_,_,w)}}else return;const g=new(Fl(u)?th:$l)(u,1);g.version=m;const f=r.get(c);f&&t.remove(f),r.set(c,g)}function h(c){const u=r.get(c);if(u){const d=c.index;d!==null&&u.version<d.version&&A(c)}else A(c);return r.get(c)}return{get:o,update:l,getWireframeAttribute:h}}function Mp(s,t,e){let i;function n(u){i=u}let r,a;function o(u){r=u.type,a=u.bytesPerElement}function l(u,d){s.drawElements(i,d,r,u*a),e.update(d,i,1)}function A(u,d,p){p!==0&&(s.drawElementsInstanced(i,d,r,u*a,p),e.update(d,i,p))}function h(u,d,p){if(p===0)return;t.get("WEBGL_multi_draw").multiDrawElementsWEBGL(i,d,0,r,u,0,p);let g=0;for(let f=0;f<p;f++)g+=d[f];e.update(g,i,1)}function c(u,d,p,m){if(p===0)return;const g=t.get("WEBGL_multi_draw");if(g===null)for(let f=0;f<u.length;f++)A(u[f]/a,d[f],m[f]);else{g.multiDrawElementsInstancedWEBGL(i,d,0,r,u,0,m,0,p);let f=0;for(let M=0;M<p;M++)f+=d[M]*m[M];e.update(f,i,1)}}this.setMode=n,this.setIndex=o,this.render=l,this.renderInstances=A,this.renderMultiDraw=h,this.renderMultiDrawInstances=c}function bp(s){const t={geometries:0,textures:0},e={frame:0,calls:0,triangles:0,points:0,lines:0};function i(r,a,o){switch(e.calls++,a){case s.TRIANGLES:e.triangles+=o*(r/3);break;case s.LINES:e.lines+=o*(r/2);break;case s.LINE_STRIP:e.lines+=o*(r-1);break;case s.LINE_LOOP:e.lines+=o*r;break;case s.POINTS:e.points+=o*r;break;default:console.error("THREE.WebGLInfo: Unknown draw mode:",a);break}}function n(){e.calls=0,e.triangles=0,e.points=0,e.lines=0}return{memory:t,render:e,programs:null,autoReset:!0,reset:n,update:i}}function Tp(s,t,e){const i=new WeakMap,n=new ce;function r(a,o,l){const A=a.morphTargetInfluences,h=o.morphAttributes.position||o.morphAttributes.normal||o.morphAttributes.color,c=h!==void 0?h.length:0;let u=i.get(o);if(u===void 0||u.count!==c){let E=function(){_.dispose(),i.delete(o),o.removeEventListener("dispose",E)};u!==void 0&&u.texture.dispose();const d=o.morphAttributes.position!==void 0,p=o.morphAttributes.normal!==void 0,m=o.morphAttributes.color!==void 0,g=o.morphAttributes.position||[],f=o.morphAttributes.normal||[],M=o.morphAttributes.color||[];let y=0;d===!0&&(y=1),p===!0&&(y=2),m===!0&&(y=3);let x=o.attributes.position.count*y,w=1;x>t.maxTextureSize&&(w=Math.ceil(x/t.maxTextureSize),x=t.maxTextureSize);const T=new Float32Array(x*w*4*c),_=new kl(T,x,w,c);_.type=Fi,_.needsUpdate=!0;const P=y*4;for(let v=0;v<c;v++){const b=g[v],z=f[v],F=M[v],U=x*w*4*v;for(let W=0;W<b.count;W++){const Y=W*P;d===!0&&(n.fromBufferAttribute(b,W),T[U+Y+0]=n.x,T[U+Y+1]=n.y,T[U+Y+2]=n.z,T[U+Y+3]=0),p===!0&&(n.fromBufferAttribute(z,W),T[U+Y+4]=n.x,T[U+Y+5]=n.y,T[U+Y+6]=n.z,T[U+Y+7]=0),m===!0&&(n.fromBufferAttribute(F,W),T[U+Y+8]=n.x,T[U+Y+9]=n.y,T[U+Y+10]=n.z,T[U+Y+11]=F.itemSize===4?n.w:1)}}u={count:c,texture:_,size:new Nt(x,w)},i.set(o,u),o.addEventListener("dispose",E)}if(a.isInstancedMesh===!0&&a.morphTexture!==null)l.getUniforms().setValue(s,"morphTexture",a.morphTexture,e);else{let d=0;for(let m=0;m<A.length;m++)d+=A[m];const p=o.morphTargetsRelative?1:1-d;l.getUniforms().setValue(s,"morphTargetBaseInfluence",p),l.getUniforms().setValue(s,"morphTargetInfluences",A)}l.getUniforms().setValue(s,"morphTargetsTexture",u.texture,e),l.getUniforms().setValue(s,"morphTargetsTextureSize",u.size)}return{update:r}}function wp(s,t,e,i){let n=new WeakMap;function r(l){const A=i.render.frame,h=l.geometry,c=t.get(l,h);if(n.get(c)!==A&&(t.update(c),n.set(c,A)),l.isInstancedMesh&&(l.hasEventListener("dispose",o)===!1&&l.addEventListener("dispose",o),n.get(l)!==A&&(e.update(l.instanceMatrix,s.ARRAY_BUFFER),l.instanceColor!==null&&e.update(l.instanceColor,s.ARRAY_BUFFER),n.set(l,A))),l.isSkinnedMesh){const u=l.skeleton;n.get(u)!==A&&(u.update(),n.set(u,A))}return c}function a(){n=new WeakMap}function o(l){const A=l.target;A.removeEventListener("dispose",o),e.remove(A.instanceMatrix),A.instanceColor!==null&&e.remove(A.instanceColor)}return{update:r,dispose:a}}const Mh=new Re,bh=new lh(1,1),Th=new kl,wh=new Td,_h=new Ah,Rh=[],Ph=[],Dh=new Float32Array(16),Lh=new Float32Array(9),Nh=new Float32Array(4);function bs(s,t,e){const i=s[0];if(i<=0||i>0)return s;const n=t*e;let r=Rh[n];if(r===void 0&&(r=new Float32Array(n),Rh[n]=r),t!==0){i.toArray(r,0);for(let a=1,o=0;a!==t;++a)o+=e,s[a].toArray(r,o)}return r}function Ce(s,t){if(s.length!==t.length)return!1;for(let e=0,i=s.length;e<i;e++)if(s[e]!==t[e])return!1;return!0}function Ie(s,t){for(let e=0,i=t.length;e<i;e++)s[e]=t[e]}function ea(s,t){let e=Ph[t];e===void 0&&(e=new Int32Array(t),Ph[t]=e);for(let i=0;i!==t;++i)e[i]=s.allocateTextureUnit();return e}function _p(s,t){const e=this.cache;e[0]!==t&&(s.uniform1f(this.addr,t),e[0]=t)}function Rp(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y)&&(s.uniform2f(this.addr,t.x,t.y),e[0]=t.x,e[1]=t.y);else{if(Ce(e,t))return;s.uniform2fv(this.addr,t),Ie(e,t)}}function Pp(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z)&&(s.uniform3f(this.addr,t.x,t.y,t.z),e[0]=t.x,e[1]=t.y,e[2]=t.z);else if(t.r!==void 0)(e[0]!==t.r||e[1]!==t.g||e[2]!==t.b)&&(s.uniform3f(this.addr,t.r,t.g,t.b),e[0]=t.r,e[1]=t.g,e[2]=t.b);else{if(Ce(e,t))return;s.uniform3fv(this.addr,t),Ie(e,t)}}function Dp(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z||e[3]!==t.w)&&(s.uniform4f(this.addr,t.x,t.y,t.z,t.w),e[0]=t.x,e[1]=t.y,e[2]=t.z,e[3]=t.w);else{if(Ce(e,t))return;s.uniform4fv(this.addr,t),Ie(e,t)}}function Lp(s,t){const e=this.cache,i=t.elements;if(i===void 0){if(Ce(e,t))return;s.uniformMatrix2fv(this.addr,!1,t),Ie(e,t)}else{if(Ce(e,i))return;Nh.set(i),s.uniformMatrix2fv(this.addr,!1,Nh),Ie(e,i)}}function Np(s,t){const e=this.cache,i=t.elements;if(i===void 0){if(Ce(e,t))return;s.uniformMatrix3fv(this.addr,!1,t),Ie(e,t)}else{if(Ce(e,i))return;Lh.set(i),s.uniformMatrix3fv(this.addr,!1,Lh),Ie(e,i)}}function Bp(s,t){const e=this.cache,i=t.elements;if(i===void 0){if(Ce(e,t))return;s.uniformMatrix4fv(this.addr,!1,t),Ie(e,t)}else{if(Ce(e,i))return;Dh.set(i),s.uniformMatrix4fv(this.addr,!1,Dh),Ie(e,i)}}function Fp(s,t){const e=this.cache;e[0]!==t&&(s.uniform1i(this.addr,t),e[0]=t)}function Op(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y)&&(s.uniform2i(this.addr,t.x,t.y),e[0]=t.x,e[1]=t.y);else{if(Ce(e,t))return;s.uniform2iv(this.addr,t),Ie(e,t)}}function Up(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z)&&(s.uniform3i(this.addr,t.x,t.y,t.z),e[0]=t.x,e[1]=t.y,e[2]=t.z);else{if(Ce(e,t))return;s.uniform3iv(this.addr,t),Ie(e,t)}}function zp(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z||e[3]!==t.w)&&(s.uniform4i(this.addr,t.x,t.y,t.z,t.w),e[0]=t.x,e[1]=t.y,e[2]=t.z,e[3]=t.w);else{if(Ce(e,t))return;s.uniform4iv(this.addr,t),Ie(e,t)}}function kp(s,t){const e=this.cache;e[0]!==t&&(s.uniform1ui(this.addr,t),e[0]=t)}function Gp(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y)&&(s.uniform2ui(this.addr,t.x,t.y),e[0]=t.x,e[1]=t.y);else{if(Ce(e,t))return;s.uniform2uiv(this.addr,t),Ie(e,t)}}function Hp(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z)&&(s.uniform3ui(this.addr,t.x,t.y,t.z),e[0]=t.x,e[1]=t.y,e[2]=t.z);else{if(Ce(e,t))return;s.uniform3uiv(this.addr,t),Ie(e,t)}}function Vp(s,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z||e[3]!==t.w)&&(s.uniform4ui(this.addr,t.x,t.y,t.z,t.w),e[0]=t.x,e[1]=t.y,e[2]=t.z,e[3]=t.w);else{if(Ce(e,t))return;s.uniform4uiv(this.addr,t),Ie(e,t)}}function Wp(s,t,e){const i=this.cache,n=e.allocateTextureUnit();i[0]!==n&&(s.uniform1i(this.addr,n),i[0]=n);let r;this.type===s.SAMPLER_2D_SHADOW?(bh.compareFunction=Dl,r=bh):r=Mh,e.setTexture2D(t||r,n)}function Yp(s,t,e){const i=this.cache,n=e.allocateTextureUnit();i[0]!==n&&(s.uniform1i(this.addr,n),i[0]=n),e.setTexture3D(t||wh,n)}function Xp(s,t,e){const i=this.cache,n=e.allocateTextureUnit();i[0]!==n&&(s.uniform1i(this.addr,n),i[0]=n),e.setTextureCube(t||_h,n)}function Zp(s,t,e){const i=this.cache,n=e.allocateTextureUnit();i[0]!==n&&(s.uniform1i(this.addr,n),i[0]=n),e.setTexture2DArray(t||Th,n)}function jp(s){switch(s){case 5126:return _p;case 35664:return Rp;case 35665:return Pp;case 35666:return Dp;case 35674:return Lp;case 35675:return Np;case 35676:return Bp;case 5124:case 35670:return Fp;case 35667:case 35671:return Op;case 35668:case 35672:return Up;case 35669:case 35673:return zp;case 5125:return kp;case 36294:return Gp;case 36295:return Hp;case 36296:return Vp;case 35678:case 36198:case 36298:case 36306:case 35682:return Wp;case 35679:case 36299:case 36307:return Yp;case 35680:case 36300:case 36308:case 36293:return Xp;case 36289:case 36303:case 36311:case 36292:return Zp}}function Jp(s,t){s.uniform1fv(this.addr,t)}function Qp(s,t){const e=bs(t,this.size,2);s.uniform2fv(this.addr,e)}function qp(s,t){const e=bs(t,this.size,3);s.uniform3fv(this.addr,e)}function Kp(s,t){const e=bs(t,this.size,4);s.uniform4fv(this.addr,e)}function $p(s,t){const e=bs(t,this.size,4);s.uniformMatrix2fv(this.addr,!1,e)}function tm(s,t){const e=bs(t,this.size,9);s.uniformMatrix3fv(this.addr,!1,e)}function em(s,t){const e=bs(t,this.size,16);s.uniformMatrix4fv(this.addr,!1,e)}function im(s,t){s.uniform1iv(this.addr,t)}function nm(s,t){s.uniform2iv(this.addr,t)}function sm(s,t){s.uniform3iv(this.addr,t)}function rm(s,t){s.uniform4iv(this.addr,t)}function am(s,t){s.uniform1uiv(this.addr,t)}function om(s,t){s.uniform2uiv(this.addr,t)}function Am(s,t){s.uniform3uiv(this.addr,t)}function lm(s,t){s.uniform4uiv(this.addr,t)}function hm(s,t,e){const i=this.cache,n=t.length,r=ea(e,n);Ce(i,r)||(s.uniform1iv(this.addr,r),Ie(i,r));for(let a=0;a!==n;++a)e.setTexture2D(t[a]||Mh,r[a])}function cm(s,t,e){const i=this.cache,n=t.length,r=ea(e,n);Ce(i,r)||(s.uniform1iv(this.addr,r),Ie(i,r));for(let a=0;a!==n;++a)e.setTexture3D(t[a]||wh,r[a])}function um(s,t,e){const i=this.cache,n=t.length,r=ea(e,n);Ce(i,r)||(s.uniform1iv(this.addr,r),Ie(i,r));for(let a=0;a!==n;++a)e.setTextureCube(t[a]||_h,r[a])}function dm(s,t,e){const i=this.cache,n=t.length,r=ea(e,n);Ce(i,r)||(s.uniform1iv(this.addr,r),Ie(i,r));for(let a=0;a!==n;++a)e.setTexture2DArray(t[a]||Th,r[a])}function fm(s){switch(s){case 5126:return Jp;case 35664:return Qp;case 35665:return qp;case 35666:return Kp;case 35674:return $p;case 35675:return tm;case 35676:return em;case 5124:case 35670:return im;case 35667:case 35671:return nm;case 35668:case 35672:return sm;case 35669:case 35673:return rm;case 5125:return am;case 36294:return om;case 36295:return Am;case 36296:return lm;case 35678:case 36198:case 36298:case 36306:case 35682:return hm;case 35679:case 36299:case 36307:return cm;case 35680:case 36300:case 36308:case 36293:return um;case 36289:case 36303:case 36311:case 36292:return dm}}class gm{constructor(t,e,i){this.id=t,this.addr=i,this.cache=[],this.type=e.type,this.setValue=jp(e.type)}}class pm{constructor(t,e,i){this.id=t,this.addr=i,this.cache=[],this.type=e.type,this.size=e.size,this.setValue=fm(e.type)}}class mm{constructor(t){this.id=t,this.seq=[],this.map={}}setValue(t,e,i){const n=this.seq;for(let r=0,a=n.length;r!==a;++r){const o=n[r];o.setValue(t,e[o.id],i)}}}const dA=/(\w+)(\])?(\[|\.)?/g;function Bh(s,t){s.seq.push(t),s.map[t.id]=t}function Cm(s,t,e){const i=s.name,n=i.length;for(dA.lastIndex=0;;){const r=dA.exec(i),a=dA.lastIndex;let o=r[1];const l=r[2]==="]",A=r[3];if(l&&(o=o|0),A===void 0||A==="["&&a+2===n){Bh(e,A===void 0?new gm(o,s,t):new pm(o,s,t));break}else{let c=e.map[o];c===void 0&&(c=new mm(o),Bh(e,c)),e=c}}}class ia{constructor(t,e){this.seq=[],this.map={};const i=t.getProgramParameter(e,t.ACTIVE_UNIFORMS);for(let n=0;n<i;++n){const r=t.getActiveUniform(e,n),a=t.getUniformLocation(e,r.name);Cm(r,a,this)}}setValue(t,e,i,n){const r=this.map[e];r!==void 0&&r.setValue(t,i,n)}setOptional(t,e,i){const n=e[i];n!==void 0&&this.setValue(t,i,n)}static upload(t,e,i,n){for(let r=0,a=e.length;r!==a;++r){const o=e[r],l=i[o.id];l.needsUpdate!==!1&&o.setValue(t,l.value,n)}}static seqWithValue(t,e){const i=[];for(let n=0,r=t.length;n!==r;++n){const a=t[n];a.id in e&&i.push(a)}return i}}function Fh(s,t,e){const i=s.createShader(t);return s.shaderSource(i,e),s.compileShader(i),i}const Im=37297;let xm=0;function vm(s,t){const e=s.split(`
|
|
3853
3853
|
`),i=[],n=Math.max(t-6,0),r=Math.min(t+6,e.length);for(let a=n;a<r;a++){const o=a+1;i.push(`${o===t?">":" "} ${o}: ${e[a]}`)}return i.join(`
|
|
3854
|
-
`)}const
|
|
3854
|
+
`)}const Oh=new Bt;function Em(s){Xt._getMatrix(Oh,Xt.workingColorSpace,s);const t=`mat3( ${Oh.elements.map(e=>e.toFixed(4))} )`;switch(Xt.getTransfer(s)){case Dr:return[t,"LinearTransferOETF"];case qt:return[t,"sRGBTransferOETF"];default:return console.warn("THREE.WebGLProgram: Unsupported color space: ",s),[t,"LinearTransferOETF"]}}function Uh(s,t,e){const i=s.getShaderParameter(t,s.COMPILE_STATUS),r=(s.getShaderInfoLog(t)||"").trim();if(i&&r==="")return"";const a=/ERROR: 0:(\d+)/.exec(r);if(a){const o=parseInt(a[1]);return e.toUpperCase()+`
|
|
3855
3855
|
|
|
3856
3856
|
`+r+`
|
|
3857
3857
|
|
|
3858
|
-
`+
|
|
3859
|
-
`)}function
|
|
3860
|
-
`)}function
|
|
3861
|
-
`)}function
|
|
3862
|
-
`)}function
|
|
3858
|
+
`+vm(s.getShaderSource(t),o)}else return r}function ym(s,t){const e=Em(t);return[`vec4 ${s}( vec4 value ) {`,` return ${e[1]}( vec4( value.rgb * ${e[0]}, value.a ) );`,"}"].join(`
|
|
3859
|
+
`)}function Sm(s,t){let e;switch(t){case td:e="Linear";break;case ed:e="Reinhard";break;case id:e="Cineon";break;case nd:e="ACESFilmic";break;case rd:e="AgX";break;case ad:e="Neutral";break;case sd:e="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",t),e="Linear"}return"vec3 "+s+"( vec3 color ) { return "+e+"ToneMapping( color ); }"}const na=new B;function Mm(){Xt.getLuminanceCoefficients(na);const s=na.x.toFixed(4),t=na.y.toFixed(4),e=na.z.toFixed(4);return["float luminance( const in vec3 rgb ) {",` const vec3 weights = vec3( ${s}, ${t}, ${e} );`," return dot( weights, rgb );","}"].join(`
|
|
3860
|
+
`)}function bm(s){return[s.extensionClipCullDistance?"#extension GL_ANGLE_clip_cull_distance : require":"",s.extensionMultiDraw?"#extension GL_ANGLE_multi_draw : require":""].filter(nr).join(`
|
|
3861
|
+
`)}function Tm(s){const t=[];for(const e in s){const i=s[e];i!==!1&&t.push("#define "+e+" "+i)}return t.join(`
|
|
3862
|
+
`)}function wm(s,t){const e={},i=s.getProgramParameter(t,s.ACTIVE_ATTRIBUTES);for(let n=0;n<i;n++){const r=s.getActiveAttrib(t,n),a=r.name;let o=1;r.type===s.FLOAT_MAT2&&(o=2),r.type===s.FLOAT_MAT3&&(o=3),r.type===s.FLOAT_MAT4&&(o=4),e[a]={type:r.type,location:s.getAttribLocation(t,a),locationSize:o}}return e}function nr(s){return s!==""}function zh(s,t){const e=t.numSpotLightShadows+t.numSpotLightMaps-t.numSpotLightShadowsWithMaps;return s.replace(/NUM_DIR_LIGHTS/g,t.numDirLights).replace(/NUM_SPOT_LIGHTS/g,t.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,t.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,e).replace(/NUM_RECT_AREA_LIGHTS/g,t.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,t.numPointLights).replace(/NUM_HEMI_LIGHTS/g,t.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,t.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,t.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,t.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,t.numPointLightShadows)}function kh(s,t){return s.replace(/NUM_CLIPPING_PLANES/g,t.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,t.numClippingPlanes-t.numClipIntersection)}const _m=/^[ \t]*#include +<([\w\d./]+)>/gm;function fA(s){return s.replace(_m,Pm)}const Rm=new Map;function Pm(s,t){let e=Ot[t];if(e===void 0){const i=Rm.get(t);if(i!==void 0)e=Ot[i],console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',t,i);else throw new Error("Can not resolve #include <"+t+">")}return fA(e)}const Dm=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function Gh(s){return s.replace(Dm,Lm)}function Lm(s,t,e,i){let n="";for(let r=parseInt(t);r<parseInt(e);r++)n+=i.replace(/\[\s*i\s*\]/g,"[ "+r+" ]").replace(/UNROLLED_LOOP_INDEX/g,r);return n}function Hh(s){let t=`precision ${s.precision} float;
|
|
3863
3863
|
precision ${s.precision} int;
|
|
3864
3864
|
precision ${s.precision} sampler2D;
|
|
3865
3865
|
precision ${s.precision} samplerCube;
|
|
@@ -3879,30 +3879,30 @@ void main() {
|
|
|
3879
3879
|
`;return s.precision==="highp"?t+=`
|
|
3880
3880
|
#define HIGH_PRECISION`:s.precision==="mediump"?t+=`
|
|
3881
3881
|
#define MEDIUM_PRECISION`:s.precision==="lowp"&&(t+=`
|
|
3882
|
-
#define LOW_PRECISION`),t}function
|
|
3883
|
-
`:"";e.isRawShaderMaterial?(
|
|
3884
|
-
`),
|
|
3885
|
-
`),
|
|
3886
|
-
`),
|
|
3887
|
-
`)):(
|
|
3882
|
+
#define LOW_PRECISION`),t}function Nm(s){let t="SHADOWMAP_TYPE_BASIC";return s.shadowMapType===pl?t="SHADOWMAP_TYPE_PCF":s.shadowMapType===Lu?t="SHADOWMAP_TYPE_PCF_SOFT":s.shadowMapType===Ni&&(t="SHADOWMAP_TYPE_VSM"),t}function Bm(s){let t="ENVMAP_TYPE_CUBE";if(s.envMap)switch(s.envMapMode){case ns:case ss:t="ENVMAP_TYPE_CUBE";break;case Mr:t="ENVMAP_TYPE_CUBE_UV";break}return t}function Fm(s){let t="ENVMAP_MODE_REFLECTION";return s.envMap&&s.envMapMode===ss&&(t="ENVMAP_MODE_REFRACTION"),t}function Om(s){let t="ENVMAP_BLENDING_NONE";if(s.envMap)switch(s.combine){case xl:t="ENVMAP_BLENDING_MULTIPLY";break;case Ku:t="ENVMAP_BLENDING_MIX";break;case $u:t="ENVMAP_BLENDING_ADD";break}return t}function Um(s){const t=s.envMapCubeUVHeight;if(t===null)return null;const e=Math.log2(t)-2,i=1/t;return{texelWidth:1/(3*Math.max(Math.pow(2,e),112)),texelHeight:i,maxMip:e}}function zm(s,t,e,i){const n=s.getContext(),r=e.defines;let a=e.vertexShader,o=e.fragmentShader;const l=Nm(e),A=Bm(e),h=Fm(e),c=Om(e),u=Um(e),d=bm(e),p=Tm(r),m=n.createProgram();let g,f,M=e.glslVersion?"#version "+e.glslVersion+`
|
|
3883
|
+
`:"";e.isRawShaderMaterial?(g=["#define SHADER_TYPE "+e.shaderType,"#define SHADER_NAME "+e.shaderName,p].filter(nr).join(`
|
|
3884
|
+
`),g.length>0&&(g+=`
|
|
3885
|
+
`),f=["#define SHADER_TYPE "+e.shaderType,"#define SHADER_NAME "+e.shaderName,p].filter(nr).join(`
|
|
3886
|
+
`),f.length>0&&(f+=`
|
|
3887
|
+
`)):(g=[Hh(e),"#define SHADER_TYPE "+e.shaderType,"#define SHADER_NAME "+e.shaderName,p,e.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",e.batching?"#define USE_BATCHING":"",e.batchingColor?"#define USE_BATCHING_COLOR":"",e.instancing?"#define USE_INSTANCING":"",e.instancingColor?"#define USE_INSTANCING_COLOR":"",e.instancingMorph?"#define USE_INSTANCING_MORPH":"",e.useFog&&e.fog?"#define USE_FOG":"",e.useFog&&e.fogExp2?"#define FOG_EXP2":"",e.map?"#define USE_MAP":"",e.envMap?"#define USE_ENVMAP":"",e.envMap?"#define "+h:"",e.lightMap?"#define USE_LIGHTMAP":"",e.aoMap?"#define USE_AOMAP":"",e.bumpMap?"#define USE_BUMPMAP":"",e.normalMap?"#define USE_NORMALMAP":"",e.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",e.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",e.displacementMap?"#define USE_DISPLACEMENTMAP":"",e.emissiveMap?"#define USE_EMISSIVEMAP":"",e.anisotropy?"#define USE_ANISOTROPY":"",e.anisotropyMap?"#define USE_ANISOTROPYMAP":"",e.clearcoatMap?"#define USE_CLEARCOATMAP":"",e.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",e.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",e.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",e.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",e.specularMap?"#define USE_SPECULARMAP":"",e.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",e.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",e.roughnessMap?"#define USE_ROUGHNESSMAP":"",e.metalnessMap?"#define USE_METALNESSMAP":"",e.alphaMap?"#define USE_ALPHAMAP":"",e.alphaHash?"#define USE_ALPHAHASH":"",e.transmission?"#define USE_TRANSMISSION":"",e.transmissionMap?"#define USE_TRANSMISSIONMAP":"",e.thicknessMap?"#define USE_THICKNESSMAP":"",e.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",e.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",e.mapUv?"#define MAP_UV "+e.mapUv:"",e.alphaMapUv?"#define ALPHAMAP_UV "+e.alphaMapUv:"",e.lightMapUv?"#define LIGHTMAP_UV "+e.lightMapUv:"",e.aoMapUv?"#define AOMAP_UV "+e.aoMapUv:"",e.emissiveMapUv?"#define EMISSIVEMAP_UV "+e.emissiveMapUv:"",e.bumpMapUv?"#define BUMPMAP_UV "+e.bumpMapUv:"",e.normalMapUv?"#define NORMALMAP_UV "+e.normalMapUv:"",e.displacementMapUv?"#define DISPLACEMENTMAP_UV "+e.displacementMapUv:"",e.metalnessMapUv?"#define METALNESSMAP_UV "+e.metalnessMapUv:"",e.roughnessMapUv?"#define ROUGHNESSMAP_UV "+e.roughnessMapUv:"",e.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+e.anisotropyMapUv:"",e.clearcoatMapUv?"#define CLEARCOATMAP_UV "+e.clearcoatMapUv:"",e.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+e.clearcoatNormalMapUv:"",e.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+e.clearcoatRoughnessMapUv:"",e.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+e.iridescenceMapUv:"",e.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+e.iridescenceThicknessMapUv:"",e.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+e.sheenColorMapUv:"",e.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+e.sheenRoughnessMapUv:"",e.specularMapUv?"#define SPECULARMAP_UV "+e.specularMapUv:"",e.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+e.specularColorMapUv:"",e.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+e.specularIntensityMapUv:"",e.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+e.transmissionMapUv:"",e.thicknessMapUv?"#define THICKNESSMAP_UV "+e.thicknessMapUv:"",e.vertexTangents&&e.flatShading===!1?"#define USE_TANGENT":"",e.vertexColors?"#define USE_COLOR":"",e.vertexAlphas?"#define USE_COLOR_ALPHA":"",e.vertexUv1s?"#define USE_UV1":"",e.vertexUv2s?"#define USE_UV2":"",e.vertexUv3s?"#define USE_UV3":"",e.pointsUvs?"#define USE_POINTS_UV":"",e.flatShading?"#define FLAT_SHADED":"",e.skinning?"#define USE_SKINNING":"",e.morphTargets?"#define USE_MORPHTARGETS":"",e.morphNormals&&e.flatShading===!1?"#define USE_MORPHNORMALS":"",e.morphColors?"#define USE_MORPHCOLORS":"",e.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+e.morphTextureStride:"",e.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+e.morphTargetsCount:"",e.doubleSided?"#define DOUBLE_SIDED":"",e.flipSided?"#define FLIP_SIDED":"",e.shadowMapEnabled?"#define USE_SHADOWMAP":"",e.shadowMapEnabled?"#define "+l:"",e.sizeAttenuation?"#define USE_SIZEATTENUATION":"",e.numLightProbes>0?"#define USE_LIGHT_PROBES":"",e.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",e.reversedDepthBuffer?"#define USE_REVERSEDEPTHBUF":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR"," attribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH"," uniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1"," attribute vec2 uv1;","#endif","#ifdef USE_UV2"," attribute vec2 uv2;","#endif","#ifdef USE_UV3"," attribute vec2 uv3;","#endif","#ifdef USE_TANGENT"," attribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )"," attribute vec4 color;","#elif defined( USE_COLOR )"," attribute vec3 color;","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif",`
|
|
3888
3888
|
`].filter(nr).join(`
|
|
3889
|
-
`),
|
|
3889
|
+
`),f=[Hh(e),"#define SHADER_TYPE "+e.shaderType,"#define SHADER_NAME "+e.shaderName,p,e.useFog&&e.fog?"#define USE_FOG":"",e.useFog&&e.fogExp2?"#define FOG_EXP2":"",e.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",e.map?"#define USE_MAP":"",e.matcap?"#define USE_MATCAP":"",e.envMap?"#define USE_ENVMAP":"",e.envMap?"#define "+A:"",e.envMap?"#define "+h:"",e.envMap?"#define "+c:"",u?"#define CUBEUV_TEXEL_WIDTH "+u.texelWidth:"",u?"#define CUBEUV_TEXEL_HEIGHT "+u.texelHeight:"",u?"#define CUBEUV_MAX_MIP "+u.maxMip+".0":"",e.lightMap?"#define USE_LIGHTMAP":"",e.aoMap?"#define USE_AOMAP":"",e.bumpMap?"#define USE_BUMPMAP":"",e.normalMap?"#define USE_NORMALMAP":"",e.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",e.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",e.emissiveMap?"#define USE_EMISSIVEMAP":"",e.anisotropy?"#define USE_ANISOTROPY":"",e.anisotropyMap?"#define USE_ANISOTROPYMAP":"",e.clearcoat?"#define USE_CLEARCOAT":"",e.clearcoatMap?"#define USE_CLEARCOATMAP":"",e.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",e.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",e.dispersion?"#define USE_DISPERSION":"",e.iridescence?"#define USE_IRIDESCENCE":"",e.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",e.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",e.specularMap?"#define USE_SPECULARMAP":"",e.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",e.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",e.roughnessMap?"#define USE_ROUGHNESSMAP":"",e.metalnessMap?"#define USE_METALNESSMAP":"",e.alphaMap?"#define USE_ALPHAMAP":"",e.alphaTest?"#define USE_ALPHATEST":"",e.alphaHash?"#define USE_ALPHAHASH":"",e.sheen?"#define USE_SHEEN":"",e.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",e.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",e.transmission?"#define USE_TRANSMISSION":"",e.transmissionMap?"#define USE_TRANSMISSIONMAP":"",e.thicknessMap?"#define USE_THICKNESSMAP":"",e.vertexTangents&&e.flatShading===!1?"#define USE_TANGENT":"",e.vertexColors||e.instancingColor||e.batchingColor?"#define USE_COLOR":"",e.vertexAlphas?"#define USE_COLOR_ALPHA":"",e.vertexUv1s?"#define USE_UV1":"",e.vertexUv2s?"#define USE_UV2":"",e.vertexUv3s?"#define USE_UV3":"",e.pointsUvs?"#define USE_POINTS_UV":"",e.gradientMap?"#define USE_GRADIENTMAP":"",e.flatShading?"#define FLAT_SHADED":"",e.doubleSided?"#define DOUBLE_SIDED":"",e.flipSided?"#define FLIP_SIDED":"",e.shadowMapEnabled?"#define USE_SHADOWMAP":"",e.shadowMapEnabled?"#define "+l:"",e.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",e.numLightProbes>0?"#define USE_LIGHT_PROBES":"",e.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",e.decodeVideoTextureEmissive?"#define DECODE_VIDEO_TEXTURE_EMISSIVE":"",e.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",e.reversedDepthBuffer?"#define USE_REVERSEDEPTHBUF":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",e.toneMapping!==$i?"#define TONE_MAPPING":"",e.toneMapping!==$i?Ot.tonemapping_pars_fragment:"",e.toneMapping!==$i?Sm("toneMapping",e.toneMapping):"",e.dithering?"#define DITHERING":"",e.opaque?"#define OPAQUE":"",Ot.colorspace_pars_fragment,ym("linearToOutputTexel",e.outputColorSpace),Mm(),e.useDepthPacking?"#define DEPTH_PACKING "+e.depthPacking:"",`
|
|
3890
3890
|
`].filter(nr).join(`
|
|
3891
|
-
`)),a=
|
|
3892
|
-
`,
|
|
3891
|
+
`)),a=fA(a),a=zh(a,e),a=kh(a,e),o=fA(o),o=zh(o,e),o=kh(o,e),a=Gh(a),o=Gh(o),e.isRawShaderMaterial!==!0&&(M=`#version 300 es
|
|
3892
|
+
`,g=[d,"#define attribute in","#define varying out","#define texture2D texture"].join(`
|
|
3893
3893
|
`)+`
|
|
3894
|
-
`+
|
|
3894
|
+
`+g,f=["#define varying in",e.glslVersion===Nl?"":"layout(location = 0) out highp vec4 pc_fragColor;",e.glslVersion===Nl?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join(`
|
|
3895
3895
|
`)+`
|
|
3896
|
-
`+
|
|
3896
|
+
`+f);const y=M+g+a,x=M+f+o,w=Fh(n,n.VERTEX_SHADER,y),T=Fh(n,n.FRAGMENT_SHADER,x);n.attachShader(m,w),n.attachShader(m,T),e.index0AttributeName!==void 0?n.bindAttribLocation(m,0,e.index0AttributeName):e.morphTargets===!0&&n.bindAttribLocation(m,0,"position"),n.linkProgram(m);function _(b){if(s.debug.checkShaderErrors){const z=n.getProgramInfoLog(m)||"",F=n.getShaderInfoLog(w)||"",U=n.getShaderInfoLog(T)||"",W=z.trim(),Y=F.trim(),$=U.trim();let H=!0,rt=!0;if(n.getProgramParameter(m,n.LINK_STATUS)===!1)if(H=!1,typeof s.debug.onShaderError=="function")s.debug.onShaderError(n,m,w,T);else{const lt=Uh(n,w,"vertex"),mt=Uh(n,T,"fragment");console.error("THREE.WebGLProgram: Shader Error "+n.getError()+" - VALIDATE_STATUS "+n.getProgramParameter(m,n.VALIDATE_STATUS)+`
|
|
3897
3897
|
|
|
3898
|
-
Material Name: `+
|
|
3899
|
-
Material Type: `+
|
|
3898
|
+
Material Name: `+b.name+`
|
|
3899
|
+
Material Type: `+b.type+`
|
|
3900
3900
|
|
|
3901
3901
|
Program Info Log: `+W+`
|
|
3902
|
-
`+
|
|
3903
|
-
`+_t)}else W!==""?console.warn("THREE.WebGLProgram: Program Info Log:",W):(X===""||Q==="")&&(rt=!1);rt&&(A.diagnostics={runnable:H,programLog:W,vertexShader:{log:X,prefix:m},fragmentShader:{log:Q,prefix:p}})}n.deleteShader(R),n.deleteShader(w),I=new ia(n,_),S=R_(n,_)}let I;this.getUniforms=function(){return I===void 0&&C(this),I};let S;this.getAttributes=function(){return S===void 0&&C(this),S};let M=e.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return M===!1&&(M=n.getProgramParameter(_,v_)),M},this.destroy=function(){i.releaseStatesOfProgram(this),n.deleteProgram(_),this.program=void 0},this.type=e.shaderType,this.name=e.shaderName,this.id=y_++,this.cacheKey=t,this.usedTimes=1,this.program=_,this.vertexShader=R,this.fragmentShader=w,this}let k_=0;class G_{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(t){const e=t.vertexShader,i=t.fragmentShader,n=this._getShaderStage(e),r=this._getShaderStage(i),a=this._getShaderCacheForMaterial(t);return a.has(n)===!1&&(a.add(n),n.usedTimes++),a.has(r)===!1&&(a.add(r),r.usedTimes++),this}remove(t){const e=this.materialCache.get(t);for(const i of e)i.usedTimes--,i.usedTimes===0&&this.shaderCache.delete(i.code);return this.materialCache.delete(t),this}getVertexShaderID(t){return this._getShaderStage(t.vertexShader).id}getFragmentShaderID(t){return this._getShaderStage(t.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(t){const e=this.materialCache;let i=e.get(t);return i===void 0&&(i=new Set,e.set(t,i)),i}_getShaderStage(t){const e=this.shaderCache;let i=e.get(t);return i===void 0&&(i=new H_(t),e.set(t,i)),i}}class H_{constructor(t){this.id=k_++,this.code=t,this.usedTimes=0}}function V_(s,t,e,i,n,r,a){const o=new Wh,h=new G_,l=new Set,c=[],u=n.logarithmicDepthBuffer,d=n.vertexTextures;let f=n.precision;const g={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};function _(S){return l.add(S),S===0?"uv":`uv${S}`}function m(S,M,A,B,F){const z=B.fog,W=F.geometry,X=S.isMeshStandardMaterial?B.environment:null,Q=(S.isMeshStandardMaterial?e:t).get(S.envMap||X),H=Q&&Q.mapping===Tr?Q.image.height:null,rt=g[S.type];S.precision!==null&&(f=n.getMaxPrecision(S.precision),f!==S.precision&&console.warn("THREE.WebGLProgram.getParameters:",S.precision,"not supported, using",f,"instead."));const ht=W.morphAttributes.position||W.morphAttributes.normal||W.morphAttributes.color,_t=ht!==void 0?ht.length:0;let Ot=0;W.morphAttributes.position!==void 0&&(Ot=1),W.morphAttributes.normal!==void 0&&(Ot=2),W.morphAttributes.color!==void 0&&(Ot=3);let ne,Jt,j,ot;if(rt){const jt=bi[rt];ne=jt.vertexShader,Jt=jt.fragmentShader}else ne=S.vertexShader,Jt=S.fragmentShader,h.update(S),j=h.getVertexShaderID(S),ot=h.getFragmentShaderID(S);const nt=s.getRenderTarget(),At=s.state.buffers.depth.getReversed(),wt=F.isInstancedMesh===!0,It=F.isBatchedMesh===!0,de=!!S.map,Wt=!!S.matcap,P=!!Q,te=!!S.aoMap,Et=!!S.lightMap,Yt=!!S.bumpMap,St=!!S.normalMap,se=!!S.displacementMap,pt=!!S.emissiveMap,zt=!!S.metalnessMap,Ee=!!S.roughnessMap,fe=S.anisotropy>0,E=S.clearcoat>0,x=S.dispersion>0,O=S.iridescence>0,Y=S.sheen>0,K=S.transmission>0,q=fe&&!!S.anisotropyMap,Mt=E&&!!S.clearcoatMap,it=E&&!!S.clearcoatNormalMap,xt=E&&!!S.clearcoatRoughnessMap,vt=O&&!!S.iridescenceMap,tt=O&&!!S.iridescenceThicknessMap,ut=Y&&!!S.sheenColorMap,Ct=Y&&!!S.sheenRoughnessMap,yt=!!S.specularMap,lt=!!S.specularColorMap,Nt=!!S.specularIntensityMap,L=K&&!!S.transmissionMap,et=K&&!!S.thicknessMap,st=!!S.gradientMap,ft=!!S.alphaMap,$=S.alphaTest>0,Z=!!S.alphaHash,gt=!!S.extensions;let Lt=Qi;S.toneMapped&&(nt===null||nt.isXRRenderTarget===!0)&&(Lt=s.toneMapping);const ee={shaderID:rt,shaderType:S.type,shaderName:S.name,vertexShader:ne,fragmentShader:Jt,defines:S.defines,customVertexShaderID:j,customFragmentShaderID:ot,isRawShaderMaterial:S.isRawShaderMaterial===!0,glslVersion:S.glslVersion,precision:f,batching:It,batchingColor:It&&F._colorsTexture!==null,instancing:wt,instancingColor:wt&&F.instanceColor!==null,instancingMorph:wt&&F.morphTexture!==null,supportsVertexTextures:d,outputColorSpace:nt===null?s.outputColorSpace:nt.isXRRenderTarget===!0?nt.texture.colorSpace:rs,alphaToCoverage:!!S.alphaToCoverage,map:de,matcap:Wt,envMap:P,envMapMode:P&&Q.mapping,envMapCubeUVHeight:H,aoMap:te,lightMap:Et,bumpMap:Yt,normalMap:St,displacementMap:d&&se,emissiveMap:pt,normalMapObjectSpace:St&&S.normalMapType===uf,normalMapTangentSpace:St&&S.normalMapType===Ph,metalnessMap:zt,roughnessMap:Ee,anisotropy:fe,anisotropyMap:q,clearcoat:E,clearcoatMap:Mt,clearcoatNormalMap:it,clearcoatRoughnessMap:xt,dispersion:x,iridescence:O,iridescenceMap:vt,iridescenceThicknessMap:tt,sheen:Y,sheenColorMap:ut,sheenRoughnessMap:Ct,specularMap:yt,specularColorMap:lt,specularIntensityMap:Nt,transmission:K,transmissionMap:L,thicknessMap:et,gradientMap:st,opaque:S.transparent===!1&&S.blending===es&&S.alphaToCoverage===!1,alphaMap:ft,alphaTest:$,alphaHash:Z,combine:S.combine,mapUv:de&&_(S.map.channel),aoMapUv:te&&_(S.aoMap.channel),lightMapUv:Et&&_(S.lightMap.channel),bumpMapUv:Yt&&_(S.bumpMap.channel),normalMapUv:St&&_(S.normalMap.channel),displacementMapUv:se&&_(S.displacementMap.channel),emissiveMapUv:pt&&_(S.emissiveMap.channel),metalnessMapUv:zt&&_(S.metalnessMap.channel),roughnessMapUv:Ee&&_(S.roughnessMap.channel),anisotropyMapUv:q&&_(S.anisotropyMap.channel),clearcoatMapUv:Mt&&_(S.clearcoatMap.channel),clearcoatNormalMapUv:it&&_(S.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:xt&&_(S.clearcoatRoughnessMap.channel),iridescenceMapUv:vt&&_(S.iridescenceMap.channel),iridescenceThicknessMapUv:tt&&_(S.iridescenceThicknessMap.channel),sheenColorMapUv:ut&&_(S.sheenColorMap.channel),sheenRoughnessMapUv:Ct&&_(S.sheenRoughnessMap.channel),specularMapUv:yt&&_(S.specularMap.channel),specularColorMapUv:lt&&_(S.specularColorMap.channel),specularIntensityMapUv:Nt&&_(S.specularIntensityMap.channel),transmissionMapUv:L&&_(S.transmissionMap.channel),thicknessMapUv:et&&_(S.thicknessMap.channel),alphaMapUv:ft&&_(S.alphaMap.channel),vertexTangents:!!W.attributes.tangent&&(St||fe),vertexColors:S.vertexColors,vertexAlphas:S.vertexColors===!0&&!!W.attributes.color&&W.attributes.color.itemSize===4,pointsUvs:F.isPoints===!0&&!!W.attributes.uv&&(de||ft),fog:!!z,useFog:S.fog===!0,fogExp2:!!z&&z.isFogExp2,flatShading:S.flatShading===!0&&S.wireframe===!1,sizeAttenuation:S.sizeAttenuation===!0,logarithmicDepthBuffer:u,reversedDepthBuffer:At,skinning:F.isSkinnedMesh===!0,morphTargets:W.morphAttributes.position!==void 0,morphNormals:W.morphAttributes.normal!==void 0,morphColors:W.morphAttributes.color!==void 0,morphTargetsCount:_t,morphTextureStride:Ot,numDirLights:M.directional.length,numPointLights:M.point.length,numSpotLights:M.spot.length,numSpotLightMaps:M.spotLightMap.length,numRectAreaLights:M.rectArea.length,numHemiLights:M.hemi.length,numDirLightShadows:M.directionalShadowMap.length,numPointLightShadows:M.pointShadowMap.length,numSpotLightShadows:M.spotShadowMap.length,numSpotLightShadowsWithMaps:M.numSpotLightShadowsWithMaps,numLightProbes:M.numLightProbes,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,dithering:S.dithering,shadowMapEnabled:s.shadowMap.enabled&&A.length>0,shadowMapType:s.shadowMap.type,toneMapping:Lt,decodeVideoTexture:de&&S.map.isVideoTexture===!0&&Xt.getTransfer(S.map.colorSpace)===Zt,decodeVideoTextureEmissive:pt&&S.emissiveMap.isVideoTexture===!0&&Xt.getTransfer(S.emissiveMap.colorSpace)===Zt,premultipliedAlpha:S.premultipliedAlpha,doubleSided:S.side===Ni,flipSided:S.side===Ue,useDepthPacking:S.depthPacking>=0,depthPacking:S.depthPacking||0,index0AttributeName:S.index0AttributeName,extensionClipCullDistance:gt&&S.extensions.clipCullDistance===!0&&i.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(gt&&S.extensions.multiDraw===!0||It)&&i.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:i.has("KHR_parallel_shader_compile"),customProgramCacheKey:S.customProgramCacheKey()};return ee.vertexUv1s=l.has(1),ee.vertexUv2s=l.has(2),ee.vertexUv3s=l.has(3),l.clear(),ee}function p(S){const M=[];if(S.shaderID?M.push(S.shaderID):(M.push(S.customVertexShaderID),M.push(S.customFragmentShaderID)),S.defines!==void 0)for(const A in S.defines)M.push(A),M.push(S.defines[A]);return S.isRawShaderMaterial===!1&&(T(M,S),b(M,S),M.push(s.outputColorSpace)),M.push(S.customProgramCacheKey),M.join()}function T(S,M){S.push(M.precision),S.push(M.outputColorSpace),S.push(M.envMapMode),S.push(M.envMapCubeUVHeight),S.push(M.mapUv),S.push(M.alphaMapUv),S.push(M.lightMapUv),S.push(M.aoMapUv),S.push(M.bumpMapUv),S.push(M.normalMapUv),S.push(M.displacementMapUv),S.push(M.emissiveMapUv),S.push(M.metalnessMapUv),S.push(M.roughnessMapUv),S.push(M.anisotropyMapUv),S.push(M.clearcoatMapUv),S.push(M.clearcoatNormalMapUv),S.push(M.clearcoatRoughnessMapUv),S.push(M.iridescenceMapUv),S.push(M.iridescenceThicknessMapUv),S.push(M.sheenColorMapUv),S.push(M.sheenRoughnessMapUv),S.push(M.specularMapUv),S.push(M.specularColorMapUv),S.push(M.specularIntensityMapUv),S.push(M.transmissionMapUv),S.push(M.thicknessMapUv),S.push(M.combine),S.push(M.fogExp2),S.push(M.sizeAttenuation),S.push(M.morphTargetsCount),S.push(M.morphAttributeCount),S.push(M.numDirLights),S.push(M.numPointLights),S.push(M.numSpotLights),S.push(M.numSpotLightMaps),S.push(M.numHemiLights),S.push(M.numRectAreaLights),S.push(M.numDirLightShadows),S.push(M.numPointLightShadows),S.push(M.numSpotLightShadows),S.push(M.numSpotLightShadowsWithMaps),S.push(M.numLightProbes),S.push(M.shadowMapType),S.push(M.toneMapping),S.push(M.numClippingPlanes),S.push(M.numClipIntersection),S.push(M.depthPacking)}function b(S,M){o.disableAll(),M.supportsVertexTextures&&o.enable(0),M.instancing&&o.enable(1),M.instancingColor&&o.enable(2),M.instancingMorph&&o.enable(3),M.matcap&&o.enable(4),M.envMap&&o.enable(5),M.normalMapObjectSpace&&o.enable(6),M.normalMapTangentSpace&&o.enable(7),M.clearcoat&&o.enable(8),M.iridescence&&o.enable(9),M.alphaTest&&o.enable(10),M.vertexColors&&o.enable(11),M.vertexAlphas&&o.enable(12),M.vertexUv1s&&o.enable(13),M.vertexUv2s&&o.enable(14),M.vertexUv3s&&o.enable(15),M.vertexTangents&&o.enable(16),M.anisotropy&&o.enable(17),M.alphaHash&&o.enable(18),M.batching&&o.enable(19),M.dispersion&&o.enable(20),M.batchingColor&&o.enable(21),M.gradientMap&&o.enable(22),S.push(o.mask),o.disableAll(),M.fog&&o.enable(0),M.useFog&&o.enable(1),M.flatShading&&o.enable(2),M.logarithmicDepthBuffer&&o.enable(3),M.reversedDepthBuffer&&o.enable(4),M.skinning&&o.enable(5),M.morphTargets&&o.enable(6),M.morphNormals&&o.enable(7),M.morphColors&&o.enable(8),M.premultipliedAlpha&&o.enable(9),M.shadowMapEnabled&&o.enable(10),M.doubleSided&&o.enable(11),M.flipSided&&o.enable(12),M.useDepthPacking&&o.enable(13),M.dithering&&o.enable(14),M.transmission&&o.enable(15),M.sheen&&o.enable(16),M.opaque&&o.enable(17),M.pointsUvs&&o.enable(18),M.decodeVideoTexture&&o.enable(19),M.decodeVideoTextureEmissive&&o.enable(20),M.alphaToCoverage&&o.enable(21),S.push(o.mask)}function y(S){const M=g[S.type];let A;if(M){const B=bi[M];A=Gf.clone(B.uniforms)}else A=S.uniforms;return A}function R(S,M){let A;for(let B=0,F=c.length;B<F;B++){const z=c[B];if(z.cacheKey===M){A=z,++A.usedTimes;break}}return A===void 0&&(A=new B_(s,M,S,r),c.push(A)),A}function w(S){if(--S.usedTimes===0){const M=c.indexOf(S);c[M]=c[c.length-1],c.pop(),S.destroy()}}function C(S){h.remove(S)}function I(){h.dispose()}return{getParameters:m,getProgramCacheKey:p,getUniforms:y,acquireProgram:R,releaseProgram:w,releaseShaderCache:C,programs:c,dispose:I}}function W_(){let s=new WeakMap;function t(a){return s.has(a)}function e(a){let o=s.get(a);return o===void 0&&(o={},s.set(a,o)),o}function i(a){s.delete(a)}function n(a,o,h){s.get(a)[o]=h}function r(){s=new WeakMap}return{has:t,get:e,remove:i,update:n,dispose:r}}function X_(s,t){return s.groupOrder!==t.groupOrder?s.groupOrder-t.groupOrder:s.renderOrder!==t.renderOrder?s.renderOrder-t.renderOrder:s.material.id!==t.material.id?s.material.id-t.material.id:s.z!==t.z?s.z-t.z:s.id-t.id}function Vc(s,t){return s.groupOrder!==t.groupOrder?s.groupOrder-t.groupOrder:s.renderOrder!==t.renderOrder?s.renderOrder-t.renderOrder:s.z!==t.z?t.z-s.z:s.id-t.id}function Wc(){const s=[];let t=0;const e=[],i=[],n=[];function r(){t=0,e.length=0,i.length=0,n.length=0}function a(u,d,f,g,_,m){let p=s[t];return p===void 0?(p={id:u.id,object:u,geometry:d,material:f,groupOrder:g,renderOrder:u.renderOrder,z:_,group:m},s[t]=p):(p.id=u.id,p.object=u,p.geometry=d,p.material=f,p.groupOrder=g,p.renderOrder=u.renderOrder,p.z=_,p.group=m),t++,p}function o(u,d,f,g,_,m){const p=a(u,d,f,g,_,m);f.transmission>0?i.push(p):f.transparent===!0?n.push(p):e.push(p)}function h(u,d,f,g,_,m){const p=a(u,d,f,g,_,m);f.transmission>0?i.unshift(p):f.transparent===!0?n.unshift(p):e.unshift(p)}function l(u,d){e.length>1&&e.sort(u||X_),i.length>1&&i.sort(d||Vc),n.length>1&&n.sort(d||Vc)}function c(){for(let u=t,d=s.length;u<d;u++){const f=s[u];if(f.id===null)break;f.id=null,f.object=null,f.geometry=null,f.material=null,f.group=null}}return{opaque:e,transmissive:i,transparent:n,init:r,push:o,unshift:h,finish:c,sort:l}}function q_(){let s=new WeakMap;function t(i,n){const r=s.get(i);let a;return r===void 0?(a=new Wc,s.set(i,[a])):n>=r.length?(a=new Wc,r.push(a)):a=r[n],a}function e(){s=new WeakMap}return{get:t,dispose:e}}function Y_(){const s={};return{get:function(t){if(s[t.id]!==void 0)return s[t.id];let e;switch(t.type){case"DirectionalLight":e={direction:new N,color:new Vt};break;case"SpotLight":e={position:new N,direction:new N,color:new Vt,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":e={position:new N,color:new Vt,distance:0,decay:0};break;case"HemisphereLight":e={direction:new N,skyColor:new Vt,groundColor:new Vt};break;case"RectAreaLight":e={color:new Vt,position:new N,halfWidth:new N,halfHeight:new N};break}return s[t.id]=e,e}}}function j_(){const s={};return{get:function(t){if(s[t.id]!==void 0)return s[t.id];let e;switch(t.type){case"DirectionalLight":e={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Dt};break;case"SpotLight":e={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Dt};break;case"PointLight":e={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Dt,shadowCameraNear:1,shadowCameraFar:1e3};break}return s[t.id]=e,e}}}let Z_=0;function K_(s,t){return(t.castShadow?2:0)-(s.castShadow?2:0)+(t.map?1:0)-(s.map?1:0)}function $_(s){const t=new Y_,e=j_(),i={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let l=0;l<9;l++)i.probe.push(new N);const n=new N,r=new ue,a=new ue;function o(l){let c=0,u=0,d=0;for(let S=0;S<9;S++)i.probe[S].set(0,0,0);let f=0,g=0,_=0,m=0,p=0,T=0,b=0,y=0,R=0,w=0,C=0;l.sort(K_);for(let S=0,M=l.length;S<M;S++){const A=l[S],B=A.color,F=A.intensity,z=A.distance,W=A.shadow&&A.shadow.map?A.shadow.map.texture:null;if(A.isAmbientLight)c+=B.r*F,u+=B.g*F,d+=B.b*F;else if(A.isLightProbe){for(let X=0;X<9;X++)i.probe[X].addScaledVector(A.sh.coefficients[X],F);C++}else if(A.isDirectionalLight){const X=t.get(A);if(X.color.copy(A.color).multiplyScalar(A.intensity),A.castShadow){const Q=A.shadow,H=e.get(A);H.shadowIntensity=Q.intensity,H.shadowBias=Q.bias,H.shadowNormalBias=Q.normalBias,H.shadowRadius=Q.radius,H.shadowMapSize=Q.mapSize,i.directionalShadow[f]=H,i.directionalShadowMap[f]=W,i.directionalShadowMatrix[f]=A.shadow.matrix,T++}i.directional[f]=X,f++}else if(A.isSpotLight){const X=t.get(A);X.position.setFromMatrixPosition(A.matrixWorld),X.color.copy(B).multiplyScalar(F),X.distance=z,X.coneCos=Math.cos(A.angle),X.penumbraCos=Math.cos(A.angle*(1-A.penumbra)),X.decay=A.decay,i.spot[_]=X;const Q=A.shadow;if(A.map&&(i.spotLightMap[R]=A.map,R++,Q.updateMatrices(A),A.castShadow&&w++),i.spotLightMatrix[_]=Q.matrix,A.castShadow){const H=e.get(A);H.shadowIntensity=Q.intensity,H.shadowBias=Q.bias,H.shadowNormalBias=Q.normalBias,H.shadowRadius=Q.radius,H.shadowMapSize=Q.mapSize,i.spotShadow[_]=H,i.spotShadowMap[_]=W,y++}_++}else if(A.isRectAreaLight){const X=t.get(A);X.color.copy(B).multiplyScalar(F),X.halfWidth.set(A.width*.5,0,0),X.halfHeight.set(0,A.height*.5,0),i.rectArea[m]=X,m++}else if(A.isPointLight){const X=t.get(A);if(X.color.copy(A.color).multiplyScalar(A.intensity),X.distance=A.distance,X.decay=A.decay,A.castShadow){const Q=A.shadow,H=e.get(A);H.shadowIntensity=Q.intensity,H.shadowBias=Q.bias,H.shadowNormalBias=Q.normalBias,H.shadowRadius=Q.radius,H.shadowMapSize=Q.mapSize,H.shadowCameraNear=Q.camera.near,H.shadowCameraFar=Q.camera.far,i.pointShadow[g]=H,i.pointShadowMap[g]=W,i.pointShadowMatrix[g]=A.shadow.matrix,b++}i.point[g]=X,g++}else if(A.isHemisphereLight){const X=t.get(A);X.skyColor.copy(A.color).multiplyScalar(F),X.groundColor.copy(A.groundColor).multiplyScalar(F),i.hemi[p]=X,p++}}m>0&&(s.has("OES_texture_float_linear")===!0?(i.rectAreaLTC1=at.LTC_FLOAT_1,i.rectAreaLTC2=at.LTC_FLOAT_2):(i.rectAreaLTC1=at.LTC_HALF_1,i.rectAreaLTC2=at.LTC_HALF_2)),i.ambient[0]=c,i.ambient[1]=u,i.ambient[2]=d;const I=i.hash;(I.directionalLength!==f||I.pointLength!==g||I.spotLength!==_||I.rectAreaLength!==m||I.hemiLength!==p||I.numDirectionalShadows!==T||I.numPointShadows!==b||I.numSpotShadows!==y||I.numSpotMaps!==R||I.numLightProbes!==C)&&(i.directional.length=f,i.spot.length=_,i.rectArea.length=m,i.point.length=g,i.hemi.length=p,i.directionalShadow.length=T,i.directionalShadowMap.length=T,i.pointShadow.length=b,i.pointShadowMap.length=b,i.spotShadow.length=y,i.spotShadowMap.length=y,i.directionalShadowMatrix.length=T,i.pointShadowMatrix.length=b,i.spotLightMatrix.length=y+R-w,i.spotLightMap.length=R,i.numSpotLightShadowsWithMaps=w,i.numLightProbes=C,I.directionalLength=f,I.pointLength=g,I.spotLength=_,I.rectAreaLength=m,I.hemiLength=p,I.numDirectionalShadows=T,I.numPointShadows=b,I.numSpotShadows=y,I.numSpotMaps=R,I.numLightProbes=C,i.version=Z_++)}function h(l,c){let u=0,d=0,f=0,g=0,_=0;const m=c.matrixWorldInverse;for(let p=0,T=l.length;p<T;p++){const b=l[p];if(b.isDirectionalLight){const y=i.directional[u];y.direction.setFromMatrixPosition(b.matrixWorld),n.setFromMatrixPosition(b.target.matrixWorld),y.direction.sub(n),y.direction.transformDirection(m),u++}else if(b.isSpotLight){const y=i.spot[f];y.position.setFromMatrixPosition(b.matrixWorld),y.position.applyMatrix4(m),y.direction.setFromMatrixPosition(b.matrixWorld),n.setFromMatrixPosition(b.target.matrixWorld),y.direction.sub(n),y.direction.transformDirection(m),f++}else if(b.isRectAreaLight){const y=i.rectArea[g];y.position.setFromMatrixPosition(b.matrixWorld),y.position.applyMatrix4(m),a.identity(),r.copy(b.matrixWorld),r.premultiply(m),a.extractRotation(r),y.halfWidth.set(b.width*.5,0,0),y.halfHeight.set(0,b.height*.5,0),y.halfWidth.applyMatrix4(a),y.halfHeight.applyMatrix4(a),g++}else if(b.isPointLight){const y=i.point[d];y.position.setFromMatrixPosition(b.matrixWorld),y.position.applyMatrix4(m),d++}else if(b.isHemisphereLight){const y=i.hemi[_];y.direction.setFromMatrixPosition(b.matrixWorld),y.direction.transformDirection(m),_++}}}return{setup:o,setupView:h,state:i}}function Xc(s){const t=new $_(s),e=[],i=[];function n(c){l.camera=c,e.length=0,i.length=0}function r(c){e.push(c)}function a(c){i.push(c)}function o(){t.setup(e)}function h(c){t.setupView(e,c)}const l={lightsArray:e,shadowsArray:i,camera:null,lights:t,transmissionRenderTarget:{}};return{init:n,state:l,setupLights:o,setupLightsView:h,pushLight:r,pushShadow:a}}function J_(s){let t=new WeakMap;function e(n,r=0){const a=t.get(n);let o;return a===void 0?(o=new Xc(s),t.set(n,[o])):r>=a.length?(o=new Xc(s),a.push(o)):o=a[r],o}function i(){t=new WeakMap}return{get:e,dispose:i}}const Q_=`void main() {
|
|
3902
|
+
`+lt+`
|
|
3903
|
+
`+mt)}else W!==""?console.warn("THREE.WebGLProgram: Program Info Log:",W):(Y===""||$==="")&&(rt=!1);rt&&(b.diagnostics={runnable:H,programLog:W,vertexShader:{log:Y,prefix:g},fragmentShader:{log:$,prefix:f}})}n.deleteShader(w),n.deleteShader(T),P=new ia(n,m),E=wm(n,m)}let P;this.getUniforms=function(){return P===void 0&&_(this),P};let E;this.getAttributes=function(){return E===void 0&&_(this),E};let v=e.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return v===!1&&(v=n.getProgramParameter(m,Im)),v},this.destroy=function(){i.releaseStatesOfProgram(this),n.deleteProgram(m),this.program=void 0},this.type=e.shaderType,this.name=e.shaderName,this.id=xm++,this.cacheKey=t,this.usedTimes=1,this.program=m,this.vertexShader=w,this.fragmentShader=T,this}let km=0;class Gm{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(t){const e=t.vertexShader,i=t.fragmentShader,n=this._getShaderStage(e),r=this._getShaderStage(i),a=this._getShaderCacheForMaterial(t);return a.has(n)===!1&&(a.add(n),n.usedTimes++),a.has(r)===!1&&(a.add(r),r.usedTimes++),this}remove(t){const e=this.materialCache.get(t);for(const i of e)i.usedTimes--,i.usedTimes===0&&this.shaderCache.delete(i.code);return this.materialCache.delete(t),this}getVertexShaderID(t){return this._getShaderStage(t.vertexShader).id}getFragmentShaderID(t){return this._getShaderStage(t.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(t){const e=this.materialCache;let i=e.get(t);return i===void 0&&(i=new Set,e.set(t,i)),i}_getShaderStage(t){const e=this.shaderCache;let i=e.get(t);return i===void 0&&(i=new Hm(t),e.set(t,i)),i}}class Hm{constructor(t){this.id=km++,this.code=t,this.usedTimes=0}}function Vm(s,t,e,i,n,r,a){const o=new Wl,l=new Gm,A=new Set,h=[],c=n.logarithmicDepthBuffer,u=n.vertexTextures;let d=n.precision;const p={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};function m(E){return A.add(E),E===0?"uv":`uv${E}`}function g(E,v,b,z,F){const U=z.fog,W=F.geometry,Y=E.isMeshStandardMaterial?z.environment:null,$=(E.isMeshStandardMaterial?e:t).get(E.envMap||Y),H=$&&$.mapping===Mr?$.image.height:null,rt=p[E.type];E.precision!==null&&(d=n.getMaxPrecision(E.precision),d!==E.precision&&console.warn("THREE.WebGLProgram.getParameters:",E.precision,"not supported, using",d,"instead."));const lt=W.morphAttributes.position||W.morphAttributes.normal||W.morphAttributes.color,mt=lt!==void 0?lt.length:0;let Ut=0;W.morphAttributes.position!==void 0&&(Ut=1),W.morphAttributes.normal!==void 0&&(Ut=2),W.morphAttributes.color!==void 0&&(Ut=3);let re,te,j,ot;if(rt){const Jt=yi[rt];re=Jt.vertexShader,te=Jt.fragmentShader}else re=E.vertexShader,te=E.fragmentShader,l.update(E),j=l.getVertexShaderID(E),ot=l.getFragmentShaderID(E);const nt=s.getRenderTarget(),bt=s.state.buffers.depth.getReversed(),Tt=F.isInstancedMesh===!0,Pt=F.isBatchedMesh===!0,fe=!!E.map,Yt=!!E.matcap,R=!!$,ie=!!E.aoMap,St=!!E.lightMap,jt=!!E.bumpMap,Et=!!E.normalMap,ae=!!E.displacementMap,ft=!!E.emissiveMap,zt=!!E.metalnessMap,Se=!!E.roughnessMap,ge=E.anisotropy>0,S=E.clearcoat>0,C=E.dispersion>0,O=E.iridescence>0,Z=E.sheen>0,Q=E.transmission>0,X=ge&&!!E.anisotropyMap,vt=S&&!!E.clearcoatMap,it=S&&!!E.clearcoatNormalMap,Ct=S&&!!E.clearcoatRoughnessMap,It=O&&!!E.iridescenceMap,tt=O&&!!E.iridescenceThicknessMap,ct=Z&&!!E.sheenColorMap,_t=Z&&!!E.sheenRoughnessMap,xt=!!E.specularMap,At=!!E.specularColorMap,Ft=!!E.specularIntensityMap,D=Q&&!!E.transmissionMap,et=Q&&!!E.thicknessMap,st=!!E.gradientMap,dt=!!E.alphaMap,q=E.alphaTest>0,J=!!E.alphaHash,pt=!!E.extensions;let Dt=$i;E.toneMapped&&(nt===null||nt.isXRRenderTarget===!0)&&(Dt=s.toneMapping);const ne={shaderID:rt,shaderType:E.type,shaderName:E.name,vertexShader:re,fragmentShader:te,defines:E.defines,customVertexShaderID:j,customFragmentShaderID:ot,isRawShaderMaterial:E.isRawShaderMaterial===!0,glslVersion:E.glslVersion,precision:d,batching:Pt,batchingColor:Pt&&F._colorsTexture!==null,instancing:Tt,instancingColor:Tt&&F.instanceColor!==null,instancingMorph:Tt&&F.morphTexture!==null,supportsVertexTextures:u,outputColorSpace:nt===null?s.outputColorSpace:nt.isXRRenderTarget===!0?nt.texture.colorSpace:rs,alphaToCoverage:!!E.alphaToCoverage,map:fe,matcap:Yt,envMap:R,envMapMode:R&&$.mapping,envMapCubeUVHeight:H,aoMap:ie,lightMap:St,bumpMap:jt,normalMap:Et,displacementMap:u&&ae,emissiveMap:ft,normalMapObjectSpace:Et&&E.normalMapType===hd,normalMapTangentSpace:Et&&E.normalMapType===Rl,metalnessMap:zt,roughnessMap:Se,anisotropy:ge,anisotropyMap:X,clearcoat:S,clearcoatMap:vt,clearcoatNormalMap:it,clearcoatRoughnessMap:Ct,dispersion:C,iridescence:O,iridescenceMap:It,iridescenceThicknessMap:tt,sheen:Z,sheenColorMap:ct,sheenRoughnessMap:_t,specularMap:xt,specularColorMap:At,specularIntensityMap:Ft,transmission:Q,transmissionMap:D,thicknessMap:et,gradientMap:st,opaque:E.transparent===!1&&E.blending===es&&E.alphaToCoverage===!1,alphaMap:dt,alphaTest:q,alphaHash:J,combine:E.combine,mapUv:fe&&m(E.map.channel),aoMapUv:ie&&m(E.aoMap.channel),lightMapUv:St&&m(E.lightMap.channel),bumpMapUv:jt&&m(E.bumpMap.channel),normalMapUv:Et&&m(E.normalMap.channel),displacementMapUv:ae&&m(E.displacementMap.channel),emissiveMapUv:ft&&m(E.emissiveMap.channel),metalnessMapUv:zt&&m(E.metalnessMap.channel),roughnessMapUv:Se&&m(E.roughnessMap.channel),anisotropyMapUv:X&&m(E.anisotropyMap.channel),clearcoatMapUv:vt&&m(E.clearcoatMap.channel),clearcoatNormalMapUv:it&&m(E.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:Ct&&m(E.clearcoatRoughnessMap.channel),iridescenceMapUv:It&&m(E.iridescenceMap.channel),iridescenceThicknessMapUv:tt&&m(E.iridescenceThicknessMap.channel),sheenColorMapUv:ct&&m(E.sheenColorMap.channel),sheenRoughnessMapUv:_t&&m(E.sheenRoughnessMap.channel),specularMapUv:xt&&m(E.specularMap.channel),specularColorMapUv:At&&m(E.specularColorMap.channel),specularIntensityMapUv:Ft&&m(E.specularIntensityMap.channel),transmissionMapUv:D&&m(E.transmissionMap.channel),thicknessMapUv:et&&m(E.thicknessMap.channel),alphaMapUv:dt&&m(E.alphaMap.channel),vertexTangents:!!W.attributes.tangent&&(Et||ge),vertexColors:E.vertexColors,vertexAlphas:E.vertexColors===!0&&!!W.attributes.color&&W.attributes.color.itemSize===4,pointsUvs:F.isPoints===!0&&!!W.attributes.uv&&(fe||dt),fog:!!U,useFog:E.fog===!0,fogExp2:!!U&&U.isFogExp2,flatShading:E.flatShading===!0&&E.wireframe===!1,sizeAttenuation:E.sizeAttenuation===!0,logarithmicDepthBuffer:c,reversedDepthBuffer:bt,skinning:F.isSkinnedMesh===!0,morphTargets:W.morphAttributes.position!==void 0,morphNormals:W.morphAttributes.normal!==void 0,morphColors:W.morphAttributes.color!==void 0,morphTargetsCount:mt,morphTextureStride:Ut,numDirLights:v.directional.length,numPointLights:v.point.length,numSpotLights:v.spot.length,numSpotLightMaps:v.spotLightMap.length,numRectAreaLights:v.rectArea.length,numHemiLights:v.hemi.length,numDirLightShadows:v.directionalShadowMap.length,numPointLightShadows:v.pointShadowMap.length,numSpotLightShadows:v.spotShadowMap.length,numSpotLightShadowsWithMaps:v.numSpotLightShadowsWithMaps,numLightProbes:v.numLightProbes,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,dithering:E.dithering,shadowMapEnabled:s.shadowMap.enabled&&b.length>0,shadowMapType:s.shadowMap.type,toneMapping:Dt,decodeVideoTexture:fe&&E.map.isVideoTexture===!0&&Xt.getTransfer(E.map.colorSpace)===qt,decodeVideoTextureEmissive:ft&&E.emissiveMap.isVideoTexture===!0&&Xt.getTransfer(E.emissiveMap.colorSpace)===qt,premultipliedAlpha:E.premultipliedAlpha,doubleSided:E.side===Bi,flipSided:E.side===Oe,useDepthPacking:E.depthPacking>=0,depthPacking:E.depthPacking||0,index0AttributeName:E.index0AttributeName,extensionClipCullDistance:pt&&E.extensions.clipCullDistance===!0&&i.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(pt&&E.extensions.multiDraw===!0||Pt)&&i.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:i.has("KHR_parallel_shader_compile"),customProgramCacheKey:E.customProgramCacheKey()};return ne.vertexUv1s=A.has(1),ne.vertexUv2s=A.has(2),ne.vertexUv3s=A.has(3),A.clear(),ne}function f(E){const v=[];if(E.shaderID?v.push(E.shaderID):(v.push(E.customVertexShaderID),v.push(E.customFragmentShaderID)),E.defines!==void 0)for(const b in E.defines)v.push(b),v.push(E.defines[b]);return E.isRawShaderMaterial===!1&&(M(v,E),y(v,E),v.push(s.outputColorSpace)),v.push(E.customProgramCacheKey),v.join()}function M(E,v){E.push(v.precision),E.push(v.outputColorSpace),E.push(v.envMapMode),E.push(v.envMapCubeUVHeight),E.push(v.mapUv),E.push(v.alphaMapUv),E.push(v.lightMapUv),E.push(v.aoMapUv),E.push(v.bumpMapUv),E.push(v.normalMapUv),E.push(v.displacementMapUv),E.push(v.emissiveMapUv),E.push(v.metalnessMapUv),E.push(v.roughnessMapUv),E.push(v.anisotropyMapUv),E.push(v.clearcoatMapUv),E.push(v.clearcoatNormalMapUv),E.push(v.clearcoatRoughnessMapUv),E.push(v.iridescenceMapUv),E.push(v.iridescenceThicknessMapUv),E.push(v.sheenColorMapUv),E.push(v.sheenRoughnessMapUv),E.push(v.specularMapUv),E.push(v.specularColorMapUv),E.push(v.specularIntensityMapUv),E.push(v.transmissionMapUv),E.push(v.thicknessMapUv),E.push(v.combine),E.push(v.fogExp2),E.push(v.sizeAttenuation),E.push(v.morphTargetsCount),E.push(v.morphAttributeCount),E.push(v.numDirLights),E.push(v.numPointLights),E.push(v.numSpotLights),E.push(v.numSpotLightMaps),E.push(v.numHemiLights),E.push(v.numRectAreaLights),E.push(v.numDirLightShadows),E.push(v.numPointLightShadows),E.push(v.numSpotLightShadows),E.push(v.numSpotLightShadowsWithMaps),E.push(v.numLightProbes),E.push(v.shadowMapType),E.push(v.toneMapping),E.push(v.numClippingPlanes),E.push(v.numClipIntersection),E.push(v.depthPacking)}function y(E,v){o.disableAll(),v.supportsVertexTextures&&o.enable(0),v.instancing&&o.enable(1),v.instancingColor&&o.enable(2),v.instancingMorph&&o.enable(3),v.matcap&&o.enable(4),v.envMap&&o.enable(5),v.normalMapObjectSpace&&o.enable(6),v.normalMapTangentSpace&&o.enable(7),v.clearcoat&&o.enable(8),v.iridescence&&o.enable(9),v.alphaTest&&o.enable(10),v.vertexColors&&o.enable(11),v.vertexAlphas&&o.enable(12),v.vertexUv1s&&o.enable(13),v.vertexUv2s&&o.enable(14),v.vertexUv3s&&o.enable(15),v.vertexTangents&&o.enable(16),v.anisotropy&&o.enable(17),v.alphaHash&&o.enable(18),v.batching&&o.enable(19),v.dispersion&&o.enable(20),v.batchingColor&&o.enable(21),v.gradientMap&&o.enable(22),E.push(o.mask),o.disableAll(),v.fog&&o.enable(0),v.useFog&&o.enable(1),v.flatShading&&o.enable(2),v.logarithmicDepthBuffer&&o.enable(3),v.reversedDepthBuffer&&o.enable(4),v.skinning&&o.enable(5),v.morphTargets&&o.enable(6),v.morphNormals&&o.enable(7),v.morphColors&&o.enable(8),v.premultipliedAlpha&&o.enable(9),v.shadowMapEnabled&&o.enable(10),v.doubleSided&&o.enable(11),v.flipSided&&o.enable(12),v.useDepthPacking&&o.enable(13),v.dithering&&o.enable(14),v.transmission&&o.enable(15),v.sheen&&o.enable(16),v.opaque&&o.enable(17),v.pointsUvs&&o.enable(18),v.decodeVideoTexture&&o.enable(19),v.decodeVideoTextureEmissive&&o.enable(20),v.alphaToCoverage&&o.enable(21),E.push(o.mask)}function x(E){const v=p[E.type];let b;if(v){const z=yi[v];b=kd.clone(z.uniforms)}else b=E.uniforms;return b}function w(E,v){let b;for(let z=0,F=h.length;z<F;z++){const U=h[z];if(U.cacheKey===v){b=U,++b.usedTimes;break}}return b===void 0&&(b=new zm(s,v,E,r),h.push(b)),b}function T(E){if(--E.usedTimes===0){const v=h.indexOf(E);h[v]=h[h.length-1],h.pop(),E.destroy()}}function _(E){l.remove(E)}function P(){l.dispose()}return{getParameters:g,getProgramCacheKey:f,getUniforms:x,acquireProgram:w,releaseProgram:T,releaseShaderCache:_,programs:h,dispose:P}}function Wm(){let s=new WeakMap;function t(a){return s.has(a)}function e(a){let o=s.get(a);return o===void 0&&(o={},s.set(a,o)),o}function i(a){s.delete(a)}function n(a,o,l){s.get(a)[o]=l}function r(){s=new WeakMap}return{has:t,get:e,remove:i,update:n,dispose:r}}function Ym(s,t){return s.groupOrder!==t.groupOrder?s.groupOrder-t.groupOrder:s.renderOrder!==t.renderOrder?s.renderOrder-t.renderOrder:s.material.id!==t.material.id?s.material.id-t.material.id:s.z!==t.z?s.z-t.z:s.id-t.id}function Vh(s,t){return s.groupOrder!==t.groupOrder?s.groupOrder-t.groupOrder:s.renderOrder!==t.renderOrder?s.renderOrder-t.renderOrder:s.z!==t.z?t.z-s.z:s.id-t.id}function Wh(){const s=[];let t=0;const e=[],i=[],n=[];function r(){t=0,e.length=0,i.length=0,n.length=0}function a(c,u,d,p,m,g){let f=s[t];return f===void 0?(f={id:c.id,object:c,geometry:u,material:d,groupOrder:p,renderOrder:c.renderOrder,z:m,group:g},s[t]=f):(f.id=c.id,f.object=c,f.geometry=u,f.material=d,f.groupOrder=p,f.renderOrder=c.renderOrder,f.z=m,f.group=g),t++,f}function o(c,u,d,p,m,g){const f=a(c,u,d,p,m,g);d.transmission>0?i.push(f):d.transparent===!0?n.push(f):e.push(f)}function l(c,u,d,p,m,g){const f=a(c,u,d,p,m,g);d.transmission>0?i.unshift(f):d.transparent===!0?n.unshift(f):e.unshift(f)}function A(c,u){e.length>1&&e.sort(c||Ym),i.length>1&&i.sort(u||Vh),n.length>1&&n.sort(u||Vh)}function h(){for(let c=t,u=s.length;c<u;c++){const d=s[c];if(d.id===null)break;d.id=null,d.object=null,d.geometry=null,d.material=null,d.group=null}}return{opaque:e,transmissive:i,transparent:n,init:r,push:o,unshift:l,finish:h,sort:A}}function Xm(){let s=new WeakMap;function t(i,n){const r=s.get(i);let a;return r===void 0?(a=new Wh,s.set(i,[a])):n>=r.length?(a=new Wh,r.push(a)):a=r[n],a}function e(){s=new WeakMap}return{get:t,dispose:e}}function Zm(){const s={};return{get:function(t){if(s[t.id]!==void 0)return s[t.id];let e;switch(t.type){case"DirectionalLight":e={direction:new B,color:new Wt};break;case"SpotLight":e={position:new B,direction:new B,color:new Wt,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":e={position:new B,color:new Wt,distance:0,decay:0};break;case"HemisphereLight":e={direction:new B,skyColor:new Wt,groundColor:new Wt};break;case"RectAreaLight":e={color:new Wt,position:new B,halfWidth:new B,halfHeight:new B};break}return s[t.id]=e,e}}}function jm(){const s={};return{get:function(t){if(s[t.id]!==void 0)return s[t.id];let e;switch(t.type){case"DirectionalLight":e={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Nt};break;case"SpotLight":e={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Nt};break;case"PointLight":e={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Nt,shadowCameraNear:1,shadowCameraFar:1e3};break}return s[t.id]=e,e}}}let Jm=0;function Qm(s,t){return(t.castShadow?2:0)-(s.castShadow?2:0)+(t.map?1:0)-(s.map?1:0)}function qm(s){const t=new Zm,e=jm(),i={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let A=0;A<9;A++)i.probe.push(new B);const n=new B,r=new de,a=new de;function o(A){let h=0,c=0,u=0;for(let E=0;E<9;E++)i.probe[E].set(0,0,0);let d=0,p=0,m=0,g=0,f=0,M=0,y=0,x=0,w=0,T=0,_=0;A.sort(Qm);for(let E=0,v=A.length;E<v;E++){const b=A[E],z=b.color,F=b.intensity,U=b.distance,W=b.shadow&&b.shadow.map?b.shadow.map.texture:null;if(b.isAmbientLight)h+=z.r*F,c+=z.g*F,u+=z.b*F;else if(b.isLightProbe){for(let Y=0;Y<9;Y++)i.probe[Y].addScaledVector(b.sh.coefficients[Y],F);_++}else if(b.isDirectionalLight){const Y=t.get(b);if(Y.color.copy(b.color).multiplyScalar(b.intensity),b.castShadow){const $=b.shadow,H=e.get(b);H.shadowIntensity=$.intensity,H.shadowBias=$.bias,H.shadowNormalBias=$.normalBias,H.shadowRadius=$.radius,H.shadowMapSize=$.mapSize,i.directionalShadow[d]=H,i.directionalShadowMap[d]=W,i.directionalShadowMatrix[d]=b.shadow.matrix,M++}i.directional[d]=Y,d++}else if(b.isSpotLight){const Y=t.get(b);Y.position.setFromMatrixPosition(b.matrixWorld),Y.color.copy(z).multiplyScalar(F),Y.distance=U,Y.coneCos=Math.cos(b.angle),Y.penumbraCos=Math.cos(b.angle*(1-b.penumbra)),Y.decay=b.decay,i.spot[m]=Y;const $=b.shadow;if(b.map&&(i.spotLightMap[w]=b.map,w++,$.updateMatrices(b),b.castShadow&&T++),i.spotLightMatrix[m]=$.matrix,b.castShadow){const H=e.get(b);H.shadowIntensity=$.intensity,H.shadowBias=$.bias,H.shadowNormalBias=$.normalBias,H.shadowRadius=$.radius,H.shadowMapSize=$.mapSize,i.spotShadow[m]=H,i.spotShadowMap[m]=W,x++}m++}else if(b.isRectAreaLight){const Y=t.get(b);Y.color.copy(z).multiplyScalar(F),Y.halfWidth.set(b.width*.5,0,0),Y.halfHeight.set(0,b.height*.5,0),i.rectArea[g]=Y,g++}else if(b.isPointLight){const Y=t.get(b);if(Y.color.copy(b.color).multiplyScalar(b.intensity),Y.distance=b.distance,Y.decay=b.decay,b.castShadow){const $=b.shadow,H=e.get(b);H.shadowIntensity=$.intensity,H.shadowBias=$.bias,H.shadowNormalBias=$.normalBias,H.shadowRadius=$.radius,H.shadowMapSize=$.mapSize,H.shadowCameraNear=$.camera.near,H.shadowCameraFar=$.camera.far,i.pointShadow[p]=H,i.pointShadowMap[p]=W,i.pointShadowMatrix[p]=b.shadow.matrix,y++}i.point[p]=Y,p++}else if(b.isHemisphereLight){const Y=t.get(b);Y.skyColor.copy(b.color).multiplyScalar(F),Y.groundColor.copy(b.groundColor).multiplyScalar(F),i.hemi[f]=Y,f++}}g>0&&(s.has("OES_texture_float_linear")===!0?(i.rectAreaLTC1=at.LTC_FLOAT_1,i.rectAreaLTC2=at.LTC_FLOAT_2):(i.rectAreaLTC1=at.LTC_HALF_1,i.rectAreaLTC2=at.LTC_HALF_2)),i.ambient[0]=h,i.ambient[1]=c,i.ambient[2]=u;const P=i.hash;(P.directionalLength!==d||P.pointLength!==p||P.spotLength!==m||P.rectAreaLength!==g||P.hemiLength!==f||P.numDirectionalShadows!==M||P.numPointShadows!==y||P.numSpotShadows!==x||P.numSpotMaps!==w||P.numLightProbes!==_)&&(i.directional.length=d,i.spot.length=m,i.rectArea.length=g,i.point.length=p,i.hemi.length=f,i.directionalShadow.length=M,i.directionalShadowMap.length=M,i.pointShadow.length=y,i.pointShadowMap.length=y,i.spotShadow.length=x,i.spotShadowMap.length=x,i.directionalShadowMatrix.length=M,i.pointShadowMatrix.length=y,i.spotLightMatrix.length=x+w-T,i.spotLightMap.length=w,i.numSpotLightShadowsWithMaps=T,i.numLightProbes=_,P.directionalLength=d,P.pointLength=p,P.spotLength=m,P.rectAreaLength=g,P.hemiLength=f,P.numDirectionalShadows=M,P.numPointShadows=y,P.numSpotShadows=x,P.numSpotMaps=w,P.numLightProbes=_,i.version=Jm++)}function l(A,h){let c=0,u=0,d=0,p=0,m=0;const g=h.matrixWorldInverse;for(let f=0,M=A.length;f<M;f++){const y=A[f];if(y.isDirectionalLight){const x=i.directional[c];x.direction.setFromMatrixPosition(y.matrixWorld),n.setFromMatrixPosition(y.target.matrixWorld),x.direction.sub(n),x.direction.transformDirection(g),c++}else if(y.isSpotLight){const x=i.spot[d];x.position.setFromMatrixPosition(y.matrixWorld),x.position.applyMatrix4(g),x.direction.setFromMatrixPosition(y.matrixWorld),n.setFromMatrixPosition(y.target.matrixWorld),x.direction.sub(n),x.direction.transformDirection(g),d++}else if(y.isRectAreaLight){const x=i.rectArea[p];x.position.setFromMatrixPosition(y.matrixWorld),x.position.applyMatrix4(g),a.identity(),r.copy(y.matrixWorld),r.premultiply(g),a.extractRotation(r),x.halfWidth.set(y.width*.5,0,0),x.halfHeight.set(0,y.height*.5,0),x.halfWidth.applyMatrix4(a),x.halfHeight.applyMatrix4(a),p++}else if(y.isPointLight){const x=i.point[u];x.position.setFromMatrixPosition(y.matrixWorld),x.position.applyMatrix4(g),u++}else if(y.isHemisphereLight){const x=i.hemi[m];x.direction.setFromMatrixPosition(y.matrixWorld),x.direction.transformDirection(g),m++}}}return{setup:o,setupView:l,state:i}}function Yh(s){const t=new qm(s),e=[],i=[];function n(h){A.camera=h,e.length=0,i.length=0}function r(h){e.push(h)}function a(h){i.push(h)}function o(){t.setup(e)}function l(h){t.setupView(e,h)}const A={lightsArray:e,shadowsArray:i,camera:null,lights:t,transmissionRenderTarget:{}};return{init:n,state:A,setupLights:o,setupLightsView:l,pushLight:r,pushShadow:a}}function Km(s){let t=new WeakMap;function e(n,r=0){const a=t.get(n);let o;return a===void 0?(o=new Yh(s),t.set(n,[o])):r>=a.length?(o=new Yh(s),a.push(o)):o=a[r],o}function i(){t=new WeakMap}return{get:e,dispose:i}}const $m=`void main() {
|
|
3904
3904
|
gl_Position = vec4( position, 1.0 );
|
|
3905
|
-
}`,
|
|
3905
|
+
}`,tC=`uniform sampler2D shadow_pass;
|
|
3906
3906
|
uniform vec2 resolution;
|
|
3907
3907
|
uniform float radius;
|
|
3908
3908
|
#include <packing>
|
|
@@ -3928,12 +3928,12 @@ void main() {
|
|
|
3928
3928
|
squared_mean = squared_mean / samples;
|
|
3929
3929
|
float std_dev = sqrt( squared_mean - mean * mean );
|
|
3930
3930
|
gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );
|
|
3931
|
-
}`;function e0(s,t,e){let i=new il;const n=new Dt,r=new Dt,a=new he,o=new Jf({depthPacking:cf}),h=new Qf,l={},c=e.maxTextureSize,u={[$i]:Ue,[Ue]:$i,[Ni]:Ni},d=new on({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new Dt},radius:{value:4}},vertexShader:Q_,fragmentShader:t0}),f=d.clone();f.defines.HORIZONTAL_PASS=1;const g=new Pn;g.setAttribute("position",new Mi(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const _=new Si(g,d),m=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=gh;let p=this.type;this.render=function(w,C,I){if(m.enabled===!1||m.autoUpdate===!1&&m.needsUpdate===!1||w.length===0)return;const S=s.getRenderTarget(),M=s.getActiveCubeFace(),A=s.getActiveMipmapLevel(),B=s.state;B.setBlending(Ji),B.buffers.depth.getReversed()?B.buffers.color.setClear(0,0,0,0):B.buffers.color.setClear(1,1,1,1),B.buffers.depth.setTest(!0),B.setScissorTest(!1);const F=p!==Ui&&this.type===Ui,z=p===Ui&&this.type!==Ui;for(let W=0,X=w.length;W<X;W++){const Q=w[W],H=Q.shadow;if(H===void 0){console.warn("THREE.WebGLShadowMap:",Q,"has no shadow.");continue}if(H.autoUpdate===!1&&H.needsUpdate===!1)continue;n.copy(H.mapSize);const rt=H.getFrameExtents();if(n.multiply(rt),r.copy(H.mapSize),(n.x>c||n.y>c)&&(n.x>c&&(r.x=Math.floor(c/rt.x),n.x=r.x*rt.x,H.mapSize.x=r.x),n.y>c&&(r.y=Math.floor(c/rt.y),n.y=r.y*rt.y,H.mapSize.y=r.y)),H.map===null||F===!0||z===!0){const _t=this.type!==Ui?{minFilter:oi,magFilter:oi}:{};H.map!==null&&H.map.dispose(),H.map=new An(n.x,n.y,_t),H.map.texture.name=Q.name+".shadowMap",H.camera.updateProjectionMatrix()}s.setRenderTarget(H.map),s.clear();const ht=H.getViewportCount();for(let _t=0;_t<ht;_t++){const Ot=H.getViewport(_t);a.set(r.x*Ot.x,r.y*Ot.y,r.x*Ot.z,r.y*Ot.w),B.viewport(a),H.updateMatrices(Q,_t),i=H.getFrustum(),y(C,I,H.camera,Q,this.type)}H.isPointLightShadow!==!0&&this.type===Ui&&T(H,I),H.needsUpdate=!1}p=this.type,m.needsUpdate=!1,s.setRenderTarget(S,M,A)};function T(w,C){const I=t.update(_);d.defines.VSM_SAMPLES!==w.blurSamples&&(d.defines.VSM_SAMPLES=w.blurSamples,f.defines.VSM_SAMPLES=w.blurSamples,d.needsUpdate=!0,f.needsUpdate=!0),w.mapPass===null&&(w.mapPass=new An(n.x,n.y)),d.uniforms.shadow_pass.value=w.map.texture,d.uniforms.resolution.value=w.mapSize,d.uniforms.radius.value=w.radius,s.setRenderTarget(w.mapPass),s.clear(),s.renderBufferDirect(C,null,I,d,_,null),f.uniforms.shadow_pass.value=w.mapPass.texture,f.uniforms.resolution.value=w.mapSize,f.uniforms.radius.value=w.radius,s.setRenderTarget(w.map),s.clear(),s.renderBufferDirect(C,null,I,f,_,null)}function b(w,C,I,S){let M=null;const A=I.isPointLight===!0?w.customDistanceMaterial:w.customDepthMaterial;if(A!==void 0)M=A;else if(M=I.isPointLight===!0?h:o,s.localClippingEnabled&&C.clipShadows===!0&&Array.isArray(C.clippingPlanes)&&C.clippingPlanes.length!==0||C.displacementMap&&C.displacementScale!==0||C.alphaMap&&C.alphaTest>0||C.map&&C.alphaTest>0||C.alphaToCoverage===!0){const B=M.uuid,F=C.uuid;let z=l[B];z===void 0&&(z={},l[B]=z);let W=z[F];W===void 0&&(W=M.clone(),z[F]=W,C.addEventListener("dispose",R)),M=W}if(M.visible=C.visible,M.wireframe=C.wireframe,S===Ui?M.side=C.shadowSide!==null?C.shadowSide:C.side:M.side=C.shadowSide!==null?C.shadowSide:u[C.side],M.alphaMap=C.alphaMap,M.alphaTest=C.alphaToCoverage===!0?.5:C.alphaTest,M.map=C.map,M.clipShadows=C.clipShadows,M.clippingPlanes=C.clippingPlanes,M.clipIntersection=C.clipIntersection,M.displacementMap=C.displacementMap,M.displacementScale=C.displacementScale,M.displacementBias=C.displacementBias,M.wireframeLinewidth=C.wireframeLinewidth,M.linewidth=C.linewidth,I.isPointLight===!0&&M.isMeshDistanceMaterial===!0){const B=s.properties.get(M);B.light=I}return M}function y(w,C,I,S,M){if(w.visible===!1)return;if(w.layers.test(C.layers)&&(w.isMesh||w.isLine||w.isPoints)&&(w.castShadow||w.receiveShadow&&M===Ui)&&(!w.frustumCulled||i.intersectsObject(w))){w.modelViewMatrix.multiplyMatrices(I.matrixWorldInverse,w.matrixWorld);const F=t.update(w),z=w.material;if(Array.isArray(z)){const W=F.groups;for(let X=0,Q=W.length;X<Q;X++){const H=W[X],rt=z[H.materialIndex];if(rt&&rt.visible){const ht=b(w,rt,S,M);w.onBeforeShadow(s,w,C,I,F,ht,H),s.renderBufferDirect(I,null,F,ht,w,H),w.onAfterShadow(s,w,C,I,F,ht,H)}}}else if(z.visible){const W=b(w,z,S,M);w.onBeforeShadow(s,w,C,I,F,W,null),s.renderBufferDirect(I,null,F,W,w,null),w.onAfterShadow(s,w,C,I,F,W,null)}}const B=w.children;for(let F=0,z=B.length;F<z;F++)y(B[F],C,I,S,M)}function R(w){w.target.removeEventListener("dispose",R);for(const I in l){const S=l[I],M=w.target.uuid;M in S&&(S[M].dispose(),delete S[M])}}}const i0={[Ba]:ka,[Ga]:Wa,[Ha]:Xa,[is]:Va,[ka]:Ba,[Wa]:Ga,[Xa]:Ha,[Va]:is};function n0(s,t){function e(){let L=!1;const et=new he;let st=null;const ft=new he(0,0,0,0);return{setMask:function($){st!==$&&!L&&(s.colorMask($,$,$,$),st=$)},setLocked:function($){L=$},setClear:function($,Z,gt,Lt,ee){ee===!0&&($*=Lt,Z*=Lt,gt*=Lt),et.set($,Z,gt,Lt),ft.equals(et)===!1&&(s.clearColor($,Z,gt,Lt),ft.copy(et))},reset:function(){L=!1,st=null,ft.set(-1,0,0,0)}}}function i(){let L=!1,et=!1,st=null,ft=null,$=null;return{setReversed:function(Z){if(et!==Z){const gt=t.get("EXT_clip_control");Z?gt.clipControlEXT(gt.LOWER_LEFT_EXT,gt.ZERO_TO_ONE_EXT):gt.clipControlEXT(gt.LOWER_LEFT_EXT,gt.NEGATIVE_ONE_TO_ONE_EXT),et=Z;const Lt=$;$=null,this.setClear(Lt)}},getReversed:function(){return et},setTest:function(Z){Z?nt(s.DEPTH_TEST):At(s.DEPTH_TEST)},setMask:function(Z){st!==Z&&!L&&(s.depthMask(Z),st=Z)},setFunc:function(Z){if(et&&(Z=i0[Z]),ft!==Z){switch(Z){case Ba:s.depthFunc(s.NEVER);break;case ka:s.depthFunc(s.ALWAYS);break;case Ga:s.depthFunc(s.LESS);break;case is:s.depthFunc(s.LEQUAL);break;case Ha:s.depthFunc(s.EQUAL);break;case Va:s.depthFunc(s.GEQUAL);break;case Wa:s.depthFunc(s.GREATER);break;case Xa:s.depthFunc(s.NOTEQUAL);break;default:s.depthFunc(s.LEQUAL)}ft=Z}},setLocked:function(Z){L=Z},setClear:function(Z){$!==Z&&(et&&(Z=1-Z),s.clearDepth(Z),$=Z)},reset:function(){L=!1,st=null,ft=null,$=null,et=!1}}}function n(){let L=!1,et=null,st=null,ft=null,$=null,Z=null,gt=null,Lt=null,ee=null;return{setTest:function(jt){L||(jt?nt(s.STENCIL_TEST):At(s.STENCIL_TEST))},setMask:function(jt){et!==jt&&!L&&(s.stencilMask(jt),et=jt)},setFunc:function(jt,Vi,Ei){(st!==jt||ft!==Vi||$!==Ei)&&(s.stencilFunc(jt,Vi,Ei),st=jt,ft=Vi,$=Ei)},setOp:function(jt,Vi,Ei){(Z!==jt||gt!==Vi||Lt!==Ei)&&(s.stencilOp(jt,Vi,Ei),Z=jt,gt=Vi,Lt=Ei)},setLocked:function(jt){L=jt},setClear:function(jt){ee!==jt&&(s.clearStencil(jt),ee=jt)},reset:function(){L=!1,et=null,st=null,ft=null,$=null,Z=null,gt=null,Lt=null,ee=null}}}const r=new e,a=new i,o=new n,h=new WeakMap,l=new WeakMap;let c={},u={},d=new WeakMap,f=[],g=null,_=!1,m=null,p=null,T=null,b=null,y=null,R=null,w=null,C=new Vt(0,0,0),I=0,S=!1,M=null,A=null,B=null,F=null,z=null;const W=s.getParameter(s.MAX_COMBINED_TEXTURE_IMAGE_UNITS);let X=!1,Q=0;const H=s.getParameter(s.VERSION);H.indexOf("WebGL")!==-1?(Q=parseFloat(/^WebGL (\d)/.exec(H)[1]),X=Q>=1):H.indexOf("OpenGL ES")!==-1&&(Q=parseFloat(/^OpenGL ES (\d)/.exec(H)[1]),X=Q>=2);let rt=null,ht={};const _t=s.getParameter(s.SCISSOR_BOX),Ot=s.getParameter(s.VIEWPORT),ne=new he().fromArray(_t),Jt=new he().fromArray(Ot);function j(L,et,st,ft){const $=new Uint8Array(4),Z=s.createTexture();s.bindTexture(L,Z),s.texParameteri(L,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(L,s.TEXTURE_MAG_FILTER,s.NEAREST);for(let gt=0;gt<st;gt++)L===s.TEXTURE_3D||L===s.TEXTURE_2D_ARRAY?s.texImage3D(et,0,s.RGBA,1,1,ft,0,s.RGBA,s.UNSIGNED_BYTE,$):s.texImage2D(et+gt,0,s.RGBA,1,1,0,s.RGBA,s.UNSIGNED_BYTE,$);return Z}const ot={};ot[s.TEXTURE_2D]=j(s.TEXTURE_2D,s.TEXTURE_2D,1),ot[s.TEXTURE_CUBE_MAP]=j(s.TEXTURE_CUBE_MAP,s.TEXTURE_CUBE_MAP_POSITIVE_X,6),ot[s.TEXTURE_2D_ARRAY]=j(s.TEXTURE_2D_ARRAY,s.TEXTURE_2D_ARRAY,1,1),ot[s.TEXTURE_3D]=j(s.TEXTURE_3D,s.TEXTURE_3D,1,1),r.setClear(0,0,0,1),a.setClear(1),o.setClear(0),nt(s.DEPTH_TEST),a.setFunc(is),Yt(!1),St(mh),nt(s.CULL_FACE),te(Ji);function nt(L){c[L]!==!0&&(s.enable(L),c[L]=!0)}function At(L){c[L]!==!1&&(s.disable(L),c[L]=!1)}function wt(L,et){return u[L]!==et?(s.bindFramebuffer(L,et),u[L]=et,L===s.DRAW_FRAMEBUFFER&&(u[s.FRAMEBUFFER]=et),L===s.FRAMEBUFFER&&(u[s.DRAW_FRAMEBUFFER]=et),!0):!1}function It(L,et){let st=f,ft=!1;if(L){st=d.get(et),st===void 0&&(st=[],d.set(et,st));const $=L.textures;if(st.length!==$.length||st[0]!==s.COLOR_ATTACHMENT0){for(let Z=0,gt=$.length;Z<gt;Z++)st[Z]=s.COLOR_ATTACHMENT0+Z;st.length=$.length,ft=!0}}else st[0]!==s.BACK&&(st[0]=s.BACK,ft=!0);ft&&s.drawBuffers(st)}function de(L){return g!==L?(s.useProgram(L),g=L,!0):!1}const Wt={[yn]:s.FUNC_ADD,[Nd]:s.FUNC_SUBTRACT,[Fd]:s.FUNC_REVERSE_SUBTRACT};Wt[Od]=s.MIN,Wt[zd]=s.MAX;const P={[Bd]:s.ZERO,[kd]:s.ONE,[Gd]:s.SRC_COLOR,[Oa]:s.SRC_ALPHA,[Yd]:s.SRC_ALPHA_SATURATE,[Xd]:s.DST_COLOR,[Vd]:s.DST_ALPHA,[Hd]:s.ONE_MINUS_SRC_COLOR,[za]:s.ONE_MINUS_SRC_ALPHA,[qd]:s.ONE_MINUS_DST_COLOR,[Wd]:s.ONE_MINUS_DST_ALPHA,[jd]:s.CONSTANT_COLOR,[Zd]:s.ONE_MINUS_CONSTANT_COLOR,[Kd]:s.CONSTANT_ALPHA,[$d]:s.ONE_MINUS_CONSTANT_ALPHA};function te(L,et,st,ft,$,Z,gt,Lt,ee,jt){if(L===Ji){_===!0&&(At(s.BLEND),_=!1);return}if(_===!1&&(nt(s.BLEND),_=!0),L!==Ud){if(L!==m||jt!==S){if((p!==yn||y!==yn)&&(s.blendEquation(s.FUNC_ADD),p=yn,y=yn),jt)switch(L){case es:s.blendFuncSeparate(s.ONE,s.ONE_MINUS_SRC_ALPHA,s.ONE,s.ONE_MINUS_SRC_ALPHA);break;case _h:s.blendFunc(s.ONE,s.ONE);break;case xh:s.blendFuncSeparate(s.ZERO,s.ONE_MINUS_SRC_COLOR,s.ZERO,s.ONE);break;case vh:s.blendFuncSeparate(s.DST_COLOR,s.ONE_MINUS_SRC_ALPHA,s.ZERO,s.ONE);break;default:console.error("THREE.WebGLState: Invalid blending: ",L);break}else switch(L){case es:s.blendFuncSeparate(s.SRC_ALPHA,s.ONE_MINUS_SRC_ALPHA,s.ONE,s.ONE_MINUS_SRC_ALPHA);break;case _h:s.blendFuncSeparate(s.SRC_ALPHA,s.ONE,s.ONE,s.ONE);break;case xh:console.error("THREE.WebGLState: SubtractiveBlending requires material.premultipliedAlpha = true");break;case vh:console.error("THREE.WebGLState: MultiplyBlending requires material.premultipliedAlpha = true");break;default:console.error("THREE.WebGLState: Invalid blending: ",L);break}T=null,b=null,R=null,w=null,C.set(0,0,0),I=0,m=L,S=jt}return}$=$||et,Z=Z||st,gt=gt||ft,(et!==p||$!==y)&&(s.blendEquationSeparate(Wt[et],Wt[$]),p=et,y=$),(st!==T||ft!==b||Z!==R||gt!==w)&&(s.blendFuncSeparate(P[st],P[ft],P[Z],P[gt]),T=st,b=ft,R=Z,w=gt),(Lt.equals(C)===!1||ee!==I)&&(s.blendColor(Lt.r,Lt.g,Lt.b,ee),C.copy(Lt),I=ee),m=L,S=!1}function Et(L,et){L.side===Ni?At(s.CULL_FACE):nt(s.CULL_FACE);let st=L.side===Ue;et&&(st=!st),Yt(st),L.blending===es&&L.transparent===!1?te(Ji):te(L.blending,L.blendEquation,L.blendSrc,L.blendDst,L.blendEquationAlpha,L.blendSrcAlpha,L.blendDstAlpha,L.blendColor,L.blendAlpha,L.premultipliedAlpha),a.setFunc(L.depthFunc),a.setTest(L.depthTest),a.setMask(L.depthWrite),r.setMask(L.colorWrite);const ft=L.stencilWrite;o.setTest(ft),ft&&(o.setMask(L.stencilWriteMask),o.setFunc(L.stencilFunc,L.stencilRef,L.stencilFuncMask),o.setOp(L.stencilFail,L.stencilZFail,L.stencilZPass)),pt(L.polygonOffset,L.polygonOffsetFactor,L.polygonOffsetUnits),L.alphaToCoverage===!0?nt(s.SAMPLE_ALPHA_TO_COVERAGE):At(s.SAMPLE_ALPHA_TO_COVERAGE)}function Yt(L){M!==L&&(L?s.frontFace(s.CW):s.frontFace(s.CCW),M=L)}function St(L){L!==Id?(nt(s.CULL_FACE),L!==A&&(L===mh?s.cullFace(s.BACK):L===Ld?s.cullFace(s.FRONT):s.cullFace(s.FRONT_AND_BACK))):At(s.CULL_FACE),A=L}function se(L){L!==B&&(X&&s.lineWidth(L),B=L)}function pt(L,et,st){L?(nt(s.POLYGON_OFFSET_FILL),(F!==et||z!==st)&&(s.polygonOffset(et,st),F=et,z=st)):At(s.POLYGON_OFFSET_FILL)}function zt(L){L?nt(s.SCISSOR_TEST):At(s.SCISSOR_TEST)}function Ee(L){L===void 0&&(L=s.TEXTURE0+W-1),rt!==L&&(s.activeTexture(L),rt=L)}function fe(L,et,st){st===void 0&&(rt===null?st=s.TEXTURE0+W-1:st=rt);let ft=ht[st];ft===void 0&&(ft={type:void 0,texture:void 0},ht[st]=ft),(ft.type!==L||ft.texture!==et)&&(rt!==st&&(s.activeTexture(st),rt=st),s.bindTexture(L,et||ot[L]),ft.type=L,ft.texture=et)}function E(){const L=ht[rt];L!==void 0&&L.type!==void 0&&(s.bindTexture(L.type,null),L.type=void 0,L.texture=void 0)}function x(){try{s.compressedTexImage2D(...arguments)}catch(L){console.error("THREE.WebGLState:",L)}}function O(){try{s.compressedTexImage3D(...arguments)}catch(L){console.error("THREE.WebGLState:",L)}}function Y(){try{s.texSubImage2D(...arguments)}catch(L){console.error("THREE.WebGLState:",L)}}function K(){try{s.texSubImage3D(...arguments)}catch(L){console.error("THREE.WebGLState:",L)}}function q(){try{s.compressedTexSubImage2D(...arguments)}catch(L){console.error("THREE.WebGLState:",L)}}function Mt(){try{s.compressedTexSubImage3D(...arguments)}catch(L){console.error("THREE.WebGLState:",L)}}function it(){try{s.texStorage2D(...arguments)}catch(L){console.error("THREE.WebGLState:",L)}}function xt(){try{s.texStorage3D(...arguments)}catch(L){console.error("THREE.WebGLState:",L)}}function vt(){try{s.texImage2D(...arguments)}catch(L){console.error("THREE.WebGLState:",L)}}function tt(){try{s.texImage3D(...arguments)}catch(L){console.error("THREE.WebGLState:",L)}}function ut(L){ne.equals(L)===!1&&(s.scissor(L.x,L.y,L.z,L.w),ne.copy(L))}function Ct(L){Jt.equals(L)===!1&&(s.viewport(L.x,L.y,L.z,L.w),Jt.copy(L))}function yt(L,et){let st=l.get(et);st===void 0&&(st=new WeakMap,l.set(et,st));let ft=st.get(L);ft===void 0&&(ft=s.getUniformBlockIndex(et,L.name),st.set(L,ft))}function lt(L,et){const ft=l.get(et).get(L);h.get(et)!==ft&&(s.uniformBlockBinding(et,ft,L.__bindingPointIndex),h.set(et,ft))}function Nt(){s.disable(s.BLEND),s.disable(s.CULL_FACE),s.disable(s.DEPTH_TEST),s.disable(s.POLYGON_OFFSET_FILL),s.disable(s.SCISSOR_TEST),s.disable(s.STENCIL_TEST),s.disable(s.SAMPLE_ALPHA_TO_COVERAGE),s.blendEquation(s.FUNC_ADD),s.blendFunc(s.ONE,s.ZERO),s.blendFuncSeparate(s.ONE,s.ZERO,s.ONE,s.ZERO),s.blendColor(0,0,0,0),s.colorMask(!0,!0,!0,!0),s.clearColor(0,0,0,0),s.depthMask(!0),s.depthFunc(s.LESS),a.setReversed(!1),s.clearDepth(1),s.stencilMask(4294967295),s.stencilFunc(s.ALWAYS,0,4294967295),s.stencilOp(s.KEEP,s.KEEP,s.KEEP),s.clearStencil(0),s.cullFace(s.BACK),s.frontFace(s.CCW),s.polygonOffset(0,0),s.activeTexture(s.TEXTURE0),s.bindFramebuffer(s.FRAMEBUFFER,null),s.bindFramebuffer(s.DRAW_FRAMEBUFFER,null),s.bindFramebuffer(s.READ_FRAMEBUFFER,null),s.useProgram(null),s.lineWidth(1),s.scissor(0,0,s.canvas.width,s.canvas.height),s.viewport(0,0,s.canvas.width,s.canvas.height),c={},rt=null,ht={},u={},d=new WeakMap,f=[],g=null,_=!1,m=null,p=null,T=null,b=null,y=null,R=null,w=null,C=new Vt(0,0,0),I=0,S=!1,M=null,A=null,B=null,F=null,z=null,ne.set(0,0,s.canvas.width,s.canvas.height),Jt.set(0,0,s.canvas.width,s.canvas.height),r.reset(),a.reset(),o.reset()}return{buffers:{color:r,depth:a,stencil:o},enable:nt,disable:At,bindFramebuffer:wt,drawBuffers:It,useProgram:de,setBlending:te,setMaterial:Et,setFlipSided:Yt,setCullFace:St,setLineWidth:se,setPolygonOffset:pt,setScissorTest:zt,activeTexture:Ee,bindTexture:fe,unbindTexture:E,compressedTexImage2D:x,compressedTexImage3D:O,texImage2D:vt,texImage3D:tt,updateUBOMapping:yt,uniformBlockBinding:lt,texStorage2D:it,texStorage3D:xt,texSubImage2D:Y,texSubImage3D:K,compressedTexSubImage2D:q,compressedTexSubImage3D:Mt,scissor:ut,viewport:Ct,reset:Nt}}function s0(s,t,e,i,n,r,a){const o=t.has("WEBGL_multisampled_render_to_texture")?t.get("WEBGL_multisampled_render_to_texture"):null,h=typeof navigator>"u"?!1:/OculusBrowser/g.test(navigator.userAgent),l=new Dt,c=new WeakMap;let u;const d=new WeakMap;let f=!1;try{f=typeof OffscreenCanvas<"u"&&new OffscreenCanvas(1,1).getContext("2d")!==null}catch{}function g(E,x){return f?new OffscreenCanvas(E,x):js("canvas")}function _(E,x,O){let Y=1;const K=fe(E);if((K.width>O||K.height>O)&&(Y=O/Math.max(K.width,K.height)),Y<1)if(typeof HTMLImageElement<"u"&&E instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&E instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&E instanceof ImageBitmap||typeof VideoFrame<"u"&&E instanceof VideoFrame){const q=Math.floor(Y*K.width),Mt=Math.floor(Y*K.height);u===void 0&&(u=g(q,Mt));const it=x?g(q,Mt):u;return it.width=q,it.height=Mt,it.getContext("2d").drawImage(E,0,0,q,Mt),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+K.width+"x"+K.height+") to ("+q+"x"+Mt+")."),it}else return"data"in E&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+K.width+"x"+K.height+")."),E;return E}function m(E){return E.generateMipmaps}function p(E){s.generateMipmap(E)}function T(E){return E.isWebGLCubeRenderTarget?s.TEXTURE_CUBE_MAP:E.isWebGL3DRenderTarget?s.TEXTURE_3D:E.isWebGLArrayRenderTarget||E.isCompressedArrayTexture?s.TEXTURE_2D_ARRAY:s.TEXTURE_2D}function b(E,x,O,Y,K=!1){if(E!==null){if(s[E]!==void 0)return s[E];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+E+"'")}let q=x;if(x===s.RED&&(O===s.FLOAT&&(q=s.R32F),O===s.HALF_FLOAT&&(q=s.R16F),O===s.UNSIGNED_BYTE&&(q=s.R8)),x===s.RED_INTEGER&&(O===s.UNSIGNED_BYTE&&(q=s.R8UI),O===s.UNSIGNED_SHORT&&(q=s.R16UI),O===s.UNSIGNED_INT&&(q=s.R32UI),O===s.BYTE&&(q=s.R8I),O===s.SHORT&&(q=s.R16I),O===s.INT&&(q=s.R32I)),x===s.RG&&(O===s.FLOAT&&(q=s.RG32F),O===s.HALF_FLOAT&&(q=s.RG16F),O===s.UNSIGNED_BYTE&&(q=s.RG8)),x===s.RG_INTEGER&&(O===s.UNSIGNED_BYTE&&(q=s.RG8UI),O===s.UNSIGNED_SHORT&&(q=s.RG16UI),O===s.UNSIGNED_INT&&(q=s.RG32UI),O===s.BYTE&&(q=s.RG8I),O===s.SHORT&&(q=s.RG16I),O===s.INT&&(q=s.RG32I)),x===s.RGB_INTEGER&&(O===s.UNSIGNED_BYTE&&(q=s.RGB8UI),O===s.UNSIGNED_SHORT&&(q=s.RGB16UI),O===s.UNSIGNED_INT&&(q=s.RGB32UI),O===s.BYTE&&(q=s.RGB8I),O===s.SHORT&&(q=s.RGB16I),O===s.INT&&(q=s.RGB32I)),x===s.RGBA_INTEGER&&(O===s.UNSIGNED_BYTE&&(q=s.RGBA8UI),O===s.UNSIGNED_SHORT&&(q=s.RGBA16UI),O===s.UNSIGNED_INT&&(q=s.RGBA32UI),O===s.BYTE&&(q=s.RGBA8I),O===s.SHORT&&(q=s.RGBA16I),O===s.INT&&(q=s.RGBA32I)),x===s.RGB&&O===s.UNSIGNED_INT_5_9_9_9_REV&&(q=s.RGB9_E5),x===s.RGBA){const Mt=K?Lr:Xt.getTransfer(Y);O===s.FLOAT&&(q=s.RGBA32F),O===s.HALF_FLOAT&&(q=s.RGBA16F),O===s.UNSIGNED_BYTE&&(q=Mt===Zt?s.SRGB8_ALPHA8:s.RGBA8),O===s.UNSIGNED_SHORT_4_4_4_4&&(q=s.RGBA4),O===s.UNSIGNED_SHORT_5_5_5_1&&(q=s.RGB5_A1)}return(q===s.R16F||q===s.R32F||q===s.RG16F||q===s.RG32F||q===s.RGBA16F||q===s.RGBA32F)&&t.get("EXT_color_buffer_float"),q}function y(E,x){let O;return E?x===null||x===bn||x===Vs?O=s.DEPTH24_STENCIL8:x===Fi?O=s.DEPTH32F_STENCIL8:x===Gs&&(O=s.DEPTH24_STENCIL8,console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):x===null||x===bn||x===Vs?O=s.DEPTH_COMPONENT24:x===Fi?O=s.DEPTH_COMPONENT32F:x===Gs&&(O=s.DEPTH_COMPONENT16),O}function R(E,x){return m(E)===!0||E.isFramebufferTexture&&E.minFilter!==oi&&E.minFilter!==_i?Math.log2(Math.max(x.width,x.height))+1:E.mipmaps!==void 0&&E.mipmaps.length>0?E.mipmaps.length:E.isCompressedTexture&&Array.isArray(E.image)?x.mipmaps.length:1}function w(E){const x=E.target;x.removeEventListener("dispose",w),I(x),x.isVideoTexture&&c.delete(x)}function C(E){const x=E.target;x.removeEventListener("dispose",C),M(x)}function I(E){const x=i.get(E);if(x.__webglInit===void 0)return;const O=E.source,Y=d.get(O);if(Y){const K=Y[x.__cacheKey];K.usedTimes--,K.usedTimes===0&&S(E),Object.keys(Y).length===0&&d.delete(O)}i.remove(E)}function S(E){const x=i.get(E);s.deleteTexture(x.__webglTexture);const O=E.source,Y=d.get(O);delete Y[x.__cacheKey],a.memory.textures--}function M(E){const x=i.get(E);if(E.depthTexture&&(E.depthTexture.dispose(),i.remove(E.depthTexture)),E.isWebGLCubeRenderTarget)for(let Y=0;Y<6;Y++){if(Array.isArray(x.__webglFramebuffer[Y]))for(let K=0;K<x.__webglFramebuffer[Y].length;K++)s.deleteFramebuffer(x.__webglFramebuffer[Y][K]);else s.deleteFramebuffer(x.__webglFramebuffer[Y]);x.__webglDepthbuffer&&s.deleteRenderbuffer(x.__webglDepthbuffer[Y])}else{if(Array.isArray(x.__webglFramebuffer))for(let Y=0;Y<x.__webglFramebuffer.length;Y++)s.deleteFramebuffer(x.__webglFramebuffer[Y]);else s.deleteFramebuffer(x.__webglFramebuffer);if(x.__webglDepthbuffer&&s.deleteRenderbuffer(x.__webglDepthbuffer),x.__webglMultisampledFramebuffer&&s.deleteFramebuffer(x.__webglMultisampledFramebuffer),x.__webglColorRenderbuffer)for(let Y=0;Y<x.__webglColorRenderbuffer.length;Y++)x.__webglColorRenderbuffer[Y]&&s.deleteRenderbuffer(x.__webglColorRenderbuffer[Y]);x.__webglDepthRenderbuffer&&s.deleteRenderbuffer(x.__webglDepthRenderbuffer)}const O=E.textures;for(let Y=0,K=O.length;Y<K;Y++){const q=i.get(O[Y]);q.__webglTexture&&(s.deleteTexture(q.__webglTexture),a.memory.textures--),i.remove(O[Y])}i.remove(E)}let A=0;function B(){A=0}function F(){const E=A;return E>=n.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+E+" texture units while this GPU supports only "+n.maxTextures),A+=1,E}function z(E){const x=[];return x.push(E.wrapS),x.push(E.wrapT),x.push(E.wrapR||0),x.push(E.magFilter),x.push(E.minFilter),x.push(E.anisotropy),x.push(E.internalFormat),x.push(E.format),x.push(E.type),x.push(E.generateMipmaps),x.push(E.premultiplyAlpha),x.push(E.flipY),x.push(E.unpackAlignment),x.push(E.colorSpace),x.join()}function W(E,x){const O=i.get(E);if(E.isVideoTexture&&zt(E),E.isRenderTargetTexture===!1&&E.isExternalTexture!==!0&&E.version>0&&O.__version!==E.version){const Y=E.image;if(Y===null)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else if(Y.complete===!1)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{ot(O,E,x);return}}else E.isExternalTexture&&(O.__webglTexture=E.sourceTexture?E.sourceTexture:null);e.bindTexture(s.TEXTURE_2D,O.__webglTexture,s.TEXTURE0+x)}function X(E,x){const O=i.get(E);if(E.isRenderTargetTexture===!1&&E.version>0&&O.__version!==E.version){ot(O,E,x);return}e.bindTexture(s.TEXTURE_2D_ARRAY,O.__webglTexture,s.TEXTURE0+x)}function Q(E,x){const O=i.get(E);if(E.isRenderTargetTexture===!1&&E.version>0&&O.__version!==E.version){ot(O,E,x);return}e.bindTexture(s.TEXTURE_3D,O.__webglTexture,s.TEXTURE0+x)}function H(E,x){const O=i.get(E);if(E.version>0&&O.__version!==E.version){nt(O,E,x);return}e.bindTexture(s.TEXTURE_CUBE_MAP,O.__webglTexture,s.TEXTURE0+x)}const rt={[ja]:s.REPEAT,[Mn]:s.CLAMP_TO_EDGE,[Za]:s.MIRRORED_REPEAT},ht={[oi]:s.NEAREST,[lf]:s.NEAREST_MIPMAP_NEAREST,[Ar]:s.NEAREST_MIPMAP_LINEAR,[_i]:s.LINEAR,[Ka]:s.LINEAR_MIPMAP_NEAREST,[Sn]:s.LINEAR_MIPMAP_LINEAR},_t={[df]:s.NEVER,[xf]:s.ALWAYS,[ff]:s.LESS,[Lh]:s.LEQUAL,[pf]:s.EQUAL,[_f]:s.GEQUAL,[mf]:s.GREATER,[gf]:s.NOTEQUAL};function Ot(E,x){if(x.type===Fi&&t.has("OES_texture_float_linear")===!1&&(x.magFilter===_i||x.magFilter===Ka||x.magFilter===Ar||x.magFilter===Sn||x.minFilter===_i||x.minFilter===Ka||x.minFilter===Ar||x.minFilter===Sn)&&console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),s.texParameteri(E,s.TEXTURE_WRAP_S,rt[x.wrapS]),s.texParameteri(E,s.TEXTURE_WRAP_T,rt[x.wrapT]),(E===s.TEXTURE_3D||E===s.TEXTURE_2D_ARRAY)&&s.texParameteri(E,s.TEXTURE_WRAP_R,rt[x.wrapR]),s.texParameteri(E,s.TEXTURE_MAG_FILTER,ht[x.magFilter]),s.texParameteri(E,s.TEXTURE_MIN_FILTER,ht[x.minFilter]),x.compareFunction&&(s.texParameteri(E,s.TEXTURE_COMPARE_MODE,s.COMPARE_REF_TO_TEXTURE),s.texParameteri(E,s.TEXTURE_COMPARE_FUNC,_t[x.compareFunction])),t.has("EXT_texture_filter_anisotropic")===!0){if(x.magFilter===oi||x.minFilter!==Ar&&x.minFilter!==Sn||x.type===Fi&&t.has("OES_texture_float_linear")===!1)return;if(x.anisotropy>1||i.get(x).__currentAnisotropy){const O=t.get("EXT_texture_filter_anisotropic");s.texParameterf(E,O.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(x.anisotropy,n.getMaxAnisotropy())),i.get(x).__currentAnisotropy=x.anisotropy}}}function ne(E,x){let O=!1;E.__webglInit===void 0&&(E.__webglInit=!0,x.addEventListener("dispose",w));const Y=x.source;let K=d.get(Y);K===void 0&&(K={},d.set(Y,K));const q=z(x);if(q!==E.__cacheKey){K[q]===void 0&&(K[q]={texture:s.createTexture(),usedTimes:0},a.memory.textures++,O=!0),K[q].usedTimes++;const Mt=K[E.__cacheKey];Mt!==void 0&&(K[E.__cacheKey].usedTimes--,Mt.usedTimes===0&&S(x)),E.__cacheKey=q,E.__webglTexture=K[q].texture}return O}function Jt(E,x,O){return Math.floor(Math.floor(E/O)/x)}function j(E,x,O,Y){const q=E.updateRanges;if(q.length===0)e.texSubImage2D(s.TEXTURE_2D,0,0,0,x.width,x.height,O,Y,x.data);else{q.sort((tt,ut)=>tt.start-ut.start);let Mt=0;for(let tt=1;tt<q.length;tt++){const ut=q[Mt],Ct=q[tt],yt=ut.start+ut.count,lt=Jt(Ct.start,x.width,4),Nt=Jt(ut.start,x.width,4);Ct.start<=yt+1&<===Nt&&Jt(Ct.start+Ct.count-1,x.width,4)===lt?ut.count=Math.max(ut.count,Ct.start+Ct.count-ut.start):(++Mt,q[Mt]=Ct)}q.length=Mt+1;const it=s.getParameter(s.UNPACK_ROW_LENGTH),xt=s.getParameter(s.UNPACK_SKIP_PIXELS),vt=s.getParameter(s.UNPACK_SKIP_ROWS);s.pixelStorei(s.UNPACK_ROW_LENGTH,x.width);for(let tt=0,ut=q.length;tt<ut;tt++){const Ct=q[tt],yt=Math.floor(Ct.start/4),lt=Math.ceil(Ct.count/4),Nt=yt%x.width,L=Math.floor(yt/x.width),et=lt,st=1;s.pixelStorei(s.UNPACK_SKIP_PIXELS,Nt),s.pixelStorei(s.UNPACK_SKIP_ROWS,L),e.texSubImage2D(s.TEXTURE_2D,0,Nt,L,et,st,O,Y,x.data)}E.clearUpdateRanges(),s.pixelStorei(s.UNPACK_ROW_LENGTH,it),s.pixelStorei(s.UNPACK_SKIP_PIXELS,xt),s.pixelStorei(s.UNPACK_SKIP_ROWS,vt)}}function ot(E,x,O){let Y=s.TEXTURE_2D;(x.isDataArrayTexture||x.isCompressedArrayTexture)&&(Y=s.TEXTURE_2D_ARRAY),x.isData3DTexture&&(Y=s.TEXTURE_3D);const K=ne(E,x),q=x.source;e.bindTexture(Y,E.__webglTexture,s.TEXTURE0+O);const Mt=i.get(q);if(q.version!==Mt.__version||K===!0){e.activeTexture(s.TEXTURE0+O);const it=Xt.getPrimaries(Xt.workingColorSpace),xt=x.colorSpace===tn?null:Xt.getPrimaries(x.colorSpace),vt=x.colorSpace===tn||it===xt?s.NONE:s.BROWSER_DEFAULT_WEBGL;s.pixelStorei(s.UNPACK_FLIP_Y_WEBGL,x.flipY),s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,x.premultiplyAlpha),s.pixelStorei(s.UNPACK_ALIGNMENT,x.unpackAlignment),s.pixelStorei(s.UNPACK_COLORSPACE_CONVERSION_WEBGL,vt);let tt=_(x.image,!1,n.maxTextureSize);tt=Ee(x,tt);const ut=r.convert(x.format,x.colorSpace),Ct=r.convert(x.type);let yt=b(x.internalFormat,ut,Ct,x.colorSpace,x.isVideoTexture);Ot(Y,x);let lt;const Nt=x.mipmaps,L=x.isVideoTexture!==!0,et=Mt.__version===void 0||K===!0,st=q.dataReady,ft=R(x,tt);if(x.isDepthTexture)yt=y(x.format===Xs,x.type),et&&(L?e.texStorage2D(s.TEXTURE_2D,1,yt,tt.width,tt.height):e.texImage2D(s.TEXTURE_2D,0,yt,tt.width,tt.height,0,ut,Ct,null));else if(x.isDataTexture)if(Nt.length>0){L&&et&&e.texStorage2D(s.TEXTURE_2D,ft,yt,Nt[0].width,Nt[0].height);for(let $=0,Z=Nt.length;$<Z;$++)lt=Nt[$],L?st&&e.texSubImage2D(s.TEXTURE_2D,$,0,0,lt.width,lt.height,ut,Ct,lt.data):e.texImage2D(s.TEXTURE_2D,$,yt,lt.width,lt.height,0,ut,Ct,lt.data);x.generateMipmaps=!1}else L?(et&&e.texStorage2D(s.TEXTURE_2D,ft,yt,tt.width,tt.height),st&&j(x,tt,ut,Ct)):e.texImage2D(s.TEXTURE_2D,0,yt,tt.width,tt.height,0,ut,Ct,tt.data);else if(x.isCompressedTexture)if(x.isCompressedArrayTexture){L&&et&&e.texStorage3D(s.TEXTURE_2D_ARRAY,ft,yt,Nt[0].width,Nt[0].height,tt.depth);for(let $=0,Z=Nt.length;$<Z;$++)if(lt=Nt[$],x.format!==li)if(ut!==null)if(L){if(st)if(x.layerUpdates.size>0){const gt=gc(lt.width,lt.height,x.format,x.type);for(const Lt of x.layerUpdates){const ee=lt.data.subarray(Lt*gt/lt.data.BYTES_PER_ELEMENT,(Lt+1)*gt/lt.data.BYTES_PER_ELEMENT);e.compressedTexSubImage3D(s.TEXTURE_2D_ARRAY,$,0,0,Lt,lt.width,lt.height,1,ut,ee)}x.clearLayerUpdates()}else e.compressedTexSubImage3D(s.TEXTURE_2D_ARRAY,$,0,0,0,lt.width,lt.height,tt.depth,ut,lt.data)}else e.compressedTexImage3D(s.TEXTURE_2D_ARRAY,$,yt,lt.width,lt.height,tt.depth,0,lt.data,0,0);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else L?st&&e.texSubImage3D(s.TEXTURE_2D_ARRAY,$,0,0,0,lt.width,lt.height,tt.depth,ut,Ct,lt.data):e.texImage3D(s.TEXTURE_2D_ARRAY,$,yt,lt.width,lt.height,tt.depth,0,ut,Ct,lt.data)}else{L&&et&&e.texStorage2D(s.TEXTURE_2D,ft,yt,Nt[0].width,Nt[0].height);for(let $=0,Z=Nt.length;$<Z;$++)lt=Nt[$],x.format!==li?ut!==null?L?st&&e.compressedTexSubImage2D(s.TEXTURE_2D,$,0,0,lt.width,lt.height,ut,lt.data):e.compressedTexImage2D(s.TEXTURE_2D,$,yt,lt.width,lt.height,0,lt.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):L?st&&e.texSubImage2D(s.TEXTURE_2D,$,0,0,lt.width,lt.height,ut,Ct,lt.data):e.texImage2D(s.TEXTURE_2D,$,yt,lt.width,lt.height,0,ut,Ct,lt.data)}else if(x.isDataArrayTexture)if(L){if(et&&e.texStorage3D(s.TEXTURE_2D_ARRAY,ft,yt,tt.width,tt.height,tt.depth),st)if(x.layerUpdates.size>0){const $=gc(tt.width,tt.height,x.format,x.type);for(const Z of x.layerUpdates){const gt=tt.data.subarray(Z*$/tt.data.BYTES_PER_ELEMENT,(Z+1)*$/tt.data.BYTES_PER_ELEMENT);e.texSubImage3D(s.TEXTURE_2D_ARRAY,0,0,0,Z,tt.width,tt.height,1,ut,Ct,gt)}x.clearLayerUpdates()}else e.texSubImage3D(s.TEXTURE_2D_ARRAY,0,0,0,0,tt.width,tt.height,tt.depth,ut,Ct,tt.data)}else e.texImage3D(s.TEXTURE_2D_ARRAY,0,yt,tt.width,tt.height,tt.depth,0,ut,Ct,tt.data);else if(x.isData3DTexture)L?(et&&e.texStorage3D(s.TEXTURE_3D,ft,yt,tt.width,tt.height,tt.depth),st&&e.texSubImage3D(s.TEXTURE_3D,0,0,0,0,tt.width,tt.height,tt.depth,ut,Ct,tt.data)):e.texImage3D(s.TEXTURE_3D,0,yt,tt.width,tt.height,tt.depth,0,ut,Ct,tt.data);else if(x.isFramebufferTexture){if(et)if(L)e.texStorage2D(s.TEXTURE_2D,ft,yt,tt.width,tt.height);else{let $=tt.width,Z=tt.height;for(let gt=0;gt<ft;gt++)e.texImage2D(s.TEXTURE_2D,gt,yt,$,Z,0,ut,Ct,null),$>>=1,Z>>=1}}else if(Nt.length>0){if(L&&et){const $=fe(Nt[0]);e.texStorage2D(s.TEXTURE_2D,ft,yt,$.width,$.height)}for(let $=0,Z=Nt.length;$<Z;$++)lt=Nt[$],L?st&&e.texSubImage2D(s.TEXTURE_2D,$,0,0,ut,Ct,lt):e.texImage2D(s.TEXTURE_2D,$,yt,ut,Ct,lt);x.generateMipmaps=!1}else if(L){if(et){const $=fe(tt);e.texStorage2D(s.TEXTURE_2D,ft,yt,$.width,$.height)}st&&e.texSubImage2D(s.TEXTURE_2D,0,0,0,ut,Ct,tt)}else e.texImage2D(s.TEXTURE_2D,0,yt,ut,Ct,tt);m(x)&&p(Y),Mt.__version=q.version,x.onUpdate&&x.onUpdate(x)}E.__version=x.version}function nt(E,x,O){if(x.image.length!==6)return;const Y=ne(E,x),K=x.source;e.bindTexture(s.TEXTURE_CUBE_MAP,E.__webglTexture,s.TEXTURE0+O);const q=i.get(K);if(K.version!==q.__version||Y===!0){e.activeTexture(s.TEXTURE0+O);const Mt=Xt.getPrimaries(Xt.workingColorSpace),it=x.colorSpace===tn?null:Xt.getPrimaries(x.colorSpace),xt=x.colorSpace===tn||Mt===it?s.NONE:s.BROWSER_DEFAULT_WEBGL;s.pixelStorei(s.UNPACK_FLIP_Y_WEBGL,x.flipY),s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,x.premultiplyAlpha),s.pixelStorei(s.UNPACK_ALIGNMENT,x.unpackAlignment),s.pixelStorei(s.UNPACK_COLORSPACE_CONVERSION_WEBGL,xt);const vt=x.isCompressedTexture||x.image[0].isCompressedTexture,tt=x.image[0]&&x.image[0].isDataTexture,ut=[];for(let Z=0;Z<6;Z++)!vt&&!tt?ut[Z]=_(x.image[Z],!0,n.maxCubemapSize):ut[Z]=tt?x.image[Z].image:x.image[Z],ut[Z]=Ee(x,ut[Z]);const Ct=ut[0],yt=r.convert(x.format,x.colorSpace),lt=r.convert(x.type),Nt=b(x.internalFormat,yt,lt,x.colorSpace),L=x.isVideoTexture!==!0,et=q.__version===void 0||Y===!0,st=K.dataReady;let ft=R(x,Ct);Ot(s.TEXTURE_CUBE_MAP,x);let $;if(vt){L&&et&&e.texStorage2D(s.TEXTURE_CUBE_MAP,ft,Nt,Ct.width,Ct.height);for(let Z=0;Z<6;Z++){$=ut[Z].mipmaps;for(let gt=0;gt<$.length;gt++){const Lt=$[gt];x.format!==li?yt!==null?L?st&&e.compressedTexSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+Z,gt,0,0,Lt.width,Lt.height,yt,Lt.data):e.compressedTexImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+Z,gt,Nt,Lt.width,Lt.height,0,Lt.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):L?st&&e.texSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+Z,gt,0,0,Lt.width,Lt.height,yt,lt,Lt.data):e.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+Z,gt,Nt,Lt.width,Lt.height,0,yt,lt,Lt.data)}}}else{if($=x.mipmaps,L&&et){$.length>0&&ft++;const Z=fe(ut[0]);e.texStorage2D(s.TEXTURE_CUBE_MAP,ft,Nt,Z.width,Z.height)}for(let Z=0;Z<6;Z++)if(tt){L?st&&e.texSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+Z,0,0,0,ut[Z].width,ut[Z].height,yt,lt,ut[Z].data):e.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+Z,0,Nt,ut[Z].width,ut[Z].height,0,yt,lt,ut[Z].data);for(let gt=0;gt<$.length;gt++){const ee=$[gt].image[Z].image;L?st&&e.texSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+Z,gt+1,0,0,ee.width,ee.height,yt,lt,ee.data):e.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+Z,gt+1,Nt,ee.width,ee.height,0,yt,lt,ee.data)}}else{L?st&&e.texSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+Z,0,0,0,yt,lt,ut[Z]):e.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+Z,0,Nt,yt,lt,ut[Z]);for(let gt=0;gt<$.length;gt++){const Lt=$[gt];L?st&&e.texSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+Z,gt+1,0,0,yt,lt,Lt.image[Z]):e.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+Z,gt+1,Nt,yt,lt,Lt.image[Z])}}}m(x)&&p(s.TEXTURE_CUBE_MAP),q.__version=K.version,x.onUpdate&&x.onUpdate(x)}E.__version=x.version}function At(E,x,O,Y,K,q){const Mt=r.convert(O.format,O.colorSpace),it=r.convert(O.type),xt=b(O.internalFormat,Mt,it,O.colorSpace),vt=i.get(x),tt=i.get(O);if(tt.__renderTarget=x,!vt.__hasExternalTextures){const ut=Math.max(1,x.width>>q),Ct=Math.max(1,x.height>>q);K===s.TEXTURE_3D||K===s.TEXTURE_2D_ARRAY?e.texImage3D(K,q,xt,ut,Ct,x.depth,0,Mt,it,null):e.texImage2D(K,q,xt,ut,Ct,0,Mt,it,null)}e.bindFramebuffer(s.FRAMEBUFFER,E),pt(x)?o.framebufferTexture2DMultisampleEXT(s.FRAMEBUFFER,Y,K,tt.__webglTexture,0,se(x)):(K===s.TEXTURE_2D||K>=s.TEXTURE_CUBE_MAP_POSITIVE_X&&K<=s.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&s.framebufferTexture2D(s.FRAMEBUFFER,Y,K,tt.__webglTexture,q),e.bindFramebuffer(s.FRAMEBUFFER,null)}function wt(E,x,O){if(s.bindRenderbuffer(s.RENDERBUFFER,E),x.depthBuffer){const Y=x.depthTexture,K=Y&&Y.isDepthTexture?Y.type:null,q=y(x.stencilBuffer,K),Mt=x.stencilBuffer?s.DEPTH_STENCIL_ATTACHMENT:s.DEPTH_ATTACHMENT,it=se(x);pt(x)?o.renderbufferStorageMultisampleEXT(s.RENDERBUFFER,it,q,x.width,x.height):O?s.renderbufferStorageMultisample(s.RENDERBUFFER,it,q,x.width,x.height):s.renderbufferStorage(s.RENDERBUFFER,q,x.width,x.height),s.framebufferRenderbuffer(s.FRAMEBUFFER,Mt,s.RENDERBUFFER,E)}else{const Y=x.textures;for(let K=0;K<Y.length;K++){const q=Y[K],Mt=r.convert(q.format,q.colorSpace),it=r.convert(q.type),xt=b(q.internalFormat,Mt,it,q.colorSpace),vt=se(x);O&&pt(x)===!1?s.renderbufferStorageMultisample(s.RENDERBUFFER,vt,xt,x.width,x.height):pt(x)?o.renderbufferStorageMultisampleEXT(s.RENDERBUFFER,vt,xt,x.width,x.height):s.renderbufferStorage(s.RENDERBUFFER,xt,x.width,x.height)}}s.bindRenderbuffer(s.RENDERBUFFER,null)}function It(E,x){if(x&&x.isWebGLCubeRenderTarget)throw new Error("Depth Texture with cube render targets is not supported");if(e.bindFramebuffer(s.FRAMEBUFFER,E),!(x.depthTexture&&x.depthTexture.isDepthTexture))throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");const Y=i.get(x.depthTexture);Y.__renderTarget=x,(!Y.__webglTexture||x.depthTexture.image.width!==x.width||x.depthTexture.image.height!==x.height)&&(x.depthTexture.image.width=x.width,x.depthTexture.image.height=x.height,x.depthTexture.needsUpdate=!0),W(x.depthTexture,0);const K=Y.__webglTexture,q=se(x);if(x.depthTexture.format===Ws)pt(x)?o.framebufferTexture2DMultisampleEXT(s.FRAMEBUFFER,s.DEPTH_ATTACHMENT,s.TEXTURE_2D,K,0,q):s.framebufferTexture2D(s.FRAMEBUFFER,s.DEPTH_ATTACHMENT,s.TEXTURE_2D,K,0);else if(x.depthTexture.format===Xs)pt(x)?o.framebufferTexture2DMultisampleEXT(s.FRAMEBUFFER,s.DEPTH_STENCIL_ATTACHMENT,s.TEXTURE_2D,K,0,q):s.framebufferTexture2D(s.FRAMEBUFFER,s.DEPTH_STENCIL_ATTACHMENT,s.TEXTURE_2D,K,0);else throw new Error("Unknown depthTexture format")}function de(E){const x=i.get(E),O=E.isWebGLCubeRenderTarget===!0;if(x.__boundDepthTexture!==E.depthTexture){const Y=E.depthTexture;if(x.__depthDisposeCallback&&x.__depthDisposeCallback(),Y){const K=()=>{delete x.__boundDepthTexture,delete x.__depthDisposeCallback,Y.removeEventListener("dispose",K)};Y.addEventListener("dispose",K),x.__depthDisposeCallback=K}x.__boundDepthTexture=Y}if(E.depthTexture&&!x.__autoAllocateDepthBuffer){if(O)throw new Error("target.depthTexture not supported in Cube render targets");const Y=E.texture.mipmaps;Y&&Y.length>0?It(x.__webglFramebuffer[0],E):It(x.__webglFramebuffer,E)}else if(O){x.__webglDepthbuffer=[];for(let Y=0;Y<6;Y++)if(e.bindFramebuffer(s.FRAMEBUFFER,x.__webglFramebuffer[Y]),x.__webglDepthbuffer[Y]===void 0)x.__webglDepthbuffer[Y]=s.createRenderbuffer(),wt(x.__webglDepthbuffer[Y],E,!1);else{const K=E.stencilBuffer?s.DEPTH_STENCIL_ATTACHMENT:s.DEPTH_ATTACHMENT,q=x.__webglDepthbuffer[Y];s.bindRenderbuffer(s.RENDERBUFFER,q),s.framebufferRenderbuffer(s.FRAMEBUFFER,K,s.RENDERBUFFER,q)}}else{const Y=E.texture.mipmaps;if(Y&&Y.length>0?e.bindFramebuffer(s.FRAMEBUFFER,x.__webglFramebuffer[0]):e.bindFramebuffer(s.FRAMEBUFFER,x.__webglFramebuffer),x.__webglDepthbuffer===void 0)x.__webglDepthbuffer=s.createRenderbuffer(),wt(x.__webglDepthbuffer,E,!1);else{const K=E.stencilBuffer?s.DEPTH_STENCIL_ATTACHMENT:s.DEPTH_ATTACHMENT,q=x.__webglDepthbuffer;s.bindRenderbuffer(s.RENDERBUFFER,q),s.framebufferRenderbuffer(s.FRAMEBUFFER,K,s.RENDERBUFFER,q)}}e.bindFramebuffer(s.FRAMEBUFFER,null)}function Wt(E,x,O){const Y=i.get(E);x!==void 0&&At(Y.__webglFramebuffer,E,E.texture,s.COLOR_ATTACHMENT0,s.TEXTURE_2D,0),O!==void 0&&de(E)}function P(E){const x=E.texture,O=i.get(E),Y=i.get(x);E.addEventListener("dispose",C);const K=E.textures,q=E.isWebGLCubeRenderTarget===!0,Mt=K.length>1;if(Mt||(Y.__webglTexture===void 0&&(Y.__webglTexture=s.createTexture()),Y.__version=x.version,a.memory.textures++),q){O.__webglFramebuffer=[];for(let it=0;it<6;it++)if(x.mipmaps&&x.mipmaps.length>0){O.__webglFramebuffer[it]=[];for(let xt=0;xt<x.mipmaps.length;xt++)O.__webglFramebuffer[it][xt]=s.createFramebuffer()}else O.__webglFramebuffer[it]=s.createFramebuffer()}else{if(x.mipmaps&&x.mipmaps.length>0){O.__webglFramebuffer=[];for(let it=0;it<x.mipmaps.length;it++)O.__webglFramebuffer[it]=s.createFramebuffer()}else O.__webglFramebuffer=s.createFramebuffer();if(Mt)for(let it=0,xt=K.length;it<xt;it++){const vt=i.get(K[it]);vt.__webglTexture===void 0&&(vt.__webglTexture=s.createTexture(),a.memory.textures++)}if(E.samples>0&&pt(E)===!1){O.__webglMultisampledFramebuffer=s.createFramebuffer(),O.__webglColorRenderbuffer=[],e.bindFramebuffer(s.FRAMEBUFFER,O.__webglMultisampledFramebuffer);for(let it=0;it<K.length;it++){const xt=K[it];O.__webglColorRenderbuffer[it]=s.createRenderbuffer(),s.bindRenderbuffer(s.RENDERBUFFER,O.__webglColorRenderbuffer[it]);const vt=r.convert(xt.format,xt.colorSpace),tt=r.convert(xt.type),ut=b(xt.internalFormat,vt,tt,xt.colorSpace,E.isXRRenderTarget===!0),Ct=se(E);s.renderbufferStorageMultisample(s.RENDERBUFFER,Ct,ut,E.width,E.height),s.framebufferRenderbuffer(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0+it,s.RENDERBUFFER,O.__webglColorRenderbuffer[it])}s.bindRenderbuffer(s.RENDERBUFFER,null),E.depthBuffer&&(O.__webglDepthRenderbuffer=s.createRenderbuffer(),wt(O.__webglDepthRenderbuffer,E,!0)),e.bindFramebuffer(s.FRAMEBUFFER,null)}}if(q){e.bindTexture(s.TEXTURE_CUBE_MAP,Y.__webglTexture),Ot(s.TEXTURE_CUBE_MAP,x);for(let it=0;it<6;it++)if(x.mipmaps&&x.mipmaps.length>0)for(let xt=0;xt<x.mipmaps.length;xt++)At(O.__webglFramebuffer[it][xt],E,x,s.COLOR_ATTACHMENT0,s.TEXTURE_CUBE_MAP_POSITIVE_X+it,xt);else At(O.__webglFramebuffer[it],E,x,s.COLOR_ATTACHMENT0,s.TEXTURE_CUBE_MAP_POSITIVE_X+it,0);m(x)&&p(s.TEXTURE_CUBE_MAP),e.unbindTexture()}else if(Mt){for(let it=0,xt=K.length;it<xt;it++){const vt=K[it],tt=i.get(vt);let ut=s.TEXTURE_2D;(E.isWebGL3DRenderTarget||E.isWebGLArrayRenderTarget)&&(ut=E.isWebGL3DRenderTarget?s.TEXTURE_3D:s.TEXTURE_2D_ARRAY),e.bindTexture(ut,tt.__webglTexture),Ot(ut,vt),At(O.__webglFramebuffer,E,vt,s.COLOR_ATTACHMENT0+it,ut,0),m(vt)&&p(ut)}e.unbindTexture()}else{let it=s.TEXTURE_2D;if((E.isWebGL3DRenderTarget||E.isWebGLArrayRenderTarget)&&(it=E.isWebGL3DRenderTarget?s.TEXTURE_3D:s.TEXTURE_2D_ARRAY),e.bindTexture(it,Y.__webglTexture),Ot(it,x),x.mipmaps&&x.mipmaps.length>0)for(let xt=0;xt<x.mipmaps.length;xt++)At(O.__webglFramebuffer[xt],E,x,s.COLOR_ATTACHMENT0,it,xt);else At(O.__webglFramebuffer,E,x,s.COLOR_ATTACHMENT0,it,0);m(x)&&p(it),e.unbindTexture()}E.depthBuffer&&de(E)}function te(E){const x=E.textures;for(let O=0,Y=x.length;O<Y;O++){const K=x[O];if(m(K)){const q=T(E),Mt=i.get(K).__webglTexture;e.bindTexture(q,Mt),p(q),e.unbindTexture()}}}const Et=[],Yt=[];function St(E){if(E.samples>0){if(pt(E)===!1){const x=E.textures,O=E.width,Y=E.height;let K=s.COLOR_BUFFER_BIT;const q=E.stencilBuffer?s.DEPTH_STENCIL_ATTACHMENT:s.DEPTH_ATTACHMENT,Mt=i.get(E),it=x.length>1;if(it)for(let vt=0;vt<x.length;vt++)e.bindFramebuffer(s.FRAMEBUFFER,Mt.__webglMultisampledFramebuffer),s.framebufferRenderbuffer(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0+vt,s.RENDERBUFFER,null),e.bindFramebuffer(s.FRAMEBUFFER,Mt.__webglFramebuffer),s.framebufferTexture2D(s.DRAW_FRAMEBUFFER,s.COLOR_ATTACHMENT0+vt,s.TEXTURE_2D,null,0);e.bindFramebuffer(s.READ_FRAMEBUFFER,Mt.__webglMultisampledFramebuffer);const xt=E.texture.mipmaps;xt&&xt.length>0?e.bindFramebuffer(s.DRAW_FRAMEBUFFER,Mt.__webglFramebuffer[0]):e.bindFramebuffer(s.DRAW_FRAMEBUFFER,Mt.__webglFramebuffer);for(let vt=0;vt<x.length;vt++){if(E.resolveDepthBuffer&&(E.depthBuffer&&(K|=s.DEPTH_BUFFER_BIT),E.stencilBuffer&&E.resolveStencilBuffer&&(K|=s.STENCIL_BUFFER_BIT)),it){s.framebufferRenderbuffer(s.READ_FRAMEBUFFER,s.COLOR_ATTACHMENT0,s.RENDERBUFFER,Mt.__webglColorRenderbuffer[vt]);const tt=i.get(x[vt]).__webglTexture;s.framebufferTexture2D(s.DRAW_FRAMEBUFFER,s.COLOR_ATTACHMENT0,s.TEXTURE_2D,tt,0)}s.blitFramebuffer(0,0,O,Y,0,0,O,Y,K,s.NEAREST),h===!0&&(Et.length=0,Yt.length=0,Et.push(s.COLOR_ATTACHMENT0+vt),E.depthBuffer&&E.resolveDepthBuffer===!1&&(Et.push(q),Yt.push(q),s.invalidateFramebuffer(s.DRAW_FRAMEBUFFER,Yt)),s.invalidateFramebuffer(s.READ_FRAMEBUFFER,Et))}if(e.bindFramebuffer(s.READ_FRAMEBUFFER,null),e.bindFramebuffer(s.DRAW_FRAMEBUFFER,null),it)for(let vt=0;vt<x.length;vt++){e.bindFramebuffer(s.FRAMEBUFFER,Mt.__webglMultisampledFramebuffer),s.framebufferRenderbuffer(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0+vt,s.RENDERBUFFER,Mt.__webglColorRenderbuffer[vt]);const tt=i.get(x[vt]).__webglTexture;e.bindFramebuffer(s.FRAMEBUFFER,Mt.__webglFramebuffer),s.framebufferTexture2D(s.DRAW_FRAMEBUFFER,s.COLOR_ATTACHMENT0+vt,s.TEXTURE_2D,tt,0)}e.bindFramebuffer(s.DRAW_FRAMEBUFFER,Mt.__webglMultisampledFramebuffer)}else if(E.depthBuffer&&E.resolveDepthBuffer===!1&&h){const x=E.stencilBuffer?s.DEPTH_STENCIL_ATTACHMENT:s.DEPTH_ATTACHMENT;s.invalidateFramebuffer(s.DRAW_FRAMEBUFFER,[x])}}}function se(E){return Math.min(n.maxSamples,E.samples)}function pt(E){const x=i.get(E);return E.samples>0&&t.has("WEBGL_multisampled_render_to_texture")===!0&&x.__useRenderToTexture!==!1}function zt(E){const x=a.render.frame;c.get(E)!==x&&(c.set(E,x),E.update())}function Ee(E,x){const O=E.colorSpace,Y=E.format,K=E.type;return E.isCompressedTexture===!0||E.isVideoTexture===!0||O!==rs&&O!==tn&&(Xt.getTransfer(O)===Zt?(Y!==li||K!==xi)&&console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",O)),x}function fe(E){return typeof HTMLImageElement<"u"&&E instanceof HTMLImageElement?(l.width=E.naturalWidth||E.width,l.height=E.naturalHeight||E.height):typeof VideoFrame<"u"&&E instanceof VideoFrame?(l.width=E.displayWidth,l.height=E.displayHeight):(l.width=E.width,l.height=E.height),l}this.allocateTextureUnit=F,this.resetTextureUnits=B,this.setTexture2D=W,this.setTexture2DArray=X,this.setTexture3D=Q,this.setTextureCube=H,this.rebindTextures=Wt,this.setupRenderTarget=P,this.updateRenderTargetMipmap=te,this.updateMultisampleRenderTarget=St,this.setupDepthRenderbuffer=de,this.setupFrameBufferTexture=At,this.useMultisampledRTT=pt}function r0(s,t){function e(i,n=tn){let r;const a=Xt.getTransfer(n);if(i===xi)return s.UNSIGNED_BYTE;if(i===Ja)return s.UNSIGNED_SHORT_4_4_4_4;if(i===Qa)return s.UNSIGNED_SHORT_5_5_5_1;if(i===Eh)return s.UNSIGNED_INT_5_9_9_9_REV;if(i===Sh)return s.BYTE;if(i===bh)return s.SHORT;if(i===Gs)return s.UNSIGNED_SHORT;if(i===$a)return s.INT;if(i===bn)return s.UNSIGNED_INT;if(i===Fi)return s.FLOAT;if(i===Hs)return s.HALF_FLOAT;if(i===Th)return s.ALPHA;if(i===Ah)return s.RGB;if(i===li)return s.RGBA;if(i===Ws)return s.DEPTH_COMPONENT;if(i===Xs)return s.DEPTH_STENCIL;if(i===wh)return s.RED;if(i===to)return s.RED_INTEGER;if(i===Rh)return s.RG;if(i===eo)return s.RG_INTEGER;if(i===io)return s.RGBA_INTEGER;if(i===wr||i===Rr||i===Cr||i===Pr)if(a===Zt)if(r=t.get("WEBGL_compressed_texture_s3tc_srgb"),r!==null){if(i===wr)return r.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(i===Rr)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(i===Cr)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(i===Pr)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(r=t.get("WEBGL_compressed_texture_s3tc"),r!==null){if(i===wr)return r.COMPRESSED_RGB_S3TC_DXT1_EXT;if(i===Rr)return r.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(i===Cr)return r.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(i===Pr)return r.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(i===no||i===so||i===ro||i===ao)if(r=t.get("WEBGL_compressed_texture_pvrtc"),r!==null){if(i===no)return r.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(i===so)return r.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(i===ro)return r.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(i===ao)return r.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(i===oo||i===lo||i===ho)if(r=t.get("WEBGL_compressed_texture_etc"),r!==null){if(i===oo||i===lo)return a===Zt?r.COMPRESSED_SRGB8_ETC2:r.COMPRESSED_RGB8_ETC2;if(i===ho)return a===Zt?r.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:r.COMPRESSED_RGBA8_ETC2_EAC}else return null;if(i===co||i===uo||i===fo||i===po||i===mo||i===go||i===_o||i===xo||i===vo||i===yo||i===Mo||i===So||i===bo||i===Eo)if(r=t.get("WEBGL_compressed_texture_astc"),r!==null){if(i===co)return a===Zt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:r.COMPRESSED_RGBA_ASTC_4x4_KHR;if(i===uo)return a===Zt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:r.COMPRESSED_RGBA_ASTC_5x4_KHR;if(i===fo)return a===Zt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:r.COMPRESSED_RGBA_ASTC_5x5_KHR;if(i===po)return a===Zt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:r.COMPRESSED_RGBA_ASTC_6x5_KHR;if(i===mo)return a===Zt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:r.COMPRESSED_RGBA_ASTC_6x6_KHR;if(i===go)return a===Zt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:r.COMPRESSED_RGBA_ASTC_8x5_KHR;if(i===_o)return a===Zt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:r.COMPRESSED_RGBA_ASTC_8x6_KHR;if(i===xo)return a===Zt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:r.COMPRESSED_RGBA_ASTC_8x8_KHR;if(i===vo)return a===Zt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:r.COMPRESSED_RGBA_ASTC_10x5_KHR;if(i===yo)return a===Zt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:r.COMPRESSED_RGBA_ASTC_10x6_KHR;if(i===Mo)return a===Zt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:r.COMPRESSED_RGBA_ASTC_10x8_KHR;if(i===So)return a===Zt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:r.COMPRESSED_RGBA_ASTC_10x10_KHR;if(i===bo)return a===Zt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:r.COMPRESSED_RGBA_ASTC_12x10_KHR;if(i===Eo)return a===Zt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:r.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(i===Ir||i===To||i===Ao)if(r=t.get("EXT_texture_compression_bptc"),r!==null){if(i===Ir)return a===Zt?r.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:r.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(i===To)return r.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(i===Ao)return r.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(i===Ch||i===wo||i===Ro||i===Co)if(r=t.get("EXT_texture_compression_rgtc"),r!==null){if(i===Ir)return r.COMPRESSED_RED_RGTC1_EXT;if(i===wo)return r.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(i===Ro)return r.COMPRESSED_RED_GREEN_RGTC2_EXT;if(i===Co)return r.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return i===Vs?s.UNSIGNED_INT_24_8:s[i]!==void 0?s[i]:null}return{convert:e}}class qc extends Pe{constructor(t=null){super(),this.sourceTexture=t,this.isExternalTexture=!0}}const a0=`
|
|
3931
|
+
}`;function eC(s,t,e){let i=new iA;const n=new Nt,r=new Nt,a=new ce,o=new qd({depthPacking:ld}),l=new Kd,A={},h=e.maxTextureSize,c={[qi]:Oe,[Oe]:qi,[Bi]:Bi},u=new on({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new Nt},radius:{value:4}},vertexShader:$m,fragmentShader:tC}),d=u.clone();d.defines.HORIZONTAL_PASS=1;const p=new Rn;p.setAttribute("position",new vi(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const m=new Ei(p,u),g=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=pl;let f=this.type;this.render=function(T,_,P){if(g.enabled===!1||g.autoUpdate===!1&&g.needsUpdate===!1||T.length===0)return;const E=s.getRenderTarget(),v=s.getActiveCubeFace(),b=s.getActiveMipmapLevel(),z=s.state;z.setBlending(Ki),z.buffers.depth.getReversed()?z.buffers.color.setClear(0,0,0,0):z.buffers.color.setClear(1,1,1,1),z.buffers.depth.setTest(!0),z.setScissorTest(!1);const F=f!==Ni&&this.type===Ni,U=f===Ni&&this.type!==Ni;for(let W=0,Y=T.length;W<Y;W++){const $=T[W],H=$.shadow;if(H===void 0){console.warn("THREE.WebGLShadowMap:",$,"has no shadow.");continue}if(H.autoUpdate===!1&&H.needsUpdate===!1)continue;n.copy(H.mapSize);const rt=H.getFrameExtents();if(n.multiply(rt),r.copy(H.mapSize),(n.x>h||n.y>h)&&(n.x>h&&(r.x=Math.floor(h/rt.x),n.x=r.x*rt.x,H.mapSize.x=r.x),n.y>h&&(r.y=Math.floor(h/rt.y),n.y=r.y*rt.y,H.mapSize.y=r.y)),H.map===null||F===!0||U===!0){const mt=this.type!==Ni?{minFilter:hi,magFilter:hi}:{};H.map!==null&&H.map.dispose(),H.map=new bn(n.x,n.y,mt),H.map.texture.name=$.name+".shadowMap",H.camera.updateProjectionMatrix()}s.setRenderTarget(H.map),s.clear();const lt=H.getViewportCount();for(let mt=0;mt<lt;mt++){const Ut=H.getViewport(mt);a.set(r.x*Ut.x,r.y*Ut.y,r.x*Ut.z,r.y*Ut.w),z.viewport(a),H.updateMatrices($,mt),i=H.getFrustum(),x(_,P,H.camera,$,this.type)}H.isPointLightShadow!==!0&&this.type===Ni&&M(H,P),H.needsUpdate=!1}f=this.type,g.needsUpdate=!1,s.setRenderTarget(E,v,b)};function M(T,_){const P=t.update(m);u.defines.VSM_SAMPLES!==T.blurSamples&&(u.defines.VSM_SAMPLES=T.blurSamples,d.defines.VSM_SAMPLES=T.blurSamples,u.needsUpdate=!0,d.needsUpdate=!0),T.mapPass===null&&(T.mapPass=new bn(n.x,n.y)),u.uniforms.shadow_pass.value=T.map.texture,u.uniforms.resolution.value=T.mapSize,u.uniforms.radius.value=T.radius,s.setRenderTarget(T.mapPass),s.clear(),s.renderBufferDirect(_,null,P,u,m,null),d.uniforms.shadow_pass.value=T.mapPass.texture,d.uniforms.resolution.value=T.mapSize,d.uniforms.radius.value=T.radius,s.setRenderTarget(T.map),s.clear(),s.renderBufferDirect(_,null,P,d,m,null)}function y(T,_,P,E){let v=null;const b=P.isPointLight===!0?T.customDistanceMaterial:T.customDepthMaterial;if(b!==void 0)v=b;else if(v=P.isPointLight===!0?l:o,s.localClippingEnabled&&_.clipShadows===!0&&Array.isArray(_.clippingPlanes)&&_.clippingPlanes.length!==0||_.displacementMap&&_.displacementScale!==0||_.alphaMap&&_.alphaTest>0||_.map&&_.alphaTest>0||_.alphaToCoverage===!0){const z=v.uuid,F=_.uuid;let U=A[z];U===void 0&&(U={},A[z]=U);let W=U[F];W===void 0&&(W=v.clone(),U[F]=W,_.addEventListener("dispose",w)),v=W}if(v.visible=_.visible,v.wireframe=_.wireframe,E===Ni?v.side=_.shadowSide!==null?_.shadowSide:_.side:v.side=_.shadowSide!==null?_.shadowSide:c[_.side],v.alphaMap=_.alphaMap,v.alphaTest=_.alphaToCoverage===!0?.5:_.alphaTest,v.map=_.map,v.clipShadows=_.clipShadows,v.clippingPlanes=_.clippingPlanes,v.clipIntersection=_.clipIntersection,v.displacementMap=_.displacementMap,v.displacementScale=_.displacementScale,v.displacementBias=_.displacementBias,v.wireframeLinewidth=_.wireframeLinewidth,v.linewidth=_.linewidth,P.isPointLight===!0&&v.isMeshDistanceMaterial===!0){const z=s.properties.get(v);z.light=P}return v}function x(T,_,P,E,v){if(T.visible===!1)return;if(T.layers.test(_.layers)&&(T.isMesh||T.isLine||T.isPoints)&&(T.castShadow||T.receiveShadow&&v===Ni)&&(!T.frustumCulled||i.intersectsObject(T))){T.modelViewMatrix.multiplyMatrices(P.matrixWorldInverse,T.matrixWorld);const F=t.update(T),U=T.material;if(Array.isArray(U)){const W=F.groups;for(let Y=0,$=W.length;Y<$;Y++){const H=W[Y],rt=U[H.materialIndex];if(rt&&rt.visible){const lt=y(T,rt,E,v);T.onBeforeShadow(s,T,_,P,F,lt,H),s.renderBufferDirect(P,null,F,lt,T,H),T.onAfterShadow(s,T,_,P,F,lt,H)}}}else if(U.visible){const W=y(T,U,E,v);T.onBeforeShadow(s,T,_,P,F,W,null),s.renderBufferDirect(P,null,F,W,T,null),T.onAfterShadow(s,T,_,P,F,W,null)}}const z=T.children;for(let F=0,U=z.length;F<U;F++)x(z[F],_,P,E,v)}function w(T){T.target.removeEventListener("dispose",w);for(const P in A){const E=A[P],v=T.target.uuid;v in E&&(E[v].dispose(),delete E[v])}}}const iC={[za]:ka,[Ga]:Wa,[Ha]:Ya,[is]:Va,[ka]:za,[Wa]:Ga,[Ya]:Ha,[Va]:is};function nC(s,t){function e(){let D=!1;const et=new ce;let st=null;const dt=new ce(0,0,0,0);return{setMask:function(q){st!==q&&!D&&(s.colorMask(q,q,q,q),st=q)},setLocked:function(q){D=q},setClear:function(q,J,pt,Dt,ne){ne===!0&&(q*=Dt,J*=Dt,pt*=Dt),et.set(q,J,pt,Dt),dt.equals(et)===!1&&(s.clearColor(q,J,pt,Dt),dt.copy(et))},reset:function(){D=!1,st=null,dt.set(-1,0,0,0)}}}function i(){let D=!1,et=!1,st=null,dt=null,q=null;return{setReversed:function(J){if(et!==J){const pt=t.get("EXT_clip_control");J?pt.clipControlEXT(pt.LOWER_LEFT_EXT,pt.ZERO_TO_ONE_EXT):pt.clipControlEXT(pt.LOWER_LEFT_EXT,pt.NEGATIVE_ONE_TO_ONE_EXT),et=J;const Dt=q;q=null,this.setClear(Dt)}},getReversed:function(){return et},setTest:function(J){J?nt(s.DEPTH_TEST):bt(s.DEPTH_TEST)},setMask:function(J){st!==J&&!D&&(s.depthMask(J),st=J)},setFunc:function(J){if(et&&(J=iC[J]),dt!==J){switch(J){case za:s.depthFunc(s.NEVER);break;case ka:s.depthFunc(s.ALWAYS);break;case Ga:s.depthFunc(s.LESS);break;case is:s.depthFunc(s.LEQUAL);break;case Ha:s.depthFunc(s.EQUAL);break;case Va:s.depthFunc(s.GEQUAL);break;case Wa:s.depthFunc(s.GREATER);break;case Ya:s.depthFunc(s.NOTEQUAL);break;default:s.depthFunc(s.LEQUAL)}dt=J}},setLocked:function(J){D=J},setClear:function(J){q!==J&&(et&&(J=1-J),s.clearDepth(J),q=J)},reset:function(){D=!1,st=null,dt=null,q=null,et=!1}}}function n(){let D=!1,et=null,st=null,dt=null,q=null,J=null,pt=null,Dt=null,ne=null;return{setTest:function(Jt){D||(Jt?nt(s.STENCIL_TEST):bt(s.STENCIL_TEST))},setMask:function(Jt){et!==Jt&&!D&&(s.stencilMask(Jt),et=Jt)},setFunc:function(Jt,Vi,Si){(st!==Jt||dt!==Vi||q!==Si)&&(s.stencilFunc(Jt,Vi,Si),st=Jt,dt=Vi,q=Si)},setOp:function(Jt,Vi,Si){(J!==Jt||pt!==Vi||Dt!==Si)&&(s.stencilOp(Jt,Vi,Si),J=Jt,pt=Vi,Dt=Si)},setLocked:function(Jt){D=Jt},setClear:function(Jt){ne!==Jt&&(s.clearStencil(Jt),ne=Jt)},reset:function(){D=!1,et=null,st=null,dt=null,q=null,J=null,pt=null,Dt=null,ne=null}}}const r=new e,a=new i,o=new n,l=new WeakMap,A=new WeakMap;let h={},c={},u=new WeakMap,d=[],p=null,m=!1,g=null,f=null,M=null,y=null,x=null,w=null,T=null,_=new Wt(0,0,0),P=0,E=!1,v=null,b=null,z=null,F=null,U=null;const W=s.getParameter(s.MAX_COMBINED_TEXTURE_IMAGE_UNITS);let Y=!1,$=0;const H=s.getParameter(s.VERSION);H.indexOf("WebGL")!==-1?($=parseFloat(/^WebGL (\d)/.exec(H)[1]),Y=$>=1):H.indexOf("OpenGL ES")!==-1&&($=parseFloat(/^OpenGL ES (\d)/.exec(H)[1]),Y=$>=2);let rt=null,lt={};const mt=s.getParameter(s.SCISSOR_BOX),Ut=s.getParameter(s.VIEWPORT),re=new ce().fromArray(mt),te=new ce().fromArray(Ut);function j(D,et,st,dt){const q=new Uint8Array(4),J=s.createTexture();s.bindTexture(D,J),s.texParameteri(D,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(D,s.TEXTURE_MAG_FILTER,s.NEAREST);for(let pt=0;pt<st;pt++)D===s.TEXTURE_3D||D===s.TEXTURE_2D_ARRAY?s.texImage3D(et,0,s.RGBA,1,1,dt,0,s.RGBA,s.UNSIGNED_BYTE,q):s.texImage2D(et+pt,0,s.RGBA,1,1,0,s.RGBA,s.UNSIGNED_BYTE,q);return J}const ot={};ot[s.TEXTURE_2D]=j(s.TEXTURE_2D,s.TEXTURE_2D,1),ot[s.TEXTURE_CUBE_MAP]=j(s.TEXTURE_CUBE_MAP,s.TEXTURE_CUBE_MAP_POSITIVE_X,6),ot[s.TEXTURE_2D_ARRAY]=j(s.TEXTURE_2D_ARRAY,s.TEXTURE_2D_ARRAY,1,1),ot[s.TEXTURE_3D]=j(s.TEXTURE_3D,s.TEXTURE_3D,1,1),r.setClear(0,0,0,1),a.setClear(1),o.setClear(0),nt(s.DEPTH_TEST),a.setFunc(is),jt(!1),Et(gl),nt(s.CULL_FACE),ie(Ki);function nt(D){h[D]!==!0&&(s.enable(D),h[D]=!0)}function bt(D){h[D]!==!1&&(s.disable(D),h[D]=!1)}function Tt(D,et){return c[D]!==et?(s.bindFramebuffer(D,et),c[D]=et,D===s.DRAW_FRAMEBUFFER&&(c[s.FRAMEBUFFER]=et),D===s.FRAMEBUFFER&&(c[s.DRAW_FRAMEBUFFER]=et),!0):!1}function Pt(D,et){let st=d,dt=!1;if(D){st=u.get(et),st===void 0&&(st=[],u.set(et,st));const q=D.textures;if(st.length!==q.length||st[0]!==s.COLOR_ATTACHMENT0){for(let J=0,pt=q.length;J<pt;J++)st[J]=s.COLOR_ATTACHMENT0+J;st.length=q.length,dt=!0}}else st[0]!==s.BACK&&(st[0]=s.BACK,dt=!0);dt&&s.drawBuffers(st)}function fe(D){return p!==D?(s.useProgram(D),p=D,!0):!1}const Yt={[xn]:s.FUNC_ADD,[Bu]:s.FUNC_SUBTRACT,[Fu]:s.FUNC_REVERSE_SUBTRACT};Yt[Ou]=s.MIN,Yt[Uu]=s.MAX;const R={[zu]:s.ZERO,[ku]:s.ONE,[Gu]:s.SRC_COLOR,[Oa]:s.SRC_ALPHA,[Zu]:s.SRC_ALPHA_SATURATE,[Yu]:s.DST_COLOR,[Vu]:s.DST_ALPHA,[Hu]:s.ONE_MINUS_SRC_COLOR,[Ua]:s.ONE_MINUS_SRC_ALPHA,[Xu]:s.ONE_MINUS_DST_COLOR,[Wu]:s.ONE_MINUS_DST_ALPHA,[ju]:s.CONSTANT_COLOR,[Ju]:s.ONE_MINUS_CONSTANT_COLOR,[Qu]:s.CONSTANT_ALPHA,[qu]:s.ONE_MINUS_CONSTANT_ALPHA};function ie(D,et,st,dt,q,J,pt,Dt,ne,Jt){if(D===Ki){m===!0&&(bt(s.BLEND),m=!1);return}if(m===!1&&(nt(s.BLEND),m=!0),D!==Nu){if(D!==g||Jt!==E){if((f!==xn||x!==xn)&&(s.blendEquation(s.FUNC_ADD),f=xn,x=xn),Jt)switch(D){case es:s.blendFuncSeparate(s.ONE,s.ONE_MINUS_SRC_ALPHA,s.ONE,s.ONE_MINUS_SRC_ALPHA);break;case ml:s.blendFunc(s.ONE,s.ONE);break;case Cl:s.blendFuncSeparate(s.ZERO,s.ONE_MINUS_SRC_COLOR,s.ZERO,s.ONE);break;case Il:s.blendFuncSeparate(s.DST_COLOR,s.ONE_MINUS_SRC_ALPHA,s.ZERO,s.ONE);break;default:console.error("THREE.WebGLState: Invalid blending: ",D);break}else switch(D){case es:s.blendFuncSeparate(s.SRC_ALPHA,s.ONE_MINUS_SRC_ALPHA,s.ONE,s.ONE_MINUS_SRC_ALPHA);break;case ml:s.blendFuncSeparate(s.SRC_ALPHA,s.ONE,s.ONE,s.ONE);break;case Cl:console.error("THREE.WebGLState: SubtractiveBlending requires material.premultipliedAlpha = true");break;case Il:console.error("THREE.WebGLState: MultiplyBlending requires material.premultipliedAlpha = true");break;default:console.error("THREE.WebGLState: Invalid blending: ",D);break}M=null,y=null,w=null,T=null,_.set(0,0,0),P=0,g=D,E=Jt}return}q=q||et,J=J||st,pt=pt||dt,(et!==f||q!==x)&&(s.blendEquationSeparate(Yt[et],Yt[q]),f=et,x=q),(st!==M||dt!==y||J!==w||pt!==T)&&(s.blendFuncSeparate(R[st],R[dt],R[J],R[pt]),M=st,y=dt,w=J,T=pt),(Dt.equals(_)===!1||ne!==P)&&(s.blendColor(Dt.r,Dt.g,Dt.b,ne),_.copy(Dt),P=ne),g=D,E=!1}function St(D,et){D.side===Bi?bt(s.CULL_FACE):nt(s.CULL_FACE);let st=D.side===Oe;et&&(st=!st),jt(st),D.blending===es&&D.transparent===!1?ie(Ki):ie(D.blending,D.blendEquation,D.blendSrc,D.blendDst,D.blendEquationAlpha,D.blendSrcAlpha,D.blendDstAlpha,D.blendColor,D.blendAlpha,D.premultipliedAlpha),a.setFunc(D.depthFunc),a.setTest(D.depthTest),a.setMask(D.depthWrite),r.setMask(D.colorWrite);const dt=D.stencilWrite;o.setTest(dt),dt&&(o.setMask(D.stencilWriteMask),o.setFunc(D.stencilFunc,D.stencilRef,D.stencilFuncMask),o.setOp(D.stencilFail,D.stencilZFail,D.stencilZPass)),ft(D.polygonOffset,D.polygonOffsetFactor,D.polygonOffsetUnits),D.alphaToCoverage===!0?nt(s.SAMPLE_ALPHA_TO_COVERAGE):bt(s.SAMPLE_ALPHA_TO_COVERAGE)}function jt(D){v!==D&&(D?s.frontFace(s.CW):s.frontFace(s.CCW),v=D)}function Et(D){D!==Pu?(nt(s.CULL_FACE),D!==b&&(D===gl?s.cullFace(s.BACK):D===Du?s.cullFace(s.FRONT):s.cullFace(s.FRONT_AND_BACK))):bt(s.CULL_FACE),b=D}function ae(D){D!==z&&(Y&&s.lineWidth(D),z=D)}function ft(D,et,st){D?(nt(s.POLYGON_OFFSET_FILL),(F!==et||U!==st)&&(s.polygonOffset(et,st),F=et,U=st)):bt(s.POLYGON_OFFSET_FILL)}function zt(D){D?nt(s.SCISSOR_TEST):bt(s.SCISSOR_TEST)}function Se(D){D===void 0&&(D=s.TEXTURE0+W-1),rt!==D&&(s.activeTexture(D),rt=D)}function ge(D,et,st){st===void 0&&(rt===null?st=s.TEXTURE0+W-1:st=rt);let dt=lt[st];dt===void 0&&(dt={type:void 0,texture:void 0},lt[st]=dt),(dt.type!==D||dt.texture!==et)&&(rt!==st&&(s.activeTexture(st),rt=st),s.bindTexture(D,et||ot[D]),dt.type=D,dt.texture=et)}function S(){const D=lt[rt];D!==void 0&&D.type!==void 0&&(s.bindTexture(D.type,null),D.type=void 0,D.texture=void 0)}function C(){try{s.compressedTexImage2D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function O(){try{s.compressedTexImage3D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function Z(){try{s.texSubImage2D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function Q(){try{s.texSubImage3D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function X(){try{s.compressedTexSubImage2D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function vt(){try{s.compressedTexSubImage3D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function it(){try{s.texStorage2D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function Ct(){try{s.texStorage3D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function It(){try{s.texImage2D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function tt(){try{s.texImage3D(...arguments)}catch(D){console.error("THREE.WebGLState:",D)}}function ct(D){re.equals(D)===!1&&(s.scissor(D.x,D.y,D.z,D.w),re.copy(D))}function _t(D){te.equals(D)===!1&&(s.viewport(D.x,D.y,D.z,D.w),te.copy(D))}function xt(D,et){let st=A.get(et);st===void 0&&(st=new WeakMap,A.set(et,st));let dt=st.get(D);dt===void 0&&(dt=s.getUniformBlockIndex(et,D.name),st.set(D,dt))}function At(D,et){const dt=A.get(et).get(D);l.get(et)!==dt&&(s.uniformBlockBinding(et,dt,D.__bindingPointIndex),l.set(et,dt))}function Ft(){s.disable(s.BLEND),s.disable(s.CULL_FACE),s.disable(s.DEPTH_TEST),s.disable(s.POLYGON_OFFSET_FILL),s.disable(s.SCISSOR_TEST),s.disable(s.STENCIL_TEST),s.disable(s.SAMPLE_ALPHA_TO_COVERAGE),s.blendEquation(s.FUNC_ADD),s.blendFunc(s.ONE,s.ZERO),s.blendFuncSeparate(s.ONE,s.ZERO,s.ONE,s.ZERO),s.blendColor(0,0,0,0),s.colorMask(!0,!0,!0,!0),s.clearColor(0,0,0,0),s.depthMask(!0),s.depthFunc(s.LESS),a.setReversed(!1),s.clearDepth(1),s.stencilMask(4294967295),s.stencilFunc(s.ALWAYS,0,4294967295),s.stencilOp(s.KEEP,s.KEEP,s.KEEP),s.clearStencil(0),s.cullFace(s.BACK),s.frontFace(s.CCW),s.polygonOffset(0,0),s.activeTexture(s.TEXTURE0),s.bindFramebuffer(s.FRAMEBUFFER,null),s.bindFramebuffer(s.DRAW_FRAMEBUFFER,null),s.bindFramebuffer(s.READ_FRAMEBUFFER,null),s.useProgram(null),s.lineWidth(1),s.scissor(0,0,s.canvas.width,s.canvas.height),s.viewport(0,0,s.canvas.width,s.canvas.height),h={},rt=null,lt={},c={},u=new WeakMap,d=[],p=null,m=!1,g=null,f=null,M=null,y=null,x=null,w=null,T=null,_=new Wt(0,0,0),P=0,E=!1,v=null,b=null,z=null,F=null,U=null,re.set(0,0,s.canvas.width,s.canvas.height),te.set(0,0,s.canvas.width,s.canvas.height),r.reset(),a.reset(),o.reset()}return{buffers:{color:r,depth:a,stencil:o},enable:nt,disable:bt,bindFramebuffer:Tt,drawBuffers:Pt,useProgram:fe,setBlending:ie,setMaterial:St,setFlipSided:jt,setCullFace:Et,setLineWidth:ae,setPolygonOffset:ft,setScissorTest:zt,activeTexture:Se,bindTexture:ge,unbindTexture:S,compressedTexImage2D:C,compressedTexImage3D:O,texImage2D:It,texImage3D:tt,updateUBOMapping:xt,uniformBlockBinding:At,texStorage2D:it,texStorage3D:Ct,texSubImage2D:Z,texSubImage3D:Q,compressedTexSubImage2D:X,compressedTexSubImage3D:vt,scissor:ct,viewport:_t,reset:Ft}}function sC(s,t,e,i,n,r,a){const o=t.has("WEBGL_multisampled_render_to_texture")?t.get("WEBGL_multisampled_render_to_texture"):null,l=typeof navigator>"u"?!1:/OculusBrowser/g.test(navigator.userAgent),A=new Nt,h=new WeakMap;let c;const u=new WeakMap;let d=!1;try{d=typeof OffscreenCanvas<"u"&&new OffscreenCanvas(1,1).getContext("2d")!==null}catch{}function p(S,C){return d?new OffscreenCanvas(S,C):js("canvas")}function m(S,C,O){let Z=1;const Q=ge(S);if((Q.width>O||Q.height>O)&&(Z=O/Math.max(Q.width,Q.height)),Z<1)if(typeof HTMLImageElement<"u"&&S instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&S instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&S instanceof ImageBitmap||typeof VideoFrame<"u"&&S instanceof VideoFrame){const X=Math.floor(Z*Q.width),vt=Math.floor(Z*Q.height);c===void 0&&(c=p(X,vt));const it=C?p(X,vt):c;return it.width=X,it.height=vt,it.getContext("2d").drawImage(S,0,0,X,vt),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+Q.width+"x"+Q.height+") to ("+X+"x"+vt+")."),it}else return"data"in S&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+Q.width+"x"+Q.height+")."),S;return S}function g(S){return S.generateMipmaps}function f(S){s.generateMipmap(S)}function M(S){return S.isWebGLCubeRenderTarget?s.TEXTURE_CUBE_MAP:S.isWebGL3DRenderTarget?s.TEXTURE_3D:S.isWebGLArrayRenderTarget||S.isCompressedArrayTexture?s.TEXTURE_2D_ARRAY:s.TEXTURE_2D}function y(S,C,O,Z,Q=!1){if(S!==null){if(s[S]!==void 0)return s[S];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+S+"'")}let X=C;if(C===s.RED&&(O===s.FLOAT&&(X=s.R32F),O===s.HALF_FLOAT&&(X=s.R16F),O===s.UNSIGNED_BYTE&&(X=s.R8)),C===s.RED_INTEGER&&(O===s.UNSIGNED_BYTE&&(X=s.R8UI),O===s.UNSIGNED_SHORT&&(X=s.R16UI),O===s.UNSIGNED_INT&&(X=s.R32UI),O===s.BYTE&&(X=s.R8I),O===s.SHORT&&(X=s.R16I),O===s.INT&&(X=s.R32I)),C===s.RG&&(O===s.FLOAT&&(X=s.RG32F),O===s.HALF_FLOAT&&(X=s.RG16F),O===s.UNSIGNED_BYTE&&(X=s.RG8)),C===s.RG_INTEGER&&(O===s.UNSIGNED_BYTE&&(X=s.RG8UI),O===s.UNSIGNED_SHORT&&(X=s.RG16UI),O===s.UNSIGNED_INT&&(X=s.RG32UI),O===s.BYTE&&(X=s.RG8I),O===s.SHORT&&(X=s.RG16I),O===s.INT&&(X=s.RG32I)),C===s.RGB_INTEGER&&(O===s.UNSIGNED_BYTE&&(X=s.RGB8UI),O===s.UNSIGNED_SHORT&&(X=s.RGB16UI),O===s.UNSIGNED_INT&&(X=s.RGB32UI),O===s.BYTE&&(X=s.RGB8I),O===s.SHORT&&(X=s.RGB16I),O===s.INT&&(X=s.RGB32I)),C===s.RGBA_INTEGER&&(O===s.UNSIGNED_BYTE&&(X=s.RGBA8UI),O===s.UNSIGNED_SHORT&&(X=s.RGBA16UI),O===s.UNSIGNED_INT&&(X=s.RGBA32UI),O===s.BYTE&&(X=s.RGBA8I),O===s.SHORT&&(X=s.RGBA16I),O===s.INT&&(X=s.RGBA32I)),C===s.RGB&&O===s.UNSIGNED_INT_5_9_9_9_REV&&(X=s.RGB9_E5),C===s.RGBA){const vt=Q?Dr:Xt.getTransfer(Z);O===s.FLOAT&&(X=s.RGBA32F),O===s.HALF_FLOAT&&(X=s.RGBA16F),O===s.UNSIGNED_BYTE&&(X=vt===qt?s.SRGB8_ALPHA8:s.RGBA8),O===s.UNSIGNED_SHORT_4_4_4_4&&(X=s.RGBA4),O===s.UNSIGNED_SHORT_5_5_5_1&&(X=s.RGB5_A1)}return(X===s.R16F||X===s.R32F||X===s.RG16F||X===s.RG32F||X===s.RGBA16F||X===s.RGBA32F)&&t.get("EXT_color_buffer_float"),X}function x(S,C){let O;return S?C===null||C===yn||C===Vs?O=s.DEPTH24_STENCIL8:C===Fi?O=s.DEPTH32F_STENCIL8:C===Gs&&(O=s.DEPTH24_STENCIL8,console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):C===null||C===yn||C===Vs?O=s.DEPTH_COMPONENT24:C===Fi?O=s.DEPTH_COMPONENT32F:C===Gs&&(O=s.DEPTH_COMPONENT16),O}function w(S,C){return g(S)===!0||S.isFramebufferTexture&&S.minFilter!==hi&&S.minFilter!==mi?Math.log2(Math.max(C.width,C.height))+1:S.mipmaps!==void 0&&S.mipmaps.length>0?S.mipmaps.length:S.isCompressedTexture&&Array.isArray(S.image)?C.mipmaps.length:1}function T(S){const C=S.target;C.removeEventListener("dispose",T),P(C),C.isVideoTexture&&h.delete(C)}function _(S){const C=S.target;C.removeEventListener("dispose",_),v(C)}function P(S){const C=i.get(S);if(C.__webglInit===void 0)return;const O=S.source,Z=u.get(O);if(Z){const Q=Z[C.__cacheKey];Q.usedTimes--,Q.usedTimes===0&&E(S),Object.keys(Z).length===0&&u.delete(O)}i.remove(S)}function E(S){const C=i.get(S);s.deleteTexture(C.__webglTexture);const O=S.source,Z=u.get(O);delete Z[C.__cacheKey],a.memory.textures--}function v(S){const C=i.get(S);if(S.depthTexture&&(S.depthTexture.dispose(),i.remove(S.depthTexture)),S.isWebGLCubeRenderTarget)for(let Z=0;Z<6;Z++){if(Array.isArray(C.__webglFramebuffer[Z]))for(let Q=0;Q<C.__webglFramebuffer[Z].length;Q++)s.deleteFramebuffer(C.__webglFramebuffer[Z][Q]);else s.deleteFramebuffer(C.__webglFramebuffer[Z]);C.__webglDepthbuffer&&s.deleteRenderbuffer(C.__webglDepthbuffer[Z])}else{if(Array.isArray(C.__webglFramebuffer))for(let Z=0;Z<C.__webglFramebuffer.length;Z++)s.deleteFramebuffer(C.__webglFramebuffer[Z]);else s.deleteFramebuffer(C.__webglFramebuffer);if(C.__webglDepthbuffer&&s.deleteRenderbuffer(C.__webglDepthbuffer),C.__webglMultisampledFramebuffer&&s.deleteFramebuffer(C.__webglMultisampledFramebuffer),C.__webglColorRenderbuffer)for(let Z=0;Z<C.__webglColorRenderbuffer.length;Z++)C.__webglColorRenderbuffer[Z]&&s.deleteRenderbuffer(C.__webglColorRenderbuffer[Z]);C.__webglDepthRenderbuffer&&s.deleteRenderbuffer(C.__webglDepthRenderbuffer)}const O=S.textures;for(let Z=0,Q=O.length;Z<Q;Z++){const X=i.get(O[Z]);X.__webglTexture&&(s.deleteTexture(X.__webglTexture),a.memory.textures--),i.remove(O[Z])}i.remove(S)}let b=0;function z(){b=0}function F(){const S=b;return S>=n.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+S+" texture units while this GPU supports only "+n.maxTextures),b+=1,S}function U(S){const C=[];return C.push(S.wrapS),C.push(S.wrapT),C.push(S.wrapR||0),C.push(S.magFilter),C.push(S.minFilter),C.push(S.anisotropy),C.push(S.internalFormat),C.push(S.format),C.push(S.type),C.push(S.generateMipmaps),C.push(S.premultiplyAlpha),C.push(S.flipY),C.push(S.unpackAlignment),C.push(S.colorSpace),C.join()}function W(S,C){const O=i.get(S);if(S.isVideoTexture&&zt(S),S.isRenderTargetTexture===!1&&S.isExternalTexture!==!0&&S.version>0&&O.__version!==S.version){const Z=S.image;if(Z===null)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else if(Z.complete===!1)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{ot(O,S,C);return}}else S.isExternalTexture&&(O.__webglTexture=S.sourceTexture?S.sourceTexture:null);e.bindTexture(s.TEXTURE_2D,O.__webglTexture,s.TEXTURE0+C)}function Y(S,C){const O=i.get(S);if(S.isRenderTargetTexture===!1&&S.version>0&&O.__version!==S.version){ot(O,S,C);return}e.bindTexture(s.TEXTURE_2D_ARRAY,O.__webglTexture,s.TEXTURE0+C)}function $(S,C){const O=i.get(S);if(S.isRenderTargetTexture===!1&&S.version>0&&O.__version!==S.version){ot(O,S,C);return}e.bindTexture(s.TEXTURE_3D,O.__webglTexture,s.TEXTURE0+C)}function H(S,C){const O=i.get(S);if(S.version>0&&O.__version!==S.version){nt(O,S,C);return}e.bindTexture(s.TEXTURE_CUBE_MAP,O.__webglTexture,s.TEXTURE0+C)}const rt={[ja]:s.REPEAT,[vn]:s.CLAMP_TO_EDGE,[Ja]:s.MIRRORED_REPEAT},lt={[hi]:s.NEAREST,[od]:s.NEAREST_MIPMAP_NEAREST,[br]:s.NEAREST_MIPMAP_LINEAR,[mi]:s.LINEAR,[Qa]:s.LINEAR_MIPMAP_NEAREST,[En]:s.LINEAR_MIPMAP_LINEAR},mt={[cd]:s.NEVER,[md]:s.ALWAYS,[ud]:s.LESS,[Dl]:s.LEQUAL,[dd]:s.EQUAL,[pd]:s.GEQUAL,[fd]:s.GREATER,[gd]:s.NOTEQUAL};function Ut(S,C){if(C.type===Fi&&t.has("OES_texture_float_linear")===!1&&(C.magFilter===mi||C.magFilter===Qa||C.magFilter===br||C.magFilter===En||C.minFilter===mi||C.minFilter===Qa||C.minFilter===br||C.minFilter===En)&&console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),s.texParameteri(S,s.TEXTURE_WRAP_S,rt[C.wrapS]),s.texParameteri(S,s.TEXTURE_WRAP_T,rt[C.wrapT]),(S===s.TEXTURE_3D||S===s.TEXTURE_2D_ARRAY)&&s.texParameteri(S,s.TEXTURE_WRAP_R,rt[C.wrapR]),s.texParameteri(S,s.TEXTURE_MAG_FILTER,lt[C.magFilter]),s.texParameteri(S,s.TEXTURE_MIN_FILTER,lt[C.minFilter]),C.compareFunction&&(s.texParameteri(S,s.TEXTURE_COMPARE_MODE,s.COMPARE_REF_TO_TEXTURE),s.texParameteri(S,s.TEXTURE_COMPARE_FUNC,mt[C.compareFunction])),t.has("EXT_texture_filter_anisotropic")===!0){if(C.magFilter===hi||C.minFilter!==br&&C.minFilter!==En||C.type===Fi&&t.has("OES_texture_float_linear")===!1)return;if(C.anisotropy>1||i.get(C).__currentAnisotropy){const O=t.get("EXT_texture_filter_anisotropic");s.texParameterf(S,O.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(C.anisotropy,n.getMaxAnisotropy())),i.get(C).__currentAnisotropy=C.anisotropy}}}function re(S,C){let O=!1;S.__webglInit===void 0&&(S.__webglInit=!0,C.addEventListener("dispose",T));const Z=C.source;let Q=u.get(Z);Q===void 0&&(Q={},u.set(Z,Q));const X=U(C);if(X!==S.__cacheKey){Q[X]===void 0&&(Q[X]={texture:s.createTexture(),usedTimes:0},a.memory.textures++,O=!0),Q[X].usedTimes++;const vt=Q[S.__cacheKey];vt!==void 0&&(Q[S.__cacheKey].usedTimes--,vt.usedTimes===0&&E(C)),S.__cacheKey=X,S.__webglTexture=Q[X].texture}return O}function te(S,C,O){return Math.floor(Math.floor(S/O)/C)}function j(S,C,O,Z){const X=S.updateRanges;if(X.length===0)e.texSubImage2D(s.TEXTURE_2D,0,0,0,C.width,C.height,O,Z,C.data);else{X.sort((tt,ct)=>tt.start-ct.start);let vt=0;for(let tt=1;tt<X.length;tt++){const ct=X[vt],_t=X[tt],xt=ct.start+ct.count,At=te(_t.start,C.width,4),Ft=te(ct.start,C.width,4);_t.start<=xt+1&&At===Ft&&te(_t.start+_t.count-1,C.width,4)===At?ct.count=Math.max(ct.count,_t.start+_t.count-ct.start):(++vt,X[vt]=_t)}X.length=vt+1;const it=s.getParameter(s.UNPACK_ROW_LENGTH),Ct=s.getParameter(s.UNPACK_SKIP_PIXELS),It=s.getParameter(s.UNPACK_SKIP_ROWS);s.pixelStorei(s.UNPACK_ROW_LENGTH,C.width);for(let tt=0,ct=X.length;tt<ct;tt++){const _t=X[tt],xt=Math.floor(_t.start/4),At=Math.ceil(_t.count/4),Ft=xt%C.width,D=Math.floor(xt/C.width),et=At,st=1;s.pixelStorei(s.UNPACK_SKIP_PIXELS,Ft),s.pixelStorei(s.UNPACK_SKIP_ROWS,D),e.texSubImage2D(s.TEXTURE_2D,0,Ft,D,et,st,O,Z,C.data)}S.clearUpdateRanges(),s.pixelStorei(s.UNPACK_ROW_LENGTH,it),s.pixelStorei(s.UNPACK_SKIP_PIXELS,Ct),s.pixelStorei(s.UNPACK_SKIP_ROWS,It)}}function ot(S,C,O){let Z=s.TEXTURE_2D;(C.isDataArrayTexture||C.isCompressedArrayTexture)&&(Z=s.TEXTURE_2D_ARRAY),C.isData3DTexture&&(Z=s.TEXTURE_3D);const Q=re(S,C),X=C.source;e.bindTexture(Z,S.__webglTexture,s.TEXTURE0+O);const vt=i.get(X);if(X.version!==vt.__version||Q===!0){e.activeTexture(s.TEXTURE0+O);const it=Xt.getPrimaries(Xt.workingColorSpace),Ct=C.colorSpace===tn?null:Xt.getPrimaries(C.colorSpace),It=C.colorSpace===tn||it===Ct?s.NONE:s.BROWSER_DEFAULT_WEBGL;s.pixelStorei(s.UNPACK_FLIP_Y_WEBGL,C.flipY),s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,C.premultiplyAlpha),s.pixelStorei(s.UNPACK_ALIGNMENT,C.unpackAlignment),s.pixelStorei(s.UNPACK_COLORSPACE_CONVERSION_WEBGL,It);let tt=m(C.image,!1,n.maxTextureSize);tt=Se(C,tt);const ct=r.convert(C.format,C.colorSpace),_t=r.convert(C.type);let xt=y(C.internalFormat,ct,_t,C.colorSpace,C.isVideoTexture);Ut(Z,C);let At;const Ft=C.mipmaps,D=C.isVideoTexture!==!0,et=vt.__version===void 0||Q===!0,st=X.dataReady,dt=w(C,tt);if(C.isDepthTexture)xt=x(C.format===Ys,C.type),et&&(D?e.texStorage2D(s.TEXTURE_2D,1,xt,tt.width,tt.height):e.texImage2D(s.TEXTURE_2D,0,xt,tt.width,tt.height,0,ct,_t,null));else if(C.isDataTexture)if(Ft.length>0){D&&et&&e.texStorage2D(s.TEXTURE_2D,dt,xt,Ft[0].width,Ft[0].height);for(let q=0,J=Ft.length;q<J;q++)At=Ft[q],D?st&&e.texSubImage2D(s.TEXTURE_2D,q,0,0,At.width,At.height,ct,_t,At.data):e.texImage2D(s.TEXTURE_2D,q,xt,At.width,At.height,0,ct,_t,At.data);C.generateMipmaps=!1}else D?(et&&e.texStorage2D(s.TEXTURE_2D,dt,xt,tt.width,tt.height),st&&j(C,tt,ct,_t)):e.texImage2D(s.TEXTURE_2D,0,xt,tt.width,tt.height,0,ct,_t,tt.data);else if(C.isCompressedTexture)if(C.isCompressedArrayTexture){D&&et&&e.texStorage3D(s.TEXTURE_2D_ARRAY,dt,xt,Ft[0].width,Ft[0].height,tt.depth);for(let q=0,J=Ft.length;q<J;q++)if(At=Ft[q],C.format!==ci)if(ct!==null)if(D){if(st)if(C.layerUpdates.size>0){const pt=ph(At.width,At.height,C.format,C.type);for(const Dt of C.layerUpdates){const ne=At.data.subarray(Dt*pt/At.data.BYTES_PER_ELEMENT,(Dt+1)*pt/At.data.BYTES_PER_ELEMENT);e.compressedTexSubImage3D(s.TEXTURE_2D_ARRAY,q,0,0,Dt,At.width,At.height,1,ct,ne)}C.clearLayerUpdates()}else e.compressedTexSubImage3D(s.TEXTURE_2D_ARRAY,q,0,0,0,At.width,At.height,tt.depth,ct,At.data)}else e.compressedTexImage3D(s.TEXTURE_2D_ARRAY,q,xt,At.width,At.height,tt.depth,0,At.data,0,0);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else D?st&&e.texSubImage3D(s.TEXTURE_2D_ARRAY,q,0,0,0,At.width,At.height,tt.depth,ct,_t,At.data):e.texImage3D(s.TEXTURE_2D_ARRAY,q,xt,At.width,At.height,tt.depth,0,ct,_t,At.data)}else{D&&et&&e.texStorage2D(s.TEXTURE_2D,dt,xt,Ft[0].width,Ft[0].height);for(let q=0,J=Ft.length;q<J;q++)At=Ft[q],C.format!==ci?ct!==null?D?st&&e.compressedTexSubImage2D(s.TEXTURE_2D,q,0,0,At.width,At.height,ct,At.data):e.compressedTexImage2D(s.TEXTURE_2D,q,xt,At.width,At.height,0,At.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):D?st&&e.texSubImage2D(s.TEXTURE_2D,q,0,0,At.width,At.height,ct,_t,At.data):e.texImage2D(s.TEXTURE_2D,q,xt,At.width,At.height,0,ct,_t,At.data)}else if(C.isDataArrayTexture)if(D){if(et&&e.texStorage3D(s.TEXTURE_2D_ARRAY,dt,xt,tt.width,tt.height,tt.depth),st)if(C.layerUpdates.size>0){const q=ph(tt.width,tt.height,C.format,C.type);for(const J of C.layerUpdates){const pt=tt.data.subarray(J*q/tt.data.BYTES_PER_ELEMENT,(J+1)*q/tt.data.BYTES_PER_ELEMENT);e.texSubImage3D(s.TEXTURE_2D_ARRAY,0,0,0,J,tt.width,tt.height,1,ct,_t,pt)}C.clearLayerUpdates()}else e.texSubImage3D(s.TEXTURE_2D_ARRAY,0,0,0,0,tt.width,tt.height,tt.depth,ct,_t,tt.data)}else e.texImage3D(s.TEXTURE_2D_ARRAY,0,xt,tt.width,tt.height,tt.depth,0,ct,_t,tt.data);else if(C.isData3DTexture)D?(et&&e.texStorage3D(s.TEXTURE_3D,dt,xt,tt.width,tt.height,tt.depth),st&&e.texSubImage3D(s.TEXTURE_3D,0,0,0,0,tt.width,tt.height,tt.depth,ct,_t,tt.data)):e.texImage3D(s.TEXTURE_3D,0,xt,tt.width,tt.height,tt.depth,0,ct,_t,tt.data);else if(C.isFramebufferTexture){if(et)if(D)e.texStorage2D(s.TEXTURE_2D,dt,xt,tt.width,tt.height);else{let q=tt.width,J=tt.height;for(let pt=0;pt<dt;pt++)e.texImage2D(s.TEXTURE_2D,pt,xt,q,J,0,ct,_t,null),q>>=1,J>>=1}}else if(Ft.length>0){if(D&&et){const q=ge(Ft[0]);e.texStorage2D(s.TEXTURE_2D,dt,xt,q.width,q.height)}for(let q=0,J=Ft.length;q<J;q++)At=Ft[q],D?st&&e.texSubImage2D(s.TEXTURE_2D,q,0,0,ct,_t,At):e.texImage2D(s.TEXTURE_2D,q,xt,ct,_t,At);C.generateMipmaps=!1}else if(D){if(et){const q=ge(tt);e.texStorage2D(s.TEXTURE_2D,dt,xt,q.width,q.height)}st&&e.texSubImage2D(s.TEXTURE_2D,0,0,0,ct,_t,tt)}else e.texImage2D(s.TEXTURE_2D,0,xt,ct,_t,tt);g(C)&&f(Z),vt.__version=X.version,C.onUpdate&&C.onUpdate(C)}S.__version=C.version}function nt(S,C,O){if(C.image.length!==6)return;const Z=re(S,C),Q=C.source;e.bindTexture(s.TEXTURE_CUBE_MAP,S.__webglTexture,s.TEXTURE0+O);const X=i.get(Q);if(Q.version!==X.__version||Z===!0){e.activeTexture(s.TEXTURE0+O);const vt=Xt.getPrimaries(Xt.workingColorSpace),it=C.colorSpace===tn?null:Xt.getPrimaries(C.colorSpace),Ct=C.colorSpace===tn||vt===it?s.NONE:s.BROWSER_DEFAULT_WEBGL;s.pixelStorei(s.UNPACK_FLIP_Y_WEBGL,C.flipY),s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,C.premultiplyAlpha),s.pixelStorei(s.UNPACK_ALIGNMENT,C.unpackAlignment),s.pixelStorei(s.UNPACK_COLORSPACE_CONVERSION_WEBGL,Ct);const It=C.isCompressedTexture||C.image[0].isCompressedTexture,tt=C.image[0]&&C.image[0].isDataTexture,ct=[];for(let J=0;J<6;J++)!It&&!tt?ct[J]=m(C.image[J],!0,n.maxCubemapSize):ct[J]=tt?C.image[J].image:C.image[J],ct[J]=Se(C,ct[J]);const _t=ct[0],xt=r.convert(C.format,C.colorSpace),At=r.convert(C.type),Ft=y(C.internalFormat,xt,At,C.colorSpace),D=C.isVideoTexture!==!0,et=X.__version===void 0||Z===!0,st=Q.dataReady;let dt=w(C,_t);Ut(s.TEXTURE_CUBE_MAP,C);let q;if(It){D&&et&&e.texStorage2D(s.TEXTURE_CUBE_MAP,dt,Ft,_t.width,_t.height);for(let J=0;J<6;J++){q=ct[J].mipmaps;for(let pt=0;pt<q.length;pt++){const Dt=q[pt];C.format!==ci?xt!==null?D?st&&e.compressedTexSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,pt,0,0,Dt.width,Dt.height,xt,Dt.data):e.compressedTexImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,pt,Ft,Dt.width,Dt.height,0,Dt.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):D?st&&e.texSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,pt,0,0,Dt.width,Dt.height,xt,At,Dt.data):e.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,pt,Ft,Dt.width,Dt.height,0,xt,At,Dt.data)}}}else{if(q=C.mipmaps,D&&et){q.length>0&&dt++;const J=ge(ct[0]);e.texStorage2D(s.TEXTURE_CUBE_MAP,dt,Ft,J.width,J.height)}for(let J=0;J<6;J++)if(tt){D?st&&e.texSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,0,0,0,ct[J].width,ct[J].height,xt,At,ct[J].data):e.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,0,Ft,ct[J].width,ct[J].height,0,xt,At,ct[J].data);for(let pt=0;pt<q.length;pt++){const ne=q[pt].image[J].image;D?st&&e.texSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,pt+1,0,0,ne.width,ne.height,xt,At,ne.data):e.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,pt+1,Ft,ne.width,ne.height,0,xt,At,ne.data)}}else{D?st&&e.texSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,0,0,0,xt,At,ct[J]):e.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,0,Ft,xt,At,ct[J]);for(let pt=0;pt<q.length;pt++){const Dt=q[pt];D?st&&e.texSubImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,pt+1,0,0,xt,At,Dt.image[J]):e.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+J,pt+1,Ft,xt,At,Dt.image[J])}}}g(C)&&f(s.TEXTURE_CUBE_MAP),X.__version=Q.version,C.onUpdate&&C.onUpdate(C)}S.__version=C.version}function bt(S,C,O,Z,Q,X){const vt=r.convert(O.format,O.colorSpace),it=r.convert(O.type),Ct=y(O.internalFormat,vt,it,O.colorSpace),It=i.get(C),tt=i.get(O);if(tt.__renderTarget=C,!It.__hasExternalTextures){const ct=Math.max(1,C.width>>X),_t=Math.max(1,C.height>>X);Q===s.TEXTURE_3D||Q===s.TEXTURE_2D_ARRAY?e.texImage3D(Q,X,Ct,ct,_t,C.depth,0,vt,it,null):e.texImage2D(Q,X,Ct,ct,_t,0,vt,it,null)}e.bindFramebuffer(s.FRAMEBUFFER,S),ft(C)?o.framebufferTexture2DMultisampleEXT(s.FRAMEBUFFER,Z,Q,tt.__webglTexture,0,ae(C)):(Q===s.TEXTURE_2D||Q>=s.TEXTURE_CUBE_MAP_POSITIVE_X&&Q<=s.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&s.framebufferTexture2D(s.FRAMEBUFFER,Z,Q,tt.__webglTexture,X),e.bindFramebuffer(s.FRAMEBUFFER,null)}function Tt(S,C,O){if(s.bindRenderbuffer(s.RENDERBUFFER,S),C.depthBuffer){const Z=C.depthTexture,Q=Z&&Z.isDepthTexture?Z.type:null,X=x(C.stencilBuffer,Q),vt=C.stencilBuffer?s.DEPTH_STENCIL_ATTACHMENT:s.DEPTH_ATTACHMENT,it=ae(C);ft(C)?o.renderbufferStorageMultisampleEXT(s.RENDERBUFFER,it,X,C.width,C.height):O?s.renderbufferStorageMultisample(s.RENDERBUFFER,it,X,C.width,C.height):s.renderbufferStorage(s.RENDERBUFFER,X,C.width,C.height),s.framebufferRenderbuffer(s.FRAMEBUFFER,vt,s.RENDERBUFFER,S)}else{const Z=C.textures;for(let Q=0;Q<Z.length;Q++){const X=Z[Q],vt=r.convert(X.format,X.colorSpace),it=r.convert(X.type),Ct=y(X.internalFormat,vt,it,X.colorSpace),It=ae(C);O&&ft(C)===!1?s.renderbufferStorageMultisample(s.RENDERBUFFER,It,Ct,C.width,C.height):ft(C)?o.renderbufferStorageMultisampleEXT(s.RENDERBUFFER,It,Ct,C.width,C.height):s.renderbufferStorage(s.RENDERBUFFER,Ct,C.width,C.height)}}s.bindRenderbuffer(s.RENDERBUFFER,null)}function Pt(S,C){if(C&&C.isWebGLCubeRenderTarget)throw new Error("Depth Texture with cube render targets is not supported");if(e.bindFramebuffer(s.FRAMEBUFFER,S),!(C.depthTexture&&C.depthTexture.isDepthTexture))throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");const Z=i.get(C.depthTexture);Z.__renderTarget=C,(!Z.__webglTexture||C.depthTexture.image.width!==C.width||C.depthTexture.image.height!==C.height)&&(C.depthTexture.image.width=C.width,C.depthTexture.image.height=C.height,C.depthTexture.needsUpdate=!0),W(C.depthTexture,0);const Q=Z.__webglTexture,X=ae(C);if(C.depthTexture.format===Ws)ft(C)?o.framebufferTexture2DMultisampleEXT(s.FRAMEBUFFER,s.DEPTH_ATTACHMENT,s.TEXTURE_2D,Q,0,X):s.framebufferTexture2D(s.FRAMEBUFFER,s.DEPTH_ATTACHMENT,s.TEXTURE_2D,Q,0);else if(C.depthTexture.format===Ys)ft(C)?o.framebufferTexture2DMultisampleEXT(s.FRAMEBUFFER,s.DEPTH_STENCIL_ATTACHMENT,s.TEXTURE_2D,Q,0,X):s.framebufferTexture2D(s.FRAMEBUFFER,s.DEPTH_STENCIL_ATTACHMENT,s.TEXTURE_2D,Q,0);else throw new Error("Unknown depthTexture format")}function fe(S){const C=i.get(S),O=S.isWebGLCubeRenderTarget===!0;if(C.__boundDepthTexture!==S.depthTexture){const Z=S.depthTexture;if(C.__depthDisposeCallback&&C.__depthDisposeCallback(),Z){const Q=()=>{delete C.__boundDepthTexture,delete C.__depthDisposeCallback,Z.removeEventListener("dispose",Q)};Z.addEventListener("dispose",Q),C.__depthDisposeCallback=Q}C.__boundDepthTexture=Z}if(S.depthTexture&&!C.__autoAllocateDepthBuffer){if(O)throw new Error("target.depthTexture not supported in Cube render targets");const Z=S.texture.mipmaps;Z&&Z.length>0?Pt(C.__webglFramebuffer[0],S):Pt(C.__webglFramebuffer,S)}else if(O){C.__webglDepthbuffer=[];for(let Z=0;Z<6;Z++)if(e.bindFramebuffer(s.FRAMEBUFFER,C.__webglFramebuffer[Z]),C.__webglDepthbuffer[Z]===void 0)C.__webglDepthbuffer[Z]=s.createRenderbuffer(),Tt(C.__webglDepthbuffer[Z],S,!1);else{const Q=S.stencilBuffer?s.DEPTH_STENCIL_ATTACHMENT:s.DEPTH_ATTACHMENT,X=C.__webglDepthbuffer[Z];s.bindRenderbuffer(s.RENDERBUFFER,X),s.framebufferRenderbuffer(s.FRAMEBUFFER,Q,s.RENDERBUFFER,X)}}else{const Z=S.texture.mipmaps;if(Z&&Z.length>0?e.bindFramebuffer(s.FRAMEBUFFER,C.__webglFramebuffer[0]):e.bindFramebuffer(s.FRAMEBUFFER,C.__webglFramebuffer),C.__webglDepthbuffer===void 0)C.__webglDepthbuffer=s.createRenderbuffer(),Tt(C.__webglDepthbuffer,S,!1);else{const Q=S.stencilBuffer?s.DEPTH_STENCIL_ATTACHMENT:s.DEPTH_ATTACHMENT,X=C.__webglDepthbuffer;s.bindRenderbuffer(s.RENDERBUFFER,X),s.framebufferRenderbuffer(s.FRAMEBUFFER,Q,s.RENDERBUFFER,X)}}e.bindFramebuffer(s.FRAMEBUFFER,null)}function Yt(S,C,O){const Z=i.get(S);C!==void 0&&bt(Z.__webglFramebuffer,S,S.texture,s.COLOR_ATTACHMENT0,s.TEXTURE_2D,0),O!==void 0&&fe(S)}function R(S){const C=S.texture,O=i.get(S),Z=i.get(C);S.addEventListener("dispose",_);const Q=S.textures,X=S.isWebGLCubeRenderTarget===!0,vt=Q.length>1;if(vt||(Z.__webglTexture===void 0&&(Z.__webglTexture=s.createTexture()),Z.__version=C.version,a.memory.textures++),X){O.__webglFramebuffer=[];for(let it=0;it<6;it++)if(C.mipmaps&&C.mipmaps.length>0){O.__webglFramebuffer[it]=[];for(let Ct=0;Ct<C.mipmaps.length;Ct++)O.__webglFramebuffer[it][Ct]=s.createFramebuffer()}else O.__webglFramebuffer[it]=s.createFramebuffer()}else{if(C.mipmaps&&C.mipmaps.length>0){O.__webglFramebuffer=[];for(let it=0;it<C.mipmaps.length;it++)O.__webglFramebuffer[it]=s.createFramebuffer()}else O.__webglFramebuffer=s.createFramebuffer();if(vt)for(let it=0,Ct=Q.length;it<Ct;it++){const It=i.get(Q[it]);It.__webglTexture===void 0&&(It.__webglTexture=s.createTexture(),a.memory.textures++)}if(S.samples>0&&ft(S)===!1){O.__webglMultisampledFramebuffer=s.createFramebuffer(),O.__webglColorRenderbuffer=[],e.bindFramebuffer(s.FRAMEBUFFER,O.__webglMultisampledFramebuffer);for(let it=0;it<Q.length;it++){const Ct=Q[it];O.__webglColorRenderbuffer[it]=s.createRenderbuffer(),s.bindRenderbuffer(s.RENDERBUFFER,O.__webglColorRenderbuffer[it]);const It=r.convert(Ct.format,Ct.colorSpace),tt=r.convert(Ct.type),ct=y(Ct.internalFormat,It,tt,Ct.colorSpace,S.isXRRenderTarget===!0),_t=ae(S);s.renderbufferStorageMultisample(s.RENDERBUFFER,_t,ct,S.width,S.height),s.framebufferRenderbuffer(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0+it,s.RENDERBUFFER,O.__webglColorRenderbuffer[it])}s.bindRenderbuffer(s.RENDERBUFFER,null),S.depthBuffer&&(O.__webglDepthRenderbuffer=s.createRenderbuffer(),Tt(O.__webglDepthRenderbuffer,S,!0)),e.bindFramebuffer(s.FRAMEBUFFER,null)}}if(X){e.bindTexture(s.TEXTURE_CUBE_MAP,Z.__webglTexture),Ut(s.TEXTURE_CUBE_MAP,C);for(let it=0;it<6;it++)if(C.mipmaps&&C.mipmaps.length>0)for(let Ct=0;Ct<C.mipmaps.length;Ct++)bt(O.__webglFramebuffer[it][Ct],S,C,s.COLOR_ATTACHMENT0,s.TEXTURE_CUBE_MAP_POSITIVE_X+it,Ct);else bt(O.__webglFramebuffer[it],S,C,s.COLOR_ATTACHMENT0,s.TEXTURE_CUBE_MAP_POSITIVE_X+it,0);g(C)&&f(s.TEXTURE_CUBE_MAP),e.unbindTexture()}else if(vt){for(let it=0,Ct=Q.length;it<Ct;it++){const It=Q[it],tt=i.get(It);let ct=s.TEXTURE_2D;(S.isWebGL3DRenderTarget||S.isWebGLArrayRenderTarget)&&(ct=S.isWebGL3DRenderTarget?s.TEXTURE_3D:s.TEXTURE_2D_ARRAY),e.bindTexture(ct,tt.__webglTexture),Ut(ct,It),bt(O.__webglFramebuffer,S,It,s.COLOR_ATTACHMENT0+it,ct,0),g(It)&&f(ct)}e.unbindTexture()}else{let it=s.TEXTURE_2D;if((S.isWebGL3DRenderTarget||S.isWebGLArrayRenderTarget)&&(it=S.isWebGL3DRenderTarget?s.TEXTURE_3D:s.TEXTURE_2D_ARRAY),e.bindTexture(it,Z.__webglTexture),Ut(it,C),C.mipmaps&&C.mipmaps.length>0)for(let Ct=0;Ct<C.mipmaps.length;Ct++)bt(O.__webglFramebuffer[Ct],S,C,s.COLOR_ATTACHMENT0,it,Ct);else bt(O.__webglFramebuffer,S,C,s.COLOR_ATTACHMENT0,it,0);g(C)&&f(it),e.unbindTexture()}S.depthBuffer&&fe(S)}function ie(S){const C=S.textures;for(let O=0,Z=C.length;O<Z;O++){const Q=C[O];if(g(Q)){const X=M(S),vt=i.get(Q).__webglTexture;e.bindTexture(X,vt),f(X),e.unbindTexture()}}}const St=[],jt=[];function Et(S){if(S.samples>0){if(ft(S)===!1){const C=S.textures,O=S.width,Z=S.height;let Q=s.COLOR_BUFFER_BIT;const X=S.stencilBuffer?s.DEPTH_STENCIL_ATTACHMENT:s.DEPTH_ATTACHMENT,vt=i.get(S),it=C.length>1;if(it)for(let It=0;It<C.length;It++)e.bindFramebuffer(s.FRAMEBUFFER,vt.__webglMultisampledFramebuffer),s.framebufferRenderbuffer(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0+It,s.RENDERBUFFER,null),e.bindFramebuffer(s.FRAMEBUFFER,vt.__webglFramebuffer),s.framebufferTexture2D(s.DRAW_FRAMEBUFFER,s.COLOR_ATTACHMENT0+It,s.TEXTURE_2D,null,0);e.bindFramebuffer(s.READ_FRAMEBUFFER,vt.__webglMultisampledFramebuffer);const Ct=S.texture.mipmaps;Ct&&Ct.length>0?e.bindFramebuffer(s.DRAW_FRAMEBUFFER,vt.__webglFramebuffer[0]):e.bindFramebuffer(s.DRAW_FRAMEBUFFER,vt.__webglFramebuffer);for(let It=0;It<C.length;It++){if(S.resolveDepthBuffer&&(S.depthBuffer&&(Q|=s.DEPTH_BUFFER_BIT),S.stencilBuffer&&S.resolveStencilBuffer&&(Q|=s.STENCIL_BUFFER_BIT)),it){s.framebufferRenderbuffer(s.READ_FRAMEBUFFER,s.COLOR_ATTACHMENT0,s.RENDERBUFFER,vt.__webglColorRenderbuffer[It]);const tt=i.get(C[It]).__webglTexture;s.framebufferTexture2D(s.DRAW_FRAMEBUFFER,s.COLOR_ATTACHMENT0,s.TEXTURE_2D,tt,0)}s.blitFramebuffer(0,0,O,Z,0,0,O,Z,Q,s.NEAREST),l===!0&&(St.length=0,jt.length=0,St.push(s.COLOR_ATTACHMENT0+It),S.depthBuffer&&S.resolveDepthBuffer===!1&&(St.push(X),jt.push(X),s.invalidateFramebuffer(s.DRAW_FRAMEBUFFER,jt)),s.invalidateFramebuffer(s.READ_FRAMEBUFFER,St))}if(e.bindFramebuffer(s.READ_FRAMEBUFFER,null),e.bindFramebuffer(s.DRAW_FRAMEBUFFER,null),it)for(let It=0;It<C.length;It++){e.bindFramebuffer(s.FRAMEBUFFER,vt.__webglMultisampledFramebuffer),s.framebufferRenderbuffer(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0+It,s.RENDERBUFFER,vt.__webglColorRenderbuffer[It]);const tt=i.get(C[It]).__webglTexture;e.bindFramebuffer(s.FRAMEBUFFER,vt.__webglFramebuffer),s.framebufferTexture2D(s.DRAW_FRAMEBUFFER,s.COLOR_ATTACHMENT0+It,s.TEXTURE_2D,tt,0)}e.bindFramebuffer(s.DRAW_FRAMEBUFFER,vt.__webglMultisampledFramebuffer)}else if(S.depthBuffer&&S.resolveDepthBuffer===!1&&l){const C=S.stencilBuffer?s.DEPTH_STENCIL_ATTACHMENT:s.DEPTH_ATTACHMENT;s.invalidateFramebuffer(s.DRAW_FRAMEBUFFER,[C])}}}function ae(S){return Math.min(n.maxSamples,S.samples)}function ft(S){const C=i.get(S);return S.samples>0&&t.has("WEBGL_multisampled_render_to_texture")===!0&&C.__useRenderToTexture!==!1}function zt(S){const C=a.render.frame;h.get(S)!==C&&(h.set(S,C),S.update())}function Se(S,C){const O=S.colorSpace,Z=S.format,Q=S.type;return S.isCompressedTexture===!0||S.isVideoTexture===!0||O!==rs&&O!==tn&&(Xt.getTransfer(O)===qt?(Z!==ci||Q!==Ci)&&console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",O)),C}function ge(S){return typeof HTMLImageElement<"u"&&S instanceof HTMLImageElement?(A.width=S.naturalWidth||S.width,A.height=S.naturalHeight||S.height):typeof VideoFrame<"u"&&S instanceof VideoFrame?(A.width=S.displayWidth,A.height=S.displayHeight):(A.width=S.width,A.height=S.height),A}this.allocateTextureUnit=F,this.resetTextureUnits=z,this.setTexture2D=W,this.setTexture2DArray=Y,this.setTexture3D=$,this.setTextureCube=H,this.rebindTextures=Yt,this.setupRenderTarget=R,this.updateRenderTargetMipmap=ie,this.updateMultisampleRenderTarget=Et,this.setupDepthRenderbuffer=fe,this.setupFrameBufferTexture=bt,this.useMultisampledRTT=ft}function rC(s,t){function e(i,n=tn){let r;const a=Xt.getTransfer(n);if(i===Ci)return s.UNSIGNED_BYTE;if(i===Ka)return s.UNSIGNED_SHORT_4_4_4_4;if(i===$a)return s.UNSIGNED_SHORT_5_5_5_1;if(i===Sl)return s.UNSIGNED_INT_5_9_9_9_REV;if(i===El)return s.BYTE;if(i===yl)return s.SHORT;if(i===Gs)return s.UNSIGNED_SHORT;if(i===qa)return s.INT;if(i===yn)return s.UNSIGNED_INT;if(i===Fi)return s.FLOAT;if(i===Hs)return s.HALF_FLOAT;if(i===Ml)return s.ALPHA;if(i===bl)return s.RGB;if(i===ci)return s.RGBA;if(i===Ws)return s.DEPTH_COMPONENT;if(i===Ys)return s.DEPTH_STENCIL;if(i===Tl)return s.RED;if(i===to)return s.RED_INTEGER;if(i===wl)return s.RG;if(i===eo)return s.RG_INTEGER;if(i===io)return s.RGBA_INTEGER;if(i===Tr||i===wr||i===_r||i===Rr)if(a===qt)if(r=t.get("WEBGL_compressed_texture_s3tc_srgb"),r!==null){if(i===Tr)return r.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(i===wr)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(i===_r)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(i===Rr)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(r=t.get("WEBGL_compressed_texture_s3tc"),r!==null){if(i===Tr)return r.COMPRESSED_RGB_S3TC_DXT1_EXT;if(i===wr)return r.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(i===_r)return r.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(i===Rr)return r.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(i===no||i===so||i===ro||i===ao)if(r=t.get("WEBGL_compressed_texture_pvrtc"),r!==null){if(i===no)return r.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(i===so)return r.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(i===ro)return r.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(i===ao)return r.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(i===oo||i===Ao||i===lo)if(r=t.get("WEBGL_compressed_texture_etc"),r!==null){if(i===oo||i===Ao)return a===qt?r.COMPRESSED_SRGB8_ETC2:r.COMPRESSED_RGB8_ETC2;if(i===lo)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:r.COMPRESSED_RGBA8_ETC2_EAC}else return null;if(i===ho||i===co||i===uo||i===fo||i===go||i===po||i===mo||i===Co||i===Io||i===xo||i===vo||i===Eo||i===yo||i===So)if(r=t.get("WEBGL_compressed_texture_astc"),r!==null){if(i===ho)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:r.COMPRESSED_RGBA_ASTC_4x4_KHR;if(i===co)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:r.COMPRESSED_RGBA_ASTC_5x4_KHR;if(i===uo)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:r.COMPRESSED_RGBA_ASTC_5x5_KHR;if(i===fo)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:r.COMPRESSED_RGBA_ASTC_6x5_KHR;if(i===go)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:r.COMPRESSED_RGBA_ASTC_6x6_KHR;if(i===po)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:r.COMPRESSED_RGBA_ASTC_8x5_KHR;if(i===mo)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:r.COMPRESSED_RGBA_ASTC_8x6_KHR;if(i===Co)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:r.COMPRESSED_RGBA_ASTC_8x8_KHR;if(i===Io)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:r.COMPRESSED_RGBA_ASTC_10x5_KHR;if(i===xo)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:r.COMPRESSED_RGBA_ASTC_10x6_KHR;if(i===vo)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:r.COMPRESSED_RGBA_ASTC_10x8_KHR;if(i===Eo)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:r.COMPRESSED_RGBA_ASTC_10x10_KHR;if(i===yo)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:r.COMPRESSED_RGBA_ASTC_12x10_KHR;if(i===So)return a===qt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:r.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(i===Pr||i===Mo||i===bo)if(r=t.get("EXT_texture_compression_bptc"),r!==null){if(i===Pr)return a===qt?r.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:r.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(i===Mo)return r.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(i===bo)return r.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(i===_l||i===To||i===wo||i===_o)if(r=t.get("EXT_texture_compression_rgtc"),r!==null){if(i===Pr)return r.COMPRESSED_RED_RGTC1_EXT;if(i===To)return r.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(i===wo)return r.COMPRESSED_RED_GREEN_RGTC2_EXT;if(i===_o)return r.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return i===Vs?s.UNSIGNED_INT_24_8:s[i]!==void 0?s[i]:null}return{convert:e}}class Xh extends Re{constructor(t=null){super(),this.sourceTexture=t,this.isExternalTexture=!0}}const aC=`
|
|
3932
3932
|
void main() {
|
|
3933
3933
|
|
|
3934
3934
|
gl_Position = vec4( position, 1.0 );
|
|
3935
3935
|
|
|
3936
|
-
}`,
|
|
3936
|
+
}`,oC=`
|
|
3937
3937
|
uniform sampler2DArray depthColor;
|
|
3938
3938
|
uniform float depthWidth;
|
|
3939
3939
|
uniform float depthHeight;
|
|
@@ -3952,10 +3952,10 @@ void main() {
|
|
|
3952
3952
|
|
|
3953
3953
|
}
|
|
3954
3954
|
|
|
3955
|
-
}`;class l0{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(t,e){if(this.texture===null){const i=new qc(t.texture);(t.depthNear!==e.depthNear||t.depthFar!==e.depthFar)&&(this.depthNear=t.depthNear,this.depthFar=t.depthFar),this.texture=i}}getMesh(t){if(this.texture!==null&&this.mesh===null){const e=t.cameras[0].viewport,i=new on({vertexShader:a0,fragmentShader:o0,uniforms:{depthColor:{value:this.texture},depthWidth:{value:e.z},depthHeight:{value:e.w}}});this.mesh=new Si(new ir(20,20),i)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class h0 extends En{constructor(t,e){super();const i=this;let n=null,r=1,a=null,o="local-floor",h=1,l=null,c=null,u=null,d=null,f=null,g=null;const _=new l0,m={},p=e.getContextAttributes();let T=null,b=null;const y=[],R=[],w=new Dt;let C=null;const I=new We;I.viewport=new he;const S=new We;S.viewport=new he;const M=[I,S],A=new lp;let B=null,F=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(j){let ot=y[j];return ot===void 0&&(ot=new Qo,y[j]=ot),ot.getTargetRaySpace()},this.getControllerGrip=function(j){let ot=y[j];return ot===void 0&&(ot=new Qo,y[j]=ot),ot.getGripSpace()},this.getHand=function(j){let ot=y[j];return ot===void 0&&(ot=new Qo,y[j]=ot),ot.getHandSpace()};function z(j){const ot=R.indexOf(j.inputSource);if(ot===-1)return;const nt=y[ot];nt!==void 0&&(nt.update(j.inputSource,j.frame,l||a),nt.dispatchEvent({type:j.type,data:j.inputSource}))}function W(){n.removeEventListener("select",z),n.removeEventListener("selectstart",z),n.removeEventListener("selectend",z),n.removeEventListener("squeeze",z),n.removeEventListener("squeezestart",z),n.removeEventListener("squeezeend",z),n.removeEventListener("end",W),n.removeEventListener("inputsourceschange",X);for(let j=0;j<y.length;j++){const ot=R[j];ot!==null&&(R[j]=null,y[j].disconnect(ot))}B=null,F=null,_.reset();for(const j in m)delete m[j];t.setRenderTarget(T),f=null,d=null,u=null,n=null,b=null,Jt.stop(),i.isPresenting=!1,t.setPixelRatio(C),t.setSize(w.width,w.height,!1),i.dispatchEvent({type:"sessionend"})}this.setFramebufferScaleFactor=function(j){r=j,i.isPresenting===!0&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(j){o=j,i.isPresenting===!0&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return l||a},this.setReferenceSpace=function(j){l=j},this.getBaseLayer=function(){return d!==null?d:f},this.getBinding=function(){return u},this.getFrame=function(){return g},this.getSession=function(){return n},this.setSession=async function(j){if(n=j,n!==null){if(T=t.getRenderTarget(),n.addEventListener("select",z),n.addEventListener("selectstart",z),n.addEventListener("selectend",z),n.addEventListener("squeeze",z),n.addEventListener("squeezestart",z),n.addEventListener("squeezeend",z),n.addEventListener("end",W),n.addEventListener("inputsourceschange",X),p.xrCompatible!==!0&&await e.makeXRCompatible(),C=t.getPixelRatio(),t.getSize(w),typeof XRWebGLBinding<"u"&&(u=new XRWebGLBinding(n,e)),u!==null&&"createProjectionLayer"in XRWebGLBinding.prototype){let nt=null,At=null,wt=null;p.depth&&(wt=p.stencil?e.DEPTH24_STENCIL8:e.DEPTH_COMPONENT24,nt=p.stencil?Xs:Ws,At=p.stencil?Vs:bn);const It={colorFormat:e.RGBA8,depthFormat:wt,scaleFactor:r};d=u.createProjectionLayer(It),n.updateRenderState({layers:[d]}),t.setPixelRatio(1),t.setSize(d.textureWidth,d.textureHeight,!1),b=new An(d.textureWidth,d.textureHeight,{format:li,type:xi,depthTexture:new hc(d.textureWidth,d.textureHeight,At,void 0,void 0,void 0,void 0,void 0,void 0,nt),stencilBuffer:p.stencil,colorSpace:t.outputColorSpace,samples:p.antialias?4:0,resolveDepthBuffer:d.ignoreDepthValues===!1,resolveStencilBuffer:d.ignoreDepthValues===!1})}else{const nt={antialias:p.antialias,alpha:!0,depth:p.depth,stencil:p.stencil,framebufferScaleFactor:r};f=new XRWebGLLayer(n,e,nt),n.updateRenderState({baseLayer:f}),t.setPixelRatio(1),t.setSize(f.framebufferWidth,f.framebufferHeight,!1),b=new An(f.framebufferWidth,f.framebufferHeight,{format:li,type:xi,colorSpace:t.outputColorSpace,stencilBuffer:p.stencil,resolveDepthBuffer:f.ignoreDepthValues===!1,resolveStencilBuffer:f.ignoreDepthValues===!1})}b.isXRRenderTarget=!0,this.setFoveation(h),l=null,a=await n.requestReferenceSpace(o),Jt.setContext(n),Jt.start(),i.isPresenting=!0,i.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(n!==null)return n.environmentBlendMode},this.getDepthTexture=function(){return _.getDepthTexture()};function X(j){for(let ot=0;ot<j.removed.length;ot++){const nt=j.removed[ot],At=R.indexOf(nt);At>=0&&(R[At]=null,y[At].disconnect(nt))}for(let ot=0;ot<j.added.length;ot++){const nt=j.added[ot];let At=R.indexOf(nt);if(At===-1){for(let It=0;It<y.length;It++)if(It>=R.length){R.push(nt),At=It;break}else if(R[It]===null){R[It]=nt,At=It;break}if(At===-1)break}const wt=y[At];wt&&wt.connect(nt)}}const Q=new N,H=new N;function rt(j,ot,nt){Q.setFromMatrixPosition(ot.matrixWorld),H.setFromMatrixPosition(nt.matrixWorld);const At=Q.distanceTo(H),wt=ot.projectionMatrix.elements,It=nt.projectionMatrix.elements,de=wt[14]/(wt[10]-1),Wt=wt[14]/(wt[10]+1),P=(wt[9]+1)/wt[5],te=(wt[9]-1)/wt[5],Et=(wt[8]-1)/wt[0],Yt=(It[8]+1)/It[0],St=de*Et,se=de*Yt,pt=At/(-Et+Yt),zt=pt*-Et;if(ot.matrixWorld.decompose(j.position,j.quaternion,j.scale),j.translateX(zt),j.translateZ(pt),j.matrixWorld.compose(j.position,j.quaternion,j.scale),j.matrixWorldInverse.copy(j.matrixWorld).invert(),wt[10]===-1)j.projectionMatrix.copy(ot.projectionMatrix),j.projectionMatrixInverse.copy(ot.projectionMatrixInverse);else{const Ee=de+pt,fe=Wt+pt,E=St-zt,x=se+(At-zt),O=P*Wt/fe*Ee,Y=te*Wt/fe*Ee;j.projectionMatrix.makePerspective(E,x,O,Y,Ee,fe),j.projectionMatrixInverse.copy(j.projectionMatrix).invert()}}function ht(j,ot){ot===null?j.matrixWorld.copy(j.matrix):j.matrixWorld.multiplyMatrices(ot.matrixWorld,j.matrix),j.matrixWorldInverse.copy(j.matrixWorld).invert()}this.updateCamera=function(j){if(n===null)return;let ot=j.near,nt=j.far;_.texture!==null&&(_.depthNear>0&&(ot=_.depthNear),_.depthFar>0&&(nt=_.depthFar)),A.near=S.near=I.near=ot,A.far=S.far=I.far=nt,(B!==A.near||F!==A.far)&&(n.updateRenderState({depthNear:A.near,depthFar:A.far}),B=A.near,F=A.far),A.layers.mask=j.layers.mask|6,I.layers.mask=A.layers.mask&3,S.layers.mask=A.layers.mask&5;const At=j.parent,wt=A.cameras;ht(A,At);for(let It=0;It<wt.length;It++)ht(wt[It],At);wt.length===2?rt(A,I,S):A.projectionMatrix.copy(I.projectionMatrix),_t(j,A,At)};function _t(j,ot,nt){nt===null?j.matrix.copy(ot.matrixWorld):(j.matrix.copy(nt.matrixWorld),j.matrix.invert(),j.matrix.multiply(ot.matrixWorld)),j.matrix.decompose(j.position,j.quaternion,j.scale),j.updateMatrixWorld(!0),j.projectionMatrix.copy(ot.projectionMatrix),j.projectionMatrixInverse.copy(ot.projectionMatrixInverse),j.isPerspectiveCamera&&(j.fov=Nr*2*Math.atan(1/j.projectionMatrix.elements[5]),j.zoom=1)}this.getCamera=function(){return A},this.getFoveation=function(){if(!(d===null&&f===null))return h},this.setFoveation=function(j){h=j,d!==null&&(d.fixedFoveation=j),f!==null&&f.fixedFoveation!==void 0&&(f.fixedFoveation=j)},this.hasDepthSensing=function(){return _.texture!==null},this.getDepthSensingMesh=function(){return _.getMesh(A)},this.getCameraTexture=function(j){return m[j]};let Ot=null;function ne(j,ot){if(c=ot.getViewerPose(l||a),g=ot,c!==null){const nt=c.views;f!==null&&(t.setRenderTargetFramebuffer(b,f.framebuffer),t.setRenderTarget(b));let At=!1;nt.length!==A.cameras.length&&(A.cameras.length=0,At=!0);for(let Wt=0;Wt<nt.length;Wt++){const P=nt[Wt];let te=null;if(f!==null)te=f.getViewport(P);else{const Yt=u.getViewSubImage(d,P);te=Yt.viewport,Wt===0&&(t.setRenderTargetTextures(b,Yt.colorTexture,Yt.depthStencilTexture),t.setRenderTarget(b))}let Et=M[Wt];Et===void 0&&(Et=new We,Et.layers.enable(Wt),Et.viewport=new he,M[Wt]=Et),Et.matrix.fromArray(P.transform.matrix),Et.matrix.decompose(Et.position,Et.quaternion,Et.scale),Et.projectionMatrix.fromArray(P.projectionMatrix),Et.projectionMatrixInverse.copy(Et.projectionMatrix).invert(),Et.viewport.set(te.x,te.y,te.width,te.height),Wt===0&&(A.matrix.copy(Et.matrix),A.matrix.decompose(A.position,A.quaternion,A.scale)),At===!0&&A.cameras.push(Et)}const wt=n.enabledFeatures;if(wt&&wt.includes("depth-sensing")&&n.depthUsage=="gpu-optimized"&&u){const Wt=u.getDepthInformation(nt[0]);Wt&&Wt.isValid&&Wt.texture&&_.init(Wt,n.renderState)}if(wt&&wt.includes("camera-access")&&(t.state.unbindTexture(),u))for(let Wt=0;Wt<nt.length;Wt++){const P=nt[Wt].camera;if(P){let te=m[P];te||(te=new qc,m[P]=te);const Et=u.getCameraImage(P);te.sourceTexture=Et}}}for(let nt=0;nt<y.length;nt++){const At=R[nt],wt=y[nt];At!==null&&wt!==void 0&&wt.update(At,ot,l||a)}Ot&&Ot(j,ot),ot.detectedPlanes&&i.dispatchEvent({type:"planesdetected",data:ot}),g=null}const Jt=new _c;Jt.setAnimationLoop(ne),this.setAnimationLoop=function(j){Ot=j},this.dispose=function(){}}}const Fn=new yi,c0=new ue;function u0(s,t){function e(m,p){m.matrixAutoUpdate===!0&&m.updateMatrix(),p.value.copy(m.matrix)}function i(m,p){p.color.getRGB(m.fogColor.value,sc(s)),p.isFog?(m.fogNear.value=p.near,m.fogFar.value=p.far):p.isFogExp2&&(m.fogDensity.value=p.density)}function n(m,p,T,b,y){p.isMeshBasicMaterial||p.isMeshLambertMaterial?r(m,p):p.isMeshToonMaterial?(r(m,p),u(m,p)):p.isMeshPhongMaterial?(r(m,p),c(m,p)):p.isMeshStandardMaterial?(r(m,p),d(m,p),p.isMeshPhysicalMaterial&&f(m,p,y)):p.isMeshMatcapMaterial?(r(m,p),g(m,p)):p.isMeshDepthMaterial?r(m,p):p.isMeshDistanceMaterial?(r(m,p),_(m,p)):p.isMeshNormalMaterial?r(m,p):p.isLineBasicMaterial?(a(m,p),p.isLineDashedMaterial&&o(m,p)):p.isPointsMaterial?h(m,p,T,b):p.isSpriteMaterial?l(m,p):p.isShadowMaterial?(m.color.value.copy(p.color),m.opacity.value=p.opacity):p.isShaderMaterial&&(p.uniformsNeedUpdate=!1)}function r(m,p){m.opacity.value=p.opacity,p.color&&m.diffuse.value.copy(p.color),p.emissive&&m.emissive.value.copy(p.emissive).multiplyScalar(p.emissiveIntensity),p.map&&(m.map.value=p.map,e(p.map,m.mapTransform)),p.alphaMap&&(m.alphaMap.value=p.alphaMap,e(p.alphaMap,m.alphaMapTransform)),p.bumpMap&&(m.bumpMap.value=p.bumpMap,e(p.bumpMap,m.bumpMapTransform),m.bumpScale.value=p.bumpScale,p.side===Ue&&(m.bumpScale.value*=-1)),p.normalMap&&(m.normalMap.value=p.normalMap,e(p.normalMap,m.normalMapTransform),m.normalScale.value.copy(p.normalScale),p.side===Ue&&m.normalScale.value.negate()),p.displacementMap&&(m.displacementMap.value=p.displacementMap,e(p.displacementMap,m.displacementMapTransform),m.displacementScale.value=p.displacementScale,m.displacementBias.value=p.displacementBias),p.emissiveMap&&(m.emissiveMap.value=p.emissiveMap,e(p.emissiveMap,m.emissiveMapTransform)),p.specularMap&&(m.specularMap.value=p.specularMap,e(p.specularMap,m.specularMapTransform)),p.alphaTest>0&&(m.alphaTest.value=p.alphaTest);const T=t.get(p),b=T.envMap,y=T.envMapRotation;b&&(m.envMap.value=b,Fn.copy(y),Fn.x*=-1,Fn.y*=-1,Fn.z*=-1,b.isCubeTexture&&b.isRenderTargetTexture===!1&&(Fn.y*=-1,Fn.z*=-1),m.envMapRotation.value.setFromMatrix4(c0.makeRotationFromEuler(Fn)),m.flipEnvMap.value=b.isCubeTexture&&b.isRenderTargetTexture===!1?-1:1,m.reflectivity.value=p.reflectivity,m.ior.value=p.ior,m.refractionRatio.value=p.refractionRatio),p.lightMap&&(m.lightMap.value=p.lightMap,m.lightMapIntensity.value=p.lightMapIntensity,e(p.lightMap,m.lightMapTransform)),p.aoMap&&(m.aoMap.value=p.aoMap,m.aoMapIntensity.value=p.aoMapIntensity,e(p.aoMap,m.aoMapTransform))}function a(m,p){m.diffuse.value.copy(p.color),m.opacity.value=p.opacity,p.map&&(m.map.value=p.map,e(p.map,m.mapTransform))}function o(m,p){m.dashSize.value=p.dashSize,m.totalSize.value=p.dashSize+p.gapSize,m.scale.value=p.scale}function h(m,p,T,b){m.diffuse.value.copy(p.color),m.opacity.value=p.opacity,m.size.value=p.size*T,m.scale.value=b*.5,p.map&&(m.map.value=p.map,e(p.map,m.uvTransform)),p.alphaMap&&(m.alphaMap.value=p.alphaMap,e(p.alphaMap,m.alphaMapTransform)),p.alphaTest>0&&(m.alphaTest.value=p.alphaTest)}function l(m,p){m.diffuse.value.copy(p.color),m.opacity.value=p.opacity,m.rotation.value=p.rotation,p.map&&(m.map.value=p.map,e(p.map,m.mapTransform)),p.alphaMap&&(m.alphaMap.value=p.alphaMap,e(p.alphaMap,m.alphaMapTransform)),p.alphaTest>0&&(m.alphaTest.value=p.alphaTest)}function c(m,p){m.specular.value.copy(p.specular),m.shininess.value=Math.max(p.shininess,1e-4)}function u(m,p){p.gradientMap&&(m.gradientMap.value=p.gradientMap)}function d(m,p){m.metalness.value=p.metalness,p.metalnessMap&&(m.metalnessMap.value=p.metalnessMap,e(p.metalnessMap,m.metalnessMapTransform)),m.roughness.value=p.roughness,p.roughnessMap&&(m.roughnessMap.value=p.roughnessMap,e(p.roughnessMap,m.roughnessMapTransform)),p.envMap&&(m.envMapIntensity.value=p.envMapIntensity)}function f(m,p,T){m.ior.value=p.ior,p.sheen>0&&(m.sheenColor.value.copy(p.sheenColor).multiplyScalar(p.sheen),m.sheenRoughness.value=p.sheenRoughness,p.sheenColorMap&&(m.sheenColorMap.value=p.sheenColorMap,e(p.sheenColorMap,m.sheenColorMapTransform)),p.sheenRoughnessMap&&(m.sheenRoughnessMap.value=p.sheenRoughnessMap,e(p.sheenRoughnessMap,m.sheenRoughnessMapTransform))),p.clearcoat>0&&(m.clearcoat.value=p.clearcoat,m.clearcoatRoughness.value=p.clearcoatRoughness,p.clearcoatMap&&(m.clearcoatMap.value=p.clearcoatMap,e(p.clearcoatMap,m.clearcoatMapTransform)),p.clearcoatRoughnessMap&&(m.clearcoatRoughnessMap.value=p.clearcoatRoughnessMap,e(p.clearcoatRoughnessMap,m.clearcoatRoughnessMapTransform)),p.clearcoatNormalMap&&(m.clearcoatNormalMap.value=p.clearcoatNormalMap,e(p.clearcoatNormalMap,m.clearcoatNormalMapTransform),m.clearcoatNormalScale.value.copy(p.clearcoatNormalScale),p.side===Ue&&m.clearcoatNormalScale.value.negate())),p.dispersion>0&&(m.dispersion.value=p.dispersion),p.iridescence>0&&(m.iridescence.value=p.iridescence,m.iridescenceIOR.value=p.iridescenceIOR,m.iridescenceThicknessMinimum.value=p.iridescenceThicknessRange[0],m.iridescenceThicknessMaximum.value=p.iridescenceThicknessRange[1],p.iridescenceMap&&(m.iridescenceMap.value=p.iridescenceMap,e(p.iridescenceMap,m.iridescenceMapTransform)),p.iridescenceThicknessMap&&(m.iridescenceThicknessMap.value=p.iridescenceThicknessMap,e(p.iridescenceThicknessMap,m.iridescenceThicknessMapTransform))),p.transmission>0&&(m.transmission.value=p.transmission,m.transmissionSamplerMap.value=T.texture,m.transmissionSamplerSize.value.set(T.width,T.height),p.transmissionMap&&(m.transmissionMap.value=p.transmissionMap,e(p.transmissionMap,m.transmissionMapTransform)),m.thickness.value=p.thickness,p.thicknessMap&&(m.thicknessMap.value=p.thicknessMap,e(p.thicknessMap,m.thicknessMapTransform)),m.attenuationDistance.value=p.attenuationDistance,m.attenuationColor.value.copy(p.attenuationColor)),p.anisotropy>0&&(m.anisotropyVector.value.set(p.anisotropy*Math.cos(p.anisotropyRotation),p.anisotropy*Math.sin(p.anisotropyRotation)),p.anisotropyMap&&(m.anisotropyMap.value=p.anisotropyMap,e(p.anisotropyMap,m.anisotropyMapTransform))),m.specularIntensity.value=p.specularIntensity,m.specularColor.value.copy(p.specularColor),p.specularColorMap&&(m.specularColorMap.value=p.specularColorMap,e(p.specularColorMap,m.specularColorMapTransform)),p.specularIntensityMap&&(m.specularIntensityMap.value=p.specularIntensityMap,e(p.specularIntensityMap,m.specularIntensityMapTransform))}function g(m,p){p.matcap&&(m.matcap.value=p.matcap)}function _(m,p){const T=t.get(p).light;m.referencePosition.value.setFromMatrixPosition(T.matrixWorld),m.nearDistance.value=T.shadow.camera.near,m.farDistance.value=T.shadow.camera.far}return{refreshFogUniforms:i,refreshMaterialUniforms:n}}function d0(s,t,e,i){let n={},r={},a=[];const o=s.getParameter(s.MAX_UNIFORM_BUFFER_BINDINGS);function h(T,b){const y=b.program;i.uniformBlockBinding(T,y)}function l(T,b){let y=n[T.id];y===void 0&&(g(T),y=c(T),n[T.id]=y,T.addEventListener("dispose",m));const R=b.program;i.updateUBOMapping(T,R);const w=t.render.frame;r[T.id]!==w&&(d(T),r[T.id]=w)}function c(T){const b=u();T.__bindingPointIndex=b;const y=s.createBuffer(),R=T.__size,w=T.usage;return s.bindBuffer(s.UNIFORM_BUFFER,y),s.bufferData(s.UNIFORM_BUFFER,R,w),s.bindBuffer(s.UNIFORM_BUFFER,null),s.bindBufferBase(s.UNIFORM_BUFFER,b,y),y}function u(){for(let T=0;T<o;T++)if(a.indexOf(T)===-1)return a.push(T),T;return console.error("THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."),0}function d(T){const b=n[T.id],y=T.uniforms,R=T.__cache;s.bindBuffer(s.UNIFORM_BUFFER,b);for(let w=0,C=y.length;w<C;w++){const I=Array.isArray(y[w])?y[w]:[y[w]];for(let S=0,M=I.length;S<M;S++){const A=I[S];if(f(A,w,S,R)===!0){const B=A.__offset,F=Array.isArray(A.value)?A.value:[A.value];let z=0;for(let W=0;W<F.length;W++){const X=F[W],Q=_(X);typeof X=="number"||typeof X=="boolean"?(A.__data[0]=X,s.bufferSubData(s.UNIFORM_BUFFER,B+z,A.__data)):X.isMatrix3?(A.__data[0]=X.elements[0],A.__data[1]=X.elements[1],A.__data[2]=X.elements[2],A.__data[3]=0,A.__data[4]=X.elements[3],A.__data[5]=X.elements[4],A.__data[6]=X.elements[5],A.__data[7]=0,A.__data[8]=X.elements[6],A.__data[9]=X.elements[7],A.__data[10]=X.elements[8],A.__data[11]=0):(X.toArray(A.__data,z),z+=Q.storage/Float32Array.BYTES_PER_ELEMENT)}s.bufferSubData(s.UNIFORM_BUFFER,B,A.__data)}}}s.bindBuffer(s.UNIFORM_BUFFER,null)}function f(T,b,y,R){const w=T.value,C=b+"_"+y;if(R[C]===void 0)return typeof w=="number"||typeof w=="boolean"?R[C]=w:R[C]=w.clone(),!0;{const I=R[C];if(typeof w=="number"||typeof w=="boolean"){if(I!==w)return R[C]=w,!0}else if(I.equals(w)===!1)return I.copy(w),!0}return!1}function g(T){const b=T.uniforms;let y=0;const R=16;for(let C=0,I=b.length;C<I;C++){const S=Array.isArray(b[C])?b[C]:[b[C]];for(let M=0,A=S.length;M<A;M++){const B=S[M],F=Array.isArray(B.value)?B.value:[B.value];for(let z=0,W=F.length;z<W;z++){const X=F[z],Q=_(X),H=y%R,rt=H%Q.boundary,ht=H+rt;y+=rt,ht!==0&&R-ht<Q.storage&&(y+=R-ht),B.__data=new Float32Array(Q.storage/Float32Array.BYTES_PER_ELEMENT),B.__offset=y,y+=Q.storage}}}const w=y%R;return w>0&&(y+=R-w),T.__size=y,T.__cache={},this}function _(T){const b={boundary:0,storage:0};return typeof T=="number"||typeof T=="boolean"?(b.boundary=4,b.storage=4):T.isVector2?(b.boundary=8,b.storage=8):T.isVector3||T.isColor?(b.boundary=16,b.storage=12):T.isVector4?(b.boundary=16,b.storage=16):T.isMatrix3?(b.boundary=48,b.storage=48):T.isMatrix4?(b.boundary=64,b.storage=64):T.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",T),b}function m(T){const b=T.target;b.removeEventListener("dispose",m);const y=a.indexOf(b.__bindingPointIndex);a.splice(y,1),s.deleteBuffer(n[b.id]),delete n[b.id],delete r[b.id]}function p(){for(const T in n)s.deleteBuffer(n[T]);a=[],n={},r={}}return{bind:h,update:l,dispose:p}}class f0{constructor(t={}){const{canvas:e=Mf(),context:i=null,depth:n=!0,stencil:r=!1,alpha:a=!1,antialias:o=!1,premultipliedAlpha:h=!0,preserveDrawingBuffer:l=!1,powerPreference:c="default",failIfMajorPerformanceCaveat:u=!1,reversedDepthBuffer:d=!1}=t;this.isWebGLRenderer=!0;let f;if(i!==null){if(typeof WebGLRenderingContext<"u"&&i instanceof WebGLRenderingContext)throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");f=i.getContextAttributes().alpha}else f=a;const g=new Uint32Array(4),_=new Int32Array(4);let m=null,p=null;const T=[],b=[];this.domElement=e,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.toneMapping=Qi,this.toneMappingExposure=1,this.transmissionResolutionScale=1;const y=this;let R=!1;this._outputColorSpace=Ke;let w=0,C=0,I=null,S=-1,M=null;const A=new he,B=new he;let F=null;const z=new Vt(0);let W=0,X=e.width,Q=e.height,H=1,rt=null,ht=null;const _t=new he(0,0,X,Q),Ot=new he(0,0,X,Q);let ne=!1;const Jt=new il;let j=!1,ot=!1;const nt=new ue,At=new N,wt=new he,It={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};let de=!1;function Wt(){return I===null?H:1}let P=i;function te(v,D){return e.getContext(v,D)}try{const v={alpha:!0,depth:n,stencil:r,antialias:o,premultipliedAlpha:h,preserveDrawingBuffer:l,powerPreference:c,failIfMajorPerformanceCaveat:u};if("setAttribute"in e&&e.setAttribute("data-engine",`three.js r${Fa}`),e.addEventListener("webglcontextlost",st,!1),e.addEventListener("webglcontextrestored",ft,!1),e.addEventListener("webglcontextcreationerror",$,!1),P===null){const D="webgl2";if(P=te(D,v),P===null)throw te(D)?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.")}}catch(v){throw console.error("THREE.WebGLRenderer: "+v.message),v}let Et,Yt,St,se,pt,zt,Ee,fe,E,x,O,Y,K,q,Mt,it,xt,vt,tt,ut,Ct,yt,lt,Nt;function L(){Et=new bg(P),Et.init(),yt=new r0(P,Et),Yt=new gg(P,Et,t,yt),St=new n0(P,Et),Yt.reversedDepthBuffer&&d&&St.buffers.depth.setReversed(!0),se=new Ag(P),pt=new W_,zt=new s0(P,Et,St,pt,Yt,yt,se),Ee=new xg(y),fe=new Sg(y),E=new dp(P),lt=new pg(P,E),x=new Eg(P,E,se,lt),O=new Rg(P,x,E,se),tt=new wg(P,Yt,zt),it=new _g(pt),Y=new V_(y,Ee,fe,Et,Yt,lt,it),K=new u0(y,pt),q=new q_,Mt=new J_(Et),vt=new fg(y,Ee,fe,St,O,f,h),xt=new e0(y,O,Yt),Nt=new d0(P,se,Yt,St),ut=new mg(P,Et,se),Ct=new Tg(P,Et,se),se.programs=Y.programs,y.capabilities=Yt,y.extensions=Et,y.properties=pt,y.renderLists=q,y.shadowMap=xt,y.state=St,y.info=se}L();const et=new h0(y,P);this.xr=et,this.getContext=function(){return P},this.getContextAttributes=function(){return P.getContextAttributes()},this.forceContextLoss=function(){const v=Et.get("WEBGL_lose_context");v&&v.loseContext()},this.forceContextRestore=function(){const v=Et.get("WEBGL_lose_context");v&&v.restoreContext()},this.getPixelRatio=function(){return H},this.setPixelRatio=function(v){v!==void 0&&(H=v,this.setSize(X,Q,!1))},this.getSize=function(v){return v.set(X,Q)},this.setSize=function(v,D,k=!0){if(et.isPresenting){console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.");return}X=v,Q=D,e.width=Math.floor(v*H),e.height=Math.floor(D*H),k===!0&&(e.style.width=v+"px",e.style.height=D+"px"),this.setViewport(0,0,v,D)},this.getDrawingBufferSize=function(v){return v.set(X*H,Q*H).floor()},this.setDrawingBufferSize=function(v,D,k){X=v,Q=D,H=k,e.width=Math.floor(v*k),e.height=Math.floor(D*k),this.setViewport(0,0,v,D)},this.getCurrentViewport=function(v){return v.copy(A)},this.getViewport=function(v){return v.copy(_t)},this.setViewport=function(v,D,k,G){v.isVector4?_t.set(v.x,v.y,v.z,v.w):_t.set(v,D,k,G),St.viewport(A.copy(_t).multiplyScalar(H).round())},this.getScissor=function(v){return v.copy(Ot)},this.setScissor=function(v,D,k,G){v.isVector4?Ot.set(v.x,v.y,v.z,v.w):Ot.set(v,D,k,G),St.scissor(B.copy(Ot).multiplyScalar(H).round())},this.getScissorTest=function(){return ne},this.setScissorTest=function(v){St.setScissorTest(ne=v)},this.setOpaqueSort=function(v){rt=v},this.setTransparentSort=function(v){ht=v},this.getClearColor=function(v){return v.copy(vt.getClearColor())},this.setClearColor=function(){vt.setClearColor(...arguments)},this.getClearAlpha=function(){return vt.getClearAlpha()},this.setClearAlpha=function(){vt.setClearAlpha(...arguments)},this.clear=function(v=!0,D=!0,k=!0){let G=0;if(v){let U=!1;if(I!==null){const J=I.texture.format;U=J===io||J===eo||J===to}if(U){const J=I.texture.type,ct=J===xi||J===bn||J===Gs||J===Vs||J===Ja||J===Qa,mt=vt.getClearColor(),dt=vt.getClearAlpha(),Rt=mt.r,Pt=mt.g,bt=mt.b;ct?(g[0]=Rt,g[1]=Pt,g[2]=bt,g[3]=dt,P.clearBufferuiv(P.COLOR,0,g)):(_[0]=Rt,_[1]=Pt,_[2]=bt,_[3]=dt,P.clearBufferiv(P.COLOR,0,_))}else G|=P.COLOR_BUFFER_BIT}D&&(G|=P.DEPTH_BUFFER_BIT),k&&(G|=P.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),P.clear(G)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){e.removeEventListener("webglcontextlost",st,!1),e.removeEventListener("webglcontextrestored",ft,!1),e.removeEventListener("webglcontextcreationerror",$,!1),vt.dispose(),q.dispose(),Mt.dispose(),pt.dispose(),Ee.dispose(),fe.dispose(),O.dispose(),lt.dispose(),Nt.dispose(),Y.dispose(),et.dispose(),et.removeEventListener("sessionstart",Ei),et.removeEventListener("sessionend",$c),On.stop()};function st(v){v.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),R=!0}function ft(){console.log("THREE.WebGLRenderer: Context Restored."),R=!1;const v=se.autoReset,D=xt.enabled,k=xt.autoUpdate,G=xt.needsUpdate,U=xt.type;L(),se.autoReset=v,xt.enabled=D,xt.autoUpdate=k,xt.needsUpdate=G,xt.type=U}function $(v){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",v.statusMessage)}function Z(v){const D=v.target;D.removeEventListener("dispose",Z),gt(D)}function gt(v){Lt(v),pt.remove(v)}function Lt(v){const D=pt.get(v).programs;D!==void 0&&(D.forEach(function(k){Y.releaseProgram(k)}),v.isShaderMaterial&&Y.releaseShaderCache(v))}this.renderBufferDirect=function(v,D,k,G,U,J){D===null&&(D=It);const ct=U.isMesh&&U.matrixWorld.determinant()<0,mt=P0(v,D,k,G,U);St.setMaterial(G,ct);let dt=k.index,Rt=1;if(G.wireframe===!0){if(dt=x.getWireframeAttribute(k),dt===void 0)return;Rt=2}const Pt=k.drawRange,bt=k.attributes.position;let kt=Pt.start*Rt,$t=(Pt.start+Pt.count)*Rt;J!==null&&(kt=Math.max(kt,J.start*Rt),$t=Math.min($t,(J.start+J.count)*Rt)),dt!==null?(kt=Math.max(kt,0),$t=Math.min($t,dt.count)):bt!=null&&(kt=Math.max(kt,0),$t=Math.min($t,bt.count));const ce=$t-kt;if(ce<0||ce===1/0)return;lt.setup(U,G,mt,k,dt);let ie,Qt=ut;if(dt!==null&&(ie=E.get(dt),Qt=Ct,Qt.setIndex(ie)),U.isMesh)G.wireframe===!0?(St.setLineWidth(G.wireframeLinewidth*Wt()),Qt.setMode(P.LINES)):Qt.setMode(P.TRIANGLES);else if(U.isLine){let Tt=G.linewidth;Tt===void 0&&(Tt=1),St.setLineWidth(Tt*Wt()),U.isLineSegments?Qt.setMode(P.LINES):U.isLineLoop?Qt.setMode(P.LINE_LOOP):Qt.setMode(P.LINE_STRIP)}else U.isPoints?Qt.setMode(P.POINTS):U.isSprite&&Qt.setMode(P.TRIANGLES);if(U.isBatchedMesh)if(U._multiDrawInstances!==null)os("THREE.WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection."),Qt.renderMultiDrawInstances(U._multiDrawStarts,U._multiDrawCounts,U._multiDrawCount,U._multiDrawInstances);else if(Et.get("WEBGL_multi_draw"))Qt.renderMultiDraw(U._multiDrawStarts,U._multiDrawCounts,U._multiDrawCount);else{const Tt=U._multiDrawStarts,re=U._multiDrawCounts,qt=U._multiDrawCount,Xe=dt?E.get(dt).bytesPerElement:1,ws=pt.get(G).currentProgram.getUniforms();for(let qe=0;qe<qt;qe++)ws.setValue(P,"_gl_DrawID",qe),Qt.render(Tt[qe]/Xe,re[qe])}else if(U.isInstancedMesh)Qt.renderInstances(kt,ce,U.count);else if(k.isInstancedBufferGeometry){const Tt=k._maxInstanceCount!==void 0?k._maxInstanceCount:1/0,re=Math.min(k.instanceCount,Tt);Qt.renderInstances(kt,ce,re)}else Qt.render(kt,ce)};function ee(v,D,k){v.transparent===!0&&v.side===Ni&&v.forceSinglePass===!1?(v.side=Ue,v.needsUpdate=!0,oa(v,D,k),v.side=$i,v.needsUpdate=!0,oa(v,D,k),v.side=Ni):oa(v,D,k)}this.compile=function(v,D,k=null){k===null&&(k=v),p=Mt.get(k),p.init(D),b.push(p),k.traverseVisible(function(U){U.isLight&&U.layers.test(D.layers)&&(p.pushLight(U),U.castShadow&&p.pushShadow(U))}),v!==k&&v.traverseVisible(function(U){U.isLight&&U.layers.test(D.layers)&&(p.pushLight(U),U.castShadow&&p.pushShadow(U))}),p.setupLights();const G=new Set;return v.traverse(function(U){if(!(U.isMesh||U.isPoints||U.isLine||U.isSprite))return;const J=U.material;if(J)if(Array.isArray(J))for(let ct=0;ct<J.length;ct++){const mt=J[ct];ee(mt,k,U),G.add(mt)}else ee(J,k,U),G.add(J)}),p=b.pop(),G},this.compileAsync=function(v,D,k=null){const G=this.compile(v,D,k);return new Promise(U=>{function J(){if(G.forEach(function(ct){pt.get(ct).currentProgram.isReady()&&G.delete(ct)}),G.size===0){U(v);return}setTimeout(J,10)}Et.get("KHR_parallel_shader_compile")!==null?J():setTimeout(J,10)})};let jt=null;function Vi(v){jt&&jt(v)}function Ei(){On.stop()}function $c(){On.start()}const On=new _c;On.setAnimationLoop(Vi),typeof self<"u"&&On.setContext(self),this.setAnimationLoop=function(v){jt=v,et.setAnimationLoop(v),v===null?On.stop():On.start()},et.addEventListener("sessionstart",Ei),et.addEventListener("sessionend",$c),this.render=function(v,D){if(D!==void 0&&D.isCamera!==!0){console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(R===!0)return;if(v.matrixWorldAutoUpdate===!0&&v.updateMatrixWorld(),D.parent===null&&D.matrixWorldAutoUpdate===!0&&D.updateMatrixWorld(),et.enabled===!0&&et.isPresenting===!0&&(et.cameraAutoUpdate===!0&&et.updateCamera(D),D=et.getCamera()),v.isScene===!0&&v.onBeforeRender(y,v,D,I),p=Mt.get(v,b.length),p.init(D),b.push(p),nt.multiplyMatrices(D.projectionMatrix,D.matrixWorldInverse),Jt.setFromProjectionMatrix(nt,vi,D.reversedDepth),ot=this.localClippingEnabled,j=it.init(this.clippingPlanes,ot),m=q.get(v,T.length),m.init(),T.push(m),et.enabled===!0&&et.isPresenting===!0){const J=y.xr.getDepthSensingMesh();J!==null&&_l(J,D,-1/0,y.sortObjects)}_l(v,D,0,y.sortObjects),m.finish(),y.sortObjects===!0&&m.sort(rt,ht),de=et.enabled===!1||et.isPresenting===!1||et.hasDepthSensing()===!1,de&&vt.addToRenderList(m,v),this.info.render.frame++,j===!0&&it.beginShadows();const k=p.state.shadowsArray;xt.render(k,v,D),j===!0&&it.endShadows(),this.info.autoReset===!0&&this.info.reset();const G=m.opaque,U=m.transmissive;if(p.setupLights(),D.isArrayCamera){const J=D.cameras;if(U.length>0)for(let ct=0,mt=J.length;ct<mt;ct++){const dt=J[ct];Qc(G,U,v,dt)}de&&vt.render(v);for(let ct=0,mt=J.length;ct<mt;ct++){const dt=J[ct];Jc(m,v,dt,dt.viewport)}}else U.length>0&&Qc(G,U,v,D),de&&vt.render(v),Jc(m,v,D);I!==null&&C===0&&(zt.updateMultisampleRenderTarget(I),zt.updateRenderTargetMipmap(I)),v.isScene===!0&&v.onAfterRender(y,v,D),lt.resetDefaultState(),S=-1,M=null,b.pop(),b.length>0?(p=b[b.length-1],j===!0&&it.setGlobalState(y.clippingPlanes,p.state.camera)):p=null,T.pop(),T.length>0?m=T[T.length-1]:m=null};function _l(v,D,k,G){if(v.visible===!1)return;if(v.layers.test(D.layers)){if(v.isGroup)k=v.renderOrder;else if(v.isLOD)v.autoUpdate===!0&&v.update(D);else if(v.isLight)p.pushLight(v),v.castShadow&&p.pushShadow(v);else if(v.isSprite){if(!v.frustumCulled||Jt.intersectsSprite(v)){G&&wt.setFromMatrixPosition(v.matrixWorld).applyMatrix4(nt);const ct=O.update(v),mt=v.material;mt.visible&&m.push(v,ct,mt,k,wt.z,null)}}else if((v.isMesh||v.isLine||v.isPoints)&&(!v.frustumCulled||Jt.intersectsObject(v))){const ct=O.update(v),mt=v.material;if(G&&(v.boundingSphere!==void 0?(v.boundingSphere===null&&v.computeBoundingSphere(),wt.copy(v.boundingSphere.center)):(ct.boundingSphere===null&&ct.computeBoundingSphere(),wt.copy(ct.boundingSphere.center)),wt.applyMatrix4(v.matrixWorld).applyMatrix4(nt)),Array.isArray(mt)){const dt=ct.groups;for(let Rt=0,Pt=dt.length;Rt<Pt;Rt++){const bt=dt[Rt],kt=mt[bt.materialIndex];kt&&kt.visible&&m.push(v,ct,kt,k,wt.z,bt)}}else mt.visible&&m.push(v,ct,mt,k,wt.z,null)}}const J=v.children;for(let ct=0,mt=J.length;ct<mt;ct++)_l(J[ct],D,k,G)}function Jc(v,D,k,G){const U=v.opaque,J=v.transmissive,ct=v.transparent;p.setupLightsView(k),j===!0&&it.setGlobalState(y.clippingPlanes,k),G&&St.viewport(A.copy(G)),U.length>0&&aa(U,D,k),J.length>0&&aa(J,D,k),ct.length>0&&aa(ct,D,k),St.buffers.depth.setTest(!0),St.buffers.depth.setMask(!0),St.buffers.color.setMask(!0),St.setPolygonOffset(!1)}function Qc(v,D,k,G){if((k.isScene===!0?k.overrideMaterial:null)!==null)return;p.state.transmissionRenderTarget[G.id]===void 0&&(p.state.transmissionRenderTarget[G.id]=new An(1,1,{generateMipmaps:!0,type:Et.has("EXT_color_buffer_half_float")||Et.has("EXT_color_buffer_float")?Hs:xi,minFilter:Sn,samples:4,stencilBuffer:r,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:Xt.workingColorSpace}));const J=p.state.transmissionRenderTarget[G.id],ct=G.viewport||A;J.setSize(ct.z*y.transmissionResolutionScale,ct.w*y.transmissionResolutionScale);const mt=y.getRenderTarget(),dt=y.getActiveCubeFace(),Rt=y.getActiveMipmapLevel();y.setRenderTarget(J),y.getClearColor(z),W=y.getClearAlpha(),W<1&&y.setClearColor(16777215,.5),y.clear(),de&&vt.render(k);const Pt=y.toneMapping;y.toneMapping=Qi;const bt=G.viewport;if(G.viewport!==void 0&&(G.viewport=void 0),p.setupLightsView(G),j===!0&&it.setGlobalState(y.clippingPlanes,G),aa(v,k,G),zt.updateMultisampleRenderTarget(J),zt.updateRenderTargetMipmap(J),Et.has("WEBGL_multisampled_render_to_texture")===!1){let kt=!1;for(let $t=0,ce=D.length;$t<ce;$t++){const ie=D[$t],Qt=ie.object,Tt=ie.geometry,re=ie.material,qt=ie.group;if(re.side===Ni&&Qt.layers.test(G.layers)){const Xe=re.side;re.side=Ue,re.needsUpdate=!0,tu(Qt,k,G,Tt,re,qt),re.side=Xe,re.needsUpdate=!0,kt=!0}}kt===!0&&(zt.updateMultisampleRenderTarget(J),zt.updateRenderTargetMipmap(J))}y.setRenderTarget(mt,dt,Rt),y.setClearColor(z,W),bt!==void 0&&(G.viewport=bt),y.toneMapping=Pt}function aa(v,D,k){const G=D.isScene===!0?D.overrideMaterial:null;for(let U=0,J=v.length;U<J;U++){const ct=v[U],mt=ct.object,dt=ct.geometry,Rt=ct.group;let Pt=ct.material;Pt.allowOverride===!0&&G!==null&&(Pt=G),mt.layers.test(k.layers)&&tu(mt,D,k,dt,Pt,Rt)}}function tu(v,D,k,G,U,J){v.onBeforeRender(y,D,k,G,U,J),v.modelViewMatrix.multiplyMatrices(k.matrixWorldInverse,v.matrixWorld),v.normalMatrix.getNormalMatrix(v.modelViewMatrix),U.onBeforeRender(y,D,k,G,v,J),U.transparent===!0&&U.side===Ni&&U.forceSinglePass===!1?(U.side=Ue,U.needsUpdate=!0,y.renderBufferDirect(k,D,G,U,v,J),U.side=$i,U.needsUpdate=!0,y.renderBufferDirect(k,D,G,U,v,J),U.side=Ni):y.renderBufferDirect(k,D,G,U,v,J),v.onAfterRender(y,D,k,G,U,J)}function oa(v,D,k){D.isScene!==!0&&(D=It);const G=pt.get(v),U=p.state.lights,J=p.state.shadowsArray,ct=U.state.version,mt=Y.getParameters(v,U.state,J,D,k),dt=Y.getProgramCacheKey(mt);let Rt=G.programs;G.environment=v.isMeshStandardMaterial?D.environment:null,G.fog=D.fog,G.envMap=(v.isMeshStandardMaterial?fe:Ee).get(v.envMap||G.environment),G.envMapRotation=G.environment!==null&&v.envMap===null?D.environmentRotation:v.envMapRotation,Rt===void 0&&(v.addEventListener("dispose",Z),Rt=new Map,G.programs=Rt);let Pt=Rt.get(dt);if(Pt!==void 0){if(G.currentProgram===Pt&&G.lightsStateVersion===ct)return iu(v,mt),Pt}else mt.uniforms=Y.getUniforms(v),v.onBeforeCompile(mt,y),Pt=Y.acquireProgram(mt,dt),Rt.set(dt,Pt),G.uniforms=mt.uniforms;const bt=G.uniforms;return(!v.isShaderMaterial&&!v.isRawShaderMaterial||v.clipping===!0)&&(bt.clippingPlanes=it.uniform),iu(v,mt),G.needsLights=L0(v),G.lightsStateVersion=ct,G.needsLights&&(bt.ambientLightColor.value=U.state.ambient,bt.lightProbe.value=U.state.probe,bt.directionalLights.value=U.state.directional,bt.directionalLightShadows.value=U.state.directionalShadow,bt.spotLights.value=U.state.spot,bt.spotLightShadows.value=U.state.spotShadow,bt.rectAreaLights.value=U.state.rectArea,bt.ltc_1.value=U.state.rectAreaLTC1,bt.ltc_2.value=U.state.rectAreaLTC2,bt.pointLights.value=U.state.point,bt.pointLightShadows.value=U.state.pointShadow,bt.hemisphereLights.value=U.state.hemi,bt.directionalShadowMap.value=U.state.directionalShadowMap,bt.directionalShadowMatrix.value=U.state.directionalShadowMatrix,bt.spotShadowMap.value=U.state.spotShadowMap,bt.spotLightMatrix.value=U.state.spotLightMatrix,bt.spotLightMap.value=U.state.spotLightMap,bt.pointShadowMap.value=U.state.pointShadowMap,bt.pointShadowMatrix.value=U.state.pointShadowMatrix),G.currentProgram=Pt,G.uniformsList=null,Pt}function eu(v){if(v.uniformsList===null){const D=v.currentProgram.getUniforms();v.uniformsList=ia.seqWithValue(D.seq,v.uniforms)}return v.uniformsList}function iu(v,D){const k=pt.get(v);k.outputColorSpace=D.outputColorSpace,k.batching=D.batching,k.batchingColor=D.batchingColor,k.instancing=D.instancing,k.instancingColor=D.instancingColor,k.instancingMorph=D.instancingMorph,k.skinning=D.skinning,k.morphTargets=D.morphTargets,k.morphNormals=D.morphNormals,k.morphColors=D.morphColors,k.morphTargetsCount=D.morphTargetsCount,k.numClippingPlanes=D.numClippingPlanes,k.numIntersection=D.numClipIntersection,k.vertexAlphas=D.vertexAlphas,k.vertexTangents=D.vertexTangents,k.toneMapping=D.toneMapping}function P0(v,D,k,G,U){D.isScene!==!0&&(D=It),zt.resetTextureUnits();const J=D.fog,ct=G.isMeshStandardMaterial?D.environment:null,mt=I===null?y.outputColorSpace:I.isXRRenderTarget===!0?I.texture.colorSpace:rs,dt=(G.isMeshStandardMaterial?fe:Ee).get(G.envMap||ct),Rt=G.vertexColors===!0&&!!k.attributes.color&&k.attributes.color.itemSize===4,Pt=!!k.attributes.tangent&&(!!G.normalMap||G.anisotropy>0),bt=!!k.morphAttributes.position,kt=!!k.morphAttributes.normal,$t=!!k.morphAttributes.color;let ce=Qi;G.toneMapped&&(I===null||I.isXRRenderTarget===!0)&&(ce=y.toneMapping);const ie=k.morphAttributes.position||k.morphAttributes.normal||k.morphAttributes.color,Qt=ie!==void 0?ie.length:0,Tt=pt.get(G),re=p.state.lights;if(j===!0&&(ot===!0||v!==M)){const Le=v===M&&G.id===S;it.setState(G,v,Le)}let qt=!1;G.version===Tt.__version?(Tt.needsLights&&Tt.lightsStateVersion!==re.state.version||Tt.outputColorSpace!==mt||U.isBatchedMesh&&Tt.batching===!1||!U.isBatchedMesh&&Tt.batching===!0||U.isBatchedMesh&&Tt.batchingColor===!0&&U.colorTexture===null||U.isBatchedMesh&&Tt.batchingColor===!1&&U.colorTexture!==null||U.isInstancedMesh&&Tt.instancing===!1||!U.isInstancedMesh&&Tt.instancing===!0||U.isSkinnedMesh&&Tt.skinning===!1||!U.isSkinnedMesh&&Tt.skinning===!0||U.isInstancedMesh&&Tt.instancingColor===!0&&U.instanceColor===null||U.isInstancedMesh&&Tt.instancingColor===!1&&U.instanceColor!==null||U.isInstancedMesh&&Tt.instancingMorph===!0&&U.morphTexture===null||U.isInstancedMesh&&Tt.instancingMorph===!1&&U.morphTexture!==null||Tt.envMap!==dt||G.fog===!0&&Tt.fog!==J||Tt.numClippingPlanes!==void 0&&(Tt.numClippingPlanes!==it.numPlanes||Tt.numIntersection!==it.numIntersection)||Tt.vertexAlphas!==Rt||Tt.vertexTangents!==Pt||Tt.morphTargets!==bt||Tt.morphNormals!==kt||Tt.morphColors!==$t||Tt.toneMapping!==ce||Tt.morphTargetsCount!==Qt)&&(qt=!0):(qt=!0,Tt.__version=G.version);let Xe=Tt.currentProgram;qt===!0&&(Xe=oa(G,D,U));let ws=!1,qe=!1,sr=!1;const ae=Xe.getUniforms(),Je=Tt.uniforms;if(St.useProgram(Xe.program)&&(ws=!0,qe=!0,sr=!0),G.id!==S&&(S=G.id,qe=!0),ws||M!==v){St.buffers.depth.getReversed()&&v.reversedDepth!==!0&&(v._reversedDepth=!0,v.updateProjectionMatrix()),ae.setValue(P,"projectionMatrix",v.projectionMatrix),ae.setValue(P,"viewMatrix",v.matrixWorldInverse);const Oe=ae.map.cameraPosition;Oe!==void 0&&Oe.setValue(P,At.setFromMatrixPosition(v.matrixWorld)),Yt.logarithmicDepthBuffer&&ae.setValue(P,"logDepthBufFC",2/(Math.log(v.far+1)/Math.LN2)),(G.isMeshPhongMaterial||G.isMeshToonMaterial||G.isMeshLambertMaterial||G.isMeshBasicMaterial||G.isMeshStandardMaterial||G.isShaderMaterial)&&ae.setValue(P,"isOrthographic",v.isOrthographicCamera===!0),M!==v&&(M=v,qe=!0,sr=!0)}if(U.isSkinnedMesh){ae.setOptional(P,U,"bindMatrix"),ae.setOptional(P,U,"bindMatrixInverse");const Le=U.skeleton;Le&&(Le.boneTexture===null&&Le.computeBoneTexture(),ae.setValue(P,"boneTexture",Le.boneTexture,zt))}U.isBatchedMesh&&(ae.setOptional(P,U,"batchingTexture"),ae.setValue(P,"batchingTexture",U._matricesTexture,zt),ae.setOptional(P,U,"batchingIdTexture"),ae.setValue(P,"batchingIdTexture",U._indirectTexture,zt),ae.setOptional(P,U,"batchingColorTexture"),U._colorsTexture!==null&&ae.setValue(P,"batchingColorTexture",U._colorsTexture,zt));const Qe=k.morphAttributes;if((Qe.position!==void 0||Qe.normal!==void 0||Qe.color!==void 0)&&tt.update(U,k,Xe),(qe||Tt.receiveShadow!==U.receiveShadow)&&(Tt.receiveShadow=U.receiveShadow,ae.setValue(P,"receiveShadow",U.receiveShadow)),G.isMeshGouraudMaterial&&G.envMap!==null&&(Je.envMap.value=dt,Je.flipEnvMap.value=dt.isCubeTexture&&dt.isRenderTargetTexture===!1?-1:1),G.isMeshStandardMaterial&&G.envMap===null&&D.environment!==null&&(Je.envMapIntensity.value=D.environmentIntensity),qe&&(ae.setValue(P,"toneMappingExposure",y.toneMappingExposure),Tt.needsLights&&I0(Je,sr),J&&G.fog===!0&&K.refreshFogUniforms(Je,J),K.refreshMaterialUniforms(Je,G,H,Q,p.state.transmissionRenderTarget[v.id]),ia.upload(P,eu(Tt),Je,zt)),G.isShaderMaterial&&G.uniformsNeedUpdate===!0&&(ia.upload(P,eu(Tt),Je,zt),G.uniformsNeedUpdate=!1),G.isSpriteMaterial&&ae.setValue(P,"center",U.center),ae.setValue(P,"modelViewMatrix",U.modelViewMatrix),ae.setValue(P,"normalMatrix",U.normalMatrix),ae.setValue(P,"modelMatrix",U.matrixWorld),G.isShaderMaterial||G.isRawShaderMaterial){const Le=G.uniformsGroups;for(let Oe=0,xl=Le.length;Oe<xl;Oe++){const zn=Le[Oe];Nt.update(zn,Xe),Nt.bind(zn,Xe)}}return Xe}function I0(v,D){v.ambientLightColor.needsUpdate=D,v.lightProbe.needsUpdate=D,v.directionalLights.needsUpdate=D,v.directionalLightShadows.needsUpdate=D,v.pointLights.needsUpdate=D,v.pointLightShadows.needsUpdate=D,v.spotLights.needsUpdate=D,v.spotLightShadows.needsUpdate=D,v.rectAreaLights.needsUpdate=D,v.hemisphereLights.needsUpdate=D}function L0(v){return v.isMeshLambertMaterial||v.isMeshToonMaterial||v.isMeshPhongMaterial||v.isMeshStandardMaterial||v.isShadowMaterial||v.isShaderMaterial&&v.lights===!0}this.getActiveCubeFace=function(){return w},this.getActiveMipmapLevel=function(){return C},this.getRenderTarget=function(){return I},this.setRenderTargetTextures=function(v,D,k){const G=pt.get(v);G.__autoAllocateDepthBuffer=v.resolveDepthBuffer===!1,G.__autoAllocateDepthBuffer===!1&&(G.__useRenderToTexture=!1),pt.get(v.texture).__webglTexture=D,pt.get(v.depthTexture).__webglTexture=G.__autoAllocateDepthBuffer?void 0:k,G.__hasExternalTextures=!0},this.setRenderTargetFramebuffer=function(v,D){const k=pt.get(v);k.__webglFramebuffer=D,k.__useDefaultFramebuffer=D===void 0};const D0=P.createFramebuffer();this.setRenderTarget=function(v,D=0,k=0){I=v,w=D,C=k;let G=!0,U=null,J=!1,ct=!1;if(v){const dt=pt.get(v);if(dt.__useDefaultFramebuffer!==void 0)St.bindFramebuffer(P.FRAMEBUFFER,null),G=!1;else if(dt.__webglFramebuffer===void 0)zt.setupRenderTarget(v);else if(dt.__hasExternalTextures)zt.rebindTextures(v,pt.get(v.texture).__webglTexture,pt.get(v.depthTexture).__webglTexture);else if(v.depthBuffer){const bt=v.depthTexture;if(dt.__boundDepthTexture!==bt){if(bt!==null&&pt.has(bt)&&(v.width!==bt.image.width||v.height!==bt.image.height))throw new Error("WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size.");zt.setupDepthRenderbuffer(v)}}const Rt=v.texture;(Rt.isData3DTexture||Rt.isDataArrayTexture||Rt.isCompressedArrayTexture)&&(ct=!0);const Pt=pt.get(v).__webglFramebuffer;v.isWebGLCubeRenderTarget?(Array.isArray(Pt[D])?U=Pt[D][k]:U=Pt[D],J=!0):v.samples>0&&zt.useMultisampledRTT(v)===!1?U=pt.get(v).__webglMultisampledFramebuffer:Array.isArray(Pt)?U=Pt[k]:U=Pt,A.copy(v.viewport),B.copy(v.scissor),F=v.scissorTest}else A.copy(_t).multiplyScalar(H).floor(),B.copy(Ot).multiplyScalar(H).floor(),F=ne;if(k!==0&&(U=D0),St.bindFramebuffer(P.FRAMEBUFFER,U)&&G&&St.drawBuffers(v,U),St.viewport(A),St.scissor(B),St.setScissorTest(F),J){const dt=pt.get(v.texture);P.framebufferTexture2D(P.FRAMEBUFFER,P.COLOR_ATTACHMENT0,P.TEXTURE_CUBE_MAP_POSITIVE_X+D,dt.__webglTexture,k)}else if(ct){const dt=D;for(let Rt=0;Rt<v.textures.length;Rt++){const Pt=pt.get(v.textures[Rt]);P.framebufferTextureLayer(P.FRAMEBUFFER,P.COLOR_ATTACHMENT0+Rt,Pt.__webglTexture,k,dt)}}else if(v!==null&&k!==0){const dt=pt.get(v.texture);P.framebufferTexture2D(P.FRAMEBUFFER,P.COLOR_ATTACHMENT0,P.TEXTURE_2D,dt.__webglTexture,k)}S=-1},this.readRenderTargetPixels=function(v,D,k,G,U,J,ct,mt=0){if(!(v&&v.isWebGLRenderTarget)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}let dt=pt.get(v).__webglFramebuffer;if(v.isWebGLCubeRenderTarget&&ct!==void 0&&(dt=dt[ct]),dt){St.bindFramebuffer(P.FRAMEBUFFER,dt);try{const Rt=v.textures[mt],Pt=Rt.format,bt=Rt.type;if(!Yt.textureFormatReadable(Pt)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(!Yt.textureTypeReadable(bt)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}D>=0&&D<=v.width-G&&k>=0&&k<=v.height-U&&(v.textures.length>1&&P.readBuffer(P.COLOR_ATTACHMENT0+mt),P.readPixels(D,k,G,U,yt.convert(Pt),yt.convert(bt),J))}finally{const Rt=I!==null?pt.get(I).__webglFramebuffer:null;St.bindFramebuffer(P.FRAMEBUFFER,Rt)}}},this.readRenderTargetPixelsAsync=async function(v,D,k,G,U,J,ct,mt=0){if(!(v&&v.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let dt=pt.get(v).__webglFramebuffer;if(v.isWebGLCubeRenderTarget&&ct!==void 0&&(dt=dt[ct]),dt)if(D>=0&&D<=v.width-G&&k>=0&&k<=v.height-U){St.bindFramebuffer(P.FRAMEBUFFER,dt);const Rt=v.textures[mt],Pt=Rt.format,bt=Rt.type;if(!Yt.textureFormatReadable(Pt))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!Yt.textureTypeReadable(bt))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");const kt=P.createBuffer();P.bindBuffer(P.PIXEL_PACK_BUFFER,kt),P.bufferData(P.PIXEL_PACK_BUFFER,J.byteLength,P.STREAM_READ),v.textures.length>1&&P.readBuffer(P.COLOR_ATTACHMENT0+mt),P.readPixels(D,k,G,U,yt.convert(Pt),yt.convert(bt),0);const $t=I!==null?pt.get(I).__webglFramebuffer:null;St.bindFramebuffer(P.FRAMEBUFFER,$t);const ce=P.fenceSync(P.SYNC_GPU_COMMANDS_COMPLETE,0);return P.flush(),await Sf(P,ce,4),P.bindBuffer(P.PIXEL_PACK_BUFFER,kt),P.getBufferSubData(P.PIXEL_PACK_BUFFER,0,J),P.deleteBuffer(kt),P.deleteSync(ce),J}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")},this.copyFramebufferToTexture=function(v,D=null,k=0){const G=Math.pow(2,-k),U=Math.floor(v.image.width*G),J=Math.floor(v.image.height*G),ct=D!==null?D.x:0,mt=D!==null?D.y:0;zt.setTexture2D(v,0),P.copyTexSubImage2D(P.TEXTURE_2D,k,0,0,ct,mt,U,J),St.unbindTexture()};const U0=P.createFramebuffer(),N0=P.createFramebuffer();this.copyTextureToTexture=function(v,D,k=null,G=null,U=0,J=null){J===null&&(U!==0?(os("WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels."),J=U,U=0):J=0);let ct,mt,dt,Rt,Pt,bt,kt,$t,ce;const ie=v.isCompressedTexture?v.mipmaps[J]:v.image;if(k!==null)ct=k.max.x-k.min.x,mt=k.max.y-k.min.y,dt=k.isBox3?k.max.z-k.min.z:1,Rt=k.min.x,Pt=k.min.y,bt=k.isBox3?k.min.z:0;else{const Qe=Math.pow(2,-U);ct=Math.floor(ie.width*Qe),mt=Math.floor(ie.height*Qe),v.isDataArrayTexture?dt=ie.depth:v.isData3DTexture?dt=Math.floor(ie.depth*Qe):dt=1,Rt=0,Pt=0,bt=0}G!==null?(kt=G.x,$t=G.y,ce=G.z):(kt=0,$t=0,ce=0);const Qt=yt.convert(D.format),Tt=yt.convert(D.type);let re;D.isData3DTexture?(zt.setTexture3D(D,0),re=P.TEXTURE_3D):D.isDataArrayTexture||D.isCompressedArrayTexture?(zt.setTexture2DArray(D,0),re=P.TEXTURE_2D_ARRAY):(zt.setTexture2D(D,0),re=P.TEXTURE_2D),P.pixelStorei(P.UNPACK_FLIP_Y_WEBGL,D.flipY),P.pixelStorei(P.UNPACK_PREMULTIPLY_ALPHA_WEBGL,D.premultiplyAlpha),P.pixelStorei(P.UNPACK_ALIGNMENT,D.unpackAlignment);const qt=P.getParameter(P.UNPACK_ROW_LENGTH),Xe=P.getParameter(P.UNPACK_IMAGE_HEIGHT),ws=P.getParameter(P.UNPACK_SKIP_PIXELS),qe=P.getParameter(P.UNPACK_SKIP_ROWS),sr=P.getParameter(P.UNPACK_SKIP_IMAGES);P.pixelStorei(P.UNPACK_ROW_LENGTH,ie.width),P.pixelStorei(P.UNPACK_IMAGE_HEIGHT,ie.height),P.pixelStorei(P.UNPACK_SKIP_PIXELS,Rt),P.pixelStorei(P.UNPACK_SKIP_ROWS,Pt),P.pixelStorei(P.UNPACK_SKIP_IMAGES,bt);const ae=v.isDataArrayTexture||v.isData3DTexture,Je=D.isDataArrayTexture||D.isData3DTexture;if(v.isDepthTexture){const Qe=pt.get(v),Le=pt.get(D),Oe=pt.get(Qe.__renderTarget),xl=pt.get(Le.__renderTarget);St.bindFramebuffer(P.READ_FRAMEBUFFER,Oe.__webglFramebuffer),St.bindFramebuffer(P.DRAW_FRAMEBUFFER,xl.__webglFramebuffer);for(let zn=0;zn<dt;zn++)ae&&(P.framebufferTextureLayer(P.READ_FRAMEBUFFER,P.COLOR_ATTACHMENT0,pt.get(v).__webglTexture,U,bt+zn),P.framebufferTextureLayer(P.DRAW_FRAMEBUFFER,P.COLOR_ATTACHMENT0,pt.get(D).__webglTexture,J,ce+zn)),P.blitFramebuffer(Rt,Pt,ct,mt,kt,$t,ct,mt,P.DEPTH_BUFFER_BIT,P.NEAREST);St.bindFramebuffer(P.READ_FRAMEBUFFER,null),St.bindFramebuffer(P.DRAW_FRAMEBUFFER,null)}else if(U!==0||v.isRenderTargetTexture||pt.has(v)){const Qe=pt.get(v),Le=pt.get(D);St.bindFramebuffer(P.READ_FRAMEBUFFER,U0),St.bindFramebuffer(P.DRAW_FRAMEBUFFER,N0);for(let Oe=0;Oe<dt;Oe++)ae?P.framebufferTextureLayer(P.READ_FRAMEBUFFER,P.COLOR_ATTACHMENT0,Qe.__webglTexture,U,bt+Oe):P.framebufferTexture2D(P.READ_FRAMEBUFFER,P.COLOR_ATTACHMENT0,P.TEXTURE_2D,Qe.__webglTexture,U),Je?P.framebufferTextureLayer(P.DRAW_FRAMEBUFFER,P.COLOR_ATTACHMENT0,Le.__webglTexture,J,ce+Oe):P.framebufferTexture2D(P.DRAW_FRAMEBUFFER,P.COLOR_ATTACHMENT0,P.TEXTURE_2D,Le.__webglTexture,J),U!==0?P.blitFramebuffer(Rt,Pt,ct,mt,kt,$t,ct,mt,P.COLOR_BUFFER_BIT,P.NEAREST):Je?P.copyTexSubImage3D(re,J,kt,$t,ce+Oe,Rt,Pt,ct,mt):P.copyTexSubImage2D(re,J,kt,$t,Rt,Pt,ct,mt);St.bindFramebuffer(P.READ_FRAMEBUFFER,null),St.bindFramebuffer(P.DRAW_FRAMEBUFFER,null)}else Je?v.isDataTexture||v.isData3DTexture?P.texSubImage3D(re,J,kt,$t,ce,ct,mt,dt,Qt,Tt,ie.data):D.isCompressedArrayTexture?P.compressedTexSubImage3D(re,J,kt,$t,ce,ct,mt,dt,Qt,ie.data):P.texSubImage3D(re,J,kt,$t,ce,ct,mt,dt,Qt,Tt,ie):v.isDataTexture?P.texSubImage2D(P.TEXTURE_2D,J,kt,$t,ct,mt,Qt,Tt,ie.data):v.isCompressedTexture?P.compressedTexSubImage2D(P.TEXTURE_2D,J,kt,$t,ie.width,ie.height,Qt,ie.data):P.texSubImage2D(P.TEXTURE_2D,J,kt,$t,ct,mt,Qt,Tt,ie);P.pixelStorei(P.UNPACK_ROW_LENGTH,qt),P.pixelStorei(P.UNPACK_IMAGE_HEIGHT,Xe),P.pixelStorei(P.UNPACK_SKIP_PIXELS,ws),P.pixelStorei(P.UNPACK_SKIP_ROWS,qe),P.pixelStorei(P.UNPACK_SKIP_IMAGES,sr),J===0&&D.generateMipmaps&&P.generateMipmap(re),St.unbindTexture()},this.copyTextureToTexture3D=function(v,D,k=null,G=null,U=0){return os('WebGLRenderer: copyTextureToTexture3D function has been deprecated. Use "copyTextureToTexture" instead.'),this.copyTextureToTexture(v,D,k,G,U)},this.initRenderTarget=function(v){pt.get(v).__webglFramebuffer===void 0&&zt.setupRenderTarget(v)},this.initTexture=function(v){v.isCubeTexture?zt.setTextureCube(v,0):v.isData3DTexture?zt.setTexture3D(v,0):v.isDataArrayTexture||v.isCompressedArrayTexture?zt.setTexture2DArray(v,0):zt.setTexture2D(v,0),St.unbindTexture()},this.resetState=function(){w=0,C=0,I=null,St.reset(),lt.reset()},typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}get coordinateSystem(){return vi}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(t){this._outputColorSpace=t;const e=this.getContext();e.drawingBufferColorSpace=Xt._getDrawingBufferColorSpace(t),e.unpackColorSpace=Xt._getUnpackColorSpace()}}const Yc={type:"change"},ml={type:"start"},jc={type:"end"},sa=new Gh,Zc=new hn,p0=Math.cos(70*yf.DEG2RAD),ye=new N,Fe=2*Math.PI,Kt={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},gl=1e-6;class m0 extends cp{constructor(t,e=null){super(t,e),this.state=Kt.NONE,this.target=new N,this.cursor=new N,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.keyRotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"},this.mouseButtons={LEFT:Qn.ROTATE,MIDDLE:Qn.DOLLY,RIGHT:Qn.PAN},this.touches={ONE:ts.ROTATE,TWO:ts.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._domElementKeyEvents=null,this._lastPosition=new N,this._lastQuaternion=new Tn,this._lastTargetPosition=new N,this._quat=new Tn().setFromUnitVectors(t.up,new N(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new mc,this._sphericalDelta=new mc,this._scale=1,this._panOffset=new N,this._rotateStart=new Dt,this._rotateEnd=new Dt,this._rotateDelta=new Dt,this._panStart=new Dt,this._panEnd=new Dt,this._panDelta=new Dt,this._dollyStart=new Dt,this._dollyEnd=new Dt,this._dollyDelta=new Dt,this._dollyDirection=new N,this._mouse=new Dt,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=_0.bind(this),this._onPointerDown=g0.bind(this),this._onPointerUp=x0.bind(this),this._onContextMenu=T0.bind(this),this._onMouseWheel=M0.bind(this),this._onKeyDown=S0.bind(this),this._onTouchStart=b0.bind(this),this._onTouchMove=E0.bind(this),this._onMouseDown=v0.bind(this),this._onMouseMove=y0.bind(this),this._interceptControlDown=A0.bind(this),this._interceptControlUp=w0.bind(this),this.domElement!==null&&this.connect(this.domElement),this.update()}connect(t){super.connect(t),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointercancel",this._onPointerUp),this.domElement.addEventListener("contextmenu",this._onContextMenu),this.domElement.addEventListener("wheel",this._onMouseWheel,{passive:!1}),this.domElement.getRootNode().addEventListener("keydown",this._interceptControlDown,{passive:!0,capture:!0}),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.domElement.removeEventListener("pointercancel",this._onPointerUp),this.domElement.removeEventListener("wheel",this._onMouseWheel),this.domElement.removeEventListener("contextmenu",this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener("keydown",this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction="auto"}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(t){t.addEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=t}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(Yc),this.update(),this.state=Kt.NONE}update(t=null){const e=this.object.position;ye.copy(e).sub(this.target),ye.applyQuaternion(this._quat),this._spherical.setFromVector3(ye),this.autoRotate&&this.state===Kt.NONE&&this._rotateLeft(this._getAutoRotationAngle(t)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let i=this.minAzimuthAngle,n=this.maxAzimuthAngle;isFinite(i)&&isFinite(n)&&(i<-Math.PI?i+=Fe:i>Math.PI&&(i-=Fe),n<-Math.PI?n+=Fe:n>Math.PI&&(n-=Fe),i<=n?this._spherical.theta=Math.max(i,Math.min(n,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(i+n)/2?Math.max(i,this._spherical.theta):Math.min(n,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let r=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{const a=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),r=a!=this._spherical.radius}if(ye.setFromSpherical(this._spherical),ye.applyQuaternion(this._quatInverse),e.copy(this.target).add(ye),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let a=null;if(this.object.isPerspectiveCamera){const o=ye.length();a=this._clampDistance(o*this._scale);const h=o-a;this.object.position.addScaledVector(this._dollyDirection,h),this.object.updateMatrixWorld(),r=!!h}else if(this.object.isOrthographicCamera){const o=new N(this._mouse.x,this._mouse.y,0);o.unproject(this.object);const h=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),r=h!==this.object.zoom;const l=new N(this._mouse.x,this._mouse.y,0);l.unproject(this.object),this.object.position.sub(l).add(o),this.object.updateMatrixWorld(),a=ye.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;a!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(a).add(this.object.position):(sa.origin.copy(this.object.position),sa.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(sa.direction))<p0?this.object.lookAt(this.target):(Zc.setFromNormalAndCoplanarPoint(this.object.up,this.target),sa.intersectPlane(Zc,this.target))))}else if(this.object.isOrthographicCamera){const a=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),a!==this.object.zoom&&(this.object.updateProjectionMatrix(),r=!0)}return this._scale=1,this._performCursorZoom=!1,r||this._lastPosition.distanceToSquared(this.object.position)>gl||8*(1-this._lastQuaternion.dot(this.object.quaternion))>gl||this._lastTargetPosition.distanceToSquared(this.target)>gl?(this.dispatchEvent(Yc),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(t){return t!==null?Fe/60*this.autoRotateSpeed*t:Fe/60/60*this.autoRotateSpeed}_getZoomScale(t){const e=Math.abs(t*.01);return Math.pow(.95,this.zoomSpeed*e)}_rotateLeft(t){this._sphericalDelta.theta-=t}_rotateUp(t){this._sphericalDelta.phi-=t}_panLeft(t,e){ye.setFromMatrixColumn(e,0),ye.multiplyScalar(-t),this._panOffset.add(ye)}_panUp(t,e){this.screenSpacePanning===!0?ye.setFromMatrixColumn(e,1):(ye.setFromMatrixColumn(e,0),ye.crossVectors(this.object.up,ye)),ye.multiplyScalar(t),this._panOffset.add(ye)}_pan(t,e){const i=this.domElement;if(this.object.isPerspectiveCamera){const n=this.object.position;ye.copy(n).sub(this.target);let r=ye.length();r*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*t*r/i.clientHeight,this.object.matrix),this._panUp(2*e*r/i.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(t*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrix),this._panUp(e*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(t){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=t:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(t){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=t:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(t,e){if(!this.zoomToCursor)return;this._performCursorZoom=!0;const i=this.domElement.getBoundingClientRect(),n=t-i.left,r=e-i.top,a=i.width,o=i.height;this._mouse.x=n/a*2-1,this._mouse.y=-(r/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(t){return Math.max(this.minDistance,Math.min(this.maxDistance,t))}_handleMouseDownRotate(t){this._rotateStart.set(t.clientX,t.clientY)}_handleMouseDownDolly(t){this._updateZoomParameters(t.clientX,t.clientX),this._dollyStart.set(t.clientX,t.clientY)}_handleMouseDownPan(t){this._panStart.set(t.clientX,t.clientY)}_handleMouseMoveRotate(t){this._rotateEnd.set(t.clientX,t.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const e=this.domElement;this._rotateLeft(Fe*this._rotateDelta.x/e.clientHeight),this._rotateUp(Fe*this._rotateDelta.y/e.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(t){this._dollyEnd.set(t.clientX,t.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(t){this._panEnd.set(t.clientX,t.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(t){this._updateZoomParameters(t.clientX,t.clientY),t.deltaY<0?this._dollyIn(this._getZoomScale(t.deltaY)):t.deltaY>0&&this._dollyOut(this._getZoomScale(t.deltaY)),this.update()}_handleKeyDown(t){let e=!1;switch(t.code){case this.keys.UP:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateUp(Fe*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),e=!0;break;case this.keys.BOTTOM:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateUp(-Fe*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),e=!0;break;case this.keys.LEFT:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateLeft(Fe*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),e=!0;break;case this.keys.RIGHT:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateLeft(-Fe*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),e=!0;break}e&&(t.preventDefault(),this.update())}_handleTouchStartRotate(t){if(this._pointers.length===1)this._rotateStart.set(t.pageX,t.pageY);else{const e=this._getSecondPointerPosition(t),i=.5*(t.pageX+e.x),n=.5*(t.pageY+e.y);this._rotateStart.set(i,n)}}_handleTouchStartPan(t){if(this._pointers.length===1)this._panStart.set(t.pageX,t.pageY);else{const e=this._getSecondPointerPosition(t),i=.5*(t.pageX+e.x),n=.5*(t.pageY+e.y);this._panStart.set(i,n)}}_handleTouchStartDolly(t){const e=this._getSecondPointerPosition(t),i=t.pageX-e.x,n=t.pageY-e.y,r=Math.sqrt(i*i+n*n);this._dollyStart.set(0,r)}_handleTouchStartDollyPan(t){this.enableZoom&&this._handleTouchStartDolly(t),this.enablePan&&this._handleTouchStartPan(t)}_handleTouchStartDollyRotate(t){this.enableZoom&&this._handleTouchStartDolly(t),this.enableRotate&&this._handleTouchStartRotate(t)}_handleTouchMoveRotate(t){if(this._pointers.length==1)this._rotateEnd.set(t.pageX,t.pageY);else{const i=this._getSecondPointerPosition(t),n=.5*(t.pageX+i.x),r=.5*(t.pageY+i.y);this._rotateEnd.set(n,r)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const e=this.domElement;this._rotateLeft(Fe*this._rotateDelta.x/e.clientHeight),this._rotateUp(Fe*this._rotateDelta.y/e.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(t){if(this._pointers.length===1)this._panEnd.set(t.pageX,t.pageY);else{const e=this._getSecondPointerPosition(t),i=.5*(t.pageX+e.x),n=.5*(t.pageY+e.y);this._panEnd.set(i,n)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(t){const e=this._getSecondPointerPosition(t),i=t.pageX-e.x,n=t.pageY-e.y,r=Math.sqrt(i*i+n*n);this._dollyEnd.set(0,r),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);const a=(t.pageX+e.x)*.5,o=(t.pageY+e.y)*.5;this._updateZoomParameters(a,o)}_handleTouchMoveDollyPan(t){this.enableZoom&&this._handleTouchMoveDolly(t),this.enablePan&&this._handleTouchMovePan(t)}_handleTouchMoveDollyRotate(t){this.enableZoom&&this._handleTouchMoveDolly(t),this.enableRotate&&this._handleTouchMoveRotate(t)}_addPointer(t){this._pointers.push(t.pointerId)}_removePointer(t){delete this._pointerPositions[t.pointerId];for(let e=0;e<this._pointers.length;e++)if(this._pointers[e]==t.pointerId){this._pointers.splice(e,1);return}}_isTrackingPointer(t){for(let e=0;e<this._pointers.length;e++)if(this._pointers[e]==t.pointerId)return!0;return!1}_trackPointer(t){let e=this._pointerPositions[t.pointerId];e===void 0&&(e=new Dt,this._pointerPositions[t.pointerId]=e),e.set(t.pageX,t.pageY)}_getSecondPointerPosition(t){const e=t.pointerId===this._pointers[0]?this._pointers[1]:this._pointers[0];return this._pointerPositions[e]}_customWheelEvent(t){const e=t.deltaMode,i={clientX:t.clientX,clientY:t.clientY,deltaY:t.deltaY};switch(e){case 1:i.deltaY*=16;break;case 2:i.deltaY*=100;break}return t.ctrlKey&&!this._controlActive&&(i.deltaY*=10),i}}function g0(s){this.enabled!==!1&&(this._pointers.length===0&&(this.domElement.setPointerCapture(s.pointerId),this.domElement.addEventListener("pointermove",this._onPointerMove),this.domElement.addEventListener("pointerup",this._onPointerUp)),!this._isTrackingPointer(s)&&(this._addPointer(s),s.pointerType==="touch"?this._onTouchStart(s):this._onMouseDown(s)))}function _0(s){this.enabled!==!1&&(s.pointerType==="touch"?this._onTouchMove(s):this._onMouseMove(s))}function x0(s){switch(this._removePointer(s),this._pointers.length){case 0:this.domElement.releasePointerCapture(s.pointerId),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.dispatchEvent(jc),this.state=Kt.NONE;break;case 1:const t=this._pointers[0],e=this._pointerPositions[t];this._onTouchStart({pointerId:t,pageX:e.x,pageY:e.y});break}}function v0(s){let t;switch(s.button){case 0:t=this.mouseButtons.LEFT;break;case 1:t=this.mouseButtons.MIDDLE;break;case 2:t=this.mouseButtons.RIGHT;break;default:t=-1}switch(t){case Qn.DOLLY:if(this.enableZoom===!1)return;this._handleMouseDownDolly(s),this.state=Kt.DOLLY;break;case Qn.ROTATE:if(s.ctrlKey||s.metaKey||s.shiftKey){if(this.enablePan===!1)return;this._handleMouseDownPan(s),this.state=Kt.PAN}else{if(this.enableRotate===!1)return;this._handleMouseDownRotate(s),this.state=Kt.ROTATE}break;case Qn.PAN:if(s.ctrlKey||s.metaKey||s.shiftKey){if(this.enableRotate===!1)return;this._handleMouseDownRotate(s),this.state=Kt.ROTATE}else{if(this.enablePan===!1)return;this._handleMouseDownPan(s),this.state=Kt.PAN}break;default:this.state=Kt.NONE}this.state!==Kt.NONE&&this.dispatchEvent(ml)}function y0(s){switch(this.state){case Kt.ROTATE:if(this.enableRotate===!1)return;this._handleMouseMoveRotate(s);break;case Kt.DOLLY:if(this.enableZoom===!1)return;this._handleMouseMoveDolly(s);break;case Kt.PAN:if(this.enablePan===!1)return;this._handleMouseMovePan(s);break}}function M0(s){this.enabled===!1||this.enableZoom===!1||this.state!==Kt.NONE||(s.preventDefault(),this.dispatchEvent(ml),this._handleMouseWheel(this._customWheelEvent(s)),this.dispatchEvent(jc))}function S0(s){this.enabled!==!1&&this._handleKeyDown(s)}function b0(s){switch(this._trackPointer(s),this._pointers.length){case 1:switch(this.touches.ONE){case ts.ROTATE:if(this.enableRotate===!1)return;this._handleTouchStartRotate(s),this.state=Kt.TOUCH_ROTATE;break;case ts.PAN:if(this.enablePan===!1)return;this._handleTouchStartPan(s),this.state=Kt.TOUCH_PAN;break;default:this.state=Kt.NONE}break;case 2:switch(this.touches.TWO){case ts.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchStartDollyPan(s),this.state=Kt.TOUCH_DOLLY_PAN;break;case ts.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchStartDollyRotate(s),this.state=Kt.TOUCH_DOLLY_ROTATE;break;default:this.state=Kt.NONE}break;default:this.state=Kt.NONE}this.state!==Kt.NONE&&this.dispatchEvent(ml)}function E0(s){switch(this._trackPointer(s),this.state){case Kt.TOUCH_ROTATE:if(this.enableRotate===!1)return;this._handleTouchMoveRotate(s),this.update();break;case Kt.TOUCH_PAN:if(this.enablePan===!1)return;this._handleTouchMovePan(s),this.update();break;case Kt.TOUCH_DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchMoveDollyPan(s),this.update();break;case Kt.TOUCH_DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchMoveDollyRotate(s),this.update();break;default:this.state=Kt.NONE}}function T0(s){this.enabled!==!1&&s.preventDefault()}function A0(s){s.key==="Control"&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}function w0(s){s.key==="Control"&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}const Kc={LANGUAGE_CHANGE_CONFIRMED:vl.LANGUAGE_CHANGE_CONFIRMED},R0={languages:[],selected:void 0};class ra extends HTMLElement{static _languagesAttribute="languages";static _selectedAttribute="selected";_shadowRoot;_container;_canvas;_camera;_renderer;_scene;_controls;_resizeObserver;_clock=new hp;_lastTime=0;_lights=[];_spotlight;_flagsGroup;_languages=[];_selectedLanguageIndex=0;_animationFrameId=0;_targetGroupRotation=0;_currentGroupRotation=0;_unwrappedGroupRotation=0;_introCameraStartPosition=new N(0,5,10);_introCameraEndPosition=new N(0,5,10);_introCameraElapsed=0;_introCameraMoveDuration=2.2;_introCameraHoldDuration=.4;_isIntroCameraAnimating=!1;_isIntroCameraHolding=!1;_cameraLookAtY=2;_circleRadius=5;_wind=null;_menuContainer;_menuIntroStartScale=.72;_barMenu;_languageButtons=[];_confirmationDialog;_currentVisibleButtonIndex=0;_isInitialized=!1;_isInitializing=!1;static get observedAttributes(){return["languages","selected"]}constructor(t){super(),this._shadowRoot=this.attachShadow({mode:"open"});const{languages:e,selected:i}={...R0,...t};e.length>0&&this._initializeComponent(e,i)}_initializeComponent(t,e){if(!(this._isInitialized||this._isInitializing)){if(t.length===0){console.warn("LanguagePickerComponent: No languages provided");return}this._isInitializing=!0,this._setupScene(),this._setupUI(),this._setupFlags(t,e),this._setupLanguageDialog(),this._setupEventListeners(),this._isInitialized=!0,this._isInitializing=!1,this.isConnected&&this._animationFrameId===0&&(this._animationFrameId=requestAnimationFrame(this._animate))}}attributeChangedCallback(t,e,i){if(e!==i&&!(this._isInitialized||this._isInitializing)&&t===ra._languagesAttribute&&i!=null)try{const n=JSON.parse(i),r=this.getAttribute(ra._selectedAttribute);Array.isArray(n)&&n.length>0&&this._initializeComponent(n,r)}catch(n){console.error("LanguagePickerComponent: Error parsing languages attribute",n)}}_setupScene(){this._container=document.createElement("div"),this._container.style.width="100%",this._container.style.height="100%",this._container.style.position="relative",this._container.style.overflow="hidden",this._canvas=document.createElement("canvas"),this._canvas.style.width="100%",this._canvas.style.height="100%",this._canvas.style.display="block",this._container.appendChild(this._canvas),this._scene=new Yf,this._scene.background=new Vt(1710618),this._scene.fog=new tl(1710618,8,50),this._camera=new We(45,1,.1,100),this._camera.position.set(0,5,10),this._camera.lookAt(0,2,0),this._scene.add(this._camera),this._renderer=new f0({antialias:!0,canvas:this._canvas,alpha:!0}),this._renderer.debug.checkShaderErrors=!0,this._renderer.setPixelRatio(Math.min(window.devicePixelRatio,2)),this._renderer.shadowMap.enabled=!1,this._controls=new m0(this._camera,this._canvas),this._controls.enableDamping=!0,this._controls.dampingFactor=.05,this._controls.autoRotate=!1,this._controls.enableRotate=!1,this._controls.enablePan=!1,this._controls.enableZoom=!1,this._controls.target.set(0,this._cameraLookAtY,0);const e=new op(16777215,.3);this._scene.add(e),this._lights.push(e);const i=new pc(14674943,3);i.position.set(10,20,10),this._scene.add(i),this._lights.push(i);const n=new pc(11329439,.15);n.position.set(0,-1,0),this._scene.add(n),this._lights.push(n),this._spotlight=new rp(16777215,150),this._spotlight.angle=Math.PI/6,this._spotlight.penumbra=.3,this._spotlight.decay=2,this._spotlight.distance=30,this._scene.add(this._spotlight),this._scene.add(this._spotlight.target),this._lights.push(this._spotlight);const r=new ir(100,100),a=new $f({color:1710618,roughness:.8,metalness:.2}),o=new Si(r,a);o.rotation.x=-Math.PI/2,o.position.y=0,o.receiveShadow=!0,this._scene.add(o);const h=()=>{const l=this._container.clientWidth,c=this._container.clientHeight;l===0||c===0||(this._camera.aspect=l/c,this._camera.updateProjectionMatrix(),this._renderer.setSize(l,c,!1))};this._resizeObserver=new ResizeObserver(h),this._resizeObserver.observe(this._container),h(),this._wind=new Di.Wind({speed:8,direction:new N(1,0,0)}),this._flagsGroup=new er,this._scene.add(this._flagsGroup),this._shadowRoot.appendChild(this._container)}_setupUI(){this._barMenu=document.createElement(yu.selector),this._barMenu.visibleButtons=1,this._barMenu.cyclicalNavigation=!0,this._menuContainer=document.createElement("div"),this._menuContainer.style.position="absolute",this._menuContainer.style.bottom="25%",this._menuContainer.style.left="50%",this._menuContainer.style.zIndex="9999",this._menuContainer.style.pointerEvents="auto",this._menuContainer.style.transformOrigin="center bottom",this._setMenuIntroScale(1),this._menuContainer.appendChild(this._barMenu),this._shadowRoot.appendChild(this._menuContainer);const t=document.createElement("style");t.textContent=`
|
|
3955
|
+
}`;class AC{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(t,e){if(this.texture===null){const i=new Xh(t.texture);(t.depthNear!==e.depthNear||t.depthFar!==e.depthFar)&&(this.depthNear=t.depthNear,this.depthFar=t.depthFar),this.texture=i}}getMesh(t){if(this.texture!==null&&this.mesh===null){const e=t.cameras[0].viewport,i=new on({vertexShader:aC,fragmentShader:oC,uniforms:{depthColor:{value:this.texture},depthWidth:{value:e.z},depthHeight:{value:e.w}}});this.mesh=new Ei(new ir(20,20),i)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class lC extends Sn{constructor(t,e){super();const i=this;let n=null,r=1,a=null,o="local-floor",l=1,A=null,h=null,c=null,u=null,d=null,p=null;const m=new AC,g={},f=e.getContextAttributes();let M=null,y=null;const x=[],w=[],T=new Nt;let _=null;const P=new Ze;P.viewport=new ce;const E=new Ze;E.viewport=new ce;const v=[P,E],b=new Af;let z=null,F=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(j){let ot=x[j];return ot===void 0&&(ot=new $o,x[j]=ot),ot.getTargetRaySpace()},this.getControllerGrip=function(j){let ot=x[j];return ot===void 0&&(ot=new $o,x[j]=ot),ot.getGripSpace()},this.getHand=function(j){let ot=x[j];return ot===void 0&&(ot=new $o,x[j]=ot),ot.getHandSpace()};function U(j){const ot=w.indexOf(j.inputSource);if(ot===-1)return;const nt=x[ot];nt!==void 0&&(nt.update(j.inputSource,j.frame,A||a),nt.dispatchEvent({type:j.type,data:j.inputSource}))}function W(){n.removeEventListener("select",U),n.removeEventListener("selectstart",U),n.removeEventListener("selectend",U),n.removeEventListener("squeeze",U),n.removeEventListener("squeezestart",U),n.removeEventListener("squeezeend",U),n.removeEventListener("end",W),n.removeEventListener("inputsourceschange",Y);for(let j=0;j<x.length;j++){const ot=w[j];ot!==null&&(w[j]=null,x[j].disconnect(ot))}z=null,F=null,m.reset();for(const j in g)delete g[j];t.setRenderTarget(M),d=null,u=null,c=null,n=null,y=null,te.stop(),i.isPresenting=!1,t.setPixelRatio(_),t.setSize(T.width,T.height,!1),i.dispatchEvent({type:"sessionend"})}this.setFramebufferScaleFactor=function(j){r=j,i.isPresenting===!0&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(j){o=j,i.isPresenting===!0&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return A||a},this.setReferenceSpace=function(j){A=j},this.getBaseLayer=function(){return u!==null?u:d},this.getBinding=function(){return c},this.getFrame=function(){return p},this.getSession=function(){return n},this.setSession=async function(j){if(n=j,n!==null){if(M=t.getRenderTarget(),n.addEventListener("select",U),n.addEventListener("selectstart",U),n.addEventListener("selectend",U),n.addEventListener("squeeze",U),n.addEventListener("squeezestart",U),n.addEventListener("squeezeend",U),n.addEventListener("end",W),n.addEventListener("inputsourceschange",Y),f.xrCompatible!==!0&&await e.makeXRCompatible(),_=t.getPixelRatio(),t.getSize(T),typeof XRWebGLBinding<"u"&&(c=new XRWebGLBinding(n,e)),c!==null&&"createProjectionLayer"in XRWebGLBinding.prototype){let nt=null,bt=null,Tt=null;f.depth&&(Tt=f.stencil?e.DEPTH24_STENCIL8:e.DEPTH_COMPONENT24,nt=f.stencil?Ys:Ws,bt=f.stencil?Vs:yn);const Pt={colorFormat:e.RGBA8,depthFormat:Tt,scaleFactor:r};u=c.createProjectionLayer(Pt),n.updateRenderState({layers:[u]}),t.setPixelRatio(1),t.setSize(u.textureWidth,u.textureHeight,!1),y=new bn(u.textureWidth,u.textureHeight,{format:ci,type:Ci,depthTexture:new lh(u.textureWidth,u.textureHeight,bt,void 0,void 0,void 0,void 0,void 0,void 0,nt),stencilBuffer:f.stencil,colorSpace:t.outputColorSpace,samples:f.antialias?4:0,resolveDepthBuffer:u.ignoreDepthValues===!1,resolveStencilBuffer:u.ignoreDepthValues===!1})}else{const nt={antialias:f.antialias,alpha:!0,depth:f.depth,stencil:f.stencil,framebufferScaleFactor:r};d=new XRWebGLLayer(n,e,nt),n.updateRenderState({baseLayer:d}),t.setPixelRatio(1),t.setSize(d.framebufferWidth,d.framebufferHeight,!1),y=new bn(d.framebufferWidth,d.framebufferHeight,{format:ci,type:Ci,colorSpace:t.outputColorSpace,stencilBuffer:f.stencil,resolveDepthBuffer:d.ignoreDepthValues===!1,resolveStencilBuffer:d.ignoreDepthValues===!1})}y.isXRRenderTarget=!0,this.setFoveation(l),A=null,a=await n.requestReferenceSpace(o),te.setContext(n),te.start(),i.isPresenting=!0,i.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(n!==null)return n.environmentBlendMode},this.getDepthTexture=function(){return m.getDepthTexture()};function Y(j){for(let ot=0;ot<j.removed.length;ot++){const nt=j.removed[ot],bt=w.indexOf(nt);bt>=0&&(w[bt]=null,x[bt].disconnect(nt))}for(let ot=0;ot<j.added.length;ot++){const nt=j.added[ot];let bt=w.indexOf(nt);if(bt===-1){for(let Pt=0;Pt<x.length;Pt++)if(Pt>=w.length){w.push(nt),bt=Pt;break}else if(w[Pt]===null){w[Pt]=nt,bt=Pt;break}if(bt===-1)break}const Tt=x[bt];Tt&&Tt.connect(nt)}}const $=new B,H=new B;function rt(j,ot,nt){$.setFromMatrixPosition(ot.matrixWorld),H.setFromMatrixPosition(nt.matrixWorld);const bt=$.distanceTo(H),Tt=ot.projectionMatrix.elements,Pt=nt.projectionMatrix.elements,fe=Tt[14]/(Tt[10]-1),Yt=Tt[14]/(Tt[10]+1),R=(Tt[9]+1)/Tt[5],ie=(Tt[9]-1)/Tt[5],St=(Tt[8]-1)/Tt[0],jt=(Pt[8]+1)/Pt[0],Et=fe*St,ae=fe*jt,ft=bt/(-St+jt),zt=ft*-St;if(ot.matrixWorld.decompose(j.position,j.quaternion,j.scale),j.translateX(zt),j.translateZ(ft),j.matrixWorld.compose(j.position,j.quaternion,j.scale),j.matrixWorldInverse.copy(j.matrixWorld).invert(),Tt[10]===-1)j.projectionMatrix.copy(ot.projectionMatrix),j.projectionMatrixInverse.copy(ot.projectionMatrixInverse);else{const Se=fe+ft,ge=Yt+ft,S=Et-zt,C=ae+(bt-zt),O=R*Yt/ge*Se,Z=ie*Yt/ge*Se;j.projectionMatrix.makePerspective(S,C,O,Z,Se,ge),j.projectionMatrixInverse.copy(j.projectionMatrix).invert()}}function lt(j,ot){ot===null?j.matrixWorld.copy(j.matrix):j.matrixWorld.multiplyMatrices(ot.matrixWorld,j.matrix),j.matrixWorldInverse.copy(j.matrixWorld).invert()}this.updateCamera=function(j){if(n===null)return;let ot=j.near,nt=j.far;m.texture!==null&&(m.depthNear>0&&(ot=m.depthNear),m.depthFar>0&&(nt=m.depthFar)),b.near=E.near=P.near=ot,b.far=E.far=P.far=nt,(z!==b.near||F!==b.far)&&(n.updateRenderState({depthNear:b.near,depthFar:b.far}),z=b.near,F=b.far),b.layers.mask=j.layers.mask|6,P.layers.mask=b.layers.mask&3,E.layers.mask=b.layers.mask&5;const bt=j.parent,Tt=b.cameras;lt(b,bt);for(let Pt=0;Pt<Tt.length;Pt++)lt(Tt[Pt],bt);Tt.length===2?rt(b,P,E):b.projectionMatrix.copy(P.projectionMatrix),mt(j,b,bt)};function mt(j,ot,nt){nt===null?j.matrix.copy(ot.matrixWorld):(j.matrix.copy(nt.matrixWorld),j.matrix.invert(),j.matrix.multiply(ot.matrixWorld)),j.matrix.decompose(j.position,j.quaternion,j.scale),j.updateMatrixWorld(!0),j.projectionMatrix.copy(ot.projectionMatrix),j.projectionMatrixInverse.copy(ot.projectionMatrixInverse),j.isPerspectiveCamera&&(j.fov=Br*2*Math.atan(1/j.projectionMatrix.elements[5]),j.zoom=1)}this.getCamera=function(){return b},this.getFoveation=function(){if(!(u===null&&d===null))return l},this.setFoveation=function(j){l=j,u!==null&&(u.fixedFoveation=j),d!==null&&d.fixedFoveation!==void 0&&(d.fixedFoveation=j)},this.hasDepthSensing=function(){return m.texture!==null},this.getDepthSensingMesh=function(){return m.getMesh(b)},this.getCameraTexture=function(j){return g[j]};let Ut=null;function re(j,ot){if(h=ot.getViewerPose(A||a),p=ot,h!==null){const nt=h.views;d!==null&&(t.setRenderTargetFramebuffer(y,d.framebuffer),t.setRenderTarget(y));let bt=!1;nt.length!==b.cameras.length&&(b.cameras.length=0,bt=!0);for(let Yt=0;Yt<nt.length;Yt++){const R=nt[Yt];let ie=null;if(d!==null)ie=d.getViewport(R);else{const jt=c.getViewSubImage(u,R);ie=jt.viewport,Yt===0&&(t.setRenderTargetTextures(y,jt.colorTexture,jt.depthStencilTexture),t.setRenderTarget(y))}let St=v[Yt];St===void 0&&(St=new Ze,St.layers.enable(Yt),St.viewport=new ce,v[Yt]=St),St.matrix.fromArray(R.transform.matrix),St.matrix.decompose(St.position,St.quaternion,St.scale),St.projectionMatrix.fromArray(R.projectionMatrix),St.projectionMatrixInverse.copy(St.projectionMatrix).invert(),St.viewport.set(ie.x,ie.y,ie.width,ie.height),Yt===0&&(b.matrix.copy(St.matrix),b.matrix.decompose(b.position,b.quaternion,b.scale)),bt===!0&&b.cameras.push(St)}const Tt=n.enabledFeatures;if(Tt&&Tt.includes("depth-sensing")&&n.depthUsage=="gpu-optimized"&&c){const Yt=c.getDepthInformation(nt[0]);Yt&&Yt.isValid&&Yt.texture&&m.init(Yt,n.renderState)}if(Tt&&Tt.includes("camera-access")&&(t.state.unbindTexture(),c))for(let Yt=0;Yt<nt.length;Yt++){const R=nt[Yt].camera;if(R){let ie=g[R];ie||(ie=new Xh,g[R]=ie);const St=c.getCameraImage(R);ie.sourceTexture=St}}}for(let nt=0;nt<x.length;nt++){const bt=w[nt],Tt=x[nt];bt!==null&&Tt!==void 0&&Tt.update(bt,ot,A||a)}Ut&&Ut(j,ot),ot.detectedPlanes&&i.dispatchEvent({type:"planesdetected",data:ot}),p=null}const te=new mh;te.setAnimationLoop(re),this.setAnimationLoop=function(j){Ut=j},this.dispose=function(){}}}const Fn=new xi,hC=new de;function cC(s,t){function e(g,f){g.matrixAutoUpdate===!0&&g.updateMatrix(),f.value.copy(g.matrix)}function i(g,f){f.color.getRGB(g.fogColor.value,sh(s)),f.isFog?(g.fogNear.value=f.near,g.fogFar.value=f.far):f.isFogExp2&&(g.fogDensity.value=f.density)}function n(g,f,M,y,x){f.isMeshBasicMaterial||f.isMeshLambertMaterial?r(g,f):f.isMeshToonMaterial?(r(g,f),c(g,f)):f.isMeshPhongMaterial?(r(g,f),h(g,f)):f.isMeshStandardMaterial?(r(g,f),u(g,f),f.isMeshPhysicalMaterial&&d(g,f,x)):f.isMeshMatcapMaterial?(r(g,f),p(g,f)):f.isMeshDepthMaterial?r(g,f):f.isMeshDistanceMaterial?(r(g,f),m(g,f)):f.isMeshNormalMaterial?r(g,f):f.isLineBasicMaterial?(a(g,f),f.isLineDashedMaterial&&o(g,f)):f.isPointsMaterial?l(g,f,M,y):f.isSpriteMaterial?A(g,f):f.isShadowMaterial?(g.color.value.copy(f.color),g.opacity.value=f.opacity):f.isShaderMaterial&&(f.uniformsNeedUpdate=!1)}function r(g,f){g.opacity.value=f.opacity,f.color&&g.diffuse.value.copy(f.color),f.emissive&&g.emissive.value.copy(f.emissive).multiplyScalar(f.emissiveIntensity),f.map&&(g.map.value=f.map,e(f.map,g.mapTransform)),f.alphaMap&&(g.alphaMap.value=f.alphaMap,e(f.alphaMap,g.alphaMapTransform)),f.bumpMap&&(g.bumpMap.value=f.bumpMap,e(f.bumpMap,g.bumpMapTransform),g.bumpScale.value=f.bumpScale,f.side===Oe&&(g.bumpScale.value*=-1)),f.normalMap&&(g.normalMap.value=f.normalMap,e(f.normalMap,g.normalMapTransform),g.normalScale.value.copy(f.normalScale),f.side===Oe&&g.normalScale.value.negate()),f.displacementMap&&(g.displacementMap.value=f.displacementMap,e(f.displacementMap,g.displacementMapTransform),g.displacementScale.value=f.displacementScale,g.displacementBias.value=f.displacementBias),f.emissiveMap&&(g.emissiveMap.value=f.emissiveMap,e(f.emissiveMap,g.emissiveMapTransform)),f.specularMap&&(g.specularMap.value=f.specularMap,e(f.specularMap,g.specularMapTransform)),f.alphaTest>0&&(g.alphaTest.value=f.alphaTest);const M=t.get(f),y=M.envMap,x=M.envMapRotation;y&&(g.envMap.value=y,Fn.copy(x),Fn.x*=-1,Fn.y*=-1,Fn.z*=-1,y.isCubeTexture&&y.isRenderTargetTexture===!1&&(Fn.y*=-1,Fn.z*=-1),g.envMapRotation.value.setFromMatrix4(hC.makeRotationFromEuler(Fn)),g.flipEnvMap.value=y.isCubeTexture&&y.isRenderTargetTexture===!1?-1:1,g.reflectivity.value=f.reflectivity,g.ior.value=f.ior,g.refractionRatio.value=f.refractionRatio),f.lightMap&&(g.lightMap.value=f.lightMap,g.lightMapIntensity.value=f.lightMapIntensity,e(f.lightMap,g.lightMapTransform)),f.aoMap&&(g.aoMap.value=f.aoMap,g.aoMapIntensity.value=f.aoMapIntensity,e(f.aoMap,g.aoMapTransform))}function a(g,f){g.diffuse.value.copy(f.color),g.opacity.value=f.opacity,f.map&&(g.map.value=f.map,e(f.map,g.mapTransform))}function o(g,f){g.dashSize.value=f.dashSize,g.totalSize.value=f.dashSize+f.gapSize,g.scale.value=f.scale}function l(g,f,M,y){g.diffuse.value.copy(f.color),g.opacity.value=f.opacity,g.size.value=f.size*M,g.scale.value=y*.5,f.map&&(g.map.value=f.map,e(f.map,g.uvTransform)),f.alphaMap&&(g.alphaMap.value=f.alphaMap,e(f.alphaMap,g.alphaMapTransform)),f.alphaTest>0&&(g.alphaTest.value=f.alphaTest)}function A(g,f){g.diffuse.value.copy(f.color),g.opacity.value=f.opacity,g.rotation.value=f.rotation,f.map&&(g.map.value=f.map,e(f.map,g.mapTransform)),f.alphaMap&&(g.alphaMap.value=f.alphaMap,e(f.alphaMap,g.alphaMapTransform)),f.alphaTest>0&&(g.alphaTest.value=f.alphaTest)}function h(g,f){g.specular.value.copy(f.specular),g.shininess.value=Math.max(f.shininess,1e-4)}function c(g,f){f.gradientMap&&(g.gradientMap.value=f.gradientMap)}function u(g,f){g.metalness.value=f.metalness,f.metalnessMap&&(g.metalnessMap.value=f.metalnessMap,e(f.metalnessMap,g.metalnessMapTransform)),g.roughness.value=f.roughness,f.roughnessMap&&(g.roughnessMap.value=f.roughnessMap,e(f.roughnessMap,g.roughnessMapTransform)),f.envMap&&(g.envMapIntensity.value=f.envMapIntensity)}function d(g,f,M){g.ior.value=f.ior,f.sheen>0&&(g.sheenColor.value.copy(f.sheenColor).multiplyScalar(f.sheen),g.sheenRoughness.value=f.sheenRoughness,f.sheenColorMap&&(g.sheenColorMap.value=f.sheenColorMap,e(f.sheenColorMap,g.sheenColorMapTransform)),f.sheenRoughnessMap&&(g.sheenRoughnessMap.value=f.sheenRoughnessMap,e(f.sheenRoughnessMap,g.sheenRoughnessMapTransform))),f.clearcoat>0&&(g.clearcoat.value=f.clearcoat,g.clearcoatRoughness.value=f.clearcoatRoughness,f.clearcoatMap&&(g.clearcoatMap.value=f.clearcoatMap,e(f.clearcoatMap,g.clearcoatMapTransform)),f.clearcoatRoughnessMap&&(g.clearcoatRoughnessMap.value=f.clearcoatRoughnessMap,e(f.clearcoatRoughnessMap,g.clearcoatRoughnessMapTransform)),f.clearcoatNormalMap&&(g.clearcoatNormalMap.value=f.clearcoatNormalMap,e(f.clearcoatNormalMap,g.clearcoatNormalMapTransform),g.clearcoatNormalScale.value.copy(f.clearcoatNormalScale),f.side===Oe&&g.clearcoatNormalScale.value.negate())),f.dispersion>0&&(g.dispersion.value=f.dispersion),f.iridescence>0&&(g.iridescence.value=f.iridescence,g.iridescenceIOR.value=f.iridescenceIOR,g.iridescenceThicknessMinimum.value=f.iridescenceThicknessRange[0],g.iridescenceThicknessMaximum.value=f.iridescenceThicknessRange[1],f.iridescenceMap&&(g.iridescenceMap.value=f.iridescenceMap,e(f.iridescenceMap,g.iridescenceMapTransform)),f.iridescenceThicknessMap&&(g.iridescenceThicknessMap.value=f.iridescenceThicknessMap,e(f.iridescenceThicknessMap,g.iridescenceThicknessMapTransform))),f.transmission>0&&(g.transmission.value=f.transmission,g.transmissionSamplerMap.value=M.texture,g.transmissionSamplerSize.value.set(M.width,M.height),f.transmissionMap&&(g.transmissionMap.value=f.transmissionMap,e(f.transmissionMap,g.transmissionMapTransform)),g.thickness.value=f.thickness,f.thicknessMap&&(g.thicknessMap.value=f.thicknessMap,e(f.thicknessMap,g.thicknessMapTransform)),g.attenuationDistance.value=f.attenuationDistance,g.attenuationColor.value.copy(f.attenuationColor)),f.anisotropy>0&&(g.anisotropyVector.value.set(f.anisotropy*Math.cos(f.anisotropyRotation),f.anisotropy*Math.sin(f.anisotropyRotation)),f.anisotropyMap&&(g.anisotropyMap.value=f.anisotropyMap,e(f.anisotropyMap,g.anisotropyMapTransform))),g.specularIntensity.value=f.specularIntensity,g.specularColor.value.copy(f.specularColor),f.specularColorMap&&(g.specularColorMap.value=f.specularColorMap,e(f.specularColorMap,g.specularColorMapTransform)),f.specularIntensityMap&&(g.specularIntensityMap.value=f.specularIntensityMap,e(f.specularIntensityMap,g.specularIntensityMapTransform))}function p(g,f){f.matcap&&(g.matcap.value=f.matcap)}function m(g,f){const M=t.get(f).light;g.referencePosition.value.setFromMatrixPosition(M.matrixWorld),g.nearDistance.value=M.shadow.camera.near,g.farDistance.value=M.shadow.camera.far}return{refreshFogUniforms:i,refreshMaterialUniforms:n}}function uC(s,t,e,i){let n={},r={},a=[];const o=s.getParameter(s.MAX_UNIFORM_BUFFER_BINDINGS);function l(M,y){const x=y.program;i.uniformBlockBinding(M,x)}function A(M,y){let x=n[M.id];x===void 0&&(p(M),x=h(M),n[M.id]=x,M.addEventListener("dispose",g));const w=y.program;i.updateUBOMapping(M,w);const T=t.render.frame;r[M.id]!==T&&(u(M),r[M.id]=T)}function h(M){const y=c();M.__bindingPointIndex=y;const x=s.createBuffer(),w=M.__size,T=M.usage;return s.bindBuffer(s.UNIFORM_BUFFER,x),s.bufferData(s.UNIFORM_BUFFER,w,T),s.bindBuffer(s.UNIFORM_BUFFER,null),s.bindBufferBase(s.UNIFORM_BUFFER,y,x),x}function c(){for(let M=0;M<o;M++)if(a.indexOf(M)===-1)return a.push(M),M;return console.error("THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."),0}function u(M){const y=n[M.id],x=M.uniforms,w=M.__cache;s.bindBuffer(s.UNIFORM_BUFFER,y);for(let T=0,_=x.length;T<_;T++){const P=Array.isArray(x[T])?x[T]:[x[T]];for(let E=0,v=P.length;E<v;E++){const b=P[E];if(d(b,T,E,w)===!0){const z=b.__offset,F=Array.isArray(b.value)?b.value:[b.value];let U=0;for(let W=0;W<F.length;W++){const Y=F[W],$=m(Y);typeof Y=="number"||typeof Y=="boolean"?(b.__data[0]=Y,s.bufferSubData(s.UNIFORM_BUFFER,z+U,b.__data)):Y.isMatrix3?(b.__data[0]=Y.elements[0],b.__data[1]=Y.elements[1],b.__data[2]=Y.elements[2],b.__data[3]=0,b.__data[4]=Y.elements[3],b.__data[5]=Y.elements[4],b.__data[6]=Y.elements[5],b.__data[7]=0,b.__data[8]=Y.elements[6],b.__data[9]=Y.elements[7],b.__data[10]=Y.elements[8],b.__data[11]=0):(Y.toArray(b.__data,U),U+=$.storage/Float32Array.BYTES_PER_ELEMENT)}s.bufferSubData(s.UNIFORM_BUFFER,z,b.__data)}}}s.bindBuffer(s.UNIFORM_BUFFER,null)}function d(M,y,x,w){const T=M.value,_=y+"_"+x;if(w[_]===void 0)return typeof T=="number"||typeof T=="boolean"?w[_]=T:w[_]=T.clone(),!0;{const P=w[_];if(typeof T=="number"||typeof T=="boolean"){if(P!==T)return w[_]=T,!0}else if(P.equals(T)===!1)return P.copy(T),!0}return!1}function p(M){const y=M.uniforms;let x=0;const w=16;for(let _=0,P=y.length;_<P;_++){const E=Array.isArray(y[_])?y[_]:[y[_]];for(let v=0,b=E.length;v<b;v++){const z=E[v],F=Array.isArray(z.value)?z.value:[z.value];for(let U=0,W=F.length;U<W;U++){const Y=F[U],$=m(Y),H=x%w,rt=H%$.boundary,lt=H+rt;x+=rt,lt!==0&&w-lt<$.storage&&(x+=w-lt),z.__data=new Float32Array($.storage/Float32Array.BYTES_PER_ELEMENT),z.__offset=x,x+=$.storage}}}const T=x%w;return T>0&&(x+=w-T),M.__size=x,M.__cache={},this}function m(M){const y={boundary:0,storage:0};return typeof M=="number"||typeof M=="boolean"?(y.boundary=4,y.storage=4):M.isVector2?(y.boundary=8,y.storage=8):M.isVector3||M.isColor?(y.boundary=16,y.storage=12):M.isVector4?(y.boundary=16,y.storage=16):M.isMatrix3?(y.boundary=48,y.storage=48):M.isMatrix4?(y.boundary=64,y.storage=64):M.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",M),y}function g(M){const y=M.target;y.removeEventListener("dispose",g);const x=a.indexOf(y.__bindingPointIndex);a.splice(x,1),s.deleteBuffer(n[y.id]),delete n[y.id],delete r[y.id]}function f(){for(const M in n)s.deleteBuffer(n[M]);a=[],n={},r={}}return{bind:l,update:A,dispose:f}}class dC{constructor(t={}){const{canvas:e=xd(),context:i=null,depth:n=!0,stencil:r=!1,alpha:a=!1,antialias:o=!1,premultipliedAlpha:l=!0,preserveDrawingBuffer:A=!1,powerPreference:h="default",failIfMajorPerformanceCaveat:c=!1,reversedDepthBuffer:u=!1}=t;this.isWebGLRenderer=!0;let d;if(i!==null){if(typeof WebGLRenderingContext<"u"&&i instanceof WebGLRenderingContext)throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");d=i.getContextAttributes().alpha}else d=a;const p=new Uint32Array(4),m=new Int32Array(4);let g=null,f=null;const M=[],y=[];this.domElement=e,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.toneMapping=$i,this.toneMappingExposure=1,this.transmissionResolutionScale=1;const x=this;let w=!1;this._outputColorSpace=$e;let T=0,_=0,P=null,E=-1,v=null;const b=new ce,z=new ce;let F=null;const U=new Wt(0);let W=0,Y=e.width,$=e.height,H=1,rt=null,lt=null;const mt=new ce(0,0,Y,$),Ut=new ce(0,0,Y,$);let re=!1;const te=new iA;let j=!1,ot=!1;const nt=new de,bt=new B,Tt=new ce,Pt={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};let fe=!1;function Yt(){return P===null?H:1}let R=i;function ie(I,L){return e.getContext(I,L)}try{const I={alpha:!0,depth:n,stencil:r,antialias:o,premultipliedAlpha:l,preserveDrawingBuffer:A,powerPreference:h,failIfMajorPerformanceCaveat:c};if("setAttribute"in e&&e.setAttribute("data-engine",`three.js r${Fa}`),e.addEventListener("webglcontextlost",st,!1),e.addEventListener("webglcontextrestored",dt,!1),e.addEventListener("webglcontextcreationerror",q,!1),R===null){const L="webgl2";if(R=ie(L,I),R===null)throw ie(L)?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.")}}catch(I){throw console.error("THREE.WebGLRenderer: "+I.message),I}let St,jt,Et,ae,ft,zt,Se,ge,S,C,O,Z,Q,X,vt,it,Ct,It,tt,ct,_t,xt,At,Ft;function D(){St=new yp(R),St.init(),xt=new rC(R,St),jt=new pp(R,St,t,xt),Et=new nC(R,St),jt.reversedDepthBuffer&&u&&Et.buffers.depth.setReversed(!0),ae=new bp(R),ft=new Wm,zt=new sC(R,St,Et,ft,jt,xt,ae),Se=new Cp(x),ge=new Ep(x),S=new uf(R),At=new fp(R,S),C=new Sp(R,S,ae,At),O=new wp(R,C,S,ae),tt=new Tp(R,jt,zt),it=new mp(ft),Z=new Vm(x,Se,ge,St,jt,At,it),Q=new cC(x,ft),X=new Xm,vt=new Km(St),It=new dp(x,Se,ge,Et,O,d,l),Ct=new eC(x,O,jt),Ft=new uC(R,ae,jt,Et),ct=new gp(R,St,ae),_t=new Mp(R,St,ae),ae.programs=Z.programs,x.capabilities=jt,x.extensions=St,x.properties=ft,x.renderLists=X,x.shadowMap=Ct,x.state=Et,x.info=ae}D();const et=new lC(x,R);this.xr=et,this.getContext=function(){return R},this.getContextAttributes=function(){return R.getContextAttributes()},this.forceContextLoss=function(){const I=St.get("WEBGL_lose_context");I&&I.loseContext()},this.forceContextRestore=function(){const I=St.get("WEBGL_lose_context");I&&I.restoreContext()},this.getPixelRatio=function(){return H},this.setPixelRatio=function(I){I!==void 0&&(H=I,this.setSize(Y,$,!1))},this.getSize=function(I){return I.set(Y,$)},this.setSize=function(I,L,k=!0){if(et.isPresenting){console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.");return}Y=I,$=L,e.width=Math.floor(I*H),e.height=Math.floor(L*H),k===!0&&(e.style.width=I+"px",e.style.height=L+"px"),this.setViewport(0,0,I,L)},this.getDrawingBufferSize=function(I){return I.set(Y*H,$*H).floor()},this.setDrawingBufferSize=function(I,L,k){Y=I,$=L,H=k,e.width=Math.floor(I*k),e.height=Math.floor(L*k),this.setViewport(0,0,I,L)},this.getCurrentViewport=function(I){return I.copy(b)},this.getViewport=function(I){return I.copy(mt)},this.setViewport=function(I,L,k,G){I.isVector4?mt.set(I.x,I.y,I.z,I.w):mt.set(I,L,k,G),Et.viewport(b.copy(mt).multiplyScalar(H).round())},this.getScissor=function(I){return I.copy(Ut)},this.setScissor=function(I,L,k,G){I.isVector4?Ut.set(I.x,I.y,I.z,I.w):Ut.set(I,L,k,G),Et.scissor(z.copy(Ut).multiplyScalar(H).round())},this.getScissorTest=function(){return re},this.setScissorTest=function(I){Et.setScissorTest(re=I)},this.setOpaqueSort=function(I){rt=I},this.setTransparentSort=function(I){lt=I},this.getClearColor=function(I){return I.copy(It.getClearColor())},this.setClearColor=function(){It.setClearColor(...arguments)},this.getClearAlpha=function(){return It.getClearAlpha()},this.setClearAlpha=function(){It.setClearAlpha(...arguments)},this.clear=function(I=!0,L=!0,k=!0){let G=0;if(I){let N=!1;if(P!==null){const K=P.texture.format;N=K===io||K===eo||K===to}if(N){const K=P.texture.type,ht=K===Ci||K===yn||K===Gs||K===Vs||K===Ka||K===$a,gt=It.getClearColor(),ut=It.getClearAlpha(),wt=gt.r,Rt=gt.g,yt=gt.b;ht?(p[0]=wt,p[1]=Rt,p[2]=yt,p[3]=ut,R.clearBufferuiv(R.COLOR,0,p)):(m[0]=wt,m[1]=Rt,m[2]=yt,m[3]=ut,R.clearBufferiv(R.COLOR,0,m))}else G|=R.COLOR_BUFFER_BIT}L&&(G|=R.DEPTH_BUFFER_BIT),k&&(G|=R.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),R.clear(G)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){e.removeEventListener("webglcontextlost",st,!1),e.removeEventListener("webglcontextrestored",dt,!1),e.removeEventListener("webglcontextcreationerror",q,!1),It.dispose(),X.dispose(),vt.dispose(),ft.dispose(),Se.dispose(),ge.dispose(),O.dispose(),At.dispose(),Ft.dispose(),Z.dispose(),et.dispose(),et.removeEventListener("sessionstart",Si),et.removeEventListener("sessionend",qh),On.stop()};function st(I){I.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),w=!0}function dt(){console.log("THREE.WebGLRenderer: Context Restored."),w=!1;const I=ae.autoReset,L=Ct.enabled,k=Ct.autoUpdate,G=Ct.needsUpdate,N=Ct.type;D(),ae.autoReset=I,Ct.enabled=L,Ct.autoUpdate=k,Ct.needsUpdate=G,Ct.type=N}function q(I){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",I.statusMessage)}function J(I){const L=I.target;L.removeEventListener("dispose",J),pt(L)}function pt(I){Dt(I),ft.remove(I)}function Dt(I){const L=ft.get(I).programs;L!==void 0&&(L.forEach(function(k){Z.releaseProgram(k)}),I.isShaderMaterial&&Z.releaseShaderCache(I))}this.renderBufferDirect=function(I,L,k,G,N,K){L===null&&(L=Pt);const ht=N.isMesh&&N.matrixWorld.determinant()<0,gt=YC(I,L,k,G,N);Et.setMaterial(G,ht);let ut=k.index,wt=1;if(G.wireframe===!0){if(ut=C.getWireframeAttribute(k),ut===void 0)return;wt=2}const Rt=k.drawRange,yt=k.attributes.position;let Gt=Rt.start*wt,$t=(Rt.start+Rt.count)*wt;K!==null&&(Gt=Math.max(Gt,K.start*wt),$t=Math.min($t,(K.start+K.count)*wt)),ut!==null?(Gt=Math.max(Gt,0),$t=Math.min($t,ut.count)):yt!=null&&(Gt=Math.max(Gt,0),$t=Math.min($t,yt.count));const ue=$t-Gt;if(ue<0||ue===1/0)return;At.setup(N,G,gt,k,ut);let se,ee=ct;if(ut!==null&&(se=S.get(ut),ee=_t,ee.setIndex(se)),N.isMesh)G.wireframe===!0?(Et.setLineWidth(G.wireframeLinewidth*Yt()),ee.setMode(R.LINES)):ee.setMode(R.TRIANGLES);else if(N.isLine){let Mt=G.linewidth;Mt===void 0&&(Mt=1),Et.setLineWidth(Mt*Yt()),N.isLineSegments?ee.setMode(R.LINES):N.isLineLoop?ee.setMode(R.LINE_LOOP):ee.setMode(R.LINE_STRIP)}else N.isPoints?ee.setMode(R.POINTS):N.isSprite&&ee.setMode(R.TRIANGLES);if(N.isBatchedMesh)if(N._multiDrawInstances!==null)os("THREE.WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection."),ee.renderMultiDrawInstances(N._multiDrawStarts,N._multiDrawCounts,N._multiDrawCount,N._multiDrawInstances);else if(St.get("WEBGL_multi_draw"))ee.renderMultiDraw(N._multiDrawStarts,N._multiDrawCounts,N._multiDrawCount);else{const Mt=N._multiDrawStarts,oe=N._multiDrawCounts,Zt=N._multiDrawCount,je=ut?S.get(ut).bytesPerElement:1,Ts=ft.get(G).currentProgram.getUniforms();for(let Je=0;Je<Zt;Je++)Ts.setValue(R,"_gl_DrawID",Je),ee.render(Mt[Je]/je,oe[Je])}else if(N.isInstancedMesh)ee.renderInstances(Gt,ue,N.count);else if(k.isInstancedBufferGeometry){const Mt=k._maxInstanceCount!==void 0?k._maxInstanceCount:1/0,oe=Math.min(k.instanceCount,Mt);ee.renderInstances(Gt,ue,oe)}else ee.render(Gt,ue)};function ne(I,L,k){I.transparent===!0&&I.side===Bi&&I.forceSinglePass===!1?(I.side=Oe,I.needsUpdate=!0,oa(I,L,k),I.side=qi,I.needsUpdate=!0,oa(I,L,k),I.side=Bi):oa(I,L,k)}this.compile=function(I,L,k=null){k===null&&(k=I),f=vt.get(k),f.init(L),y.push(f),k.traverseVisible(function(N){N.isLight&&N.layers.test(L.layers)&&(f.pushLight(N),N.castShadow&&f.pushShadow(N))}),I!==k&&I.traverseVisible(function(N){N.isLight&&N.layers.test(L.layers)&&(f.pushLight(N),N.castShadow&&f.pushShadow(N))}),f.setupLights();const G=new Set;return I.traverse(function(N){if(!(N.isMesh||N.isPoints||N.isLine||N.isSprite))return;const K=N.material;if(K)if(Array.isArray(K))for(let ht=0;ht<K.length;ht++){const gt=K[ht];ne(gt,k,N),G.add(gt)}else ne(K,k,N),G.add(K)}),f=y.pop(),G},this.compileAsync=function(I,L,k=null){const G=this.compile(I,L,k);return new Promise(N=>{function K(){if(G.forEach(function(ht){ft.get(ht).currentProgram.isReady()&&G.delete(ht)}),G.size===0){N(I);return}setTimeout(K,10)}St.get("KHR_parallel_shader_compile")!==null?K():setTimeout(K,10)})};let Jt=null;function Vi(I){Jt&&Jt(I)}function Si(){On.stop()}function qh(){On.start()}const On=new mh;On.setAnimationLoop(Vi),typeof self<"u"&&On.setContext(self),this.setAnimationLoop=function(I){Jt=I,et.setAnimationLoop(I),I===null?On.stop():On.start()},et.addEventListener("sessionstart",Si),et.addEventListener("sessionend",qh),this.render=function(I,L){if(L!==void 0&&L.isCamera!==!0){console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(w===!0)return;if(I.matrixWorldAutoUpdate===!0&&I.updateMatrixWorld(),L.parent===null&&L.matrixWorldAutoUpdate===!0&&L.updateMatrixWorld(),et.enabled===!0&&et.isPresenting===!0&&(et.cameraAutoUpdate===!0&&et.updateCamera(L),L=et.getCamera()),I.isScene===!0&&I.onBeforeRender(x,I,L,P),f=vt.get(I,y.length),f.init(L),y.push(f),nt.multiplyMatrices(L.projectionMatrix,L.matrixWorldInverse),te.setFromProjectionMatrix(nt,Ii,L.reversedDepth),ot=this.localClippingEnabled,j=it.init(this.clippingPlanes,ot),g=X.get(I,M.length),g.init(),M.push(g),et.enabled===!0&&et.isPresenting===!0){const K=x.xr.getDepthSensingMesh();K!==null&&mA(K,L,-1/0,x.sortObjects)}mA(I,L,0,x.sortObjects),g.finish(),x.sortObjects===!0&&g.sort(rt,lt),fe=et.enabled===!1||et.isPresenting===!1||et.hasDepthSensing()===!1,fe&&It.addToRenderList(g,I),this.info.render.frame++,j===!0&&it.beginShadows();const k=f.state.shadowsArray;Ct.render(k,I,L),j===!0&&it.endShadows(),this.info.autoReset===!0&&this.info.reset();const G=g.opaque,N=g.transmissive;if(f.setupLights(),L.isArrayCamera){const K=L.cameras;if(N.length>0)for(let ht=0,gt=K.length;ht<gt;ht++){const ut=K[ht];$h(G,N,I,ut)}fe&&It.render(I);for(let ht=0,gt=K.length;ht<gt;ht++){const ut=K[ht];Kh(g,I,ut,ut.viewport)}}else N.length>0&&$h(G,N,I,L),fe&&It.render(I),Kh(g,I,L);P!==null&&_===0&&(zt.updateMultisampleRenderTarget(P),zt.updateRenderTargetMipmap(P)),I.isScene===!0&&I.onAfterRender(x,I,L),At.resetDefaultState(),E=-1,v=null,y.pop(),y.length>0?(f=y[y.length-1],j===!0&&it.setGlobalState(x.clippingPlanes,f.state.camera)):f=null,M.pop(),M.length>0?g=M[M.length-1]:g=null};function mA(I,L,k,G){if(I.visible===!1)return;if(I.layers.test(L.layers)){if(I.isGroup)k=I.renderOrder;else if(I.isLOD)I.autoUpdate===!0&&I.update(L);else if(I.isLight)f.pushLight(I),I.castShadow&&f.pushShadow(I);else if(I.isSprite){if(!I.frustumCulled||te.intersectsSprite(I)){G&&Tt.setFromMatrixPosition(I.matrixWorld).applyMatrix4(nt);const ht=O.update(I),gt=I.material;gt.visible&&g.push(I,ht,gt,k,Tt.z,null)}}else if((I.isMesh||I.isLine||I.isPoints)&&(!I.frustumCulled||te.intersectsObject(I))){const ht=O.update(I),gt=I.material;if(G&&(I.boundingSphere!==void 0?(I.boundingSphere===null&&I.computeBoundingSphere(),Tt.copy(I.boundingSphere.center)):(ht.boundingSphere===null&&ht.computeBoundingSphere(),Tt.copy(ht.boundingSphere.center)),Tt.applyMatrix4(I.matrixWorld).applyMatrix4(nt)),Array.isArray(gt)){const ut=ht.groups;for(let wt=0,Rt=ut.length;wt<Rt;wt++){const yt=ut[wt],Gt=gt[yt.materialIndex];Gt&&Gt.visible&&g.push(I,ht,Gt,k,Tt.z,yt)}}else gt.visible&&g.push(I,ht,gt,k,Tt.z,null)}}const K=I.children;for(let ht=0,gt=K.length;ht<gt;ht++)mA(K[ht],L,k,G)}function Kh(I,L,k,G){const N=I.opaque,K=I.transmissive,ht=I.transparent;f.setupLightsView(k),j===!0&&it.setGlobalState(x.clippingPlanes,k),G&&Et.viewport(b.copy(G)),N.length>0&&aa(N,L,k),K.length>0&&aa(K,L,k),ht.length>0&&aa(ht,L,k),Et.buffers.depth.setTest(!0),Et.buffers.depth.setMask(!0),Et.buffers.color.setMask(!0),Et.setPolygonOffset(!1)}function $h(I,L,k,G){if((k.isScene===!0?k.overrideMaterial:null)!==null)return;f.state.transmissionRenderTarget[G.id]===void 0&&(f.state.transmissionRenderTarget[G.id]=new bn(1,1,{generateMipmaps:!0,type:St.has("EXT_color_buffer_half_float")||St.has("EXT_color_buffer_float")?Hs:Ci,minFilter:En,samples:4,stencilBuffer:r,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:Xt.workingColorSpace}));const K=f.state.transmissionRenderTarget[G.id],ht=G.viewport||b;K.setSize(ht.z*x.transmissionResolutionScale,ht.w*x.transmissionResolutionScale);const gt=x.getRenderTarget(),ut=x.getActiveCubeFace(),wt=x.getActiveMipmapLevel();x.setRenderTarget(K),x.getClearColor(U),W=x.getClearAlpha(),W<1&&x.setClearColor(16777215,.5),x.clear(),fe&&It.render(k);const Rt=x.toneMapping;x.toneMapping=$i;const yt=G.viewport;if(G.viewport!==void 0&&(G.viewport=void 0),f.setupLightsView(G),j===!0&&it.setGlobalState(x.clippingPlanes,G),aa(I,k,G),zt.updateMultisampleRenderTarget(K),zt.updateRenderTargetMipmap(K),St.has("WEBGL_multisampled_render_to_texture")===!1){let Gt=!1;for(let $t=0,ue=L.length;$t<ue;$t++){const se=L[$t],ee=se.object,Mt=se.geometry,oe=se.material,Zt=se.group;if(oe.side===Bi&&ee.layers.test(G.layers)){const je=oe.side;oe.side=Oe,oe.needsUpdate=!0,tc(ee,k,G,Mt,oe,Zt),oe.side=je,oe.needsUpdate=!0,Gt=!0}}Gt===!0&&(zt.updateMultisampleRenderTarget(K),zt.updateRenderTargetMipmap(K))}x.setRenderTarget(gt,ut,wt),x.setClearColor(U,W),yt!==void 0&&(G.viewport=yt),x.toneMapping=Rt}function aa(I,L,k){const G=L.isScene===!0?L.overrideMaterial:null;for(let N=0,K=I.length;N<K;N++){const ht=I[N],gt=ht.object,ut=ht.geometry,wt=ht.group;let Rt=ht.material;Rt.allowOverride===!0&&G!==null&&(Rt=G),gt.layers.test(k.layers)&&tc(gt,L,k,ut,Rt,wt)}}function tc(I,L,k,G,N,K){I.onBeforeRender(x,L,k,G,N,K),I.modelViewMatrix.multiplyMatrices(k.matrixWorldInverse,I.matrixWorld),I.normalMatrix.getNormalMatrix(I.modelViewMatrix),N.onBeforeRender(x,L,k,G,I,K),N.transparent===!0&&N.side===Bi&&N.forceSinglePass===!1?(N.side=Oe,N.needsUpdate=!0,x.renderBufferDirect(k,L,G,N,I,K),N.side=qi,N.needsUpdate=!0,x.renderBufferDirect(k,L,G,N,I,K),N.side=Bi):x.renderBufferDirect(k,L,G,N,I,K),I.onAfterRender(x,L,k,G,N,K)}function oa(I,L,k){L.isScene!==!0&&(L=Pt);const G=ft.get(I),N=f.state.lights,K=f.state.shadowsArray,ht=N.state.version,gt=Z.getParameters(I,N.state,K,L,k),ut=Z.getProgramCacheKey(gt);let wt=G.programs;G.environment=I.isMeshStandardMaterial?L.environment:null,G.fog=L.fog,G.envMap=(I.isMeshStandardMaterial?ge:Se).get(I.envMap||G.environment),G.envMapRotation=G.environment!==null&&I.envMap===null?L.environmentRotation:I.envMapRotation,wt===void 0&&(I.addEventListener("dispose",J),wt=new Map,G.programs=wt);let Rt=wt.get(ut);if(Rt!==void 0){if(G.currentProgram===Rt&&G.lightsStateVersion===ht)return ic(I,gt),Rt}else gt.uniforms=Z.getUniforms(I),I.onBeforeCompile(gt,x),Rt=Z.acquireProgram(gt,ut),wt.set(ut,Rt),G.uniforms=gt.uniforms;const yt=G.uniforms;return(!I.isShaderMaterial&&!I.isRawShaderMaterial||I.clipping===!0)&&(yt.clippingPlanes=it.uniform),ic(I,gt),G.needsLights=ZC(I),G.lightsStateVersion=ht,G.needsLights&&(yt.ambientLightColor.value=N.state.ambient,yt.lightProbe.value=N.state.probe,yt.directionalLights.value=N.state.directional,yt.directionalLightShadows.value=N.state.directionalShadow,yt.spotLights.value=N.state.spot,yt.spotLightShadows.value=N.state.spotShadow,yt.rectAreaLights.value=N.state.rectArea,yt.ltc_1.value=N.state.rectAreaLTC1,yt.ltc_2.value=N.state.rectAreaLTC2,yt.pointLights.value=N.state.point,yt.pointLightShadows.value=N.state.pointShadow,yt.hemisphereLights.value=N.state.hemi,yt.directionalShadowMap.value=N.state.directionalShadowMap,yt.directionalShadowMatrix.value=N.state.directionalShadowMatrix,yt.spotShadowMap.value=N.state.spotShadowMap,yt.spotLightMatrix.value=N.state.spotLightMatrix,yt.spotLightMap.value=N.state.spotLightMap,yt.pointShadowMap.value=N.state.pointShadowMap,yt.pointShadowMatrix.value=N.state.pointShadowMatrix),G.currentProgram=Rt,G.uniformsList=null,Rt}function ec(I){if(I.uniformsList===null){const L=I.currentProgram.getUniforms();I.uniformsList=ia.seqWithValue(L.seq,I.uniforms)}return I.uniformsList}function ic(I,L){const k=ft.get(I);k.outputColorSpace=L.outputColorSpace,k.batching=L.batching,k.batchingColor=L.batchingColor,k.instancing=L.instancing,k.instancingColor=L.instancingColor,k.instancingMorph=L.instancingMorph,k.skinning=L.skinning,k.morphTargets=L.morphTargets,k.morphNormals=L.morphNormals,k.morphColors=L.morphColors,k.morphTargetsCount=L.morphTargetsCount,k.numClippingPlanes=L.numClippingPlanes,k.numIntersection=L.numClipIntersection,k.vertexAlphas=L.vertexAlphas,k.vertexTangents=L.vertexTangents,k.toneMapping=L.toneMapping}function YC(I,L,k,G,N){L.isScene!==!0&&(L=Pt),zt.resetTextureUnits();const K=L.fog,ht=G.isMeshStandardMaterial?L.environment:null,gt=P===null?x.outputColorSpace:P.isXRRenderTarget===!0?P.texture.colorSpace:rs,ut=(G.isMeshStandardMaterial?ge:Se).get(G.envMap||ht),wt=G.vertexColors===!0&&!!k.attributes.color&&k.attributes.color.itemSize===4,Rt=!!k.attributes.tangent&&(!!G.normalMap||G.anisotropy>0),yt=!!k.morphAttributes.position,Gt=!!k.morphAttributes.normal,$t=!!k.morphAttributes.color;let ue=$i;G.toneMapped&&(P===null||P.isXRRenderTarget===!0)&&(ue=x.toneMapping);const se=k.morphAttributes.position||k.morphAttributes.normal||k.morphAttributes.color,ee=se!==void 0?se.length:0,Mt=ft.get(G),oe=f.state.lights;if(j===!0&&(ot===!0||I!==v)){const De=I===v&&G.id===E;it.setState(G,I,De)}let Zt=!1;G.version===Mt.__version?(Mt.needsLights&&Mt.lightsStateVersion!==oe.state.version||Mt.outputColorSpace!==gt||N.isBatchedMesh&&Mt.batching===!1||!N.isBatchedMesh&&Mt.batching===!0||N.isBatchedMesh&&Mt.batchingColor===!0&&N.colorTexture===null||N.isBatchedMesh&&Mt.batchingColor===!1&&N.colorTexture!==null||N.isInstancedMesh&&Mt.instancing===!1||!N.isInstancedMesh&&Mt.instancing===!0||N.isSkinnedMesh&&Mt.skinning===!1||!N.isSkinnedMesh&&Mt.skinning===!0||N.isInstancedMesh&&Mt.instancingColor===!0&&N.instanceColor===null||N.isInstancedMesh&&Mt.instancingColor===!1&&N.instanceColor!==null||N.isInstancedMesh&&Mt.instancingMorph===!0&&N.morphTexture===null||N.isInstancedMesh&&Mt.instancingMorph===!1&&N.morphTexture!==null||Mt.envMap!==ut||G.fog===!0&&Mt.fog!==K||Mt.numClippingPlanes!==void 0&&(Mt.numClippingPlanes!==it.numPlanes||Mt.numIntersection!==it.numIntersection)||Mt.vertexAlphas!==wt||Mt.vertexTangents!==Rt||Mt.morphTargets!==yt||Mt.morphNormals!==Gt||Mt.morphColors!==$t||Mt.toneMapping!==ue||Mt.morphTargetsCount!==ee)&&(Zt=!0):(Zt=!0,Mt.__version=G.version);let je=Mt.currentProgram;Zt===!0&&(je=oa(G,L,N));let Ts=!1,Je=!1,sr=!1;const Ae=je.getUniforms(),ei=Mt.uniforms;if(Et.useProgram(je.program)&&(Ts=!0,Je=!0,sr=!0),G.id!==E&&(E=G.id,Je=!0),Ts||v!==I){Et.buffers.depth.getReversed()&&I.reversedDepth!==!0&&(I._reversedDepth=!0,I.updateProjectionMatrix()),Ae.setValue(R,"projectionMatrix",I.projectionMatrix),Ae.setValue(R,"viewMatrix",I.matrixWorldInverse);const ke=Ae.map.cameraPosition;ke!==void 0&&ke.setValue(R,bt.setFromMatrixPosition(I.matrixWorld)),jt.logarithmicDepthBuffer&&Ae.setValue(R,"logDepthBufFC",2/(Math.log(I.far+1)/Math.LN2)),(G.isMeshPhongMaterial||G.isMeshToonMaterial||G.isMeshLambertMaterial||G.isMeshBasicMaterial||G.isMeshStandardMaterial||G.isShaderMaterial)&&Ae.setValue(R,"isOrthographic",I.isOrthographicCamera===!0),v!==I&&(v=I,Je=!0,sr=!0)}if(N.isSkinnedMesh){Ae.setOptional(R,N,"bindMatrix"),Ae.setOptional(R,N,"bindMatrixInverse");const De=N.skeleton;De&&(De.boneTexture===null&&De.computeBoneTexture(),Ae.setValue(R,"boneTexture",De.boneTexture,zt))}N.isBatchedMesh&&(Ae.setOptional(R,N,"batchingTexture"),Ae.setValue(R,"batchingTexture",N._matricesTexture,zt),Ae.setOptional(R,N,"batchingIdTexture"),Ae.setValue(R,"batchingIdTexture",N._indirectTexture,zt),Ae.setOptional(R,N,"batchingColorTexture"),N._colorsTexture!==null&&Ae.setValue(R,"batchingColorTexture",N._colorsTexture,zt));const ii=k.morphAttributes;if((ii.position!==void 0||ii.normal!==void 0||ii.color!==void 0)&&tt.update(N,k,je),(Je||Mt.receiveShadow!==N.receiveShadow)&&(Mt.receiveShadow=N.receiveShadow,Ae.setValue(R,"receiveShadow",N.receiveShadow)),G.isMeshGouraudMaterial&&G.envMap!==null&&(ei.envMap.value=ut,ei.flipEnvMap.value=ut.isCubeTexture&&ut.isRenderTargetTexture===!1?-1:1),G.isMeshStandardMaterial&&G.envMap===null&&L.environment!==null&&(ei.envMapIntensity.value=L.environmentIntensity),Je&&(Ae.setValue(R,"toneMappingExposure",x.toneMappingExposure),Mt.needsLights&&XC(ei,sr),K&&G.fog===!0&&Q.refreshFogUniforms(ei,K),Q.refreshMaterialUniforms(ei,G,H,$,f.state.transmissionRenderTarget[I.id]),ia.upload(R,ec(Mt),ei,zt)),G.isShaderMaterial&&G.uniformsNeedUpdate===!0&&(ia.upload(R,ec(Mt),ei,zt),G.uniformsNeedUpdate=!1),G.isSpriteMaterial&&Ae.setValue(R,"center",N.center),Ae.setValue(R,"modelViewMatrix",N.modelViewMatrix),Ae.setValue(R,"normalMatrix",N.normalMatrix),Ae.setValue(R,"modelMatrix",N.matrixWorld),G.isShaderMaterial||G.isRawShaderMaterial){const De=G.uniformsGroups;for(let ke=0,CA=De.length;ke<CA;ke++){const Un=De[ke];Ft.update(Un,je),Ft.bind(Un,je)}}return je}function XC(I,L){I.ambientLightColor.needsUpdate=L,I.lightProbe.needsUpdate=L,I.directionalLights.needsUpdate=L,I.directionalLightShadows.needsUpdate=L,I.pointLights.needsUpdate=L,I.pointLightShadows.needsUpdate=L,I.spotLights.needsUpdate=L,I.spotLightShadows.needsUpdate=L,I.rectAreaLights.needsUpdate=L,I.hemisphereLights.needsUpdate=L}function ZC(I){return I.isMeshLambertMaterial||I.isMeshToonMaterial||I.isMeshPhongMaterial||I.isMeshStandardMaterial||I.isShadowMaterial||I.isShaderMaterial&&I.lights===!0}this.getActiveCubeFace=function(){return T},this.getActiveMipmapLevel=function(){return _},this.getRenderTarget=function(){return P},this.setRenderTargetTextures=function(I,L,k){const G=ft.get(I);G.__autoAllocateDepthBuffer=I.resolveDepthBuffer===!1,G.__autoAllocateDepthBuffer===!1&&(G.__useRenderToTexture=!1),ft.get(I.texture).__webglTexture=L,ft.get(I.depthTexture).__webglTexture=G.__autoAllocateDepthBuffer?void 0:k,G.__hasExternalTextures=!0},this.setRenderTargetFramebuffer=function(I,L){const k=ft.get(I);k.__webglFramebuffer=L,k.__useDefaultFramebuffer=L===void 0};const jC=R.createFramebuffer();this.setRenderTarget=function(I,L=0,k=0){P=I,T=L,_=k;let G=!0,N=null,K=!1,ht=!1;if(I){const ut=ft.get(I);if(ut.__useDefaultFramebuffer!==void 0)Et.bindFramebuffer(R.FRAMEBUFFER,null),G=!1;else if(ut.__webglFramebuffer===void 0)zt.setupRenderTarget(I);else if(ut.__hasExternalTextures)zt.rebindTextures(I,ft.get(I.texture).__webglTexture,ft.get(I.depthTexture).__webglTexture);else if(I.depthBuffer){const yt=I.depthTexture;if(ut.__boundDepthTexture!==yt){if(yt!==null&&ft.has(yt)&&(I.width!==yt.image.width||I.height!==yt.image.height))throw new Error("WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size.");zt.setupDepthRenderbuffer(I)}}const wt=I.texture;(wt.isData3DTexture||wt.isDataArrayTexture||wt.isCompressedArrayTexture)&&(ht=!0);const Rt=ft.get(I).__webglFramebuffer;I.isWebGLCubeRenderTarget?(Array.isArray(Rt[L])?N=Rt[L][k]:N=Rt[L],K=!0):I.samples>0&&zt.useMultisampledRTT(I)===!1?N=ft.get(I).__webglMultisampledFramebuffer:Array.isArray(Rt)?N=Rt[k]:N=Rt,b.copy(I.viewport),z.copy(I.scissor),F=I.scissorTest}else b.copy(mt).multiplyScalar(H).floor(),z.copy(Ut).multiplyScalar(H).floor(),F=re;if(k!==0&&(N=jC),Et.bindFramebuffer(R.FRAMEBUFFER,N)&&G&&Et.drawBuffers(I,N),Et.viewport(b),Et.scissor(z),Et.setScissorTest(F),K){const ut=ft.get(I.texture);R.framebufferTexture2D(R.FRAMEBUFFER,R.COLOR_ATTACHMENT0,R.TEXTURE_CUBE_MAP_POSITIVE_X+L,ut.__webglTexture,k)}else if(ht){const ut=L;for(let wt=0;wt<I.textures.length;wt++){const Rt=ft.get(I.textures[wt]);R.framebufferTextureLayer(R.FRAMEBUFFER,R.COLOR_ATTACHMENT0+wt,Rt.__webglTexture,k,ut)}}else if(I!==null&&k!==0){const ut=ft.get(I.texture);R.framebufferTexture2D(R.FRAMEBUFFER,R.COLOR_ATTACHMENT0,R.TEXTURE_2D,ut.__webglTexture,k)}E=-1},this.readRenderTargetPixels=function(I,L,k,G,N,K,ht,gt=0){if(!(I&&I.isWebGLRenderTarget)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}let ut=ft.get(I).__webglFramebuffer;if(I.isWebGLCubeRenderTarget&&ht!==void 0&&(ut=ut[ht]),ut){Et.bindFramebuffer(R.FRAMEBUFFER,ut);try{const wt=I.textures[gt],Rt=wt.format,yt=wt.type;if(!jt.textureFormatReadable(Rt)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(!jt.textureTypeReadable(yt)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}L>=0&&L<=I.width-G&&k>=0&&k<=I.height-N&&(I.textures.length>1&&R.readBuffer(R.COLOR_ATTACHMENT0+gt),R.readPixels(L,k,G,N,xt.convert(Rt),xt.convert(yt),K))}finally{const wt=P!==null?ft.get(P).__webglFramebuffer:null;Et.bindFramebuffer(R.FRAMEBUFFER,wt)}}},this.readRenderTargetPixelsAsync=async function(I,L,k,G,N,K,ht,gt=0){if(!(I&&I.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let ut=ft.get(I).__webglFramebuffer;if(I.isWebGLCubeRenderTarget&&ht!==void 0&&(ut=ut[ht]),ut)if(L>=0&&L<=I.width-G&&k>=0&&k<=I.height-N){Et.bindFramebuffer(R.FRAMEBUFFER,ut);const wt=I.textures[gt],Rt=wt.format,yt=wt.type;if(!jt.textureFormatReadable(Rt))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!jt.textureTypeReadable(yt))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");const Gt=R.createBuffer();R.bindBuffer(R.PIXEL_PACK_BUFFER,Gt),R.bufferData(R.PIXEL_PACK_BUFFER,K.byteLength,R.STREAM_READ),I.textures.length>1&&R.readBuffer(R.COLOR_ATTACHMENT0+gt),R.readPixels(L,k,G,N,xt.convert(Rt),xt.convert(yt),0);const $t=P!==null?ft.get(P).__webglFramebuffer:null;Et.bindFramebuffer(R.FRAMEBUFFER,$t);const ue=R.fenceSync(R.SYNC_GPU_COMMANDS_COMPLETE,0);return R.flush(),await vd(R,ue,4),R.bindBuffer(R.PIXEL_PACK_BUFFER,Gt),R.getBufferSubData(R.PIXEL_PACK_BUFFER,0,K),R.deleteBuffer(Gt),R.deleteSync(ue),K}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")},this.copyFramebufferToTexture=function(I,L=null,k=0){const G=Math.pow(2,-k),N=Math.floor(I.image.width*G),K=Math.floor(I.image.height*G),ht=L!==null?L.x:0,gt=L!==null?L.y:0;zt.setTexture2D(I,0),R.copyTexSubImage2D(R.TEXTURE_2D,k,0,0,ht,gt,N,K),Et.unbindTexture()};const JC=R.createFramebuffer(),QC=R.createFramebuffer();this.copyTextureToTexture=function(I,L,k=null,G=null,N=0,K=null){K===null&&(N!==0?(os("WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels."),K=N,N=0):K=0);let ht,gt,ut,wt,Rt,yt,Gt,$t,ue;const se=I.isCompressedTexture?I.mipmaps[K]:I.image;if(k!==null)ht=k.max.x-k.min.x,gt=k.max.y-k.min.y,ut=k.isBox3?k.max.z-k.min.z:1,wt=k.min.x,Rt=k.min.y,yt=k.isBox3?k.min.z:0;else{const ii=Math.pow(2,-N);ht=Math.floor(se.width*ii),gt=Math.floor(se.height*ii),I.isDataArrayTexture?ut=se.depth:I.isData3DTexture?ut=Math.floor(se.depth*ii):ut=1,wt=0,Rt=0,yt=0}G!==null?(Gt=G.x,$t=G.y,ue=G.z):(Gt=0,$t=0,ue=0);const ee=xt.convert(L.format),Mt=xt.convert(L.type);let oe;L.isData3DTexture?(zt.setTexture3D(L,0),oe=R.TEXTURE_3D):L.isDataArrayTexture||L.isCompressedArrayTexture?(zt.setTexture2DArray(L,0),oe=R.TEXTURE_2D_ARRAY):(zt.setTexture2D(L,0),oe=R.TEXTURE_2D),R.pixelStorei(R.UNPACK_FLIP_Y_WEBGL,L.flipY),R.pixelStorei(R.UNPACK_PREMULTIPLY_ALPHA_WEBGL,L.premultiplyAlpha),R.pixelStorei(R.UNPACK_ALIGNMENT,L.unpackAlignment);const Zt=R.getParameter(R.UNPACK_ROW_LENGTH),je=R.getParameter(R.UNPACK_IMAGE_HEIGHT),Ts=R.getParameter(R.UNPACK_SKIP_PIXELS),Je=R.getParameter(R.UNPACK_SKIP_ROWS),sr=R.getParameter(R.UNPACK_SKIP_IMAGES);R.pixelStorei(R.UNPACK_ROW_LENGTH,se.width),R.pixelStorei(R.UNPACK_IMAGE_HEIGHT,se.height),R.pixelStorei(R.UNPACK_SKIP_PIXELS,wt),R.pixelStorei(R.UNPACK_SKIP_ROWS,Rt),R.pixelStorei(R.UNPACK_SKIP_IMAGES,yt);const Ae=I.isDataArrayTexture||I.isData3DTexture,ei=L.isDataArrayTexture||L.isData3DTexture;if(I.isDepthTexture){const ii=ft.get(I),De=ft.get(L),ke=ft.get(ii.__renderTarget),CA=ft.get(De.__renderTarget);Et.bindFramebuffer(R.READ_FRAMEBUFFER,ke.__webglFramebuffer),Et.bindFramebuffer(R.DRAW_FRAMEBUFFER,CA.__webglFramebuffer);for(let Un=0;Un<ut;Un++)Ae&&(R.framebufferTextureLayer(R.READ_FRAMEBUFFER,R.COLOR_ATTACHMENT0,ft.get(I).__webglTexture,N,yt+Un),R.framebufferTextureLayer(R.DRAW_FRAMEBUFFER,R.COLOR_ATTACHMENT0,ft.get(L).__webglTexture,K,ue+Un)),R.blitFramebuffer(wt,Rt,ht,gt,Gt,$t,ht,gt,R.DEPTH_BUFFER_BIT,R.NEAREST);Et.bindFramebuffer(R.READ_FRAMEBUFFER,null),Et.bindFramebuffer(R.DRAW_FRAMEBUFFER,null)}else if(N!==0||I.isRenderTargetTexture||ft.has(I)){const ii=ft.get(I),De=ft.get(L);Et.bindFramebuffer(R.READ_FRAMEBUFFER,JC),Et.bindFramebuffer(R.DRAW_FRAMEBUFFER,QC);for(let ke=0;ke<ut;ke++)Ae?R.framebufferTextureLayer(R.READ_FRAMEBUFFER,R.COLOR_ATTACHMENT0,ii.__webglTexture,N,yt+ke):R.framebufferTexture2D(R.READ_FRAMEBUFFER,R.COLOR_ATTACHMENT0,R.TEXTURE_2D,ii.__webglTexture,N),ei?R.framebufferTextureLayer(R.DRAW_FRAMEBUFFER,R.COLOR_ATTACHMENT0,De.__webglTexture,K,ue+ke):R.framebufferTexture2D(R.DRAW_FRAMEBUFFER,R.COLOR_ATTACHMENT0,R.TEXTURE_2D,De.__webglTexture,K),N!==0?R.blitFramebuffer(wt,Rt,ht,gt,Gt,$t,ht,gt,R.COLOR_BUFFER_BIT,R.NEAREST):ei?R.copyTexSubImage3D(oe,K,Gt,$t,ue+ke,wt,Rt,ht,gt):R.copyTexSubImage2D(oe,K,Gt,$t,wt,Rt,ht,gt);Et.bindFramebuffer(R.READ_FRAMEBUFFER,null),Et.bindFramebuffer(R.DRAW_FRAMEBUFFER,null)}else ei?I.isDataTexture||I.isData3DTexture?R.texSubImage3D(oe,K,Gt,$t,ue,ht,gt,ut,ee,Mt,se.data):L.isCompressedArrayTexture?R.compressedTexSubImage3D(oe,K,Gt,$t,ue,ht,gt,ut,ee,se.data):R.texSubImage3D(oe,K,Gt,$t,ue,ht,gt,ut,ee,Mt,se):I.isDataTexture?R.texSubImage2D(R.TEXTURE_2D,K,Gt,$t,ht,gt,ee,Mt,se.data):I.isCompressedTexture?R.compressedTexSubImage2D(R.TEXTURE_2D,K,Gt,$t,se.width,se.height,ee,se.data):R.texSubImage2D(R.TEXTURE_2D,K,Gt,$t,ht,gt,ee,Mt,se);R.pixelStorei(R.UNPACK_ROW_LENGTH,Zt),R.pixelStorei(R.UNPACK_IMAGE_HEIGHT,je),R.pixelStorei(R.UNPACK_SKIP_PIXELS,Ts),R.pixelStorei(R.UNPACK_SKIP_ROWS,Je),R.pixelStorei(R.UNPACK_SKIP_IMAGES,sr),K===0&&L.generateMipmaps&&R.generateMipmap(oe),Et.unbindTexture()},this.copyTextureToTexture3D=function(I,L,k=null,G=null,N=0){return os('WebGLRenderer: copyTextureToTexture3D function has been deprecated. Use "copyTextureToTexture" instead.'),this.copyTextureToTexture(I,L,k,G,N)},this.initRenderTarget=function(I){ft.get(I).__webglFramebuffer===void 0&&zt.setupRenderTarget(I)},this.initTexture=function(I){I.isCubeTexture?zt.setTextureCube(I,0):I.isData3DTexture?zt.setTexture3D(I,0):I.isDataArrayTexture||I.isCompressedArrayTexture?zt.setTexture2DArray(I,0):zt.setTexture2D(I,0),Et.unbindTexture()},this.resetState=function(){T=0,_=0,P=null,Et.reset(),At.reset()},typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}get coordinateSystem(){return Ii}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(t){this._outputColorSpace=t;const e=this.getContext();e.drawingBufferColorSpace=Xt._getDrawingBufferColorSpace(t),e.unpackColorSpace=Xt._getUnpackColorSpace()}}const Zh={type:"change"},gA={type:"start"},jh={type:"end"},sa=new Gl,Jh=new ln,fC=Math.cos(70*Id.DEG2RAD),xe=new B,ze=2*Math.PI,Kt={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},pA=1e-6;class gC extends hf{constructor(t,e=null){super(t,e),this.state=Kt.NONE,this.target=new B,this.cursor=new B,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.keyRotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"},this.mouseButtons={LEFT:$n.ROTATE,MIDDLE:$n.DOLLY,RIGHT:$n.PAN},this.touches={ONE:ts.ROTATE,TWO:ts.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._domElementKeyEvents=null,this._lastPosition=new B,this._lastQuaternion=new Mn,this._lastTargetPosition=new B,this._quat=new Mn().setFromUnitVectors(t.up,new B(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new gh,this._sphericalDelta=new gh,this._scale=1,this._panOffset=new B,this._rotateStart=new Nt,this._rotateEnd=new Nt,this._rotateDelta=new Nt,this._panStart=new Nt,this._panEnd=new Nt,this._panDelta=new Nt,this._dollyStart=new Nt,this._dollyEnd=new Nt,this._dollyDelta=new Nt,this._dollyDirection=new B,this._mouse=new Nt,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=mC.bind(this),this._onPointerDown=pC.bind(this),this._onPointerUp=CC.bind(this),this._onContextMenu=MC.bind(this),this._onMouseWheel=vC.bind(this),this._onKeyDown=EC.bind(this),this._onTouchStart=yC.bind(this),this._onTouchMove=SC.bind(this),this._onMouseDown=IC.bind(this),this._onMouseMove=xC.bind(this),this._interceptControlDown=bC.bind(this),this._interceptControlUp=TC.bind(this),this.domElement!==null&&this.connect(this.domElement),this.update()}connect(t){super.connect(t),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointercancel",this._onPointerUp),this.domElement.addEventListener("contextmenu",this._onContextMenu),this.domElement.addEventListener("wheel",this._onMouseWheel,{passive:!1}),this.domElement.getRootNode().addEventListener("keydown",this._interceptControlDown,{passive:!0,capture:!0}),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.domElement.removeEventListener("pointercancel",this._onPointerUp),this.domElement.removeEventListener("wheel",this._onMouseWheel),this.domElement.removeEventListener("contextmenu",this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener("keydown",this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction="auto"}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(t){t.addEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=t}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(Zh),this.update(),this.state=Kt.NONE}update(t=null){const e=this.object.position;xe.copy(e).sub(this.target),xe.applyQuaternion(this._quat),this._spherical.setFromVector3(xe),this.autoRotate&&this.state===Kt.NONE&&this._rotateLeft(this._getAutoRotationAngle(t)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let i=this.minAzimuthAngle,n=this.maxAzimuthAngle;isFinite(i)&&isFinite(n)&&(i<-Math.PI?i+=ze:i>Math.PI&&(i-=ze),n<-Math.PI?n+=ze:n>Math.PI&&(n-=ze),i<=n?this._spherical.theta=Math.max(i,Math.min(n,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(i+n)/2?Math.max(i,this._spherical.theta):Math.min(n,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let r=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{const a=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),r=a!=this._spherical.radius}if(xe.setFromSpherical(this._spherical),xe.applyQuaternion(this._quatInverse),e.copy(this.target).add(xe),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let a=null;if(this.object.isPerspectiveCamera){const o=xe.length();a=this._clampDistance(o*this._scale);const l=o-a;this.object.position.addScaledVector(this._dollyDirection,l),this.object.updateMatrixWorld(),r=!!l}else if(this.object.isOrthographicCamera){const o=new B(this._mouse.x,this._mouse.y,0);o.unproject(this.object);const l=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),r=l!==this.object.zoom;const A=new B(this._mouse.x,this._mouse.y,0);A.unproject(this.object),this.object.position.sub(A).add(o),this.object.updateMatrixWorld(),a=xe.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;a!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(a).add(this.object.position):(sa.origin.copy(this.object.position),sa.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(sa.direction))<fC?this.object.lookAt(this.target):(Jh.setFromNormalAndCoplanarPoint(this.object.up,this.target),sa.intersectPlane(Jh,this.target))))}else if(this.object.isOrthographicCamera){const a=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),a!==this.object.zoom&&(this.object.updateProjectionMatrix(),r=!0)}return this._scale=1,this._performCursorZoom=!1,r||this._lastPosition.distanceToSquared(this.object.position)>pA||8*(1-this._lastQuaternion.dot(this.object.quaternion))>pA||this._lastTargetPosition.distanceToSquared(this.target)>pA?(this.dispatchEvent(Zh),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(t){return t!==null?ze/60*this.autoRotateSpeed*t:ze/60/60*this.autoRotateSpeed}_getZoomScale(t){const e=Math.abs(t*.01);return Math.pow(.95,this.zoomSpeed*e)}_rotateLeft(t){this._sphericalDelta.theta-=t}_rotateUp(t){this._sphericalDelta.phi-=t}_panLeft(t,e){xe.setFromMatrixColumn(e,0),xe.multiplyScalar(-t),this._panOffset.add(xe)}_panUp(t,e){this.screenSpacePanning===!0?xe.setFromMatrixColumn(e,1):(xe.setFromMatrixColumn(e,0),xe.crossVectors(this.object.up,xe)),xe.multiplyScalar(t),this._panOffset.add(xe)}_pan(t,e){const i=this.domElement;if(this.object.isPerspectiveCamera){const n=this.object.position;xe.copy(n).sub(this.target);let r=xe.length();r*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*t*r/i.clientHeight,this.object.matrix),this._panUp(2*e*r/i.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(t*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrix),this._panUp(e*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(t){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=t:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(t){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=t:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(t,e){if(!this.zoomToCursor)return;this._performCursorZoom=!0;const i=this.domElement.getBoundingClientRect(),n=t-i.left,r=e-i.top,a=i.width,o=i.height;this._mouse.x=n/a*2-1,this._mouse.y=-(r/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(t){return Math.max(this.minDistance,Math.min(this.maxDistance,t))}_handleMouseDownRotate(t){this._rotateStart.set(t.clientX,t.clientY)}_handleMouseDownDolly(t){this._updateZoomParameters(t.clientX,t.clientX),this._dollyStart.set(t.clientX,t.clientY)}_handleMouseDownPan(t){this._panStart.set(t.clientX,t.clientY)}_handleMouseMoveRotate(t){this._rotateEnd.set(t.clientX,t.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const e=this.domElement;this._rotateLeft(ze*this._rotateDelta.x/e.clientHeight),this._rotateUp(ze*this._rotateDelta.y/e.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(t){this._dollyEnd.set(t.clientX,t.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(t){this._panEnd.set(t.clientX,t.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(t){this._updateZoomParameters(t.clientX,t.clientY),t.deltaY<0?this._dollyIn(this._getZoomScale(t.deltaY)):t.deltaY>0&&this._dollyOut(this._getZoomScale(t.deltaY)),this.update()}_handleKeyDown(t){let e=!1;switch(t.code){case this.keys.UP:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateUp(ze*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),e=!0;break;case this.keys.BOTTOM:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateUp(-ze*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),e=!0;break;case this.keys.LEFT:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateLeft(ze*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),e=!0;break;case this.keys.RIGHT:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateLeft(-ze*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),e=!0;break}e&&(t.preventDefault(),this.update())}_handleTouchStartRotate(t){if(this._pointers.length===1)this._rotateStart.set(t.pageX,t.pageY);else{const e=this._getSecondPointerPosition(t),i=.5*(t.pageX+e.x),n=.5*(t.pageY+e.y);this._rotateStart.set(i,n)}}_handleTouchStartPan(t){if(this._pointers.length===1)this._panStart.set(t.pageX,t.pageY);else{const e=this._getSecondPointerPosition(t),i=.5*(t.pageX+e.x),n=.5*(t.pageY+e.y);this._panStart.set(i,n)}}_handleTouchStartDolly(t){const e=this._getSecondPointerPosition(t),i=t.pageX-e.x,n=t.pageY-e.y,r=Math.sqrt(i*i+n*n);this._dollyStart.set(0,r)}_handleTouchStartDollyPan(t){this.enableZoom&&this._handleTouchStartDolly(t),this.enablePan&&this._handleTouchStartPan(t)}_handleTouchStartDollyRotate(t){this.enableZoom&&this._handleTouchStartDolly(t),this.enableRotate&&this._handleTouchStartRotate(t)}_handleTouchMoveRotate(t){if(this._pointers.length==1)this._rotateEnd.set(t.pageX,t.pageY);else{const i=this._getSecondPointerPosition(t),n=.5*(t.pageX+i.x),r=.5*(t.pageY+i.y);this._rotateEnd.set(n,r)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const e=this.domElement;this._rotateLeft(ze*this._rotateDelta.x/e.clientHeight),this._rotateUp(ze*this._rotateDelta.y/e.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(t){if(this._pointers.length===1)this._panEnd.set(t.pageX,t.pageY);else{const e=this._getSecondPointerPosition(t),i=.5*(t.pageX+e.x),n=.5*(t.pageY+e.y);this._panEnd.set(i,n)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(t){const e=this._getSecondPointerPosition(t),i=t.pageX-e.x,n=t.pageY-e.y,r=Math.sqrt(i*i+n*n);this._dollyEnd.set(0,r),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);const a=(t.pageX+e.x)*.5,o=(t.pageY+e.y)*.5;this._updateZoomParameters(a,o)}_handleTouchMoveDollyPan(t){this.enableZoom&&this._handleTouchMoveDolly(t),this.enablePan&&this._handleTouchMovePan(t)}_handleTouchMoveDollyRotate(t){this.enableZoom&&this._handleTouchMoveDolly(t),this.enableRotate&&this._handleTouchMoveRotate(t)}_addPointer(t){this._pointers.push(t.pointerId)}_removePointer(t){delete this._pointerPositions[t.pointerId];for(let e=0;e<this._pointers.length;e++)if(this._pointers[e]==t.pointerId){this._pointers.splice(e,1);return}}_isTrackingPointer(t){for(let e=0;e<this._pointers.length;e++)if(this._pointers[e]==t.pointerId)return!0;return!1}_trackPointer(t){let e=this._pointerPositions[t.pointerId];e===void 0&&(e=new Nt,this._pointerPositions[t.pointerId]=e),e.set(t.pageX,t.pageY)}_getSecondPointerPosition(t){const e=t.pointerId===this._pointers[0]?this._pointers[1]:this._pointers[0];return this._pointerPositions[e]}_customWheelEvent(t){const e=t.deltaMode,i={clientX:t.clientX,clientY:t.clientY,deltaY:t.deltaY};switch(e){case 1:i.deltaY*=16;break;case 2:i.deltaY*=100;break}return t.ctrlKey&&!this._controlActive&&(i.deltaY*=10),i}}function pC(s){this.enabled!==!1&&(this._pointers.length===0&&(this.domElement.setPointerCapture(s.pointerId),this.domElement.addEventListener("pointermove",this._onPointerMove),this.domElement.addEventListener("pointerup",this._onPointerUp)),!this._isTrackingPointer(s)&&(this._addPointer(s),s.pointerType==="touch"?this._onTouchStart(s):this._onMouseDown(s)))}function mC(s){this.enabled!==!1&&(s.pointerType==="touch"?this._onTouchMove(s):this._onMouseMove(s))}function CC(s){switch(this._removePointer(s),this._pointers.length){case 0:this.domElement.releasePointerCapture(s.pointerId),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.dispatchEvent(jh),this.state=Kt.NONE;break;case 1:const t=this._pointers[0],e=this._pointerPositions[t];this._onTouchStart({pointerId:t,pageX:e.x,pageY:e.y});break}}function IC(s){let t;switch(s.button){case 0:t=this.mouseButtons.LEFT;break;case 1:t=this.mouseButtons.MIDDLE;break;case 2:t=this.mouseButtons.RIGHT;break;default:t=-1}switch(t){case $n.DOLLY:if(this.enableZoom===!1)return;this._handleMouseDownDolly(s),this.state=Kt.DOLLY;break;case $n.ROTATE:if(s.ctrlKey||s.metaKey||s.shiftKey){if(this.enablePan===!1)return;this._handleMouseDownPan(s),this.state=Kt.PAN}else{if(this.enableRotate===!1)return;this._handleMouseDownRotate(s),this.state=Kt.ROTATE}break;case $n.PAN:if(s.ctrlKey||s.metaKey||s.shiftKey){if(this.enableRotate===!1)return;this._handleMouseDownRotate(s),this.state=Kt.ROTATE}else{if(this.enablePan===!1)return;this._handleMouseDownPan(s),this.state=Kt.PAN}break;default:this.state=Kt.NONE}this.state!==Kt.NONE&&this.dispatchEvent(gA)}function xC(s){switch(this.state){case Kt.ROTATE:if(this.enableRotate===!1)return;this._handleMouseMoveRotate(s);break;case Kt.DOLLY:if(this.enableZoom===!1)return;this._handleMouseMoveDolly(s);break;case Kt.PAN:if(this.enablePan===!1)return;this._handleMouseMovePan(s);break}}function vC(s){this.enabled===!1||this.enableZoom===!1||this.state!==Kt.NONE||(s.preventDefault(),this.dispatchEvent(gA),this._handleMouseWheel(this._customWheelEvent(s)),this.dispatchEvent(jh))}function EC(s){this.enabled!==!1&&this._handleKeyDown(s)}function yC(s){switch(this._trackPointer(s),this._pointers.length){case 1:switch(this.touches.ONE){case ts.ROTATE:if(this.enableRotate===!1)return;this._handleTouchStartRotate(s),this.state=Kt.TOUCH_ROTATE;break;case ts.PAN:if(this.enablePan===!1)return;this._handleTouchStartPan(s),this.state=Kt.TOUCH_PAN;break;default:this.state=Kt.NONE}break;case 2:switch(this.touches.TWO){case ts.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchStartDollyPan(s),this.state=Kt.TOUCH_DOLLY_PAN;break;case ts.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchStartDollyRotate(s),this.state=Kt.TOUCH_DOLLY_ROTATE;break;default:this.state=Kt.NONE}break;default:this.state=Kt.NONE}this.state!==Kt.NONE&&this.dispatchEvent(gA)}function SC(s){switch(this._trackPointer(s),this.state){case Kt.TOUCH_ROTATE:if(this.enableRotate===!1)return;this._handleTouchMoveRotate(s),this.update();break;case Kt.TOUCH_PAN:if(this.enablePan===!1)return;this._handleTouchMovePan(s),this.update();break;case Kt.TOUCH_DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchMoveDollyPan(s),this.update();break;case Kt.TOUCH_DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchMoveDollyRotate(s),this.update();break;default:this.state=Kt.NONE}}function MC(s){this.enabled!==!1&&s.preventDefault()}function bC(s){s.key==="Control"&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}function TC(s){s.key==="Control"&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}const Qh={LANGUAGE_CHANGE_CONFIRMED:IA.LANGUAGE_CHANGE_CONFIRMED},wC="data:image/png;base64,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",_C="data:image/png;base64,UklGRoYAAABXRUJQVlA4THkAAAAv+UA+AC+gkG0EOHUEr9Ap3PwrZBsBTh3BK3QKN/+BSFR1N3MHRpEkKVowQA7ojw7Wwd6dfzvM0BH9V9y2bUQtkHd6DEC+U8F/woyNbkMYxsZ/FcF/MU+ojlamjKrn1oZ15b8TAL2Nr9ov0vHKLxBo7gA/SPuGBP8RAA==",RC="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAHgCAYAAABdBwn1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RVh0Q3JlYXRpb24gVGltZQAxMC8xNy8xNGy2A68AAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAAA+3ByVld4nO2UwQnCUBAF18SDYBGxBUvw5DUteBCv6UDswmosQFKCPdiBMShBhJ9NFPYJMkMOgXwcx0c8305Xq6xqWmprzGoDAAAAAAAACGQqBD9+/Pjx48ePHz/+X/vzLJddSf/jWXcm9j7lz56nXkcD7/t+f019nvQL6of2j6539xfVO/2q+vT+gvqh/aPr3f0zTX1/v6y+9/2Prh+zf2S9u7+o3t9fUi/9/x+/f/cwrt7d/00fV+/vL6l33//Ien//+Hp3/4kQ/Pjx48ePHz9+/PgBAAAAAAAAAADgXyltYzvb2sKWv/4q8AGr9mrmFzvuD8WsXBfffs4dJqpYuFnU5g8AAABIbWtCRvreyv4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmkM6EAADslbWtUU3ic7X3bd9tGkj43E8eRfE/2zD7si87Z/Z19SgZ3go+iKEqa6MIhKUfOiw8IArE2tuyRbGW8Ovzff1XV3UCj2QABkqIoG/GMGkDj0viq+qvq6mrw6Jf29c3L/uD8Jpi87B+d35iTbn9HKvr/OD6/scyx1XRG8eTscCe+MSavWPHrQSe+8Q1jsn8wjG8c35j0dwfxTdOa9Aen53BCew/uEfP/Jr3Dw+ubdg/+7GwPr24aG41RI2y8bvQaUeMCts4bbycHx0dQswk1F1BjNn6C2vPGv+CMt5N+52SEN90+pntvQ6PtyJ+0OwfY0PYRtD6Ggt6lPdilkwZdqhvsU9E+pIPtX6jYOeY32O3Sfn9IJ3XbtNftU3HMDg565zctb9Iessohu/twwB5yxO7HioNtbOUxtsqYdE7M8xsfCgtv0zmxqejCQQsKixU2FpNSyPyHDpnGVmMbjn6E/Z9g6y2UQeMKasarxMxcEDPztjB7xDHba1wCLh8ab6DuYyMqxMZh2EQF2BhabMIwg41RgE3oM2xsqzI6psPgCRg8AYPHZ/D4DB5/Muj9Bk8ZTQYDXvZOADU3gAN8oxyALziAO433oFzvAUZQLVA6+UwZTLgxoWm5RWgGJdBUNK0ITUXTguX2ToLQ8zQQDnptVjNgpQzp9xzSNvXH80bIAX3GAR0AmDHo4lajD1uf4Nh4Zq/VYmnGznL7rR3O2W+Dqv02D6PHHKN9OH5J6nYItRe31W8r2IEK2Bi3g82zKWwW1J8lW8q7R+jxVA+bW3vUvlVFf+64bwlK7xA6b0g3shok1WRQLELJWlMGMpeO0lMtSrzXVcfoznmoCCGXIeQyhNyF9GgfyqBx3fh8Ly2ZmfWxXAaTy2AKGEwBg0nvQU3DtJHA9B7I6OMKjXyhyxQ6czKRwaAxGDQGg8Zg0BgMGqMkNM+1GtQhezYCd7OYsdeVi6ylc5EepyEw0TmMae4rTvacOD3mOG3D21+CdW/D30+IC0fre45WOYuG7Zbg8RyGD9XPxMd3Cjocje0khMYLekYWQ8hiCDkMIYch5LABH0o1M+LD16DhChyogqEYNw9B1/4FpPWJDfyKkdQqWjGQZotDaY2KBs8qlJWGz3ODabXKgfmUg7kDCveWQjC/J+GGz4oVQKV8B9vvG++LAzTcDJh2aWfdNJzqdsA1GJLEB4hkXDR6zloCyy+Npe3zcbRtjitjV9yhm2MGnR8y5KIluV9GkftlzWk8y0E2L0D/gH56jmdlAHJcBpA5UnRLRP8MhlFY1FFRLWbrFhGihJPHnQxSqlsAalq3ko46bwftQ+2IOuhFoZqZreXq2XKHi7ejZ99xjH4FW/BRi05TUTHF6SgaTeOlGXysO8eH4nsURG1Pkf6jBK83NCYMQWOCJGwqtGmH7CZSfvF4SMHLtEItYgrhN8PqKuXwWGnAMbPHTmnbOX+nbIvIKTc11ZHsEfl/nD0bpCAZOyUsZywsJ/oTJYFMuI0DST7J8nFE+AbCG0FyY26J2EBkmV8iNvqVIZ7H2dN3cIr658McWtX1NXH1XIvhTH2jJNBmVLqbJyBacQXoHmZjjVUgI3M7cyRGb1tZNSPu1BFUu3yCZKm62QeVtKKIqZtqbzcSzNCCfCZbOs/YLDs0oyHCnBHrMh3Z8rmXQoOSknDZlg4uj8HlMbg81pUZAeLGKFa6MtqY/v6U7s3GcUgzmmHjjyqaVwrIcg6fHknqs2hbRkvXO+JE6qoCyL5Mjowu50H0YeL/BY0/ZkRUfAZni8FJTq8Ep7GoXjoMTdZ7tYqJs6wIqFUAqMsDdeCosshKi+smx9TjoHpOnnomc50CzDjQUmOXEhFwomWIASlNAP0SIN1qHPGtqHFZBt4q2mq6UZmQjN4VWpL36E1NwbdFRCbffSzGbp/c8DfcHX9D7s+ldr6dbCv1dSOjnMwiTymndmRClqhs3CC4VezKQyVmIQ4TiPIVTR2lhNqAlVUwSEnN8Rwu963pmdxXU38buzH5235UAc+HGctysdz55JLhPmM5eUQVumkClpoZ8x0H60STE4NBU3QGcRJ+QIH4gM/wFPNboPUDS3g16HAVBF/CgOFmcfsRWoobOOaeM3M5ZxhkgJ2h53P4fIZfyFONQo5g6Kv2Azf6YmM6aaafbAi3u9fnJrzfF4OYwbRXqRPFpiSKcxofzpoNCarqrLDc6MvM0lhbsdzCERJjQ+KWKbttlhiz4NEul0aXSYMwJtO8TaaZoMZsJDTVjsdANOOZGP6oH/7xWYFyqDbnRLUUD3B/KA6UUDVnAmeUAdXRgeo5emV2+cSly2cuoczG/pln2SdHcjDoc8D5PgJtxqWBfpQMFlfAFfa4FFcoo+yEKgqnAXIcTYc7mg7D1g4ZtlTaVJLKsi6vpQXylhBtUuM+U+uqXDAAWNG7x4yoqzKOpphjEXN/ZhAtOvfHNddV+CBrwtCwDSjvOh9cobhlwRXAmXEy/iEAlXHQE47fr6SGEY9rUIKnMsIsl8+hzP0lXme5aWYM7VR0BhJFJT1fKBykTZ1N4m7pYJ08ebHRP5GwNhjWSgZoeYzLjeItXxtyo+HREhEWg3hbxNvc8gDrPS5bN4intNm8xNpqMFZxWWPe5eNsl4+DJXkAiw6P9Cpq6RBkPqvsZyXRD3WWVYQ9+pwW3zfeKTYJ87svGjFO7OBiAh2GpuswDL0shkEFCD2tHho6CFmwY558CaGF2Qx5i6shlTaVrPd6vPuWBy21NP8Ebykgf6nY0rjzThZW6LjML5K8zgpRX/ChtMEiPN7lx7vsOLmbIiXCbHJObDK7Lbwjstv7zH0qh+nDhpwmV4ymrUNTmb7Ww2mUdzfJhk3r38iZHXpLjLaCJhotBqfFzTZuMIcTBunM4cSNntDLgcCyL+wO8+3LYSrma7vo0+sQHTkZL1P06CpuZuGiF8JQF9LUO0IcU1uHaejrPfgWH8+3eLC95aUa2hexy3aqmSKWqcTjZivmK+roxdYla6FLzT2WwjGrmSNt6qYyDNJalzxvMi8mnJ3F5bCRP5mTT3YKUF2Qof5EPrjwzf/KQXxJ48mQMjyvaO0ahjZxKdEWzfBinn7xLJo2Zsfmy8vOCdmzR/Bhtu+TLzQ9fncqDYe4Ebd5UiOUhDGfy+Djedb9ud5mvE2iXGkg6mfHoRUF8jix+28oPQFDgdFU0osKvjdv8MQsH1lOPHzbqz4dJ9ynWYvj9oXDuT/tcM6C7gGHzm505pgib5bJKy0TXLaz7nqWDMAez62olq8JNe0zf7MKTpspTtC798hl/7MYMa1hL5eKKyAzZ/NnqDXsZqQzQuZKIXuRGOy3lMpXNbKsn9BYHD9KEpJCy4F2eCMQLBPPUM24FkHBh/0kPjzt/ZSFNLEutw/p1NS51uDYLT8bro+1PVkfMlaSEEK9Wup8I3VdcBqo586RHORk6MMLNl1m9r1q4AsKOIHjH8nUz1qGtwwKcMvHkhUFbs12oUTChzK4XBIBPElCGe9pHPQGNJXnvRXDtrxFHkXGxtfmPWNgSoLNqhLHzAOOOZyD6VH5LASfSgj+i6JqWxQ6qowhJVxVWMGQ4OjMjm3M/TkJDF6U8G8oKhQ2NVlGlJNAB8SGcCJ73LvHV2RzcJK7T/H3Sfewc33TlVfgxiSLAQXkzqUlbzHJ4Jg+GPCOpHOaW8Nl0mWAdJkqdplCdXcJtG6/Q6f0+6xunxVnWEy68iiONYgv+MURm9IkueY0t2a+JlmsSVDsJS16Ae0Jkw9QjPlg56P0PYWrpOuHfCoTTVPY+APUVnyuorv3EoA/3mE3P4DtvR5+haXLPrJi0H8TqcoUVfz7K1j3CuuMxe9jznkLUQX7BN0kI7pHXHQ7tCIphF79ViO+PgdxWqPkmvnEZzPx2bX45hDfUy6+PgAUwktjFOV3RYhPE1Hpzjktcc58gg2YYINasHMIdjPplzhBgPZUdu9iafJA1J0W1M0nQIcJ0KkFuEDPZIL4SKG3SwGb0jP155yWOGchyjXNWrJzSDZ1vwL6AFiaHB7z6Slx/DTn+HxSc5nU3FpoCwitR+5mKK1aj3mcQhw/zTk+n9CaTGjNWmgLCK1LwIwTWIRw0uOnOcfnE5rPhObXQptDaE+40Hb5etYPRHqy//KEi0l3xunMM+YTaYuJtFWLdA6RPuQibdNc7FUyQxsni8oukz6oHp1PXCETV1iLaw5xbSSDQuw57Es16ng+rVHH82nNfKIbM9GNa9EtYPF+peTPaMripcdPc47PJ7SICS2qhbbAWL2Xzm0lg4LNxI+U604L6uYTYMwEGGca9jjRpqgxanRIIm9o6k1kIwjtUetPZ9TP10iTR4+x7JgSsN2OldmzM3tOZm/IBLBHQfF5tPW5pK2f4Kw+Lbt4RbkYbLI81VlbqygtwxhZsqIYP7upthUpYsi1KKPQt/WQ5Wn7XDi/UHCWEBbH8pD+OW3LyLCCIA+GcQzV2cqWemUh2kt+0B0jLjR7lzKLaHqOchn2KFUWrpLw9nRNtAw7zDbR+NnyRa05ajXNUbbWSTAyIyeGvUytJyq9IAoNM1vZdPNvbKotUqV4/5p/x7qxwXUDa9DBQxZPtcHRNarVdDxT6RJ20iVGYz9U8PKTWi+0ItPTvk8Uj0fheFqid9OEO5bKJpeK9JkdqJvRS+HdPM/LU3Pf8A10d/Rq7nnMGdKqOV7YjPPUnD04x+g04X8le+laN39N9IH5JNNWUtusAm9AeBGqYBa4z5rw2IA+uXet8JhW4Vp2C9qfp3COhf/yFG7kjuyRmaNwnjetyanCjSP8p8UCldwva9XWuvl3rA2PEm34wGeu8YOq72YzqNowgFSunGKgtN1WkEtAeJ16W38i8U+uz56AUYY+17Xtd6wLX2EUYi6cnkqe4IjGCB/powOqrdFqn2HYvqpDKRmBhrWCZh4ZgQnxCvRv+tJmwaWm2qJSnWetm3/HevEs43skY8ZZY/UiXpIAyCUQvEonv9t6yJqgjEuy3tPqn4+NE/7hhN9nM5XVMgK3lefFaofKC9xnTRg94fGU22fhJOi2uHFlfOIy91liXHm327m+2e1K06kRoXVAidcY1WnD32v6ICtD6QfCD32gd0n6OjufvGP+2xe7vcH1TWdnF//8Qnq424hp5Tl6TQcw+mSLBM/5T0B0dl7CWd9yjwr8QOnaJ2kbkrykSzaC5dd902g2XOWaXZA1aDh9L4CWbkNJ8/T8mn9rGMoV29QnsI+IHxW6oOuukivszBWP6RNkV2D5885Xn5B+vqzDP7kTULqHeP+/NMyGoVz1DO7+lqIoETzvE9lP9oMQ5zQaEc8ylavYaoyMBFOd51c9bPwXoBTjM6ee+5QWaf/JGRllPp66fgOuN6R/diNW3nifelLxHWLpn3qHZxRdxA91A66NLvXGaGY71Hd5IRam0WdjAtJSvQRUmT3K6O0RfQnsoNHhZ/+/xg1oHtZ6IDmUndX4CbaxjbiFx8b0U44+HGtCDWudS2c24a8JNbg3yTx1Q5LZsPEZZZ/Tvk3pzF9pLRn0x6RXmFNnpxqYaLuke7bSizYk3VPbYSk47dMImfGmTs8kKStXDmh16pjko7syT6qbdCVedQIa8r9MRvy6B/Ac9DWvFC55BHh9oukv5BGmDR9z0d1I9EbFVj3zf0BL/4BWdAmFiKzIJUfjBJ70FtBjH996Byi+J/66hGOydp3C+cdsnS5/yiOJh7ckJibirsDZG5yz+/Du+DyUes3QNUPXDP0lM7RXM/S9Y2jJq64ZumbomqG/aIY2a4a+Nwy9yRn6N5L+b/CM32EMVHN0zdE1R3/JHO3UHH1vOFp40RJH1wxdM3TN0F80Q9s1Q98bhn7IGRq/fQfvW7Nzzc41O3/R7KziVLPz+rMzLsu9qH3nmp1rdv7C2dmt2XnN2FnT4+vMu5qza86+c84214Sz68y7VXB22osX4ew6865m6JqhvzaGrjPv7h9D15l3NUPXDP21MHSdeXd/GLrOvKs5uubor4+j68y7+8PRdeZdzdA1Q39tDF1n3t0fhq4z72p2rtn5a2LnOvPu/rFznXlXs3PNzl8DO9eZd+vGzh04C2Ul4Zl8RZGxc/qt19eZs5bJ1rN7TACa32o48G8M9/OX0mOKtUjlh0DJQdrMXD0r11U+l33tM2VhNeYnnzvd42x4G1dhXfmKPI5qrkT3hD5tZXSlqu4Jz4DbyK9O1zwlm2J5uuavQNfQhlhro21PubbJPoHqiX7P9Q3zioH960gBP99SnlD7oqvxRU1Fg74kX9RW2CrfF1X1r44T3C9P9HHKp8DQUj9YgKH78IRzwqVm6Jqh62jBbTC0yro1Q3+pDP0k5dPGuJCjn2VQ3CKdZr97+FYatz3OrPq7u2iBy/tBTD0A+0kT/jlwvugxNmzhL7Ng+4T0fepjMY37sN8sFi1wNbpURwum/QOdtsyje8/IRr6lfpS5W+Nn/DelgQ8agYLWNyD5LFYPoOXF1kTljP8EfWwDFjEhxazja8DkkjgU7emfsP8xwRE1/v+SFjwg/dzCvxU1ftRoQVtC+ItcH5GNcMjyCo3HOAbqewz9Qegonu3DPvaTMZyf1fjvG+M7Hd/Pkug8WrKZ0TlRt2pf0lP0bLaf58zpe92Fv2IRs/qgU6AnxLSoY6h187NvkaV0VqCLer3JauBj4N8x+AmfCMUtSR5M9/4KsrpM/CMu4cbfVC3J4avbYZYXgNR0m17Tu7+HN7lItLa6HtggSxs4ZkTSZba3BXpgZvQA68dwF4N4C611i/zcMXGT6rc+I0aW0SrT1tvRiWryrKYr38nfOFiRLsyW6Bik44JUTS6ln8i/GkPPVUcifmJjUKLoeY3h/wbpw2QFssniVw37FzDWwF9T/xtwI3rvn+iZiCbKdbW980rTgjIa/5zs5u336nHSq60FevVjaOdbamHibyn46Edbm3DdJ8LzrjigjK5U074NGEMLi361Um17Due9pzcI6Spmb1+DFonfttcj+0K57g3XvOkr/0L84RY+Nb161GC/iph/bRnGMkBfIzgHWYmNBE24s6thLKskYz3NwekS2j3KwehZ7lvKV+ne8TH1I2bpyjzpiXR++afkv1OUG88seqf0qvLvlP+kvHcqfspTzVNm6fIz7ZPK6LGKhnhiVouL3qzcFU+1LZzdVzbgTGSud/BX1SCz8ExZLqrHIJ85ja2adySfrb6luQK21nFrNXZ+BPWfKLq3Jd+rZuglMbSZMLRTM3TN0DVDf2UMncevVX3oHZLzNclhlT501fFTlIyf7IXGT4lk6R3eN84pAnE12esBaHu94fXN2eEO/mLyK1ZM0mOW67KjuDFR9IG0cOn3xNmmZd7zkdDVpd71tnyQad2spt2b6RGoZa17q5nfyJsl1cWDH8IbfaC5b3y/zwlL6bIFbnPmbkwa7lBkOKSIcUDz2C0ldow9JsjMddPMPmVsRpq5bpEdgFGCcS5z31bsWCevrMwfwP3x26ZRIuXnPI4ovnO6xVlxG67+gDMda8NoyE02/EXJBTTGDqF0aMZJ9uBcivCXy0+4HUnMxnSWVDapRRd8tpzl/6zK+58tiZhyQAySR0yoxzTHl857GyQJ7CNlfenb6hM6HLPof5vMfTPs0/31wduEupj8SScZuwirPt/Y5XbwTrErxvgpZYTgvC/GW7dE7Up9qB/onUQbhB96qY3yfgMIZjn8x9yr/wll0HibsXDfoFwq2yiUuk25FQ7xnUVPRL5zaH7LJbuFskXdcKGuRX4f6kFMcg9XIvViaRZrwvPGHlz1iWYOzmlO+G604d9pTCK3Q5apkPWnZK78B8D5Z+LA/H/qtyqrxSiMJEZhr10/ny21YqlvJGdvERKXmkzb9WBba43ZVofiLN7F88S80d30tBfErukso8y7aqZUqzJruoC+T/6eB3f2yDeJ+dyxQ3KMiTVNYkeX8pkw6xVHtT6dEUx59rfFmkWyyHJTHmL5mVPGDE143Pitgd9kfXdHWvAczmHPr2p5X2ivXJbVbfH1eKgxXhIjsaj341q9EekPaphH48cR6U5MI0qLxo043liF/uRLMCv5hzxj7ZLyny+StY/Zo+vCviFxKo4mML+LjS1Yxvn02KJ5p+yrIlgG9cfZo2to/UzK3Iwpbsxyb1rUH5pT1k9k1d0V/vlYlpHEM7jjBa2lYTVbSW7kKlnwR+K6tBWvKSZ+Ravgl+FzFt1fx7VuZb7MekvOGntLsyQut+CvBbh9LFqHpcR1jilKjPlEov9vk6XYSmtWrG8BPf81vJ14/mvy47FUs9Dz8qGea++yHH2KSDMMytAdUUQpJJ2xyf6GfDSEf11a6SNyftHqRmS7cTS8Gv7Jk6XKP2zdYTZDXHzV85ieh9o1HVtfdX54mbWGpnLFrLWG6INVy0Kfzvuv1xvW6w0XX2+Yzd+vvx13VysO3RVw87c5ayf0XCy+A7NPb/7+DnhYzQVZBx5WJVWz8H1gYfXLOzUL1yx8V6vZ8lj4O8DpLY0VxsA2YjUMajS72yX1NtTCrcyZ6xIjGVM8sEk9okVjFI/m3dLsEZ/GKBhZbjXkVbD4/5jOXU2MuQyq2XcPk5rp8SBqs4gz2Mo3RDbIknwuuCqmLIFWCV34bi2lHtO8nMOjXiGPB7ekDGK29tkAvSi79vm2VqWtj3x/oMyLz1zr2Grpz7DtcIQw/3KXy132lTCmzazmeuVVopRN6tk+X2Ma05riUSY+7VEWkk3zSfiX7TvEF6vq+0Vozi+jZ8qs1ZBag+3+suTE8gNXE5csRnR+WW2Qh3/JRilfnHzw2Gpm2adRzMrkR8rsO2+wWYgBtOGcb+E4Bz00WSrfp5lo91ImTZBEk3KSmpSbhH898oVcsoirkMk0hlmJPCLsI8ozRj9aZMOKLyT0yPP+SJz4psG+7Ylji2vqV/Kzp/2Pb8mnCqXxuzpOKRcvyPfxZ8kJZ1ciGnPENPrCObqIrhByCsgTaVJPMfgqeYv7LS2owbntVcipGtL439EAhDj5jf72tofXN+2dw/ObODbov0mX7Vku/pt0e4nEv6c5qNfpt1y4rB9IR06njvQ7J6MbuOuwfY7FbpeKwdH5jQV7w/Mbc9Ltd+iUfp/V7bPiDIvJ8Kx9fSMetMeJ+wJe4pfrm197cI5vTPZ5ORz8BveDdxgeQKuHB53zm2Y8dmKaNRqedZdzo8nuWe/6pns0xFfYOaRG9w5hzwM44XQO4DiymmYC53hsudLeyPRNS6pzpLrQjE1T7EWGbRuxtOeke3CdlZ4Jz/Olu0RWK/O8QDrTN3zTTu5p2oF0T98I0jrYc6Uzg6ZnBNKeme7BmY50XWhGmZYFaVsi142MUOzFzXBsOFLd2Bgn17WMsYRSbBtpO2MDXq8pIeFlEAzTp8dWEBhesoeXGlJdK60DlFpSq0emJ+2NLVt6B9OOjEh6P/npzQy6vjc2RsnzzMBJWw11YVoH13lmgsQ4MJ303aOwGRktqS2m1DLPMKTrULNMCTNT0h7LsdJWR01ZDuPQMqTrAtOSnt7yorSdsDeS3oj+m0AHOD6/saEHYH/AntMbHrOOAd3fnGz3DlkxoGJ7hxUdKgbQdyI4s4MX7GFPMiZ/7/3j/MbFcsB2T1jRQ6bY6x5g8fcBnhNAuct2h3i7vw/axCaHPaKRY6S5vcEhHjscnGLRYcXhgGhnZ3CEl+3uDJCLjl9RCw8HtLc/PMKb7A+ZxeuQf4Ds+yeVtPpgctalc8+OqP3DPt0OrsTirLNNN++ewQ0ak+Mj5/oG/iBXUBGzwmSFoRRQdvF84Ex3QgX4G8cDg91rYPLS4qVN5e7xDp433D6k5vR+xeIMX8Sc7LRP6ZydNrHWTnubjna2aa9zdH1z2B3GN8bP7mR40mMb/QN+pH3CNyY7ZwTx5OgYmnd03KF7Tg6OSDi9g0NW4OH/pvW/ZoNlT5uU44LbHm1hdpebWFKPx3k8ylsYU4QUYyk43xyBRKB1k4NDJshXINXD7Vdgu37ZwwOnfdKvQ+6U/wqXjcgMBuTIX04ODwmOowGdd7RDt+kckLB3DtHG7eItd37B47uH+KzJ5OUBvN9LdtJkMvU8gz/vYfoceKaZeZbBnmUWP+vgaC85cHbSpQVurMgudyM7ZVvcUJkRt1S+MFRHO5IhX9IeM35x6LfYtg82yDMX327Go1EY8e3Ijr1lbMex6wd8exwHyf0X2Y7BOqP/ONwmpVDVYrLX71zf7J2coYD2Tl5RMYA9YMO9wStWCg+LkeVeB/zdvQ7pxV7nF6lqr7OPdNV5iY86GZDPdDKg7jnpdXbgsX0gm2Dysn/EPKcdqej/AyjXMsdW0xnFquYcdGKAHzQHu7MDGtPfHcQ3TWvSH5zi7dt7OxKf91BN26nvt0GZIq/B12QRznPp961HNLOHY5keHP8XRkOE19feJiPQ3oZG25E/aXcOsKHtoyOkvvYRvUt7sEsnDYjf2uj+QdGmPtRu/0LFzjG/AfMf231yHNtdAqjdJTZrH7ODAyD+ljdpM4+zPWR3Hw7YQ47Y/VhxsI2tPMZWARucmKChUFh4m86JTUXXRDev07VYYWMxKYXMf+iQoTVqFzSy/ImPaQPKaxmvEjNzQczM28LsEceM+ecfaNU9zr4UYeMwbKICbAwtNmGYwcYowCb0GTbIvRXRAd+M4AkYPAGDx2fw+AwefzLoAY+Ho8lgwEt0eCxwbgYDvlEOwBccwHShKvsgsHymDCbcmNC03CI0gxJoKppWhKaiacFyeydB6HkaCAe9NqsZsFKG9HsOaZv643kjTKKxDFAxg7/V6PMcvPHMXqvF0oyd5fZbO5yz3wZV+20eRo85RvsUsRjz+MPFbfXbCnagAjbG7WDzbAqbBfVnyZby7hF6PNXD5tYetW9V0Z877luC0juEzhvSjawGSTUZFItQstaUgcylo/RUixLvddUxunMeKkLIZQi5DCF3IT3a55GMz/fSkplZH8tlMLkMpoDBFDCY9B7UNEwbCUzvKQ1odUa+0GUKnTmZyGDQGAwag0FjMGgMBo1REprnWg3qkD1j8y73kYuspXORHqchzfZ8uLc42XPi9JjjtA1vz37J9JLWw7xJZmsZWuUsGrZbgsdzGD5UPxMf3ynocDS2kxAaL+gZWQwhiyHkMIQchpDDBnwo1cyID1+DhitwoAqGYtyMs4f/arCvF88iLluraMVAmi0OpTUqGjyrUFYaPs8NptUqB+ZTDuYOTQ6zz2uLcMNnxQq0KdyP6cXviwM03AyYdmln3TSc6nbANRiSxAeIZFw0es5aAssvjaXt83G0bY4rY1fcoZtjBp0fMuSiJblfRpH7Zc1pPMtBNi9A/4B+yrImZIAclwFkjhTdEtE/g2EUFnVUVIvZukWEKOHkcSeDlOoWgJrWraSjzttB+5TzgR30olDNzNZy9Wy5w8Xb0bPvOEY4HfZRi05TUTHF6SgaTeOlGXysO8eH4nsURG1Pkf6jBC+24jikrJ+3ijbtJDO8xeMhBS/TCrWIKYTfDKurlMNjpQHHzB47pW3n/J2yLSKn3NRUR7LHVmDNng1SkIydEpYzFpYT/YmSQCbcxoEkn2T5OCJ8A+GNILkxt0RsILLMLxEb/coQz+Ps6Ts4Rf3zYQ6t6vqauHquxXCmvlESaDMq3c0TEK24AnQPs7HGKpCRuZ05EqO3rayaEXfqCKpdPkGyVN3sg0paUcTUTbW3Gwlml5TI8D75hke1sVl2aEZDhDkj1mU6suVzL4UGJSXhsi0dXB6Dy2NweawrMwLEjVGsdGW0Mf39Kd2bjeOQZjTDxh9VNK8UkOUcPj2S1GfRtoyWrnfEidRVBZB9mRwZXc6D6MPE/wsaf8yIqPgMzhaDk5xeCU5jUb10GJqs92oVE2dZWcprPqAuD9SBo8oiKy2umxxTj4PqOXnqmcx1CjDjQEuNXUpE+EgLIc4bHzQB9EuAdIsn5f9B+VMl4K2iraYblQnJ6F2hJXmP3tQUfFtEZPLdx2Ls9vni2fQnu1TsxHw72Vbq60ZGOZlFnlJO7ciELFHZuEFwq9iVh0rMQqTrjPMVTR2lhNqAlVUwSEnN8Rwu963pmdxXU38buzH5235UAc+HGctysdz55JLhPmM5eUQVumkClpoZ8x0H60STE4NB0/e0qENeODTdR1XYAq0fWMKrQYerIPgSBgw3i9uP0FLcwDH3nJnLOcMgA+wMPZ/D5zP8Qp5qFHIEQ1+1H7jRFxvTSTP9ZEO43b0+N+G4YoMNYgbTXqVOFJuSKNjXFWbNhgRVdVZYbvRlZmmsrVhu4QiJsSFxy5TdNkuMWfBol0ujy6RBGJNp3ibTTFBjNhKaasdjIJrxTAx/1A//+KxAOVSbc6Jaige4PxQHSqiaM4EzyoDq6ED1HL0yu3zi0uUzl1BmY//Ms+yTIzkY9DngfB+BNuPSQD9KBosr4Ap7XIorlFF2QhWF0wA5jqbDHU2HYWuHDFsqbSpJZVmX19ICeUuINqlxn6l1VS4Y8O/1XNBa+hKOpphjEXN/ZhAtOvfHNddV+CBrwtCwDSjvOh9cobhlwRXAmXEy/iEAlXHQE47fr+xrJDyuIf+WzPeJC1omn0OZ+0u8znLTzBjaqegMJIpKer5QOEibOpvE3dLBOnnyYqN/ImFtMKyVDNDyGJcbxVu+NuRGw6MlIiwG8baIt7nlAdZ7XLZuEE9ps3mJtdVgrOKyxrzLx9kuHwdL8gAWHR7pVdTSIch8VtnPSqIf6iyrCHv0OS2+b7xTbBL70Bku7EWrdK7D0HQdhqGXxTCoAKGn1UNDByELdsyTLyG0MJshb3E1pNKmkvVej3ff8qClloZ9w5y+91aodu68k4UVOi7ziySvs0LUF3wobbAIj3f58S47Tu6mSIkwm5wTm8xuC++I7PY+c5/KYfqwIafJFaNp69BUpq/1cBrl3U2yYdP6N3Jmh94So62giUaLwWlxs40bzOGEQTpzOHGjJ/RyILDsC7vDfPtymIr52i79ioAG0ZGT8TJFj67iZhYueiEMdSFNvSPEMbV1mIa+3oNv8fF8iwfbW16qoX0Ru2ynmilimUo8brZivqKOXmxdsha61NxjKRyzmjnSpm4qwyCtdcnzJvNiwtlZXA4b+ZM5+WT4ve6LRvp79+n3OxiI7KsaIWV4XvHfVxNfYemxLyjMmEXTxuzYfHnZOSF79gg+zPZ98oWmx+9OpeEQN+I2T2qEkjDmcxl8PM+6P9fbjLdJlCsNRP3sOLSiQB4ndv8N+/wHfUJETXpRwffmDZ6Y5SPLiYdve9Wn44T7NGtx3L5wOPenHc5Z0D3g0NmNzhxT5M0yeaVlgst21l3PkgHY47kV1fI1oaZ95m9WwWkzxQl6t/iuZCFiWsNeLhVXQGbO5s9Qa9jNSGeEzJVC9iIx2G8pla9qZFk/obE4fpQkJIWWA+3wRiBYJp6hmnEtgoIP+0l8eNr7KQtpYl1uH9KpqXOtwbFbfjZcH2t7sj5krCQhhHq11PlG6rrgNFDPnSM5yMnQhxdsuszse9XAFxTAPg39tsQyvGVQgFs+lqwocGu2CyUSPpTB5ZII4EkSynhP46A39NvLVzPXrJvLW+RRZGx8bd4zBqYk2Kwqccw84JjDOZgelc9C8KmE4L8oqrZFoaPKGFLCVYUVDAmOzuzYxtyfk8DgRQn/hqJCYVOTZUQ5CXRAbAgnsse9e3xFNgcnufsUf590DzvXNyW+4LYBx9VfSjnNrVn0i25deRTHGsQX/OKITWmSXHOaWzNfkyzWJCj2kha9gPaEyQcoxnyw81H6nsJV0vVDPpWJpils/AFqKz5X0d17CcDjh5jw5gewvYdfU4Jt+dM6UpUpqsT3tGD/FdYZi9/HnPMWogr2CbpJRnSPuOh2aEVSSL87MC0+6VdrFfHJNfOJz2bis2vxzSG+p1x8ff5pSPbDoFkhPk1EpTvntMQ58wk2YIINasHOIdjNpF/iBAHaU9m9i6XJA1F3WlA3nwAdJkCnFuACPVP8lM17cpg4bErP1J9zWuKchSgXPxRZS7ayZFP3K6APgKXJ4TGfnhLHT3OOzyc1l0nNrYW2gNB65G6G0qr1mMcpxPHTnOPzCa3JhNashbaA0LoETPqzJ0I46fHTnOPzCc1nQvNroc0htCdcaLt8PesHIj3Zf3nCxaQ743TmGfOJtMVE2qpFOodIH3KRtmku9iqZoY2TRWWXSR9Uj84nrpCJK6zFNYe4NpJBIfYc9qUadTyf1qjj+bRmPtGNmejGtegWsHi/NthnyVWLlx4/zTk+n9AiJrSoFtoCY/VeOreVDAo2Ez9SrjstqJtPgDETYJxp2ONEm/A76h2SyBuaehPZCEJ71PrTGfXzNdLk0WMsO6YEbLdjZfbszJ6T2RsyAexRUHwebX0uaesnOKtPyy5eUS4GmyxPddbWKkrLMEaWrCj4Of1E24oUMeRalFHo23rI8rR9LpxfKDhLCItjeUj/nLZlZFhBkAfDOIbqbGVLvbIQ7SU/6I4RF5q9S5lFND1HuQx7lCoLV0l4e7omWoYdZpto/Gz5otYctZrmKFvrJBiZkRPDXqbWE5VeEIWGma1suvk3NtUWqVK8f82/Y93Y4LqxQz8t9YFYPNUGR9eoVtPxTKVL2EmXGI39UMHLT2q90IpMT/s+UTweheNpid5NE+5YKptcKtJndqBuRi+Fd/M8L0/NfcM30N3Rq7nnMWdIq+Z4YTPOU3P24Byj04T/leyla938NdEH5pNMW0ltswq8AeFFqIJZ4D5rwmMD+uTetcJjWoVr2S1of57CORb+y1O4kTuyR2aOwnnetCanCjeO8J8WC1Ryv6xVW+vm37E2PEq04QOfucYPqr6bzaBqwwBSuXKKgdJ2W0EuAeF16m39icQ/uT57AkYZ+lzXtt+xLnyFUYi5cHoqeYIjGiN8pI8OqLZGq32GYfuqDqVkBBrWCpp5ZAQmxCvQv+lLmwWXmmqLSnWetW7+HevFs4zvkYwZZ43Vi3hJAiCXQPAqnfxu6yFrgjIuyXpPq38+Nk74hxN+n81UVssI3FaeF6sdKi9wnzVh9ITHU26fhZOg2+LGlfGJy9xniXHl3W7n+kb6ge4n5Ne8bhxQ4jVGddqNiPxeMZ36A+GHPtC7JH2dnU/eMf/tC/XHucv99Pa33KPK/vD2k7QNSV7SJRvBJj/13Wy4yjXih8jxewG0dJt+5vottI1d82/Kj4M/oZ/Y+536iPhRoQu67iq5ws5c8Zg+QXYFlj/vfPUJ6efLOvyTOwGle4j3/wv9zLuh/Gj5gPQUPc4jypH8yH8Q4pxGI+JZpnIVW42RkWCq8/yqh43/oh8rN9i/zB2e0iLtPzkjo8zHU9dvwPWG9M9uxMob71NPKr5DLP1T7/CMoosj+pnyq0aXemM0sx3qu7wQC9PoszEBaaleAqrMZv/oe5NqPfqBd/wx95/op2gj2mI/+o4/5ejDsSb96Dv+c+nMJvw1oQb3JpmnbkgyGzY+o+xz2rcpnfkrrSWD/pj0CnPq7FQDE22XdM9WetGGpHtqOywFp30aITPe1OmZJGXlygGtTh2TfHRX5kl1k67Eq05AQ/6XyYhf9wCeg77mlcIljwCvTzT9hTzCtOFjLrobid6o2Kpn/g9o6R/Qii6hEJEVueRonMCT3gJ67ONb7wDF98Rfl3BM1q5TOP+YrdPlT3kk8fCWxMRE3BU4e4Nzdh/eHZ+HUq8ZumbomqG/ZIb2aoa+dwwtedU1Q9cMXTP0F83QZs3Q94ahNzlD/0bS/w2e8TuMgWqOrjm65ugvmaOdmqPvDUcLL1ri6Jqha4auGfqLZmi7Zuh7w9APOUPjt+/gfWt2rtm5Zucvmp1VnGp2Xn92xmW5F7XvXLNzzc5fODu7NTuvGTtrenydeVdzds3Zd87Z5ppwdp15twrOTnvxIpxdZ97VDF0z9NfG0HXm3f1j6DrzrmbomqG/FoauM+/uD0PXmXc1R9cc/fVxdJ15d384us68qxm6ZuivjaHrzLv7w9B15l3NzjU7f03sXGfe3T92rjPvanau2flrYOc6827d2LkDZ6GsJDyTrygydk6/9fo6c9Yy2Xp2jwlA81sNB/6N4X7+UnpMsRap/BAoOUibmatn5brK57KvfaYsrMb85HOne5wNb+MqrCtfkcdRzZXontCnrYyuVNU94RlwG/nV6ZqnZFMsT9f8Fega2hBrbbTtKdc22SdQPdHvub5hXjGwfx0p4OdbyhNqX3Q1vqipaNCX5IvaClvl+6Kq/tVxgvvliT5O+RQYWuoHCzB0H55wTrjUDF0zdB0tuA2GVlm3ZugvlaGfpHzaGBdy9LMMiluk0+x3D99K47bHmVV/dxctcHk/iKkHYD9pwj8Hzhc9xoYt/GUWbJ+Qvk99LKZxH/abxaIFrkaX6mjBtH+g05Z5dO8Z2ci31I8yd2v8jP+mNPBBI1DQ+gYkn8XqAbS82JqonPGfoI9twCImpJh1fA2YXBKHoj39E/Y/Jjiixv9f0oIHpJ9b+Leixo8aLWhLCH+R6yOyEQ5ZXqHxGMdAfY+hPwgdxbN92Md+Mobzsxr/fWN8p+P7WRKdR0s2Mzon6lbtS3qKns3285w5fa+78FcsYlYfdAr0hJgWdQy1bn72LbKUzgp0Ua83WQ18DPw7Bj/hE6G4JcmD6d5fQVaXiX/EJdz4m6olOXx1O8zyApCabtNrevf38CYXidZW1wMbZGkDx4xIusz2tkAPzIweYP0Y7mIQb6G1bpGfOyZuUv3WZ8TIMlpl2no7OlFNntV05Tv5Gwcr0oXZEh2DdFyQqsml9BP5V2PouepIxE9sDEoUPa8x/N8gfZisQDZZ/Kph/wLGGvhr6n8DbkTv/RM9E9FEua62d15pWlBG45+T3bz9Xj1OerW1QK9+DO18Sy1M/C0FH/1oaxOu+0R43hUHlNGVatq3AWNoYdGvVqptz+G89/QGIV3F7O1r0CLx2/Z6ZF8o173hmjd95V+IP9zCp6ZXjxrsVxHzry3DWAboawTnICuxkaAJd3Y1jGWVZKynOThdQrtHORg9y31L+SrdOz6mfsQsXZknPZHOL/+U/HeKcuOZRe+UXlX+nfKflPdOxU95qnnKLF1+pn1SGT1W0RBPzGpx0ZuVu+KptoWz+8oGnInM9Q7+qhpkFp4py0X1GOQzp7FV847ks9W3NFfA1jpurcbOj6D+E0X3tuR71Qy9JIY2E4Z2aoauGbpm6K+MofP4taoPvUNyviY5rNKHrjp+ipLxk73Q+CmRLL3D+8Y5RSCuJns9AG2vN7y+OTvcwV9MfsWKSXrMcl12FDcmij6QFi79njjbtMx7PhK6utS73pYPMq2b1bR7Mz0Ctax1bzXzG3mzpLp48EN4ow80943v9zlhKV22wG3O3I1Jwx2KDIcUMQ5oHrulxI6xxwSZuW6a2aeMzUgz1y2yAzBKMM5l7tuKHevklZX5A7g/fts0SqT8nMcRxXdOtzgrbsPVH3CmY20YDbnJhr8ouYDG2CGUDs04yR6cSxH+cvkJtyOJ2ZjOksomteiCz5az/J9Vef+zJRFTDohB8ogJ9Zjm+NJ5b4MkgX2krC99W31Ch2MW/W+TuW+Gfbq/PnibUBeTP+kkYxdh1ecbu9wO3il2xRg/pYwQnPfFeOuWqF2pD/UDvZNog/BDL7VR3m8AwSyH/5h79T+hDBpvMxbuG5RLZRuFUrcpt8IhvrPoich3Ds1vuWS3ULaoGy7UtcjvQz2ISe7hSqReLM1iTXje2IOrPtHMwTnNCd+NNvw7jUnkdsgyFbL+lMyV/wA4/0wcmP9P/VZltRiFkcQo7LXr57OlViz1jeTsLULiUpNpux5sa60x2+pQnMW7eJ6YN7qbnvaC2DWdZZR5V82UalVmTRfQ98nf8+DOHvkmMZ87dkiOMbGmSezoUj4TZr3iqNanM4Ipz/62WLNIFlluykMsP3PKmKEJjxu/NfCbrO/uSAuewzns+VUt7wvtlcuyui2+Hg81xktiJBb1flyrNyL9QQ3zaPw4It2JaURp0bgRxxur0J98CWYl/5BnrF1S/vNFsvYxe3Rd2DckTsXRBOZ3sbEFyzifHls075R9VQTLoP44e3QNrZ9JmZsxxY1Z7k2L+kNzyvqJrLq7wj8fyzKSeAZ3vKC1NKxmK8mNXCUL/khcl7biNcXEr2gV/DJ8zqL767jWrcyXWW/JWWNvaZbE5Rb8tQC3j0XrsJS4zjFFiTGfSPT/bbIUW2nNivUtoOe/hrcTz39NfjyWahZ6Xj7Uc+1dlqNPEWmGQRm6I4oohaQzNtnfkI+G8K9LK31Ezi9a3YhsN46GV8M/ebLMasF3jR1C9ROce5Xk/mEWNLv7JbEX9p+tzJnrYhHG5P00yQa3SCIeRRnSWLlPEkE/upXJ+cf/x3TuajzqMqhm3z1Maqa1H+cxBKvayorJDeKCzwVXxRQTbZXQhe/WUuoxRSEcbuND7v22pHwJttLDAL0ou9LjtnJw10e+P1Cc+TPXOrY25DNsOxwhnG3e5XKXV3CgB89Whq7XLDJK2aSe7fOM+phWUIwy3rhHcy42jZ7xL9t3iC9W1feL0JxfRs+UMfqQWoPt/rLkxGZDV+OFFSM6v6w2yJ+7ZPPDX5x8nKm1SrcVU5xGMSuTH2ke85yPuQbQhnO+hWv5A5rvTKXyfTrvdi9l0gRJNGkGpkkzMfjXI1/IJYu4CplMY5iVyCPCPqKsCvTXxdy/WA/Wo5HKR+JE3PpAEjonttzKPHva//iWfKpQ8unVL/eVy9TIX8k+S044loxoxBHTDD5GJCK6QsgpIE+kST3F4GuCLO63tKAGI3mrkFM1pNUoBfs6SXYdqfj2/zG1Aceg0xk4q15FWuaLJKZyxawvkmCkttpa1enVwfVXSeqvkiz+VZLsKt/6C9N39V0SdwV8/W3OCms9F4uvRe7Tm7+/Ax5WM8bXgYdVSdUsfB9YWP0+Z83CNQvf1TcvMiw86W0Pr2/aO4fnN3Fs0H+TLtuzXPw36fYSnv6e5p1ep99v4Uz9QDpyOnWk3zkZ3cBdh+1zLHa7VAyOzm8s2Bue35iTbr9Dp/T7rG6fFWdYTIZn7esb8aA9Hr64mBwNfrm++bUH5/jGZJ+Xw8FvcD94h+EBtHp40Dm/acZjJ6aZouFZdzk3muye9a5vukdDfIWdQ2p07xD2PIATTucAjiOraSZwjseWK+2NTN+0pDpHqgvN2DTFXmTYthFLe066B9dZ6ZnwPF+6S2S1Ms8LpDN9wzft5J6mHUj39I0grYM9VzozaHpGIO2Z6R6c6UjXhWaUaVmQtiVy3cgIxV7cDMeGI9WNjXFyXcsYSyjFtpG2Mzbg9ZoSEl4GwTB9emwFgeEle3ipIdW10jpAqSW1emR60t7YsqV3MO3IiKT3k5/ezKDre2NjlDzPDJy01VAXpnVwnWcmSIwD00nfPQqbkdGS2mJKLfMMQ7oONcuUMDMl7bEcK2111JTlMA4tQ7ouMC3p6S0vStsJeyPpjeg/IJLD4/MbG3oA9gfsOb3hMesY0P3NyXbvkBUDKrZ3WNGhYgB9J4IzO3jBHvYkY/L33j/Ob1wsB2z3hBU9ZIq97gEWfx/gOQGUu2x3iLf7+6BNbHLYIxo5hh452Rsc4rHDwSkWHVYcDoh2dgZHeNnuzgC56PgVtfBwQHv7wyO8yf6QxX065Pchm/5JJa04mJx16dyzI2r/sE+3gyuxOOts0827Z3CDxuT4yLm+gT/IFVTErDBZYSgFlF08HzjTnVABHtnxwGD3Gpi8tHhpU7l7vIPnDbcPqTm9X7E4wxcxJzvtUzpnp02stdPepqOdbdrrHF3fHHaH8Y3xszsZnvTYRv+AH2mf8I3JzhlBPDk6huYdHXfonpPe3vEVzg/1GgH5yVvgPx4ckcB6B4eswFP/G/MmKBJo0QxnTPOZDkX4cN4r5jEmtsaBHWtRvGlM+YQGn+sYgZSgxZPDVyDiw+1XYMh+2cPHnPaZtPk44hDu9rnBvvEEkj0kXI6YRhztkF52DkjqO4do7Hbxdju/YPXuITzg4GgvOXB20qUVZ6zIrj8jI2Jb3IqYETcjvrAiRzuSlV3SHrNMcei32LYPBsIzF99uxqNRGPHtyI69ZWzHsesHfHscB8n9F9mOwXSiOzbcBk3A/14egE6+ZPKcTKbUwuRqsQHOVARqt5WqR0Y1TKYaRrFqTD1vsteBYepeZx9Jp/MSzzgZkOdzMqBONvn/3SdMN5s/C5wAAAC+bWtCU3icXU7LDoIwEOzN3/ATAIPgEcrDhq0aqBG8gbEJV02amM3+uy0gB+cyk5mdzcgqNVjUfESfWuAaPepmuolMYxDu6SiURj8KqM4bjY6b62gP0tK29AKCDgxC0hlMq3Kw8bUGR3CSb2QbBqxnH/ZkL7ZlPslmCjnYEs9dk1fOyEEaFLJcjfZcTJtm+lt4ae1sz6OjE/2DVHMfMfZICftRiWzESB+C2KdFh9HQ/3Qf7ParDuOQKFOJQVrwBaemX1kg7QRYAAAAqW1rQlT6zsr+AH36zgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeJztxDEBAAAIAyD7h7PStMUeDkh2AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZV8AAAAAAAAAAAAAAAAAAACArgMFexqrk0pThwAAAKlta0JU+s7K/gB+P24AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHic7cMBDQAACAOg9w9nA7PcIMJGN6mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqft9RVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV1fcPRecIvN7nJ6oAAAFWbWtCVPrOyv4AfyQeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4nO3RMQGAABDEMPyLw9KDixuaITXQu/e5oT/HzvK9/3v+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/nf5n+b/23+t/kPAAAAAAAAAAAAAAAAAAAAsPUB7pD/Bbef1ZAAAAq1bWtCVPrOyv4Af1e6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4nO2djZHbOAxGU0gaSSEpJI2kkBSSRlJIbpCbd/PuC0jJWa8d23gzntXqh6QIEqIAkPr5cxiGYRiGYRiGYRiGYXhJvn///tvvx48f/x27J1WOe5fh2fnw4cNvv69fv/6q99q+Z/1XOaoMw/uBvM/i9vCW/rm7to7Vbyd/rkdXDXs+fvzY1tVK/u7/bH/69OnX32/fvv388uXLf/qi9he1r/IpKi/O5RjnkU79XK7az7Hab/mTdp1baVpf1bFhz0rOnf4vOvl//vz51zb1T/8tuZQMkDkyYj/nVP7IFJnX/mwX9GvOJT+3E9oC5Rv27ORfMvL4r+jkzzHkQn+1DJFztRX3WeTHNeA+vjqGPgDKYz0x7NnJ/6z+T/l37wzoeeRef6stINfatiz9zFjJ33oA6PuVnnXD0HNN+SPXklVd6z5IX/eYwHn4WZLHdroh24n1jOVfbcRpDP9SdeL+c7QfXc1YnG0fp19n+ylZWd4pD/pt5l3XeSyXsqxt2iB6hjHJ6pphGIZhGIZheEUYx9+TR7DXp//zby/vWfLd+h5c6mu6NvWueITL6O1qB8/mZ0id8Jb2vruW9/Od/M/Y8Y98hnme93W+xC69lfz/hv7zFlz+9LNhz8Omjk0m/Xfp28MX5GvpI53PkPokP85d+QNN52+kjFyP/ci+LNsv7d/apZfytx/iUdtAyt9+Nh9zPyl9ic4suSAbbL7s55z0C9hnWCAj7HYF51HntA+T9me3HdoM90KemRby7uzZmV7K33X0qOOBrv8DdWi94L5tP459e12M0C5+yH3Qdl/3/0o763jnb8xnSvbr9Fldkt6z639AtukDLuyrKZnhb3F/Q5b8v5M/fd8+QMf7WJ/Azt+Y8ict/ADk08n/KL1XkT/P9vqbsrG8i/TF2xfn+t7pBvSJ2wm6xboYdv7GlL/P6+RPnMqZ9FL+nNf5w/527FtLP1tBfaU/Lf139u3ltdRt0dWR/X08R8hj5UuElb8xfYi8p3Xl8XjmTHreph4eVf7DMAzDMAzDUGNb7Jv8PD6/Z1w99oAZY78ftn3xs02+iwu9FX/D/MNnZ2fT6vzg1gnoDseE59zA9C1CXuvza19nP8zyoK9GP5yjs6sg/5Xd13YwfHzYjtAb2H89x6dIv1DG7ttn53Pst+Mvx2gf2JHxSQ3HdP3cfhfXe5Hy5/puXqd9gbbvWub4D7p5RJ7rl/PP7LfzNeiI6f/nWMl/pf9XdvD0padPHRsp7SL7sWMwzhzLdlngk9jFCwz/51ry73x+4LlfJS/PBSzO9H9wXIDLybl5zrDnWvIv0MnpOy94hhfW4c5z9fxf6Qa3OT//HatQzNyvNd27XO1bveN5fN7ZAhjD5/XEjTid1M/d+J9nAOT7v8vKsUx75D8MwzAMwzAM5xhf4GszvsDnhj60kuP4Ap8b29zGF/h65BqryfgCX4Od/McX+PxcU/7jC3w8rin/YnyBj8XK5ze+wGEYhmEYhmF4bi61lXTrhhxhfxI/bMT3XkPjld8RdmutrNi9I67g/dx+ZfuQ7in/tDM8M17XB9sbtrnCa/CsZGz5Y3/BJrdqSyubnOVvfyJl8vo8LuPKnmCbwepeKDN6zPLP9uh1Cp/BpmzbKza7+t92tO6bPJmG1xDDr4cNvms3Xf8vbNNjG1tg/U/a9vnQbn291+fymoSr7wuRR8rf646xBprXxHp0kBG4Xnbf5DIpfz87V23GcvU1nfwdb+Rj9h+zn/5Jeuw/+r6Yj5FP7vd6ePeMe7km2Mch+4VluXou/qn8u/2d/NMX1MUi0a/R7aR/9A253TH8FNbz5MHxR2fX/+17K9KPA7eSf9cebPt3PAH9PX1H3b3s2kbGqJBe+ikf9Z2Btux6SR1w5Ee/lfwLr+NL7ACs1pzOe8172cnfZcjvC/uaR5V/kTEy6cfbra/Pca+nmWl1bWYXl5M+vy6/1f7dfayuzevynK5+nmHsPwzDMAzDMAywmlt1tL+bK/A3+FN2cazD7+zm1q32ec6F5wodvT/egpF/j30YtqHlnBpY+ed37cW2kdp2zD/f5bDfqfD3RPD/gY/5WtuT8C1xL5Y/37PxPb/qPBHLzH62jJuHI/3f2eat/9nmuz6209lGa/+M2yJx/vh6sAFyrb9R6G8JOcbEcqYs+IjuraduzVlbOxztp2/mOgEpf0APuC1g16ct2DeL/Ch7zhux36+bU9Ltp936u0CvwrXl3/WfS+TvOR/o7vzWoL/JuJN/Pg86n27BM+kV5wpfW/9fKn/rbXSwY23sw0M+5HGk/1P+tI1Mk/gQxwg8sj/nEjxuoo/Rr24h/8I+Pffn3TzyvDbHfzv548er9HP89+j+3GEYhmEYhmEYhnvgeMuMmVzFf96K3fvqcB1457Y/MNeLvBcj/zWe3+D4eubH0Y+Zg2O/XaazsqF4Dl766myH8ryglQ/QxygT12b5sf86fh+fpsvT2aNeAWygaQ/Fbuc1Gjmvs6kXnlfHz363XDsU2z92/m6Ol+279ueSNmXMcqXf0f2/81ViU352+af+o16591UMTzdPKOl8Oyv5U8/pR/T8NHw/2GbtH7T/0Pe2Kj/Hco6X91d+zzLPb8VO/pbZn8p/pf9T/jn/135kjmGr55jn8u7Wh9zJ320USIs29uxtwFj/W//dSv6F/ZB+znMu4xLaA3mc0f+QbYM02bZP3O3vFXxCHv+tZPye8vf4L+f42QeY/sFiNf7byb/Ief7d+O9V5D8MwzAMwzAMwzAMwzAMwzAMwzAMwzC8LsRQFpd+DwQf/irWzjFAR1zin7/k3EvK8N4Q33JLWP+YtXMyf+KxKN+l8ue6jkrr7LcWujiUjownPuKSWEDilrwOzlGs+1H9GmKj4Npx9I6d8nd4iQvsYvcpk7/r7rhfykt8lY+Rds4XIN7cMeeO1U28NhBrCGWfZS0yx5vv+jX5nzmX8x0/S16ORbqkfok58s+xUe+xrlmu10a5OJbrfxEPTj/lfjs6PUo8l+/b3/6hLex0APG6xJJ5TkHeG8fpZ7v+Q/6OCVzh+0794ljKS+qXcykn6V5L/2dcfuLnMn2bNu191LO/t+HvKbke3G5dT7v7ct4dXhvM97Nqh36GIrfuex9w5rni+TI5d4A2lBzVL9AuHJ96LXbtOvsr/cf/o/OyTXveV5ce/Y/7Slm5r1r3rcrqtaJgJbeMDe3SpGw5j4W8EueV7Z62mRzVr88jT89VeivowVX/Pzvu/RP5c47n3GSafh528eBOt5uHRJ3nNyouWeerGyt2OtN5ZTv0+DjLfaZ+6f/dfIW3sivDkd6FTv45f6Pg3cB9lXtCxp4jdAav6ZjXeO6Q49Wtc49Yyb9rr4xTrB9W7Zv8L9Xnu3VKPW/qDEf9v/A8i9W7TCf/o7LzTKzyOg/kRF2yNtxqrGadmfJnTJjrBHqdL68r2L1be46Z3x26cvDdQ/RNrlnXcaZ+4ehbuxx7j3mLvKOu8s15GgljBch6Qb+n3vS79JHeO9Pud++Eq7GAxzmXrBN6yXN6V7+U+0iunPPs81aHYXgz/wCggvog4L8lowAADtdta0JU+s7K/gB/koEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHic7Z2NkRwpDIUdiBNxIA7EiTgQB+JEHMhe6eo+17tnSUDPz/5Yr2pqZ7tpEBII0IOel5fBYDAYDAaDwWAwGAwGg8HgP/z69evl58+ff3ziOveq5+JzpawAZfj3wf9R6fmK/jN8//795dOnT3984jr3Mnz58uXfzy6+ffv2O++wN2UE9PtHRtT7tJ6Vnk/1vwI20f6u9l/1Ufp2laaT1+3f+Z1dVPKs5ARdGr1epcuuZ+28ez5wauereuvsH+Vr33W5tG97HpoPeQWq/q95ZfWO+58/f/73e+gt0v348eP3vXiGuqgvC0Q6vR7pM0T+nibyiLy5F2WrXkgX1/V56qBpIy9PRx30evyNz6r/x9+vX7/+fu4KOvtzTWXR8iNNlM8zWZ8jPfcy+7sMUZ7bCJvH39CZponvjFtccz1FGp3zOLR9RT6kRxfIqelU7vigC9qyyh3XVB+qZy2f8X3X/vrMFaz8f1Zm1v/pf528gcz+6m+oU1Z37Bx6Vn3RLuKDL9A+qH6BPFZydrpAPsohP/cVVZ39+ZDPy98Z/+8xF7jF/ug8+iP17uSl/pX9fR3iwLbYPf5GWyB//vd+hqz0UdqLQvOhTpku8LcuK+2RuV5lf2TU5738TG8rW1zFLfanHWu77+QNZPZXf4fvzfoofd39j+o27nHd/SS+I7M/etA2lulC06nNaRfI7/bHP/JM/OUZzTeuIeMz7E9fUX3QnwF19e/qbxnfHJoemelb+j2epQ90a6XIi/v4TcD/kcbvISd9LwP1xodkutByMvnJX8dD+of/77Ko/DqXqfTpuh0MBoPBYDAYDDo495fdf83yb8E9uIQrOC3zNH3F257CY+XEpVjPZHGBe2JV/urZFZ/WcZiPwqnOrui44m3vIavGtqtnKs6q8h9VXHq3/Fv5tEdB5dY9E16nK3J18fx7tetMVuXV/P4J51WlPyn/Vj6t0pPzhs4p+h4F53iQhXycA1nprNKBxhW7Zx5pf/TjnFzFeWncXmPmVfrT8m/h0yo9EaMLwLPC8yHzyv7E7VQWlbPTWaUDtT9yZvJn/v/KHpoT+1ecl3PWyr1WHNlu+dT1Kp9W2R/uWPkj5RQ9/8xGyNz9f6oDz6uSf5crW6Eaq+BG9H7FeQVIq1xMl363/Fv5tM5P0oejjGgP9DWe3bW/jhme9lQHp/a/Fepv4BqUd698U2YXrvvcwdOflH8rn9bpKbO3zjsZF7TszEYB5RaztDs6eA3769jJx/fiKS+IT1POC3my61X6k/Jv4dMy3s5lA8opVmUzJ3eulOeRZ0dnmY4970r+rl6DwWAwGAwGg8EKxL6I+ZyCdSBrmFUsqksTc9sd/uce2JE1gG4eWeauLPcG52JYd3sMfwXiH6y/d9Ym3fr1mfsZM65R15SB+E6s8FFldtcfCY9dB6ivxre69q9nY0iv+sue5xnuab2d94p77pf0zEGmM57p9El/8ziGx2iz8nfyymTM0nXXd8vI9LiDVRxJ9+RX53GUg/A4re7V1+dJoz4HnSuXo/FA5eyUD3CZ9BxRxZ/h88hHY/5al6r8nfJcxqrM6vqOvMQbVcYTrOzfnbcEXczS+S/4Ou3/6MrPM2TnO8mrOmdCOchSnY3I9O98R1d+lZfu13cZqzKr6zvyZno8QcePkd+KZ+zsX+l/52wR+fqnyxd50P2Oz9L+nsXis/I9r52zhFWZ1fUdeTM9niAb/5Vb9DZf7fu52v8zXVX9X8vu7O8c9Kr/a95d/6/mf13/17KrMqvrO/Leav+Aji0+huGfdHzp+CuXaTX+q9xu/4Ce4avOn2e6Ws1ZfDz1MU55xax8RTf+a/qqzOr6jrz3sD/1rtb/ei9rm9zXPuQ8ms//PY3OkX1On83luxiBzoX5ngEZ/D7ldeVXea1krMqsrq/SZHocDAaDwWAwGAwq6NxcP1c4wEejksvXHx8Bz+ICWbv7HszVOoL90s9EFWer9mO+ZzyLC8z2MiuyuIDu2dX9/yfrV7UVsTa9nnFu2J97ngdy6HXnIne4PNJUa/TOLpke9FygcqSVvm7lG0/g++/VPlXsj5gTfmOHI1Q/o/Erruueefbve7xR+cIsjyxenXFGHS9Yxft2OLou1qlnE+HXM33tyLjiAk9Q+X/sjwx+biXjaFUH3kc0Dqfn+Chf+4VzbnxXfVRnJnheY+v0kyxG7f2Ftsf5FbDD0a24DvKr9LUr44oLPMHK/yMrfS/jVXc4Qs5SaF/Pyu/k0Xy7MzMhD22Wclw3VTmMberfKHvF0Z1wnZm+dmXc5QJ30Olb+6z6eK/rDkeo77XM+r+O313/37E/Zzv1LOdu39K9A9pvdzi6Xa6z0teV/q/P32J/9//I7uM/+sdPVum8Pfm4Wtlf887G/x37oyO/dmX8P+HodrnOTl9Xxv+ds44VqvW/ct5ZTIDr2m87jhD5sJ/OMbNnsjlwVl6VR7V+PplbX+HodrhOT7dT9x0ZnxUzGAwGg8FgMBi8f8Dn6NrvUbiSt75b4x7vvtfYwAl2ZX9PXBRrXjgA1pSPqAN2PAHrWmJ6uq+y2wdcAY7hFBpP7HCljq8FYha+biR+FvB9rL4Ox2/oepUzGPHRmA1tS+ML6KvjdlXGzv5dXrtptE66D97luFcdQfa7I7T3eI7rlKvpApHmat/KdMT17BwLcQuNszoHo7/PRT3QDXol1oXfcfkpQ2Px1VkBtUXF0e2kcZm0rsp5Ukf9LaErdQwoD0tcD/torFDTESel3Cpe2KGyv16v7K/xcdo9bRI9eXxL8/L4dsWrZfyJ21z9mHLIip00AbWfxx89jpvxe1fquPrdMdL7+wSdOz3dt+XyeBza6xNw+ztvQD76m5TImOkGVFzUjv0rHkOxkwY9Ku+Zyat8mL9H8EodT7hDyuUDV135lhV4jjEus5nvtaAPOV9Fn9CxqeINvf1W/XHH/gH1f8rjKXbSKOeo46DKkX3P7L9bR+UE8fkdd6icn+7HugId2/Tjey3ig2/0vRzcUx1k15Vfy57vzteDyv74MuXUHTtpVCafdyrfznf6h7eZkzoG1Aa6p8fHZ9ettpNT/k+h4wdzzOzeao/d6rrvJVqNW35fy69k6daut6TxsiudnNbx9LnMd13Z/zcYDAaDwWAw+Lug6xhdz9xrHtntSYx1kL4rZadMXasS787Wgu8Bb0Fej+ew7js9R1Khsz+cAOl27K+xFtY7PPcW9HmCtyBvFo8kTu4xG+e0iD0636VQ7lbjFQGedZ+jPLTHIDwmq/y/6jNLq3kTQ6m4GC8X+TSWoxxyxylpPbX+Ki98zo5ekF3LUblO0J0xcY5HuQiNpXc+w7l75ZXhCzxGqvXz843OwVb+n3KyMr1u2d5sb//Yjdinx3yxbbZvm7YCJ+JxYuyt7aLTi8vucp1gZX/s6mVmsf8Vj+g2CjAHqGx6kp9zQd5fsryrGLDuD9J4N7HW7LejKu5VfY3urVKuJfMZK724v0OuE6z8v9tf5wm32p9+SVz9UfbXfrFrf/wGeanPI1+3/2pvB35EeVXlD8CuXqr6nmA1/6OecIy6B+UW+2u57odvtT86pBzVy679yUPHDrW57nfZyQd/rvyfy+s+P9NLds/lOkG2/vN9RTq3yM5fq24cK3vR/nX/wz3sr/O/6txyoLOb93HNk77Ms10+Pv/LZNF9GCu9+PzP5Rp8TLyF9eLg9TD2/7sx/P5gMBgM7oVs/beKZYC39K75jmc6ha7XuvG2ip2eYFfX9ywzy0/jP6u9kQFdl74FXDn7UIH41+5+zVuwo2tP/wj7V/lp7EdjFX7GKeMIHcQtPJ4Od6a8Lv2PM3HMfZUP455/J3aqdfB3JFaxkqxuGpPRduHyKLJysrrC/7iuNY7vMqm9iFM7V7iLyv9rjF/PS9HPlPOtOEIvB93BnWj56EXP1aAflyeLOep3P39LO9J4OvJ4G/C6BTyW7HxAtg/bY7PEz72uFYen+Vb64HnixhUHu2N/9/9A25aOUx53zThCBxyV8nGuw+7/XfujFz2P6TIH9GyPQtNlNlZ9Zfb3uYieravyUv0ot9jpw8vh3glW/t9lyvZaVByh64Q03fsf72F/ZKKtZTIH3pL9K27xWfbP5n/4QvWXuo8Cn1RxhK5T/H/X/wO7/g7flOk8m8Pv+H+tWybPPfx/Zv+OW3yG//cP9fdzsHruUOcpGUfo5ejZwap9e1rXhc4zq7OZbjfFav4XcPtX87/Od2bldPbvuEW/d8/531vHvdc7g/eFsf9gbD8YDAaDwWAwGAwGg8FgMBgMBoPBYPD34RF70dn79JHBfhP/rPa9s8fS32kRYG9M9nmEPnVvqcPfaVxxiexL83x9/wjvANIP+zeeyVN2dTnNR/ft8ansr79jwr4j9tnpPrcsz2pv8K3yd3v11Yb6HhCH1hvdsodM+wT5PattV+jq8sgydV+k9o2s/zjYr5bl6Z9qb54/u9obsmt/3stE+vjf37Gh9n9tvIb9/XcH1D70ww7sI66gfanbyxbX9bdFOqzsT9uhTzs8/6z/c538eZeb7qHUfZsB2pu+a4l9fvqM7rHVfLVNkobvJzgZQ1QX/q6hrG8rqFtXnvqCzPaMvfiGVZnkqe/vUZn1/XIn9ve97lznf60n55J0nFRZuM939IrMei5E86U9qNxXfNPJfnE9X6G+AHmqvk273PHn2dkBzcf3lq/kx49r/gF0p+9iUz0y5vt8pdKxz3m0TtpffU+v7mXX+ZTmkb3bj/bg/fB0TOCcUzafcWBD/+3Mahxm/bQzliPL6dywsz961TEL/+ntSO2v/l33mpPnif31XCLtV8vM3l3l86zK/vxPO74yJ0C+7ONAfnRHG878Orqr/Krne+XddYHK/uo3AW0xixXomVFd31BXnR9W5xsy+1OujuV6Xc+lep/Scx+d/ZHJ29cz0MVdducWke6q3N14d9Ke9N062pc+2nmKwWDwofEPiCRqout3vRYAAAR5bWtCVPrOyv4Af6I2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4nO2aiW3rMBAFXUgaSSEpJI2kkBSSRlKIPzb4YzxsSNmxZPiaBwx0kOKxy0Mitd8rpZRSSimllFJK/df39/f+6+trSoXfg7Iel0z7EulfU1Wf3W435fPzc//6+vpzfst1px5V1i1Vvn95eTnYY+v0r630//v7+y9Kdax6P6P/afvP4P+ZPj4+ftoAcwFto64rjHbBdYXVkfgVzr1ZmnXMOLO0+rN1ThnSP6RXUD7KMUpzpIpXaVb/5/yR/V91S/BFH/+Jz7iIL3KczPmjwohf4ppnS5VXXdexnpnNRVke8mNsyvMsW6afVJxZG0i7VL7P4P8Otpv5/+3t7fCOiH14pvfHTCN9QZsgvNLinPZH/J5WHcs3vJeRXvd9PpNp0p66si3nHPjo/p9p5v/sO32eTEr4sOxY7SbHVMpQ9zP9VN4jr/TfqB1n/67wSh8f1vlsDiAeZeT9J+89itb4P4XNmG/p5/lugO2xYfbr7Jv0vXw3GI0V+T6a/T/HkPRVliXLO6vvEo+irfyPL/Ft9rWeTn8v6ONJjrXZ92bzUdaD/Hp7yPE802TM6TbpZJlu+Tvor9rK/6WyUb4Dlm37e3v3Ne0k/cD7BGnRpnjmFP9nPMYk8iLNXr4lPer8r5RSSimlnlOX2ufNdO9lL/nWlOsgl7BhfRvNvmv699RftfZ5tT+sOdSayWzNeo3S/31tI7/zR9/8S2shrJv082soyznqR/zjMbu/lN7oepbXLK1RvybubM1pVua/iv2y3PsjX9Y88pz2wjO5zp5tJPdeOWcNl3s5JrB3sya82zrLmeuJdY/1Ztaa+rpShfc61r1MK21Xx/QZkFdeox6nxHol90mXve6lMp+j7pdsb6P+z1obtmY/vms09le83Mct6COs860JP1Yv7JdjXv+3IfchEHsZdcy1yrRVptnzGtm3/xNBnNH9kf9HZT5Hff4/xf8Zf/b+kHbinL0Zjvgz/8lYE35qvfqcl3sC+HpUp/RBt09ez/LKsNE+E/ezP3OdeY/KfK628H/fRymfUKY8LzHWMX4yltGe14afUi/CGDf4jwAb074Qc233fx9zco/ymP/5fyLzKPX73f+zMp+rY/7PuR079H6SdS318Sl9g7+Iyzy2Vfgxu2cYtuT9OudhxnDiYue0NXud+DP3KI+Vg39r8SFtJ23KntnI/6Myn/MuyH5b1il9R9/OumKP0VhF3Eyv59f92fvBmnDCluqVYdSDuaT7N+fy0TcYz/fnRnn1MNpA34tMGxM/856Vufe1S2hpvUA9vvS/UkoppZRSSimllFJKXU07EREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREZE75B+Hl45q2TuOnAAAAVNta0JU+s7K/gB/pYUA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a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTNiAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMTAtMTdUMTY6MzI6NTFaPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTQtMTAtMTdUMTU6NTU6MzBaPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxkYzp0aXRsZT4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+RmxhZyBvZiBHZXJtYW55IGljb248L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+UGhpbDIwMDc8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgICAgIDxkYzpkZXNjcmlwdGlvbj4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+T3JpZ2luYWwgYXV0aG9yIGh0dHA6Ly9jb21tb25zLndpa2ltZWRpYS5vcmcvd2lraS9Vc2VyOlNrb3BwIE1vZGlmaWNhdGlvbnMgLSBjb252ZXJ0ZWQgdG8gUE5HPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkFsdD4KICAgICAgICAgPC9kYzpkZXNjcmlwdGlvbj4KICAgICAgICAgPGRjOnJpZ2h0cz4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+aHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMy4wLzwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwvZGM6cmlnaHRzPgogICAgICAgICA8ZGM6c3ViamVjdD4KICAgICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgICAgIDxyZGY6bGk+R2VybWFueTwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpPkdlcm1hbjwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpPmZsYWc8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaT5pY29uPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGk+c21hbGw8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaT5zaGFkb3c8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaT5ib3JkZXI8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaT5wbmc8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QmFnPgogICAgICAgICA8L2RjOnN1YmplY3Q+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iPgogICAgICAgICA8cGhvdG9zaG9wOkNhcHRpb25Xcml0ZXI+RmxhZyBvZiBHZXJtYW55PC9waG90b3Nob3A6Q2FwdGlvbldyaXRlcj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcFJpZ2h0cz0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3JpZ2h0cy8iPgogICAgICAgICA8eG1wUmlnaHRzOk1hcmtlZD5UcnVlPC94bXBSaWdodHM6TWFya2VkPgogICAgICAgICA8eG1wUmlnaHRzOldlYlN0YXRlbWVudD5odHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8zLjAvPC94bXBSaWdodHM6V2ViU3RhdGVtZW50PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pvf+FJgAAAoDSURBVHic7dlBEYAwEATBg8K/NBygJbiYPNKtYL9Te83MGgAAgMC9ewAAAHAOAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkHm+3QsAAIBjeEAAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADICBAAAyFzrnbV7BAAAcAYPCAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAACZH4UyCGm17iMbAAAAAElFTkSuQmCC",PC="data:image/png;base64,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",DC="data:image/png;base64,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",LC="data:image/png;base64,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",NC="data:image/png;base64,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nc9oNkhFaJTlte1c//E+gkcuEC0W4ZFNFWxoP5d0IsmD33x/LuQYisGLW6pIpWeTNWdhWrMpr2hkdk09odCxN+pv2bmDZ5q3cueam4/78wYGBujtbqGQ24/f24PP3U1tTTcXNuXe08jvnfz0tzVs61nA+bM7WX1lFzPecn5xwythHmteyKGRagzD5Jyqfq5ZuosPn5ufWGZ/j5uHNtWza6COqxq3sfpq3T4hcjpRCOVds2042GPR3lHKaDJKwYyAEaFghnC53GRzbgIBP5lsikiJm3wujduVxOdN4TIS1NbEmT+vQGnk5Iz4RETeC4VQREQcTXONioiIoymEIiLiaAqhiIg4mkIoIiKOphCKiIijKYQiIuJoCqGIiDiaQigiIo6mEIqIiKMphCIi4mgKoYiIOJpCKCIijqYQioiIoymEIiLiaAqhiIg4mkIoIiKOphCKiIijGR1E9IR6ERFxLI0IRUTE0RRCERFxNIVQREQcTSEUERFHUwhFRMTRFEIREXE0hVBERBxNIRQREUdTCEVExNEUQhERcTSFUEREHE0hFBERR1MIRUTE0RRCERFxNIVQREQcTSEUERFHUwhFRMTRFEIREXE0hVBERBxNIRQREUdTCEVExNEUQhERcTSFUEREHE0hFBERR1MIRUTE0RRCERFxNIVQREQcTSEUERFHUwhFRMTRFEIREXE0hVBERBxNIRQREUdTCEVExNEUQhERcTSFUEREHE0hFBERR1MIRUTE0RRCERFxNIVQREQcTSEUERFHUwhFRMTRFEIREXE0hVBERBxNIRQREUdTCEVExNEUQhERcTSFUEREHE0hFBERR1MIRUTE0RRCERFxNIVQREQcTSEUERFHUwhFRMTRFEIREXE0hVBERBxNIRQREUdTCEVExNEUQhERcTSFUEREHE0hFBERR1MIRUTE0RRCERFxNIVQREQcTSEUERFHUwhFRMTRFEIREXE0hVBERBxNIRQREUdTCEVExNEUQhERcTSFUEREHE0hFBERR1MIRUTE0RRCERFxtP8HOHUqzzr9sygAAAAASUVORK5CYII=",BC="data:image/png;base64,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",FC="data:image/png;base64,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",OC="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8AAAAKAAgMAAAAul/nQAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACVBMVEUAkkb////OKzdsRJOSAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+kECAABIgHQHmAAAAJ0SURBVHja7c8xAQAACAOglbSkKS2xT2hAUjZlWxZhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh4R/hAzW+Q6qmKxk5AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDI1LTA0LTA4VDAwOjAxOjM0KzAwOjAwSGxLUQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyNS0wNC0wOFQwMDowMTozNCswMDowMDkx8+0AAAAASUVORK5CYII=",UC="data:image/png;base64,UklGRlwEAABXRUJQVlA4TE8EAAAvScE2AH/FuG3bQPvPeu/7NSYK524GBG3bxvwhb/vjuG0jSXL+wc53zxLnn0DSJsHdY0gQDIAAYATANmzC+14Sm/PMYwpAIlJNGQmAFAZSADRQVgKmwOnvgurURFIYmA4kphOUoRlHBJAS0URuymZVcDp1pwQp4yzj5VUfmdIBRkS+/acjGDj9fU74/2MbABRt2zYlSSeUdqBs27Zt27Zt25WsF0jrnd+syrj77tuMiP5PgOT8n/N/zv//SzU8eOKKvZfvv6vxmlWbvJp39y/tXT5hUNixBAYtOP6iTX9z2/Nj8wcGHEl85rl6/eN1Z2bEnUfV7Kud2kO7Hy7r5TCCw853aI/uujkl7CbK13zXLPy2qsw99N6d0SxN70q4hdjOZs3ipm1RdxBZltIsT67NdwQjP6sBPw53AZWH1JDnY/RNqFNj1o7jrnCvGvV0MXEDP6hh3/ajbVxKjZuZzFlgo68G9tczFj6khj4Roavouhr7WiFZxbfU4PfKqCp9rEZ/VEJU4R01/MNimvKuq/GvRUgKnFCAR0napBDXUTTex+BPIqh/WkFmBtJT/EFhvilk54gC3U/OeEXqj6UmVgdFa6qYOatgjxMzUtH6Q2nJ+wRH30dYWa2Al5ISSyH6VcnJToW8hZLezZiaEozsVtA7CClLo0qX87FGYa+kI/Qd19cgG6MU+Ag2LiO7SEa8E1lHlIvFCn0hF3ew3aQi3oWtM8rELAU/jYlz6E4REahHVx3gYZDC78vDQnzzeDiG7wgPL/E9oyHchq8lxMJgtcABLEy0gbEsrLSBpSzss4HdLFyygYssPLCBuyy8t4E3LFTbwA8WUjbgsdBiA80sdNlA198PWmygmYWUDXgsVNvADxbe2cBrFu7ZwG0WLtnARRb22sBuFlbYwFIWJtrAWBYG2UB/FsKt+FpCLMhzfE+ExmP4jvCwAN8cHgbg68NDoA7dTyHyLLoTTMxEN5WJeBe2ziom5Ba2G0LlImzzuYh1IGuv4kIuITsvZI5ENpyN4DdcX4JsyCpcy4TO0hQqr4QP2YVqqxAay2BqjDMi2zBtFkqjHqKGCk5kOaIlQmr4LZ53YVZkOBx/iPB6Cs0RITZai6W6khkZ6SPxxwi3B5HsFXKL3uJ4VcCO9E2h8PoIv+N8DN2jheENGNYIxwcQHBGSI9fMdyXMkhTeNt2tAuG55JHZHhYL08U3TXa3VLguvGauKwXCduiAqY5GhPB1vom61wjnoz3zpCcK633fmOZVH+G9YK9vEv9QkVA/psYc1aOE/YpDvhn801FxgEPfm+DNEHGD4UV12fZrWVicYenaVDY1bq8UpxjfkcqW5NaoOMfSlV+z4cvyEnGSwWHn23tW+9UpIXGXlbOvdvSUrofLEuI6o9NP1fy56pNTq8SR9pt75Fnr72p5enhOX3Gsof7jlu25ePfNTy+jmvF+vrl7Yc/Ssf1DkvN/zv85//8vVQA=",zC="data:image/png;base64,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",kC="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAIVBAMAAADbnobxAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAG1BMVEX///+qveEANKMAOaYAOamOL0vaKhrVKx4AAACnHtw1AAAAAWJLR0QIht6VegAAAAlwSFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB+gHCBEgFNPt/igAAAI2SURBVHja7dFBEYAwAAOwWsACFmYBC1jAwuxPwd7rHYmFJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwN5FldxUyaCKECEIEYIQIQgRghAhCEGIEIQIQYgQhAhBCEKEIEQIQoQgRAhCECIEIUIQIgQhQhCCECEIEYIQIQgRghCECEGIEIQIQYgQhCBECEKEIEQIQoQgBCFCECIEIUIQIgQhCBGCECEIEYIQIQhBiBCECEGIEIQIQYgQhCBECEKEIEQIQoQgBCFCECIEIUIQIgQhCBGCECEIEYIQIQhBiBCECEGIEIQIQQhChCBECEKEIEQIQhAiBCFCECIEIUIQghAhCBGCECEIEYIQhAhBiBCECEGIEIQgRAhChCBECEKEcCDkoUpequSjSiZVhAhBiBCECEGIEIQIQQhChCBECEKEIEQIQhAiBCFCECIEIUIQghAhCBGCECEIEYIQhAhBiBCECEGIEIQgRAhChCBECEKEIAQhQhAiBCFCECIEIQgRghAhCBGCECEIQYgQhAhBiBCECEEIQoQgRAhChCBECEKEIAQhQhAiBCFCECIEIQgRghAhCBGCECEIQYgQhAhBiBCECEEIQoQgRAhChCBECEIQIgQhQhAiBCFCEIIQIQgRghAhCBGCEIQIQYgQhAhBiBCEIEQIQoQgRAhChCAEIUIQIgQhQhAiBCG/twAF+zc5lLr9EAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyNC0wNy0wOFQxNzozMjoxOSswMDowME1J9akAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjQtMDctMDhUMTc6MzI6MTkrMDA6MDA8FE0VAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAABJRU5ErkJggg==",GC="data:image/png;base64,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",HC={[Lt.ENGLISH_UNITED_KINGDOM]:DC,[Lt.ENGLISH_UNITED_STATES]:LC,[Lt.ENGLISH_AUSTRALIA]:PC,[Lt.FRENCH]:BC,[Lt.GERMAN_GERMANY]:RC,[Lt.GERMAN_SWITZERLAND]:_C,[Lt.HINDI_INDIA]:FC,[Lt.ITALIAN]:OC,[Lt.JAPANESE_JAPAN]:UC,[Lt.PORTUGUESE_BRAZILIAN]:wC,[Lt.PORTUGUESE_PORTUGAL]:zC,[Lt.RUSSIAN]:kC,[Lt.SPANISH_SPAIN]:NC,[Lt.CHINESE_CHINA]:GC},VC={languages:[],selected:void 0};class ra extends HTMLElement{static _languagesAttribute="languages";static _selectedAttribute="selected";_shadowRoot;_container;_canvas;_camera;_renderer;_scene;_controls;_resizeObserver;_clock=new lf;_lastTime=0;_lights=[];_spotlight;_flagsGroup;_languages=[];_selectedLanguageIndex=0;_animationFrameId=0;_targetGroupRotation=0;_currentGroupRotation=0;_unwrappedGroupRotation=0;_introCameraStartPosition=new B(0,5,10);_introCameraEndPosition=new B(0,5,10);_introCameraElapsed=0;_introCameraMoveDuration=2.2;_introCameraHoldDuration=.4;_isIntroCameraAnimating=!1;_isIntroCameraHolding=!1;_cameraLookAtY=2;_circleRadius=5;_wind=null;_menuContainer;_menuIntroStartScale=.72;_barMenu;_languageButtons=[];_confirmationDialog;_currentVisibleButtonIndex=0;_isInitialized=!1;_isInitializing=!1;static get observedAttributes(){return["languages","selected"]}constructor(t){super(),this._shadowRoot=this.attachShadow({mode:"open"});const{languages:e,selected:i}={...VC,...t};e.length>0&&this._initializeComponent(e,i)}_initializeComponent(t,e){if(!(this._isInitialized||this._isInitializing)){if(t.length===0){console.warn("LanguagePickerComponent: No languages provided");return}this._isInitializing=!0,this._setupScene(),this._setupUI(),this._setupFlags(t,e),this._setupLanguageDialog(),this._setupEventListeners(),this._isInitialized=!0,this._isInitializing=!1,this.isConnected&&this._animationFrameId===0&&(this._animationFrameId=requestAnimationFrame(this._animate))}}attributeChangedCallback(t,e,i){if(e!==i&&!(this._isInitialized||this._isInitializing)&&t===ra._languagesAttribute&&i!=null)try{const n=JSON.parse(i),r=this.getAttribute(ra._selectedAttribute);Array.isArray(n)&&n.length>0&&this._initializeComponent(n,r)}catch(n){console.error("LanguagePickerComponent: Error parsing languages attribute",n)}}_setupScene(){this._container=document.createElement("div"),this._container.style.width="100%",this._container.style.height="100%",this._container.style.position="relative",this._container.style.overflow="hidden",this._canvas=document.createElement("canvas"),this._canvas.style.width="100%",this._canvas.style.height="100%",this._canvas.style.display="block",this._container.appendChild(this._canvas),this._scene=new Xd,this._scene.background=new Wt(1710618),this._scene.fog=new tA(1710618,8,50),this._camera=new Ze(45,1,.1,100),this._camera.position.set(0,5,10),this._camera.lookAt(0,2,0),this._scene.add(this._camera),this._renderer=new dC({antialias:!0,canvas:this._canvas,alpha:!0}),this._renderer.debug.checkShaderErrors=!0,this._renderer.setPixelRatio(Math.min(window.devicePixelRatio,2)),this._renderer.shadowMap.enabled=!1,this._controls=new gC(this._camera,this._canvas),this._controls.enableDamping=!0,this._controls.dampingFactor=.05,this._controls.autoRotate=!1,this._controls.enableRotate=!1,this._controls.enablePan=!1,this._controls.enableZoom=!1,this._controls.target.set(0,this._cameraLookAtY,0);const e=new of(16777215,.3);this._scene.add(e),this._lights.push(e);const i=new fh(14674943,3);i.position.set(10,20,10),this._scene.add(i),this._lights.push(i);const n=new fh(11329439,.15);n.position.set(0,-1,0),this._scene.add(n),this._lights.push(n),this._spotlight=new rf(16777215,150),this._spotlight.angle=Math.PI/6,this._spotlight.penumbra=.3,this._spotlight.decay=2,this._spotlight.distance=30,this._scene.add(this._spotlight),this._scene.add(this._spotlight.target),this._lights.push(this._spotlight);const r=new ir(100,100),a=new Qd({color:1710618,roughness:.8,metalness:.2}),o=new Ei(r,a);o.rotation.x=-Math.PI/2,o.position.y=0,o.receiveShadow=!0,this._scene.add(o);const l=()=>{const A=this._container.clientWidth,h=this._container.clientHeight;A===0||h===0||(this._camera.aspect=A/h,this._camera.updateProjectionMatrix(),this._renderer.setSize(A,h,!1))};this._resizeObserver=new ResizeObserver(l),this._resizeObserver.observe(this._container),l(),this._wind=new Li.Wind({speed:8,direction:new B(1,0,0)}),this._flagsGroup=new er,this._scene.add(this._flagsGroup),this._shadowRoot.appendChild(this._container)}_setupUI(){this._barMenu=document.createElement(xc.selector),this._barMenu.visibleButtons=1,this._barMenu.cyclicalNavigation=!0,this._menuContainer=document.createElement("div"),this._menuContainer.style.position="absolute",this._menuContainer.style.bottom="25%",this._menuContainer.style.left="50%",this._menuContainer.style.zIndex="9999",this._menuContainer.style.pointerEvents="auto",this._menuContainer.style.transformOrigin="center bottom",this._setMenuIntroScale(1),this._menuContainer.appendChild(this._barMenu),this._shadowRoot.appendChild(this._menuContainer);const t=document.createElement("style");t.textContent=`
|
|
3956
3956
|
:host {
|
|
3957
3957
|
display: block;
|
|
3958
3958
|
width: 100%;
|
|
3959
3959
|
height: 100%;
|
|
3960
3960
|
}
|
|
3961
|
-
`,this._shadowRoot.appendChild(t)}_setupFlags(t,e){const i=t.length;this._circleRadius=Math.max(5,3+i*.5),this._cameraLookAtY=this._circleRadius*.4,t.forEach((
|
|
3961
|
+
`,this._shadowRoot.appendChild(t)}_setupFlags(t,e){const i=t.length;this._circleRadius=Math.max(5,3+i*.5),this._cameraLookAtY=this._circleRadius*.4,t.forEach((A,h)=>{const c=-(h/i*Math.PI*2),u=-Math.sin(c)*this._circleRadius,d=Math.cos(c)*this._circleRadius,p=Li.buildFlag(),m=Li.buildFlagpole({flagpoleType:Li.FLAG_POLE_TYPE.VERTICAL},p),g=new Li.FlagGroup({flagpole:m,flag:p});g.object.position.set(u,0,d);const f=new nf,M=Aa.get(A)?.isoCode,y=M!=null?HC[M]:void 0;y!=null&&f.load(y,T=>{g.setTexture(T)},void 0,()=>{}),this._flagsGroup.add(g.object);const x=Math.random(),w={id:A,flagGroup:g,object:g.object,angle:c,wind:null,windPhase:Math.random()*Math.PI*2,randomSeed:x};this._languages.push(w)});const n=e!=null&&e.length>0?t.indexOf(e):-1,r=n>=0?n:0;if(r>=0&&r<this._languages.length){this._selectedLanguageIndex=r,this._currentVisibleButtonIndex=r;const A=this._languages[r].angle;this._targetGroupRotation=A,this._currentGroupRotation=A,this._unwrappedGroupRotation=A,this._flagsGroup.rotation.y=A}const a=this._computeIntroCameraEndPosition(),o=a.y,l=a.z;this._introCameraEndPosition.copy(a),this._introCameraStartPosition.set(0,o+this._circleRadius*3.1,l+this._circleRadius*4.6),this._camera.position.copy(this._introCameraStartPosition),this._controls.target.set(0,this._cameraLookAtY,0),this._controls.update(),this._introCameraElapsed=0,this._isIntroCameraHolding=!0,this._isIntroCameraAnimating=!0,this._setMenuIntroScale(0),this._spotlight.position.set(0,8,this._circleRadius),this._spotlight.target.position.set(0,0,this._circleRadius),this._spotlight.target.updateMatrixWorld()}_computeIntroCameraEndPosition(){const t=new hs().setFromObject(this._flagsGroup),e=new B,i=new B;t.getSize(e),t.getCenter(i);const n=t.min.y,r=Math.max(e.x,e.y,e.z)*.5,a=this._camera.fov*Math.PI/180,o=this._camera.aspect>0?this._camera.aspect:1,l=2*Math.atan(Math.tan(a*.5)*o),A=r/Math.tan(a*.5),h=r/Math.tan(l*.5),c=Math.max(A,h)*1.05,u=n+e.y*.25,d=u+Math.max(e.y*.8,this._circleRadius*.28);this._cameraLookAtY=u+e.y*.06;const p=i.z+c+this._circleRadius*.01;return new B(0,d,p)}_setupLanguageDialog(){this._confirmationDialog=document.createElement(_A.selector),this._confirmationDialog.id="confirmation-dialog",this._shadowRoot.appendChild(this._confirmationDialog),this._confirmationDialog.addEventListener(_A.COMPONENT_CUSTOM_MESSAGES.CONFIRMATION_DIALOG_CONFIRM,this._handleConfirmation);const t=e=>{const i=this._languages[e];if(i==null)return;this._updateGroupRotationToLanguage(e);const n=Aa.get(i.id);n!=null&&(this._confirmationDialog.value=n.id,this._confirmationDialog.headline="Switch language?",this._confirmationDialog.text=`Are you sure you want to switch the language to ${n.language.toLowerCase()}?`,this._confirmationDialog.showModal())};this._languages.forEach((e,i)=>{const n=document.createElement(Ac.selector);n.textContent=Aa.get(e.id)?.autonyms??e.id,n.addEventListener(sc.CLICK,()=>{t(i)}),this._languageButtons.push(n),this._barMenu.appendChild(n)})}_handleConfirmation=()=>{const t=this._confirmationDialog.value,e=this._languages.findIndex(n=>n.id===t);if(e===-1||e===this._selectedLanguageIndex)return;const i=new CustomEvent(Qh.LANGUAGE_CHANGE_CONFIRMED,{detail:{value:t},bubbles:!0,composed:!0});this.dispatchEvent(i)};_setupEventListeners(){}_checkVisibleButtonChange(){const t=Array.from(this._barMenu.children);for(let e=0;e<t.length;e++){const i=t[e],n=window.getComputedStyle(i);if(n.display!=="none"&&n.visibility!=="hidden"&&n.opacity!=="0"){e!==this._currentVisibleButtonIndex&&(this._currentVisibleButtonIndex=e,this._updateGroupRotationToLanguage(e));break}}}_updateGroupRotationToLanguage(t){const e=this._languages[t].angle,i=2*Math.PI;let n=e;for(;Math.abs(n-this._unwrappedGroupRotation)>Math.PI;)n<this._unwrappedGroupRotation?n+=i:n-=i;this._targetGroupRotation=n,this._unwrappedGroupRotation=n,this._controls.enabled=!1}_updateGroupRotation(){if(this._flagsGroup==null)return;const t=this._targetGroupRotation-this._currentGroupRotation;this._currentGroupRotation+=t*.1,Math.abs(t)<.01&&(this._controls.enabled=!0),this._flagsGroup.rotation.y=this._currentGroupRotation}_updateIntroCamera(t){if(!this._isIntroCameraAnimating)return;if(this._isIntroCameraHolding){this._introCameraElapsed+=t,this._camera.position.copy(this._introCameraStartPosition),this._controls.target.set(0,this._cameraLookAtY,0),this._setMenuIntroScale(0),this._introCameraElapsed>=this._introCameraHoldDuration&&(this._isIntroCameraHolding=!1,this._introCameraElapsed=0);return}this._introCameraElapsed+=t;const e=Math.min(1,this._introCameraElapsed/this._introCameraMoveDuration),i=e*e*(3-2*e),n=1-Math.pow(1-e,4),r=this._introCameraStartPosition.z+(this._introCameraEndPosition.z-this._introCameraStartPosition.z)*i,a=this._introCameraStartPosition.y+(this._introCameraEndPosition.y-this._introCameraStartPosition.y)*n;this._setMenuIntroScale(i),this._camera.position.set(0,a,r),this._controls.target.set(0,this._cameraLookAtY,0),e>=1&&(this._isIntroCameraAnimating=!1,this._camera.position.copy(this._introCameraEndPosition),this._controls.target.set(0,this._cameraLookAtY,0),this._setMenuIntroScale(1))}_setMenuIntroScale(t){if(this._menuContainer==null)return;const e=Math.min(1,Math.max(0,t)),i=this._menuIntroStartScale+(1-this._menuIntroStartScale)*e;this._menuContainer.style.transform=`translateX(-50%) scale(${i})`}_animate=()=>{this._animationFrameId=requestAnimationFrame(this._animate);try{if(!this._isInitialized||this._camera==null||this._renderer==null)return;const t=this._clock.getElapsedTime(),e=t-this._lastTime;this._lastTime=t,this._wind!=null&&this._wind.update(),this._languages.forEach((i,n)=>{if(i.flagGroup!=null){i.windPhase+=e*(.5+i.randomSeed*1.5),Li.applyGravityToCloth(i.flagGroup.flag.cloth,i.flagGroup.flag.object),this._wind!=null&&Li.applyWindForceToCloth(i.flagGroup.flag.cloth,this._wind,i.flagGroup.flag.object,{randomizeAmount:.6,randomSeed:i.randomSeed});const r=.3+Math.sin(i.windPhase)*.2,a=new Li.Wind({speed:r,direction:new B(Math.sin(i.windPhase+n)*.5,Math.cos(i.windPhase*.7),Math.sin(i.windPhase*.5+n)).normalize()});Li.applyWindForceToCloth(i.flagGroup.flag.cloth,a,i.flagGroup.flag.object,{randomizeAmount:.5,randomSeed:i.randomSeed*2}),i.flagGroup.simulate(e),i.flagGroup.render()}}),this._updateGroupRotation(),this._updateIntroCamera(e),this._checkVisibleButtonChange(),this._controls.update(),this._renderer.render(this._scene,this._camera)}catch(t){console.error("Animation loop error:",t),cancelAnimationFrame(this._animationFrameId)}};connectedCallback(){try{this._isInitialized&&(this._animationFrameId=requestAnimationFrame(this._animate))}catch(t){console.error("Failed to start animation:",t)}}disconnectedCallback(){cancelAnimationFrame(this._animationFrameId),this._languages.forEach(t=>{t.flagGroup!=null&&t.flagGroup.destroy(),this._scene.remove(t.object)}),this._lights.forEach(t=>{t.dispose()}),this._scene.clear(),this._renderer.dispose(),this._resizeObserver.disconnect()}addLanguage(t){}addLocales(t){}removeLanguage(t){}removeLocales(t){}selectLanguage(t){}}const WC=Object.freeze(Object.defineProperty({__proto__:null,COMPONENT_CUSTOM_MESSAGES:Qh,LanguagePickerComponent:ra,selector:"as-language-picker"},Symbol.toStringTag,{value:"Module"}));Mi.APPLICATION_NAME=ws,Mi.CUSTOM_MESSAGES=IA,Mi.LanguagePicker=WC,Mi.WebComponentsRegistry=nc,Object.defineProperty(Mi,Symbol.toStringTag,{value:"Module"})}));
|